From a4ac2c9f4fdd38d3471d789fc90c699ab2320270 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 24 May 2022 17:17:56 -0400 Subject: [PATCH 01/25] fix: do not display overlays on mip viewports --- .../src/Viewport/Overlays/CornerstoneOverlays.tsx | 14 ++++++++++++++ .../Cornerstone3DViewportService.ts | 5 +++-- .../src/services/ViewportService/Viewport.ts | 2 ++ extensions/tmtv/src/getHangingProtocolModule.js | 8 ++++++++ modes/tmtv/src/initToolGroups.js | 15 ++++++++++++++- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/extensions/cornerstone-3d/src/Viewport/Overlays/CornerstoneOverlays.tsx b/extensions/cornerstone-3d/src/Viewport/Overlays/CornerstoneOverlays.tsx index 9e1d5891920..318f24574de 100644 --- a/extensions/cornerstone-3d/src/Viewport/Overlays/CornerstoneOverlays.tsx +++ b/extensions/cornerstone-3d/src/Viewport/Overlays/CornerstoneOverlays.tsx @@ -41,6 +41,20 @@ function CornerstoneOverlays(props) { return null; } + if (viewportData) { + const viewportInfo = Cornerstone3DViewportService.getViewportInfoByIndex( + viewportIndex + ); + + if ( + viewportInfo && + viewportInfo.viewportOptions?.customViewportOptions && + viewportInfo.viewportOptions?.customViewportOptions?.hideOverlays + ) { + return null; + } + } + return ( <> ; }; export type PublicViewportOptions = { @@ -30,6 +31,7 @@ export type PublicViewportOptions = { initialView?: string; syncGroups?: SyncGroup[]; initialImageOptions?: InitialImageOptions; + customViewportOptions?: Record; }; export type PublicDisplaySetOptions = { diff --git a/extensions/tmtv/src/getHangingProtocolModule.js b/extensions/tmtv/src/getHangingProtocolModule.js index c1b104c7548..6942ec70fd3 100644 --- a/extensions/tmtv/src/getHangingProtocolModule.js +++ b/extensions/tmtv/src/getHangingProtocolModule.js @@ -558,6 +558,14 @@ const ptCT = { orientation: 'sagittal', background: [1, 1, 1], toolGroupId: 'mipToolGroup', + // Custom props can be used to set custom properties which extensions + // can react on. + customViewportOptions: { + // We use viewportDisplay to filter the viewports which are displayed + // in mip and we set the scrollbar according to their rotation index + // in the cornerstone3D extension. + hideOverlays: true, + }, }, displaySets: [ { diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index d75df25c648..81261e4b3a6 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -61,7 +61,20 @@ function initToolGroups(extensionManager, ToolGroupService) { ], }; - ToolGroupService.createToolGroupAndAddTools(toolGroupIds.MIP, mipTools); + const mipToolGroupConfig = { + [toolNames.VolumeRotateMouseWheel]: { + rotateIncrementDegrees: 0.1, + }, + [toolNames.MipJumpToClick]: { + targetViewportIds: ['ptAXIAL', 'ptCORONAL', 'ptSAGITTAL'], + }, + }; + + ToolGroupService.createToolGroupAndAddTools( + toolGroupIds.MIP, + mipTools, + mipToolGroupConfig + ); } export default initToolGroups; From 9abc82efa920c9d2e99cc3a5260728c5c5fa5f7a Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 24 May 2022 21:34:35 -0400 Subject: [PATCH 02/25] feat: add optional disableCommands for toggle buttons --- .../cornerstone-3d/src/commandsModule.js | 52 ++- .../ToolGroupService/ToolGroupService.ts | 6 + modes/tmtv/src/index.js | 2 +- modes/tmtv/src/initToolGroups.js | 2 +- modes/tmtv/src/toolbarButtons.js | 382 +++++++++--------- .../services/ToolBarService/ToolBarService.js | 10 +- 6 files changed, 257 insertions(+), 197 deletions(-) diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 124e86cf988..86b4dcf1099 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -68,6 +68,51 @@ const commandsModule = ({ servicesManager }) => { viewport.render(); } }, + disableCrosshairs({ toolName, toolGroupId }) { + let toolGroupIdToUse = toolGroupId; + if (!toolGroupIdToUse) { + // Use the active viewport's tool group if no tool group id is provided + const enabledElement = _getActiveViewportEnabledElement(); + + if (!enabledElement) { + return; + } + + const { renderingEngineId, viewportId } = enabledElement; + const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroupForViewport( + viewportId, + renderingEngineId + ); + + if (!toolGroup) { + console.warn( + 'No tool group found for viewportId:', + viewportId, + 'and renderingEngineId:', + renderingEngineId + ); + } + + toolGroupIdToUse = toolGroup.id; + } + const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroup( + toolGroupIdToUse + ); + toolGroup.setToolDisabled(toolName); + + // Get the primary toolId from the ToolBarService and set it to active + // Since it was set to passive if not already active + const primaryActiveTool = ToolBarService.state.primaryToolId; + if ( + toolGroup.toolOptions[primaryActiveTool] && + toolGroup.toolOptions[primaryActiveTool].mode === + cornerstone3DTools.Enums.ToolModes.Passive + ) { + toolGroup.setToolActive(primaryActiveTool, { + bindings: [{ mouseButton: Enums.MouseBindings.Primary }], + }); + } + }, setToolActive: ({ toolName, toolGroupId = null }) => { let toolGroupIdToUse = toolGroupId; if (!toolGroupIdToUse) { @@ -109,8 +154,6 @@ const commandsModule = ({ servicesManager }) => { viewports: [], }; - const toolGroupViewportIds = toolGroup.getViewportIds(); - // iterate over all viewports and set the tool active for the // viewports that belong to the toolGroup for (let index = 0; index < viewports.length; index++) { @@ -288,6 +331,11 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + disableCrosshairs: { + commandFn: actions.disableCrosshairs, + storeContexts: [], + options: {}, + }, rotateViewportCW: { commandFn: actions.rotateViewport, storeContexts: [], diff --git a/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts b/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts index a969ea8b5e0..0bab85c2784 100644 --- a/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts +++ b/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts @@ -174,6 +174,12 @@ export default class ToolGroupService { }); } + if (toolGroupTools.disabled) { + toolGroupTools.disabled.forEach(tool => { + toolNames.push(tool.toolName); + }); + } + return toolNames; } diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 93cc27fbe5d..ca2ac68e86d 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -95,8 +95,8 @@ function modeFactory({ modeConfiguration }) { 'MeasurementTools', 'Zoom', 'WindowLevel', + 'Crosshairs', 'Pan', - 'Capture', 'Layout', 'MoreTools', ]); diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 81261e4b3a6..1228fb10b0d 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -41,7 +41,7 @@ function initToolGroups(extensionManager, ToolGroupService) { { toolName: toolNames.Magnify }, ], // enabled - // disabled + disabled: [{ toolName: toolNames.Crosshairs }], }; ToolGroupService.createToolGroupAndAddTools(toolGroupIds.CT, tools); diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index f7e03445489..cb6118a5d09 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -6,7 +6,7 @@ import { WindowLevelMenuItem, } from '@ohif/ui'; import { defaults } from '@ohif/core'; - +import { toolGroupIds } from './initToolGroups'; const { windowLevelPresets } = defaults; /** * @@ -54,6 +54,17 @@ function _createWwwcPreset(preset, title, subtitle) { }; } +function _createSetToolActive(toolName, toolGroupIds) { + return toolGroupIds.map(toolGroupId => ({ + commandName: 'setToolActive', + commandOptions: { + toolName, + toolGroupId, + }, + context: 'CORNERSTONE3D', + })); +} + const toolbarButtons = [ // Measurement { @@ -68,22 +79,11 @@ const toolbarButtons = [ 'tool-length', 'Length', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Length', - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'SRLength', - toolGroupId: 'SRToolGroup', - }, - // we can use the setToolActive command for this from Cornerstone3D commandsModule - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('Length', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Length' ), @@ -99,22 +99,11 @@ const toolbarButtons = [ 'tool-length', 'Length', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Length', - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'SRLength', - toolGroupId: 'SRToolGroup', - }, - // we can use the setToolActive command for this from Cornerstone3D commandsModule - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('Length', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Length Tool' ), @@ -123,21 +112,11 @@ const toolbarButtons = [ 'tool-bidirectional', 'Bidirectional', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Bidirectional', - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'SRBidirectional', - toolGroupId: 'SRToolGroup', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('Bidirectional', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Bidirectional Tool' ), @@ -146,21 +125,11 @@ const toolbarButtons = [ 'tool-annotate', 'Annotation', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'ArrowAnnotate', - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'SRArrowAnnotate', - toolGroupId: 'SRToolGroup', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('ArrowAnnotate', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Arrow Annotate' ), @@ -169,21 +138,11 @@ const toolbarButtons = [ 'tool-elipse', 'Ellipse', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'EllipticalROI', - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'SREllipticalROI', - toolGroupId: 'SRToolGroup', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('EllipticalROI', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Ellipse Tool' ), @@ -199,13 +158,11 @@ const toolbarButtons = [ icon: 'tool-zoom', label: 'Zoom', commands: [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Zoom', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('Zoom', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], }, }, @@ -220,13 +177,11 @@ const toolbarButtons = [ 'tool-window-level', 'Window Level', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'WindowLevel', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('WindowLevel', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Window Level' ), @@ -247,41 +202,86 @@ const toolbarButtons = [ ], }, }, - // Pan... { - id: 'Pan', + id: 'Crosshairs', type: 'ohif.radioGroup', props: { - type: 'tool', - icon: 'tool-move', - label: 'Pan', - commands: [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Pan', + type: 'toggle', + icon: 'tool-crosshair', + label: 'Crosshairs', + commands: { + // commands that run for toggle state change + defaultCommands: _createSetToolActive('Crosshairs', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), + // optional disableCommands that if defined will run instead of the + // commands specified when the toggle state change to be disabled (inactive, false) + // By default (if disableCommands is not defined) the commands specified above + // will run for both the active and inactive states + disableCommands: [ + { + commandName: 'disableCrosshairs', + commandOptions: { + toolName: 'Crosshairs', + toolGroupId: toolGroupIds.CT, + }, + context: 'CORNERSTONE3D', }, - context: 'CORNERSTONE3D', - }, - ], + { + commandName: 'disableCrosshairs', + commandOptions: { + toolName: 'Crosshairs', + toolGroupId: toolGroupIds.PT, + }, + context: 'CORNERSTONE3D', + }, + { + commandName: 'disableCrosshairs', + commandOptions: { + toolName: 'Crosshairs', + toolGroupId: toolGroupIds.Fusion, + }, + context: 'CORNERSTONE3D', + }, + ], + }, }, }, + // Pan... { - id: 'Capture', - type: 'ohif.action', + id: 'Pan', + type: 'ohif.radioGroup', props: { - icon: 'tool-capture', - label: 'Capture', - type: 'action', + type: 'tool', + icon: 'tool-move', + label: 'Pan', commands: [ - { - commandName: 'showDownloadViewportModal', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('Pan', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], }, }, + // { + // id: 'Capture', + // type: 'ohif.action', + // props: { + // icon: 'tool-capture', + // label: 'Capture', + // type: 'action', + // commands: [ + // { + // commandName: 'showDownloadViewportModal', + // commandOptions: {}, + // context: 'CORNERSTONE3D', + // }, + // ], + // }, + // }, { id: 'Layout', type: 'ohif.layoutSelector', @@ -367,91 +367,89 @@ const toolbarButtons = [ ], 'Stack Scroll' ), - _createActionButton( - 'invert', - 'tool-invert', - 'Invert', - [ - { - commandName: 'invertViewport', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, - ], - 'Invert Colors' - ), + // _createActionButton( + // 'invert', + // 'tool-invert', + // 'Invert', + // [ + // { + // commandName: 'invertViewport', + // commandOptions: {}, + // context: 'CORNERSTONE3D', + // }, + // ], + // 'Invert Colors' + // ), _createToolButton( 'Probe', 'tool-probe', 'Probe', [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'DragProbe', - }, - context: 'CORNERSTONE3D', - }, + ..._createSetToolActive('DragProbe', [ + toolGroupIds.CT, + toolGroupIds.PT, + toolGroupIds.Fusion, + ]), ], 'Probe' ), - _createToggleButton( - 'cine', - 'tool-cine', - 'Cine', - [ - { - commandName: 'toggleCine', - context: 'CORNERSTONE3D', - }, - ], - 'Cine' - ), - _createToolButton( - 'Angle', - 'tool-angle', - 'Angle', - [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Angle', - }, - context: 'CORNERSTONE3D', - }, - ], - 'Angle' - ), - _createToolButton( - 'Magnify', - 'tool-magnify', - 'Magnify', - [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'Magnify', - }, - context: 'CORNERSTONE3D', - }, - ], - 'Magnify' - ), - _createToolButton( - 'Rectangle', - 'tool-rectangle', - 'Rectangle', - [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'RectangleROI', - }, - context: 'CORNERSTONE3D', - }, - ], - 'Rectangle' - ), + // _createToggleButton( + // 'cine', + // 'tool-cine', + // 'Cine', + // [ + // { + // commandName: 'toggleCine', + // context: 'CORNERSTONE3D', + // }, + // ], + // 'Cine' + // ), + // _createToolButton( + // 'Angle', + // 'tool-angle', + // 'Angle', + // [ + // { + // commandName: 'setToolActive', + // commandOptions: { + // toolName: 'Angle', + // }, + // context: 'CORNERSTONE3D', + // }, + // ], + // 'Angle' + // ), + // _createToolButton( + // 'Magnify', + // 'tool-magnify', + // 'Magnify', + // [ + // { + // commandName: 'setToolActive', + // commandOptions: { + // toolName: 'Magnify', + // }, + // context: 'CORNERSTONE3D', + // }, + // ], + // 'Magnify' + // ), + // _createToolButton( + // 'Rectangle', + // 'tool-rectangle', + // 'Rectangle', + // [ + // { + // commandName: 'setToolActive', + // commandOptions: { + // toolName: 'RectangleROI', + // }, + // context: 'CORNERSTONE3D', + // }, + // ], + // 'Rectangle' + // ), ], }, }, diff --git a/platform/core/src/services/ToolBarService/ToolBarService.js b/platform/core/src/services/ToolBarService/ToolBarService.js index b0a8d30666e..d710406a88c 100644 --- a/platform/core/src/services/ToolBarService/ToolBarService.js +++ b/platform/core/src/services/ToolBarService/ToolBarService.js @@ -81,7 +81,15 @@ export default class ToolBarService { this.state.toggles[itemId] === undefined ? true : !this.state.toggles[itemId]; - commands.forEach(({ commandName, commandOptions, context }) => { + + const { commands } = interaction; + + let commandsToUse = commands.defaultCommands; + if (!this.state.toggles[itemId] && commands.disableCommands) { + commandsToUse = commands.disableCommands.slice(); + } + + commandsToUse.forEach(({ commandName, commandOptions, context }) => { if (!commandOptions) { commandOptions = {}; } From 2f89718ddc6e3c5f972ec15b7ed470782cbf06fc Mon Sep 17 00:00:00 2001 From: Alireza Date: Wed, 25 May 2022 10:56:43 -0400 Subject: [PATCH 03/25] fix: toggleCrossharis --- .../cornerstone-3d/src/commandsModule.js | 105 ++++---- modes/tmtv/src/index.js | 5 +- modes/tmtv/src/toolbarButtons.js | 245 +----------------- .../services/ToolBarService/ToolBarService.js | 7 +- 4 files changed, 64 insertions(+), 298 deletions(-) diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 86b4dcf1099..474bb624b3e 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -22,6 +22,40 @@ const commandsModule = ({ servicesManager }) => { return enabledElement; } + function _getToolGroup(toolGroupId) { + let toolGroupIdToUse = toolGroupId; + + if (toolGroupIdToUse === undefined) { + // Use the active viewport's tool group if no tool group id is provided + const enabledElement = _getActiveViewportEnabledElement(); + + if (!enabledElement) { + return; + } + + const { renderingEngineId, viewportId } = enabledElement; + const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroupForViewport( + viewportId, + renderingEngineId + ); + + if (!toolGroup) { + console.warn( + 'No tool group found for viewportId:', + viewportId, + 'and renderingEngineId:', + renderingEngineId + ); + return; + } + + toolGroupIdToUse = toolGroup.id; + } + + const toolGroup = ToolGroupService.getToolGroup(toolGroupIdToUse); + return toolGroup; + } + const actions = { getActiveViewportEnabledElement: () => { return _getActiveViewportEnabledElement(); @@ -68,36 +102,20 @@ const commandsModule = ({ servicesManager }) => { viewport.render(); } }, - disableCrosshairs({ toolName, toolGroupId }) { - let toolGroupIdToUse = toolGroupId; - if (!toolGroupIdToUse) { - // Use the active viewport's tool group if no tool group id is provided - const enabledElement = _getActiveViewportEnabledElement(); - - if (!enabledElement) { - return; - } - - const { renderingEngineId, viewportId } = enabledElement; - const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroupForViewport( - viewportId, - renderingEngineId - ); + toggleCrosshairs({ toolGroupId, toggledState }) { + const toolName = 'Crosshairs'; + // If it is Enabled + if (toggledState) { + actions.setToolActive({ toolName, toolGroupId }); + return; + } - if (!toolGroup) { - console.warn( - 'No tool group found for viewportId:', - viewportId, - 'and renderingEngineId:', - renderingEngineId - ); - } + const toolGroup = _getToolGroup(toolGroupId); - toolGroupIdToUse = toolGroup.id; + if (!toolGroup) { + return; } - const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroup( - toolGroupIdToUse - ); + toolGroup.setToolDisabled(toolName); // Get the primary toolId from the ToolBarService and set it to active @@ -114,34 +132,7 @@ const commandsModule = ({ servicesManager }) => { } }, setToolActive: ({ toolName, toolGroupId = null }) => { - let toolGroupIdToUse = toolGroupId; - if (!toolGroupIdToUse) { - // Use the active viewport's tool group if no tool group id is provided - const enabledElement = _getActiveViewportEnabledElement(); - - if (!enabledElement) { - return; - } - - const { renderingEngineId, viewportId } = enabledElement; - const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroupForViewport( - viewportId, - renderingEngineId - ); - - if (!toolGroup) { - console.warn( - 'No tool group found for viewportId:', - viewportId, - 'and renderingEngineId:', - renderingEngineId - ); - } - - toolGroupIdToUse = toolGroup.id; - } - - const toolGroup = ToolGroupService.getToolGroup(toolGroupIdToUse); + const toolGroup = _getToolGroup(toolGroupId); if (!toolGroup) { console.warn('No tool group found for toolGroupId:', toolGroupId); @@ -331,8 +322,8 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, - disableCrosshairs: { - commandFn: actions.disableCrosshairs, + toggleCrosshairs: { + commandFn: actions.toggleCrosshairs, storeContexts: [], options: {}, }, diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index ca2ac68e86d..0862a54e304 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -8,7 +8,6 @@ const ohif = { sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', hangingProtocols: '@ohif/extension-default.hangingProtocolModule.default', measurements: '@ohif/extension-default.panelModule.measure', - thumbnailList: '@ohif/extension-default.panelModule.seriesList', }; const cs3d = { @@ -97,8 +96,6 @@ function modeFactory({ modeConfiguration }) { 'WindowLevel', 'Crosshairs', 'Pan', - 'Layout', - 'MoreTools', ]); }, onModeExit: ({ servicesManager }) => { @@ -139,7 +136,7 @@ function modeFactory({ modeConfiguration }) { return { id: ohif.layout, props: { - leftPanels: [ohif.thumbnailList], + leftPanels: [], rightPanels: [ohif.measurements], viewports: [ { diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index cb6118a5d09..bb60f85ab8a 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -54,9 +54,10 @@ function _createWwwcPreset(preset, title, subtitle) { }; } -function _createSetToolActive(toolName, toolGroupIds) { +function _createCommands(commandName, toolName, toolGroupIds) { return toolGroupIds.map(toolGroupId => ({ - commandName: 'setToolActive', + /* It's a command that is being run when the button is clicked. */ + commandName, commandOptions: { toolName, toolGroupId, @@ -79,7 +80,7 @@ const toolbarButtons = [ 'tool-length', 'Length', [ - ..._createSetToolActive('Length', [ + ..._createCommands('setToolActive', 'Length', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -99,7 +100,7 @@ const toolbarButtons = [ 'tool-length', 'Length', [ - ..._createSetToolActive('Length', [ + ..._createCommands('setToolActive', 'Length', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -112,7 +113,7 @@ const toolbarButtons = [ 'tool-bidirectional', 'Bidirectional', [ - ..._createSetToolActive('Bidirectional', [ + ..._createCommands('setToolActive', 'Bidirectional', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -125,7 +126,7 @@ const toolbarButtons = [ 'tool-annotate', 'Annotation', [ - ..._createSetToolActive('ArrowAnnotate', [ + ..._createCommands('setToolActive', 'ArrowAnnotate', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -138,7 +139,7 @@ const toolbarButtons = [ 'tool-elipse', 'Ellipse', [ - ..._createSetToolActive('EllipticalROI', [ + ..._createCommands('setToolActive', 'EllipticalROI', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -158,7 +159,7 @@ const toolbarButtons = [ icon: 'tool-zoom', label: 'Zoom', commands: [ - ..._createSetToolActive('Zoom', [ + ..._createCommands('setToolActive', 'Zoom', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -177,7 +178,7 @@ const toolbarButtons = [ 'tool-window-level', 'Window Level', [ - ..._createSetToolActive('WindowLevel', [ + ..._createCommands('setToolActive', 'WindowLevel', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -209,44 +210,13 @@ const toolbarButtons = [ type: 'toggle', icon: 'tool-crosshair', label: 'Crosshairs', - commands: { - // commands that run for toggle state change - defaultCommands: _createSetToolActive('Crosshairs', [ + commands: [ + ..._createCommands('toggleCrosshairs', 'Crosshairs', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, ]), - // optional disableCommands that if defined will run instead of the - // commands specified when the toggle state change to be disabled (inactive, false) - // By default (if disableCommands is not defined) the commands specified above - // will run for both the active and inactive states - disableCommands: [ - { - commandName: 'disableCrosshairs', - commandOptions: { - toolName: 'Crosshairs', - toolGroupId: toolGroupIds.CT, - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'disableCrosshairs', - commandOptions: { - toolName: 'Crosshairs', - toolGroupId: toolGroupIds.PT, - }, - context: 'CORNERSTONE3D', - }, - { - commandName: 'disableCrosshairs', - commandOptions: { - toolName: 'Crosshairs', - toolGroupId: toolGroupIds.Fusion, - }, - context: 'CORNERSTONE3D', - }, - ], - }, + ], }, }, // Pan... @@ -258,7 +228,7 @@ const toolbarButtons = [ icon: 'tool-move', label: 'Pan', commands: [ - ..._createSetToolActive('Pan', [ + ..._createCommands('setToolActive', 'Pan', [ toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion, @@ -266,193 +236,6 @@ const toolbarButtons = [ ], }, }, - // { - // id: 'Capture', - // type: 'ohif.action', - // props: { - // icon: 'tool-capture', - // label: 'Capture', - // type: 'action', - // commands: [ - // { - // commandName: 'showDownloadViewportModal', - // commandOptions: {}, - // context: 'CORNERSTONE3D', - // }, - // ], - // }, - // }, - { - id: 'Layout', - type: 'ohif.layoutSelector', - }, - // More... - { - id: 'MoreTools', - type: 'ohif.splitButton', - props: { - isRadio: true, // ? - groupId: 'MoreTools', - primary: _createActionButton( - 'Reset', - 'tool-reset', - 'Reset View', - [ - { - commandName: 'resetViewport', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, - ], - 'Reset' - ), - secondary: { - icon: 'chevron-down', - label: '', - isActive: true, - tooltip: 'More Tools', - }, - items: [ - _createActionButton( - 'Reset', - 'tool-reset', - 'Reset View', - [ - { - commandName: 'resetViewport', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, - ], - 'Reset' - ), - _createActionButton( - 'rotate-right', - 'tool-rotate-right', - 'Rotate Right', - [ - { - commandName: 'rotateViewportCW', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, - ], - 'Rotate +90' - ), - _createActionButton( - 'flip-horizontal', - 'tool-flip-horizontal', - 'Flip Horizontally', - [ - { - commandName: 'flipViewportHorizontal', - commandOptions: {}, - context: 'CORNERSTONE3D', - }, - ], - 'Flip Horizontal' - ), - _createToolButton( - 'StackScroll', - 'tool-stack-scroll', - 'Stack Scroll', - [ - { - commandName: 'setToolActive', - commandOptions: { - toolName: 'StackScroll', - }, - context: 'CORNERSTONE3D', - }, - ], - 'Stack Scroll' - ), - // _createActionButton( - // 'invert', - // 'tool-invert', - // 'Invert', - // [ - // { - // commandName: 'invertViewport', - // commandOptions: {}, - // context: 'CORNERSTONE3D', - // }, - // ], - // 'Invert Colors' - // ), - _createToolButton( - 'Probe', - 'tool-probe', - 'Probe', - [ - ..._createSetToolActive('DragProbe', [ - toolGroupIds.CT, - toolGroupIds.PT, - toolGroupIds.Fusion, - ]), - ], - 'Probe' - ), - // _createToggleButton( - // 'cine', - // 'tool-cine', - // 'Cine', - // [ - // { - // commandName: 'toggleCine', - // context: 'CORNERSTONE3D', - // }, - // ], - // 'Cine' - // ), - // _createToolButton( - // 'Angle', - // 'tool-angle', - // 'Angle', - // [ - // { - // commandName: 'setToolActive', - // commandOptions: { - // toolName: 'Angle', - // }, - // context: 'CORNERSTONE3D', - // }, - // ], - // 'Angle' - // ), - // _createToolButton( - // 'Magnify', - // 'tool-magnify', - // 'Magnify', - // [ - // { - // commandName: 'setToolActive', - // commandOptions: { - // toolName: 'Magnify', - // }, - // context: 'CORNERSTONE3D', - // }, - // ], - // 'Magnify' - // ), - // _createToolButton( - // 'Rectangle', - // 'tool-rectangle', - // 'Rectangle', - // [ - // { - // commandName: 'setToolActive', - // commandOptions: { - // toolName: 'RectangleROI', - // }, - // context: 'CORNERSTONE3D', - // }, - // ], - // 'Rectangle' - // ), - ], - }, - }, ]; export default toolbarButtons; diff --git a/platform/core/src/services/ToolBarService/ToolBarService.js b/platform/core/src/services/ToolBarService/ToolBarService.js index d710406a88c..719d0702f3b 100644 --- a/platform/core/src/services/ToolBarService/ToolBarService.js +++ b/platform/core/src/services/ToolBarService/ToolBarService.js @@ -84,12 +84,7 @@ export default class ToolBarService { const { commands } = interaction; - let commandsToUse = commands.defaultCommands; - if (!this.state.toggles[itemId] && commands.disableCommands) { - commandsToUse = commands.disableCommands.slice(); - } - - commandsToUse.forEach(({ commandName, commandOptions, context }) => { + commands.forEach(({ commandName, commandOptions, context }) => { if (!commandOptions) { commandOptions = {}; } From 1e3c7d0fe80888f2232e14513f24b5eab6908de3 Mon Sep 17 00:00:00 2001 From: Alireza Date: Wed, 25 May 2022 12:16:07 -0400 Subject: [PATCH 04/25] feat: config the crosshairs --- .../Cornerstone3DViewportService.ts | 23 +++++++++-- .../src/services/ViewportService/Viewport.ts | 15 ++++---- .../tmtv/src/getHangingProtocolModule.js | 25 ++++++++++++ modes/tmtv/src/initToolGroups.js | 38 ++++++++++++++++--- 4 files changed, 85 insertions(+), 16 deletions(-) diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts index aa5646d94a4..f721dc87e8d 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts @@ -380,9 +380,8 @@ class Cornerstone3DViewportService implements IViewportService { volumeId, callback, blendMode: displaySetOptions.blendMode, - slabThickness: displaySetOptions.blendMode - ? displaySetOptions.slabThickness || 500 - : undefined, + slabThickness: this._getSlabThickness(volumeId, displaySetOptions), + slabThicknessEnabled: displaySetOptions.slabThicknessEnabled, }); } @@ -490,6 +489,24 @@ class Cornerstone3DViewportService implements IViewportService { } } + _getSlabThickness(volumeId, displaySetOptions) { + const { blendMode, slabThicknessEnabled } = displaySetOptions; + if (blendMode === undefined || !slabThicknessEnabled) { + return; + } + + const imageVolume = cache.getVolume(volumeId); + + const { dimensions } = imageVolume; + const slabThickness = Math.sqrt( + dimensions[0] * dimensions[0] + + dimensions[1] * dimensions[1] + + dimensions[2] * dimensions[2] + ); + + return slabThickness; + } + _getViewportAndDisplaySetOptions( publicViewportOptions: PublicViewportOptions, publicDisplaySetOptions: DisplaySetOptions[], diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts index 018034fcde7..f0284d72f6a 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts @@ -38,6 +38,7 @@ export type PublicDisplaySetOptions = { voi?: VOI; voiInverted?: boolean; blendMode?: string; + slabThicknessEnabled?: boolean; colormap?: string; }; @@ -45,6 +46,7 @@ export type DisplaySetOptions = { voi?: VOI; voiInverted: boolean; blendMode?: Enums.BlendModes; + slabThicknessEnabled?: boolean; colormap?: string; }; @@ -200,15 +202,14 @@ class ViewportInfo { ): Array { const displaySetOptions: Array = []; - publicDisplaySetOptions.forEach(publicDisplaySetOption => { - const blendMode = getCornerstoneBlendMode( - publicDisplaySetOption.blendMode - ); + publicDisplaySetOptions.forEach(option => { + const blendMode = getCornerstoneBlendMode(option.blendMode); displaySetOptions.push({ - voi: publicDisplaySetOption.voi || ({} as VOI), - voiInverted: publicDisplaySetOption.voiInverted || false, - colormap: publicDisplaySetOption.colormap || undefined, + voi: option.voi || ({} as VOI), + voiInverted: option.voiInverted || false, + colormap: option.colormap || undefined, + slabThicknessEnabled: option.slabThicknessEnabled, blendMode, }); }); diff --git a/extensions/tmtv/src/getHangingProtocolModule.js b/extensions/tmtv/src/getHangingProtocolModule.js index 6942ec70fd3..74a7aefa8a1 100644 --- a/extensions/tmtv/src/getHangingProtocolModule.js +++ b/extensions/tmtv/src/getHangingProtocolModule.js @@ -244,6 +244,9 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, ], }, @@ -271,6 +274,9 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, ], }, @@ -298,6 +304,9 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, ], }, @@ -330,6 +339,7 @@ const ptCT = { displaySets: [ { options: { + blendMode: 'MIP', voi: { windowWidth: 5, windowCenter: 2.5, @@ -365,6 +375,7 @@ const ptCT = { displaySets: [ { options: { + blendMode: 'MIP', voi: { windowWidth: 5, windowCenter: 2.5, @@ -400,6 +411,7 @@ const ptCT = { displaySets: [ { options: { + blendMode: 'MIP', voi: { windowWidth: 5, windowCenter: 2.5, @@ -444,9 +456,13 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, { options: { + slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -491,9 +507,13 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, { options: { + slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -538,9 +558,13 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', + options: { + blendMode: 'MIP', + }, }, { options: { + slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -571,6 +595,7 @@ const ptCT = { { options: { blendMode: 'MIP', + slabThicknessEnabled: true, voi: { windowWidth: 5, windowCenter: 2.5, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 1228fb10b0d..6d1a2e1c1c6 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -44,10 +44,36 @@ function initToolGroups(extensionManager, ToolGroupService) { disabled: [{ toolName: toolNames.Crosshairs }], }; - ToolGroupService.createToolGroupAndAddTools(toolGroupIds.CT, tools); - ToolGroupService.createToolGroupAndAddTools(toolGroupIds.PT, tools); - ToolGroupService.createToolGroupAndAddTools(toolGroupIds.Fusion, tools); - ToolGroupService.createToolGroupAndAddTools(toolGroupIds.default, tools); + const toolsConfig = { + [toolNames.Crosshairs]: { + viewportIndicators: false, + autoPan: { + enabled: true, + panSize: 10, + }, + }, + }; + + ToolGroupService.createToolGroupAndAddTools( + toolGroupIds.CT, + tools, + toolsConfig + ); + ToolGroupService.createToolGroupAndAddTools( + toolGroupIds.PT, + tools, + toolsConfig + ); + ToolGroupService.createToolGroupAndAddTools( + toolGroupIds.Fusion, + tools, + toolsConfig + ); + ToolGroupService.createToolGroupAndAddTools( + toolGroupIds.default, + tools, + toolsConfig + ); const mipTools = { active: [ @@ -61,7 +87,7 @@ function initToolGroups(extensionManager, ToolGroupService) { ], }; - const mipToolGroupConfig = { + const mipToolsConfig = { [toolNames.VolumeRotateMouseWheel]: { rotateIncrementDegrees: 0.1, }, @@ -73,7 +99,7 @@ function initToolGroups(extensionManager, ToolGroupService) { ToolGroupService.createToolGroupAndAddTools( toolGroupIds.MIP, mipTools, - mipToolGroupConfig + mipToolsConfig ); } From 32c2ba31a374c0b67649d6bd5df2dc311a4687b2 Mon Sep 17 00:00:00 2001 From: Alireza Date: Wed, 25 May 2022 18:01:39 -0400 Subject: [PATCH 05/25] feat: add PetSUV Panel for changing metadata --- .../Viewport/OHIFCornerstone3DViewport.tsx | 39 +++ .../ToolGroupService/ToolGroupService.ts | 38 ++- .../Cornerstone3DCacheService.ts | 32 +- .../Cornerstone3DViewportService.ts | 54 ++- .../src/services/ViewportService/Viewport.ts | 6 +- extensions/default/src/ViewerLayout/index.tsx | 10 +- extensions/default/src/index.js | 11 + .../PanelStudyBrowserTracking/index.tsx | 14 +- extensions/tmtv/package.json | 1 + extensions/tmtv/src/Panels/PanelPetSUV.tsx | 314 ++++++++++++++++++ extensions/tmtv/src/Panels/index.tsx | 3 + .../tmtv/src/getHangingProtocolModule.js | 5 +- extensions/tmtv/src/getPanelModule.tsx | 35 ++ extensions/tmtv/src/index.tsx | 2 + .../getStudiesForPatientByStudyInstanceUID.js | 3 - modes/tmtv/src/index.js | 54 ++- modes/tmtv/src/initToolGroups.js | 8 +- .../DicomMetadataStore/DicomMetadataStore.js | 56 ++-- .../DisplaySetService/DisplaySetService.js | 21 +- .../src/services/DisplaySetService/EVENTS.js | 4 +- .../viewer/src/components/ViewportGrid.tsx | 15 +- 21 files changed, 625 insertions(+), 100 deletions(-) create mode 100644 extensions/tmtv/src/Panels/PanelPetSUV.tsx create mode 100644 extensions/tmtv/src/Panels/index.tsx create mode 100644 extensions/tmtv/src/getPanelModule.tsx rename extensions/{measurement-tracking/src/panels/PanelStudyBrowserTracking => tmtv/src/utils}/getStudiesForPatientByStudyInstanceUID.js (87%) diff --git a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx index 5cf23acd619..52d4a73f13f 100644 --- a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx +++ b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx @@ -60,6 +60,7 @@ const OHIFCornerstoneViewport = React.memo(props => { } = props; const [scrollbarHeight, setScrollbarHeight] = useState('100px'); + const [viewportData, setViewportData] = useState(null); const [_, viewportGridService] = useViewportGrid(); const elementRef = useRef(); @@ -165,6 +166,42 @@ const OHIFCornerstoneViewport = React.memo(props => { }; }, []); + // subscribe to displaySet metadata invalidation (updates) + // Currently, if the metadata changes we need to re-render the display set + // for it to take effect in the viewport. As we deal with scaling in the loading, + // we need to remove the old volume from the cache, and let the + // viewport to re-add it which will use the new metadata. Otherwise, the + // viewport will use the cached volume and the new metadata will not be used. + useEffect(() => { + const { unsubscribe } = DisplaySetService.subscribe( + DisplaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, + async invalidatedDisplaySetInstanceUID => { + if ( + viewportData.displaySetInstanceUIDs.includes( + invalidatedDisplaySetInstanceUID + ) + ) { + const newViewportData = await Cornerstone3DCacheService.invalidateViewportData( + viewportData, + invalidatedDisplaySetInstanceUID, + dataSource, + DisplaySetService + ); + + Cornerstone3DViewportService.updateViewport( + viewportIndex, + newViewportData + ); + + setViewportData(newViewportData); + } + } + ); + return () => { + unsubscribe(); + }; + }, [viewportData, viewportIndex]); + useEffect(() => { // handle the default viewportType to be stack if (!viewportOptions.viewportType) { @@ -186,6 +223,8 @@ const OHIFCornerstoneViewport = React.memo(props => { viewportOptions, displaySetOptions ); + + setViewportData(viewportData); }; loadViewportData(); diff --git a/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts b/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts index 0bab85c2784..809acf01360 100644 --- a/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts +++ b/extensions/cornerstone-3d/src/services/ToolGroupService/ToolGroupService.ts @@ -4,6 +4,7 @@ import { pubSubServiceInterface } from '@ohif/core'; const EVENTS = { VIEWPORT_ADDED: 'event::cornerstone-3d::toolgroupservice:viewportadded', + TOOLGROUP_CREATED: 'event::cornerstone-3d::toolgroupservice:toolgroupcreated', }; type Tool = { @@ -109,7 +110,7 @@ export default class ToolGroupService { toolGroup.addViewport(viewportId, renderingEngineId); } - this._broadcastEvent(EVENTS.VIEWPORT_ADDED, { viewportId }); + this._broadcastEvent(EVENTS.VIEWPORT_ADDED, { viewportId, toolGroupId }); } public createToolGroup(toolGroupId: string): Types.IToolGroup { @@ -121,6 +122,8 @@ export default class ToolGroupService { const toolGroup = ToolGroupManager.createToolGroup(toolGroupId); this.toolGroupIds.add(toolGroupId); + this._broadcastEvent(EVENTS.TOOLGROUP_CREATED, { toolGroupId }); + return toolGroup; } @@ -155,7 +158,40 @@ export default class ToolGroupService { // } // }); } + */ + + /** + * Get the tool's configuration based on the tool name and tool group id + * @param toolGroupId - The id of the tool group that the tool instance belongs to. + * @param toolName - The name of the tool + * @returns The configuration of the tool. */ + public getToolConfiguration(toolGroupId: string, toolName: string) { + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + if (!toolGroup) { + return null; + } + + const tool = toolGroup.getToolInstance(toolName); + if (!tool) { + return null; + } + + return tool.configuration; + } + + /** + * Set the tool instance configuration. This will update the tool instance configuration + * on the toolGroup + * @param toolGroupId - The id of the tool group that the tool instance belongs to. + * @param toolName - The name of the tool + * @param config - The configuration object that you want to set. + */ + public setToolConfiguration(toolGroupId, toolName, config) { + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + const toolInstance = toolGroup.getToolInstance(toolName); + toolInstance.configuration = config; + } private _getToolNames(toolGroupTools: Tools): string[] { const toolNames = []; diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DCacheService.ts b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DCacheService.ts index 45e874437d5..102f80a834a 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DCacheService.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DCacheService.ts @@ -88,6 +88,35 @@ class Cornerstone3DCacheService { return viewportData; } + public async invalidateViewportData( + viewportData: VolumeData, + invalidatedDisplaySetInstanceUID: string, + dataSource, + DisplaySetService + ) { + if (viewportData.viewportType === Enums.ViewportType.STACK) { + throw new Error('Invalidation of StackViewport is not supported yet'); + } + + const volumeId = invalidatedDisplaySetInstanceUID; + const volume = cs3DCache.getVolume(volumeId); + + if (volume) { + cs3DCache.removeVolumeLoadObject(volumeId); + } + + const displaySets = viewportData.displaySetInstanceUIDs.map( + DisplaySetService.getDisplaySetByUID + ); + + const newViewportData = await this._getVolumeViewportData( + dataSource, + displaySets + ); + + return newViewportData; + } + private _getStackViewportData( dataSource, displaySets, @@ -128,8 +157,7 @@ class Cornerstone3DCacheService { private async _getVolumeViewportData( dataSource, - displaySets, - initialView + displaySets ): Promise { // Check the cache for multiple scenarios to see if we need to // decache the volume data from other viewports or not diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts index f721dc87e8d..c99b1d0f349 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts @@ -2,6 +2,7 @@ import { pubSubServiceInterface } from '@ohif/core'; import { RenderingEngine, StackViewport, + Enums, Types, getRenderingEngine, utilities as csUtils, @@ -354,6 +355,7 @@ class Cornerstone3DViewportService implements IViewportService { // (This call may or may not create sub-requests for series metadata) const volumeInputArray = []; const displaySetOptionsArray = viewportInfo.getDisplaySetOptions(); + const { HangingProtocolService } = this; for (let i = 0; i < viewportData.imageIds.length; i++) { const imageIds = viewportData.imageIds[i]; @@ -380,14 +382,16 @@ class Cornerstone3DViewportService implements IViewportService { volumeId, callback, blendMode: displaySetOptions.blendMode, - slabThickness: this._getSlabThickness(volumeId, displaySetOptions), - slabThicknessEnabled: displaySetOptions.slabThicknessEnabled, + slabThickness: this._getSlabThickness(displaySetOptions, volumeId), }); } - if (this.HangingProtocolService.hasCustomImageLoadStrategy()) { + if ( + HangingProtocolService.hasCustomImageLoadStrategy() && + !HangingProtocolService.customImageLoadPerformed + ) { // delegate the volume loading to the hanging protocol service if it has a custom image load strategy - return this.HangingProtocolService.runImageLoadStrategy({ + return HangingProtocolService.runImageLoadStrategy({ viewportId: viewport.id, volumeInputArray, }); @@ -431,6 +435,15 @@ class Cornerstone3DViewportService implements IViewportService { }); } + public updateViewport(viewportIndex, viewportData) { + const viewportInfo = this.getViewportInfoByIndex(viewportIndex); + + const viewportId = viewportInfo.getViewportId(); + const viewport = this.getCornerstone3DViewport(viewportId); + + this._setVolumeViewport(viewport, viewportData, viewportInfo); + } + _getVOICallbacks(volumeId, displaySetOptions) { const { voi, voiInverted: inverted, colormap } = displaySetOptions; @@ -489,22 +502,33 @@ class Cornerstone3DViewportService implements IViewportService { } } - _getSlabThickness(volumeId, displaySetOptions) { - const { blendMode, slabThicknessEnabled } = displaySetOptions; - if (blendMode === undefined || !slabThicknessEnabled) { + _getSlabThickness(displaySetOptions, volumeId) { + const { blendMode } = displaySetOptions; + if (blendMode === undefined || !displaySetOptions.slabThickness) { return; } - const imageVolume = cache.getVolume(volumeId); + // if there is a slabThickness set as a number then use it + if ( + displaySetOptions.slabThickness && + typeof displaySetOptions.slabThickness === 'number' + ) { + return displaySetOptions.slabThickness; + } + + if (displaySetOptions.slabThickness === 'auto') { + // calculate the slab thickness based on the volume dimensions + const imageVolume = cache.getVolume(volumeId); - const { dimensions } = imageVolume; - const slabThickness = Math.sqrt( - dimensions[0] * dimensions[0] + - dimensions[1] * dimensions[1] + - dimensions[2] * dimensions[2] - ); + const { dimensions } = imageVolume; + const slabThickness = Math.sqrt( + dimensions[0] * dimensions[0] + + dimensions[1] * dimensions[1] + + dimensions[2] * dimensions[2] + ); - return slabThickness; + return slabThickness; + } } _getViewportAndDisplaySetOptions( diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts index f0284d72f6a..268fd543789 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts @@ -38,7 +38,7 @@ export type PublicDisplaySetOptions = { voi?: VOI; voiInverted?: boolean; blendMode?: string; - slabThicknessEnabled?: boolean; + slabThickness?: number; colormap?: string; }; @@ -46,7 +46,7 @@ export type DisplaySetOptions = { voi?: VOI; voiInverted: boolean; blendMode?: Enums.BlendModes; - slabThicknessEnabled?: boolean; + slabThickness?: number; colormap?: string; }; @@ -209,7 +209,7 @@ class ViewportInfo { voi: option.voi || ({} as VOI), voiInverted: option.voiInverted || false, colormap: option.colormap || undefined, - slabThicknessEnabled: option.slabThicknessEnabled, + slabThickness: option.slabThickness || undefined, blendMode, }); }); diff --git a/extensions/default/src/ViewerLayout/index.tsx b/extensions/default/src/ViewerLayout/index.tsx index 063f6ee7dbb..0816131df80 100644 --- a/extensions/default/src/ViewerLayout/index.tsx +++ b/extensions/default/src/ViewerLayout/index.tsx @@ -206,11 +206,11 @@ function ViewerLayout({
{/* LEFT SIDEPANELS */} - {leftPanelComponents.length && ( + {leftPanelComponents.length ? ( - )} + ) : null} {/* TOOLBAR + GRID */}
@@ -231,7 +231,7 @@ function ViewerLayout({
- {rightPanelComponents.length && ( + {rightPanelComponents.length ? ( - )} + ) : null}
); diff --git a/extensions/default/src/index.js b/extensions/default/src/index.js index 2c5321989c2..0cf1773a8a1 100644 --- a/extensions/default/src/index.js +++ b/extensions/default/src/index.js @@ -5,6 +5,7 @@ import getSopClassHandlerModule from './getSopClassHandlerModule.js'; import getHangingProtocolModule from './getHangingProtocolModule.js'; import getToolbarModule from './getToolbarModule'; import commandsModule from './commandsModule'; +import getStudiesForPatientByStudyInstanceUID from './Panels/getStudiesForPatientByStudyInstanceUID'; import { id } from './id.js'; import init from './init'; @@ -25,6 +26,16 @@ const defaultExtension = { getCommandsModule({ servicesManager, commandsManager }) { return commandsModule({ servicesManager, commandsManager }); }, + getUtilityModule({ servicesManager }) { + return [ + { + name: 'common', + exports: { + getStudiesForPatientByStudyInstanceUID, + }, + }, + ]; + }, }; export default defaultExtension; diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/index.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/index.tsx index 2c2acaf147c..5ac9101946b 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/index.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/index.tsx @@ -3,9 +3,17 @@ import PropTypes from 'prop-types'; // import PanelStudyBrowserTracking from './PanelStudyBrowserTracking'; import getImageSrcFromImageId from './getImageSrcFromImageId'; -import getStudiesForPatientByStudyInstanceUID from './getStudiesForPatientByStudyInstanceUID'; import requestDisplaySetCreationForStudy from './requestDisplaySetCreationForStudy'; +function _getStudyForPatientUtility(extensionManager) { + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-default.utilityModule.common' + ); + + const { getStudiesForPatientByStudyInstanceUID } = utilityModule.exports; + return getStudiesForPatientByStudyInstanceUID; +} + /** * Wraps the PanelStudyBrowser and provides features afforded by managers/services * @@ -19,6 +27,10 @@ function WrappedPanelStudyBrowserTracking({ servicesManager, }) { const dataSource = extensionManager.getActiveDataSource()[0]; + + const getStudiesForPatientByStudyInstanceUID = _getStudyForPatientUtility( + extensionManager + ); const _getStudiesForPatientByStudyInstanceUID = getStudiesForPatientByStudyInstanceUID.bind( null, dataSource diff --git a/extensions/tmtv/package.json b/extensions/tmtv/package.json index 85bf6c78078..9e68cd7f785 100644 --- a/extensions/tmtv/package.json +++ b/extensions/tmtv/package.json @@ -30,6 +30,7 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", + "@ohif/extension-default": "^3.0.0", "dcmjs": "0.22.0", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", diff --git a/extensions/tmtv/src/Panels/PanelPetSUV.tsx b/extensions/tmtv/src/Panels/PanelPetSUV.tsx new file mode 100644 index 00000000000..bcc02cf92a1 --- /dev/null +++ b/extensions/tmtv/src/Panels/PanelPetSUV.tsx @@ -0,0 +1,314 @@ +import React, { useEffect, useState, useCallback } from 'react'; +import PropTypes from 'prop-types'; +import { Input, Button } from '@ohif/ui'; +import { classes, DicomMetadataStore } from '@ohif/core'; +import { useTranslation } from 'react-i18next'; + +const metadataProvider = classes.MetadataProvider; + +const DEFAULT_MEATADATA = { + PatientWeight: null, + PatientSex: null, + SeriesTime: null, + RadiopharmaceuticalInformationSequence: { + RadionuclideTotalDose: null, + RadionuclideHalfLife: null, + RadiopharmaceuticalStartTime: null, + }, +}; + +/* + * PETSUV panel enables the user to modify the patient related information, such as + * patient sex, patientWeight. This is allowed since + * sometimes these metadata are missing or wrong. By changing them + * @param param0 + * @returns + */ +export default function PanelPetSUV({ servicesManager, extensionManager }) { + const { t } = useTranslation('PanelSUV'); + const { + DisplaySetService, + HangingProtocolService, + } = servicesManager.services; + const dataSource = extensionManager.getDataSources()[0]; + const [metadata, setMetadata] = useState(DEFAULT_MEATADATA); + const [ptDisplaySet, setPtDisplaySet] = useState(null); + + const handleMetadataChange = useCallback( + metadata => { + setMetadata(prevState => { + const newState = { ...prevState }; + Object.keys(metadata).forEach(key => { + if (typeof metadata[key] === 'object') { + newState[key] = { ...prevState[key], ...metadata[key] }; + } else { + newState[key] = metadata[key]; + } + }); + return newState; + }); + }, + [metadata] + ); + + // get the patientMetadata from the StudyInstanceUIDs and update the state + useEffect(() => { + const { unsubscribe } = DisplaySetService.subscribe( + DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, + ({ displaySetsAdded }) => { + const matches = HangingProtocolService.getDisplaySetsMatchDetails(); + + const ptDisplaySet = _getMatchedPtDisplaySet( + matches, + DisplaySetService + ); + + if (!ptDisplaySet) { + return; + } + + const metadata = _getPtMetadata(dataSource, ptDisplaySet); + setPtDisplaySet(ptDisplaySet); + setMetadata(metadata); + } + ); + return () => { + unsubscribe(); + }; + }, [DisplaySetService, dataSource]); + + function updateMetadata() { + if (!ptDisplaySet) { + throw new Error('No ptDisplaySet found'); + } + // metadata should be dcmjs naturalized + DicomMetadataStore.updateMetadataForSeries( + ptDisplaySet.StudyInstanceUID, + ptDisplaySet.SeriesInstanceUID, + metadata + ); + + // update the displaySets + DisplaySetService.setDisplaySetMetadataInvalidated( + ptDisplaySet.displaySetInstanceUID + ); + } + + return ( +
+ { +
+
+ { + handleMetadataChange({ PatientSex: e.target.value }); + }} + /> + { + handleMetadataChange({ PatientWeight: e.target.value }); + }} + /> + { + handleMetadataChange({ + RadiopharmaceuticalInformationSequence: { + RadionuclideTotalDose: e.target.value, + }, + }); + }} + /> + { + handleMetadataChange({ + RadiopharmaceuticalInformationSequence: { + RadionuclideHalfLife: e.target.value, + }, + }); + }} + /> + { + handleMetadataChange({ + RadiopharmaceuticalInformationSequence: { + RadiopharmaceuticalStartTime: e.target.value, + }, + }); + }} + /> + {}} + /> +
+ +
+ } +
+ ); +} + +PanelPetSUV.propTypes = { + servicesManager: PropTypes.shape({ + services: PropTypes.shape({ + MeasurementService: PropTypes.shape({ + getMeasurements: PropTypes.func.isRequired, + subscribe: PropTypes.func.isRequired, + EVENTS: PropTypes.object.isRequired, + VALUE_TYPES: PropTypes.object.isRequired, + }).isRequired, + }).isRequired, + }).isRequired, +}; + +function _getMatchedPtDisplaySet( + hangingProtocolDisplaySetMatches, + DisplaySetService +) { + const matchedSeriesInstanceUIDs = Array.from( + hangingProtocolDisplaySetMatches.values() + ).map(({ SeriesInstanceUID }) => SeriesInstanceUID); + + for (const SeriesInstanceUID of matchedSeriesInstanceUIDs) { + const displaySets = DisplaySetService.getDisplaySetsForSeries( + SeriesInstanceUID + ); + + if (!displaySets || displaySets.length === 0) { + continue; + } + + const displaySet = displaySets[0]; + if (displaySet.Modality !== 'PT') { + continue; + } + + return displaySet; + } +} + +function _getPtMetadata(dataSource, displaySet) { + const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); + + const firstImageId = imageIds[0]; + const SeriesTime = metadataProvider.get('SeriesTime', firstImageId); + const metadata = {}; + + if (SeriesTime) { + metadata.SeriesTime = SeriesTime; + } + + // get metadata from the first image + const seriesModule = metadataProvider.get( + 'generalSeriesModule', + firstImageId + ); + + if (seriesModule && seriesModule.modality !== 'PT') { + return; + } + + // get metadata from the first image + const demographic = metadataProvider.get( + 'patientDemographicModule', + firstImageId + ); + + if (demographic) { + // naturalized dcmjs version + metadata.PatientSex = demographic.patientSex; + } + + // patientStudyModule + const studyModule = metadataProvider.get('patientStudyModule', firstImageId); + + if (studyModule) { + // naturalized dcmjs version + metadata.PatientWeight = studyModule.patientWeight; + } + + // total dose + const petSequenceModule = metadataProvider.get( + 'petIsotopeModule', + firstImageId + ); + const { radiopharmaceuticalInfo } = petSequenceModule; + + const { + radionuclideHalfLife, + radionuclideTotalDose, + radiopharmaceuticalStartTime, + } = radiopharmaceuticalInfo; + + const { + hours, + minutes, + seconds, + fractionalSeconds, + } = radiopharmaceuticalStartTime; + + // pad number with leading zero if less than 10 + const hoursString = hours < 10 ? `0${hours}` : hours; + const minutesString = minutes < 10 ? `0${minutes}` : minutes; + const secondsString = seconds < 10 ? `0${seconds}` : seconds; + + if (radiopharmaceuticalInfo) { + metadata.RadiopharmaceuticalInformationSequence = { + RadionuclideTotalDose: radionuclideTotalDose, + RadionuclideHalfLife: radionuclideHalfLife, + RadiopharmaceuticalStartTime: `${hoursString}${minutesString}${secondsString}.${fractionalSeconds}`, + }; + } + + return metadata; +} diff --git a/extensions/tmtv/src/Panels/index.tsx b/extensions/tmtv/src/Panels/index.tsx new file mode 100644 index 00000000000..9ab2945ecee --- /dev/null +++ b/extensions/tmtv/src/Panels/index.tsx @@ -0,0 +1,3 @@ +import PanelPetSUV from './PanelPetSUV'; + +export { PanelPetSUV }; diff --git a/extensions/tmtv/src/getHangingProtocolModule.js b/extensions/tmtv/src/getHangingProtocolModule.js index 74a7aefa8a1..94f879186dd 100644 --- a/extensions/tmtv/src/getHangingProtocolModule.js +++ b/extensions/tmtv/src/getHangingProtocolModule.js @@ -462,7 +462,6 @@ const ptCT = { }, { options: { - slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -513,7 +512,6 @@ const ptCT = { }, { options: { - slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -564,7 +562,6 @@ const ptCT = { }, { options: { - slabThicknessEnabled: false, colormap: 'hsv', voi: { windowWidth: 5, @@ -595,7 +592,7 @@ const ptCT = { { options: { blendMode: 'MIP', - slabThicknessEnabled: true, + slabThickness: 'auto', voi: { windowWidth: 5, windowCenter: 2.5, diff --git a/extensions/tmtv/src/getPanelModule.tsx b/extensions/tmtv/src/getPanelModule.tsx new file mode 100644 index 00000000000..4ac57057ff6 --- /dev/null +++ b/extensions/tmtv/src/getPanelModule.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { PanelPetSUV } from './Panels'; + +// TODO: +// - No loading UI exists yet +// - cancel promises when component is destroyed +// - show errors in UI for thumbnails if promise fails + +function getPanelModule({ + commandsManager, + extensionManager, + servicesManager, +}) { + const wrappedPanelPetSuv = () => { + return ( + + ); + }; + + return [ + { + name: 'petSUV', + iconName: 'circled-checkmark', + iconLabel: 'PET SUV', + label: 'PET-SUV', + component: wrappedPanelPetSuv, + }, + ]; +} + +export default getPanelModule; diff --git a/extensions/tmtv/src/index.tsx b/extensions/tmtv/src/index.tsx index aaccbaa0ee6..877f9b16e02 100644 --- a/extensions/tmtv/src/index.tsx +++ b/extensions/tmtv/src/index.tsx @@ -1,5 +1,6 @@ import { id } from './id'; import getHangingProtocolModule from './getHangingProtocolModule'; +import getPanelModule from './getPanelModule'; /** * @@ -9,6 +10,7 @@ const tmtvExtension = { * Only required property. Should be a unique value across all extensions. */ id, + getPanelModule, getHangingProtocolModule, }; diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/getStudiesForPatientByStudyInstanceUID.js b/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js similarity index 87% rename from extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/getStudiesForPatientByStudyInstanceUID.js rename to extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js index fb5baa5395d..ae0ed4a9e33 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/getStudiesForPatientByStudyInstanceUID.js +++ b/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js @@ -21,9 +21,6 @@ async function getStudiesForPatientByStudyInstanceUID( patientId: getStudyResult[0].mrn, }); } - console.log('No mrn found for', getStudyResult); - // The original study we KNOW belongs to the same set, so just return it - return getStudyResult; } export default getStudiesForPatientByStudyInstanceUID; diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 0862a54e304..66b280fd542 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -8,6 +8,7 @@ const ohif = { sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', hangingProtocols: '@ohif/extension-default.hangingProtocolModule.default', measurements: '@ohif/extension-default.panelModule.measure', + thumbnailList: '@ohif/extension-default.panelModule.seriesList', }; const cs3d = { @@ -16,6 +17,7 @@ const cs3d = { const tmtv = { hangingProtocols: '@ohif/extension-tmtv.hangingProtocolModule.ptCT', + petSUV: '@ohif/extension-tmtv.panelModule.petSUV', }; const extensionDependencies = { @@ -36,10 +38,21 @@ function modeFactory({ modeConfiguration }) { * Lifecycle hooks */ onModeEnter: ({ servicesManager, extensionManager }) => { - const { ToolBarService, ToolGroupService } = servicesManager.services; + const { + ToolBarService, + ToolGroupService, + HangingProtocolService, + DisplaySetService, + } = servicesManager.services; + + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-cornerstone-3d.utilityModule.tools' + ); + + const { toolNames, Enums } = utilityModule.exports; // Init Default and SR ToolGroups - initToolGroups(extensionManager, ToolGroupService); + initToolGroups(toolNames, Enums, ToolGroupService); let unsubscribe; @@ -52,7 +65,7 @@ function modeFactory({ modeConfiguration }) { { commandName: 'setToolActive', commandOptions: { - toolName: 'WindowLevel', + toolName: toolNames.WindowLevel, toolGroupId: toolGroupIds.CT, }, context: 'CORNERSTONE3D', @@ -60,7 +73,7 @@ function modeFactory({ modeConfiguration }) { { commandName: 'setToolActive', commandOptions: { - toolName: 'WindowLevel', + toolName: toolNames.WindowLevel, toolGroupId: toolGroupIds.PT, }, context: 'CORNERSTONE3D', @@ -68,7 +81,7 @@ function modeFactory({ modeConfiguration }) { { commandName: 'setToolActive', commandOptions: { - toolName: 'WindowLevel', + toolName: toolNames.WindowLevel, toolGroupId: toolGroupIds.Fusion, }, context: 'CORNERSTONE3D', @@ -76,6 +89,35 @@ function modeFactory({ modeConfiguration }) { ], }); + // For fusion toolGroup we need to add the volumeIds for the crosshairs + // since in the fusion viewport we don't want both PT and CT to render MIP + // when slabThickness is modified + const matches = HangingProtocolService.getDisplaySetsMatchDetails(); + + // Todo: we are tying the displaySetId (in the hangingProtocols) + // to the modes. Maybe the HangingProtocols should be set at the mode + // level (not extension level?) + const { SeriesInstanceUID } = matches.get('ctDisplaySet'); + const displaySets = DisplaySetService.getDisplaySetsForSeries( + SeriesInstanceUID + ); + + const toolConfig = ToolGroupService.getToolConfiguration( + toolGroupIds.Fusion, + toolNames.Crosshairs + ); + + const crosshairsConfig = { + ...toolConfig, + actorUIDsForSlabThickness: [displaySets[0].displaySetInstanceUID], + }; + + ToolGroupService.setToolConfiguration( + toolGroupIds.Fusion, + toolNames.Crosshairs, + crosshairsConfig + ); + // We don't need to reset the active tool whenever a viewport is getting // added to the toolGroup. unsubscribe(); @@ -137,7 +179,7 @@ function modeFactory({ modeConfiguration }) { id: ohif.layout, props: { leftPanels: [], - rightPanels: [ohif.measurements], + rightPanels: [tmtv.petSUV], viewports: [ { namespace: cs3d.viewport, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 6d1a2e1c1c6..6942dd2216b 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -6,13 +6,7 @@ export const toolGroupIds = { default: 'default', }; -function initToolGroups(extensionManager, ToolGroupService) { - const utilityModule = extensionManager.getModuleEntry( - '@ohif/extension-cornerstone-3d.utilityModule.tools' - ); - - const { toolNames, Enums } = utilityModule.exports; - +function initToolGroups(toolNames, Enums, ToolGroupService) { const tools = { active: [ { diff --git a/platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js b/platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js index 100a2910e4a..5380dd726ff 100644 --- a/platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js +++ b/platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js @@ -102,37 +102,43 @@ function _getInstanceByImageId(imageId) { * @param {*} metadata metadata inform of key value pairs * @returns */ -function _updateMetadataForStudy(StudyInstanceUID, metadata) { +function _updateMetadataForSeries( + StudyInstanceUID, + SeriesInstanceUID, + metadata +) { const study = _getStudy(StudyInstanceUID); if (!study) { return; } - for (let series of study.series) { - const { SeriesInstanceUID, instances } = series; - // update all instances metadata for this series with the new metadata - instances.forEach(instance => { - Object.keys(metadata).forEach(key => { - // if metadata[key] is an object, we need to merge it with the existing - // metadata of the instance - if (typeof metadata[key] === 'object') { - instance[key] = { ...instance[key], ...metadata[key] }; - } - // otherwise, we just replace the existing metadata with the new one - else { - instance[key] = metadata[key]; - } - }); - }); + const series = study.series.find( + aSeries => aSeries.SeriesInstanceUID === SeriesInstanceUID + ); - // broadcast the series updated event - this._broadcastEvent(EVENTS.SERIES_UPDATED, { - SeriesInstanceUID, - StudyInstanceUID, - madeInClient: true, + const { instances } = series; + // update all instances metadata for this series with the new metadata + instances.forEach(instance => { + Object.keys(metadata).forEach(key => { + // if metadata[key] is an object, we need to merge it with the existing + // metadata of the instance + if (typeof metadata[key] === 'object') { + instance[key] = { ...instance[key], ...metadata[key] }; + } + // otherwise, we just replace the existing metadata with the new one + else { + instance[key] = metadata[key]; + } }); - } + }); + + // broadcast the series updated event + this._broadcastEvent(EVENTS.SERIES_UPDATED, { + SeriesInstanceUID, + StudyInstanceUID, + madeInClient: true, + }); } const BaseImplementation = { @@ -246,7 +252,7 @@ const BaseImplementation = { getSeries: _getSeries, getInstance: _getInstance, getInstanceByImageId: _getInstanceByImageId, - updateMetadataForStudy: _updateMetadataForStudy, + updateMetadataForSeries: _updateMetadataForSeries, }; const DicomMetadataStore = Object.assign( // get study @@ -258,7 +264,5 @@ const DicomMetadataStore = Object.assign( pubSubServiceInterface ); -window._model = _model; - export { DicomMetadataStore }; export default DicomMetadataStore; diff --git a/platform/core/src/services/DisplaySetService/DisplaySetService.js b/platform/core/src/services/DisplaySetService/DisplaySetService.js index 64fcfd31613..7a5ec81584e 100644 --- a/platform/core/src/services/DisplaySetService/DisplaySetService.js +++ b/platform/core/src/services/DisplaySetService/DisplaySetService.js @@ -89,19 +89,18 @@ export default class DisplaySetService { return displaySet; } - setDisplaySetsMetadataUpdated(displaySetUIDs) { - displaySetUIDs.forEach(displaySetUID => { - const displaySet = this.getDisplaySetByUID(displaySetUID); + setDisplaySetMetadataInvalidated(displaySetInstanceUID) { + const displaySet = this.getDisplaySetByUID(displaySetInstanceUID); - if (!displaySet) { - return; - } - - displaySet.needsRerendering = true; - }); + if (!displaySet) { + return; + } - // boradcast event to update listeners with the new displaySets - this._broadcastEvent(EVENTS.DISPLAY_SETS_METADATA_UPDATED, displaySetUIDs); + // broadcast event to update listeners with the new displaySets + this._broadcastEvent( + EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, + displaySetInstanceUID + ); } deleteDisplaySet(displaySetInstanceUID) { diff --git a/platform/core/src/services/DisplaySetService/EVENTS.js b/platform/core/src/services/DisplaySetService/EVENTS.js index 791e8e9e48d..445736a1230 100644 --- a/platform/core/src/services/DisplaySetService/EVENTS.js +++ b/platform/core/src/services/DisplaySetService/EVENTS.js @@ -2,8 +2,8 @@ const EVENTS = { DISPLAY_SETS_ADDED: 'event::displaySetService:displaySetsAdded', DISPLAY_SETS_CHANGED: 'event::displaySetService:displaySetsChanged', DISPLAY_SETS_REMOVED: 'event::displaySetService:displaySetsRemoved', - DISPLAY_SETS_METADATA_UPDATED: - 'event::displaySetService:displaySetsMetadataUpdated', + DISPLAY_SET_SERIES_METADATA_INVALIDATED: + 'event::displaySetService:displaySetSeriesMetadataInvalidated', }; export default EVENTS; diff --git a/platform/viewer/src/components/ViewportGrid.tsx b/platform/viewer/src/components/ViewportGrid.tsx index 8b442cbbcef..70415c4e3dc 100644 --- a/platform/viewer/src/components/ViewportGrid.tsx +++ b/platform/viewer/src/components/ViewportGrid.tsx @@ -261,20 +261,7 @@ function ViewerViewportGrid(props) { }, [viewports]); - // subscribe to displayset metadata changes - useEffect(() => { - const { unsubscribe } = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_METADATA_UPDATED, - displaySets => { - // Todo: properly refresh the viewportGrid to use the new displaySet - // with the new metadata. - setState({}); - } - ); - return () => { - unsubscribe(); - }; - }, [viewports]); + const onDoubleClick = viewportIndex => { // TODO -> Disabled for now. From 7837c0b0e78c3ab42b0492b893bf364265d066bd Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 26 May 2022 17:10:59 -0400 Subject: [PATCH 06/25] feat: initial work for the rectangleROIThreshold panel --- .../Viewport/OHIFCornerstone3DViewport.tsx | 4 +- .../cornerstone-3d/src/commandsModule.js | 20 +- extensions/cornerstone-3d/src/init.js | 2 +- .../src/initCornerstoneTools.js | 3 + .../Cornerstone3DViewportService.ts | 18 +- .../src/services/ViewportService/Viewport.ts | 2 +- .../src/utils/getCornerstoneBlendMode.ts | 2 +- extensions/default/src/commandsModule.js | 14 +- .../default/src/getLayoutTemplateModule.js | 4 +- extensions/tmtv/package.json | 1 - extensions/tmtv/src/Panels/PanelPetSUV.tsx | 45 +- .../Panels/PanelROIThresholdSegmentation.tsx | 541 ++++++++++++++++++ extensions/tmtv/src/Panels/index.tsx | 3 +- extensions/tmtv/src/commandsModule.js | 414 ++++++++++++++ .../tmtv/src/getHangingProtocolModule.js | 20 +- extensions/tmtv/src/getPanelModule.tsx | 19 +- extensions/tmtv/src/index.tsx | 12 + extensions/tmtv/src/init.js | 42 ++ .../src/utils/createAndDownloadTMTVReport.js | 50 ++ .../getStudiesForPatientByStudyInstanceUID.js | 3 + .../RectangleRoiStartEndThreshold.js | 113 ++++ .../constants/supportedTools.js | 1 + .../measurementServiceMappingsFactory.js | 48 ++ .../utils/getSOPInstanceAttributes.js | 69 +++ modes/tmtv/src/index.js | 8 +- modes/tmtv/src/initToolGroups.js | 9 +- modes/tmtv/src/toolbarButtons.js | 27 + platform/core/src/classes/CommandsManager.js | 18 +- .../core/src/classes/CommandsManager.test.js | 8 - .../core/src/extensions/ExtensionManager.js | 17 +- .../services/ToolBarService/ToolBarService.js | 8 +- platform/viewer/src/appInit.js | 7 - 32 files changed, 1453 insertions(+), 99 deletions(-) create mode 100644 extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx create mode 100644 extensions/tmtv/src/commandsModule.js create mode 100644 extensions/tmtv/src/init.js create mode 100644 extensions/tmtv/src/utils/createAndDownloadTMTVReport.js create mode 100644 extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js create mode 100644 extensions/tmtv/src/utils/measurementServiceMappings/constants/supportedTools.js create mode 100644 extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js create mode 100644 extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js diff --git a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx index 52d4a73f13f..6199b60ea22 100644 --- a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx +++ b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx @@ -96,7 +96,7 @@ const OHIFCornerstoneViewport = React.memo(props => { } const { viewportId, element } = evt.detail; - const viewportInfo = Cornerstone3DViewportService.getViewportInfoById( + const viewportInfo = Cornerstone3DViewportService.getViewportInfo( viewportId ); const viewportIndex = viewportInfo.getViewportIndex(); @@ -172,6 +172,8 @@ const OHIFCornerstoneViewport = React.memo(props => { // we need to remove the old volume from the cache, and let the // viewport to re-add it which will use the new metadata. Otherwise, the // viewport will use the cached volume and the new metadata will not be used. + // Note: this approach does not actually end of sending network requests + // and it uses the network cache useEffect(() => { const { unsubscribe } = DisplaySetService.subscribe( DisplaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 474bb624b3e..fb5d8f62e18 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -60,6 +60,18 @@ const commandsModule = ({ servicesManager }) => { getActiveViewportEnabledElement: () => { return _getActiveViewportEnabledElement(); }, + setViewportActive: ({ viewportId }) => { + const viewportInfo = Cornerstone3DViewportService.getViewportInfo( + viewportId + ); + if (!viewportInfo) { + console.warn('No viewport found for viewportId:', viewportId); + return; + } + + const viewportIndex = viewportInfo.getViewportIndex(); + ViewportGridService.setActiveViewportIndex(viewportIndex); + }, toggleCine: () => { const { viewports } = ViewportGridService.getState(); const { isCineEnabled } = CineService.getState(); @@ -116,8 +128,6 @@ const commandsModule = ({ servicesManager }) => { return; } - toolGroup.setToolDisabled(toolName); - // Get the primary toolId from the ToolBarService and set it to active // Since it was set to passive if not already active const primaryActiveTool = ToolBarService.state.primaryToolId; @@ -126,6 +136,7 @@ const commandsModule = ({ servicesManager }) => { toolGroup.toolOptions[primaryActiveTool].mode === cornerstone3DTools.Enums.ToolModes.Passive ) { + toolGroup.setToolDisabled(toolName); toolGroup.setToolActive(primaryActiveTool, { bindings: [{ mouseButton: Enums.MouseBindings.Primary }], }); @@ -392,6 +403,11 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + setViewportActive: { + commandFn: actions.setViewportActive, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/cornerstone-3d/src/init.js b/extensions/cornerstone-3d/src/init.js index a1fb77e1046..986315a935b 100644 --- a/extensions/cornerstone-3d/src/init.js +++ b/extensions/cornerstone-3d/src/init.js @@ -255,7 +255,7 @@ export default async function init({ function elementDisabledHandler(evt) { const { viewportId, element } = evt.detail; - const viewportInfo = Cornerstone3DViewportService.getViewportInfoById( + const viewportInfo = Cornerstone3DViewportService.getViewportInfo( viewportId ); ToolGroupService.disable(viewportInfo); diff --git a/extensions/cornerstone-3d/src/initCornerstoneTools.js b/extensions/cornerstone-3d/src/initCornerstoneTools.js index c661c468b99..9130ecdf68c 100644 --- a/extensions/cornerstone-3d/src/initCornerstoneTools.js +++ b/extensions/cornerstone-3d/src/initCornerstoneTools.js @@ -17,6 +17,7 @@ const { AngleTool, MagnifyTool, CrosshairsTool, + RectangleROIStartEndThresholdTool, } = cornerstone3DTools; export default function initCornerstone3DTools(configuration = {}) { @@ -37,6 +38,7 @@ export default function initCornerstone3DTools(configuration = {}) { cornerstone3DTools.addTool(AngleTool); cornerstone3DTools.addTool(MagnifyTool); cornerstone3DTools.addTool(CrosshairsTool); + cornerstone3DTools.addTool(RectangleROIStartEndThresholdTool); } const toolNames = { @@ -56,6 +58,7 @@ const toolNames = { Angle: AngleTool.toolName, Magnify: MagnifyTool.toolName, Crosshairs: CrosshairsTool.toolName, + RectangleROIStartEndThreshold: RectangleROIStartEndThresholdTool.toolName, }; export { toolNames }; diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts index c99b1d0f349..03c92557444 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Cornerstone3DViewportService.ts @@ -207,7 +207,7 @@ class Cornerstone3DViewportService implements IViewportService { public getCornerstone3DViewport( viewportId: string ): Types.IStackViewport | Types.IVolumeViewport | null { - const viewportInfo = this.getViewportInfoById(viewportId); + const viewportInfo = this.getViewportInfo(viewportId); if ( !viewportInfo || @@ -251,7 +251,7 @@ class Cornerstone3DViewportService implements IViewportService { return this.viewportsInfo.get(viewportIndex); } - public getViewportInfoById(viewportId: string): ViewportInfo { + public getViewportInfo(viewportId: string): ViewportInfo { // @ts-ignore for (const [index, viewport] of this.viewportsInfo.entries()) { if (viewport.getViewportId() === viewportId) { @@ -406,7 +406,7 @@ class Cornerstone3DViewportService implements IViewportService { public setVolumesForViewport(viewport, volumeInputArray) { viewport.setVolumes(volumeInputArray).then(() => { - const viewportInfo = this.getViewportInfoById(viewport.id); + const viewportInfo = this.getViewportInfo(viewport.id); const initialImageOptions = viewportInfo.getInitialImageOptions(); if ( @@ -504,19 +504,19 @@ class Cornerstone3DViewportService implements IViewportService { _getSlabThickness(displaySetOptions, volumeId) { const { blendMode } = displaySetOptions; - if (blendMode === undefined || !displaySetOptions.slabThickness) { + if ( + blendMode === undefined || + displaySetOptions.slabThickness === undefined + ) { return; } // if there is a slabThickness set as a number then use it - if ( - displaySetOptions.slabThickness && - typeof displaySetOptions.slabThickness === 'number' - ) { + if (typeof displaySetOptions.slabThickness === 'number') { return displaySetOptions.slabThickness; } - if (displaySetOptions.slabThickness === 'auto') { + if (displaySetOptions.slabThickness.toLowerCase() === 'fullvolume') { // calculate the slab thickness based on the volume dimensions const imageVolume = cache.getVolume(volumeId); diff --git a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts index 268fd543789..4767242582a 100644 --- a/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone-3d/src/services/ViewportService/Viewport.ts @@ -209,7 +209,7 @@ class ViewportInfo { voi: option.voi || ({} as VOI), voiInverted: option.voiInverted || false, colormap: option.colormap || undefined, - slabThickness: option.slabThickness || undefined, + slabThickness: option.slabThickness, blendMode, }); }); diff --git a/extensions/cornerstone-3d/src/utils/getCornerstoneBlendMode.ts b/extensions/cornerstone-3d/src/utils/getCornerstoneBlendMode.ts index 9f890d51bb6..4bc7cb449f3 100644 --- a/extensions/cornerstone-3d/src/utils/getCornerstoneBlendMode.ts +++ b/extensions/cornerstone-3d/src/utils/getCornerstoneBlendMode.ts @@ -6,7 +6,7 @@ export default function getCornerstoneBlendMode( blendMode: string ): Enums.BlendModes { if (!blendMode) { - return Enums.BlendModes.COMPOSITE_BLEND; + return Enums.BlendModes.COMPOSITE; } if (blendMode.toLowerCase() === MIP) { diff --git a/extensions/default/src/commandsModule.js b/extensions/default/src/commandsModule.js index a14c51e4552..7ca67a784c1 100644 --- a/extensions/default/src/commandsModule.js +++ b/extensions/default/src/commandsModule.js @@ -2,9 +2,17 @@ const commandsModule = ({ servicesManager, commandsManager }) => { const { MeasurementService, HangingProtocolService, + UINotificationService, } = servicesManager.services; const actions = { + displayNotification: ({ text }) => { + UINotificationService.show({ + title: 'RectangleROI Threshold Tip', + message: text, + type: 'info', + }); + }, clearMeasurements: () => { MeasurementService.clear(); }, @@ -23,7 +31,11 @@ const commandsModule = ({ servicesManager, commandsManager }) => { storeContexts: [], options: {}, }, - + displayNotification: { + commandFn: actions.displayNotification, + storeContexts: [], + options: {}, + }, nextStage: { commandFn: actions.nextStage, storeContexts: [], diff --git a/extensions/default/src/getLayoutTemplateModule.js b/extensions/default/src/getLayoutTemplateModule.js index 793f002fa85..856d8d12ae1 100644 --- a/extensions/default/src/getLayoutTemplateModule.js +++ b/extensions/default/src/getLayoutTemplateModule.js @@ -5,11 +5,11 @@ import ViewerLayout from './ViewerLayout'; - Init layout based on the displaySets and the objects. */ -export default function ({ +export default function({ servicesManager, extensionManager, commandsManager, - hotkeysManager + hotkeysManager, }) { function ViewerLayoutWithServices(props) { return ViewerLayout({ diff --git a/extensions/tmtv/package.json b/extensions/tmtv/package.json index 9e68cd7f785..85bf6c78078 100644 --- a/extensions/tmtv/package.json +++ b/extensions/tmtv/package.json @@ -30,7 +30,6 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", - "@ohif/extension-default": "^3.0.0", "dcmjs": "0.22.0", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", diff --git a/extensions/tmtv/src/Panels/PanelPetSUV.tsx b/extensions/tmtv/src/Panels/PanelPetSUV.tsx index bcc02cf92a1..3037b7a275b 100644 --- a/extensions/tmtv/src/Panels/PanelPetSUV.tsx +++ b/extensions/tmtv/src/Panels/PanelPetSUV.tsx @@ -51,23 +51,40 @@ export default function PanelPetSUV({ servicesManager, extensionManager }) { [metadata] ); - // get the patientMetadata from the StudyInstanceUIDs and update the state + const getMatchingPTDisplaySet = useCallback(() => { + const matches = HangingProtocolService.getDisplaySetsMatchDetails(); + + const ptDisplaySet = _getMatchedPtDisplaySet(matches, DisplaySetService); + + if (!ptDisplaySet) { + return; + } + + const metadata = _getPtMetadata(dataSource, ptDisplaySet); + return { + ptDisplaySet, + metadata, + }; + }, [dataSource, DisplaySetService, HangingProtocolService]); + useEffect(() => { - const { unsubscribe } = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, - ({ displaySetsAdded }) => { - const matches = HangingProtocolService.getDisplaySetsMatchDetails(); + const displaySets = DisplaySetService.activeDisplaySets; - const ptDisplaySet = _getMatchedPtDisplaySet( - matches, - DisplaySetService - ); + if (!displaySets.length) { + return; + } - if (!ptDisplaySet) { - return; - } + const { ptDisplaySet, metadata } = getMatchingPTDisplaySet(); + setPtDisplaySet(ptDisplaySet); + setMetadata(metadata); + }, []); - const metadata = _getPtMetadata(dataSource, ptDisplaySet); + // get the patientMetadata from the StudyInstanceUIDs and update the state + useEffect(() => { + const { unsubscribe } = DisplaySetService.subscribe( + DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, + () => { + const { ptDisplaySet, metadata } = getMatchingPTDisplaySet(); setPtDisplaySet(ptDisplaySet); setMetadata(metadata); } @@ -75,7 +92,7 @@ export default function PanelPetSUV({ servicesManager, extensionManager }) { return () => { unsubscribe(); }; - }, [DisplaySetService, dataSource]); + }, []); function updateMetadata() { if (!ptDisplaySet) { diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx new file mode 100644 index 00000000000..ec9c9d117cd --- /dev/null +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -0,0 +1,541 @@ +import React, { useEffect, useState, useRef } from 'react'; +import { utilities as csToolsUtils } from '@cornerstonejs/core'; +import PropTypes from 'prop-types'; +import { + Input, + SegmentationTable, + Select, + Button, + ButtonGroup, + Dialog, +} from '@ohif/ui'; +import { useTranslation } from 'react-i18next'; +import createAndDownloadTMTVReport from '../utils/createAndDownloadTMTVReport'; + +const options = [ + { value: 'roiStat', label: 'Percentage of Max Value' }, + { value: 'range', label: 'Range Threshold' }, +]; + +export default function PanelRoiThresholdSegmentation({ + servicesManager, + commandsManager, +}) { + const { t } = useTranslation('PanelSUV'); + const [showConfig, setShowConfig] = useState(false); + const [labelmapLoading, setLabelmapLoading] = useState(false); + const [activeSegmentationId, setActiveSegmentationId] = useState(''); + const [segmentations, setSegmentations] = useState([]); + const [tmtvValue, setTmtvValue] = useState(0); + + // keep track of old segmentations + const oldSegmentations = useRef([]); + + const { + SegmentationService, + UINotificationService, + UIDialogService, + } = servicesManager.services; + + const [config, setConfig] = useState({ + strategy: 'roiStat', + minValue: 0, + maxValue: 100, + numSlices: 1, + weight: 0.41, + }); + + // useEffect(() => { + // // ~~ Initial + // setSegmentations(SegmentationService.getSegmentations()); + + // // ~~ Subscription + // const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; + // const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; + // const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; + // const subscriptions = []; + + // [added, updated, removed].forEach(evt => { + // subscriptions.push( + // SegmentationService.subscribe(evt, () => { + // if (isMounted.current) { + // const segmentations = SegmentationService.getSegmentations(); + // setSegmentations(segmentations); + // } + // }).unsubscribe + // ); + // }); + + // return () => { + // subscriptions.forEach(unsub => { + // unsub(); + // }); + // }; + // }, [SegmentationService]); + + // // calculate the suv peak value for each segmentation + // // check if the segmentations have changed compared to the old segmentations + // useEffect(() => { + // if (oldSegmentations.current.length !== segmentations.length) { + // const newSegmentation = segmentations.find(seg => { + // // check if the segmentationId is not in the old segmentations + // return !oldSegmentations.current.find(oldSeg => oldSeg.id === seg.id); + // }); + + // if (newSegmentation) { + // setActiveSegmentationId(newSegmentation.id); + // } + // oldSegmentations.current = segmentations; + // } + // }, [segmentations]); + + // useEffect(() => { + // const subscription = SegmentationService.subscribe( + // SegmentationService.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, + // ({ segmentation }) => { + // if (isMounted.current) { + // const { id } = segmentation; + // const { viewport } = commandsManager.runCommand( + // 'getActiveViewportsEnabledElement' + // ); + + // hideSegmentController.toggleSegmentationVisibility( + // viewport.element, + // id + // ); + // } + // } + // ); + // return () => { + // subscription.unsubscribe(); + // }; + // }, [SegmentationService]); + + const handleCreateLabelmap = () => { + setLabelmapLoading(true); + commandsManager.runCommand('createNewLabelmapForPT', {}).then(() => { + setLabelmapLoading(false); + }); + }; + + const handleRoiThresholding = () => { + const labelmap = SegmentationService.getSegmentation(activeSegmentationId); + + if (!labelmap) { + UINotificationService.show({ + title: 'Segmentation Service', + message: 'No Active Segmentation is Selected', + type: 'error', + }); + return; + } + + const thresholdedLabelmap = commandsManager.runCommand('thresholdVolume', { + config, + labelmapUID: activeSegmentationId, + }); + + const lesionStats = commandsManager.runCommand('getLesionStats', { + labelmap: thresholdedLabelmap, + }); + + // Todo: right now it thresholds based on the active viewport's volume + const suvPeak = commandsManager.runCommand('calculateSuvPeak', { + labelmap: thresholdedLabelmap, + }); + + const lesionGlyoclysisStats = commandsManager.runCommand( + 'calculateLesionGlycolysis', + { lesionStats } + ); + + // update segDetails with the suv peak for the active segmentation + labelmap.cachedStats = { + ...lesionStats, + ...suvPeak, + ...lesionGlyoclysisStats, + }; + + const notYetUpdatedAtSource = true; + SegmentationService.update( + activeSegmentationId, + labelmap, + notYetUpdatedAtSource + ); + handleTMTVCalculation(); + }; + + const handleSegmentationEdit = id => { + onSegmentationItemEditHandler({ id, SegmentationService, UIDialogService }); + }; + + const handleSegmentationDelete = segmentationId => { + SegmentationService.remove(segmentationId); + handleTMTVCalculation(); + }; + + const handleTMTVCalculation = () => { + const labelmaps = commandsManager.runCommand('getLabelmapVolumes', {}); + + if (labelmaps.length === 0) { + setTmtvValue(0); + return; + } + + const tmtv = csToolsUtils.segmentation.calculateTMTV(labelmaps); + setTmtvValue(tmtv.toFixed(4)); + }; + + const handleSegmentationClick = segmentationId => { + const { + viewport: { element }, + } = commandsManager.runCommand('getActiveViewportsEnabledElement', {}); + activeLabelmapController.setActiveLabelmapByLabelmapUID( + element, + segmentationId + ); + }; + + const handleSegmentationHide = segmentationId => { + SegmentationService.toggleSegmentationsVisibility([segmentationId]); + }; + + const handleSegmentationHideAll = segmentationIds => { + SegmentationService.toggleSegmentationsVisibility(segmentationIds); + }; + + const handleExportClick = () => { + // General Segmentation information + const segReport = commandsManager.runCommand('getSegmentationReport', {}); + const tlg = commandsManager.runCommand('getTotalLesionGlycolysis', { + segmentations: SegmentationService.getSegmentations(), + }); + + const additionalReportRows = [ + { key: 'Total Metabolic Tumor Volume', value: { tmtv: tmtvValue } }, + { key: 'Total Lesion Glycolysis', value: { tlg: tlg.toFixed(4) } }, + { key: 'Threshold Configuration', value: { ...config } }, + ]; + + createAndDownloadTMTVReport(segReport, additionalReportRows); + }; + + const handleRTExport = () => { + // get all the RoiThresholdManual Rois + const toolStates = getDefaultToolStateManager(); + + // iterate inside all the frameOfReferenceUIDs inside the toolState + let roiThresholdManualRois = []; + + const framesOfReference = toolStates.getFramesOfReference(); + framesOfReference.forEach(frameOfReferenceUID => { + const toolState = toolStates.get( + frameOfReferenceUID, + 'RectangleRoiStartEndThreshold' + ); + + if (toolState) { + roiThresholdManualRois = roiThresholdManualRois.concat(toolState); + } + }); + + commandsManager.runCommand('saveRTReport', { + toolState: roiThresholdManualRois, + }); + }; + + return ( +
+
+
+ + {t('Roi Threshold Segmentation')} + +
+
+
+
+ + +
+
{ + setShowConfig(!showConfig); + }} + > +
{t('Configuration')}
+
+ {showConfig && ( + + )} + {labelmapLoading ? ( +
Loading Segmentation Panel ...
+ ) : null} + {tmtvValue && ( +
+ + {'TMTV:'} + +
{`${tmtvValue} mL`}
+
+ )} + {/* show segmentation table */} +
+ {segmentations && segmentations.length && ( + { + setActiveSegmentationId(id); + handleSegmentationClick(id); + }} + onToggleVisibility={id => { + handleSegmentationHide(id); + }} + onToggleVisibilityAll={ids => { + handleSegmentationHideAll(ids); + }} + onDelete={id => { + handleSegmentationDelete(id); + }} + onEdit={id => { + handleSegmentationEdit(id); + }} + /> + )} +
+ {segmentations?.length ? ( +
+ + + + + + +
+ ) : null} +
+
+ ); +} + +PanelRoiThresholdSegmentation.propTypes = { + commandsManager: PropTypes.shape({ + runCommand: PropTypes.func.isRequired, + }), + servicesManager: PropTypes.shape({ + services: PropTypes.shape({ + SegmentationService: PropTypes.shape({ + getSegmentation: PropTypes.func.isRequired, + getSegmentations: PropTypes.func.isRequired, + toggleSegmentationsVisibility: PropTypes.func.isRequired, + subscribe: PropTypes.func.isRequired, + EVENTS: PropTypes.object.isRequired, + VALUE_TYPES: PropTypes.object.isRequired, + }).isRequired, + }).isRequired, + }).isRequired, +}; + +function onSegmentationItemEditHandler({ + id, + SegmentationService, + UIDialogService, +}) { + const segmentation = SegmentationService.getSegmentation(id); + + const onSubmitHandler = ({ action, value }) => { + switch (action.id) { + case 'save': { + SegmentationService.update( + id, + { + ...segmentation, + ...value, + }, + true + ); + } + } + UIDialogService.dismiss({ id: 'enter-annotation' }); + }; + + UIDialogService.create({ + id: 'enter-annotation', + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Enter your annotation', + noCloseButton: true, + value: { label: segmentation.label || '' }, + body: ({ value, setValue }) => { + const onChangeHandler = event => { + event.persist(); + setValue(value => ({ ...value, label: event.target.value })); + }; + + const onKeyPressHandler = event => { + if (event.key === 'Enter') { + onSubmitHandler({ value, action: { id: 'save' } }); + } + }; + return ( +
+ +
+ ); + }, + actions: [ + // temp: swap button types until colors are updated + { id: 'cancel', text: 'Cancel', type: 'primary' }, + { id: 'save', text: 'Save', type: 'secondary' }, + ], + onSubmit: onSubmitHandler, + }, + }); +} + +function RoiThresholdConfiguration({ config, setConfig, commandsManager }) { + const { t } = useTranslation('RoiThresholdConfiguration'); + + return ( +
+
+
+ { + setConfig((prevConfig = {}) => { + return { + ...prevConfig, + weight: Number(e.target.value), + }; + }); + }} + /> + )} + {config.strategy !== 'roiStat' && ( +
+ { + setConfig((prevConfig = {}) => { + return { + ...prevConfig, + minValue: Number(e.target.value), + }; + }); + }} + /> + { + setConfig((prevConfig = {}) => { + return { + ...prevConfig, + maxValue: Number(e.target.value), + }; + }); + }} + /> +
+ )} +
+ ); +} diff --git a/extensions/tmtv/src/Panels/index.tsx b/extensions/tmtv/src/Panels/index.tsx index 9ab2945ecee..0fa6418fdf4 100644 --- a/extensions/tmtv/src/Panels/index.tsx +++ b/extensions/tmtv/src/Panels/index.tsx @@ -1,3 +1,4 @@ import PanelPetSUV from './PanelPetSUV'; +import PanelROIThresholdSegmentation from './PanelROIThresholdSegmentation'; -export { PanelPetSUV }; +export { PanelPetSUV, PanelROIThresholdSegmentation }; diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js new file mode 100644 index 00000000000..830237ae0f6 --- /dev/null +++ b/extensions/tmtv/src/commandsModule.js @@ -0,0 +1,414 @@ +import { vec3 } from 'gl-matrix'; +import * as cornerstone from '@cornerstonejs/core'; +import * as cornerstoneTools from '@cornerstonejs/tools'; +import CornerstoneViewportDownloadForm from './utils/CornerstoneViewportDownloadForm'; + +import { Enums, annotation } from '@cornerstonejs/tools'; +const RECTANGLE_ROI_THRESHOLD_MANUAL = 'RectangleROIStartEndThreshold'; + +const commandsModule = ({ + servicesManager, + commandsManager, + extensionManager, +}) => { + const { + ViewportGridService, + UINotificationService, + SegmentationService, + DisplaySetService, + ViewportService, + } = servicesManager.services; + + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-cornerstone-3d.utilityModule.common' + ); + + const { getEnabledElement } = utilityModule.exports; + + function _getActiveViewportsEnabledElement() { + const { activeViewportIndex } = ViewportGridService.getState(); + const { element } = getEnabledElement(activeViewportIndex) || {}; + const enabledElement = cornerstone.getEnabledElement(element); + return enabledElement; + } + + const actions = { + // createNewLabelmapForPT: async () => { + // const renderingEngine = ViewportService.getRenderingEngine(); + + // const viewports = renderingEngine.getViewports(); + + // // Find the viewport that has a volume loaded of PT + // const viewport = viewports.find(viewport => { + // const { uid } = viewport.getDefaultActor(); + // const volume = cache.getVolume(uid); + // return volume?.metadata?.Modality === 'PT'; + // }); + + // if (!viewport) { + // console.warn('No viewport found with PT loaded yet'); + // } + + // const { element } = viewport; + // const labelmapIndex = activeLabelmapController.getNextLabelmapIndex( + // element + // ); + // await activeLabelmapController.setActiveLabelmapIndex( + // element, + // labelmapIndex + // ); + // }, + // setPTColormap: ({ toolGroupUID, colormap }) => { + // const toolGroup = ToolGroupManager.getToolGroupById(toolGroupUID); + + // if (!toolGroup) { + // return; + // } + + // const { viewports } = toolGroup; + + // const renderingEngine = ViewportService.getRenderingEngine(); + + // const { viewportUID } = viewports[0]; + + // const viewport = renderingEngine.getViewport(viewportUID); + // const actors = viewport.getActors(); + + // const displaySetUIDs = ViewportService.getDisplaySetUIDsForViewportUID( + // viewportUID + // ); + + // let ptDisplaySetUID; + // displaySetUIDs.forEach(displaySetUID => { + // const displaySet = DisplaySetService.getDisplaySetByUID(displaySetUID); + // if (displaySet.Modality === 'PT') { + // ptDisplaySetUID = displaySetUID; + // } + // }); + + // if (!ptDisplaySetUID) { + // return; + // } + + // const ptActor = actors.find(a => a.uid.includes(ptDisplaySetUID)); + + // if (!ptActor) { + // return; + // } + + // const { volumeActor } = ptActor; + // setColormap(volumeActor, colormap); + + // viewport.getScene().render(); + // }, + // getActiveViewportsEnabledElement: () => { + // return _getActiveViewportsEnabledElement(); + // }, + // thresholdVolume: ({ labelmapUID, config }) => { + // const labelmap = cornerstone.cache.getVolume(labelmapUID); + // const volume = cornerstone.cache.getVolume(labelmap.referenceVolumeUID); + + // if (!volume) { + // throw new Error('No Reference volume found'); + // } + + // if (!labelmap) { + // throw new Error('No Reference labelmap found'); + // } + + // // const RoiThresholdToolDataList = toolDataSelection.getSelectedToolDataByToolName( + // // RECTANGLE_ROI_THRESHOLD + // // ); + // const RoiThresholdManualToolDataList = toolDataSelection.getSelectedToolDataByToolName( + // RECTANGLE_ROI_THRESHOLD_MANUAL + // ); + + // const selectedToolDataList = [ + // // ...RoiThresholdToolDataList, + // ...RoiThresholdManualToolDataList, + // ]; + + // if (selectedToolDataList.length === 0) { + // UINotificationService.show({ + // title: 'Commands Module', + // message: 'No RoiThreshold Tool is Selected', + // type: 'error', + // }); + // return; + // } + + // const configToUse = { + // lowerThreshold: config.minValue, + // higherThreshold: config.maxValue, + // overwrite: true, + // statistic: 'max', + // weight: config.weight, + // }; + + // const thresholdVolumeMethod = + // config.strategy === 'range' + // ? csToolsUtils.segmentation.thresholdVolumeByRange + // : csToolsUtils.segmentation.thresholdVolumeByRoiStats; + + // return thresholdVolumeMethod( + // selectedToolDataList, + // [volume], + // labelmap, + // configToUse + // ); + // }, + // calculateSuvPeak: ({ labelmap }) => { + // const { viewport } = _getActiveViewportsEnabledElement(); + + // if (viewport instanceof cornerstone.StackViewport) { + // throw new Error('Cannot create a labelmap from a stack viewport'); + // } + + // const { uid } = viewport.getDefaultActor(); + // const volume = cornerstone.getVolume(uid); + + // const toolData = toolDataSelection.getSelectedToolDataByToolName( + // RECTANGLE_ROI_THRESHOLD_MANUAL + // ); + + // const suvPeak = csToolsUtils.segmentation.calculateSuvPeak( + // viewport, + // labelmap, + // volume, + // toolData + // ); + + // return { + // suvPeak: suvPeak.mean, + // suvMax: suvPeak.max, + // suvMaxIJK: suvPeak.maxIJK, + // suvMaxLPS: suvPeak.maxLPS, + // }; + // }, + // getLesionStats: ({ labelmap, segmentIndex = 1 }) => { + // const { scalarData, spacing } = cornerstone.getVolume(labelmap.uid); + + // const { scalarData: referencedScalarData } = cornerstone.getVolume( + // labelmap.referenceVolumeUID + // ); + + // let segmentationMax = -Infinity; + // let segmentationMin = Infinity; + // let segmentationValues = []; + + // let voxelCount = 0; + // for (let i = 0; i < scalarData.length; i++) { + // if (scalarData[i] === segmentIndex) { + // const value = referencedScalarData[i]; + // segmentationValues.push(value); + // if (value > segmentationMax) { + // segmentationMax = value; + // } + // if (value < segmentationMin) { + // segmentationMin = value; + // } + // voxelCount++; + // } + // } + + // const stats = { + // minValue: segmentationMin, + // maxValue: segmentationMax, + // meanValue: segmentationValues.reduce((a, b) => a + b, 0) / voxelCount, + // stdValue: Math.sqrt( + // segmentationValues.reduce((a, b) => a + b * b, 0) / voxelCount - + // segmentationValues.reduce((a, b) => a + b, 0) / voxelCount ** 2 + // ), + // volume: voxelCount * spacing[0] * spacing[1] * spacing[2] * 1e-3, + // }; + + // return stats; + // }, + // calculateLesionGlycolysis: ({ lesionStats }) => { + // const { meanValue, volume } = lesionStats; + + // return { + // lesionGlyoclysisStats: volume * meanValue, + // }; + // }, + // getTotalLesionGlycolysis: ({ segmentations }) => { + // const labelmapVolumes = segmentations.map(segmentation => { + // return cornerstone.cache.getVolume(segmentation.id); + // }); + + // // merge labelmap will through an error if labels maps are not the same size + // // or same direction or .... + // const mergedLabelmap = csToolsUtils.segmentation.createMergedLabelmap( + // labelmapVolumes + // ); + + // // grabbing the first labelmap referenceVolume since it will be the same for all + // const { referenceVolumeUID, spacing } = labelmapVolumes[0]; + + // if (!referenceVolumeUID) { + // throw new Error('No Reference volume found'); + // } + + // const ptVolume = cornerstone.getVolume(referenceVolumeUID); + + // const mergedLabelData = mergedLabelmap.scalarData; + + // let Suvs = 0; + // let totalLesionVoxelCount = 0; + // for (let i = 0; i < mergedLabelData.length; i++) { + // // if not backgournd + // if (mergedLabelData[i] !== 0) { + // const ptSuv = ptVolume.scalarData[i]; + // Suvs += ptSuv; + // totalLesionVoxelCount += 1; + // } + // } + + // // Average SUV for the merged labelmap + // const averageSuv = Suvs / totalLesionVoxelCount; + + // // total Lesion Glycolysis [suv * ml] + // return ( + // averageSuv * + // totalLesionVoxelCount * + // spacing[0] * + // spacing[1] * + // spacing[2] * + // 1e-3 + // ); + // }, + // getLabelmapVolumes: () => { + // const segmentations = SegmentationService.getSegmentations(); + // const labelmapVolumes = segmentations.map(segmentation => { + // return cornerstone.cache.getVolume(segmentation.id); + // }); + + // return labelmapVolumes; + // }, + setStartSliceForROIThresholdTool: () => { + const { viewport } = _getActiveViewportsEnabledElement(); + const { focalPoint, viewPlaneNormal } = viewport.getCamera(); + + const selectedAnnotationUIDs = cornerstoneTools.annotation.selection.getAnnotationsSelectedByToolName( + RECTANGLE_ROI_THRESHOLD_MANUAL + ); + + const annotationUID = selectedAnnotationUIDs[0]; + + const annotation = cornerstoneTools.annotation.state.getAnnotation( + annotationUID + ); + + const { handles } = annotation.data; + const { points } = handles; + + // get the current slice Index + const sliceIndex = viewport.getCurrentImageIdIndex(); + annotation.data.startSlice = sliceIndex; + + // distance between camera focal point and each point on the rectangle + const newPoints = points.map(point => { + const distance = vec3.create(); + vec3.subtract(distance, focalPoint, point); + // distance in the direction of the viewPlaneNormal + const distanceInViewPlane = vec3.dot(distance, viewPlaneNormal); + // new point is current point minus distanceInViewPlane + const newPoint = vec3.create(); + vec3.scaleAndAdd(newPoint, point, viewPlaneNormal, distanceInViewPlane); + + return newPoint; + // + }); + + handles.points = newPoints; + annotation.data.invalidated = true; // IMPORTANT: invalidate the toolData for the cached stat to get updated + viewport.render(); + }, + setEndSliceForROIThresholdTool: () => { + const { viewport } = _getActiveViewportsEnabledElement(); + + const selectedAnnotationUIDs = cornerstoneTools.annotation.selection.getAnnotationsSelectedByToolName( + RECTANGLE_ROI_THRESHOLD_MANUAL + ); + + const annotationUID = selectedAnnotationUIDs[0]; + + const annotation = cornerstoneTools.annotation.state.getAnnotation( + annotationUID + ); + + // get the current slice Index + const sliceIndex = viewport.getCurrentImageIdIndex(); + annotation.data.endSlice = sliceIndex; + annotation.data.invalidated = true; // IMPORTANT: invalidate the toolData for the cached stat to get updated + + viewport.render(); + }, + }; + + const definitions = { + setEndSliceForROIThresholdTool: { + commandFn: actions.setEndSliceForROIThresholdTool, + storeContexts: [], + options: {}, + }, + setStartSliceForROIThresholdTool: { + commandFn: actions.setStartSliceForROIThresholdTool, + storeContexts: [], + options: {}, + }, + // createNewLabelmapForPT: { + // commandFn: actions.createNewLabelmapForPT, + // storeContexts: [], + // options: {}, + // }, + // setPTColormap: { + // commandFn: actions.setPTColormap, + // storeContexts: [], + // options: {}, + // }, + // getActiveViewportsEnabledElement: { + // commandFn: actions.getActiveViewportsEnabledElement, + // storeContexts: [], + // options: {}, + // }, + // thresholdVolume: { + // commandFn: actions.thresholdVolume, + // storeContexts: [], + // options: {}, + // }, + // getLabelmapVolumes: { + // commandFn: actions.getLabelmapVolumes, + // storeContexts: [], + // options: {}, + // }, + // getTotalLesionGlycolysis: { + // commandFn: actions.getTotalLesionGlycolysis, + // storeContexts: [], + // options: {}, + // }, + // calculateSuvPeak: { + // commandFn: actions.calculateSuvPeak, + // storeContexts: [], + // options: {}, + // }, + // getLesionStats: { + // commandFn: actions.getLesionStats, + // storeContexts: [], + // options: {}, + // }, + // calculateLesionGlycolysis: { + // commandFn: actions.calculateLesionGlycolysis, + // storeContexts: [], + // options: {}, + // }, + }; + + return { + actions, + definitions, + defaultContext: 'TMTV:CORNERSTONE3D', + }; +}; + +export default commandsModule; diff --git a/extensions/tmtv/src/getHangingProtocolModule.js b/extensions/tmtv/src/getHangingProtocolModule.js index 94f879186dd..8972e62551c 100644 --- a/extensions/tmtv/src/getHangingProtocolModule.js +++ b/extensions/tmtv/src/getHangingProtocolModule.js @@ -244,9 +244,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, ], }, @@ -274,9 +271,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, ], }, @@ -304,9 +298,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, ], }, @@ -456,9 +447,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, { options: { @@ -506,9 +494,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, { options: { @@ -556,9 +541,6 @@ const ptCT = { displaySets: [ { id: 'ctDisplaySet', - options: { - blendMode: 'MIP', - }, }, { options: { @@ -592,7 +574,7 @@ const ptCT = { { options: { blendMode: 'MIP', - slabThickness: 'auto', + slabThickness: 'fullVolume', voi: { windowWidth: 5, windowCenter: 2.5, diff --git a/extensions/tmtv/src/getPanelModule.tsx b/extensions/tmtv/src/getPanelModule.tsx index 4ac57057ff6..3a9dde3db3c 100644 --- a/extensions/tmtv/src/getPanelModule.tsx +++ b/extensions/tmtv/src/getPanelModule.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { PanelPetSUV } from './Panels'; +import { PanelPetSUV, PanelROIThresholdSegmentation } from './Panels'; // TODO: // - No loading UI exists yet @@ -21,6 +21,16 @@ function getPanelModule({ ); }; + const wrappedROIThresholdSeg = () => { + return ( + + ); + }; + return [ { name: 'petSUV', @@ -29,6 +39,13 @@ function getPanelModule({ label: 'PET-SUV', component: wrappedPanelPetSuv, }, + { + name: 'ROIThresholdSeg', + iconName: 'circled-checkmark', + iconLabel: 'Threshold Seg', + label: 'Threshold-Seg', + component: wrappedROIThresholdSeg, + }, ]; } diff --git a/extensions/tmtv/src/index.tsx b/extensions/tmtv/src/index.tsx index 877f9b16e02..bf085efdb5e 100644 --- a/extensions/tmtv/src/index.tsx +++ b/extensions/tmtv/src/index.tsx @@ -1,6 +1,8 @@ import { id } from './id'; import getHangingProtocolModule from './getHangingProtocolModule'; import getPanelModule from './getPanelModule'; +import init from './init'; +import commandsModule from './commandsModule'; /** * @@ -10,8 +12,18 @@ const tmtvExtension = { * Only required property. Should be a unique value across all extensions. */ id, + preRegistration({ servicesManager, commandsManager, configuration = {} }) { + init({ servicesManager, commandsManager, configuration }); + }, getPanelModule, getHangingProtocolModule, + getCommandsModule({ servicesManager, commandsManager, extensionManager }) { + return commandsModule({ + servicesManager, + commandsManager, + extensionManager, + }); + }, }; export default tmtvExtension; diff --git a/extensions/tmtv/src/init.js b/extensions/tmtv/src/init.js new file mode 100644 index 00000000000..e877100994e --- /dev/null +++ b/extensions/tmtv/src/init.js @@ -0,0 +1,42 @@ +import measurementServiceMappingsFactory from './utils/measurementServiceMappings/measurementServiceMappingsFactory'; + +const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; +const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; +/** + * + * @param {Object} servicesManager + * @param {Object} configuration + * @param {Object|Array} configuration.csToolsConfig + */ +export default function init({ + servicesManager, + commandsManager, + configuration, +}) { + const { + MeasurementService, + DisplaySetService, + ViewportService, + } = servicesManager.services; + + const { RectangleRoiStartEndThreshold } = measurementServiceMappingsFactory( + MeasurementService, + DisplaySetService, + ViewportService + ); + + // Todo: this needs to be run after cornerstone3D creates the namespace + // for the measurement tools and all tools have been added to cornerstone3D + const csTools3DVer1MeasurementSource = MeasurementService.getSource( + CORNERSTONE_3D_TOOLS_SOURCE_NAME, + CORNERSTONE_3D_TOOLS_SOURCE_VERSION + ); + + MeasurementService.addMapping( + csTools3DVer1MeasurementSource, + 'RectangleRoiStartEndThreshold', + RectangleRoiStartEndThreshold.matchingCriteria, + RectangleRoiStartEndThreshold.toAnnotation, + RectangleRoiStartEndThreshold.toMeasurement + ); +} diff --git a/extensions/tmtv/src/utils/createAndDownloadTMTVReport.js b/extensions/tmtv/src/utils/createAndDownloadTMTVReport.js new file mode 100644 index 00000000000..996ebd0f50f --- /dev/null +++ b/extensions/tmtv/src/utils/createAndDownloadTMTVReport.js @@ -0,0 +1,50 @@ +export default function createAndDownloadTMTVReport( + segReport, + additionalReportRows +) { + const firstReport = segReport[Object.keys(segReport)[0]]; + const columns = Object.keys(firstReport); + const csv = [columns.join(',')]; + + Object.values(segReport).forEach(segmentation => { + const row = []; + columns.forEach(column => { + // if it is array then we need to replace , with space to avoid csv parsing error + row.push( + Array.isArray(segmentation[column]) + ? segmentation[column].join(' ') + : segmentation[column] + ); + }); + csv.push(row.join(',')); + }); + + csv.push(''); + csv.push(''); + csv.push(''); + + csv.push(`Patient ID,${firstReport.PatientID}`); + csv.push(`Study Date,${firstReport.StudyDate}`); + csv.push(''); + additionalReportRows.forEach(({ key, value: values }) => { + const temp = []; + temp.push(`${key}`); + Object.keys(values).forEach(k => { + temp.push(`${k}`); + temp.push(`${values[k]}`); + }); + + csv.push(temp.join(',')); + }); + + const blob = new Blob([csv.join('\n')], { + type: 'text/csv;charset=utf-8', + }); + + const url = URL.createObjectURL(blob); + + const a = document.createElement('a'); + a.href = url; + a.download = `${firstReport.PatientID}_tmtv.csv`; + a.click(); +} diff --git a/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js b/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js index ae0ed4a9e33..fb5baa5395d 100644 --- a/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js +++ b/extensions/tmtv/src/utils/getStudiesForPatientByStudyInstanceUID.js @@ -21,6 +21,9 @@ async function getStudiesForPatientByStudyInstanceUID( patientId: getStudyResult[0].mrn, }); } + console.log('No mrn found for', getStudyResult); + // The original study we KNOW belongs to the same set, so just return it + return getStudyResult; } export default getStudiesForPatientByStudyInstanceUID; diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js new file mode 100644 index 00000000000..e745ae886c8 --- /dev/null +++ b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js @@ -0,0 +1,113 @@ +import SUPPORTED_TOOLS from './constants/supportedTools'; +import getSOPInstanceAttributes from './utils/getSOPInstanceAttributes'; + +const RectangleRoiStartEndThreshold = { + toAnnotation: (measurement, definition) => {}, + + /** + * Maps cornerstone annotation event data to measurement service format. + * + * @param {Object} cornerstone Cornerstone event data + * @return {Measurement} Measurement instance + */ + toMeasurement: ( + csToolsAnnotation, + DisplaySetService, + ViewportService, + getValueTypeFromToolType + ) => { + const { toolData, sceneUID } = csToolsAnnotation; + const { metadata, data } = toolData; + + if (!metadata || !data) { + console.warn('Length tool: Missing metadata or data'); + return null; + } + + const { + toolName, + referencedImageId, + FrameOfReferenceUID, + toolDataUID, + } = metadata; + + const validToolType = SUPPORTED_TOOLS.includes(toolName); + + if (!validToolType) { + throw new Error('Tool not supported'); + } + + const { + SOPInstanceUID, + SeriesInstanceUID, + StudyInstanceUID, + } = getSOPInstanceAttributes(ViewportService, referencedImageId, sceneUID); + + let displaySet; + + if (SOPInstanceUID) { + displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + SOPInstanceUID, + SeriesInstanceUID + ); + } else { + displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + } + + const { cachedStats } = data; + // const { displayText, details } = getDataFromAnnotation(toolData); + + // /* + // This function is used to convert the measurement data to a format that is + // suitable for the report generation (e.g. for the csv report). The report + // returns a list of columns and corresponding values. + // */ + // const getReport = details => { + // const { Length } = details; + // const { value, unit } = Length; + + // const columns = [`Length ${unit}`]; + // const values = [value]; + + // const { FrameOfReferenceUID } = toolData.metadata; + // const { points } = toolData.data.handles; + // if (FrameOfReferenceUID) { + // columns.push('FrameOfReferenceUID'); + // values.push(FrameOfReferenceUID); + // } + + // if (points) { + // columns.push('points'); + // // points has the form of [[x1, y1, z1], [x2, y2, z2], ...] + // // convert it to string of [[x1 y1 z1];[x2 y2 z2];...] + // // so that it can be used in the csv report + // values.push(points.map(p => p.join(' ')).join(';')); + // } + + // return { + // columns, + // values, + // }; + // }; + + return { + id: toolDataUID, + FrameOfReferenceUID, + SOPInstanceUID: SOPInstanceUID, + referenceSeriesUID: SeriesInstanceUID, + referenceStudyUID: StudyInstanceUID, + displaySetInstanceUID: displaySet.displaySetInstanceUID, + label: metadata.label, + toolName: metadata.toolName, + // description: 'measurementData.description', + type: getValueTypeFromToolType(toolName), + points: data.handles, + // displayText: displayText, + // getReport: () => getReport(details), + data: cachedStats, + metadata, + }; + }, +}; + +export default RectangleRoiStartEndThreshold; diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/constants/supportedTools.js b/extensions/tmtv/src/utils/measurementServiceMappings/constants/supportedTools.js new file mode 100644 index 00000000000..31cc1059ef7 --- /dev/null +++ b/extensions/tmtv/src/utils/measurementServiceMappings/constants/supportedTools.js @@ -0,0 +1 @@ +export default ['RectangleROIStartEndThreshold']; diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js new file mode 100644 index 00000000000..0ba111571cc --- /dev/null +++ b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js @@ -0,0 +1,48 @@ +import RectangleRoiStartEndThreshold from './RectangleRoiStartEndThreshold'; + +const measurementServiceMappingsFactory = ( + MeasurementService, + DisplaySetService, + ViewportService +) => { + /** + * Maps measurement service format object to cornerstone annotation object. + * + * @param {Measurement} measurement The measurement instance + * @param {string} definition The source definition + * @return {Object} Cornerstone annotation data + */ + + const _getValueTypeFromToolType = toolType => { + const { SUV_PEAK } = MeasurementService.VALUE_TYPES; + + // TODO -> I get why this was attemped, but its not nearly flexible enough. + // A single measurement may have an ellipse + a bidirectional measurement, for instances. + // You can't define a bidirectional tool as a single type.. + const TOOL_TYPE_TO_VALUE_TYPE = { + ptSUVPeak: SUV_PEAK, + }; + + return TOOL_TYPE_TO_VALUE_TYPE[toolType]; + }; + + return { + RectangleRoiStartEndThreshold: { + toAnnotation: RectangleRoiStartEndThreshold.toAnnotation, + toMeasurement: csToolsAnnotation => + RectangleRoiStartEndThreshold.toMeasurement( + csToolsAnnotation, + DisplaySetService, + ViewportService, + _getValueTypeFromToolType + ), + matchingCriteria: [ + { + valueType: MeasurementService.VALUE_TYPES.ROI_THRESHOLD_MANUAL, + }, + ], + }, + }; +}; + +export default measurementServiceMappingsFactory; diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js b/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js new file mode 100644 index 00000000000..0f47897bb20 --- /dev/null +++ b/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js @@ -0,0 +1,69 @@ +import * as cornerstone from '@cornerstonejs/core'; + +/** + * It checks if the imageId is provided then it uses it to query + * the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID. + * If the imageId is not provided then it uses the sceneUID to get the viewports + * inside the scene and then it checks each viewport to find the one that has + * acquisition plane view, and uses the currentImageId of the viewport to + * query the metadata and get UIDs. + * @param {string} imageId The image id of the referenced image + * @param {string} sceneUID The scene UID of the measurement tool + * @returns + */ +export default function getSOPInstanceAttributes( + imageId, + Cornerstone3DViewportService, + viewportId +) { + if (imageId) { + return _getUIDFromImageID(imageId); + } + + // Todo: implement for volume viewports and use the referencedSeriesInstanceUID + + // if no imageId => measurement is not in the acquisition plane + // const metadata = getUIDFromScene(Cornerstone3DViewportService, viewportId); + + // if (!metadata) { + // throw new Error('Not viewport with imageId found'); + // } + + // // Since the series and study UID is derived from another viewport in the + // // same scene, we cannot include the SOPInstanceUID + // return { + // SOPInstanceUID: null, + // SeriesInstanceUID: metadata.SeriesInstanceUID, + // StudyInstanceUID: metadata.StudyInstanceUID, + // }; +} + +function _getUIDFromImageID(imageId) { + const instance = cornerstone.metaData.get('instance', imageId); + + return { + SOPInstanceUID: instance.SOPInstanceUID, + SeriesInstanceUID: instance.SeriesInstanceUID, + StudyInstanceUID: instance.StudyInstanceUID, + }; +} + +// function getUIDFromScene(Cornerstone3DViewportService) { +// const renderingEngine = Cornerstone3DViewportService.getRenderingEngine(); +// const scene = renderingEngine.getScene(sceneUID); + +// const viewportUIDs = scene.getViewportIds(); + +// if (viewportUIDs.length === 0) { +// throw new Error('No viewport found in scene'); +// } + +// for (let i = 0; i < viewportUIDs.length; i++) { +// const vp = renderingEngine.getViewport(viewportUIDs[i]); +// const imageId = vp.getCurrentImageId(); + +// if (imageId) { +// return _getUIDFromImageID(imageId); +// } +// } +// } diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 66b280fd542..5472420511a 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -18,6 +18,7 @@ const cs3d = { const tmtv = { hangingProtocols: '@ohif/extension-tmtv.hangingProtocolModule.ptCT', petSUV: '@ohif/extension-tmtv.panelModule.petSUV', + ROIThresholdPanel: '@ohif/extension-tmtv.panelModule.ROIThresholdSeg', }; const extensionDependencies = { @@ -109,7 +110,9 @@ function modeFactory({ modeConfiguration }) { const crosshairsConfig = { ...toolConfig, - actorUIDsForSlabThickness: [displaySets[0].displaySetInstanceUID], + filterActorUIDsToSetSlabThickness: [ + displaySets[0].displaySetInstanceUID, + ], }; ToolGroupService.setToolConfiguration( @@ -138,6 +141,7 @@ function modeFactory({ modeConfiguration }) { 'WindowLevel', 'Crosshairs', 'Pan', + 'RectangleROIStartEndThreshold', ]); }, onModeExit: ({ servicesManager }) => { @@ -179,7 +183,7 @@ function modeFactory({ modeConfiguration }) { id: ohif.layout, props: { leftPanels: [], - rightPanels: [tmtv.petSUV], + rightPanels: [tmtv.petSUV, tmtv.ROIThresholdPanel], viewports: [ { namespace: cs3d.viewport, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 6942dd2216b..29b8593661d 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -55,7 +55,14 @@ function initToolGroups(toolNames, Enums, ToolGroupService) { ); ToolGroupService.createToolGroupAndAddTools( toolGroupIds.PT, - tools, + { + active: tools.active, + passive: [ + ...tools.passive, + { toolName: toolNames.RectangleROIStartEndThreshold }, + ], + disabled: tools.disabled, + }, toolsConfig ); ToolGroupService.createToolGroupAndAddTools( diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index bb60f85ab8a..dc30d414066 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -236,6 +236,33 @@ const toolbarButtons = [ ], }, }, + { + id: 'RectangleROIStartEndThreshold', + type: 'ohif.radioGroup', + props: { + type: 'tool', + icon: 'pencil', + label: 'Rectangle ROI Threshold', + commands: [ + ..._createCommands('setToolActive', 'RectangleROIStartEndThreshold', [ + toolGroupIds.PT, + ]), + { + commandName: 'displayNotification', + commandOptions: { + text: + 'RectangleROI Threshold tool should be used on PT Axial Viewport', + }, + }, + { + commandName: 'setViewportActive', + commandOptions: { + viewportId: 'ptAXIAL', + }, + }, + ], + }, + }, ]; export default toolbarButtons; diff --git a/platform/core/src/classes/CommandsManager.js b/platform/core/src/classes/CommandsManager.js index 88823f95e99..2ff961230ad 100644 --- a/platform/core/src/classes/CommandsManager.js +++ b/platform/core/src/classes/CommandsManager.js @@ -18,16 +18,8 @@ import log from '../log.js'; * to extend this class, please check it's source before adding new methods. */ export class CommandsManager { - constructor({ getActiveContexts } = {}) { + constructor({} = {}) { this.contexts = {}; - - if (!getActiveContexts) { - throw new Error( - 'CommandsManager was instantiated without getActiveContexts()' - ); - } - - this._getActiveContexts = getActiveContexts; } /** @@ -122,12 +114,8 @@ export class CommandsManager { contexts.push(context); } } else { - const activeContexts = this._getActiveContexts(); - activeContexts.forEach(activeContext => { - const context = this.getContext(activeContext); - if (context) { - contexts.push(context); - } + Object.keys(this.contexts).forEach(contextName => { + contexts.push(this.getContext(contextName)); }); } diff --git a/platform/core/src/classes/CommandsManager.test.js b/platform/core/src/classes/CommandsManager.test.js index da260281f0f..3a4b2810744 100644 --- a/platform/core/src/classes/CommandsManager.test.js +++ b/platform/core/src/classes/CommandsManager.test.js @@ -11,9 +11,6 @@ describe('CommandsManager', () => { storeContexts: ['viewers'], options: { passMeToCommandFn: ':wave:' }, }, - commandsManagerConfig = { - getActiveContexts: () => ['VIEWER', 'ACTIVE_VIEWER::CORNERSTONE'], - }; beforeEach(() => { commandsManager = new CommandsManager(commandsManagerConfig); @@ -29,11 +26,6 @@ describe('CommandsManager', () => { expect(localCommandsManager.contexts).toEqual({}); }); - it('throws Error if instantiated without getActiveContexts', () => { - expect(() => { - new CommandsManager(); - }).toThrow(new Error('CommandsManager was instantiated without getActiveContexts()')); - }); describe('createContext()', () => { it('creates a context', () => { diff --git a/platform/core/src/extensions/ExtensionManager.js b/platform/core/src/extensions/ExtensionManager.js index 3a483cfea39..3fdd245f749 100644 --- a/platform/core/src/extensions/ExtensionManager.js +++ b/platform/core/src/extensions/ExtensionManager.js @@ -100,28 +100,27 @@ export default class ExtensionManager { * @param {Object[]} extensions - Array of extensions */ registerExtensions = async (extensions, dataSources = []) => { - const promises = extensions.map(extension => { + // Todo: we ideally should be able to run registrations in parallel + // but currently since some extensions need to be registered before + // others, we need to run them sequentially. We need a postInit hook + // to avoid this sequential async registration + for (const extension of extensions) { const hasConfiguration = Array.isArray(extension); - let promise; try { if (hasConfiguration) { const [ohifExtension, configuration] = extension; - promise = this.registerExtension( + await this.registerExtension( ohifExtension, configuration, dataSources ); } else { - promise = this.registerExtension(extension, {}, dataSources); + await this.registerExtension(extension, {}, dataSources); } } catch (error) { console.error(error); } - - return promise; - }); - - await Promise.all(promises); + } }; /** diff --git a/platform/core/src/services/ToolBarService/ToolBarService.js b/platform/core/src/services/ToolBarService/ToolBarService.js index 719d0702f3b..f9e5b951b93 100644 --- a/platform/core/src/services/ToolBarService/ToolBarService.js +++ b/platform/core/src/services/ToolBarService/ToolBarService.js @@ -71,9 +71,11 @@ export default class ToolBarService { } case 'tool': { this.state.primaryToolId = itemId; - commands.forEach(({ commandOptions, context }) => { - commandsManager.runCommand('setToolActive', commandOptions, context); - }); + commands.forEach( + ({ commandName = 'setToolActive', commandOptions, context }) => { + commandsManager.runCommand(commandName, commandOptions, context); + } + ); break; } case 'toggle': { diff --git a/platform/viewer/src/appInit.js b/platform/viewer/src/appInit.js index 477bc1348b6..d2454bfd45c 100644 --- a/platform/viewer/src/appInit.js +++ b/platform/viewer/src/appInit.js @@ -31,13 +31,6 @@ async function appInit(appConfigOrFunc, defaultExtensions, defaultModes) { const commandsManagerConfig = { getAppState: () => {}, - /** Used by commands to determine active context */ - getActiveContexts: () => [ - 'VIEWER', - 'DEFAULT', - 'CORNERSTONE', - 'CORNERSTONE3D', - ], }; const commandsManager = new CommandsManager(commandsManagerConfig); From 046de4387e6f991873d2f59d875ec46ba95ebcce Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 27 May 2022 13:07:45 -0400 Subject: [PATCH 07/25] wip: measurement service --- extensions/cornerstone-3d/package.json | 6 +- .../Viewport/OHIFCornerstone3DViewport.tsx | 4 +- .../cornerstone-3d/src/commandsModule.js | 96 ++++++-- extensions/cornerstone-3d/src/init.js | 12 +- .../src/initCornerstoneTools.js | 3 + .../src/initMeasurementService.js | 16 +- .../src/initSegmentationService.js | 129 +++++++++++ .../cornerstone-3d/src/initWADOImageLoader.js | 3 +- .../src/{ => utils}/callInputDialog.tsx | 0 .../segmentationServiceMappings/Labelmap.js | 68 ++++++ .../segmentationServiceMappingsFactory.js | 16 ++ extensions/cornerstone-dicom-sr/package.json | 4 +- extensions/measurement-tracking/package.json | 4 +- extensions/tmtv/src/Panels/PanelPetSUV.tsx | 136 ++---------- .../Panels/PanelROIThresholdSegmentation.tsx | 109 +++++---- extensions/tmtv/src/commandsModule.js | 206 +++++++++++++++--- modes/longitudinal/src/index.js | 4 +- modes/longitudinal/src/initToolGroups.js | 53 ++++- modes/tmtv/src/index.js | 6 +- modes/tmtv/src/initToolGroups.js | 20 +- platform/core/src/index.js | 3 + .../SegmentationService.js | 105 +++++++++ .../src/services/SegmentationService/index.js | 8 + platform/core/src/services/index.js | 2 + platform/viewer/public/config/default.js | 9 +- platform/viewer/src/App.tsx | 1 + platform/viewer/src/appInit.js | 2 + platform/viewer/src/routes/Mode/Mode.tsx | 9 +- .../viewer/src/routes/buildModeRoutes.tsx | 3 + platform/viewer/src/routes/index.tsx | 2 + 30 files changed, 784 insertions(+), 255 deletions(-) create mode 100644 extensions/cornerstone-3d/src/initSegmentationService.js rename extensions/cornerstone-3d/src/{ => utils}/callInputDialog.tsx (100%) create mode 100644 extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js create mode 100644 extensions/cornerstone-3d/src/utils/segmentationServiceMappings/segmentationServiceMappingsFactory.js create mode 100644 platform/core/src/services/SegmentationService/SegmentationService.js create mode 100644 platform/core/src/services/SegmentationService/index.js diff --git a/extensions/cornerstone-3d/package.json b/extensions/cornerstone-3d/package.json index 803466ad6d7..c1682d4572c 100644 --- a/extensions/cornerstone-3d/package.json +++ b/extensions/cornerstone-3d/package.json @@ -45,9 +45,9 @@ "@babel/runtime": "7.17.9", "lodash.merge": "^4.6.2", "lodash.debounce": "4.0.8", - "@cornerstonejs/core": "^0.8.1", - "@cornerstonejs/tools": "^0.15.0", - "@cornerstonejs/streaming-image-volume-loader": "^0.2.26", + "@cornerstonejs/core": "^0.10.2", + "@cornerstonejs/tools": "^0.17.2", + "@cornerstonejs/streaming-image-volume-loader": "^0.3.2", "shader-loader": "^1.3.1", "@kitware/vtk.js": "^24.10.0", "dom-to-image": "^2.6.0", diff --git a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx index 6199b60ea22..5667ff91aa8 100644 --- a/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx +++ b/extensions/cornerstone-3d/src/Viewport/OHIFCornerstone3DViewport.tsx @@ -383,7 +383,7 @@ function _jumpToMeasurement( displaySetInstanceUID ); - const imageIdIndex = referencedDisplaySet.images.findIndex( + const imageIndex = referencedDisplaySet.images.findIndex( i => i.SOPInstanceUID === SOPInstanceUID ); @@ -396,7 +396,7 @@ function _jumpToMeasurement( if (targetElement !== null) { const metadata = { ...measurement.metadata, - imageIdIndex, + imageIndex, }; cs3DTools.utilities.jumpToSlice(targetElement, metadata); diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index fb5d8f62e18..12f4c9b1f6f 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -1,10 +1,11 @@ -import * as cornerstone3D from '@cornerstonejs/core'; -import * as cornerstone3DTools from '@cornerstonejs/tools'; +import * as cornerstone from '@cornerstonejs/core'; +import * as cornerstoneTools from '@cornerstonejs/tools'; import CornerstoneViewportDownloadForm from './utils/CornerstoneViewportDownloadForm'; import { Enums } from '@cornerstonejs/tools'; import { getEnabledElement } from './state'; +import callInputDialog from './utils/callInputDialog'; const commandsModule = ({ servicesManager }) => { const { @@ -13,19 +14,20 @@ const commandsModule = ({ servicesManager }) => { CineService, ToolBarService, Cornerstone3DViewportService, + UIDialogService, } = servicesManager.services; function _getActiveViewportEnabledElement() { const { activeViewportIndex } = ViewportGridService.getState(); const { element } = getEnabledElement(activeViewportIndex) || {}; - const enabledElement = cornerstone3D.getEnabledElement(element); + const enabledElement = cornerstone.getEnabledElement(element); return enabledElement; } function _getToolGroup(toolGroupId) { let toolGroupIdToUse = toolGroupId; - if (toolGroupIdToUse === undefined) { + if (!toolGroupIdToUse) { // Use the active viewport's tool group if no tool group id is provided const enabledElement = _getActiveViewportEnabledElement(); @@ -34,7 +36,7 @@ const commandsModule = ({ servicesManager }) => { } const { renderingEngineId, viewportId } = enabledElement; - const toolGroup = cornerstone3DTools.ToolGroupManager.getToolGroupForViewport( + const toolGroup = cornerstoneTools.ToolGroupManager.getToolGroupForViewport( viewportId, renderingEngineId ); @@ -72,6 +74,9 @@ const commandsModule = ({ servicesManager }) => { const viewportIndex = viewportInfo.getViewportIndex(); ViewportGridService.setActiveViewportIndex(viewportIndex); }, + arrowTextCallback: ({ callback, data }) => { + callInputDialog(UIDialogService, data, callback); + }, toggleCine: () => { const { viewports } = ViewportGridService.getState(); const { isCineEnabled } = CineService.getState(); @@ -103,7 +108,7 @@ const commandsModule = ({ servicesManager }) => { const lower = windowCenterNum - windowWidthNum / 2.0; const upper = windowCenterNum + windowWidthNum / 2.0; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { viewport.setProperties({ voiRange: { upper, @@ -134,7 +139,7 @@ const commandsModule = ({ servicesManager }) => { if ( toolGroup.toolOptions[primaryActiveTool] && toolGroup.toolOptions[primaryActiveTool].mode === - cornerstone3DTools.Enums.ToolModes.Passive + cornerstoneTools.Enums.ToolModes.Passive ) { toolGroup.setToolDisabled(toolName); toolGroup.setToolActive(primaryActiveTool, { @@ -165,7 +170,7 @@ const commandsModule = ({ servicesManager }) => { continue; } - const viewport = cornerstone3D.getEnabledElement( + const viewport = cornerstone.getEnabledElement( ohifEnabledElement.element ); @@ -212,7 +217,7 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { const { rotation: currentRotation } = viewport.getProperties(); const newRotation = (currentRotation + rotation) % 360; viewport.setProperties({ rotation: newRotation }); @@ -228,7 +233,7 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { const { flipHorizontal } = viewport.getCamera(); viewport.setCamera({ flipHorizontal: !flipHorizontal }); viewport.render(); @@ -243,7 +248,7 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { const { flipVertical } = viewport.getCamera(); viewport.setCamera({ flipVertical: !flipVertical }); viewport.render(); @@ -264,7 +269,7 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { const { invert } = viewport.getProperties(); viewport.setProperties({ invert: !invert }); viewport.render(); @@ -279,7 +284,7 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { viewport.resetProperties(); viewport.resetCamera(); viewport.render(); @@ -294,7 +299,7 @@ const commandsModule = ({ servicesManager }) => { } const { viewport } = enabledElement; - if (viewport instanceof cornerstone3D.StackViewport) { + if (viewport instanceof cornerstone.StackViewport) { if (direction) { const { parallelScale } = viewport.getCamera(); viewport.setCamera({ parallelScale: parallelScale * scaleFactor }); @@ -315,11 +320,57 @@ const commandsModule = ({ servicesManager }) => { const { viewport } = enabledElement; const options = { delta: direction }; - cornerstone3DTools.utilities.stackScrollTool.scrollThroughStack( + cornerstoneTools.utilities.stackScrollTool.scrollThroughStack( viewport, options ); }, + async createSegmentationForDisplaySet({ displaySetInstanceUID }) { + const volumeId = displaySetInstanceUID; + + const segmentationUID = cornerstone.utilities.uuidv4(); + const segmentationId = `${volumeId}-${segmentationUID}`; + + await cornerstone.volumeLoader.createAndCacheDerivedVolume(volumeId, { + volumeId: segmentationId, + }); + + // Add the segmentations to state + cornerstoneTools.segmentation.addSegmentations([ + { + segmentationId, + representation: { + // The type of segmentation + type: cornerstoneTools.Enums.SegmentationRepresentations.Labelmap, + // The actual segmentation data, in the case of labelmap this is a + // reference to the source volume of the segmentation. + data: { + volumeId: segmentationId, + }, + }, + }, + ]); + + return segmentationId; + }, + async addSegmentationRepresentationToToolGroup({ + segmentationId, + toolGroupId, + options, + }) { + const { representationType } = options; + + // // Add the segmentation representation to the toolgroup + await cornerstoneTools.segmentation.addSegmentationRepresentations( + toolGroupId, + [ + { + segmentationId, + type: representationType, + }, + ] + ); + }, }; const definitions = { @@ -403,11 +454,26 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + arrowTextCallback: { + commandFn: actions.arrowTextCallback, + storeContexts: [], + options: {}, + }, setViewportActive: { commandFn: actions.setViewportActive, storeContexts: [], options: {}, }, + createSegmentationForDisplaySet: { + commandFn: actions.createSegmentationForDisplaySet, + storeContexts: [], + options: {}, + }, + addSegmentationRepresentationToToolGroup: { + commandFn: actions.addSegmentationRepresentationToToolGroup, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/cornerstone-3d/src/init.js b/extensions/cornerstone-3d/src/init.js index 986315a935b..393a332170d 100644 --- a/extensions/cornerstone-3d/src/init.js +++ b/extensions/cornerstone-3d/src/init.js @@ -2,6 +2,7 @@ import OHIF from '@ohif/core'; import { ContextMenuMeasurements } from '@ohif/ui'; import * as cornerstone3D from '@cornerstonejs/core'; +import * as cornerstone3DTools from '@cornerstonejs/tools'; import { init as cs3DInit, eventTarget, @@ -20,10 +21,11 @@ import initWADOImageLoader from './initWADOImageLoader'; import initCornerstoneTools from './initCornerstoneTools'; import { connectToolsToMeasurementService } from './initMeasurementService'; -import callInputDialog from './callInputDialog'; +import callInputDialog from './utils/callInputDialog'; import initCineService from './initCineService'; import interleaveCenterLoader from './utils/interleaveCenterLoader'; import interleaveTopToBottom from './utils/interleaveTopToBottom'; +import { connectToolsToSegmentationService } from './initSegmentationService'; const cs3DToolsEvents = Enums.Events; @@ -31,6 +33,7 @@ let CONTEXT_MENU_OPEN = false; // TODO: Cypress tests are currently grabbing this from the window? window.cornerstone = cornerstone3D; +window.cornerstoneTools = cornerstone3DTools; /** * */ @@ -52,6 +55,7 @@ export default async function init({ CineService, Cornerstone3DViewportService, HangingProtocolService, + SegmentationService, } = servicesManager.services; const metadataProvider = OHIF.classes.MetadataProvider; @@ -98,6 +102,12 @@ export default async function init({ Cornerstone3DViewportService ); + connectToolsToSegmentationService( + SegmentationService, + DisplaySetService, + Cornerstone3DViewportService + ); + initCineService(CineService); const _getDefaultPosition = event => ({ diff --git a/extensions/cornerstone-3d/src/initCornerstoneTools.js b/extensions/cornerstone-3d/src/initCornerstoneTools.js index 9130ecdf68c..efa727e8fad 100644 --- a/extensions/cornerstone-3d/src/initCornerstoneTools.js +++ b/extensions/cornerstone-3d/src/initCornerstoneTools.js @@ -18,6 +18,7 @@ const { MagnifyTool, CrosshairsTool, RectangleROIStartEndThresholdTool, + SegmentationDisplayTool, } = cornerstone3DTools; export default function initCornerstone3DTools(configuration = {}) { @@ -39,6 +40,7 @@ export default function initCornerstone3DTools(configuration = {}) { cornerstone3DTools.addTool(MagnifyTool); cornerstone3DTools.addTool(CrosshairsTool); cornerstone3DTools.addTool(RectangleROIStartEndThresholdTool); + cornerstone3DTools.addTool(SegmentationDisplayTool); } const toolNames = { @@ -59,6 +61,7 @@ const toolNames = { Magnify: MagnifyTool.toolName, Crosshairs: CrosshairsTool.toolName, RectangleROIStartEndThreshold: RectangleROIStartEndThresholdTool.toolName, + SegmentationDisplay: SegmentationDisplayTool.toolName, }; export { toolNames }; diff --git a/extensions/cornerstone-3d/src/initMeasurementService.js b/extensions/cornerstone-3d/src/initMeasurementService.js index 893a1d84031..e6a5850ef02 100644 --- a/extensions/cornerstone-3d/src/initMeasurementService.js +++ b/extensions/cornerstone-3d/src/initMeasurementService.js @@ -212,17 +212,19 @@ const connectMeasurementServiceToTools = ( return; } - const { id, label } = measurement; + const { uid, label } = measurement; - const sourceAnnotation = annotation.state.getAnnotation(id); - - if (sourceAnnotation) { - sourceAnnotation.label = label; - if (sourceAnnotation.hasOwnProperty('text')) { + const sourceAnnotation = annotation.state.getAnnotation(uid); + const data = sourceAnnotation.data; + if (data) { + data.label = label; + if (data.hasOwnProperty('text')) { // Deal with the weird case of ArrowAnnotate. - sourceAnnotation.text = label; + data.text = label; } } + + // Todo: trigger render for annotation } ); diff --git a/extensions/cornerstone-3d/src/initSegmentationService.js b/extensions/cornerstone-3d/src/initSegmentationService.js new file mode 100644 index 00000000000..8c34c61c2b0 --- /dev/null +++ b/extensions/cornerstone-3d/src/initSegmentationService.js @@ -0,0 +1,129 @@ +import { eventTarget, Enums } from '@cornerstonejs/core'; +import { segmentation, Enums as csToolsEnums } from '@cornerstonejs/tools'; + +import SegmentationServiceMappingsFactory from './utils/segmentationServiceMappings/segmentationServiceMappingsFactory'; + +const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; +const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; + +const connectToolsToSegmentationService = ( + SegmentationService, + DisplaySetService, + Cornerstone3DViewportService +) => { + const cs3DToolsSegmentationSource = initSegmentationService( + SegmentationService, + DisplaySetService + ); + connectSegmentationServiceToTools( + SegmentationService, + Cornerstone3DViewportService, + cs3DToolsSegmentationSource + ); + const { addOrUpdate, remove } = cs3DToolsSegmentationSource; + const segmentationUpdated = csToolsEnums.Events.SEGMENTATION_MODIFIED; + + eventTarget.addEventListener(segmentationUpdated, evt => { + const { segmentationId } = evt.detail; + + const activeSegmentIndex = segmentation.state.getSegmentation( + segmentationId + ); + + try { + const representationId = 'Labelmap'; + addOrUpdate(representationId, { + segmentationId, + activeSegmentIndex, + }); + } catch (error) { + console.warn('Failed to update measurement:', error); + } + }); + + return cs3DToolsSegmentationSource; +}; + +const initSegmentationService = (SegmentationService, DisplaySetService) => { + /* Initialization */ + const { Labelmap } = SegmentationServiceMappingsFactory( + SegmentationService, + DisplaySetService + ); + const cs3DToolsSegmentationSource = SegmentationService.createSource( + CORNERSTONE_3D_TOOLS_SOURCE_NAME, + CORNERSTONE_3D_TOOLS_SOURCE_VERSION + ); + + /* Mappings */ + SegmentationService.addMapping( + cs3DToolsSegmentationSource, + 'Labelmap', + Labelmap.matchingCriteria, + () => {}, // to source + Labelmap.toSegmentation + ); + + return cs3DToolsSegmentationSource; +}; + +const connectSegmentationServiceToTools = ( + SegmentationService, + Cornerstone3DViewportService, + segmentationSource +) => { + const { + SEGMENTATIONS_CLEARED, + SEGMENTATION_UPDATED, + SEGMENTATION_REMOVED, + } = SegmentationService.EVENTS; + const sourceId = segmentationSource.id; + + SegmentationService.subscribe( + SEGMENTATION_REMOVED, + ({ source, segmentationId }) => { + debugger; + // Todo: for now remove from all viewports + const removeFromCache = true; + SegmentationModule.removeLabelmapForAllElements( + segmentationId, + removeFromCache + ); + + Cornerstone3DViewportService.getRenderingEngine().render(); + } + ); + + SegmentationService.subscribe(SEGMENTATIONS_CLEARED, () => { + debugger; + // globalImageIdSpecificToolStateManager.restoreToolState({}); + // _refreshViewports(); + }); + + SegmentationService.subscribe( + SEGMENTATION_UPDATED, + ({ source, segmentation, notYetUpdatedAtSource }) => { + debugger; + if ( + source.name === 'CornerstoneTools' && + notYetUpdatedAtSource === false + ) { + // This event was fired by cornerstone telling the measurement service to sync. Already in sync. + return; + } + + const { id, label, cachedStats } = segmentation; + SegmentationModule.setLabelmapGlobalState(id, { + volumeUID: id, + label, + cachedStats, + }); + } + ); +}; + +export { + initSegmentationService, + connectToolsToSegmentationService, + connectSegmentationServiceToTools, +}; diff --git a/extensions/cornerstone-3d/src/initWADOImageLoader.js b/extensions/cornerstone-3d/src/initWADOImageLoader.js index 5800c4c40d9..de7a9dea235 100644 --- a/extensions/cornerstone-3d/src/initWADOImageLoader.js +++ b/extensions/cornerstone-3d/src/initWADOImageLoader.js @@ -61,8 +61,7 @@ export default function initWADOImageLoader( // For now we use image/jls and image/x-jls because some servers still use the old type // http://dicom.nema.org/medical/dicom/current/output/html/part18.html const xhrRequestHeaders = { - accept: 'multipart/related; type=application/octet-stream', - //accept: 'multipart/related; type="image/x-jls"', + // accept: 'multipart/related; type=application/octet-stream', // 'multipart/related; type="image/x-jls", multipart/related; type="image/jls"; transfer-syntax="1.2.840.10008.1.2.4.80", multipart/related; type="image/x-jls", multipart/related; type="application/octet-stream"; transfer-syntax=*', }; diff --git a/extensions/cornerstone-3d/src/callInputDialog.tsx b/extensions/cornerstone-3d/src/utils/callInputDialog.tsx similarity index 100% rename from extensions/cornerstone-3d/src/callInputDialog.tsx rename to extensions/cornerstone-3d/src/utils/callInputDialog.tsx diff --git a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js new file mode 100644 index 00000000000..754680ec781 --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js @@ -0,0 +1,68 @@ +import { cache, getEnabledElement } from '@cornerstonejs/core'; +import { segmentation } from '@cornerstonejs/tools'; + +const getDisplayTextFromCachedStats = stats => { + let displayText = []; + + if (stats.suvPeak) { + displayText.push(`SUV Peak: ${stats.suvPeak.toFixed(2)}`); + } + + return displayText; +}; + +const Labelmap = { + toSegmentation: (segmentation, DisplaySetService) => { + const { + activeSegmentIndex, + element, + labelmapIndex, + labelmapUID, + } = segmentation; + + debugger; + + return {}; + + const globalState = SegmentationModule.getGlobalStateForLabelmapUID( + labelmapUID + ); + + const { label, cachedStats } = globalState; + + if (!labelmapUID) { + console.warn('No labelmapUID found'); + return null; + } + + const volume = getVolume(labelmapUID); + + if (!volume) { + throw new Error(`No volume found for labelmapUID: ${labelmapUID}`); + } + + const { viewport } = getEnabledElement(element); + const { dimensions, sizeInBytes, metadata } = volume; + + const displayText = getDisplayTextFromCachedStats(cachedStats); + + return { + id: labelmapUID, + label, + labelmapIndex, + activeLabelmapIndex, + dimensions, + sizeInBytes, + cachedStats, + FrameOfReferenceUID: viewport.getFrameOfReferenceUID(), + // referenceSeriesUID: SeriesInstanceUID, + // referenceStudyUID: StudyInstanceUID, + // displaySetInstanceUID: displaySet.displaySetInstanceUID, + type: 'Labelmap', + displayText, + metadata, + }; + }, +}; + +export default Labelmap; diff --git a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/segmentationServiceMappingsFactory.js b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/segmentationServiceMappingsFactory.js new file mode 100644 index 00000000000..ea248829abb --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/segmentationServiceMappingsFactory.js @@ -0,0 +1,16 @@ +import Labelmap from './Labelmap'; + +const segmentationServiceMappingsFactory = ( + SegmentationService, + DisplaySetService +) => { + return { + Labelmap: { + matchingCriteria: {}, + toSegmentation: csToolsSegmentation => + Labelmap.toSegmentation(csToolsSegmentation, DisplaySetService), + }, + }; +}; + +export default segmentationServiceMappingsFactory; diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index abeb6ed474a..75f7f776a68 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -45,7 +45,7 @@ "dependencies": { "@babel/runtime": "7.16.3", "classnames": "^2.2.6", - "@cornerstonejs/core": "^0.8.1", - "@cornerstonejs/tools": "^0.15.0" + "@cornerstonejs/core": "^0.10.2", + "@cornerstonejs/tools": "^0.17.2" } } diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index c4315981c15..27284ccb4a9 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "classnames": "^2.2.6", - "@cornerstonejs/core": "^0.8.1", - "@cornerstonejs/tools": "^0.15.0", + "@cornerstonejs/core": "^0.10.2", + "@cornerstonejs/tools": "^0.17.2", "@ohif/extension-cornerstone-dicom-sr": "^3.0.0", "dcmjs": "0.22.0", "prop-types": "^15.6.2", diff --git a/extensions/tmtv/src/Panels/PanelPetSUV.tsx b/extensions/tmtv/src/Panels/PanelPetSUV.tsx index 3037b7a275b..869b53149bb 100644 --- a/extensions/tmtv/src/Panels/PanelPetSUV.tsx +++ b/extensions/tmtv/src/Panels/PanelPetSUV.tsx @@ -4,8 +4,6 @@ import { Input, Button } from '@ohif/ui'; import { classes, DicomMetadataStore } from '@ohif/core'; import { useTranslation } from 'react-i18next'; -const metadataProvider = classes.MetadataProvider; - const DEFAULT_MEATADATA = { PatientWeight: null, PatientSex: null, @@ -24,13 +22,9 @@ const DEFAULT_MEATADATA = { * @param param0 * @returns */ -export default function PanelPetSUV({ servicesManager, extensionManager }) { +export default function PanelPetSUV({ servicesManager, commandsManager }) { const { t } = useTranslation('PanelSUV'); - const { - DisplaySetService, - HangingProtocolService, - } = servicesManager.services; - const dataSource = extensionManager.getDataSources()[0]; + const { DisplaySetService } = servicesManager.services; const [metadata, setMetadata] = useState(DEFAULT_MEATADATA); const [ptDisplaySet, setPtDisplaySet] = useState(null); @@ -40,7 +34,10 @@ export default function PanelPetSUV({ servicesManager, extensionManager }) { const newState = { ...prevState }; Object.keys(metadata).forEach(key => { if (typeof metadata[key] === 'object') { - newState[key] = { ...prevState[key], ...metadata[key] }; + newState[key] = { + ...prevState[key], + ...metadata[key], + }; } else { newState[key] = metadata[key]; } @@ -52,20 +49,21 @@ export default function PanelPetSUV({ servicesManager, extensionManager }) { ); const getMatchingPTDisplaySet = useCallback(() => { - const matches = HangingProtocolService.getDisplaySetsMatchDetails(); - - const ptDisplaySet = _getMatchedPtDisplaySet(matches, DisplaySetService); + const ptDisplaySet = commandsManager.runCommand('getMatchingPTDisplaySet'); if (!ptDisplaySet) { return; } - const metadata = _getPtMetadata(dataSource, ptDisplaySet); + const metadata = commandsManager.runCommand('getPTMetadata', { + ptDisplaySet, + }); + return { ptDisplaySet, metadata, }; - }, [dataSource, DisplaySetService, HangingProtocolService]); + }, []); useEffect(() => { const displaySets = DisplaySetService.activeDisplaySets; @@ -124,7 +122,9 @@ export default function PanelPetSUV({ servicesManager, extensionManager }) { containerClassName="mr-2" value={metadata.PatientSex} onChange={e => { - handleMetadataChange({ PatientSex: e.target.value }); + handleMetadataChange({ + PatientSex: e.target.value, + }); }} /> { - handleMetadataChange({ PatientWeight: e.target.value }); + handleMetadataChange({ + PatientWeight: e.target.value, + }); }} /> SeriesInstanceUID); - - for (const SeriesInstanceUID of matchedSeriesInstanceUIDs) { - const displaySets = DisplaySetService.getDisplaySetsForSeries( - SeriesInstanceUID - ); - - if (!displaySets || displaySets.length === 0) { - continue; - } - - const displaySet = displaySets[0]; - if (displaySet.Modality !== 'PT') { - continue; - } - - return displaySet; - } -} - -function _getPtMetadata(dataSource, displaySet) { - const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); - - const firstImageId = imageIds[0]; - const SeriesTime = metadataProvider.get('SeriesTime', firstImageId); - const metadata = {}; - - if (SeriesTime) { - metadata.SeriesTime = SeriesTime; - } - - // get metadata from the first image - const seriesModule = metadataProvider.get( - 'generalSeriesModule', - firstImageId - ); - - if (seriesModule && seriesModule.modality !== 'PT') { - return; - } - - // get metadata from the first image - const demographic = metadataProvider.get( - 'patientDemographicModule', - firstImageId - ); - - if (demographic) { - // naturalized dcmjs version - metadata.PatientSex = demographic.patientSex; - } - - // patientStudyModule - const studyModule = metadataProvider.get('patientStudyModule', firstImageId); - - if (studyModule) { - // naturalized dcmjs version - metadata.PatientWeight = studyModule.patientWeight; - } - - // total dose - const petSequenceModule = metadataProvider.get( - 'petIsotopeModule', - firstImageId - ); - const { radiopharmaceuticalInfo } = petSequenceModule; - - const { - radionuclideHalfLife, - radionuclideTotalDose, - radiopharmaceuticalStartTime, - } = radiopharmaceuticalInfo; - - const { - hours, - minutes, - seconds, - fractionalSeconds, - } = radiopharmaceuticalStartTime; - - // pad number with leading zero if less than 10 - const hoursString = hours < 10 ? `0${hours}` : hours; - const minutesString = minutes < 10 ? `0${minutes}` : minutes; - const secondsString = seconds < 10 ? `0${seconds}` : seconds; - - if (radiopharmaceuticalInfo) { - metadata.RadiopharmaceuticalInformationSequence = { - RadionuclideTotalDose: radionuclideTotalDose, - RadionuclideHalfLife: radionuclideHalfLife, - RadiopharmaceuticalStartTime: `${hoursString}${minutesString}${secondsString}.${fractionalSeconds}`, - }; - } - - return metadata; -} diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index ec9c9d117cd..5220cf4dd35 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -13,8 +13,8 @@ import { useTranslation } from 'react-i18next'; import createAndDownloadTMTVReport from '../utils/createAndDownloadTMTVReport'; const options = [ - { value: 'roiStat', label: 'Percentage of Max Value' }, - { value: 'range', label: 'Range Threshold' }, + { value: 'roiStat', label: 'Percentage of Max Value', placeHolder: ['Max'] }, + { value: 'range', label: 'Range Threshold', placeHolder: ['Range'] }, ]; export default function PanelRoiThresholdSegmentation({ @@ -45,33 +45,33 @@ export default function PanelRoiThresholdSegmentation({ weight: 0.41, }); - // useEffect(() => { - // // ~~ Initial - // setSegmentations(SegmentationService.getSegmentations()); - - // // ~~ Subscription - // const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; - // const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; - // const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; - // const subscriptions = []; - - // [added, updated, removed].forEach(evt => { - // subscriptions.push( - // SegmentationService.subscribe(evt, () => { - // if (isMounted.current) { - // const segmentations = SegmentationService.getSegmentations(); - // setSegmentations(segmentations); - // } - // }).unsubscribe - // ); - // }); + useEffect(() => { + // ~~ Initial + setSegmentations(SegmentationService.getSegmentations()); + + // ~~ Subscription + const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; + const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; + const subscriptions = []; + + [added, updated, removed].forEach(evt => { + subscriptions.push( + SegmentationService.subscribe(evt, () => { + if (isMounted.current) { + const segmentations = SegmentationService.getSegmentations(); + setSegmentations(segmentations); + } + }).unsubscribe + ); + }); - // return () => { - // subscriptions.forEach(unsub => { - // unsub(); - // }); - // }; - // }, [SegmentationService]); + return () => { + subscriptions.forEach(unsub => { + unsub(); + }); + }; + }, [SegmentationService]); // // calculate the suv peak value for each segmentation // // check if the segmentations have changed compared to the old segmentations @@ -113,7 +113,7 @@ export default function PanelRoiThresholdSegmentation({ const handleCreateLabelmap = () => { setLabelmapLoading(true); - commandsManager.runCommand('createNewLabelmapForPT', {}).then(() => { + commandsManager.runCommand('createNewLabelmapForPT').then(() => { setLabelmapLoading(false); }); }; @@ -246,25 +246,18 @@ export default function PanelRoiThresholdSegmentation({ return (
-
-
- - {t('Roi Threshold Segmentation')} - -
-
-
+
{showConfig && ( - Loading Segmentation Panel ...
) : null} - {tmtvValue && ( + {tmtvValue !== undefined ? (
{'TMTV:'}
{`${tmtvValue} mL`}
- )} + ) : null} {/* show segmentation table */}
- {segmentations && segmentations.length && ( + {segmentations.length ? ( - )} + ) : null}
{segmentations?.length ? (
@@ -431,19 +426,22 @@ function onSegmentationItemEditHandler({ }); } -function RoiThresholdConfiguration({ config, setConfig, commandsManager }) { - const { t } = useTranslation('RoiThresholdConfiguration'); +function ROIThresholdConfiguration({ config, setConfig, commandsManager }) { + const { t } = useTranslation('ROIThresholdConfiguration'); return ( -
+
-
+
{ - // const renderingEngine = ViewportService.getRenderingEngine(); + getMatchingPTDisplaySet: () => { + // Todo: this is assuming that the hanging protocol has successfully matched + // the correct PT. For future, we should have a way to filter out the PTs + // that are in the viewer layout (but then we have the problem of the attenuation + // corrected PT vs the non-attenuation correct PT) + const matches = HangingProtocolService.getDisplaySetsMatchDetails(); + + const matchedSeriesInstanceUIDs = Array.from(matches.values()).map( + ({ SeriesInstanceUID }) => SeriesInstanceUID + ); - // const viewports = renderingEngine.getViewports(); + let ptDisplaySet = null; + for (const SeriesInstanceUID of matchedSeriesInstanceUIDs) { + const displaySets = DisplaySetService.getDisplaySetsForSeries( + SeriesInstanceUID + ); - // // Find the viewport that has a volume loaded of PT - // const viewport = viewports.find(viewport => { - // const { uid } = viewport.getDefaultActor(); - // const volume = cache.getVolume(uid); - // return volume?.metadata?.Modality === 'PT'; - // }); + if (!displaySets || displaySets.length === 0) { + continue; + } - // if (!viewport) { - // console.warn('No viewport found with PT loaded yet'); - // } + const displaySet = displaySets[0]; + if (displaySet.Modality !== 'PT') { + continue; + } + + ptDisplaySet = displaySet; + } + + return ptDisplaySet; + }, + getPTMetadata: ({ ptDisplaySet }) => { + const dataSource = extensionManager.getDataSources()[0]; + const imageIds = dataSource.getImageIdsForDisplaySet(ptDisplaySet); + + const firstImageId = imageIds[0]; + const SeriesTime = metadataProvider.get('SeriesTime', firstImageId); + const metadata = {}; + + if (SeriesTime) { + metadata.SeriesTime = SeriesTime; + } + + // get metadata from the first image + const seriesModule = metadataProvider.get( + 'generalSeriesModule', + firstImageId + ); + + if (seriesModule && seriesModule.modality !== 'PT') { + return; + } + + // get metadata from the first image + const demographic = metadataProvider.get( + 'patientDemographicModule', + firstImageId + ); + + if (demographic) { + // naturalized dcmjs version + metadata.PatientSex = demographic.patientSex; + } + + // patientStudyModule + const studyModule = metadataProvider.get( + 'patientStudyModule', + firstImageId + ); + + if (studyModule) { + // naturalized dcmjs version + metadata.PatientWeight = studyModule.patientWeight; + } + + // total dose + const petSequenceModule = metadataProvider.get( + 'petIsotopeModule', + firstImageId + ); + const { radiopharmaceuticalInfo } = petSequenceModule; + + const { + radionuclideHalfLife, + radionuclideTotalDose, + radiopharmaceuticalStartTime, + } = radiopharmaceuticalInfo; + + const { + hours, + minutes, + seconds, + fractionalSeconds, + } = radiopharmaceuticalStartTime; + + // pad number with leading zero if less than 10 + const hoursString = hours < 10 ? `0${hours}` : hours; + const minutesString = minutes < 10 ? `0${minutes}` : minutes; + const secondsString = seconds < 10 ? `0${seconds}` : seconds; + + if (radiopharmaceuticalInfo) { + metadata.RadiopharmaceuticalInformationSequence = { + RadionuclideTotalDose: radionuclideTotalDose, + RadionuclideHalfLife: radionuclideHalfLife, + RadiopharmaceuticalStartTime: `${hoursString}${minutesString}${secondsString}.${fractionalSeconds}`, + }; + } + + return metadata; + }, + createNewLabelmapForPT: async () => { + // Create a segmentation of the same resolution as the source data + // using volumeLoader.createAndCacheDerivedVolume. + const ptDisplaySet = actions.getMatchingPTDisplaySet(); + + if (!ptDisplaySet) { + UINotificationService.error('No matching PT display set found'); + return; + } + + const segmentationId = await commandsManager.runCommand( + 'createSegmentationForDisplaySet', + { + displaySetInstanceUID: ptDisplaySet.displaySetInstanceUID, + } + ); + + const ptVolumeId = ptDisplaySet.displaySetInstanceUID; + // find the viewport that is displaying the PT Volume + const { viewports } = ViewportGridService.getState(); + + const ptViewportIndex = viewports.findIndex( + viewport => + viewport.displaySetInstanceUIDs.length === 1 && + viewport.displaySetInstanceUIDs[0] === ptVolumeId + ); + + const ptViewport = Cornerstone3DViewportService.getCornerstone3DViewportByIndex( + ptViewportIndex + ); + + if (!ptViewport) { + return; + } + + const renderingEngineId = ptViewport.getRenderingEngine().id; + const toolGroup = cornerstoneTools.ToolGroupManager.getToolGroupForViewport( + ptViewport.id, + renderingEngineId + ); + + const options = { + representationType: + cornerstoneTools.Enums.SegmentationRepresentations.Labelmap, + }; + + await commandsManager.runCommand( + 'addSegmentationRepresentationToToolGroup', + { segmentationId, toolGroupId: toolGroup.id, options } + ); + }, - // const { element } = viewport; - // const labelmapIndex = activeLabelmapController.getNextLabelmapIndex( - // element - // ); - // await activeLabelmapController.setActiveLabelmapIndex( - // element, - // labelmapIndex - // ); - // }, // setPTColormap: ({ toolGroupUID, colormap }) => { // const toolGroup = ToolGroupManager.getToolGroupById(toolGroupUID); @@ -357,11 +499,21 @@ const commandsModule = ({ storeContexts: [], options: {}, }, - // createNewLabelmapForPT: { - // commandFn: actions.createNewLabelmapForPT, - // storeContexts: [], - // options: {}, - // }, + getMatchingPTDisplaySet: { + commandFn: actions.getMatchingPTDisplaySet, + storeContexts: [], + options: {}, + }, + getPTMetadata: { + commandFn: actions.getPTMetadata, + storeContexts: [], + options: {}, + }, + createNewLabelmapForPT: { + commandFn: actions.createNewLabelmapForPT, + storeContexts: [], + options: {}, + }, // setPTColormap: { // commandFn: actions.setPTColormap, // storeContexts: [], diff --git a/modes/longitudinal/src/index.js b/modes/longitudinal/src/index.js index e9cccd03b97..1e471d5bcdf 100644 --- a/modes/longitudinal/src/index.js +++ b/modes/longitudinal/src/index.js @@ -54,11 +54,11 @@ function modeFactory({ modeConfiguration }) { /** * Lifecycle hooks */ - onModeEnter: ({ servicesManager, extensionManager }) => { + onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { const { ToolBarService, ToolGroupService } = servicesManager.services; // Init Default and SR ToolGroups - initToolGroups(extensionManager, ToolGroupService); + initToolGroups(extensionManager, ToolGroupService, commandsManager); let unsubscribe; diff --git a/modes/longitudinal/src/initToolGroups.js b/modes/longitudinal/src/initToolGroups.js index e30743bd7d4..3b4b9fdf7c3 100644 --- a/modes/longitudinal/src/initToolGroups.js +++ b/modes/longitudinal/src/initToolGroups.js @@ -1,4 +1,8 @@ -function initDefaultToolGroup(extensionManager, ToolGroupService) { +function initDefaultToolGroup( + extensionManager, + ToolGroupService, + commandsManager +) { const utilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone-3d.utilityModule.tools' ); @@ -36,11 +40,28 @@ function initDefaultToolGroup(extensionManager, ToolGroupService) { // disabled }; + const toolsConfig = { + [toolNames.ArrowAnnotate]: { + getTextCallback: (callback, eventDetails) => + commandsManager.runCommand('arrowTextCallback', { + callback, + eventDetails, + }), + + changeTextCallback: (data, eventDetails, callback) => + commandsManager.runCommand('arrowTextCallback', { + callback, + data, + eventDetails, + }), + }, + }; + const toolGroupId = 'default'; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {}); + ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initSRToolGroup(extensionManager, ToolGroupService) { +function initSRToolGroup(extensionManager, ToolGroupService, commandsManager) { const SRUtilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone-dicom-sr.utilityModule.tools' ); @@ -96,13 +117,31 @@ function initSRToolGroup(extensionManager, ToolGroupService) { ], // disabled }; + + const toolsConfig = { + [toolNames.ArrowAnnotate]: { + getTextCallback: (callback, eventDetails) => + commandsManager.runCommand('arrowTextCallback', { + callback, + eventDetails, + }), + + changeTextCallback: (data, eventDetails, callback) => + commandsManager.runCommand('arrowTextCallback', { + callback, + data, + eventDetails, + }), + }, + }; + const toolGroupId = 'SRToolGroup'; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {}); + ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initToolGroups(extensionManager, ToolGroupService) { - initDefaultToolGroup(extensionManager, ToolGroupService); - initSRToolGroup(extensionManager, ToolGroupService); +function initToolGroups(extensionManager, ToolGroupService, commandsManager) { + initDefaultToolGroup(extensionManager, ToolGroupService, commandsManager); + initSRToolGroup(extensionManager, ToolGroupService, commandsManager); } export default initToolGroups; diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 5472420511a..0339172d8ba 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -38,7 +38,7 @@ function modeFactory({ modeConfiguration }) { /** * Lifecycle hooks */ - onModeEnter: ({ servicesManager, extensionManager }) => { + onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { const { ToolBarService, ToolGroupService, @@ -53,7 +53,7 @@ function modeFactory({ modeConfiguration }) { const { toolNames, Enums } = utilityModule.exports; // Init Default and SR ToolGroups - initToolGroups(toolNames, Enums, ToolGroupService); + initToolGroups(toolNames, Enums, ToolGroupService, commandsManager); let unsubscribe; @@ -183,7 +183,7 @@ function modeFactory({ modeConfiguration }) { id: ohif.layout, props: { leftPanels: [], - rightPanels: [tmtv.petSUV, tmtv.ROIThresholdPanel], + rightPanels: [tmtv.ROIThresholdPanel, tmtv.petSUV], viewports: [ { namespace: cs3d.viewport, diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 29b8593661d..d2eee300dae 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -6,7 +6,7 @@ export const toolGroupIds = { default: 'default', }; -function initToolGroups(toolNames, Enums, ToolGroupService) { +function initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { const tools = { active: [ { @@ -34,7 +34,7 @@ function initToolGroups(toolNames, Enums, ToolGroupService) { { toolName: toolNames.Angle }, { toolName: toolNames.Magnify }, ], - // enabled + enabled: [{ toolName: toolNames.SegmentationDisplay }], disabled: [{ toolName: toolNames.Crosshairs }], }; @@ -46,6 +46,21 @@ function initToolGroups(toolNames, Enums, ToolGroupService) { panSize: 10, }, }, + [toolNames.ArrowAnnotate]: { + getTextCallback: (callback, eventDetails) => { + commandsManager.runCommand('arrowTextCallback', { + callback, + eventDetails, + }); + }, + + changeTextCallback: (data, eventDetails, callback) => + commandsManager.runCommand('arrowTextCallback', { + callback, + data, + eventDetails, + }), + }, }; ToolGroupService.createToolGroupAndAddTools( @@ -61,6 +76,7 @@ function initToolGroups(toolNames, Enums, ToolGroupService) { ...tools.passive, { toolName: toolNames.RectangleROIStartEndThreshold }, ], + enabled: tools.enabled, disabled: tools.disabled, }, toolsConfig diff --git a/platform/core/src/index.js b/platform/core/src/index.js index a56e2e2adb5..c45e3c6f25e 100644 --- a/platform/core/src/index.js +++ b/platform/core/src/index.js @@ -26,6 +26,7 @@ import { HangingProtocolService, pubSubServiceInterface, UserAuthenticationService, + SegmentationService, } from './services'; import IWebApiDataSource from './DataSources/IWebApiDataSource'; @@ -66,6 +67,7 @@ const OHIF = { ViewportGridService, HangingProtocolService, UserAuthenticationService, + SegmentationService, IWebApiDataSource, DicomMetadataStore, pubSubServiceInterface, @@ -101,6 +103,7 @@ export { ViewportGridService, HangingProtocolService, UserAuthenticationService, + SegmentationService, IWebApiDataSource, DicomMetadataStore, pubSubServiceInterface, diff --git a/platform/core/src/services/SegmentationService/SegmentationService.js b/platform/core/src/services/SegmentationService/SegmentationService.js new file mode 100644 index 00000000000..6243c93d82c --- /dev/null +++ b/platform/core/src/services/SegmentationService/SegmentationService.js @@ -0,0 +1,105 @@ +import pubSubServiceInterface from '../_shared/pubSubServiceInterface'; + +const EVENTS = { + SEGMENTATION_UPDATED: 'event::segmentation_updated', + SEGMENTATION_ADDED: 'event::segmentation_added', + SEGMENTATION_REMOVED: 'event::segmentation_removed', + SEGMENTATIONS_CLEARED: 'event::segmentation_cleared', + SEGMENTATION_VISIBILITY_CHANGED: 'event::SEGMENTATION_VISIBILITY_CHANGED', +}; + +const VALUE_TYPES = {}; + +class SegmentationService { + constructor() { + this.segmentations = {}; + this.listeners = {}; + Object.defineProperty(this, 'EVENTS', { + value: EVENTS, + writable: false, + enumerable: true, + configurable: false, + }); + + Object.assign(this, pubSubServiceInterface); + } + + /** + * Get all measurements. + * + * @return {Measurement[]} Array of measurements + */ + getSegmentations() {} + + /** + * Get specific measurement by its id. + * + * @param {string} id If of the measurement + * @return {Measurement} Measurement instance + */ + getSegmentation(id) {} + + /** + * Toggles the visibility of a segmentation in the state, and broadcasts the event. + * Note: this method does not update the segmentation state in the source. It only + * updates the state, and there should be separate listeners for that. + * @param {string[]} ids segmentation ids + */ + toggleSegmentationsVisibility(ids) { + // ids.forEach(id => { + // const segmentation = this.segmentations[id]; + // if (!segmentation) { + // throw new Error(`Segmentation with id ${id} not found.`); + // } + // segmentation.visible = !segmentation.visible; + // this._broadcastEvent(this.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, { + // segmentation, + // }); + // }); + } + + /** + * Removes a measurement and broadcasts the removed event. + * + * @param {string} id The measurement id + * @param {segmentationsource} source The measurement source instance + * @return {string} The removed measurement id + */ + remove(id, source) { + // if (!id || !this.segmentations[id]) { + // log.warn(`No id provided, or unable to find measurement by id.`); + // return; + // } + // delete this.segmentations[id]; + // this._broadcastEvent(this.EVENTS.SEGMENTATION_REMOVED, { + // source, + // segmentationId: id, // This is weird :shrug: + // }); + } + + clearSegmentations() { + this.segmentations = {}; + this._jumpToMeasurementCache = {}; + this._broadcastEvent(this.EVENTS.SEGMENTATIONS_CLEARED); + } + + /** + * Clear all measurements and broadcasts cleared event. + */ + clear() { + this.segmentations = {}; + this._broadcastEvent(this.EVENTS.SEGMENTATIONS_CLEARED); + } + + /** + * Converts object of objects to array. + * + * @return {Array} Array of objects + */ + _arrayOfObjects = obj => { + return Object.entries(obj).map(e => ({ [e[0]]: e[1] })); + }; +} + +export default SegmentationService; +export { EVENTS, VALUE_TYPES }; diff --git a/platform/core/src/services/SegmentationService/index.js b/platform/core/src/services/SegmentationService/index.js new file mode 100644 index 00000000000..8cda4de8488 --- /dev/null +++ b/platform/core/src/services/SegmentationService/index.js @@ -0,0 +1,8 @@ +import SegmentationService from './SegmentationService'; + +export default { + name: 'SegmentationService', + create: ({ configuration = {} }) => { + return new SegmentationService(); + }, +}; diff --git a/platform/core/src/services/index.js b/platform/core/src/services/index.js index 87f714815c2..3ddd0834fc0 100644 --- a/platform/core/src/services/index.js +++ b/platform/core/src/services/index.js @@ -12,6 +12,7 @@ import CineService from './CineService'; import HangingProtocolService from './HangingProtocolService'; import pubSubServiceInterface from './_shared/pubSubServiceInterface'; import UserAuthenticationService from './UserAuthenticationService'; +import SegmentationService from './SegmentationService'; export { MeasurementService, @@ -28,4 +29,5 @@ export { CineService, pubSubServiceInterface, UserAuthenticationService, + SegmentationService, }; diff --git a/platform/viewer/public/config/default.js b/platform/viewer/public/config/default.js index 86161bc7899..fd14f0880ec 100644 --- a/platform/viewer/public/config/default.js +++ b/platform/viewer/public/config/default.js @@ -13,9 +13,12 @@ window.config = { sourceName: 'dicomweb', configuration: { name: 'DCM4CHEE', - wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado', - qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', - wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + // wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado', + // qidoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + // wadoRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/rs', + wadoUriRoot: 'http://localhost/dicom-web', + qidoRoot: 'http://localhost/dicom-web', + wadoRoot: 'http://localhost/dicom-web', qidoSupportsIncludeField: true, supportsReject: true, imageRendering: 'wadors', diff --git a/platform/viewer/src/App.tsx b/platform/viewer/src/App.tsx index 47a04e50554..247c6144789 100644 --- a/platform/viewer/src/App.tsx +++ b/platform/viewer/src/App.tsx @@ -60,6 +60,7 @@ function App({ config, defaultExtensions, defaultModes }) { extensionManager, servicesManager, hotkeysManager, + commandsManager, routerBasename, }); const { diff --git a/platform/viewer/src/appInit.js b/platform/viewer/src/appInit.js index d2454bfd45c..47589ffa739 100644 --- a/platform/viewer/src/appInit.js +++ b/platform/viewer/src/appInit.js @@ -12,6 +12,7 @@ import { ToolBarService, ViewportGridService, HangingProtocolService, + SegmentationService, CineService, UserAuthenticationService, errorHandler, @@ -53,6 +54,7 @@ async function appInit(appConfigOrFunc, defaultExtensions, defaultModes) { ToolBarService, ViewportGridService, HangingProtocolService, + SegmentationService, CineService, UserAuthenticationService, ]); diff --git a/platform/viewer/src/routes/Mode/Mode.tsx b/platform/viewer/src/routes/Mode/Mode.tsx index 18ccecd74f6..f2e164bbfa3 100644 --- a/platform/viewer/src/routes/Mode/Mode.tsx +++ b/platform/viewer/src/routes/Mode/Mode.tsx @@ -61,6 +61,7 @@ export default function ModeRoute({ dataSourceName, extensionManager, servicesManager, + commandsManager, hotkeysManager, }) { // Parse route params/querystring @@ -205,8 +206,12 @@ export default function ModeRoute({ // Add SOPClassHandlers to a new SOPClassManager. DisplaySetService.init(extensionManager, sopClassHandlers); - extensionManager.onModeEnter(); - mode?.onModeEnter({ servicesManager, extensionManager }); + extensionManager.onModeEnter({ + servicesManager, + extensionManager, + commandsManager, + }); + mode?.onModeEnter({ servicesManager, extensionManager, commandsManager }); // Adding hanging protocols of extensions after onModeEnter since // it will reset the protocols diff --git a/platform/viewer/src/routes/buildModeRoutes.tsx b/platform/viewer/src/routes/buildModeRoutes.tsx index ea72a873991..b18b07f5be9 100644 --- a/platform/viewer/src/routes/buildModeRoutes.tsx +++ b/platform/viewer/src/routes/buildModeRoutes.tsx @@ -27,6 +27,7 @@ export default function buildModeRoutes({ dataSources, extensionManager, servicesManager, + commandsManager, hotkeysManager, }) { const routes = []; @@ -59,6 +60,7 @@ export default function buildModeRoutes({ extensionManager={extensionManager} servicesManager={servicesManager} hotkeysManager={hotkeysManager} + commandsManager={commandsManager} /> ); @@ -81,6 +83,7 @@ export default function buildModeRoutes({ extensionManager={extensionManager} servicesManager={servicesManager} hotkeysManager={hotkeysManager} + commandsManager={commandsManager} /> ); diff --git a/platform/viewer/src/routes/index.tsx b/platform/viewer/src/routes/index.tsx index 8426bea990c..02f398fcf74 100644 --- a/platform/viewer/src/routes/index.tsx +++ b/platform/viewer/src/routes/index.tsx @@ -34,6 +34,7 @@ const createRoutes = ({ extensionManager, servicesManager, hotkeysManager, + commandsManager, routerBasename, }) => { const routes = @@ -42,6 +43,7 @@ const createRoutes = ({ dataSources, extensionManager, servicesManager, + commandsManager, hotkeysManager, }) || []; From dab70ba8ade440b69791337c3dfdf789378ea21f Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 27 May 2022 17:37:57 -0400 Subject: [PATCH 08/25] roi threshold working --- .../cornerstone-3d/src/commandsModule.js | 2 +- extensions/cornerstone-3d/src/init.js | 8 +- .../src/initSegmentationService.js | 123 ++++++------- .../segmentationServiceMappings/Labelmap.js | 61 ++---- .../Panels/PanelROIThresholdSegmentation.tsx | 87 +++++---- extensions/tmtv/src/commandsModule.js | 174 +++++++++++++----- .../tmtv/src/utils/getThresholdValue.ts | 66 +++++++ modes/tmtv/src/initToolGroups.js | 1 + .../SegmentationService.js | 62 +++++-- .../SegmentationTable/SegmentationItem.tsx | 4 +- .../SegmentationTable/SegmentationTable.tsx | 8 +- yarn.lock | 28 +-- 12 files changed, 375 insertions(+), 249 deletions(-) create mode 100644 extensions/tmtv/src/utils/getThresholdValue.ts diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 12f4c9b1f6f..5f3bdf8d225 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -329,7 +329,7 @@ const commandsModule = ({ servicesManager }) => { const volumeId = displaySetInstanceUID; const segmentationUID = cornerstone.utilities.uuidv4(); - const segmentationId = `${volumeId}-${segmentationUID}`; + const segmentationId = `${volumeId}::${segmentationUID}`; await cornerstone.volumeLoader.createAndCacheDerivedVolume(volumeId, { volumeId: segmentationId, diff --git a/extensions/cornerstone-3d/src/init.js b/extensions/cornerstone-3d/src/init.js index 393a332170d..f0ba5a8c31d 100644 --- a/extensions/cornerstone-3d/src/init.js +++ b/extensions/cornerstone-3d/src/init.js @@ -25,7 +25,7 @@ import callInputDialog from './utils/callInputDialog'; import initCineService from './initCineService'; import interleaveCenterLoader from './utils/interleaveCenterLoader'; import interleaveTopToBottom from './utils/interleaveTopToBottom'; -import { connectToolsToSegmentationService } from './initSegmentationService'; +import initSegmentationService from './initSegmentationService'; const cs3DToolsEvents = Enums.Events; @@ -102,11 +102,7 @@ export default async function init({ Cornerstone3DViewportService ); - connectToolsToSegmentationService( - SegmentationService, - DisplaySetService, - Cornerstone3DViewportService - ); + initSegmentationService(SegmentationService, Cornerstone3DViewportService); initCineService(CineService); diff --git a/extensions/cornerstone-3d/src/initSegmentationService.js b/extensions/cornerstone-3d/src/initSegmentationService.js index 8c34c61c2b0..fec6233900c 100644 --- a/extensions/cornerstone-3d/src/initSegmentationService.js +++ b/extensions/cornerstone-3d/src/initSegmentationService.js @@ -1,98 +1,85 @@ import { eventTarget, Enums } from '@cornerstonejs/core'; import { segmentation, Enums as csToolsEnums } from '@cornerstonejs/tools'; +import Labelmap from './utils/segmentationServiceMappings/Labelmap'; -import SegmentationServiceMappingsFactory from './utils/segmentationServiceMappings/segmentationServiceMappingsFactory'; - -const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; -const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; - -const connectToolsToSegmentationService = ( +function initSegmentationService( SegmentationService, - DisplaySetService, Cornerstone3DViewportService -) => { - const cs3DToolsSegmentationSource = initSegmentationService( +) { + connectToolsToSegmentationService( SegmentationService, - DisplaySetService + Cornerstone3DViewportService ); + + connectSegmentationServiceToTools( + SegmentationService, + Cornerstone3DViewportService + ); +} + +function connectToolsToSegmentationService( + SegmentationService, + Cornerstone3DViewportService +) { connectSegmentationServiceToTools( SegmentationService, - Cornerstone3DViewportService, - cs3DToolsSegmentationSource + Cornerstone3DViewportService ); - const { addOrUpdate, remove } = cs3DToolsSegmentationSource; const segmentationUpdated = csToolsEnums.Events.SEGMENTATION_MODIFIED; eventTarget.addEventListener(segmentationUpdated, evt => { const { segmentationId } = evt.detail; - - const activeSegmentIndex = segmentation.state.getSegmentation( + const segmentationState = segmentation.state.getSegmentation( segmentationId ); + if ( + !Object.keys(segmentationState.representationData).includes( + csToolsEnums.SegmentationRepresentations.Labelmap + ) + ) { + throw new Error('Non-labelmap representations are not supported yet'); + } + + // Todo: handle other representations when available in cornerstone3D + const segmentationSchema = Labelmap.toSegmentation(segmentationState); + try { - const representationId = 'Labelmap'; - addOrUpdate(representationId, { + SegmentationService.addOrUpdateSegmentation( segmentationId, - activeSegmentIndex, - }); + segmentationSchema + ); } catch (error) { - console.warn('Failed to update measurement:', error); + console.warn( + `Failed to add/update segmentation ${segmentationId}`, + error + ); } }); +} - return cs3DToolsSegmentationSource; -}; - -const initSegmentationService = (SegmentationService, DisplaySetService) => { - /* Initialization */ - const { Labelmap } = SegmentationServiceMappingsFactory( - SegmentationService, - DisplaySetService - ); - const cs3DToolsSegmentationSource = SegmentationService.createSource( - CORNERSTONE_3D_TOOLS_SOURCE_NAME, - CORNERSTONE_3D_TOOLS_SOURCE_VERSION - ); - - /* Mappings */ - SegmentationService.addMapping( - cs3DToolsSegmentationSource, - 'Labelmap', - Labelmap.matchingCriteria, - () => {}, // to source - Labelmap.toSegmentation - ); - - return cs3DToolsSegmentationSource; -}; - -const connectSegmentationServiceToTools = ( +function connectSegmentationServiceToTools( SegmentationService, - Cornerstone3DViewportService, - segmentationSource -) => { + Cornerstone3DViewportService +) { const { SEGMENTATIONS_CLEARED, SEGMENTATION_UPDATED, + SEGMENTATION_ADDED, SEGMENTATION_REMOVED, } = SegmentationService.EVENTS; - const sourceId = segmentationSource.id; - SegmentationService.subscribe( - SEGMENTATION_REMOVED, - ({ source, segmentationId }) => { - debugger; - // Todo: for now remove from all viewports - const removeFromCache = true; - SegmentationModule.removeLabelmapForAllElements( - segmentationId, - removeFromCache - ); + SegmentationService.subscribe(SEGMENTATION_REMOVED, ({ source, id }) => { + debugger; + // Todo: for now remove from all viewports + const removeFromCache = true; + SegmentationModule.removeLabelmapForAllElements( + segmentationId, + removeFromCache + ); - Cornerstone3DViewportService.getRenderingEngine().render(); - } - ); + Cornerstone3DViewportService.getRenderingEngine().render(); + }); SegmentationService.subscribe(SEGMENTATIONS_CLEARED, () => { debugger; @@ -120,10 +107,6 @@ const connectSegmentationServiceToTools = ( }); } ); -}; +} -export { - initSegmentationService, - connectToolsToSegmentationService, - connectSegmentationServiceToTools, -}; +export default initSegmentationService; diff --git a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js index 754680ec781..ff963a45b87 100644 --- a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js +++ b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js @@ -1,5 +1,4 @@ -import { cache, getEnabledElement } from '@cornerstonejs/core'; -import { segmentation } from '@cornerstonejs/tools'; +import { segmentation, Enums as csToolsEnums } from '@cornerstonejs/tools'; const getDisplayTextFromCachedStats = stats => { let displayText = []; @@ -12,55 +11,27 @@ const getDisplayTextFromCachedStats = stats => { }; const Labelmap = { - toSegmentation: (segmentation, DisplaySetService) => { + toSegmentation: segmentationState => { const { activeSegmentIndex, - element, - labelmapIndex, - labelmapUID, - } = segmentation; - - debugger; - - return {}; - - const globalState = SegmentationModule.getGlobalStateForLabelmapUID( - labelmapUID - ); - - const { label, cachedStats } = globalState; - - if (!labelmapUID) { - console.warn('No labelmapUID found'); - return null; - } - - const volume = getVolume(labelmapUID); - - if (!volume) { - throw new Error(`No volume found for labelmapUID: ${labelmapUID}`); - } - - const { viewport } = getEnabledElement(element); - const { dimensions, sizeInBytes, metadata } = volume; + cachedStats: data, + segmentsLocked, + representationData, + label, + segmentationId, + } = segmentationState; - const displayText = getDisplayTextFromCachedStats(cachedStats); + const labelmapRepresentationData = + representationData[csToolsEnums.SegmentationRepresentations.Labelmap]; return { - id: labelmapUID, + id: segmentationId, + activeSegmentIndex, + segmentsLocked, + data, label, - labelmapIndex, - activeLabelmapIndex, - dimensions, - sizeInBytes, - cachedStats, - FrameOfReferenceUID: viewport.getFrameOfReferenceUID(), - // referenceSeriesUID: SeriesInstanceUID, - // referenceStudyUID: StudyInstanceUID, - // displaySetInstanceUID: displaySet.displaySetInstanceUID, - type: 'Labelmap', - displayText, - metadata, + volumeId: labelmapRepresentationData.volumeId, + displayText: getDisplayTextFromCachedStats(data), }; }, }; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index 5220cf4dd35..b6227edab07 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -21,34 +21,32 @@ export default function PanelRoiThresholdSegmentation({ servicesManager, commandsManager, }) { - const { t } = useTranslation('PanelSUV'); - const [showConfig, setShowConfig] = useState(false); - const [labelmapLoading, setLabelmapLoading] = useState(false); - const [activeSegmentationId, setActiveSegmentationId] = useState(''); - const [segmentations, setSegmentations] = useState([]); - const [tmtvValue, setTmtvValue] = useState(0); - - // keep track of old segmentations - const oldSegmentations = useRef([]); - const { SegmentationService, UINotificationService, UIDialogService, } = servicesManager.services; + const { t } = useTranslation('PanelSUV'); + const [showConfig, setShowConfig] = useState(false); + const [labelmapLoading, setLabelmapLoading] = useState(false); + const [selectedSegmentationId, setSelectedSegmentationId] = useState(''); + const [segmentations, setSegmentations] = useState(() => + SegmentationService.getSegmentations() + ); const [config, setConfig] = useState({ strategy: 'roiStat', minValue: 0, maxValue: 100, - numSlices: 1, weight: 0.41, }); - useEffect(() => { - // ~~ Initial - setSegmentations(SegmentationService.getSegmentations()); + const [tmtvValue, setTmtvValue] = useState(0); + // keep track of old segmentations + const oldSegmentations = useRef([]); + + useEffect(() => { // ~~ Subscription const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; @@ -56,14 +54,15 @@ export default function PanelRoiThresholdSegmentation({ const subscriptions = []; [added, updated, removed].forEach(evt => { - subscriptions.push( - SegmentationService.subscribe(evt, () => { - if (isMounted.current) { - const segmentations = SegmentationService.getSegmentations(); - setSegmentations(segmentations); - } - }).unsubscribe - ); + const { unsubscribe } = SegmentationService.subscribe(evt, () => { + const segmentations = SegmentationService.getSegmentations(); + setSegmentations(segmentations); + + if (!selectedSegmentationId) { + setSelectedSegmentationId(segmentations[0].id); + } + }); + subscriptions.push(unsubscribe); }); return () => { @@ -71,7 +70,7 @@ export default function PanelRoiThresholdSegmentation({ unsub(); }); }; - }, [SegmentationService]); + }, []); // // calculate the suv peak value for each segmentation // // check if the segmentations have changed compared to the old segmentations @@ -113,13 +112,20 @@ export default function PanelRoiThresholdSegmentation({ const handleCreateLabelmap = () => { setLabelmapLoading(true); - commandsManager.runCommand('createNewLabelmapForPT').then(() => { + commandsManager.runCommand('createNewLabelmapFromPT').then(() => { setLabelmapLoading(false); }); }; const handleRoiThresholding = () => { - const labelmap = SegmentationService.getSegmentation(activeSegmentationId); + commandsManager.runCommand('thresholdSegmentationByRectangleROITool', { + segmentationId: selectedSegmentationId, + config, + }); + return; + const labelmap = SegmentationService.getSegmentation( + selectedSegmentationId + ); if (!labelmap) { UINotificationService.show({ @@ -132,7 +138,7 @@ export default function PanelRoiThresholdSegmentation({ const thresholdedLabelmap = commandsManager.runCommand('thresholdVolume', { config, - labelmapUID: activeSegmentationId, + labelmapUID: selectedSegmentationId, }); const lesionStats = commandsManager.runCommand('getLesionStats', { @@ -158,7 +164,7 @@ export default function PanelRoiThresholdSegmentation({ const notYetUpdatedAtSource = true; SegmentationService.update( - activeSegmentationId, + selectedSegmentationId, labelmap, notYetUpdatedAtSource ); @@ -187,13 +193,17 @@ export default function PanelRoiThresholdSegmentation({ }; const handleSegmentationClick = segmentationId => { - const { - viewport: { element }, - } = commandsManager.runCommand('getActiveViewportsEnabledElement', {}); - activeLabelmapController.setActiveLabelmapByLabelmapUID( - element, - segmentationId - ); + commandsManager.runCommand('setSegmentationActiveForToolGroups', { + segmentationId, + }); + // const { + // viewport: { element }, + // } = commandsManager.runCommand('getActiveViewportsEnabledElement', {}); + // activeLabelmapController.setActiveLabelmapByLabelmapUID( + // element, + // segmentationId + // ); + setSelectedSegmentationId(segmentationId); }; const handleSegmentationHide = segmentationId => { @@ -293,16 +303,13 @@ export default function PanelRoiThresholdSegmentation({ ) : null} {/* show segmentation table */}
- {segmentations.length ? ( + {segmentations?.length ? ( { - setActiveSegmentationId(id); - handleSegmentationClick(id); - }} + activeSegmentationId={selectedSegmentationId} + onClick={handleSegmentationClick} onToggleVisibility={id => { handleSegmentationHide(id); }} diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index dfa4cb7730d..d2e7305feed 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -1,11 +1,12 @@ import { vec3 } from 'gl-matrix'; -import * as cornerstone from '@cornerstonejs/core'; -import * as cornerstoneTools from '@cornerstonejs/tools'; +import * as cs from '@cornerstonejs/core'; +import * as csTools from '@cornerstonejs/tools'; import { classes, DicomMetadataStore } from '@ohif/core'; import CornerstoneViewportDownloadForm from './utils/CornerstoneViewportDownloadForm'; import { Enums, annotation } from '@cornerstonejs/tools'; +import getThresholdValues from './utils/getThresholdValue'; const metadataProvider = classes.MetadataProvider; const RECTANGLE_ROI_THRESHOLD_MANUAL = 'RectangleROIStartEndThreshold'; @@ -33,10 +34,23 @@ const commandsModule = ({ function _getActiveViewportsEnabledElement() { const { activeViewportIndex } = ViewportGridService.getState(); const { element } = getEnabledElement(activeViewportIndex) || {}; - const enabledElement = cornerstone.getEnabledElement(element); + const enabledElement = cs.getEnabledElement(element); return enabledElement; } + function _getMatchedViewportsToolGroupIds() { + const [matchedViewports] = HangingProtocolService.getState(); + const toolGroupIds = []; + matchedViewports.forEach(({ viewportOptions }) => { + const { toolGroupId } = viewportOptions; + if (toolGroupIds.indexOf(toolGroupId) === -1) { + toolGroupIds.push(toolGroupId); + } + }); + + return toolGroupIds; + } + const actions = { getMatchingPTDisplaySet: () => { // Todo: this is assuming that the hanging protocol has successfully matched @@ -148,7 +162,7 @@ const commandsModule = ({ return metadata; }, - createNewLabelmapForPT: async () => { + createNewLabelmapFromPT: async () => { // Create a segmentation of the same resolution as the source data // using volumeLoader.createAndCacheDerivedVolume. const ptDisplaySet = actions.getMatchingPTDisplaySet(); @@ -165,41 +179,99 @@ const commandsModule = ({ } ); - const ptVolumeId = ptDisplaySet.displaySetInstanceUID; - // find the viewport that is displaying the PT Volume - const { viewports } = ViewportGridService.getState(); + const toolGroupIds = _getMatchedViewportsToolGroupIds(); + + const options = { + representationType: csTools.Enums.SegmentationRepresentations.Labelmap, + }; + + for (const toolGroupId of toolGroupIds) { + await commandsManager.runCommand( + 'addSegmentationRepresentationToToolGroup', + { segmentationId, toolGroupId: toolGroupId, options } + ); + } + }, + setSegmentationActiveForToolGroups: ({ segmentationId }) => { + const toolGroupIds = _getMatchedViewportsToolGroupIds(); + + toolGroupIds.forEach(toolGroupId => { + const segmentationRepresentations = csTools.segmentation.state.getSegmentationRepresentations( + toolGroupId + ); + + if (segmentationRepresentations.length === 0) { + return; + } + + // Todo: this finds the first segmentation representation that matches the segmentationId + // If there are two labelmap representations from the same segmentation, this will not work + + const representation = segmentationRepresentations.find( + representation => representation.segmentationId === segmentationId + ); - const ptViewportIndex = viewports.findIndex( - viewport => - viewport.displaySetInstanceUIDs.length === 1 && - viewport.displaySetInstanceUIDs[0] === ptVolumeId + csTools.segmentation.activeSegmentation.setActiveSegmentationRepresentation( + toolGroupId, + representation.segmentationRepresentationUID + ); + }); + }, + thresholdSegmentationByRectangleROITool: ({ segmentationId, config }) => { + const segmentation = csTools.segmentation.state.getSegmentation( + segmentationId ); - const ptViewport = Cornerstone3DViewportService.getCornerstone3DViewportByIndex( - ptViewportIndex + const { representationData } = segmentation; + const { volumeId: segVolumeId } = representationData[ + csTools.Enums.SegmentationRepresentations.Labelmap + ]; + + const { referencedVolumeId } = cs.cache.getVolume(segVolumeId); + + const labelmapVolume = cs.cache.getVolume(segmentationId); + const referencedVolume = cs.cache.getVolume(referencedVolumeId); + + if (!referencedVolume) { + throw new Error('No Reference volume found'); + } + + if (!labelmapVolume) { + throw new Error('No Reference labelmap found'); + } + + const annotationUIDs = csTools.annotation.selection.getAnnotationsSelectedByToolName( + RECTANGLE_ROI_THRESHOLD_MANUAL ); - if (!ptViewport) { + if (annotationUIDs.length === 0) { + UINotificationService.show({ + title: 'Commands Module', + message: 'No ROIThreshold Tool is Selected', + type: 'error', + }); return; } - const renderingEngineId = ptViewport.getRenderingEngine().id; - const toolGroup = cornerstoneTools.ToolGroupManager.getToolGroupForViewport( - ptViewport.id, - renderingEngineId + const { lower, higher } = getThresholdValues( + annotationUIDs, + referencedVolume, + config ); - const options = { - representationType: - cornerstoneTools.Enums.SegmentationRepresentations.Labelmap, + const configToUse = { + lower, + higher, + overwrite: true, }; - await commandsManager.runCommand( - 'addSegmentationRepresentationToToolGroup', - { segmentationId, toolGroupId: toolGroup.id, options } + csTools.utilities.segmentation.rectangleROIThresholdVolumeByRange( + annotationUIDs, + labelmapVolume, + [referencedVolume], + configToUse ); }, - // setPTColormap: ({ toolGroupUID, colormap }) => { // const toolGroup = ToolGroupManager.getToolGroupById(toolGroupUID); @@ -247,8 +319,8 @@ const commandsModule = ({ // return _getActiveViewportsEnabledElement(); // }, // thresholdVolume: ({ labelmapUID, config }) => { - // const labelmap = cornerstone.cache.getVolume(labelmapUID); - // const volume = cornerstone.cache.getVolume(labelmap.referenceVolumeUID); + // const labelmap = cs.cache.getVolume(labelmapUID); + // const volume = cs.cache.getVolume(labelmap.referenceVolumeUID); // if (!volume) { // throw new Error('No Reference volume found'); @@ -289,8 +361,8 @@ const commandsModule = ({ // const thresholdVolumeMethod = // config.strategy === 'range' - // ? csToolsUtils.segmentation.thresholdVolumeByRange - // : csToolsUtils.segmentation.thresholdVolumeByRoiStats; + // ? csTools.Utils.segmentation.thresholdVolumeByRange + // : csTools.Utils.segmentation.thresholdVolumeByRoiStats; // return thresholdVolumeMethod( // selectedToolDataList, @@ -302,18 +374,18 @@ const commandsModule = ({ // calculateSuvPeak: ({ labelmap }) => { // const { viewport } = _getActiveViewportsEnabledElement(); - // if (viewport instanceof cornerstone.StackViewport) { + // if (viewport instanceof cs.StackViewport) { // throw new Error('Cannot create a labelmap from a stack viewport'); // } // const { uid } = viewport.getDefaultActor(); - // const volume = cornerstone.getVolume(uid); + // const volume = cs.getVolume(uid); // const toolData = toolDataSelection.getSelectedToolDataByToolName( // RECTANGLE_ROI_THRESHOLD_MANUAL // ); - // const suvPeak = csToolsUtils.segmentation.calculateSuvPeak( + // const suvPeak = csTools.Utils.segmentation.calculateSuvPeak( // viewport, // labelmap, // volume, @@ -328,9 +400,9 @@ const commandsModule = ({ // }; // }, // getLesionStats: ({ labelmap, segmentIndex = 1 }) => { - // const { scalarData, spacing } = cornerstone.getVolume(labelmap.uid); + // const { scalarData, spacing } = cs.getVolume(labelmap.uid); - // const { scalarData: referencedScalarData } = cornerstone.getVolume( + // const { scalarData: referencedScalarData } = cs.getVolume( // labelmap.referenceVolumeUID // ); @@ -375,12 +447,12 @@ const commandsModule = ({ // }, // getTotalLesionGlycolysis: ({ segmentations }) => { // const labelmapVolumes = segmentations.map(segmentation => { - // return cornerstone.cache.getVolume(segmentation.id); + // return cs.cache.getVolume(segmentation.id); // }); // // merge labelmap will through an error if labels maps are not the same size // // or same direction or .... - // const mergedLabelmap = csToolsUtils.segmentation.createMergedLabelmap( + // const mergedLabelmap = csTools.Utils.segmentation.createMergedLabelmap( // labelmapVolumes // ); @@ -391,7 +463,7 @@ const commandsModule = ({ // throw new Error('No Reference volume found'); // } - // const ptVolume = cornerstone.getVolume(referenceVolumeUID); + // const ptVolume = cs.getVolume(referenceVolumeUID); // const mergedLabelData = mergedLabelmap.scalarData; @@ -422,7 +494,7 @@ const commandsModule = ({ // getLabelmapVolumes: () => { // const segmentations = SegmentationService.getSegmentations(); // const labelmapVolumes = segmentations.map(segmentation => { - // return cornerstone.cache.getVolume(segmentation.id); + // return cs.cache.getVolume(segmentation.id); // }); // return labelmapVolumes; @@ -431,15 +503,13 @@ const commandsModule = ({ const { viewport } = _getActiveViewportsEnabledElement(); const { focalPoint, viewPlaneNormal } = viewport.getCamera(); - const selectedAnnotationUIDs = cornerstoneTools.annotation.selection.getAnnotationsSelectedByToolName( + const selectedAnnotationUIDs = csTools.annotation.selection.getAnnotationsSelectedByToolName( RECTANGLE_ROI_THRESHOLD_MANUAL ); const annotationUID = selectedAnnotationUIDs[0]; - const annotation = cornerstoneTools.annotation.state.getAnnotation( - annotationUID - ); + const annotation = csTools.annotation.state.getAnnotation(annotationUID); const { handles } = annotation.data; const { points } = handles; @@ -469,15 +539,13 @@ const commandsModule = ({ setEndSliceForROIThresholdTool: () => { const { viewport } = _getActiveViewportsEnabledElement(); - const selectedAnnotationUIDs = cornerstoneTools.annotation.selection.getAnnotationsSelectedByToolName( + const selectedAnnotationUIDs = csTools.annotation.selection.getAnnotationsSelectedByToolName( RECTANGLE_ROI_THRESHOLD_MANUAL ); const annotationUID = selectedAnnotationUIDs[0]; - const annotation = cornerstoneTools.annotation.state.getAnnotation( - annotationUID - ); + const annotation = csTools.annotation.state.getAnnotation(annotationUID); // get the current slice Index const sliceIndex = viewport.getCurrentImageIdIndex(); @@ -509,8 +577,18 @@ const commandsModule = ({ storeContexts: [], options: {}, }, - createNewLabelmapForPT: { - commandFn: actions.createNewLabelmapForPT, + createNewLabelmapFromPT: { + commandFn: actions.createNewLabelmapFromPT, + storeContexts: [], + options: {}, + }, + setSegmentationActiveForToolGroups: { + commandFn: actions.setSegmentationActiveForToolGroups, + storeContexts: [], + options: {}, + }, + thresholdSegmentationByRectangleROITool: { + commandFn: actions.thresholdSegmentationByRectangleROITool, storeContexts: [], options: {}, }, diff --git a/extensions/tmtv/src/utils/getThresholdValue.ts b/extensions/tmtv/src/utils/getThresholdValue.ts new file mode 100644 index 00000000000..7b33ef4442a --- /dev/null +++ b/extensions/tmtv/src/utils/getThresholdValue.ts @@ -0,0 +1,66 @@ +import * as csTools from '@cornerstonejs/tools'; + +function getThresholdValues( + annotationUIDs, + referencedVolume, + config +): { lower: number; higher: number } { + if (config.strategy === 'range') { + return { + lower: config.minValue, + higher: config.maxValue, + }; + } + + // roiStats + const { weight } = config; + const { imageData } = referencedVolume; + const values = imageData + .getPointData() + .getScalars() + .getData(); + + // Todo: add support for other strategies + const { fn, baseValue } = _getStrategyFn('max'); + let value = baseValue; + + const annotations = annotationUIDs.map(annotationUID => + csTools.annotation.state.getAnnotation(annotationUID) + ); + + const boundsIJK = csTools.utilities.boundingBox.getBoundsIJKFromRectangleAnnotations( + annotations, + referencedVolume + ); + + const [[iMin, iMax], [jMin, jMax], [kMin, kMax]] = boundsIJK; + + for (let i = iMin; i <= iMax; i++) { + for (let j = jMin; j <= jMax; j++) { + for (let k = kMin; k <= kMax; k++) { + const offset = imageData.computeOffsetIndex([i, j, k]); + value = fn(values[offset], value); + } + } + } + + return { + lower: weight * value, + higher: +Infinity, + }; +} + +function _getStrategyFn( + statistic +): { fn: (a: number, b: number) => number; baseValue: number } { + const baseValue = -Infinity; + const fn = (number, maxValue) => { + if (number > maxValue) { + maxValue = number; + } + return maxValue; + }; + return { fn, baseValue }; +} + +export default getThresholdValues; diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index d2eee300dae..e0d499293fb 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -102,6 +102,7 @@ function initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { bindings: [{ mouseButton: Enums.MouseBindings.Primary }], }, ], + enabled: [{ toolName: toolNames.SegmentationDisplay }], }; const mipToolsConfig = { diff --git a/platform/core/src/services/SegmentationService/SegmentationService.js b/platform/core/src/services/SegmentationService/SegmentationService.js index 6243c93d82c..50784f493c3 100644 --- a/platform/core/src/services/SegmentationService/SegmentationService.js +++ b/platform/core/src/services/SegmentationService/SegmentationService.js @@ -25,25 +25,55 @@ class SegmentationService { } /** - * Get all measurements. + * Get all segmentations. * - * @return {Measurement[]} Array of measurements + * @return Array of segmentations */ - getSegmentations() {} + getSegmentations() { + const segmentations = this._arrayOfObjects(this.segmentations); + return ( + segmentations && + segmentations.map(m => this.segmentations[Object.keys(m)[0]]) + ); + } /** - * Get specific measurement by its id. + * Get specific segmentation by its id. * - * @param {string} id If of the measurement - * @return {Measurement} Measurement instance + * @param id If of the segmentation + * @return segmentation instance */ getSegmentation(id) {} + addOrUpdateSegmentation(id, segmentationSchema) { + const segmentation = this.segmentations[id]; + + if (segmentation) { + Object.assign(segmentation, segmentationSchema); + + this._broadcastEvent(this.EVENTS.SEGMENTATION_UPDATED, { + id, + segmentation, + }); + + return; + } + + this.segmentations[id] = { + ...segmentationSchema, + }; + + this._broadcastEvent(this.EVENTS.SEGMENTATION_ADDED, { + id, + segmentation, + }); + } + /** * Toggles the visibility of a segmentation in the state, and broadcasts the event. * Note: this method does not update the segmentation state in the source. It only * updates the state, and there should be separate listeners for that. - * @param {string[]} ids segmentation ids + * @param ids segmentation ids */ toggleSegmentationsVisibility(ids) { // ids.forEach(id => { @@ -59,15 +89,15 @@ class SegmentationService { } /** - * Removes a measurement and broadcasts the removed event. + * Removes a segmentation and broadcasts the removed event. * - * @param {string} id The measurement id - * @param {segmentationsource} source The measurement source instance - * @return {string} The removed measurement id + * @param {string} id The segmentation id + * @param {segmentationsource} source The segmentation source instance + * @return {string} The removed segmentation id */ remove(id, source) { // if (!id || !this.segmentations[id]) { - // log.warn(`No id provided, or unable to find measurement by id.`); + // log.warn(`No id provided, or unable to find segmentation by id.`); // return; // } // delete this.segmentations[id]; @@ -77,14 +107,8 @@ class SegmentationService { // }); } - clearSegmentations() { - this.segmentations = {}; - this._jumpToMeasurementCache = {}; - this._broadcastEvent(this.EVENTS.SEGMENTATIONS_CLEARED); - } - /** - * Clear all measurements and broadcasts cleared event. + * Clear all segmentations and broadcasts cleared event. */ clear() { this.segmentations = {}; diff --git a/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx b/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx index 934a0c3c226..1c1020ae5a3 100644 --- a/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx +++ b/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx @@ -70,7 +70,7 @@ const SegmentationItem = ({ {index} )}
-
+
{ - // filter segmentaion ids that are hidden + // filter segmentation ids that are hidden const visibleSegmentationsIds = segmentations .filter(segmentation => !hiddenSegmentationIds.includes(segmentation.id)) .map(segmentation => segmentation.id); @@ -63,14 +63,14 @@ const SegmentationTable = ({
{!!segmentations.length && - segmentations.map((segData, i) => { - const { id, label, displayText } = segData; + segmentations.map((segmentation, i) => { + const { id, label, displayText = [] } = segmentation; return ( Date: Fri, 27 May 2022 20:27:35 -0400 Subject: [PATCH 09/25] feat: Add displayText to segmentations --- .../src/initSegmentationService.js | 58 ++-- .../segmentationServiceMappings/Labelmap.js | 15 +- .../Panels/PanelROIThresholdSegmentation.tsx | 257 +++++++----------- extensions/tmtv/src/commandsModule.js | 230 +++++++++------- extensions/tmtv/src/utils/calculateSUVPeak.ts | 152 +++++++++++ extensions/tmtv/src/utils/calculateTMTV.ts | 44 +++ .../SegmentationService.js | 59 ++-- 7 files changed, 484 insertions(+), 331 deletions(-) create mode 100644 extensions/tmtv/src/utils/calculateSUVPeak.ts create mode 100644 extensions/tmtv/src/utils/calculateTMTV.ts diff --git a/extensions/cornerstone-3d/src/initSegmentationService.js b/extensions/cornerstone-3d/src/initSegmentationService.js index fec6233900c..98d69b63aca 100644 --- a/extensions/cornerstone-3d/src/initSegmentationService.js +++ b/extensions/cornerstone-3d/src/initSegmentationService.js @@ -1,5 +1,6 @@ -import { eventTarget, Enums } from '@cornerstonejs/core'; -import { segmentation, Enums as csToolsEnums } from '@cornerstonejs/tools'; +import { eventTarget, Enums, triggerEvent } from '@cornerstonejs/core'; +import * as csTools from '@cornerstonejs/tools'; +import { Enums as csToolsEnums } from '@cornerstonejs/tools'; import Labelmap from './utils/segmentationServiceMappings/Labelmap'; function initSegmentationService( @@ -29,7 +30,7 @@ function connectToolsToSegmentationService( eventTarget.addEventListener(segmentationUpdated, evt => { const { segmentationId } = evt.detail; - const segmentationState = segmentation.state.getSegmentation( + const segmentationState = csTools.segmentation.state.getSegmentation( segmentationId ); @@ -63,47 +64,46 @@ function connectSegmentationServiceToTools( Cornerstone3DViewportService ) { const { - SEGMENTATIONS_CLEARED, SEGMENTATION_UPDATED, - SEGMENTATION_ADDED, SEGMENTATION_REMOVED, } = SegmentationService.EVENTS; - SegmentationService.subscribe(SEGMENTATION_REMOVED, ({ source, id }) => { - debugger; - // Todo: for now remove from all viewports + SegmentationService.subscribe(SEGMENTATION_REMOVED, ({ id }) => { const removeFromCache = true; - SegmentationModule.removeLabelmapForAllElements( - segmentationId, - removeFromCache - ); - Cornerstone3DViewportService.getRenderingEngine().render(); - }); + const sourceSegState = csTools.segmentation.state.getSegmentation(id); - SegmentationService.subscribe(SEGMENTATIONS_CLEARED, () => { debugger; - // globalImageIdSpecificToolStateManager.restoreToolState({}); - // _refreshViewports(); + + // SegmentationModule.removeLabelmapForAllElements( + // segmentationId, + // removeFromCache + // ); + + // Cornerstone3DViewportService.getRenderingEngine().render(); }); SegmentationService.subscribe( SEGMENTATION_UPDATED, - ({ source, segmentation, notYetUpdatedAtSource }) => { - debugger; - if ( - source.name === 'CornerstoneTools' && - notYetUpdatedAtSource === false - ) { - // This event was fired by cornerstone telling the measurement service to sync. Already in sync. + ({ id, segmentation, notYetUpdatedAtSource }) => { + if (notYetUpdatedAtSource === false) { return; } + const { label, text } = segmentation; + + const sourceSegmentation = csTools.segmentation.state.getSegmentation(id); + + // Update the label in the source if necessary + if (sourceSegmentation.label !== label) { + sourceSegmentation.label = label; + } + + if (sourceSegmentation.text !== text) { + sourceSegmentation.text = text; + } - const { id, label, cachedStats } = segmentation; - SegmentationModule.setLabelmapGlobalState(id, { - volumeUID: id, - label, - cachedStats, + triggerEvent(eventTarget, csTools.Enums.Events.SEGMENTATION_MODIFIED, { + segmentationId: id, }); } ); diff --git a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js index ff963a45b87..cb058b06e62 100644 --- a/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js +++ b/extensions/cornerstone-3d/src/utils/segmentationServiceMappings/Labelmap.js @@ -1,14 +1,4 @@ -import { segmentation, Enums as csToolsEnums } from '@cornerstonejs/tools'; - -const getDisplayTextFromCachedStats = stats => { - let displayText = []; - - if (stats.suvPeak) { - displayText.push(`SUV Peak: ${stats.suvPeak.toFixed(2)}`); - } - - return displayText; -}; +import { Enums as csToolsEnums } from '@cornerstonejs/tools'; const Labelmap = { toSegmentation: segmentationState => { @@ -19,6 +9,7 @@ const Labelmap = { representationData, label, segmentationId, + text, } = segmentationState; const labelmapRepresentationData = @@ -31,7 +22,7 @@ const Labelmap = { data, label, volumeId: labelmapRepresentationData.volumeId, - displayText: getDisplayTextFromCachedStats(data), + displayText: text || [], }; }, }; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index b6227edab07..8298dbbdccb 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -1,5 +1,4 @@ -import React, { useEffect, useState, useRef } from 'react'; -import { utilities as csToolsUtils } from '@cornerstonejs/core'; +import React, { useEffect, useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { Input, @@ -21,11 +20,7 @@ export default function PanelRoiThresholdSegmentation({ servicesManager, commandsManager, }) { - const { - SegmentationService, - UINotificationService, - UIDialogService, - } = servicesManager.services; + const { SegmentationService, UIDialogService } = servicesManager.services; const { t } = useTranslation('PanelSUV'); const [showConfig, setShowConfig] = useState(false); @@ -43,9 +38,53 @@ export default function PanelRoiThresholdSegmentation({ const [tmtvValue, setTmtvValue] = useState(0); - // keep track of old segmentations - const oldSegmentations = useRef([]); + const runCommand = useCallback( + (commandName, commandOptions = {}) => { + return commandsManager.runCommand(commandName, commandOptions); + }, + [commandsManager] + ); + + const handleROIThresholding = useCallback(() => { + const labelmap = runCommand('thresholdSegmentationByRectangleROITool', { + segmentationId: selectedSegmentationId, + config, + }); + + const lesionStats = runCommand('getLesionStats', { labelmap }); + const suvPeak = runCommand('calculateSuvPeak', { labelmap }); + const lesionGlyoclysisStats = lesionStats.volume * lesionStats.meanValue; + + // update segDetails with the suv peak for the active segmentation + + const segmentation = SegmentationService.getSegmentation( + selectedSegmentationId + ); + + const data = { + lesionStats, + suvPeak, + lesionGlyoclysisStats, + }; + + const notYetUpdatedAtSource = true; + SegmentationService.addOrUpdateSegmentation( + selectedSegmentationId, + { + ...segmentation, + data: Object.assign(segmentation.data, data), + text: [`SUV Peak: ${suvPeak.suvPeak.toFixed(2)}`], + }, + notYetUpdatedAtSource + ); + // Update TMTV Value + handleTMTVCalculation(); + }, [selectedSegmentationId, config]); + + /** + * Update UI based on segmentation changes (added, removed, updated) + */ useEffect(() => { // ~~ Subscription const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; @@ -72,152 +111,33 @@ export default function PanelRoiThresholdSegmentation({ }; }, []); - // // calculate the suv peak value for each segmentation - // // check if the segmentations have changed compared to the old segmentations - // useEffect(() => { - // if (oldSegmentations.current.length !== segmentations.length) { - // const newSegmentation = segmentations.find(seg => { - // // check if the segmentationId is not in the old segmentations - // return !oldSegmentations.current.find(oldSeg => oldSeg.id === seg.id); - // }); - - // if (newSegmentation) { - // setActiveSegmentationId(newSegmentation.id); - // } - // oldSegmentations.current = segmentations; - // } - // }, [segmentations]); - - // useEffect(() => { - // const subscription = SegmentationService.subscribe( - // SegmentationService.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, - // ({ segmentation }) => { - // if (isMounted.current) { - // const { id } = segmentation; - // const { viewport } = commandsManager.runCommand( - // 'getActiveViewportsEnabledElement' - // ); - - // hideSegmentController.toggleSegmentationVisibility( - // viewport.element, - // id - // ); - // } - // } - // ); - // return () => { - // subscription.unsubscribe(); - // }; - // }, [SegmentationService]); - - const handleCreateLabelmap = () => { - setLabelmapLoading(true); - commandsManager.runCommand('createNewLabelmapFromPT').then(() => { - setLabelmapLoading(false); - }); - }; - - const handleRoiThresholding = () => { - commandsManager.runCommand('thresholdSegmentationByRectangleROITool', { - segmentationId: selectedSegmentationId, - config, - }); - return; - const labelmap = SegmentationService.getSegmentation( - selectedSegmentationId - ); - - if (!labelmap) { - UINotificationService.show({ - title: 'Segmentation Service', - message: 'No Active Segmentation is Selected', - type: 'error', - }); - return; - } - - const thresholdedLabelmap = commandsManager.runCommand('thresholdVolume', { - config, - labelmapUID: selectedSegmentationId, - }); - - const lesionStats = commandsManager.runCommand('getLesionStats', { - labelmap: thresholdedLabelmap, - }); - - // Todo: right now it thresholds based on the active viewport's volume - const suvPeak = commandsManager.runCommand('calculateSuvPeak', { - labelmap: thresholdedLabelmap, - }); - - const lesionGlyoclysisStats = commandsManager.runCommand( - 'calculateLesionGlycolysis', - { lesionStats } + /** + * Toggle visibility of the segmentation + */ + useEffect(() => { + const subscription = SegmentationService.subscribe( + SegmentationService.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, + ({ segmentation }) => { + runCommand('toggleSegmentationVisibility', { + segmentationId: segmentation.id, + }); + } ); - - // update segDetails with the suv peak for the active segmentation - labelmap.cachedStats = { - ...lesionStats, - ...suvPeak, - ...lesionGlyoclysisStats, + return () => { + subscription.unsubscribe(); }; - - const notYetUpdatedAtSource = true; - SegmentationService.update( - selectedSegmentationId, - labelmap, - notYetUpdatedAtSource - ); - handleTMTVCalculation(); - }; - - const handleSegmentationEdit = id => { - onSegmentationItemEditHandler({ id, SegmentationService, UIDialogService }); - }; - - const handleSegmentationDelete = segmentationId => { - SegmentationService.remove(segmentationId); - handleTMTVCalculation(); - }; + }, [SegmentationService]); const handleTMTVCalculation = () => { - const labelmaps = commandsManager.runCommand('getLabelmapVolumes', {}); - - if (labelmaps.length === 0) { - setTmtvValue(0); - return; - } - - const tmtv = csToolsUtils.segmentation.calculateTMTV(labelmaps); + const segmentations = SegmentationService.getSegmentations(); + const tmtv = runCommand('calculateTMTV', { segmentations }); setTmtvValue(tmtv.toFixed(4)); }; - const handleSegmentationClick = segmentationId => { - commandsManager.runCommand('setSegmentationActiveForToolGroups', { - segmentationId, - }); - // const { - // viewport: { element }, - // } = commandsManager.runCommand('getActiveViewportsEnabledElement', {}); - // activeLabelmapController.setActiveLabelmapByLabelmapUID( - // element, - // segmentationId - // ); - setSelectedSegmentationId(segmentationId); - }; - - const handleSegmentationHide = segmentationId => { - SegmentationService.toggleSegmentationsVisibility([segmentationId]); - }; - - const handleSegmentationHideAll = segmentationIds => { - SegmentationService.toggleSegmentationsVisibility(segmentationIds); - }; - const handleExportClick = () => { // General Segmentation information - const segReport = commandsManager.runCommand('getSegmentationReport', {}); - const tlg = commandsManager.runCommand('getTotalLesionGlycolysis', { + const segReport = runCommand('getSegmentationReport'); + const tlg = runCommand('getTotalLesionGlycolysis', { segmentations: SegmentationService.getSegmentations(), }); @@ -249,7 +169,7 @@ export default function PanelRoiThresholdSegmentation({ } }); - commandsManager.runCommand('saveRTReport', { + runCommand('saveRTReport', { toolState: roiThresholdManualRois, }); }; @@ -260,14 +180,19 @@ export default function PanelRoiThresholdSegmentation({
@@ -474,9 +407,7 @@ function ROIThresholdConfiguration({ config, setConfig, commandsManager }) { diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index d2e7305feed..1db611902dc 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -7,6 +7,8 @@ import CornerstoneViewportDownloadForm from './utils/CornerstoneViewportDownload import { Enums, annotation } from '@cornerstonejs/tools'; import getThresholdValues from './utils/getThresholdValue'; +import calculateSuvPeak from './utils/calculateSUVPeak'; +import calculateTMTV from './utils/calculateTMTV'; const metadataProvider = classes.MetadataProvider; const RECTANGLE_ROI_THRESHOLD_MANUAL = 'RectangleROIStartEndThreshold'; @@ -265,13 +267,44 @@ const commandsModule = ({ overwrite: true, }; - csTools.utilities.segmentation.rectangleROIThresholdVolumeByRange( + return csTools.utilities.segmentation.rectangleROIThresholdVolumeByRange( annotationUIDs, labelmapVolume, [referencedVolume], configToUse ); }, + toggleSegmentationVisibility: ({ segmentationId }) => { + const toolGroupIds = _getMatchedViewportsToolGroupIds(); + + toolGroupIds.forEach(toolGroupId => { + const segmentationRepresentations = csTools.segmentation.state.getSegmentationRepresentations( + toolGroupId + ); + + if (segmentationRepresentations.length === 0) { + return; + } + + // Todo: this finds the first segmentation representation that matches the segmentationId + // If there are two labelmap representations from the same segmentation, this will not work + const representation = segmentationRepresentations.find( + representation => representation.segmentationId === segmentationId + ); + + const visibility = csTools.segmentation.config.visibility.getSegmentationVisibility( + toolGroupId, + representation.segmentationRepresentationUID + ); + + csTools.segmentation.config.visibility.setSegmentationVisibility( + toolGroupId, + representation.segmentationRepresentationUID, + !visibility + ); + }); + }, + // setPTColormap: ({ toolGroupUID, colormap }) => { // const toolGroup = ToolGroupManager.getToolGroupById(toolGroupUID); @@ -320,7 +353,7 @@ const commandsModule = ({ // }, // thresholdVolume: ({ labelmapUID, config }) => { // const labelmap = cs.cache.getVolume(labelmapUID); - // const volume = cs.cache.getVolume(labelmap.referenceVolumeUID); + // const volume = cs.cache.getVolume(labelmap.referencedVolumeId); // if (!volume) { // throw new Error('No Reference volume found'); @@ -371,80 +404,80 @@ const commandsModule = ({ // configToUse // ); // }, - // calculateSuvPeak: ({ labelmap }) => { - // const { viewport } = _getActiveViewportsEnabledElement(); + calculateSuvPeak: ({ labelmap }) => { + const { referencedVolumeId } = labelmap; - // if (viewport instanceof cs.StackViewport) { - // throw new Error('Cannot create a labelmap from a stack viewport'); - // } + const referencedVolume = cs.cache.getVolume(referencedVolumeId); - // const { uid } = viewport.getDefaultActor(); - // const volume = cs.getVolume(uid); + const annotationUIDs = csTools.annotation.selection.getAnnotationsSelectedByToolName( + RECTANGLE_ROI_THRESHOLD_MANUAL + ); - // const toolData = toolDataSelection.getSelectedToolDataByToolName( - // RECTANGLE_ROI_THRESHOLD_MANUAL - // ); + const annotations = annotationUIDs.map(annotationUID => + csTools.annotation.state.getAnnotation(annotationUID) + ); - // const suvPeak = csTools.Utils.segmentation.calculateSuvPeak( - // viewport, - // labelmap, - // volume, - // toolData - // ); + const suvPeak = calculateSuvPeak(labelmap, referencedVolume, annotations); + return { + suvPeak: suvPeak.mean, + suvMax: suvPeak.max, + suvMaxIJK: suvPeak.maxIJK, + suvMaxLPS: suvPeak.maxLPS, + }; + }, + getLesionStats: ({ labelmap, segmentIndex = 1 }) => { + const { scalarData, spacing } = labelmap; - // return { - // suvPeak: suvPeak.mean, - // suvMax: suvPeak.max, - // suvMaxIJK: suvPeak.maxIJK, - // suvMaxLPS: suvPeak.maxLPS, - // }; - // }, - // getLesionStats: ({ labelmap, segmentIndex = 1 }) => { - // const { scalarData, spacing } = cs.getVolume(labelmap.uid); + const { scalarData: referencedScalarData } = cs.cache.getVolume( + labelmap.referencedVolumeId + ); - // const { scalarData: referencedScalarData } = cs.getVolume( - // labelmap.referenceVolumeUID - // ); + let segmentationMax = -Infinity; + let segmentationMin = Infinity; + let segmentationValues = []; + + let voxelCount = 0; + for (let i = 0; i < scalarData.length; i++) { + if (scalarData[i] === segmentIndex) { + const value = referencedScalarData[i]; + segmentationValues.push(value); + if (value > segmentationMax) { + segmentationMax = value; + } + if (value < segmentationMin) { + segmentationMin = value; + } + voxelCount++; + } + } - // let segmentationMax = -Infinity; - // let segmentationMin = Infinity; - // let segmentationValues = []; - - // let voxelCount = 0; - // for (let i = 0; i < scalarData.length; i++) { - // if (scalarData[i] === segmentIndex) { - // const value = referencedScalarData[i]; - // segmentationValues.push(value); - // if (value > segmentationMax) { - // segmentationMax = value; - // } - // if (value < segmentationMin) { - // segmentationMin = value; - // } - // voxelCount++; - // } - // } + const stats = { + minValue: segmentationMin, + maxValue: segmentationMax, + meanValue: segmentationValues.reduce((a, b) => a + b, 0) / voxelCount, + stdValue: Math.sqrt( + segmentationValues.reduce((a, b) => a + b * b, 0) / voxelCount - + segmentationValues.reduce((a, b) => a + b, 0) / voxelCount ** 2 + ), + volume: voxelCount * spacing[0] * spacing[1] * spacing[2] * 1e-3, + }; - // const stats = { - // minValue: segmentationMin, - // maxValue: segmentationMax, - // meanValue: segmentationValues.reduce((a, b) => a + b, 0) / voxelCount, - // stdValue: Math.sqrt( - // segmentationValues.reduce((a, b) => a + b * b, 0) / voxelCount - - // segmentationValues.reduce((a, b) => a + b, 0) / voxelCount ** 2 - // ), - // volume: voxelCount * spacing[0] * spacing[1] * spacing[2] * 1e-3, - // }; + return stats; + }, + calculateLesionGlycolysis: ({ lesionStats }) => { + const { meanValue, volume } = lesionStats; - // return stats; - // }, - // calculateLesionGlycolysis: ({ lesionStats }) => { - // const { meanValue, volume } = lesionStats; + return { + lesionGlyoclysisStats: volume * meanValue, + }; + }, + calculateTMTV: ({ segmentations }) => { + const labelmaps = segmentations.map(segmentation => + cs.cache.getVolume(segmentation.id) + ); - // return { - // lesionGlyoclysisStats: volume * meanValue, - // }; - // }, + return calculateTMTV(labelmaps); + }, // getTotalLesionGlycolysis: ({ segmentations }) => { // const labelmapVolumes = segmentations.map(segmentation => { // return cs.cache.getVolume(segmentation.id); @@ -457,13 +490,13 @@ const commandsModule = ({ // ); // // grabbing the first labelmap referenceVolume since it will be the same for all - // const { referenceVolumeUID, spacing } = labelmapVolumes[0]; + // const { referencedVolumeId, spacing } = labelmapVolumes[0]; - // if (!referenceVolumeUID) { + // if (!referencedVolumeId) { // throw new Error('No Reference volume found'); // } - // const ptVolume = cs.getVolume(referenceVolumeUID); + // const ptVolume = cs.getVolume(referencedVolumeId); // const mergedLabelData = mergedLabelmap.scalarData; @@ -491,14 +524,14 @@ const commandsModule = ({ // 1e-3 // ); // }, - // getLabelmapVolumes: () => { - // const segmentations = SegmentationService.getSegmentations(); - // const labelmapVolumes = segmentations.map(segmentation => { - // return cs.cache.getVolume(segmentation.id); - // }); + getLabelmapVolumes: () => { + const segmentations = SegmentationService.getSegmentations(); + const labelmapVolumes = segmentations.map(segmentation => { + return cs.cache.getVolume(segmentation.id); + }); - // return labelmapVolumes; - // }, + return labelmapVolumes; + }, setStartSliceForROIThresholdTool: () => { const { viewport } = _getActiveViewportsEnabledElement(); const { focalPoint, viewPlaneNormal } = viewport.getCamera(); @@ -592,6 +625,11 @@ const commandsModule = ({ storeContexts: [], options: {}, }, + toggleSegmentationVisibility: { + commandFn: actions.toggleSegmentationVisibility, + storeContexts: [], + options: {}, + }, // setPTColormap: { // commandFn: actions.setPTColormap, // storeContexts: [], @@ -602,36 +640,26 @@ const commandsModule = ({ // storeContexts: [], // options: {}, // }, - // thresholdVolume: { - // commandFn: actions.thresholdVolume, - // storeContexts: [], - // options: {}, - // }, - // getLabelmapVolumes: { - // commandFn: actions.getLabelmapVolumes, - // storeContexts: [], - // options: {}, - // }, // getTotalLesionGlycolysis: { // commandFn: actions.getTotalLesionGlycolysis, // storeContexts: [], // options: {}, // }, - // calculateSuvPeak: { - // commandFn: actions.calculateSuvPeak, - // storeContexts: [], - // options: {}, - // }, - // getLesionStats: { - // commandFn: actions.getLesionStats, - // storeContexts: [], - // options: {}, - // }, - // calculateLesionGlycolysis: { - // commandFn: actions.calculateLesionGlycolysis, - // storeContexts: [], - // options: {}, - // }, + calculateSuvPeak: { + commandFn: actions.calculateSuvPeak, + storeContexts: [], + options: {}, + }, + getLesionStats: { + commandFn: actions.getLesionStats, + storeContexts: [], + options: {}, + }, + calculateTMTV: { + commandFn: actions.calculateTMTV, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/tmtv/src/utils/calculateSUVPeak.ts b/extensions/tmtv/src/utils/calculateSUVPeak.ts new file mode 100644 index 00000000000..fc9eca6c743 --- /dev/null +++ b/extensions/tmtv/src/utils/calculateSUVPeak.ts @@ -0,0 +1,152 @@ +import { Types } from '@cornerstonejs/core'; +import { utilities } from '@cornerstonejs/tools'; +import { vec3 } from 'gl-matrix'; + +type AnnotationsForThresholding = { + data: { + handles: { + points: Types.Point3[]; + }; + cachedStats?: { + projectionPoints?: Types.Point3[][]; + }; + }; +}; + +/** + * This method calculates the SUV peak on a segmented ROI from a reference PET + * volume. If a rectangle annotation is provided, the peak is calculated within that + * rectangle. Otherwise, the calculation is performed on the entire volume which + * will be slower but same result. + * @param viewport Viewport to use for the calculation + * @param labelmap Labelmap from which the mask is taken + * @param referenceVolume PET volume to use for SUV calculation + * @param toolData [Optional] list of toolData to use for SUV calculation + * @param segmentIndex The index of the segment to use for masking + * @returns + */ +function calculateSuvPeak( + labelmap: Types.IImageVolume, + referenceVolume: Types.IImageVolume, + annotations?: AnnotationsForThresholding[], + segmentIndex = 1 +): { + max: number; + maxIJK: Types.Point3; + maxLPS: Types.Point3; + mean: number; +} { + if (referenceVolume.metadata.Modality !== 'PT') { + return; + } + + if (labelmap.scalarData.length !== referenceVolume.scalarData.length) { + throw new Error( + 'labelmap and referenceVolume must have the same number of pixels' + ); + } + + const { + scalarData: labelmapData, + dimensions, + imageData: labelmapImageData, + } = labelmap; + + const { + scalarData: referenceVolumeData, + imageData: referenceVolumeImageData, + } = referenceVolume; + + let boundsIJK; + // Todo: using the first annotation for now + if (annotations && annotations[0].data?.cachedStats) { + const { projectionPoints } = annotations[0].data.cachedStats; + const pointsToUse = [].concat(...projectionPoints); // cannot use flat() because of typescript compiler right now + + const rectangleCornersIJK = pointsToUse.map(world => { + const ijk = vec3.fromValues(0, 0, 0); + referenceVolumeImageData.worldToIndex(world, ijk); + return ijk as Types.Point3; + }); + + boundsIJK = utilities.boundingBox.getBoundingBoxAroundShape( + rectangleCornersIJK, + dimensions + ); + } + + let max = 0; + let maxIJK = [0, 0, 0]; + let maxLPS = [0, 0, 0]; + + const callback = ({ pointIJK, pointLPS }) => { + const offset = referenceVolumeImageData.computeOffsetIndex(pointIJK); + const value = labelmapData[offset]; + + if (value !== segmentIndex) { + return; + } + + const referenceValue = referenceVolumeData[offset]; + + if (referenceValue > max) { + max = referenceValue; + maxIJK = pointIJK; + maxLPS = pointLPS; + } + }; + + utilities.pointInShapeCallback( + labelmapImageData, + () => true, + callback, + boundsIJK + ); + + const direction = labelmapImageData + .getDirection() + .slice(0, 3) as Types.Point3; + /** + * 2. Find the bottom and top of the great circle for the second sphere (1cc sphere) + * diameter of 12mm = 1.2cm ~ = 1cc sphere + */ + const diameter = 12; + const secondaryCircleWorld = vec3.create(); + const bottomWorld = vec3.create(); + const topWorld = vec3.create(); + referenceVolumeImageData.indexToWorld(maxIJK, secondaryCircleWorld); + vec3.scaleAndAdd(bottomWorld, secondaryCircleWorld, direction, -diameter / 2); + vec3.scaleAndAdd(topWorld, secondaryCircleWorld, direction, diameter / 2); + const suvPeakCirclePoints = [bottomWorld, topWorld] as [ + Types.Point3, + Types.Point3 + ]; + + /** + * 3. Find the Mean and Max of the 1cc sphere centered on the suv Max of the previous + * sphere + */ + let count = 0; + let acc = 0; + const suvPeakMeanCallback = ({ value }) => { + acc += value; + count += 1; + }; + + utilities.pointInSurroundingSphereCallback( + referenceVolumeImageData, + suvPeakCirclePoints, + suvPeakMeanCallback + ); + + const mean = acc / count; + + return { + max, + maxIJK, + maxLPS, + mean, + }; +} + +export default calculateSuvPeak; diff --git a/extensions/tmtv/src/utils/calculateTMTV.ts b/extensions/tmtv/src/utils/calculateTMTV.ts new file mode 100644 index 00000000000..f09375c346e --- /dev/null +++ b/extensions/tmtv/src/utils/calculateTMTV.ts @@ -0,0 +1,44 @@ +import { Types } from '@cornerstonejs/core'; +import { utilities } from '@cornerstonejs/tools'; + +/** + * Given a list of labelmaps (with the possibility of overlapping regions), + * and a referenceVolume, it calculates the total metabolic tumor volume (TMTV) + * by flattening and rasterizing each segment into a single labelmap and summing + * the total number of volume voxels. It should be noted that for this calculation + * we do not double count voxels that are part of multiple labelmaps. + * @param {} labelmaps + * @param {number} segmentIndex + * @returns {number} TMTV in ml + */ +function calculateTMTV( + labelmaps: Array, + segmentIndex = 1 +): number { + const volumeId = 'mergedLabelmap'; + + const mergedLabelmap = utilities.segmentation.createMergedLabelmapForIndex( + labelmaps, + segmentIndex, + volumeId + ); + + const { imageData, spacing } = mergedLabelmap; + const values = imageData + .getPointData() + .getScalars() + .getData(); + + // count non-zero values inside the outputData, this would + // consider the overlapping regions to be only counted once + const numVoxels = values.reduce((acc, curr) => { + if (curr > 0) { + return acc + 1; + } + return acc; + }, 0); + + return 1e-3 * numVoxels * spacing[0] * spacing[1] * spacing[2]; +} + +export default calculateTMTV; diff --git a/platform/core/src/services/SegmentationService/SegmentationService.js b/platform/core/src/services/SegmentationService/SegmentationService.js index 50784f493c3..b0daa6fc073 100644 --- a/platform/core/src/services/SegmentationService/SegmentationService.js +++ b/platform/core/src/services/SegmentationService/SegmentationService.js @@ -4,7 +4,6 @@ const EVENTS = { SEGMENTATION_UPDATED: 'event::segmentation_updated', SEGMENTATION_ADDED: 'event::segmentation_added', SEGMENTATION_REMOVED: 'event::segmentation_removed', - SEGMENTATIONS_CLEARED: 'event::segmentation_cleared', SEGMENTATION_VISIBILITY_CHANGED: 'event::SEGMENTATION_VISIBILITY_CHANGED', }; @@ -43,9 +42,15 @@ class SegmentationService { * @param id If of the segmentation * @return segmentation instance */ - getSegmentation(id) {} + getSegmentation(id) { + return this.segmentations[id]; + } - addOrUpdateSegmentation(id, segmentationSchema) { + addOrUpdateSegmentation( + id, + segmentationSchema, + notYetUpdatedAtSource = false + ) { const segmentation = this.segmentations[id]; if (segmentation) { @@ -54,6 +59,7 @@ class SegmentationService { this._broadcastEvent(this.EVENTS.SEGMENTATION_UPDATED, { id, segmentation, + notYetUpdatedAtSource: notYetUpdatedAtSource, }); return; @@ -61,6 +67,7 @@ class SegmentationService { this.segmentations[id] = { ...segmentationSchema, + visible: true, }; this._broadcastEvent(this.EVENTS.SEGMENTATION_ADDED, { @@ -76,43 +83,43 @@ class SegmentationService { * @param ids segmentation ids */ toggleSegmentationsVisibility(ids) { - // ids.forEach(id => { - // const segmentation = this.segmentations[id]; - // if (!segmentation) { - // throw new Error(`Segmentation with id ${id} not found.`); - // } - // segmentation.visible = !segmentation.visible; - // this._broadcastEvent(this.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, { - // segmentation, - // }); - // }); + ids.forEach(id => { + const segmentation = this.segmentations[id]; + if (!segmentation) { + throw new Error(`Segmentation with id ${id} not found.`); + } + segmentation.visible = !segmentation.visible; + this._broadcastEvent(this.EVENTS.SEGMENTATION_VISIBILITY_CHANGED, { + segmentation, + }); + }); } /** * Removes a segmentation and broadcasts the removed event. * * @param {string} id The segmentation id - * @param {segmentationsource} source The segmentation source instance - * @return {string} The removed segmentation id */ - remove(id, source) { - // if (!id || !this.segmentations[id]) { - // log.warn(`No id provided, or unable to find segmentation by id.`); - // return; - // } - // delete this.segmentations[id]; - // this._broadcastEvent(this.EVENTS.SEGMENTATION_REMOVED, { - // source, - // segmentationId: id, // This is weird :shrug: - // }); + remove(id) { + if (!id || !this.segmentations[id]) { + console.warn(`No id provided, or unable to find segmentation by id.`); + return; + } + delete this.segmentations[id]; + this._broadcastEvent(this.EVENTS.SEGMENTATION_REMOVED, { + id, + }); } /** * Clear all segmentations and broadcasts cleared event. */ clear() { + Object.keys(this.segmentations).forEach(id => { + this.remove(id); + }); + this.segmentations = {}; - this._broadcastEvent(this.EVENTS.SEGMENTATIONS_CLEARED); } /** From def346e8c9aa09f6c036be296a57539553f7fd2d Mon Sep 17 00:00:00 2001 From: Alireza Date: Sat, 28 May 2022 22:05:27 -0400 Subject: [PATCH 10/25] feat: add remove segmentation --- .../src/initSegmentationService.js | 43 ++++++++++++--- .../Panels/PanelROIThresholdSegmentation.tsx | 54 +++++++++++-------- extensions/tmtv/src/commandsModule.js | 6 +++ 3 files changed, 74 insertions(+), 29 deletions(-) diff --git a/extensions/cornerstone-3d/src/initSegmentationService.js b/extensions/cornerstone-3d/src/initSegmentationService.js index 98d69b63aca..bbf5d924288 100644 --- a/extensions/cornerstone-3d/src/initSegmentationService.js +++ b/extensions/cornerstone-3d/src/initSegmentationService.js @@ -1,4 +1,4 @@ -import { eventTarget, Enums, triggerEvent } from '@cornerstonejs/core'; +import { eventTarget, cache, triggerEvent } from '@cornerstonejs/core'; import * as csTools from '@cornerstonejs/tools'; import { Enums as csToolsEnums } from '@cornerstonejs/tools'; import Labelmap from './utils/segmentationServiceMappings/Labelmap'; @@ -34,6 +34,10 @@ function connectToolsToSegmentationService( segmentationId ); + if (!segmentationState) { + return; + } + if ( !Object.keys(segmentationState.representationData).includes( csToolsEnums.SegmentationRepresentations.Labelmap @@ -69,18 +73,43 @@ function connectSegmentationServiceToTools( } = SegmentationService.EVENTS; SegmentationService.subscribe(SEGMENTATION_REMOVED, ({ id }) => { + // Todo: This should be from the configuration const removeFromCache = true; const sourceSegState = csTools.segmentation.state.getSegmentation(id); - debugger; + if (!sourceSegState) { + return; + } + + const toolGroupIds = csTools.segmentation.state.getToolGroupsWithSegmentation( + id + ); + + toolGroupIds.forEach(toolGroupId => { + const segmentationRepresentations = csTools.segmentation.state.getSegmentationRepresentations( + toolGroupId + ); + + const UIDsToRemove = []; + segmentationRepresentations.forEach(representation => { + if (representation.segmentationId === id) { + UIDsToRemove.push(representation.segmentationRepresentationUID); + } + }); - // SegmentationModule.removeLabelmapForAllElements( - // segmentationId, - // removeFromCache - // ); + csTools.segmentation.removeSegmentationsFromToolGroup( + toolGroupId, + UIDsToRemove + ); + }); + + // cleanup the segmentation state too + csTools.segmentation.state.removeSegmentation(id); - // Cornerstone3DViewportService.getRenderingEngine().render(); + if (removeFromCache) { + cache.removeVolumeLoadObject(id); + } }); SegmentationService.subscribe( diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index 8298dbbdccb..a00b0596e4e 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -25,7 +25,7 @@ export default function PanelRoiThresholdSegmentation({ const { t } = useTranslation('PanelSUV'); const [showConfig, setShowConfig] = useState(false); const [labelmapLoading, setLabelmapLoading] = useState(false); - const [selectedSegmentationId, setSelectedSegmentationId] = useState(''); + const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); const [segmentations, setSegmentations] = useState(() => SegmentationService.getSegmentations() ); @@ -36,7 +36,7 @@ export default function PanelRoiThresholdSegmentation({ weight: 0.41, }); - const [tmtvValue, setTmtvValue] = useState(0); + const [tmtvValue, setTmtvValue] = useState(null); const runCommand = useCallback( (commandName, commandOptions = {}) => { @@ -45,6 +45,14 @@ export default function PanelRoiThresholdSegmentation({ [commandsManager] ); + const handleTMTVCalculation = useCallback(() => { + const tmtv = runCommand('calculateTMTV', { segmentations }); + + if (tmtv !== undefined) { + setTmtvValue(tmtv.toFixed(2)); + } + }, [segmentations, runCommand]); + const handleROIThresholding = useCallback(() => { const labelmap = runCommand('thresholdSegmentationByRectangleROITool', { segmentationId: selectedSegmentationId, @@ -78,7 +86,6 @@ export default function PanelRoiThresholdSegmentation({ notYetUpdatedAtSource ); - // Update TMTV Value handleTMTVCalculation(); }, [selectedSegmentationId, config]); @@ -96,10 +103,6 @@ export default function PanelRoiThresholdSegmentation({ const { unsubscribe } = SegmentationService.subscribe(evt, () => { const segmentations = SegmentationService.getSegmentations(); setSegmentations(segmentations); - - if (!selectedSegmentationId) { - setSelectedSegmentationId(segmentations[0].id); - } }); subscriptions.push(unsubscribe); }); @@ -128,11 +131,16 @@ export default function PanelRoiThresholdSegmentation({ }; }, [SegmentationService]); - const handleTMTVCalculation = () => { - const segmentations = SegmentationService.getSegmentations(); - const tmtv = runCommand('calculateTMTV', { segmentations }); - setTmtvValue(tmtv.toFixed(4)); - }; + /** + * Whenever the segmentations change, update the TMTV calculations + */ + useEffect(() => { + if (!selectedSegmentationId && segmentations.length > 0) { + setSelectedSegmentationId(segmentations[0].id); + } + + handleTMTVCalculation(); + }, [segmentations, selectedSegmentationId]); const handleExportClick = () => { // General Segmentation information @@ -182,8 +190,9 @@ export default function PanelRoiThresholdSegmentation({ color="primary" onClick={() => { setLabelmapLoading(true); - runCommand('createNewLabelmapFromPT').then(() => { + runCommand('createNewLabelmapFromPT').then(segmentationId => { setLabelmapLoading(false); + setSelectedSegmentationId(segmentationId); }); }} className="text-xs text-white border-b border-transparent " @@ -218,14 +227,7 @@ export default function PanelRoiThresholdSegmentation({ {labelmapLoading ? (
Loading Segmentation Panel ...
) : null} - {tmtvValue !== undefined ? ( -
- - {'TMTV:'} - -
{`${tmtvValue} mL`}
-
- ) : null} + {/* show segmentation table */}
{segmentations?.length ? ( @@ -247,8 +249,8 @@ export default function PanelRoiThresholdSegmentation({ SegmentationService.toggleSegmentationsVisibility(ids); }} onDelete={id => { + debugger; SegmentationService.remove(id); - handleTMTVCalculation(); }} onEdit={id => { onSegmentationItemEditHandler({ @@ -260,6 +262,14 @@ export default function PanelRoiThresholdSegmentation({ /> ) : null}
+ {tmtvValue !== null ? ( +
+ + {'TMTV:'} + +
{`${tmtvValue} mL`}
+
+ ) : null} {segmentations?.length ? (
diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index 1db611902dc..2f3b947d659 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -193,6 +193,8 @@ const commandsModule = ({ { segmentationId, toolGroupId: toolGroupId, options } ); } + + return segmentationId; }, setSegmentationActiveForToolGroups: ({ segmentationId }) => { const toolGroupIds = _getMatchedViewportsToolGroupIds(); @@ -476,6 +478,10 @@ const commandsModule = ({ cs.cache.getVolume(segmentation.id) ); + if (!labelmaps.length) { + return; + } + return calculateTMTV(labelmaps); }, // getTotalLesionGlycolysis: ({ segmentations }) => { From 56e9bc54608f779dd4a4a8487bff73a5ebad2a67 Mon Sep 17 00:00:00 2001 From: Alireza Date: Sun, 29 May 2022 10:01:31 -0400 Subject: [PATCH 11/25] feat: add csv export --- .../src/Viewport/Overlays/ViewportOverlay.tsx | 7 +- .../cornerstone-3d/src/commandsModule.js | 98 ++++++++++++++ .../Panels/PanelROIThresholdSegmentation.tsx | 32 ++--- extensions/tmtv/src/commandsModule.js | 123 +++++++++++------- 4 files changed, 190 insertions(+), 70 deletions(-) diff --git a/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx b/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx index e2a599017a6..1f6a10eb3e5 100644 --- a/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx +++ b/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx @@ -42,6 +42,11 @@ function CornerstoneViewportOverlay({ upper ); + // Don't set VOI if already set + if (voi.windowCenter !== null || voi.windowWidth !== null) { + return; + } + setVOI({ windowCenter, windowWidth }); }; @@ -50,7 +55,7 @@ function CornerstoneViewportOverlay({ return () => { element.removeEventListener(Enums.Events.VOI_MODIFIED, updateVOI); }; - }, [viewportIndex, viewportData]); + }, [viewportIndex, viewportData, voi, element]); /** * Updating the scale when the viewport changes its zoom diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 5f3bdf8d225..b8e8940616c 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -1,6 +1,7 @@ import * as cornerstone from '@cornerstonejs/core'; import * as cornerstoneTools from '@cornerstonejs/tools'; import CornerstoneViewportDownloadForm from './utils/CornerstoneViewportDownloadForm'; +import OHIF from '@ohif/core'; import { Enums } from '@cornerstonejs/tools'; @@ -15,6 +16,7 @@ const commandsModule = ({ servicesManager }) => { ToolBarService, Cornerstone3DViewportService, UIDialogService, + SegmentationService, } = servicesManager.services; function _getActiveViewportEnabledElement() { @@ -371,6 +373,92 @@ const commandsModule = ({ servicesManager }) => { ] ); }, + getLabelmapVolumes: ({ segmentations }) => { + if (!segmentations || !segmentations.length) { + segmentations = SegmentationService.getSegmentations(); + } + + const labelmapVolumes = segmentations.map(segmentation => { + return cornerstone.cache.getVolume(segmentation.id); + }); + + return labelmapVolumes; + }, + getSegmentationReport: ({ segmentations }) => { + if (!segmentations || !segmentations.length) { + segmentations = SegmentationService.getSegmentations(); + } + + let report = {}; + + for (const segmentation of segmentations) { + const { id, label, data } = segmentation; + + const segReport = { id, label }; + + if (!data) { + report[id] = segReport; + continue; + } + + Object.keys(data).forEach(key => { + if (typeof data[key] !== 'object') { + segReport[key] = data[key]; + } else { + Object.keys(data[key]).forEach(subKey => { + const newKey = `${key}_${subKey}`; + segReport[newKey] = data[key][subKey]; + }); + } + }); + + const labelmapVolume = cornerstone.cache.getVolume(id); + + if (!labelmapVolume) { + report[id] = segReport; + continue; + } + + const referencedVolumeId = labelmapVolume.referencedVolumeId; + segReport.referencedVolumeId = referencedVolumeId; + + const referencedVolume = cornerstone.cache.getVolume( + referencedVolumeId + ); + + if (!referencedVolume) { + report[id] = segReport; + continue; + } + + if (!referencedVolume.imageIds || !referencedVolume.imageIds.length) { + report[id] = segReport; + continue; + } + + const firstImageId = referencedVolume.imageIds[0]; + const instance = OHIF.classes.MetadataProvider.get( + 'instance', + firstImageId + ); + + if (!instance) { + report[id] = segReport; + continue; + } + + report[id] = { + ...segReport, + PatientID: instance.PatientID, + PatientName: instance.PatientName.Alphabetic, + StudyInstanceUID: instance.StudyInstanceUID, + SeriesInstanceUID: instance.SeriesInstanceUID, + StudyDate: instance.StudyDate, + }; + } + + return report; + }, }; const definitions = { @@ -474,6 +562,16 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + getSegmentationReport: { + commandFn: actions.getSegmentationReport, + storeContexts: [], + options: {}, + }, + getLabelmapVolumes: { + commandFn: actions.getLabelmapVolumes, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index a00b0596e4e..8a47dca72c6 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -142,22 +142,6 @@ export default function PanelRoiThresholdSegmentation({ handleTMTVCalculation(); }, [segmentations, selectedSegmentationId]); - const handleExportClick = () => { - // General Segmentation information - const segReport = runCommand('getSegmentationReport'); - const tlg = runCommand('getTotalLesionGlycolysis', { - segmentations: SegmentationService.getSegmentations(), - }); - - const additionalReportRows = [ - { key: 'Total Metabolic Tumor Volume', value: { tmtv: tmtvValue } }, - { key: 'Total Lesion Glycolysis', value: { tlg: tlg.toFixed(4) } }, - { key: 'Threshold Configuration', value: { ...config } }, - ]; - - createAndDownloadTMTVReport(segReport, additionalReportRows); - }; - const handleRTExport = () => { // get all the RoiThresholdManual Rois const toolStates = getDefaultToolStateManager(); @@ -249,7 +233,6 @@ export default function PanelRoiThresholdSegmentation({ SegmentationService.toggleSegmentationsVisibility(ids); }} onDelete={id => { - debugger; SegmentationService.remove(id); }} onEdit={id => { @@ -275,13 +258,24 @@ export default function PanelRoiThresholdSegmentation({ - diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index 2f3b947d659..652f997db2a 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -9,6 +9,7 @@ import { Enums, annotation } from '@cornerstonejs/tools'; import getThresholdValues from './utils/getThresholdValue'; import calculateSuvPeak from './utils/calculateSUVPeak'; import calculateTMTV from './utils/calculateTMTV'; +import createAndDownloadTMTVReport from './utils/createAndDownloadTMTVReport'; const metadataProvider = classes.MetadataProvider; const RECTANGLE_ROI_THRESHOLD_MANUAL = 'RectangleROIStartEndThreshold'; @@ -210,7 +211,6 @@ const commandsModule = ({ // Todo: this finds the first segmentation representation that matches the segmentationId // If there are two labelmap representations from the same segmentation, this will not work - const representation = segmentationRepresentations.find( representation => representation.segmentationId === segmentationId ); @@ -306,7 +306,6 @@ const commandsModule = ({ ); }); }, - // setPTColormap: ({ toolGroupUID, colormap }) => { // const toolGroup = ToolGroupManager.getToolGroupById(toolGroupUID); @@ -474,9 +473,9 @@ const commandsModule = ({ }; }, calculateTMTV: ({ segmentations }) => { - const labelmaps = segmentations.map(segmentation => - cs.cache.getVolume(segmentation.id) - ); + const labelmaps = commandsManager.runCommand('getLabelmapVolumes', { + segmentations, + }); if (!labelmaps.length) { return; @@ -484,60 +483,79 @@ const commandsModule = ({ return calculateTMTV(labelmaps); }, - // getTotalLesionGlycolysis: ({ segmentations }) => { - // const labelmapVolumes = segmentations.map(segmentation => { - // return cs.cache.getVolume(segmentation.id); - // }); + exportTMTVReportCSV: ({ segmentations, tmtv, config }) => { + const segReport = commandsManager.runCommand('getSegmentationReport', { + segmentations, + }); - // // merge labelmap will through an error if labels maps are not the same size - // // or same direction or .... - // const mergedLabelmap = csTools.Utils.segmentation.createMergedLabelmap( - // labelmapVolumes - // ); + const tlg = actions.getTotalLesionGlycolysis({ segmentations }); + const additionalReportRows = [ + { key: 'Total Metabolic Tumor Volume', value: { tmtv } }, + { key: 'Total Lesion Glycolysis', value: { tlg: tlg.toFixed(4) } }, + { key: 'Threshold Configuration', value: { ...config } }, + ]; - // // grabbing the first labelmap referenceVolume since it will be the same for all - // const { referencedVolumeId, spacing } = labelmapVolumes[0]; + createAndDownloadTMTVReport(segReport, additionalReportRows); + }, + getTotalLesionGlycolysis: ({ segmentations }) => { + const labelmapVolumes = commandsManager.runCommand('getLabelmapVolumes', { + segmentations, + }); - // if (!referencedVolumeId) { - // throw new Error('No Reference volume found'); - // } + let mergedLabelmap; + // merge labelmap will through an error if labels maps are not the same size + // or same direction or .... + try { + mergedLabelmap = csTools.utilities.segmentation.createMergedLabelmapForIndex( + labelmapVolumes + ); + } catch (e) { + console.error('commandsModule::getTotalLesionGlycolysis', e); + return; + } + + // grabbing the first labelmap referenceVolume since it will be the same for all + const { referencedVolumeId, spacing } = labelmapVolumes[0]; - // const ptVolume = cs.getVolume(referencedVolumeId); + if (!referencedVolumeId) { + console.error( + 'commandsModule::getTotalLesionGlycolysis:No referencedVolumeId found' + ); + } - // const mergedLabelData = mergedLabelmap.scalarData; + const ptVolume = cs.cache.getVolume(referencedVolumeId); + const mergedLabelData = mergedLabelmap.scalarData; - // let Suvs = 0; - // let totalLesionVoxelCount = 0; - // for (let i = 0; i < mergedLabelData.length; i++) { - // // if not backgournd - // if (mergedLabelData[i] !== 0) { - // const ptSuv = ptVolume.scalarData[i]; - // Suvs += ptSuv; - // totalLesionVoxelCount += 1; - // } - // } + if (mergedLabelData.length !== ptVolume.scalarData.length) { + console.error( + 'commandsModule::getTotalLesionGlycolysis:Labelmap and ptVolume are not the same size' + ); + } - // // Average SUV for the merged labelmap - // const averageSuv = Suvs / totalLesionVoxelCount; - - // // total Lesion Glycolysis [suv * ml] - // return ( - // averageSuv * - // totalLesionVoxelCount * - // spacing[0] * - // spacing[1] * - // spacing[2] * - // 1e-3 - // ); - // }, - getLabelmapVolumes: () => { - const segmentations = SegmentationService.getSegmentations(); - const labelmapVolumes = segmentations.map(segmentation => { - return cs.cache.getVolume(segmentation.id); - }); + let suv = 0; + let totalLesionVoxelCount = 0; + for (let i = 0; i < mergedLabelData.length; i++) { + // if not background + if (mergedLabelData[i] !== 0) { + suv += ptVolume.scalarData[i]; + totalLesionVoxelCount += 1; + } + } - return labelmapVolumes; + // Average SUV for the merged labelmap + const averageSuv = suv / totalLesionVoxelCount; + + // total Lesion Glycolysis [suv * ml] + return ( + averageSuv * + totalLesionVoxelCount * + spacing[0] * + spacing[1] * + spacing[2] * + 1e-3 + ); }, + setStartSliceForROIThresholdTool: () => { const { viewport } = _getActiveViewportsEnabledElement(); const { focalPoint, viewPlaneNormal } = viewport.getCamera(); @@ -666,6 +684,11 @@ const commandsModule = ({ storeContexts: [], options: {}, }, + exportTMTVReportCSV: { + commandFn: actions.exportTMTVReportCSV, + storeContexts: [], + options: {}, + }, }; return { From 96d38db70f88b0d41efe4a241749a40e804f9216 Mon Sep 17 00:00:00 2001 From: Alireza Date: Sun, 29 May 2022 10:29:32 -0400 Subject: [PATCH 12/25] feat: add RT export for annotations in tmtv mode --- .../cornerstone-3d/src/commandsModule.js | 9 + .../RTStructureSet/RTSSReport.js | 259 ++++++++++++++++++ .../RTStructureSet/dicomRTAnnotationExport.js | 15 + .../RTStructureSet/index.js | 3 + .../measurements/AnnotationToPointData.js | 58 ++++ .../RectangleROIStartEndThreshold.js | 56 ++++ .../Panels/PanelROIThresholdSegmentation.tsx | 28 +- extensions/tmtv/src/commandsModule.js | 36 ++- 8 files changed, 429 insertions(+), 35 deletions(-) create mode 100644 extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js create mode 100644 extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js create mode 100644 extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js create mode 100644 extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js create mode 100644 extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index b8e8940616c..34156d4c250 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -7,6 +7,7 @@ import { Enums } from '@cornerstonejs/tools'; import { getEnabledElement } from './state'; import callInputDialog from './utils/callInputDialog'; +import dicomRTAnnotationExport from './utils/dicomRTAnnotationExport/RTStructureSet'; const commandsModule = ({ servicesManager }) => { const { @@ -459,6 +460,9 @@ const commandsModule = ({ servicesManager }) => { return report; }, + exportRTReportForAnnotations: ({ annotations }) => { + dicomRTAnnotationExport(annotations); + }, }; const definitions = { @@ -572,6 +576,11 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + exportRTReportForAnnotations: { + commandFn: actions.exportRTReportForAnnotations, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js new file mode 100644 index 00000000000..734114ad9b3 --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js @@ -0,0 +1,259 @@ +import AnnotationToPointData from './measurements/AnnotationToPointData'; +import dcmjs from 'dcmjs'; +import { DicomMetadataStore } from '@ohif/core'; + +const { DicomMetaDictionary } = dcmjs.data; + +export default class RTSSReport { + constructor() {} + + /** + * Convert Cornerstone tool annotation data to RTSSReport report object + * containing the dcmjs dicom dataset + * @param annotations Array of Cornerstone tool annotation data + * @param metadataProvider Metadata provider + * @param options report generation options + * @returns Report object containing the dataset + */ + static generateReport(annotations, metadataProvider, options) { + let dataset = initializeDataset(annotations, metadataProvider); + + annotations.forEach((annotation, index) => { + const ContourSequence = AnnotationToPointData.convert( + annotation, + index, + metadataProvider, + options + ); + + dataset.StructureSetROISequence.push( + getStructureSetModule(annotation, index, metadataProvider) + ); + + dataset.ROIContourSequence.push(ContourSequence); + dataset.RTROIObservationsSequence.push( + getRTROIObservationsSequence(annotation, index, metadataProvider) + ); + + // ReferencedSeriesSequence + // Todo: handle more than one series + dataset.ReferencedSeriesSequence = getReferencedSeriesSequence( + annotation, + index, + metadataProvider + ); + + // ReferencedFrameOfReferenceSequence + dataset.ReferencedFrameOfReferenceSequence = getReferencedFrameOfReferenceSequence( + annotation, + metadataProvider, + dataset + ); + }); + + const fileMetaInformationVersionArray = new Uint8Array(2); + fileMetaInformationVersionArray[1] = 1; + + const _meta = { + FileMetaInformationVersion: { + Value: [fileMetaInformationVersionArray.buffer], + vr: 'OB', + }, + TransferSyntaxUID: { + Value: ['1.2.840.10008.1.2.1'], + vr: 'UI', + }, + ImplementationClassUID: { + Value: [DicomMetaDictionary.uid()], // TODO: could be git hash or other valid id + vr: 'UI', + }, + ImplementationVersionName: { + Value: ['dcmjs'], + vr: 'SH', + }, + }; + + dataset._meta = _meta; + + return dataset; + } + + /** + * Generate Cornerstone tool state from dataset + * @param {object} dataset dataset + * @param {object} hooks + * @param {function} hooks.getToolClass Function to map dataset to a tool class + * @returns + */ + static generateToolState(dataset, hooks = {}) { + // Todo + console.warn('RTSSReport.generateToolState not implemented'); + } +} + +function initializeDataset(annotations, metadataProvider) { + const rtSOPInstanceUID = DicomMetaDictionary.uid(); + + // get the first annotation data + const { + referencedImageId: imageId, + FrameOfReferenceUID, + } = annotations[0].metadata; + + const { studyInstanceUID } = metadataProvider.get( + 'generalSeriesModule', + imageId + ); + + const patientModule = getPatientModule(imageId, metadataProvider); + const rtSeriesModule = getRTSeriesModule(imageId, metadataProvider); + + return { + StructureSetROISequence: [], + ROIContourSequence: [], + RTROIObservationsSequence: [], + ReferencedSeriesSequence: [], + ReferencedFrameOfReferenceSequence: [], + ...patientModule, + ...rtSeriesModule, + StudyInstanceUID: studyInstanceUID, + SOPClassUID: '1.2.840.10008.5.1.4.1.1.481.3', // RT Structure Set Storage + SOPInstanceUID: rtSOPInstanceUID, + Manufacturer: 'dcmjs', + Modality: 'RTSTRUCT', + FrameOfReferenceUID, + PositionReferenceIndicator: 'Todo', + StructureSetLabel: 'Todo: label', + StructureSetName: 'Todo: name', + ReferringPhysicianName: 'Todo: name', + OperatorsName: 'Todo: name', + StructureSetDate: DicomMetaDictionary.date(), + StructureSetTime: DicomMetaDictionary.time(), + }; +} + +function getPatientModule(imageId, metadataProvider) { + const generalSeriesModule = metadataProvider.get( + 'generalSeriesModule', + imageId + ); + const generalStudyModule = metadataProvider.get( + 'generalStudyModule', + imageId + ); + const patientStudyModule = metadataProvider.get( + 'patientStudyModule', + imageId + ); + const patientModule = metadataProvider.get('patientModule', imageId); + const patientDemographicModule = metadataProvider.get( + 'patientDemographicModule', + imageId + ); + + return { + Modality: generalSeriesModule.modality, + PatientID: patientModule.patientId, + PatientName: patientModule.patientName, + PatientBirthDate: '', + PatientAge: patientStudyModule.patientAge, + PatientSex: patientDemographicModule.patientSex, + PatientWeight: patientStudyModule.patientWeight, + StudyDate: generalStudyModule.studyDate, + StudyTime: generalStudyModule.studyTime, + StudyID: 'ToDo', + AccessionNumber: generalStudyModule.accessionNumber, + }; +} + +function getReferencedFrameOfReferenceSequence( + toolData, + metadataProvider, + dataset +) { + const { referencedImageId: imageId, FrameOfReferenceUID } = toolData.metadata; + const instance = metadataProvider.get('instance', imageId); + const { SeriesInstanceUID } = instance; + + const { ReferencedSeriesSequence } = dataset; + + return [ + { + FrameOfReferenceUID, + RTReferencedStudySequence: [ + { + ReferencedSOPClassUID: dataset.SOPClassUID, + ReferencedSOPInstanceUID: dataset.SOPInstanceUID, + RTReferencedSeriesSequence: [ + { + SeriesInstanceUID, + ContourImageSequence: [ + ...ReferencedSeriesSequence[0].ReferencedInstanceSequence, + ], + }, + ], + }, + ], + }, + ]; +} + +function getReferencedSeriesSequence(toolData, index, metadataProvider) { + // grab imageId from toolData + const { referencedImageId: imageId } = toolData.metadata; + const instance = metadataProvider.get('instance', imageId); + const { SeriesInstanceUID, StudyInstanceUID } = instance; + + const ReferencedSeriesSequence = []; + if (SeriesInstanceUID) { + const series = DicomMetadataStore.getSeries( + StudyInstanceUID, + SeriesInstanceUID + ); + + const ReferencedSeries = { + SeriesInstanceUID, + ReferencedInstanceSequence: [], + }; + + series.instances.forEach(instance => { + const { SOPInstanceUID, SOPClassUID } = instance; + ReferencedSeries.ReferencedInstanceSequence.push({ + ReferencedSOPClassUID: SOPClassUID, + ReferencedSOPInstanceUID: SOPInstanceUID, + }); + }); + + ReferencedSeriesSequence.push(ReferencedSeries); + } + + return ReferencedSeriesSequence; +} + +function getRTSeriesModule(imageId, metadataProvider) { + return { + SeriesInstanceUID: DicomMetaDictionary.uid(), // generate a new series instance uid + SeriesNumber: '99', // Todo:: what should be the series number? + }; +} + +function getStructureSetModule(toolData, index, metadataProvider) { + const { FrameOfReferenceUID } = toolData.metadata; + + return { + ROINumber: index + 1, + ROIName: `Todo: name ${index + 1}`, + ROIDescription: `Todo: description ${index + 1}`, + ROIGenerationAlgorithm: 'Todo: algorithm', + ReferencedFrameOfReferenceUID: FrameOfReferenceUID, + }; +} + +function getRTROIObservationsSequence(toolData, index, metadataProvider) { + return { + ObservationNumber: index + 1, + ReferencedROINumber: index + 1, + RTROIInterpretedType: 'Todo: type', + ROIInterpreter: 'Todo: interpreter', + }; +} diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js new file mode 100644 index 00000000000..999b37addaf --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js @@ -0,0 +1,15 @@ +import RTSSReport from './RTSSReport'; +import dcmjs from 'dcmjs'; +import { classes } from '@ohif/core'; + +const { datasetToBlob } = dcmjs.data; +const metadataProvider = classes.MetadataProvider; + +export default function dicomRTAnnotationExport(annotations) { + const dataset = RTSSReport.generateReport(annotations, metadataProvider); + const reportBlob = datasetToBlob(dataset); + + //Create a URL for the binary. + var objectUrl = URL.createObjectURL(reportBlob); + window.location.assign(objectUrl); +} diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js new file mode 100644 index 00000000000..7a915da2ce9 --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js @@ -0,0 +1,3 @@ +import dicomRTAnnotationExport from './dicomRTAnnotationExport'; + +export default dicomRTAnnotationExport; diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js new file mode 100644 index 00000000000..f74fdc72ae7 --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js @@ -0,0 +1,58 @@ +import RectangleROIStartEndThreshold from './RectangleROIStartEndThreshold'; + +function validateAnnotation(annotation) { + if (!annotation?.data) { + throw new Error('Tool data is empty'); + } + + if (!annotation.metadata || annotation.metadata.referenceImageId) { + throw new Error('Tool data is not associated with any imageId'); + } +} + +class AnnotationToPointData { + constructor() {} + + static convert(annotation, index, metadataProvider) { + validateAnnotation(annotation); + + const { toolName } = annotation.metadata; + const toolClass = AnnotationToPointData.TOOL_NAMES[toolName]; + + if (!toolClass) { + throw new Error( + `Unknown tool type: ${toolName}, cannot convert to RTSSReport` + ); + } + + // Each toolData should become a list of contours, ContourSequence + // contains a list of contours with their pointData, their geometry + // type and their length. + const ContourSequence = toolClass.getContourSequence( + annotation, + metadataProvider + ); + + // Todo: random rgb color for now, options should be passed in + const color = [ + Math.floor(Math.random() * 255), + Math.floor(Math.random() * 255), + Math.floor(Math.random() * 255), + ]; + + return { + ReferencedROINumber: index + 1, + ROIDisplayColor: color, + ContourSequence, + }; + } + + static register(toolClass) { + AnnotationToPointData.TOOL_NAMES[toolClass.toolName] = toolClass; + } +} + +AnnotationToPointData.TOOL_NAMES = {}; +AnnotationToPointData.register(RectangleROIStartEndThreshold); + +export default AnnotationToPointData; diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js new file mode 100644 index 00000000000..803bef365d0 --- /dev/null +++ b/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js @@ -0,0 +1,56 @@ +// comment +class RectangleROIStartEndThreshold { + constructor() {} + + static getContourSequence(toolData, metadataProvider) { + const { data } = toolData; + const { projectionPoints, projectionPointsImageIds } = data.cachedStats; + + return projectionPoints.map((point, index) => { + const ContourData = getPointData(point); + const ContourImageSequence = getContourImageSequence( + projectionPointsImageIds[index], + metadataProvider + ); + + return { + NumberOfContourPoints: ContourData.length / 3, + ContourImageSequence, + ContourGeometricType: 'CLOSED_PLANAR', + ContourData, + }; + }); + } +} + +RectangleROIStartEndThreshold.toolName = 'RectangleROIStartEndThreshold'; + +function getPointData(points) { + // Since this is a closed contour, the order of the points is important. + // re-order the points to be in the correct order clockwise + // Spread to make sure Float32Arrays are converted to arrays + const orderedPoints = [ + ...points[0], + ...points[1], + ...points[3], + ...points[2], + ]; + const pointsArray = orderedPoints.flat(); + + // reduce the precision of the points to 2 decimal places + const pointsArrayWithPrecision = pointsArray.map(point => { + return point.toFixed(2); + }); + + return pointsArrayWithPrecision; +} + +function getContourImageSequence(imageId, metadataProvider) { + const sopCommon = metadataProvider.get('sopCommonModule', imageId); + + return { + ReferencedSOPClassUID: sopCommon.sopClassUID, + ReferencedSOPInstanceUID: sopCommon.sopInstanceUID, + }; +} +export default RectangleROIStartEndThreshold; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx index 8a47dca72c6..73035ed35c9 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx @@ -142,30 +142,6 @@ export default function PanelRoiThresholdSegmentation({ handleTMTVCalculation(); }, [segmentations, selectedSegmentationId]); - const handleRTExport = () => { - // get all the RoiThresholdManual Rois - const toolStates = getDefaultToolStateManager(); - - // iterate inside all the frameOfReferenceUIDs inside the toolState - let roiThresholdManualRois = []; - - const framesOfReference = toolStates.getFramesOfReference(); - framesOfReference.forEach(frameOfReferenceUID => { - const toolState = toolStates.get( - frameOfReferenceUID, - 'RectangleRoiStartEndThreshold' - ); - - if (toolState) { - roiThresholdManualRois = roiThresholdManualRois.concat(toolState); - } - }); - - runCommand('saveRTReport', { - toolState: roiThresholdManualRois, - }); - }; - return (
@@ -273,7 +249,9 @@ export default function PanelRoiThresholdSegmentation({ + + + + +
+ ) : null} + + ); +} + +export default ExportReports; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx similarity index 51% rename from extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx rename to extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx index 73035ed35c9..913339c0b76 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx @@ -1,26 +1,46 @@ -import React, { useEffect, useState, useCallback } from 'react'; +import React, { useEffect, useState, useCallback, useReducer } from 'react'; import PropTypes from 'prop-types'; -import { - Input, - SegmentationTable, - Select, - Button, - ButtonGroup, - Dialog, -} from '@ohif/ui'; +import { SegmentationTable, Button } from '@ohif/ui'; import { useTranslation } from 'react-i18next'; -import createAndDownloadTMTVReport from '../utils/createAndDownloadTMTVReport'; +import segmentationEditHandler from './segmentationEditHandler'; +import ExportReports from './ExportReports'; +import ROIThresholdConfiguration, { + ROI_STAT, +} from './ROIThresholdConfiguration'; -const options = [ - { value: 'roiStat', label: 'Percentage of Max Value', placeHolder: ['Max'] }, - { value: 'range', label: 'Range Threshold', placeHolder: ['Range'] }, -]; +const LOWER_THRESHOLD_DEFAULT = 0; +const UPPER_THRESHOLD_DEFAULT = 100; +const WEIGHT_DEFAULT = 0.41; +const DEFAULT_STRATEGY = ROI_STAT; + +function reducer(state, action) { + switch (action.type) { + case 'setStrategy': + return { + ...state, + strategy: action.strategy, + }; + case 'setThreshold': + return { + ...state, + lower: action.lower ? action.lower : state.lower, + upper: action.upper ? action.upper : state.upper, + }; + case 'setWeight': + return { + ...state, + weight: action.weight, + }; + default: + return state; + } +} export default function PanelRoiThresholdSegmentation({ servicesManager, commandsManager, }) { - const { SegmentationService, UIDialogService } = servicesManager.services; + const { SegmentationService } = servicesManager.services; const { t } = useTranslation('PanelSUV'); const [showConfig, setShowConfig] = useState(false); @@ -29,11 +49,12 @@ export default function PanelRoiThresholdSegmentation({ const [segmentations, setSegmentations] = useState(() => SegmentationService.getSegmentations() ); - const [config, setConfig] = useState({ - strategy: 'roiStat', - minValue: 0, - maxValue: 100, - weight: 0.41, + + const [config, dispatch] = useReducer(reducer, { + strategy: DEFAULT_STRATEGY, + lower: LOWER_THRESHOLD_DEFAULT, + upper: UPPER_THRESHOLD_DEFAULT, + weight: WEIGHT_DEFAULT, }); const [tmtvValue, setTmtvValue] = useState(null); @@ -64,7 +85,6 @@ export default function PanelRoiThresholdSegmentation({ const lesionGlyoclysisStats = lesionStats.volume * lesionStats.meanValue; // update segDetails with the suv peak for the active segmentation - const segmentation = SegmentationService.getSegmentation( selectedSegmentationId ); @@ -96,10 +116,9 @@ export default function PanelRoiThresholdSegmentation({ // ~~ Subscription const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; - const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; const subscriptions = []; - [added, updated, removed].forEach(evt => { + [added, updated].forEach(evt => { const { unsubscribe } = SegmentationService.subscribe(evt, () => { const segmentations = SegmentationService.getSegmentations(); setSegmentations(segmentations); @@ -114,6 +133,28 @@ export default function PanelRoiThresholdSegmentation({ }; }, []); + useEffect(() => { + const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; + + const { unsubscribe } = SegmentationService.subscribe(removed, () => { + const segmentations = SegmentationService.getSegmentations(); + setSegmentations(segmentations); + + if (segmentations.length > 0) { + setSelectedSegmentationId(segmentations[0].id); + handleTMTVCalculation(); + return; + } + + setSelectedSegmentationId(null); + setTmtvValue(null); + }); + + return () => { + unsubscribe(); + }; + }, []); + /** * Toggle visibility of the segmentation */ @@ -180,7 +221,7 @@ export default function PanelRoiThresholdSegmentation({ {showConfig && ( )} @@ -212,10 +253,9 @@ export default function PanelRoiThresholdSegmentation({ SegmentationService.remove(id); }} onEdit={id => { - onSegmentationItemEditHandler({ + segmentationEditHandler({ id, - SegmentationService, - UIDialogService, + servicesManager, }); }} /> @@ -229,36 +269,12 @@ export default function PanelRoiThresholdSegmentation({
{`${tmtvValue} mL`}
) : null} - {segmentations?.length ? ( -
- - - - - - -
- ) : null} +
); @@ -281,176 +297,3 @@ PanelRoiThresholdSegmentation.propTypes = { }).isRequired, }).isRequired, }; - -function onSegmentationItemEditHandler({ - id, - SegmentationService, - UIDialogService, -}) { - const segmentation = SegmentationService.getSegmentation(id); - - const onSubmitHandler = ({ action, value }) => { - switch (action.id) { - case 'save': { - SegmentationService.addOrUpdateSegmentation( - id, - { - ...segmentation, - ...value, - }, - true - ); - } - } - UIDialogService.dismiss({ id: 'enter-annotation' }); - }; - - UIDialogService.create({ - id: 'enter-annotation', - centralize: true, - isDraggable: false, - showOverlay: true, - content: Dialog, - contentProps: { - title: 'Enter your annotation', - noCloseButton: true, - value: { label: segmentation.label || '' }, - body: ({ value, setValue }) => { - const onChangeHandler = event => { - event.persist(); - setValue(value => ({ ...value, label: event.target.value })); - }; - - const onKeyPressHandler = event => { - if (event.key === 'Enter') { - onSubmitHandler({ value, action: { id: 'save' } }); - } - }; - return ( -
- -
- ); - }, - actions: [ - // temp: swap button types until colors are updated - { id: 'cancel', text: 'Cancel', type: 'primary' }, - { id: 'save', text: 'Save', type: 'secondary' }, - ], - onSubmit: onSubmitHandler, - }, - }); -} - -function ROIThresholdConfiguration({ config, setConfig, runCommand }) { - const { t } = useTranslation('ROIThresholdConfiguration'); - - return ( -
-
-
- { - setConfig((prevConfig = {}) => { - return { - ...prevConfig, - weight: Number(e.target.value), - }; - }); - }} - /> - )} - {config.strategy !== 'roiStat' && ( -
- { - setConfig((prevConfig = {}) => { - return { - ...prevConfig, - minValue: Number(e.target.value), - }; - }); - }} - /> - { - setConfig((prevConfig = {}) => { - return { - ...prevConfig, - maxValue: Number(e.target.value), - }; - }); - }} - /> -
- )} -
- ); -} diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx new file mode 100644 index 00000000000..fce8377ce97 --- /dev/null +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx @@ -0,0 +1,116 @@ +import React from 'react'; +import { Input, Select, Button, ButtonGroup } from '@ohif/ui'; +import { useTranslation } from 'react-i18next'; + +export const ROI_STAT = 'roi_stat'; +const RANGE = 'range'; + +const options = [ + { value: ROI_STAT, label: 'Percentage of Max Value', placeHolder: ['Max'] }, + { value: RANGE, label: 'Range Threshold', placeHolder: ['Range'] }, +]; + +function ROIThresholdConfiguration({ config, dispatch, runCommand }) { + const { t } = useTranslation('ROIThresholdConfiguration'); + + return ( +
+
+
+ { + dispatch({ + type: 'setWeight', + payload: e.target.value, + }); + }} + /> + )} + {config.strategy !== ROI_STAT && ( +
+ { + dispatch({ + type: 'setThreshold', + payload: { + lower: e.target.value, + }, + }); + }} + /> + { + dispatch({ + type: 'setThreshold', + payload: { + upper: e.target.value, + }, + }); + }} + /> +
+ )} +
+ ); +} + +export default ROIThresholdConfiguration; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/index.ts b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/index.ts new file mode 100644 index 00000000000..22404ee9861 --- /dev/null +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/index.ts @@ -0,0 +1,3 @@ +import PanelROIThresholdSegmentation from './PanelROIThresholdSegmentation'; + +export default PanelROIThresholdSegmentation; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx new file mode 100644 index 00000000000..56aeb74efe1 --- /dev/null +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { Input, Dialog } from '@ohif/ui'; + +function segmentationItemEditHandler({ id, servicesManager }) { + const { SegmentationService, UIDialogService } = servicesManager.services; + + const segmentation = SegmentationService.getSegmentation(id); + + const onSubmitHandler = ({ action, value }) => { + switch (action.id) { + case 'save': { + SegmentationService.addOrUpdateSegmentation( + id, + { + ...segmentation, + ...value, + }, + true + ); + } + } + UIDialogService.dismiss({ id: 'enter-annotation' }); + }; + + UIDialogService.create({ + id: 'enter-annotation', + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Enter your annotation', + noCloseButton: true, + value: { label: segmentation.label || '' }, + body: ({ value, setValue }) => { + const onChangeHandler = event => { + event.persist(); + setValue(value => ({ ...value, label: event.target.value })); + }; + + const onKeyPressHandler = event => { + if (event.key === 'Enter') { + onSubmitHandler({ value, action: { id: 'save' } }); + } + }; + return ( +
+ +
+ ); + }, + actions: [ + // temp: swap button types until colors are updated + { id: 'cancel', text: 'Cancel', type: 'primary' }, + { id: 'save', text: 'Save', type: 'secondary' }, + ], + onSubmit: onSubmitHandler, + }, + }); +} + +export default segmentationItemEditHandler; diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index 18abc29cb13..3ca895d9b7b 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -1,4 +1,5 @@ import { vec3 } from 'gl-matrix'; +import OHIF from '@ohif/core'; import * as cs from '@cornerstonejs/core'; import * as csTools from '@cornerstonejs/tools'; import { classes } from '@ohif/core'; @@ -7,6 +8,8 @@ import calculateSuvPeak from './utils/calculateSUVPeak'; import calculateTMTV from './utils/calculateTMTV'; import createAndDownloadTMTVReport from './utils/createAndDownloadTMTVReport'; +import dicomRTAnnotationExport from './utils/dicomRTAnnotationExport/RTStructureSet'; + const metadataProvider = classes.MetadataProvider; const RECTANGLE_ROI_THRESHOLD_MANUAL = 'RectangleROIStartEndThreshold'; @@ -178,14 +181,13 @@ const commandsModule = ({ const toolGroupIds = _getMatchedViewportsToolGroupIds(); - const options = { - representationType: csTools.Enums.SegmentationRepresentations.Labelmap, - }; + const representationType = + csTools.Enums.SegmentationRepresentations.Labelmap; for (const toolGroupId of toolGroupIds) { await commandsManager.runCommand( 'addSegmentationRepresentationToToolGroup', - { segmentationId, toolGroupId: toolGroupId, options } + { segmentationId, toolGroupId: toolGroupId, representationType } ); } @@ -379,7 +381,7 @@ const commandsModule = ({ return calculateTMTV(labelmaps); }, exportTMTVReportCSV: ({ segmentations, tmtv, config }) => { - const segReport = commandsManager.runCommand('getSegmentationReport', { + const segReport = commandsManager.runCommand('getSegmentationCSVReport', { segmentations, }); @@ -527,6 +529,84 @@ const commandsModule = ({ annotations, }); }, + getSegmentationCSVReport: ({ segmentations }) => { + if (!segmentations || !segmentations.length) { + segmentations = SegmentationService.getSegmentations(); + } + + let report = {}; + + for (const segmentation of segmentations) { + const { id, label, data } = segmentation; + + const segReport = { id, label }; + + if (!data) { + report[id] = segReport; + continue; + } + + Object.keys(data).forEach(key => { + if (typeof data[key] !== 'object') { + segReport[key] = data[key]; + } else { + Object.keys(data[key]).forEach(subKey => { + const newKey = `${key}_${subKey}`; + segReport[newKey] = data[key][subKey]; + }); + } + }); + + const labelmapVolume = cornerstone.cache.getVolume(id); + + if (!labelmapVolume) { + report[id] = segReport; + continue; + } + + const referencedVolumeId = labelmapVolume.referencedVolumeId; + segReport.referencedVolumeId = referencedVolumeId; + + const referencedVolume = cornerstone.cache.getVolume( + referencedVolumeId + ); + + if (!referencedVolume) { + report[id] = segReport; + continue; + } + + if (!referencedVolume.imageIds || !referencedVolume.imageIds.length) { + report[id] = segReport; + continue; + } + + const firstImageId = referencedVolume.imageIds[0]; + const instance = OHIF.classes.MetadataProvider.get( + 'instance', + firstImageId + ); + + if (!instance) { + report[id] = segReport; + continue; + } + + report[id] = { + ...segReport, + PatientID: instance.PatientID, + PatientName: instance.PatientName.Alphabetic, + StudyInstanceUID: instance.StudyInstanceUID, + SeriesInstanceUID: instance.SeriesInstanceUID, + StudyDate: instance.StudyDate, + }; + } + + return report; + }, + exportRTReportForAnnotations: ({ annotations }) => { + dicomRTAnnotationExport(annotations); + }, }; const definitions = { @@ -600,6 +680,16 @@ const commandsModule = ({ storeContexts: [], options: {}, }, + getSegmentationCSVReport: { + commandFn: actions.getSegmentationCSVReport, + storeContexts: [], + options: {}, + }, + exportRTReportForAnnotations: { + commandFn: actions.exportRTReportForAnnotations, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js similarity index 94% rename from extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js rename to extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js index 734114ad9b3..a8be7de18b6 100644 --- a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js +++ b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/RTSSReport.js @@ -8,8 +8,11 @@ export default class RTSSReport { constructor() {} /** - * Convert Cornerstone tool annotation data to RTSSReport report object - * containing the dcmjs dicom dataset + * Convert handles to RTSSReport report object containing the dcmjs dicom dataset. + * + * Note: The tool data needs to be formatted in a specific way, and currently + * it is limited to the RectangleROIStartEndTool in the Cornerstone3D. + * * @param annotations Array of Cornerstone tool annotation data * @param metadataProvider Metadata provider * @param options report generation options @@ -122,11 +125,11 @@ function initializeDataset(annotations, metadataProvider) { Manufacturer: 'dcmjs', Modality: 'RTSTRUCT', FrameOfReferenceUID, - PositionReferenceIndicator: 'Todo', - StructureSetLabel: 'Todo: label', - StructureSetName: 'Todo: name', - ReferringPhysicianName: 'Todo: name', - OperatorsName: 'Todo: name', + PositionReferenceIndicator: '', + StructureSetLabel: '', + StructureSetName: '', + ReferringPhysicianName: '', + OperatorsName: '', StructureSetDate: DicomMetaDictionary.date(), StructureSetTime: DicomMetaDictionary.time(), }; diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js similarity index 100% rename from extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js rename to extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/dicomRTAnnotationExport.js diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js similarity index 100% rename from extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js rename to extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/index.js diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js similarity index 100% rename from extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js rename to extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/AnnotationToPointData.js diff --git a/extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js b/extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js similarity index 100% rename from extensions/cornerstone-3d/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js rename to extensions/tmtv/src/utils/dicomRTAnnotationExport/RTStructureSet/measurements/RectangleROIStartEndThreshold.js diff --git a/extensions/tmtv/src/utils/getThresholdValue.ts b/extensions/tmtv/src/utils/getThresholdValue.ts index 7b33ef4442a..d613dd1598d 100644 --- a/extensions/tmtv/src/utils/getThresholdValue.ts +++ b/extensions/tmtv/src/utils/getThresholdValue.ts @@ -4,11 +4,11 @@ function getThresholdValues( annotationUIDs, referencedVolume, config -): { lower: number; higher: number } { +): { lower: number; upper: number } { if (config.strategy === 'range') { return { lower: config.minValue, - higher: config.maxValue, + upper: config.maxValue, }; } @@ -28,7 +28,7 @@ function getThresholdValues( csTools.annotation.state.getAnnotation(annotationUID) ); - const boundsIJK = csTools.utilities.boundingBox.getBoundsIJKFromRectangleAnnotations( + const boundsIJK = csTools.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations( annotations, referencedVolume ); @@ -46,7 +46,7 @@ function getThresholdValues( return { lower: weight * value, - higher: +Infinity, + upper: +Infinity, }; } diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index dc30d414066..ec49627cfc6 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -250,8 +250,10 @@ const toolbarButtons = [ { commandName: 'displayNotification', commandOptions: { + title: 'RectangleROI Threshold Tip', text: 'RectangleROI Threshold tool should be used on PT Axial Viewport', + type: 'info', }, }, { From e02311c7381c18f55f69b626fa28852e78b4c797 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 13:06:30 -0400 Subject: [PATCH 16/25] apply review comments --- extensions/tmtv/src/init.js | 8 +++ extensions/tmtv/src/utils/calculateSUVPeak.ts | 7 ++- .../RectangleRoiStartEndThreshold.js | 5 +- .../measurementServiceMappingsFactory.js | 24 +------- .../utils/getSOPInstanceAttributes.js | 58 +------------------ modes/tmtv/src/initToolGroups.js | 2 +- 6 files changed, 20 insertions(+), 84 deletions(-) diff --git a/extensions/tmtv/src/init.js b/extensions/tmtv/src/init.js index 8458dad64db..8273f22238e 100644 --- a/extensions/tmtv/src/init.js +++ b/extensions/tmtv/src/init.js @@ -1,3 +1,5 @@ +import * as cornerstone3DTools from '@cornerstonejs/tools'; + import measurementServiceMappingsFactory from './utils/measurementServiceMappings/measurementServiceMappingsFactory'; const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; @@ -40,3 +42,9 @@ export default function init({ RectangleROIStartEndThreshold.toMeasurement ); } + +function initCornerstone3DTools(configuration = {}) { + cornerstone3DTools.addTool( + cornerstone3DTools.RectangleROIStartEndThresholdTool + ); +} diff --git a/extensions/tmtv/src/utils/calculateSUVPeak.ts b/extensions/tmtv/src/utils/calculateSUVPeak.ts index fc9eca6c743..982c4a18e4f 100644 --- a/extensions/tmtv/src/utils/calculateSUVPeak.ts +++ b/extensions/tmtv/src/utils/calculateSUVPeak.ts @@ -106,11 +106,14 @@ function calculateSuvPeak( const direction = labelmapImageData .getDirection() .slice(0, 3) as Types.Point3; + /** * 2. Find the bottom and top of the great circle for the second sphere (1cc sphere) - * diameter of 12mm = 1.2cm ~ = 1cc sphere + * V = (4/3)Ï€r3 */ - const diameter = 12; + const radius = Math.pow(1 / ((4 / 3) * Math.PI), 1 / 3) * 10; + const diameter = radius * 2; + const secondaryCircleWorld = vec3.create(); const bottomWorld = vec3.create(); const topWorld = vec3.create(); diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js index d51a69a4edb..9de0d31e502 100644 --- a/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js +++ b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleRoiStartEndThreshold.js @@ -13,8 +13,7 @@ const RectangleROIStartEndThreshold = { toMeasurement: ( csToolsEventDetail, DisplaySetService, - Cornerstone3DViewportService, - getValueTypeFromToolType + Cornerstone3DViewportService ) => { const { annotation, viewportId } = csToolsEventDetail; const { metadata, data, annotationUID } = annotation; @@ -67,7 +66,7 @@ const RectangleROIStartEndThreshold = { label: metadata.label, // displayText: displayText, data: data.cachedStats, - type: getValueTypeFromToolType(toolName), + type: 'RectangleROIStartEndThreshold', // getReport, }; }, diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js index 7980f9cc781..53d373d3cf8 100644 --- a/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js +++ b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js @@ -5,27 +5,6 @@ const measurementServiceMappingsFactory = ( DisplaySetService, Cornerstone3DViewportService ) => { - /** - * Maps measurement service format object to cornerstone annotation object. - * - * @param {Measurement} measurement The measurement instance - * @param {string} definition The source definition - * @return {Object} Cornerstone annotation data - */ - - const _getValueTypeFromToolType = toolType => { - const { SUV_PEAK } = MeasurementService.VALUE_TYPES; - - // TODO -> I get why this was attemped, but its not nearly flexible enough. - // A single measurement may have an ellipse + a bidirectional measurement, for instances. - // You can't define a bidirectional tool as a single type.. - const TOOL_TYPE_TO_VALUE_TYPE = { - ptSUVPeak: SUV_PEAK, - }; - - return TOOL_TYPE_TO_VALUE_TYPE[toolType]; - }; - return { RectangleROIStartEndThreshold: { toAnnotation: RectangleROIStartEndThreshold.toAnnotation, @@ -33,8 +12,7 @@ const measurementServiceMappingsFactory = ( RectangleROIStartEndThreshold.toMeasurement( csToolsAnnotation, DisplaySetService, - Cornerstone3DViewportService, - _getValueTypeFromToolType + Cornerstone3DViewportService ), matchingCriteria: [ { diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js b/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js index 0f47897bb20..4f412417822 100644 --- a/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js +++ b/extensions/tmtv/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js @@ -1,45 +1,13 @@ -import * as cornerstone from '@cornerstonejs/core'; +import { metaData } from '@cornerstonejs/core'; -/** - * It checks if the imageId is provided then it uses it to query - * the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID. - * If the imageId is not provided then it uses the sceneUID to get the viewports - * inside the scene and then it checks each viewport to find the one that has - * acquisition plane view, and uses the currentImageId of the viewport to - * query the metadata and get UIDs. - * @param {string} imageId The image id of the referenced image - * @param {string} sceneUID The scene UID of the measurement tool - * @returns - */ -export default function getSOPInstanceAttributes( - imageId, - Cornerstone3DViewportService, - viewportId -) { +export default function getSOPInstanceAttributes(imageId) { if (imageId) { return _getUIDFromImageID(imageId); } - - // Todo: implement for volume viewports and use the referencedSeriesInstanceUID - - // if no imageId => measurement is not in the acquisition plane - // const metadata = getUIDFromScene(Cornerstone3DViewportService, viewportId); - - // if (!metadata) { - // throw new Error('Not viewport with imageId found'); - // } - - // // Since the series and study UID is derived from another viewport in the - // // same scene, we cannot include the SOPInstanceUID - // return { - // SOPInstanceUID: null, - // SeriesInstanceUID: metadata.SeriesInstanceUID, - // StudyInstanceUID: metadata.StudyInstanceUID, - // }; } function _getUIDFromImageID(imageId) { - const instance = cornerstone.metaData.get('instance', imageId); + const instance = metaData.get('instance', imageId); return { SOPInstanceUID: instance.SOPInstanceUID, @@ -47,23 +15,3 @@ function _getUIDFromImageID(imageId) { StudyInstanceUID: instance.StudyInstanceUID, }; } - -// function getUIDFromScene(Cornerstone3DViewportService) { -// const renderingEngine = Cornerstone3DViewportService.getRenderingEngine(); -// const scene = renderingEngine.getScene(sceneUID); - -// const viewportUIDs = scene.getViewportIds(); - -// if (viewportUIDs.length === 0) { -// throw new Error('No viewport found in scene'); -// } - -// for (let i = 0; i < viewportUIDs.length; i++) { -// const vp = renderingEngine.getViewport(viewportUIDs[i]); -// const imageId = vp.getCurrentImageId(); - -// if (imageId) { -// return _getUIDFromImageID(imageId); -// } -// } -// } diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index e0d499293fb..1ae73946a20 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -74,7 +74,7 @@ function initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { active: tools.active, passive: [ ...tools.passive, - { toolName: toolNames.RectangleROIStartEndThreshold }, + { toolName: 'RectangleROIStartEndThreshold' }, ], enabled: tools.enabled, disabled: tools.disabled, From e30eca1c4d78ecbb09adba8c66d28bdc95c9b4b6 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 17:46:31 -0400 Subject: [PATCH 17/25] feat: add fusion color maps --- .../cornerstone-3d/src/commandsModule.js | 30 + extensions/cornerstone-3d/src/index.tsx | 2 + .../src/initCornerstoneTools.js | 2 - .../utils/colormap/transferFunctionHelpers.js | 16 +- extensions/tmtv/src/commandsModule.js | 40 + extensions/tmtv/src/index.tsx | 9 +- extensions/tmtv/src/init.js | 25 +- extensions/tmtv/src/utils/colormaps/index.js | 9272 +++++++++++++++++ modes/tmtv/src/index.js | 1 + modes/tmtv/src/toolbarButtons.js | 64 +- .../core/src/extensions/ExtensionManager.js | 1 + 11 files changed, 9442 insertions(+), 20 deletions(-) create mode 100644 extensions/tmtv/src/utils/colormaps/index.js diff --git a/extensions/cornerstone-3d/src/commandsModule.js b/extensions/cornerstone-3d/src/commandsModule.js index 57a8f624391..cd446147810 100644 --- a/extensions/cornerstone-3d/src/commandsModule.js +++ b/extensions/cornerstone-3d/src/commandsModule.js @@ -6,6 +6,7 @@ import { Enums } from '@cornerstonejs/tools'; import { getEnabledElement } from './state'; import callInputDialog from './utils/callInputDialog'; +import { setColormap } from './utils/colormap/transferFunctionHelpers'; const commandsModule = ({ servicesManager }) => { const { @@ -380,6 +381,30 @@ const commandsModule = ({ servicesManager }) => { return labelmapVolumes; }, + setViewportColormap: ({ + viewportIndex, + displaySetInstanceUID, + colormap, + immediate = false, + }) => { + const viewport = Cornerstone3DViewportService.getCornerstone3DViewportByIndex( + viewportIndex + ); + + const actorEntries = viewport.getActors(); + + const actorEntry = actorEntries.find(actorEntry => { + return actorEntry.uid === displaySetInstanceUID; + }); + + const { actor: volumeActor } = actorEntry; + + setColormap(volumeActor, colormap); + + if (immediate) { + viewport.render(); + } + }, }; const definitions = { @@ -489,6 +514,11 @@ const commandsModule = ({ servicesManager }) => { storeContexts: [], options: {}, }, + setViewportColormap: { + commandFn: actions.setViewportColormap, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/cornerstone-3d/src/index.tsx b/extensions/cornerstone-3d/src/index.tsx index a68e10c258f..e8b5d4b115b 100644 --- a/extensions/cornerstone-3d/src/index.tsx +++ b/extensions/cornerstone-3d/src/index.tsx @@ -16,6 +16,7 @@ import { toolNames } from './initCornerstoneTools'; import { getEnabledElement } from './state'; import Cornerstone3DViewportService from './services/ViewportService/Cornerstone3DViewportService'; import dicomLoaderService from './utils/dicomLoaderService'; +import { registerColormap } from './utils/colormap/transferFunctionHelpers'; import { id } from './id'; @@ -111,6 +112,7 @@ const cornerstone3DExtension = { }, getEnabledElement, dicomLoaderService, + registerColormap, }, }, { diff --git a/extensions/cornerstone-3d/src/initCornerstoneTools.js b/extensions/cornerstone-3d/src/initCornerstoneTools.js index efa727e8fad..49acd0c4ab3 100644 --- a/extensions/cornerstone-3d/src/initCornerstoneTools.js +++ b/extensions/cornerstone-3d/src/initCornerstoneTools.js @@ -39,7 +39,6 @@ export default function initCornerstone3DTools(configuration = {}) { cornerstone3DTools.addTool(AngleTool); cornerstone3DTools.addTool(MagnifyTool); cornerstone3DTools.addTool(CrosshairsTool); - cornerstone3DTools.addTool(RectangleROIStartEndThresholdTool); cornerstone3DTools.addTool(SegmentationDisplayTool); } @@ -60,7 +59,6 @@ const toolNames = { Angle: AngleTool.toolName, Magnify: MagnifyTool.toolName, Crosshairs: CrosshairsTool.toolName, - RectangleROIStartEndThreshold: RectangleROIStartEndThresholdTool.toolName, SegmentationDisplay: SegmentationDisplayTool.toolName, }; diff --git a/extensions/cornerstone-3d/src/utils/colormap/transferFunctionHelpers.js b/extensions/cornerstone-3d/src/utils/colormap/transferFunctionHelpers.js index aed3e92c537..4bbc25713e8 100644 --- a/extensions/cornerstone-3d/src/utils/colormap/transferFunctionHelpers.js +++ b/extensions/cornerstone-3d/src/utils/colormap/transferFunctionHelpers.js @@ -3,6 +3,12 @@ import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/C import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; +const colormaps = {}; + +export function registerColormap(colormap) { + colormaps[colormap.Name] = colormap; +} + function setColorTransferFunctionFromVolumeMetadata({ volumeActor, volumeId, @@ -57,7 +63,15 @@ function setColormap(volumeActor, colormap) { mapper.setSampleDistance(1.0); const cfun = vtkColorTransferFunction.newInstance(); - const preset = vtkColorMaps.getPresetByName(colormap); + + // if we have a custom colormap, use it + let preset; + if (colormaps[colormap]) { + preset = colormaps[colormap]; + } else { + preset = vtkColorMaps.getPresetByName(colormap); + } + cfun.applyColorMap(preset); cfun.setMappingRange(0, 5); diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index 3ca895d9b7b..ce671867235 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -23,6 +23,8 @@ const commandsModule = ({ UINotificationService, DisplaySetService, HangingProtocolService, + ToolGroupService, + Cornerstone3DViewportService, } = servicesManager.services; const utilityModule = extensionManager.getModuleEntry( @@ -607,6 +609,39 @@ const commandsModule = ({ exportRTReportForAnnotations: ({ annotations }) => { dicomRTAnnotationExport(annotations); }, + setFusionPTColormap: ({ toolGroupId, colormap }) => { + const toolGroup = ToolGroupService.getToolGroup(toolGroupId); + + const ptDisplaySet = actions.getMatchingPTDisplaySet(); + + if (!ptDisplaySet) { + return; + } + + const fusionViewportIds = toolGroup.getViewportIds(); + + let viewports = []; + fusionViewportIds.forEach(viewportId => { + const viewportInfo = Cornerstone3DViewportService.getViewportInfo( + viewportId + ); + + const viewportIndex = viewportInfo.getViewportIndex(); + commandsManager.runCommand('setViewportColormap', { + viewportIndex, + displaySetInstanceUID: ptDisplaySet.displaySetInstanceUID, + colormap, + }); + + viewports.push( + Cornerstone3DViewportService.getCornerstone3DViewport(viewportId) + ); + }); + + viewports.forEach(viewport => { + viewport.render(); + }); + }, }; const definitions = { @@ -690,6 +725,11 @@ const commandsModule = ({ storeContexts: [], options: {}, }, + setFusionPTColormap: { + commandFn: actions.setFusionPTColormap, + storeContexts: [], + options: {}, + }, }; return { diff --git a/extensions/tmtv/src/index.tsx b/extensions/tmtv/src/index.tsx index bf085efdb5e..26628b505c9 100644 --- a/extensions/tmtv/src/index.tsx +++ b/extensions/tmtv/src/index.tsx @@ -12,8 +12,13 @@ const tmtvExtension = { * Only required property. Should be a unique value across all extensions. */ id, - preRegistration({ servicesManager, commandsManager, configuration = {} }) { - init({ servicesManager, commandsManager, configuration }); + preRegistration({ + servicesManager, + commandsManager, + extensionManager, + configuration = {}, + }) { + init({ servicesManager, commandsManager, extensionManager, configuration }); }, getPanelModule, getHangingProtocolModule, diff --git a/extensions/tmtv/src/init.js b/extensions/tmtv/src/init.js index 8273f22238e..cf362292306 100644 --- a/extensions/tmtv/src/init.js +++ b/extensions/tmtv/src/init.js @@ -1,6 +1,7 @@ import * as cornerstone3DTools from '@cornerstonejs/tools'; import measurementServiceMappingsFactory from './utils/measurementServiceMappings/measurementServiceMappingsFactory'; +import colormaps from './utils/colormaps'; const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; @@ -10,25 +11,23 @@ const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; * @param {Object} configuration * @param {Object|Array} configuration.csToolsConfig */ -export default function init({ - servicesManager, - commandsManager, - configuration, -}) { +export default function init({ servicesManager, extensionManager }) { const { MeasurementService, DisplaySetService, Cornerstone3DViewportService, } = servicesManager.services; + cornerstone3DTools.addTool( + cornerstone3DTools.RectangleROIStartEndThresholdTool + ); + const { RectangleROIStartEndThreshold } = measurementServiceMappingsFactory( MeasurementService, DisplaySetService, Cornerstone3DViewportService ); - // Todo: this needs to be run after cornerstone3D creates the namespace - // for the measurement tools and all tools have been added to cornerstone3D const csTools3DVer1MeasurementSource = MeasurementService.getSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION @@ -41,10 +40,16 @@ export default function init({ RectangleROIStartEndThreshold.toAnnotation, RectangleROIStartEndThreshold.toMeasurement ); + + initColormaps(extensionManager); } -function initCornerstone3DTools(configuration = {}) { - cornerstone3DTools.addTool( - cornerstone3DTools.RectangleROIStartEndThresholdTool +function initColormaps(extensionManager) { + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-cornerstone-3d.utilityModule.common' ); + + const { registerColormap } = utilityModule.exports; + + colormaps.forEach(registerColormap); } diff --git a/extensions/tmtv/src/utils/colormaps/index.js b/extensions/tmtv/src/utils/colormaps/index.js new file mode 100644 index 00000000000..34761d25963 --- /dev/null +++ b/extensions/tmtv/src/utils/colormaps/index.js @@ -0,0 +1,9272 @@ +export default [ + { + ColorSpace: 'RGB', + Name: 'hot_iron', + RGBPoints: [ + 0.0, + 0.0039215686, + 0.0039215686, + 0.0156862745, + 0.00392156862745098, + 0.0039215686, + 0.0039215686, + 0.0156862745, + 0.00784313725490196, + 0.0039215686, + 0.0039215686, + 0.031372549, + 0.011764705882352941, + 0.0039215686, + 0.0039215686, + 0.0470588235, + 0.01568627450980392, + 0.0039215686, + 0.0039215686, + 0.062745098, + 0.0196078431372549, + 0.0039215686, + 0.0039215686, + 0.0784313725, + 0.023529411764705882, + 0.0039215686, + 0.0039215686, + 0.0941176471, + 0.027450980392156862, + 0.0039215686, + 0.0039215686, + 0.1098039216, + 0.03137254901960784, + 0.0039215686, + 0.0039215686, + 0.1254901961, + 0.03529411764705882, + 0.0039215686, + 0.0039215686, + 0.1411764706, + 0.0392156862745098, + 0.0039215686, + 0.0039215686, + 0.1568627451, + 0.043137254901960784, + 0.0039215686, + 0.0039215686, + 0.1725490196, + 0.047058823529411764, + 0.0039215686, + 0.0039215686, + 0.1882352941, + 0.050980392156862744, + 0.0039215686, + 0.0039215686, + 0.2039215686, + 0.054901960784313725, + 0.0039215686, + 0.0039215686, + 0.2196078431, + 0.05882352941176471, + 0.0039215686, + 0.0039215686, + 0.2352941176, + 0.06274509803921569, + 0.0039215686, + 0.0039215686, + 0.2509803922, + 0.06666666666666667, + 0.0039215686, + 0.0039215686, + 0.262745098, + 0.07058823529411765, + 0.0039215686, + 0.0039215686, + 0.2784313725, + 0.07450980392156863, + 0.0039215686, + 0.0039215686, + 0.2941176471, + 0.0784313725490196, + 0.0039215686, + 0.0039215686, + 0.3098039216, + 0.08235294117647059, + 0.0039215686, + 0.0039215686, + 0.3254901961, + 0.08627450980392157, + 0.0039215686, + 0.0039215686, + 0.3411764706, + 0.09019607843137255, + 0.0039215686, + 0.0039215686, + 0.3568627451, + 0.09411764705882353, + 0.0039215686, + 0.0039215686, + 0.3725490196, + 0.09803921568627451, + 0.0039215686, + 0.0039215686, + 0.3882352941, + 0.10196078431372549, + 0.0039215686, + 0.0039215686, + 0.4039215686, + 0.10588235294117647, + 0.0039215686, + 0.0039215686, + 0.4196078431, + 0.10980392156862745, + 0.0039215686, + 0.0039215686, + 0.4352941176, + 0.11372549019607843, + 0.0039215686, + 0.0039215686, + 0.4509803922, + 0.11764705882352942, + 0.0039215686, + 0.0039215686, + 0.4666666667, + 0.12156862745098039, + 0.0039215686, + 0.0039215686, + 0.4823529412, + 0.12549019607843137, + 0.0039215686, + 0.0039215686, + 0.4980392157, + 0.12941176470588237, + 0.0039215686, + 0.0039215686, + 0.5137254902, + 0.13333333333333333, + 0.0039215686, + 0.0039215686, + 0.5294117647, + 0.13725490196078433, + 0.0039215686, + 0.0039215686, + 0.5450980392, + 0.1411764705882353, + 0.0039215686, + 0.0039215686, + 0.5607843137, + 0.1450980392156863, + 0.0039215686, + 0.0039215686, + 0.5764705882, + 0.14901960784313725, + 0.0039215686, + 0.0039215686, + 0.5921568627, + 0.15294117647058825, + 0.0039215686, + 0.0039215686, + 0.6078431373, + 0.1568627450980392, + 0.0039215686, + 0.0039215686, + 0.6235294118, + 0.1607843137254902, + 0.0039215686, + 0.0039215686, + 0.6392156863, + 0.16470588235294117, + 0.0039215686, + 0.0039215686, + 0.6549019608, + 0.16862745098039217, + 0.0039215686, + 0.0039215686, + 0.6705882353, + 0.17254901960784313, + 0.0039215686, + 0.0039215686, + 0.6862745098, + 0.17647058823529413, + 0.0039215686, + 0.0039215686, + 0.7019607843, + 0.1803921568627451, + 0.0039215686, + 0.0039215686, + 0.7176470588, + 0.1843137254901961, + 0.0039215686, + 0.0039215686, + 0.7333333333, + 0.18823529411764706, + 0.0039215686, + 0.0039215686, + 0.7490196078, + 0.19215686274509805, + 0.0039215686, + 0.0039215686, + 0.7607843137, + 0.19607843137254902, + 0.0039215686, + 0.0039215686, + 0.7764705882, + 0.2, + 0.0039215686, + 0.0039215686, + 0.7921568627, + 0.20392156862745098, + 0.0039215686, + 0.0039215686, + 0.8078431373, + 0.20784313725490197, + 0.0039215686, + 0.0039215686, + 0.8235294118, + 0.21176470588235294, + 0.0039215686, + 0.0039215686, + 0.8392156863, + 0.21568627450980393, + 0.0039215686, + 0.0039215686, + 0.8549019608, + 0.2196078431372549, + 0.0039215686, + 0.0039215686, + 0.8705882353, + 0.2235294117647059, + 0.0039215686, + 0.0039215686, + 0.8862745098, + 0.22745098039215686, + 0.0039215686, + 0.0039215686, + 0.9019607843, + 0.23137254901960785, + 0.0039215686, + 0.0039215686, + 0.9176470588, + 0.23529411764705885, + 0.0039215686, + 0.0039215686, + 0.9333333333, + 0.23921568627450984, + 0.0039215686, + 0.0039215686, + 0.9490196078, + 0.24313725490196078, + 0.0039215686, + 0.0039215686, + 0.9647058824, + 0.24705882352941178, + 0.0039215686, + 0.0039215686, + 0.9803921569, + 0.25098039215686274, + 0.0039215686, + 0.0039215686, + 0.9960784314, + 0.2549019607843137, + 0.0039215686, + 0.0039215686, + 0.9960784314, + 0.25882352941176473, + 0.0156862745, + 0.0039215686, + 0.9803921569, + 0.2627450980392157, + 0.031372549, + 0.0039215686, + 0.9647058824, + 0.26666666666666666, + 0.0470588235, + 0.0039215686, + 0.9490196078, + 0.27058823529411763, + 0.062745098, + 0.0039215686, + 0.9333333333, + 0.27450980392156865, + 0.0784313725, + 0.0039215686, + 0.9176470588, + 0.2784313725490196, + 0.0941176471, + 0.0039215686, + 0.9019607843, + 0.2823529411764706, + 0.1098039216, + 0.0039215686, + 0.8862745098, + 0.28627450980392155, + 0.1254901961, + 0.0039215686, + 0.8705882353, + 0.2901960784313726, + 0.1411764706, + 0.0039215686, + 0.8549019608, + 0.29411764705882354, + 0.1568627451, + 0.0039215686, + 0.8392156863, + 0.2980392156862745, + 0.1725490196, + 0.0039215686, + 0.8235294118, + 0.30196078431372547, + 0.1882352941, + 0.0039215686, + 0.8078431373, + 0.3058823529411765, + 0.2039215686, + 0.0039215686, + 0.7921568627, + 0.30980392156862746, + 0.2196078431, + 0.0039215686, + 0.7764705882, + 0.3137254901960784, + 0.2352941176, + 0.0039215686, + 0.7607843137, + 0.3176470588235294, + 0.2509803922, + 0.0039215686, + 0.7490196078, + 0.3215686274509804, + 0.262745098, + 0.0039215686, + 0.7333333333, + 0.3254901960784314, + 0.2784313725, + 0.0039215686, + 0.7176470588, + 0.32941176470588235, + 0.2941176471, + 0.0039215686, + 0.7019607843, + 0.3333333333333333, + 0.3098039216, + 0.0039215686, + 0.6862745098, + 0.33725490196078434, + 0.3254901961, + 0.0039215686, + 0.6705882353, + 0.3411764705882353, + 0.3411764706, + 0.0039215686, + 0.6549019608, + 0.34509803921568627, + 0.3568627451, + 0.0039215686, + 0.6392156863, + 0.34901960784313724, + 0.3725490196, + 0.0039215686, + 0.6235294118, + 0.35294117647058826, + 0.3882352941, + 0.0039215686, + 0.6078431373, + 0.3568627450980392, + 0.4039215686, + 0.0039215686, + 0.5921568627, + 0.3607843137254902, + 0.4196078431, + 0.0039215686, + 0.5764705882, + 0.36470588235294116, + 0.4352941176, + 0.0039215686, + 0.5607843137, + 0.3686274509803922, + 0.4509803922, + 0.0039215686, + 0.5450980392, + 0.37254901960784315, + 0.4666666667, + 0.0039215686, + 0.5294117647, + 0.3764705882352941, + 0.4823529412, + 0.0039215686, + 0.5137254902, + 0.3803921568627451, + 0.4980392157, + 0.0039215686, + 0.4980392157, + 0.3843137254901961, + 0.5137254902, + 0.0039215686, + 0.4823529412, + 0.38823529411764707, + 0.5294117647, + 0.0039215686, + 0.4666666667, + 0.39215686274509803, + 0.5450980392, + 0.0039215686, + 0.4509803922, + 0.396078431372549, + 0.5607843137, + 0.0039215686, + 0.4352941176, + 0.4, + 0.5764705882, + 0.0039215686, + 0.4196078431, + 0.403921568627451, + 0.5921568627, + 0.0039215686, + 0.4039215686, + 0.40784313725490196, + 0.6078431373, + 0.0039215686, + 0.3882352941, + 0.4117647058823529, + 0.6235294118, + 0.0039215686, + 0.3725490196, + 0.41568627450980394, + 0.6392156863, + 0.0039215686, + 0.3568627451, + 0.4196078431372549, + 0.6549019608, + 0.0039215686, + 0.3411764706, + 0.4235294117647059, + 0.6705882353, + 0.0039215686, + 0.3254901961, + 0.42745098039215684, + 0.6862745098, + 0.0039215686, + 0.3098039216, + 0.43137254901960786, + 0.7019607843, + 0.0039215686, + 0.2941176471, + 0.43529411764705883, + 0.7176470588, + 0.0039215686, + 0.2784313725, + 0.4392156862745098, + 0.7333333333, + 0.0039215686, + 0.262745098, + 0.44313725490196076, + 0.7490196078, + 0.0039215686, + 0.2509803922, + 0.4470588235294118, + 0.7607843137, + 0.0039215686, + 0.2352941176, + 0.45098039215686275, + 0.7764705882, + 0.0039215686, + 0.2196078431, + 0.4549019607843137, + 0.7921568627, + 0.0039215686, + 0.2039215686, + 0.4588235294117647, + 0.8078431373, + 0.0039215686, + 0.1882352941, + 0.4627450980392157, + 0.8235294118, + 0.0039215686, + 0.1725490196, + 0.4666666666666667, + 0.8392156863, + 0.0039215686, + 0.1568627451, + 0.4705882352941177, + 0.8549019608, + 0.0039215686, + 0.1411764706, + 0.4745098039215686, + 0.8705882353, + 0.0039215686, + 0.1254901961, + 0.4784313725490197, + 0.8862745098, + 0.0039215686, + 0.1098039216, + 0.48235294117647065, + 0.9019607843, + 0.0039215686, + 0.0941176471, + 0.48627450980392156, + 0.9176470588, + 0.0039215686, + 0.0784313725, + 0.49019607843137253, + 0.9333333333, + 0.0039215686, + 0.062745098, + 0.49411764705882355, + 0.9490196078, + 0.0039215686, + 0.0470588235, + 0.4980392156862745, + 0.9647058824, + 0.0039215686, + 0.031372549, + 0.5019607843137255, + 0.9803921569, + 0.0039215686, + 0.0156862745, + 0.5058823529411764, + 0.9960784314, + 0.0039215686, + 0.0039215686, + 0.5098039215686274, + 0.9960784314, + 0.0156862745, + 0.0039215686, + 0.5137254901960784, + 0.9960784314, + 0.031372549, + 0.0039215686, + 0.5176470588235295, + 0.9960784314, + 0.0470588235, + 0.0039215686, + 0.5215686274509804, + 0.9960784314, + 0.062745098, + 0.0039215686, + 0.5254901960784314, + 0.9960784314, + 0.0784313725, + 0.0039215686, + 0.5294117647058824, + 0.9960784314, + 0.0941176471, + 0.0039215686, + 0.5333333333333333, + 0.9960784314, + 0.1098039216, + 0.0039215686, + 0.5372549019607843, + 0.9960784314, + 0.1254901961, + 0.0039215686, + 0.5411764705882353, + 0.9960784314, + 0.1411764706, + 0.0039215686, + 0.5450980392156862, + 0.9960784314, + 0.1568627451, + 0.0039215686, + 0.5490196078431373, + 0.9960784314, + 0.1725490196, + 0.0039215686, + 0.5529411764705883, + 0.9960784314, + 0.1882352941, + 0.0039215686, + 0.5568627450980392, + 0.9960784314, + 0.2039215686, + 0.0039215686, + 0.5607843137254902, + 0.9960784314, + 0.2196078431, + 0.0039215686, + 0.5647058823529412, + 0.9960784314, + 0.2352941176, + 0.0039215686, + 0.5686274509803921, + 0.9960784314, + 0.2509803922, + 0.0039215686, + 0.5725490196078431, + 0.9960784314, + 0.262745098, + 0.0039215686, + 0.5764705882352941, + 0.9960784314, + 0.2784313725, + 0.0039215686, + 0.5803921568627451, + 0.9960784314, + 0.2941176471, + 0.0039215686, + 0.5843137254901961, + 0.9960784314, + 0.3098039216, + 0.0039215686, + 0.5882352941176471, + 0.9960784314, + 0.3254901961, + 0.0039215686, + 0.592156862745098, + 0.9960784314, + 0.3411764706, + 0.0039215686, + 0.596078431372549, + 0.9960784314, + 0.3568627451, + 0.0039215686, + 0.6, + 0.9960784314, + 0.3725490196, + 0.0039215686, + 0.6039215686274509, + 0.9960784314, + 0.3882352941, + 0.0039215686, + 0.6078431372549019, + 0.9960784314, + 0.4039215686, + 0.0039215686, + 0.611764705882353, + 0.9960784314, + 0.4196078431, + 0.0039215686, + 0.615686274509804, + 0.9960784314, + 0.4352941176, + 0.0039215686, + 0.6196078431372549, + 0.9960784314, + 0.4509803922, + 0.0039215686, + 0.6235294117647059, + 0.9960784314, + 0.4666666667, + 0.0039215686, + 0.6274509803921569, + 0.9960784314, + 0.4823529412, + 0.0039215686, + 0.6313725490196078, + 0.9960784314, + 0.4980392157, + 0.0039215686, + 0.6352941176470588, + 0.9960784314, + 0.5137254902, + 0.0039215686, + 0.6392156862745098, + 0.9960784314, + 0.5294117647, + 0.0039215686, + 0.6431372549019608, + 0.9960784314, + 0.5450980392, + 0.0039215686, + 0.6470588235294118, + 0.9960784314, + 0.5607843137, + 0.0039215686, + 0.6509803921568628, + 0.9960784314, + 0.5764705882, + 0.0039215686, + 0.6549019607843137, + 0.9960784314, + 0.5921568627, + 0.0039215686, + 0.6588235294117647, + 0.9960784314, + 0.6078431373, + 0.0039215686, + 0.6627450980392157, + 0.9960784314, + 0.6235294118, + 0.0039215686, + 0.6666666666666666, + 0.9960784314, + 0.6392156863, + 0.0039215686, + 0.6705882352941176, + 0.9960784314, + 0.6549019608, + 0.0039215686, + 0.6745098039215687, + 0.9960784314, + 0.6705882353, + 0.0039215686, + 0.6784313725490196, + 0.9960784314, + 0.6862745098, + 0.0039215686, + 0.6823529411764706, + 0.9960784314, + 0.7019607843, + 0.0039215686, + 0.6862745098039216, + 0.9960784314, + 0.7176470588, + 0.0039215686, + 0.6901960784313725, + 0.9960784314, + 0.7333333333, + 0.0039215686, + 0.6941176470588235, + 0.9960784314, + 0.7490196078, + 0.0039215686, + 0.6980392156862745, + 0.9960784314, + 0.7607843137, + 0.0039215686, + 0.7019607843137254, + 0.9960784314, + 0.7764705882, + 0.0039215686, + 0.7058823529411765, + 0.9960784314, + 0.7921568627, + 0.0039215686, + 0.7098039215686275, + 0.9960784314, + 0.8078431373, + 0.0039215686, + 0.7137254901960784, + 0.9960784314, + 0.8235294118, + 0.0039215686, + 0.7176470588235294, + 0.9960784314, + 0.8392156863, + 0.0039215686, + 0.7215686274509804, + 0.9960784314, + 0.8549019608, + 0.0039215686, + 0.7254901960784313, + 0.9960784314, + 0.8705882353, + 0.0039215686, + 0.7294117647058823, + 0.9960784314, + 0.8862745098, + 0.0039215686, + 0.7333333333333333, + 0.9960784314, + 0.9019607843, + 0.0039215686, + 0.7372549019607844, + 0.9960784314, + 0.9176470588, + 0.0039215686, + 0.7411764705882353, + 0.9960784314, + 0.9333333333, + 0.0039215686, + 0.7450980392156863, + 0.9960784314, + 0.9490196078, + 0.0039215686, + 0.7490196078431373, + 0.9960784314, + 0.9647058824, + 0.0039215686, + 0.7529411764705882, + 0.9960784314, + 0.9803921569, + 0.0039215686, + 0.7568627450980392, + 0.9960784314, + 0.9960784314, + 0.0039215686, + 0.7607843137254902, + 0.9960784314, + 0.9960784314, + 0.0196078431, + 0.7647058823529411, + 0.9960784314, + 0.9960784314, + 0.0352941176, + 0.7686274509803922, + 0.9960784314, + 0.9960784314, + 0.0509803922, + 0.7725490196078432, + 0.9960784314, + 0.9960784314, + 0.0666666667, + 0.7764705882352941, + 0.9960784314, + 0.9960784314, + 0.0823529412, + 0.7803921568627451, + 0.9960784314, + 0.9960784314, + 0.0980392157, + 0.7843137254901961, + 0.9960784314, + 0.9960784314, + 0.1137254902, + 0.788235294117647, + 0.9960784314, + 0.9960784314, + 0.1294117647, + 0.792156862745098, + 0.9960784314, + 0.9960784314, + 0.1450980392, + 0.796078431372549, + 0.9960784314, + 0.9960784314, + 0.1607843137, + 0.8, + 0.9960784314, + 0.9960784314, + 0.1764705882, + 0.803921568627451, + 0.9960784314, + 0.9960784314, + 0.1921568627, + 0.807843137254902, + 0.9960784314, + 0.9960784314, + 0.2078431373, + 0.8117647058823529, + 0.9960784314, + 0.9960784314, + 0.2235294118, + 0.8156862745098039, + 0.9960784314, + 0.9960784314, + 0.2392156863, + 0.8196078431372549, + 0.9960784314, + 0.9960784314, + 0.2509803922, + 0.8235294117647058, + 0.9960784314, + 0.9960784314, + 0.2666666667, + 0.8274509803921568, + 0.9960784314, + 0.9960784314, + 0.2823529412, + 0.8313725490196079, + 0.9960784314, + 0.9960784314, + 0.2980392157, + 0.8352941176470589, + 0.9960784314, + 0.9960784314, + 0.3137254902, + 0.8392156862745098, + 0.9960784314, + 0.9960784314, + 0.3333333333, + 0.8431372549019608, + 0.9960784314, + 0.9960784314, + 0.3490196078, + 0.8470588235294118, + 0.9960784314, + 0.9960784314, + 0.3647058824, + 0.8509803921568627, + 0.9960784314, + 0.9960784314, + 0.3803921569, + 0.8549019607843137, + 0.9960784314, + 0.9960784314, + 0.3960784314, + 0.8588235294117647, + 0.9960784314, + 0.9960784314, + 0.4117647059, + 0.8627450980392157, + 0.9960784314, + 0.9960784314, + 0.4274509804, + 0.8666666666666667, + 0.9960784314, + 0.9960784314, + 0.4431372549, + 0.8705882352941177, + 0.9960784314, + 0.9960784314, + 0.4588235294, + 0.8745098039215686, + 0.9960784314, + 0.9960784314, + 0.4745098039, + 0.8784313725490196, + 0.9960784314, + 0.9960784314, + 0.4901960784, + 0.8823529411764706, + 0.9960784314, + 0.9960784314, + 0.5058823529, + 0.8862745098039215, + 0.9960784314, + 0.9960784314, + 0.5215686275, + 0.8901960784313725, + 0.9960784314, + 0.9960784314, + 0.537254902, + 0.8941176470588236, + 0.9960784314, + 0.9960784314, + 0.5529411765, + 0.8980392156862745, + 0.9960784314, + 0.9960784314, + 0.568627451, + 0.9019607843137255, + 0.9960784314, + 0.9960784314, + 0.5843137255, + 0.9058823529411765, + 0.9960784314, + 0.9960784314, + 0.6, + 0.9098039215686274, + 0.9960784314, + 0.9960784314, + 0.6156862745, + 0.9137254901960784, + 0.9960784314, + 0.9960784314, + 0.631372549, + 0.9176470588235294, + 0.9960784314, + 0.9960784314, + 0.6470588235, + 0.9215686274509803, + 0.9960784314, + 0.9960784314, + 0.6666666667, + 0.9254901960784314, + 0.9960784314, + 0.9960784314, + 0.6823529412, + 0.9294117647058824, + 0.9960784314, + 0.9960784314, + 0.6980392157, + 0.9333333333333333, + 0.9960784314, + 0.9960784314, + 0.7137254902, + 0.9372549019607843, + 0.9960784314, + 0.9960784314, + 0.7294117647, + 0.9411764705882354, + 0.9960784314, + 0.9960784314, + 0.7450980392, + 0.9450980392156864, + 0.9960784314, + 0.9960784314, + 0.7568627451, + 0.9490196078431372, + 0.9960784314, + 0.9960784314, + 0.7725490196, + 0.9529411764705882, + 0.9960784314, + 0.9960784314, + 0.7882352941, + 0.9568627450980394, + 0.9960784314, + 0.9960784314, + 0.8039215686, + 0.9607843137254903, + 0.9960784314, + 0.9960784314, + 0.8196078431, + 0.9647058823529413, + 0.9960784314, + 0.9960784314, + 0.8352941176, + 0.9686274509803922, + 0.9960784314, + 0.9960784314, + 0.8509803922, + 0.9725490196078431, + 0.9960784314, + 0.9960784314, + 0.8666666667, + 0.9764705882352941, + 0.9960784314, + 0.9960784314, + 0.8823529412, + 0.9803921568627451, + 0.9960784314, + 0.9960784314, + 0.8980392157, + 0.984313725490196, + 0.9960784314, + 0.9960784314, + 0.9137254902, + 0.9882352941176471, + 0.9960784314, + 0.9960784314, + 0.9294117647, + 0.9921568627450981, + 0.9960784314, + 0.9960784314, + 0.9450980392, + 0.996078431372549, + 0.9960784314, + 0.9960784314, + 0.9607843137, + 1.0, + 0.9960784314, + 0.9960784314, + 0.9607843137, + ], + }, + { + ColorSpace: 'RGB', + Name: 'red_hot', + RGBPoints: [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.00392156862745098, + 0.0, + 0.0, + 0.0, + 0.00784313725490196, + 0.0, + 0.0, + 0.0, + 0.011764705882352941, + 0.0, + 0.0, + 0.0, + 0.01568627450980392, + 0.0039215686, + 0.0039215686, + 0.0039215686, + 0.0196078431372549, + 0.0039215686, + 0.0039215686, + 0.0039215686, + 0.023529411764705882, + 0.0039215686, + 0.0039215686, + 0.0039215686, + 0.027450980392156862, + 0.0039215686, + 0.0039215686, + 0.0039215686, + 0.03137254901960784, + 0.0039215686, + 0.0039215686, + 0.0039215686, + 0.03529411764705882, + 0.0156862745, + 0.0, + 0.0, + 0.0392156862745098, + 0.0274509804, + 0.0, + 0.0, + 0.043137254901960784, + 0.0392156863, + 0.0, + 0.0, + 0.047058823529411764, + 0.0509803922, + 0.0, + 0.0, + 0.050980392156862744, + 0.062745098, + 0.0, + 0.0, + 0.054901960784313725, + 0.0784313725, + 0.0, + 0.0, + 0.05882352941176471, + 0.0901960784, + 0.0, + 0.0, + 0.06274509803921569, + 0.1058823529, + 0.0, + 0.0, + 0.06666666666666667, + 0.1176470588, + 0.0, + 0.0, + 0.07058823529411765, + 0.1294117647, + 0.0, + 0.0, + 0.07450980392156863, + 0.1411764706, + 0.0, + 0.0, + 0.0784313725490196, + 0.1529411765, + 0.0, + 0.0, + 0.08235294117647059, + 0.1647058824, + 0.0, + 0.0, + 0.08627450980392157, + 0.1764705882, + 0.0, + 0.0, + 0.09019607843137255, + 0.1882352941, + 0.0, + 0.0, + 0.09411764705882353, + 0.2039215686, + 0.0, + 0.0, + 0.09803921568627451, + 0.2156862745, + 0.0, + 0.0, + 0.10196078431372549, + 0.2274509804, + 0.0, + 0.0, + 0.10588235294117647, + 0.2392156863, + 0.0, + 0.0, + 0.10980392156862745, + 0.2549019608, + 0.0, + 0.0, + 0.11372549019607843, + 0.2666666667, + 0.0, + 0.0, + 0.11764705882352942, + 0.2784313725, + 0.0, + 0.0, + 0.12156862745098039, + 0.2901960784, + 0.0, + 0.0, + 0.12549019607843137, + 0.3058823529, + 0.0, + 0.0, + 0.12941176470588237, + 0.3176470588, + 0.0, + 0.0, + 0.13333333333333333, + 0.3294117647, + 0.0, + 0.0, + 0.13725490196078433, + 0.3411764706, + 0.0, + 0.0, + 0.1411764705882353, + 0.3529411765, + 0.0, + 0.0, + 0.1450980392156863, + 0.3647058824, + 0.0, + 0.0, + 0.14901960784313725, + 0.3764705882, + 0.0, + 0.0, + 0.15294117647058825, + 0.3882352941, + 0.0, + 0.0, + 0.1568627450980392, + 0.4039215686, + 0.0, + 0.0, + 0.1607843137254902, + 0.4156862745, + 0.0, + 0.0, + 0.16470588235294117, + 0.431372549, + 0.0, + 0.0, + 0.16862745098039217, + 0.4431372549, + 0.0, + 0.0, + 0.17254901960784313, + 0.4588235294, + 0.0, + 0.0, + 0.17647058823529413, + 0.4705882353, + 0.0, + 0.0, + 0.1803921568627451, + 0.4823529412, + 0.0, + 0.0, + 0.1843137254901961, + 0.4941176471, + 0.0, + 0.0, + 0.18823529411764706, + 0.5098039216, + 0.0, + 0.0, + 0.19215686274509805, + 0.5215686275, + 0.0, + 0.0, + 0.19607843137254902, + 0.5333333333, + 0.0, + 0.0, + 0.2, + 0.5450980392, + 0.0, + 0.0, + 0.20392156862745098, + 0.5568627451, + 0.0, + 0.0, + 0.20784313725490197, + 0.568627451, + 0.0, + 0.0, + 0.21176470588235294, + 0.5803921569, + 0.0, + 0.0, + 0.21568627450980393, + 0.5921568627, + 0.0, + 0.0, + 0.2196078431372549, + 0.6078431373, + 0.0, + 0.0, + 0.2235294117647059, + 0.6196078431, + 0.0, + 0.0, + 0.22745098039215686, + 0.631372549, + 0.0, + 0.0, + 0.23137254901960785, + 0.6431372549, + 0.0, + 0.0, + 0.23529411764705885, + 0.6588235294, + 0.0, + 0.0, + 0.23921568627450984, + 0.6705882353, + 0.0, + 0.0, + 0.24313725490196078, + 0.6823529412, + 0.0, + 0.0, + 0.24705882352941178, + 0.6941176471, + 0.0, + 0.0, + 0.25098039215686274, + 0.7098039216, + 0.0, + 0.0, + 0.2549019607843137, + 0.7215686275, + 0.0, + 0.0, + 0.25882352941176473, + 0.7333333333, + 0.0, + 0.0, + 0.2627450980392157, + 0.7450980392, + 0.0, + 0.0, + 0.26666666666666666, + 0.7568627451, + 0.0, + 0.0, + 0.27058823529411763, + 0.768627451, + 0.0, + 0.0, + 0.27450980392156865, + 0.7843137255, + 0.0, + 0.0, + 0.2784313725490196, + 0.7960784314, + 0.0, + 0.0, + 0.2823529411764706, + 0.8117647059, + 0.0, + 0.0, + 0.28627450980392155, + 0.8235294118, + 0.0, + 0.0, + 0.2901960784313726, + 0.8352941176, + 0.0, + 0.0, + 0.29411764705882354, + 0.8470588235, + 0.0, + 0.0, + 0.2980392156862745, + 0.862745098, + 0.0, + 0.0, + 0.30196078431372547, + 0.8745098039, + 0.0, + 0.0, + 0.3058823529411765, + 0.8862745098, + 0.0, + 0.0, + 0.30980392156862746, + 0.8980392157, + 0.0, + 0.0, + 0.3137254901960784, + 0.9137254902, + 0.0, + 0.0, + 0.3176470588235294, + 0.9254901961, + 0.0, + 0.0, + 0.3215686274509804, + 0.937254902, + 0.0, + 0.0, + 0.3254901960784314, + 0.9490196078, + 0.0, + 0.0, + 0.32941176470588235, + 0.9607843137, + 0.0, + 0.0, + 0.3333333333333333, + 0.968627451, + 0.0, + 0.0, + 0.33725490196078434, + 0.9803921569, + 0.0039215686, + 0.0, + 0.3411764705882353, + 0.9882352941, + 0.0078431373, + 0.0, + 0.34509803921568627, + 1.0, + 0.0117647059, + 0.0, + 0.34901960784313724, + 1.0, + 0.0235294118, + 0.0, + 0.35294117647058826, + 1.0, + 0.0352941176, + 0.0, + 0.3568627450980392, + 1.0, + 0.0470588235, + 0.0, + 0.3607843137254902, + 1.0, + 0.062745098, + 0.0, + 0.36470588235294116, + 1.0, + 0.0745098039, + 0.0, + 0.3686274509803922, + 1.0, + 0.0862745098, + 0.0, + 0.37254901960784315, + 1.0, + 0.0980392157, + 0.0, + 0.3764705882352941, + 1.0, + 0.1137254902, + 0.0, + 0.3803921568627451, + 1.0, + 0.1254901961, + 0.0, + 0.3843137254901961, + 1.0, + 0.137254902, + 0.0, + 0.38823529411764707, + 1.0, + 0.1490196078, + 0.0, + 0.39215686274509803, + 1.0, + 0.1647058824, + 0.0, + 0.396078431372549, + 1.0, + 0.1764705882, + 0.0, + 0.4, + 1.0, + 0.1882352941, + 0.0, + 0.403921568627451, + 1.0, + 0.2, + 0.0, + 0.40784313725490196, + 1.0, + 0.2156862745, + 0.0, + 0.4117647058823529, + 1.0, + 0.2274509804, + 0.0, + 0.41568627450980394, + 1.0, + 0.2392156863, + 0.0, + 0.4196078431372549, + 1.0, + 0.2509803922, + 0.0, + 0.4235294117647059, + 1.0, + 0.2666666667, + 0.0, + 0.42745098039215684, + 1.0, + 0.2784313725, + 0.0, + 0.43137254901960786, + 1.0, + 0.2901960784, + 0.0, + 0.43529411764705883, + 1.0, + 0.3019607843, + 0.0, + 0.4392156862745098, + 1.0, + 0.3176470588, + 0.0, + 0.44313725490196076, + 1.0, + 0.3294117647, + 0.0, + 0.4470588235294118, + 1.0, + 0.3411764706, + 0.0, + 0.45098039215686275, + 1.0, + 0.3529411765, + 0.0, + 0.4549019607843137, + 1.0, + 0.368627451, + 0.0, + 0.4588235294117647, + 1.0, + 0.3803921569, + 0.0, + 0.4627450980392157, + 1.0, + 0.3921568627, + 0.0, + 0.4666666666666667, + 1.0, + 0.4039215686, + 0.0, + 0.4705882352941177, + 1.0, + 0.4156862745, + 0.0, + 0.4745098039215686, + 1.0, + 0.4274509804, + 0.0, + 0.4784313725490197, + 1.0, + 0.4392156863, + 0.0, + 0.48235294117647065, + 1.0, + 0.4509803922, + 0.0, + 0.48627450980392156, + 1.0, + 0.4666666667, + 0.0, + 0.49019607843137253, + 1.0, + 0.4784313725, + 0.0, + 0.49411764705882355, + 1.0, + 0.4941176471, + 0.0, + 0.4980392156862745, + 1.0, + 0.5058823529, + 0.0, + 0.5019607843137255, + 1.0, + 0.5215686275, + 0.0, + 0.5058823529411764, + 1.0, + 0.5333333333, + 0.0, + 0.5098039215686274, + 1.0, + 0.5450980392, + 0.0, + 0.5137254901960784, + 1.0, + 0.5568627451, + 0.0, + 0.5176470588235295, + 1.0, + 0.568627451, + 0.0, + 0.5215686274509804, + 1.0, + 0.5803921569, + 0.0, + 0.5254901960784314, + 1.0, + 0.5921568627, + 0.0, + 0.5294117647058824, + 1.0, + 0.6039215686, + 0.0, + 0.5333333333333333, + 1.0, + 0.6196078431, + 0.0, + 0.5372549019607843, + 1.0, + 0.631372549, + 0.0, + 0.5411764705882353, + 1.0, + 0.6431372549, + 0.0, + 0.5450980392156862, + 1.0, + 0.6549019608, + 0.0, + 0.5490196078431373, + 1.0, + 0.6705882353, + 0.0, + 0.5529411764705883, + 1.0, + 0.6823529412, + 0.0, + 0.5568627450980392, + 1.0, + 0.6941176471, + 0.0, + 0.5607843137254902, + 1.0, + 0.7058823529, + 0.0, + 0.5647058823529412, + 1.0, + 0.7215686275, + 0.0, + 0.5686274509803921, + 1.0, + 0.7333333333, + 0.0, + 0.5725490196078431, + 1.0, + 0.7450980392, + 0.0, + 0.5764705882352941, + 1.0, + 0.7568627451, + 0.0, + 0.5803921568627451, + 1.0, + 0.7725490196, + 0.0, + 0.5843137254901961, + 1.0, + 0.7843137255, + 0.0, + 0.5882352941176471, + 1.0, + 0.7960784314, + 0.0, + 0.592156862745098, + 1.0, + 0.8078431373, + 0.0, + 0.596078431372549, + 1.0, + 0.8196078431, + 0.0, + 0.6, + 1.0, + 0.831372549, + 0.0, + 0.6039215686274509, + 1.0, + 0.8470588235, + 0.0, + 0.6078431372549019, + 1.0, + 0.8588235294, + 0.0, + 0.611764705882353, + 1.0, + 0.8745098039, + 0.0, + 0.615686274509804, + 1.0, + 0.8862745098, + 0.0, + 0.6196078431372549, + 1.0, + 0.8980392157, + 0.0, + 0.6235294117647059, + 1.0, + 0.9098039216, + 0.0, + 0.6274509803921569, + 1.0, + 0.9254901961, + 0.0, + 0.6313725490196078, + 1.0, + 0.937254902, + 0.0, + 0.6352941176470588, + 1.0, + 0.9490196078, + 0.0, + 0.6392156862745098, + 1.0, + 0.9607843137, + 0.0, + 0.6431372549019608, + 1.0, + 0.9764705882, + 0.0, + 0.6470588235294118, + 1.0, + 0.9803921569, + 0.0039215686, + 0.6509803921568628, + 1.0, + 0.9882352941, + 0.0117647059, + 0.6549019607843137, + 1.0, + 0.9921568627, + 0.0156862745, + 0.6588235294117647, + 1.0, + 1.0, + 0.0235294118, + 0.6627450980392157, + 1.0, + 1.0, + 0.0352941176, + 0.6666666666666666, + 1.0, + 1.0, + 0.0470588235, + 0.6705882352941176, + 1.0, + 1.0, + 0.0588235294, + 0.6745098039215687, + 1.0, + 1.0, + 0.0745098039, + 0.6784313725490196, + 1.0, + 1.0, + 0.0862745098, + 0.6823529411764706, + 1.0, + 1.0, + 0.0980392157, + 0.6862745098039216, + 1.0, + 1.0, + 0.1098039216, + 0.6901960784313725, + 1.0, + 1.0, + 0.1254901961, + 0.6941176470588235, + 1.0, + 1.0, + 0.137254902, + 0.6980392156862745, + 1.0, + 1.0, + 0.1490196078, + 0.7019607843137254, + 1.0, + 1.0, + 0.1607843137, + 0.7058823529411765, + 1.0, + 1.0, + 0.1764705882, + 0.7098039215686275, + 1.0, + 1.0, + 0.1882352941, + 0.7137254901960784, + 1.0, + 1.0, + 0.2, + 0.7176470588235294, + 1.0, + 1.0, + 0.2117647059, + 0.7215686274509804, + 1.0, + 1.0, + 0.2274509804, + 0.7254901960784313, + 1.0, + 1.0, + 0.2392156863, + 0.7294117647058823, + 1.0, + 1.0, + 0.2509803922, + 0.7333333333333333, + 1.0, + 1.0, + 0.262745098, + 0.7372549019607844, + 1.0, + 1.0, + 0.2784313725, + 0.7411764705882353, + 1.0, + 1.0, + 0.2901960784, + 0.7450980392156863, + 1.0, + 1.0, + 0.3019607843, + 0.7490196078431373, + 1.0, + 1.0, + 0.3137254902, + 0.7529411764705882, + 1.0, + 1.0, + 0.3294117647, + 0.7568627450980392, + 1.0, + 1.0, + 0.3411764706, + 0.7607843137254902, + 1.0, + 1.0, + 0.3529411765, + 0.7647058823529411, + 1.0, + 1.0, + 0.3647058824, + 0.7686274509803922, + 1.0, + 1.0, + 0.3803921569, + 0.7725490196078432, + 1.0, + 1.0, + 0.3921568627, + 0.7764705882352941, + 1.0, + 1.0, + 0.4039215686, + 0.7803921568627451, + 1.0, + 1.0, + 0.4156862745, + 0.7843137254901961, + 1.0, + 1.0, + 0.431372549, + 0.788235294117647, + 1.0, + 1.0, + 0.4431372549, + 0.792156862745098, + 1.0, + 1.0, + 0.4549019608, + 0.796078431372549, + 1.0, + 1.0, + 0.4666666667, + 0.8, + 1.0, + 1.0, + 0.4784313725, + 0.803921568627451, + 1.0, + 1.0, + 0.4901960784, + 0.807843137254902, + 1.0, + 1.0, + 0.5019607843, + 0.8117647058823529, + 1.0, + 1.0, + 0.5137254902, + 0.8156862745098039, + 1.0, + 1.0, + 0.5294117647, + 0.8196078431372549, + 1.0, + 1.0, + 0.5411764706, + 0.8235294117647058, + 1.0, + 1.0, + 0.5568627451, + 0.8274509803921568, + 1.0, + 1.0, + 0.568627451, + 0.8313725490196079, + 1.0, + 1.0, + 0.5843137255, + 0.8352941176470589, + 1.0, + 1.0, + 0.5960784314, + 0.8392156862745098, + 1.0, + 1.0, + 0.6078431373, + 0.8431372549019608, + 1.0, + 1.0, + 0.6196078431, + 0.8470588235294118, + 1.0, + 1.0, + 0.631372549, + 0.8509803921568627, + 1.0, + 1.0, + 0.6431372549, + 0.8549019607843137, + 1.0, + 1.0, + 0.6549019608, + 0.8588235294117647, + 1.0, + 1.0, + 0.6666666667, + 0.8627450980392157, + 1.0, + 1.0, + 0.6823529412, + 0.8666666666666667, + 1.0, + 1.0, + 0.6941176471, + 0.8705882352941177, + 1.0, + 1.0, + 0.7058823529, + 0.8745098039215686, + 1.0, + 1.0, + 0.7176470588, + 0.8784313725490196, + 1.0, + 1.0, + 0.7333333333, + 0.8823529411764706, + 1.0, + 1.0, + 0.7450980392, + 0.8862745098039215, + 1.0, + 1.0, + 0.7568627451, + 0.8901960784313725, + 1.0, + 1.0, + 0.768627451, + 0.8941176470588236, + 1.0, + 1.0, + 0.7843137255, + 0.8980392156862745, + 1.0, + 1.0, + 0.7960784314, + 0.9019607843137255, + 1.0, + 1.0, + 0.8078431373, + 0.9058823529411765, + 1.0, + 1.0, + 0.8196078431, + 0.9098039215686274, + 1.0, + 1.0, + 0.8352941176, + 0.9137254901960784, + 1.0, + 1.0, + 0.8470588235, + 0.9176470588235294, + 1.0, + 1.0, + 0.8588235294, + 0.9215686274509803, + 1.0, + 1.0, + 0.8705882353, + 0.9254901960784314, + 1.0, + 1.0, + 0.8823529412, + 0.9294117647058824, + 1.0, + 1.0, + 0.8941176471, + 0.9333333333333333, + 1.0, + 1.0, + 0.9098039216, + 0.9372549019607843, + 1.0, + 1.0, + 0.9215686275, + 0.9411764705882354, + 1.0, + 1.0, + 0.937254902, + 0.9450980392156864, + 1.0, + 1.0, + 0.9490196078, + 0.9490196078431372, + 1.0, + 1.0, + 0.9607843137, + 0.9529411764705882, + 1.0, + 1.0, + 0.9725490196, + 0.9568627450980394, + 1.0, + 1.0, + 0.9882352941, + 0.9607843137254903, + 1.0, + 1.0, + 0.9882352941, + 0.9647058823529413, + 1.0, + 1.0, + 0.9921568627, + 0.9686274509803922, + 1.0, + 1.0, + 0.9960784314, + 0.9725490196078431, + 1.0, + 1.0, + 1.0, + 0.9764705882352941, + 1.0, + 1.0, + 1.0, + 0.9803921568627451, + 1.0, + 1.0, + 1.0, + 0.984313725490196, + 1.0, + 1.0, + 1.0, + 0.9882352941176471, + 1.0, + 1.0, + 1.0, + 0.9921568627450981, + 1.0, + 1.0, + 1.0, + 0.996078431372549, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + ], + }, + { + ColorSpace: 'RGB', + Name: 's_pet', + RGBPoints: [ + 0.0, + 0.0156862745, + 0.0039215686, + 0.0156862745, + 0.00392156862745098, + 0.0156862745, + 0.0039215686, + 0.0156862745, + 0.00784313725490196, + 0.0274509804, + 0.0039215686, + 0.031372549, + 0.011764705882352941, + 0.0352941176, + 0.0039215686, + 0.0509803922, + 0.01568627450980392, + 0.0392156863, + 0.0039215686, + 0.0666666667, + 0.0196078431372549, + 0.0509803922, + 0.0039215686, + 0.0823529412, + 0.023529411764705882, + 0.062745098, + 0.0039215686, + 0.0980392157, + 0.027450980392156862, + 0.0705882353, + 0.0039215686, + 0.1176470588, + 0.03137254901960784, + 0.0745098039, + 0.0039215686, + 0.1333333333, + 0.03529411764705882, + 0.0862745098, + 0.0039215686, + 0.1490196078, + 0.0392156862745098, + 0.0980392157, + 0.0039215686, + 0.1647058824, + 0.043137254901960784, + 0.1058823529, + 0.0039215686, + 0.1843137255, + 0.047058823529411764, + 0.1098039216, + 0.0039215686, + 0.2, + 0.050980392156862744, + 0.1215686275, + 0.0039215686, + 0.2156862745, + 0.054901960784313725, + 0.1333333333, + 0.0039215686, + 0.231372549, + 0.05882352941176471, + 0.137254902, + 0.0039215686, + 0.2509803922, + 0.06274509803921569, + 0.1490196078, + 0.0039215686, + 0.262745098, + 0.06666666666666667, + 0.1607843137, + 0.0039215686, + 0.2784313725, + 0.07058823529411765, + 0.168627451, + 0.0039215686, + 0.2941176471, + 0.07450980392156863, + 0.1725490196, + 0.0039215686, + 0.3137254902, + 0.0784313725490196, + 0.1843137255, + 0.0039215686, + 0.3294117647, + 0.08235294117647059, + 0.1960784314, + 0.0039215686, + 0.3450980392, + 0.08627450980392157, + 0.2039215686, + 0.0039215686, + 0.3607843137, + 0.09019607843137255, + 0.2078431373, + 0.0039215686, + 0.3803921569, + 0.09411764705882353, + 0.2196078431, + 0.0039215686, + 0.3960784314, + 0.09803921568627451, + 0.231372549, + 0.0039215686, + 0.4117647059, + 0.10196078431372549, + 0.2392156863, + 0.0039215686, + 0.4274509804, + 0.10588235294117647, + 0.2431372549, + 0.0039215686, + 0.4470588235, + 0.10980392156862745, + 0.2509803922, + 0.0039215686, + 0.462745098, + 0.11372549019607843, + 0.262745098, + 0.0039215686, + 0.4784313725, + 0.11764705882352942, + 0.2666666667, + 0.0039215686, + 0.4980392157, + 0.12156862745098039, + 0.2666666667, + 0.0039215686, + 0.4980392157, + 0.12549019607843137, + 0.262745098, + 0.0039215686, + 0.5137254902, + 0.12941176470588237, + 0.2509803922, + 0.0039215686, + 0.5294117647, + 0.13333333333333333, + 0.2431372549, + 0.0039215686, + 0.5450980392, + 0.13725490196078433, + 0.2392156863, + 0.0039215686, + 0.5607843137, + 0.1411764705882353, + 0.231372549, + 0.0039215686, + 0.5764705882, + 0.1450980392156863, + 0.2196078431, + 0.0039215686, + 0.5921568627, + 0.14901960784313725, + 0.2078431373, + 0.0039215686, + 0.6078431373, + 0.15294117647058825, + 0.2039215686, + 0.0039215686, + 0.6235294118, + 0.1568627450980392, + 0.1960784314, + 0.0039215686, + 0.6392156863, + 0.1607843137254902, + 0.1843137255, + 0.0039215686, + 0.6549019608, + 0.16470588235294117, + 0.1725490196, + 0.0039215686, + 0.6705882353, + 0.16862745098039217, + 0.168627451, + 0.0039215686, + 0.6862745098, + 0.17254901960784313, + 0.1607843137, + 0.0039215686, + 0.7019607843, + 0.17647058823529413, + 0.1490196078, + 0.0039215686, + 0.7176470588, + 0.1803921568627451, + 0.137254902, + 0.0039215686, + 0.7333333333, + 0.1843137254901961, + 0.1333333333, + 0.0039215686, + 0.7490196078, + 0.18823529411764706, + 0.1215686275, + 0.0039215686, + 0.7607843137, + 0.19215686274509805, + 0.1098039216, + 0.0039215686, + 0.7764705882, + 0.19607843137254902, + 0.1058823529, + 0.0039215686, + 0.7921568627, + 0.2, + 0.0980392157, + 0.0039215686, + 0.8078431373, + 0.20392156862745098, + 0.0862745098, + 0.0039215686, + 0.8235294118, + 0.20784313725490197, + 0.0745098039, + 0.0039215686, + 0.8392156863, + 0.21176470588235294, + 0.0705882353, + 0.0039215686, + 0.8549019608, + 0.21568627450980393, + 0.062745098, + 0.0039215686, + 0.8705882353, + 0.2196078431372549, + 0.0509803922, + 0.0039215686, + 0.8862745098, + 0.2235294117647059, + 0.0392156863, + 0.0039215686, + 0.9019607843, + 0.22745098039215686, + 0.0352941176, + 0.0039215686, + 0.9176470588, + 0.23137254901960785, + 0.0274509804, + 0.0039215686, + 0.9333333333, + 0.23529411764705885, + 0.0156862745, + 0.0039215686, + 0.9490196078, + 0.23921568627450984, + 0.0078431373, + 0.0039215686, + 0.9647058824, + 0.24313725490196078, + 0.0039215686, + 0.0039215686, + 0.9960784314, + 0.24705882352941178, + 0.0039215686, + 0.0039215686, + 0.9960784314, + 0.25098039215686274, + 0.0039215686, + 0.0196078431, + 0.9647058824, + 0.2549019607843137, + 0.0039215686, + 0.0392156863, + 0.9490196078, + 0.25882352941176473, + 0.0039215686, + 0.0549019608, + 0.9333333333, + 0.2627450980392157, + 0.0039215686, + 0.0745098039, + 0.9176470588, + 0.26666666666666666, + 0.0039215686, + 0.0901960784, + 0.9019607843, + 0.27058823529411763, + 0.0039215686, + 0.1098039216, + 0.8862745098, + 0.27450980392156865, + 0.0039215686, + 0.1254901961, + 0.8705882353, + 0.2784313725490196, + 0.0039215686, + 0.1450980392, + 0.8549019608, + 0.2823529411764706, + 0.0039215686, + 0.1607843137, + 0.8392156863, + 0.28627450980392155, + 0.0039215686, + 0.1803921569, + 0.8235294118, + 0.2901960784313726, + 0.0039215686, + 0.1960784314, + 0.8078431373, + 0.29411764705882354, + 0.0039215686, + 0.2156862745, + 0.7921568627, + 0.2980392156862745, + 0.0039215686, + 0.231372549, + 0.7764705882, + 0.30196078431372547, + 0.0039215686, + 0.2509803922, + 0.7607843137, + 0.3058823529411765, + 0.0039215686, + 0.262745098, + 0.7490196078, + 0.30980392156862746, + 0.0039215686, + 0.2823529412, + 0.7333333333, + 0.3137254901960784, + 0.0039215686, + 0.2980392157, + 0.7176470588, + 0.3176470588235294, + 0.0039215686, + 0.3176470588, + 0.7019607843, + 0.3215686274509804, + 0.0039215686, + 0.3333333333, + 0.6862745098, + 0.3254901960784314, + 0.0039215686, + 0.3529411765, + 0.6705882353, + 0.32941176470588235, + 0.0039215686, + 0.368627451, + 0.6549019608, + 0.3333333333333333, + 0.0039215686, + 0.3882352941, + 0.6392156863, + 0.33725490196078434, + 0.0039215686, + 0.4039215686, + 0.6235294118, + 0.3411764705882353, + 0.0039215686, + 0.4235294118, + 0.6078431373, + 0.34509803921568627, + 0.0039215686, + 0.4392156863, + 0.5921568627, + 0.34901960784313724, + 0.0039215686, + 0.4588235294, + 0.5764705882, + 0.35294117647058826, + 0.0039215686, + 0.4745098039, + 0.5607843137, + 0.3568627450980392, + 0.0039215686, + 0.4941176471, + 0.5450980392, + 0.3607843137254902, + 0.0039215686, + 0.5098039216, + 0.5294117647, + 0.36470588235294116, + 0.0039215686, + 0.5294117647, + 0.5137254902, + 0.3686274509803922, + 0.0039215686, + 0.5450980392, + 0.4980392157, + 0.37254901960784315, + 0.0039215686, + 0.5647058824, + 0.4784313725, + 0.3764705882352941, + 0.0039215686, + 0.5803921569, + 0.462745098, + 0.3803921568627451, + 0.0039215686, + 0.6, + 0.4470588235, + 0.3843137254901961, + 0.0039215686, + 0.6156862745, + 0.4274509804, + 0.38823529411764707, + 0.0039215686, + 0.6352941176, + 0.4117647059, + 0.39215686274509803, + 0.0039215686, + 0.6509803922, + 0.3960784314, + 0.396078431372549, + 0.0039215686, + 0.6705882353, + 0.3803921569, + 0.4, + 0.0039215686, + 0.6862745098, + 0.3607843137, + 0.403921568627451, + 0.0039215686, + 0.7058823529, + 0.3450980392, + 0.40784313725490196, + 0.0039215686, + 0.7215686275, + 0.3294117647, + 0.4117647058823529, + 0.0039215686, + 0.7411764706, + 0.3137254902, + 0.41568627450980394, + 0.0039215686, + 0.7529411765, + 0.2941176471, + 0.4196078431372549, + 0.0039215686, + 0.7960784314, + 0.2784313725, + 0.4235294117647059, + 0.0039215686, + 0.7960784314, + 0.262745098, + 0.42745098039215684, + 0.0392156863, + 0.8039215686, + 0.2509803922, + 0.43137254901960786, + 0.0745098039, + 0.8117647059, + 0.231372549, + 0.43529411764705883, + 0.1098039216, + 0.8196078431, + 0.2156862745, + 0.4392156862745098, + 0.1450980392, + 0.8274509804, + 0.2, + 0.44313725490196076, + 0.1803921569, + 0.8352941176, + 0.1843137255, + 0.4470588235294118, + 0.2156862745, + 0.8431372549, + 0.1647058824, + 0.45098039215686275, + 0.2509803922, + 0.8509803922, + 0.1490196078, + 0.4549019607843137, + 0.2823529412, + 0.8588235294, + 0.1333333333, + 0.4588235294117647, + 0.3176470588, + 0.8666666667, + 0.1176470588, + 0.4627450980392157, + 0.3529411765, + 0.8745098039, + 0.0980392157, + 0.4666666666666667, + 0.3882352941, + 0.8823529412, + 0.0823529412, + 0.4705882352941177, + 0.4235294118, + 0.8901960784, + 0.0666666667, + 0.4745098039215686, + 0.4588235294, + 0.8980392157, + 0.0509803922, + 0.4784313725490197, + 0.4941176471, + 0.9058823529, + 0.0431372549, + 0.48235294117647065, + 0.5294117647, + 0.9137254902, + 0.031372549, + 0.48627450980392156, + 0.5647058824, + 0.9215686275, + 0.0196078431, + 0.49019607843137253, + 0.6, + 0.9294117647, + 0.0078431373, + 0.49411764705882355, + 0.6352941176, + 0.937254902, + 0.0039215686, + 0.4980392156862745, + 0.6705882353, + 0.9450980392, + 0.0039215686, + 0.5019607843137255, + 0.7058823529, + 0.9490196078, + 0.0039215686, + 0.5058823529411764, + 0.7411764706, + 0.9568627451, + 0.0039215686, + 0.5098039215686274, + 0.7725490196, + 0.9607843137, + 0.0039215686, + 0.5137254901960784, + 0.8078431373, + 0.968627451, + 0.0039215686, + 0.5176470588235295, + 0.8431372549, + 0.9725490196, + 0.0039215686, + 0.5215686274509804, + 0.8784313725, + 0.9803921569, + 0.0039215686, + 0.5254901960784314, + 0.9137254902, + 0.9843137255, + 0.0039215686, + 0.5294117647058824, + 0.9490196078, + 0.9921568627, + 0.0039215686, + 0.5333333333333333, + 0.9960784314, + 0.9960784314, + 0.0039215686, + 0.5372549019607843, + 0.9960784314, + 0.9960784314, + 0.0039215686, + 0.5411764705882353, + 0.9960784314, + 0.9921568627, + 0.0039215686, + 0.5450980392156862, + 0.9960784314, + 0.9843137255, + 0.0039215686, + 0.5490196078431373, + 0.9960784314, + 0.9764705882, + 0.0039215686, + 0.5529411764705883, + 0.9960784314, + 0.968627451, + 0.0039215686, + 0.5568627450980392, + 0.9960784314, + 0.9607843137, + 0.0039215686, + 0.5607843137254902, + 0.9960784314, + 0.9529411765, + 0.0039215686, + 0.5647058823529412, + 0.9960784314, + 0.9450980392, + 0.0039215686, + 0.5686274509803921, + 0.9960784314, + 0.937254902, + 0.0039215686, + 0.5725490196078431, + 0.9960784314, + 0.9294117647, + 0.0039215686, + 0.5764705882352941, + 0.9960784314, + 0.9215686275, + 0.0039215686, + 0.5803921568627451, + 0.9960784314, + 0.9137254902, + 0.0039215686, + 0.5843137254901961, + 0.9960784314, + 0.9058823529, + 0.0039215686, + 0.5882352941176471, + 0.9960784314, + 0.8980392157, + 0.0039215686, + 0.592156862745098, + 0.9960784314, + 0.8901960784, + 0.0039215686, + 0.596078431372549, + 0.9960784314, + 0.8823529412, + 0.0039215686, + 0.6, + 0.9960784314, + 0.8745098039, + 0.0039215686, + 0.6039215686274509, + 0.9960784314, + 0.8666666667, + 0.0039215686, + 0.6078431372549019, + 0.9960784314, + 0.8588235294, + 0.0039215686, + 0.611764705882353, + 0.9960784314, + 0.8509803922, + 0.0039215686, + 0.615686274509804, + 0.9960784314, + 0.8431372549, + 0.0039215686, + 0.6196078431372549, + 0.9960784314, + 0.8352941176, + 0.0039215686, + 0.6235294117647059, + 0.9960784314, + 0.8274509804, + 0.0039215686, + 0.6274509803921569, + 0.9960784314, + 0.8196078431, + 0.0039215686, + 0.6313725490196078, + 0.9960784314, + 0.8117647059, + 0.0039215686, + 0.6352941176470588, + 0.9960784314, + 0.8039215686, + 0.0039215686, + 0.6392156862745098, + 0.9960784314, + 0.7960784314, + 0.0039215686, + 0.6431372549019608, + 0.9960784314, + 0.7882352941, + 0.0039215686, + 0.6470588235294118, + 0.9960784314, + 0.7803921569, + 0.0039215686, + 0.6509803921568628, + 0.9960784314, + 0.7725490196, + 0.0039215686, + 0.6549019607843137, + 0.9960784314, + 0.7647058824, + 0.0039215686, + 0.6588235294117647, + 0.9960784314, + 0.7568627451, + 0.0039215686, + 0.6627450980392157, + 0.9960784314, + 0.7490196078, + 0.0039215686, + 0.6666666666666666, + 0.9960784314, + 0.7450980392, + 0.0039215686, + 0.6705882352941176, + 0.9960784314, + 0.737254902, + 0.0039215686, + 0.6745098039215687, + 0.9960784314, + 0.7294117647, + 0.0039215686, + 0.6784313725490196, + 0.9960784314, + 0.7215686275, + 0.0039215686, + 0.6823529411764706, + 0.9960784314, + 0.7137254902, + 0.0039215686, + 0.6862745098039216, + 0.9960784314, + 0.7058823529, + 0.0039215686, + 0.6901960784313725, + 0.9960784314, + 0.6980392157, + 0.0039215686, + 0.6941176470588235, + 0.9960784314, + 0.6901960784, + 0.0039215686, + 0.6980392156862745, + 0.9960784314, + 0.6823529412, + 0.0039215686, + 0.7019607843137254, + 0.9960784314, + 0.6745098039, + 0.0039215686, + 0.7058823529411765, + 0.9960784314, + 0.6666666667, + 0.0039215686, + 0.7098039215686275, + 0.9960784314, + 0.6588235294, + 0.0039215686, + 0.7137254901960784, + 0.9960784314, + 0.6509803922, + 0.0039215686, + 0.7176470588235294, + 0.9960784314, + 0.6431372549, + 0.0039215686, + 0.7215686274509804, + 0.9960784314, + 0.6352941176, + 0.0039215686, + 0.7254901960784313, + 0.9960784314, + 0.6274509804, + 0.0039215686, + 0.7294117647058823, + 0.9960784314, + 0.6196078431, + 0.0039215686, + 0.7333333333333333, + 0.9960784314, + 0.6117647059, + 0.0039215686, + 0.7372549019607844, + 0.9960784314, + 0.6039215686, + 0.0039215686, + 0.7411764705882353, + 0.9960784314, + 0.5960784314, + 0.0039215686, + 0.7450980392156863, + 0.9960784314, + 0.5882352941, + 0.0039215686, + 0.7490196078431373, + 0.9960784314, + 0.5803921569, + 0.0039215686, + 0.7529411764705882, + 0.9960784314, + 0.5725490196, + 0.0039215686, + 0.7568627450980392, + 0.9960784314, + 0.5647058824, + 0.0039215686, + 0.7607843137254902, + 0.9960784314, + 0.5568627451, + 0.0039215686, + 0.7647058823529411, + 0.9960784314, + 0.5490196078, + 0.0039215686, + 0.7686274509803922, + 0.9960784314, + 0.5411764706, + 0.0039215686, + 0.7725490196078432, + 0.9960784314, + 0.5333333333, + 0.0039215686, + 0.7764705882352941, + 0.9960784314, + 0.5254901961, + 0.0039215686, + 0.7803921568627451, + 0.9960784314, + 0.5176470588, + 0.0039215686, + 0.7843137254901961, + 0.9960784314, + 0.5098039216, + 0.0039215686, + 0.788235294117647, + 0.9960784314, + 0.5019607843, + 0.0039215686, + 0.792156862745098, + 0.9960784314, + 0.4941176471, + 0.0039215686, + 0.796078431372549, + 0.9960784314, + 0.4862745098, + 0.0039215686, + 0.8, + 0.9960784314, + 0.4784313725, + 0.0039215686, + 0.803921568627451, + 0.9960784314, + 0.4705882353, + 0.0039215686, + 0.807843137254902, + 0.9960784314, + 0.462745098, + 0.0039215686, + 0.8117647058823529, + 0.9960784314, + 0.4549019608, + 0.0039215686, + 0.8156862745098039, + 0.9960784314, + 0.4470588235, + 0.0039215686, + 0.8196078431372549, + 0.9960784314, + 0.4392156863, + 0.0039215686, + 0.8235294117647058, + 0.9960784314, + 0.431372549, + 0.0039215686, + 0.8274509803921568, + 0.9960784314, + 0.4235294118, + 0.0039215686, + 0.8313725490196079, + 0.9960784314, + 0.4156862745, + 0.0039215686, + 0.8352941176470589, + 0.9960784314, + 0.4078431373, + 0.0039215686, + 0.8392156862745098, + 0.9960784314, + 0.4, + 0.0039215686, + 0.8431372549019608, + 0.9960784314, + 0.3921568627, + 0.0039215686, + 0.8470588235294118, + 0.9960784314, + 0.3843137255, + 0.0039215686, + 0.8509803921568627, + 0.9960784314, + 0.3764705882, + 0.0039215686, + 0.8549019607843137, + 0.9960784314, + 0.368627451, + 0.0039215686, + 0.8588235294117647, + 0.9960784314, + 0.3607843137, + 0.0039215686, + 0.8627450980392157, + 0.9960784314, + 0.3529411765, + 0.0039215686, + 0.8666666666666667, + 0.9960784314, + 0.3450980392, + 0.0039215686, + 0.8705882352941177, + 0.9960784314, + 0.337254902, + 0.0039215686, + 0.8745098039215686, + 0.9960784314, + 0.3294117647, + 0.0039215686, + 0.8784313725490196, + 0.9960784314, + 0.3215686275, + 0.0039215686, + 0.8823529411764706, + 0.9960784314, + 0.3137254902, + 0.0039215686, + 0.8862745098039215, + 0.9960784314, + 0.3058823529, + 0.0039215686, + 0.8901960784313725, + 0.9960784314, + 0.2980392157, + 0.0039215686, + 0.8941176470588236, + 0.9960784314, + 0.2901960784, + 0.0039215686, + 0.8980392156862745, + 0.9960784314, + 0.2823529412, + 0.0039215686, + 0.9019607843137255, + 0.9960784314, + 0.2705882353, + 0.0039215686, + 0.9058823529411765, + 0.9960784314, + 0.2588235294, + 0.0039215686, + 0.9098039215686274, + 0.9960784314, + 0.2509803922, + 0.0039215686, + 0.9137254901960784, + 0.9960784314, + 0.2431372549, + 0.0039215686, + 0.9176470588235294, + 0.9960784314, + 0.231372549, + 0.0039215686, + 0.9215686274509803, + 0.9960784314, + 0.2196078431, + 0.0039215686, + 0.9254901960784314, + 0.9960784314, + 0.2117647059, + 0.0039215686, + 0.9294117647058824, + 0.9960784314, + 0.2, + 0.0039215686, + 0.9333333333333333, + 0.9960784314, + 0.1882352941, + 0.0039215686, + 0.9372549019607843, + 0.9960784314, + 0.1764705882, + 0.0039215686, + 0.9411764705882354, + 0.9960784314, + 0.168627451, + 0.0039215686, + 0.9450980392156864, + 0.9960784314, + 0.1568627451, + 0.0039215686, + 0.9490196078431372, + 0.9960784314, + 0.1450980392, + 0.0039215686, + 0.9529411764705882, + 0.9960784314, + 0.1333333333, + 0.0039215686, + 0.9568627450980394, + 0.9960784314, + 0.1254901961, + 0.0039215686, + 0.9607843137254903, + 0.9960784314, + 0.1137254902, + 0.0039215686, + 0.9647058823529413, + 0.9960784314, + 0.1019607843, + 0.0039215686, + 0.9686274509803922, + 0.9960784314, + 0.0901960784, + 0.0039215686, + 0.9725490196078431, + 0.9960784314, + 0.0823529412, + 0.0039215686, + 0.9764705882352941, + 0.9960784314, + 0.0705882353, + 0.0039215686, + 0.9803921568627451, + 0.9960784314, + 0.0588235294, + 0.0039215686, + 0.984313725490196, + 0.9960784314, + 0.0470588235, + 0.0039215686, + 0.9882352941176471, + 0.9960784314, + 0.0392156863, + 0.0039215686, + 0.9921568627450981, + 0.9960784314, + 0.0274509804, + 0.0039215686, + 0.996078431372549, + 0.9960784314, + 0.0156862745, + 0.0039215686, + 1.0, + 0.9960784314, + 0.0156862745, + 0.0039215686, + ], + }, + { + ColorSpace: 'RGB', + Name: 'perfusion', + RGBPoints: [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.00392156862745098, + 0.0078431373, + 0.0235294118, + 0.0235294118, + 0.00784313725490196, + 0.0078431373, + 0.031372549, + 0.0470588235, + 0.011764705882352941, + 0.0078431373, + 0.0392156863, + 0.062745098, + 0.01568627450980392, + 0.0078431373, + 0.0470588235, + 0.0862745098, + 0.0196078431372549, + 0.0078431373, + 0.0549019608, + 0.1019607843, + 0.023529411764705882, + 0.0078431373, + 0.0549019608, + 0.1254901961, + 0.027450980392156862, + 0.0078431373, + 0.062745098, + 0.1411764706, + 0.03137254901960784, + 0.0078431373, + 0.0705882353, + 0.1647058824, + 0.03529411764705882, + 0.0078431373, + 0.0784313725, + 0.1803921569, + 0.0392156862745098, + 0.0078431373, + 0.0862745098, + 0.2039215686, + 0.043137254901960784, + 0.0078431373, + 0.0862745098, + 0.2196078431, + 0.047058823529411764, + 0.0078431373, + 0.0941176471, + 0.2431372549, + 0.050980392156862744, + 0.0078431373, + 0.1019607843, + 0.2666666667, + 0.054901960784313725, + 0.0078431373, + 0.1098039216, + 0.2823529412, + 0.05882352941176471, + 0.0078431373, + 0.1176470588, + 0.3058823529, + 0.06274509803921569, + 0.0078431373, + 0.1176470588, + 0.3215686275, + 0.06666666666666667, + 0.0078431373, + 0.1254901961, + 0.3450980392, + 0.07058823529411765, + 0.0078431373, + 0.1333333333, + 0.3607843137, + 0.07450980392156863, + 0.0078431373, + 0.1411764706, + 0.3843137255, + 0.0784313725490196, + 0.0078431373, + 0.1490196078, + 0.4, + 0.08235294117647059, + 0.0078431373, + 0.1490196078, + 0.4235294118, + 0.08627450980392157, + 0.0078431373, + 0.1568627451, + 0.4392156863, + 0.09019607843137255, + 0.0078431373, + 0.1647058824, + 0.462745098, + 0.09411764705882353, + 0.0078431373, + 0.1725490196, + 0.4784313725, + 0.09803921568627451, + 0.0078431373, + 0.1803921569, + 0.5019607843, + 0.10196078431372549, + 0.0078431373, + 0.1803921569, + 0.5254901961, + 0.10588235294117647, + 0.0078431373, + 0.1882352941, + 0.5411764706, + 0.10980392156862745, + 0.0078431373, + 0.1960784314, + 0.5647058824, + 0.11372549019607843, + 0.0078431373, + 0.2039215686, + 0.5803921569, + 0.11764705882352942, + 0.0078431373, + 0.2117647059, + 0.6039215686, + 0.12156862745098039, + 0.0078431373, + 0.2117647059, + 0.6196078431, + 0.12549019607843137, + 0.0078431373, + 0.2196078431, + 0.6431372549, + 0.12941176470588237, + 0.0078431373, + 0.2274509804, + 0.6588235294, + 0.13333333333333333, + 0.0078431373, + 0.2352941176, + 0.6823529412, + 0.13725490196078433, + 0.0078431373, + 0.2431372549, + 0.6980392157, + 0.1411764705882353, + 0.0078431373, + 0.2431372549, + 0.7215686275, + 0.1450980392156863, + 0.0078431373, + 0.2509803922, + 0.737254902, + 0.14901960784313725, + 0.0078431373, + 0.2588235294, + 0.7607843137, + 0.15294117647058825, + 0.0078431373, + 0.2666666667, + 0.7843137255, + 0.1568627450980392, + 0.0078431373, + 0.2745098039, + 0.8, + 0.1607843137254902, + 0.0078431373, + 0.2745098039, + 0.8235294118, + 0.16470588235294117, + 0.0078431373, + 0.2823529412, + 0.8392156863, + 0.16862745098039217, + 0.0078431373, + 0.2901960784, + 0.862745098, + 0.17254901960784313, + 0.0078431373, + 0.2980392157, + 0.8784313725, + 0.17647058823529413, + 0.0078431373, + 0.3058823529, + 0.9019607843, + 0.1803921568627451, + 0.0078431373, + 0.3058823529, + 0.9176470588, + 0.1843137254901961, + 0.0078431373, + 0.2980392157, + 0.9411764706, + 0.18823529411764706, + 0.0078431373, + 0.3058823529, + 0.9568627451, + 0.19215686274509805, + 0.0078431373, + 0.2980392157, + 0.9803921569, + 0.19607843137254902, + 0.0078431373, + 0.2980392157, + 0.9882352941, + 0.2, + 0.0078431373, + 0.2901960784, + 0.9803921569, + 0.20392156862745098, + 0.0078431373, + 0.2901960784, + 0.9647058824, + 0.20784313725490197, + 0.0078431373, + 0.2823529412, + 0.9568627451, + 0.21176470588235294, + 0.0078431373, + 0.2823529412, + 0.9411764706, + 0.21568627450980393, + 0.0078431373, + 0.2745098039, + 0.9333333333, + 0.2196078431372549, + 0.0078431373, + 0.2666666667, + 0.9176470588, + 0.2235294117647059, + 0.0078431373, + 0.2666666667, + 0.9098039216, + 0.22745098039215686, + 0.0078431373, + 0.2588235294, + 0.9019607843, + 0.23137254901960785, + 0.0078431373, + 0.2588235294, + 0.8862745098, + 0.23529411764705885, + 0.0078431373, + 0.2509803922, + 0.8784313725, + 0.23921568627450984, + 0.0078431373, + 0.2509803922, + 0.862745098, + 0.24313725490196078, + 0.0078431373, + 0.2431372549, + 0.8549019608, + 0.24705882352941178, + 0.0078431373, + 0.2352941176, + 0.8392156863, + 0.25098039215686274, + 0.0078431373, + 0.2352941176, + 0.831372549, + 0.2549019607843137, + 0.0078431373, + 0.2274509804, + 0.8235294118, + 0.25882352941176473, + 0.0078431373, + 0.2274509804, + 0.8078431373, + 0.2627450980392157, + 0.0078431373, + 0.2196078431, + 0.8, + 0.26666666666666666, + 0.0078431373, + 0.2196078431, + 0.7843137255, + 0.27058823529411763, + 0.0078431373, + 0.2117647059, + 0.7764705882, + 0.27450980392156865, + 0.0078431373, + 0.2039215686, + 0.7607843137, + 0.2784313725490196, + 0.0078431373, + 0.2039215686, + 0.7529411765, + 0.2823529411764706, + 0.0078431373, + 0.1960784314, + 0.7450980392, + 0.28627450980392155, + 0.0078431373, + 0.1960784314, + 0.7294117647, + 0.2901960784313726, + 0.0078431373, + 0.1882352941, + 0.7215686275, + 0.29411764705882354, + 0.0078431373, + 0.1882352941, + 0.7058823529, + 0.2980392156862745, + 0.0078431373, + 0.1803921569, + 0.6980392157, + 0.30196078431372547, + 0.0078431373, + 0.1803921569, + 0.6823529412, + 0.3058823529411765, + 0.0078431373, + 0.1725490196, + 0.6745098039, + 0.30980392156862746, + 0.0078431373, + 0.1647058824, + 0.6666666667, + 0.3137254901960784, + 0.0078431373, + 0.1647058824, + 0.6509803922, + 0.3176470588235294, + 0.0078431373, + 0.1568627451, + 0.6431372549, + 0.3215686274509804, + 0.0078431373, + 0.1568627451, + 0.6274509804, + 0.3254901960784314, + 0.0078431373, + 0.1490196078, + 0.6196078431, + 0.32941176470588235, + 0.0078431373, + 0.1490196078, + 0.6039215686, + 0.3333333333333333, + 0.0078431373, + 0.1411764706, + 0.5960784314, + 0.33725490196078434, + 0.0078431373, + 0.1333333333, + 0.5882352941, + 0.3411764705882353, + 0.0078431373, + 0.1333333333, + 0.5725490196, + 0.34509803921568627, + 0.0078431373, + 0.1254901961, + 0.5647058824, + 0.34901960784313724, + 0.0078431373, + 0.1254901961, + 0.5490196078, + 0.35294117647058826, + 0.0078431373, + 0.1176470588, + 0.5411764706, + 0.3568627450980392, + 0.0078431373, + 0.1176470588, + 0.5254901961, + 0.3607843137254902, + 0.0078431373, + 0.1098039216, + 0.5176470588, + 0.36470588235294116, + 0.0078431373, + 0.1019607843, + 0.5098039216, + 0.3686274509803922, + 0.0078431373, + 0.1019607843, + 0.4941176471, + 0.37254901960784315, + 0.0078431373, + 0.0941176471, + 0.4862745098, + 0.3764705882352941, + 0.0078431373, + 0.0941176471, + 0.4705882353, + 0.3803921568627451, + 0.0078431373, + 0.0862745098, + 0.462745098, + 0.3843137254901961, + 0.0078431373, + 0.0862745098, + 0.4470588235, + 0.38823529411764707, + 0.0078431373, + 0.0784313725, + 0.4392156863, + 0.39215686274509803, + 0.0078431373, + 0.0705882353, + 0.431372549, + 0.396078431372549, + 0.0078431373, + 0.0705882353, + 0.4156862745, + 0.4, + 0.0078431373, + 0.062745098, + 0.4078431373, + 0.403921568627451, + 0.0078431373, + 0.062745098, + 0.3921568627, + 0.40784313725490196, + 0.0078431373, + 0.0549019608, + 0.3843137255, + 0.4117647058823529, + 0.0078431373, + 0.0549019608, + 0.368627451, + 0.41568627450980394, + 0.0078431373, + 0.0470588235, + 0.3607843137, + 0.4196078431372549, + 0.0078431373, + 0.0470588235, + 0.3529411765, + 0.4235294117647059, + 0.0078431373, + 0.0392156863, + 0.337254902, + 0.42745098039215684, + 0.0078431373, + 0.031372549, + 0.3294117647, + 0.43137254901960786, + 0.0078431373, + 0.031372549, + 0.3137254902, + 0.43529411764705883, + 0.0078431373, + 0.0235294118, + 0.3058823529, + 0.4392156862745098, + 0.0078431373, + 0.0235294118, + 0.2901960784, + 0.44313725490196076, + 0.0078431373, + 0.0156862745, + 0.2823529412, + 0.4470588235294118, + 0.0078431373, + 0.0156862745, + 0.2745098039, + 0.45098039215686275, + 0.0078431373, + 0.0078431373, + 0.2588235294, + 0.4549019607843137, + 0.0235294118, + 0.0078431373, + 0.2509803922, + 0.4588235294117647, + 0.0078431373, + 0.0078431373, + 0.2352941176, + 0.4627450980392157, + 0.0078431373, + 0.0078431373, + 0.2274509804, + 0.4666666666666667, + 0.0078431373, + 0.0078431373, + 0.2117647059, + 0.4705882352941177, + 0.0078431373, + 0.0078431373, + 0.2039215686, + 0.4745098039215686, + 0.0078431373, + 0.0078431373, + 0.1960784314, + 0.4784313725490197, + 0.0078431373, + 0.0078431373, + 0.1803921569, + 0.48235294117647065, + 0.0078431373, + 0.0078431373, + 0.1725490196, + 0.48627450980392156, + 0.0078431373, + 0.0078431373, + 0.1568627451, + 0.49019607843137253, + 0.0078431373, + 0.0078431373, + 0.1490196078, + 0.49411764705882355, + 0.0078431373, + 0.0078431373, + 0.1333333333, + 0.4980392156862745, + 0.0078431373, + 0.0078431373, + 0.1254901961, + 0.5019607843137255, + 0.0078431373, + 0.0078431373, + 0.1176470588, + 0.5058823529411764, + 0.0078431373, + 0.0078431373, + 0.1019607843, + 0.5098039215686274, + 0.0078431373, + 0.0078431373, + 0.0941176471, + 0.5137254901960784, + 0.0078431373, + 0.0078431373, + 0.0784313725, + 0.5176470588235295, + 0.0078431373, + 0.0078431373, + 0.0705882353, + 0.5215686274509804, + 0.0078431373, + 0.0078431373, + 0.0549019608, + 0.5254901960784314, + 0.0078431373, + 0.0078431373, + 0.0470588235, + 0.5294117647058824, + 0.0235294118, + 0.0078431373, + 0.0392156863, + 0.5333333333333333, + 0.031372549, + 0.0078431373, + 0.0235294118, + 0.5372549019607843, + 0.0392156863, + 0.0078431373, + 0.0156862745, + 0.5411764705882353, + 0.0549019608, + 0.0078431373, + 0.0, + 0.5450980392156862, + 0.062745098, + 0.0078431373, + 0.0, + 0.5490196078431373, + 0.0705882353, + 0.0078431373, + 0.0, + 0.5529411764705883, + 0.0862745098, + 0.0078431373, + 0.0, + 0.5568627450980392, + 0.0941176471, + 0.0078431373, + 0.0, + 0.5607843137254902, + 0.1019607843, + 0.0078431373, + 0.0, + 0.5647058823529412, + 0.1098039216, + 0.0078431373, + 0.0, + 0.5686274509803921, + 0.1254901961, + 0.0078431373, + 0.0, + 0.5725490196078431, + 0.1333333333, + 0.0078431373, + 0.0, + 0.5764705882352941, + 0.1411764706, + 0.0078431373, + 0.0, + 0.5803921568627451, + 0.1568627451, + 0.0078431373, + 0.0, + 0.5843137254901961, + 0.1647058824, + 0.0078431373, + 0.0, + 0.5882352941176471, + 0.1725490196, + 0.0078431373, + 0.0, + 0.592156862745098, + 0.1882352941, + 0.0078431373, + 0.0, + 0.596078431372549, + 0.1960784314, + 0.0078431373, + 0.0, + 0.6, + 0.2039215686, + 0.0078431373, + 0.0, + 0.6039215686274509, + 0.2117647059, + 0.0078431373, + 0.0, + 0.6078431372549019, + 0.2274509804, + 0.0078431373, + 0.0, + 0.611764705882353, + 0.2352941176, + 0.0078431373, + 0.0, + 0.615686274509804, + 0.2431372549, + 0.0078431373, + 0.0, + 0.6196078431372549, + 0.2588235294, + 0.0078431373, + 0.0, + 0.6235294117647059, + 0.2666666667, + 0.0078431373, + 0.0, + 0.6274509803921569, + 0.2745098039, + 0.0, + 0.0, + 0.6313725490196078, + 0.2901960784, + 0.0156862745, + 0.0, + 0.6352941176470588, + 0.2980392157, + 0.0235294118, + 0.0, + 0.6392156862745098, + 0.3058823529, + 0.0392156863, + 0.0, + 0.6431372549019608, + 0.3137254902, + 0.0470588235, + 0.0, + 0.6470588235294118, + 0.3294117647, + 0.0549019608, + 0.0, + 0.6509803921568628, + 0.337254902, + 0.0705882353, + 0.0, + 0.6549019607843137, + 0.3450980392, + 0.0784313725, + 0.0, + 0.6588235294117647, + 0.3607843137, + 0.0862745098, + 0.0, + 0.6627450980392157, + 0.368627451, + 0.1019607843, + 0.0, + 0.6666666666666666, + 0.3764705882, + 0.1098039216, + 0.0, + 0.6705882352941176, + 0.3843137255, + 0.1176470588, + 0.0, + 0.6745098039215687, + 0.4, + 0.1333333333, + 0.0, + 0.6784313725490196, + 0.4078431373, + 0.1411764706, + 0.0, + 0.6823529411764706, + 0.4156862745, + 0.1490196078, + 0.0, + 0.6862745098039216, + 0.431372549, + 0.1647058824, + 0.0, + 0.6901960784313725, + 0.4392156863, + 0.1725490196, + 0.0, + 0.6941176470588235, + 0.4470588235, + 0.1803921569, + 0.0, + 0.6980392156862745, + 0.462745098, + 0.1960784314, + 0.0, + 0.7019607843137254, + 0.4705882353, + 0.2039215686, + 0.0, + 0.7058823529411765, + 0.4784313725, + 0.2117647059, + 0.0, + 0.7098039215686275, + 0.4862745098, + 0.2274509804, + 0.0, + 0.7137254901960784, + 0.5019607843, + 0.2352941176, + 0.0, + 0.7176470588235294, + 0.5098039216, + 0.2431372549, + 0.0, + 0.7215686274509804, + 0.5176470588, + 0.2588235294, + 0.0, + 0.7254901960784313, + 0.5333333333, + 0.2666666667, + 0.0, + 0.7294117647058823, + 0.5411764706, + 0.2745098039, + 0.0, + 0.7333333333333333, + 0.5490196078, + 0.2901960784, + 0.0, + 0.7372549019607844, + 0.5647058824, + 0.2980392157, + 0.0, + 0.7411764705882353, + 0.5725490196, + 0.3058823529, + 0.0, + 0.7450980392156863, + 0.5803921569, + 0.3215686275, + 0.0, + 0.7490196078431373, + 0.5882352941, + 0.3294117647, + 0.0, + 0.7529411764705882, + 0.6039215686, + 0.337254902, + 0.0, + 0.7568627450980392, + 0.6117647059, + 0.3529411765, + 0.0, + 0.7607843137254902, + 0.6196078431, + 0.3607843137, + 0.0, + 0.7647058823529411, + 0.6352941176, + 0.368627451, + 0.0, + 0.7686274509803922, + 0.6431372549, + 0.3843137255, + 0.0, + 0.7725490196078432, + 0.6509803922, + 0.3921568627, + 0.0, + 0.7764705882352941, + 0.6588235294, + 0.4, + 0.0, + 0.7803921568627451, + 0.6745098039, + 0.4156862745, + 0.0, + 0.7843137254901961, + 0.6823529412, + 0.4235294118, + 0.0, + 0.788235294117647, + 0.6901960784, + 0.431372549, + 0.0, + 0.792156862745098, + 0.7058823529, + 0.4470588235, + 0.0, + 0.796078431372549, + 0.7137254902, + 0.4549019608, + 0.0, + 0.8, + 0.7215686275, + 0.462745098, + 0.0, + 0.803921568627451, + 0.737254902, + 0.4784313725, + 0.0, + 0.807843137254902, + 0.7450980392, + 0.4862745098, + 0.0, + 0.8117647058823529, + 0.7529411765, + 0.4941176471, + 0.0, + 0.8156862745098039, + 0.7607843137, + 0.5098039216, + 0.0, + 0.8196078431372549, + 0.7764705882, + 0.5176470588, + 0.0, + 0.8235294117647058, + 0.7843137255, + 0.5254901961, + 0.0, + 0.8274509803921568, + 0.7921568627, + 0.5411764706, + 0.0, + 0.8313725490196079, + 0.8078431373, + 0.5490196078, + 0.0, + 0.8352941176470589, + 0.8156862745, + 0.5568627451, + 0.0, + 0.8392156862745098, + 0.8235294118, + 0.5725490196, + 0.0, + 0.8431372549019608, + 0.8392156863, + 0.5803921569, + 0.0, + 0.8470588235294118, + 0.8470588235, + 0.5882352941, + 0.0, + 0.8509803921568627, + 0.8549019608, + 0.6039215686, + 0.0, + 0.8549019607843137, + 0.862745098, + 0.6117647059, + 0.0, + 0.8588235294117647, + 0.8784313725, + 0.6196078431, + 0.0, + 0.8627450980392157, + 0.8862745098, + 0.6352941176, + 0.0, + 0.8666666666666667, + 0.8941176471, + 0.6431372549, + 0.0, + 0.8705882352941177, + 0.9098039216, + 0.6509803922, + 0.0, + 0.8745098039215686, + 0.9176470588, + 0.6666666667, + 0.0, + 0.8784313725490196, + 0.9254901961, + 0.6745098039, + 0.0, + 0.8823529411764706, + 0.9411764706, + 0.6823529412, + 0.0, + 0.8862745098039215, + 0.9490196078, + 0.6980392157, + 0.0, + 0.8901960784313725, + 0.9568627451, + 0.7058823529, + 0.0, + 0.8941176470588236, + 0.9647058824, + 0.7137254902, + 0.0, + 0.8980392156862745, + 0.9803921569, + 0.7294117647, + 0.0, + 0.9019607843137255, + 0.9882352941, + 0.737254902, + 0.0, + 0.9058823529411765, + 0.9960784314, + 0.7450980392, + 0.0, + 0.9098039215686274, + 0.9960784314, + 0.7607843137, + 0.0, + 0.9137254901960784, + 0.9960784314, + 0.768627451, + 0.0, + 0.9176470588235294, + 0.9960784314, + 0.7764705882, + 0.0, + 0.9215686274509803, + 0.9960784314, + 0.7921568627, + 0.0, + 0.9254901960784314, + 0.9960784314, + 0.8, + 0.0, + 0.9294117647058824, + 0.9960784314, + 0.8078431373, + 0.0, + 0.9333333333333333, + 0.9960784314, + 0.8235294118, + 0.0, + 0.9372549019607843, + 0.9960784314, + 0.831372549, + 0.0, + 0.9411764705882354, + 0.9960784314, + 0.8392156863, + 0.0, + 0.9450980392156864, + 0.9960784314, + 0.8549019608, + 0.0, + 0.9490196078431372, + 0.9960784314, + 0.862745098, + 0.0549019608, + 0.9529411764705882, + 0.9960784314, + 0.8705882353, + 0.1098039216, + 0.9568627450980394, + 0.9960784314, + 0.8862745098, + 0.1647058824, + 0.9607843137254903, + 0.9960784314, + 0.8941176471, + 0.2196078431, + 0.9647058823529413, + 0.9960784314, + 0.9019607843, + 0.2666666667, + 0.9686274509803922, + 0.9960784314, + 0.9176470588, + 0.3215686275, + 0.9725490196078431, + 0.9960784314, + 0.9254901961, + 0.3764705882, + 0.9764705882352941, + 0.9960784314, + 0.9333333333, + 0.431372549, + 0.9803921568627451, + 0.9960784314, + 0.9490196078, + 0.4862745098, + 0.984313725490196, + 0.9960784314, + 0.9568627451, + 0.5333333333, + 0.9882352941176471, + 0.9960784314, + 0.9647058824, + 0.5882352941, + 0.9921568627450981, + 0.9960784314, + 0.9803921569, + 0.6431372549, + 0.996078431372549, + 0.9960784314, + 0.9882352941, + 0.6980392157, + 1.0, + 0.9960784314, + 0.9960784314, + 0.7450980392, + ], + }, + { + ColorSpace: 'RGB', + Name: 'rainbow_2', + RGBPoints: [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.00392156862745098, + 0.0156862745, + 0.0, + 0.0117647059, + 0.00784313725490196, + 0.0352941176, + 0.0, + 0.0274509804, + 0.011764705882352941, + 0.0509803922, + 0.0, + 0.0392156863, + 0.01568627450980392, + 0.0705882353, + 0.0, + 0.0549019608, + 0.0196078431372549, + 0.0862745098, + 0.0, + 0.0745098039, + 0.023529411764705882, + 0.1058823529, + 0.0, + 0.0901960784, + 0.027450980392156862, + 0.1215686275, + 0.0, + 0.1098039216, + 0.03137254901960784, + 0.1411764706, + 0.0, + 0.1254901961, + 0.03529411764705882, + 0.1568627451, + 0.0, + 0.1490196078, + 0.0392156862745098, + 0.1764705882, + 0.0, + 0.168627451, + 0.043137254901960784, + 0.1960784314, + 0.0, + 0.1882352941, + 0.047058823529411764, + 0.2117647059, + 0.0, + 0.2078431373, + 0.050980392156862744, + 0.2274509804, + 0.0, + 0.231372549, + 0.054901960784313725, + 0.2392156863, + 0.0, + 0.2470588235, + 0.05882352941176471, + 0.2509803922, + 0.0, + 0.2666666667, + 0.06274509803921569, + 0.2666666667, + 0.0, + 0.2823529412, + 0.06666666666666667, + 0.2705882353, + 0.0, + 0.3019607843, + 0.07058823529411765, + 0.2823529412, + 0.0, + 0.3176470588, + 0.07450980392156863, + 0.2901960784, + 0.0, + 0.337254902, + 0.0784313725490196, + 0.3019607843, + 0.0, + 0.3568627451, + 0.08235294117647059, + 0.3098039216, + 0.0, + 0.3725490196, + 0.08627450980392157, + 0.3137254902, + 0.0, + 0.3921568627, + 0.09019607843137255, + 0.3215686275, + 0.0, + 0.4078431373, + 0.09411764705882353, + 0.3254901961, + 0.0, + 0.4274509804, + 0.09803921568627451, + 0.3333333333, + 0.0, + 0.4431372549, + 0.10196078431372549, + 0.3294117647, + 0.0, + 0.462745098, + 0.10588235294117647, + 0.337254902, + 0.0, + 0.4784313725, + 0.10980392156862745, + 0.3411764706, + 0.0, + 0.4980392157, + 0.11372549019607843, + 0.3450980392, + 0.0, + 0.5176470588, + 0.11764705882352942, + 0.337254902, + 0.0, + 0.5333333333, + 0.12156862745098039, + 0.3411764706, + 0.0, + 0.5529411765, + 0.12549019607843137, + 0.3411764706, + 0.0, + 0.568627451, + 0.12941176470588237, + 0.3411764706, + 0.0, + 0.5882352941, + 0.13333333333333333, + 0.3333333333, + 0.0, + 0.6039215686, + 0.13725490196078433, + 0.3294117647, + 0.0, + 0.6235294118, + 0.1411764705882353, + 0.3294117647, + 0.0, + 0.6392156863, + 0.1450980392156863, + 0.3294117647, + 0.0, + 0.6588235294, + 0.14901960784313725, + 0.3254901961, + 0.0, + 0.6784313725, + 0.15294117647058825, + 0.3098039216, + 0.0, + 0.6941176471, + 0.1568627450980392, + 0.3058823529, + 0.0, + 0.7137254902, + 0.1607843137254902, + 0.3019607843, + 0.0, + 0.7294117647, + 0.16470588235294117, + 0.2980392157, + 0.0, + 0.7490196078, + 0.16862745098039217, + 0.2784313725, + 0.0, + 0.7647058824, + 0.17254901960784313, + 0.2745098039, + 0.0, + 0.7843137255, + 0.17647058823529413, + 0.2666666667, + 0.0, + 0.8, + 0.1803921568627451, + 0.2588235294, + 0.0, + 0.8196078431, + 0.1843137254901961, + 0.2352941176, + 0.0, + 0.8392156863, + 0.18823529411764706, + 0.2274509804, + 0.0, + 0.8549019608, + 0.19215686274509805, + 0.2156862745, + 0.0, + 0.8745098039, + 0.19607843137254902, + 0.2078431373, + 0.0, + 0.8901960784, + 0.2, + 0.1803921569, + 0.0, + 0.9098039216, + 0.20392156862745098, + 0.168627451, + 0.0, + 0.9254901961, + 0.20784313725490197, + 0.1568627451, + 0.0, + 0.9450980392, + 0.21176470588235294, + 0.1411764706, + 0.0, + 0.9607843137, + 0.21568627450980393, + 0.1294117647, + 0.0, + 0.9803921569, + 0.2196078431372549, + 0.0980392157, + 0.0, + 1.0, + 0.2235294117647059, + 0.0823529412, + 0.0, + 1.0, + 0.22745098039215686, + 0.062745098, + 0.0, + 1.0, + 0.23137254901960785, + 0.0470588235, + 0.0, + 1.0, + 0.23529411764705885, + 0.0156862745, + 0.0, + 1.0, + 0.23921568627450984, + 0.0, + 0.0, + 1.0, + 0.24313725490196078, + 0.0, + 0.0156862745, + 1.0, + 0.24705882352941178, + 0.0, + 0.031372549, + 1.0, + 0.25098039215686274, + 0.0, + 0.062745098, + 1.0, + 0.2549019607843137, + 0.0, + 0.0823529412, + 1.0, + 0.25882352941176473, + 0.0, + 0.0980392157, + 1.0, + 0.2627450980392157, + 0.0, + 0.1137254902, + 1.0, + 0.26666666666666666, + 0.0, + 0.1490196078, + 1.0, + 0.27058823529411763, + 0.0, + 0.1647058824, + 1.0, + 0.27450980392156865, + 0.0, + 0.1803921569, + 1.0, + 0.2784313725490196, + 0.0, + 0.2, + 1.0, + 0.2823529411764706, + 0.0, + 0.2156862745, + 1.0, + 0.28627450980392155, + 0.0, + 0.2470588235, + 1.0, + 0.2901960784313726, + 0.0, + 0.262745098, + 1.0, + 0.29411764705882354, + 0.0, + 0.2823529412, + 1.0, + 0.2980392156862745, + 0.0, + 0.2980392157, + 1.0, + 0.30196078431372547, + 0.0, + 0.3294117647, + 1.0, + 0.3058823529411765, + 0.0, + 0.3490196078, + 1.0, + 0.30980392156862746, + 0.0, + 0.3647058824, + 1.0, + 0.3137254901960784, + 0.0, + 0.3803921569, + 1.0, + 0.3176470588235294, + 0.0, + 0.4156862745, + 1.0, + 0.3215686274509804, + 0.0, + 0.431372549, + 1.0, + 0.3254901960784314, + 0.0, + 0.4470588235, + 1.0, + 0.32941176470588235, + 0.0, + 0.4666666667, + 1.0, + 0.3333333333333333, + 0.0, + 0.4980392157, + 1.0, + 0.33725490196078434, + 0.0, + 0.5137254902, + 1.0, + 0.3411764705882353, + 0.0, + 0.5294117647, + 1.0, + 0.34509803921568627, + 0.0, + 0.5490196078, + 1.0, + 0.34901960784313724, + 0.0, + 0.5647058824, + 1.0, + 0.35294117647058826, + 0.0, + 0.5960784314, + 1.0, + 0.3568627450980392, + 0.0, + 0.6156862745, + 1.0, + 0.3607843137254902, + 0.0, + 0.631372549, + 1.0, + 0.36470588235294116, + 0.0, + 0.6470588235, + 1.0, + 0.3686274509803922, + 0.0, + 0.6823529412, + 1.0, + 0.37254901960784315, + 0.0, + 0.6980392157, + 1.0, + 0.3764705882352941, + 0.0, + 0.7137254902, + 1.0, + 0.3803921568627451, + 0.0, + 0.7333333333, + 1.0, + 0.3843137254901961, + 0.0, + 0.7647058824, + 1.0, + 0.38823529411764707, + 0.0, + 0.7803921569, + 1.0, + 0.39215686274509803, + 0.0, + 0.7960784314, + 1.0, + 0.396078431372549, + 0.0, + 0.8156862745, + 1.0, + 0.4, + 0.0, + 0.8470588235, + 1.0, + 0.403921568627451, + 0.0, + 0.862745098, + 1.0, + 0.40784313725490196, + 0.0, + 0.8823529412, + 1.0, + 0.4117647058823529, + 0.0, + 0.8980392157, + 1.0, + 0.41568627450980394, + 0.0, + 0.9137254902, + 1.0, + 0.4196078431372549, + 0.0, + 0.9490196078, + 1.0, + 0.4235294117647059, + 0.0, + 0.9647058824, + 1.0, + 0.42745098039215684, + 0.0, + 0.9803921569, + 1.0, + 0.43137254901960786, + 0.0, + 1.0, + 1.0, + 0.43529411764705883, + 0.0, + 1.0, + 0.9647058824, + 0.4392156862745098, + 0.0, + 1.0, + 0.9490196078, + 0.44313725490196076, + 0.0, + 1.0, + 0.9333333333, + 0.4470588235294118, + 0.0, + 1.0, + 0.9137254902, + 0.45098039215686275, + 0.0, + 1.0, + 0.8823529412, + 0.4549019607843137, + 0.0, + 1.0, + 0.862745098, + 0.4588235294117647, + 0.0, + 1.0, + 0.8470588235, + 0.4627450980392157, + 0.0, + 1.0, + 0.831372549, + 0.4666666666666667, + 0.0, + 1.0, + 0.7960784314, + 0.4705882352941177, + 0.0, + 1.0, + 0.7803921569, + 0.4745098039215686, + 0.0, + 1.0, + 0.7647058824, + 0.4784313725490197, + 0.0, + 1.0, + 0.7490196078, + 0.48235294117647065, + 0.0, + 1.0, + 0.7333333333, + 0.48627450980392156, + 0.0, + 1.0, + 0.6980392157, + 0.49019607843137253, + 0.0, + 1.0, + 0.6823529412, + 0.49411764705882355, + 0.0, + 1.0, + 0.6666666667, + 0.4980392156862745, + 0.0, + 1.0, + 0.6470588235, + 0.5019607843137255, + 0.0, + 1.0, + 0.6156862745, + 0.5058823529411764, + 0.0, + 1.0, + 0.5960784314, + 0.5098039215686274, + 0.0, + 1.0, + 0.5803921569, + 0.5137254901960784, + 0.0, + 1.0, + 0.5647058824, + 0.5176470588235295, + 0.0, + 1.0, + 0.5294117647, + 0.5215686274509804, + 0.0, + 1.0, + 0.5137254902, + 0.5254901960784314, + 0.0, + 1.0, + 0.4980392157, + 0.5294117647058824, + 0.0, + 1.0, + 0.4823529412, + 0.5333333333333333, + 0.0, + 1.0, + 0.4470588235, + 0.5372549019607843, + 0.0, + 1.0, + 0.431372549, + 0.5411764705882353, + 0.0, + 1.0, + 0.4156862745, + 0.5450980392156862, + 0.0, + 1.0, + 0.4, + 0.5490196078431373, + 0.0, + 1.0, + 0.3803921569, + 0.5529411764705883, + 0.0, + 1.0, + 0.3490196078, + 0.5568627450980392, + 0.0, + 1.0, + 0.3294117647, + 0.5607843137254902, + 0.0, + 1.0, + 0.3137254902, + 0.5647058823529412, + 0.0, + 1.0, + 0.2980392157, + 0.5686274509803921, + 0.0, + 1.0, + 0.262745098, + 0.5725490196078431, + 0.0, + 1.0, + 0.2470588235, + 0.5764705882352941, + 0.0, + 1.0, + 0.231372549, + 0.5803921568627451, + 0.0, + 1.0, + 0.2156862745, + 0.5843137254901961, + 0.0, + 1.0, + 0.1803921569, + 0.5882352941176471, + 0.0, + 1.0, + 0.1647058824, + 0.592156862745098, + 0.0, + 1.0, + 0.1490196078, + 0.596078431372549, + 0.0, + 1.0, + 0.1333333333, + 0.6, + 0.0, + 1.0, + 0.0980392157, + 0.6039215686274509, + 0.0, + 1.0, + 0.0823529412, + 0.6078431372549019, + 0.0, + 1.0, + 0.062745098, + 0.611764705882353, + 0.0, + 1.0, + 0.0470588235, + 0.615686274509804, + 0.0, + 1.0, + 0.031372549, + 0.6196078431372549, + 0.0, + 1.0, + 0.0, + 0.6235294117647059, + 0.0156862745, + 1.0, + 0.0, + 0.6274509803921569, + 0.031372549, + 1.0, + 0.0, + 0.6313725490196078, + 0.0470588235, + 1.0, + 0.0, + 0.6352941176470588, + 0.0823529412, + 1.0, + 0.0, + 0.6392156862745098, + 0.0980392157, + 1.0, + 0.0, + 0.6431372549019608, + 0.1137254902, + 1.0, + 0.0, + 0.6470588235294118, + 0.1294117647, + 1.0, + 0.0, + 0.6509803921568628, + 0.1647058824, + 1.0, + 0.0, + 0.6549019607843137, + 0.1803921569, + 1.0, + 0.0, + 0.6588235294117647, + 0.2, + 1.0, + 0.0, + 0.6627450980392157, + 0.2156862745, + 1.0, + 0.0, + 0.6666666666666666, + 0.2470588235, + 1.0, + 0.0, + 0.6705882352941176, + 0.262745098, + 1.0, + 0.0, + 0.6745098039215687, + 0.2823529412, + 1.0, + 0.0, + 0.6784313725490196, + 0.2980392157, + 1.0, + 0.0, + 0.6823529411764706, + 0.3137254902, + 1.0, + 0.0, + 0.6862745098039216, + 0.3490196078, + 1.0, + 0.0, + 0.6901960784313725, + 0.3647058824, + 1.0, + 0.0, + 0.6941176470588235, + 0.3803921569, + 1.0, + 0.0, + 0.6980392156862745, + 0.3960784314, + 1.0, + 0.0, + 0.7019607843137254, + 0.431372549, + 1.0, + 0.0, + 0.7058823529411765, + 0.4470588235, + 1.0, + 0.0, + 0.7098039215686275, + 0.4666666667, + 1.0, + 0.0, + 0.7137254901960784, + 0.4823529412, + 1.0, + 0.0, + 0.7176470588235294, + 0.5137254902, + 1.0, + 0.0, + 0.7215686274509804, + 0.5294117647, + 1.0, + 0.0, + 0.7254901960784313, + 0.5490196078, + 1.0, + 0.0, + 0.7294117647058823, + 0.5647058824, + 1.0, + 0.0, + 0.7333333333333333, + 0.6, + 1.0, + 0.0, + 0.7372549019607844, + 0.6156862745, + 1.0, + 0.0, + 0.7411764705882353, + 0.631372549, + 1.0, + 0.0, + 0.7450980392156863, + 0.6470588235, + 1.0, + 0.0, + 0.7490196078431373, + 0.662745098, + 1.0, + 0.0, + 0.7529411764705882, + 0.6980392157, + 1.0, + 0.0, + 0.7568627450980392, + 0.7137254902, + 1.0, + 0.0, + 0.7607843137254902, + 0.7333333333, + 1.0, + 0.0, + 0.7647058823529411, + 0.7490196078, + 1.0, + 0.0, + 0.7686274509803922, + 0.7803921569, + 1.0, + 0.0, + 0.7725490196078432, + 0.7960784314, + 1.0, + 0.0, + 0.7764705882352941, + 0.8156862745, + 1.0, + 0.0, + 0.7803921568627451, + 0.831372549, + 1.0, + 0.0, + 0.7843137254901961, + 0.8666666667, + 1.0, + 0.0, + 0.788235294117647, + 0.8823529412, + 1.0, + 0.0, + 0.792156862745098, + 0.8980392157, + 1.0, + 0.0, + 0.796078431372549, + 0.9137254902, + 1.0, + 0.0, + 0.8, + 0.9490196078, + 1.0, + 0.0, + 0.803921568627451, + 0.9647058824, + 1.0, + 0.0, + 0.807843137254902, + 0.9803921569, + 1.0, + 0.0, + 0.8117647058823529, + 1.0, + 1.0, + 0.0, + 0.8156862745098039, + 1.0, + 0.9803921569, + 0.0, + 0.8196078431372549, + 1.0, + 0.9490196078, + 0.0, + 0.8235294117647058, + 1.0, + 0.9333333333, + 0.0, + 0.8274509803921568, + 1.0, + 0.9137254902, + 0.0, + 0.8313725490196079, + 1.0, + 0.8980392157, + 0.0, + 0.8352941176470589, + 1.0, + 0.8666666667, + 0.0, + 0.8392156862745098, + 1.0, + 0.8470588235, + 0.0, + 0.8431372549019608, + 1.0, + 0.831372549, + 0.0, + 0.8470588235294118, + 1.0, + 0.8156862745, + 0.0, + 0.8509803921568627, + 1.0, + 0.7803921569, + 0.0, + 0.8549019607843137, + 1.0, + 0.7647058824, + 0.0, + 0.8588235294117647, + 1.0, + 0.7490196078, + 0.0, + 0.8627450980392157, + 1.0, + 0.7333333333, + 0.0, + 0.8666666666666667, + 1.0, + 0.6980392157, + 0.0, + 0.8705882352941177, + 1.0, + 0.6823529412, + 0.0, + 0.8745098039215686, + 1.0, + 0.6666666667, + 0.0, + 0.8784313725490196, + 1.0, + 0.6470588235, + 0.0, + 0.8823529411764706, + 1.0, + 0.631372549, + 0.0, + 0.8862745098039215, + 1.0, + 0.6, + 0.0, + 0.8901960784313725, + 1.0, + 0.5803921569, + 0.0, + 0.8941176470588236, + 1.0, + 0.5647058824, + 0.0, + 0.8980392156862745, + 1.0, + 0.5490196078, + 0.0, + 0.9019607843137255, + 1.0, + 0.5137254902, + 0.0, + 0.9058823529411765, + 1.0, + 0.4980392157, + 0.0, + 0.9098039215686274, + 1.0, + 0.4823529412, + 0.0, + 0.9137254901960784, + 1.0, + 0.4666666667, + 0.0, + 0.9176470588235294, + 1.0, + 0.431372549, + 0.0, + 0.9215686274509803, + 1.0, + 0.4156862745, + 0.0, + 0.9254901960784314, + 1.0, + 0.4, + 0.0, + 0.9294117647058824, + 1.0, + 0.3803921569, + 0.0, + 0.9333333333333333, + 1.0, + 0.3490196078, + 0.0, + 0.9372549019607843, + 1.0, + 0.3333333333, + 0.0, + 0.9411764705882354, + 1.0, + 0.3137254902, + 0.0, + 0.9450980392156864, + 1.0, + 0.2980392157, + 0.0, + 0.9490196078431372, + 1.0, + 0.2823529412, + 0.0, + 0.9529411764705882, + 1.0, + 0.2470588235, + 0.0, + 0.9568627450980394, + 1.0, + 0.231372549, + 0.0, + 0.9607843137254903, + 1.0, + 0.2156862745, + 0.0, + 0.9647058823529413, + 1.0, + 0.2, + 0.0, + 0.9686274509803922, + 1.0, + 0.1647058824, + 0.0, + 0.9725490196078431, + 1.0, + 0.1490196078, + 0.0, + 0.9764705882352941, + 1.0, + 0.1333333333, + 0.0, + 0.9803921568627451, + 1.0, + 0.1137254902, + 0.0, + 0.984313725490196, + 1.0, + 0.0823529412, + 0.0, + 0.9882352941176471, + 1.0, + 0.0666666667, + 0.0, + 0.9921568627450981, + 1.0, + 0.0470588235, + 0.0, + 0.996078431372549, + 1.0, + 0.031372549, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + ], + }, + { + ColorSpace: 'RGB', + Name: 'suv', + RGBPoints: [ + 0.0, + 1.0, + 1.0, + 1.0, + 0.00392156862745098, + 1.0, + 1.0, + 1.0, + 0.00784313725490196, + 1.0, + 1.0, + 1.0, + 0.011764705882352941, + 1.0, + 1.0, + 1.0, + 0.01568627450980392, + 1.0, + 1.0, + 1.0, + 0.0196078431372549, + 1.0, + 1.0, + 1.0, + 0.023529411764705882, + 1.0, + 1.0, + 1.0, + 0.027450980392156862, + 1.0, + 1.0, + 1.0, + 0.03137254901960784, + 1.0, + 1.0, + 1.0, + 0.03529411764705882, + 1.0, + 1.0, + 1.0, + 0.0392156862745098, + 1.0, + 1.0, + 1.0, + 0.043137254901960784, + 1.0, + 1.0, + 1.0, + 0.047058823529411764, + 1.0, + 1.0, + 1.0, + 0.050980392156862744, + 1.0, + 1.0, + 1.0, + 0.054901960784313725, + 1.0, + 1.0, + 1.0, + 0.05882352941176471, + 1.0, + 1.0, + 1.0, + 0.06274509803921569, + 1.0, + 1.0, + 1.0, + 0.06666666666666667, + 1.0, + 1.0, + 1.0, + 0.07058823529411765, + 1.0, + 1.0, + 1.0, + 0.07450980392156863, + 1.0, + 1.0, + 1.0, + 0.0784313725490196, + 1.0, + 1.0, + 1.0, + 0.08235294117647059, + 1.0, + 1.0, + 1.0, + 0.08627450980392157, + 1.0, + 1.0, + 1.0, + 0.09019607843137255, + 1.0, + 1.0, + 1.0, + 0.09411764705882353, + 1.0, + 1.0, + 1.0, + 0.09803921568627451, + 1.0, + 1.0, + 1.0, + 0.10196078431372549, + 0.737254902, + 0.737254902, + 0.737254902, + 0.10588235294117647, + 0.737254902, + 0.737254902, + 0.737254902, + 0.10980392156862745, + 0.737254902, + 0.737254902, + 0.737254902, + 0.11372549019607843, + 0.737254902, + 0.737254902, + 0.737254902, + 0.11764705882352942, + 0.737254902, + 0.737254902, + 0.737254902, + 0.12156862745098039, + 0.737254902, + 0.737254902, + 0.737254902, + 0.12549019607843137, + 0.737254902, + 0.737254902, + 0.737254902, + 0.12941176470588237, + 0.737254902, + 0.737254902, + 0.737254902, + 0.13333333333333333, + 0.737254902, + 0.737254902, + 0.737254902, + 0.13725490196078433, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1411764705882353, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1450980392156863, + 0.737254902, + 0.737254902, + 0.737254902, + 0.14901960784313725, + 0.737254902, + 0.737254902, + 0.737254902, + 0.15294117647058825, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1568627450980392, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1607843137254902, + 0.737254902, + 0.737254902, + 0.737254902, + 0.16470588235294117, + 0.737254902, + 0.737254902, + 0.737254902, + 0.16862745098039217, + 0.737254902, + 0.737254902, + 0.737254902, + 0.17254901960784313, + 0.737254902, + 0.737254902, + 0.737254902, + 0.17647058823529413, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1803921568627451, + 0.737254902, + 0.737254902, + 0.737254902, + 0.1843137254901961, + 0.737254902, + 0.737254902, + 0.737254902, + 0.18823529411764706, + 0.737254902, + 0.737254902, + 0.737254902, + 0.19215686274509805, + 0.737254902, + 0.737254902, + 0.737254902, + 0.19607843137254902, + 0.737254902, + 0.737254902, + 0.737254902, + 0.2, + 0.737254902, + 0.737254902, + 0.737254902, + 0.20392156862745098, + 0.431372549, + 0.0, + 0.568627451, + 0.20784313725490197, + 0.431372549, + 0.0, + 0.568627451, + 0.21176470588235294, + 0.431372549, + 0.0, + 0.568627451, + 0.21568627450980393, + 0.431372549, + 0.0, + 0.568627451, + 0.2196078431372549, + 0.431372549, + 0.0, + 0.568627451, + 0.2235294117647059, + 0.431372549, + 0.0, + 0.568627451, + 0.22745098039215686, + 0.431372549, + 0.0, + 0.568627451, + 0.23137254901960785, + 0.431372549, + 0.0, + 0.568627451, + 0.23529411764705885, + 0.431372549, + 0.0, + 0.568627451, + 0.23921568627450984, + 0.431372549, + 0.0, + 0.568627451, + 0.24313725490196078, + 0.431372549, + 0.0, + 0.568627451, + 0.24705882352941178, + 0.431372549, + 0.0, + 0.568627451, + 0.25098039215686274, + 0.431372549, + 0.0, + 0.568627451, + 0.2549019607843137, + 0.431372549, + 0.0, + 0.568627451, + 0.25882352941176473, + 0.431372549, + 0.0, + 0.568627451, + 0.2627450980392157, + 0.431372549, + 0.0, + 0.568627451, + 0.26666666666666666, + 0.431372549, + 0.0, + 0.568627451, + 0.27058823529411763, + 0.431372549, + 0.0, + 0.568627451, + 0.27450980392156865, + 0.431372549, + 0.0, + 0.568627451, + 0.2784313725490196, + 0.431372549, + 0.0, + 0.568627451, + 0.2823529411764706, + 0.431372549, + 0.0, + 0.568627451, + 0.28627450980392155, + 0.431372549, + 0.0, + 0.568627451, + 0.2901960784313726, + 0.431372549, + 0.0, + 0.568627451, + 0.29411764705882354, + 0.431372549, + 0.0, + 0.568627451, + 0.2980392156862745, + 0.431372549, + 0.0, + 0.568627451, + 0.30196078431372547, + 0.431372549, + 0.0, + 0.568627451, + 0.3058823529411765, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.30980392156862746, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3137254901960784, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3176470588235294, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3215686274509804, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3254901960784314, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.32941176470588235, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3333333333333333, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.33725490196078434, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3411764705882353, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.34509803921568627, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.34901960784313724, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.35294117647058826, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3568627450980392, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3607843137254902, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.36470588235294116, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3686274509803922, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.37254901960784315, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3764705882352941, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3803921568627451, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.3843137254901961, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.38823529411764707, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.39215686274509803, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.396078431372549, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.4, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.403921568627451, + 0.2509803922, + 0.3333333333, + 0.6509803922, + 0.40784313725490196, + 0.0, + 0.8, + 1.0, + 0.4117647058823529, + 0.0, + 0.8, + 1.0, + 0.41568627450980394, + 0.0, + 0.8, + 1.0, + 0.4196078431372549, + 0.0, + 0.8, + 1.0, + 0.4235294117647059, + 0.0, + 0.8, + 1.0, + 0.42745098039215684, + 0.0, + 0.8, + 1.0, + 0.43137254901960786, + 0.0, + 0.8, + 1.0, + 0.43529411764705883, + 0.0, + 0.8, + 1.0, + 0.4392156862745098, + 0.0, + 0.8, + 1.0, + 0.44313725490196076, + 0.0, + 0.8, + 1.0, + 0.4470588235294118, + 0.0, + 0.8, + 1.0, + 0.45098039215686275, + 0.0, + 0.8, + 1.0, + 0.4549019607843137, + 0.0, + 0.8, + 1.0, + 0.4588235294117647, + 0.0, + 0.8, + 1.0, + 0.4627450980392157, + 0.0, + 0.8, + 1.0, + 0.4666666666666667, + 0.0, + 0.8, + 1.0, + 0.4705882352941177, + 0.0, + 0.8, + 1.0, + 0.4745098039215686, + 0.0, + 0.8, + 1.0, + 0.4784313725490197, + 0.0, + 0.8, + 1.0, + 0.48235294117647065, + 0.0, + 0.8, + 1.0, + 0.48627450980392156, + 0.0, + 0.8, + 1.0, + 0.49019607843137253, + 0.0, + 0.8, + 1.0, + 0.49411764705882355, + 0.0, + 0.8, + 1.0, + 0.4980392156862745, + 0.0, + 0.8, + 1.0, + 0.5019607843137255, + 0.0, + 0.8, + 1.0, + 0.5058823529411764, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5098039215686274, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5137254901960784, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5176470588235295, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5215686274509804, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5254901960784314, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5294117647058824, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5333333333333333, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5372549019607843, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5411764705882353, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5450980392156862, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5490196078431373, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5529411764705883, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5568627450980392, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5607843137254902, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5647058823529412, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5686274509803921, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5725490196078431, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5764705882352941, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5803921568627451, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5843137254901961, + 0.0, + 0.6666666667, + 0.5333333333, + 0.5882352941176471, + 0.0, + 0.6666666667, + 0.5333333333, + 0.592156862745098, + 0.0, + 0.6666666667, + 0.5333333333, + 0.596078431372549, + 0.0, + 0.6666666667, + 0.5333333333, + 0.6, + 0.0, + 0.6666666667, + 0.5333333333, + 0.6039215686274509, + 0.0, + 0.6666666667, + 0.5333333333, + 0.6078431372549019, + 0.4, + 1.0, + 0.4, + 0.611764705882353, + 0.4, + 1.0, + 0.4, + 0.615686274509804, + 0.4, + 1.0, + 0.4, + 0.6196078431372549, + 0.4, + 1.0, + 0.4, + 0.6235294117647059, + 0.4, + 1.0, + 0.4, + 0.6274509803921569, + 0.4, + 1.0, + 0.4, + 0.6313725490196078, + 0.4, + 1.0, + 0.4, + 0.6352941176470588, + 0.4, + 1.0, + 0.4, + 0.6392156862745098, + 0.4, + 1.0, + 0.4, + 0.6431372549019608, + 0.4, + 1.0, + 0.4, + 0.6470588235294118, + 0.4, + 1.0, + 0.4, + 0.6509803921568628, + 0.4, + 1.0, + 0.4, + 0.6549019607843137, + 0.4, + 1.0, + 0.4, + 0.6588235294117647, + 0.4, + 1.0, + 0.4, + 0.6627450980392157, + 0.4, + 1.0, + 0.4, + 0.6666666666666666, + 0.4, + 1.0, + 0.4, + 0.6705882352941176, + 0.4, + 1.0, + 0.4, + 0.6745098039215687, + 0.4, + 1.0, + 0.4, + 0.6784313725490196, + 0.4, + 1.0, + 0.4, + 0.6823529411764706, + 0.4, + 1.0, + 0.4, + 0.6862745098039216, + 0.4, + 1.0, + 0.4, + 0.6901960784313725, + 0.4, + 1.0, + 0.4, + 0.6941176470588235, + 0.4, + 1.0, + 0.4, + 0.6980392156862745, + 0.4, + 1.0, + 0.4, + 0.7019607843137254, + 0.4, + 1.0, + 0.4, + 0.7058823529411765, + 1.0, + 0.9490196078, + 0.0, + 0.7098039215686275, + 1.0, + 0.9490196078, + 0.0, + 0.7137254901960784, + 1.0, + 0.9490196078, + 0.0, + 0.7176470588235294, + 1.0, + 0.9490196078, + 0.0, + 0.7215686274509804, + 1.0, + 0.9490196078, + 0.0, + 0.7254901960784313, + 1.0, + 0.9490196078, + 0.0, + 0.7294117647058823, + 1.0, + 0.9490196078, + 0.0, + 0.7333333333333333, + 1.0, + 0.9490196078, + 0.0, + 0.7372549019607844, + 1.0, + 0.9490196078, + 0.0, + 0.7411764705882353, + 1.0, + 0.9490196078, + 0.0, + 0.7450980392156863, + 1.0, + 0.9490196078, + 0.0, + 0.7490196078431373, + 1.0, + 0.9490196078, + 0.0, + 0.7529411764705882, + 1.0, + 0.9490196078, + 0.0, + 0.7568627450980392, + 1.0, + 0.9490196078, + 0.0, + 0.7607843137254902, + 1.0, + 0.9490196078, + 0.0, + 0.7647058823529411, + 1.0, + 0.9490196078, + 0.0, + 0.7686274509803922, + 1.0, + 0.9490196078, + 0.0, + 0.7725490196078432, + 1.0, + 0.9490196078, + 0.0, + 0.7764705882352941, + 1.0, + 0.9490196078, + 0.0, + 0.7803921568627451, + 1.0, + 0.9490196078, + 0.0, + 0.7843137254901961, + 1.0, + 0.9490196078, + 0.0, + 0.788235294117647, + 1.0, + 0.9490196078, + 0.0, + 0.792156862745098, + 1.0, + 0.9490196078, + 0.0, + 0.796078431372549, + 1.0, + 0.9490196078, + 0.0, + 0.8, + 1.0, + 0.9490196078, + 0.0, + 0.803921568627451, + 1.0, + 0.9490196078, + 0.0, + 0.807843137254902, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8117647058823529, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8156862745098039, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8196078431372549, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8235294117647058, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8274509803921568, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8313725490196079, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8352941176470589, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8392156862745098, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8431372549019608, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8470588235294118, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8509803921568627, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8549019607843137, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8588235294117647, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8627450980392157, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8666666666666667, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8705882352941177, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8745098039215686, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8784313725490196, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8823529411764706, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8862745098039215, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8901960784313725, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8941176470588236, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.8980392156862745, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.9019607843137255, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.9058823529411765, + 0.9490196078, + 0.6509803922, + 0.2509803922, + 0.9098039215686274, + 1.0, + 0.0, + 0.0, + 0.9137254901960784, + 1.0, + 0.0, + 0.0, + 0.9176470588235294, + 1.0, + 0.0, + 0.0, + 0.9215686274509803, + 1.0, + 0.0, + 0.0, + 0.9254901960784314, + 1.0, + 0.0, + 0.0, + 0.9294117647058824, + 1.0, + 0.0, + 0.0, + 0.9333333333333333, + 1.0, + 0.0, + 0.0, + 0.9372549019607843, + 1.0, + 0.0, + 0.0, + 0.9411764705882354, + 1.0, + 0.0, + 0.0, + 0.9450980392156864, + 1.0, + 0.0, + 0.0, + 0.9490196078431372, + 1.0, + 0.0, + 0.0, + 0.9529411764705882, + 1.0, + 0.0, + 0.0, + 0.9568627450980394, + 1.0, + 0.0, + 0.0, + 0.9607843137254903, + 1.0, + 0.0, + 0.0, + 0.9647058823529413, + 1.0, + 0.0, + 0.0, + 0.9686274509803922, + 1.0, + 0.0, + 0.0, + 0.9725490196078431, + 1.0, + 0.0, + 0.0, + 0.9764705882352941, + 1.0, + 0.0, + 0.0, + 0.9803921568627451, + 1.0, + 0.0, + 0.0, + 0.984313725490196, + 1.0, + 0.0, + 0.0, + 0.9882352941176471, + 1.0, + 0.0, + 0.0, + 0.9921568627450981, + 1.0, + 0.0, + 0.0, + 0.996078431372549, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + ], + }, + { + ColorSpace: 'RGB', + Name: 'ge_256', + RGBPoints: [ + 0.0, + 0.0039215686, + 0.0078431373, + 0.0078431373, + 0.00392156862745098, + 0.0039215686, + 0.0078431373, + 0.0078431373, + 0.00784313725490196, + 0.0039215686, + 0.0078431373, + 0.0117647059, + 0.011764705882352941, + 0.0039215686, + 0.0117647059, + 0.0156862745, + 0.01568627450980392, + 0.0039215686, + 0.0117647059, + 0.0196078431, + 0.0196078431372549, + 0.0039215686, + 0.0156862745, + 0.0235294118, + 0.023529411764705882, + 0.0039215686, + 0.0156862745, + 0.0274509804, + 0.027450980392156862, + 0.0039215686, + 0.0196078431, + 0.031372549, + 0.03137254901960784, + 0.0039215686, + 0.0196078431, + 0.0352941176, + 0.03529411764705882, + 0.0039215686, + 0.0235294118, + 0.0392156863, + 0.0392156862745098, + 0.0039215686, + 0.0235294118, + 0.0431372549, + 0.043137254901960784, + 0.0039215686, + 0.0274509804, + 0.0470588235, + 0.047058823529411764, + 0.0039215686, + 0.0274509804, + 0.0509803922, + 0.050980392156862744, + 0.0039215686, + 0.031372549, + 0.0549019608, + 0.054901960784313725, + 0.0039215686, + 0.031372549, + 0.0588235294, + 0.05882352941176471, + 0.0039215686, + 0.0352941176, + 0.062745098, + 0.06274509803921569, + 0.0039215686, + 0.0352941176, + 0.0666666667, + 0.06666666666666667, + 0.0039215686, + 0.0392156863, + 0.0705882353, + 0.07058823529411765, + 0.0039215686, + 0.0392156863, + 0.0745098039, + 0.07450980392156863, + 0.0039215686, + 0.0431372549, + 0.0784313725, + 0.0784313725490196, + 0.0039215686, + 0.0431372549, + 0.0823529412, + 0.08235294117647059, + 0.0039215686, + 0.0470588235, + 0.0862745098, + 0.08627450980392157, + 0.0039215686, + 0.0470588235, + 0.0901960784, + 0.09019607843137255, + 0.0039215686, + 0.0509803922, + 0.0941176471, + 0.09411764705882353, + 0.0039215686, + 0.0509803922, + 0.0980392157, + 0.09803921568627451, + 0.0039215686, + 0.0549019608, + 0.1019607843, + 0.10196078431372549, + 0.0039215686, + 0.0549019608, + 0.1058823529, + 0.10588235294117647, + 0.0039215686, + 0.0588235294, + 0.1098039216, + 0.10980392156862745, + 0.0039215686, + 0.0588235294, + 0.1137254902, + 0.11372549019607843, + 0.0039215686, + 0.062745098, + 0.1176470588, + 0.11764705882352942, + 0.0039215686, + 0.062745098, + 0.1215686275, + 0.12156862745098039, + 0.0039215686, + 0.0666666667, + 0.1254901961, + 0.12549019607843137, + 0.0039215686, + 0.0666666667, + 0.1294117647, + 0.12941176470588237, + 0.0039215686, + 0.0705882353, + 0.1333333333, + 0.13333333333333333, + 0.0039215686, + 0.0705882353, + 0.137254902, + 0.13725490196078433, + 0.0039215686, + 0.0745098039, + 0.1411764706, + 0.1411764705882353, + 0.0039215686, + 0.0745098039, + 0.1450980392, + 0.1450980392156863, + 0.0039215686, + 0.0784313725, + 0.1490196078, + 0.14901960784313725, + 0.0039215686, + 0.0784313725, + 0.1529411765, + 0.15294117647058825, + 0.0039215686, + 0.0823529412, + 0.1568627451, + 0.1568627450980392, + 0.0039215686, + 0.0823529412, + 0.1607843137, + 0.1607843137254902, + 0.0039215686, + 0.0862745098, + 0.1647058824, + 0.16470588235294117, + 0.0039215686, + 0.0862745098, + 0.168627451, + 0.16862745098039217, + 0.0039215686, + 0.0901960784, + 0.1725490196, + 0.17254901960784313, + 0.0039215686, + 0.0901960784, + 0.1764705882, + 0.17647058823529413, + 0.0039215686, + 0.0941176471, + 0.1803921569, + 0.1803921568627451, + 0.0039215686, + 0.0941176471, + 0.1843137255, + 0.1843137254901961, + 0.0039215686, + 0.0980392157, + 0.1882352941, + 0.18823529411764706, + 0.0039215686, + 0.0980392157, + 0.1921568627, + 0.19215686274509805, + 0.0039215686, + 0.1019607843, + 0.1960784314, + 0.19607843137254902, + 0.0039215686, + 0.1019607843, + 0.2, + 0.2, + 0.0039215686, + 0.1058823529, + 0.2039215686, + 0.20392156862745098, + 0.0039215686, + 0.1058823529, + 0.2078431373, + 0.20784313725490197, + 0.0039215686, + 0.1098039216, + 0.2117647059, + 0.21176470588235294, + 0.0039215686, + 0.1098039216, + 0.2156862745, + 0.21568627450980393, + 0.0039215686, + 0.1137254902, + 0.2196078431, + 0.2196078431372549, + 0.0039215686, + 0.1137254902, + 0.2235294118, + 0.2235294117647059, + 0.0039215686, + 0.1176470588, + 0.2274509804, + 0.22745098039215686, + 0.0039215686, + 0.1176470588, + 0.231372549, + 0.23137254901960785, + 0.0039215686, + 0.1215686275, + 0.2352941176, + 0.23529411764705885, + 0.0039215686, + 0.1215686275, + 0.2392156863, + 0.23921568627450984, + 0.0039215686, + 0.1254901961, + 0.2431372549, + 0.24313725490196078, + 0.0039215686, + 0.1254901961, + 0.2470588235, + 0.24705882352941178, + 0.0039215686, + 0.1294117647, + 0.2509803922, + 0.25098039215686274, + 0.0039215686, + 0.1294117647, + 0.2509803922, + 0.2549019607843137, + 0.0078431373, + 0.1254901961, + 0.2549019608, + 0.25882352941176473, + 0.0156862745, + 0.1254901961, + 0.2588235294, + 0.2627450980392157, + 0.0235294118, + 0.1215686275, + 0.262745098, + 0.26666666666666666, + 0.031372549, + 0.1215686275, + 0.2666666667, + 0.27058823529411763, + 0.0392156863, + 0.1176470588, + 0.2705882353, + 0.27450980392156865, + 0.0470588235, + 0.1176470588, + 0.2745098039, + 0.2784313725490196, + 0.0549019608, + 0.1137254902, + 0.2784313725, + 0.2823529411764706, + 0.062745098, + 0.1137254902, + 0.2823529412, + 0.28627450980392155, + 0.0705882353, + 0.1098039216, + 0.2862745098, + 0.2901960784313726, + 0.0784313725, + 0.1098039216, + 0.2901960784, + 0.29411764705882354, + 0.0862745098, + 0.1058823529, + 0.2941176471, + 0.2980392156862745, + 0.0941176471, + 0.1058823529, + 0.2980392157, + 0.30196078431372547, + 0.1019607843, + 0.1019607843, + 0.3019607843, + 0.3058823529411765, + 0.1098039216, + 0.1019607843, + 0.3058823529, + 0.30980392156862746, + 0.1176470588, + 0.0980392157, + 0.3098039216, + 0.3137254901960784, + 0.1254901961, + 0.0980392157, + 0.3137254902, + 0.3176470588235294, + 0.1333333333, + 0.0941176471, + 0.3176470588, + 0.3215686274509804, + 0.1411764706, + 0.0941176471, + 0.3215686275, + 0.3254901960784314, + 0.1490196078, + 0.0901960784, + 0.3254901961, + 0.32941176470588235, + 0.1568627451, + 0.0901960784, + 0.3294117647, + 0.3333333333333333, + 0.1647058824, + 0.0862745098, + 0.3333333333, + 0.33725490196078434, + 0.1725490196, + 0.0862745098, + 0.337254902, + 0.3411764705882353, + 0.1803921569, + 0.0823529412, + 0.3411764706, + 0.34509803921568627, + 0.1882352941, + 0.0823529412, + 0.3450980392, + 0.34901960784313724, + 0.1960784314, + 0.0784313725, + 0.3490196078, + 0.35294117647058826, + 0.2039215686, + 0.0784313725, + 0.3529411765, + 0.3568627450980392, + 0.2117647059, + 0.0745098039, + 0.3568627451, + 0.3607843137254902, + 0.2196078431, + 0.0745098039, + 0.3607843137, + 0.36470588235294116, + 0.2274509804, + 0.0705882353, + 0.3647058824, + 0.3686274509803922, + 0.2352941176, + 0.0705882353, + 0.368627451, + 0.37254901960784315, + 0.2431372549, + 0.0666666667, + 0.3725490196, + 0.3764705882352941, + 0.2509803922, + 0.0666666667, + 0.3764705882, + 0.3803921568627451, + 0.2549019608, + 0.062745098, + 0.3803921569, + 0.3843137254901961, + 0.262745098, + 0.062745098, + 0.3843137255, + 0.38823529411764707, + 0.2705882353, + 0.0588235294, + 0.3882352941, + 0.39215686274509803, + 0.2784313725, + 0.0588235294, + 0.3921568627, + 0.396078431372549, + 0.2862745098, + 0.0549019608, + 0.3960784314, + 0.4, + 0.2941176471, + 0.0549019608, + 0.4, + 0.403921568627451, + 0.3019607843, + 0.0509803922, + 0.4039215686, + 0.40784313725490196, + 0.3098039216, + 0.0509803922, + 0.4078431373, + 0.4117647058823529, + 0.3176470588, + 0.0470588235, + 0.4117647059, + 0.41568627450980394, + 0.3254901961, + 0.0470588235, + 0.4156862745, + 0.4196078431372549, + 0.3333333333, + 0.0431372549, + 0.4196078431, + 0.4235294117647059, + 0.3411764706, + 0.0431372549, + 0.4235294118, + 0.42745098039215684, + 0.3490196078, + 0.0392156863, + 0.4274509804, + 0.43137254901960786, + 0.3568627451, + 0.0392156863, + 0.431372549, + 0.43529411764705883, + 0.3647058824, + 0.0352941176, + 0.4352941176, + 0.4392156862745098, + 0.3725490196, + 0.0352941176, + 0.4392156863, + 0.44313725490196076, + 0.3803921569, + 0.031372549, + 0.4431372549, + 0.4470588235294118, + 0.3882352941, + 0.031372549, + 0.4470588235, + 0.45098039215686275, + 0.3960784314, + 0.0274509804, + 0.4509803922, + 0.4549019607843137, + 0.4039215686, + 0.0274509804, + 0.4549019608, + 0.4588235294117647, + 0.4117647059, + 0.0235294118, + 0.4588235294, + 0.4627450980392157, + 0.4196078431, + 0.0235294118, + 0.462745098, + 0.4666666666666667, + 0.4274509804, + 0.0196078431, + 0.4666666667, + 0.4705882352941177, + 0.4352941176, + 0.0196078431, + 0.4705882353, + 0.4745098039215686, + 0.4431372549, + 0.0156862745, + 0.4745098039, + 0.4784313725490197, + 0.4509803922, + 0.0156862745, + 0.4784313725, + 0.48235294117647065, + 0.4588235294, + 0.0117647059, + 0.4823529412, + 0.48627450980392156, + 0.4666666667, + 0.0117647059, + 0.4862745098, + 0.49019607843137253, + 0.4745098039, + 0.0078431373, + 0.4901960784, + 0.49411764705882355, + 0.4823529412, + 0.0078431373, + 0.4941176471, + 0.4980392156862745, + 0.4901960784, + 0.0039215686, + 0.4980392157, + 0.5019607843137255, + 0.4980392157, + 0.0117647059, + 0.4980392157, + 0.5058823529411764, + 0.5058823529, + 0.0156862745, + 0.4901960784, + 0.5098039215686274, + 0.5137254902, + 0.0235294118, + 0.4823529412, + 0.5137254901960784, + 0.5215686275, + 0.0274509804, + 0.4745098039, + 0.5176470588235295, + 0.5294117647, + 0.0352941176, + 0.4666666667, + 0.5215686274509804, + 0.537254902, + 0.0392156863, + 0.4588235294, + 0.5254901960784314, + 0.5450980392, + 0.0470588235, + 0.4509803922, + 0.5294117647058824, + 0.5529411765, + 0.0509803922, + 0.4431372549, + 0.5333333333333333, + 0.5607843137, + 0.0588235294, + 0.4352941176, + 0.5372549019607843, + 0.568627451, + 0.062745098, + 0.4274509804, + 0.5411764705882353, + 0.5764705882, + 0.0705882353, + 0.4196078431, + 0.5450980392156862, + 0.5843137255, + 0.0745098039, + 0.4117647059, + 0.5490196078431373, + 0.5921568627, + 0.0823529412, + 0.4039215686, + 0.5529411764705883, + 0.6, + 0.0862745098, + 0.3960784314, + 0.5568627450980392, + 0.6078431373, + 0.0941176471, + 0.3882352941, + 0.5607843137254902, + 0.6156862745, + 0.0980392157, + 0.3803921569, + 0.5647058823529412, + 0.6235294118, + 0.1058823529, + 0.3725490196, + 0.5686274509803921, + 0.631372549, + 0.1098039216, + 0.3647058824, + 0.5725490196078431, + 0.6392156863, + 0.1176470588, + 0.3568627451, + 0.5764705882352941, + 0.6470588235, + 0.1215686275, + 0.3490196078, + 0.5803921568627451, + 0.6549019608, + 0.1294117647, + 0.3411764706, + 0.5843137254901961, + 0.662745098, + 0.1333333333, + 0.3333333333, + 0.5882352941176471, + 0.6705882353, + 0.1411764706, + 0.3254901961, + 0.592156862745098, + 0.6784313725, + 0.1450980392, + 0.3176470588, + 0.596078431372549, + 0.6862745098, + 0.1529411765, + 0.3098039216, + 0.6, + 0.6941176471, + 0.1568627451, + 0.3019607843, + 0.6039215686274509, + 0.7019607843, + 0.1647058824, + 0.2941176471, + 0.6078431372549019, + 0.7098039216, + 0.168627451, + 0.2862745098, + 0.611764705882353, + 0.7176470588, + 0.1764705882, + 0.2784313725, + 0.615686274509804, + 0.7254901961, + 0.1803921569, + 0.2705882353, + 0.6196078431372549, + 0.7333333333, + 0.1882352941, + 0.262745098, + 0.6235294117647059, + 0.7411764706, + 0.1921568627, + 0.2549019608, + 0.6274509803921569, + 0.7490196078, + 0.2, + 0.2509803922, + 0.6313725490196078, + 0.7529411765, + 0.2039215686, + 0.2431372549, + 0.6352941176470588, + 0.7607843137, + 0.2117647059, + 0.2352941176, + 0.6392156862745098, + 0.768627451, + 0.2156862745, + 0.2274509804, + 0.6431372549019608, + 0.7764705882, + 0.2235294118, + 0.2196078431, + 0.6470588235294118, + 0.7843137255, + 0.2274509804, + 0.2117647059, + 0.6509803921568628, + 0.7921568627, + 0.2352941176, + 0.2039215686, + 0.6549019607843137, + 0.8, + 0.2392156863, + 0.1960784314, + 0.6588235294117647, + 0.8078431373, + 0.2470588235, + 0.1882352941, + 0.6627450980392157, + 0.8156862745, + 0.2509803922, + 0.1803921569, + 0.6666666666666666, + 0.8235294118, + 0.2549019608, + 0.1725490196, + 0.6705882352941176, + 0.831372549, + 0.2588235294, + 0.1647058824, + 0.6745098039215687, + 0.8392156863, + 0.2666666667, + 0.1568627451, + 0.6784313725490196, + 0.8470588235, + 0.2705882353, + 0.1490196078, + 0.6823529411764706, + 0.8549019608, + 0.2784313725, + 0.1411764706, + 0.6862745098039216, + 0.862745098, + 0.2823529412, + 0.1333333333, + 0.6901960784313725, + 0.8705882353, + 0.2901960784, + 0.1254901961, + 0.6941176470588235, + 0.8784313725, + 0.2941176471, + 0.1176470588, + 0.6980392156862745, + 0.8862745098, + 0.3019607843, + 0.1098039216, + 0.7019607843137254, + 0.8941176471, + 0.3058823529, + 0.1019607843, + 0.7058823529411765, + 0.9019607843, + 0.3137254902, + 0.0941176471, + 0.7098039215686275, + 0.9098039216, + 0.3176470588, + 0.0862745098, + 0.7137254901960784, + 0.9176470588, + 0.3254901961, + 0.0784313725, + 0.7176470588235294, + 0.9254901961, + 0.3294117647, + 0.0705882353, + 0.7215686274509804, + 0.9333333333, + 0.337254902, + 0.062745098, + 0.7254901960784313, + 0.9411764706, + 0.3411764706, + 0.0549019608, + 0.7294117647058823, + 0.9490196078, + 0.3490196078, + 0.0470588235, + 0.7333333333333333, + 0.9568627451, + 0.3529411765, + 0.0392156863, + 0.7372549019607844, + 0.9647058824, + 0.3607843137, + 0.031372549, + 0.7411764705882353, + 0.9725490196, + 0.3647058824, + 0.0235294118, + 0.7450980392156863, + 0.9803921569, + 0.3725490196, + 0.0156862745, + 0.7490196078431373, + 0.9882352941, + 0.3725490196, + 0.0039215686, + 0.7529411764705882, + 0.9960784314, + 0.3843137255, + 0.0156862745, + 0.7568627450980392, + 0.9960784314, + 0.3921568627, + 0.031372549, + 0.7607843137254902, + 0.9960784314, + 0.4039215686, + 0.0470588235, + 0.7647058823529411, + 0.9960784314, + 0.4117647059, + 0.062745098, + 0.7686274509803922, + 0.9960784314, + 0.4235294118, + 0.0784313725, + 0.7725490196078432, + 0.9960784314, + 0.431372549, + 0.0941176471, + 0.7764705882352941, + 0.9960784314, + 0.4431372549, + 0.1098039216, + 0.7803921568627451, + 0.9960784314, + 0.4509803922, + 0.1254901961, + 0.7843137254901961, + 0.9960784314, + 0.462745098, + 0.1411764706, + 0.788235294117647, + 0.9960784314, + 0.4705882353, + 0.1568627451, + 0.792156862745098, + 0.9960784314, + 0.4823529412, + 0.1725490196, + 0.796078431372549, + 0.9960784314, + 0.4901960784, + 0.1882352941, + 0.8, + 0.9960784314, + 0.5019607843, + 0.2039215686, + 0.803921568627451, + 0.9960784314, + 0.5098039216, + 0.2196078431, + 0.807843137254902, + 0.9960784314, + 0.5215686275, + 0.2352941176, + 0.8117647058823529, + 0.9960784314, + 0.5294117647, + 0.2509803922, + 0.8156862745098039, + 0.9960784314, + 0.5411764706, + 0.262745098, + 0.8196078431372549, + 0.9960784314, + 0.5490196078, + 0.2784313725, + 0.8235294117647058, + 0.9960784314, + 0.5607843137, + 0.2941176471, + 0.8274509803921568, + 0.9960784314, + 0.568627451, + 0.3098039216, + 0.8313725490196079, + 0.9960784314, + 0.5803921569, + 0.3254901961, + 0.8352941176470589, + 0.9960784314, + 0.5882352941, + 0.3411764706, + 0.8392156862745098, + 0.9960784314, + 0.6, + 0.3568627451, + 0.8431372549019608, + 0.9960784314, + 0.6078431373, + 0.3725490196, + 0.8470588235294118, + 0.9960784314, + 0.6196078431, + 0.3882352941, + 0.8509803921568627, + 0.9960784314, + 0.6274509804, + 0.4039215686, + 0.8549019607843137, + 0.9960784314, + 0.6392156863, + 0.4196078431, + 0.8588235294117647, + 0.9960784314, + 0.6470588235, + 0.4352941176, + 0.8627450980392157, + 0.9960784314, + 0.6588235294, + 0.4509803922, + 0.8666666666666667, + 0.9960784314, + 0.6666666667, + 0.4666666667, + 0.8705882352941177, + 0.9960784314, + 0.6784313725, + 0.4823529412, + 0.8745098039215686, + 0.9960784314, + 0.6862745098, + 0.4980392157, + 0.8784313725490196, + 0.9960784314, + 0.6980392157, + 0.5137254902, + 0.8823529411764706, + 0.9960784314, + 0.7058823529, + 0.5294117647, + 0.8862745098039215, + 0.9960784314, + 0.7176470588, + 0.5450980392, + 0.8901960784313725, + 0.9960784314, + 0.7254901961, + 0.5607843137, + 0.8941176470588236, + 0.9960784314, + 0.737254902, + 0.5764705882, + 0.8980392156862745, + 0.9960784314, + 0.7450980392, + 0.5921568627, + 0.9019607843137255, + 0.9960784314, + 0.7529411765, + 0.6078431373, + 0.9058823529411765, + 0.9960784314, + 0.7607843137, + 0.6235294118, + 0.9098039215686274, + 0.9960784314, + 0.7725490196, + 0.6392156863, + 0.9137254901960784, + 0.9960784314, + 0.7803921569, + 0.6549019608, + 0.9176470588235294, + 0.9960784314, + 0.7921568627, + 0.6705882353, + 0.9215686274509803, + 0.9960784314, + 0.8, + 0.6862745098, + 0.9254901960784314, + 0.9960784314, + 0.8117647059, + 0.7019607843, + 0.9294117647058824, + 0.9960784314, + 0.8196078431, + 0.7176470588, + 0.9333333333333333, + 0.9960784314, + 0.831372549, + 0.7333333333, + 0.9372549019607843, + 0.9960784314, + 0.8392156863, + 0.7490196078, + 0.9411764705882354, + 0.9960784314, + 0.8509803922, + 0.7607843137, + 0.9450980392156864, + 0.9960784314, + 0.8588235294, + 0.7764705882, + 0.9490196078431372, + 0.9960784314, + 0.8705882353, + 0.7921568627, + 0.9529411764705882, + 0.9960784314, + 0.8784313725, + 0.8078431373, + 0.9568627450980394, + 0.9960784314, + 0.8901960784, + 0.8235294118, + 0.9607843137254903, + 0.9960784314, + 0.8980392157, + 0.8392156863, + 0.9647058823529413, + 0.9960784314, + 0.9098039216, + 0.8549019608, + 0.9686274509803922, + 0.9960784314, + 0.9176470588, + 0.8705882353, + 0.9725490196078431, + 0.9960784314, + 0.9294117647, + 0.8862745098, + 0.9764705882352941, + 0.9960784314, + 0.937254902, + 0.9019607843, + 0.9803921568627451, + 0.9960784314, + 0.9490196078, + 0.9176470588, + 0.984313725490196, + 0.9960784314, + 0.9568627451, + 0.9333333333, + 0.9882352941176471, + 0.9960784314, + 0.968627451, + 0.9490196078, + 0.9921568627450981, + 0.9960784314, + 0.9764705882, + 0.9647058824, + 0.996078431372549, + 0.9960784314, + 0.9882352941, + 0.9803921569, + 1.0, + 0.9960784314, + 0.9882352941, + 0.9803921569, + ], + }, + { + ColorSpace: 'RGB', + Name: 'ge', + RGBPoints: [ + 0.0, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.00392156862745098, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.00784313725490196, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.011764705882352941, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.01568627450980392, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.0196078431372549, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.023529411764705882, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.027450980392156862, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.03137254901960784, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.03529411764705882, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.0392156862745098, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.043137254901960784, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.047058823529411764, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.050980392156862744, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.054901960784313725, + 0.0078431373, + 0.0078431373, + 0.0078431373, + 0.05882352941176471, + 0.0117647059, + 0.0078431373, + 0.0078431373, + 0.06274509803921569, + 0.0078431373, + 0.0156862745, + 0.0156862745, + 0.06666666666666667, + 0.0078431373, + 0.0235294118, + 0.0235294118, + 0.07058823529411765, + 0.0078431373, + 0.031372549, + 0.031372549, + 0.07450980392156863, + 0.0078431373, + 0.0392156863, + 0.0392156863, + 0.0784313725490196, + 0.0078431373, + 0.0470588235, + 0.0470588235, + 0.08235294117647059, + 0.0078431373, + 0.0549019608, + 0.0549019608, + 0.08627450980392157, + 0.0078431373, + 0.062745098, + 0.062745098, + 0.09019607843137255, + 0.0078431373, + 0.0705882353, + 0.0705882353, + 0.09411764705882353, + 0.0078431373, + 0.0784313725, + 0.0784313725, + 0.09803921568627451, + 0.0078431373, + 0.0901960784, + 0.0862745098, + 0.10196078431372549, + 0.0078431373, + 0.0980392157, + 0.0941176471, + 0.10588235294117647, + 0.0078431373, + 0.1058823529, + 0.1019607843, + 0.10980392156862745, + 0.0078431373, + 0.1137254902, + 0.1098039216, + 0.11372549019607843, + 0.0078431373, + 0.1215686275, + 0.1176470588, + 0.11764705882352942, + 0.0078431373, + 0.1294117647, + 0.1254901961, + 0.12156862745098039, + 0.0078431373, + 0.137254902, + 0.1333333333, + 0.12549019607843137, + 0.0078431373, + 0.1450980392, + 0.1411764706, + 0.12941176470588237, + 0.0078431373, + 0.1529411765, + 0.1490196078, + 0.13333333333333333, + 0.0078431373, + 0.1647058824, + 0.1568627451, + 0.13725490196078433, + 0.0078431373, + 0.1725490196, + 0.1647058824, + 0.1411764705882353, + 0.0078431373, + 0.1803921569, + 0.1725490196, + 0.1450980392156863, + 0.0078431373, + 0.1882352941, + 0.1803921569, + 0.14901960784313725, + 0.0078431373, + 0.1960784314, + 0.1882352941, + 0.15294117647058825, + 0.0078431373, + 0.2039215686, + 0.1960784314, + 0.1568627450980392, + 0.0078431373, + 0.2117647059, + 0.2039215686, + 0.1607843137254902, + 0.0078431373, + 0.2196078431, + 0.2117647059, + 0.16470588235294117, + 0.0078431373, + 0.2274509804, + 0.2196078431, + 0.16862745098039217, + 0.0078431373, + 0.2352941176, + 0.2274509804, + 0.17254901960784313, + 0.0078431373, + 0.2470588235, + 0.2352941176, + 0.17647058823529413, + 0.0078431373, + 0.2509803922, + 0.2431372549, + 0.1803921568627451, + 0.0078431373, + 0.2549019608, + 0.2509803922, + 0.1843137254901961, + 0.0078431373, + 0.262745098, + 0.2509803922, + 0.18823529411764706, + 0.0078431373, + 0.2705882353, + 0.2588235294, + 0.19215686274509805, + 0.0078431373, + 0.2784313725, + 0.2666666667, + 0.19607843137254902, + 0.0078431373, + 0.2862745098, + 0.2745098039, + 0.2, + 0.0078431373, + 0.2941176471, + 0.2823529412, + 0.20392156862745098, + 0.0078431373, + 0.3019607843, + 0.2901960784, + 0.20784313725490197, + 0.0078431373, + 0.3137254902, + 0.2980392157, + 0.21176470588235294, + 0.0078431373, + 0.3215686275, + 0.3058823529, + 0.21568627450980393, + 0.0078431373, + 0.3294117647, + 0.3137254902, + 0.2196078431372549, + 0.0078431373, + 0.337254902, + 0.3215686275, + 0.2235294117647059, + 0.0078431373, + 0.3450980392, + 0.3294117647, + 0.22745098039215686, + 0.0078431373, + 0.3529411765, + 0.337254902, + 0.23137254901960785, + 0.0078431373, + 0.3607843137, + 0.3450980392, + 0.23529411764705885, + 0.0078431373, + 0.368627451, + 0.3529411765, + 0.23921568627450984, + 0.0078431373, + 0.3764705882, + 0.3607843137, + 0.24313725490196078, + 0.0078431373, + 0.3843137255, + 0.368627451, + 0.24705882352941178, + 0.0078431373, + 0.3960784314, + 0.3764705882, + 0.25098039215686274, + 0.0078431373, + 0.4039215686, + 0.3843137255, + 0.2549019607843137, + 0.0078431373, + 0.4117647059, + 0.3921568627, + 0.25882352941176473, + 0.0078431373, + 0.4196078431, + 0.4, + 0.2627450980392157, + 0.0078431373, + 0.4274509804, + 0.4078431373, + 0.26666666666666666, + 0.0078431373, + 0.4352941176, + 0.4156862745, + 0.27058823529411763, + 0.0078431373, + 0.4431372549, + 0.4235294118, + 0.27450980392156865, + 0.0078431373, + 0.4509803922, + 0.431372549, + 0.2784313725490196, + 0.0078431373, + 0.4588235294, + 0.4392156863, + 0.2823529411764706, + 0.0078431373, + 0.4705882353, + 0.4470588235, + 0.28627450980392155, + 0.0078431373, + 0.4784313725, + 0.4549019608, + 0.2901960784313726, + 0.0078431373, + 0.4862745098, + 0.462745098, + 0.29411764705882354, + 0.0078431373, + 0.4941176471, + 0.4705882353, + 0.2980392156862745, + 0.0078431373, + 0.5019607843, + 0.4784313725, + 0.30196078431372547, + 0.0117647059, + 0.5098039216, + 0.4862745098, + 0.3058823529411765, + 0.0196078431, + 0.5019607843, + 0.4941176471, + 0.30980392156862746, + 0.0274509804, + 0.4941176471, + 0.5058823529, + 0.3137254901960784, + 0.0352941176, + 0.4862745098, + 0.5137254902, + 0.3176470588235294, + 0.0431372549, + 0.4784313725, + 0.5215686275, + 0.3215686274509804, + 0.0509803922, + 0.4705882353, + 0.5294117647, + 0.3254901960784314, + 0.0588235294, + 0.462745098, + 0.537254902, + 0.32941176470588235, + 0.0666666667, + 0.4549019608, + 0.5450980392, + 0.3333333333333333, + 0.0745098039, + 0.4470588235, + 0.5529411765, + 0.33725490196078434, + 0.0823529412, + 0.4392156863, + 0.5607843137, + 0.3411764705882353, + 0.0901960784, + 0.431372549, + 0.568627451, + 0.34509803921568627, + 0.0980392157, + 0.4235294118, + 0.5764705882, + 0.34901960784313724, + 0.1058823529, + 0.4156862745, + 0.5843137255, + 0.35294117647058826, + 0.1137254902, + 0.4078431373, + 0.5921568627, + 0.3568627450980392, + 0.1215686275, + 0.4, + 0.6, + 0.3607843137254902, + 0.1294117647, + 0.3921568627, + 0.6078431373, + 0.36470588235294116, + 0.137254902, + 0.3843137255, + 0.6156862745, + 0.3686274509803922, + 0.1450980392, + 0.3764705882, + 0.6235294118, + 0.37254901960784315, + 0.1529411765, + 0.368627451, + 0.631372549, + 0.3764705882352941, + 0.1607843137, + 0.3607843137, + 0.6392156863, + 0.3803921568627451, + 0.168627451, + 0.3529411765, + 0.6470588235, + 0.3843137254901961, + 0.1764705882, + 0.3450980392, + 0.6549019608, + 0.38823529411764707, + 0.1843137255, + 0.337254902, + 0.662745098, + 0.39215686274509803, + 0.1921568627, + 0.3294117647, + 0.6705882353, + 0.396078431372549, + 0.2, + 0.3215686275, + 0.6784313725, + 0.4, + 0.2078431373, + 0.3137254902, + 0.6862745098, + 0.403921568627451, + 0.2156862745, + 0.3058823529, + 0.6941176471, + 0.40784313725490196, + 0.2235294118, + 0.2980392157, + 0.7019607843, + 0.4117647058823529, + 0.231372549, + 0.2901960784, + 0.7098039216, + 0.41568627450980394, + 0.2392156863, + 0.2823529412, + 0.7176470588, + 0.4196078431372549, + 0.2470588235, + 0.2745098039, + 0.7254901961, + 0.4235294117647059, + 0.2509803922, + 0.2666666667, + 0.7333333333, + 0.42745098039215684, + 0.2509803922, + 0.2588235294, + 0.7411764706, + 0.43137254901960786, + 0.2588235294, + 0.2509803922, + 0.7490196078, + 0.43529411764705883, + 0.2666666667, + 0.2509803922, + 0.7490196078, + 0.4392156862745098, + 0.2745098039, + 0.2431372549, + 0.7568627451, + 0.44313725490196076, + 0.2823529412, + 0.2352941176, + 0.7647058824, + 0.4470588235294118, + 0.2901960784, + 0.2274509804, + 0.7725490196, + 0.45098039215686275, + 0.2980392157, + 0.2196078431, + 0.7803921569, + 0.4549019607843137, + 0.3058823529, + 0.2117647059, + 0.7882352941, + 0.4588235294117647, + 0.3137254902, + 0.2039215686, + 0.7960784314, + 0.4627450980392157, + 0.3215686275, + 0.1960784314, + 0.8039215686, + 0.4666666666666667, + 0.3294117647, + 0.1882352941, + 0.8117647059, + 0.4705882352941177, + 0.337254902, + 0.1803921569, + 0.8196078431, + 0.4745098039215686, + 0.3450980392, + 0.1725490196, + 0.8274509804, + 0.4784313725490197, + 0.3529411765, + 0.1647058824, + 0.8352941176, + 0.48235294117647065, + 0.3607843137, + 0.1568627451, + 0.8431372549, + 0.48627450980392156, + 0.368627451, + 0.1490196078, + 0.8509803922, + 0.49019607843137253, + 0.3764705882, + 0.1411764706, + 0.8588235294, + 0.49411764705882355, + 0.3843137255, + 0.1333333333, + 0.8666666667, + 0.4980392156862745, + 0.3921568627, + 0.1254901961, + 0.8745098039, + 0.5019607843137255, + 0.4, + 0.1176470588, + 0.8823529412, + 0.5058823529411764, + 0.4078431373, + 0.1098039216, + 0.8901960784, + 0.5098039215686274, + 0.4156862745, + 0.1019607843, + 0.8980392157, + 0.5137254901960784, + 0.4235294118, + 0.0941176471, + 0.9058823529, + 0.5176470588235295, + 0.431372549, + 0.0862745098, + 0.9137254902, + 0.5215686274509804, + 0.4392156863, + 0.0784313725, + 0.9215686275, + 0.5254901960784314, + 0.4470588235, + 0.0705882353, + 0.9294117647, + 0.5294117647058824, + 0.4549019608, + 0.062745098, + 0.937254902, + 0.5333333333333333, + 0.462745098, + 0.0549019608, + 0.9450980392, + 0.5372549019607843, + 0.4705882353, + 0.0470588235, + 0.9529411765, + 0.5411764705882353, + 0.4784313725, + 0.0392156863, + 0.9607843137, + 0.5450980392156862, + 0.4862745098, + 0.031372549, + 0.968627451, + 0.5490196078431373, + 0.4941176471, + 0.0235294118, + 0.9764705882, + 0.5529411764705883, + 0.4980392157, + 0.0156862745, + 0.9843137255, + 0.5568627450980392, + 0.5058823529, + 0.0078431373, + 0.9921568627, + 0.5607843137254902, + 0.5137254902, + 0.0156862745, + 0.9803921569, + 0.5647058823529412, + 0.5215686275, + 0.0235294118, + 0.9647058824, + 0.5686274509803921, + 0.5294117647, + 0.0352941176, + 0.9490196078, + 0.5725490196078431, + 0.537254902, + 0.0431372549, + 0.9333333333, + 0.5764705882352941, + 0.5450980392, + 0.0509803922, + 0.9176470588, + 0.5803921568627451, + 0.5529411765, + 0.062745098, + 0.9019607843, + 0.5843137254901961, + 0.5607843137, + 0.0705882353, + 0.8862745098, + 0.5882352941176471, + 0.568627451, + 0.0784313725, + 0.8705882353, + 0.592156862745098, + 0.5764705882, + 0.0901960784, + 0.8549019608, + 0.596078431372549, + 0.5843137255, + 0.0980392157, + 0.8392156863, + 0.6, + 0.5921568627, + 0.1098039216, + 0.8235294118, + 0.6039215686274509, + 0.6, + 0.1176470588, + 0.8078431373, + 0.6078431372549019, + 0.6078431373, + 0.1254901961, + 0.7921568627, + 0.611764705882353, + 0.6156862745, + 0.137254902, + 0.7764705882, + 0.615686274509804, + 0.6235294118, + 0.1450980392, + 0.7607843137, + 0.6196078431372549, + 0.631372549, + 0.1529411765, + 0.7490196078, + 0.6235294117647059, + 0.6392156863, + 0.1647058824, + 0.737254902, + 0.6274509803921569, + 0.6470588235, + 0.1725490196, + 0.7215686275, + 0.6313725490196078, + 0.6549019608, + 0.1843137255, + 0.7058823529, + 0.6352941176470588, + 0.662745098, + 0.1921568627, + 0.6901960784, + 0.6392156862745098, + 0.6705882353, + 0.2, + 0.6745098039, + 0.6431372549019608, + 0.6784313725, + 0.2117647059, + 0.6588235294, + 0.6470588235294118, + 0.6862745098, + 0.2196078431, + 0.6431372549, + 0.6509803921568628, + 0.6941176471, + 0.2274509804, + 0.6274509804, + 0.6549019607843137, + 0.7019607843, + 0.2392156863, + 0.6117647059, + 0.6588235294117647, + 0.7098039216, + 0.2470588235, + 0.5960784314, + 0.6627450980392157, + 0.7176470588, + 0.2509803922, + 0.5803921569, + 0.6666666666666666, + 0.7254901961, + 0.2588235294, + 0.5647058824, + 0.6705882352941176, + 0.7333333333, + 0.2666666667, + 0.5490196078, + 0.6745098039215687, + 0.7411764706, + 0.2784313725, + 0.5333333333, + 0.6784313725490196, + 0.7490196078, + 0.2862745098, + 0.5176470588, + 0.6823529411764706, + 0.7490196078, + 0.2941176471, + 0.5019607843, + 0.6862745098039216, + 0.7529411765, + 0.3058823529, + 0.4862745098, + 0.6901960784313725, + 0.7607843137, + 0.3137254902, + 0.4705882353, + 0.6941176470588235, + 0.768627451, + 0.3215686275, + 0.4549019608, + 0.6980392156862745, + 0.7764705882, + 0.3333333333, + 0.4392156863, + 0.7019607843137254, + 0.7843137255, + 0.3411764706, + 0.4235294118, + 0.7058823529411765, + 0.7921568627, + 0.3529411765, + 0.4078431373, + 0.7098039215686275, + 0.8, + 0.3607843137, + 0.3921568627, + 0.7137254901960784, + 0.8078431373, + 0.368627451, + 0.3764705882, + 0.7176470588235294, + 0.8156862745, + 0.3803921569, + 0.3607843137, + 0.7215686274509804, + 0.8235294118, + 0.3882352941, + 0.3450980392, + 0.7254901960784313, + 0.831372549, + 0.3960784314, + 0.3294117647, + 0.7294117647058823, + 0.8392156863, + 0.4078431373, + 0.3137254902, + 0.7333333333333333, + 0.8470588235, + 0.4156862745, + 0.2980392157, + 0.7372549019607844, + 0.8549019608, + 0.4274509804, + 0.2823529412, + 0.7411764705882353, + 0.862745098, + 0.4352941176, + 0.2666666667, + 0.7450980392156863, + 0.8705882353, + 0.4431372549, + 0.2509803922, + 0.7490196078431373, + 0.8784313725, + 0.4549019608, + 0.2431372549, + 0.7529411764705882, + 0.8862745098, + 0.462745098, + 0.2274509804, + 0.7568627450980392, + 0.8941176471, + 0.4705882353, + 0.2117647059, + 0.7607843137254902, + 0.9019607843, + 0.4823529412, + 0.1960784314, + 0.7647058823529411, + 0.9098039216, + 0.4901960784, + 0.1803921569, + 0.7686274509803922, + 0.9176470588, + 0.4980392157, + 0.1647058824, + 0.7725490196078432, + 0.9254901961, + 0.5098039216, + 0.1490196078, + 0.7764705882352941, + 0.9333333333, + 0.5176470588, + 0.1333333333, + 0.7803921568627451, + 0.9411764706, + 0.5294117647, + 0.1176470588, + 0.7843137254901961, + 0.9490196078, + 0.537254902, + 0.1019607843, + 0.788235294117647, + 0.9568627451, + 0.5450980392, + 0.0862745098, + 0.792156862745098, + 0.9647058824, + 0.5568627451, + 0.0705882353, + 0.796078431372549, + 0.9725490196, + 0.5647058824, + 0.0549019608, + 0.8, + 0.9803921569, + 0.5725490196, + 0.0392156863, + 0.803921568627451, + 0.9882352941, + 0.5843137255, + 0.0235294118, + 0.807843137254902, + 0.9921568627, + 0.5921568627, + 0.0078431373, + 0.8117647058823529, + 0.9921568627, + 0.6039215686, + 0.0274509804, + 0.8156862745098039, + 0.9921568627, + 0.6117647059, + 0.0509803922, + 0.8196078431372549, + 0.9921568627, + 0.6196078431, + 0.0745098039, + 0.8235294117647058, + 0.9921568627, + 0.631372549, + 0.0980392157, + 0.8274509803921568, + 0.9921568627, + 0.6392156863, + 0.1215686275, + 0.8313725490196079, + 0.9921568627, + 0.6470588235, + 0.1411764706, + 0.8352941176470589, + 0.9921568627, + 0.6588235294, + 0.1647058824, + 0.8392156862745098, + 0.9921568627, + 0.6666666667, + 0.1882352941, + 0.8431372549019608, + 0.9921568627, + 0.6784313725, + 0.2117647059, + 0.8470588235294118, + 0.9921568627, + 0.6862745098, + 0.2352941176, + 0.8509803921568627, + 0.9921568627, + 0.6941176471, + 0.2509803922, + 0.8549019607843137, + 0.9921568627, + 0.7058823529, + 0.2705882353, + 0.8588235294117647, + 0.9921568627, + 0.7137254902, + 0.2941176471, + 0.8627450980392157, + 0.9921568627, + 0.7215686275, + 0.3176470588, + 0.8666666666666667, + 0.9921568627, + 0.7333333333, + 0.3411764706, + 0.8705882352941177, + 0.9921568627, + 0.7411764706, + 0.3647058824, + 0.8745098039215686, + 0.9921568627, + 0.7490196078, + 0.3843137255, + 0.8784313725490196, + 0.9921568627, + 0.7529411765, + 0.4078431373, + 0.8823529411764706, + 0.9921568627, + 0.7607843137, + 0.431372549, + 0.8862745098039215, + 0.9921568627, + 0.7725490196, + 0.4549019608, + 0.8901960784313725, + 0.9921568627, + 0.7803921569, + 0.4784313725, + 0.8941176470588236, + 0.9921568627, + 0.7882352941, + 0.4980392157, + 0.8980392156862745, + 0.9921568627, + 0.8, + 0.5215686275, + 0.9019607843137255, + 0.9921568627, + 0.8078431373, + 0.5450980392, + 0.9058823529411765, + 0.9921568627, + 0.8156862745, + 0.568627451, + 0.9098039215686274, + 0.9921568627, + 0.8274509804, + 0.5921568627, + 0.9137254901960784, + 0.9921568627, + 0.8352941176, + 0.6156862745, + 0.9176470588235294, + 0.9921568627, + 0.8470588235, + 0.6352941176, + 0.9215686274509803, + 0.9921568627, + 0.8549019608, + 0.6588235294, + 0.9254901960784314, + 0.9921568627, + 0.862745098, + 0.6823529412, + 0.9294117647058824, + 0.9921568627, + 0.8745098039, + 0.7058823529, + 0.9333333333333333, + 0.9921568627, + 0.8823529412, + 0.7294117647, + 0.9372549019607843, + 0.9921568627, + 0.8901960784, + 0.7490196078, + 0.9411764705882354, + 0.9921568627, + 0.9019607843, + 0.7647058824, + 0.9450980392156864, + 0.9921568627, + 0.9098039216, + 0.7882352941, + 0.9490196078431372, + 0.9921568627, + 0.9215686275, + 0.8117647059, + 0.9529411764705882, + 0.9921568627, + 0.9294117647, + 0.8352941176, + 0.9568627450980394, + 0.9921568627, + 0.937254902, + 0.8588235294, + 0.9607843137254903, + 0.9921568627, + 0.9490196078, + 0.8784313725, + 0.9647058823529413, + 0.9921568627, + 0.9568627451, + 0.9019607843, + 0.9686274509803922, + 0.9921568627, + 0.9647058824, + 0.9254901961, + 0.9725490196078431, + 0.9921568627, + 0.9764705882, + 0.9490196078, + 0.9764705882352941, + 0.9921568627, + 0.9843137255, + 0.9725490196, + 0.9803921568627451, + 0.9921568627, + 0.9921568627, + 0.9921568627, + 0.984313725490196, + 0.9921568627, + 0.9921568627, + 0.9921568627, + 0.9882352941176471, + 0.9921568627, + 0.9921568627, + 0.9921568627, + 0.9921568627450981, + 0.9921568627, + 0.9921568627, + 0.9921568627, + 0.996078431372549, + 0.9921568627, + 0.9921568627, + 0.9921568627, + 1.0, + 0.9921568627, + 0.9921568627, + 0.9921568627, + ], + }, + { + ColorSpace: 'RGB', + Name: 'siemens', + RGBPoints: [ + 0.0, + 0.0078431373, + 0.0039215686, + 0.1254901961, + 0.00392156862745098, + 0.0078431373, + 0.0039215686, + 0.1254901961, + 0.00784313725490196, + 0.0078431373, + 0.0039215686, + 0.1882352941, + 0.011764705882352941, + 0.0117647059, + 0.0039215686, + 0.2509803922, + 0.01568627450980392, + 0.0117647059, + 0.0039215686, + 0.3098039216, + 0.0196078431372549, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.023529411764705882, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.027450980392156862, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.03137254901960784, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.03529411764705882, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.0392156862745098, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.043137254901960784, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.047058823529411764, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.050980392156862744, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.054901960784313725, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.05882352941176471, + 0.0156862745, + 0.0039215686, + 0.3725490196, + 0.06274509803921569, + 0.0156862745, + 0.0039215686, + 0.3882352941, + 0.06666666666666667, + 0.0156862745, + 0.0039215686, + 0.4078431373, + 0.07058823529411765, + 0.0156862745, + 0.0039215686, + 0.4235294118, + 0.07450980392156863, + 0.0156862745, + 0.0039215686, + 0.4431372549, + 0.0784313725490196, + 0.0156862745, + 0.0039215686, + 0.462745098, + 0.08235294117647059, + 0.0156862745, + 0.0039215686, + 0.4784313725, + 0.08627450980392157, + 0.0156862745, + 0.0039215686, + 0.4980392157, + 0.09019607843137255, + 0.0196078431, + 0.0039215686, + 0.5137254902, + 0.09411764705882353, + 0.0196078431, + 0.0039215686, + 0.5333333333, + 0.09803921568627451, + 0.0196078431, + 0.0039215686, + 0.5529411765, + 0.10196078431372549, + 0.0196078431, + 0.0039215686, + 0.568627451, + 0.10588235294117647, + 0.0196078431, + 0.0039215686, + 0.5882352941, + 0.10980392156862745, + 0.0196078431, + 0.0039215686, + 0.6039215686, + 0.11372549019607843, + 0.0196078431, + 0.0039215686, + 0.6235294118, + 0.11764705882352942, + 0.0196078431, + 0.0039215686, + 0.6431372549, + 0.12156862745098039, + 0.0235294118, + 0.0039215686, + 0.6588235294, + 0.12549019607843137, + 0.0235294118, + 0.0039215686, + 0.6784313725, + 0.12941176470588237, + 0.0235294118, + 0.0039215686, + 0.6980392157, + 0.13333333333333333, + 0.0235294118, + 0.0039215686, + 0.7137254902, + 0.13725490196078433, + 0.0235294118, + 0.0039215686, + 0.7333333333, + 0.1411764705882353, + 0.0235294118, + 0.0039215686, + 0.7490196078, + 0.1450980392156863, + 0.0235294118, + 0.0039215686, + 0.7647058824, + 0.14901960784313725, + 0.0235294118, + 0.0039215686, + 0.7843137255, + 0.15294117647058825, + 0.0274509804, + 0.0039215686, + 0.8, + 0.1568627450980392, + 0.0274509804, + 0.0039215686, + 0.8196078431, + 0.1607843137254902, + 0.0274509804, + 0.0039215686, + 0.8352941176, + 0.16470588235294117, + 0.0274509804, + 0.0039215686, + 0.8549019608, + 0.16862745098039217, + 0.0274509804, + 0.0039215686, + 0.8745098039, + 0.17254901960784313, + 0.0274509804, + 0.0039215686, + 0.8901960784, + 0.17647058823529413, + 0.0274509804, + 0.0039215686, + 0.9098039216, + 0.1803921568627451, + 0.031372549, + 0.0039215686, + 0.9294117647, + 0.1843137254901961, + 0.031372549, + 0.0039215686, + 0.9254901961, + 0.18823529411764706, + 0.0509803922, + 0.0039215686, + 0.9098039216, + 0.19215686274509805, + 0.0705882353, + 0.0039215686, + 0.8901960784, + 0.19607843137254902, + 0.0901960784, + 0.0039215686, + 0.8705882353, + 0.2, + 0.1137254902, + 0.0039215686, + 0.8509803922, + 0.20392156862745098, + 0.1333333333, + 0.0039215686, + 0.831372549, + 0.20784313725490197, + 0.1529411765, + 0.0039215686, + 0.8117647059, + 0.21176470588235294, + 0.1725490196, + 0.0039215686, + 0.7921568627, + 0.21568627450980393, + 0.1960784314, + 0.0039215686, + 0.7725490196, + 0.2196078431372549, + 0.2156862745, + 0.0039215686, + 0.7529411765, + 0.2235294117647059, + 0.2352941176, + 0.0039215686, + 0.737254902, + 0.22745098039215686, + 0.2509803922, + 0.0039215686, + 0.7176470588, + 0.23137254901960785, + 0.2745098039, + 0.0039215686, + 0.6980392157, + 0.23529411764705885, + 0.2941176471, + 0.0039215686, + 0.6784313725, + 0.23921568627450984, + 0.3137254902, + 0.0039215686, + 0.6588235294, + 0.24313725490196078, + 0.3333333333, + 0.0039215686, + 0.6392156863, + 0.24705882352941178, + 0.3568627451, + 0.0039215686, + 0.6196078431, + 0.25098039215686274, + 0.3764705882, + 0.0039215686, + 0.6, + 0.2549019607843137, + 0.3960784314, + 0.0039215686, + 0.5803921569, + 0.25882352941176473, + 0.4156862745, + 0.0039215686, + 0.5607843137, + 0.2627450980392157, + 0.4392156863, + 0.0039215686, + 0.5411764706, + 0.26666666666666666, + 0.4588235294, + 0.0039215686, + 0.5215686275, + 0.27058823529411763, + 0.4784313725, + 0.0039215686, + 0.5019607843, + 0.27450980392156865, + 0.4980392157, + 0.0039215686, + 0.4823529412, + 0.2784313725490196, + 0.5215686275, + 0.0039215686, + 0.4666666667, + 0.2823529411764706, + 0.5411764706, + 0.0039215686, + 0.4470588235, + 0.28627450980392155, + 0.5607843137, + 0.0039215686, + 0.4274509804, + 0.2901960784313726, + 0.5803921569, + 0.0039215686, + 0.4078431373, + 0.29411764705882354, + 0.6039215686, + 0.0039215686, + 0.3882352941, + 0.2980392156862745, + 0.6235294118, + 0.0039215686, + 0.368627451, + 0.30196078431372547, + 0.6431372549, + 0.0039215686, + 0.3490196078, + 0.3058823529411765, + 0.662745098, + 0.0039215686, + 0.3294117647, + 0.30980392156862746, + 0.6862745098, + 0.0039215686, + 0.3098039216, + 0.3137254901960784, + 0.7058823529, + 0.0039215686, + 0.2901960784, + 0.3176470588235294, + 0.7254901961, + 0.0039215686, + 0.2705882353, + 0.3215686274509804, + 0.7450980392, + 0.0039215686, + 0.2509803922, + 0.3254901960784314, + 0.7647058824, + 0.0039215686, + 0.2352941176, + 0.32941176470588235, + 0.7843137255, + 0.0039215686, + 0.2156862745, + 0.3333333333333333, + 0.8039215686, + 0.0039215686, + 0.1960784314, + 0.33725490196078434, + 0.8235294118, + 0.0039215686, + 0.1764705882, + 0.3411764705882353, + 0.8470588235, + 0.0039215686, + 0.1568627451, + 0.34509803921568627, + 0.8666666667, + 0.0039215686, + 0.137254902, + 0.34901960784313724, + 0.8862745098, + 0.0039215686, + 0.1176470588, + 0.35294117647058826, + 0.9058823529, + 0.0039215686, + 0.0980392157, + 0.3568627450980392, + 0.9294117647, + 0.0039215686, + 0.0784313725, + 0.3607843137254902, + 0.9490196078, + 0.0039215686, + 0.0588235294, + 0.36470588235294116, + 0.968627451, + 0.0039215686, + 0.0392156863, + 0.3686274509803922, + 0.9921568627, + 0.0039215686, + 0.0235294118, + 0.37254901960784315, + 0.9529411765, + 0.0039215686, + 0.0588235294, + 0.3764705882352941, + 0.9529411765, + 0.0078431373, + 0.0549019608, + 0.3803921568627451, + 0.9529411765, + 0.0156862745, + 0.0549019608, + 0.3843137254901961, + 0.9529411765, + 0.0235294118, + 0.0549019608, + 0.38823529411764707, + 0.9529411765, + 0.031372549, + 0.0549019608, + 0.39215686274509803, + 0.9529411765, + 0.0352941176, + 0.0549019608, + 0.396078431372549, + 0.9529411765, + 0.0431372549, + 0.0549019608, + 0.4, + 0.9529411765, + 0.0509803922, + 0.0549019608, + 0.403921568627451, + 0.9529411765, + 0.0588235294, + 0.0549019608, + 0.40784313725490196, + 0.9529411765, + 0.062745098, + 0.0549019608, + 0.4117647058823529, + 0.9529411765, + 0.0705882353, + 0.0549019608, + 0.41568627450980394, + 0.9529411765, + 0.0784313725, + 0.0509803922, + 0.4196078431372549, + 0.9529411765, + 0.0862745098, + 0.0509803922, + 0.4235294117647059, + 0.9568627451, + 0.0941176471, + 0.0509803922, + 0.42745098039215684, + 0.9568627451, + 0.0980392157, + 0.0509803922, + 0.43137254901960786, + 0.9568627451, + 0.1058823529, + 0.0509803922, + 0.43529411764705883, + 0.9568627451, + 0.1137254902, + 0.0509803922, + 0.4392156862745098, + 0.9568627451, + 0.1215686275, + 0.0509803922, + 0.44313725490196076, + 0.9568627451, + 0.1254901961, + 0.0509803922, + 0.4470588235294118, + 0.9568627451, + 0.1333333333, + 0.0509803922, + 0.45098039215686275, + 0.9568627451, + 0.1411764706, + 0.0509803922, + 0.4549019607843137, + 0.9568627451, + 0.1490196078, + 0.0470588235, + 0.4588235294117647, + 0.9568627451, + 0.1568627451, + 0.0470588235, + 0.4627450980392157, + 0.9568627451, + 0.1607843137, + 0.0470588235, + 0.4666666666666667, + 0.9568627451, + 0.168627451, + 0.0470588235, + 0.4705882352941177, + 0.9607843137, + 0.1764705882, + 0.0470588235, + 0.4745098039215686, + 0.9607843137, + 0.1843137255, + 0.0470588235, + 0.4784313725490197, + 0.9607843137, + 0.1882352941, + 0.0470588235, + 0.48235294117647065, + 0.9607843137, + 0.1960784314, + 0.0470588235, + 0.48627450980392156, + 0.9607843137, + 0.2039215686, + 0.0470588235, + 0.49019607843137253, + 0.9607843137, + 0.2117647059, + 0.0470588235, + 0.49411764705882355, + 0.9607843137, + 0.2196078431, + 0.0431372549, + 0.4980392156862745, + 0.9607843137, + 0.2235294118, + 0.0431372549, + 0.5019607843137255, + 0.9607843137, + 0.231372549, + 0.0431372549, + 0.5058823529411764, + 0.9607843137, + 0.2392156863, + 0.0431372549, + 0.5098039215686274, + 0.9607843137, + 0.2470588235, + 0.0431372549, + 0.5137254901960784, + 0.9607843137, + 0.2509803922, + 0.0431372549, + 0.5176470588235295, + 0.9647058824, + 0.2549019608, + 0.0431372549, + 0.5215686274509804, + 0.9647058824, + 0.262745098, + 0.0431372549, + 0.5254901960784314, + 0.9647058824, + 0.2705882353, + 0.0431372549, + 0.5294117647058824, + 0.9647058824, + 0.2745098039, + 0.0431372549, + 0.5333333333333333, + 0.9647058824, + 0.2823529412, + 0.0392156863, + 0.5372549019607843, + 0.9647058824, + 0.2901960784, + 0.0392156863, + 0.5411764705882353, + 0.9647058824, + 0.2980392157, + 0.0392156863, + 0.5450980392156862, + 0.9647058824, + 0.3058823529, + 0.0392156863, + 0.5490196078431373, + 0.9647058824, + 0.3098039216, + 0.0392156863, + 0.5529411764705883, + 0.9647058824, + 0.3176470588, + 0.0392156863, + 0.5568627450980392, + 0.9647058824, + 0.3254901961, + 0.0392156863, + 0.5607843137254902, + 0.9647058824, + 0.3333333333, + 0.0392156863, + 0.5647058823529412, + 0.9647058824, + 0.337254902, + 0.0392156863, + 0.5686274509803921, + 0.968627451, + 0.3450980392, + 0.0392156863, + 0.5725490196078431, + 0.968627451, + 0.3529411765, + 0.0352941176, + 0.5764705882352941, + 0.968627451, + 0.3607843137, + 0.0352941176, + 0.5803921568627451, + 0.968627451, + 0.368627451, + 0.0352941176, + 0.5843137254901961, + 0.968627451, + 0.3725490196, + 0.0352941176, + 0.5882352941176471, + 0.968627451, + 0.3803921569, + 0.0352941176, + 0.592156862745098, + 0.968627451, + 0.3882352941, + 0.0352941176, + 0.596078431372549, + 0.968627451, + 0.3960784314, + 0.0352941176, + 0.6, + 0.968627451, + 0.4, + 0.0352941176, + 0.6039215686274509, + 0.968627451, + 0.4078431373, + 0.0352941176, + 0.6078431372549019, + 0.968627451, + 0.4156862745, + 0.0352941176, + 0.611764705882353, + 0.968627451, + 0.4235294118, + 0.031372549, + 0.615686274509804, + 0.9725490196, + 0.431372549, + 0.031372549, + 0.6196078431372549, + 0.9725490196, + 0.4352941176, + 0.031372549, + 0.6235294117647059, + 0.9725490196, + 0.4431372549, + 0.031372549, + 0.6274509803921569, + 0.9725490196, + 0.4509803922, + 0.031372549, + 0.6313725490196078, + 0.9725490196, + 0.4588235294, + 0.031372549, + 0.6352941176470588, + 0.9725490196, + 0.462745098, + 0.031372549, + 0.6392156862745098, + 0.9725490196, + 0.4705882353, + 0.031372549, + 0.6431372549019608, + 0.9725490196, + 0.4784313725, + 0.031372549, + 0.6470588235294118, + 0.9725490196, + 0.4862745098, + 0.031372549, + 0.6509803921568628, + 0.9725490196, + 0.4941176471, + 0.0274509804, + 0.6549019607843137, + 0.9725490196, + 0.4980392157, + 0.0274509804, + 0.6588235294117647, + 0.9725490196, + 0.5058823529, + 0.0274509804, + 0.6627450980392157, + 0.9764705882, + 0.5137254902, + 0.0274509804, + 0.6666666666666666, + 0.9764705882, + 0.5215686275, + 0.0274509804, + 0.6705882352941176, + 0.9764705882, + 0.5254901961, + 0.0274509804, + 0.6745098039215687, + 0.9764705882, + 0.5333333333, + 0.0274509804, + 0.6784313725490196, + 0.9764705882, + 0.5411764706, + 0.0274509804, + 0.6823529411764706, + 0.9764705882, + 0.5490196078, + 0.0274509804, + 0.6862745098039216, + 0.9764705882, + 0.5529411765, + 0.0274509804, + 0.6901960784313725, + 0.9764705882, + 0.5607843137, + 0.0235294118, + 0.6941176470588235, + 0.9764705882, + 0.568627451, + 0.0235294118, + 0.6980392156862745, + 0.9764705882, + 0.5764705882, + 0.0235294118, + 0.7019607843137254, + 0.9764705882, + 0.5843137255, + 0.0235294118, + 0.7058823529411765, + 0.9764705882, + 0.5882352941, + 0.0235294118, + 0.7098039215686275, + 0.9764705882, + 0.5960784314, + 0.0235294118, + 0.7137254901960784, + 0.9803921569, + 0.6039215686, + 0.0235294118, + 0.7176470588235294, + 0.9803921569, + 0.6117647059, + 0.0235294118, + 0.7215686274509804, + 0.9803921569, + 0.6156862745, + 0.0235294118, + 0.7254901960784313, + 0.9803921569, + 0.6235294118, + 0.0235294118, + 0.7294117647058823, + 0.9803921569, + 0.631372549, + 0.0196078431, + 0.7333333333333333, + 0.9803921569, + 0.6392156863, + 0.0196078431, + 0.7372549019607844, + 0.9803921569, + 0.6470588235, + 0.0196078431, + 0.7411764705882353, + 0.9803921569, + 0.6509803922, + 0.0196078431, + 0.7450980392156863, + 0.9803921569, + 0.6588235294, + 0.0196078431, + 0.7490196078431373, + 0.9803921569, + 0.6666666667, + 0.0196078431, + 0.7529411764705882, + 0.9803921569, + 0.6745098039, + 0.0196078431, + 0.7568627450980392, + 0.9803921569, + 0.6784313725, + 0.0196078431, + 0.7607843137254902, + 0.9843137255, + 0.6862745098, + 0.0196078431, + 0.7647058823529411, + 0.9843137255, + 0.6941176471, + 0.0196078431, + 0.7686274509803922, + 0.9843137255, + 0.7019607843, + 0.0156862745, + 0.7725490196078432, + 0.9843137255, + 0.7098039216, + 0.0156862745, + 0.7764705882352941, + 0.9843137255, + 0.7137254902, + 0.0156862745, + 0.7803921568627451, + 0.9843137255, + 0.7215686275, + 0.0156862745, + 0.7843137254901961, + 0.9843137255, + 0.7294117647, + 0.0156862745, + 0.788235294117647, + 0.9843137255, + 0.737254902, + 0.0156862745, + 0.792156862745098, + 0.9843137255, + 0.7411764706, + 0.0156862745, + 0.796078431372549, + 0.9843137255, + 0.7490196078, + 0.0156862745, + 0.8, + 0.9843137255, + 0.7529411765, + 0.0156862745, + 0.803921568627451, + 0.9843137255, + 0.7607843137, + 0.0156862745, + 0.807843137254902, + 0.9882352941, + 0.768627451, + 0.0156862745, + 0.8117647058823529, + 0.9882352941, + 0.768627451, + 0.0156862745, + 0.8156862745098039, + 0.9843137255, + 0.7843137255, + 0.0117647059, + 0.8196078431372549, + 0.9843137255, + 0.8, + 0.0117647059, + 0.8235294117647058, + 0.9843137255, + 0.8156862745, + 0.0117647059, + 0.8274509803921568, + 0.9803921569, + 0.831372549, + 0.0117647059, + 0.8313725490196079, + 0.9803921569, + 0.8431372549, + 0.0117647059, + 0.8352941176470589, + 0.9803921569, + 0.8588235294, + 0.0078431373, + 0.8392156862745098, + 0.9803921569, + 0.8745098039, + 0.0078431373, + 0.8431372549019608, + 0.9764705882, + 0.8901960784, + 0.0078431373, + 0.8470588235294118, + 0.9764705882, + 0.9058823529, + 0.0078431373, + 0.8509803921568627, + 0.9764705882, + 0.9176470588, + 0.0078431373, + 0.8549019607843137, + 0.9764705882, + 0.9333333333, + 0.0039215686, + 0.8588235294117647, + 0.9725490196, + 0.9490196078, + 0.0039215686, + 0.8627450980392157, + 0.9725490196, + 0.9647058824, + 0.0039215686, + 0.8666666666666667, + 0.9725490196, + 0.9803921569, + 0.0039215686, + 0.8705882352941177, + 0.9725490196, + 0.9960784314, + 0.0039215686, + 0.8745098039215686, + 0.9725490196, + 0.9960784314, + 0.0039215686, + 0.8784313725490196, + 0.9725490196, + 0.9960784314, + 0.0352941176, + 0.8823529411764706, + 0.9725490196, + 0.9960784314, + 0.0666666667, + 0.8862745098039215, + 0.9725490196, + 0.9960784314, + 0.0980392157, + 0.8901960784313725, + 0.9725490196, + 0.9960784314, + 0.1294117647, + 0.8941176470588236, + 0.9725490196, + 0.9960784314, + 0.1647058824, + 0.8980392156862745, + 0.9764705882, + 0.9960784314, + 0.1960784314, + 0.9019607843137255, + 0.9764705882, + 0.9960784314, + 0.2274509804, + 0.9058823529411765, + 0.9764705882, + 0.9960784314, + 0.2549019608, + 0.9098039215686274, + 0.9764705882, + 0.9960784314, + 0.2901960784, + 0.9137254901960784, + 0.9764705882, + 0.9960784314, + 0.3215686275, + 0.9176470588235294, + 0.9803921569, + 0.9960784314, + 0.3529411765, + 0.9215686274509803, + 0.9803921569, + 0.9960784314, + 0.3843137255, + 0.9254901960784314, + 0.9803921569, + 0.9960784314, + 0.4156862745, + 0.9294117647058824, + 0.9803921569, + 0.9960784314, + 0.4509803922, + 0.9333333333333333, + 0.9803921569, + 0.9960784314, + 0.4823529412, + 0.9372549019607843, + 0.9843137255, + 0.9960784314, + 0.5137254902, + 0.9411764705882354, + 0.9843137255, + 0.9960784314, + 0.5450980392, + 0.9450980392156864, + 0.9843137255, + 0.9960784314, + 0.5803921569, + 0.9490196078431372, + 0.9843137255, + 0.9960784314, + 0.6117647059, + 0.9529411764705882, + 0.9843137255, + 0.9960784314, + 0.6431372549, + 0.9568627450980394, + 0.9882352941, + 0.9960784314, + 0.6745098039, + 0.9607843137254903, + 0.9882352941, + 0.9960784314, + 0.7058823529, + 0.9647058823529413, + 0.9882352941, + 0.9960784314, + 0.7411764706, + 0.9686274509803922, + 0.9882352941, + 0.9960784314, + 0.768627451, + 0.9725490196078431, + 0.9882352941, + 0.9960784314, + 0.8, + 0.9764705882352941, + 0.9921568627, + 0.9960784314, + 0.831372549, + 0.9803921568627451, + 0.9921568627, + 0.9960784314, + 0.8666666667, + 0.984313725490196, + 0.9921568627, + 0.9960784314, + 0.8980392157, + 0.9882352941176471, + 0.9921568627, + 0.9960784314, + 0.9294117647, + 0.9921568627450981, + 0.9921568627, + 0.9960784314, + 0.9607843137, + 0.996078431372549, + 0.9960784314, + 0.9960784314, + 0.9607843137, + 1.0, + 0.9960784314, + 0.9960784314, + 0.9607843137, + ], + }, +]; diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 3cb1c5959d0..91ff6872ddb 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -129,6 +129,7 @@ function modeFactory({ modeConfiguration }) { 'Crosshairs', 'Pan', 'RectangleROIStartEndThreshold', + 'fusionPTColormap', ]); }, onModeExit: ({ servicesManager }) => { diff --git a/modes/tmtv/src/toolbarButtons.js b/modes/tmtv/src/toolbarButtons.js index ec49627cfc6..a292343a784 100644 --- a/modes/tmtv/src/toolbarButtons.js +++ b/modes/tmtv/src/toolbarButtons.js @@ -1,10 +1,6 @@ // TODO: torn, can either bake this here; or have to create a whole new button type // Only ways that you can pass in a custom React component for render :l -import { - // ExpandableToolbarButton, - // ListMenu, - WindowLevelMenuItem, -} from '@ohif/ui'; +import { WindowLevelMenuItem } from '@ohif/ui'; import { defaults } from '@ohif/core'; import { toolGroupIds } from './initToolGroups'; const { windowLevelPresets } = defaults; @@ -26,6 +22,31 @@ function _createButton(type, id, icon, label, commands, tooltip) { }; } +function _createColormap(label, colormap) { + return { + id: label.toString(), + title: label, + subtitle: label, + type: 'action', + commands: [ + { + commandName: 'setFusionPTColormap', + commandOptions: { + toolGroupId: toolGroupIds.Fusion, + colormap, + }, + }, + { + commandName: 'setFusionPTColormap', + commandOptions: { + toolGroupId: toolGroupIds.Fusion, + colormap, + }, + }, + ], + }; +} + const _createActionButton = _createButton.bind(null, 'action'); const _createToggleButton = _createButton.bind(null, 'toggle'); const _createToolButton = _createButton.bind(null, 'tool'); @@ -265,6 +286,39 @@ const toolbarButtons = [ ], }, }, + { + id: 'fusionPTColormap', + type: 'ohif.splitButton', + props: { + groupId: 'fusionPTColormap', + primary: _createToolButton( + 'fusionPTColormap', + 'tool-window-level', + 'Fusion PT Colormap', + [], + 'Fusion PT Colormap' + ), + secondary: { + icon: 'chevron-down', + label: 'PT Colormap', + isActive: true, + tooltip: 'PET Image Colormap', + }, + isAction: true, // ? + renderer: WindowLevelMenuItem, + items: [ + _createColormap('Hot Iron', 'hot_iron'), + _createColormap('S PET', 's_pet'), + _createColormap('Ret Hot', 'red_hot'), + _createColormap('Perfusion', 'perfusion'), + _createColormap('Rainbow', 'rainbow_2'), + _createColormap('SUV', 'suv'), + _createColormap('GE 256', 'ge_256'), + _createColormap('GE', 'ge'), + _createColormap('Siemens', 'siemens'), + ], + }, + }, ]; export default toolbarButtons; diff --git a/platform/core/src/extensions/ExtensionManager.js b/platform/core/src/extensions/ExtensionManager.js index 3fdd245f749..38583497d72 100644 --- a/platform/core/src/extensions/ExtensionManager.js +++ b/platform/core/src/extensions/ExtensionManager.js @@ -159,6 +159,7 @@ export default class ExtensionManager { servicesManager: this._servicesManager, commandsManager: this._commandsManager, hotkeysManager: this._hotkeysManager, + extensionManager: this, appConfig: this._appConfig, configuration, }); From a65c860fb976978ff4a5080b48dfd92250019b32 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 18:42:26 -0400 Subject: [PATCH 18/25] add readme to tmtv mode --- modes/tmtv/README.md | 74 +++++++++++++++++++++++++++++++ modes/tmtv/assets/modeLayout.png | Bin 0 -> 715195 bytes modes/tmtv/assets/modeValid.png | Bin 0 -> 37106 bytes 3 files changed, 74 insertions(+) create mode 100644 modes/tmtv/README.md create mode 100644 modes/tmtv/assets/modeLayout.png create mode 100644 modes/tmtv/assets/modeValid.png diff --git a/modes/tmtv/README.md b/modes/tmtv/README.md new file mode 100644 index 00000000000..99d55ac288b --- /dev/null +++ b/modes/tmtv/README.md @@ -0,0 +1,74 @@ +# Total Metabolic Tumor Volume + + +## Introduction + +Total Metabolic Tumor Volume (TMTV) workflow mode enables quantitatively measurement of a tumor volume in a patient's body. +This mode is accessible in any study that has a PT and CT image series as you can see below + +![](./assets/modeValid.png) + +Note: If the study does not have a PT and CT image series, the TMTV workflow mode will not be available +and will become grayed out. + +## Layout +The designed layout for the viewports follows a predefined hanging protocol which will place +10 viewports containing CT, PT, Fusion and Maximum Intensity Projection (MIP) PT scenes. + +The hanging protocol will match the CT and PT displaySets based on series description. In terms +of PT displaySets, the hanging protocol will match the PT displaySet that has attenuated +corrected PET image data. + +As seen in the image below, the first row contains CT volume in 3 different views of Axial, +Sagittal and Coronal. The second row contains PT volume in the same views as the first row. +The last row contains the fusion volume and the viewport to the right is a MIP of the PT +Volume in the Sagittal view. + + +![](./assets/modeLayout.png) + +## Synchronization + +The viewports in the 3 rows are synchronized both for the Camera and WindowLevel. +It means that when you interact with the CT viewport (pan, zoom, scroll), +the PT and Fusion viewports will be synchronized to the same view. In addition +to camera synchronization, the window level of the CT viewport will be synchronized +with the fusion viewport. + + +### MIP +The tools that are activated on each viewport is unique to its data. For instance, +the mouse scroll tool for PT, CT and Fusion viewports are scrolling through the image data +(in different directions); however, the mouse scroll tool for the MIP viewport will +rotate the camera to match the usecase for the MIP. + + +## Panels +There are two panels that are available in the TMTV workflow mode and we will +discuss them in detail below. + +### SUV Panel +This panel shows the PT metadata derived from the matched PT displaySet. The user +can edit/change the metadata if needed, and by reloading the data the new +metadata will be applied to the PT volume. + + +## ROI Threshold Panel +The ROI Threshold panel is a panel that allows the user to use the `RectangleROIStartEnd` +tool from Cornerstone to define and edit a region of interest. Then, the user can +apply a threshold to the pixels in the ROI and save the result as a segmentation volume. + +By applying each threshold to the ROI, the Total Metabolic Tumor Volume (TMTV), and +the SUV Peak values will get calculated for the labelmap segments and shown in the +panel. + + +## Export Report + +Finally, the results can be saved in the CSV format. The RectangleROI annotations +can also be extracted as a dicom RT Structure Set and saved as a DICOM file. + + +## Video Tutorial + +Below you can see a video tutorial on how to use the TMTV workflow mode. diff --git a/modes/tmtv/assets/modeLayout.png b/modes/tmtv/assets/modeLayout.png new file mode 100644 index 0000000000000000000000000000000000000000..028b579b4681000298e0b71129084e9bc0b98cbb GIT binary patch literal 715195 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�aV{~DND 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 z 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%0ASR~=sGHje(<4vL{ab~!&tB{4bDE6i;6kVN zA9#SAkij3T!7jC&e=p~?`_{CjO%UqBB{FlO3-B-V9!u#)n6gV4qV~@RDt}Dj9qLi^ z?Y0O0+P(5V|7-n#9CQ)|K-UuPbSa@0My zh}(Jf6uBBRbkpS7AxC=#!k*MQjJswk1o@MPIVzguMQ~ftKCg0V^t0`RfHJ;gl*@Nwj`jal@ zqteG07%BpR;p>JHCao+4MVSDd09g0s{7yJioFJxD-}J2SKH zC6|dtWOuJ^DhJ-3JQuUJgn<@nBr{Jg93=_=Vg{84L1$BsbgD|btcMd#w+&^_b&Ils z@!!RG(XXJVr&c06&7P3&2NbOz_!Ml8VfKE1t=P56cqzcpzDCO4oG(B|g`T`aXTBWc zq<4YGw6R`@?uqe;k=4-di3?tc*1{;>(B;&L*N0O5Q11Ms_Bm~dnj?9=A&`Z z|0ZIy0xd)Zc!UI{ybh&;=~&`HRYM7Yq)KR5`x@NpX0xld-;FC}au8PbhG3Oy-2USU zq+QfsQkg;IWMo1fi!ZGmQtw5sAFOjFmuyo(g|vfaC0{zuG^DI3VoKb_@Q;Zw?!2c`V#(|*DAEtptYAi)?^u< zW?0v+eg``{cJ#upEd>|%}{DD1eDH1 z6Ffs~Jy%?CUk2{qMP-xSQ>>~hI#zf55dSj@8}8qO-rtx=)xNxLeFc?!FJ|=M%~K#d zUO2PO&eP6AQcu8!QNg_K1W@9`b>R;VrpB}yvEohk=P;K{2q4EXiG7V}4 zI9?)tOu+YvS%d&i@L=7gIA|dZQ40 z6n{e$A%6L)<#ZCP_r?KAt0i_dLbmkDY+Th{uKAywpE)ltxjIvjG01!`?T>1AyP4M{ zI!q{^)F{8f8kIuX5{TvE$r#}7gF!>(&9=iH(+$skekI;LXt=){YdSP6iE76|xI$Iz z)OS00a6{GOMYew6^6yE$`R3%7sL9hvC55StWF_qVcz!TcMhKthSa|xb@J}u3J9Pb| zehTnjZ`4p*%AW}6&Gtk5$8)19DVa>vOtvPuyI6pwJu8+}r;@=8$BCH=#KpQ&T>~fc z&U!nXdCeIYQoWEjA28Y~9UhZ>=v^Zd2Z;fDC#$$gh7-SpmamVenAcA4jF0nxP+k%^ zK+qO7->tuu=?^x(*3R+Cgq6=G5udNwL<@qCiVc28#_&n!#vv)61y^2s(Nel|3lGSLuj#AKjUPkuHKeHwM=vR1 zdn1j9&elj3et!~Qrr67DnXD8t@acGse#pxj*}(By+mf#rov(R<8nG&X9JFGtGVuAt z_>kZFNhim>mXm-Q%I+nv;B_?McjsPcXea0B@AI$$-uiEwDVfJ!e2qj@<0o2BF${sxXaE5wN>fbK7qbtoBr0$xbfAN|4JkouX_oYtx1X1m64cRq_?6W zD|RN9`u!{AX_>EHnF_?G6;(eP55R5SH`}!1w+<^|cGLp!AN8F*2R~oW=HW}e9h@jR z-_3MXzyxO>LatO!dle#kfg|lOxHdsC&&b4b1#w!qBSuOb$l{baco3=n-C{-v09i5LYjac4KnL4k! zgm*EWgUTE7Sq~SyNS^dsWa&!boD83j)k%D8GG^qXwI|e!J-sW)YICHtNtN z3H0}f!kOY*@ZVj1unV)+ApoX1*oxK-D~fv@XAF~lshA>vO~RSmpuLL zJ0hH3NUmw-kg@>td(*pvKj$oBuazm2wpHw>m*?#^TsOmwF2~=!(Q(SYvmtW z?`4gz%tjr(Nnyxi3%kThho>c=5zna?tx1o43$g5zEcYcihg$ui6_zIyX$L{}xp5gF zY*BUM5yj#59?n>8=0X~Jeld6Nh!T~37^R8bIJLK=8~?R&-~JDn^g%WLK6+3B0V7JfjDFl_qais`+;&L9 zL#)P5JN+$d{bz8?viA0TA6{lsZ`qi;bXzR3rN@tG1#S08RWGMZJLPh=!1?_&7J|0! z!OgD<&&e!WcFgHeJE46|g@qUzzEmN1eeS_urb#^eR>AcnsqUZmQ?CD0dWlc>Q&9U` zkGVUY@MdQoHegctLRR|&p6jQ%R4dxUV*e4i4s7%YgZK{XwC0b$TF?V;eVfqCxR~it zJiK`WX!#cM?q5k$J|v3(=K6-7wu0~&X(A8 z0aZG-$(6hv?hNkkwb~~BdcB=bzp1$9ys6ES51siCgBJ((fEOze550V+mAxNHRwbsk zLIk#;>FW1n_%?i%*FSY>N!1Hv8qQnVv{(VV)TxSt2(1|7jaqwB912HIT~3a(IpGR5569pe}9AjB78}6`d9B)IYCjc+s^tU$Bf~e zMs3)J1SYNLT3ZkduS=~8BZZ)SzZ^Z6=iQ?3uWf#_xL_VFCf<1V#*RJo;`^PLXr1J% z!07pCgJ@?$g-^DKN%SV^wVa3(PER-(->eg*D#t6#FTS_$g`5}da0IUV{Yumf_9SH zHN_i;lWgpoX)(}2m7W^Yn>H;)=+{9#~MEgjd*-Z%wYV}X8hQ}c=J?SD@ARVXC9 z5ILAOg}}+1LifeQ)O~NlCZjny88t$L7GA!ZqrUyQ66R#|X;IDuqgBue6~|bV69>gK zKkH>8JXo5)e2$OG;kF(TxN7I-IO7!Rx{-0I@$O)0O-p7FvK>I4>@49csiu0puUNq= zedjeg9A;1f)66H$0WGVt3pdCzBGaVYP21KKFf{J8PwI@gZ{{TqZJ{?#*PJdnUJDZ zEHaf2J|dZ-E4I7hK8oNP)7W^A-2Ukst}?d+Dkda4dW5Eq)Vr=~cXW^$6%c0Q%&VFQ za;?G3LA6pvNPqKm2DEh#VJVrzC*0YR91d&GFTc>-tc85{N9rzzzsS_lDeG;=K{6n1k6A8!zPc<+Q$2ZcPD<)rS zr-Ya?o*(7(ri5A5--6xn&uqOOFw$)b6Gg_4a5SFJ+UbNLxki`|Q}#!H{s2rlI?8BQ zjWnV6n;p`lJ;gG{SEGeJzpGpUMX&P-XUY~`<;rZ68~S}i=Ehusc5>|(%(I3rE?q7q zZBxEX5TB`J^hu(`*Rp7-(j@7Qp{R$mujLZz@n`d_g5dvhC1}g=Z|;pavCbB2d?=+} z1MLlG*N$aVA0sbk;J-{FIfl5g6cP(SIkF-5rOy>LESIW64e)*ZX~IxjYPwqex*`QH zrO3CZBV*B=)0g)lQ^iqVC@8i)b+6N=w$C~jbgDgF1Z?ile9F{oqj@u+)Y`91xVV2z%f-={xJ=QL3Ou$syR7V{rw zVW%4VCI9_dy%IoGYv1Oz@^0~FaIO<78HF|JYFz<0QF5?$D%no{S}oAXDRt~W6~K>l zz~mz<4BW1^w3$avVP_!HH&gaLs-)d*Ne;kY!A7$Brq<>smjT<1p0RRYwe=s5tTVM9 zpI}rBs=8l(yY0Ieun@G{uf&O_?d7kJG=vn|G%{l^zBNRa!mJP@UyA*;wz_Re%Y2b1 zzD(3TY+F@&Jgdiw^x&4J2T6fXUAV{idX(4B3Vu_FL`uQ0K?^tTC$l^3x$j?3;D@*>c;2uRz)q1&_L4rVXAp`o z8(Ax|2msk=RpL^g1Pdo$N7=dJY=Qh6U^@fqllWixuv1gF>-NO*Ir@(5Jqc>QobINa z+R>x$HRs72XGLec z1rz9=fQD_#r;ymd`^l;Ka9-7rldjst|@K=hKal^?4!yNMK1lVlW)}U%MCchj6`uguMq| z9aw|7#w7S$==@2mb-=vwN&BD#`tDKsStzlMV{ZoyU#YV^*CV_aX0Q=$;9lv}!q)jv zLG98c8XmU^dDB_-4^Ovs+eGJoEiRD1$9BzGjpO6%&8t;>kci@>I=)H|XTGF*7A+e# zC;O?_EnjQfU(a)tUri)SZr(8`PrX-WWCEFn(1#u#O5H=o*W0u3XoCZPC;tiGX83r> zxM%T*=fUj~^)<(uHxiEl{gxud6SSQ}#N2)R2B=!_|CVf%zcMiX&hp8Gs~K#TDi73n z+X(n@t9#!YNLXbX-pYH^I(3@-;=#Nv98Y4qm5L3U3f6yR*a!?oZzd*I1FT(rZ@KS| z{^)1E7vE|@##iE5{9QU__I6T_CS&revMt>m(e>Yz6`b+~ALsb%>7G4dMEVE`Hb{SD zD*YlPP^CS+n2K{-V;K7XPCkFTYu5w(qZy#;5_1MEN z1(2ijX{LYPN&1n(L(b;_1J)!Jh1C_X3MKD)(J|uSHW{efEib>WYd`BR1yWtG=j?Pz zqLxFwj(a&KA^)CYuV*v?>K+b76oTKk*uwxe$}rZ{|AT!x7YeVkO4MCac!vh&s79VeI}i z2KQ?7jd1f(#$sn4#%1Y6!1=5QyUKKCzEU|=d*qIlTP|x&f#mw>dWWBh9HhSX>I@p; z-;qR>1W-GJM)N#0=R8PaoH@hL=Gz@e48JAWO6+TP{ip+v4}=B{cQGL zSPwYk)pT-z^Qj6gkvZe>VD<40RJ_y!B0g+#TOcQtcC^geh0%O|RPLNu@iQ&$ap`_n zVM(nkjFgO4|0`u^<;o$x!O6wL^(*E-MSGYp5RpldsRtH6#y`36@wu%Lmi~S{BmJa@ z*=;#-T!uHHhHM}>mdbi>@kPU1S*6R_)FJ$W0(koO@@Z2hg4M=te8Sp|>lo+8Dyvg@ z+V)bJr=TfR{GExkt6*6y17+pGtEm_Qyq|?mdsK~S+xr5~5PRV@BAvCvNA1AiRXQuuX*$Jd1{IlALF<Q1qKR)0-A(W?wXq;5f;_i5Gn@$=)wb3kv2 zX0IH>q60<`>OAD=Rk;KB1y|Wt$LN;TRoH zAosYuGtgW?=#~{DrlOUB2#w-?_R3hQY-lX?$^ZE!iLQVTe?db(2Tm-;%MQ24Rlxp# z3Aq1$*wx$4*H_k2OVJo${&pR`5jPjKCA8JJx`m6;&3d*QceK#W^0hII@M(&ru|M3> ztD$1$8q9a=Iwq6DF&Wzt#umi-1bN=b<5i| zy$TkWt2r+fY8O9M&Cf1S4wlI*Cx>gQtEw1w`~8bI{dKF@e=OAdm#k7?UgWysZbE+8 zjOc12*mO*-UyJmvCJ{Z8RdZw8Ax3J`zY%r?DNbB5S>_gAX=dgWv^8BRWMml10oyb@ z|9=+1_-TIszfV9nfGBjp(338p`$a!E&NPixi1>RQh9Z|>NifHd(uPP3E4nQ87eYn>t_%4$Q z9``{hX=!06p|Ci_n;s!a+6^kkKL=gmzX;fSS$ANYDmpPFJ~)(l^qVo!Kz(4*CNg2p zVl}>jwG#sAU2dya>2G)-k|4y!YYEH>`d_z^Vob@djOy;V1h4{K@QO0z)cEI0ZLBUJ z8+N6Z+v9G(QS3Ois~OYWIp`X!Dj(o65kMrLYMAO+SRbV7Pq!G?l<4$^?zL5R-P47H z>CabLHSy~e*hgOU+WX$>rLK@zl{3}EN0(*J&HfT^AiuMo&=kX-{q?^Wv8~2mA;J32 zIM2v{-j!!+lF<$uFpRk0?%<8GSWf{QP$b5j@J-t3&tkrmw=}hqN^VFIrC#BAoRouE9Qc zWxSr(M!&s1ay0=$aOMprJzCK_+t{TeX>vio~rUnNlweE6V;ZT8<+iN6PM#(l+pkpXG z_p4YlhUQ~*YI;$&e20F1b5v3#{z$rai(ls6HOy1b?JIG0AE-`p? zgG&s$;;`s@?;y*NBL`vV8}{+T^L0rOqVtx^+8s}$Hw{l*7WxzWkM!@xS3FdOY7^Rz2aI9##XsZ z(G7UUJK`VD8DyunY@JTy-64-pI;Ts5ktiC@P|wPo;4woBd6EoGn@OH=4{clj9+!&zx$)?jIlrHNq^)p8 zjUUoYmOeD=VwH48MZ?t=Jn-vV$;G5WonfVtzCX@I9eEFV>MLN2IXi9Iuv5H8+|Ota zI4vl|JYLiNhyVjo`c>1ID$1{kKP_IH^S_5N5U(7p#?it)ljY@z*@Y)cHLf51t;0ET zG)S>jG2WhA9Yf-vsMM1WP4$M#m8QANoN5tbyj~@BcAO1lp+L#KHgvie-+6ckGv2r< zl^FpnYtI_~q?frh89#Atr3HCoBH#CBM|V8r_bM}V@>{bhpHcdrGso1aU`?^T^up4v zkH`k!*0rTVx5Qf@IG>we!b|;@)w0vRlzOsq6X~|ee)XUpngr+C+ zi$8YOU9z1{j0l}r@pnjyYfFh8pm#}a&HNpPr?G!gy37#O(+7!Xs2-}t=}yJYB`)H7 zQd`$4*Okap9MHpRIW{iTW$>Bf*crEy8Yl7sD@b`HWnWaJRN$U-sUm9i!BJy>M$mu$OhFLf5!K!KdgJnGIhAV_X#(HCV_Rr< z0^A$jocT5o?Xwl-JZPMIwqIrl6nWneXtyA_LHRISmIUU9ZR z1+wu~T-{XhP+ng!_uFj~8f#92e_OLPl_{Uycn~7Bucp*?=ho9HIWP9(1KyL2&_Cib)e2)zG(*gzk-<`=72|1{GAyKylaz<;q><4T5{8N@}sOlv3; z{}FgNitBI(p7#d*IZ=t3^#5o&_jsoJ|BWZHN~}_bIYm)9pO9496WX+Wd$afhhQvI_e;{gI6}X7nD7()?!-kf#%A^R6^#Sjm|U z=*MD;P5v7D!JmyYV;Qrf++6T=#dqKxaKr0@iw?{v{T%fkl(X!&gsgc{O| zzVE+HUD^)Cf&JOEPT!9u&mqRU1l+#U4vzdx{8}2v_|v+u?kh?59|-@-P%JddU^#}H zOL5}(la;lzP1gm&%Fd-(R<^VnNczBisDyxwLe8BmXn=Gbhp>X8{Zn%#BZN3`bMVVv z(m7un6(aFGTaUv1^5aVxljHjr{L-8ZNBKja74>&a|BGy+szp=?S>P59{fK9+_;P(b z*p!c1zn%@)M6-!ExELFRRq(HImDX`%x#FIKSR*(d2wCFGQ<21Z1PT6|Ww<8$`$H08 zLobv3p+1{*d(&rjCo@T)GA4w98mW(QzlFf>sz~-?j9p5Q0NiI zcPiJLRuIiahznG54ePV7d^G>oGFXS_bRK}d@c39YROd#pg7{$YsEiR}$)J%eti&1= z*|f%jJ@K$F_ORy~j(!vKXCA!RiSTauPdxEbR(OVpPN3X2drNKa(_Ok+HpcvHLGFma zXklLYGF?V^;2#YnOmOURfs#47(gArL)F-{`7O_Ir0S50K1Z=Yogp@&04HH{MQXY7T zkQfDZw061iD>S3WP7f+dAnOiye4nnY<}E?jFiy7s;&7*?#zuCm{m}>Ij1{+mn+^=5 zHdg6;yUt;zE%D0vRriBdE1&F>(z| zj%I5wm-;bF(2WyJx*ViKUB^z^Ta1w@*650sP!G~l6KZHltMIr`P-b`1mS^nOdR&6u z^>$Kl%PIEHu9e=dy?N}*2wfp80F}%ZDb?<;Z5G=yzA85 zN}ZhVIU~iDPAIpkzf0}JYu+FafmZ(06EnGdVGUHOue9}-|2w0vg7A_$HcBn-0)OsuKhTt-eY3e zCf1y}j*2TY8|t(x@~aL8DH>jGlv8LkXz%7e!G#V3cH3h+RkP}^J0&Wmd6s!w#>;XZ z)~OMgXOG@|D)RhGY|(uHX!KMLN~-YccuvMbsG`$-g6XH!z|+3V|_KN zAS?JG%MBk`Rx?Y{w5$z{xl8U#$-6B2zwdThx6QvW&&Gboku`YX4B$E2L&ww)1m?M zAPsTpYvx1Bs|nMrVGj;h@C4VFeW$bGaBQ z(Z!}}Go`Z+s+9UUH+U9vEwD2bEk})TTsM<4Bwws2TyETDqek|&QyM>4%8DEfvL{ll zYBK_`5{GSdrpX&eQC&f{as-Y_LSoV(n?)YfNXqYUx~+u0Hd#Cb>Y)Ki7X#FvZeko! zX}}pmZbtzwwoapcfC(CTLQ&a>5RxP-&h}o)s2;ePA&0URpWkM+7C0L3SnjoW2DAUA z!94eq7JzS8(~OL59DE+)up4UnD%qD!{<^EQ8aAG|)%fouGfW$5cH%&-)(n49@s1=W z_UW$9g591#TUG61)l9!s*US%ra7EAeg%wZAaos<}85k8TH)kXcPvDV%PZUb^wamU? z-#`0|Srm)_WF{kX96>DFKUywO+2SiQuX9nLTfbI|M77-+uV!t zTmk0TI=%luA!XhypwqBZZ`6|?UgcVW;J!sY~_n>~s`=YU*|2MP26tVsJin;+V z@Oft{SEC@6HjOgzq1_a`yX>Ux_fKJLze0eKN;{LXA6dj3wY>4QEay0uOPGCeH;APa z7E_0(vl%W4qw_bCL+!j`F^xobj{Vo4-XTL9wODafM zCwesHS@FqvRJyQnH67wwm{3c1k=3_b=HDcGb$>0M8&~58FG-FWI%?;FUo1?s+4Rb1D8TN&NQ4$P1vkLKF_B_-l*yk7Cm^^mJX9~gG_RSdWF zYX@*uuuPjArKx(*lON3Kt}t%JmC(8HiruAb3xu>9%w8`X{81ApqhHFzlxtY$MP$q(LM ziM#e^q10BbYqNOP7AfX`*3OJhRO(7t!R1L;c@W<2sH0$h*s4{7yta0Kvb3R~caNGx z8W1H9P`LcSU@Vi+mJz(CBim;cooF3I*EWcVm9|Goe z?3-kM!J@M36;adtvEmm?G=xW?Z$0T}_g~#z&QSykhrC4nX-X9O)tk~-4JlBbVsbQV zy0R%QxkK>$&zULC^$Vk|8or zsrgr^wbCKm$`;95@^>Da8Wb&N<}Z9&g|+V5sQsTfiNxDruF7E^-H{FRgE6bO9LJB_ zX-C~WGi{hgE=Efg+=k}q94EQ%r|Ux+dcb_=xWqf0#EhG}>aL{a#4~K4NBSOdepm)xb>AxQhF_P8)O-=-mL2NwDgBk+d9Zc1oFmiT!XEWuA zKb-&^wnU^Cgu(!}7nGytz8@PY+YiFD7?@xukSF5M!+)&<$;;xhL z=q<+%owEr{zM-4(QliDJF@+?|mq}44r>i~B78oSou2ks3CYfcIvqiCAJDyg(G+eYF zqKis|<%``ZkG2CJ@aOCYULxt42pITn>)&!w*kv~6r;>?@jAnBy@D=_23LMMIh$RlZ zP(tbr3O|T;V)6+X-wK@R@b~nU<0wQ|?W>i2dYVLS>td(E@rHm4I`5r1>25sih2Zj%=;l zEX)QoMUBcUJ8e|P{cSj0~M?#Qum3ArK0^u zhm{({d=M{B%?*S~^ef~+JJea&44-@z{v`C{h5}3a(AUyIHl@^-{rDeNIGJbQm=AN- z-U_{o4^IXU8vq^=0Lc2BJ))!0%Ua=3xv1(^Ix+`{agZSy*ke=D6B@FkBbSaQGd+-h_01;qcrdn4QE~TG#=}wi4Q}AkV%sf9E~st&lsg*8c3KIl92u-R&_9J+mTiA zYa=4@3bL_ajhlTXWeW^K} z%^!A&es|@sZj-~)>2V*>IP(G*2rdYbKx^hj1#}Jth4dlG{4qQI@})n^BDEWBmh2%r z0T5oq52 zoGVPvKO5#6IQYfbZ;|fBVHGLDI{XEb=s}j87w!4Odp0zNmyh%TYzuk0eJt*lu|S^# zrI!eevLF;0Ck{Fq5%lif!<2;fye6n62IQ@j#`sH+tda|ORE{W2Ug@zDl3iN2HPGN7$na+h@b zyVAvh^}Ip$NLf%zGkZ)7k&mI$7eSC2vvbQ85LgfE9z4DU&iL3kUa}>xoC)!>uz&JS zn%AhASZ)0)W?aG#ubezd(W2f3CWYC&cb+P_|MC$h7S!JUw#P~tcqleyi8YY5N*hM z4{}53gAlYb3GLMEwbbt#DHVAc&43)rEi;UdM!^i~8WbgoHzLm?fE%J{o+Zae``=Ap zJDFl$zT~_cSyZk}p9Y>3x^3J%m~Bj-{MlGz)FV%}Tz$*~ty5FrgU4*QT46tx6}f0X zC<)8qS#&mcC5OC>)cE~`aDCD7T>WZ3dM%_p@`(#)M)cZ@^%htExV+aAsLm3{2uT}C zu;62diKHtXcELtbyiR2*Ot*RhzgO!p)&&bezQay)^mLjTKLGtH?e2?NSB|kaJnqik zy){tQft5cIN$rZCv&Y~QEB-}_^#ux+HkNZ;$jh0_c@So@KbWGx?t`D`@K~I`C2$%d zkxY7A8K~4l7S*buVV2YScOR@A?Xa_;4L&fUnl~dey2QdsSbRs{C2jMsCJD7$-kAI^ zwbA+|PZD4lD~m4aE^FI>PzA3xMip{E?I!k?l&pCRI}kls@#s>_<`FeNn7g~gUYfE$ z)nK!_$VYzG{nX8&BGi6IS`?C2P|YsNM*eOmB`u}+(r?{!Yc(-z<#nmcQP#|4e5F9*d}#{6`ds&2mL}j=eEX&etuGnr6#`s1! zhG&qhiI`et>?G7A63A_mWXOel5~|DL+N2^fIT-1lbMLw!7kquA_ht2|G5PFh1SnsNJvXD1S6PeTDf?;FcA#tY=&tcsotx zSzK^{dKgCZ?KfdvA$_6j>G=>QC_}uEE>WiHSU-1c@@3^+2%CLCc88tCj0UYAYW~hJ z_8lWVm{MSw9;#@2e%E5j4%PL#?E>}U17VIX`)20y8pQB+20Bv4RYJkB_SbRN z8&4KH7T=oHbvupE`Hs!(Ni#d_!rez+2-by*WL*Od&-|07Dvtg{&$7;G8VAhkzpuyA3>^IoLs0#^?K%Y^rBI_w<8ET z#z?evtXuE*e!2eY`R}U(OXo@Ol1I9&u?D>?Jyp>?KnmeJ`NpAIX3#-(IN^?X)sikG zVh2Ib?!^o%Nlc)9j4iGU6lt8O(;->223Qd&Koo7&R2x~Wx1v)cTp z@tG^xCkEA_QAxb9W67+tHHPI_VmpygS{(}==y&M&dIYbWd=R0&Xu0LFf z_f~}bQo~*c;cOS@ye);)8f@1Q(r<1~{!-p}phRpp6bU$^V>z8 zsL>Fo&7b^Q8Fle0Sx|IT2ZYi)RSQw(E67&k1KtMa272Pw*Z!rl{*wG@5%u?E$3mag`m#_$?n9}2Y{Vl8n6a*2^W_gSuZmKF~VAtn79GTnHLDN;mwU+B6;ute`(tOmG{$7Ju!8 zz{U8*LnOy0lgdM$GE*g}CU_mOh&wFcA6c79HGttm2rpE?Frio)&6A4qKoK=rHeLK zv7pHt|MWfl74vQI9fAzczMKu3*G9;4#85f+De;Lp!y)14wT#W&%P|8aHDD_ zosQ+ej?Okw_kzsRWiMV-vTw``ZTKR1?>$mkgJHqS++Oi}<3Y3ccv>X942o{G>98vE zo)iAF=2S0V>yEQ)PeYYcA04)g0_0M*{q;dkIrN(4{Z@^->PXKP_(KR3O=No3RpA9o zVVEKa$Sqw3RMpIS*i~KYySF608tvuaN{*|GYX?#zoy(TZ8_)8hOZQf*y|%8R6)jU; z8w>}y$g12~WZF#oC)t6theAKJTFRfcg467}aL1#$>;L(k(DQ+B%oADpHS)tcoXtPU z=!8&@fz2!=KYx#4_`nf`aLZ+SkCx*i(8xg!5gizK4-GsR$PMxjt}MhYu1}<*YEhU_A>0%mLm^IJa)mxSvf@yerf z&I@PqxQ=C- z8aZFi!*(%8jY+~kfSZaCrTt1;c%%}_ohg#dX;>yIa~gKm)oP(lQ+BU*TOBe**d2cu zYpzhgYuqwoAe!QTmcyvX_4(nK#$sKh++f0b3nr5Im9px|AndmuhF3EXsP6C|&9h4y zJr)QlUPzX%+&d(jXrjwej!V)$f9%p@tLGY;Gk(*YS@E}cDw;jvoap_#?eM?!X^m-W ziWbTjZuX;h;UD=(CaS-PBN7b0)S8RcpyA-5HD!@^rc~Tg5jnE=w!URfx?r7nq1Zep zvBPQO77$OnJE|TR+*{dNL3@@t+->SrP<*PvJF~r;)0I9_@hWN#XKtQ69kc#F&w@QL z47QkhlaqSyoO>wD)NrxJP?%{;q*SHiUS=Pi7Z1AMy!JR}-zQ+2W*GdeH0AX2L->{nNo zK(aa}8ltB?03t&1xrK*U#7m}I3>g&dP!1Y|Z=&7RMN8_(SI1;NLDPF{CyWunS+|Dc z6_6d%tM{DqH8|NsB5=A;D$*vG)^Ce%f3$97f7eQ|eEj;1V}Fw9ggw+Ty?g6d-jZh} zVTZ1P$QY$mh#&iA%qHw0=)|R?H8(XwYrGn`FHdZk*tcF)bVKdeGr)ah5>JJ^I{8GP z-7S07r5Vr0+J>|Ct^4sp5jga$e1v~ zcE9oQ?PDD4=(1naW|$Yq6y4rm0CE~3@C5EM1D$-?_i%Y~B4|78q|4BTh=GY*ge`MZ zTV>K*_s<5)^i=Y=!4moV_um{5_3=2`7YC9rY^kT5{-~F z7;$JHRwnLXvW0aoi5(8DhQ{drCCfgb{;aAstYr`$da;hMtB0EwzM=$7?%UrEeB!A_9`vaL#uGE_qkoJ5GsjLX&=x!#E z1a`(4mYGZ^X`cJjc>nQ+K}pm8jKnE30NlDomcyg34SIHBNBfTrDW+d9s1R@VxSb)2xiT>%~#n@?H zM>|aoaKSu*Js9ex!$o61RxqGvL%85{MG+c0hyeHyYE9rBezNZrA;lK7X_j}-2^%-f z@b27dnE8P1;gZ`{52=BDS7AZ~eVBfu&@74dfLNAHQb@Ij;n8I}4p$sDg0wQf(hnR~ zgjo%ZbGUHMD1Kk!!g(r0kevj4-T%yF94BTR|FI(5p;1tZ%biHYl zBWf}H^nSs6Kk+37*+jfieT9$(RDwsrL}c%NqI|R2j3=^S`|oLR7f8Xf((l7+gWA<(wG~m@s9149S=s6)# z6}Gn1mA8I>a`Bh^aD)l9a2r^z?CfUwly+?Lqk8nmV|%0V+J|D;%yB!HH+ggX;T{b# zd<`SlOgG+69sP@dpe_z2fnlE=gnotCslYdCz7`3W077-;LDLkwlDjY!8bA(}Ipw7| zT{XYq=@#9?0Li#nChy(FQn4B|?D14Pv=8Bxz0@JPoVdFB>Bix$t8A8e7KO*=t`|7{ zN;KtAEvUnc#dSF`q2OZkPn3(8-yCjMK?ZZL^X+cd@t3_Q zN{ZcH=I2!)2O>*mmKgvYX2xkK)%Nz54hu`|}J59U-HE+jh0?|0!iW+@} z8(1x+?3-Jc5>om{%_oX3^)|<-;7pXW&s15;I?H)-#N;bq^m{n$W-)A+Ip}AJB%LV# zJ?hB#LBPZKI90PTnBhGP-Ya3|vJ{ee0^lztO4Emh-20(Y*ZEfy=>H) zZVsNcHIV(Tmd9$q+g`iy=xLdv6B|N}SsoW*e?kCl>N9yA@$B2S3%;!YXVVbSfI7?b zQpUz-ogRy6YR4-2%LO|5)FN6?r)GTCVQ%biJTZwO5j@fDL0#QDy@Brj<4+|}#YHkH zvLlE*0DRx{_CLvGxc2}yKIVRzsny$RUDJ60&ZGA1_snGRt;&&j6~B{|XOsyJL*#Dp z>to}KgTO3-Nz#^O>T1pEdygN}9@Ph)Wa)w_zeZ$hOAgzRYy0pzwOh)=)LP*q7w*Ta zWL*muS{8;ip|wHw3Q8Q0L<~K#h9PQq$jT)i^No9AC`GP3m+zQZ!PAWm=?gRJ-g;t) zn~W-B)f0qh2zgA=F&~y`qG$i}TFlTEa@j1JPcf-4RE^*7uUEcdu->uw;o(Mz=e5GH zIr1eg^ehODa+!&X6C7k8!_wk%0V1FY=UvMn1rXj0uo-URGKZC7vt+lPiEe_t*i(OTd2WFA}!@}4H1FoY- z6QXrDo?~>><-P7mrE@%!j_T1kk@+1_WA5$i>k>Xfi10U;VhbejNu@!Oy3_@^=UubW zeanP%V-JWUOcqnLhLU6&#f=0(gljzN989xkE1M<8*DasGGZk1NhUhKCk`b$XE7>|C zkD~?}DS=#f#QQoEF*byT6QC~YhluQT+?XX*a)kGcx^*PK@scw=Xw}_TJ~MObFQ{DT zv|`X~ypa+Werpw0?JclwM!`suMAcFMh&pCGcl4fU^4a4b!?iQ~>b^W%G4@%MzWZK@ z3Xaw?H&23O2!GpIHH5oq8I}{C#pDQ+^GX=N^)%wL6Q`%c)Iw-y&l!2q3a8nS-ivy4 z3LKRsIh~t4CyOe=Kpn37;B2%;UXU@02fB_5>?`2KjaV)zsxyp#Oo1uc0O1{g(J?yU zPMyYM#&)e^k{pjFz61Z!U8dKx3SdI~%6zY%n0T1o!_oDC>SyuYh%%8;*ln8^GuSjS zurlE;ZC;-zXxH;{b1O6Z;NKa5wARoSgLK@~G+|N=C7NTf`%8IGG+e#68@ZHq3h}TR znJ-oKz-4(+Sr_?%`I}pDU)?4CS}kJY|C)`&5GaENKVVT3Ug+w1!(U$=SS`ik)pd^C zUq4|nx2+X=Kl$D+DqV;|EW6vCdx4w1oU~3WF7#YDMEHt>=8M3vrk;1TACZFe){7urZBWZpbXPor=F*+>MANaEdW5 zuqWem+ihNU>6f0ZV_BMG`*gm7cU2#a+|UposOv4&0Mtx=VwuA*Xw3}Q$(lskjDx`Q zytEEByn=44r7!ZhY3thTsP5r^Ien8{FK_fr)_!;?)dO`~cv~Vm$tsu?HoO3plhv~K zWCnVR$-`8K;?tSEkG4M(SJ=bsgPXmFVRgS-MO(rroXIasvIwyz?O&FX&T+|VY#!Y? z>aqe&_Qv|P@*}0iCcanSivfNQGNU$p6^JU)KwAY2&daT~0Xs(t8NHpgCI+h?=c+9E z6f$^Dzh;mDit@`U^3^QGB;_8E3AIoaGECcSaoFE?)GW+Cr7geQMZN$xl;sj{G`CiX z?PR*8z$CZ)?e;SI*`#@z^R1XRoug2$WBz1z<`$2-`HD*JZvc3r%(_I0Q>oxBp{yEj zRq4YFLy}ZzD3+*w$#mm=>C4~MKbMr zsj|eP0!2$H>flxjCdxUvJ07rOi8^e=v8{EQ=pPy?Q%ZM?7FcphFKQ$!R7cM^H8jts z1RWgHXb&0PN)wnKA0q%d`5P_o64%)vffd1Bn$_JHQ{-YC#V*y4oOEDB7c0L2fXJh@l z141V9v((GZzfr6Pz;(b_JyAtKG^`8~Yx-$Yd2Vl;a6U0>Fsy?dF!$ibPKR4)Az&Yt zxxaVgh8Yrcyu0A~+Qh;~7E>h_4a#7!l!UC#+|+3fG6?Nsdeapbxt;LT;XZkrS~nff zN4ztZ*laUD^ldSy-V54vH(!&R(a_KOCC$e9-DPJP(7xMvfRpsZss#MB2P>Zr&CU`! z8Gi=Q@Mnpx`b4@nt&r)3R1j|Q`xiL(JCM4@Vy(D1$_{iQVk)R|1O$zy#<+dUruXQ$ z(DUYveFhdbc+$5HbFn(dk0}%&#`m}jOc@M2v_%olxy-&6KQ$S~ln@geaF~L8Jr&W? zFH4t#nLhWHPo~PwSC#2{pt3m|mZa-0az5$#>b&v5-|tnSg0-WUoD9-!n~*CeO-?M$ z1#up3L^q@OUmU(uBL0wwwKp`}p~yG;ylUclxtn1uS)HFr9&k|vluNiz%(4a#9fMU{ z*75Uz9~(yTRl4BO^x>yGUv_NGPu5Uc8$uM!e3C2+8h@Uc1To9y?DXH=Cf9Wk$J{!vKq;=W1aEfF52OYOhUv$>FItP;Bn)PpJY=D1(TOjUdObq^4T5O%5 zb6M5~DtQ}g+F5THX-X26kILz@e&0L-N+YRYN1Q3!K~Ww2jaXGMySv+sgW}2|2N2GL zWx|5#Rs2kj;q8K0ci>+*Cx+^Mrsn(iVh)rOELb2cbmz<(ILF|otVJS4Le)`*FTd#F z>_MVOj|CG&b}h#@o;Wrwjn0owITkb6Mc#?b?NnG6b04zand5IRXrJt`6qMdCq#a80 zqnf4Z-0tM*R`8J6v-BL+rv4?<7cIvG=$uc5 zM~3U~CkM0jHI60U8q?|!I(7ZBb{W0XKHP4XWqIt_9lY*%U$0qe-^OXWVMNFT6|$bV zb#;P3%XcZSvVQmKYl36b?qjCy)RtA~Uy_y7fthQc)Sf3{Rf>sl>uS>m4FSt93(Vy5 ze4i$NL=beSKMc}|fP_ttf+p=${?u1hqK0Bt0Y)fi>Ls6Ap647^c`emX#K=emgK|ZjdN2 zTX@sO45cHiKZb-R1_N%J{iM}2vyT)y!RR^Ecm2oIpw>;m8xh^%XmkNEV}9tAY;aHA%99S zIsSV6_>HU_X;|r-!eND6(Pn<;7PXz}aBYyH4GQ#%nf)sK+fDJIguGG*zoU%+3pIN^ zW6_?@%bb>i09Y{>|8R#Nf_Top#*beKvD%aVivZXypf)TtS8Ux%vo>RH%u%sE{?%JT zj5;p8TVfF*PFxd>jfg*QzI@(_* zcr@Ssaufa%6-ZvX672yojf!9Od~7nKQPLL+h>eML>Q7l^0Ghr8y04Pdw-%_F#aQp% zytTY>j@`-Z?T#)`9?B&=8acV&2sQcdJZ@SJTs60{^*4tvRFJBW`QrJ$;=&iGJXW{J zVT@U=P<@AYq*WPLY^O-%yiE+JEX2f*O#V0AZfZZ}2HNR*CKOdzd`DVgfvou}()+lY zw<&;g62UN`%rywH8fK4c3&AA?5jd-96zmc6aqXtQEidk7Sq5(Qn^(V~$@pl0#Bs4l zjezf|^`iAfb~I8V{EjC{U!jAruVE8eUbP-5L$DJ=aS6*@^_bf5&x8L&7kzK#>Bk&K zx1|@?Fb~BHgg{R7BKKq028?do0cADKuC{krk>uCIiM-5N=~k{YGtVb2@z+{bbJU=` z47z4yw_F9C^IW>qnxUc5ZHr@8PS|l}X>gHy)KFop0o+ke2`nHWz&8+^h3XxNQ=UB&HpCTHH;*A-I#J?xPgHGCt*a2^- zrrz&+FsSvRHf+^XFDrWC1&`}fLF|o9Ov^9i^}Jtu{iD~%_$rn{)zn!0NH30iPM;%! z{1&p<;k$TH0iTjb7p={(fZ);fgAOwpS#{%UTcq-ewY%&0?QS9nlKWjW=R~S+E5&gh zvcdXBdqLcsWfjy|C!P{`#XD;8HJ{BYAMLEkB3S%}_eqqlW%;$%#J43}Z#OPI%^5)L zc3EgSBMJA<6=b*@ZeWkwxRNq5bF5E^~h{DERqLjb=1x?eWKh$HZG*<`x}wm3g?gIiEjEoDQs~ z9l{Qc*sO>7Yckfw4T~Aqmkjy0P+WhgMa}i|RL0{#XklryH-#XeB-@Cm6J>=`D_Vcu zQ(BQ7VDmfh^shM;8s+qy7HcG`i?Yuijn<5oQDG-5)urHu%rx@5VW}8~F zTGI|Y+l2v3ksX5l&J*A{3U(ggzYPd=I@@>R_WM)g?^8<+Nrnvg?N_uP_|6?LQeQvQ zUrmWt&))j%Pkl4#!L9SYM`j20V+onXRbRbgEXS=Coq2==wb&I4|WI%Ckq2;{OJY!T{ zWH*hixg0y?BVRYK)T^?sTrLZWL!2Nahm=>KRwN*SU&t2qTa8@It>Yn8Gb}}R=k?*9 z_kaXtKif|ZzqPoH=CjPL!sidu(|8|ta_X^g9NCnw{wN_zNPFqPp$Wr-Cy{X*6E_V^B7Q?2Ez{Y{jSlq%Ed?~T|&G4>Q z)NDDs^T1Ma7u1;QkM^C6kXP&Y8Z|V8_LWDMeI2h+SyXWyO3ban6i^QuZ6Tl>ui{ql2%{YQipgQm3??XZ(yFvhdPtg||D zv(GSkR0DE`9&wMefp_mypqJB2}~8+;8nyZ{N&(l+v=L@IaK* z*IpG9FQbx>GYO)P6XiadY_sm&3b~-EOZ1($T{=vdS2oDdLBbPIY&%PLgN4EYPL#r1 zuBSy((9q9$e}~F?!2SooWN@Fx6_^QJG0Mpp@%x515|dbqH(!llRn1$embX5=LxiM{?RT#F|(nE{v1NqvPUzs^~fy6qe#Ej{p|u65DF=bmQUZm!LSnvBtRsO)~E@cEB@Or<~Lx3n%d~< zF4GH}tfv2|$o)xx>kKQapsee8ssi+p4TlbD4tFZeW!cxm`BI8b9W%$#sWDuf0k92z zK5t%wk~k#-NETz&fC|-xwxN#&xZgM=ije~wH3gviZv_Qq+lS-2S(~~HcFV$<5QFP> zJ>lD3Z_5ZL;EqsE3MZw37@$iJ$ zYX#RAB5HN)|K9}=3Ux7Keiq!f3613( zr6q^Bc;J|KX%^k?oUyhu7=g_NI5LRaaUiyw0s-jPa;q(M6w%JqkDnTT_QYH15`)H; zMR(m&Y5fAAclI?vQv|I>XA0r5JJr~ve@om&hS0_{HeDiLH=mGnW%soHLNkUdOQXsak` zEI5-A>o6Z}YAZgNP4~7?B1H6r>aD@+Tym6O8=vfsDc*cJrC|&`5$^f8dGGAw6`yo` zQYq?+qp@kCJ!V0AZ)~+a#`To|2H*FPL4EUe!tS9zzd}}^C+2YPT`c=R* z2KV)ArgKZ{WXYux|Zc#Pif!N%3SAR$7(C z=Hgj4FbzCz1qyNO9G-(8Cc$MDRv*E>d0swiqrzU5s~HUZ4paQ=xa36HT?-J@K`>)i zS!sLbk&~yX@o$<-9#2(oU;;@Wc6WmLE*Wk1(8|GiP+y-4ZbwAZsqpT^(ZAQ*@)@RJ772`{ppiw@$~A*k%6B@0<%m&Te31O; z`JRQD)Q$&ol36WhJ9}cPla!^a7Uc6hd{u?m=h#-LQOxVQu zT*cB{YW2UXP3nIp#q}~d<@&)}+f~d2bH!X|U#bhq%mh?$Gc-%to~1%@mN`3-`+CjH zr47|v;x}9r(e;Rc##f2mPOJ6p-KmYLCGyS_YTOFw`J3elW94kRN{2{%WtX|$Mwihg zMmDm>?tFaDc3WOjJ3&D2n`E5H&8X|xs7J7xxV$e$3y7>Pgg)rK@9MHkCd7%>K}k=n@e zy=WSla?A>QL62U9!Yqi<47vYxsEgLz6WIQw-sn3Ay(R5BwdxZ0OIL=Q~WSg=Q6vD+yq^@?*1-tPMRZg zY^=T!Ykuw(aJG@lnFLb6*?|-kFB@K-tsHu{TScOq`^i4_^uf{{ICHoCH(7h&cVA(f z)uHN>d;ap(${+oHs5u~G^0XSE-X8&?!dtFx%U;L)+u zzZpFI_JLjVvfbKiQQkRHfNvrTiVMD9p2Fx)ZSsGv6#0A2y>6q`oL{zWh;!&K$AIr8v$hN(Ye@nTX4k2Wghg)q1tr zb?R1~he3Ek?f2Q+L0qm@dZ_cF2088AJ`=4XeoyUn3%fpqF8LvDUiBJEnd2x5ay`vv zpqd6E2Wq{qHGf{+Y+9r_T5NcPkhh9-=af(~GIG zof~DEeNc7#%P}QU;W`B>mlWe~ozC~kseyeXUJ7JJplzZwMbdWf>>F)aDn$yDmCY3t z7v3_lkZyah=MBKJIDKszDOl4Chja~N_mM^jRQ7Jmy@BSUHsT#YYFc-^dqLv>jN(M7qwV!#emr2<(ugwN^h-4)#f-dz7&$~RaVnqy4}->8i|QV|DacfPU0=N z)2G9;rpG@~lYQIX{F({OXW#Zn*#OH63vdgzf#c|p8XU(d3K_mebx$qe*dvQ z=6^D_mrdb5BXJuzv$yQqwdl`*{pLX9@`uz=H{>r`0(|;+g#4X|+B)#t`e>1qeeB}t z(ojl!77jz1JF_;~3;iu09l!Ut`XhtvHdc|x6-Obfzcb&&CkPE22nv775@l*;jn65i zATF)+Tny8Om;XqVL&c}nkBt4NdC$65blTe)*tO zvdIsTasoH_2%>G@{e5m>&Pu)ke1G10tOtNL1xs{uCxi#JZg$~lLFvII@caF`-J+Ou4m4l4$Q%K zG?;vst^k@LqxR)A<)zI>Yad;SYUrTXZio;U01af|27*9SecKa%NAOU^SXaE%)*#-_ zk$_XWZ2VgUU~AbeC1Qk_Pvl5uprZaXb;%%3XXFB!!WJ_?d7Qb2d@SQVZy|c5Y}T*~ z8qt&UMdVY|k2zbYoa#>~Km(~>py*F4XtORP11Vbar^#$U(Q0m@TeI&q&MIeQ!p~7! z(5dk7IsiAKk4eYyLLxQSFlSLNTI=X!ZeJuX9|EH$rnG*^<(bm4t*;pS;0jN7jwl;( z>ZM4`!nIBsc?m#0AxYHNtFa=<#KP|#e`R>-w*B5iJJfE$U>d}9C@@p|oTx^gZ#MCH zVsw5arC9VGR(?mgm8bEq@2MVKkoG+Mz-bw*)U2}Q8QR{d z)GA|!B)5Zo%;8OHzWZsVJ2DSS^13c=;us_ra9E&HOtcu^7NeZ0&HwRq9{yDK|NpO4 zr&32H2OW+|sH~7qw8vA5s5 z>-v0uH-7-PxA*%s9?!?){+K8VS`9l`KFRO#tPK|X_RUxrT_i}=7~0oLtcUHJStV|~ zd%${SK2i1bDyaz|Aahx3E z4!x?`F%Ne9J$L>62dlS>#EXl3xQ=Q5AT(+(0wr}gwsxf7AGWiYFTx7>P5CG}QBY`^ zmG&nqltBA)mb)nI%!yd^#$9`UaHgAA`7}}=^R>@ChULQZ9%AW$fH1i7>vMYWHmF9In@EtQQ4ENDvw;&zgRo0Wv{4I}W z7&|knaP)^Qm;jf7chV>L25;y2+Rc)-0jcDlv7QgQ<7|oTf1~0~nYNf88S3xT+9<#7 zuy4>dY)vw2HrA|}u)@b7C)-($T)QbNz@aVzIMlh3Z(9e%8fG{VmUzZLm%*RU_&2;q zulw&*y|o!pLa`c%j`?!08TCe5in7T0DI_ZD@1?97bWS~rb&#IkIxqoi&D<@c6GPlB zk2tYZD(?Y9Q53_-=`7w5OQ`Pb|Ul>rr3T$zLnK)}vhlD>-JRySEND0EE>h z$;w6B7cS)hO$87JvASP~m5|v_5>g1~!pV@XzDfTi(DVm^EoAuz^u|2GdJQ{KgW8Dm zFR7*iav0l+wKoo8*cDu(LegB{zAENqS!|8M$3+r3arBM8n*I9$V%f*E*SZ%``+*#` z#_Y}AH<{P^QH;?B3i54VkC0v)8Zj5TLd&}P?nLvMS8Q`(S6RrP}OE{q{mRZlcuvMN56{ad2 zAD?xeeoop&A{S32*Q+nz9aicY)5M4)-#wjGcXBYco*!{pspWb#n#LYGkhb#H5?`~) zg8674rcm95<$A*@=JqpOa91(s1pke5M|Ry4am!;2OsSAh_ZhZ1D7Ha#e6h%_Dn16U zg&dJX`rmH`I^F68l&rZZOLR_laUUjZ<16(E0#rJF3C1b8%j)jYaf#;^yF0bezi>5!cl zKA0Kgbo{?9hW>ENVU`s(Tq)evmUP)3p z0s6{YH5=^9@RyZ1y3(D6?)sq*bC#@Nq zvCN#ir(=n?SAt%DJkD@?H|srz+BsoA-q9Jao>fvw6!LbGkQ*D$78JC8I<_=Zpu;2= z7%ny~j?TWK(_=j+4;$4Oc{8u|wCUAcA(sb8(ehdRW5Ax+e;PeC*qXok7YDStDdwI~ zp#4-9T%Z0N2VsuP5^q3xDF@vZrbk{b?|!TPIh)92WyvU`jkS9vkPe;j&lK5C5e4{y zN^Vo+#nf0uJXckWAf#Epm;u95D_c%~K#TQ<>nsH5HFd{wkAFfri!L$XOnZ6pm&hjD-rWDwLm>*M3S%WN^b_&b{ps$Xm>!BIU|KzIrh3|c%7PQ{){^UZL)%*PH zm8YM}ObTf)>CA3nY& z#YlAhx!3)x#@ArwvUJsvmq%TX!r3gt%--MRTvvpo!!rtKz6I~U6-y-$W>jRS!s@xX zwpt=pO)%Y|Xrg70Rh@-hP#4Rp!;%UU>|97=hoV31X7%A79sF*a;y}!^s|^AhRYOW3 z4~@zYZKWNy*pQ(@v((z&1!5PR(ptctn%6Z#o~tE~(0VPB8+aKX6q=V0|FT}E*D^?k z9v9~LM4(JXYg)UXNKnH{M7yB}oeUDl$)U-#@q=HOQ=4g%D{HPhBYP;S+4ys_Ki?|Z z8VDE!sQzGGcsvYoz)r_=U}oj|V@d_p7(}!xBe@!koSPr)a_qP18QNlk$il@a+6?_8 zZ~hJSAEz)ZFwqAdywS*-xy%-3uvaU+#WbJJg%XDq8guIgCx;Ng!81IE>!3J5c5I8_ zyI~)0F&|~qzECYZs=4-vHzL0MoN&@v_2R=Qj-06G8yISC{YDXJV9@4+eJ>zW#;5Sv3~84o+MB?-vYEE_vyEyHpX_K?p@L}vRRDD4st|o zxF|}tnq~O<`1Rbzd+#c@PUL#J=J5NhNGRLWwaJ!mvK{dq!7OWVjo0Io2WUmE=cXQ_+Y zK!~^n70bFN;TJ zOqx_xRptkU$O1#0&xw`AM*R%Em<-2Ls$+^nMF!`4nn1SG%{l%|Q7SRfE`D%FBWsh6 z9D;(yxbg0S#h$hcv}i`Rr)JH44XRHM)Vy4?&R_GAi?}RCeL-3sINCBe*_xErq*{pLY2?*ZCOSy{hm{59CjJW%3mNc&ic9^Et)` z$Xh>({tiz6Pzt}OwnzI_^vKp5!ZikAE&s6fMHUl9-z5GwN;+EfHfy&$3f&DzPwVY` z`*ggx$LRFWgmZbSA3_q^eraZNxtJG1iv2@4a-hu+lFt$TEbZ##N z^5=YqjzO-@TakOss4~!N5LvCz-b|qP$c!+qd`_PcvaK^hj+amq`mEl4FBVim2=msg z1F2^et2(aJC$jB@u}){Oz8rF%^QjWR*v-fD*YM)o+|M1fEKR2jL$&=xI&wNi2cUiEE<`9~!o+Ej4 z)M%ce(l9%oJ8>XJ8b4}Ei|8$G<>Ov&y$uDs1B{}c0`KhPdIqrm^F&Fzy3*r^YUz9C z{BoRSP1CFnM(pSUsama#miw0w?OoE(R!Jk>>}X8{YkAOz&gJIZt`je{>RR>0>M{Z@ z^BBJRTncsKle50xnoN#xH_RXn=(VkYO?$n4ijl9 zM3&Q4Ju-O=Ft&mt@V&(cy##!Id8ZyJo-QRG=eYoE`{Mle@4M^$r4$pxLbf z)imqK<$(X-V7#Q^8x_s+$6fTRqx& z>9tx{Q!OM6Y1E44-=xJ~Yze-i(wkZjQ(JjuDMoD08Q0?k9$3DaP*TZ7xcA`pdy{gU zRb>91DQHqk<(>lie86rqP2$c|OOsx#$6a6|fWX{Ey}UD!6f7ksyX9M{L=dgTb;%zPe?0lSc#Y%Dc#6Z{U z>3P8h!6?dY;SY4uF;Ka4Mc;+-iY)xcXwe7aKOMyft5r5Q-PxHLXD|GfO{y8|Jmpbd z4?~Es{Ul@Dc`spFZwT0+!c--0FLe++fq>nDlT1v1*xs6n`?pk(e=wSH zLw^Pzjc$ewk(&BiAEbhckn0JGC@0L^gw|X00%RY(OZ_y~Eg48;*eZRwFrZU?p zbK3xSnpVL#ZoKN0p!+;fC2N@Lk*VTwYy7Ye6XvvjV?QbycIX8lSbW5y-da~%z6;?~ z$-BQzt7Bl2eZJRHtIn5*2Zw~@1s~B9><%&E9FH||LE}gTsLpieZrX3wDi@}dWCVP0 zJQF1~=6%!Pn@ExqfyKp9$m7!Y!&Q-++dpSEb`?=h1q9*g{B9_tpbODg_Nr$rR2w(> zA?`X?sLkcjdRWn3I;Shfr=APuU+p2m&h-!i+Y~g2)N4vbtSCml``_#ue21i z;f;M;opTy`Iy^hLu-+s4>dJ6;7?5mT^LD|b};m_w@*_xJiD(~H0SJBm9!LUfZW32ER&ny3j>N&)965B>vy6yoa)%SbwWrwAO6knc2ff@_zo4GLGuN^6}L*Ev^zxi};; zyxB7zdB(ZeR60WKX3NDTe?EdmTA~wV*Mm%8@WYv2OTU8tLqY)_hqHv6IP12&w-x%1 zk#n!VBGFf=B7{8V_*4Le1zU=?8bc3Q(1FCKZF)5he(KPgmv(SEY3)K&hB^B5O3=B% zrB&}yfWdcE9^n+J-ucpzq!OKIAehm6eov6eJqB)=tL=6_wEGXVh+*{O%F)tOwouuXgEu?``)xGNd||}jfhFz(wT2fwct^Ygv0Wue7d`RL#oW-rw<)F z8#|*kp@i|zgTY9vwD`K*mUq!3$~hc2+*(uv5+4*yq@s>Rz|Ga|_p3i{jLNl+i01B> zSKR%^QGEuBqYKAQ6QyL~=aY6ovMVi*K*&>E+Kyw0q5Ih1IhSXc$|w2+4UB&3ly@5; zw|#>r_P8$W#vZBLn1dqwBnR!Dz~O`nC$-1ayu5g7}(GS$XjVhWNV#k>{m~ zjoSiZ;?6}~=a2tzuIbY~N}wa~x7>==@<^O%PLECIn9WQs#x#X=?#BKsoJsBX7~6FaWbf^w>br2ZKfM;x0Ohe8=eT~tuO~GxqAuwr zly@gp_q)qvtKG?iN<-}_NolOz^LTD`{l6>|+oC1rZ!>Ut+!88xBYO+$ucJ|4x3_Bf zb4W@7YqqVYP3dQfPf2sDKoh}*4h1M2CQ@YmmyPxOe5-B|y@8b&i^DoDKTNmjG-`}C z$MkO!!*t7(IoauE^Q|Fk^PjElm6&h!N@}l=!#0@_GY@gG%&=S**rVBHH}8?wxt`d{ zy^GUzn&{4jlT?^09l~S2kWh#r$IyDEgcM;vC{>uqc7oC1m-7igtQysE6OcXr~xOt zts|#hC;~0#&*Mys=IScxE|RVc8%<&Zz#8@EXLQ~h?iWx|hIoCsgPW)Eh287QqOz}q zjjt+C43j<+Z4qQP5r{%P!3nQwcn${?MnF+>ezttGRl@xkAiI2&Z z(EWo2UYHAwoBWqCZaK!#F({P`c>YdI%=cYJDp}@&H7?s}ni7&{0QpaYdK+!XMB@0k zp)sX8JKA(ta!(Tba<>(1cRadY~r4Y^=z)Hro)nd zNfE!(Z?3W-?-pYpse)z;CI4#ajgS?hPf$xED{j^sz=zwPBESTPTi+~!<^yF*+Zk04 zAD@S|w(ACkr5QU{GtEbYl|@|1XfSqdVP7#w&@eL5PX?m-V$|%a?9LVuutM&bb;v5cjvYMa_+sqJ@rw-$Z5ur|qvvcOczG7sd(*Uw;sPz_@C@7OxgHW~lQZKqAcDg?ZtZS$n;FTQkw6Na) zdouw|Cw}9f3-p0=$fky_h9@DJn{Q7n&H40GThEK=i-^z%E19Ebz^sep!Vb(ye|BxcS!xEBxkeFh2|Z|dkh z?NbKrdM_LoG?}4e#soE&6+{|^nFS?moD%#B#Gu`P^48%_xvYww?kkyV8~DK) zw^D#2Dh^W}8$~UGm}i{z8wIF=l3%tR#xVZP9sWXgWBc3|=iq_w4S&YphTuoT;-nrc zFE&_Emmg?9IGMz^F>|*y{Hp9MyB6a>&5$(fQoQ>#?%5z@P3CoK7D55{Eynk6f zHDNE6hlDy60z-KUw<+OiuUl?<&Yv~mMqgoZFLis@$k4k(vGzD=EM}q3JsMCH^S9DW zUjO=?b0iQkaNSVNFx4e}6etNKaW=6?@?d&E8G`8np2^orB57^HPl__gDQbtAH9Oi0 z5Pj($@0LIU<|79;>T$KULA7X3ZWFXpQcx(h$JhdVpK=Ylch4!gPQ&WKhKhmvThs1l zUZTFps+##816y>7f@atZlM7wZp=cAk>nq$Z)OIIzi;I0i&P7i>is5h*&CeC8s*I=! zGufJuvJk-0`E)T~zUq4f3Gewbbx3UZkq#cX2<8g1>xMI4A-{89x?`BXV2tMX$!XJ^ zldP8A$1$TOG|res^q)BlNWn7|5mbtgzX(6FQq?!DsxCvz=C5x&%^n*i=Zwpj`VSjh zf97qc-A&6e+1(s> z_ilX0CI7s#hk&T6BPqaE_29RO*}iF!&;fdA<@`)wis-#@OFx-z9_FrEecm@ z*%!TgrRDk#C$3El6H)O=Wa9w^$T?RLJiNFgga;YzSTao zEjhEIJU^DCT)xF3^;A&h_YXmnEHa#Ag8{$Oz$hGgg}AT3_u{DSoaT({G=kb+h_5Di z?mbKVax(vr7X-i_{Ry-uODa~!_;G?ofmkWIh-J&EW#m#tdC<|M_vrTVQ-Kk#F@uDe zwk6wr_$z`G?#`GGOZjhW`T*E;3S}o?C+J}Kp^2MM>dszW=|{Mon8@{zn5UYiw58t2 zw=j0YQc2y7m&q?kDl77~12RVVqxFD0!T8?5nC!d8y{UH-dsp&aCoxTdL@CNbGW({K zxjb!X4F7ODPkv8v{zOlGs#y9JjzAdlQNcoOm^AFf_xyc!hYh}WP_30E!}h~g6J}T3 zY2@s6Hv)qz?I+!*(t5YIlVd)JFbNofrtlMFMKz;Kd7G{;Jxtz<;kwm_frpoKK zE?wIT3M$#OozLW4HBRcNcy~FQW(Gy0wCJO4@@vx@z8(@E>lavS886h zzqyngTVK5LU4t(qnsF-Ra)w&aTC9~OnFToFgJ9p2V%I4Yb6~sz-TYqr^=y&+fZ%QQ zcc^IiGrs&@xRvsFpFvny*|TOJVE8Hb-?jUg?xp*#$27Ixu-8usk_c&g0x5;Z9PwJ` zJSgsY_rmf$;e0mXvXxYGDe)k9Ow*Cvo!<3pulis$v(j|*MbMz1p9)gv7PaI%L1wc7 zhPMGId*@+z+P^{FURY8`*u=;+762Bko_2pD8-F0mg_&#>cXo$AHh?VelHY@E%_Wtf z&z3%{-NgxZi4OhWr!WkB;d*AEXkc=w z=6K0M=x&4+=C#A`W@VS>f}lJmf~tq)Udy>B>o36JGhFtLwojvfe;ip7q9R=>HhUg_ zG;9o~XoOATGzqnSLuUPc*(``@TB8^tcdKMJ52zBPWKOg$eN(G(&(=QB#_bN#|Al3~ z9cC!Vb+cej%($^q7koc3!4Mx49{!_5MCDM`nC>e59p4K@HA(bS6#2Fx?RX0`jc zPyTo;Rz5A{N^69>${BqZb1vL9#Mh(kxsxtq3+2YyTxHK2)zv4H*nmdK7Y@l1!TOV+ zeY9elFzZ>SM$Y+7%Iy;+CiYvRcM$I4UVJtEtS(KJs8JVi_axe$lmv&G$8vT~fxvwM~_hi8Jxuj&{)EnyO?&J&&&&Y zf2sJ@haA|{_Y9v5icbCaFUHoIG?|#_Ze-8S_!((*04uG0NdoDg9$xRe6<5C2%uFM! zdexTV=JM?KU@=3z`)KKbgSZ{J!}2)&rH-z2dncx4E~ee(oUO8sIkzy)d~DIZqR?Wm zl8ecmcVyz09Qu8o%bvFImUNgpz%zTo?WQK_5;+rA=B1ZlTolLw4K8s*vRojBK0IMt zw656P1hhW)6C(33zPo144b_9^QPMhiDyru_yir0$S+*z#Pbou&ZlB*!y6Uh*t>eY&Zg2r1$Qhz9i;*q780D zXb4&GIFMTA*5)gV31fJSE}G?GZGG)tz4~7E!!$5$ZbxC@B^KPP1Y{-?O~hT;#l;mgDA);?_%yv zE89i#1C!Pt;8M!xU>gEI@kc+`c;?_omqQEsCVkc0e%9NSo5CxcRbRZVV(4gY(H+7i z?En6)a@?EPuC6F-ve$3zSSMRUwQ6TRFgr6uwEo3#4o~xnNE698N>&ob zof?iZtS(m%-tY3GfxjI>ZJq@XnwW=&578VlGEGJ33K9D!Ic=5Qp{zAM%<;OPP`Q!P zp=A;1)i6+qinmVDD2Fn1{bv5Psx#gEmhFe!!nvUGiCvL=vhk6huyjXiBxl^6dN!!2 zNqLpc^zZgq{nCAp2kT3^BxK8!MCH&tmCIdDpGIVtr4l0yx{J}tFWe3bZ+29^WIsr< zpYYBX#thb6j`rw(`g7HPbsu%4Hf~RQ;1KE7%&@xbNOoHw2y+B`Zi+Y32snziTOt6! zv*L0Lyn?+IfNcx^B-5B=g$nRU#gGeH1_*7^nm|#>vHeU*(PpuS)$s5ZOrMk}JN9Qk zE`ph&NGm2t?I3?}er(6f?+w2|dXKr7FOY$a&o|F}rYaHh{6?h^&+f-Z6#QQYBteYK^#e2EOK zXUnL3A|fI>;94rZUEO0nVyRA;6YO<#*9&342J8W1V7FF>cT4Zs65b|Wv4#URWV<5r9r1!FelEfYP0%DRLErYS=qKp z9fCw7Q*SBvz-O&m04T}+P{=RA6|3v^xo!X)DDIU);LTTyM9_ee9RpIsY>P%TwTlH| z7`=8fW%ktOS#o{EP2}s3KrcNI( zKJk<-$2aYLC5N3Y(Xsq$vk*%j*j_N5?VA!qq0LIDh*5px6QqulPshgckX7lfSxIGQ zMF(m$5fGG?y>T9c7Su|~OD6J+0;Yn`wyYj`4GBZfp4O~4sry;{U1_N#apanXNW8DO z{yM>Aqb~jQReOO-tN7vPdDsvn-o`49oydo`fpSwg>P)z~ILiQ+s7F0*owR7oP?a;L z=~F&0ypeZJ9%A~T_oAf$HtYLMVMKwgdd>CDZgwq))8-yTl}Q8{fl8gaKK$K z=kPciVfqK?m@{4YL-_EE*Y$)}#>GMkz!dx;xbrPq-SQG&?uUqBTn9sf3yi<4<$d<= zUkT1*QilgMCvItUNmKt{;H1_xe;e{QRj>@$hY(lt3tTol2}eqoFMMoP1b^-t#+_ls zS?ByX%9l=^&y>bAhp_j$L|(&8Nlv$(&*NSp3h0rqeEuO;vXZZ0E&|o{$q`JLzo3-O ze3ASjVWbEtb4L83@Zl3Mg5m{Sg>Qy#B@8xT^+At@9FJbDCs+DFT4XHodduR$kO``0 zF~er7+opMe76BCOX=p#DF&&c`?v#+3@u_{b8H`zU%PZ`-o!??yVCS2#kL|adRdgWo zVbFXhjpyw}z(M}XTvxmp8&)^#Bg%r@*P9p_$&%`7yAs;XQ7yVHU7LnZfXAmERFa-` zHA#tc)a3S*fREV6N4 zcYkDa%sD7y3xIw0*)8UlHf-n@^5u#i7Uy+L4Www$-`+<<+D?OVZlU44a*!#=2Icc@ zA6ZNfk)-UUdew@Dx+qX6SWGdkBZMTFT7_0rJiyyC+M#3B;WsBl{g{l@916tCWqt}4 z7o46@uef9E+0ycMx|q5#v@!k7Vvn__Jz~)AkA64GPyryXBMjr-Mq~N>&bZUHFRF1U z3n!XHyf$c$a<6S7MXSY6<24YqFd1;7?NQ9M$*Y4z&XGw5U56zw;8$v zf;(G2Mn^AlXOQ$Xrc<4-E_J`Qwr`2=FtpG6+hSR#W=m&De$(@?+4HJKUBWxA-CEFt z8p06(StwuRQ5@4iRCXAP={c}bHQe_?vT6708rN`b5OKYoDy03WC z`9~LL_pNa?ykmkJjb=_JiiOWelk+#ab5v%(tm$r3_`!R@*_|9i0OlC7)A-<)Q-C8a z;Qb<_5QkXaV z;S$<1Lm16jFFyhhx^72oJWu@)p&)z&Rxc_j4r9)WxFLHt0w#55K-R`fQl4HkjF2REajpa?UwT=tu|`!Bw9Na;pgz+T-i4EkdJTVS+)4ozYxAq zxZ?$P6N6ahIHcD9F!6;`Pc`2{sjyE6U|w;|!V0cg1r zeJXMYQ&lipu|g`L(%44=RA##ll?L!5uh&zm%Xlr z$!ghLVj%ahD%pz|1Ga%3^gggViKzPy$!L#vWW?cZ9yKkVS90MHm9ybs zE4lxkS)$}B>i<{(zqkeHs;y;*gR-Z>t@8dcAX3PpkzE&3+h zg3aT5;zk+bXmWdPWg;=Zlh~g~@Y;ZWG&0ivYX3W-v@M z3%y?*7+`B!*k8-0HK}^Y-F)-iy}4hzKan-pP#XpG7H&`tqv8w)>lz!M1d)7BO6t|) z8vR_2 z$&Fz0OcjRI=kb!rr;vhoSyhMT*QE<&M1N)G5`tF;WKlk6MT6n8SH|924xA6uuo%Y~ z+lwX+{#_v$X$L*I!Oua-Azy!Odt4y05>({4t22`CG~Xd|{8qWft;ty4Xosy&5J=-l z{P7_i%%-g}>*a#NAG7uhPRksu6F(al>~51tuaui6D5Vz^N)nueevi_1sNR)+I^5Y$ z|9HY;=Dgv-od@k7MihRhNI)5l7KSB@W6nXUR|AV|U(?>w=4=NHwjpQiT);hvCt+-J_ix|%LfMguH!!WAq3H^ zfUdrzkDipz&22Cs@*F+*2S^b8s~~`2R~fx`2b*dqn1!jA9vK=>88`K_SA4U4RFTSf zcU%9tVR`)7Zr*J^&43+vNF!D$hxX+Hbo>OcH@=prvr0q(jxP@D>b=?h3nr{kmv&KP z?7AACRWR|r0$Cx~5K3ko7+xfn#*l7jO z1zO;tvQWZiJy8ec+d2K*>09RUJ!mIuqPBaVnWcP)1ZE2XtN=<(SgtiE@?uwPeW;vl z^TJxXH2uCEYJ9NqHvM90i|AFKW+45Gx4an> zM#LHCYNJ)>PbHE~$6Pouf3+Ex`B|6$irAxyI3FvZbDDml7>Oc}ZaK8NSpo)_z;UFg z`sOkZqYNTNO!|)h;SK5T-?^dwYJ~L20LYj{o9FbDJcz5-lOBfmuUC1q25(xD2+!t2 zLn%Xo4ML7`P(9NH^A##<@vGs$L?^W{R;@*+oUjNxP*(QpL`k`RdTLWjtj>^=<-61q z!3GsUYkh=le6V1F$&=xOKZm-5=0COXCzS*4>C8+5PqQp|I^dKXC1}x78l(H-n?dBr ztJOlT|9>L~F@27O5`2=ASZxSeIAgI-OhuDthH@r~cZ+O`-Uhb|7%I9QPEsA;yUnL4 z)@$M#HTx9DfP6`6-FaVMSsLQ=^w6fQ%EPkFil6#*K9CM2evdnXXHGmcf(xY z#;abZ#tO4Ty1_1b?gT$~hYzyTOH?t`qg@}say{P{%=BArd>46Pw37ILH546y@nKxs zDMfX}dc#*TUhy(;rBU-+1a87)^0Q6>nEa=BohCLMAwfvNb=~17w z^IGiI%sRjBe>fEuO9SiMPv8LpnFHd{)g_8@)R~DJ4%0)2B>`7{F$shE%f1|58*0h# z@tBF!1gpCZ^)7N&!K&DA%3`90-Dm%XL;GVvWkYn$A)^@oGYVb$lJL_`-(E9de*Y<3 z?e^a47P{Kg13d8G3_8cLQb+AS_WP3CHm{Ovqn2dxnt6oV#HRw%E_ock5^hpG!T#+^ z&#ve}*A|_(*AtK;Hwjq2PN{ECgCHcrWE!Y6=AMW~ym;cr;2?59#*7s@Ge+PTKWEyo zN;o6y>rqA+wd5sn%-qI05Mww=x#5jiJ`UQa@NY1I%lz_dIc9QsUCK0ZM6tQ1`L&hdEc&_4&E6j@X_a7WbwzwgZ^iC`VQ|S`%njha+JbuV<9UU(Bw4 zo6o9RnJT_1lOm&=0R@f&*gL%kUj*JgL%J_iro#yCk{;wqazebk>w zSp)kQgRQAa?T%s(a8XNhxd2#224mbFWeKV|NZR~mdH@a z@~F$iD^|W*EQt*=R7%4Q^&*zthPOnWo@kJ$J{P-7-gFXX@`Wu>l;GgfkhZ&$aatF7 zcPCVEo1`>Vg}k=6TyKHa)tBRA^&%&8A^;>a>et*3wxi2CpW~ylfxMzHl&ny4`00F- zLN0MSVZJ}ZpCgWDjyB(TlhL8pf z*|TQ`@o!FX(pX_PnZ)dG-IQu7)SQ2kmOQH{`H42URF8LPOz{CPZxD1T9QFCcr! zv~o=siTAUaf6sL?^F01CreF-uA=`Rz3P9_-l$LOtvHwk|JT_}9C2yiWXY|?~eXtui(_5-k!SDj#CE!6< z9$QQ~oSbA#I#HM*+7{hvLf7RKOZp9#^h`+Lte(v4$n}00naonfK(}er!=){TZ^sj! zQ`&9WNY$1%C%74mJg|g|Mc%`j`r)@)9Ghv}u)WU@xIIi+$4&PX5?%(F zc+MyI+n7Zap(WV=huw0D0}YY;iZh&eqh8}KnwU1e6p<(raVNeZvS*q4cQ)xy{nQP| zTIzyNFH)PEnq7aTa@X6ijoCGGI*xD_t>Y^`jLs}weG7gueZ@}3mGZO2TSzh-AyhT} zd-9Kub`6Hur|m{CY)b!=CRSX~f8KdEtSsEW6AN|}V_l!gw+x4>2xquFIDas2h(|VV zlfb%fwnBdZ-6p+6|7QI6-E+a#5~V`JEnVa?rf{_cs(pUP+yOcK8mOq_Zd3aWJn7i$?af0Zna<(Alk){Z7ze*n)*yqWC+eD}p1{^zG zB>RvF!vbd`CEHr2sz8MiI51WJ_-fT8mjp%P;HX26e1ky*mEl z(Q}*rB?nNN0h3D79}D2ITgO2VEB4mk(vB@dMkr23)y1MF#gee{$kwRhnrl)CPHWg& zi;?QJ?ckZw-+&+r7_IFJ37H$RZjdO*D4eNK@PU zIW(*iDyN+0JS0hCmE=s$=ksZpb51crlIAR=9CALN8FEg}$8F3IHYUUHo4e2V_qhJw zAFo~S>+rm;=kr>=FS)nM_!gSWju6|aCdxgGaV4$Pz4Eow!^fJ~RU8;++&^GNl5Fw|RGa9aATf#bh%Gog0c+U9ZqYAmwTl zv2PB!kq_7ukIT`^fal()FMY~oy@eA2xUU}raG+Vz^vDm>QL)ZErteY0H#R?{ z24#bJMwq#cXK+JVe$A?&>+sztnzgTh!OJCT^4!d#@Y&3tT1U9r=Q64%C^e^-)`e$t z#HqZq-X(w(v0+oTNT>1H_I8i#tp|>GNJX>dvc=aT_(`#LL+4vFDuz*|Lydbp1jDjb z#oE13ja^%zyFGMc9~DF+hw|)|0%q7gGIN^*DpaVsHWI48RNFh>bbjvS*>>x?RU(h9 zLlsy-sCcxqe*SHQ95=wbGBp0YD|n!co<0)}kiz;^Qxx~AHhxkt5oS`>f`m3XGePGjHuJkvB zcjUXJ0$_oK6&F!IwK-h@s{Y1wu~xB8>>x(k&|{>J0i7(^<`YRWtErhF0F;nl5;ggZ`{8oQvO{u@_&wi?a4_N*|G^4|UJaDkrf z-|f|2m=^{Sml(9;DLIMqUCQ~0_T?DIi?SHxt)X0|pek?5LIx~0zU6DHLXDnLXq2k$ zvB!4v{zOxvfN0w=UAZw&VscVtFH29KmNxa5)fYU>lZ?lHpps>&M^Qajw-kVe#_;jO zei_BI#+v#^335SR5g&Sl1DHgbMnduH*y8Cg7iP#e5;<%&t&(E_-y=-i>{9ME#zl$j=#hqC z=)6V!h@Iz-W~<~j{pFvbqQ|}5^iIFG-!34^b?1RrvIuykztPRr04~?nnc1_p2Dsa{ zmS%3*lyRuA8)5~Vdb`YOAa7E;Yv)}{_S<#rA?8#018#}PAiJ1Q>xBRp!DSy# zYJuKOcW_BKc66+~Yp*E5>9hVvLGWE=w)q*d5Ja@TPQhj8IX1U;elA|vPI#zNW~ksz zkHli&{`{Vp^;Tp>baj1BJP+{J4WD=B$+X`uWFX)`emkenvmCY5v8jzJ+o03;XlOfQ z#pBu>bM57&Zgmjn=B-BY6eZO3#R5o4uQw&f^~X2nvXC|M%io4rox}eP@MZLPE>CtX zblLhuo4=hh5}mv2E`=QB>`ZC1p zvqFK$o_ME$ZnYgvp27?2(noRU0uPs#+21Kd@cgR3CRfv-$&^6BT@K-*BI;ZRII6tO zfEyMe{hxMYKAJ)HZQ!Pj^kK>iFb0vVc79}ddqVHTL;Zt0J?LHkd$o}Gle6X1pL8qE zrpzju&A^48gE`{Lhgs~i>iUR-OD4qbbaszSVI5;Z*ZAoCFH>p-b^r8g#!Sbk+Zi4Q zN$3j6yAvKFTrG;ppS-E6xe8Y6vGbU3#^(eUXyGw~qh^-YqeY_e$$Tz?<#h3L_}hzW z`G7$5>N&+AolJ^gX(o;vWTmNjGCAWw&W%4gr~)JCF+p1~lGtq{ zx6CMG*~TIN%S*qOQ{UhYBVST`o_8qMb#c5H8};hwGEJS+ zqii)>^!9V(t>ye4{s)a5wW0A!dP7k5sbxc}SsHQnovRJ_XTaKb!yEy#evWxLX0tG5 z5YOkKsiubfn0P|L;*WHJJnUZ$TAySFmPSKl*JRfVXGzSR%M7gQP%aMXXNZ`CCw3!u zr%7+5wRxJz!ala0Q#QL)SzSF)+0)FH@R!I&<)9q)vZkCGcTLEKZwQ9!b;#3XX9EEYE%&dNje` zt2w$)A=!6ezk?AaVEvG7cFJMPy9qDO21?~!7+qZ%s_ivbH5IJ7J5KHcd7;h#A}Qwg zz6YgZvRSoi=Tj04B7_gV3?lz5E5j102Q3|^AqlIJT=R^Wr?F-JZ#QFf63=Z9ncS~d z8(^i*@pP-Hvi?bQg;`_{u9gsR%LLnj@}i+CfY3z3O4qtN4w>wS<6#Xes&(FV}b*`{0hQ- z_qn>ZRV8zY>FwvQmJ)RG00!Ig0&cf98mHtlrR_CZK(SCaCKl33aJ8hDjqRF%T>(%6>u0pSk z->zjGRh&JuF5niDY_hiw*9HjltR zg)7co7e~l*)Yw}Poo`-pHFr+tY7V;S54?k)KXzoD!_mpr+_hV)97X#!34Q2`kLTjb z3$GRH=n71E;Q>i*Px3Q2H*5>r+y)OcocLX??U1F$?Z2L$X`B zQnieW&!l*T(3!viFhrj^iK=!~kK9Kypz3>byn3yzP$IIIm0kw~ZC~Lw!S#sZiIsxL z&T?I*VV-O#L%Qs_G5CxfeG*==)Q33Q%1zr!-2XXn^J06t z+;71O#(;ww!@GJ)`z@_Q=B9MxGd}$Gf^Oab+n2@C3yJYk@8L@vTWyM zF^wNH8N<5lsHDYxPx0T%>aM>F*}0qCEpda7cHe1IxI!2smqFF#)i;`)(3SWU%K@Dn zBotAulhM=(*jzS0h|hp6Rj*O+0Clj+`6EUJR&%-w+meAw?=E0iJs~^S)L%J)Gv}hC zGOTt~Ct{a#Ej4$_CMjWzJ?Xu*b{6c%PJ_Oenw&1#jfIOsMtbtPe5%7l6sRXugHzV9 zFCY**Lq)W70YdK_nJzK)q)MciDGqKvtS>0qwd*!ko*4WxyZN0hxQDR+KY1H@MXGdZ z?O3D9AKBdyQM%WkoC=Tku5{4C-d@-_K<7Y`tqY)`j7QeNI)YM>vHfJdJfd{Dr#4=q=-sCn4om2*@y; z{@7da?=g?xikKUiW-8{xro-V+8^%DpC7~uub+(N(d86uU;HNqH$oT5xyYp3xKmYvi zyo2dZ2<$_8uJEh3MHXeW?4P<;Mxxu5e^qZ^@+&*u zvWvpOGh!rTn%;#y*L5B-AC+=4wmg%BcdEz_%npf+y6#+ zAw1StphvFH;a?7H+gm3Shp^JzFylhw-+V5@QPn7Q7mqG3H6!EaES=rOUDx;Co0^@2 ziQHlT{MLO*S+>iQgDdTt!AZ0)rbPx&AWll)R(d6RwVKTw$m!IMtk%lhS<2o&Tm6e_ z7P-YI4c4U}1i8^7)NFB&7bSIS*jaXFxv4__L?O zY!&F_Zcyb;fro$V-_E1e?*=1kZ=ey;jw!WJ@!RRD6SEWpUbke+VC$hVnZG286iqb) z^9&ijH~IyPRbVJPWLsap%T^8+s&f9vN{71@v3;7=91vO~thv$AvUT)a*CfHH_G`n} zhLSB2Jlpd&8WtxNT8?Ko-T)$RFNcb)KYsLcUAgBnFE2l!?fyeCnXrGjo?k7e&kOaU zwYPuYc7y37n@R&R=w<7dhQ0N#rIRH`1C+t))1!gPt%alCo?D9hnV#E}ueh|bZK>Ak z{r!2@q3Q{6JTuRYrZCa^M|lNQdDFg&cD4)cyDO@x8;|}m_5^$WVhQwb3w0f6$P0%= z3*(u~A_mk}eOzj1trq{SZ)`3dYBkC>dcAFQqs8^BJ*DQr$+$y|2jnzXsgP%cebQ+E zqcsvx;v+oBpX+|Z<;{dX{3g5w=_)OPgWdaKBYA*l3BX{{=!l7QAoVt30J)NG8Ev*FpM$Xmh{5!<8jt!0hBD#WqO$)ZR#QvI+{IGpe(C+LtQb-7}w`^Y}=n$c}C4%Ey@O>Voe2~1o*}bUz z!&DJOls`V~n>I)^h_j5Kx3QZ_oSi{A@;rlk;}C)XjTJ`IwWdpCn*&XNKX<{~o0M{k zg_|WD<_afsTmdveTvjDk>b{nkXt9vU7PPf+KMextdQF-AaGrYPXm3Aa?XugFW zzr&d7oJ1KS^7quIAW|r>aUI#yxi?hZ*X|CWA3wM>LT3sAp{9jv?z1ERk)AX_)OI>K zZ#)wuJsWux4D(x;YZzT@nCj&S$vTMRENjwiftSMp)s>H`!-k~tqJm1jz1lk)z6S9D z8mDKBSB%JsYRq15k=(cFHa#w5*@tTmMN#^S4I;-4u-MP#M#>v)E9-diUmGr=XC^2_ zjp1eY`$`nuq*Uz63|%s$+U>*bCVu|3fmp6F_&#S6Ajje)CNRYqWIdabf`79+zKtzl z{L%6CKTwC-Hbi;by{zx0Wssxw=}&K-`17S|KuYca>1R+`{_91DhqlO@Nw#E-ujnV_ z_B09G^+(Z*FW$eNz1)k7_y@Sv$0`uTD$w%~2rx}DuXB(AzocZAEqW$R&9_FPg%Ua3Jt_mVsVQnLQ1N}s0o74ehTp|e(p2XA#Ts*>vfK{+8V1!w$Hbuul zp;9~ONzsWdu3wzF$JkAE`*kDF<)QcBVWkcPH0m3|^~g1_Nl{~?04f9L0|5kDI6)^V zphu!Sy^c*k4Gi`!+MX;RuP;jjp08Xb&XU@7O0T5hR>b`}*t9J!%I&ZoRX`kRERv)+ z^cwyCEz#4CmD-?DIAG?nc&F;{$BI!l#XB~j{+x7$g3FrRch=dWQ9iK4>L){n#xF!I zE~{8$V1uE&!4r&;lkLLw6t)?NA55^^yp*?oG=a;XRlRu6bl@4JL~m&CZ#&* zP);L{lZfi7N-KQ=S;Y)vRx8gw1-X^z-E!dudsVc%HpBE=qZP&|eR1swkdt34ci( zbyQ2;iWG6XMqwT@-48x_aKJ>?>mi4k=A_nzml>WTT^76*4seT$k&lT;M5Mx!y_e+I zox=m*$JP@{t44pS6ounl$$1Rx#Z)Rs3*K^=gh1!f_^WA8Sj-9%JOw}a^mY$`9 z0Jb}3gR%oHTe~L>2!j3}Zthi}iUbNvu2y^;Gn}nyMCK2KsB0|h!;{L_kA5ITWzz?_ zQqUbS+fr;GwgnW~>~umJHM}!SA$}{1i+T@R&+8Tpf&~3cryGUBF|3{Hpd&niBmvdq zfkE5NizxIUzi8t-Cyk2B*91KNy#q+(W3J%Y87W#599q#mtv?w5RIHxioF`pKBJgU2|gWJO8N;da8)GHlPZE_9I9pk2BBLQO_B!Y~(oBsc^DB!UwVjdG7ogSeY5u z^GoeCb^I)CdQhAv&1TXeudt+j^RNm#TFX7glZrj67n3l;6qF;THzo}WJOdq7^0xQJ zzG$wWr77k!H$6h%^X7JSU=%v+i78hL4ZO0Y<(%#;;?g>8J1SMPd|VUnY+4Y%AnZ0T z^nJ+p?qcUsfs*cv2WiW?753Phk{VB%cVvO=Nidl$ht}2100$rxyOoKe3uJM-@Lg8J z6)fJXS)mmjl2G{;kLKx|!mKu4%4j=g%YTiUv5N zW_)bw!R@8Pa#b)#v4rJ}G|Qj2JkmeUoA{i$;$AfksBi!2aY7KT>uTFDt=P>INyrE2 zAW9-V4v4MnzJx3QPj+9VbW)iVoTwKB#$ZY>yJ$s>!_$FYrpI6lW{|A0G`4R*fzn0q ztbmW1I4{iICtdo8!R!i_MX!JTUa7Y=6B(9a>GrE69!I>buJY|XI;+~qkzgrsh_To1 zli@_|sjSbe1vgNGqt7^POCi#nLEw6d8d)fNQL@!wW{Pn$xBeRltMj4*QHHUdU-~)J z4JAgDFiT|8y;dL#@yQeo9+;RxGPAyUyhR*X$dsIhhnM|a4`Gm#OerNh1|JV!WhL%w{qT4C zL#X0W5xTE1vsjW`Myo(OdhQhe#7ulGT3Xhn*PBDL?9l7?z#|I~59!rXWty166wk6; z(cmbM=ej$0shnS75az3U%}seYfjVLGi{3;hhQ>ok@j+JCCnxzuDWl(2owW8y5^M_& z9%F^f>BXF)hurdVKg892<#Oo^GzImHE(F&_{XkfhaP8_un-pSWk6iFBmO-V@rQO?3>2JN_;GH&4J5L+XMN3^SNidEsMg0-J0Sl-4;L)7RrS5z4dV}*E z&W*qR#?<-hHUwc~gKXIMMQhpV>Ekz!xzo1`gglq=AJehaAo(mH!yw7*f++0Iv~AQG zj=tA68L0x67|84F4(uHR6J^m!#WE6(McdCD579tw#yie!YRg+tGWGNP5X`Xe~RhT=?2~#5fWQU9a78e z4C?yPWpJ5+%DFsATD5}k>j4qk7;*JUW2Af7CHo~6Q!k1R@drTJ3Ksb>3sB0N`7 z(sVJRlxDy3$MK;c!=O)~50g)w${@{?gAK4A|X?pw+}YalOwuI9Oi7CMYD5noawaX3cbCSCTi2jmJP{~SxN zk#+0@x{!VXN^8Qjix#VQG8{JNOnvLfD{IcMLkCAHZBVW=L3oK~SJ^By)lpMavOgqV zp#$aX&xw;U9d-0v=A7V!Dj9#E68rZAdv*jQ+YMeaNY|LYNtPPF_GfX=#3>gtBkUGy zNWG!AkjoyVB-(hAm-}#9S0%7^Qu-thz5aRb@o|~CHThe&n!L~%}n7TdN#Q#+sfCnYc+D-lrhn%?Jza{5d@xh zh-y#r)(8Oj^bPP|Oq;>2<l@8VGSO!e50nOD! zN<_qI*%uz)HQDz4TYX9~5{!uUI`iU%+E>iPc^0|M1kZP+_AGv_42=~5R?QGsod;L* z`XcWwycP2tl{&=NcDI)*;LXo zN*aI+J-rgNY>X-ja5SK{%@N`6lfp~#73ZY4B#_&Kx!YHd!MHszX->hVlz!2DvD>DY zq*q!mrG9fZPJYKg#PfD$eaIs`;1fwG?mZd*fw48eOZ^*mOoR;tDa6{xd z7IP&1)+OJbrhg_-Ese9z-!;k3v@*Z=diZH6PR7ds7menwbZs|6`4!$P6X31=5Td*> zc$II)3YmPzh~b9n;?1f-Z;z|K8`vybfeU_iC7hp2Gn^^Ycjv(mz5bUQfEJ-$F-2}c zP_z!3Fs`hW@A8iA6gfD}rhaKDcAQcP&bq{)ZhukW zT7C-!1Q2;yxAhbcbl*-1_$=din}{rx6<}f0 z9#Bz8DDpSGkc4e4PZLOnrJN7HN&MAq8`olfRfvP*TjmV(Vm z=B0WXWyUBTSl&6W7|xB8~p&Mmmn z)Gv4OIDJM41Wi!kl2nc;hCnooPx9bK#bBuMu<@xeb|8_C;a&e$dAK_qF?J=PSE}H9 z#`RJ?zS?8Fwhi9$Xav71XP4KmDNm`+F#9CI2Hzy~T`%s0yH%L(-lghr)4vNJhM$g! znzj4i`9!4utanLGd;M-ly03)F_R4+vkHR${F~TWgmD}Q({rC^)ed1Z(M=nx}gMC~p zN_z0({*%kGJY!2ur8%mtB0)Wk2SOu3=c{%N9C}<^boZ}$GyVoKRxN58ZfHK_>rWbR z(!QN0Ws@wAWVLf?#r|neZVGDr!CDEX9YNFU-P(Gs*Wvnfhq;G8T2JvC2(}a|XG<3% zbYqmC86p2;tt(1K{|`wAd~K;scjS8N9M+MJCIf-QTg7REIS8E~W-kY*E~gHravhe& z_;L2a@AobO6>?gCyQRJFZQ`wLr<~kNcR8WXrgK+B2V$?lC9^USP#HpHk$lSZ&I1OP z+L7oBoO-e9FoAfh-}v%8U1sT9)leX^C!DMNAE+}H9Ls9i`x*K1%E2hm1q0x5E7r+j z1ZFFGy`JOZXZ{!~ zn0T`d`lx%>cJfiO!owTmHK?oL-qymg1*=qx+?gz4DX((YVAQ^rV~h9+rweR%n__IW zlOpVb>)eLdqxs7jm=;SD1i1L3QpdNmgrr**z&NenY1M7&0`YakYbJo32tkWb1-`bj zfR0xbiBcKz-VeJ9JofxJBYV%3r3nQRSk>32YQQk{JT73psPOBh(Kdz$; z8B;)TKjJYBz{FzL_!~aI#zz6ag${+Y6r5({2VRA1+SfTc2n4%ZHs%N}yIFkSL(r3-AZ;%)m__|572m`a#XdudES zS~AJD@*hy2)PVs~jDAF-Pj=e0b>;rFA@Ks#zu;vD_el;Nq{z3oAo(wRH0Q=hund7Z z=5V{tPXEK?0>2r|2t_9xSa`w%V2-t7Z88eTnzw!sBiW-T2giFmA1+|YMJmfy6wL3K z=`Q(0bQ%Y`kUs8UUd6Q_+7zv^$fcdk%cl0l&RQ^`%o+E-wWVsULSydpfIQ0$$%=gelLgW8?o0dHzC?928slVJ{@K)inV zYx}wa-(ihcWjRrh^9}CD`y9HJlp-X+{L>n6bh(z60?4`w8UTfnKQ0x3c|bnopTDL3 zV_m&^`}RZS%m9-#L2o<9C;?e!ya~+wi%oJ(2Lt5ivNX!_3rm&g0Ce-t4q1N7b|}4w zp*BVgHzF6OyUaTpE<(U3R_mKhJZ0k|$0|QPAonPldOt`;+I8|Ol&Jjf5UqKh%pD+t z$r6*h6Jx&f8PAbkqy4-05Z_&T@rFF{u{;)rJM14^qM=yuI_7$kn9YuB>I&Qt)`*GN z!VVsYpxf2S$13VkRePSVwb&^%CVeQQzE9}F%?35_b#l}XU_KyaPK<==on#iRYbnHa zs4^7_6G(mG->eqqZr$MmQ*Uryto%Ce`&NEMed3?A5jmbJ zY0G=-P=I(T2sbKo`H!5a7mJRJ#)xx6fZXIp?*dh8WFlN2w!avx^z*G_URPv{sxb^a zf&Oj;W^l5j(b%Vgo~u#4ZoRR_F|D_e+72YILRawXk*TR?OPqRm_!ivHdNv=?*wZ)Q zPv|>DY+vo*^_~dH^7$X`b^JQi`s5y#=ssbQJPLa|d1of1)Nsym&h_ff zsB)H>-tL|qVN4r-OVC*ow}c&Bbp+LYFTaVTf=q4g!%XV?3jwZ(YZI2nTovw@avj0R zd&CGwO9isP4;^(fkTul_92-bbF&!_?*t1i&8LuuDsIK+{(jU%Q)ykvyhVHFHF3prGi)M@!(Kz!R<#8leW98c%< z)^&$fkR1@;>h6Ge0)Ki4f8J&cx9=9TebYYH>h+ymF)bK}*mZQc4B|MonfquF2Z{$R z3+{1Wr4^TWwQ`jcUgyWq@s{p|>;=HNsc7yrZ8X|Ohp>$p6nqGxw_4-lu2+gn$ zJ=huy)W?e`>Dr1*#pO=eRlu@TiEy#%z)jC9Fj`J%yfUj`yMyf9Jj7n6sw}(T@5kaKqt~8438DP|PrDt6(C|8_en28;9 zMTE8dhi%$!{o0v-Q6Ddbo;tRA#kRgXPdod)tw9A26q0xN8!@$PLz}k**CzRMS*B{X z!yZds^CXNvNrEv{C*de;x-3-5l9}7B4oKc@>P3}%%*X`*%=zoAlbf59#60RBMe+E; z!6YaDhXR!2NP=Kld@JkIvRPMP*8NA8s)`q?tL?A}+P4tQ3eJwot^-X$cD;Zuh#PGz zO1$R;&;^h7t)@KqQ z=Z?XTLfJD{9p;h*)W8{StWbsL-X$6I!8>3^N87QfR<-I^QOyez%OSI$EWRz}cq6XL z-7bwR+ptjhGvuxAYEoZgpJyq34A<@e3M&qxduo7LQDSD2=at~2ZO?(~+YQ$>n-DI} z+!TCH{2U>a8Ojt#*F=XilEWT`j*QJV?54#GwF5WAh8*+gVEHBtHo*m!B?D}(dNUtt z2MSYU8-&Mfze+FGyq_$+vzT_)q5Nh)OU}n0`3;$8sL}sfqebX#UA^1SCG3-a-2NDu z^yP{1=xu}48=CJCY2kX(`cINR-If)H_qQ}=r;+23w+O9%H1>YYporeOC;*N(%Z`XlY9x7k_A zTT6Daipoe(%}p+)vdtnrXulj6Kl?ELrS%6`dlt}fwYt+RJxB0lQ$?IhnnN*QYx*l) z^V010)p4cn(u$ zeND+?&RLtbFZ^!X=JvSiqL`H7oqn}T7e~2Z-wfCK?m3Dc@_;u6faM@76bbOH;av$Y>IKfp?KSAmOW`yZY zsM$L2I(U)|S?`}0kaVb#eNozay{(W=HqpFkGtbc)3-ojAi&|vcMcXRKaWHduKA>V= z(13KorepapbEFSqq*4_RVli`&-J`iD6>CuWR(p$|q3jv_I+IOCtvc2RiPP(L@vV+M z;CcZYnSeAbZa@IbYqFj5`6(gy><#ZhLWq_Z@G{}7&p;=t^AueuZCoZkRAo@B za7G7*viG%Bza#x|6gQtUQuMRTh~=c875WhS<8%# zKfGM)x6@P}_Oz1oBD=7eD|Qk08eb8#JN-C9^uxRS404!~ti=_7v4?OO_nn6;&O0h-8wydkSS3e3n{H%SpZiWQp}Pl`q6_Xw zc)!RLPgyELztKCR%}~G9M%z%w!wjHFhw-!^j9m{MVlDXbFtLQdK8S5Uy+afx5=oeT zGXE~+%6-%0m-R&PR(qZW)acT+1^l_zSm@qqM5^qdJ5ItDvUA|KNm|Q6h@8BV zm$5T?H@l1gknBQ-Fc(2XSpg4T1(>`WlOc5TZp3XSvGSetRxc}&-q2AAu{nFj8Mk`{A$)iUldIF5rw!bDWF<*OfkR z<8V9nP~0OTF^Sv(Y77-|ox19g2Ujhf+dHs zhuz89NZOgR#Q^K$5e(f=v&hyl;s@7R)7ugaPDxT|(IwaQeL5$ltr=|3cm51g(Y~pN$4M`QHseH}Qf}W8MMvo=5G@eO zqKoPuOA-IL2E<3zd)YwAbozA{5%JZlY>^BZheN&yGTKn%ryTQZBp0i*_ z4R_)67*?$G!4UaL3wW0^!L>%#VIZ=GmUIB~20J@ruu(2s(EbIx%yn@mPcKPDLS8@`C%(QN#=9B@cMZlS;Dp03btK? zZ*=qxV`}H@;`m-&4|gp==YWvyoyl?aC6}d?x2-*y3|;?A4pNN2JoEb2dbPcp&I_R= ziiwMzL=A@)z7xI{ajZlBVQCWMdu;PMRQQ}0PBqJ&OmW{cS-JD2I~Me?bN_C3T|I`q zriH1)TzE4ZezR#xfS7uYJ)OhzjiQu2?}@kRU2-GVSpb#Qa-$n9#= z3&PVTH3q#HF6Vc3He9B^bG3~CcP9U-k4$6Clqth^66?D~=}$)e}bSYW=<->3|o>#+Ql zZ|psV`EhilpyUmBJy6MaW;Ud@Pa875jQN%!*H`8J^4JzCmDXd_enc+E?rPoKacbz4 zj#7gEIR`5!8M;1LjXm6;%}}K-zlE+DqXOptwk9BpHyD8wB-!_S>c>pcH7_YUB2XSK> zOGJshj*9xGQk&xwqfBL8)5WZ2&e)3vPwe7i!k6#FgyL^81mf~i>j^`j^u`SsOt~BA zUFaFf17-=s0WC&OhVe>Ym`j^IZI@Hq;m&eB(B?U)3EZhfF=)l;APkyUK>pa{m+18f4bL*K%#5 zVX;hivejtmk=w&Fx>gWMQzCl>Td#{5jRd-5seb}cH*k&D?9U?L$B zD$QRH{%~8LmU%do$}3thV)geOY@Fo|#%{6H#<=~iA^HY8U(aS(ZYE$Dt3QxBtIf~# zoDcV7XakEI29DTbJ2U2QP>HNwB^&pUG!v}NYnimnA6+*e@n^S!A-GX`XaKi9yDPUT z_u0sTnqB>kZa`cUjXmL3a2vO{-Fl2FHMgN~6dT|!AV4s1ZTG-J4HFv#)*Q7?H&Y8Q z3^xe$bZ~Wdqq{;OyZEP7x(l~t^YtV@N2g5DO>!BEoo`XqKUVO5T8O^~?vS<#1XL*6 zKLp8*Bp8b)7|+1+9%2|3HkaO&CAeDf&2TAq3LqgfRIu{J`cjgT+gXd~z*c9Pb+o}} zySbqUcuAgeyg)=xTvz%W4|?JZiJ(lK4@4b+`4mROJS6pwZe)GP6AY>>UJqad z!HLRrnB92-_R-6F4Uemq6#1EwknJ8;7prJS3~HRlg!mK^uIFSaQhvw%Do=Aa-RnTF z`yw{cOfwrH;W=8Q4d4hd~ar{^Efp#&#; zKA|V-eC@C$+Ez;p15xS_iRDD@<6~n^6P?dsoHFDSowX0alkk9#Yd+c3{m*VD(f8*ciqEB_5KM5+e zZQeB@!OKtE|9hVQIgkt^p;P05kuWAJ`Q4L>YQD-FUiKRTeG{*SvIL>GQslSzT3K)- zb^(DE2-dzjJ>gj{G3}wVewI1tOy%+37>8j93Ky$IkGuqC%cL&;wYy%Q_@{o3KI5Tb zg^<0{{(5~wPNIw#@x}DzJN}8OU0lJ=zWQStfq%w{L%uML1>yuMwh6CRtL7uw0;qx) zkiX#y>YD$r=oY>ld@UGg@>6fO|DrKuTp!2kIWQX?iM7|4;v$A5_+aA)H+?G8n3)w@ za-?|-P$Roo6mzOxD35|P#Dr1ZNo-Z?D#7V}to#%35A+?cE3GV`rS)&!{D%fnkiZZa ztws3rD5CxMB|dObO0lB95w9G>zk6-|HRf4TU)Nr)JrRoK?)}VQ_`2mUgiXWP#b74r zc-1$M9@-+<62o=;-uk3BR2LACYlL|O8{szV-pC+cGz-!pZU>ds$BRZLhcWZu$Qmsf zt-kvATAz^)j8D9-EvY2v6l#xOFBPl5$fHN+kq>5$Js}I8!%nE`HS{C9?r-F%I?=kC zTpnJwrsgYj1xHHxpYN&MCgHt5p-<&KtOghdyBFLBS9eu{4`cKu&WlD2p;-E79HXF) zv2cL+dFj_8SwQE@NW5cVmTaJ>)lo6Gh-1-aZlj^S{k^dr1})gvwM3~$g@o?BaY26} zOzbJ?=t>&n>W`gNqW#*R2guCwLDP}KjsNf|rL#rR{T}ai!-ap?@G6J=b&MxRZYJxDuW5`qT;!Pk<=AB6FFOn&{8|+8FgmM2|KRLAg#K7 zbGn&c9qM96_w~3jF^XZv1}z(E65>QI8W;Zj5HQ1`k~O|z=S^2{e=8r z_hK+|(jr_x3Gr$(q%%}i9jt`l{j)?zSpK%wHVje{F-0ixhPdLEI&#!8dZsIPU(I_C zD?VE{FJ*$2hh3tq@v`~FMg&>J)cvwU+`5{BC3pX@`@;YTw$n10Y-hxd<-^OwD929+BEnbponl=Pr@vn1 zvSzI>68aeZqC5E-F7TRrITI4-&(k@j(IhUiwWcl#W*aV+7rUB(|2U&CA1W3otrXL9NWKI6 zhQ@TZkQ;4K9-HIK5oQ*`{{H;istH3{I?H%L@>+6YhmBihK{3z;pDSQ^dFB^dqZRKU z5)#}dLwV08DpUK!d9!>n$Y3{TtkqY>Yu}ccA%4*e@-H&$&w{8U-rt9D?lPmXh}hBZ zG&H6#h$jj|F*9Gx00>>Kz|#V1iO%$^pA0vU_CwR zcBh67qFqgZ?PGEil7Yp27d)`IgRA`|Pz0gEVFPQ3`YaL=aiCH4LSB?CNhR6ESId1m54P2&{W zTFXl!D`;8x>nL^ja%OdD!k3lUm0U_@?!xnHpl%E5R&zxlv;D(TpKHgzode6GF?dS9W%oc=K`v78X;{=A1~ELXTf2d{R(fb6*GoM%>E3 z6mD}d7F8fajhJp@2CsM1tlgg+xkj|?dfI*36+>8Kk?(v)?!x=@6wHB(`8b{TU(MPD z7yM6L@kOm^Sgn`;CQxSOE3%2M#6i^VdJsf32z*kuf?YhNIA2UB_R0_?h7-W$3-9>Vc}?I=39TnF%c`tD?o z@wERlsDLuFtF{N-i-1kEV0$J1?hQ`|Y-t)e;A{7NzN(Zjls>5kssjEUdYyXM2tfR> zHDQVa0H<<&bp{TMvnO9s7kIUpIUHsgf95nasX ztAtHl{}y}3nv7K~_97AbG=wW@ggXhjzA`$$l^1?Um^e>R0NYKfg@FG+1 z*PsR`$#2dLvm8`18i`U*yYz9`QFJXdYAVM$Z(gSnljaVkK#oacx|4Gs-w*m$!$Jg3 zf>29))MM+$Y}^Ct>SBlm1Np$I8;+sFJWiqKq3#18AE<{wJo@4>Y`_J#3+=U$m$?Ik~o>StJq*yKQ=1>F<)_d6*$uH`b={zY4 zts(;M$%Qi?IjB^Nkc4h#GYVJDkGtgA4BC3k@P_Gr!vQib*KtBE6KIAul;G}GaMh*W z>auk-ZoJM-=unUE;jxPL{H?+M|ET)*c&7LG|B!Y{wj!6@R=HJ@By(*lMJm)$_kRmaXB*aKjxh%O~M;LOM``l;dGPi85+syV`=bZ2F_x(LQ9`CEz6#ND3SamiA71dStv|Y%4sAn+`t<@k@^idY(|Fj*f zZP6w@qW# z5slw^H(C5I*zKt+bbU&ewzdGdp)dexVX_!O9wzJTtO|u*l*=6lwbU-7$gAR+PL^-5 z8SjsiyZcLk0UmFW8#&;@bmft8<(iA%yY^LD8T229ukWdY9uojQY{LY%cHPVo0afA&x>Te=pp|$kW<0;A0&gO z^Uh=ANgu5sW`k^3$W7*L91{kg*iXpM=&+SyJV6Z`>B*q(pXrluVFaE3@$eN^nCh+{ zZ6M25($n97(7PH15Lqo;UVvr(3-`(c){ri83}6~icL}(+8Q=(+p|^lQ7x3mEBuQ`Y ztlWW|>r!E%a_-A?>Kd^{*YC@traxN_xAs5TC<8{fCni{qM*uc@-^k;y<&Mhe`fe0d zi%G2j|6CTas#AwbA-N(r%06FR7qK6q=7Eyj>(xrzKkbO z{{z&nj)%>$GY|*-3HGVoZ}sDNbg}0XQMinD+DO#djT@c!N`j^j)!-*3&c4%fu#@swVJV0MjL}1y#gLUPR$?lYGg_6&8u}X5 zD(*Bhx5x3o%jMxtUFvj?{_V%TS})9KZ>b`(O}H<2GiOvWYFK%-L#Z2|(j}og)FCK~ zYTX4v)ef`Ncsd`b|AQ}#AknzsQ}`Qce}d%kL=fxHqw%i-HV^y z1b&jw=}Yg27*Y8prcPb98rySxEb3VhZ)nh&3nRnDmgh@={;ZiSkQXvX8MVipa;&^r zenqz!ZIF$IjvZV1^4~`d@Uw?c!%Ke==&?5@Ha;-#aMs6}Yt8p`UYA~86pLk7zi%M^ zY}Jr1WVyg~^b!>DV!Gs5v$!c@NlZtcv<9|8%xy{m+VH}~PUcRNs7mui>1~I-T(cZDfPp9)okC(hDpuf5M#~4ZsWl5%p{35EV)oO@g`C=Jp2#hWwD&B z?JPUDAcs4v)Q;Ui_bYlmJYQ~qh*&##<&1(AF!y`$hgjsbB-3J9<~@W??OXi z9>sm{uMDZu-ET==DOEnzYt35KyNh&^2^djyad&lmdhGCD;tuBXiikUZQ z?-izXIS9es*2SMkCCn{#h1f_ms0ZwLR1lRzdnx(*Al|VO*bCEd5r)dgj7~ym9#{MC zcnFV7RrCte9HoEI+Z#*D-gq5U4H{{Sij~-1@SC1tJh`LoS^zM+F_h|d%<`Uea-~~; zKVn+6%Kf>y`|BWf&*uTb3t@4QZI5$j4KT*?e28S^y2Thj^kKdsX;E9MNV=%} z=r}BC=jCs@`f_R*IGV{Bdq z1mm{O&B?9Tl2K6xT178~Sco1WVb;nX3>t*WT->zaXW{u$V?eCwXJxTEy&c*z#aBH) znPO>e=pVEp!6lyu1yjk&FAE8cr9pu20JVg27x)_WY_1aOs0-L}`I{rL@Fw6zkjv;lh-Z(g_dW5c9NX7^iV=`)b{+Otsee^`X-vs@x~Q9R#K3Pcz%1kd zIgu`I;P^GK^60Anzx^ps_jm#bA&m zyH_8t6U1;EbdA>eSREQ)@E#D2KD|dyXO9?|;kCi2EM9ma0so>U9~0zF4tHNx_I#;_ zVb3V%bA}#dFjNo=Nrr0Y_l!1cgg*6^e+!jjeN?tJsO_!pZ6BU>0M{03mS2~x`K~BO z?vQhxEBBl`-FFM+dVc61Q|Xdp#8%CGNWEg|Nv6w_uU2v_-Kf*tR-)%AN7d)4C+=Hu zFR-|bkBljX!Y=bZ-EioleNDOveY)a27E>+-a%5^%7Pl#PAUGZ%D}x{8mK5p8Rvu5W zmN;{KjzOhH0KjTzPsW_$4M&82ScL;MKy+Mvv46vW{)D!(9OWe7$=-(@%8MM+wJqtDjZPUV&~0PAgeLfhP(BO8J%{z3{5 zDuRE140-6hXOX16vn#zwKgi z4gSQ2@D)Z{+@{huHsw_EFi)A8vkZEgK+D|ik2W*Kvf7y(3I(^4K!-7KF8sp*MYTwaLe|*kkT{BZmnm_buey9t3 zv3c3N$VG4Hf5>m7vXu#~&Q1_fIu-5<1e*7$xz1Akpvm};#hojq_#~Lc1P`CjTk129 zXbo&cg9fz-6=kJIDUM~#ingM)kq3|>v-E==$A+fzX*kY=niXy18{!J2o{ijymWIDF zGC*Y-q~uG^W6LU@QN>`rt%x$i-UuAe;!59fO4R~V!POq39cT-A&0#UOM zS#wWc-UL-A-o(6%H*@W3)Q~{>T3b2j=+_?cOZ?nbP9_X31K^Fs_a8HsvYoB8k8PbF zf<^aa3qwcxpPBo;v?ph&7nu?Zj>3tTi#>Pk0xv9GVi0_=>?dAGQpb2Ta-Ln}8%g+b zuHRoJv?2}Hy%^~8r#}j5_+$72**!1%S?CfW_u8w@ZPMzWvyOY_dotEjbXp--#H_ts zL0o}+(GPJeUUA+9E*oZW7>)Lq9(-lWXY!*N*0+Z(!+Z0FquaEo1PuH{vdy86}N*pWiT1Q{9JJ;IkEIOo5I-Thn zyMMZcF3MB7C|XML)IDA(+rt2T!Ir@FRr-<>jU2?k-=MaQ7ZPRXap4Jjt+ekCC`~%S zXME86bqH%_;YPwxz6yCq6@Fo6elVR8wDOsFBk2#yb63vK{Ge{|C;d%ZPOKdT(Q|Yv z`+JhVa(6?ks6zY?QQO?_KBL+Bx&(*Q7uzCQ<-EHDJhCtWvebVai7ouh-zzVf%b2iP zc>5sc%xoE*&>YOrGq^vJ*pqR%SGC?U9rX9Q;SIleN~zdN&p;m11#qR1@X?e(3%m`P zM4e-m(}Xgmrkb`-`|Vj|m}=tA?0X5GV-O(ojY44h9`O3;t6D?kR4bA1M_aQR2OifC zagML0+WM<$T`3lw7%oL0-}n^${<0bZiF&HGj_0*}vIda)#1pL7k>G|TIX_^S$0d|| zOagzaltx0HPo?`a$dZe|R;k=lv`}gL^Mr0qQF-620|fJ{GwaXysVN4#QWEK%j}8hS zi|y{ci4ODY)k;w7QPyHjrL=_sbvFe%Y=AMc2 z=cj%J&rjR_So!PEe^o2tkD9T|S9Ryczl`|5Yd|l*iFT604I{<=H?Hkr$5J-4V9z(OpYy3m2 zv~W14tka^q0Yw>t;-LT^!uGj0??SM^WDq7^3^Jvw^@No2UIzhDD?Im$aBL zBxCaJ#w@h3n~p_L$PX+J(m&-xNN)Ooq+~=Rm`%52xX_<*hm_@Yr(fhD!lR0or&JFu z3tFi=dswGPf#?HiGq%+B8}1Q~vQaEwT3TdpW)!zeG;YI&~# zabE&eGPJ8vjPf)`4dqbm&*u*ep8en+10@dfDWw8Ybb*=XfE7(brPgyN=!GZ9K5U$G zSX{5lI-}H)HS;}e*?V|Q-^hZ-RW|Q;JkM{rS(DHtkscX_p6DP%amdT`IzKDmT$kUi0 z*DjNA#j5PYjeV^M*v|5126-jx{@3=WI+EYNnn5_DBF=(Sk0LKh^8sINdbHily_hIA zLX$nO{Z|$a%?A*Gm{A4Iv!fkuWdn5P!u|PlALn;9b$!rfh*dF5-1P(8ZoBy&Qa%t^_?p!m-&vh$7AE& zk8s=*5!basYtb!}y~g^M8-){PSNngKVyYfdQh7~igQ-`M&adTPKZwkF)#jLZ zq0(=RN2uWNAA2^xMNLOCzA$v_@rZm4_}=rDUR$Y~%(Jf%0>;v~IKqN6RBe5cp}!KB zBaBWnxToURZ~lSon4`uLhhw<&+p-(bo#hfuOWKOSPL(*bK+t2h2Z%%Vs{e9(Vo4xK0;=MP=B5aF5uoX=uFW_v*iB>~HWw$)X z1I$L$Md!5}WRkt{q@^VqsSfn=c`v;1(u_1-$_U!$M-}`2ML4>vGZCy; z?$3B0t$9)`k3F{cyZv%RivKA;%M&?+*&=3~_n4n$9AMI6`@A20nCS-iCtI4;P)R}z zq0e%@BGKpGn&s(!Wh|aQ`q%bWPd1uBty&)o3)#a22w_$^{qS?_KCHn-HkHdH=ihm( zxY8>Rh+akR%=6r6`Q|__Ee~A7zuoqbw2LOkN_2F|l&o&xUA_+;N~BqrC?)>&#$Xbl}$cQ!;J6LOI1GoKMSWcV;fOKRzukeSF+N}^k# zpIf6oQhR--ZllS#@YciL;Ug}igz8ZrN7d5Zj5gPx&3`fj3Li&2s?XU}Te87NeKNF0 zrEzCeBA}Sl@viw7kALpUTgyWtMv>?1js!P|YK0@FACEGSwK9Dl#aw8=vd;(WKF>6x z$^}!ie+jA9H`ef^tc$B#bNi07r<&GnH=SOd+F1AHpKHmZnuzZXY~)6lOFoa1gN(M^ zMgCX-MTbtgz`(-HIRVCLr!@Hl*w7HZpkRMS0MPQMG1`2O*+1S1VIg-Gs?+S`+Qe8x zHMH;%iC}4*cBWYcz9NtktLAUjSr!$gIC6unJyDutv6S;nA|%)RqGLZ%H=$m56)kvX zS{N&*AbxQ=`p$r1?zBTpji%Haqz zIw8*d+jMMnWqZIAUEb5J+C_DAT6tpZ89oeglJUk-CanAsg_`1D+&_@%rx^teI0&8e zyS;X_-?Oo@Z?s=O6#ccoRcj?~X~(ls7&X`S3K;b4eZjr&gY46z{&O~*$Ne?c(SqL^ zzplRsq7f4{S{~-;yq(jn9coNnUq&xEM}%!y;gF1JLY>!HLhJl&i9{5JF_IumVqL^t zs2v?2&^ET|@%Cn8kSjS&^L4WWMRJTu)Y|prb!)F`H*&U2vKym0H6_|$ zn-~^^*bb2+=~rDNTrT(Djl{6pXg7*)Mo$#;#F!JZH33EcyR5aU1Qo1B2HmeJEWFux zWG150TmJa<%#fYw%+0h zZ$75f*r8TuhiU#;fj%HD4pET#Ygqex?`nf&R$)6Lk(Vuo@N0qp?FHkbiC=clwiM@^ zxHQ-A<)e{OES~4#0%gqgb^nh_E8t1QHIB0^jQZqMdNA7=62w$~5mv^xqI5icE=It0 z>gQq6<^zs2Iys5yz8(W6%fh<|%D^urr{W}D>YwM$6!xq2y?&4=GdYt`3ejyPovfW7 zxY)E3I1Z!yH8C|Ep^U6PX`PSQ>wYy|EAx%1BeG3M75P+b1JN{SrNYQ=H$n~BI$Afz z9t>R>KDyfZcy(`qz*K*>?UZH7rTSK){{+xT29f};Q@Kj4YA5=Tw@as<6LKR{RJ1+4 zj@7o^YK$Pfs+(3DVE^5q4<^L}0>dqbWHKFB_IS?lVP`Rhu-b*IW=@HB7S!T&KYoTg z(eq=DI=pT&;-q+O&H+|S-Ii-Uy+=QEZ9$HNoxp$Z zv`#PAUu@__gA9j~5ij1shD0u&Cl(2+Q5dfhH)1$nTb^EWVYuJjRMRr*wKqBVF&Z_L zZT6wd|5sU0t8I5~u5oM*PtN|Nx;SsMIez1#g#%nAMMe=4spVlT;k%-*ugLCCK;eBu zJFmS9V$D6Ci?cF{cqJ06M13$@=h9w1t zm7ab&7Sq&}4zBV=P?`b{t}=eBNu${I3BqC1VT>1L$?R!D6&6~>u20a1V@|`;zsq}e z{CRcR&Mmh6?{W?q-CD3g2zA) zsTw_^KzpSc4w{6VX!{f^RYa$mfYCwWLkO0?_gX7bi0pC3w_knt-Mr;_8&2JSnm!Am zTf5z-p>+5n!%4b@&ctgFyNUO2JG`ut$yy^ISBrC6_hEPELoP08YBsy#=5cH5eI*p{%cj#edwcjm z?1Bk>Yp1IK^>*E!*vGEDM}8 zQ+(fU^_*OKfE$XUn-{O2zN~8B0a*QoD~MecRokElXuy5W)O9vmoY3OjwVT>uKIR3# zHH$+bC|&)Og;)%OY@`rft@C<@*b>>imnTePz1sie^Prk;k}*K{(V4B>{B-A*!%IJ7 zWe_Zf6#tlrR}h=(kE#4fW|C%G5-n1t{BzHXgDfL3^N2oco;B@p(9`K-uaSf-SyEmv zpjA1b80g11x$!{nnqGiB2y-N~v=BBl{)=Y^IiH6I?45VmwV(3o)SgVW5U56|T=#=- zFThGSr|vllzTSTVd#%e(uRJ3l8UC&~j$nrq(~g}{rBwV?Av<;hBVJK~#R{UPS|<(I z18T@02kN*3F=Y5I1E+^S_w)P~Br*5vdOM3RRDk{lIWi9184}|c*#k~* zqfKrb=png!lNFc0f84AI_>EDGM2_ zQ^}UBJ}s9{a*1%Dw)X_xTnks{dJs3}i7Ql^qLHTr)S~O}X$6ZRA7ny@#F#VA>jJ>> zwgJo)YA%H}cWI_@S^zuySvJ`Bzqee`5PzY04EzA0)3miq+Ja$>KsvD@1_v1y(rr9b z#zgZ01f;&}5oIVMg5+4CUU+pYyNS|o=>NNge(Jt2Vq~vU3UHb)?CkHmp~hCWj>4ht zZOZXk*OVu-KEtQYI}+p=O7C8D&y|w=?o!_;D)A zyw54|k4Y_#ZCXvLK&P)!FWLKk)nZ9IialIYMkJ9ZSHvqnt9r}hB%J0$#$nIz=?-GU z)>(6=(Hbpz-8-sHZUeb0+^<(xsZ!u~^}3GDO(0XcO^cTYJ4C{Bu5=7)&CU*DPdicq zZS6akqK#*yB=i_z^&j9}5%TqkjS?!VW*bjTPnM7KBur(9(2~k1EmGl2!5H1k#TNl=;H=2J_D(=&tSQdv7qYYM(I4e)()N2<%{uh9z)zn!cT zP(#E~D7*baUBJ$0yiEBU>(e`!*52l|9cA^XdMY7oJN!;0eU-oTvthE_NSpI1 zm?vvE#^9x_#CiCqHOuPKxOdddrJj#lTa!N;Qe9w2Gg$*8O@`nWjqO_}+x?u=NZmzsb>@Y1?StwAPRyx5fw_h)e)+eRW)SfAfZ* zbxE+nVO=>*VLPo*m&zT@*2Upg48n&IWw5K!WE{5CGRo}>qePH*xIZO8dB1gGVX@m< zQ1%-N1{GPtBD`yf5+uck)kw=^NKx7n}-i#~sh)li1MGkfVTJ=`l&fC2S*v}nF zAy{&#C1lT}s~_Vg@sO(D@5)C&=08DC-oQ{AYkg$;ASRIHA82v{FYs(U+tXqqmoF>H z^l&)N^l)v0oDAr|XqP~3$^Jb!`vm&NnC4Gj=)!Zr&gyedWtM;1AC;YL2fxRe?`uOu zSMzyCS@R!uy4s$Zc;iMZhG{WBtt=euK`&*xQ8Is(9e*r;|0|=!%6)C(!G|%#-^9u* z;-q+tBo7fL5YxkYUV=wnYMQ^RRQz3?b5t(U6nA`5QHSnPrN{p6Vexj&gg znyBn1we$(v$dzS7LnZ5t!HQy!?#jM3Gks_Pa(n~m#g@mNzQ;jmmIb}|BNyk{X6gk; zSHG?PwmkRo41TPg+-uEo*KIw%+H;p<=DlV}X`+Pobb`vigDtKGDKTzoi26Y`|B z|JCzia^-%D8q;m?D+;Q`*-i3y^6<8E`@E=E)9v)=Vq)2sOcW$CNpsQMUnoAW+%WQ z$X+e()eLTQ*evN=Z5XG{B?`0qxi#8=gZ8SrGE^;q+iEl)j2zMPQZo>Xa>i zg%NlUXe3N$IJ8p6n;T0)I3uPPQabt@33q+CWAL4|X+t$oW*pR?SWE_SBeV`0Fi3U& zh?)G!;?>NTFe0iZh6q9i_E%>F{zIw#C;T#f6ah)?H-rCBv=;Q}BX-}!D^@}TZDgeP z@!{ZpbatingZ^X4!3L!(6SsH)rwvBeo&+Mt;!-XpN!ztoDc8}yw^J@v)_S`yr!-l)b4O9wYXx_Xev2%X(V6+fnOtM+3#cs3ek?%}$3HEMgq1Rjq zUCPlyXG+ZCM%-}$94%XD(xLwk3`x+JojI2Lf!gto+O8gN&|pqVs+nuEykcy*<9D9J zT5N7^ioU@<$&FC~9&qoWsN@#&*+Kqp@KEkp6?vBz(A#7v5j0m45KO)dKro~%3a(vF zfs6wG^tC$#{@F48)Ao?2`R_iK_oDHh%HZ*!w{8+Cv)or0qNgxA78$_yLZWvtBa->l^!qVp*nU5|7*4xxKZg*U4 zmT*Xa2P-*Bh9(0~SdNKy%C;a-Rg#M`Jdo3k!)6yRa5!O2(r!RmPEOeMspvf-d z+bxlE<8fX${64_Po{sEx#@Am_gIvmsTE!RD#_J-SLN-gKF_)xo_9kK#fZrV5JQT}w zy$--O_AYrbrgt!2cpoMdy7uhL`%Jixz<#TUta)XQsey_!Y`MFu`50V|@pzW{L2wAWg-i5c8;c)knluk(jnh7d&1Cq#fKn>zoEdequLBMv2^FY^%-^z-lbj5kHV+@#B)?jl zuis9IHfNJa7myvqFlXKl>uH5c%CTO7Gr+G=1k%wc5N=&MT1($Aq=j2#z!bcfvbr0> z4QAXlpiSz|eP@PpXFOuB7HMuRNDx3k?ZCx0zd?NM?mzAA!U_^|h) zv`+I*DB^u&*z_|fsk0TY)w;SqLCwdh;RNSCG&yU4JLmC$Xq--I zgL92(p#IbveUa)&8Af{EewAQ+6Ql?L&I}I!jrc;p1kUitqS!l{S_5P@<`%xloCefI z|5}ymOFrw}d_15{N_IxlJnmr%HM)C5Sf?-^zhrmxsvC5vQ}Z0S`i33nxzg@qbb!i- zQ>OpKBrF#Ru4QE2AnTnz0xljrzA8pq(sa#T6W?sI>dI?L_^CO^8@lGNN}(6hgIrI0 zHhK}$iY<$R6rVoB&^LOgFm`;{p46Lqlx(e5FF9451ekPFoU1xSBTVlx0D@#OSlSpc zcuas)a9RJlyS%{F=mI#V``&6F&@?Hzk zO602dscAci1Xs_RkeVyUU6UDB@f97%+ZfG1-ls*v%#~DVZAU8F<1$2f}`+ zf?%q<0e&l$THXAAK+Sin+*xu*J*{kWu)}MYFlp`CBjdHfeX};8N^|<18ps9sD#}uy zh5Xis)YAG8k&a5FHN2jiMs%GnOn5g&87>900vf}&8$6nLZQ9rPpdZ^RIBGUI5zs*> zky*=-W!5tjiFf6~cEY$_Hai-=*6W-A>7hOPD?-%LTc~UI*IHEyNwglGTy8r#;h-0i z5l`+VqN^tZ35@buMW;|i%pbN&q-lfvuaDrrl~4To6}_@3Cl6gM(e{a+yaewG zrMVK*Bibxl&*@%OsCD+-3n0$t4h`EQ%yQ2v}yoUG(*netY6`@kj z=S{s1MuqkW_25}>+E1c$iSBvEUFjJlP6zd#aBrGIH_lg6`a+)lPBc=-nZ_H!YxhW% zBKXp~W~6w793*-y7x(%5bEVB~A7vgq-%=E(==s{v(_yGB5c#=Oxj^PdQag0x(E8Na z1?YBP)i=FN#?)$|80=vX<9b#57kB5QpdL}l67fUQNjIaQ=geDK7y7c%=owvW&hr%1 zSa)sOhey7uuz&OdXNoV?*Hf$lul^bqd82Db3*8=F<;v9c5CyWC4asOz(wP5@eY-=) z;qynJ(W{UB3+tO2H{504w^+%ZG+%%ED0#Bco34?K<{t1W)2Tmr73NgFPLH`KVW8;y zfKuU;uQmg^d0F6RcuaLiaOe| z7ZS^)07HANK7g9bpPG0vX?L+#To5yFn#x~|-!!e)anld*>y#x&oW`C>0v4xkN>@b1 zeU3jnx8OdmTLN2GwP)e?Ab*H$xT0T#ExxM7W5jVD*vr3;yGPOG>x0~J8$aId)<*3* zEXh(A2Ad5wg)lOlEja598N{iNjt;YfS+l*kF_>>3GD9A+wblr=^K|kU7mpimo`_f| zA*5*KCzFcpg`6=0q!$2ljLhUF4ms$}`c2u?iZs|_+)RhAMK5j#d;v81PHM0`D(iK= zDtmhw1bvco?GI65`u;R&T0P9AtnRLnV^PG=WTG*YIsL9U(i{eUuZ8uaTo*$ByUgKfsNZbi1t@sH?XPsT# zHO6pVcZh(3^Sj_GEI)NX&nsCc>BuB2tDmzSOt19SW9h9zXAhJX3JiRRnwUn zeT|x1a9Q+fNzX~w5$uuI{i$pYFDQ;N&3x}%r+QYVMH1$u6mV4NtV{#S;lW@&HFWBI z-dAJ&r*&6GFAE+Mg=Loh6f%1-Ni50)^78T**1}k&&%=6t%g5 z^eeHcT}{GSFC;LM69d!XO@`s|gy*fTIRdn{wk%b~1 zq9oDi1yiv3^;SaVWJHS-@I5fvc090j5WiI2yU!}L?wH%C0`|;y@Zxuqt$P7;P&Y7^ zeA@K8S{rV5EXogu%Az_QBOKcckWyWo!`F z5hDi+S#AFplcKB!7kmV(dNJvX6rouY2W%XwH89Nj;_~h`x3dNi-99zX?Is??Si{7G zq1KuE>Q^%$f;UI9wjX*)e76kVswIIO3)D{*v!Ip zmPrA5Xr@YkP=RdOGpg+>>TP~?R_kkovmlaSxC@?{KZQ-HQ^R|TI5>uzG*u_7B|(OxkCMu0;!kge z#4?xN_k#6MyrB=G@V8Xwi%w+GhNTBVr{iQ0z59VxFb(D(Rb(|UVLQE>{5Ugn(vEy7 zT<(>B1D`zCN8>0r_^*pQX!v;t4gbuxC!1T(kBq%<74o`$zl(UnNSB7@_zj;OSkjdL znP*th04ohAEWo(PzSSoioq_7nxUo9mdSuf6hYYhQ;-a(Z>oQ;ApBnz}KNGwjt7Kcu zM8|HUxWcY5t(}6MV8|g5- zAw0E!nb*hoVwWoC$?MsdZqHMz4t92hw(^fY@(Zo~lLSkffbYUN8?;O?vzlysbV+1$;BXeo5tu@1BESnc%3DEe#l4+M7cI&LQ%X8nHS~q%i^aO7i8du8Wtk& za5!EE4K^f5HlQcCRpT&61hqb?NsAMqWp~_7*L#gY{s$`~J`6_9dDWEEqf*_Y2}{3P z8+ebPqJo_8^xHj=4kz{~~&WGV-2KV_p= zKi8^&(wFHT)c`3o7^;!iAo0NdstsGz=+T6@0I1`C`Q!JUBN%aC)glaJZD)Mn(Yv(e zkSE{;vfM(b4Xom?A3AYi?DMz|!YcqiCvP|@J-Bndm67+-e1xs3=FH|UPuLcG9`RS( zxVQc7cR?2NH{Y$#6UUWcGKHtWki^puud`tTD zR%`o(sGdf_TU9O+1OqNIEP4LDF)zwZpmtfXs3doooQ>oBntk-UB_GY)4<_xKPxEMh z#QaT0iVr=~hhbF|*7?#Hndl;+Ujhk{06b}o;=VfG&D0zNv1-Qrymw9#J!Bm_bel2$ z;X}GR{k5vUVw~pP%Y&Fs_h`kE2!PT6tj= zw5ot-&nLMgDR=cJD<`*i*mM??9y9oCbuA2b`t`fXx{O+FSMKY5C`$+HB6>EpUoY+(*;pbwf_o_;XXk z=2y>fO2SsG#JLl^CrOL>Ze*An-JF{ahqLomLfp8EB<|ugX?H&CYZ3~vGBi!%sBtjg zH=#H#3AG#9Vz9QvU7D`opyBrH67Fyc>w|I#H=nye5XW(Nqo{USaIQJ$0ex&GxjSqZ z!>S1hSz6p|;jV>Xd8W2)WD$Y8641sbu?bjJ{X08qTu}oO&THF%jm1?lBsg?j9|v8x z9XJ#d4F)=0w3eaSH)D5aLt?`=4LCRn?%0}%gD+sgnBu+T7Phi#!|sDujgOT{S4f2I z8nAX-42VNBHDTOs924YM!|5n53R?qn9AYifS59Cb)BzS70_)%hY~@aZ-U5CJ%tov= zIL<@>CTN|^-KOC9^cn%QGe!C@pciByyO=Mkzv+=^JSmF1yFIyzZMf?D+daf#`==kE z*0i>!t-YDjV^tCqkDj>(w%ahq2*6E?_jGT&%=T!vygPE5b{hB^^YhhaV}BFJ&IMJZ z2cZVO*dfPUtXVwGTDugKrGIX_p<1#Os5L+4r|OxTC|~|+CnlZoyIlFP<+VObqNL;Z z;(fF>fp+;|K(2$H)LQTJOu1s&p4b%Cr}4@!@Y)G#%smr-CB~-Q3Kol%%?iE&f%FQ3 zPK-$!NUhafu>ctZgJ#lFR)5G{lsY7}mIKF>O`~~~xk6PD1!TT?mLxvrAJ1y`hIzIvpJa{{e$!54xad_}m`FmW@a!8bf#5pZjWe4Yf5z!vv5w zU~G{cssN&k&(HcMTaW-;Lfg~TM%;~W78!}#1la27#mO!|nWMSkt1|Hx^-i{~R4r!# z+mUeb%I>bey^BNHyA6589vePG7ZxT;B8xos*s~*0GOMk)LUx|~ z1qL;T4Eq(RKntdVcNW8NjOlrdeeE{6s|7S!4>8-O<2JN72`$))ycY%`%)aSOFlxXj zjN-+iD^s5#=qlTzhuGC9>D^VW8vVxQ9TbUmCnW#M&TlyFCYMV3T`4qAIK!C^Sq&V= zt%2F_IxM&*BnyZP+_v`luZaItllL?I*Jx7Z(Nd(ey|it5*fqZNk$N7j^}5$3=NrKe z(v}!O%r7}|70RGR4(76#Grl4)rlnoGFSd>hS8d%WaNlTGOb{Nqm7XI6Jb4Josxsg1 zVxiOfMezp&sPr6S4nZlybmWuDuRXz~N7QJ1OHN@!*8^?*{C+B`Rv(@tQa%(jt5)YP zq!$_2M{c;kxx?TU`IJ-8gE(nRPFAtJ`kANp%0<$#`4MLQS3XI8&^`mn*)Qq=r)foOxHdOnB;^Tp>nLSiG~Ruf4I>z>R3HF z54EgklmRE-hj`=~0jdikQBN0MskJ576bQt3GYnA+(E_HYpylbYvWbp$Qns6}ZDb+U zEtk;7%@!G2^j*biE^JVlsprkF5%VkqzkGP{moA@MCb)_w%U3e zk*5qTsdxZlx*v`l5eaF7fT-u=p-g$N$_62tVtjw}P+FWkz{AGni9wGdpwBUsF>}xq z+P|DZeW})7=ImxX?|ok$9B+2P8crPZeDk!&EMZ?~zZRJdSNSdiku{Ll`89t{s0?+cbj5+Q4K zl0BKXpPAn|p6(Y~505b`bzk%Qexju#5cd12gGFA2iC5_X@r~);zrSZozZUSSqyFvM z;C5Eh3f0D6ra)^oJY ze-RK;knAq#>gyh^0R#s%UJI~-?mUbyFw;oS?^tW_*=V3}YN|;jTL-+)#*VASH2$TA zGwxz|1u!c$%u;s#D^W2k!N6$Lo_)xM9TQ=nur#|}qJ&CN4=qxoztQ(|QiP7>za(yf zsv3>zO$sVxg7&M)oWm!ixKG^<84x0F0s*FE(DKyC4&8R6=zUPAq|cfdim80z zX_Wu#$ksCbmVh7Ayf`sHfx!-xJ>z`Q&q%Fmgp_zK7ayIN>~`^`>9T44jAMX(HR5p) zWyo)8=>ctPWq~B%rv&(MEz%Y}#`jvfZE9GPf9%2oxn|{|-*eBWW= zmw)RHKZhF&1s>YXWtuW}21{aAMHwU6o^zB{J1h7IAJ=GQ-ec_<$n@TsDm=#GfcLHlObX$UAQaHPF#MaI+8^Z&MeBe!k(QBUMd`vojFyzWbyoV?d|4c z{oCiA?cJwEStS9!(fbpnQ>!L7tUZ55dkLcXej4p<+zec1H!Kv+2F` z$|CbYkU*Z~XThG&I^Rp?iWTb{ugz&2v?fXi1*=-Nn_0+PaUGwZTyPK-Cq~N?<^Y;lzd$XrhW+dCK(Q+VYqf_`0)qL zVtHSLy^DQuSDB8mYEZ;*#%}Uzr=sn8T}Q?5v+(q~w>OQ#&;01OwLtVX@b*!B=p34F zLWefkfkhS`RR;C>=W#PNFRmD@EtKr5b`(nWgtqxFzY=EAuI-b0x;FA6aKoIWR<19T zR&Wm|w0r|+wxxS?$$JR_5@_{$FmM$9TbV?1zWmSGGdw8ZKUI_8`l|l_9z?Sdt)l`I zqovCd4gyPJ$?I2`rHz@djzT7Ye!auzRA2(>`sjm@)Djb;`B9~jT8HQ=_kvB@Ocs$E zsjR}DYmY&$Q;!I>`8~*@0YR;1*H~>I4Ikn!(?&E35q+?xcl?IH<97WZ8XwYescnmL z3`gNhr#=Hspi1p;@BVxA7%xYt%gKH^P^f*1^Qy)n59+9XUvz1z$8Fjmyfw$_Er%8f zk^tN9d}&3{VRr8lpqrg}tbFb)Kg+DlN?i$`B-DB8K$2KZbI5wHIkxH!)<;TbxwnT^ z&3CCt%ksN=bj{F zf;g7Woyh61{&mg_Df@qzdJn&*v+sFWWCaBQ6{H0Mih_!Ow9ryS1av9UWt9#JNHL+e z0HKM9lu%WKP=u^zU8N(v*FM5MbD=Mok(AD&x5jj zT8zRRkPo;IX$s`%=x4*9bV`OUAV|GVfL+#&IZk&FOS|DV6*`CaB5=W+*124EOfw>3 z=$+&56aVcCN>g~dw6|sHJl?F%duAVVXGf;=KOoG|>PS|k%0?^R{2 z;NV9xtOCBah}v<*P!)78F_xY?IJay|c~#_IRa!nSojZBx-`BjF3f`pOb~#3g^=3u$ zP(YP{n<8~!9}1ALzQWqqN?y0!kaLkDzo5JKgO&{{l7nCP|LI&ew8!O~2#-euBpBGZ zPmf$tp7bc8u7(4+HJrVX4t4_YSsMkr!{f^Af^Q`#Y_V$+8*C3LnbcPKBl((bo%bP4mD?Un9hBdb_3+I{%;fD-BD<=T zpR>4oRHyCXXW;yrmIL0uqqBR}vg*fF`pb~;;cLmp;RVvZLgDD@$v3FS>kCbB#myqG zc=P@gVvUcT=JcM%ac4vR1CQWUyyXRwmL9^Iln0Mu@&u|dR~`C{rg*fkdHrJ{UM<1H zM|OB?+H^F!44$Le0-k`0hf=coO4q_ww=yA!v=1h`8Q_ zv{2O93mb~*6$S-I4!*w$vDOw(JjyQMs_TuWt&0h<=B_=0yt&-zzcI2?DJA0TZYR2O7OD$snK2POJ)r)ITREqBP*kszNsaxeFGOg?&A|03 zn)U@Jq$SHW)uwl&q^(U>d<0Z@(;qbohL85i6o==Z`;iu#0!F(S2}wvkKOp9!%VbhN zDXrY7FX}B+6w3KiC@B)&6|ciq?UxSz5nvmeCaTscE$|!?Z`@^V!9g%brtf?1hE73A z5pVcmIjTC@s8z}Jzm3sP;oxM*3`T%dka9RulrljGQd+2!w@rG*eRN~iH*SGfONC3- zmYal0N!~z}f0DVXC9xvXv*kYMn$*bCYU{eQ8H7p6)`-B!G$%MGi6beI?7&7+;T&tuMXxk^7OZ>;t(1YNRy}&&9&cMvw zlBKmRnXBgZdlL#s#hX82(F5Q{^(RG64J!sJ{=z4}V0WIoP!jecpzV6sUKwT+)Wp&R z*pWd5F2E0LwO29AlkFIJuyv^M%IVWO^WO26_0n&yqech2i~0FJa5$ysraXsgaO3tG zD#_v&Q?!d* zC=BXnJdzUh*9YH!&$&3{T8cE*iN9`l;!?Mrcafb!(1J};U%^KQ8!qrxPRx zJTon7hU)avF#s-=HBGJzJ&v&lhEqdt+(rk_ne(-u=A`6p-HVXvS{);nfPS@UB^Papx2(@$nA% zQ+XS2Wjr;304O=l?3Fl8SBX7?)7zuZ5rM6m*8%$-sPgl1Y}z$mI8Uf5IWV9-aoGt) z%{CE?H`NZ|efrAGZA|znu0gpPlC`4eKIw8(!B%&bF-Q`3Fc^?8FUmsh3c?w~HBi)M zK;cD`e9cr%(01X{vU|QdcBPXbpDDl!w-=ObSh?lUrs&-nNyA~4Y#8V5ThPOq1Ibcx zOT{sXz43^>gD2c9J$U^B?sR5t(>tg-B)m5csY!WM?YKfq_&D;(#g-^tqJ=RImlMc} z4%Cyitw1BU$%cSylje&dcIVlNL%slazR|)s;GS@`IEUrEi%Lr3NS&wL{^yAV1Qa;;uUz`+dbZ)4Qox2JJeLhW_ zzbpW=3a9 zh|C~+Tyt3qZZFIv={9>v;eHpiF}!V3-2&~lSu>op``d(s1?Ne)Gmg!Rg+>7fV>rwE#yvCO2ka74(( z+SqVXYw}0Ea;nzm+#Vs-**OvTrZvuZEpcMxcLh5}5SuIIU5|$hH`rQ|fcf1oTL?gOG!&`mkW1&MJV+9-_AA@EU91gSixduxZuLcqbb zi1LDIcZkn^oTFpTZtuW1izegch4hFvu+PreGJm9P{S9f>+V`@;U;HA6bmb63H$z%@ zd?&uzG$0I*Vm$!M$Y*`6<2i~?FS(Ad7(c76SX9`v)v}GoHFgP`)29%*p064Uhce6( z_*n$rG&~-ze_i#683k2+^sYnVLbm6kO3pe4veJSN+?#(!VJ%?pYkR~EwlvH>J<20Z zg#|9X?{v%i(K{O}=3sSJiq#?o8NMzUrEV-Z?rf4ju_1TZsTbGVNB1AonM6nQJCc7g z!$fA3RT%>Px;t~9o`d?^O7FX`Bx6%(ceA7;R) zr!)%W;toX!MAdETwaNU06}NqWl9bb&Vc3DqeqQ&yqM2MGrdE~6r45Fq;mhKcQzu-m zk|)7|{(1Co6>po-aFzaxCAkjFcAYnGjRRv^NhcR}HG%Y>Qoa-dI)(Xy!z? zEK5A{I`u8Q!ei~yhIKQvOsC8t|I<=uJ-Ab$swk!dEOdaWbh6GYTbbiO7|GeuWeOyl zr4hR-?*jD(p9+>V_Oa`T7arbD1{7Ttvun}GBShFLekc(S@oI}Z@3nW z2$+e-pwvNdkc8iDCkOyDlOaYgz$g_HgNlst^SAHUjHoD#tB-cKR_rX{^VW7xLY}YC z4Anv9_Hk3Kp2#(X7lIULRLopZ2>Fsn(gd=1(M&es9V_z?Ex$4wbC|HQ9byYdyY-)I zM0m0%Mo!i4HW29&1;-Y+q_Ww{$H)r%Ld_Y=LgDnMd0_I=4hw(ReUTLxlB+o+5%y)> z$(TAJw5}YQoW8wKeHhnSo6kZ7(!yStD~~F4aSMhWm`(m{4h~R7sDFEfUz`?d1(Is^ zGFGaxOid=V5doM$CVRR^BMf-}ZVxt#W_-Jw$}r70J{8s|U_gWFjR3|)sKlcrw*HOoc@!4jp^9V`-(`3!gPs0n(`OS^wymy4Ub>d?NH7WX_BvKPXW~Z61mj>mvN>{H z$v)tUIPNZZO|?mBeWiBkQ`+1ZXKPml!=&;n%`+51-4u!ROjjNZo@t zZ=Q0=SG>S1&V-KW%O;%6zT8i_gEWE3?RPw4K~>9mR6kF|dSm`JFfKDgin#UXLaGz! zE2cP>1g=hWtz!93SYkCsim6%w0CGZs=BPNRzh5N%?z_vaA%RByBUrvF*PziQF!= zU5P=xVb&jZkL**k2(rd@JR1u{HI?QKylR7d_n`C2o%?VFoo!nW#x16+eX*w69G37G zMaqV;f~9>KOkL-(0kv`MzEn!!OIk|$P#0N2&9$mRjq*7ihvATNvPJ|38D8D);d=oW&efTdeu`G9|o?Am% zYr8X)Kf?0E-kt9WbaC@qF|IrPqb9j1P`Hxv`CFef);*c~a1C?6nHBkCvolNVaB9he zlBn`Y$oEHexHNBl&of3#8NFpv6fqvW9g5jJ0FPn=zean5?}q=Uxls7bz3=(Y>~R1w z@WC7+!@K=MXXOOZ)L5*P(Z^;~;!TnI^(hVv<2k?vKW+u!D3NaTLE@hfQy8^~gJzQKb?OL)aB%9^h z9~1QSuEPdOtF^B7uF-<=guHd^Pu!7*7D_66kjc8np#OoY-V)!thtN72-|U1|xj@Ou z(>~+e$rOo@POW=LK5#e=ZJQ@Xa{mQqICWFeThDZEOT z^)eIuaN)K?$nl~sQAAga^6nEsZ2@yr%a0C3uafMpZgaS7kLs}dDpBk5ogRB)yq}P@ zJG~IoOw$kxXHUNzW?G3+Is_pNpTrg1(&lA#)i$j0A=_`h4Hgjh>@unaK{I5MXfcPv z99iLtbek?cd`F1yy}K->^`&pos0k-Nq_ptdz$w}4FEQb*72*)Om^4c=dY&^v*?pyf zbtm#umLjyZAukhxkux%Z-A1amho?&B&(ZI(yX2Y*hrFuS$05PRjW;4C9K-q%4NNQb z>%1M4AMXnl%fk8aPk6_Siaopf{ypak2PoIJ1w%qsulBeZEj_NN&%xcM{l$8^ z`e3Sua!sNbzWPd;inazR1K_^&Dvp#Dm)X2EH`ZWoeOLu-X*y!Z+{EitZE#J}`6p#T z(`VMP77cWd)&}7mKPifmXu^{K2_DLAZjhz_?`oxbffx06I78G5~oDE zNz-vdPW;d}LQsEen7vPH@H5WK+dsIo@znK&uoTqUU(QRpq_~G8A;?&b=EVrb!^S`B zH$N`AH2Jvz;*gN#6exJ9^AYdg)P$_rI(g;9Zo#_{vsecxYHf6zi42=8lk%Nm2UsM- zL8@6v9U+bF_H?jDUjLb8q5>RedpchbR4;K!Cu)MwE+a<-rAf;c~qDp-IWCkAL}b#?IH)^gmXqPacCvA_6*M8WT#=+sRGJb3=Dg~E6c6C z+Y>nDdU|XZ`g?yGA_G7mqeW%IWOYX_8$W%Ohjwi(z=^qd`U%=J@=yT*0VEYIS0Uc@ zYc>1j;UBHlC744V2a@604dVp|I#~mfZ2$o0AlG70;h;nAaOu@lV2-YOxRFaLMkaNp zPp%ri3c0uzH8#|Y91!k8K9@!x<)CNjNMsM7j`=kpzY3^4_jfSl3(t>B`?U~U-|j~z zN)Cwi{paUqT$g4Ium5+*$(by4d#HDbVkaFY9K0$$tB~)uB(srim?31g=f+mTDZcM} z;E)#>uw8;k0(Y8cd&#N%8&CVRMn|WOBSG76*k%CbO?!;Uab^OaL*&Ae>UM`$xl?l> zkC52zMlDF*yE3MDcPMHg`GsXt>LbcI(L{PSAeE}b=&(}?Y16K9QARwg=27G5K*H_K znt>QmpxTjL_s*c&GzhJ?LRuv%L%25uWaLUsi%kamyAbpwt%pk#j8jx9nXfZT`iO8w zAz0b?nTnRw%<^`%L8Sl66YhWtLuc-5_yWy!kLjuE+QV8+-AW(H5Lq@$1BBznlrP#i z&JXUcnM2nyR*jhj>$}_iR58CN23QCppxcNnbhIp7*%?qfKG-`CBqI=`)Wo^R{-gIe z#SAR@vzX!NVIGhc?%PiAKm4E%h?@5Q0;bR00Psesf3#F(zWFAI2x7=$!?891CjbRm zNE#DwAMI5Xxnwl=ZU4{+?%6ud@j0VI?mZXc_gqsP**XZ~$#Z)TwsF}QV zGYW}Hk_4li$>E7zo9LLU8nnLXkC&H|)xY`UC1~||FhQ=dP++=C}EO#(Y?b|RcgZH*bj6{G3%c@Nuv3H*p0`t zdEg5w)A*EP>e0rLlbQHn`l8usWLpf(H^;PmL(f6fL9O5(%-x!)mM5d6|LhRkvzvRQ=upQoNpO4TY|Vb-T z@UqRKy61OL8M)Yv@nWS2?dK82Zq)X$Kd*axPq7D`tWunN#L4HKEqg>)fq=}J6AoyT zl!Ch@thS7)o6Oug^%F~sOx}7Xw|3dRLy1R2$MSQcrl9Ryh}kMswvlKk+6Pjc_|3Cd zkZvU>bisTPbJktW*b><)r**-5`Yms>g6q<4v~gUX0Lj~{lEfKHHkW*uFWM;8$HDsr zAUcA+^V-^}cF*tUJyHjZ?0hj%QTj<0tct^g{b}gN8vzw5{UdO(QFjvRJXq`Z+TkO4 zgtdU43D;!72U9isotR^*meJ@V`2*dWApu{cAq&Pb=`qUay}>VM!w7)xVwvB9UcTId zJ?}Se)pJ~A@7*2wQ}<_inp=<7-GChClj18&(?{ajBM8zj!o>*E9c&wqVu@(u!kiz(OX5S`;_dk=&cisGWEe#*F<=wb-Uu7_(;CXSWex}}FB)dBj zy(N-irajfr?>Esg^nnzc2?Y4J0L!<0Xd)oB_4iyQD@>a^ozhWx#n)YK!iTZDF`;b# z*F9Fo74dF>F&*!J0rh-zAn#csVDEKl9#G<*a0{;C?mLvqaN-AQmI)aCQD*C+_w(xbGGwarM2+w$YA+8L zYa6g3IYu=kH_hdJ>@AC(qIt=m7*>n`r3(zEYJN`48LSyTA_Y7pjU4LrSTTU@iJBj} z;wN~hi}1+3p@Tb;5D8hd3uk0vV32J0R*Ss#X~3;P;-vEOIhCNo_1%g_((PhAei<1w zPdQ7YXLEv=K=Ruohb!>oL|&5z%|8T%o&0yUpic~{g@})@EL)#@{0l|_ zEq>M`=e^dKqyHY5Um_l`osdhryDbYcwcb{BLAY5^_OR$cCwA6c;BlA2Cw0ISX` z`?C3%e7hyhhkLW1$PTvXIRM3qJ(_TGyb~?bvV>n6~>leN-xc#IhUBMX@kZ`ivn`4t#ijDnv){HVTJ|Tn+ zX9pzJ*rjL($hinA9Ur)5G50SH^brBxVvk-JM>`EgXk;1WKlxj#@Il`CMur&mh^khI z0ldlJ_fEP<1mqz?nZ032sU34}vXn~fcJhr%>hRkGKe|93#7`^d51un73M6#s+;pw5 zJ5x^#C?au>7{zJ6>6QTuk~;5~_u>36^>9Ly7f8f7q}s4?|KD*?L}Kwr0m${RcaVdC z0!YZKc898=XinuH|IyK$M+4&ME8GH_5A%lM?51 ztJ3O3OSYWKS%7dN7m27`d$dGep4*w_n}a?UCnF$@+_`}4$&)sY)6Qo<Z zAsv!skmAiWAXCs>`8sOU3uv2w6hB%lj4WuaVuz#%QC<;T5ib#%5$9#{kdUxhg>CT) zWB5C^X*JJ=S?D`0r#F3LPI&Zk#S=HV=kUF~u|U?yn`pg*PyIufMrLWN8P^fBW-k^Y zNy#N^Xjp&9hZfg_GsE?NeAMBoH`Rd+d;}$re^#pd_p5DOgWTb55*iwR`{BPbjVW$W z=;(^IX@Ur-uEl74L2TsY_@DUH;%Y8l(2tO!w|%fXl?r;DF)(&J%#J;^e&CS5Ij2Y2 z?SGuZSsmFb!#tOp08HRQo;PrYgQi0nq<0Vd!M2=U_m2$)#kdjoc1q%Jt7kczjfaF~ zy_@LWypiHQsUO?F_={J)O8SXdh}%&pIeE_~zWv&<3(GR_5`R&H`Phy@5hr0|`psuG zY|aLW9fgNW%W&OK>$PTJV}*evU%OUv1NwnE_pF}uLVieHV`1%CJS6-=$_3u|xng>T zfQq*V)hba+-*LrQ&W%Rw_6~QMiEsWg*Rw}8WFpJ&qXULAoOH&CU()rKg3aWC2)Q^U zXYLx|Vv8O;0Ev{7()9CPp+VV-KeZ&BUY3Q;=l+vFI*x}_AOkoy`*6X2$9G5|e?%E{ zu_{X|7`_}_F`dWis3^uu*Um4QtJ<{lF6b`ZveS~$Ej#;0%yLv@iq?wX60d&|1KSr? zwTeLiX^fE@qCj0v#3nOMqA{RT{y^JEogt}UJebA;Hb5C|Vf$a1zj+mJ(Rn4PGq=5- z3{hpPUTbx^LAtIBwuxO2!#5hf52@MAc(^JYQFj6fmP+v^8X8ySyvM669X4AI1Pu0( zWkDHl>D)SVno{Dct&8uTSgZz8vkb(b2R5a>0v3p+>YL@BxPGNaQa44Vnc}bj_bcPx zA(mlZ5#cn1V(d>=zJNnBs0GssO&*C0J$lRl*k1R3;@|Gj;+gnTf+}#+C7U@Yj z#wX#kyCyaa;Mb@F|D#p$h&yPN46UnTO}8)A3!F7<+G$+(oWCB|JnTzUjdZMGfnTC*ho@_>L_5Qxd#?ttH z$=86fyk~If>Y!2CrYiwq+4l;xRqp|7ILUJ=Z`v*fWhe}Xs)<2M>|VhdzUL=Vfxdg~ z+mjnw-sX-%)6+xPbAG9cylIP3TJV+B_e2TgHPLpi9G(#+6;4ajAgSwJ{D6B@=ZF!m zY^GDp(T->==9ndvza^RBE!8-D)79_2YDCquOa~^T#MP9?x}`zNu*<)WkTnb3DGXDJsvtp218?=|HpgpNolq`!#6!4+Ps)8lt`a?J7 zD{#vbS@YyQ?Ia|4W;JFePNz=VY9T7}wZo|9EYKwZ zk4_Ua(|dz@LsL1jUQfbiy?YccS0+?YKPz?d^~cw{r+X88WE0KPUV1s#&8Xv}a;%Cn zu_H5gw5z5e6bFm=%mZfQ?gI8;KXUX-;-CqZr2TrBdaLA3|HG@Jv^jqG<^6w-kY$6c zGDPk8M(AhJ?r8ixJ}Ba>34MUdmg5ST%UqyNbAkapH$MtWFR&awzJm#Y}QUG%m|yz z3{bhx`8Xp{8Bx)# z-vcZkb`%0LF)q$FGxP6hR9(H{kTr^^Rh+cIAp$mG>m z%TE@M;xpwcpy&;^e)FnyLoF%mH{%qjur4mFJaX@%Q}cqq|B!Hf%T0CZnv8HV%vH_{+5b)lOB4~Co?-IMMqS)2 zR7i4yb7=ZT!%j)c09(Me1IjzdrC4Z8NX@Ub=vr#q%|#E+PKZy?Wm#cm!zXtgn1(_B z`ysbE)5%Pf;{Al&+SA71vx<(@~Vw&(0JRJs6x zH%g3+RUk|cTIZr~lCm#&xBJ{jr)z*-?m22RM-IFFq<;NH_wr?j5^Pt>lmN%9#QY<& zZUnueT0$DA8h6{_n;Kp^1=2FJ7Ly7=yEY0Y&55av&e;flM<6@t>Tt8pFcj}a&-uxS zh9<3=WzRis8ckM+HNhBtv|3Qq1op9mq*6vl7UhM0{vsO5K7jUl=n-zTp9rsZhMIH5z^DuWNmqelT{$Dkli zx;TdYrc)HEngXiofcr}$Prms!BAIU$2MDpRcuRTujhgPJ9FbsO%msmlu|_T}da&^+ zj)Tl$sCfQuG?%eC{MjlV5rJ!OR2F7 zWlYHbLGn6b#+b(Q6#~X3r@4~px_ZMiK`+Bbn8*ZpGA=x>aVq`ikYr_z)3!}cx^@2K zIsea^bb@{zWbq2y_YzYgP-W>K^2E}Y<7%JkvM(5WHxk(53ayzaGUqwoD4}-qyzzl$D!9ORwP2GA$6!!t}Y+98%fh zuj}fcd%E-jct`Cwf1U8#J5e>4codWq4g|fus}%A?;L=|5-Z@Ppd>`?gz+7-bH|=Z^ z{f*p!aHU_Y{EyUg3h{l#n8qOMiD8lF(jA3xUt6StN*PdkG@$OprScI^bBBk*qj?(# zhda%bM`_{npI<7EqZxc)`zSMeujM7};Gi#tuh@pWNMLKtJUrfFkoUvg}y%qyWBx}AnkiYzxl5E z_wNx;isOb9QtFeTD7FoH{*;(Y3XhC#D2Gqd2{{FmCC?N?!8A;Jrl$E-VaMS_`Az%j zS1=lWPG1%w>kPBDChG?XIrZG#=qGD5L-}$qR&ek$3jGsJr>whKzWT3pJ{6p5b}tm* z0`Lx2cMRWu414p5RH<*y)fOnJj;ZjF=WTA&Y$$v-`-GFUZhm)aM>%2@;b_ZV@IG9) zuXwOWZf;_AIWD(2_|LqRO%qa_9QSfs)< zu|W`v8aqO=lS9+QfqJ=R}Dx zdAR@`S3vQON0j+-CBpx=3!thM1HuMNXYb~OOnXdPxb4iU>14ltAM$NIM@xg%N$RlP z){$)p_tK>S<}TZ`09hUO4U*C=Qm2|p33O(GZ*GhUo!zyxYg)J>{yC124qW(^day-DDrr}2;+0C^JJGvC53BhF~7Aj8@MtRz*lcCxg z5*bSsGgZw}3IOgZ|jO=(hP`qeyo3 zURI`xqk|pCJ>vU)qR~(S5DC~tt`IvYTEj)tg)N>H*@XrHtsV}flTD15C08Tx;l}Iw z*U7<6o4F1zcK-U-x&4<&jZc|0s|uew^v9q~B6pYIkuDw3rLl@pR|i~7<7J0SM=$;H zx}sl1u>8Inhb8>kFWla~?$m&~G@Ot>TNGm%SMKzY^*&1&eip@*rz(oO*q%{O^T(Mx z)d0=-Dyct~@((>!G$QGVjw^6twv4mpZm~Wi8BtCZP|a(C{n&)9>qLbMhW((z5C2-! zkLzb?gxdFbqll#uRb4_pe3a|?>mRgK@K+)-wuWuJ19b$8NY?zRj)U?-^SXxum?jyo ztB!Jy%~&60HdKKR%p}LBpD5_fnOng=b9aw$kF$%n4JeP$I$b6@YC~+Zl9;&d>ZU*8 zj*?+#Wa`5)U5g@w#eZbFmlrx4>haqsgNpCA1mXQNyi4ll%X(XhK6s{oj%?H^c@$U<|gH%q-}}Ab~r<^dOhd;(_wQ0vL8i!)@2$N6KL^4Q6}62^We;h|b1Ec=4QAIICSux|q1J{(MAC zrj?uAxU@21<=xx@PR)Z;dB(fxO*tQy8${ycFl( zR_yJ;F^~ewJDq)Pg_mRS@M3!7_pYh)=N#v!&nlNqX$MWmxqUE_2clY%TWH*1#y}rH zi?cZFb>7F$b{}4w0Z?Hm6*LXjy2~pDD6tcYV{YaJ| z8ujsZ#4BF=xr^Oaa(c~*p_@ofsAz!Bsu&?p1md7Ul`omA*k)agkPPgI3uW6xnF_#a zTY#W|Jpy0K)cRpe!^5atxxq4}UJtVUz`VC&n6$LDzw|O~jn~)<3ArM@<7`R)39h=k ze|CHvqi6YF|D~QfxIxx@t9hvMnR}-Q@5awSo2K%N_CDvx-^@^KE@$oL|JZGs`7yQARLz$?WLO)9`8YWh=Pf)_A5(b71 zt9HTRro1|rzv}%-PcZW%JRhh(w`x3}gDTu(w6xQsn%mo1^>T|N`s$Z`jXvIP_*M^E zY(8{-BAUOsjzBp_kaX?ai%?_QP=JTpfY2NmZ80>T1U;_>ip_L*p!_2*<*N2v$KFP} zL`Is9U(!t7q5RON*GO~IS27KM)DHBRm6gjZ6VOo+P zv~oRW>b2dbdn1Wxm3&bVdR%Gmqn`KQ4`334R-^cCezHd<^m)-9t7Fk`u9taMmxu{S z)mM;^3>)f2xU^&m^@~FpGtrs_$K1QNYIr80YdOmJb(Gf+S6M~BEtfoq)_kC!Q%o)4 z`%xnDhbB@PMjFyt-2IJori_18UP3Oywoz^X2b8H20&a!=9?2;tKH9*)xhd^*=i8V6 z58`t^EC=LMCaOM-Fdu=Hm9VbIJmdc18vwB!K6u1@&|dBLJ$4io>xFfEbL&C7pop~8 z9(0qbexQu36Oq0S`W(vSTgnUC!%$e5!^U_DyGu)~GI!ZdO(eIqLqRcVwfTj80r>*Lpofj&z znY#0In9$@CbmeG|rl6YfVaI_;cBj7|Gk!JHul}RxkNIms^Y7l)uipM^bMf8!L8nOx znEw4k$#&PFNafb>Eg79X4OCT6VnFOb10v|DrSjgyB9u%=Prti@rXo;-6`i46*cpw@ z??h^HRF~a~sbB!+)zu)(waV#{ym_jhf>nhfyGP@8ZrGOgY&cvndVw#Bsgfbge|@`hrcAzF%8-ct?8)b@hr z@dz=3X@5fGUg$XHR#g6Ad8@XTBK@VNv9b>Ps7$Ukzs}rxHlmVR#9r#620ciOJE^qY zfp=jYEQRme)Auh76uyNm`{xckFFs8`pBjmcWJ{037nRj^GSu_+uGEqYBB1Tl|NIhR z(>W@JE@95vga61|-GSm-?xUudb9FTyV<^0}i#n50taaL~crvr%ooT^<3BOC~c!AX#~HW51Q=AAsu*B>Tt> zM|`8l4NspkWmt^WD@%G6ZdXu^n_*LK^L(6W2x zzH@0DDA&#!q+wsn2d{_ii`1PB?u=BU%9T94|54t=feSVN8}A1}yZK}(!J&(8Z%71R z4B4WFA&wP^=8Ay-uu*aF%MhNIM`&gi`l{Ge;{(F;<)lJbgA5^S7aNuQRxIxV7k2vN z?E&*tsYecgrK0EtTog@*ZJHf@F~#Y!#Oz;2 zGS~TKqGZUz06BH^27`-`-5D67KyO@(d0TuB?e!2?GE8|vVq|ruMr$FyRwP2V5hw!5 zO)36>Az%X{t@Bu)3d0)j+xZo45fc5<4IIJLa=9@529B_}8<%3g;FK~I$WWi8IpsGE z<>xZ~WZzcU&DI=&g*FB+5C`}4L)y8)n+p`)u`GF+a46QC!ZM%CLd$CnbxxIaJ|mF1 zL#vL3a{D(mJ(G4Z?08# zlWdl5a-Y(n6_W6Mfq329Kqf1X=kTlg>Nn?}b&>loN-tmJH%mCN^7#YE0=bc9jjKgo zpg(qwZUfsI#0X&!O5hFb5rNk|uZP?s%wf%4VsS20u*k_!AM7y{)FWN)eH@TAL_OID z2HSq=*y!-p5>3kz#kOb62IO5!$5CZ=Q_LX{zq9-E5)BCySwkO&bW4|OXz$wxIe{bv z$4=t}vS1SzmiQ_z9Zr<+w;kpfOGp(;htG3e(lbBR^}9W2P)t>Ciy=tPf34x*mXRs$ zdiG>N?vF{YlBFY`MFlx}Z4{L<+thqd%3u0H%qv#TYmMRfMhBDWjz^D0O zjv9{k&>+s$8L2brRe9Q$-WvOiJxx?ww8`UgF>2mT+M-RDSJBQ?;CRg|s?!|Hh4?Tv zW@36q;o+;E`7gHIlABns52>O$Nx&ekJ-WP`ycWq=Yol?8ktTKCab9zPIveX;o##;V z@t%;eXs$a!UkJ`)zp&xqK8iDT?ng1XYDb5xZK=l38l4}+BFc?J7VH-{uN!B^%u1~! zZw3tNeTh@3(}hVCMRWG%kn#Xg&y}P*9~^@&Lkf0PCOU#{Kn+OGxO2HbJ56jL4RQv|Fzq;ac?7;#*tsO3W_1$eq;RgvahbMrtp}a zouhVS0jvz+FIY}rk6jI_uDoFmTD=T?Q&F3IGIa2gi~HqdPD5$Y>*EHJ>~oc}M{{Ks z>hsNz&PoT^;CTv71~NhHO*3e%Y*pcS*Lv9pbs?D1RGO=lT(I;QGv+l%?EbU9?lW2* zb_lC={7zRbGs&;Hxb13=KAX`w8OB$$>VX{(#yi#6&G>u+>oVrkROK^HoJrjB2oRqe zO3Dx}RM(PQnimsrto|@xiWQRw%u9h6h{v0&@3E9aYH4pX9kTuYz%KHtRn}sV@qJ}4 zRg&fu!xuhU0yjCFvf;=Cv?1CoQ_x?BJ^qRov)wE1eGrv?b}F( z7zvM$V(w2EDH=UaGpVW_(b*0tK+NusOMY}jC-*|DHG=x9Z|(?EvVu;Tsp#${jlO)P zbJ8z{?E<+D9o#4v8-##rK4x6iwZoOA_|w8Rje2f-mUOAKK<`Y+WnkQwZY7!xV+Uj* zhcqq06zD0tVOnUVDua|#XUX=Gw;hWacpV|I{#-p-YSW#l!9&6bLi4%6Q7K^ZMwWm0 z#I*J}XfL5et2M$Oi~4ssmvi!`z=6ohLA?AI$owmQECXu)Ban+J7HCiiC~;^UXk<8v0}9ImBJV--ors z9pFFWtzMt}Kf4jaVirxZI)H+|yYyLUX^jNjQC z8B8qVYjDG(q<1fO7->Z~bBwFhQuUJee^tZcheO$U6M<2Q^6<^VG;f;f;^l``3q@!0 zsIi&O)bk-HA{kP-NL4uR14~Ev2j3|j^?3oXk2`_ar+5jT$8YZ^wkz4lnjTF^o}wi+ zD6^tuR$3f?w&EP=EmOR_t6`V2#ts$eIl%4dEKXSz#aGX|rj#g&e!4Y0J17F*Q#^#U z)+Ysrs{Z~ldprvzKG&w+)!ke0trrs!k5nb)OdYmQ86=V0sS{0oF>=D&w3%(7B2A40>GqY8 zruxsV1H2o`SZl$}<0XBhV@y<|`Pfh;(-zn62`7}R^0p1XF^u!29XM?0<$P+L3xte$ z2-2436(Q1HE3MAC?rkP`9(>tdT>G9TDhj5?oVlo{!J6gPV3tZK2e{MM_-5kQ>~}fk zZSCFeT#}4uiX)S2vz6EKm(60N=lT3E$Nn#};^$R|qhtZ^O>cy- zbF;CD5MH9{@GM6IALnUVY`0Xa0H172OPlC~`fV60G}194b8B(;ui=IIvuDmHV)z); z3~uitdPazDZ^r3ezY-_*F299W0)+i{EO0>n4esA7*#z9!X*$t+QMr&v*^B^VT~-sl zHm!%PAVO#6loYa zRYJ&|w@RqQDiv~yITdp@r)`q79OhVwIV45pxH+E*Lt!M$oDa=pV$96uaIZeU`@X-A z$9?~~?eW-NkG-$gb$DLS>v_${2{;|ukk}ta>zm}8nG=|s#1$;Ro8Pwj?OU%{vMzNB z4tT6NWt`Ryuk$oTmI>}u6&BK!{x+wF{z4U1+ZP`HKTeCs9c`BE;E8;HyYff0VL7r* zWoJdD7}N#oJGeJRxdOYj!u2~THYxtCVP~6L|1SG-VYp9@SHEX}mgyylU{vX}?iRH- z!8x{ledDxZlj6gw2Ts@dE<=9f6B~oS)F-X7nEG|mr-zDd?e%!2N_~PCIC2jPv_6>O zuGWs#O7lsEOfWHsM$^Y`Y-fPZCBGWDbMKx1u0YTuNn@(r@FhsR=1hQ7tj|q8&|a%m zny@|gWO+T`^v}Zi*RP{y90~G0ie1rb84aDuLX#a5^Rtpej;h+ednK!P+0{LGo;#85 zzS0j!PQ6;Ls_$!&S3T^xUERN8n=HMwOK;ZM)}LSCyH~@8OZ#`I_6MH+9=@;pR!~Pr zw$e_U(5yS%IN3-bW0}fV+wsvreMtvXKbZ5$tU>!of;QSk!itBq^4KCo{%!P??cBK+ z@j)}ar1?Kw3f~`kiKdU@md%ozaOm-oEWssT=lrnVfUmtS0sa}eNl z^I8A$WOq3(g6_9Ht+MUN==MUFPP{U~*s!WesG^0hGNh*OpM775w;K8Tik~)>{8>7Z z#^{YC9WgEHD?M3=oRdH6-hvT$tAG=%nHJd0bZH2v-T2kReC3B65lewAJ7X7z;Lbp# zKdqdmA)gf%ySB~_zWr42os8eBLr@p*!Rf#=z6>{^-F-V!YMJ-!8n9uKKS|Ip@lR}d zGYo&*kNWeCeC6A`wBSGL-zx#c%F`o7rVpa~L93v7Z%{+@o;>C9?zP3oGKY(M6Y_FK zl{^hR{0@uL&OcQwO31mG5L|cgWb}TJ|3Rs9&swt0@0Cog-%}0oJ#q2}w?}cWCxZVH z(B2D5LnG_Iw~S~m7FIpFg>Hy=i`)f;=+y6yG!nrv`M|rHvB+$(&{ZiWu~{r)W9_-^ zj-M!H?fCyuZIl<1Rfb0^;+AuEc;bC8^P}1w-J^;1k3t@EzUVOWQ;$- z6ata#E0F5}Z_f)&4e?}lD6O7|q+`{BI-LfJnmo<+(C*pKyOe?F%=-J`@JRpQDazVB z_5@SwZSKy`wa+vy$uAFe(V7<$mt6AdrmfI`)k6}4pRwpE6;^+nzzmW|EzFU7IqXnk*0SOP3GDf3*<2_4E?hn@xikghD#|TTiQM zDKRwhS4WSj8*LT!lhu2~;)kL%oBL82Rc{iNL6Iyo-8yXMa$5i8AV0WLM&+-V)*JQW zd|p_-mC25yF@+ZDaVlpt{oLAIeXP68wsS;<(!pvpHKH+4hgB8ld1*Elx|o(6Gn-4# zZw*tkF&3(&f39=BvHgwHY2cMvbZjyS0|S7$+I~+ZVcnMeG&NU=$No-m56yjwVvDO! zV}MMU0nU8|dxiczJ+sGXjQ%$BixI|kv%n|>G#RDDd6u(&8QhXHbno=P`_#wtQd}+c z6KB8w$9lf;3k~pt?hi}lS$MEcm#CoTO}0AaiVvCx1@6kfop9#awDxVw+f60MZlJ^*VV??az=OPrUKI z>nc>I*CD@g9jaXWBWLDNut4URZ$|oOq4?3X(YK@WD%03{CnBlyPRK%k>~O26FJmt) zKz~}TofyFGTGA9v`^Ue>%!O~77I8-+b?>=NKXh7B?G`Q>|0y;2L2ev>j<;@E!ck;Y zysNFpM~P-L1KRR7408f6d_SF>?+9!xi5l~DAoamLyvTko)+Q@yYuS}(cPSa)E_@cL zY_^guP)|Kw7+go^4Ty;mFBhk}0wIy0)mc8jypcv>vWQM&f3jf6x?s?%SawWY$HG?x z`5U@U)Z1_3A^XkfF8~iXFJng~CdXITUIe z@&!2l{(Exc?762-5%Ci)BQBKFbw%_XcVIyM!Gp9ecMyx#xy$K1J?qJYV%zu$Imh*W z(yhSH$uR<^2L(N%Nge+1OiABf3`V(XxyGm%4**J$v{1&%Vb?5pP?mVg0y8^6LR-dD z9FzB-ibhGk04qi=)#UI)1>H;3*fvKgL^LwmwD!P+GEj`+6f;mioOjAy4D2f1R<}L-_8fTo`Cm8Wd zc9VWh5h4%8pPRtAnbLpTqr4w~^YXZ3Bf#$PhS#5#N>*b2Fo@gNYb`TUC>*QZA%1!x z8z)|cTf8x^4(}3}b*)bv*;@`=UHEUxD6UapWgTbfOA`^o)KABL3i%Ms%rdzBQvG&+F`H^^smfv!- zm;hvYGJc=@js%vj|9P-%G2|)^4ZVr|>+b&l!lmAnWJm7&6_7!Yu~dJq^_8(~PY|7^ zH-D(E=Ld0zT8PW%w~Bn;pzYP>ycsRn{Kq($bveQU?!uPmMa_NI~0MrPCXyb&l3BC8}HE$=cu2N+*ix z)#)|L|C$Q5L6?y_`&;j7PQ8qx2`jd_24BfKl^aB#Jf3l;T<;7hi$`Y~G1Xf>=NnTh z7PI4d`L5H0{ej@ip3HfT6^X;8&EfQo(tf^+TfTQz;xp|S`qhsJeh&-l5{E$FBb^LI zCF|TS55fy9%^;`-&&xote^9cyXGP1ebx2T{Ayg<#Z`D7PQdLMgU4Rh^@jEq^X_Fhe zGR)MEn{~Bak$9sJMQgk#J4JkK<7j@}@_LuiHNL-YR`xd+=Xv&hcUYl*%*$0k_I*3&@&1r0*d(h^+siv- zy*{wEn0<(x(swRzIow^RQ}sps7OgYdW@ykXrF@|;O_K=Rc^EplM0LOx)+2t1=PUCI*_uj*9%bjQC8Rt% zC@%JR_-)>DI4tSTukeN#T?i02v(bcW43=N*FTOq<6%in`g zPb7OO`-GmCs(eOQ15bFC&B{v}c{!qD{^au?M06;5I=;`JOZ+9=G!>6J*t-&K^GG77 zvsH8W;@Bok{PtV3D>gmNEs_bNA``s^kkf6Ubxt`EflWW`agMl{>TR^)XrK>o(G_K-rH>>H7WXHtNm9UsZagGh};l$Uy!_&s` zsA<2LsEu_n_q{I4A1542c+q8SM`H%Vpl(#XY9jy|by{DlIL(DOaS@FbysV))^Abz5 zU{rK=hD>&r4bpzjQO1onvE!}Nv}eXDf8+)B4EwZZMm{!+~ZR=j~=|E_xHb;`paw;YLA!u_`f}I9ywHg z84bDtssd3Dk_8cs+_5FrG+$jF5ClPuS92ps^ex~LZZSP=Pd6n&ahhVM=ww3SDklFDD+EK6fTA2CX(VtEr`j&(If3<}J-= zTwq9rA70IFKSWEP$xU5@1ZLZ+WS9K?_eS}-TehjIfjSu0&?u}^Jj{NmbxtoIQ*chQ zPZ5+WN5txoHNB?0_v`;T;!b0lMEb`r#1u@bL5*gcex25@CGU5=(2iV2hdQqD1Z2aP zP95swL#jkX5uVmQSdW_I2y+I71B0 z2H~-w&~rgd?`rL{mqJ#0-$ErF@>CmUZR!KC+VbcQ2Te&Wf$yI0esozuQak67R}=t+ zr0oPH8WV{V2ZWW#VY~g?dTi#_-|1Fu?KfS0c-vM*yGc({XEn7Mf5a@NvAboV@0tSO zG6#*P>ac@>U|;^`Uz~Sn3r@r=Jk5UIYI}<`|6p}BN~vgON9nq5X9SJ%z_{-<&uzu$ z{dHT6&Czea|EIzf?Bt)J`X+Y-Tmo5vCYu5;pSwnW>$(~@ht(XntlQ=+Y)y)GL$`iH z$4bL1@0h7R6W@yfcn4t*uMo2PM;`IR%3u=;Z~XAV^im&;3}hu%Mw3Gr4%FWr$_Vd} zf|{RI6(DIQK8_P-!=-i3@Rm`}g*2i?DO0w;c zp}F#`ygzh_+t0yzZm}BfH|n~z+_8nU*}ZTZ0nY3pD6jLKDls*|qXZse?cWPY5rOl$0`A%IdhOarnON>|!_MiiZFTW)Sf^)0e5&Jm zCMF!N#Hi_uB)VR3k&}#)wmX;gw(`$XCJMHI=sfZr5OBOSo$A!**nU1eyR(T zJ2FyaY~6M(xJ@xJ6#clkHBdOAj_-^~9mvae+L`_vHg5Ubcu8Y3L}?>?1{d3kLi)dr zmsD#-fg&x$MRR^#tefw4g$H%`Jw5CimjSa=6Y2saC$|jG9`s`yjWMR&c>4*u=*IaN z8DTpTRs60lJzyDNpWuuYq|88h`HRmfxGB-YnZF~%HV+%LDz)GOxC|IeJVxp0i)R+` z*_;-8;2`{HpD@?>zW7q51zE z!B?R0k9g7twGR}V7PZ(3)bJY7U#ANz$A1F?+M}%m>eBuuFg&H089oM~eON?ZIIJx%wmasdcY}c@b2|6E z*TL_;eA?`;$59jXyPq0^Q6V7*g%U6)CMDh*jYqC7>h3&L=3|>P^B|hcYogXP6B!xA zOnVOYse-$d{r7;JKaq%qXRdiyHLKk`M{D{Hjn6iRH@v72M7(cq*{3ahN|B{lG8cfG zZLt>MGB-~157BC4)rYl6$J>6)%>Z3-$mZPhxHzg5e-dis+5HwTeCWG8l z0Kin=`@S62JkbdQjF8}wm))Gp-n7}L1rdh{N$#`9Rwl2CYSS;K*d$wkYAcMBb$PoV zAVJy(yaa=H!dQQDhbm<1g}4pHv-Nczgd3`3PY~8hCXcW5UKS31du4a))5u+X)5Vil z_DQxUAJ+HT*C~4O*)B0_83VQS8&6wh4jq-1rG0R?`F_CP+DWsv)5LD2p%z`v3d^dA z3C${H1y|3dhh}05%z1HmK?v33i*}1QNyuMtca*y_w>!w@W<6?4!xN!=mM$FW) zY`!{ylre$YW6NMEnQBRl<+8+uF2v3*1MV`P-cjA0E!r1{jH_l2nxNY7NXT(r#tcox z-|qt%+|U{4)6NEi-sgae#@%u#k(Z@!@81)Clf5tM%c1bA?~b0`b1?ks~8hmEV7b72=Wu~CT^0NUam*lM)X-BQsos>let!_q@8v%?UyJwW`C zbwPaFPg!?~RNjVq)n${%`FAjJ(eRBl*p}E3soHkNN^u~kpq!irv7eiFLiL20#Mf!u z2LSO=1W;*;!Swde2PQ0+;z`U{!SJTrNEkUgMYW-Ws0Vka6~S zgA?P99;SKGu@vMb=jYq58_Iq&k8{AYSPeQj5(3N#jfbj;07-S8SeN?Do zCDZ?))LrRLYs%L+yz4^Vv$b}%FbQPm4>K_ZAE==v86@ID%n6s=tJm)J0cZZ;E6JR& zZUp_4It%ggz3&fsFHY?K_xNn2_KZH4K$O14 zmHotY#`Q-dgFNZ_QwzMsyW7jf7C;p94s`Q02}|H#6Gt;6ULyMGy=kP;+wlTN`!xQ% zNQ(tcXzTS#!UlmbldxGiDjR!?u64U3`&rP@RCX+y`Wj7tPO=l+b;eI5U>baA#JTjJ z`D*VT85FOBFVHppN5a3XrC-QkEZ>{Z$#>GfZyk^AE0wplV083B7oVotuueA2%T|Bp z?Zp}<(rsC}1#8UqU`vv4j4C=OOaB1G9Yr<56ie1BU?{?E#8#YvFHEpe;${A@FvbG@ z1@_&X6lGFa7JIESYY0OynGh(TrS>lrms=n!c47lEKs&M(YcuwA|K*=UL)()YcfIel zk89a2UY$H6<86g@6`reTEZsa}M6Fw{D6)jSD)9R(TzP8F=eO%^Y`&S)sG_mhB$`AHJ;iw9dn>7ihI|IvDdu@A4 z?9k&prz0*S=*uE|<7Hv`5;z~w{92HwgkJUqd2V#I9H0B5v7=FxE&=@MyFi9&&*T-? z)@Z%aXNR0IfgHIMZJe-`j<<$uxes`4APV04!d`CZ=>_0ayH~uy z*P$@?j6oZH6nG0P+e7=kt{Hbp8c!&0in&GoERj|H<~PdCegoyPloZLQb7UgV0cMfj zrt;6pRPDd_b-k+NwcY<%OwgXVngidf0F7nq87K5L8wAtB7KhOAU);36yAryOl=JV= zZ1o&H7QF4-l!0@GdFGDwCU=HMR5)IM2MDf}-{Co?Soc~!;IECS!@(?OBDq6`<0cLq z>62FHEy_VAA23v5ynqa1uze5@WSRNmKbNPhvwN_tU}5kUe4%)aybxXgemI;^zx$UI zS?8^O8@f48zeCGW@rDV(YNYhVk6-PQEv_D7S;;;>lZ%w_%T@ZSYtFhf7R4;e30+!= z<-V+;6HeBqb>BeWyk6QYAGW?UvBdh(ZcfgIg5YS+v2@lo)smPF z^2958>f=?FOx{AZy7n_>Fpp9JT|>x_iBjeX7$qtaS~K-Ik#XBUwk>lg0n+HR%q64E z&y2$j1=R7MPgWRn0c{4SjXM=Q2vK-Q0 z&YhcKGf-BsQ3!bZccK62+UwBJk7NsYzZ>(viIyJDL{`gS^ zgUG)NLkp_zBw_tIIbo``cU(zRS3QZH(Fz)nbIhEa?(ORw#z~2aqhW%eXRoV-?U_G$ zZw~=5n=k3gi8;i;`IC+Rez^3S)WVblnD8b^x-tJ0iIZL<5dhjikVldZ3Z@McjAuJ- z^#~pmeu9y8yFpYR#bfLNO)3<_5HBk&1`adxBIb)9WTCdLAaAMd{Z(hTH$E6=*|Fm2 zrcR7kt)dcjbZ193m5Sxz8R+34X;@UUgfEq-X+0e+DS_h2@j=5y>*3h`c&9<7qWt&krUt-tJ! zh{>oZGw_}JaLc7YZb@RefMw$I^uNUuDA{G^82f;Kzf^pF_h4(m_n`_MkUV35S!x!z&Q7r0VI z(fa~Mr598ne3CH1eSXH)3zbeg zUyokwVQmywq>*^cO3yc1Ynl8ZSuHO4MxB2r!C0lO3NPN#A1^-K7hiQ-@bmnsc&~sv z(#v0@CcXH6c`XyV7Ye51$Lg2eZvQYR*jYjeXy*$-Bvs%Vb&>WkrVM5PZ(Obrh_s*a zaD}@oZPbjDwDf(aO=9iBc4!R$;siD~vwxiOlpybN3+_q(q|b*_c+mOdenE@l9pe<} zVnN?(8U!@#2a&};5hB?4&h%48XWT39y7ml)TArh@qY@<$12-H;fY@Z$@8f5QkDPAB zrlvS8=4GKNFqnzW@tSBh`Fc9_%)W+(wL-7LhOI@fKwU;+{p-y-Sr>AWx{$2MVwb3h z<89xJ)*eYQc&i zBeaM(CM~|MBi0XO2D&B>YBA|nIFoZB`;KcAvh!b}v}LIGSx$l6(~a&b{tDdK3lc9uIvf z!A;}$KqTNhvlPN}BWA_lmXcm28-A1%J8w48&5fa$k?RVZDG0Sm<1Rqqp_~Q}IB0#VWscF~Eibrpa7aqg$J=zWQ8# zXIdEAMI64DOxlXX8w-s9L?lh^6)sPN{JHUSG}$ujeZT7 z#cH_RDI@R=N^4A(28Z@^d-F`Kfb#KE>_v4CH=teYVhUj8_j& zZ1UkwlY!%J%R|;FBi2JD#rc*R|Mheh>X0*K%wgo8z=`|A%I#_OS3`VvwWfSq~P5-S)kqJx>28a@liKFX-m! zct}O7s$*J38Zgr44(}K?dV4lAUTm7iUy8$SR*!1s>H{a9xGvtD9^e?b7P*eS)17N? zuNudK%W_QKhy$~+#Uci)HCC&&Kp&0kf}3XHr(x|6(?gFG->wkx@3qjP?$;_SX#9Q$Y*JPT9nx| zX;?`nA6L<(fKSOvUWK<@i zZ2e}$x?HpQYw`AG(n%OK^VD$x-LtDsGgNGpaZ268Y?zHiv@OSJ@`Y%qe(X(d)wLZ4}Dw&^OkLPCCW0tj1h?YOMWh09e!cQ*#Rj}G>nsW8p@>q)iZa!LT z0dAK}u=_QNUTUh&#y ziYMb=xv!=64NI5VwGaTeaY_@dP}erHUfTx z6(73g6RStaltlzBmH%KEiblmiJMR@|iDcpFs=r&)*4~<)Xg~-)_X~o@!W+~z%k^&` z_Gn8%uv9D5AfOFRBPt`g-MpY10w_uJJ{sozkpz8G!C4mpZN;^PTmTQqID5(z{{58Atbk+pM-I-)}vv@Pd#TuX~)6qhgiUyYKn zoQi4RicfE^b-jjHu$@y5XB|XoI1XuL z1}6`RC{9E#aH#c~wRJ#b@a~~{O6XGk&_))T^PTF)Sw03Bu05`qdFoMfmXE5u$o8a~ zo#>04@@U>8l-sXysUfH@zpfkbowQ5=muchqeLT*oVL2A zUSaBm+XUB@mQ=^@%zTRmD5q#_&-BzX{~|Q>qo1BH4LexB`5)9~x6H-yd%viDhXW@7 zDy&gUU`Oc#1XHqUxsCbqqPSY8ulDCfH~xc*v`qF8 z19~{GG@i_^7Ef&34+&tV2m30%n7JcO=s!pfzq@gndTD|Vei#2dvczS!*t>7iEGD)c zZe8JQ_LmD>zm8;WxT0(((66_oeeztaaY}^E6))gd%}g!2h2Y$xK1)qaF!~OC&5YaJ zgIzFJ3-&aaU>AbIDge82+Me`F`}NyQlm&)8pqOz@PI~{6pJ$a*ypw^o>QY&!^!CXz zMkO`SW$Q1hbqI5L`@w2usO8hdG5J+2-eC-s>!cJ_Tp%sBga~a2d_6A}ndC}eaSd}E z(obc#2?JRwp{eZA_UbH?bh~3)J+(_r3&T>^9j1m}bP#gASZMJ{=?&6&J}Fa&v7E8s zo(aBq^j7P$IlJ5G^s|&{LytB)k4pQzp6?pcq`2MuYvruw{2@EsIQfd%VaGH1#2AmF zsE4=kW}iO(-&z2U%Rfudn+k6ve@a5w4moaD-<5otc+Sg#v`qJ$p9)QLdsF!TCPY=Q z_E&ZK&QxQ4`77L!KcyGs$w%-8yNcZq>`8eFmVl23b3Uz#Kd8bZ-ahJ@dKU3)^mge~ z!mdP^v1%sHNs~=sry4lEgp^+e>8Tw&F3fcUw|68SFocGAxFYQo2DQWJUaL5U9Qcg& zf61~6e>i-Bf|LNvl*DapQwm(2PKNTfv!Q9D$8lR1%L|7FZ3s|`yH=-FqXfdbMPZwH z;$pS<4>~rNza#g z=Sf4&V!#>7H!k}1C~i4o!ne4XG5u29N{v2g9rGHH6rm*O6?-&33Dqg-XofG&@~N3c z_73zHQKgGI$S}@mTCt?D$@0S*-duJE_fa7T;J@4z3AqND@oL;cw5MOVH6FIJh2D`D z;ht(t#c_2GJbIpj!i*u;RVF<8k}VMs+FGC8RBQ*qbO_y#j;XmI5fq|(LeF6`@XBGl z!M;AIs!+q^E@32mRU{`kSrs%dDI2@idEV)n5CEx&jFz^XZF%5ymD!GFV+Oe2NN|Rj z&gVk%=bC>dv&CLsENnP$L7?8*Z*zQ4+-iKYiCX!=zYw0X_U>vcaWAQM){psL)QRk; zfWTJ~`&i=gw7G;<9*6aDNRVey@&% ^%9)H5);@t7C%$}cKTLQiv>nlnpG1j=Vj_sMQypN?%5i*`z#19 zNd_LLjXfgCDgLjTx-m(y6V)?dXVgyL;BC~JHNgIS;`H^ zvpmi*2hMK)q<-jCkU?*sU^_K_0PKu)aEv!&^?YUE$ztvOlE2Cf@R}>J*p|I8;p zmWTWluM8Adi|(F#dU-n$Az1X?`CnocbF@Q8qcPRyL!F4PI{k&c?@)IIz*%5-yd?PH z7Rze~(Wn{_G?{Ql;Eccct%Q>i5&N@rTm`ah>~aQ13ZWo5&1HPM5jBb2DQ>jY^zHyX z3E=gqodv@AO^i4p7;%JplVbLNnKp0J>|n)m97U60W^5)Q3DB162@-TJTzH(Elgwec zD|K?2leGZ9r-uXASR$FiJL4*p>K` z9*_kO^KU93>j)IXKqO@XurW6PqBXa~MlAa~Ppq-7}C^VoWSkZK_aeL4F5 zo(b;wIw!fqBWX^7$?lukMy)2{GkrzOcl4iZcD2}a^JM`MC^s#iuQ@ZdgL3&V@2lo6 z1*W6q{8S}_H4e{+qKO+qa3<>GwbGQ(TWXsLr1IN9Lwa^cF8HPwZnUF6a|Ha2>I@_y zyJ4-<1XBL=Up%_>%DdwYt`Y85N_*@M?jB~kw}hSZPD$qZiy*^e9S=hu_Ls`nenuqI zORkMz3A2A(vrrWwJdRVykD=~53$4|xfKdlNtG4bM{)26%6#(Y^e7>&A=+k6#^7Sd< zwm*0L4(;m$1hliu`t6@^&rXN|7qN@67PfzTB~8x8O_Vo|rljoBV5>0oH^DkKhU{UJ zWr9dP!|zm=9lf`I4uk$JPB9{FJ2d`)-Z=gg#XW{P(MSP5ZGB*8{ zUh9NKN3zMN|5}@2kHANyC`@o-!(XZhBpJp$fuNn9Q};W*N^7y4`Hm~x zNoK{r@cRw+!wDp5qa4>yN!L8%-{?N$Pt?#}C=B=!^1I<$_Kcl@TEM7ZS?P96gwl3- zDdNZ0N^=UXUVfpPO;@zSFzzr1r4jldZ0UDbWE7rMS~z!obn~1)(tA*R$`k_j6?&~T zpJW_m;vv)g0;R(&^=cZe$1VN3-|93f;5%ahw`0kzqa3daHF~OoJY*m6bk!jA^TaNJ z_}JM}vh1skW0hp1X`$wuNjR^y>&R4-<$hu)B@;BKxcVzXqG98>Nfx(IG;7&eVd#aD zGw|E!oDP>P1~1zW%2gXW0=oh$Gel--iM)jbBnH>Dr>=e$xWA8=a8F*9DcLHbUd7ln z^RC_BqWeD}M{N&P(@de1WeV5)?io8)RvXpTUA7eHYdQI-ZT)Wb6fYfrY=@KutvHE` zS8W9DpV7_X1vN#_AAbBrM(y=u~W%oQxmCfM_0(I`UN{4TZhc2z1 zJ+2-)Xo@<}QM(b!ivQ@Et(@tJHwLUTou5%XeiVmX3NViEQRQCrg zA`9j9gypbTQ^!&G5acHHwN~q^uWz*1gNqvh!~L_(P>EZ#(nyZph~y`tu(4xQn6LlZ z#=;O~{bKQAt4KBKTn&B6pf5%cwG&C5nF2ll8qZw}RSBgN+II+y^I?%q_pkAsjs@e( zP`bU?o+mkB&dScFA9xv%o!ag}63R;}<%JgISGy?z=h8U>++N1uaG@AwL7Pzz6I#tw zV9DeonY}<2In4?DIeGA#KLRk1)r~IrwLw!zSa!7y8)hock=c=5ltV)u8~y(kie!QC zkM1^u2Ib{H`M&T!!W4PLy5rE0SE$jOw(jEX@pZ){ z1Hri3TdQItM8~1bGxAY)&<2#*SY6tBM&o`cue~`iO%f-sJ%nDf06PDf9e%kb?wRbz zme2+-w-&k0oMR3<$aL=A>KrQ1Ty6;4LC2HEQ#VZFt_$j(T7P9ey?>v6uLMMXgr^v& zd+TKFQLVr|o4jnAH5wtdyJI4CZ;_Is@sA(D;$;0FvqtX}UQt#IHRU1(ajdZRqjAL2 zaVrag5%yI33kut^-E$Da8a5czCIqnr7dzSl2m8r#!rUM$#lnr%vm6eRqU ztpJ)`LA5R|@01m(80~M(!>bytFsDu6Xvcn|*~C*TKl8z0u1E66g%`6&L6)l zMsp+(>X_x>L<45F6o+Yq3XR$_82vLQ>(}NqZnv>Uw>T8}ghnn+8FGjcw~HSZRV*D-x`AAre|1V;c;X2+$-qVjNz;wZ z9a;oQR<~wLpunECjRRcf?e)2fRl|p-ZARl&iwk0~&V=On<{X zB@en<9|PD{(6!G7#o-fCTjle$K8rEZH9WlZ?y5v1y*BHI!h)npb~0CS{T_vQlH=%L zat!*77Ew^8$A|Tbvy12k2d}#aoxL$6+wJgfa<%yZrD$(xaB{NG32Tq|PDj<)1CFS@ z&VtPs{CGNDn}h?34SuMH`}LJ!)2c7jdIaotww}y5ncei5br}d!)-vXt*2mS&^_iLv$Caz8%-4n+VXmQwK>$G|t`R@VGA0?Mdx=4&_ zWYd08$=wwQ=1)O$*?=({0Mt}jll*zuJT{v=@hj{=Sea^t@C*o$V?#6^cc@96c)$}f z#fldHE9zpRpRT!&P%5!0+GQtE$w$k#trt*7JHV4AgYLLS4ksVI%l!goK)Z|Dk4`|f z3A~``ypoHVh6t1q{Yv2CSzg=A8_hA2K+etC{y~M}mku^9Iii_5cn-Q#ft07M6B}1> z%6C@}!m&fzk7cYQCWC1`p$&7&DpSaj%fs%KsbNG24yyT&$3a&_XzHWo=) z+aQ7qqtl+^Pre=7W?Tu7=@v)ZAHw}Pi^*zWFP=+!J$M@|TOwy&82Pe5!OoZ)6m<^& zsZ?Y&F(743_U!PCj89@t9?1onumnU%fO(wy2OV(>I=H?Tiw^eFSExQ~Nt!gc%S2ju zBI+FYXDWYvY$-eoq!4ht0lC+BH5d88{ zTgaqY;pn}E?nRPwAa*Gl_7fN&lcfV&-TqXZ!O(8}kE~_0cTe0y{?a#J&k*zzd+mbh zPY0%yQ^hBf`dQ~)Z`{T-2sI#kgB(za4^xN$xcGqN+IsZ{V2wzoZsu&Nh(QkFOg7)#`uA;lkxv6WMo#P6PZ)`H@)fHh zg3=-^L!Ti8Q3ITV)(tsB>m*{)2NyxuJWpKfz?ljOP=4oB*w*p_coBVc-0pzV#&;-E zd%w{v%6PeaNKg>PO1*z&s&~x=IBIvf4?T}eRlUYy0>CtA-4Mnn_D6O z0`aX7ZtQ8Tzr!7KcE|lejF-K@!mPe87f631Rhnir<}EB;)o_6y5XreaI zSN0F)6a)@lIclf?>b!9lTnmz$Pr5j(h$v$emPRYsmkwGT3cZWhA8?0Axp#5$jaZVf zVW5uRmdxsHK;@sf0OTqu1s!zbgUgYgw`pF6BYHn)z;fr(P7Oq1h49zxxPzRv?W>ZD zr(^Vhw2+aMEPWhP?#1duH`ee6zqvJCoRHm(%`{xS39hS!H)Sg>!7Ap(+&e8t8S!2{ zPVHZ_j*Iz~L6Vk25iJ!X)+9W@1LB)eIe;h0kFlNA+fHfw9oj2|TI`73?D%88itjdJ z!wz%F`d-66W^?+ORaV&e(ECkMUXdE}m#$@~_r>DBV&`AY)AU*D;`kooWCacnuj|Mv zi(7=_TMOFSu zsP#x7_v6wPyDx6g1J?Yc&yHzaXL*YKif;8ca0Zl~IIER?tI;-^DlN!e8^Q zO6yay2Oh5ypu?5q#DcAXV)VdF$og2I#l+6`I-FS$$rBLPHBej9 zDbGfb{;|TWQ*B=%b{D%wSFXtWtkr*#TiVFYe;Y_NI=tK!9-D{RvX8>bd$+!B56KCl1zG_|Vc5TV1{>8Ow7kedfk4vl0W~sGbT-qj5J~ z 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

-
+
+
) : null} - {/* show segmentation table */}
{segmentations?.length ? ( @@ -276,6 +275,24 @@ export default function PanelRoiThresholdSegmentation({ commandsManager={commandsManager} />
+
{ + // navigate to a url in a new tab + window.open( + 'https://github.com/OHIF/Viewers/blob/feat/segmentation-service/modes/tmtv/README.md', + '_blank' + ); + }} + > + + {'About'} +
); } diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index 91ff6872ddb..e6cd723f9ec 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -172,7 +172,7 @@ function modeFactory({ modeConfiguration }) { id: ohif.layout, props: { leftPanels: [], - rightPanels: [tmtv.petSUV, tmtv.ROIThresholdPanel], + rightPanels: [tmtv.ROIThresholdPanel, tmtv.petSUV], viewports: [ { namespace: cs3d.viewport, From 5a5a18073664c4a3b06574fbbf07d290b8e94842 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 31 May 2022 15:27:14 -0400 Subject: [PATCH 24/25] fix: changing strategy in roi panel --- .../PanelROIThresholdSegmentation.tsx | 11 +++++++---- .../ROIThresholdConfiguration.tsx | 6 +++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx index 0ae4722fdc4..9fbad37b007 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx @@ -14,22 +14,25 @@ const WEIGHT_DEFAULT = 0.41; const DEFAULT_STRATEGY = ROI_STAT; function reducer(state, action) { + const { payload } = action; + const { strategy, lower, upper, weight } = payload; + switch (action.type) { case 'setStrategy': return { ...state, - strategy: action.strategy, + strategy, }; case 'setThreshold': return { ...state, - lower: action.lower ? action.lower : state.lower, - upper: action.upper ? action.upper : state.upper, + lower: lower ? lower : state.lower, + upper: upper ? upper : state.upper, }; case 'setWeight': return { ...state, - weight: action.weight, + weight, }; default: return state; diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx index fce8377ce97..377e79a8401 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/ROIThresholdConfiguration.tsx @@ -6,8 +6,8 @@ export const ROI_STAT = 'roi_stat'; const RANGE = 'range'; const options = [ - { value: ROI_STAT, label: 'Percentage of Max Value', placeHolder: ['Max'] }, - { value: RANGE, label: 'Range Threshold', placeHolder: ['Range'] }, + { value: ROI_STAT, label: 'Max', placeHolder: 'Max' }, + { value: RANGE, label: 'Range', placeHolder: 'Range' }, ]; function ROIThresholdConfiguration({ config, dispatch, runCommand }) { @@ -29,7 +29,7 @@ function ROIThresholdConfiguration({ config, dispatch, runCommand }) { value={config.strategy} onChange={({ value }) => { dispatch({ - type: 'setConfig', + type: 'setStrategy', payload: { strategy: value, }, From ea2938f852a30d43ca1ed7a3bf42dd61bcb8d4f3 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 31 May 2022 15:48:37 -0400 Subject: [PATCH 25/25] apply review comments --- .../PanelROIThresholdSegmentation.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx index 9fbad37b007..128ccb83b20 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx @@ -10,7 +10,7 @@ import ROIThresholdConfiguration, { const LOWER_THRESHOLD_DEFAULT = 0; const UPPER_THRESHOLD_DEFAULT = 100; -const WEIGHT_DEFAULT = 0.41; +const WEIGHT_DEFAULT = 0.41; // a default weight for suv max often used in the literature const DEFAULT_STRATEGY = ROI_STAT; function reducer(state, action) { @@ -137,21 +137,21 @@ export default function PanelRoiThresholdSegmentation({ }, []); useEffect(() => { - const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; - - const { unsubscribe } = SegmentationService.subscribe(removed, () => { - const segmentations = SegmentationService.getSegmentations(); - setSegmentations(segmentations); + const { unsubscribe } = SegmentationService.subscribe( + SegmentationService.EVENTS.SEGMENTATION_REMOVED, + () => { + const segmentations = SegmentationService.getSegmentations(); + setSegmentations(segmentations); - if (segmentations.length > 0) { - setSelectedSegmentationId(segmentations[0].id); - handleTMTVCalculation(); - return; + if (segmentations.length > 0) { + setSelectedSegmentationId(segmentations[0].id); + handleTMTVCalculation(); + } else { + setSelectedSegmentationId(null); + setTmtvValue(null); + } } - - setSelectedSegmentationId(null); - setTmtvValue(null); - }); + ); return () => { unsubscribe();

d+{#=RJG3Z^|5VKN%Wz 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%0Aaj{)J*5R|g+tXNaZJn{`kJ}^cD-6yU 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 MRg%mXH~8>>02O<|kN^Mx literal 0 HcmV?d00001 From a2d5f9114dd089fde3ace6b5a9ec06aecc10b87a Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 18:44:23 -0400 Subject: [PATCH 19/25] Update README.md --- modes/tmtv/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modes/tmtv/README.md b/modes/tmtv/README.md index 99d55ac288b..59449d36232 100644 --- a/modes/tmtv/README.md +++ b/modes/tmtv/README.md @@ -6,7 +6,7 @@ Total Metabolic Tumor Volume (TMTV) workflow mode enables quantitatively measurement of a tumor volume in a patient's body. This mode is accessible in any study that has a PT and CT image series as you can see below -![](./assets/modeValid.png) +![](https://raw.githubusercontent.com/OHIF/Viewers/feat/segmentation-service/modes/tmtv/assets/modeValid.png) Note: If the study does not have a PT and CT image series, the TMTV workflow mode will not be available and will become grayed out. @@ -25,7 +25,7 @@ The last row contains the fusion volume and the viewport to the right is a MIP o Volume in the Sagittal view. -![](./assets/modeLayout.png) +![](https://raw.githubusercontent.com/OHIF/Viewers/feat/segmentation-service/modes/tmtv/assets/modeLayout.png) ## Synchronization @@ -72,3 +72,7 @@ can also be extracted as a dicom RT Structure Set and saved as a DICOM file. ## Video Tutorial Below you can see a video tutorial on how to use the TMTV workflow mode. + + +https://user-images.githubusercontent.com/7490180/171065443-35369fba-e955-48ac-94da-d262e0fccb6b.mp4 + From 221a80e2c479cfd784d7e1f7a9c1f81d24c435d5 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 22:01:41 -0400 Subject: [PATCH 20/25] fix: try to fix build --- .../src/Viewport/Overlays/ViewportOverlay.tsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx b/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx index 01a02843bd6..2b511ed20e4 100644 --- a/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx +++ b/extensions/cornerstone-3d/src/Viewport/Overlays/ViewportOverlay.tsx @@ -42,11 +42,6 @@ function CornerstoneViewportOverlay({ upper ); - // Don't set VOI if already set - if (voi.windowCenter !== null && voi.windowWidth !== null) { - return; - } - setVOI({ windowCenter, windowWidth }); }; @@ -150,10 +145,7 @@ function CornerstoneViewportOverlay({ let instanceNumber; if (viewportData.viewportType === Enums.ViewportType.STACK) { - const instanceNumber = _getInstanceNumberFromStack( - viewportData, - imageIndex - ); + instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex); if (!instanceNumber) { return null; From 714bdf0128359874293ba72615337d6e816eec78 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 30 May 2022 22:28:26 -0400 Subject: [PATCH 21/25] fix unit tests --- .../measurementServiceMappingsFactory.test.js | 102 ------------------ .../core/src/classes/CommandsManager.test.js | 8 +- .../src/extensions/ExtensionManager.test.js | 9 +- platform/core/src/index.test.js | 1 + 4 files changed, 13 insertions(+), 107 deletions(-) delete mode 100644 extensions/cornerstone-3d/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.test.js diff --git a/extensions/cornerstone-3d/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.test.js b/extensions/cornerstone-3d/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.test.js deleted file mode 100644 index 65bd22ae83c..00000000000 --- a/extensions/cornerstone-3d/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.test.js +++ /dev/null @@ -1,102 +0,0 @@ -import measurementServiceMappingsFactory from './measurementServiceMappingsFactory'; - -jest.mock('cornerstone-core', () => ({ - ...jest.requireActual('cornerstone-core'), - getEnabledElement: () => ({ - image: { imageId: 123 }, - }), - metaData: { - ...jest.requireActual('cornerstone-core').metaData, - get: () => ({ - SOPInstanceUID: '123', - FrameOfReferenceUID: '123', - SeriesInstanceUID: '123', - StudyInstanceUID: '1234', - }), - }, -})); - -describe('measurementServiceMappings.js', () => { - let mappings; - let handles; - let points; - let csToolsAnnotation; - let measurement; - let measurementServiceMock; - let displaySetServiceMock; - let definition = 'Length'; - - beforeEach(() => { - measurementServiceMock = { - VALUE_TYPES: { - POLYLINE: 'value_type::polyline', - POINT: 'value_type::point', - ELLIPSE: 'value_type::ellipse', - MULTIPOINT: 'value_type::multipoint', - CIRCLE: 'value_type::circle', - }, - }; - displaySetServiceMock = { - getDisplaySetForSOPInstanceUID: (SOPInstanceUID, SeriesInstanceUID) => { - console.warn('SOPInstanceUID'); - - return { - displaySetInstanceUID: '1.2.3.4' - } - } - }; - mappings = measurementServiceMappingsFactory(measurementServiceMock, displaySetServiceMock); - handles = { start: { x: 1, y: 2 }, end: { x: 1, y: 2 } }; - points = [ - { x: 1, y: 2 }, - { x: 1, y: 2 }, - ]; - csToolsAnnotation = { - toolName: definition, - measurementData: { - id: 1, - label: 'Test', - SOPInstanceUID: '123', - FrameOfReferenceUID: '123', - SeriesInstanceUID: '123', - handles, - text: 'Test', - description: 'Test', - unit: 'mm', - length: undefined - }, - }; - measurement = { - id: 1, - SOPInstanceUID: '123', - FrameOfReferenceUID: '123', - referenceSeriesUID: '123', - referenceStudyUID: '1234', - displaySetInstanceUID: '1.2.3.4', - label: 'Test', - description: 'Test', - unit: 'mm', - type: measurementServiceMock.VALUE_TYPES.POLYLINE, - points, - }; - jest.clearAllMocks(); - }); - - /*describe('toAnnotation()', () => { - it('map measurement service format to annotation', async () => { - const mappedMeasurement = await mappings[csToolsAnnotation.toolName].toAnnotation( - measurement, - definition - ); - expect(mappedMeasurement).toEqual(csToolsAnnotation); - }); - });*/ - - describe('toMeasurement()', () => { - it('map annotation to measurement service format', async () => { - const getValueTypeFromToolType = (toolType) => 'valueType'; - const mappedAnnotation = await mappings[csToolsAnnotation.toolName].toMeasurement(csToolsAnnotation, displaySetServiceMock, getValueTypeFromToolType); - expect(mappedAnnotation).toEqual(measurement); - }); - }); -}); diff --git a/platform/core/src/classes/CommandsManager.test.js b/platform/core/src/classes/CommandsManager.test.js index 3a4b2810744..69d190e3189 100644 --- a/platform/core/src/classes/CommandsManager.test.js +++ b/platform/core/src/classes/CommandsManager.test.js @@ -11,6 +11,13 @@ describe('CommandsManager', () => { storeContexts: ['viewers'], options: { passMeToCommandFn: ':wave:' }, }, + commandsManagerConfig = { + getAppState: () => { + return { + viewers: 'Test', + }; + }, + }; beforeEach(() => { commandsManager = new CommandsManager(commandsManagerConfig); @@ -26,7 +33,6 @@ describe('CommandsManager', () => { expect(localCommandsManager.contexts).toEqual({}); }); - describe('createContext()', () => { it('creates a context', () => { commandsManager.createContext(contextName); diff --git a/platform/core/src/extensions/ExtensionManager.test.js b/platform/core/src/extensions/ExtensionManager.test.js index 940c0cec3b8..8bc41e75523 100644 --- a/platform/core/src/extensions/ExtensionManager.test.js +++ b/platform/core/src/extensions/ExtensionManager.test.js @@ -40,18 +40,18 @@ describe('ExtensionManager.js', () => { }); describe('registerExtensions()', () => { - it('calls registerExtension() for each extension', () => { + it('calls registerExtension() for each extension', async () => { extensionManager.registerExtension = jest.fn(); // SUT const fakeExtensions = [{ one: '1' }, { two: '2' }, { three: '3 ' }]; - extensionManager.registerExtensions(fakeExtensions); + await extensionManager.registerExtensions(fakeExtensions); // Assert expect(extensionManager.registerExtension.mock.calls.length).toBe(3); }); - it('calls registerExtension() for each extension passing its configuration if tuple', () => { + it('calls registerExtension() for each extension passing its configuration if tuple', async () => { const fakeConfiguration = { testing: true }; extensionManager.registerExtension = jest.fn(); @@ -61,7 +61,7 @@ describe('ExtensionManager.js', () => { [{ two: '2' }, fakeConfiguration], { three: '3 ' }, ]; - extensionManager.registerExtensions(fakeExtensions); + await extensionManager.registerExtensions(fakeExtensions); // Assert expect(extensionManager.registerExtension.mock.calls[1][1]).toEqual( @@ -91,6 +91,7 @@ describe('ExtensionManager.js', () => { expect(extension.preRegistration.mock.calls[0][0]).toEqual({ servicesManager, commandsManager, + extensionManager, appConfig, configuration: extensionConfiguration, }); diff --git a/platform/core/src/index.test.js b/platform/core/src/index.test.js index a6b8b046a43..955c599e2a9 100644 --- a/platform/core/src/index.test.js +++ b/platform/core/src/index.test.js @@ -32,6 +32,7 @@ describe('Top level exports', () => { 'MeasurementService', 'ToolBarService', 'ViewportGridService', + 'SegmentationService', 'HangingProtocolService', 'UserAuthenticationService', 'IWebApiDataSource', From abd36cfb2b648ef62d401d567edbc62733f701b6 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 31 May 2022 14:12:59 -0400 Subject: [PATCH 22/25] Update README.md --- modes/tmtv/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modes/tmtv/README.md b/modes/tmtv/README.md index 59449d36232..7b36205e413 100644 --- a/modes/tmtv/README.md +++ b/modes/tmtv/README.md @@ -6,7 +6,8 @@ Total Metabolic Tumor Volume (TMTV) workflow mode enables quantitatively measurement of a tumor volume in a patient's body. This mode is accessible in any study that has a PT and CT image series as you can see below -![](https://raw.githubusercontent.com/OHIF/Viewers/feat/segmentation-service/modes/tmtv/assets/modeValid.png) + +![modeValid](https://user-images.githubusercontent.com/7490180/171256138-7a948654-6836-460c-817a-fa9a1929926b.png) Note: If the study does not have a PT and CT image series, the TMTV workflow mode will not be available and will become grayed out. @@ -25,7 +26,8 @@ The last row contains the fusion volume and the viewport to the right is a MIP o Volume in the Sagittal view. -![](https://raw.githubusercontent.com/OHIF/Viewers/feat/segmentation-service/modes/tmtv/assets/modeLayout.png) + +![modeLayout](https://user-images.githubusercontent.com/7490180/171256159-1e94edac-985f-4de3-8759-27a077541f8f.png) ## Synchronization From af5b44f3c05a395dc2b1ad8bf5f3e6b2114d9a25 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 31 May 2022 14:38:18 -0400 Subject: [PATCH 23/25] feat: add about to the panel --- .../PanelROIThresholdSegmentation.tsx | 25 ++++++++++++++++--- modes/tmtv/src/index.js | 2 +- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx index 913339c0b76..0ae4722fdc4 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState, useCallback, useReducer } from 'react'; import PropTypes from 'prop-types'; -import { SegmentationTable, Button } from '@ohif/ui'; +import { SegmentationTable, Button, Icon } from '@ohif/ui'; import { useTranslation } from 'react-i18next'; import segmentationEditHandler from './segmentationEditHandler'; import ExportReports from './ExportReports'; @@ -184,8 +184,8 @@ export default function PanelRoiThresholdSegmentation({ }, [segmentations, selectedSegmentationId]); return ( -