From 8d72f95d11339ee88b2e6240ff1456f89e7a4e57 Mon Sep 17 00:00:00 2001 From: Brian Carrier <carrier@sleuthkit.org> Date: Wed, 9 Nov 2011 13:10:50 -0500 Subject: [PATCH] Initial import into github --- Case/build.xml | 8 + .../casemodule/docs/AddImageWizard1_Help.png | Bin 0 -> 66545 bytes .../casemodule/docs/AddImageWizard2_Help.png | Bin 0 -> 65807 bytes .../casemodule/docs/AddImageWizard3_Help.png | Bin 0 -> 64193 bytes .../casemodule/docs/Autopsy_overview.png | Bin 0 -> 167286 bytes .../casemodule/docs/CasePropertiesHelp.png | Bin 0 -> 48676 bytes .../casemodule/docs/NewCaseWizardHelp.png | Bin 0 -> 58574 bytes .../autopsy/casemodule/docs/aboutImage.html | 51 ++ .../autopsy/casemodule/docs/addImage-icon.png | Bin 0 -> 1632 bytes .../autopsy/casemodule/docs/addImage.html | 45 + .../casemodule/docs/caseProperties.html | 48 + .../casemodule/docs/casemodule-about.html | 50 + .../autopsy/casemodule/docs/casemodule-hs.xml | 31 + .../casemodule/docs/casemodule-idx.xml | 15 + .../casemodule/docs/casemodule-map.xml | 15 + .../casemodule/docs/casemodule-toc.xml | 21 + .../casemodule/docs/createNewCase.html | 43 + .../autopsy/casemodule/docs/hashDbMgmt.html | 50 + .../autopsy/casemodule/docs/new-icon.png | Bin 0 -> 1363 bytes .../autopsy/casemodule/docs/open-icon.png | Bin 0 -> 1051 bytes .../autopsy/casemodule/docs/overview.html | 45 + Case/manifest.mf | 7 + Case/nbproject/build-impl.xml | 45 + Case/nbproject/genfiles.properties | 8 + Case/nbproject/platform.properties | 17 + Case/nbproject/project.properties | 4 + Case/nbproject/project.xml | 141 +++ Case/nbproject/suite.properties | 1 + .../autopsy/casemodule/AddImageAction.java | 304 +++++++ .../casemodule/AddImageVisualPanel1.form | 205 +++++ .../casemodule/AddImageVisualPanel1.java | 493 ++++++++++ .../casemodule/AddImageVisualPanel2.form | 122 +++ .../casemodule/AddImageVisualPanel2.java | 181 ++++ .../casemodule/AddImageVisualPanel3.form | 73 ++ .../casemodule/AddImageVisualPanel3.java | 114 +++ .../casemodule/AddImageWizardIterator.java | 166 ++++ .../casemodule/AddImageWizardPanel1.java | 189 ++++ .../casemodule/AddImageWizardPanel2.java | 379 ++++++++ .../casemodule/AddImageWizardPanel3.java | 157 ++++ .../sleuthkit/autopsy/casemodule/Autopsy.java | 70 ++ .../autopsy/casemodule/Autopsy_logo.gif | Bin 0 -> 7442 bytes .../autopsy/casemodule/Bundle.properties | 115 +++ .../autopsy/casemodule/ButtonColumn.java | 232 +++++ .../sleuthkit/autopsy/casemodule/Case.java | 852 ++++++++++++++++++ .../autopsy/casemodule/CaseCloseAction.java | 132 +++ .../casemodule/CaseConfigFileInterface.java | 42 + .../autopsy/casemodule/CaseDeleteAction.java | 117 +++ .../autopsy/casemodule/CaseNewAction.java | 48 + .../autopsy/casemodule/CaseOpenAction.java | 86 ++ .../casemodule/CasePropertiesAction.java | 139 +++ .../casemodule/CasePropertiesForm.form | 254 ++++++ .../casemodule/CasePropertiesForm.java | 399 ++++++++ .../autopsy/casemodule/CueBannerPanel.form | 299 ++++++ .../autopsy/casemodule/CueBannerPanel.java | 333 +++++++ .../autopsy/casemodule/GeneralFilter.java | 84 ++ .../casemodule/NewCaseVisualPanel1.form | 136 +++ .../casemodule/NewCaseVisualPanel1.java | 251 ++++++ .../casemodule/NewCaseWizardAction.java | 157 ++++ .../casemodule/NewCaseWizardPanel1.java | 278 ++++++ .../casemodule/OpenRecentCasePanel.form | 99 ++ .../casemodule/OpenRecentCasePanel.java | 213 +++++ .../autopsy/casemodule/RecentCases.java | 442 +++++++++ .../autopsy/casemodule/RecentItems.java | 70 ++ .../autopsy/casemodule/StartupWindow.java | 97 ++ .../autopsy/casemodule/UpdateRecentCases.java | 94 ++ .../autopsy/casemodule/XMLCaseManagement.java | 802 +++++++++++++++++ .../autopsy/casemodule/addImage-icon.png | Bin 0 -> 1632 bytes .../autopsy/casemodule/casemodule-helpset.xml | 7 + .../autopsy/casemodule/close-icon.png | Bin 0 -> 1069 bytes .../sleuthkit/autopsy/casemodule/layer.xml | 258 ++++++ .../sleuthkit/autopsy/casemodule/new-icon.png | Bin 0 -> 4021 bytes .../autopsy/casemodule/open-icon.png | Bin 0 -> 4143 bytes .../autopsy/casemodule/open-recent-icon.png | Bin 0 -> 4526 bytes .../sleuthkit/autopsy/casemodule/package.html | 10 + .../autopsy/hashdatabase/Bundle.properties | 2 + .../autopsy/hashdatabase/HashDb.java | 179 ++++ .../hashdatabase/HashDbMgmtAction.java | 106 +++ .../autopsy/hashdatabase/HashDbMgmtPanel.java | 131 +++ .../autopsy/hashdatabase/HashDbPanel.form | 129 +++ .../autopsy/hashdatabase/HashDbPanel.java | 300 ++++++ .../autopsy/hashdatabase/HashDbSettings.java | 166 ++++ .../autopsy/hashdatabase/IndexStatus.java | 65 ++ .../autopsy/casemodule/RecentCasesTest.java | 280 ++++++ CoreComponentInterfaces/build.xml | 8 + CoreComponentInterfaces/manifest.mf | 7 + .../nbproject/build-impl.xml | 45 + .../nbproject/genfiles.properties | 8 + .../nbproject/project.properties | 3 + CoreComponentInterfaces/nbproject/project.xml | 81 ++ .../nbproject/suite.properties | 1 + .../corecomponentinterfaces/Bundle.properties | 1 + .../CoreComponentControl.java | 75 ++ .../corecomponentinterfaces/DataContent.java | 44 + .../DataContentViewer.java | 63 ++ .../corecomponentinterfaces/DataExplorer.java | 39 + .../corecomponentinterfaces/DataResult.java | 55 ++ .../DataResultViewer.java | 64 ++ .../autopsy/corecomponentinterfaces/layer.xml | 4 + .../corecomponentinterfaces/package.html | 106 +++ .../sleuthkit/autopsy/images/Folder-icon.png | Bin 0 -> 739 bytes .../autopsy/images/addImage-icon.png | Bin 0 -> 1632 bytes .../sleuthkit/autopsy/images/close-icon.png | Bin 0 -> 1069 bytes .../autopsy/images/file-icon-deleted.png | Bin 0 -> 636 bytes .../sleuthkit/autopsy/images/file-icon.png | Bin 0 -> 362 bytes .../autopsy/images/folder-icon-deleted.png | Bin 0 -> 759 bytes .../autopsy/images/hard-drive-icon.jpg | Bin 0 -> 822 bytes .../org/sleuthkit/autopsy/images/new-icon.png | Bin 0 -> 1363 bytes .../sleuthkit/autopsy/images/open-icon.png | Bin 0 -> 1051 bytes .../sleuthkit/autopsy/images/save-icon.png | Bin 0 -> 1215 bytes .../org/sleuthkit/autopsy/images/vol-icon.png | Bin 0 -> 3196 bytes CoreComponents/build.xml | 8 + .../docs/ContentViewer_example.png | Bin 0 -> 48659 bytes .../docs/Hex_Content_Viewer.png | Bin 0 -> 40655 bytes .../docs/Picture_Content_Viewer.png | Bin 0 -> 49846 bytes .../docs/ResultViewer_example.png | Bin 0 -> 45776 bytes .../docs/String_Content_Viewer.png | Bin 0 -> 19924 bytes .../docs/Table_Results_Viewer.png | Bin 0 -> 72064 bytes .../docs/Thumbnail_Results_Viewer.png | Bin 0 -> 117148 bytes .../docs/corecomponents-about.html | 30 + .../corecomponents/docs/corecomponents-hs.xml | 31 + .../docs/corecomponents-idx.xml | 31 + .../docs/corecomponents-map.xml | 28 + .../docs/corecomponents-toc.xml | 45 + .../docs/datacontent-about.html | 45 + .../docs/dataexplorer-about.html | 35 + .../corecomponents/docs/dataresult-about.html | 64 ++ .../docs/hex-content-viewer.html | 40 + .../docs/picture-content-viewer.html | 40 + .../docs/string-content-viewer.html | 38 + .../docs/table-results-viewer.html | 39 + .../docs/thumbnail-results-viewer.html | 40 + CoreComponents/manifest.mf | 8 + CoreComponents/nbproject/build-impl.xml | 45 + CoreComponents/nbproject/genfiles.properties | 8 + CoreComponents/nbproject/project.properties | 4 + CoreComponents/nbproject/project.xml | 159 ++++ CoreComponents/nbproject/suite.properties | 1 + .../AbstractDataResultViewer.java | 82 ++ .../autopsy/corecomponents/Bundle.properties | 66 ++ .../corecomponents/CustomAboutAction.java | 57 ++ .../DataContentTopComponent.form | 42 + .../DataContentTopComponent.java | 336 +++++++ .../DataContentTopComponentSettings.xml | 12 + .../DataContentTopComponentWstcref.xml | 11 + .../corecomponents/DataContentViewerHex.form | 182 ++++ .../corecomponents/DataContentViewerHex.java | 328 +++++++ .../DataContentViewerPicture.form | 45 + .../DataContentViewerPicture.java | 156 ++++ .../DataContentViewerString.form | 156 ++++ .../DataContentViewerString.java | 307 +++++++ .../DataResultTopComponent.form | 72 ++ .../DataResultTopComponent.java | 358 ++++++++ .../corecomponents/DataResultViewerTable.form | 41 + .../corecomponents/DataResultViewerTable.java | 355 ++++++++ .../DataResultViewerThumbnail.form | 37 + .../DataResultViewerThumbnail.java | 158 ++++ .../autopsy/corecomponents/Installer.java | 43 + .../corecomponents/OutputViewPanel.form | 139 +++ .../corecomponents/OutputViewPanel.java | 251 ++++++ .../ProductInformationPanel.form | 150 +++ .../ProductInformationPanel.java | 256 ++++++ .../corecomponents/TableFilterChildren.java | 59 ++ .../corecomponents/TableFilterNode.java | 59 ++ .../corecomponents/ThumbnailViewChildren.java | 78 ++ .../corecomponents/ThumbnailViewNode.java | 125 +++ .../autopsy/corecomponents/arrow_left.gif | Bin 0 -> 874 bytes .../autopsy/corecomponents/arrow_right.gif | Bin 0 -> 870 bytes .../corecomponents/corecomponents-helpset.xml | 7 + .../autopsy/corecomponents/layer.xml | 54 ++ DataModel/build.xml | 8 + DataModel/manifest.mf | 6 + DataModel/nbproject/build-impl.xml | 45 + DataModel/nbproject/genfiles.properties | 8 + DataModel/nbproject/project.properties | 5 + DataModel/nbproject/project.xml | 74 ++ DataModel/nbproject/suite.properties | 1 + .../datamodel/AbstractContentChildren.java | 95 ++ .../datamodel/AbstractContentNode.java | 243 +++++ .../datamodel/AbstractFsContentNode.java | 73 ++ .../autopsy/datamodel/Bundle.properties | 1 + .../autopsy/datamodel/ContentChildren.java | 100 ++ .../autopsy/datamodel/ContentNode.java | 105 +++ .../autopsy/datamodel/ContentNodeVisitor.java | 69 ++ .../autopsy/datamodel/DataConversion.java | 189 ++++ .../autopsy/datamodel/DirectoryNode.java | 112 +++ .../sleuthkit/autopsy/datamodel/FileNode.java | 107 +++ .../autopsy/datamodel/ImageNode.java | 130 +++ .../autopsy/datamodel/Installer.java | 81 ++ .../autopsy/datamodel/NodeProperty.java | 43 + .../datamodel/RootContentChildren.java | 50 + .../autopsy/datamodel/VolumeNode.java | 134 +++ .../sleuthkit/autopsy/datamodel/package.html | 12 + DirectoryTree/build.xml | 8 + .../docs/DirectoryTree_example.png | Bin 0 -> 17946 bytes .../docs/FileSystemDetailHelp.png | Bin 0 -> 39452 bytes .../directorytree/docs/ImageDetailHelp.png | Bin 0 -> 20204 bytes .../directorytree/docs/VolumeDetailHelp.png | Bin 0 -> 21558 bytes .../docs/directorytree-about.html | 50 + .../directorytree/docs/directorytree-hs.xml | 31 + .../directorytree/docs/directorytree-idx.xml | 14 + .../directorytree/docs/directorytree-map.xml | 14 + .../directorytree/docs/directorytree-toc.xml | 18 + .../docs/filesystem-details.html | 48 + .../docs/how-to-use-directorytree.html | 54 ++ .../directorytree/docs/image-details.html | 36 + .../directorytree/docs/node_selected.png | Bin 0 -> 31607 bytes .../docs/open-directorytree.html | 45 + .../docs/open_directoryTree1.png | Bin 0 -> 29880 bytes .../docs/open_directoryTree2.png | Bin 0 -> 19808 bytes .../docs/rightClick_fileSystemDetails.png | Bin 0 -> 9481 bytes .../docs/rightClick_imageDetails.png | Bin 0 -> 9122 bytes .../docs/rightClick_volumeDetails.png | Bin 0 -> 9563 bytes .../directorytree/docs/volume-details.html | 36 + DirectoryTree/manifest.mf | 7 + DirectoryTree/nbproject/build-impl.xml | 45 + DirectoryTree/nbproject/genfiles.properties | 8 + DirectoryTree/nbproject/project.properties | 4 + DirectoryTree/nbproject/project.xml | 133 +++ DirectoryTree/nbproject/suite.properties | 1 + .../autopsy/directorytree/Bundle.properties | 49 + .../directorytree/ChangeViewAction.java | 103 +++ .../autopsy/directorytree/CollapseAction.java | 70 ++ .../DataResultFilterChildren.java | 46 + .../directorytree/DataResultFilterNode.java | 233 +++++ .../DirectoryTreeFilterChildren.java | 70 ++ .../DirectoryTreeFilterNode.java | 74 ++ .../DirectoryTreeTopComponent.form | 91 ++ .../DirectoryTreeTopComponent.java | 643 +++++++++++++ .../DirectoryTreeTopComponentSettings.xml | 12 + .../DirectoryTreeTopComponentWstcref.xml | 11 + .../directorytree/ExternalViewerAction.java | 124 +++ .../autopsy/directorytree/ExtractAction.java | 218 +++++ .../directorytree/FileSystemDetailsPanel.form | 384 ++++++++ .../directorytree/FileSystemDetailsPanel.java | 367 ++++++++ .../directorytree/ImageDetailsPanel.form | 138 +++ .../directorytree/ImageDetailsPanel.java | 174 ++++ .../directorytree/NewWindowViewAction.java | 66 ++ .../ShowDetailActionVisitor.java | 301 +++++++ .../directorytree/VolumeDetailsPanel.form | 215 +++++ .../directorytree/VolumeDetailsPanel.java | 205 +++++ .../autopsy/directorytree/arrow_left.gif | Bin 0 -> 874 bytes .../autopsy/directorytree/arrow_right.gif | Bin 0 -> 870 bytes .../autopsy/directorytree/back-button.png | Bin 0 -> 1164 bytes .../directorytree/directorytree-helpset.xml | 7 + .../autopsy/directorytree/explorerWsmode.xml | 18 + .../autopsy/directorytree/forward-button.png | Bin 0 -> 1156 bytes .../sleuthkit/autopsy/directorytree/layer.xml | 43 + FileSearch/build.xml | 8 + .../filesearch/docs/FileSearch_example.png | Bin 0 -> 13632 bytes .../filesearch/docs/FileSearch_usage.png | Bin 0 -> 14856 bytes .../filesearch/docs/filesearch-about.html | 54 ++ .../autopsy/filesearch/docs/filesearch-hs.xml | 31 + .../filesearch/docs/filesearch-idx.xml | 11 + .../filesearch/docs/filesearch-map.xml | 9 + .../filesearch/docs/filesearch-toc.xml | 13 + .../docs/how-to-use-filesearch.html | 52 ++ .../filesearch/docs/open-filesearch.html | 45 + .../filesearch/docs/open_fileSearch1.png | Bin 0 -> 30977 bytes .../filesearch/docs/open_fileSearch2.png | Bin 0 -> 22413 bytes FileSearch/manifest.mf | 7 + FileSearch/nbproject/build-impl.xml | 45 + FileSearch/nbproject/genfiles.properties | 8 + FileSearch/nbproject/project.properties | 5 + FileSearch/nbproject/project.xml | 138 +++ FileSearch/nbproject/suite.properties | 1 + .../modules/ext/jcalendarbutton-1.4.5.jar | Bin 0 -> 28408 bytes .../filesearch/AbstractFileSearchFilter.java | 40 + .../autopsy/filesearch/Bundle.properties | 45 + .../filesearch/DataResultFilterChildren.java | 46 + .../filesearch/DataResultFilterNode.java | 139 +++ .../autopsy/filesearch/DateSearchFilter.java | 254 ++++++ .../autopsy/filesearch/DateSearchPanel.form | 234 +++++ .../autopsy/filesearch/DateSearchPanel.java | 313 +++++++ .../autopsy/filesearch/FileSearchFilter.java | 62 ++ .../filesearch/FileSearchTopComponent.java | 342 +++++++ .../FileSearchTopComponentSettings.xml | 12 + .../FileSearchTopComponentWstcref.xml | 11 + .../autopsy/filesearch/FilterArea.java | 126 +++ .../filesearch/KnownStatusSearchFilter.java | 76 ++ .../filesearch/KnownStatusSearchPanel.form | 77 ++ .../filesearch/KnownStatusSearchPanel.java | 111 +++ .../autopsy/filesearch/NameSearchFilter.java | 57 ++ .../autopsy/filesearch/NameSearchPanel.form | 77 ++ .../autopsy/filesearch/NameSearchPanel.java | 108 +++ .../filesearch/OpenParentFolderAction.java | 88 ++ .../autopsy/filesearch/SearchChildren.java | 61 ++ .../autopsy/filesearch/SearchNode.java | 119 +++ .../autopsy/filesearch/SizeSearchFilter.java | 66 ++ .../autopsy/filesearch/SizeSearchPanel.form | 87 ++ .../autopsy/filesearch/SizeSearchPanel.java | 114 +++ .../autopsy/filesearch/arrow_down.gif | Bin 0 -> 848 bytes .../autopsy/filesearch/arrow_right.gif | Bin 0 -> 861 bytes .../autopsy/filesearch/filesearch-helpset.xml | 7 + .../sleuthkit/autopsy/filesearch/layer.xml | 39 + LICENSE-2.0.txt | 202 +++++ Logging/build.xml | 8 + Logging/manifest.mf | 7 + Logging/nbproject/build-impl.xml | 45 + Logging/nbproject/genfiles.properties | 8 + Logging/nbproject/platform.properties | 7 + .../private/platform-private.properties | 1 + Logging/nbproject/private/private.xml | 9 + Logging/nbproject/project.properties | 3 + Logging/nbproject/project.xml | 64 ++ Logging/nbproject/suite.properties | 1 + .../logging/AutopsyExceptionHandler.java | 154 ++++ .../autopsy/logging/Bundle.properties | 2 + .../sleuthkit/autopsy/logging/Installer.java | 63 ++ .../org/sleuthkit/autopsy/logging/Log.java | 42 + .../org/sleuthkit/autopsy/logging/LogIcon.png | Bin 0 -> 980 bytes .../sleuthkit/autopsy/logging/TestLogger.java | 43 + .../logging/TimestampingFormatter.java | 50 + .../org/sleuthkit/autopsy/logging/layer.xml | 10 + MenuActions/build.xml | 8 + MenuActions/manifest.mf | 6 + MenuActions/nbproject/build-impl.xml | 45 + MenuActions/nbproject/genfiles.properties | 8 + MenuActions/nbproject/project.properties | 3 + MenuActions/nbproject/project.xml | 117 +++ MenuActions/nbproject/suite.properties | 1 + .../autopsy/menuactions/Bundle.properties | 2 + .../menuactions/DataContentDynamicMenu.java | 85 ++ .../autopsy/menuactions/DataContentMenu.java | 54 ++ .../menuactions/DataExplorerDynamicMenu.java | 71 ++ .../autopsy/menuactions/DataExplorerMenu.java | 52 ++ .../autopsy/menuactions/DataResultMenu.java | 83 ++ .../menuactions/OpenTopComponentAction.java | 45 + .../autopsy/menuactions/SearchResultMenu.java | 77 ++ .../sleuthkit/autopsy/menuactions/layer.xml | 53 ++ .../netbeans/core/startup/Bundle.properties | 8 + .../org/netbeans/core/startup/frame.gif | Bin 0 -> 213 bytes .../org/netbeans/core/startup/frame32.gif | Bin 0 -> 1795 bytes .../org/netbeans/core/startup/frame48.gif | Bin 0 -> 3325 bytes .../org/netbeans/core/startup/splash.gif | Bin 0 -> 19506 bytes .../core/windows/view/ui/Bundle.properties | 2 + build-unix.xml | 8 + build-windows.xml | 14 + build.xml | 109 +++ nbproject/build-impl.xml | 49 + nbproject/genfiles.properties | 8 + nbproject/platform.properties | 99 ++ nbproject/project.properties | 28 + nbproject/project.xml | 9 + 343 files changed, 26673 insertions(+) create mode 100644 Case/build.xml create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard1_Help.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard2_Help.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard3_Help.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/Autopsy_overview.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/CasePropertiesHelp.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/NewCaseWizardHelp.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage-icon.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-hs.xml create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-idx.xml create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-map.xml create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-toc.xml create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/createNewCase.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/hashDbMgmt.html create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/new-icon.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/open-icon.png create mode 100644 Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/overview.html create mode 100644 Case/manifest.mf create mode 100644 Case/nbproject/build-impl.xml create mode 100644 Case/nbproject/genfiles.properties create mode 100644 Case/nbproject/platform.properties create mode 100644 Case/nbproject/project.properties create mode 100644 Case/nbproject/project.xml create mode 100644 Case/nbproject/suite.properties create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIterator.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel1.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel2.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/Autopsy.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/Autopsy_logo.gif create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/ButtonColumn.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/Case.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CaseCloseAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CaseConfigFileInterface.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CaseNewAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.form create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/RecentCases.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/RecentItems.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/addImage-icon.png create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/casemodule-helpset.xml create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/close-icon.png create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/layer.xml create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/new-icon.png create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/open-icon.png create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/open-recent-icon.png create mode 100644 Case/src/org/sleuthkit/autopsy/casemodule/package.html create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.form create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.java create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbSettings.java create mode 100644 Case/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java create mode 100644 Case/test/unit/src/org/sleuthkit/autopsy/casemodule/RecentCasesTest.java create mode 100644 CoreComponentInterfaces/build.xml create mode 100644 CoreComponentInterfaces/manifest.mf create mode 100644 CoreComponentInterfaces/nbproject/build-impl.xml create mode 100644 CoreComponentInterfaces/nbproject/genfiles.properties create mode 100644 CoreComponentInterfaces/nbproject/project.properties create mode 100644 CoreComponentInterfaces/nbproject/project.xml create mode 100644 CoreComponentInterfaces/nbproject/suite.properties create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContent.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataExplorer.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResult.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResultViewer.java create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/package.html create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/Folder-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/addImage-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/close-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon-deleted.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/folder-icon-deleted.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/hard-drive-icon.jpg create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/new-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/open-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/save-icon.png create mode 100644 CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/vol-icon.png create mode 100644 CoreComponents/build.xml create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ContentViewer_example.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Hex_Content_Viewer.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Picture_Content_Viewer.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ResultViewer_example.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/String_Content_Viewer.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Table_Results_Viewer.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Thumbnail_Results_Viewer.png create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-about.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-hs.xml create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-idx.xml create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-map.xml create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-toc.xml create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/datacontent-about.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/hex-content-viewer.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/picture-content-viewer.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/string-content-viewer.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/table-results-viewer.html create mode 100644 CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/thumbnail-results-viewer.html create mode 100644 CoreComponents/manifest.mf create mode 100644 CoreComponents/nbproject/build-impl.xml create mode 100644 CoreComponents/nbproject/genfiles.properties create mode 100644 CoreComponents/nbproject/project.properties create mode 100644 CoreComponents/nbproject/project.xml create mode 100644 CoreComponents/nbproject/suite.properties create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AbstractDataResultViewer.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentSettings.xml create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentWstcref.xml create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.form create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_left.gif create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_right.gif create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/corecomponents-helpset.xml create mode 100644 CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml create mode 100644 DataModel/build.xml create mode 100644 DataModel/manifest.mf create mode 100644 DataModel/nbproject/build-impl.xml create mode 100644 DataModel/nbproject/genfiles.properties create mode 100644 DataModel/nbproject/project.properties create mode 100644 DataModel/nbproject/project.xml create mode 100644 DataModel/nbproject/suite.properties create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/Bundle.properties create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/ContentChildren.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/DataConversion.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/ImageNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/Installer.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/NodeProperty.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/RootContentChildren.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java create mode 100644 DataModel/src/org/sleuthkit/autopsy/datamodel/package.html create mode 100644 DirectoryTree/build.xml create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/DirectoryTree_example.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/FileSystemDetailHelp.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/ImageDetailHelp.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/VolumeDetailHelp.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-hs.xml create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-idx.xml create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-map.xml create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-toc.xml create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/image-details.html create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/node_selected.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree1.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree2.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_fileSystemDetails.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_imageDetails.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_volumeDetails.png create mode 100644 DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/volume-details.html create mode 100644 DirectoryTree/manifest.mf create mode 100644 DirectoryTree/nbproject/build-impl.xml create mode 100644 DirectoryTree/nbproject/genfiles.properties create mode 100644 DirectoryTree/nbproject/project.properties create mode 100644 DirectoryTree/nbproject/project.xml create mode 100644 DirectoryTree/nbproject/suite.properties create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterChildren.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentSettings.xml create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentWstcref.xml create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExtractAction.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.form create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.form create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/NewWindowViewAction.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ShowDetailActionVisitor.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.form create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.java create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_left.gif create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_right.gif create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/back-button.png create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/directorytree-helpset.xml create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/explorerWsmode.xml create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/forward-button.png create mode 100644 DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml create mode 100644 FileSearch/build.xml create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_example.png create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_usage.png create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-hs.xml create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-idx.xml create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-map.xml create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-toc.xml create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch1.png create mode 100644 FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch2.png create mode 100644 FileSearch/manifest.mf create mode 100644 FileSearch/nbproject/build-impl.xml create mode 100644 FileSearch/nbproject/genfiles.properties create mode 100644 FileSearch/nbproject/project.properties create mode 100644 FileSearch/nbproject/project.xml create mode 100644 FileSearch/nbproject/suite.properties create mode 100644 FileSearch/release/modules/ext/jcalendarbutton-1.4.5.jar create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/Bundle.properties create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterChildren.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterNode.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponent.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentSettings.xml create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentWstcref.xml create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/FilterArea.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.form create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.form create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/OpenParentFolderAction.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchChildren.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchNode.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.form create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_down.gif create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_right.gif create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/filesearch-helpset.xml create mode 100644 FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml create mode 100644 LICENSE-2.0.txt create mode 100644 Logging/build.xml create mode 100644 Logging/manifest.mf create mode 100644 Logging/nbproject/build-impl.xml create mode 100644 Logging/nbproject/genfiles.properties create mode 100644 Logging/nbproject/platform.properties create mode 100644 Logging/nbproject/private/platform-private.properties create mode 100644 Logging/nbproject/private/private.xml create mode 100644 Logging/nbproject/project.properties create mode 100644 Logging/nbproject/project.xml create mode 100644 Logging/nbproject/suite.properties create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/AutopsyExceptionHandler.java create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/Bundle.properties create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/Installer.java create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/Log.java create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/LogIcon.png create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/TestLogger.java create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/TimestampingFormatter.java create mode 100644 Logging/src/org/sleuthkit/autopsy/logging/layer.xml create mode 100644 MenuActions/build.xml create mode 100644 MenuActions/manifest.mf create mode 100644 MenuActions/nbproject/build-impl.xml create mode 100644 MenuActions/nbproject/genfiles.properties create mode 100644 MenuActions/nbproject/project.properties create mode 100644 MenuActions/nbproject/project.xml create mode 100644 MenuActions/nbproject/suite.properties create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/Bundle.properties create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerDynamicMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/OpenTopComponentAction.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java create mode 100644 MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml create mode 100644 branding/core/core.jar/org/netbeans/core/startup/Bundle.properties create mode 100644 branding/core/core.jar/org/netbeans/core/startup/frame.gif create mode 100644 branding/core/core.jar/org/netbeans/core/startup/frame32.gif create mode 100644 branding/core/core.jar/org/netbeans/core/startup/frame48.gif create mode 100644 branding/core/core.jar/org/netbeans/core/startup/splash.gif create mode 100644 branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties create mode 100644 build-unix.xml create mode 100644 build-windows.xml create mode 100644 build.xml create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/platform.properties create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml diff --git a/Case/build.xml b/Case/build.xml new file mode 100644 index 0000000000..0cb0a367c5 --- /dev/null +++ b/Case/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.casemodule" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.casemodule.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard1_Help.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard1_Help.png new file mode 100644 index 0000000000000000000000000000000000000000..d67d332c8e9dbfc49a6f851a945b2eac85ca5d36 GIT binary patch literal 66545 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 literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard2_Help.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard2_Help.png new file mode 100644 index 0000000000000000000000000000000000000000..d9ce8ef80be10edfbcd59f82d4db440b0ead8648 GIT binary patch literal 65807 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 literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard3_Help.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/AddImageWizard3_Help.png new file mode 100644 index 0000000000000000000000000000000000000000..876d5a789fe1d39d21e361f51d4896f7f86b665a GIT binary patch literal 64193 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≀DW}*f(GLv*j3H&X1Sv|8E~Vw{T*YZi|$e@d2gF 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 literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/Autopsy_overview.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/Autopsy_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d854b0ba2fafb10f88b908aafc8f9af592a6a8 GIT binary patch literal 167286 zcmeAS@N?(olHy`uVBq!ia0y~yV13NMz@ovy#K6G7c00(Hfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#RL9^>lFzsfc?sm%ZW2k$=aF z|7N&{Zd}0R&K{U!lcV7p;1U>kUtW~EiT@(IR>Zs;Pc>I4Brpmd{T31u5-=f+RWR_@ z#dV5GUe7Ha?AZ1Dzwg;4Z}KMTZZH4d{qclau)XojGc})Qdp6yFf4#t&$%BDYfl;M_ zWdehc12U(BnW?jI0-FyLsxYz|#Rf0lYs^^mf)yR%W(>)Cv{c1F7MB$cOW9td*$UPP zcF&_$1})Q%K|(Y5a9OY*sJRq};~khjIx$S0RiVl0!;Z`S0V@w$VR{?lfW`{N1~1<| zQ&^TUV-Fn%rWIEbWFd+%L(gH4fWuO?I4`EljTqqy)f1Anfe-9Y^l*1z@=%E5SP&$v zuiE$$su&{#97IF1KBbG8WpCXdx%yCM^u|9}i~)yDz+8?H+oj9CJbiv@buec_94>VV z93h5Fmwnk6)^30360TI?@Kq(Cbc&SKOU~3;uOfL3!*Rr{YJlsMSx5Qb?B`IoO`PkB zoU9N&T4mX&wdhJmkVjog;$rjl>z<`H-Na#WmR94c#aHHhbNKt#Qu6Su>sKZns!_%a zc2HWnI^RJwFssV$`is+wo>%u<7_?(|qeHJ6$dOX9ZZj$|f)`|v$AV=74ojCUn_}`z z7<(G%sApPn<w(6`BG*K)25@*IrKrYPpforu=+X>->^3O;;|wWYnpVF#ET{kfqyr*K z*uCVjz)IV6l|yqC@3m6g2Bj}O<|W^o{b;{i5_b1oNnzrw+rNL;Gy4v`%Nf;vrDsi_ zabx${id`(LHU}{;6}r>G_I1{(=t9G%SVM7@YGc;AD;tcu7sP%3xF?^BPe#LH!~X+~ zwZFf=tNj1Ca@$oUMLw-=?dX*i9tAQ6k3BayKNm>f;^3xz=SSl^BUQfB&8<<9U*@P> zGRyU|*~Jo;DR5`m=B%CkF+ulET}Tf7`eJR?#&y?LmWIY|*s;1a_P`lMP!KKhTTp+$ zTiPt^%99z7U!|s8SsDDkZ}$4mswonU>P)6iD?1lNeExNN{+rvoe<wH|Ty30o)zf=d z`jZv6+3t%J>CCvYaq;p?j{b(K0Y6S>iOs*4spkHu{%KQu;iA>ni+=M6b3HVOI3K+; zjZ>?~ucAq&_p^i0k^PevTLkaqa+}gMHIbKDLANH(V%jHV)zs*Mb;lwCPgQMcy1F`K zOVWz8hf-S37N*J>rhJ?G+LQ9cZETmv6ij4EUM#HjN#J_y5$QCa7kh;`SoWkcnVv4o z+`{Qn*~NZ7^nvt^(|6z8>3?`l$o_|K`i}2BzMDSpR`l7B_WoSg;Tw}DJ&+A7d~)Jh z=lP#3FPJKqh_AIic*&95d=Ueq)T>V4rHRWKDlf3x6)vsj6Aaz3N^)nOYx6G6!)<)k z+0VWd9F+XK|IexHa^C&MO^JT{zsEbr*O)djwh3Q(a9Y3i@8|XE`@da#;;ApExpK$1 zQ+B@n_6rjaANzi{w%X$0qWdodS7>_iDogAuJliro?*9J#_g7X1%hi8+>8-!N>au+M zHyNG8*c;Mq-+SXM6HiR_PB^mRdTrhO{fFWiUn=}RWPJAh_lwJ=d+whU=KI(9|KW`r z?ShM|>*6BCyW#^=WtBcmXqOPK`ty$^G|O<My^7JriHi-hA4vIi*nh}ZvSeP^*(>k4 z{KIV7<6`SR>qQ(Wc{!_7DneoDF|}sKOAcM`A`|O)+-sD@UzS!jX;*H!^78*Nmd^NV zKfavXp<DO8Rp_IieD-ywaK6tsY&~>8#T~Z!@#VqM-@FU1xvYA+@zr6!+qz8Yl6y3^ zUNdl5{N?7df2X}#?r!-I{$1AMwqKq_v3g8jc|>)}pZ;*3i+^6c<POP>%!&=%*2CeW z<HVZQqw5jNJ8_M`SNjm7HP@L{js|!<^ICMT?Oot5|Ktigr~X%8(*g^<`I%!T@_Pq2 zXI0!<6}9Wjf%i_qJ3hS&IscjE#mfMuz;|i07et)u{kbid;fltKxw#dGUi%mPJR`>b zCNi&L%IbU0qBBIb?H7L!Kf*b2dP2&R$9+i~OEcS6Rtc^-lNlf}%aQf`f*iiccK7$6 zA}l`X3Fcq$VEi!c<X>iUk>ama6E3X1HF4p|jk$VL9z02o|8?p0l$Spb?w+P|{*9s1 z|KzC?|B1#1{QQu9b<+PQ6_p%3>Yug$E&eHX?nUUWiLFASkxT0oq~iX*6uo!z>D`P+ zljgL||8Q0M*1=^5o$_b)MY>kp+A2P`=5%g(&4+V6bANZK6lgoli+^|M%#|z0%-7BT z_buAEoqvDv?fb1VUALD{Z#b!xGiBnwf;%ftxA$1h*~?j{Hj&HgochOvzbCIqKABSY z=s0^lr_4<G(~VCKt~=m=<7I(Lpxj|b$+a1r1@q#RB((o<ZuPhOI`Q~%8@u9n`Zw9F z=FZw!@o&y?`M>ACUXN!_I(xalk5fiHZlw>C>FeA68w`9WY|WfgbF%vXzr6{*pN~xT zFW<S~{`c44zwP)qN&4L@@3JYGTAQWZZQrfD{H`MP*M{)>JBoivmtPXx!~aEULSBu_ z{)P2gFYG_;zt7$-Dry(c`qTU0Qt23_=bge;lm0zc|9?P!({BY2`CtZ*8>cGzO^@!` z`gHB47bgN{dVHDEVg4)RaaGd~)mcTiW}B3$FZMg9*7SgXp+QiJ^oCk_O%ExT=gnn) zDe>*4KQr2o+*0LIK0ERADY=V|xjU7_BhNS`?JNq-jJ52`aN~LG*}Q0ZN3GqC{Wtge z%@)`<F}Z5qy}y6DEEehVWJ?{<yTyL7vGk;d%eJR8rpvx?nJMAAdZx`vbFE(s&Wh}7 z4|CW5dP>`WuXxUJ?M*K?$;P(4+UUOJo13nI<%}tY9nZ{9Bpfj_UBeirCwVK`O7Eev z%;qC98g8d6Uj<&&{CdJCFxc^c#Nyj;G$bE>7pbk<oOL`-s$+MY{iE;mci&1skR-R_ zQc8qJ*OAVTdtJ9aPh_jVtehxyBuZAc+tqVkT;z>}`+;kp@bbUs4Q#9G)|T@9_RU)$ zRd>dV^qZ?+^*t(k;<4>c*!4}m&)4==Jow0zHq+3SHFE8O*)?xY_bHrLJS%kH^}53q zt$W!|LVIjumsBTzpXeOyJegnVRDWrh>-wp3#mAp8y}jJD<B+`gBdzt%->hUy<+;V} z&7*BOD>cu}VbA88OI=L-9-q4Jt1vaDEH|3i5E4FVW)X8_wZsI2xFEH2eO|Md2h_eg z$k1qW@AT<}^%~lrr%uaEEeLp|uYK{9S8eLjsLGY=_gsnRV}H8uQ<42&=?wGORQrR< zEJ}wzI?qsfB6Q>LQWduj@ucrl4;Qp7DJXY5Imxuz>hEJCiSu=Tem2dm|NqpY_=UkW zmaJ((hhMZUzW!%tt+Y?otGn-Co%?%^xl!%f(bkVg85^(Pm-=^Xjo_D!2i>AmdO{h` z^J(oru<YRen8ORRcyD(o|KhK$5j^g)W8ot{*##f9L;efan*QZnYd?*Zu_M~1^G5Qt z-pfCYV_r_th!y*H;<>EUzdeu7-?UJ8ZNs_i!lO0n;tDCN)3>H;#H(~(cY79Ix`ppU zBlG*s(z~Zs{a7|*34@5i>33F-&Yj#@qG{DxcJIo$Nv9K5cNXuRP!S*W=#etR&AY+B z)_ti{k?ILa;c4Q@R*KlHq$=&~AJN&}Cht<3GRN8K!O_H3#Z|u#MTytSEYV887MEAT zeLb_rt^8wHxbyQv3*0@HB$}3A)Sa<lp|$6B0f8$Ucda>)rTXkvqpHtltHZ%5VG%!c z6UAyn_BKe%eE1f-v!3bM;eSo4S@Ycg?wOLd<i|-Dw!;N8GZ+4fm}UQ=^@4!k&Z5Lq zA}$7pzIdi9x4d*!<qh-E?O*G3<d*tHzt+j3EB9`&6Hq_)+r??|!&$7^=d}{K7e#&+ zIa#v$RZoWg6_f6Lawl2$=bhV{ame+vx>c8x=*9Wre`FN}V=6LiDw??#zc#gDd9iAf z^0Mm}=B>GqHzRqk(&^{3BAtY6LuLuCyLe%qsp*==|0|{(zACw*@>ARc%k=4<rbZ^K zfAN1cTr+*=&iuujTJv_t*-J3(+PT(v(~eq&i9Z~=G+Xb+N4;v^yXH!KSX^KjU;W9@ z34tAD!Oxaw@mZv9>VB(dB3n1rN=;5tK#1utcjBZ8nLl*geniJbF*Wtw57#qH`5Sj* z@%yU=tL|>BjaI$GFR|2^$u#@h<j&6alL2$B%6ER;w)<VhzsU58i=m}z1+UKrue`u? zUj16BlCQmo*`uY?7nX`AYuTNd^w%isq315M56>EAzv}Yz{9<A(^7O9cP1%s$lAGoq zKEm`)dBsnYVwE_VQ`=+t;uBn#`P{Ypyk?_Sb(PhrDTao77VB6aO1hz2)v)Nh<1e92 zyIr`$zV)Ou9JFp>JSJwezE3D$L0M$+36V*1UK^&goocPVoH+Z6wdCuUca-MV{{Hag zqrG-*oMVP*!qm2J?^3Q_;7>6Y&{)p4>`mO$|DMeCiZYuNJd6dWOgt>@SNnZ!&&;Kz z*2X5nZ`*qU_eAplXtVvX`n$u^rOOXIIuzJiU@+^uSYOM#jmvKKM#)YI*pipuzmuaV zIzlgU^`2WPUeABoy5`9)R?FC-mZx)g@3DM~cL9<MIX4F8FUkC1!#CUGX6$Np?>|@G zXa9Zn?EB6g*RQUb9h7upS&rh49|!ZauSFR#``JA|Y4z1}{tcbG)*4R9)lW6b4|){+ z4HIiwx@F0?gko1syFP#Q9DmIUwqBmp@9wp`l?*>kZrXJ24&z}DOU{28*JszS?n%9# zuyXC{TWL|Z(hpxzk1AKO(DVOvyl2I)O%I>n^`2E<Yd7VEo6+08>+yHRx@^^X-mlL% zDz<ZZ@Y)Fe>DJ2jCp@*z7xcDCh+LQ>aJ9`M)$T-@?A*U!?yY%g{Y@s(T*W&7_YT7e zmk&z$t7rJWT7JGJ`IxP8+y8x=F9h7-ytO^Pe&@gK_nWRX`o*5x^W)NKUp|Ect^M~Z zf6iUZeQoWd;5kA+t}H*oV)ocGS$M&V8V#d|-4_<5+nxJYd~^Qq$cE>0ue`W*O+E7b z0ae4Jo##uLxUS^2&0GFTdM1M_f7bSl-zP5rm;C<kkbd~Pl!J1Y72d92<NE$wP37NP z36b2BviFGOGMPrLOe~0fY0BG||NHZ)_`a9dj)opQQ};Ie8qY;{*1xkoW_eh6_+0Tn zv~i>Hx{{C?|4z%zuKM3xUV6q>ZfSGUtJ^11E`OfZ?mA)P`i<fz>rNK`Ik08Yy4d;M zPn^=-`5fEA&A%DBq)fI>*FJP%o12GHk%>!`JX-_jk0q9uoEI=|2x!@-e^`93z{k3$ z=h)Ymg|2bVn|CTV`NnLPNp_ROHcWYV*K#UDrL%$@=a)VG)6Gh~x#!s*y0JOXXS<+h zQeE#+2mcf8a+Nim?E3RpDIad!b<DcF>bk34xc1WJNz*06f26uwdwBRw<qLir)^=-= zO66Cf!-XHEI`;3K%&O}uJ8`Omxx!vKqe?~D8-l^rS$dspWpYlv8>K6vm^QyovhrIH zeLnB5wO_}@h5wYU#I2mjZ0EXuqVA5Tb=y>;t_Qbroc?wA(Z8@?dlpWSnwjS<opfSi z29L+rkpIt<J+7@c_i(?n`<^+U%BdI0Oy(O()!eM~xFQOrR>-yU={9s<kjpiee$d7l zWi~I0*?fiat7~&aZ+ZqKU)-(bwcK^TuFu+Zg|A001U{O}@^8l#=YV%1-&8_NSe^<B zJ=i0+)z?DD{o0<6$!0~iuQzo>yW4P2u|D!?mFp|Bpu>&oyG-H>qs)CeL+ZQ!O_(I^ zy{@t^<-gmrGt>HQO^g#ImrY%$d#Pb-$faPb05gfH!EJg1`8SoSgjsmctc*B3J5gxb zO2Z|#?zP3MuYX{8>fH9tBVzUX^<m1pG`(VjT_pAHyzb(!w)@C+Hahy-0fl@e&!$NK z>FRU#$6i<}ea~Q%pW*xapOP;fyn0-sM=m()Ue)8RZ+GulCA8wV^10i#{yh8~Z+Ezr zrtdSXePXLzv`s$Y!qcyr`hUJZ=3maLc{O{zeA)BA{Ig|bZf`g@=|9iToF6ZmuG$OR zeJL{f+pZgW_+OBq`zez>@A~8BDJQoa_<zyl@$$K?uV!-Ijk@?Dq_>Ub>=nsv%w}qL z92S&Dmsb3E=|1mw#>$Yah9{}%=C<GGZ07!VPiFV6e#4!h5wzt`1J*MxRZIUIbvxg( z_QR<f%P&ox4YxmkGG7z*x!N!8?yl0?^DCovpPMTsd)Z=Q&vZ{`w<#f3WohX@;(u`@ z@@2esnEz~(#YzRQb0>~Z|FtDte)E;+1$Ogo@?Rurt@D+en%KH9?dAE5vZ%Km7oSa^ zn{e*Lsf0t@>lS2~6il)`kUH<HbL?(KFCPABrA!?LPJB1E1Z5elEIH^RP<6t@)#b#) z9WBX{I)Qy21|<(AX6$;RzrLYz?!Jru|1MWW->tl@ouCqVEX``8C3naY#m=NvLi+mu z(i;8+#j!iw_L|rJ#n6RCeBFf)%D;juzg$x7o_b1we`%0&b9(&>`&t|JMG7H?EAIvL zP6#mxyZl4qOk+Vps=&LM4qLAT?)c;u@M`{t6ThVW%#)3tWCtH^)H`=!)6>iMGNxYn zJ#Wt{$vmmR>pq=@m$sKZQge{I%gDj0)e^Kge6NC{rG9@y;||_KYkyCWIm7p*&G%Np z=Cqqh!OGFuTW|77&A-$<t=#0jio5^HM9m;+(UliFj=7pidb!U@cQJ`zJSydX_0qP_ zZ`WnCX2191WlxSzdM70OC6DuhO4~(|9qX=4{FE?RbnEN`i#C3VIb!*DmWRK?(l%C= zUwmq+ArnP?3~#yTY9F=eh~mGabJQv<>x-3I6?0IS!K~{NXPu`=Uvs=DInTW-CiMmL zr+t&(^v&dCcV5nAlBF2+RW|IOSIjyIwjH87{SN&0|FoOylc?zHKOO(VCLBA%c>06| zXHmZNE$zh%9ByacTOW3NzQI?ic@iJF0=P`x?AaTq{8cvbw36)Qz7>n!a7_Ors?0yR z{A$F~=Vqphc6-m=aOJ{6mf!Iq*Iw@yUYho6b?~P$nF;#Ns=T+hFPq)r@n5maPbF0U zlyLvq89$G`Ui{BC>GHL`%b4okZ|zi^I!pS0>H3q`JC9%c{cK_M@7{`n^Zxb%)snNk zH?1>xVRU3!+X~~N>8E)n^X*zzyYKOXuD$M|nQpf4ZY{YsRs9-!`iFbsM%r&OP8e=p z)@U5E((}ReKT&`Cmj8eLa^v~>Z;L~+4*Xu=?U#3XpRtzd#GUgO3vg+fvaN9ZBDGDV z@bBZ>&!VPCt-AOj_y0Rv>H65;kDFY-8VQ}ZTkrc`TmRO_<M%(?|9tm-&)>Dya|^4k z8{aO;nm%dH9F}D!3ofdtsTgi-i@auVwXOV6>oXmvX|XcjK7_chELn0wO8;+WcDYEv zKF*M>K1RJiGT${y)~%Lh-0i64zs7OdMQe8>jb;^P5vh5>v+C748me6%U1UG|WRHUC zWZgZRFK+eomd`R?+P3E3>*Yqge^kAA=f02p_`tY1B;fG-irzJnJ~BT}|GahR!Q2zB zCb?(s1>C(6+}v4kXxHRfl|qaC)XscppZX^3Ld*;|t!oZn*|*tMJTmHk@yc_tRP2F= z?vGSCJfqeeXMQ&8$--Xau<B$6KlXrWDHj}W%0G_3I-@PqWY4+6@?G|UzYcDeP-<Ps zI?3UP4R0s&WAiU1Idfaf4(_qkoqS;8juk42uFrJjZXVmX>R?p*(rY)))otR9x+W65 zJ!t3h%Fl|S;d>vSIbpSP{+u0#+nANa{>HC+`a!rW`(6`EzQ+=?H$5A6{++xpX3DyC zS6EiJE@b9;ptQw3JM64y5z}FB8^1%nebT>YrQJ^WyxZgLwT@*WCQII&d!)Iwa6K2x zD&xnC<HFl`<_gE=Y<EkXZsyJJBVb~AZ9dbs^AgjPFNU3dZX<u5Yop^S)0kv~`YRVN zaJA@odGC9B&`NPlz-8u(^XKYlb~PQ7l=wB#h$oq&@wAl-+t1nRk9TYB6<@OH$@@cB z(saMYD%_J}-MhK@g(=I*rK*CWC+~1h;N4nsAm+r0ou^a}iO7b1iq?{H;#B5*u3p+W zZ?51Z?)umh+7{K?9_uH2@w2BaKW3J*NLb%^<%tWol;>v~8Ea`RyRyfsH0WHJovX(^ zmtTi3T<YFrH}492+~&ux_M3k0o%nyBws!gUxSJU}HmCa}I&sd}KI7FwoBF@9-!FJq z8Tni3J^tOEx9`up_VWKfbYmVY;^F!ALOOQF_ao07Htt_=Wy8;aBEg&bWpe*2>pMLa zn^@-D)>vDAdDnwU`wxkG@kX|^ovrwkUBJWgcb`jU{N)E*^!ja#za8DF?c?S9`rBOo zMZUfr$Ch5wyM9EpwfO+w^V0$C{9<*Ve}?D#&DijM{nhVwWoM=5+gpFy_;99dRBX-9 zqxxs6ieCNZ-<C7e;{V~ueqQ;#@221HaGN}10#E(q8}m5oAEq1q@xAn5y~X)+1;@`g zc9l$9F;U<_{-kM6HG=&$%Nsw(&QS@BD8H&|-<ELloYS@ME<)VB9{lY~gXb~odwOoT zY+P05q434#X5@pDCri>Fa`V~zzS1~Pd6utW>pX^IjcT0^$(-JvY4#6oZVSKkd}eE? zI`iEF3rj`OZz6S^H3$9QvGPrt9Q2a!+>Yr_j)Z(jyOXiWlTpR#W8<@9E@l=_V)g$e zDE+_SKIu=mVU=S0kp;n7CL!A==GsVp-nd+}K4YVB+g#o3Gk%xi_-)fpZ!c8r=9PV! zp1MLh>-*vISFXE6*pF%W7#_Rs|8HT^?c2A`Xa$_|%s)6G_1BW8_wCZZWcGJVUAXJ> zAt6CS{RcBd6uFImh$*$Mx$=m?qV_`ct9jE~W?s1;(9m;zuGos{EtP9N+ca)j;v4I9 z?_z3g_)(o>22mI4XG~ih5VP@Hqr1cE`FDEWGOu27uw4B}ui}MkheLja^dzarnoC{D zXDPe4ZzpG$X@g*=?Hz{_4nHrKN|qy@zns+%+r=k&q-n5T4EZ#9kEz;uw@uy0X7;{a z;(pn`Xx_FbYXZ&M^Lv`C1$6g6n&+BzF80NWX1ka-laI{TS>ko+xJCaI^)}mCzSg^i ze|j^0bPzvZeqMC;({s0~S`=hBOtsY>D~Ec{?(m-0v9QMZy0-ewC9$%%xPus9#VXv3 zTx9Sw`IhH~i$%hFJWWcNGx+`9zu%}Q|N2_zv0nKOFV$$9k4BC=Ols;T>@QpN*X`d* z$7}PKO!bY|j962)e%}@$`G!Z&k4)#PbPuU}G@;I~dGC3Fm8tPJ5;lHVpZkLQ<>q}% z+KORMuhvVjOiDLsT)z6np}07&atjUZ<<+c~@lk$dyBhRw?v#GjkbB2^@2Pz^xz@*2 za_Go#?3p96OlFC+49||QdOKG?chym1e5&H|!$x?|*R=`RoVVY7;STt4Q0>M;hr7Q` z{cM*z8hIG&WZifmaqd9nWbfVcQ)VW9wW(x%+uU>E`1YljU;hbg(M$GZ$jy3_$v&Sa z_0#8rr;jXq_Ith9v-I`<t|ymo%`VNUGP)yGaJXo<;ER-INnfX+PxqP@EiK;vKl9<U z-SR)pdp^#LWA@4ldNeOy{@tGwNrE5#dhg%8vbm;6Yi`j;pM_^9zuCQUThF%4FZQR? zBxIiYy#IUt_`5&%?}u-G*~@5lx#E<J#@-yOOxY$$;g!D^JTG5g^`u9A+JzVTmCx5M z*Uwy`a&Le6%NFhYIKOpYtDkJXzRM)-<3_Q%$9uYeomuoRuP*uaQ{9Nyx&lA8=FT^% zKk@(RZt?fCYX0VGSH9ER{k}ffFZ;;KPPVx8rO(^e8ZpOTUOdh8>Ceq>ci->-y;pkn zl<))XAKdK9_IhPs`EY&VMP=^o&a?gY9XY%2pUc@SkC2+L6@f-MGRybzCp<Gbva;g% z0r%pPbDFjP4;)MRV%)yUe<n{POVS6nbrIoH_m@rAnvhzuB3_W~z%p^IgR9(A*53@d zdBW|1j)^yG+V-ix!plS|*xlZ){Se2zHg%ES?K^7cE+rK_J-W%Qe(Mv(Lk@8n3$}>{ z+RHxJ#B)i()y*Jxn`5h&kIJL;y`E*tr>zwFUPj7s|G%D?EADxHv%)QY*DVjX?>%)T z@k3uxUf=B>-)5Q_?^!71JNw?TR-@I0;U<l%Hg^YzEN{%yIA40%)hOfx-=rri=B!$v zoE`4EzyHPGl<$+DUVao>Qr~kgB;Bi^ZC&@zJv%0U)tkDfwzA4cR>%9wCS8Nl{x8!U zHFYG_?A3eE-cX+NPjI%)6XBU>#h37lg)NZE%<Jjton-4db!U{pC(Y${&z3Nsv}dT< zdVT3KtqYZbUlg@=_w|+TsIWhk5}It{{V3M>o(@a?&PDa>C3&TCA6=fUA9(73f9~q5 zpTu>S@66r2ef>hanc_E>rr2eApMO2gp!Z>3YijS2jBQ&5MQ4Wl{9{m7+{B;x;rFb) zeG6W5b_=|i9J=pg(B(7d?iZZY+<wQZ<V*AapZ~Vk6nOo8oo~eV<bPCEMf?OI@733L zcs{%N=-uO+Z|?j$^8H@r=Yzl9Ykxj=dpvi_hvTc($IbhrGH1{0dG7v}zl}U=Z|lcv zJ=ZtCy5Mq@?EaVY?){ak%KN<A_{5WCEi6C0bJPDk>9zQCwI;<VglXe?MK!Z7M_%vS zm#WTQTPlBgQNqUgVS9ETU-;H2+o9Q~q-p((>?3{4=44fiMkTdQ3-Gh^)ehVEF<brX zyZ<MSq~DAB{C&Fpf8FRVM_a$VyZ=hItnB=E_N^h?mX#aX#s7HUQ?t)`vOn!+*XFAG z6($QWzxs29xBk~R*+%PD4#N$iQ$zl2-T&l$?NeW)zP*pXIo9XiKdAHngm?9&fRDfb z9@2b0ZOy%}XCHmvZC`)#O^%T&mzdl#;l)q<rYkMmZnE<f-wIv!ct&@hRZ8hoL|@$S z(cYFH`&DAe|E;0YH_tmnAM`)0SDW#YaTc2(cW1Y1nA_T0;uDs1g`9Mmbxz~mceR*( zRrk7Ni}%+&|FhKmY{bUdsne`(SbRS<TX^38x0_Sz{r05ayF7Win1MFiqO7-(pDX4^ zDvQ<p`73XH?0fa^Z|46NFx-r?KXUfkO#a+CKR+EPD>?h@v|Ig@|L-3CN&oltD);)j zXb<NE@7F=!>%{KPpTBk2-_K`jE=ew(%P{@M^cjA#e{M8qFW0$oC~d_|v!np#dkIX^ z8>3R#Oif(aIHQu|qSmardAWC*)!kJ4rmyNZE(h!pZH#wPNx1BDRGZ`9x0Y3mUwXHl z)r;G8F<-67vvK`WWjjWn`*9z{D|1X!B>Dc%2yK{<yO{gGim>^kQuV)_K@v~&#m~HW z?KCSPOHj4!Tcqc=TBd2ThE4q1<)@;JpFcbio_KC=OPS`X;D#vo)x8^TbIC^Wc*Sf~ z?vAROVYJ-C*vs1S_ku<IYq!nKI-FUrlQlKNv_#j1fBxRI6wB^oZx7#QjQStxedw0h zwUP;H9%061o%?#0&Og+=-*J}U_0U<zCH%~0UO4}q<MAYiJ5!mKi$6TF!`u1FyKWDa z!`t>Wg~+8HU-3C*>DgN;zdv6xv`En1V{w>&$JJhr<4xXIG;Oo~y)j#MM36V@@d5e! zZ#2)Gn-FX6v!GmTr`Nxt%^Z8L@_u|{mU?-DwW#3vzJChJYbD-JW;rpvFRK1qXS>4o z5~bjnDea4U&Z+qX$4ooGeBWqG?WD6J=2ryLq>5Y}D-XziNb5E3FZ_Qz#JnPseV<|F z{=Q{1%@tQAC$C<#eNI=WVD_#`XWd_oXBaxKTRv<seSF4n&(S4$9=R#UKa@@S`@}lh z#^Fzk`1C7`^)eH_&oJRCn-p2wT>c|Y%a?PbSn~YG3E_$p3p&e6W`13^=C#q&H#fb* zCaX*{dU|ESvORlR{;B?cSZk1}aU!lLL%#eZZ+gf2qKHcjXR`hz^e~kf-jQpMdOD%f zHMOL<Id^{zD--YStDn!Lxo<tLXl8Y28QYmGp6bX<*1OFS$8}Z~E1fWz94B#lQ5$dH zL!LS2zqt}NEI#&PHN$JUePQbLYi{qo`+bGRg6%Irt6L<lD@<O<bMHm4vZm$J2lw9o zuKWM`!@4K7)l$#j=1tnX{aW9lBX`>$ScYuB`cZxE)jvzzPI5+H%k^nHX}0IN!`U3y z@Ofn~{zgsqtF6wK{x(5!Qr7i(e^pL#PS$;~#qHYh=ZYHokxyP+G~iHB%!&Bz^uJJk zPx(de)1NZrnEE7cg#NoUrG5F1>1NVZQWC-|Ltb>aSS`KeqnukGwmrG?_c7V(ZwZB+ zD_8A2otD+l`-gq!tv%0g-<?*srF6c;+c&3wJ)2$k|K&|NJ<}IfkHp@dTvH>ZCG4=^ zYs}w}>vpozQWLM`vpq7uetP8-zpI9N|2|B}oODEfTK=lD>05TZ+EO0&PU*a$;R7Mb zWG<<h!mdlDKAb)FQAZ+9E3MZp;OUGX0rOZrcXz&t|Fz4}&hlo1&&xRx)ju9hJlpP9 zv&TiZ`NrnS`9*(|_p)o~2ZryuEYT<L5>j=2u~FZVjF6ZAKb#ZL6bWMeVeiu-n0j<Q z$Nd@)@4KH2x9mO>QJwMb&+C)rkIuh!@O>$JD|Etzz)fB0E7BL*wmx@Sd--8&%IoMb zA-#+frxxA6`)r$Yz6`UR=h5lgZIn1}iEIdK+R9aOx%%zAS1}n{IX)*&o!fGeZ^vz> z(s;E~2VDFcx)U-svfQ_MqMXohE?+14XRBAT=}y1wjZyijwa?Od#eMUpE>~<#&&$sA zEdCjCM`jD_^1h{SH0q1KpZa?wPs5h?&Ae^LQdfnXQg-S0zPBJI|AO~~`-hA?m)Qij z|5<tF+WBN@%cT81$>E3hN^bc#GmrJ>WtX5Qx2m3d98z1dNpJO<l(ts=NCB<Hho@8z zFZkZPXQA(3Ic9UGzy-!nuKd)MVVxf2Y53BjYQMAFsjSW#?c=L@PZ&N{o}&3K$gUwY zeUabGR|?s&slU&?p8Y1YOXEe1;-jv*4(5NKZaOdO=d?d+Zoa~Jmejus310oTq_4(n zah+@z?W<_@s1SJA#-@}ZAoj_2)0(3N1qv_J=I?WAPuZ>{t9W61agdhUVa8XpGF64= z)n3@*&FWtEKlMS$7Y8?{lEk1-S=0AETDqF+aw2<u?zw3?rhDf9UzYg!>(<#$F*<)H zez#Q>-mtFh@>1T}hq==~ox8c~^Y<g4-tMibJ<pbTDx3S}^wJBuj_OlE3xx!3%$2yl z;ksn!$xhXy?tOB$0U<k<XS_dnxPI#U+fy$txYv0%YTlifN0PI%_u2pdVXR*NdS4TB zj={Q|M^~*Ur+r%&y<x-u)ZG5o$9u~A_AU^<pPru0dGoTKO>UIl&hy{?*!<ejeebTv zyH9()=ULQBMf_{jl&yAT>S7cYJff3d$k3RsU%mAD*R@gQuP(p7xK%)*v+(;V_E~mY zbHr=y-bGn1dl_v1?$-auve)l^ZrxUK;cL3tUlZw|T^}cJ?t5Q)?c?5)cD35RRsVh; z|6ce1t7ZE9f|rpg^O;X7EjK?jb6<-5wygWd&Y!bP^y3S!+_ta&Q0n{q3E$W^J-qxa zRX484wg1}j0<F5W3Fp_}Qq`5-!05I3@vW@SWdUhVdapO`c^Wm{t@nj${bXUiYnwWk zxRwekt;xCd<J42}tyznDx))r$`}ug&`g41?FrQh+WO3X6?4F(GH`(K@ig!Qz|M+rP za$@6#%<wyxp3nRGdu8p})V1y3vOll?m%IO_Tm0gy`PE_9Ie*@s`6cN_M*IZn{7daD z`KKzUPoA4_)X9ABnU}AbcdqnLx>x#G)+Cwz<b|6T;)PzmxBj8c|Mx6Mb;YFP%kHG+ z`+Hct@)mgdv_rM#=OPs;_C@9g)1BRwx!Myqz1#6FqGa95RN?n)E}Pr6sn31!W5VQ3 z=Z`F_-aMZ#d3(7U_r0eD7Hd45LmEC5iQK+*ba!LYQnj>n;hS^!e+WLFl4GLe-nMT3 zd$rg67j@H{*2&E4*uMYRn-9|`O<cv0Qd|1%-xS`g1)&#Lo8+2g?2pc`cbcZ3+xF%T zyQcW%7heBL?q!`kz|4BIJtuDG%iNU<c{x1~Z){$$_)^6li76_-TXe#eTb`(i9eJ>* zH6#5^{ibD8rHUjEZ?x5)l_aIMztv;M6>EO?Tl^lIxn{DK8EY5LTqL&D+rP75fjw)< zd#_B^Ebp(MpIp1#D)njCe7g%LPei=?RdKzrbd#>E<D~TVuYO0E{q`27eA9hVaW5t9 zsgn93>uj-~kHW7RT#b4-L2<g0j^(1aLYeEoR8KZZoiqEuiK#sbXPr`G7p3NE1Snq9 zRCkSCB!9?Y`aY?qH-9_7#h5ot+*qKt=CWh*a`rX+E9WIn{@co|pe1`^@)i9^v4*c^ zJIl51T(I)lbAg>bR?6+jp{H_>+C)XZ@=u-c%GigW>HQy9R>Pf&WglwF7!7Boul71n zCH&!nF4wM$cDrV5Kae7{XvqftJs;NZ`EZltiMphI_te}s|5@3;<XU;N-G3;)=VZI8 zfzajPEw?l~w+3zfa;4?Vl_gP`oi8(^s;Zo#bal6eIc4eE%Pd)XSaRq3^;f^__rHH$ zN&4@D&2zoJABz7beC}}Q+Aym(|Dv{<+_;=Q*>-DLQq<d)s11itZaH!*({rmwiORiO zD?3-7j8ZzYBS?43l#3m&>$s{qSQ%rMA7g#$(0zT6d8M39d77Q|M%U?=qe`vJRaJHO zhRvNa<;$l}Et{=PEjRlfdT0BaUrbESGAJY_Xjk?3f6wKrpTC?wU(J^(vVGcC?dmYw zl3fwYm;EpHj$<ztR@!>$qe9Nk_cGP5Z~d<|d$>b&xo_6CFJIT)nsi+6=l=XH>gnrb zuYEXf&GyIc({0BM>w0T0u9q=vZ0Kg$9cFi-(((V+{(0qZ_N6+n|6Tj!kz>LfCNJOT z>wmA8t(Lp7;Z2-nn|yQg>-{?(9)7Nu=_32*`4-jgf9q{on3>MbeSPomgPY!5_v{~@ z6W^Nn{y*#MyHEDlAKI^G_wST`_`B*CJ+0wu{`qfDjtu&yzrXmxp4a!J*|RU?{CRWd zq<ZbwTQhr0lUa6DUEcdSL3P&gXM4-il<VaF-Q52tetTW%-P!)JKH=+b8hrm__s{(Q z4yDOyO6A8)w`ZNNum8PLW&7@M`?_!DwRMt}?+i-<mi+u)`}xw=pW(VY-=-Aoe1CiT zy4`Qn!}f^pGfaKs%KPVE)70;G_I{Y9`G4mMyNLS@Zi~;>W;@J&TO8GYbzeocL-esu zTe*Kf*1WwuJFfcGKJKjWAOB|D&OEuXd)?a`Ki+M;zVd47m%GNNPQA1;{bI-*-=MVm z>W1saIcxRy%0wv6xFXjabKEWA*Yq8{c~gx_ViIqD(fXwkv}Wy(g->4#o|)6J<C*Zr z9sgX<Tl5*{v{#9i2~O!;%sszxPS<b0nB`ZybKW%Y^W2zN`8eJ6WwHF4B1zGx-8V$9 zmEG7Y(kg84cSqx-s8}-N4@(YTaWmzBm~%}XskYCy9*sOSXLk|9w9w$6$186%#=hG4 zNptp=)QM}kGnFco7n@jK3JdhztoXO_l(LJO?R~LLiQGqzgt~6@U%Of%qiT+r?r}LS z{*Q%s11BGs4sB!jWwR{3;hxy%sI}h}uITmu+jDijH-FpjgCYwuuFPaQl_z7$b#X$s zSj-bo&t(q-^Q%71&U2G&jdED_A|*ATXTr(Pk@bDj&)3Yhw_ba1mgB0>3prXcDes;b z2jnOA90}oLi+{5+GflhUbo=VqC0^cHni1U21&VSykNBqSl@eWG_4>ZY)=9tZ58h_{ zz0AK>Kl24wq_pB?$z<Vm=FXo!p40Va36-0?V%njC7#r>xzTHKk-&AL^TE0#adMy6e z@=)K;&`<h55AJLBN)8oUqxdhAaq{ISHZKG2U)g;0LG=5I2M^u%|1Z^En{=iB#HoY# z!>7t|?eg<=d)%gbZXxFbQTBgt?>zhQ{eIo+#*50&|8C%1H=$JINLj+~Ux#=9=eV@v zn)SCQZOiAl9ll&U_u8tLZGqF{Ez4@oy(#~hKJSH<DFgGea23^qr%UB68(gz8QeIh^ z-dB;`Y`0Odd*kHy2abwX_oQ<@;Mu+NM){7!P$`L;5S0T>vlWWe!hW3izSHsar2BPN zE34<b&#TRPwtoNl*p1F<PoBl;Ms0l^v!mF1!kULmy;K^^O!Xc#*PdOO+WGYL_1S+m z6iT1aO<j7_fOA8W--Iu}PdU1_&Sp7s|IwpIL7NU3tnuQ0-EcX7#Y98P+DOO4N%i`( zHkF;s_kMS2U&Mw=aoH`u|3=3po0)F!ORuw<WB9B4=j`(LxBnb8Up!xC;o4i9%get# zk1w%b+IcVi<NG+nT`yJBFZ|uh`)R9QXKwzrCfD$oThAgmRs_zL)~iaqbZW0s)kL{z z5>F?-xc+U;|EiCo{@?SCx3q}uy}!5MWBbnP%=)Y=i&jTZ^f7t=_Z;i3^}oN#R$tq3 zb?>uzA2ZFWXTHh5QT2ee+x`sm@tgL3?+rJ&I{(t^KDV)LdK~Y+kFV}Ly}f@%_1#Bx z>R<mSDA(>({hj&8SK3|We&}X(yWgIl&%`hLc+ps%*SOl(clVor{6+U8XIL-&e!Tqq ztet1~KmXqPdF%W3JGGgsXX`IrW+GiKwn03#Xv^I1&)!boE?MPzd-?qZPY=cK3uJYV zh&pvCy?EBl^vsx3_gyxA5;lmmN-f&Se_0@YuD_47$-Yuy%dHpL-uQdYj<b%I`Nq`e zoTjhaGEsZG*V26br2RKD<qM~C#cl{xm94veA-b>pf2yhJwM`0=T}+=}ut@5J{A4rx zrYdgY_LZ;aUSWt)ZuxKalTI#|4|LBmPuQ|C*>_$~>%V2ZeAb%$EmL>T{?f8yecAM> zT;dX3r6R4f4^A?FTKUN4zMrtzY#j^#@)Oc}Uz)qiTbWvpNC)3q^J$~)dq$Qo2iBc- z=d_<t%ewcvf|G$=X@qzOyJK{oE$_j_Wj$vjyesV;`J-)SA61@lKU(dwSl-G5@^{bV zIR0~ge@LJ;d9ttSb&+km3LCCWS2@F9ag!x^skl6UNK4+2>oS=SbY{FO3HD;uwmaRn z-D3@J!Z*`9V*R%lbi^lx`Kf-bZ@TqvgNd}cbG1UW+^J(x|Ei8<D(ty_YT<<yUz77r zDM^(W&h`4Pc78*ZM%|{B{&#+~&hiWTtpAH`ip&It3ds%0Rg==1Z=DsmELqjGuHISZ zg6a7q%x(L)QpIO7>uRc+dVXHIeCaZk!+hD^OD4?C^NsrZxJB=;-<wPCm*|DR_&qax zPD$GT$>)`R7v`SxR^>aG?4|X2>YPa|%G*^w*~VE+o;Am-NrX}E_9E}@b<7F*Kl%5i z|4VMTvHskj<5!Pwwb3?J6)h7|;GF*EWD0Zgv@1`lN+-YiWNW!NFX(U8$*-?fudbdR zv%OB}&DYoJS57mScS@$Pvv2sms`$&jsQQhveK%(YZvEFZcb=x#xfPSA1ga}8=99?~ z2>DypDJkh$YBcF}n##4ujY}G4?<$@2`kH5Mfc-{4-5*@*3N4h}YxLR<zc87`60ow+ z`?f-q@%bDFziFC{&sH?mi1w|`WL>_p<&A#o{T}9}Z8eG=5wm8t8Ra~2|E>6TedL#U z|JS)sYu>dn{p8~7c2-H>*1f;}cGhRF`m()=pa0#j*``<hT3q>@q*v(d(t4dY_m}H- z=*NhC_}y>$edqq^|Gs?}y3r}xGr{Q3zrVBXfB4P*UGV;Kb(!V9^!JVhJd*@Wm9FeI zQYn07dFry}6_vjqPfhmvq$j>f`MJmL$}^GYb*`|@ExBn~zV6QApHii7E+*eQbXGci z-`68Qr<bqE-?S)|d$H-RiW8szZdo(;cLa;w+PcSjw=V5r`j-9v+}T@CkDIILc}m}1 zP#OMq``+I(c%RIZy`QyK+Fa1rexcV@(OVte4~^!mx&CO@=B-zMd$QcR>91Q|Txa&i zc>gV<&kMPYH7chG-rx5=Zs+U$*M0AOdG%cSc<){jqa!~5Rx&54Cg19)ah_ta>hXr- zY-a`Mzfsy<rKFj)-Caa{tyR&%Eey5%Pdl^USh2o4dO_Rke~>}aW6f`OgwwYC`FUQh zTd}F<Tk0)+F{U|}nFEh2&$QTDd~P+zZtuvAT&iww!@G8Sy!`*_dr#5#mQ!&Xaw>G> z+3(Fc6c!}Ump@5~eI=JVS9knP)BcPV(+-qOS~$Z?b^3L)qkCUY%Jpd6ta#ja;<=Rp z6;}fn>bQq3>xwv>6n;zRa`Ab)(sj2iBwLi@`($<|r{&CH?wN3hRr1Q#&l7W4lzH_v z_6G6`^y&3ZSg!ki^9il|RnD7uBCFSYi#xJfP_VaxW%cu~(T4>Dt~X5a==JyCtG0Q& z<H1GCewv=Ntvb*+KddoZeg7d=wuL4aOga^f_I^BaH$7PMY>2Co&%|4Qt{7`qdP%We zJ@#Pw?$oQHHbRvLHJ%>oKK$X#61zJ_R}ODkpR%X=@Nau7Pgynbe680TAAXVBtQP#j z&!l_Jqe!)*v#exmJhQrHerNZLU9>(h@_FPQ|D~lpC&PEeD6u$3{{9kP>%<eZMOu(S zIAg~?k7Wxse$Dnc`LQ+U21~S*prq!<eOi_7rxq<g%zJ6?@{^0Fo7PvYtvcB$`t|iy zKjG-AsHnA9wwUZ%etG|!aH$v%f7SX+K_}hxCR{EMJU3zg6ZMJJ3Cw%j<|(V6{3-HE zqHkvMt4T4-7&kloIJbAn(xn${O?g}7c>gu+?_t}p{9675o@%$hSE{~FPB_0}{-p(V zMsL2pQoVZKBj<v`%DUzjHr@vfGS;^zOJ6W}oqk{*m!kOs>y{Y)Ce`|2g?l}0Tcymu zE=|9}?%N(}eo?3MUEA%42D|zN8AGy^7-wzkOPCTK7{}JjADDGwk-utzk9hdUW=Gyw zo;h`=B)6nqwpLNo_2^vk@u>N||3{fWoB#O!^w6JWdTSLMVsFl`J!rDfEqC4feFYbo zh38o;p1S|(P5+we>kFn=$Ij=J-?+?+G4tsUr+1HLo(K<AZ+uc?`2EoIF#VXV$q)5Y z>T{=j`z!wX`_KN&JD$Jm-c>2_>PmAPZ^$@(<_l+)w)v|ItDoO-SJS!aefWHA!Daq4 zR%|jpHJMN4ij49V=j>TmseG+q`|JOg*Y|&&vAu%(gv0TYoj)(izkmCerNi&JoU&A5 z?7ZdaWzT9Y{j=+1YVWTLP4=Jn;j&(QcRkOwd2{yGn48>>7Qg=~_<Od0=7Zb69%^2% z-E#5zg2S%jwLjlH>U~i7ziVZF_W#W5bI#05b*gr4ejJsx`ujzdz`JwhLVoZ)sr%Gj zR^`^LrvCNK@6$JyUw?Bsw0>Ujt25i}>!*H8m>sOhU;QuQlj%X<hIf`T*3J#tZx}i2 z;Es>(tY5u@9oltbniu-Yzh2*2zjRibL~CdI>c1<_UYN6~?5fqO&F@<z?aLN^V}7yt zrjbwDG{0llZri2YeBE=cap`6`Eu|{vstXlPoodVYJ2$-SxMDZGma$njU~zoZsV5F! zjC}t%ryexS((G&V+GFUJw<&c#&-DYc%gsELBHK^L>K*C~uL(G$?BE|LEfQ&%Fh$+B zGF-O3vz0CN&y?QfUuIkX`19CrPqY8;uWODzsIOGNB``gw$|v=#O0vFa1Hamuy1T3Q zl+B5}{lX@3(be!h6{n}q_L!@#?-z55zoXTwzal{@V}{qX|4-zN7V#QocAcG{|EPRU zM%U5Lv)gqJKY4yr{ojm?1?@RG(ocUj1afz_-LKsvtgz2kbr*Bqe7-I1>hDzUUA-*- z@J*e__QWUBp|js7b&9ps3pd+;eUs<;%O~ZWkE?#;>}V~0p45kISu7RFuE+lb-7&~G zzDZVCR(ImuAG_z~M*A&WI^oFVeXDP{{?5t0?4xV&{oFm1O=@!=FFY)9EnJQLjcT`} z!XsO+g-<5WuTf-p7uRL$)3wlvk9YF_#Qz3&dv-51-1L!0_Qr=5C;dN0->zM-qjL2& zZn2uX>nblF<9&T)9jg^jpnp({1@rNOt}MfXzAodKIK}@#dt2o;)X!*Qo@VNK@`HSE z#f~}7&I_x00@6!T-DEg7wpEE(@fOaTGiTZ)j&G)=ua;g}J3VT-pVf@*S60rBS|1m+ zw`ygnanS3OCD+zYciK8zBq?n2#IWsoTz4nGJlFShUetEIH?RC3t%-Bf`WP+0$fGSn zA%a7Fah%oPnfDer&VB5cacN=kyL-&C{?^`RC6A`{9C461+#v<()63rKS+=&=e7*O( zE1qA!om;Z=L-DyY<)<e1&AFS*P!rjAYW>TtS>_h6zfAVG-kNfG+8w1$ZoZl?Ojz0Z z`{aM$GhY8s{MsI+({Ug7SJ(aapMLajc)#s`i%oN`?#rL|#&pGDckAjma#deBR$V-B z?e|{)<KHu0-2eM|#$~xTd!Ed8eEYY0n%%|f31+QptexeXVni4G?~?b?ZutLQw|3ci z_r1^emz5>oD_2PWb;(#t=FS)9Iq!bn2>35N``6!Z20yhfAG3V^ZQi;}=lg#@uR7B^ zzf|>jNp;SvF2&`)wyu>o*=@c0{!i~`e?9#D;_Q~}+*W;6Io)pKlwG^h4?e%XeR=cE z-uOB9)1Teteiq|ycjL%cd5Me9_7tAY_5Y->d;iy8kMBxnRM%Did6WNpjmqnDPtNYC zI}!Zl)s6J&_sY8N?|(a4j6W-WUwNr@?*HwRe=?aE?94osS<)yyE&9jr<8#jJRM-1` z{pRtE-}|dmFUYR0V5xmqnI5D*<IT(aoB!?PR=X^6xa?W-eSX`|5^oQDzs%16JM^`2 z(zWihpWf9zILZ2_=z6%^&+nC6zt{f1*Kz-R_2c=y+BM(pf7bsI`uqI;;bqe&u4n$` z(Aeyn^&^|{8_T43D|D9s2$~{osuO!@;?9NB&%T-<wC-YcL;SCtNW1zQR)^=V4Opz7 zdU$_q>WufgbrxO5N_|XeHZCvRZV7sH1x?d2u~U2M{$=}%>mA;|BnzWYd7XOi*3QYj z=TyVxR9zoI){koH%dLH)PfRtHQ8E1X)$5#l`K;5c-t^t)iF>b_eC_L_knjUWdXdR- z$KB#XTz@q>@QNOOoMrkf!6VA~dV=8Q=2b8AD)nYxO`dZ^u%lpt*K;-Qk74D_=5>o+ zrdgVpJjpumR;e}X)%H)5zczkZzLdiu|4?Q0IsX~wx^F~ock=9x6=_?(w`1DxE5Qk` z*iZ1y`uNP`Nr(8>!lxFWPQO#kt7zLSuk&faY2%l71)ZC8dE1|8TF-2fIKN@#ch7TL zXRbcluxm<-Z=<x=!4QFK^S@2Kdt!oKT@uR*y~yN<^Zn);o8(ijKRR-pH|=)ICI5w5 z(Hr77&3f@}t@n)y{7N5RPvOkY{Th7iYSxe9#@&W`5r=Izc6oZctefaDeW76X<r7D< zei)etEbI_pF(-wIS>{k@aNpX?50^Y~KW2ApVeRkL>|ai2+}N__OkHh^>dGUFnS5)_ zKFaK~%e__XZ#Ut4c%w$Cbj?C}^IuKDxBScF>)t*o=l*QgT*&hG6?bQc+~(4*#8#<I z21d5d3nN#Bop{c9_4$wGUJv|MHT2JHIH7uN{l!Va-^Hfqow{xIzux#=eet`#Lrd(x zi=6ae`<{1mm+hKhXFK`kXc-}grN?3y3M@^#yz9y3GhV!R_<zpc{Ctn$;-8ti*8d(K z+V!>1`$ACG^~{QQGj*-z)Ra6v_U6&0PmeZDx*xXoXVp3Wx7PE^kA4l`;Cf7SV_V&h zUK?`{WvBV_#|n2@9W(FyzthiA%JA<?jo<vs{JI}?J&&C#Dk8IJeR5Sxx5u`+f=~NR zwT^e3)d;w-S!M3*XR$Yq+kgJ99X08c+T%-?*L-Q2(dYm7W1ZM*qZR5ixo7%6oAaCb zdh~s%PmZ6T%kMC7{=VY)svnE;y(^@qJ~&Zja^aYup!~Eo`rm(YhxOOx9na<eexfC{ zS-zrbLR739&rCKi-Z|>pT$f#2U$#WglA2j<yY|hLjmc>%Yu9YOYCV&2ZaarN=M9x> z7r5M}Z#B=^!oIjX>A?Pt%`fsEJbJgTYfJWKE3vR2X&2ty<$LearTot-SUh(I^S9`g z>#EwX7tUg`U*K%FEB6t{yW^*`mM#nu{Icr>oAolmea?T&IPBL{@GCCz;>{Gw*nEKh zh5e>#JvWz}n;w&=Ia^A$_X)*L`1NpY*$2KY&#PAQxyy)e@J+wJF@CbMr%?*S!c7uJ z4H4EH-!5E|&Yh+!eKPhvSAjTN`k$SW5qmE>hyGIhvgBXi=?P9ZB?EWIRh7Fgi`bu2 zRi?d=wL)!X&>`+44`$pgc@!t$pIJA5qM!2p9}|CsF+^8Ry}z#UNr2>hThB5}mWYe4 z+%0}p+c|v|*DN-ced%dzSn_d3xWp@llM`8`>`#99G|kVx<16oDBfD(F+4EnRH8orE z1uN`IIs8s2c7A~MG#i1ZjR$yodq4FuXtEf~Nr^D=&fqY((;T@zarz0b!xK0*O*8n} zep*u9#LITI@8RwCf3)nYYaiDA=+L$FU(cO-T;uc!p4A3CRcTFO+N~$lSH+|rQhDum zLMdtEmOr&O8Mi%IAF%wyt%Hk>``TF^E!AXdj-8bE)w(;i=aiv{{{0yyuD@r0I;uER z<Y15UP5FX?oViwOZ<X!(@UYX;y6=saMsTp*kD!n&r)epvRt`&#$<{_Mbz?J3{IaF= zbp5$sU!SMt`ddAIWarzLdH3y_Yq|b9QFFH@Ue#Z{f6m{t^Y(k`?f$kZ&-UEnWhR|R z)~I#XNcGh+cGcYK{gb-N{^yH1cdjt*Q!=>l`|_G|62FW~d_3PLZJfD<sW{`z%%7$c z>w<RO|8-IGdlt8y<c+@H7vx`f)qIG2JO90u+5cPD<zC;Lp!aMMo69Vri6&oNxr>js z?>NL-ct*c~*X_?Fzmt_8zCIVvo&T}^o7aD{oCuwom;26Uamt5whxN~T((L2B?Bc(F z?`~}TSF6ssSuHtr=jUzV2dA{1GI`|PQj&0PdEd&u$}nEm#I=>Xv_lsge`)Y(v|72B zZ7G}03{$D@G-vr~k7i~{%n6;iu(4Zjj&Q@W-|l5sU3o*dNV~2|RN}p!U2*XBCf@^2 zTU9g+iuIR1JmB9Ex7V_9p%YJ4?0yL?iRG+MkIY>d{_KdeXqj-}MmICIHR@-oRxh$% z{eR2u0|KjzX4-XdgnV0M{)W$9-m7I*0OR^@?uASnJVRZ+NXe~lej#g7*sjO6&e`s4 z3v=*xSCd1}=5^}5DBx#nJ?^$`;<+#F8}+73+`T<N{O$^WDRrTVAMeh-WNSESdtla! zwQ9%rx$SKHducy|>bw`9+Jf_~cN<-sIeVpc)|7{n?pD6G<_yaa>XB=*ki5|yXZ1~S zLykr6-6OU~t4+Vme;}QGW7WI}=hHS0mzT^7yAv_@cDE_h_MB;z-r7ki`<CodT($a% z#@T`&$t?dAnRvdQo67lW<~-%n)-tEcx$3WY?3XOFz4ETjrp3fQ<WF$l`s%9FZoIFT z&MG?RZ1n8HocQ3?y2Ys+-j!b>U$kXyocnc!%=Tw#Uv&ejDkdlH+hg_pfc)<M8A;Ad z)!5GOD_8_dlY1X{`F_~&Ztu5)#`<rfv~_zqOcaiE-1LuGtQh}BO?_o3Z*|{`hd00F zi|97nZf#kk)goEf#=iJVX2?+&7bREWr<^N(OyMv7xa01(k1Lb^e74^+tyb9Uh@MSw z`0Quj_xy?d!Em`f*!u7;GZTZG7nRs7);Nm26#B+)qaTyLF|AA0A*FHc^2PHXIwu=? zrA;g<_Sh#gA<AdX>4M)cvhQ4Fe)X#_I!<x&ycMRrv*&wHlb`lY%*bV4aq^a9KT>{5 z{aU$9AZOBxlmqKEOn+(fIh!9%Nl;FedKdh1eZ>Nib>ixgTaF~YSl2$A$$9V7tr7Pe z)n>MZxoqoPd8I2M;-?pHvf!%V2Wzq)8mzhSBlWuemdhPGJ5DUHN?O@j<nXFNW6lbf z^3XeRUj9)%IWAX))(5+ukM0lK;{NR2=Cch46Qgpi9w}y5oTzR%{`Of|!uDyZuL3d+ zpI(|+{QF^xbKKPTXD;02xKVZ4XV#LL1$D2I>%^9>6PJ)P+Vya8#?zg}V&x3EC$tn_ zPCOwKbx-j{(gdf26}wj@yOf=A-xibi;C*O_b>vS6@u=p-Q8{l#H`Rr1i1B{e`JL(O zy&0S<d0f6-o#H2bSV}|hZ|UrXS4vhq3(s$SWuD)?<IK^xj!$QwZNBScG~r9C`6<EE zr}iJMFzUUlUi^B=7SnBK`_`r`_HVuvt+;oRm;N74g*zu0dBsaw<do$F7Fh+Cq!djS zD4Y><_>%i`_Kh|dEuCF9D0cDwY2AE9{EAB&|6%>2&i1XRpX~CG_<5__gXinPm=D!H zZi-I>ZAH71`_3+Dje6ZN;ctar%HIp~rytWw=DH9ve~!!XP0}@!Umm&XKehfin=hl5 z={v3tP1E=KcdI^o{E!gNGo5u{t@&P`eeN7dywSVkX32SJy-L1xqd3toCzRvqlD&D0 z9m+M5BaTQdWZN{4>+P}*`$I3>%vUcwuWC4p@9H=AJ#H3f78%~_&^E2A)RgMo@+?W! zpDQFU>6vioyA_qa3yrfR8Z8pU7<M1O#PRfOYPv~A!NNz6{&KRPlSwFgx5Q1;bj`wx z|1FNE6t0{;xsYY$zNTlkaW~no^X6x~4=mf&+ju+7%Khr07a9TguM5n!JH~PF(9^X7 zj7!_@3n-pGQ7GorCQ{9QZ>m(-MBdPwDswf~7gij*BhhxjEvDY&w7FB+^H5Ib`Ve*> zS>N8sS)2)?i;id?Yg)AM3j3@_fotuL@aiY*P&zpOu9pGhDeDPAi!XCz+<SE4$g!NJ z6t;{BD@2Z~Exmc<LfG3)rx)9?iT{<Cj(a2`UYODxdUc8v+ktI=dDf}jt`0nBWa^?J zZ^L&}O0$aHyP@KeQMKep;~jC#-#I5MYu4TTtCGZH>uUelL3EZ&T7>guXLa6}e_bC< zj7!NBzck@sNc*n^^P3ZQ3DlRI3`(z>U?|<RYMtlGSA9VrucWu1I~ZiZw&hrrbin$J zulL<JmBpyt*wOLRX{nmSVhR1_A8-51c_&?S`7LQE*X*1h+Iv9PeBYU8wo@;=zWcgU zZ%zE+ZwI0$y#7)tcJpk;v9rS3J`0cN$gb4*u;t`VYZdoJ>z{o28k%zXy_Lx?C$&o= zyiXUgt^3Y!^tbP=-3j`wKbmLm5|m}Q$5=RVEyGmJ5Yu8oX9>UNWlDCFB;4MuY7W2W z-sccD<xxl;quHuS`S(+EL-}kp*Bz7&{Qagwq%E(0uc{`KfHUjE7xNbOJu>57xaq~y zT^W9rm-Bv|l#ci-|C7OhuQliR%A%MIuj#HU9#6bA_xmK(Uk3sv=^T3C&;KddrtjuL zjgos07nsZLeE;JAt8;OJFV5$=mudxwm0WQXpXRPp|KSw-oUf8=rbx+)&z8GlR@nJW zo5{cAr<<$lvVHLvf9EZ7{2a2b@KI+dQ}FuUxyDNZR?2P@b>(#w7k??Zx^mC<6Vtse zDnH%pHIZl2k+l|S?>9Ut|F*)?>a$1qo-gVr*3Z1C?=tc9Bk$NRhr{fWM4b6rwt21J z^xm^8;>ceo=Vvnw_WLmx%S`n8$MSePFK0`Q!W`B^Gdin#??uQgj9cEbH1Dm>>kGXH zTJ4LA<y=~}Z2QaTZTVyJ1~*%$M^Cnu%;yQox??Q7{l)Fc0c$=wtzY$f=hJ1=^Y;~M z{k=DN{hXSB3AXtW#eVzTGv_-V-f=8(y7H2Y#|ARHMK-oit~sY=YyVG0xPOJ0-uekV zTAH=5szpBD3Yy;j<h0e-t1|B=?ymKf|IHI+Rg|c%cx8j-k}Z;DTt18&es4|dEm1xl z(6K#hh1d5$Ng=}vk7m6wuwEj6HK?oNfvJzp$B3mnECfFUYDx$Fdv!0_q|01t>e<al z-i0(=i9Av-m$u+@&{Fedc1-*xe-G-m?On#Wak;tn9+NZcpPfAwb|HpcL*wqeL)%V- ze&%%M=*mj|kdbhLnLpP3hqK3lK({wePcFH?NlG|({KcPCQRzeNeVTPK96@EP7^fG0 zIl^`|+o!8v>D-H?MT@R~usXGs|L&0)t8}~G9Sjv(cJYH~L1&3ltMt?Ehe4}VJfA({ z{OoF9bmaE~6OF8ge*6#AWB)n?PFb;I@t4}vm9xJ1$If5a6VV>|VyTUf>m9+FAzty} z#V+-S1FDx?6aEpIp?@u)e-Fo-MU$U@dBV1CTj*-H<LCE^o}TjHje7Z(#BafTXX>Ih zO||)UbhC5VmxGH7yrx*sdvS}iarL@c2c(`c%$~fi*^1F?e$VRY+E1dKH_eZCG&dCA z)ppG&nB>YmH=}1(kH6{V+amv-xxZ&RrTmof{4b7oziS#pE&HotJ@Vh3ndHRgep-En zww+5+k-y6+-w!_@Ozcv%J9P2tq!UZpO+~5}YE65W(y-vRrbl${(Tv+S6i%|RX2v>& z7(7ljG%BAE%<gx0TjjPgX}(EG1&>~|6_xkz@^vb?TfEieL2$3>FP`Rm)4CnGzCU}g zJh9}gRNUhVPd@dl>1%dGi)`O?(QNBIuNliqx{jOqFFmo!^XV30+stKOcO1=Cdm_Ts z_HTK9+t+7TSlf=CT~QL%JatX(y9z%Y6CTUSkDbaA&Q0$N=~B~?W#e^SwX5+&vHh`E z!W|1^-69Vky`@n)dH>nd*Eqf>S@k(jxVX3WPV2fW6}PXQ37arEaK<eq4#&4KFWvI) z6h!RL?+xy{QK@+*@a2@Yqt7%>dVbrJlW{e{HfUa270>;s#I1dIMc%BwXTo5=_t<l{ zjZTa6PFRQRo5O3X_Ide{v(ASXa8Bmesq37pQh)UN${E&m_YEy<c&p9|I7)WA8*HzB zqglXg`rL7u<42Ls7dgKJvKViM&5r(X+y7nO@`&ATOOMGGP7V_G=y5rDOg5}UR<3dN zI+^zh47CBO)ml~Ita6sm{L7`6eUflX&12W&6B0kvslJr$P)}QgbJNw!i@Qw!%;m1F zPFBC(v2Xjj%R8#)3Rb*%mJyPkBy*{McVNPa2PwzZA|h{>nH*Yg&*;1&(u;Sm@{#!) zR-Q6zESt6S!NTuFQ_Y`NsmEMf$>7ENy6|?MqSlO$n|?f95ca8s{piDYVH-}jG`H;7 zYk$;1amOFYGDCOWh6i4}-C>olb5`zN^zq8w8>iWnR4T7N3FK00`@Cx1$~_+D8cd4k zUccm5JR9*<ws_XpSIY8_A8F<VWY738;l%u>Y?@81E4@}TdYR1#I(+Jg$E808BK#hq zE|ZV1a!U>?u5gq%BUZBWcu-bb+nLEhhuc1FV<=^9?|)eO&TF^$)@tQPjJLloxZ`EE z%&h07{HtXipVn;ZT;4RnW=8c@$?5J>+#*hB2koAi&G4DcpG9f)<_X>l_&7GU?|8_? z7hYTu^n!IM^O@v{?^@fAXSK?)#<I9?*|Kccf;7+bD|a3>zqe!4$7c&vjw$pj&py}n zZ;r7``ugiE@3t=v68<Qyw~294(Br=4tFCy=UvYXzbH}>H{t6q)7WYhuNN@Re?@5}` z(ueo|rR2R}_WbhoPQT5elUu`=y1fr?6W)Dv{nxoVZ&N<qTa*-b)~Dd0-E`l*%f4+s z<P%=`{Dn<*<Hp^36DG*T@cEyO<%@o#s2qCll<SrgOe|rOr%1IOu;AlrH_Yd`aaJLU z&Fag<e1X*O5#JVkJ(p)-cy!&X))iKadhP3u_)U>&Jh{*<S9oP}*ZZ$+6O|VgaBUX) zV-=V+g>8<|md%?5zTUbR8ha-237hlp)h}32{bW!xbL4gK;S3h#{U>4&z@PAWS%$zK zp~!hhPchHAQ}cv-(Gea8%iJB>&Q~5ec=h_0z46U)Str7IX3dq3X&pyZpGt?`5$y0W z_H*HWc0upty13WOrI!jm=1nkB-u7EWP4Sq^+*2?Ax73%jy-NyN7k9X7D$DwHUoSuJ zT({GK$@A6Bt359^T)M@Ww?f8w@1aY~Z)T)-h>CCCsA$#A(ImR?hi-1!jpYk6iVhgK z8%|reo$veFE|*2#YplhzdN(j!x_s!gznyri{NfYq>;;+abkF=1UF;m|l_VI|#Chee z<5IOh);g;c7X&@#TkpBjvG<s)U5RWlllQ%O`CXTPBs}A{`<N0mueoZzi(QwCyWz8) z9O_QbwK|?hT=84H?uf*%Z)~k<O^Z{{XKt&X)Gj`U`92@p8ooIe9VZqF-%KrfvCqoF zI6|&vx?-_=;7eI4Y3`e^H1gGW18=va_(p}SYP)C8*WY@yJR~T4_OS~^AuXH5Rz5f) zaM!!SjCZ%Eg+Xi9wu6Gxb=!K&`g<IL*_%&lUyJFSz-%++&Wwgt-=|Ad7%4hdcFdN4 zf9h|hao^*Yyz_P_+&DYENxWTTXNZs4>7pAB8}ko39k{yK@M|*DW#g}nU!<+dwr`tm zt(;VM=51H)Hs-GzM7pJtyRPW1cv+dy<yg7?g#D8vPLKL?)y~dfnr^>y&!PI+F;e;R za%xXp?$~B6V5@De6uH#<NasNDkuVv~HAf^qJzt@4HnDZpQqEf!Cv`oQ{<flVanNIq z(x;ZIYL-F{OblX(F<*O;dwPi61Oda<Uc9GF3Zs2y7)(9Ds{6muVFKFWfGak#tlRx) zQg`*&(4$fzS&#M@g{%siY`^%!qUWb_IbvhWe;2PT^z_p*O+017`~O7e=|72!9!)&Z zI61m?rp}uDL?)N_sE6?_cqR0r;^W!;z26>9x@w&&7O=AO^QAQ|OVhGHKHb}WP0(&- z{<AA@J^4z0&#KtErf|iTEBB|#K4<Mex!R9~Z{8)Vin0w(Vap#K+k<u<<#Uz<v54i} z?9D-&e{A3X^o&kO)*R+FBGacXzv9t6>$2R6|4%2V%=^8xeKxOlYx3cfUW&=`nF>pn z-MgmyRMap+K)Ej<A?VS}0~gP1%lee{G_UXZm84tfq0u4K_+&}T<?4Hfrbu-(b(*fY z;?h~Rq-m|q(qne)PAe}yDq#`{&bk-9=j*iU->WTGOy0k9%Ng;NK?e&aILu%<b!$tw zv&YR%hG!TqS_>i0mIT`pI?*A^D`|S%cCV#vsSmH&&0KrCT<=b2vE!pH9*=!iM*cbQ zFWO#p#iQHHj;*?K<=owvm?**Jtvx4KRkGB)wO%pP@6L{e&kPU9pr16kVCizTxs{q) zrlD)pj!X?o-dyCn=OIr@@Z?>ok0&lJDtywqcy`R!K965F{nyXGUHwn=c}>;PQ%jwr z4=hcOp2!?-Y0Oe_x!qN`YQ;U*8Mi_NyB8mrelNN@>Gjv*_c<qH^(8NUIsMPtJ!LnS zN`;TW(f@mM3!E}eNI0usmeuRX`}b6+@8bH`cXoDLm4tP0XU}j<;?!o;Tt0u9+R7Z> zSV1mx^fMx}BpR)@PCCE$P1%-}E2ECexqJ0)f7<fh{PVxaIc~RO>l-vD1Wn#l`FP<X zqrh+7au(lio|!-W&c!=Xl1(vOLB&nKH^r5ToxZf&|Ie!beb1{mcI@A||6J4QJ{$3= z`b(_6`*|6r%UzYpom=&ECx3?j+TS%26Bljsdu<pr`&{4LT)o9*A}dx;;?ib(8Eds# zQ|n*u+Qlr3l+hizO1!aZYw)f(zp1n0Pg<EuMJ{7Yw?A4fdAvJl@oAI1XSS`%mtD4{ zoVvc|cJYH19K|Pv*Urn|Sn<zyd4w`&k)}r%)S26^=e?O(n|`kQ`Q#Y~Pfxe~QJ8Xb z!vSVSPPysc{Sy`&-rB+c-X`+$zlzQ8XWyD?`E%{PS}vXmpYHGcr<c1Yx0A)I;q(ew z!{X4OMAZjBy3dCOfB9~1Z|$XE<%D*M>4GXji)D#xyVpy$dHG(|x_YF-W1aa-HMyWX zALfq9MeW+J&M)=f^6K|Fvog0BrpSe%kNZ;ge|K+AzM8y%LD=Ns-(%)8Qw4UYY`n1l z`q^t?cGou-9^dHQd(xn-=G4;ZWiz)vsjm9;TR;8&h4(dr9R8~eTkZRD|F9JMC||nE z(%+hXmcxZVvTfyaju{;tD(lw1k2xQ)a=Oj}1@~Le?+c!b-XFbS>y9O*tNHgW$*Dj8 ze{JmN;44!u>+Gr2=l*=me0x!VSxBys7#mmcQI0tIFG;n}tK*`-ENNR|yzKYkZ9xw` zG2+Lz@rSfka+j0fikhXz3|@Nvk11c#a{OlLk1LT$i|!=y@H%-e?pu4}-xL0Vd3~!o zr7Jf)IXQ3s_sF7z<a>?1#=^_a-da@=-kfwitKqwza{7Va^-<?l?){(r<7bZQhw}d~ ze!ARy^Lk6MT+4y^FC|TGOuMUZtzNF(S#@(!<n^y<eay=~9J;stOx%{19X}tQzN2^R zP=4p}xA*JjO}MF)p_4U3$GYl~xt`?o>gxIB|2ay6RGzi3Jim3GZ^TpCibcDp_S;<E z<obGQv}Z>2_N?&I{Ck_9^UkhopKmW9`^w4royMg<byNQ9W*_tA^|`9HH7-y>i*2nO zv+K>s*UeGsVRqk(4%I8J^ggEABkfn%dc*g-yT|tz80Woac{bEeyDgutoZ;hFz%+Hu zm5S)uZfPeEI~iYGCBW&@F>yAV)5%LszCTmgQycF}pJBDXF>UhVwKdz^4}a5@-nRek z+N+h(q3^FHs~+$aKa~36Uh17(lPAIX(#3N%3siSKI5@BBWazE%`2Q0(lxBak)b)Fs z$Gq&rm22rK&;LxE@Zs^I-s$(w+SYxaTJ};^xB2*@wD~(!D)%o{_pNdI{P6#;=cj5o zu6$c^hQsCW!2^!@Z3|c)##X%4mDi1$^x^Mx`K_6}l2)q0zkkhMTmK~AMtQP&kY-1* zoXoB6B@3(fzuwXty`6PI)@+0I8dtg;S06vV=gpf}&5A3}^Q%8qE^JlG+qQ!9soZ+> z!ZJXY^FyU<&>F_GY^k#|UNQ-CZ#SAct1FY4ul`8UrH$WW<-#|yZanr`&akWGnNL#F zzF=;t-^QONExT)!oPAJiTmS2oRomsFnOiiL8dqMe60o^(<XP=6m6~sNzjN>N+wp4B zGn)eqnkjwTb>k-0URAyO(Bk*`T(*A4M@CEKPrUA9)xJIXPV(o6@;SN{dJoT)=}OuB z+snAdGHB7l6#dipEB-EJ$^0xAo>|GgZ}$4HFE2Lj+~T?<{bt`P-$Q#AaReEz`Fc=q z<<IENXG2em?Y_C}ScJ6m6|RyVv{RiON)-=?#Ux0tG7%JETqG5us%7fkZ#P%<)3nf% zK<x;*h@0{ny;=J*AIPc93qCD$>e|}*KMy@Wm@Bs9Z;#T+Q^tQ5RL;J3D_Z|NPp-<L zLk8>|_v&kZ^u9l_)IQDcM}Wka8OfY$Ik)e5vZ>|&y-yp;BI6T-lpk&KR4m-{;2-DB zBZe~hQD3UIy)yL3Y5Q_{g80QF>N(Y4pZ>pliTh1<j=z*~-K)3VV!gKJ);s<Ne%@ER zwY}YD>V-*9*_-~}Km7mi*4oq0Y)ZFvd~w<swAFuxy9lFpTWoE>q+LY^gQ7yW)$V-| z-lct|&CGNm$3wIOhy#K-X1K9u1PRw}RJ<dh<-aoWPbtrq83i9LzVUCbShO#&(eWqm zW!a;Wl^1@`d_Ui};#JSJ<=51IAKviKdjfCGUz>H-rIlHKrPB^E8Sb55`TH7wzM{Rn zheQE$zaRgfOaB+Yb7t{Q%DI>AApZ8w>8jMO7tKorWYqtxGCW=|=kq_cqsbq>tak9Y zSDf)Ey8Qo}P4AbNsK@2{cO9v*pY(L^_29Sf_c^OwH9K}jZu<Pyb1fNiGG1K!ed+(@ zE&pHpFK##+CGg5Kdet^g<(uXGN*+fyTw^y~`Fz{S-IE_xtvGv|C%ofqPO$JP+c<ah zvOh|wVWXD$@<N+EuI*F(6yo+>ihZddqo%Mp^Yt9x*Y_f))ZeZRUlk{0mZPDu#_!T( zXSo+TY%F4bm)|Vbt&ga=y;ASds{j4QA=laKquw4ewn9H5d%-S&j0qE~>i#R{@B8)W zQT%_k%0;`*=GGcVZ+{=N!+7_uC!2OXWu7Wku6k<ftk$2~@8*YP@yTf=Cz{%?T&H<q zZM|HXc<;s1Bg{Ng{4C_tf_!goS!VMnaE0M5x8+tHIq&XF%bf6p)%V7tcK<4~&+V$) zP0OVc-L7Bu_2Uj-Q}{~qF8G{fa4QPZ)(q(7xUzn_)6`kwV*htdPS<9fI;%oIAtdY0 zRDs~EdvR0Bf7gbyey@D-eCxX=x9c7U<{enn?q9R*X}@<K|AH%5thX0?6h%loD><=4 z%xi$=paoGv3`?Kw(avLEnkKk)<wE($i+Q_wa<d-o+7h_3Fx)0&W#sQ~i~daT>it~6 zzdq*q9m8E~0$E<oD~@vc)Lp8hBw;9kT2lo)<+!qb_MKiWQ||h|vvuZodHIHFIDs50 z6rLsata<zG_xn%HO)u$X(P}<$KEF0V@?z2)R5vkj9${_#J-@0`({#ctmyoPSi+r3^ zn5IgVFLjwRtM|yVwo2!X(2i8`{5q9qg-I<K1_(BO%-5Uf#e3sQLn`mNx~|2KHhOb` zM*TUa%*qMKI<TxwvN!YA(dF{y6*u<UKl%GaPobojWs&ECi{IvCu=OWm6r-seB`@kW zhh#-8%HO{xRQk`iU>R`*kb&)*rkll{1ui_sU-U#ZWM$;PpCTM97Cnx9*W`TNLm`LB zGjjDIK4xaLwz0>8TS70&p59$?C1mX--!)MudzWAN<(c$Ce%ZwZKEnP>gJmx<3H40g zYn3AU85UQ_^<5Lgtt&fLb9edjey=zw=^Op!Py6bC3mi-ZzH_ZgudE16O-)^Q!Lsm8 zn9<=!1x})O(Yh8Y0j``4zGr<tPR*OfI_Iy*bJtEYQ#tMq$;&@leSH@M<m4*ZxJkB| z&p*FC{rtSSjN2wn63S2f{r6weu7i!+1(<#|F({s0XEw9VB2g|<K|%_>>F=Q+!!%KD zOY3B@FVYaFD&1N3?6u7@p94{*w!3cJxN>Cb%wzZVR_E_b{je=}|1y=^Dbwz(<Mf?Z z|8J?BZIwmJ#Oc$&KWvw;`~P-(yLs*@iy8?9k!x$Cm&fkr-d(=`-LBV0#>R77gpVvs zyT7m2{?7+zS6A25({%go|NZ#%$!J1O#0<On_J)Ru*Vo<s5^?|Euh;9hY}xYpy#4;d z$Hx?tw@ckU5?a~nV{e5XFASU(>IZVN#MUXrzf?PXgJsLgLcaAyF`ywA>)@<=Q4_pF zq;{>^5W2GQy%N8i&5s8Mo3}YOD@>Y`qdt@4dS_?n^!U1;9fHa+OWz!5Wd8mA{r0W7 zjh=4*_k3A?d%c&R%KYTbH#hzN@>OQep3KjE6AYUajLP2JkS%@|^ZxT!-^+de*Mm%X z-)!<S%?;mZw%_G<eA1)B@VK96jL*+0IK+9-nS0TdHBqk9PNY_zJaNLq!-GLh;lhFa zC8-Nq_W%E9ZEGuA*BrtuY5#0S@`D9?_Q=T0t$a39v6zw1Cy7_f)NjE;Y1Hi6z_Ln- zanY4MpAH?0-x<UlDN$ru_gizFx6o9n@}rA2OkKLRgl64fpTw+bsy?scQ4=dSQ!FcE z(z`o5_4j_cG`IZT&o`UTTY1W8NS(L;|7XqiIE$5;E47X`NP4-laxMs)_3i5B(#yeb zQl-R>9@yx9?^jO#hZoayB0oKtpm>;@FJ|UK(}p|KGenO{-PqMo=JaH8iLdwNzKmPb z+qY;+@*X=o<KpJ@^9qb?fmze^Vyo^H9?!kIYisW9Z9WSVrCZqSv#+n)n|QcwvcH{V zU6aG)*|Tr&sVtt5d4Mhb`@6f-V~RS3Gge%&SlE(>RFZ;o(+W109YLF4=_mO)Z&&;< z^&Q__?(($o<~yOMbru9YUKcSl=(F05D*}a08K$<no98!4XKcy3%B2(BG~?=-IhMjX zZen^dH+Gd~Pe^cDmVa+grN4dE=}nwpU#Xo8ZU6IWafr&q&H{6`$(agWj*t2G+U18& z*x?Xc^=aAcI1fE*?MQE{BUdHOR5?8kFiy^Sknd!ho4m6uzw(rF{{Fk$^Y1$(vIS*1 zRQ!6idcDKqljqN~Gu@e{HZf(b-(0JNBxWwY7e=M8udz<w&=^#FN^|*v(15IMIX8=L zrcO8XRsYfE<*VUTA&YjgKx3AZLts`!pAcwpV$o62R$I{t5#60xtj`4Y{rz@Zp|Pp` zQqT-tkpk<YCmd&zf4$rNK4IrHcllbAlwWqg-)#1tt$y`h)VteZAs^iXkA72rdb@AR zQ+dssMLR0)E?lh5C#rA%O55X`=rWd@e^U=$>76rY&i^}gzq>V4W3_kqFt2P{HQA|r z1_SFilMS0KV@2Dym_3!Ukh4zVsNk7dH<|eX^DJ*KFR#5-UxR{!A2R%Fa$vr^a?+$p zb^rgCTU=h?$UI?JLUXdgM#fAwz69oe!T8%Za(`X4#VmICI5m{7bJPo{@fk;7o!sK( zE1@cp@b*npQ`4`nudDgCXJ22pAx@t|AinPB(<dh<JGU`^atX?e{B`o*m$K#8tlnOU zN;g?w>(^}+8-3;VHKWH(XMTyBcxQ(N?fcj9zCY;xH>2Bk_g`N>l|4A?ovi7rd!Lk_ zPs^&i;o7uBlh=4fBX7v;sE~szH7*-@A6)Yc?77uJ&P`sPjH@LBQWB&>Cad{ANWN!X z_Qs;-hrtQ+tyxzmwVCA@iR?&U#VfNQ=&_i^E{w)bo4|qd_Muao+?F2m_PjVXGD3B` zpmL&RqJATnefs>`Z}aQ_MTUg1$e(ZX*VK*MW08{KDcN~zXMT42nM+n@F5NnF$tXQ@ zZF=V0w9L6_na^t`RNY$O%+B}!@8ia|_HWMrulv6&|NH-4CI7#3e?R{_>woq9xAQ+; z{1++z&NeDSPGj2B)6;)X`)k3lDauboGU8X;n!4gko}PQFHYRU7>~FzoabSlU=ea4_ zcMqQaBwzpQ<?;zH!(|U#GS118$S_g3z`!+wn=MPE<`!p8){P$Z8&4jYD!e#Qx$N$N z#y?(DR(o7D#E8WOQNj<L!;Sh}C(qiUpBa)BBQCh|#-gI%Cz=eNW$~?MWsfqrk(;7$ z%_6eY)!XZm*Y}Kevs>?v&%0aVusXPH*|t5_JI}s&a#_yP?)%Co-t)ZoeVX}X_I$5@ z-;+;@$3$<;^p9MyrS`)?_U7QNUxbt{H_UN9lkR7w`FM7|(X(^DJO31=1u(OJ5cWHy z`eUZs^`o9T7xO$W9@xD)#yBwT>#M69BzV^d@EkYz?fF;1T&6kb@VNtwH?A<Ke%P9J zRw|-jk}t-!y$|zB64R!Jm?Mkbo@~oX7n&-S|I~e}l-9+RZ?Dq0lzv#5-h0ITQ2XL? z(We>io8ErEw14a5^`2RU<(D}B`{n(4|D>mW`ITSgUbprKzy5Fibw~Yj)BVe9uWO&n z5H@I=YX7gIv;Rckf~NwaPmTyn>&4ERGjryIX<`2#_d70bl;wM%KBvX|0mBigh&^oo z=DogL7rE_B=rqTy#;MKcEuYKGaA9K)nv%GS=k^Sr;vGK%94|H=derQ>vh#sN&cp+@ zTBhqV7AK=u8(B<@cNejxJA}4=a$9<=R<pCy|9{nsS@pIRy;tjJyuPx-Utq@iA6qZw zMxDHN;P?Bem-C}$7P9NRN^kkgy|vk1Wuj?Zj@gX*C-*n*Rh;|%$dp;17Af67*nB3_ zsjBL*zg?p&-wnwfEPMwfqrWW++Zp!pxqO1`W1C<B<u&p=aS5rZ8`LN5;+fMpb;ix> zI})|EEI-|hpZ~AoOZ)roee=Ixf8N^8{ZOTX<^8$GPSepFhYF2SP7d>Vnv#6)h+Arz z%5|Nv|MM{0aT(_m<1?jMR}zA2SK3y6;h5_ZkaenTMyteRJ?HvqazB&5_r2kj4qqR= zwd8jGeA&Anr-p6u`z+7#MKnLa?bY;Y2Yb&vvz^Epz|QyP)!p4suE+0;m^_W`n#mgp zzeB182V$Bcm^UBJnm%P$kbi=f@Qh<3Vq%A~OcN}ae{nBi-1heN_QU=b4Hpt_?|Xcn z>Az$AuCRGwg$ouj*qz}uK9_J->Vuq=_%6)W$`u=?A3v9`3VOEU$`0+7_k;grE-&YM zrylhBN>7wQR_x(Y=QN(m+{@XDL7ZN_`P;)bYJb>wIsVu2zWv*KZbyBYf8_K3>yOrb zzis=&quKF%j$P&3XDsq-7-V)RP1rDXYV*OkWp55N?yvr;b$5%Wujrqa$pxP449|#t z_AJ;LC3=Cmw{5MYPO6kZhLl+jNBor}ZqDW@%-)x#gow!N>DvU=t+?VI_L)(C!y*F@ zn|EF!vFPpU29_*_#)kVxRx(zuFN$<odMtC|+x%->W$NpcxB8u3GG9G+=8mV2rS0oJ zyk>XSHswqZ-+X^h_HUE_erLCzjh{As_wV(F`?z1tFZ+IT`Mk@U9u_V)%c-jSJ#TB3 z{g;womG<krzOeuBFt7Qw%fxhQrrxXR^MZDldS~8?0sCc@^o8;R;uY!l&zJ2uc*k%; z?1SJtIg2L$;Z}dBefPuNyc=EJ-HIU*n|AnEhpZC)CFG@5V>coH0B=RPgrJo(TBnqO z^NI$O#<h^CkKC53xp*2j9$V;k_z+j|+*y~pF4?wL|8cEb+qcZLX?<w+R-x=xkJL%= z-gb*r<;8w0>b_hsZA-lOt>voXS(>Ws-hcgnoy#k$S>AN%?e6}6cek7?G~c>c%T{ym zj->ORbM>l}HH)A7{gybeXX%?KlM`PF&pf5_EoyrFy^zS+Z9iL<W<5}enRKq>EAJfp zry}33=C(_pFwFUwFyqvcb9GvJmcNeQ%Z>c`I`RI#_x;VOtpA=Ye#+S@%GvsFNm6~) z(Z)%&>|WpB>-@=%{}|U^xX>6q=TC6xRcgq-64D9sXM&-nU`AYBRoS`g&+?^Pclw>R z&c0{)ZECWxz2B8xAGXNm)^9l|&MReeUm+pNk<(LGu-eelL;Lcj8mTp(XRrHtdCS!H z*VC?9uUt{{+q2YP>hjZh`<BN<sH^^cb;kSE(kWAam%YorTvYGsuz9-idHZ_R(5xAe zzD39T)NB3}E{d4_?8W;1ht3JHsXr95P~hedKAvsz_6@gQL7jSo1M@edH<$ekrgEN1 zd7yoFgBI@^)j72Vr;jgvUo-W~#p{~#HFH0`D}O0}EqlrXZ=E$BHd8LWc=4R`@;xh? zhg<(Xes=Bm{r&Zl&urXEI-$K~L=S95AdADA!kuoey@!OwXSyyuwoGD9hDq?ee;KbX zZ_a&PKI8S3E8nhPtIE7}c2-%ZhqO*y&E#csMRy!K;AH%=ZliFi+g)$rEmQxoy*$~v zb+Q-x_PsA1PR^Hq{;&M(JXYcG`@2?Wq_+NFziaEMZ{}>wa=+iUN#|9xpECLIFjpYH zYtyE0{<DwG5nCIzb!)i(jfV|$8@(SiL|$%~?k^;CVE5-)d|tdSjNZKV+wk`Gc7D6( zR~ET)M@(I|W{-)j?ZUF$__tR3c9s4uef48fP<M@ILO}40NntU|^CI6`rEbldzI5sI zrAv1HxH9GQmWAG!u`jCHaLMPYmPJSw&(o(ai!~!Ri={|?aNB<^H~8V<nB~h3#XIT* zt%(-+tEd_1?a9AodUmG!<e(s-@1+@cj7&9C|7~;s%y(|y{<jBN-hTh`#CBz8^`*&N zLB<YmHs0S=_IB6zChluZro49(i!S#~RQ|r_OVGvj`=5P($Lq~;m=97dZ~J5L=WLT} z)~<5<=W~kZ+!tDK<p5idc+H{C+Gm>j`ugVP+XEN7&D8a~yYc((+-k8m79YO$HFy8h ziKyC<l<icc_@@2zr*C5GEGkl-K2+W>WBDcf<iWG&l3lRW6|)=^E--9Ud$RY`Q^BcH zaVdT#v)pbM`{^$Bes9#-w#p=IrP`U&EGhG>JAc}rrQ6qU`_{C=k3ZwNkInL%*V49K z<zC~L;25hbs%CrhedkNn<3IYZcv^;7@8odu@VXIepId);OVh7RR>_s@ua}8j^R%49 zp#7QcUfdjukBz%ZxmPUZ>o8R~k|S?v^m|da*U{<o9x&7$^4zw_;Diag>D!w<J>qdS z7q99vmYEp5<eaujQ%h@-e4SOviwnnkr9WT$AGq)BlSOkT^XFNm{{J=kd+OYhB`-Xj zJ{@eC(%jBBRpw+~X@&Q*iMqP|Df5eRPVQW%<a!*ly3F!(kUy}f(pOX?D<sRLU5fXF z$r_tT-sM$G=K3wpOk5Xyd3);pKfgbR-`gJ~oTgVQbv?4;_MxxkYqqZqD8FC({du?X zzWCK|wKm=7u8Dg5m)$t%)HkvE;CI%ymOcD0J2|e#=j~$OEKzeG?UnPx!j8vBO<;fJ zbwJnH`13?b<98mucm0n_MckM8vTBpE`xSlLgZ`Drn>SZqzBF%^<>s9qe+MY$b41Kj zv$n3jy)8F-TTbN0q@!)T(hnGNvbN>jjoPyMhtT~4@0R{A5B#{`ovQiY#Tf}st{*2J zIqTYabLCUd=W<dN7cWXzPvN)Aj^CfIS7(~yf-$$is1op)qad4EB>U0cC)rzq9)~Rs z<et2C2Jd~1P16imxIdROO|_}<v@#W)R#Uj)FE97rj9b>XCN{e_oz{52_y5(y=jWB* zd%C=A_ZyMdb^k<{-zly?HLtWiSh#%c&FcE;$!zli%ALHNeqTAV?Q78a><Q0K&njMU zUNxM>KVZIHt=y0M|MT*0d~n}z>f)ALCG9y4oxFcq_HR%!T<v3@dFyVkwEf46?zYw6 zN+x)2o_u$Ax&HFoyWj8o{kY#=FM1nKpX1h_KcCN^t`oVb;NhYCeLvHlo|^jl+FI`q z@@u1aFUninb?K6`eX4HMzB)yV+q={CBc8H!ZeR2`aznL;M3o~(Jr@$oRP&}w%QsZx z5KDyE60If1hcZh(UCqsOS$u5n#Vuc-@n$cpUAVsG((^gOx4&50d;FTT=||S?GiN*1 z=j}*1*rX7|S3GUXgej9|efqQc{C&eGeR8$c7ANZ`EIM=QlvF|PeD=8Ym*1`t?pt|v zi|5+U!drIz?henl|8ske|Gzn(ljgqP_jh69;WowOpRd>Nm#h2naBqA~;o9@pd%H{% zx(@gB@MTKXuw?rMUDCWB^ZChSf3w_MCKVaM%l%|cvqaXoEVgQXnt7~On*H+J2P#V> zpE=AeIK=t&_4Rhq)`!9OcbC0wI-2d!k$GW(qu1RhzqX&ZUwBrr!#Y27@#6V$bDsEn z>3OdVUoW>rV4uWNHtCpIhN1x;9M}>}D@V!hPwyo4?d|KI@_87?o^zJIw%_+Q-*WMH zXVy9GToLHGw$RJhqxV?Yf{CR~8m5sUD-&N|&4{{R>?c!n{e}Fe15=LNExXy-+g#1C zk*%f2)mv;Qw|T?s`E|cue!HFj?%w|o6Ri6(tFzo9TkF3b`#U-Q#&+ZNN89Dk<y|{d zCn$6KKv7YV-JcJK<@fzwSMd4Sm&5G`eGB(i@!s0H`^BT~_51%-wHwdNnJP8o@0QBX zX&mxmD>>)A4yylnY_grj$B<2DKE>}Wz4d;NnX2N`Q|`wr6I#7`*)v|Sq7N;sa%#{v zwSS**IO0dMm+zeEvAjW9hpuEqI2tW|wpHKk;w#@X6MxOCo@BmM?Oe7SuczE86VoLN z3}>SjGz*S_Mxwt?SJ(ORQ-9s%j9YUvf`#vIUHEH#@L{pVoO+iVWPJ;QrFJ`+ocYwu zXy5nq@$OZ(m+*D3IVCEoCV}QA#(b79f;ql1j7Oz6dwmX_o15h%b&;WTJ5%qLm5onp zg@jIgpMPN4vp&Ja)9dYAb)922Z@ZLb;uh1)c_gUnaP=OxaFa7uNd3|z7loj|(MiF^ zrH8`p-#5I!?QrQ~eNymc!RsqK11+mMmQ~%l(qghGQK~n3rrW2l8~N=w*1s`JOA=oB z`;_y}MdB&}%$ytet6f8#I~_$#H#{&njpF%jEJ}BOw)9^(pq}_bOK!(e^G2`WEU)*E zCr?_j>XSoei-BwO;>43I$x<usr7WCvApTs}w+=(60|pW*0lb_pkKc8>&A2LHo5qP8 z3JP2-N>{~G?;lN^Uw=q<9%sm@H_O)^o&H@fD*f1`Uuk}K=iQ5RO<p(I)HLVY<<;}^ zrx-m+eQwr#)8BahZtv1NuWm{2ea=#=#Hb=*$z&<NU%D=#!oB^xfHO)Lq=SQz|L^VF zauqYr)J6SNS5avE_kI1p+>hFK1vUFLSc5pde2;EnWS@Vo>5q#2CWGXNV%>VThpy)* z_UmScU%&e=X4UVWV{VHRUnY5-)t;Z5U@Eii^a(4|<YRYkIjjBYa-UZ=pYuy2%LIol z9A|2OO)O|SW^E-?^+FuQqmNkbe9J$+e`m|OVCN}Po9?Yz#=Bo=>Z}fNZx!aAy+O*n zStYS-X-=~LIEt=r{8nCkDSF3=I2}`|(3O>6jnjgipV`M=n|kBQ2GQ1L{RxeyukFx? zD(Pa05$ZU0SG?CCHjR5OO0VTg0F&UG?pNAe#?#I$V+$AQdpt|@cWKtF<@KJ^KIJZ% zeLm-F?l&imB|gIEW*s~ztYVk{Og)>+I--v=T>M+mffwwYI}`<KB;TLVGwvzhGJBHa zc9gUb$KkT4o_qD0SMsmEO;Y+IY|XSWJWHoC`j1rn=4V?@2j7vn!qRkvMe6+h(xM~t zxJ>M{E_p0GR;JORY~^lqQBbHurqRKCZuCaB_b*ON<!oy~Zn{30>#*e4_LMJPN2S=0 zvE2*qwo`Um5HwXPVj-K|pOV+hRn(W;2K+y*==t!e<}0S&Nj9!MD(#JIr4Lg%YLyvP z9!zX_o8tUDiTB<`xt)tq*10sk5a8Hczq)>_MCq&-A^|DRy??Dty?%Y&+H%s9|9;&h z;RTDb9T%(2T&wZt)12Nj1w8-0yuP;PZmM{Mcj~bdffIGLcz8J#7`L;u`OK1da!<xA zWx^h-++)?BEOzK`&s-7sE_8{h*5etG@aE_ODFKP!XNm()9S#0p+0gpu{O$K8qDTMV ztMJ{GUU&a*<y6xa>GQUytAf6AzrNx#-zf23m%Z@I@WKa=Ee@|gRGJkd>bgcYd{vOL zk#?BKH>GPwBqTIUXFII?DYEacON!JDz4zDF>~&q)IkQOQ@tf;sUL4#1;na-ZZP(B2 z32%;x7T=PzU0r0g=gNsoWlngTE)cw`Gh>3AsUD9EQpyxmXYe}v<m2NxEY|t=_SF6T zWm(9X_fGQjhE-Q;zJB~KQ?=*Kt@>G0q@G>(OuzahT+8&q+)mT-*sFZuB4rT*Qy=N* zO_BQRe0SmuX3@~Tkd=|XIax1c>^rj01pmse6f^B%{{HT+^wpGv2ZqWQmUs#;yCP#* zq>?r<$z`Hyz@={`!3_nIZ)uqZoC-UhIs3YcneA1hEmozk76b+BdW#viLes^9X95Xc zXZvKWo6>(C5%#ZnKDRt?*UM!S^b}<Zaze9Ys<wn?&A1;GyL+}!Wy#U)pLkrdLbI0n z&iwF{>(kV{A0Flzria&OUFX~XSLFEA-9gt^PK=4#^5A8}^kBi`8&WPU@e$6@RofIG zoOiX!A#_Fm3^#ZTLOWAR4hNopR&Bd=fcMCgBdRS&WLD2k@6TFtZOy8c+uTmw`F&Hp z@P<98NSvW<nj@NcLx29lZlj++_xzi8P3w$nYqHDj_x>NUH$<Dq%u{o7ZMdkwc%0>s zVHfA|^^aK=IV0QFxI-b~s>Ok4RqyWXR9ne9Co;Clc(vrdwLy<nR&UGVwvJpMxA%(g zYTw2Ko;PlsbnxPpJ#fk2eqqStB|KVJea}ptC1xAszt}SF`<;oI(JwDvd$fDL_Hy@= zf2%_Tm$oetTlIa$^0UG7BQnFdvxUyE{BD!YyE>tvv`GK-lG0bfre|!>%4Y_~$;TK^ zoxZfx+c)o^ud8e8S}CSJ-y~mwrEQto*Lq#WT~;=(o_@DrvS#Sgx929Pznv=e&sWB5 z($Pe}J@=Un!?U(Ldl@X}u`J@${CB=R*|WatMY-3<o9iY=e6C<W_S$r!^4hJ@br!vy zGV%H`CaI@HL~K@>Fb22&DLI#Z-tKpf=!&IRO*-58WUHP`bZ3h(Ug5s}-v{wN*|aOO zGktDNcdoi}b$hkg#T%cNeS2YOdOq>UrJ3gOSvt!Em{>K=x63cSZL_EvDR@H)nG_D5 z$aHaabq!h;_*|@U_NPxpS5<eP+Qb)kU~vimIUkQD$6H!hE`+VI{+#`l<DtR+2ZDX; zU){OLW!({PG+}BIFPCXyd|>kWD;ZJUijudBU&Sro^fKc2?m2GyF+$&Wd|`RzeU-(p z<lD5f?0hm7?{+*cQIB38e=+3#x*7XI7pJ>52Wa!l1VmWPVs~=tc;I$f;Gu!?j6D_{ zT~jr6=B--JdhGDF=AXMte;&9Oy-D%LhCiDldOH`t{Gwn~aoX`n?ccB0<HKWZGY&6X z8?5d><L|@h$#H-5WulX3n*0pCQ20RK#_{RK??>kResk+^N%ZeGZH!xdqWdB?rMP&% zS9Cj(ej=r%<bjc*AlqxBvXVY%?qc9nXp|6W_})}~WLwHfA<4xyoa_(S+*nq5mxWrf z^<T2JFjkGOVtGCL`1}9cUuw-stXnI0Q1$caGi7m=-!!!+DAdigXx_}06ws|C<eI8s zYVvTU{*wdG!;jdh?{#(AB)r(+K$OmpJrZfIMb~4?edk(Dz0ZGXgUjW-n*aIRY739A z{1^QG$D{ZAkH`Dy2U~BsaQo8l|L^B+o)_`&`zQ5tzn)&)z5HqWw}*#V{q7naG74SE zE?+ZY>dMUBxqQ;6=UW#uggPZmsQK~XN!&c`lzUee^8b5tbNjoA%b2%WZqJmOF7wDS z<--Ky37K*gFA4=RxVZTbcDFQMzyIj-?*})euH4!AdAiQ8q^qm02FF**{?m*5VL9ic zz~Y<S8(20zyScLROjzr`xmElb@gaeiO${|$b(O?ly6HJL{`-@VzHG|NzSej_5pIu+ z5&@@#MBf=_Rv1bvRXyTNw(|5U*{q<cZ#C`RB33h|)MiJd$!!HAmQ$xrr8uO|DQwGK z@Zi~ti;GuzPd2`~`07lX&DG!E^}W5lI*C_C{`L}1?z3ip6eh09<alyMoqf*4g{=!+ zCORzDGz~lxyrp^B{rT;>9VchVyfJolll*Nw|I{@5zg>^}<@bhY*uOb->EiM3-Z-ON z8v%jJf4{m{*f#EYaWKYk?kmeDM?@F9JNM}LNm<^lFfn<u^Sgxqt_zi`<_BlzGVxkp z5Z@i$SMkB@?Q_e|KLh6Ub)78Od))SWz;5Zvrv6DwFZL8Z;oEN|JU8tbgPq^?_CK#A z;@GOWH@<rKIQNyw7Q?>9As4sIo-FnD_Gz=437N-ie*CDPU-`wsk<miKqC(&wn^vp# zx);@t&pOA~K6O>P<|9{s`9WfVn$gL;o68QLzxmT>&3ySY`<PM;0-lK7y=?j0F|W!v z;aq^)F`f%6>e!_xzFTHrt#|d*w4M|Dmw#@S-LYkRB7?S$ph)4*2f4=2FHP=#c5ctx zg96vAU6_&@W#?U1tez-!vA4I<tMY-%hS{86!k%kCFh5$9Y!b-w+Jg6m08(`rs2UIy zbSR9wO;=a<?U&2`=@(B<E?~$@m^ATKP;7$4o(A`qa&u-1t*N@RvpBuI?5*71?{Wpq z^|MW~M2;x$NUXbg!SI5UnNDk%SIL)G-&G$7nFg+P6y%nfD)n7sr4Xn5!tH;*O_sXz zNYy*O@~LPx%X>bn#=PWx8+&VBzy8a<xB79lfyLj~>%ZsKln4C3?rUtL_pW;JwpSZJ zPhrT}TVtGd;hFlhiw;{ti^aPg!gBMz3UOBbIeNdx^1Wg2j)-qZBE3vj-|A~RUEo(; zzQ{7``<7KR`vYEI*^*JaZdu>c$Zz%cE>u}bdilR|J@(#sCL^DunK84BQNgtn3iED1 z$v9HM%y!`cA5X#x@jQO#Juj?!IKHjj$E*;hB#>DdZPu_~TSoG8i^tU5AnlbF`BF8{ zFZ<hXdVioX_R5+P`>WY}ft&qbn<f2_O`ltOY=7JR-zRQdRDLJPe7rzSi_`x5&3fZY zEY?$a?mDD2OHDAZ?^9bh>k-@WL&@G6mdj3^Sny!Sby1&HicY>K7O{NnaPj>zFK#k( zMB&K;o?n-&3|(B@qgIw6tIjE_1iIZFGFPs!iN(v?`)c|51v^XL-H}`r;NK)2p?U1d zq?PIqB=*dZnH`kzi6iN(VXw4r<+H*c(sz_w4*%K2;BND0hUt49mV&gsEJC~$z76Xo zF28Y^Cfz1h$h6{0g`=1F%7sO~4Qm_na(sn1_$S(*466_co3bnKmfJ4dnl_8zsu}T3 z&0CA@qnBpJoR$2tZrR#f6PB_&^q;G!czi5#!v+4rlAlkuGVW<uy}YlF!PSHRiNVg) zXp>wI=g8f1Y+t{)A8yRgzw_hUfi|7W^f^~J)|usS318Cc6PvYYU7@|NYR+cA-pNu| z7V<`4V>$NzOjuhEb6QgyvzSy!>_WX4F{+o}sJwEG2s<DVciAjQaP`fugqgbhoLn;2 z@-6KCQ)7eXJ~5TbyEpUeEoXjP#$_hIzrAn&!2Po1{-dPX<*Wtse5<5N@5lPvn<jq9 z{m*`Uy>GR#(MlyL_w3&@XBAmWtDS5Wm7km?!)fX=U(qnmFns215v5Oma`J^=FXAxM ziFqN3lwkyw8Lnw;$XdT^>5?ULO0Pw}k}Q}!WlBmZ=eYwLPwrmp+k3M2t$*}x39*-b zves(0mSSbW+aB_8Yc=@tO77kCH0<T|U4d&lBer(BIjp!+vFOzFWUd#}GiUz)^W6UI z>nj(e4{ea>wNd7Kv46R}L4ETbIqUmrK^K4aAN-ohy!9&gzPo9!Q*W>NpMAgFF`t7y z=A*~Sxs_F)Cr1`s+wvi}MpAB_d+2^n-*rVPT8|xGU*Skk5y+7}Eq&f4$7el@x5}KE z#mj{jra8p7ci*-02t6|C)l0L>wvG3G9BNs<%&&HDlh3-VUEUo}Dqe7$(b{w~!E)-w z#qa0+ICMI}*EsvxZ|3!{?aSj-uB}X*+?JEBJTWqmf8UXPJV(toOuN{V{y=5(wjded z)U)SumR;YU`1KK^G?T<riBEIPzse;|XRYGBk;o}{KI_`jUyY{@>1>F}3uJz6B>Mun zaeh&;;Ekd0w|CY8MH?9AuVq-u_OGpklTX2cBW&6CCBl9;K7Q9zmpdqF5oVnAHT#f4 z^VVOgdM^|DUmLHu<g%R0)gUA!E9S6BcN+U<$;sxN!O>HqC%UEYFnuancj3(<Z~yDp zYW}`8E7<z>t)r}!&A;Z4VgDX}<ookv+aDRJIculq{>(O68~Qn|?qOH=a-&~qXQMN3 zy*a8<BJ^azc11V0W^K!9ORO@3R?U{q{>!n+k9X$!MXZy(PUMK&`FF0>^0rrH`5f+$ zHnIDbggt}r-V0Y<6S!sUre?|2Txbng{QQhvXqjhe?RJ-Q%pIosdw<;5oE&%h#ES5^ zprYd!X7kC~upGZ8kzhHs`u$)2*<Y@Fy|X#Kvhtbe-$N10+w_=ywx>t0=S|VQoNe^i zNaX&BIcA#-dTkExlVE*)zG1RlaJ0wql${dMzommz%0xZ=d1jvR*)}cLWZr>u#cV$6 z-M3D3+`B8zP{00Uu@#5Ep4hrRgBvHV^70^$P6#Sq*cf|zjc#<Gh^VWI2?tA46N6%e zWWx2$yZ`+7e5$#%_26O#_6IyNtIr+!c-pP<%nG*NOr_9$fxPU`RxX_Ptf|25@-^w} z>+3SjMB`1~+MmC-qRQ`7lxgm<>g0FQ^QKN^eIC9(l6!LMy8ZvE?w*x@f2ZW<k2B%d z?aTIAsGpy+Cg#`2PQU-ZX6&-4Jv06NosvzOt-n(L?z+m&Tgh9o_uH*(`+pYGS-!Bh zc=K0uT;k+!|95Q$v(SQ9*I1Xnda@<?c;Dmr3f5Co*2Z(czTz;mDYbW=`^JCz*38+b zCoD9#<>cP$_l|Y-r>4RqQMG=;mW-e0B`|l3)<y9<&w0G=hX37ej`=#@vU#S>Q+$2% zM&0d`Z|(%HikPr$Nm$;)L+zaNtKV7vurROr%9%2Y@9ix6zh5r%O%A#At>o&{o{5Xw zcqLWNZ?G<}H=dyXRX5joXQNgk^QQ&eM;{o+3S7LSeQ54lSH^?OUqAE<oEXMr-Xnxm zq9h7fl>GRx>T338v)p@o)AJ<`zKA<Gi!Ei==5sG%`fGTm<gjz`>HYoJF1r8Ex99Qo ztes3}(jBJnd~%3e%4~)H+{nNCejDq|UYKt_uUhQShOf8Zp4uHh^UEFa)7zVwFJub| zZK;pHy|H%rW$yAcca`N59!EGqTi;d&WNmt3Wy&~p*4Nk9op;FBei2*~%q+a%hX0*a zN{xPVtyX%S-F)8e^eK}I?d@9n{b6sHeYzwx-7s8nsanym&RWkK9`%Xhl3J#T%10O` zAhvTo=yPy&S2}xw_YE7<PxhtHu1=r#`^|Ct6YYg3{x7&vl5zhfPe|4s!TyEWbN)VI zHH*zwyYWW-TcPQO)Wp|UR>+qge!R-{K#0B5+Th1aty<r=`z>L5J$=Ib5<Yt^9z`*h zgsU?R#8vs`d2Qn|yt_!sUne3_#sk`G1-rtJW5Z69q>Vx9b{Bk8g&dY1<F4H$61*WZ zxoG1w(~{MB+1sxy`4jQleM4#1o-4~Zek{D-b11N!#Un`o#TbtTyMz*wBfgbN-gz{K zLCZ9bt3&^=$d0<}Dw>ODJ-_Px*TEiDJ*Zbvp{$_Rwje|}Up3j6e_in7bv-w%Ooi=Z z_>GpFe_vm6=<KTcor^x?@BjNuFQ!CxJ<G0=my6Z~3$H(Uq@-2tLE_w53dOa~$HNcD zTv;D4|89!Zw9GSlNCTc)lMhVr6u$c6VYlS6D<{_59<Vai_pd5D_r3lAmuY9o+F60u z4|W~e;pdww7XM)fXsNK7&&tY)8m4vgm)V-#b6Z&`uC&XI$wNVnWsSel<?ZtyEdLyO zGig#v4+~Oy^kCp*Q4!elp6kAusix`te;as1q*h(Y_#StibLy;$b<v<T4YG@_tcm{1 zq+y!UH2>R;mf0cy&n#oxAN;ycbC(;Fp<+VSq{#i3dcAyoPBAK@OjUI7FqV6rJ(6z! zxADf639*;o?UtK5>%<hNDNYAVv-UJC?dGcf+Vc+_k?6sDq=P|n_pA6irnPL_cc?XZ z^}c?Tc+EuP@(#9kIV>6$OyW4;wAyFQ!SnW^L7Y1}#HLD#Z&(s+?<3`Xp(fyLA?8W} z1x6Kt|12*grbWmdsSnDo;R;;&F@)8j?Mq|K<CFST=zE>OiB7<o>C6<iG~0<c6)h(9 zDpuwPE)06yDm|mu@vhpj<Q?cM#=+|xJF1xs>W)s#xiekJUqQ<>&Z|o=wArXvyyOKt zYBYemP)U9bx`EE(D?2OiNGyzIT5)BEs@omrtt~7w{<LVPRWEF>!{T{`X)FoPgrgU- zv2EnE_^UbXh3(N+uU_#SyZS|J!GBKZ*x$jTiGlNoF{4$<(jeZ6ISDr1(KW&cgg%AX z1#CYk&t*FA!9sPUfd#PBCNKzf7&0ndF({TYn|D;V4^*z~DtMt}8q#;<)mtgKDwJVq z2&eIe@PfzTzxMN&&bslqTvA!fRIkzSd5NsroIB4uWw8Zv;|!sM_?O>)ukdR&V>e8F zuWDpa?PPnFbw|&#wVSW4tNXThYtGF#g_H9FZPioP&N6$vH_@4`mFMHy?e~8De!t(_ z%gbrk7Ap^LZ|i?Q9_Q~oDzNqBP5=FW!eW9Reg0|F!XGCjEPVO$rGJHG;`#S3iVJl( zGl|Nc4+=I-exmU;EVX>yN!~jbFM0pd-uwPaT(rd=*VNRru}n<6`Na5kf16d7zGd?( zJ>#jZGLMn=D>%dmb6hHKEm^I6IWPR)=S!a-+x;rjj`Wi-^R0ey?3}E1x#pdjvezxw z9PD&ndMx%~@X}}7|L@!0S9>Stj(6OYS>f^3Ys=O~U5~G?ovh}2$JIaf{oUQ)5A)mW zSXF(AH<+{O_P*$Ci|X8tNzS#twlem%^N$BlJpwPj+8W8u&8=^>e)V>N3*tf@=1hrN zrneqV<bC#4d&ZT?Pfkz0kns9OC<o8dSq&2kQhyX&c=~YamA{sc>y*8MClnkC&ysm| zdg0~?H(ii-B&;~d5~FQ;KZkW<8)z%)k;<b7Z~Dt|b*wpb#IERB?(O~g_wE1xJnz;k zC0cpwfO18<1JlvCho4Jd-r+p5AZfkyk5&N%nS4o?c#j2ALN9K<pSJy(ZePf;D4zHi z*X)i*Gkw~8yFSKYd;e|wn&;X-XFb!M<B=+J7^T=)!NXLuGt{W(=+_qQ#SAgWI=y<m z6OLHMwrcjUww^w9$|09g^r-Wl2dp+t<s2##$~Syl8M}Mh_LZSJJ|DOhADpqsXKmTH zN|SMA!IS+(&kt*d+ud2}*nDq6O+%#z^R|ic8&;~H(7(FTg}Lv5<xlG(m9O?ihTqL6 zt#qu?FiM!nP}I45(KNF!5#{>&7YnNVlF}SzU0d|k@{PmvtSKH9k9bqlh1Fb+n|B<0 zWXmFXx7pzH%4MOfn_;85pqjx#<-j%DgRJ3?H)P~YYVqnlUbHBw_j~V|xm@|5<;;J% zFnJshW}IMUmewqBIq66C<8zHGU07MU+n@KpnPl5`bIqT!tLX`wosMwj9sN}J`^{0d z<7L@**4(-A%XCBe&Zld$6LTf14CGkmA64Gn5l|<6oK<Yq)(I?IB<$Q~eb<@y{hIFI zDy?_*(%U~qEe<>UdDi|1#&1{InQ$s83tV!VR+dy?d^5#h$#TaQ&QoW$N^QTO`1yd& zz2-@r6Eyu@8|R^v6){2z+t}=WU0q(lwn<Of^?4j9*SF5Opm=!IBfi#Ig^!O###VWn zd^N89RdT-WqO#D6hb&QFc6$BJVca@fFuLxW+uOC-GpBOi=v;H=T>iyfwwBIEgznB! z<=9cYqKfHOrwzk#fj5?q-#y%Buq%BgL#F8FihFL4{0jN=&TX8zly%eT^zgmMt~*~d zR$801uGV|8))d8TC0-k!MPDU?MepqH^l9+9`oXL9Cen&shaAp;(^7xd1mrBN?%<s& z#eZRk_%4ab-_LdiF)!YKv|HRgV5O#xPR+lc&-bcJ)had4@;TtPYT@fIMY~0Qu=Ds< z`6=1|KARjoYtO?|=hLzoW}C;Z+L?aGEy9GoMJi8C*hFr|CX;=pvA#3%b>_TJ*!b}L zx}=riI^}cJX08d9xw3m^&*g@TvPc#A1cwlg145=7W*Hc+`nc~!R)|nrV-&}NpvNnN zHb~Y5nn}ODws!XNBdy;|GA}K;(074V$bm_0>5|fFgV_tyZ|+ZU+<eI*SL6TGi6uAh zdAj@&NYgqb9J}IZV-2&Jv9|9uYaLA$JF&v~tIf_yYqm(KN+$f+H0eyckaXuojmswr z{xQt#<hDIBU32p_gU)@)XV$F!?vUcqU=wV1F)<aTTI?`m{FW&r<Q=iudC^=S9(j-x zcS%j~^6kky6qPS-^Sdd}w))$dbI;_rZ@1#n&hypQ*LOcHb)B_eZbCy$&-8U7%#-I; z?Z1>H6nVsT%_i>CpSESJow&8_WR8a2U61md8L=WF>E}H+6!7r3)hEy1IsNmzj*!pO z%-U|B{4(XF!t2`|rY#3;ue!W=b^O($<2rNVqx%IX-kEtfZe5$QP#W)K9cN`@Yoq!d zz26m59QF#$+|<ptS{x;uML0L)+fV#o_$pY$&|N3vhlBX3OudXWlia;^Z}ZRZ+1sXf zbV=|0qSdb~HM6g7k$lf9ZKP4r0ot(g<KyE*r67fL@t6X}6DFdfq7NRNF+Tt2*X#AZ zdd5aZ$9g20AKqx&@Z@)DcwE`ax7(M7G^$xzRz5i~vGLM`dGr4L43Gc5<AaTO$puZJ zj$}xcVvby;OyfD|v#9d#37zE;xz9M1r#5)B3TyL8@FTmwVWPu_eXFgE-j+SJ6;`+T zy#HurXJ^W{U?-<T%FX9rT-oXU&@WG>A>(l`!>ub7I)W=6BzDC#UR#-YY01fDzO!fe z9NxyUE_m@XG2LvNX|`3XFR~nvIJ)IaUP!@<_`_}MbtOv{dZ;P{J#<n1Eun#IvBMG0 z2~RT*JZQ);-Eq{KF(hlx6oJ)`9<I^g(c-*uC1QKG{=OTt6jmF5c&B=|tghhfERTst z3bHsF=S`lnv~uyZ^lf^Ech7vYp6KPU<WQ#+Gmivv%SK@mi^HOYrz<XmW))=ls$6ul z(+SDiV|aAe+g|BkSejXlUWyLkphF;~u7!AUTJ(ubl{&s6q&>+}&41ob_1mni&(F+E z=DqyNXikN1U9(Q8@WBWJ4J?h76)sFESsXwA2uFwS5E5<*Y*%aW^38Ay6MyvCKk?;+ z#%n7Zx3=8gnmv8W6qU!lm#j=TEc)>G`~CN-|FO2rRtYd>`5k7F+BAth@1rlnRH^=_ zkH25OI%7}X!Tpzbr<pFFU$;vnTj}4_ylGimmVJz>dcltz3gGr*z)_9>ZU(cznmr41 zL{FE5`s#rignrkR_WpQQmy>RPa`O8<pZ#86TRZb|$N4&^>{$k<c=sZW2!ai1U|A){ z`0JwjudmBjP5&k}Jt-vXj<{uXgQnsuqbKU~YaZDZ_SGyf?N#=9!GY-lT@H?H=1G$A zSB`JG$`rXYjcKaX_a8HbB;%g)+5PsEx|ouh`t{9C<EG8?jf{*6a;3hz_SvD-2w=|D z76+!S>kjJ9<2;b0{m_%|<D8uuOLP}!zW$nBUtM%fYS}d#`>$rEla{Ory_~kkJm<uM z2Zr|lemwTK|65X5x9>U2wv3C9Cc4Wt7UVcbeEPddTYvYK9XoCm|9D_%Yy0=}`hD*T zA67nOX{wv(@JC?9i;8KpW=JZ#uiUP+yVy7HLEp5v1CD>59F6vJGV{IH<Qk9Cd6?>? z;BjB{(&9d!-LaMDk9<78XS)TziBv$Q!}7{E)AZ*0y${-9ygMkUZ(^HDgO{&|3mbdP z%F1fq-#c!$Xv$5UwR~Qcme10(H#atd`aU)#v70$t)?ew_nO||$)#6`kc)-e)yN<SN zBGotzQyZ+8rX4bVZ@iR^$?JlgbdQ&B%yrF>tUIFpNx{x*Choa;#pd%F<MR8p<!^6o z-JXB{onF<eU6Gs9TwPs*m-+lWU;i)pb?r<3)75b$j%%Y{s;a8W9b(td%*=G}7t{au zuH9Sj#WP)&FRd((dKt7#KZYq8dhmAz8#eR=!kXp|OjBJC%ndUBH}m`SXOsC$7W?|9 ziq4o_5xBC@+57U0pwCyVv;Ww=_d1)selJ_li35$yudlCvuUGZz*Mo!2o72y;i9S1L z{eH{We{VmD^1e!)Q~4`X;aUZU{GJA%&#z~dvbJ;WE`R+B;fC+MGGh6yLRY`+G02qC zG7VJiX+$j1nCcC3%EOocb??1mpV_8i%Gu9n_t<34-;kY8#ZAgU0mB!bmGDjY@4lNY zn%h_XlU*0g92Zyj^J!C4)22;E<rjmmYierpN}23<y>55YkH2L%xgy$cd{%Nv5S~6` z#*M!=Q!;I)@K<#PGp)GN5XAhfqA<#4qMw+A?xG;!%oP%H@WM?Xp5=~~>3jW?!cL$) zsOuMPS;hw1Gpv%E^}@>Z){m2NQ>Dr`F3MJEU^%1~km=?7Zpml1?9J19&rFHjFptx^ zT#>n<G%H{wrzfW@BB(tUa0wQyykhg&e$|x;|An@==N~K0dbDfBNA0`wy4p{f{J5y& z|K@_Q&<Z;iwYl!o&xddOtoGDRp<3bT3&xA`-dBv}k{OhDOKq(@(sB=+pCAc1U@qr` zpZ+PH54FC}efLMQ^=#DJ?QdEyZwov9$Z6>@?~Q7kcGkx2StPI0z_N<JapLI}UnUxF zjNaa9`6a+~?#FrO&(tw*z4>{@v&q)^+srn^_fI^nBv@jwRPFuKxV>@bJ}-M3GVT6> zm0$VfL2HV@ol^%Uj|Emj3eFK)7k|904?X`*!G8H3t7+Z~Y!(JRUc1GyQ)R0Rc#%m% zC&P^c9Lmy}5}Pxb?9;dGyf}AOPNB$3wQ^w&)0vk}9eZ-Lpza2f)>|K|e%Tv2K{qRw zny)EKy-~G)JHJhZa8|-aJ^i}RaWC)wo@z5WzHX9g%fBDfEQ_}%ZgoLk+qgks!QK#~ zNo%V<J9|B^_u71U<F|6l-fgd|k8OB%b<={tl^-M4xb&^5x_Ub~?V_}h1JgOqlp=5G z{q=Rn1BF+lZL(Q?S0}Azaj%rlb9Y^dYgv~gmf1hynX`7jx}DMOvY36H5?6I*81GGv z-g%_=Xm<hoG;`VZtYVKGg|}NSUq2FfiTC3Hr^h+cX7%zn>nfkkDW3PURqovWg@PQW zml{tqe~LS{RDAyXD~X?<^IKm{|5BZ`UVH0#u_u=f6p7a?i@o`p>DigP&nj(8pR@Mr zA?-d2*vb(wby?RrzMHRZ`y|dUtMuw#<$5<cD{$pU7CpugsX70iaDqC+SLZdDRKK*2 zJ$=jP$+Wx#QRlDI>zH>NGPY@G&ECA_W$nzLzN-UIKdmg=dcI-dWycCecW3r5f+uqJ zG*}C{zgyPF?6&=MlATEAahBUz(-+OUc;Msp#ZsGduOw~AsN9-=KYXVlx3yZmd+)2$ zG6(n{PLjBqGt;TwEYIg}!1wj57G5m2DLKl!!*tdsllNESfB(sr%Kay{wtoFHBgtL$ zwp@?;=BU41>i&kI^h;L#>_j$%|M*#6T$!MCGw@c_zP@MMbGudef39na3s_kgn-S9f zWOw%Y7mS<=jjwzeQf7s1X5ZwRo$z<ogPEeMZwFkzyhK5H$*eVJxetW6iD#Xt?4Ew6 z?AEe7ti_vdr8e=g1o2+X=~2|o<S=Z`c&dDJ`dh`@?B@Ib?zxcRQx}$(W!h@B<DZ_r zb%Nf_pSIO?b*KKHh<(#zx#ij6eM=TLuiw`1liJmF_L|M+x2N9J?AY+*^!D3nX5xBc z_pANB?LG7Re0U9CAV+y+eEq#|X>YxS;_9~Tzq)e8m5}$*JjLzs<pUK;4#zf}S+Y#4 zFHO8Y_Egc|iw3oU4}VXqQVKK$Ws{9_IzoB#z&Ti(G0~CPc+xcK^^=S*xwQGjJlecC zNAsKHg~E{gfowOAp5u<Z^latwO&wSHEaw=jAGo6qYD4Rr<hFZjX?gK&o?LL}>BNKS zmmeqly<>Xr8-8=9-t@9;C)pFsUuzN*C+AHs`<Z%}EjvTt&93QswrzRld)B6=u1$Wp zdgF#EbMF3a+ipKQdWW9&>$Z0j<eo9qW#->MuxGyYH}Q_99nAq;<~bQRYd@TfJmY>^ zSg~}2W7@_%l(xkSmLGT21G0pKw`eV64tbJ#TSPT5SMC9q-&XCHT47Fwhvu(6bVMxq z5NMT{$^zjNGM3vOuLvvgy8OUbcBk*zqPn(-+b@<G*DibNbLP?I`9eZ#?tgFV^qpn& zwev{gbJfjjx6RS9;+g)ipeoGT?DDBH<Mm%3eb1cLuWyiS%U9$Um&BeneS^_P)hBE7 zdER^soqyCaCHhZ+_)G87lb6dK*Gq3I-XHrZ^mUy00ZB>M>FqP~ciFN|_sd)O^xwa? zhu(;(&%d+R|J$Mb`tzxF35TsvHjE@F9XOM9;MsyxyeZn7Hb=w--G7qJd3|r++#g>G zOt-FaTzc&B-_!O*&n}u*IWu`IkP>V#ZJFwy@qOm8=dX2UoAu7Q9xfp!|8d&8wbOY* z6jT<zX8Fu?&gILgg}U*lW0WU^Jo!Fv&GA|Px9_>Xa{m44=l=KZn3CtizAOIGr(g5L zU+A4&WLRUr`211zXy@R^PdWE2NMBvJy+51v;04q46Lm%1Vf%Zl|5`iq`R&`$U;pZg zu1ZMJj)H~zS$XIGI0z1HSYhp;c%X;(1gF{Wm0r0k^*I`ssr#3|;=UYo^PziEQpnU( zfhUeE3KABY*xS4+Y~$W1f`1hlRRYd(G}I;jtef=fuIlN+&9mp%YE*k<Z|XgnTgvux z*W{99s}I?$kAGdHSAF*V=dZ%gwe>nfd43v&Y@Xe|{ZU@e!ke|`ul~%to_YOiOTvj` zGIRbPxvpd?aQ16{UaR)mS--=xYxS~@@!6lrbL3wsFOt0~^6Swzh^q3T@PhlbNouB{ z^&ZupTIQ=yetX*9ulCN#<G{N$tBp=(+_K7koBzMIUUtn4-o@>O!tAT>P2LpdJNx6k z4T{Y%t(~A<oE?mfU47{*H=dEO^x7MGb8dDKbNQApOnk@gnA@<u><JQi9AEKtoi+Ra zf4|=ca@pT&vi*7`IKD1dY}>JqVR|#<;GF}7CYGizv5I1)DYxF9s#e=?@NRMb_Dwe& zmsP$vcG<f0UC@rpd4H#Ks2O%S=IZX-Q!e;ZA>{b2`)57Zm(73Yw)9x+-9)dmo8PZb z-uCtUo{Ys;LS8<cV=ePSiZeu(X@i%Img&!*S3mYP$ExOBT*Rtn8v6X*ktv8Q7RRw8 zC~MiCANOzGe{%VJN$}FN3om80omWn*{p5DLSmt@<%ZF))Uz|D!T9qp^|I3n_^Gak= z?pPnW>Hn_Vqvp1b7h7_|_WfmVZ!LE3pEfmAM0~oOT};W76M;XfUtE}ITm9|ry}jkn z&)r=ezP@yR-WSlC-Ci|;7prev{aVwjmvhDj-YRNf$>Er=(!XF=(6lef@z<wy8trxC zjfyE+G<jcL!OL2o-4`dx?+nf`zq;x~;L48ybG~fWE4i7&Kd-r3Q(IeGQ?v2?>3<&% z^9L{Yt9?2(Jnh^Z%iLRA#N#R+o;AP!XJQ_=xL(Y@J6}HD?@(u9b^+xlp$%(-gLC~u z4j($KgEUI6V8g`OnbIj`G^zLP@%cVdz3o04uh|bz-`V-7_=mF8nbONfZKmG^68=;l zyy^e$RL7aRsO?oYYl5Apo>(5YBl7F{Yb!a6zg@n!xBB~g{fIpkAD7Rsn>A_DqMyPK z_2=YVSa2|R``u|1CvGfydg{!XGurESDVds@YHEJUnrN*AiZwwdi{C4|L`2ktkvmEX zER1GPOupt{H5GffDs%3vl?K0G{$9)ZB$ziv<@bXH=L~236}eMz>@150(~>WCiWdTG zJ{*0w>rrsP)%C|fM;G|)4Ek)p?8=Y%Rd%0VUwLzLbNcOVZ;#7W=j^TedSIWLq2kUh zQzXhlLqeWBdnRXBBk{~_Yxebbf4Fza*8eGd7u3IQq64p5z~QO0q+&kJKt63KM4Rcu zQVxBuvq%2defs<U%jX#`t120$%(}d2>!J;lXZq%)&dLgH;WKL9JYUAa$SU#ll>?UQ zo9Bz^#u?qrYyP}V@bKK=sHl09=4{J<-{>p7{mHW@>8ZIlb`)OTRr)&7zG#VtrsmGF zx3_kezt^*iiVBpo__%ZOIqUqOb%)Q~v?>#AI^1zV5-AbEnyyFYFhqOJID4Yw-WPRs z;kgcr9cQYg{9Ftvh+15tcFLZ4cY90W;r(s=+us%3GfU#wv}1>bzW(|Z94<3eBDS$j zo7m8CU;!K71EDo0Jlo73F!W8Hv`6LM%K2v|o}SiwrsS2>U8Gb4?FCP8*dw%{jV(uI z^+eAA!FvIVJ9Pp=vi5vv(VFKmU8L{Fv+tQtQ}-#m_o=9>PoHvN%W@-&hWZEkHS<}& zNL|Q#b!{#CGV_EmVT*5fJe%Eh<Ly?3Ix!ipVSFv2rgITCM9eeg=9LNi54Q#WKP*;I ze^@NQy-LIALC5C<4B+MuBd3g2$%_XEn>jRAu?Q4}eB5+E(8#Heu~EWB@Vu$zyvt(E zi#R1+eIEo1f0Ed=;2@*yVKtRWvLy{2y=j4q3z_b(l@7_eBc%Lp<{QS)JKfJ0)G2sm zxF6u0apr*df&**PUSC_g;7UW;<jIpK&zQlX?zm=U@N&K${}(FGw{?r3tm(YF%lFL3 z-_v`~$X?639Pv%^-kiqG?7|;YKdk8c{Ic_>thw%mkmF@$CZ{*wI?J@&dHHwQH5;3k zJA8;VSTmJFH9cv2M>EtX;N}aWoOEKjp+5gad{UV3Oozb5ojmTl0|HhSo)4>8a69p< zT}Va2fw}Ult>+|ewEK8Oc-j6Bn>TFOuxAewPu77Zw!ZTgk9)4IjozMdaZ&JcKLgdS zy2HEIY}xYUKqGVCq<On7y=UK>p6R{zz=gEnytLbWPk1)=yfn^@nm=J-iS!MAmN{q2 z?ml6xXiV7cD<gZW_{4>aj9Ai~%XEgBzg*VvCOn%wIn~BVh0S!<i)msK4zAWsuf*-v zKB_67v3vXR??L4+UvE4v*PQ%y{rTkwug`Uu<>~L=u9}%}DY&lAu4dZr?f2_`e?D)Y zxKhes1*86P`T9TS=33A7T6krLTaLonFEichcxD`4W@34!`DEm~Wl!(fEYb%BlS2!K zgR|Je2?jG7SOkiAwAh{8P8cc(G;2KCsdl{hR#Je8;^GyYHCaw_&SEBK${uZ=|0BqB zVeO4w4!y^eEvDZKSXs!~W2J7Say4sCg`SpG)?MaG9sTc(Zkx;B&pXyDeUQz})Zjg* zn(fjhOB&pYzhnd+ZsSdOCG4To&L_`f=*IY2vV%=0V_N^L1+NTuPHvm{G|ORqW2SfH z?3?V1W+dM@@yeL*$!t63Hof__=U*OQI;X(N95s%?xkx~jspOxq<T16X+5cOle5Y_7 zGm8kx+H;{SJNU6pUsF@ln>RTT^U^La^EJ4>(z%`Q?d|RFZ){B7UH10DhaHdmZtpIC z|LyJV@9&yfTg!jfG;W=BW@2(;qU5G4`Omh@>5Q!TB^>+9eDhkjYf@^P7pC#gakYED z#JWsx@0Xco`xkShiQKwwp`V0hZ*PYoqg~rlrQXXYC6ziAO{Km)%>DDNjODb*R4ILf zx!R_0Z<YVJ0xr_jmmjdYQ#XTwRh#Sm&CS(!cWs?*miy;n`}^>9e=6VJ+PdJ}lBLT{ zvhF-+5%yaVzrU`qFmS?^&6a*ooNs^Fn``;A^G{m%kx;3Yi-xg#+G>|Z*R8%?rO-Un zKIHWcvHj2AE>&9y>TVxWXqa{;@j&q_QAKN2(KhQA88(~cae|wIgA#Xir=R#ZXPdzU z_cPhxjQ(PYQ-^Bn%G}<~XBWCX)-fn~+Qgt`s+Zuo{7%-HgKw6{*;e04-hQz1c89b{ z#s{;zaaAvue!pK||L)FC?`b+eUo7r_@MG`yd)3L$UfciqaCn+-blBRcufN~_+?sXu z)1+S<KO+r#>VH`;TyJ*&;GrXeU1H5BlV^~LSH|fqKYq#fiG569;(g=z$U#|ZI_raT zmRhFoDjKslEi(B1YfrG^C07xH)D6YY&m}|#Z;yL>MCI&reSNE{9VZQY`|Ka?XzP7t zo_&ocZ1u_W=WUCgT<BDv$MO354i2kJex;{n>|dEoZ0mlg$f)w5fnlF~F@t7|I)`OU z6W<@@6!r;+N}DDeR()}x-p0A_`4&qD=~8vmMt|QE$tSuF?Z3pEe8VLo%HlzQ*%Ak4 z!G&(ZlgfVZ32nHxt7*o?Enk<dxjNbY=83S5$`3F92k(VW^BR8VEf-yO^5engc88|M z^EQII8j6hjuJWF~*5JS_X0mkY(tx;=Cp(`$eflACMb+0=t-^x8T$xO}8eYyl&;wbs z!+BsXx4pL2ywqKbL)i<mr%w-`5<a0?c)OSSgh_L@q`%)6^>StDt1G<Q13sz6*X%ZX ze7id8RE(}n-0J^4KT3a#FAc6{KfC&B{?f&rF-$QIeZ1{AjtE&c_&F6Z-t;VZajefF z#$jFG*6>zY@d?aV>X&DBM@T;PdwH+Ur+ue;{Jt%d-g|t~xouE)xV-#zzxiyD&|JHT zXBSUq>W;826pC~(pS*nExwbjW{^|C(h1##FKYgxb_osO;gO8n$-5C2h+h7sP+-L7r z-`@VZ#O>j^oR_LQSb2-vv@f=V7UkK5FAHp&U2<${w9#w!6p!bdf5$A{S63U5@ajPP z4P&EMW;qe^|IG64Y$$vCg^kzffqG2djSY&YOxCSfl&m7a%TyVx$Fy`o*sl+*0#;u{ zF9qw*dsGwoE@R1xW9^)O)ioyW-ZxD_?B3L<)xV$Es3#oIFaP<K<I+}L+g%TT@;;vP zQ}m(#OTMoMH)L0B@DmCwy>o%<d^u}{j&T5U#^H+dg{<GY_OT`KbgBKB_2#AAddC}) zn|;bZb$n?#o&A>YmA~hVe;WNRK9#|F>PBbxMyDK8{3Ezz@q)@T`_eP^##{b!Z8zM$ zyLv()+s22FKUB)LIQ*zAnbGEPrS}v+^S+-hK8!0IdkaGow=7=y=hDU{3{$1_TMvn6 ze0+4Zd%pU-ibLJzUz%AaIP`Fw`O)<CK+?Y0l7~MH`;Ffzzp;AqjrZ{~gIu-zPxa=1 z7Oy_6vVG5U>9nxP+f$pbE##FsY0T%`a6S0`G&x;0A^+>^&Zi%AEL_>{Aagt{ldse5 zX8i9tX#(HQZ#}R5lyAkqEuZ)O3Xv|_{q1CU-xjz2uM2-A^YAPa$}Z|X`0r~6-~1Tf zL*|*<&&qDh5s&v>l(8c7QygcW!^<CRzpEZ)<o?-vWtLkT|E~Iat!q2#*I4wKHypnA zz3=+F`7hS?_F2iVKc5{OclcCt%O!z4%cCdkBM&x9${aAyIr2vRN=A~){aTY1S9YYk zP4)OC`Ab75BzgLr<8sw!ytOWZW|#~W3x2<KzV{=>{E<Tb8Ijdod8vo}%JzH2NbL*Q zcVeoT{HxWm>}d+`_kAw&^5Xi_>#6tHSjde3>Xxl<>wCYw3_r3X^I`Y*@*U5l>LT^U zvzS?D+gyJ5PxMXt_mi{O9&`P$eC(yMe%<vVZRxx3U4xh(xt{#PcJsz;hfn1{II;?j zlN3#-1jKLr#HGyCuYV)##LoEIMZNbI^k-G=KhwXTiCb-!__uEn5_1nq&NA&v>bltb zurBfHKDA5R)}D-#YuNYf-apy8q^~pc;`;^8a<}IE$#h&U&X}70OLD`a(4St}vyIbD zBiAq8vXG-`%GE60@>6fWua79Kch59P+BMhrtxsv5wnF|k)0tfNQ+AhVond=)OmL6n zm1v&Vz48yIUHGTBx%bGOGRZ6^^J4A_bKO6Gde>c#Nt>0+!o+KQ=}NxdHHll{#$T`T z#T;*mzqjs?i-glu>Gu<kHHKb1b9&v+<88W%ymi{G{wJPqJsX=AY?b)bFhz>#i)7CH zFu`?O0y+C6Wdb(3tuA$Yem~er#CDy#@YJLNF%2!#a~6`Zo&9o0Jytr-meOx+shi*+ z!g1iTPu-_^vJ>WI{{OeVG34;Pl7dx7?|S!76PZ|h_{X|iT^G0eo_wmeRa92aCTf%1 zxh8=RmGuRmZ@!(i?a@E+{oj5U$M4$lzh~WJbAkT({Ed^H)t=9I6jcB0Ny`53_jWJ1 zav<J<@6o1RaZERIZ1sZ|9_SQPmdmpLb##4k{IB<IoXWp9z2<)Rs-XV&dC#3|<mZ<@ zjpe>#>>4S&>rxZz^qv3i1wTl?&iQ(w!o9r?Kko9dx_7C)e&wHEuNlti`)g|m&tI0+ zrnkD*m>GLK+;{Q6S+8tQvg1sq{>4I@+vog#x?J08OJ1U%ddRJ_e>GL-nQC<8zwBj5 zx9X`BoWaa8S$b~_i>J20YH9B)r)ndgX0We1Syz89eEyI1?{04j|F5WR_jA%VCClJl z@eh|@mH4K)*T-J>MNzzz(XPYkS3ai8nmwOY7o|1p)}Bzyo`d<){-!^l#+7YfzBFvR zjA8S332*l&QF+g^;;KX6FlH6K*Unph$UL+3r(1UTX~Fv+o;kg?N=#Y*Vp|L2eDRPZ zVPVVm!;5EJt?|~3K4tjf?v&k@t6yKOjbzSzVYDUVZr#ze9TSh9Ju2mVJ1cF+R!(ha zS!3JNDZ76e75)_1W3_0-{(paZZ_7(LUcR`flwGR$z*?c7EERFH<+`;Rr(IL`j;Q={ zFTEpgDeq0u4>wLOU0r^l?)~HI_rL$(J;?0XdrbMsiAv|C$4tF{zFjWy(qvYfndv%i zPFsb>8A3a@{C{h_?}t;rP~49z>!yb74r@15EAC$R=&aHWm)Gq_l=s-MZ`VFnq9C_k zCHv;O8$vmU4y()8^BD2oeqgce=31tS6NPrJdi>%Wf2V8H=WRJ}tP({`bMq^2n#SJ$ zk+iT#&86+YQnSZeK?^dsTKB~<vOd1EUaI7J_OD5jp}D(GF$aB^c3?F_ocGt%OtBVE zxtlZhoSbfu7qHa)0#|NPvTEm+R91!H`5ALx-u=H#bp9E2HN%3o@Z@V*67^B9f=-*g z^}M>5JIA@ozjo*Lm&+&53Y)97Hn+}~cjHR6+xO;Oi&`r#xlPn;O11yeE}#GU9>E4q z8|_nlk4%kxoPOu>rcF^!YNtN`O|AVldF7O~x>MVCpFHAb)@If_@8h*F+o<`eS-ZK8 zUx+!t%;)2^e@0<+{l<BQTTZTFE!%yxssHZhTVKwYs^0!4_hpW|(2nJH&Z(hM+gmeA z_!nOf?2qNI{*Vx`n3KQwNX_D)$E-_JdDZkAExtcKxQs2%bovw#dE2TjJ7)Z8^>?@I z*K0X_$MgAIbIm2Zsu2l(R{DyGH<<cAZi<+5?5Uy9Bi&VjIug?+Jm3hEkaSpI=(wQ# zzoPMdg-={BEB$t^xI9Djj8)r=GdphX@a27N>c{)zY{$>|+OMbewU-7lA1^rOYjgFW z?v}$}dYAsaRxL8)B+pCvg`w;Y@f+Tsb!SNlVdmFw{Wc-7<4{ZU1L=}w)^$atVw+u? z9&Nb&Y1@r6vfWw}R<Ox&b-w-TU^;Wfc5SzErJ(TtGjDOFGKD<IIJ0wiiB_i1uX;x& z#=XbBTn;Xpx%|gr2^-^k*_$+%D`uC5oOCh$V6ck$v(z5nYgPMWO1^NbDRt<UznXCI zt^NNzmf0F2XYaIn%+`E=EofWj$~*UcT~ZA9Et>ez&FKA?s}~Qg-(TTe$>j9wsffw$ zrgbrPX6IikI56F9e)#la@_fZftm5BfUnn%lf10-aWpSK9yU&7y{??WWlFI5Uu2e9} zKECO{E+>mm-mYfB0)~HKAwQm6U-{tkJ$AkWFPZkAKWY+^o*~Aw`La@xI<MT-!hQ8$ z(wf%@hejTma_7Vm*DYeZSTD>uQhLx~*K)gGKA+FOx5(NcoOoI?rzG?xi%xKiN7sWC z{TUYyZQpaY<_)Lutc294vRE&!Q;MQeN9Jf6__0mbKDK9v!IFck@BhCRZ9KV0dQRbk z^;MRN37W;u+m3XKmFsKHy5;@g+jfS+#4j!ex$QxXj309UR!=mZU*r1r;7LirSvop@ z9X_63yy;_hu<;SiX)4aX9AXtQQzzLzxu<+QJK2hFdTHsy*n%};ttX1EXa5SgUCo_X z=RQH&eF~F%2y^Cb=W~BwT^8M58&<QV<K6tbeoJPFP3OH(VX78!*8Z#4IqkrAPXtrm zrM}m6m7e!{*4EUOAD34ewZw92oeiJ5a?7^z3EOAotnCdre|GDvuxFyPKYMgWbS-$c zMO38OclI3XpObcHoc5MtQVQK7kjtv`!FbtU@!$;O+-AK^x``j2x5|Y#Y&(4`Xl9<? z(>$f%-UoTAiL1U}xvqTR%;$r<UB6BBHoJPPV)^C;I;B1Kr+GFCEZ^(qccUWpfA3>= z!!05;Vi_(6JHqtlA2^?_dbX+IudPIxob4CMoLlWDuH6z?xbu}@c!>@7w+T|cs|_v| z@_-f?$r+t_*Bs7X(tq~Zon_BXJUqO+?5&@-udlCX<J3hrbon}cynKB8{o4=Ev0=Yv z&{ynwHtm<+_QL%Mhct2@y|C+Z?h0<_Zu@%mnQ)t>@aA7pTcswX{wV#wY2r*3e(q-m z->)1Gc3Jq+xN4DER#W)pMHWw+PHs|UU_1UNXZ_0f1Bz#oR|Wt6W_d31Yu(QiRU51; z9<RFfvh>Bh<Sd89t^9U#a_`P{4^@u+Hg8kip<}B#Zd^WA@*_t};`Wz$pCa4YttJ{f zo0oI^s@1rwuQ|&*q0{Yoo%5k>Y;u>ppIT>FKDu4{*!;w<s;OnE`q_)3?)^>peR284 zQ!+C)_-*oAelg^+%Po=Ad*Q`fIF*+MM!eU4$+BXaa@_N)5-aZQz3}C7)4EjYUK5u9 z7TISpe~)!^_uBhv&)c;kEOgVQThH`Ee77lWU41p+YQC~>dH+h?RO{wkR`z?JHZe;7 z-rOEF*Ka;g#oxTZ_hNocFAo~uT)JEA=A9pUSt%`ZZ*7U4HtkeN@yc@H{n43=!akU7 z@OxXBdrjPbqxt78_X3thOD{Wn>x$t=oy||=W|Y6RYB)0|CHmeU|L`sOZ~wNLy9+ql zeN#=pe#nFAv;OAlO)ggbUadTL(pNC)Dy}egR`caqcX3YCv<5d5!8~UraT&=o?s{8Z z$p^VzzBb!@%}l#;?$fVqlh+4-o-<`@)~%lJ$L_GNULSt0Y|D#)xNmJ=s*bCusy3T2 z>)%zB4LI`jsi=YEsy$0IbdT11d4GC!ua5cU(yPlh{>uzWVw6of$6%qR?yjqz-gYkC zo;`c>4kO2O{+0HTJ05&pS!Vg**tL&3xgQd86OIQiUUAHsS@qxtk1ct^2ba4wFV*vm zS!VLVVuuHdV#C|MgS#I!vRu!fx5I~-J<zqY-_@h`jNFNJpL_)x=9k@M$zF7Jap-rg zkh|-37oJ)vZ)zR(gKZ&K!m$&9hue52r9U{=I)7Qa<eiJFn0IXTK7H!+sZ-fzCn`?X zRz<z)+y8If{J`yDZ>=IU0=1^jaEdco^iKRQKfA;!7tQ960y#d4$DP}>m3cWV*{(d6 zEK<4rY{Ak~v#Sc9>+*+2WwUA4Y&&~P)k(zo@0QhEq4WHEK1(#;KItf;zu#&yuchzb z=xgP?>&|U>u-xwNN7=toTVEDbJv^7gF1Tp2mqLS?>AHoR`7drhyEWZkZqDs1Dk@9G z-u%u!|9<u9{x`QaE0-U?##{ev{eR>9yYWA>%bu=}+WhD9ktbUcJWt42mc965d4?h7 z;GCDv>|Yo!E)|`5Oyt74BYGAQ-}l`<P`B$*V(I3ZE6W(Kd`bCt;pLStD#cHX@}96? zZat%>am}RRm*SepKQ1peR-Biy%uX_&knktr?Ii1-6aHr|r9Q|p68Gd6$cf)&sX67$ zHreU<Mz@q17d%}Y6{+qX=&h_)ba6uN9;;5lyGK+TXGm>JN^#_LU`@=Inh^Yj;|Rm2 zL%XxDu66#t`p<m7Y1e*TJRN+eRfhRQ;q>P-)HxK7GgR6*^V#RFi&`aCzW3joHtpB< zbeGj0ZP+Jt^pO6&9bXy0T~yy+|1h?6{jCpgOg<Vrc&##<AMw<1+ffOtZ4P&zOc0)X z;PL6lc9oTPj(?b%2ig-N7C1*-z*BBb@Zlq~9O}Q?{5T~gdwWmW;WW`GuOuO#daczO zx>~kT9IvnZnEblLVmE)yRkMn=-#ib3&Nf*_ru-5TjQwG<>`Wc=Zca({m@Fk9-OaM% zUNiPFN=uwd$u-MRx@Pj^-0a+0F`{>No9)%-mf^{FC<tV_V(fHeo&%fFE^W#4m6QK1 z`sU!n5Tx#Ics1jI%+6^BPcBYbT<~#WJ$OjcRPjP~(Zz*_bLM9mx2~G?L})W;3h1iZ zgH21bDz8sk<UCn<>$1JpB@?ck++_IH^y`I(OUqsJo&_&h5~4Og;_1a$!y~I--*L6y z`|G~H@X7XFGmkp<oZ)*k)qT%$?x|Axsv^Jh?Kir%GXK5$dBTL6gz&nX6YqBZ>uPD4 z@?=ZZ)>o!0Z-4l)>#NifwV#`>>wIkABcB*MRcFI0#)WD-LVLvX82^5l=^pd7Amz!T zHqlGgrt1Wy%}WcXGb+8?!mO>Bxo30E6V9$v%u3Tddl*l8OFVp%7j<uAt^v1lxu@gx zsa_1z7>?=MaTp{^1xarRSQMtjVVRZjwE@R?``=G5wwd#6UZj`dc`TwtV)lU}QX*M* zl6p4&_6o`pvu7xNm7qUoo9QvhK9`b!oj>I|FF3V7{BzsCF21t)ag@q3^GiaL|LmKz zX>qGNSGnlBznecCc=zbiCox&Qk^=Xpmp<3#Bs#573@-nXqhgQ}>G#aJ^<KyFo1Z&k zd+J<jCJHcRiY4t5DNOD<IE&3=apugp==VNafqOnTObvN?Q7~Kba`>7hjT3WEoeZ@q z_C6o+Zb{-JYkvdtE-&kXiQP5}cP{Myq24gd;RIj&8<`U~{a4I$<+pO`lZ%!#!amNt zDpoFX{>?2Oy}9mECQ>^;D0LWzEN1LfYvZmwQvcsBE;vHd>+Ge&+v}v(JIE~6{$^&{ zH)&~R=F6?$|IdA_t@j~xin_`*ua$Qf<TVSwlCSn^R#U&`<$wDA4`rVYE=iGzS<AAM zf1cV^yKLf0+ni?s$A7w2izwwy`00|eRqXKei5-rdld}%|K5#S1P<&I;`n9gyYx*xw z)c<Kz5$xXW+iS|3A}KXZ>l5SK80+^XXJreD?k(||$@*y43d7oE2eT|pLd!0`Y&kGj zOyPaop3a`sZC8(+GTqR_H``m(XC7Ci7?zX05|jjjmN7Q6*)3T3OX>7lHMOR*jM8Tw zi9Ki0dU)G^>G!Qxe*}+D`g7t?PvY6fb0*HR`SC6I+p(?2`%g87zb^O}&mX%wZta(R zd&eX#tyA^qBl%zbe0Z2O^{BhIcmK4hQ>KK6Tsga<{?W<Y*{1oz(zn{ydmL3e^`pnN zj!oNca`@yR(TVx?xp#JKR5M)7RB8M1h;aFv8-c7sQBx;(Oh^u>;*eB4-r&HqsN?x8 zne&<5ju%^c7O8z$=~p?&{D1ThrtP^KXW7MS*_VQ*q0@Y;6JNfHt@*U$nS4!V+Usv~ zKi>9NeBXDfNT7Hr+cR5DHq+3Mm6gSI8m1|`KOf9aT5#on)1h<f4l7@NocOi*Z)fL| z=(~pZUzBfnxH@p&wARkbti{5LCroNL|0qAWSeUu()f@+xDYHHm{c+h|{3NiPGq!ip zqD5AvuUu@GNy#ue^*KINPHB;0W-{zhnwMQ<vs{<WRoJL&)`8`-o_;(!ec5d-(^Wpq zPwjG#Ri`aYJFAzK@9=N`&T{XNET?<2Q(q_?1Es99ZBw(NUX_MVuX9mz2n}5NOn2cG zp6<?|;Lfkii`|&6wt<|`%+4PstuR9nR9eBd5H_yzU{IN1_?>sVUjx^=D|>9;9?ie@ zW=eMAoh!RtUzcSB3-5m_AH1~feD$upsKxu@jZe>7wdzXET<2Dg+!xG+xxvEwzw!mQ zu_XB^D0%sw3GNkaQ((9i`S;gX!Qc>1g(oW>r8eU5p4HRBKiumZf|!qHy}I8PkhQEi zXmfWs+kW{ev%*$fY1w10b>5LDTqN!fL+rd|$!~Y-t=#j+O)YI-OxYT-q)%pFHH{*V z2EgV(6%hOO7rYXlAb+g$s>8Nd%B%Ot9PwHC@P4&d-IJqV#HLQa%W?F~eoK+nqMH-v z&f-v&0S(?Sn8dl}Z_$ri`uXu+Kc3CD+nsv3$$I-*iPi5c@Av5ZD2`NB7hH_A-jqRT zMH$PB?>mqBEtwV3o3>i^<c$;!H!t6pwJDWSzPqjVdey!>xsB&W`-_)yi%<2MnQq)E zX&|N|z|6FAYt3B!yxZ^ooM}@x)6vz}zOmola`8*e*!4-(-JjS0E<P)5=)vaJ2w(gJ zT0gRw<G>BkeHVSdv241&Vo&(dGsj$3KKwjy%N6ta-fO!i=wynSnHsLTpAj6ao5h>P z#2LU;clP<`>#JtpTl4ngT)nK?toCEpW@|2()t&gZq*nT&)+EHL?<AjwuiKL^yzX-p zx#$qy`!nRC(8qvN25qd3Zs+(qF9uw5cDl%|D$p(3`qSx9V`uon(pKYH+s@tG@@?<Y zpE~B-?^I8nr5ka$Q};;kR&Gv(#tLNtb#1QvsG{`On`i&N`CV|O+UMJgc;`mT&Ym-6 z#uS%%GqN|8&#${0{n1T7?{adKY(UwzC7MYmjF<hJdA04L6w_kH=gg8ev-DWG4odl* zI5Oi=>FYSz7K`oITux;D-Tw61sw27Y)mnNcq&6SmbGl}-ef$3C?^CbFxV$e+j`f{p z7&u?NKxRoU|2(tja&ve0$nj>MFm3c-AlmwPvrE(TecMG_@6R^;*#33*QTJV2rS&XL zH^0qnwceZ@dD%cuoaMpoPZ#fby*qoSJZQt;2iZR_`Z+H-w7xuMb?onczd3suzlo>k z8$4aTV8Mf(&*S?-VvOb-m#@E*J3~}d^ypFd?yjyrIn{b^Z|}Qp0vBq}9m%_^_N;}E z@6N&F8=tk8y}0P=a(KRd$Yq(Qr;?MDU##U)HEr72=Mu1Nw`gAIj>M<O>Z0CfTy<0l zdU$_BM#Rg1g{r?_?3@0^zP{w~!%*e!@cXat8%TYNx8G~2BzSd#!-9sK*<ROjR`sSY zFxJw@PR{0S+}ZxQF)HoyQU^r~&f`%X2Osmkw5v#Bx+>Ws^QZ95sw09$E?IWhQi5GK z<@T*|EEc@UKJ(U;o7bFQCm#xBnp1v#?(UMQ4F<B;S?sRaoSG$|w)aN$bmwylwc%z) zQ)6#_6TiF1D*gTxfAhn3KQH@kcyCo8a%|g1f16`3COGJ%*)QEU;c~|A!uroyYHE$9 zyfLR%WOZNP;JP_+<*XOE-D3JPb+)zfN}o!$khi&XxSd~KL!)88sHokB+~hvTm6inz ze&RorEjB8ZU#dJ*@otaj&SfD_{iJMGJ+Arx;_L&r{akV9W-qCpysg|T;LDv2tO9c; ze^~zY;uhA!6&6>f|4l1P?khOQ@c&QWVz%f_iCn%c%0(*8Pd&{nu0Ni@u*P$1OTy&r zqr4l=%z37<^5W`Q5=Apu{?x^@-aY-dVDcfphf}BjezHV;&fh1J8;X?$Z)?oiAH@Cc zQmE0Kh^H&^4=F#DQ)Fh`DkHdQt5<?AU(xJ@;)hFk3xitc>?jnP&ThU&V5Xq&f_A2u zp!J*Pf9iRuo*n8G$15_oUB~6Bx9@{w-GH!;PwT%P2$A=BclA>G(qyi)*Y+02Kb&qM zd3e%G|CF7fmVP|;5j=`sEJ+KmxTw4|C~kZ!$f>)=VTI4(Y3KUxZOeSzR?jP+clTk< z1do0hyFJ<0-)*^a<;oP19n3Rh*xyYS625%-@<Rjl^ExXl&O5zRn~?M(P1I7%M`Ee3 z46hN_j8!~uEp96`eu;Lo)!b%zWoFiLW~MVuiEGpNpDeTfY@KJM8qHsSaKk<+U$=8d z*6d^4BDH$<nTa}rCSRSm=DjuAYPVQDYq1)OSapZek;R|%rDu9x+LOT7J<ILil)z_< zE4`M)KiKHG%9N#g)g`meV=_i7?{SOPy3J*{(<b^<;j%z4+YzZ7il-hKT}bcf;|dR4 z$+@3r4*w#XBTvl=%y<%_Rr@?`o|x>Iz9Q{-?gNgS&Oen>*v{&*hp)KH7N?uN>F~Al zy4vBa4-am<qPb+s;(3XTMho4qR^9NATz_SC*n7DkQTw=6jPkdII3xLezaC697IKVF zyw14jyvOY36?|!j{j}H?gz_$R6U}(!xW4ma*P(N-Gm{qmf3fgx{olXe@9!>?w}_~C z@j>v$!}+!BeE;?qU!NCSzf|>7egW&P4#)NoYloQzH@8W&PO!V&;mUo}==MPu_0njA z^s4QRe^<;}nEBSN|E)v_6X%p!eYuq!RX%rC%Gt^A$~sJ*cr!m?`<k;muN-NU-Z<gS zfrVFlg_7SbS-y;4*82;;AVbU(Ip4}tvt}q4omuzd<*B<{VwPQ-B-?jfPx6{TQ@~Z` zut~4>6fHQtL-B#~GLw)s3$2%|-mzrS79O9RKTiwpJ+}|qpqnQY{Z&Y4)9lpQs#mAK zRGod*wwU4h)A-6`*EVi7mzP<s$*uTR_W8T3g$Wj}-4mKcxSXbio~}Hb5;teJ`-xDF zO{>CKv@G&{y)1eoT>h}tN3_&TaZ%y@DB}_OBsuGL<k^(-RXaBtuR0y^i)-_dpX$4w zZfP@Uc77kI7U1dSd;a;28jbUx=V@I(!uHH|VwYUKRf<zk*1>)Izx~;_>(7aGw$?@E zId?y#|NCYC`P$#9`_sbztuj4r@9*Qs9k$rWy-(JvmT$B6!$V9rwoS<NIoK0c^!)6# zC3?<#p5>jp)GGDkZu+en-3fcUJ<fd!T>E9|2}hw<#tARJ>`PLbqIve&hnr79o!92K zzVkCJ&selYZY}sMF2_{9xP7_A{|<&XjEsD?on0wM)3gu1(OlfIxbf<_8@@W;2{I<# zk`Fu1PUvA!lvoiYa>~ZY+iuYvzl0A9Ic6Mt``}JhTPx#sp%um<%M{stR$4{{#l=Jg zM!nPjyxcUu_Sr2~{`M|`^|ysPJj&y_w6_(m2#<WOv*UM#_NouT-4mRrX*%(BYSgfE zSk|;DI&;WxGUdviA($ED^z7&phpRWAD&G!OP|Qt9@pE4FcHN`i-sC63(&wfMaL@mK z<ZRX=Yv(0Go5JrdTBEX5tw<s{Kgrot>X+iL6?!3yGuyfN`F4CxE^Rk<bZcN)wSLXT zjc2pXbHWxbRZ%<mW%;JAON%ZoZcTB0_{2)~+&gAt?WWD@Oq^4*#Lk>lx;(u@<Ir+L zL1#Y2#~O_nGQHGP4+*iKxo+ssZ?x0!d>zx#)^plY2JU(>kGEV)>6^o9yfBAF$eUr8 zBkx|8WBNz5*!dEQrUX7xoPJb9<*<#mSwB~h=bMTrO2$VfwfmoLii|tmJWE8<Nx(B? zWsy)@WSY@Rzl95SzYv<BT-Kp>!O)v==6w~DS&Q4d_}^OdsQ1gP)mVMO>r{>CN_Cm? zV;XZ9p03?uQ~uqy`pdL)5B9C;G~9dExU&59yvpx$p5CZ-IdP7&LQnR2phfx1ZE3qo z`%Q0tbL-pwOevss;?da7sb*<jULTwa>->-2NacOLSnAx2o{Svc+=!P)E=}M5>wph$ zLMP9^wRuyr_7wI^UH>G)RV2(Np;ox2RjN#MPOE5d@_EC}%POmD^s^VOdF*i4*XdJZ z?9a^1m0N@Q{XIN9{Z_MEb8znabZOJ1!#A_1&8c+!FR+uv_o?QlsMB-SG%h~Kr*dSI znZeZ;E6db&i{9pNu$8R1*HXzWYb?gs>0_7>acB<f<zF9mhBY=REDG9v@r%}sIT^Q# zq}#iscX;t;6@5uKDYJ}`?XmdpJq;<Q(js&1b_EOU_;v2&Rkx-b<4M05&!&Al5_#Dp z%1!U|#dFP5tB$>Dl$`8%{<DCIP@2N3Q#!`&o~6CgwiPN57OnRT6H$B3{=4?p{F~ON zw6|>f)N+hBXwsxfUEa0(jN)wrVw%_g;oZ9W>avY##(Mpl>(lOC;oF#1#D8;&?(&ky zPi&WGeS34n)<q@W)vEL26N{9>miO~o9~kIwd+B&WP3M}E<B5pLviFj%?%uf}*M4nz z`$|vF$jYS02WC}Vmi(&jJ;_G+(@WvmIxeQuvJM=NYVzwi`EQ=*KF)XM)Al(%Y0?W~ zF5>-v-*etY-=~5K-RHvM-mFV5+p(zNi^}YtWotigTl4!%^}enn2Oj>tVxy7@K4Sp1 z_++kOH~Wtpm#>C@)=ya}4muL1`rS_TfFJJNe9xahogyNBb#3tOEl)fmKVH1FY4KCl zr3UZ3J^a>QUy!-jjd%83sie>}2{ykQR}5F*&BzKpbp2xMPTQIaj`_t>YtA-hKiQsI zCFnhKiqrw#;xp&J&E?x>{APL8$p<}c4nh~pBxeVv>|Ny{S#V;RoaW;2GQKx4JGxSy zx3Oi*ynFTWMyhXraK)K9COL8YGfj-ca$TRRDPPj@JiE1RLF5WO2{WI?-b|XD+mtx> zp9=jg;IsBPbU{opZ@J!|H7_crz3dB<b$N0v?)z0)U;kXL)$E7=9iL|ZO)R7#qB!Vs zPmk5g4|ncNTu?h{N$lR*^6#_lI3ko*T+ztjle3A~U-vgFzFOP7nZuIp502rOxt~Bg z=OXrBxw60Y;)<wiu*EI>_vd{1ysY+(x(7q}-0N#xXZy8UZ*~sjFA30OS#{%$`p>QJ zA8c4;rP?*KccbmSZCk$F`u+dhM^W(uuf#b!w+3aIuekl7<=63fmlmAt+<NKqC-Z+C z!i$`iNv2t*`d)vbw0pzE)c6D~!N@$;YpVmrk{e4yre*)Sq}#?{+T3{J)6LIkzFBOD zIeTHk#$t9A!JJ&N-KB9;KD?B&$oe$Hg^9COTh@K6lJ}{II}R#Oj2}Jv9HQelY2ks> zOu_=p>6cs6JM3H?Qnp<^^2kbHaptxu=X`f<S34}##C!Ej*_@U*2E|FQM2vQI%P@*> zJ8STpGfYHG`^uDQzx$?zh{$N!Mscz4b33~4;O}nX$*)<wrDhtWM~Q0|Sst8#(xqIb z%vc*3V8yt~Ds5xb)0JH}ugth{{N53^oUBjV*MN@NS#fj5|5w)f;gdxiXU}r&o_?cl z!tU7Le0!_DaRjkzLk2gN1-0{w3(TH%X>qEm>QhnCQsY<iD~fKXoxOcz**~}6YwMpJ zF1MMeZN|`iG^lk_)XxoHM2>X&`d(Y){^#j#X_HKjXFb;2|86xbzrRp<>2cGQcURQu zdSn-6&7HP9zWR)2`ts|xYV#f(&5v4j`S->hOM50H2bka-0{M~_{P|+E{@Ocda<dkA zeR*FN^!Zvwu<)m6D@@o!&n!E3q;uwtmKO0$VQDq@Nu{mMZf|cgo-i~x-I>eICo|#r z!BnXZJx$G>ske=dZkJmAedB%3X8n76J-G{iH#yp_-?8(xYxpsrWsNBxLTh{PfBoij z_?6+Ihr-Tt)^sks=GvF=YcG3f>!eq<lS9uhFP=TCZ|}UklA`&s^>1{nLRhjdZ?Sp( z?Df04_q!&>f7$cZ`NnSkSvS`lPSv;^vRA4>(~Zf40lHM&p+>l2qjt34jJF@>M)=GP z+d5S$tif=ekZRbOzPoSK+h1RbTwSbmbCTA|S(p8#TnoG0Tn?+h7K^t37UKD&$vwJt zlGOA+i>7FVo4@RoU6*(Nv8V3K3SGmsr!B>0%kLBhdWo`iBX`3aSR@#CHo4cVd)#<5 zMJYgbiquS1bv3gy`;I-_veMydtK^j<KAk21cFDaq7jj^l>U7|(Z`AICnz_5}Yo3K( zes#ruUyxAGM8s|c4+hRFI!v#eOf!Oozo*7;y}pvO>H0#k$0?ttNO7+T-fUX^ce;IU zy83V4m#gD?A6S_d#upnjdMxM?>^Na%YH)aGSE}@66c+~U<v4MkclWPvm(}zA|Cv_r zSGo9oj<Da+(yT{2l0u@Fx*3%#-L$x#JtOGz)h_#&%g+kw?Vnrc7L^kil=Yx=@9LeR zMz-^8j}`VFU82a?&!V*G3QL#td(-}<Lff{#+G3S(!(fppgHxYaq-sn{&xB+L1-8H= z#lC&dw;WxN;p7%5{3B$!O;vQD#FSb0i%OO*<JT}<Tj2U|g1P%r%N1dp=jUj;)p$+$ z;Z+_YE@GB)bhZz(qs8|f-%dZw-oK~z>T&b+Ki^FA<$iZ(Thf|c&ufe~Jvg5_HO$j6 zNk!m0%bfe!h4V#y6p$ApJD92*2>UQW`tLNuypP@sercQb>=oY2HpepNP@B)|?!=>I zyII=S<ejr!cI{K?z8$%{KO0NWyRl)*o;3;o|2^qhw!CC-*IV6l``?{6%|DW_du)ng z<0-WVf8v}&w`@Ai_1GOLsqv~dWOIfuY+A4B)w}9?%beFDLF*Hpe9vr=I=}vPY{i#s zyZQUW?tV$j?SEeq_&V6y<le@_)@>i1x2eCq%@MvjVC%6ZN{tf21$FBeYDqm_bnpdA z5hKB9*3kRZL+oU=TEONhQk^F|JADtVck$f3@rXpG>ACppvtKo8_t(w8AO7(B!LWzx zgZG=Uga$<g20F6N`g_xF>MYj7ZMq*~r0-UonOkzNa&pn#9}e3+6slNa?qsj%a$7H9 zkfH+Jz!b;1!F^{pdsT&C<=5EEf2$1VONdl06`gIEw5@}kCsA1Vq}<|#Idf9>aj7l- zwO&JJQ@|V@OP)ppZ<&a|is*B{TKB(cNWNfD#lJ6v*WOE;tNo1A4?Z)!eVeb&T>fL` zU7o+Y(_S9q)19TFuDWcg+QIYpx4n5~lo0l!!(rvcWxma&(;PiBO|y2sTX_4(oK$6F zUB-sZ2XE=@)>eG<>5XBD+y&RKDgswUTjwg@-ty$!wRH34-)GIgo4sH6)`gu{Hx{f{ zRh_8*Y}T8*%j3UJ`^=EN!~629hE1DQ*UoX8XZZE}nrDI61SCEyoc5Rv9zN=8Kf=O) z$87GI?qX*H(2!AVD*Lvn?rXnAO!n>2TDsHV?msy$)e7hI-(Lb}cRLvF%575mI%D%X zwQMg=ZMF0BISSrg+<DsL>0M6?(?<9h(yZ;Gt<U#Zr{>;clq@>0cYOY(Rml&}<*1vo z+znx3w9jiguy3-F^SiHo*<1H-_;GmY&m8le`WhM)?|x2K_WSbjxcqmqWySr{Vtl&y zKA*XG_q@#AuRa&oEl>RabFnmc*qz`nuQmR+UEJ{h(??&$%Ler;;u_oc8E%yBFjoBg z#G*Kj_xR@H6Fi;RuTE)rnb#UEnisKi<NRyZQKbSbJ>Av07dKq```GK-#ajKF596%& zWTkw3Ref{sx7W+f!!HYUcx_wIkg_97b3?Lv`jwQ((-)<fius>2i|%?Ev_N1^OS025 zGwW?HOX9*)-*DXA*0)mKH$-sL?b}*Ea+^$VIu{FWn#px@4-3CyK(pM6og8(-u1`NE zaEAEK)(v{yd^q&boclk{#qRQQn9-NbB%dvp>dP@X?#<rQis=*fX-m&MwJzs(ciy>s zbp_wb_aFXec=x-!R^!IpH^TjfRw@C`>Gn6hlKhsr{GIpc`}X%YK0muxa`BCXX7;)J zHM4}C+)>{1aJ|O&-=}ItMeXD*72f~qKAmt**r)5#gRB=f{lO~`en01zwVHorZ>D(E zLmi1}6Aq;7G`jj6syy-`?Zb+vr`@+EJwNHWEik;K?y|}UXLGxiUb_q>-W*w>U?8O; z(9!U@nisSHR^VHa{hhoG&NH4qHF!HgpH=i%+~Fh+hXbyfH(DS3nHp6vecdF%6C2l7 zHeD@LxXd=w{<;1)*)Z+!otxV_C(JEyJJB;KYht6RWW$auJ)0fd!_FD3PO{K#m~5@; zW4^{R$<1V&<H5>pCs!{sZj?E}C3B~G#>@U~-)9{-9<^ZEwBxtLHvU@hFO>UGNOa83 zp0dVIAA0ZCbzO}xbDO!k?&5-=WW8YZD&8M23xn6onSbr`ZRPmF!6~_0yWh?zV@VS4 zUBwTNCUsphlJNO;`s6Ruf6A=4osP`ddUHbo&(s8ww@c4&nbUb|1t)ihgK>2NU(Gk` z;wL(J!JBhZ-fak*eaxuQF#W-sgC)GPo-Q`yU6B5af9^k#IgtiyuCC|{;r!I>>wDtQ zVrCTqZKiYYw{omlwDDBP)!ySfWgaN@=P{=rX4vMMbt9SUROo|i3tQPa)_j*-`6fd6 zfmuPzn}q^`n`D|p-_LrpFwf<Jw}S5BpU%cjorR)PpyN4?hLG``n@+33*WQa=s(w!< zoY`)hYSL|kS+5)>EK~NGZm5wuA?<{csmppr>%2lghN)7&nUbn}Ppo%2x~$~z8|R3t z@vDV+F0te3wX>hre__C!zWtSTZB=|C!{T#wN!k|$Qq@-HJFULSoIdmVnv-|uEEQaz z!dyM`>Fkc6%ejv-B0jZM<hYke7AT)T!e)D{iDiypLFr^S2hq}Lt7g4C_4dc*TTi)G zrW&xX(LeX^lyTUzYwvPS6d9%}E-`H^T_K>t_4<NRN)=P;skQE=@f?;awrfrvydApc z<hH{{C-5(RaMt@o*2`0kI?Ai3Eu2><nigZpck>5(rOA;{w?$KCtUBR-&vDt2%~GrH z#a}FtT-s#7qHQ7-l9l9W{l+3-C1<07+?QDf_iZ*TQ@Id7t=?$AXNHM8zo`7JatS{< z%c#Jxg;S^e)C%&qc-IrCsGgeA7jrDl{_OQ%^S)n`i{3Od*P2ZwFXDRJ8m}H{p%q#z zO|KWe(v@Kh-LlGIWlu?!^qpBjTJGZ8ECbe`Dhu7`-dnazdD1}xVabUm3Qry^ZJ2O) z%~HQT;ngSn6s|;=uR6ykVDn{5sHokK!%9nP#M+lO)HK;IxuVqFcKSsq=dZ%NWtS${ zRtYAa5L9gN>Q(NUy83!W-lNzGmF)BjmHw&w>^GPHnYsOShNn|hlvhwtP~l4cBT@%M zVpcY?rpVOHpRJ#Exlm;GT^I8-J7%GCMMlP2H{9-=ndff%?A+|NH4&!*6&ES12-q?m z{2K7puct#xYHv@-%L%sqyKSm_*z~fKo(L$NP&HMRYm+%={AlLX^!{^~pWRV)Dm!;- zvv<oI$+^Y-e79L77es$Q7o7CkXjN|Dj7;YDt4{j=Sjft$c+Qf=%kq<<ZG@~;)5hIr zJQrG*OWypo^0kS^6_;r_B2I_bm+Wrlihub}+5GhNb<JzHYt$~iUCe%c=ke0`yBEJ) zS+=3d;7xtb&*XeZ*UHv1NT+VW_IDl^>^v{6ySH!mZ(n(qCrj(5Nx#W*%imVBwEE4m zu#}65NxID4+^gF!C(a8#x2f)PiT;P`X=V|12cqjH&#summ-)i1WW}_r=T1N0dsozA z*E&0vMZc!zJ^y~|*U$1f7d}<&irD_`cia7kZra-Z8Fv<x9quWqC|h>zd`{7=j`#Qf zK5sSur~hIvTenr<ZsVf+osVAyhv^jwed^w@Y5Ni>t<4-)j2%mIvpLRGFK{XsT5MIo zHB&-z;>zd8FXc$bemFBLiKkOqQ8^{@IdkZ|2OU1!d9FQqpzGkG(4Hf+=IxBt+q46A zC;s9payi6v)6KFZA?wtYwD`W6S3UI<h1Xw8+3Lu5$>Q{qT@^E58B`})ujZ^_y6S&T zmE%){d8x#rhnI30tA2ZZzw>>0-i<H^p6nN84>OOOWp~EEEIVyi_AYQ`;qh6TruWz1 zKDlRZeJ%gh`YBVS%00h4sk%G8T&DWd#t*hq0a;~F{{FmvZ_}ip|AxJ<WG=5T<6ggI z$rlgLqpkmIlwCe>xA9(H_VA3Ve`~|MMcxXlym~(`arY2)UD~E>{&m+Jah6>rehiA% z=}&K}I(_Rox6{4l&77&}(?9Z9&b$0fvVz6-8jIak&Hj5+W>x-YUiwVog~^-d#o{GS zOVygb2Rvy$bkl#`%tO`hkF>CC+x_j$$!1}0tJ@88t9^WI^Ulw&PKcD+Hm$(X@!>n$ z-{0Qd-ktqj?#6df5!u_%Ru!+SxEB2BqOj14f1uXyhny$Iyf62LMZL3*3JNS(@g+l3 z=7*H%Z?^aPem?7jc_bqRy-qBARrvLIk0r{99v_?<cw-V7xTR%J9$GKKo3>X){I5fz zA`3sujpt`G{`MVxcGKz7&f`RO!(Nv5bI!eOmk}T=CA4cr9mr)Xy2AEfIxeG#n15CH z#~IMf{Bz;E2uax^_R}kT6+x#gwbgn{nd#5F`@8Vtu6q(YwENY|cI>L{SKqqi@zx_- z^q$9*+$lW1(_izK1C!~LhR@ZyNvkq=ReNtDb@>>CK6p5+(~vQq&D_uFnx7H;cp=|} z^Rq9WpLNt@dEm6YC9|WRzyBF|VypC=OWS@QPLDHP>-YEZ-D9oqCOY`4J$MCb+N*_& zp0P&iMrd_1NFO@2cT!N}MJwe7GtjPpn81Z<Z9%=CuYX;3rsCTRu~U5&x9+IP-BoV< zz`0}Z^#D=c`Ic?a1~sHR`e07Oug*LpOO>=T_H&av^hB9{yj3s1%DC_Em-KsWqSEEf z<`E{p->lxf`rqnz+vi`a`}zOPT<!#st9$>a3wu<YJk7qyl|{%SC0Bd>ts`7w7mjpK zi%5RI_ul>&S7$4%ov~K@{oZ>)YqxBhc5BHtyGf6l?`2o#=4=$3{Uht`Uf(TUTxJ3a z++9r^iW9^ubH082KiATD^XAQ)cN=f+Ka;oba%N20`S;~@&x_B!Ial+&{M;JhmV*ob zEeu?|spxo*q`75^r<8yF`I|qVPPPx0;S}REeP*Gy`ODAe^XL0~|1ftQi_oVx>Qz|| zySB*}HZyQEz)%WH<1O9ucWTA&?&F;GI(nCM==T1u(0gUd_CbH9e$}`8ed6EYyIzg@ zBJ=*vy!m;z{oVP39!47k1G3JPY6WNUz5DliUfH@UI$F`Qn3lHHtur^>?!<X=N8)Sw z>tb<M&r8bxclP_2%DoobbZk!PL)Yi=C7R_=rKNIeGrNngPM(<HxYE$PC!orLL&arf zr^t?v#km%<=AA4}yCiI$d)vQZPSZNZ6bC=XMv;)j=M!_D-w3*3YPed0v&Lv;uh_gx zzFueLX9Qhd%+sdYn(nx=voeb(nej~BCZ_r6eM@s>)v}FvP0zF_+FIU_m#|Je)6?`) zTz_u$!#~FTZ|Z_?eAc<Y+4|ds-C-UF*;w4z7=@qTI>FEs)&vWh1_q8By$&Z>G<LJL zS2%GxtTeP$IwIO?{NbiQWBq~m+&?luvmW!8a*tuNwVUrRlHvExeC?H*4XIyW>B@iD zzf5wrp@*Yr+9AiA6Fm?7urgh{cCCC{E<3+m&HumOLC1Ja^yFX5#wfr5Lmp;~yPD4i zy*;^(@84q;hNZ`J9JYO$q~tcsbX(ZHPv^fL<7J)_{8+iS?W9S~@_@Z|_HS*{?5BEs zWaCsjdLS@XhNWkI_GESceFizRZL7cSsr=k0XUnxwt<SGP6A|AH4kk>i=1A?EXAma3 z?R`UIQ1a4z6+@#?<=a2bf1Pz~h5?TUQ}2E04?q8GF<yGio6~HPL$cNKV_e}k8XR^B z85FK_%~N`5Dl021kbS9CKp_w8{KgWs1N%=2e`=MJb>>>-;b!09Z?t0BjpZ7bJ*1<L zGi&*FSszF#4ao9g3KsXj`oQd8@!n;I$9Of9k3Hx8vDas@;>NbJB2xpGUp&5DLJ`M& z*OX>yFh4WCw9Ndz=8tdt|9W<P^8c?UePN-&XZ~$F-re5#c%OdlGvhO{A98Q*EPCSo zy;Y}B&b|JS2#b!eLESpnm4{w`omc&C=kb2|?-e%Fls$JX+`Vkaj$?CIWC^|Y-E-*K zY@r1cmH%9_xwN!+NBfKEpC+Di|G563<Wr@4O`m5toGDu-xMY^mDSPF@Yq{Y*=U$yq zu6&SsXyUB5A3YAbWJcMTC%@#gOzY3Cn5DaZ&gO=knkW3+Pd*4A|Iyyu>R*&SKP_#o z($xNR6E&^2BfmO7S!OO=bmnm~V^giq1i$3@`#Qut8D>i|rTfgjefN1~?eoBG`^&dH zHm-cNck|}Y2jy*(j?G`V>HFRC`3s8@TYIFp?FqS9{Nvxd{`c?yy|9jLzwz&S{Qt}C z>+jWl>b17r{cq|w^MB8e-3yj?<9fWI>i2r-R_Xt*Km5PDJ>z2S|KtDVmN~zX$SrZG zQT=azB<K&j`E%EqYky5BGI$XX>hmeJS9FchyoP5vOM|ESMWjCd&tt#%D(fNzqq=pq zpH8Yv+2<5$%qoBJd18>UiHV7Ufy2~WORaCM>h4-~`^v=@`A(tiGlvYhk1#DvTl$Xm z->nmZzJ|W759KO;df3XXtXWdlvfFD-@zQ%94oQq@@6}m0sR@<t-E|?Us4q$MUgxZT zT}6jx@v5EjF!;A|!o&%Szf_z#$16W=)@P+4b65HEGtDRE@>%X#ytsVMv)HHe+3Zgy z*Uf6J-~OskJ2*XWN&lu72P4)grAa^5G!Xi6<HawndFzC7r$(RCxW4YsxsaVx=I;Np ztiS*Jzsl>&Pu;uxd|~zN9m$Q&DS{4uy_t@>I~EnJlKUs}{QTFL!+l?-Z=Zi`djB)4 zKtJBIbxHL%-z@*<_`c!z^N(z8OglF})4OxE!rvsqYtrfe)owS+6;ebW^7FlkF1de8 zd&bu_PgjfCUjDJ1Kkl}khr7!Bi)UNY|H=CwSjaO=HdlU?%&d3z5)BSQ91(V&FRwgS zSICXo^w9myrl+B%rlC)7s?L%qjCjrZE5{^TVrk8f=!<{br(geiAUf|tWl;Tglha<8 z(~o7&ekzt)kdbultBh>aj?SB(mYrM3)39bsc&{I?ZjkiZY38h9u@Vz3d6nlTNf!NB z9wzc;*1G=9%{@oXWG~UZ^isxnt8Nfu>smE+)hebb6K4cRsy+UBWRHCiTidQBzm9Nz zUtqUfD0}LRb>i}IYtGay5})yJio^!b&rC~?G2MEw=%!eY?u;XqH_z^WtMvEj#|=My zH@RKDZ+zkMMQ?Wh@4wq>4n3G~e|qt~E#5H~)f^_C`?U1!>LV-?hOx(<h+U5HTK6#0 zn7?ZlznQ=WLB?$Ll}eX2q<HHE*CswHSvbq<W%agAfjZvoSJ_KWYxp(4@4Ds~of#B- zf-$vhQjy91t7l>}c}lfPudgXIHQ)V7mhWxN%8YwU%s8DE-|=cMI*~A4dOGut!znSg z+3&1OuD@oJUKHK4J18%ClHi_+AI><LJqp%LzGk`q`lSh-L5npr44W@jbVuH^=wjK$ zwf@SQ;>{C!&5J9%XFW~OirRe6Saj3MhvIy?GTvMcnpUk!PgnGR5G!2hzV_>f`cLac z&+dNsY}v6%ce$i97ySL1vCn7m>*iS#7sS{vIisbR+|VLr^IKC<CHOImSFh-~ncv^2 zPs)06&|hbE+KKv#{}T_h_kHEJDk^qQPfzEs_@i=7V3~yXRh_7<HDb-4FO6=sCa0a9 zx&86J<43<{-q>wEEyi)BX;X>ID~8x&ulWnNhdv8REKB*Fopi6yuQY6zh?#<bI3xG| zf0>^$cDM;guUu#_J9cgAqEctqyJ}HJ%QhO_f0~oPerr{<*UnW7b%k$Py}Wx%DDC#H ziS3ud;`T2)cJ_+sJDm#;a;9Ei%o*lbDq@(P*k(2LS!nK5HUHLUPhV7BHfh{4C#dnb zAV<K0W9FN;yFIb|Q*~>~2BEs!>pK<yWL>Q&uBdqRX_q<MtZ3HYf4U;u7-nV}sv2m< zI_U4no#My2KfU9g#@*lT8fvo=uFPGuBdFZ5;-?@-<mJZ?l`ZFZ{^%6$oc+t~E>rYT zmAmdmQ4W1KFFst$VgGmW3b{YZNfFy-%=ccl&#P@Ir{~%$|7xzpub;I(>fgf!lCghI z6hx}7+8lDe&TESI4^J^h4bziKvmN$N+uzb7eM*~avums7r*m@g;p?wIUdkEpZ=d7; zci;ZLj*pjr>v(r_-tJ<#=)cp=!f)@{FlUyw+@Jlwzjc0|zOUr|p8rXfhMV(NPwTsI zu>N<z`8hTBPN><gy;rm_>0HbP)7JGBANDW#^<|Z}LiG+NMrW2OvpwsMuKXST*28vw z=-P`CL0Mg^%nP0>t)I}T_HM84r-^$)pSqUbo)NNGbMdJL&AMH-KlE;Ll`gfBZ=aMp zEBbCFt6y2mOIy{go17M{a>{buu`q7wuQw%oGiN=x7pH&XtjQJTAjRzOv9qM6L^Cy; zW}i}5VQUWM_uklIVqlf>b@!iHH*%J%Oz^2NxHxyV?)ulcOB}adi2umX>Co3{TX*7N z=#eAyCKzj^UA`i;;nP&v%U-b#x&p7IR;9)S&wCpnQS;^kcLyWOf-4b{%rj>MD|=X) zE(&`5@z-zm+PSv#>iGA5@R$9t-qLb{X;zI$M7WKH?u*}ln)&Vi|H<8)c313=ciI>K zm$jAef<AD}KDWeFJo^#*$(g6-{Ex2d|95ot=1aXB7#mvz1M<{<>Mng3ztpJLXYrbV zWRvB`g05_Nz_Wh)%V(RNWm<G3d@lKT>S~8>>+LiTOqb2%)oq;`uy}?!1Ls=b`;kUT z0Vd_mk9HqSx|R`<w;<IyyKvT4Bkr>~%V%^QH_|@cw(O8`goVwF7Zc7-d!87PSM-XP zx5zm3jE>3Xr;l4??uo^|nfCjT$m$P=G=qcA)a^NPbDhh~{s_BQM<jiPc;#2`lAYzX z+G6(%eZR$T3agqcgE)J<R(<a&nfL4Hbe;NkN%J$OW?rlN@#D$nWgm|ESX=L|_N$g@ ztlM9%^S3zU+z-q7`~SU}*=@YZ`J#qE$NYwm#l90We>^&PD*h|?tkMi6l~YZbdUx+c zxN32yE;0$v(GmQXXOyvi(^Q>1rc-Z+Uk#fWcR4I#Puly1PGxgMZ*RF9>zd8IS*xY! zV@F74&ngZ7c9{UhS?7<WMO~fd@>R`LQ9pnEg!9s=S;6u4t>=Z5!XIvKIn=)*`$}#2 z&y9hTb=Kawsv%dB9PpdJT=Zz=pM&oCYaFkLDY$>nQPkpH`a;e})J(eP<|k#AqBCi3 z_ML~$D$mv2^*rIsE#7&n(yXuNRB|1@@}NgPs>JAI^O}EMS85t0Ug~U?uXU?ArX#%h z(g*9ZryghW=g-)Bd;bBBCyRNKduxP0Zwab9U|hF0W38U^VYg!W)AHAP&#q&U`BrtV zBi2x}(ATE?-bMcM|8E~?{wtYQ8Q!UFb|Sj$bl)vd*W<d??d{I$2b6c$SC_nhujVta zV%O^B?|UZgoWD2e)|N~*>7pkm1e;ZZ1K#}keBR$tcZJehjyZECuJ5b#p1S&zSyj!R zEf;5c|Nmm?yzJdY$+dbDCIrv+6SLY}BEB+kQnp*aoNeYMmD)o~%GU^P`&1e~<+=~c zL+-y}CKE&!MY|O)ubXZiD8{+WWahG_vwfGWHX8iCzUpmI>6Sg~D|W0{<dmVA!kEFc zoh$ngv+#6QHS3e2;aMlVP4bh3otP){zf^en>Q&bXt+&Tk#4@uz5&6QSz+A+|v19?4 zb$^QW@o7!#IwOyIJecg6`{$u^|EJeMXTPrfb!+Oqr`Nad`Q9DAzW(XX<9xE#XN|Is zynPfIye!^g|L@DShVATJJlu>Lrq4ELd-3)b2xUK8=CaaI?_icx^0f`?KVNXSo^N@# za>awL-^cuC<;n0)k$Su)plAn&O6W?%x^)*@?1HjNf-|Rx%$_qxW(7anaZk0_Qpud6 zSKW+7Tr-%B6qYwQaIM<#*<)LAj^>M5GeUb<>}FnZJMDGW{rK-G2OrEal?1H<PnO_L zm@B3I;pgM$H}6l$nKrrltW@7@o6QL~ZMnm*&zh7ObckVUL&I853H$4ZuJec4FPhzL zx-Czui5b?VVPF*SaAx}R&h)7Ex@C&$yIXjc9`o`)(QUBQW7WnzA~RE+HwR=KnpkVL z`QTz3jwAjDuIyaqw<3_++{@4R&&LDINc|QDjtq_^I#(H<JXU8|dQ8aKvujIA_PrB7 z&VQA<e~h<$?~c6d-P_+)yjwQ+{QWz(c6_@qTl#AC?fI*$_|0eX%ZMo$1aU~%U+0st z_;4*cfA8OKx2?<GR6L(sey{fX-S79R^Ox^<du!|Kzu)iwzkUCo+v_VmA_W=hNcKCd z;?UqUosbjMdZ)@ZAj@a-VwYJu?aHSe>wRxW85?{p-n)zIahqlG-}$>2E%>l$kLGj# zj}`4!{_|u^Ki-)+eciL)Z%*e~?D@=@eef_BiyIT;<L9?T!(%pv+?l2u?Y4fuPTuM1 z`tgc++DCKm>?l-bl)A;iq`&|}6O5Sn&Q9CZ6*y6qDI)NOj9FCRkIVe!+v~0zJ)5Sx zKO}elzVmfiwYhKi=$}c;P2}Io^<|FD-uG+yr=6KDE;`TZ``_)e?5f`eKTB9>!f~V1 z!6{5++13|tuBaVhf?2`9q+sxfL!)2X?CYE5*Xw@&nE1`^A4l>nF8vuLdh`CKJl@E> z^jOSup6;OJKO2o^9g{FuS(^6lQ6yvFGQp!#5ATMT)$9GA6L>T7=1raQjOYIz&yWAR zMKNMlI)k>^#6IaFEwQfq%^!CK7(E7c_9KtXkC)vRTl~d(|NOfAV}{<%Y<s_LUHA07 zTg9SEsh0V2icCdZzc?o_TC%bP1+>m}-!wPb+wuC5HAyNTPA)OKcOm(y=3SqamV!0k zf*CbUjXzF#H$(mS2GIj=)IYyCy4-H#-90N!xgUEcWc-mfSLr?W{&RPA!}}+vUVpxP zuJ)I!sCuNdr@>LvcPW+a@d6%Jj3-Py-Fvtk7+4S};fO#(kg$9Ba<5f}`&inR8LIKT zym=sI@kh2AJNvgjD?e^ZzvAK5`$vf{&VaSCN7cd7l<oGnt(j{>S>?07eJ$qyx4-!Q z`FB5WED#n!&JhfZ!7N9fi?d%BF-z?}v=Wq@xr#HVEYCWb^LV8pC}5ZLNY0<0BDL(| zga~Krol+7?3)LKicu()>TzMrRjwgPJ*8Qtz9tZSUI0>h1IeynPJLc@!bv5k~dUv$$ zY@X`Z%*&xNvEk#KS=!J2|1CeQf8~w2?(DtaR#kr2v$5hz@)fG)T;~Y)Xu=U;fvdBw z`0`7B+@s6f5R}X*E36V^zQ=dTv6gMerYQQ>e%d%kYQO)TnL)-cKJx^2`5y2-{<rb+ z+;*kIS!>ReTS_zKWUtmsdiuiSwcAIB1#9=z^&0Ke{8JHk_1ddNi(YMWSg`VxY?|o1 zn?chLa<EMDJW%21J4IufMSA|PB=#e-Qp!YXpaW73c8#*4Z!G@LzM{(-s-j%?!ISOk zmER%n5`#@GRlfS3nIpCEO2kWV&o-Z{4CeEs7T=awcirXJX<rXN#ZtE^nK!uCUHQUa z#cpHQZ*CxRVy<cV!*$21l@1lX&(&OYFJMvC{63D-rC!r~i&t;q@m=!xj>(_91?R)6 zc+3<g#4sHz&RTTj;nyntdA0A3xgKYouO9i(PqZ#rPekSP?+?G1zV_Is9eqaGi?KIR zg#XW4jp?^$Z9kM8Fq!MSu%=Ml%3rbE2i^IPd59l#nKi+J(Q>VO(V2-WEt}6w<Cjl% zYg@O>XIFp9<_l-0`E#V)6}EhKW7~z<*L)V$+=wcevFw-klxa=<t%(W6lOG&eenoFr zR<X`DUVg9Mm+Ky$Oj_w9X*^X*_@12J7nfhBPjAN4`P!)NkoijNa>|pnW*U!Otj?WX zygz%_?gR#=l?np>e!TYXZvAq#-)^SQFTECdTEFy{?cYvLE5BH^NtGqr3&W(`PrsZs zN$%Xy@~6x9&v2i@w2S{6*Y}mxj~Dh?#VoscL}01Ge$z)!51ZdjSac+xr6cm5TTR<^ z#+2YW#tcPY<eoo{**jBL{^b#qbCMHE?GsJr`vuzV_E~tXbal-%wIyPYKQ2(==*eMv z6@4S*-nqV<S7FioOOI*o6uA|7Zlz)3i7*kd=eE2*`QO_Y{W!4kpQC%;yBBZXykYF0 ze?%%P&t$3E`U5v(_Q(3nF3ew_{`$%W<#lI!6K5#NKKC?#_`a>$Pq8wDm5Gfr;@nEb z-nLZ_l6coXI4kzi??Lf3Kd$(-;@_lloPUXTf8i-@)_q)_=eF&IDzDW;(M+z_Rc61f z*9P4SQE`)!liT2^y;MR$T2U<h_)W%5dHt*1i<X$JYBmqL$Kik1sNu{;6;Y$_>)mAS zEFQn%IL++P=^Oa%aI9ve$E%NP{ERz891>Tb^yJi+_y2QpTj-TD9`_wzo@?K(eJTFy z&4qf4?FtX&PEMbC;GNj>7K2{3(8<n162Ci&S(hGjn!Y@$VauH0<U0Xzfiu<yJG)p_ z*Tn9P>z}UX@bfp@-`%&rudlDIy~18P{fe2z%~=Qdj?W5PzQfPgGdH@l+vIQOdeJlH zdmmSZN^9Q;S@~$z9)r~d=f!sMsDTpqwW2JMnQj*|espJS?2^=e9lj~Md-Y10zrpkP zHrHuw){ao|pRh2}&#S6C=uK6k+V^#aAv;yi+s`}PwI*Kg%p9dZ<*grPyDAE<?EfE8 z8D1iBRBNZKz^l7I=B{d8amMQTcE%d>BLAdsL3U}CrB~CMI}aUCDAo~B6W)C8>^5yR z6W<$#r<pfx?c3Ho_2$7et+dVO&i17QA6&9;L*D1o^J<UhPteS6T@?I6E%TGXq0Nm` zdOVb$X=ZyHX&GH|`29JM|Kg1F)oCgPt5$CDim>m>UTZXyEy(xK47JmOQ>3(0j#}0| zT6IYCrq7aNEyt1%O-Qr<I7cdQ<;RM@f1CH6lk?x-9`|E8-;e8aWKKw#+C>$6XH~{I z1n1@k2Zzduo?V?4q-K9n@YnKpg%>rqr@hZ!Gv)i0dBIJxQyUrznZ$~+Oe#%c7I&__ z65tcu!p*;l`-nZqq5k#a^B#PzohLj^Fa6S)?_wPH#rkV@2hY$oZ|IV(^3^&f&URgD z)g8Sm-yJoK(Wjq1yx!uxyrq7X@V;HjEiJ!(n9mn(Vf8Uq`uXhq7pqNE3uhEg>#4lC z<aK=U&SUw~O1Y<YpL(Aec&a`AoLl~acT00sgul)aR88oWJ91iMp<2o!Mg`_g6F-L- z`z2{jJ$8DvD6jHF7t86%ZlZbF^ZU8G&RUq<6L|bom?`perYGZzI+m68%O1VFAadL7 zdO@<*9?d?puUBu*@Bj7XdX2~jW7lHU1N}VHLzSuxu12zV_SCxkYzj(Vy8CkKT&c&F zrjeGHZ}D%xyvZbH<;yp3?C#wwT=e+J#>a2Bl$U&)Yn=aeQg&Set5}Xh0*k-{OVf-0 zR~fQ|7fe#Oof(kj$63nmk{%q{bmp&3eDkE#WgMIRxm1o^5S--q?*rH5q9sXPokcFm z9>=E|EuSI0__pUm`}?V;dVd`%ek=)G{AB9pWeORO0`pW#9*68dt$%&dbpN>I_S41+ z%NuMIj<?ACuVg=QvQ6e+rsU>hQ$zz^zX{0{$+Qdd$P%^tHNBP9)F4%6(U!jCK!=&U znwx*lSeiKh(=5@}x55%i7gZUS9y@j50jKHADZ!6pe%@UvK1JsDi_81w*+tDxJGW?d z-j2sJrB}s86rSF^MSu6llaim;%Nak+(cX~2%%t4FaDHXyzwm<#CT30%&FXn}WkqF| zrT(d_2A;<EMgH$}+OsR^@?xdj#I|YGneR1EFXJ@ZQgc7`rolnpjt6?DbX(p<pK|2> zE@v2>GIMI`;TejmOBfW?Sr*^&tmt=_pOAL?^DdqK)mNm|=4{COoXdLCWAfyWhN(;9 zv=*Q9G|5O>d&6Mc#i#>!vW|QTR6mz7DWgO<S0v`ta<5HmAH59Q6q=WOb8b%8v-TsB zpH7&z2PH3kpBXCtZNm~4y+4wsT#r{8N|`U?IX}PtuIuUd;+vLpNABdFrZd+pcb2Hh z21Z7K4ljp^nO8hbW?gp^3}QPgvd}3e*zMLbE_<=-Qxx|;6JOr4$MaF*#v4;>L}%Z8 zWM%rWZQ`mWHnRVw?cnhZ_!Zc9*=5z!oPAdpvNFYMwCAoW@7<>A`1A*V!>RKPuin(E z{&&?(cv60@fZtI0>K`V_yUi;PrOi&>R&!?AN2Z1~Y^*0vt$2`p_(9sY_Fo@9)yPO$ zb}P3|d8cftmSyd5jb-MN&#G!%+^mb*z4)%O?x=s-@$Bx0e0lDVH_oQ8e7eYC$X2Z~ zHLT4^=zZeNcgyGgOFqHT+Sc8mJn_7w<T|${8}4;JKll5~g?E43cmF)G??IRT3hncG zHv@M+ow@sc)bv9g0iqlY4T?<a=}%Ul&Rtm)darD8QOmiQU(3%+ZYtB8d+`-hN!Ib= z@B^`bYi>^LPWQhYyQEG1`j0>VR?m~1YdUSUPNKA?+UeH+A@g3i{0{;5DytSQa@rAN zV)bR+hpWv+4=oS%J$-bLpCxfq#yZ0q-yicHg@qoys@?iK{p7kMriDLxw4PdUnjFeL zWS(g@ErQk4EJPtgbk~92g>^=eFSf2P)vY&U(w@97z($DC!SCP=23)ga=3i`1<y)Fw z-~K8)ylQ&<{ZIGw<M#gR-(UOZ#mTy=v!8jNotshd?#$1-^WSw_+5{v-a40N4W>O|~ z)7kl-;`;g1?waQ2oIDVc)w7H3blbE;ErJ{k4mnI&y>8}f)!M4oRemu08$9!`$|>`j zZ^CbLBomf?VEp+&`&035)3&VbtFCXk;d^1K&gB5*sgFZsCue2|uYO?VcR|aHe+qoM z3)DAcWt=7WNb=L=bMI4vP3=`geNUgTT5x5?yD+IMUtE?j7Mg<`aYT8J(_d-xJ6|8| ziq*fj>+#OnWp?$&*^h5I=jVmI&#hne%H~drW|>4I14oNMhsn!M^(!CtJFp@3YZ#b1 zRUdq1{b8%~wpp(1=FEuyAErex1!Vbre)IPGzn_1T*YB_I`8UgKTS|hZ>9HM&=OX?; zU#Fq5M<@T(&tRK-3(rkfcMmkXvvl=OyWg9n`QFzY3VLI}#3*n<C_qHAH*0Z+DTZ|) zPIlJqY7G50uP#67@8Req(DdQi&G`qme?Fjjt6bLOqOyO_@?#lN$%iJ0d3<9(=IX}k z!NBnUi>HfYh@XV<;)GvEy`RTf{6C|-`@YCGo73Ol^x1w{ml<Thz$n0>{Net3`5S*; zZ?6ma|IPXQ+aDkE@2&jzcDL#6d%sV9w$7~oQNFwG*P-9`zyIEsxw+Vp52;tfz#`<a zU~jg=&fcZgH~%@tGtE65dWh3u<;Dh+2j5w1_Axx|k2KhpkYr=(_V~^eMO_BJw@LP& zeltB*?^O<OmXkM~{L^Nqz3x=0a^J$j-rG!t*=oI0|LiQE+I#IyqNx(cAJyMo;%w6| z{i{B|>8*44o)>?O-qwH6&Hu1|!Cu1+pOzl*a_6&V+}MaT%i7?uh~q+z`mUXiw{P5% z{4IFV0kxC-^Zusr>Dc~$xwpLh&+EtUizYrhxjZlU_VV|e=YQL?%dGyPPv*KsH@3~K zzhhkgEpqXu%|*qVUe162&U)K|oNSW_mF_3IXB`!Cy_)MATDkG$q?1yKs~0XxJm-|7 zY|(Xm|FS~~ueGF@wyIj?D$h*|UbwOBxY}WFjgRUZ6y08*J5a<~`7Jm+Je+Nj<77mK zkb&h=d&8$4iNWXVejQ}KU%jZ&p0g>}K5F-aNvz!;-l*R$vz{VV9ILEl`X1!uB|$3} zUXc*~JR^kHC~wE}si!QbcX;_a{F$%t=k59G=dlK+=_TK87%qM>-#W@Z_RH0Hm$s$X zG^Mn)Tccu4os;FKGb}Xfd!nxQKQXuWU9YF*TIsK@GR4U{5mp;NM)xWuzY$t=C54CA zgas*f6?{4Wd{ET(f7uo^Iqq)nP5;ab@z+wMvSt)IPvZtnw${x*|2|!RMuf4!5jj_9 z?kg8|v!&TvaxXENB^0<!ai-%;b{8wY*=<MoKCa!-CK~ZLE3fS7=K9us?!wb<99eqG zYhy*~;uLYK)f)MsI|KH|&bj?0PxMsy##7CrD^9I??(p$?;GEUYJtp~HB|*x*rH^uR z)};J&DP5X$c}D%pxsPTa{4_Q2mZ*tPWy^=3*Xq44?@+2bwq~`7#Y90Rq_Gxo+K^CW zSbB^@b*>Sg;{sdL*(;x>T~VBA^yRk)Xt<#;-Rtav^TsN^sVYmKl{{Z~;;pXcYJt+O z1x}N~w{BdNH+x5l_v3B5x_U#IG>y-(nJF7xc#xAT@@dt!F!75nD;*ZBJQaIVDCo#q zP<M4jh{<-5yrqktOkd{Fsc+V*V>LPaK~7#O>&d+<gba7KgkK1|8zfb`RigI!6Ga`K zyJqIQqfS?NSA?i;%?*lX@@1WU`0#{N*NxHzZ%qxqdW2Cx_Ilc*WsizK-%Jvz;=STF zX_jJV6ml|xuqU}Pc=f7o;%j%PUS;-prQt5Y!o6yj;`5w-F|0IR<a0Q#VCk~@3)T-l zR_<wB=<sgMPVREkd%{bPs%~9$Dqx%LjJpS~NUL2nSh#GBi$ZE^>RbcX*7Un9=HKs$ z&70sPt-8E`ahb=N$tSgSg5ok(P5(35uvq^>efKK!jylcz%RGWQm0H%kjxpznWiN8o zvGHZRYcS<g;H{-kPEWbUsasttRJEv@uU{qfvG7;;Vi7n)Wdg&LSuBTqrfCPSG<@h- zuu%O{eB8XV`IAg%{hQY~uP@H3V%L51C&Fy)fA-D!ye#&SkpW{@ra{s?&htwj26d@i z`S9Iot4!#Iq@vzEl95l^e&^r3y<_jalP$B3<b)maa5<YZbM~*IzJ^Q1LJx)PAi;%9 zUYf`-WtPbc)6<rwYCM^?QnUWL+%$3icldX|j9tN+`U?|hTU%LMS08w+zOl`~H8{&7 zBOpzB<CT7=eJQ>t*=Dtc+&W|&d&hKY&Nrc#rYf!{Je6%~+k8`m(*Ml3<8^Azx}fPQ zS60l~vHiMvccs~-W7!J@UQ|rcTGJ-@$jD3LV)XILH71UyCT=#@sW$TzJ?aP_Oo1`l zK<=}6usrME<fn6_9=Cn!I+Qb4O6k(g$FE;~t=eP4c<R3Si~D!?)&G6{I<xd)$A*ku zf!!w6CmnYxMn6q2*_`RIiD_cE!iJ~KH(AtIw(OX~J5%)flZ#gRUCf!TvC6j2k)};b zCpR2T+9A9xpl8zb!`G@O)~wGgb@L79ta@--j(xep$K@rPzxFR)U+?Vb&Y@gY%+VUW zNSG(+;pdXw8M!An3-)L*qtuX~vBm^xrV6j^JJ(H^cPaL_o_Y17lhIed-PE<7(tdmP zXX`sl@7I5fKezLN%>I7cS1(UA9-co(Lh1|4xp`Lq-mH9FkulHl{7c9CPyc^t+39hW z|Gimy=Ou*+2}~7U<xP!;WRddsfdYX8!Moa<t5&^s@$+5P8NK3sMOM$TorQ<j%*lM) zemgT#YTvYi^z`o^zx4^rs`ts}FW<X(^ZPlKtEb0&X5M`8bGw}<|9i9So=+fG!v{$r z41-S`4l6yI?aVjc@yW>Uk+ur2D}TkRdfe{Umi5c~uPvLo`NcBncNNdtR*8q*`K0sq zbY4x-u|KPi`#d<`Ww!C+EE6_ycC&{fu9&gvpis;SGJ2osJgLQ*J(`C<KaVfJ`001+ zo0m>u@0wJ-m;271#+D&~QIs_>aHN2yC^Ik2KNg&9(rcJ)k@x9LQ|fn}m{{w&OJ7VL zGznm{?lIUWdZtsQ7U%V+9yV#fu1py0syNfxQj1Ma?s&LP{QBFfkJn_+-`(>0=j>?d z>vC1ai>vZ~2Zug?xXeVM6{}Te!DjGnnIn~a#~^*p|Ke~Fk+^B*PycAjy$^VPa`Ixe zdDfpVU9Fj4dy}`ld{&KJxm1B`2bSPZux1L#T2s<_xNBmmG-y22%145YWxu^a*`XPd zte5rUtiB)mnJ#zp@3IZgBlo43zgbwm)|_D)7Lyp5j&V4wG(46W;VtRkd$A?+l)(f3 zAGM73x%&?M@O*sY>Vo6XKX)>nJ^9yd>a1g@P93vI*qPncoqea!g2T{v&2|@8R(mYQ z3d{tR9TKu?LCH?h$#)DKEKTh$Wz6t7T>k0F*Pofs_5Ow&`r{VV>3mOU#eodw!0^MX zR_C<1CGXpuz=)Y+*qH*dbiO%hsXNT{>J8j}yd}{=DC5t)hV##t&($=I^V%?xMM~My zw0A0>duD8`rnomtkoTw8r*AXWWEbrEG+E=CNa$(Nz}T&-m7%`Ap_O94#nQ02*&qir zN9#V{XydVptRB2;r_PjSNojkxwmCSvx-tu=WqC`P?{0auwkswm=ysUymHhJVn|h{8 zURr3)oE97tsk!{F#^q((HkYgJY(Er`dZr`D|AO;|o^9f$mZpy4lOjaQ4*W7`P({kS z;JUeifdf$m2(L6;s5rxD$x8n%TD-#9N9JmpHrt&SSbBqHPtM<22VS0YHjKKl$$ZC= zp6Yz>z@J*BQQmQln|DqX%_!SC&CsyDGCNQ6&Z*)&tyf;IYu&2CZ8mjk8c&fIK6Cn} z&blVyu(rM@+Mm}%IQ3U$uQ`){_eAWLsn^%9RNR`;ds>srYsxF-wiaHbCJ?L)e&fjC z)oc4pF-zoFaB|7r0!ZCDixp4Zs_Wx5OLP7C=bPs*TCWuovUj1&w<RkqRZ~TsPRCtp zno|CmtGhx|m2ugYzAl4A)jd6F-zHlHT<T%5Q$79gM7inYD3@7+)`u49tXvzK<k`Hi z0ZUFZnhQ#OFA{@S8ov5g(5e0_K60ht4KC9~u=O;@(bm%#syl3aB3}3{xH%wdPwk@3 zGu5nD9!iWfYh8A|FK~U?<uKh$^E7MU)sLrK*;F%YQ|`p&{xjDyK1DB14qRiA+0x*C z>e`15rkuao*_R&sSF7Twdy;p`S`D3Z)l#42@6|u~(3t$Ux$n-Mi#KoHWR|n<G!3aP zS=uHt^@7i=)8--Edb6@rj`{{qh;e#RvSNamY2NC^e`d|BT07-)-ksa8XX^$eY+e^r zb8X6&o!MHEF-xvb__lc7rqqMhKFC!!h^^qu;jqGUa$i%>WH#AU%jL%^Za)!iy=i5d zaur(*x!8V%b$)0ix38g4y8XpVhrT>f_1c*DdEt_$$v27)TlFUgU7P;U?4jWE(A*`< z-8%iQZL!jQdS%1Wp2(b<#ip&FxmZrB+RoA1@nU0Pj0Pu09%f+jRAN}F=9wV;((GJm z7Eh~_fB7TuLWqTy0a!*5XKC;IpkM!O@}6(r1%?SvXFU6P^I)atqTXMzKTYSaa)}Pk z)vf+kRx$HKdeLX)Q-!56KKwy3uR7h^Di#W0%Sf#ZQ)Vqm@Lh9R<jIwkr#{*Ccl=IY zDp<N~^XA_b)yF&ggpc=azkKiF&GK`5u6nQg>6mnzH6OE#&{S=>nibS_J1I3FOQ*?u zX(U%s)*S8q)?b?@CCk^|x_;R``|_E{lFPj1HpR|YxwZ2ur+rH`x3f(CcQsjUj_mHM z%jPW=na3@>n+c_h4(YCUG&4l6Wz)WPgwf#VvVg2f=Plkz1x*NcHk@bwe^>Xk`}!&V z;+u-Zbt0{DZ*AGZ+|Dcj(T7SFvn;qW<FTpE(%=cfhi{vrRDp?^np&)k7}^>I{TRG_ zrFa^yJh`%jk)s89P83qzGce5rEBR7zswnGH1FI7Y7E^lE7?!H>?h>~&&Ai~rA&8~4 z5OQSj@>SAMyUAXZHHk;!9eVy@U~xF02P%YLaaJvg<dV-yQ(S)R{dayozAxXu^Yd)j z@9gY6?bgclC+jrz))gKvbAKw+ck0*;*4%KVg%i!gtYq3MZt^uhZE#DNth>2M5j`EW z2sQ*Irv`X9`5GOa6&_dnHnDQHQEJzxS$*#PJGO8C9+Iy9_v_C;eC;BOjz6|6?cytE z`@^Wsdu@AS`IAdx%TDabzP4iyZzFHD=emo!s;3k$iG>)2xH~`LEzL|@az%ZgqIl>| zp3gcaVXJIUZEWw>2zs(rm1(9+R-8aboaENelWsXQU*4*=YMW@zTp_<5w+(JttqDn0 zI^}%P@<<k6c14Bm!Z5d4b9MxB_@k%135hHVuH4w-9R2;xzS_IHKFsZN@BC4c|9)fg z@#5m5BDel?MHWnt+@5aUyy;kvq_h5QK8X`;h8;@^XJ0swov}LarihlSNnRP}RcVhm z0xgSPnJo=jsj_jxi3#!Xda~(WZu>L>O~Tmv%`BpwokRZ^<omcM&aSTB8xW{?C13n> zn5pMOk&~^nSAB}mRC_q(n&w-j#DyVUbHxL451x?LUg~sZ&n1qNj#jCM=1$L9Ar>=R zIZb?`iOS{)rn0u%6Sv%5tJ2yzJBn-7gg(|oQE3g$3!fQ8C~kcbaWrGoLBX~pbk7<H zaXPF#xgzfTDXuTyW&S^TadGkSzWJ|Sy?bfvYyEfm<B;nY{rk7d|5h<SExh)i&!qqp z&Pg&yt{=S98?bZHlCX>3QM2c=W*uEz7#$n<Q>&M4QutLBPpd^zn?f&ocxByQmAcXO zqwp6w)daOGQ}Q*6&AfwrTNZ^Fuk>{Nw7d6q)T-N0ZkVbaJn=Hrb*2W#)3sXqSvOyc z6?-mOB7UqTu5G&DmpP~TRAx+6cYZ3`<@joc=%GyZevdT6_97iVw%NjcKFnT6b<%t^ zU^xfjJpnHUFJHG_4)-#@^yBJp<@Y_etzGlC<M#>n-Td-@Za-vxUtd)4d}Fh9nc086 z?2x=IY|le;*Q~gGY_t86+hwPU6EDxGc;*w4#Tj0>ZK|fH-lCP&`QAGMl(Xbm&pit( z|8e`zj)0)B!0=V`ZZGNEdUNXfx$df5rmH`l&}j=1zLb^~abdbzxSM^ErOh&pjZY-z zu?o-HqBQklx!&HD{qw#|?p?blcS?|m$c7`A6sP^#a`cFjtGF<uRFssu6#LG59;r%K z7Im3rO*VeD#5oyM!NA%8AhyCrP_}(O^Gs@1M2PL(*wpO#!S732`aZL^U9E4<{lM>Q zn|^JFrg6=o7i)56{WE#;`Ag-m-I;S|9a!=4v-ot5y816{#v5IxWJTn0_{Jw)YBlNY zOl>=1)c2+(HIs!Y^|sKK4864lhs-{Sue;uIzAi|FYjTip!6&~dmA<=Xd|I__Qp{52 z6)U_?8#iA$r}?@y_34C9P6xJpp7i9V^OSFwWm2b!nDZ^x^^=_ZMYeOkk-V2@d)I_x zi^W%Md-yPQ%T^bG1y9tX?GGnlR9wmv8Ky`@fB&Ulw<Bop=ZK%qyFvab=&>q&^WehE z$B~Tl4;xm6ypv2mZ;^dy%1hyMGv-W|y|MrERtKNT&M=8g#g%O>vo^f+77R38>auxN zPhI4)-y+X8mULfu>Gfwv(%~fyY^poegSM(%G4VcWxP`5E<{GJ^i?gDFwiGVl>QCyw zX7aT<>v`VWKN}Jp%g?F>3JbT+*dSVOk}_lFEHmE|w?bB&e3zKI<Yz$4t%bhn7iW1a z{Pg(Y*H;_3W|uDA)^#Z*dVVnn>d2%614|pIb)NXHLF4N8uV35WUp&nFWAEhUXU|C) zhn_ga_k+Ft*KYrE`PX)ZJAPmJ$k<>0?ayi1jq~;V%Ae@o)=FL2wo)r-9(%Cc5?0S6 z)jwx>Rf;BV+tKZnA-Me9i#0OJeoJn7oW9)g`YfA#`;orQFRiCA3e_wNUQxFAa*m-) z<<A(QG9GVJom`J7hM7M(A`{(3cTS2uk|us~X~nPZO-=a~lC{qrS)HRExLuVKP28zA zcU5VIari<b-{hr7^w-2z9aggmNj`h=+9GZ*_g5R=&ulvZN`c6!@qizwxLj%es86;0 z%#O+KxBoEDt($*+qG{Qe9Vdm==9|BqGjsBJtNJ%H?lf2ba}r*Z6n1FIEUQLMt(@f3 ze=oJjZ|mS%8@@QI-F&^ngz!GauSzDF&bG3eJJfhia$Tx2)2UvvCoZnMtyBKYywEe@ zkr$&kx(b`m{-xr3TIg`kwlLnyCZA$$7~8k-WK9aOtiBTR;?f~4d)2MHP9BGU2G3n# zv)8$Qb<!%22+7#z7h5MQB$}=D>QTRwYmxgbgyT@^=h>gQRO@D~n{@H$lY|wPiCbHu zJNchpT4N+zd}kr7YXBc6YG6=4Aoqkv=oqJuP5Hg*_xp;=@9w_y<hlQyRol+y!RB4k z?<6jnw0_U8S?`#4a_i69Uv%`7#=ly-_wBj$i}T*TeJdmN;(Nufb~g6CcK2I4C!gED zAmP}W%8$p>jxbmAmA^iAp|!2|25<e$BkppUU6(#=H_a5hvFRje4o7;=(o><8w|h?s zS{1*XZ}(j3EM$40b>@YK5=f1J1Q&rHu;qEWcY9aeKEFQy=fp=>U)O&)@O@r}%?gnp zflr&f#dO~ME4km{Fs-fE#jn@by7$S9ub;|ZUD146S~9auYVus$EWd-Qm95-%`+uC~ z?)Kha;d*n^>in3(v%b^y{(7BCk>YZWst*60p*s5zAE)-giJM*Kh+S1ad7061j$z*c zwd0;V&k#j2q>x?!YMS!4F~{57I5h3(wjA!ZP6NU4&AfA?rf_W6{4nvtiJPxZ7+(AA z>o_?m>L^D}k=M^fMySoGMjmxg>&I$_{RC-g^o9p0t{jdDHv~;)i_NiIuEu+-4NI@Z zfq^B2Wx<st2MadL2~NIgz`H=f1=SL8qw9nVQ$W_G1>w5SuSnpZubINO1nV%#5=%x6 z)65Hv(}I(Gq@VSCt$)|mbm;V_WpnJ0K9+rDQ(1K7NO5}Hu37Il>+gQ};hg%V1`(_c zJ`;$SFMxZ?YCOzM_wnrj%XHvUMBerV3KRy828UVTaFNZhF?G8v5!{Bd>uVkIuCE>0 zpmB#k`9YG)7j!K-#{V2W8X1@rpfTCpd1c0hYZB%>0e-#xCQ@pbKg_kMtgXAX(;Kmu z3wf*zlBpVaIUH7QbW}gWbuc8W=hjTl!wo7Ie(YtOf8O6ZIBU<81Z7T>WyM)Zrd;o# zi>V;`U}Ou}CyNh(!-LSyt7D3}RiEcJ<%gSj1)7DOVk^-&b0>E5v8#99oGQ1NvHQX8 zO~p?=_N}(${Uv}c*cud>0<w4#rS3U_hFF+QQ$2#`XM{?rUF)z8&SI;br|7kjv*PA2 z)5gnl+ZPp_Se?c7VeP?}w{%t;c4<t0Uu3qy{PwD7ubE-aPTngO<QA^o=E7loe)X-W z*pQIBVjL!+JGDPYn}1rA`}AwJ$Ii?(Q)DL{U-a;;+!a17J-be2hNWtSI+LHBtjOxg z<A_<``DOa-32aWUdNeL?5RX~;QvM5HMU7m3g2n{v?01J^d%wG6FPiiuC`x_H8{SCQ z8+*4eT~X!Cx%pglXk5tlwHNp9jhoQtVYhfTcj;0a#&)BOS<!d3+C3NZ9mf*m20Sba zuJACIY!02})yr9au63SAed<!T1nnywQoi-)9sJ$(W$o|2m;S`r>|7UruJW>8q3di0 zS1a$jT1(Xf9ht_<CdVYr>ON`u$xYMZ26|1xz~Z1_3?8+s+d3yW`OpM>9r+f`V?m~_ zPgj4E@bQ{{QBMXm!7(k(Wn;PaDKCw!ZX9!!muCCDG=378s`pjQI%t3FncEjv>hbOp z!5YDKpiF9Dqyx(4Q^G~kUSAQIcn-&Ai^@>xxjA3sZ(ZABb+{<YE9>SjlbUanHa9*! zvLQ9&hu|%(yH(GgY;N+c(pq;i_)KKxwq*sLx@+5%uPqOcmHMKIEq61<f{K}hgc%;a zoVmT6&Q-gFmD#d@cQR++Sw~Al3Uk=%q9@ziviNm!O9|IGnUh$edc~(~T>{+Wm zWppMy)t|{4&NJ<~9&7&w(blccl6?Ot><pawx&HL~i~B1|GcWXF?I9)!Hv|dKzPMq! z!91zOoL6@whMn8;?eN<zI=taoR@S@wx0la(VNv*|!uqZ3+}h`7qW3<TCC_8c#R4hE zQOTLUpkD2l_0Y1QWZj>4SGc|UYQJR0`^&HOHBP_iYkueB8QxI+H9MY0-kN^*$CI9) z;r%lU%A^iBVH<Uwa1K;FJH7`El$soy^6=;9^}92E{&o6RqNrVdaMIGt%Y40=O|bgQ zs2e;Y<qsOGJvPHs#=J7^;HGM^b?ap9GpnQu9I;wg2)1teEby4;rbH<R?8-X9%GS^F z?G2oja;M;W_v^B~6|eiA=iU1G=j__vZ2rAF1NUzKyK>d%f?%l$*nRd4YzBLjU$0@_ z4C8D6cWQHS>7Slm^iQO}e8uM{Cj*7g&#io!weS4CH*JTl=X)>*VfE&vIbd%(K)h+d z!%<hC@TSGkm}^=5o|1R1pU>ND`t6%|esj(FcQ>5hFJsiiI@XX09&0FB@bQX-Z?cah z+aJdL`VW?$6_>Ejl-Viu<wuQO-~!8?_gjJ<gU12di+fA%RPY~pf3PAJ>&Vk#M+UF6 z1p(%f%R8^k2snR?7qP`x-9K*r{IYkK{8cAycWm;Mi>_b;SF*@sDjwRPoUmZG&(dQn zZYLiyP~bGF%Rlh^^W}3>r1Vv9crf*L&Y5MR(1oo^Kd=nc65Wz~B@vQnCMc?&-t#N# z+RD25<`2IAs&&4%=Kn3lH@{k9czGt;IZs~1GObX!c&^l`?!u1feXD04Uno=9a<1)? zTsdrKUeeBj)dlA>FJxkkfHeXQLCLLAUAdrjdTwbaHtdbv@#~f4>pJ0r?Uz@XMBcu4 z{_pkY?zSI{Flq@U^F13uo7p%vtX;dSW9nk%wbDnK8@GM>WqRtA>BHlnL9@D|q1#!R zd_&)XmOW}7>wkr<xGV)FrM|6CXYnjO=JM^_*I6F*t;OdA&GO~$UNlcTTmO4EyIX$c z<V=%n{l)wLHs53HKmVAQhqWmEZ0wHJALn&U-SK^!NNB!B;9h_CmR&)rr<d&vjY_t- zRG26AFK<WsX_-W9<5Sx}E4;tOs&wm2V}9!7zhwWJw{y$O>N3l|9qilqy52bJx?q3t zua!5`FFm~ccc0>X1B)l$pUyFVD-`~QGhmj$Q4`6^)x4)HCiWG7e(^qP8G|#HmX`-; z9^%r1>EI&Srs#R<zR2`vd$#o#$Y}0*fHACFVlyiUR0FKLuea>%j_ubsmuB4%y#DN% z!JdhIpO?)3P=45UxnsW~wkF;N4+gJZ*MgNM##`?6#5o+}txYc8B^PtHmdD3_@#f># zufG0Tk;yb=fBuF2yKDddx_;fgHlW-yw|Vkf&Nl^XGE2K&Uzu`cTj+L=%kzIk9jv)* zJuiIg#wOpXTI)`7Z|3?w$Lre)Zlsnutm_oy#o*Ozd56z2;Qh0nwbRVzNiAM^uqDyq zM3MaSXO;Ya-_LMXhi+QypMPZ5O6Gs2>g=1`di$?6O^UL+xN_yTZ7Wx5^;@n&toHQW zFPMAMFIhFqI_i9w=OK)qsGAz&*||D@g=gn-I;`B7d!2>Z7(DF<o}`StUH0qv^O|2r z?0J3VqC-9}U-O-B9!BxMgi!};De}?>T>Q^ND*jvc%F5s0v7q?blfCx4o_)|Yk1Kw) zNBZ5LyIs-qme$_v^*=YG{_70R^yLJMgcM8?`@V)<TeD}g{2zJ6>MDiuJ73<{<)3+9 zr*1JpU^?4jW-PUOiV&z$zc3pzL7BKCrE^2}^&KaTxu@OTTu}P<hv((X4cypj<HjCP z8;f_>6_+fZjBFk0WsD+NJw4L{?CDidPvc$AHDx$;4^~|<2@5kj)_5g0I40(C-(km& z%%r`lT3SCCG0Jm>#uK0->fj55iBiJ1q#n01o?7{FqTAsVseO~x*Pr*dE`PaP=$ZK> zFPTr%99Z3?J9bHh#ilBoNPV8m%8gkpSc8h(_P7qg=9O0@w(1MFF?ufeSj}uVe}37r zD;1gt-GnlFo?I~rvyxd_TDmkwN6<s}<a+&lZcuytl>efL;1Jz#m(r`#o`5&1FLk`H zgsn*6Py}@^*;>F!uSYuQSkHOs57jf>oRfIpKFLbx_#!z=M0G>Y>>01Gn1oH^;%#i} z>S9wnb7dNM*f&~q=aMDc)<&(k|4wXkY?jC6!Vn|f<vTV7`Rxu|=9`=T-m8eeb>XQQ zf=lNuXit#L)z2!*YSL5LsPV=@iia6XN;41w&zi@XfrBu(&E#um*wVzL-W|qE(=I%h zTqH8PVfxy5VT-$!8f<H(?LDZPcBeYJ>s0v4%Tb@W=A2!-#$og7tv#KVXQGR}ABN2< z4h{_0$}+vQ`_V*SpP38)%t(kkmsTh`XM<6RO8m_9qe4|zqLWkWUc0?pw02LOFYij% z>=?hmfJGtlhAKH&It2;*p!xBy&CUWp=5?I~^-4^jy^=IXe7zD~)w5HsKmUBw|6;hP z-l}^6O4UJE=1khewJ=pb)A7{q%2wAsQzkJ4N4dMs*dP?=X8hYzRwL7mY5t_A1y6R* z^3+v2+aa46IPJ<ct&K|-=?Ai-4+Jck)lkGd`;zs|knKjzubP9B_ZeSpzO!d5D|hfp z!>s=?k2?QNpPv4Cc1rKE{pkyqFP_df@7;IapDhO!_v=63lR14yl3zp8N&QD}ma{F~ zQt{g*-PpG*sP*us94_DWvWw&1E?XOQDesKal~)$3TXp6y%ZYySGB_>Up%OjSZqR4! z4NJc7ASekgR*pH&u{3Rq!n--7NGNutqN}RO<Y%9FuQqirlk&WJSwv;JfR(J4%7$aP zrBmXKgY_dU-yhq%ci+u`WGC*8k>PrF*<QEqm`>HvyOizmJJA2;rU$ZWSfXo!2U9?n zkf*WdK2X)#?;Z!<n-MnGcHg?V^~b%17yPMh{&)B7@9X>b+5KwX^*L<n_6s7)h2MmA zb$$Hf7Kuok$$LfFwdtC#`D~$<S}U0+ELRwJ)vYRP%8L}=)t7_(c%#qEIC{)HD%fJZ z!-SYihgUXr%Sj(^orKLTDxfv1%~R!~b8ns7<>*zE#iF^~EhNh(uKxdm^_!1he!o!s zA5zuFM&3N-HES+x%P|D>K^syzF9okYD}6M1V$+;iYX~paX|9N3j7E=QPz$zk2Frpg zM_f$)um(*aVFmu18#+F=-kLVzYGte%j95DSGa*%L9#>IT#~~7XK~mj+XP)8=&^)p7 zp~x}cd6665%xhhpecXRm-bC&*SlW{eERPgGdr@sJWd`kt^35vB(rIiEM9)~D!6XMI zPKTA9&1tJXWd%(O7G~$3fn~UffkUMMw5-m-XB+pED=M=M{-6)#IJgOWgf4P)bM}dR zyx__bo~>WICIlzXmDRzVtyH+O<f;T{RPSyo=0qiD_VV4J^KfKu%T6t}(2`CTzoL6E z+c0YSQLh=1T&p^icP*K12AZ?nW&CpD0w&D(11)bek>FTXlvPz-?O$4UDSrO>_XQRe zpKavMuM95PVf?^<#gtR;KHn6pTmODt<l`bU7PB|J6H9|MyHz%=JLXl&y>;!h|7)); zRhkx<@iH=#eeupJ*Ib{itf@v@<(I|<x@)iGHL-}z?(xXaELes))_8&e-0u<YeST%m zySKJwZz}Tq{La0&7|G}EaA!s9&B(~)V?7I}=d$yp9F}l#+Wu#$Q*(rCaA@3$z{hFR z1NJUFvOwKhT=;4KB`eh<8^X-PyhOmqWLPZnU)Hqw(Uy`mPMQ%b%-65-T%{<Gu|lAW zD{^_u&zovrBO4ywJt8t|67SWf?9Er7s9S%RO=3o^#yNx*NIQM}CNTRisNGmE&v~pk zYttsCzqZHiEvvq~*!Xz)u3gnt{+Ip!zqGho`sH%++v9d8&wg^rHrTy3+{n-)Um%`6 z*wpEnk!fD`%DmNA#gnDBUlpCY{?ZC_ucJxZynCngDPLWFiv8m3p2fn>2Ieh?xQx>+ zZ9!W==e-xMi7s0wbF$p@^MM<Jb63s$b1^Jdg<bwyR#uklOb^BU(8|Emag*#8O`Q1W zMMUPWqfUDr`QOd*Eftk^{ps_#eNx5~yW;I;*4#&wiXLPZ=wXC>HjBcgh{t9+VF6if zth;x5^*+C1v8mX~+Aj0|2ix~Ali#}Eaksls`{TiVKKY9OlbfykW$$d<{IfiAana(d zbHPh<rTy1WIMQ<LRE=40=eC4%9bdL-v~<i)vy}RNZ<>Y^@8-O+t<ySx%JYhrCMCHW z$hW9H&Jeaal&lcxdhR(Vi$@h=Fz}dB#GR=>*GgAz^Ng;vo&8d{WJOpa&lfJo&Kp^Z z>kr(#<8@AX%1Z64b2Zf>UDx07*z3r@(P-8VpRH?qCMM5bD8O^UQ4k|-H~s)+)%l5+ zYy<pw#j}<E^13~cpH+2kO<{1_kCuy(H%<O#o_PN9^Oy3=R;G=CkDu%73I6%_;^DL@ zo<Y3cJPTiX`;<&vX1MVRcjPg_xhF1HI;qMyTcpf)id#5k-6EBp7krcrja7HF9)EBz zZvD&{(YrAdLWI~;FHD%Rs7PW>Yo~4E<{c$c$xE(2OwF*B*ykD}>Xzx)!dlmRMZ0aa z*NV;y;xX5?ZZCTx5U8IqL;97g2oq}Z^RQ+*vDUL$uQ_Nk+gukW-uVooFY`C>_608Q zla;Zmwb6c1Y~j{_$~O6pWV-JRquN7~lZ!Vo|1RGrHes4X-<_<etxH-rWqGXVw5jz> zmi_-mGD!2&>(iQyZa#Mdmq|&!ojv0jXw|OkjE$*VjCRIUte(lBvW|Cgj#Y|Crk9>d zv}UHG;gdxXUypgM2y9Xg>|4sv`KZrE@RSbA6m~S1vNQS2d)PhW(*KQ7y>EB(c=f*B z?ID)Y!y@&eTHSy4T+_5w6Q;_3;OF~VKL4HFwc1Ao-&a0nmV5u^=XC3q89}_7jF2fm z-=2wS%7IGWo42TNA3ZcF|45~G$$bC(52F4{dL^&sr@v>7e<>ES)pMTS(K(s3q~w^7 zu83p_zdnasQ0w!CA4hKdyvXtTO3N{!ds(WSo(C7WFWVS2OF?ZT*Y>V^d);15jas-S zVDamVvB8@5&pUP1j<hZ<=sbBM!C4YD=`?;(Jdi5YVe;}~GH4EDe$V>g$<}FiPA<;< z*XXzZ{Oc1^)>U_&a85oyyX4%Nlj(Eq%Y5D)w5?yr8E7bd1~kLB-rc*)M|bv}BViGV zudlB76!@a|Q&r(YscC$|vsN6sWV$0nSZ8T;z%;*AW>!mG^C9D@hmsRcU-+=%hL&ZX zZE@jQS*@U$$;(X~>lRgb>iRkfC0}2y*CHTXaAS^USWL~Tt=q0X@#c8C*ja6TKv!6s zMBdVu;@n@2wr2Kzn;9)-U&-3EXP1EPm&2FK4^7!N!<mH@t<t;H?eIqW;Fm1_HuuwV zPv$)I^~w0GHrM+7-SYc8cfYfJ_w~8|pUt;w;Rk!{YPptqZsz&te>c3%zp{4k-nq`q zf93rDUwE+K`t#Wag_nMci=3HZdVY@e>ZLbZRHBZVI~w<{abvV*W_h6)HJj^pkIu#9 z12gA#gHHS4%LkqIu}ylaa>=tx_O<6+XBkJuCRF(6T5onmX=iIHe>mJO_w@Qw$Z>|p z4?yPf%Ip4D&z_fIb0RIm;>LXWP`!u^35nO2{|*u}(=u{purys(!0Vs**wR!azU<oy zOV;U6MD>3Bd8DteqxbibXzJ;8`wEYmn#b<?qOCbOQ-eqIrR(Q_6%QY_M=1*{%v`o* zY1Qf}4y-|Ftu{$-hp6Rkx*?M{=AN0-=D5<cdEOIl&gdJPZcNKPXdtNeh->GGm7Xl8 zRDLC#Un0f$(!^7R<2s5N6WCZ(D%~POB$9gfTJw7K?)~lFb1uZsS85A8mQMVVSqwp$ zLB4m2Y6G%#7JJWK_;k*!E3F-~(Bjd7fhEVMVcH7OrBW|U&EBb4nt&$VJWs6jZ1%$( zgiVNM@>%}SdWqESvLFKkyeh+)a^_0yGhE4*X<GJH-BM4(wCufN7e9_=S2;cn`dT__ z*Bn-EEVS=j=(uuYHGg0YZdZJIqi(pCZT4MIy$Vt(R+ROp?*D@a4)yi_4>0_;HZhs9 zp==j;DsJQ5K+E>Un+(ewZ%_5ec+xwSuU#>2+u;cZ8W<EC4IXl#3^AP%o*<NULcr7X z*~_K(n7n*n&6HmCacX#cb;P}8J~J2XS@!ti+iH|{PGbM@;#VTF?|6O)FPq<0)t1FA zntI1HJLX*5fwsM`oL(tqeO@qWp_P<UzRMb)8fU##ogGcVmYHips#9(;-ah0iqWS5T zkmCeySK&EdPOX?b{R*4ZoOPydTh_i1%+l^U6aUtI<E7xUB^j$vb?1D^>g;e;J<&4F zkn!M!n~hE=$%BDu8RrQp-redxH)<EY)JRBZVVEMNJY`Gj4!N0E)|Q@scl-KU?)xt* zrd0WV|0ZW$W@E0dp8n;9PP=oIp_jlW$eJwmwA+l#Hw}(SO$)!OqU$NjVG_dO+FGf# z``B5%g;mU*vP}UYcaNRk8oGUo*DUtC|DRu<?tOgbq>1`kYQ0krF6KRV?LvU4{TcDg zfj6Gri_;GY;rM#{=%yf-+^eod50`0)P1P`;a!vE&#GU{xlMcs^OuHtUhk3O|JP@4J zTym<#TK{H%?hZ5evwB^Ui50H9{v7_3Gx^rZ7x|Y?xxNb%x_rb}S1r`zxQp4ttuBY0 z-riFQ5$V(@JtfhQkaK6D2nVQn4V&d`XsBd*6m{qif0&3_zy4LRfUF>2o0VTvQ(1pi z_th7Dd2uoMxPNKs_b>C7&HZ<|aMkM<%a7mcubnjeX{Q*&?u+3joV&h?#j{`5QaT|D zX%$_a<o<Zuu0@|hrFdKNeyQ$sxKg-Hi%oTF?$u2<9_dV2<CT?as^)dTXNBhdfM+?= zmdxUCoq5OMQ}3U=$J?g8+QxCOdE({OT}FWdr=mmSu57xlyX=OCr9}_tULJkr7najy zJq$|KoR4+|EMJrm9s0+#u0_GMJbUw@Ff-nLv%^<h=xm8zbyT*kRZ^hew>8&Sn#(o& zZbqoUq$<7xmS{egW8CND%XNvb!M=_uAnQ?jhBANOn>pwD{BPOUoUi^B@muiwME){) zyC2&Rv)}vw<iWXQ_VPD5|6;GLxRdel8DcS4E_gB5k~tE#Yu%>WEB`EepUWwpb)&ix zbs?8m@T3yag=yh+1?xoh715S*Ez|mY;^~JOi;hf6&S(-zWocdZ*dz7JT<?4-S<Q<| zQzTZ!w0`Da+pe8^`_vSdB_9k_Cj8;u$bINp>&q)j+q<+Plyi7b`w7im8I>p06d0kw zj@r)?nB4H`ihAlJS07;!2{+Ja%3=R+EGy={TeoTJ`IY5XP7gm(u(V6n^@Ne%1<wkn z-qJ-=n3U@BrsO6EHM+TQ&i}jQ1-IH#DaQ%wKU`*BUvj%^&#JXKT;gXha;34fie4%9 zv((nnZlA*K_5R{@6Q{oteFkRrc8#4g+SXVLZ))=2;26Z;a;`ne()iXEP0JW5rQ5G( ztG?8}e>6@s|FS$2SBr%khYwmuZjIms6RFH^!JG2a*B<52?gTCP;%|-rQ?Rt^`NmJ} zWvl<Q-F_fZ`s&8Pg_n<SX0mHf{<7kZ@v(V@*IG0$tIsjCRJYzx|2&&9v-9DJwadP` zM0u=IT&R}wYtp>HH7$Js(%=POPrAShzJjKmWaafL@?R1W%Eh?WF<EW3+sBLow>~YK zu2_3HU*Q!KZtc8xN7-3f-{#PTE}qZnSz=3dHD8}QQ6v~0*Y->|bNXvRr)SPDuPeDN zDmpn$DM_2fbSmrYWqsF-Se%yxaIm0MLJCHVUxRmjoRfFEUqr+7+uKF^_Wk={TeX96 zfBB~^HzSjmaYf!_{Qn@J{`<>!$#>QH%I90zJ@|NTUj0tz4$Z3*%r0zN8zh!BW0lg{ zw$oDtGoOlCc5$o}dl=M{q2RY9>GjQy)u$nAydr%}y4_AL<`lQvqAPxQqWFH*#N!)6 z4qs|pa<p`2|Aed2ArrN4x+Y!f2<g(Fx_Zri={UFhl^aYiF_~Z7ZFr|M&){NEYz6DP zS>UB)4E`q;oqu%usMO458-rdkn$DaM*C*iV(fsA~k#|AA=XH1Rp!o9A?1oKFyz!wH zd!>z;7PSXW4xBrOls2JboZ<}K@7}_78Og7&wyZgPdS1G&{X@+wtE;Sn3VbC_-JNjF zE3un<`t{SV&l!Alt~n<Vdgi*v!c&X<43e~%*9I#4o=z%tpUZGmgwxK@eNM2e?<B4C z{#jhHQ4vp<FWKhEk!exCN_gt>@)w1nK9@PP7r(ag5#V~=JVUT8{7B0*gMZLAA;0T7 z-#LkioCn_}eqQ*AYpEPZ*|u$Bdp)+iz1SPJy6dP+2l|rI2^LJ37FVB4d^7vdk*i$( z(>OM;TSgnnEOeWEZtnMYyWi)msP5lhe_Hte8n%gdH!UtZZCrkTt6rTI1<SxRx^GAo z8tJ48$yYAnbUS=$&%;$$*aZB}oe1Avho$MLpt$^7!B>V?$cxTT@G#leya=p|UA1%H z(%pfj%s;>C+6V3Vb?*23-`|q=XNS(a`04VhMXuc9<+Z!?jc269X-^1FzHFyznYQ<y zSnRTe$5PV!X9X8{#yxC0umA7Up+}eW;{vz6c_kelQ+#=;_x?#nGusYLxOT7iLrnf` zC-K8x1y6JYm%D!TD6%%U&D_Z7bm_t&LzIGDLQ&y--K1%&9iw^$GY&_vd7U*l<X?3) zGUv2kmFX|hj_m7ge!5c2JkEs81}_D3llzupc4CVbKS$=(SPn6y<fvfG`9U@7i0o|8 zR<Dhf?20z19T;%utYdn^it`#lyjNybRH|K-^YRV)cnGbg0avy+8XA6FP%o4cNs*E+ zalaz4;L44??T<R&Ti^fbXY*_Wa-f1n`xpgIurNK^+%m(dxxHk$bGg$>&-S=YQjhn3 zzn6WX1mCiN$&TR~Y^dcw1Cv66JyXuB$xE)^(6?||0$STY`FQikIkV<${C7S!FrXsx z-jvVFEA}|gRrl|kRq^hOclhVpZ>i=o_kOylO?JACQV=n)I3&0TO!zWO@Zz;Cxhhj; zZFy_O+$ep1<w6q+yt~$TLpqeu+F}X}OxsirTwi`r%XHft8Q*|_tV;{0uQ`@sv%GEY zhJOwB#Xnqr#@#dDq_2;ss>W`<#)Ua|@|{)|UKbI+zGLk%9&3yUX>1XG(0wIg<*b%w z-!^9r(~}FV=Getoe%;#sH22gL%~RP{a;iF3@qeKk*tFh&Hn4@&ee5yY`0_Pq)7idI zvsoWn7h$^dqYy`z>Bp+3+9J>rBE9=ps`Kw|{{6a2TDD)z2XhOXu%+pqS$kG3TefP? z1ubc9?^d>;Lgw77x=Sx)1=(8!D5Ip=h65*552)LB_SYXu%V!G6dUMzQqigxcspZlo z4$D^|CWlfiAV+>DsTbueZJU%)vCC)Q>X|*2e!V}ox2awV;c|MsZCBSOp}=F2pvIH9 z@e-bId|fCf2Y^=TDRDfw=-;_uMvXjpXUbF4j!#^-SEhY^{i5;074@j8ZJnl%&P|!+ zI6u83D2FL-Tb=KNlIIIg$Vq8`j`cH)Zxc%Ey7F{Z?Ap|lEoMi|K;uSSOVyq_GmD~) z(e{)uCAsll%F40jS#agXu4*0j@NM5LZ>67)Iuox^_e1LNtNnj;Ck1)T6-<@-)}(EU zWdXrQ$N~a^CYmpq<!n+@As{)rf-fGnd8`PI92*L^%Zb&LF;2f6>6`aYC>dS15r z|EI?}b(7az{PLaWOUai@2QgO+9E&tcT^_KxtG6(F3bws4KB^2$)tIZdtzSR?{S~vX zuQPm8wYj=K&ujbB{$1X(=0U{&1<K~-C1qvb8jkxX@!oU`&bpDa?AO~zC2HTlRc-U@ zJr@=f7P#HF=9#eeW1WVe$&JnYzG#C`8;lt%BNMHUcidQTCFPSuMdj+#37?@`ys&P9 zUTn8w_mXV~U!F?m=31Xw+O{TmaaRKu=hB*siRsR3-^FM)e_SMin#dS98X7#AYD%Tn z1SShbzv^~g>1q4<$+d`zi+}FF$}O>pI%@K}^ZAtyuioRY-^*jJ3%h7D<x1CUPWD+@ z**8D${29D!>-ksHxLFrmRw<V_V2y59i|~QN^DiZZIIQ&S&NC8xa!T~{_0zXk1}~p- zy~L(#I(#Z*-IbEEGWq=X78eU2-S}8`%i8MqxtZImPMX>q2(ovfr6@?>Wd>+{h|T6N z8y{%1OW!1Z&sOdc(Nho;kjWd<8V+xpsAvFMNADxY{U`Gd+xE|x`;^lz2pmN(2N_r{ zH8G^j+VVn8!!+}vuUNCmyx_yy637d}b{*A9#8MplGcCFNL3Z|DP|v*l{}J)IE9cDm zv8u@wJrqF>bzlO`&oa2&-eoW^c=PL{rMu(ylpZfOe_QkK*|lR^+wa|3aqsrOkgJtD zPHsEvl7LxsDNHbAS#TxAC;XMkkqSRwY=^b@+LS*-oYtZ=*>hno7IVN;v2QN&pX@wT z;nyo5@aNxw8=T2$B0l>oUf$t;KEE>M`|LyW(tpmoyRrSAuV2pxE{uwZfk{CCbXCKp z3=S5STe<rs&#zp#j0JgBn5-mdRoKRv>fdJvWZf}6dek)U_F=~cY|e28b=+QvM0c64 z-}CF%;ZJ6%r$nBb%JyFh$?CfAF2y@J^M_w6=-!7rr}DRLy!d6-F)t6x!X9gk$)tu# zrixFKE7K0AFfL7-aX@|Tt!uWs_pjT2@nc3Qn@Z!c_q;!9>Tb;pdc2fHTC?<oiy!ZL zwe_o3uGG?B<0Vue(|2jt5>xp;w7!S~1Ir=K2RH9znrJP!vLrBlCg0ab+V9OWoF$Fz z@(;XEmE!F*-7@*%0fCpsCYoJmzjUp=(jmoj`%~=MlrzOyNA{aeE!nauP^^F{_o^$~ zVJAb(%I*hehZXOUSw9??9b=v{>q>!NrtYFWhssuk{<W$SFu^^Izp4G$sha7V6%Uy8 z3S54ZrMr0XR#nZ^hEtg7+d)AWRNbA<>y|9JdFy$`eA{fp`h`=TXY;K7|7p927rt{O zuf4u^J1AtYV|Y(ziA|bx0BmUz!WM;(EEA$9S1jxN%CS^!qfPF^waa(E7PpV_{C$xB z-ZT9d9Q{4^+oS)6hh?#BbLw3IE5koxmf_nnY?~nMCS>x0z=SK3`&Jp4%@%G5O8(5Z zNhmHp-v0i{h`&~|^tUbAVDUZ^`!Vwqa!p{TC)Sv3udcR@Ue1QO6QH4%!$QVqNuyu# ze7Q~;&MC7>UZ}1%+_&dy>V*)<w6_}8Y42CfyS%fc=d7#Qw&268u=FXc%{O-)-twft zSX*1yD96AB?eJ4jyl?Pg$mWVxHRmY{$ZBJ(3R<nRC*xoKS2HWQwQ=}Y^J0|Rhv!}O zWv?*QF`9EFk>NRdwp!rNkZHP2UNRtSO^IOjib=8Cr)p1IKYe@fazD-WFDs@@*j%)1 zt9;(_)XW`0mv7#z-Lv<x%kj?S<F_;4zj$Mve(#m)^*;yJ^}5BN8_d9@FhLPi40*V} zGHYHhlao?R^djDEg5eri4&QKQ`oyB4a`ncBVkf7jpycmzUFvrKO!As<W0}S_&ge+O zbW*0HgIK1*wHv#3FSru%Ms5~E>T}D0J)y^nvnqZTPEHro*`5CI)vb?{mqkBeG6uy1 za_VAWlopyG|A%Gbv9`I3IXS(0|NcHv)v~N8YfU(_Hx|Xh2ll8-m-qQ)1Y})Wz5k4B zw$1W1ye;{iy8@+<`XiA1bHI#cNr+U+l^e_47qL8A(5|}Nc}`hp;ia9Q@6~>vTfeq; zI{TL+lee!@K8@HfG`T=?`LP8Nmwz4K+B*H5<=wmWj~)llJ-(}TjbVCh#l@fEv8SXT z!7mvy%M?Gvz{t%4>Ip{Yt}H@2)NQ9nvD<3y3oC6cEHV~m%>dO-;NA_0;joC~&y#fj z57B;Szk>Dzt$uKQ`yY>wudLtyKet`}?l$*5Klv~Gm)rgN)6wqfCAGWs0|O8GgOB+- zZoGGj)Z^T2$Z5>amh1lA|NP0z+WguLDf{+BoxQU2{r;<8Zf4IndMBXjcp#5OXwj9L z4+q)VZZGY4u-L8lm&YByxmK>*_}o8)^TfH;9$8Qf%R!AEEGGL8`OP$X%2dc~D8SIT zMIqtIsSn}%|Ls*>`s|+j_P5h6n=tj)3VZdgb!V9(ReX1HoL6t>oLSeeor|^c-jkcc zrJehJ-=^QiKcDxUI(O<^n)x*A@ACiuyjsqCu;{wTdckdGp-&~XdYu#|C^2ycX4(Dw zk-YigrR4YV^?$!E^`7oG&qmU+C++1z8*t6;Fo)$udDH*j`~OF8%ZZ#*m%zuQFhPn* zYN?v{oflP;%>M0KzyAHo_$$$2SrytZ+TL%>uj8~dUHLLNduzg6sq8y%vcH~Mz1~(Q z|BE(wt25^;6RG{@_1`h>3r+;BcH91G_FPr>D&NB1=wMaZCFkV|x$7_Q^AVKfIKkp3 zeNSU*TYk#Lt5;psmF?SKtl#weFXOGN?jK-@?2*cW{V^HefBtcHb{1BfbMf}=>>sbW zSsfWzf_xR!OCDd<KK{Zq*1u@xF^^rn2Tzx+2}u^XVj$KWWZd&%a!~2(d3WQl-+ocC z<rmW=hsWPHy)OmTm|rhn-?QY(3H=_nx#3qu=7l}ZD>b`NtC`E|cYT(D;_(&vQ<xhc zDjldl6=3%Cc<-G%cM2aLyBPm9`p<R#TQ9Pws;{{yd6YHKQ;c_lpKy`OU%j~I10HG) z>OA(dOX7P{j54e_j;J`?*Qr_VyJy;GZTl12@jexdObQ9|Ob@3|FY&ZYJ0l^KJ!QMl zvWpi?YOebHdAMtl+g>*ghn0p-nz5&2YM$O@b6$SiW4`%=??%0CN2G3@EJ*11d(R(w ze6+?-qo3>2jGkGVKDs~4>sQXooF&bwTeqs(EZTEOsd?c-362|c8U9{#jQ_U%ZkhDo zUJ>n+lVg~_R@L5cWMD}WS`hqlm3DaD<<O;-A0M~Zsr;MJ@R@_f;eY_+uV;#>$KTyw z+`-S{pfH7j(`0&VndIN4IkS#za@6uos#LowJ!RICN3wFyFX?MO>i_ZT`o+Zy*B8m3 ztybFT20dH);@edC+0xY+YtEE={xr(Hs;J}xT9EfHD7CX~cR~Jo@l)Z6s<R(TDy%S_ z$g;!d^Uw43b>DIdecyG={_}g;jPPb&76%0@#$UHIG&D5y^seps@h08g+uea5?9Pud zo=?i<Y8n|hmUJC>d3kyM&ZlDY1g5XD3hdv@;jnUJc)g0&tW8_bU$m>fmh{i5&^w#w za`xBwe`3E6&i|A=(+$U|T!uE^?@e3uiZ^JVPlo2)$11O{OwT_$>2T+(+#ix=Of|PY z92JlE**>NC`MKU@mjm)<Ej*nCnz&D3@#wYu{bsZJX4ZL5aXxcQIGuRgI5;F!57adY zPj^1d#-uQzjU^+^_U_h?kx`s{@+(a_*=C89SA3gnx#nB_H(_1HKmPwql=H8qKIQ+j zG;UJ(zu)`kNA9nyU2^T;+KrEle?ITjKEcsk+Z@;b{W5=lYWmYTwxxGk3KzTkpRrzC za5uj0XaDrSkM+OWu9*M*NPNENHH~^_u{D`%N^-Pv4liDKhSz3F-+TwBd4Eg({3t9{ zNj~1U^!}errH@^r+G6@~duo1uYHVcmU9sfZpI_Ja?|Zjv{kQMmt8JX))|>y^c7T~9 z#ip@S`23HX{__8l0xuqF?Y^SFZqKV#JBy!}mVZyNVKfn7d8F>p#8>;eN80>Z{r^AD zU$5J(SJ(alRKGGYZOLI-8?ZU!;-XEPj85HBo4IVumMMA)PoHnHcvSiAa`O523)KpK ze!G|-x2@vhq;>w^mo5lgafpfW$(4wPwDQUO_SNkRUhwMr#YbtFJ>2QOuO&YGU~iA; z^4+pD3$*g{>+PfNwil16ZS(7WckJ4xMxW&GADe&l2rtM#yZ_Hq{VBf1&t|4i$`U>r z5V!o;g-uKm&CDzg4f;9$v)^%lU}O|9@Mzdq`h(eaBPel+H*P*>b^2w=xtYf8DYIJq zlU=-gqj=b$9jltk)u$IM-LuFbdU=}<_?+h{5zZ)U3Bir3mzjP)eO|?0e$}%jVuQvb zlg~*N0oxC*b2PLTR#<xM`Dfc-FBZ%7w;N?AX`03?JIKbQATXO@Zsg_V{__nIo1U?H zE-F#kX6x0!z)`VRr+4x-DV~ItQr7Wa3T6Tq)C(@Uiq9>-S81|;-oCFH-W+Ob7dE8Z zs~(Y@qcWEv&3>kH&i|YK>ruAldaSMef3)86c~kL=aPg?GUyzRgo0n!^D13gw^DhhD zf2yxIB%?otjq$dC$FVo+A3xq^+_$12I9T{>OP9&-m)h}>cduS`e$U6tdy|cmiIMTQ z&<v|muhaL-=9d5a8N7Vn(mKQJZ*M+6K5tR^X-ciLdx}DWG}EKtU3(|1`&T{gRXbC+ z$#=VgfIx?1!}+?ZKOc`@Ul;40Zg|q<)E@PJhd#Yo?t6dd_l@_rZql(X{Ht}QZqv_* zmZ0Qy&2QFUS#jGrJK%2h`@L>aH$I)(&UEkb<nxQRO1Jv+*KRs~_hRua<F{)HgVi^3 z$}TQCcK+v|uj%JwY|;+hblbC#hvUWshfh<avUJ3=U#vEX>3I11%AdQdvi-J{fBDY; zV7sq$A8$*FGt=Ya{m+fLG8>nF5dY%BBYmuAg2RD4mW+E=wT5#muT9y%?<d<7soh`s z9x*n0uy}MYT<u=<N?1JF)W~<y6sc8nr_6GVSbppnv!GY+&U2pnOOJ)z?tAm^?Zv(O zXB$*Ldbw`iK4Y(Eb>F%&FE5+<so{`9LOPRYXx1W=IohV$;c=xuKB#}$?QtctrR-Td zbj#qSE(Y7;fIG{4tzWO*{*P;^+FC3AgMArHOOCF%J>O&Lvwzj{)p2K5E;Mar4#;|A zcV@wr8Lt<93Cikuex-n`c5b`ft)FLJo^xgmzhho^siZg~K#Jv!?}4TuXWmnJHxJGZ z-Tf4FdhYd$7ZW#3Jrx}2xw7)>)$sIldkoamdH!zeoFmoD5D1wUQBY*bP&M6N{onL@ z%w&Q50wyMf2}w*@OWRh3J-?Enmv>cs-KnS9PjfFhH+F~L-}&<2?~HH4^MASAUc4^p z$(1EL%zZ=ImmU+*Q`|d6syNp<Q{Y4fliL(2rU%7(LCF_1Oqct$uIW2?ePw4~@1$^h zf$itco$F!iIo1en)ZLiKpj%P+?PhxYL+<zu$psypEDjDL@r#llB=Jtqe6fC$U+=R= zVLP)z_gv)fwesqn5pek0%EqAN_YcK?n;pLQak<s5FF{#no?TfoOYIeNqll14N6_Va z_vRg%5GV?64KZ-2^f;WEFD4WwEYrxqF+))xcqM1~w=4RuG_Om0^-7+387}74yVK5F zf9bJ`+hu!q_zAGJ|7y?px$2H#@-bh&NXr|S?-!TV{d{s>M7q3Vl0t$x)3qs5S*-sX zo6gs5ie4<h548u>K0V+8UgxrR?XsxLS%)o6-`w<1`OQ(3^~N?26oK<05xC`FVeZ4F z#eU`A=l}Q-@_b{SV)mIx@wk$IuG5RG_ANYkZTdEgaNA5iF|X!^xf~K9SvMN^=Q12U zDixIV=8Du2l*>V!I3*@#a`?8~^p}ZxFi~qwaPsSq%uA2Od|xs>D0xrr+VyMaes8_` z$nx~R`^BHW?AvY^VH6)1Qt|4}_xoAD-fZ=kg!<{DhUt}QE9JM}T<hAwj?^JYSR%*~ z?=gd;Mg7VPEz|zXU58?pFPt-LmC_oGoaYBYHoXVgq_q6m)~&_j=Y>8$IKsM&<stIL zBRNl3&Hde9U-$KLTf)xluIn7pvsZoMnd+t};33HP*o&7{WL}u?OKk(!i;Ja@x-^Y~ z{s*p@W>xr|eXRfHY4H37S8mj6q~5f5iFWgN#Ckt>``%BlviVQno}w8H8t(I2Q*!86 zZCxS%hq+wUpsm|e?XNNCZ8_(;UUOYxcE4Ge7XPf(Ia_3{Sy-5i81LR!E!i)15RwBR zogN03Acq4}e1zrtE8f3apzd+=o1Ymg&*c?d8m5_7BHNsDVMFn0@)KC3_M1QW{4+D% ztM~f*@813jVQ~^%O<YeyO<R{=HOUi}dU29@%hu5CIb7mJJy!0P0upLWUsyT!rp>sq zI11rMiG?gmu}!c3?U3je6wX$;sumWw$G!)&KUw+DlJHv4;QX3qqqLfP4fju*NC{<U zs2^@ryp+zg<m!eV>Bvo;FD6XNsMrS@pXd5GN9tofulEwc;0&*<Z0{Y+<=LAzGkjjm zQ^w!L%igGQzve=A+hXScbwq0Iv0&=l`-bNn*T%<BCJ0{Nc~QEjH0um6N9EjE-*?;; z_W!r});xQKv<msB-k0a*#jD$T|0oXsdwbn<xhH~l-(D<!eSLlZm0Nf9!_Uq6FKKqT zQ+3aVpz8m(%yM5z3Lk&&BVj)4-%r2S7rWR0y7%Lxv2w+NOy8wb^bfa4?DIPtmdN{m z_WPnwk1x69Po5SmSac>veSrx_gknP0T&Yr4k3}1sq|K1~(w@o*Dzn`-`<*R+zyJNm z`|l@*tMdMN;};cJQFwj%?@40HGRHyd#R?y8UR#J5L^|RLYbl;Iwwv|Z#nRN|cjw>K z&GUb;?`4*oe_UFE>&dxUy9>e}+X~)>3?(UQ9ACke)qi=5#;UbBvz^l=rEh<7Nl>2I zFj4=|#53%<$m=CNR2f%?FAwtKU1qm*(`KFPtV@q^S)H;n+<jo()T}kPzLb>zebla< zY5(Kk?LVxt56`{Z`#tU~p|j;Ssyoc&*s)~IqMfEW2NQ+)0z_DXJPy3Np2+3w5{euo zGyNL$yb5Dyy_~DFmEWs(YTvXg9+?|swdE#dUA}((eEBNZzgAI8b6gYEF8{zYj{s?9 zxjsF*ckjHl!Hc)=%+`7u+9JLEs;Fqv+*wQdm@WJ@7;E&^MAYX%%4|?U$G|Z|Szy20 z;x)m|saa<h%J*Fg$ZBh@TJ;Llh)M|k)O9E)FwyAcn~$Ymt8C+DF+6=Q{pEe${r&&G zehrkr5*u{;LCMq2tgY9#SamC1nH8?^!H93$3f~`#7xJ)mCn*@@u<VEv{(t?+22%!6 z<n{JT_!*x*623nF<>k!IP7!Uc*^f2WYW&%;XVHh?ZP9^0riRB~u2m?1==wQ)U4-1q zt?&2$(0?9N(0Bj1+}DyP2Oj$S@$gnLrTfd)f4fq6=ZNtOOWPN_|H#iXIL^J)@qihN z&U%fU*<uO;h#bnmC}7~FkmLIB{gq2yhaOEjWMcVbd3l|nHkY)krOeX_!NxLICP%8D zH2l(|zHhEosaK_}>#~Ifn_vT2KcWuJoqPBAZEL@hITmGm=6>rtx3Bow+PI>#{F5Xt zV0Y|*t3pVys<byaPq-$uOp@>9O2#;04+cxqX9>6LmmiC%4q4idqs<Zdjm=qLgLLBz zOVedc`_?YI6;dgJx-a=O%eD~7*y~QQu1|B#Kh=w^-}ia<?0vz@tGvD+emyZbd8c_$ zBFEBWGEct*WxdF}^C!`tZTr4+&hl?-KnFQDX}^=U&)nsxEyCQmML{5TrQr>h`Nb0t zPC}an=2TC}Jt(DN%K5${#rnvb<tf5)e*c%HNO6_ic`}pr^t;F%yTpvn7L-Z9+NR2Q zDMR7%jZNtSNUOzq6qt5s$STg|U8*+OdR9@E(ay>YX^tgb3?{QeCc4=oC;p9`4(mJ5 zYMk|USn2thuSaU%$2qfN_1E40`e?27yxp14KbvniTW9;_ncLTU-<GdBci4BP4_7X8 z;|Ugp%LyfrpoWk)CNyk49g-QFD7}qcaV1B>T&d#2iow@cX8wJA>yY>JIq%-tfBd-e zT=HF~Ycn?M?RoL1TkmN}jdSx_{oKNJRhMLRrm!(u3wG@DJG<(YeLMT_-RkeUE;X&c z^J~J~TkR2uacBk>qsa|VyDz<6w{%X&9>247-=^f<Vmjo1Exv1c$?eJ=4l50>Tfba- zMIt}?b$0gi+C($^%$NUd)&1XBziw9j{M5B|`MKKvYnPpm`#q(wU4xUUOj#g!<<I@U z*Ihlb#xU^S++T&W??$y(px8LCVdd(}`ggxKMXmgKZ`u1R|K?4RD&z)jF|XMIvd|G^ zVf{B@P19oW^IRQ9ywfA^*QS1d{^`8r)VWjVp8fQ=?4A9;pI7~*o1U)Ij8o3ZU3JPh zM5@(6!Ih;)!_-!8zR=kVbDBP!aFf3=dr?6kFQRs7VBmNmXizk>%FVBAMo_W6?b7Hy zS3&FFnYmwIS>mWZlM8h<XW*X+ZjZnJJZgKOTnjp59(dGn<HWe&n8$qy7b0F3xYS*D z(beE$I;oiO<hQ=1>0xaY+gy|v{Jy>L-P6_Ax}62YR|>wczr;OZn>M3{Y1v!J)rDK% z-TYg+x3|x|SQ1`+FFzEw{{H*vEK*NfFYfrXYL?QHs}p=Sd#=zhdd2b7LE$Qk!sR8i zEM6h+B{6VT@Y~qNX*wb641<4dq=xCr^m)6a^!I(rYn~c-3~7@kcplxSVT;tXLS=6= zLD?XoUgtZXV$X(jJipRWpRLh+EbyjA)TKsW@Df5^wzedN1a_twUsBrR9C(mZIv1n2 z_zIQt4vRhe9a)yD+5S2iG6ggPvngnQ-@BG&c0V)j33sAQrdz$^pYzT}<fe0S>b}!A z1rnm8OFj01$7}koP3th?4clONb*jdkDyD~=rqlMZ2FqJyA<s#BBs1N=_2KOLx~IRU zo?aIMI+o2nEA&Td))&iwA}QWWnU@mgIDl3qZxTpCRJ9cgOxs>={iR>uy+kA^-DPIm z-UnX3{}+@Wc>KA7*}3sfWU=_WtUc;UD)08{x?Yv`=;6HIbo}n^*RyBG{tUXuyZ2C# zsn{+twZo1NrmpYb^;vai(s%!`y4auX4>Jy}ec`e0)Y?S<JqaEjZaJY>C%!!rQz$Mi zbarZzX#AF-hGQ4^mRPsCpYb&}mTAp<vZ-GANmFXc<NkXZkA2O=xxC<2NQzYBwZHPV zpFTW$UblDaznjbJ|JwV1-1}@H`-_T-VEJ`FH94)mTxVeooZsk?+;n4uSZk2+nje#c zEB(u_>(}j=^sQNb&)N73f^k>(e!sW+=jna|_kJDC;M0v&R=fLQ&+J97%xvVfESVYN zggqMm2N_o16aW6^F?Y&t`JG?a?Vq*I;k?%SbKz`z?RTEqqMx^b>*SL5>3RQOi9MVq zzUS_4`Co^o?N>HEvP-+zG}>``!;MFe*JLfq`*Tq`b?M1x3l^EcvVy}hffw&y$=Oz2 z`D(sK^Z%{0=70X`)_ni9r^IGY=l=SC-`DT`bf|CtzP~qQ<F_+0H1&#RX>M%{njCaz z<;pdn)dwMSf0b^zb+hZxqdm(N|3Cce&L?ki&HlxSv$AvN&b58;adL$7wu@6{?O{qU z{#*9ZZ(8cPCClcnU}X{VRS4SmVov3`{qL*~q|92%`v2oHg`A(eJH6|j{)-*C!n04? z)0|!IU(kz#2HJAl)MB5$-n4qDeWlB}%E+G^zWgyc`h0GZ;VN&@NmHbh+tl}8<Mvrp zdNuj3R%?fd#!b;``x$wMrC02B&EGnwK;+danO)ZL6STsPe!Dbx=i;!szhz!7vu0HP z)^>Zi+Jf6jVDX#zp~ClMHfBHBWf64OkH_+d`o{Y=4IVt>-@i;&w^MH22l)Ec37#x! zezPhTJ$`b&Zre|F)BEe!)jfDP|4+lec@`HPj~||0dG=NIzn9Cpj?4Wu>@=NKzSy^+ zNP~-aiPY|XSq)RQ>JI+QLRGcj%lr23xthA664dsYD}}f1^F(;|wJla3W7L~(1fF@u z(iB|3KC1TgwCC}HpZ5KGzW4tA5P`hvjla*ApIa#XDZBpMq+qtaclH0A4!&OZQt(pf z9s9`L4}0}<?s>D<7tj81g?UMNOO$KI=iozGMwR)W#aqqaSJlZGFTY-Y_k+N66}_7u z*w$xE{ZM?eQRtHGf29pKGORcJ_kB1mdwr7E!L9bs4LcfNp5JKoq5b(kt(wBGS1X&I zbcKGoI<5Vl@Y)vh`Poxa7G3Blox7Q%_5J&4pGsyNSW=qG5W6MK%ka<Er4I_Z@;_{x z>h^GT)Ag_GU%Q+9TD@V`q<InjIX~Yi=iT+=v8*`yYk5YF&DTTT>qG8;z3wevRrB}L zgo{a^H}-vi*H&$_9Uk7{e)sd*vizFl!*fIbKP<Yt`QN$v<@@b_JoJB2QIYX_U*YdX z`a1h+@0#!5T6lP^_cV#lxp((p`oH-_pKr~<_gNcnPHkvTTXe(J%=(yV=C3{F_bZ>r zXWxH((DvgK`_+rjz~`#Wdlv5h^eTH7{}a7E8UId+o>pf4_OJVY(K*)VKWcLnA1Sl* z)fXjYToAUXe)VJX^1jDv^I(VQA2BfF4Q+O?0Z&}b&WBE1rG$Q+|Ns5IY}3@La_#fm z%IyoEu08a)eqX8C-Wm1v54qdximtZz>&2cD%4xc7|1a&sZ|x&YkN#+Uod4(Ug3t|L z4z{n~opRVl%Q(8uu{HkhuQTiO9=0v2e|Y=--^xnmy#;x1t5PH-*|{|o_kNL|yiW9l zi$Zi`SL_L%r=OUr%kO_L|G(`Ce^9B7%Ej|eR{Qk)dHT2e2^?8*Pq2G~!IT?M#Hao) zo%26pM`-BcJ1)K2eriU$1kMZ2`gwY`WaX*@EHyJXudDx<5TV}HtNOI_VB*9r0s1R; z$6bBC&{o^@XVAu)mb(6Qfy3}+iweb@bKbq&x%5w){NES5ZTIeFW@a{dsA#SI`=I<4 zo6!HSKc>%FnE8F$eA`dk%gc7W`&ISTxqr>i=k<GPa;NTMh&>W#VEEko``!(Aw@#7Q zkE?yoe1Gr%=la_^&HsNXh+p_j+FML7>P~4%{4*in_tO-YtL^=*Z&NiX`5JU-Phg5v z(WI%yYyTEl>v|u)F7yt^1!xm8H(Zbt=<sSN$*Da5`%`#}xb&Sr^WXgTttxzZteoBc z&6IEK(=LD9Q(xEl@8=<Vu0#6!XIU3ty8d6qI&h81_DkZb;isFA>diIw{<ywY(ew41 z4MLYf!|&<*`Se}?@5}GeVs;Orq@)(E+OujJGk?5$_SHLo4&~>a7jB*yQ~Tk>rJ2+J zJj=?uSiHUU_%gdiw^>B>9IuD!lsImvI-BxdZ;rKl=+?j=8<qIKFMcVQD$(MyqD^71 z-3EV=o%c%QI}#VAwIb~~a$q^;Yw`G@`u0B$4rWCiU-bCON&o)s_Wy27E@|m&|6E!5 z`x~$HJB69Yb{1T`re42t=aQ@b#~j#vqwfB8Sh?|1?8`}QN3QdmZL%cx+69Z-9okbE z8+#N5M6y~AoZ0#L{>^#^%kMAO&Qy($)!6g1-OYUOzXunWiu=WVx4Jt|zUIg3$;JDB zy_oa9l&|K)owZFDiXJ3<*geTog!|9&)xU(eem6SnvUILrnH44VTs2LoqV~6#>(z<Q zTspC(t2aC^*MGb7%d1J2MG4V$zcjdYKD>Hgr}^P=SKP--^*T2`oSSsEe$~#POoj5V zif88uJv%>B_D4c}cT9KKM#1Q{rR%yrEd8Hww%onw=-pR~9?w%Y4|Y?|Qb>EK9bxkC z>)#W~Gd@qOcCnJW*J-qR`oG6jLZ{2@eGlFI`Y3_p>tZ>-3SPttqK7Q!X4c)?F8}AC zu>Jq_Iqi>I@9*2O@|U93BJQlGtM>nXX8!;3&Vq+$r;5&x{=~XANICXE2A}atHvR^$ z>CvJZrY|oAhdp}Y|JZEDT+BnbO`6*@*qCN|DLi@J9m&f5?aglmgY<8%O&`8&-MsG4 zOZLt0R;=Iub#C>u^RsN8byc_I@BMt@=@(b4*L`RCV@~m(+x4%LmEWe2+j~M_<j3fG zSLO?Q0#x6yn9hFM|L0?)cYWz!iBCT#IlSu6(Q8#<nO6Tf`jGH`p?y`X{>K7Y-3<RY z|9zdr6SP;}=GTGsCk{tTuUo*O-v9H}Vs;ndYr9Urzp=-m;!#@Gxqm<ZD{%bwn90>2 zcD>TzP<H*+l+Vv@KYy{)s6{WxcxjD{<!sNp$09zYK1jNr@%MGvq8nM;y7wNg*et$l zu7u5xoU2>+3+4T7yYy|<^sQ<;6cEdf8zWfG*?s?0ZT^45w~uRQud4T1ube9V_w%mx z|6lRfFW4V>bMdv1u&k-GR?K8wl+er~z5D(_P=Cz!$n}*wSAVm$+mgG(uXpFS1tuIl z5=>&(R=)fr?XA1<`nOltpHF%J@0#`c`-i4Ef@WNh4t6{Aq<d}_SBao?b<w)AxwGEq z{`%Sdduq<?SL-iZnRajR>&<oNFUrcfZOX}UCdAK|=~XkgzzH3uEf03-Ze!-3?k{QF z{{E@I&X0T3W~bj&(qlnB-yngVX;$`!6aKtGa=)iUhQFP8LrTMRT2-jb?{D#IkNvPR z-5nRR{q@o4a+~tY=bq>1<;GOMINSSb?_2-Sx$U!cCN_aCaJ$2jcK_q+$$#@I|9^d3 z{OB78J96t^xv#<GDQEEfOADVbyb|$N^)KtzwN>7IbBS44-TAy&efi`ESC6rLkU%{z zV1s?*hB>o3!f&WtOPDJqeZQW?xj9JK-TY?U8pC<P&YVtl^?1%<JLbr>Oku(_mL;jF zKOb!ZO+v$~afbubShjfiF7eJ^qddpXTs0!_Mohe?HkbWBJ@e{MnjbB7K23vfEjTyl z@{*~`=14Us`GUH<ddrsTYl!??BaSk9{HEpJ&i_B2huh0qUvi78+_P<)N}1zdp?9+$ znI5{fY?aMwKBqTAuXPm_51#xW*s*Vs!Q7o9w{lIdzGB!Ova?M;?g|egcPlV3wQ;!Y z>R7wyty^CFo?qwQU+y|oU$D8p!@DwMeRPj#EAK(sWljNEXBz#%^8wIH%``ndLbA&K z6`ucdGks#v<k^#b|JRh?-^iL8oovk$n&qK&vfQ+I^`ckXZgBOO=DNo6u3oih;o1UW zO}pq;Q_d^3N#=5@Ilc<Zf}HQC*gaP&mG-FKS~^)k2G(c?kN<Eqy>r$1E3`5&YulfL zy8leh|NA51)w|c7FU|hu?)pdF=YCk3mhAdf`{*5bq2S82_1D+?R2dolUb*qoLyfho zwM#FA-PADnyJX)U-zc8F2Vb7jUnl5#CnaYIGi!M4dfk(&v$}M-Rh9XEAb0i{7{P;G zjXOZ|><#C?y}o=R*T~{)=j&B=`X^0%7AtOSE3*PE3HNCbTd}Y_S=+RC>QX1?1q&A~ zYV=gws@gj{*6C|ls$8&VZuHiG{dawT`4;-}W?J=mEqf{w9wug-+TLwlbNk#qUb%%q zm-fppx+45VAW8Jn#H5)EbVN!NWqGX=5+x2GUzY|Rj=$8)5VqR0U9LGOdDrxcLlIFn zOK-dQ^(y>`)auo^hJ0x0%N_OwyFLf-MCewBK00x4+M-XPufC>%Mm5*2K{++ZP;%MA zMe9PYWGyK_syutfEvKJ`2lvc5yJ!yhHj~pueO{j*el!bvwmt8O-mO!wuV0xEwdL4T z5!R&+&A~jJ7)$d~tQZ5A7IIVsY=3Jl<<)yt&uhNBBKWefdv%v|@GLmb*r1WQY>(ai z^L0U&l1q5IR+(#f^J!=Kc}BKg*ff2M!qdBZ4k_iWQ#ml@TA-lXnwIGo&(sB7e|_(^ z(g)2*KK8Y<oU;To-QI9?Z&K-d+P{`h_6G8}ENE2gzz2Z|L0J<bjctDPUgKJNOk-t< z&hd16*Z<nurcBWb-L7Q(s%ERQs(Sh3W!?P={t_~ueixmaUDm1nj74MGAEk43Spr_& z+x<(-E~luAng#iEarxR`@!WgMH+t)myEESMtnCX9I{hj0)Hc_7cB$Lg(9aNHV2l=C z5F*84vhCf%gaXhizbP~Pm2J=7>e|bjdjnt3Qqes;%OjBU?2?@|&RZWWTIm*)oXIuG zn`17YXw$;NXxXRN&s=d<etvhy_Uqo~CmOL%IJ>LpV`T89XX{p`6i$qDzSUoKYMSPL z4b(iZz`*p<l_AKt>WlakDeu23>w*s-ndNg6vh@ARGHi#W`mg48&&<2G>XX>4B$ab@ zi<Y*&Jn20p>F_gW&(p^@JZ&qLJHBL%{^8t1+9y`u^6>8!n!6^mH0spK#BRyWH-5Nf zb3GU3nB-k$5n6EZvCm7NEzC$$YT)#(B&4vFt*Q6yarP-vpJk6s&Q#fWY|l<x-4`$Y zY{16{nXqSFxPJ5T%kLMs|6gJJKWj2`<l<xQ-E;N-oSy$TM0>5Xa12j`<+94UvVyot z8H?+}>&`CMx_B)l`t-cLvT<sEX5RVJQ4}M~ez{p>dex(ew$>bh=*h%EhGm13ugr&_ zT&|_ZgbF>^Y)r}aUQEQQ`3<RWI8b+MgDQXn3XC?tPb#c<sKd7Om{hGDzeaJIJ@GA0 zYcrkT^FdtaTRUSJL8~J`2^m~4LKrht6l@nrf1c-4B)#lWK-QXu^D?b&SASt!MbFBc z19A^IoZ*ZdcZQWF+g?x7V6-&K**P_3^L&%qd)C%vA-12)bbYlgWTLnK>)v(j%{1Aq z(erlxURQdOkNKY?1Irm93rpqr+)Y>xEl=2XEKz5D-YtW+##PAcvV$BPzAH_OzyIl0 zcliCE&FuSjFMY`HyZy(48SQ!TI}#o)TDSOjkbvB(4Gy656Ek8~?);pdU%2#{`2H0a z?p$|VX~-_J)KMXn<xzOnCD)d}51sp+R(f9D;Dj^)Zt#cYjHc<LsLvOoG)xcQFAP*_ z2ufa8?XvXQ+pqS?mZl~b-;4hb<y?A9#&HT;W1^D5qA9ZylX|k8IUMv4H$V%0Mgb3A z#?M~8A1>TtJ+ac$_kF}_R<B;myd_uO-1zuyuKm=atbg2Iy_R(vyiAAP5?nM*%R^f` zP8?>leb*(wYNe|D%NsIXGG4xS{_-Q*EN!4=Z!MZ@xe{FywePwL|Gsf&Ur$WL4KDs0 z4GbJN`W)ha<!3E>c~$CmFB=OBqHboYel__AgGNp!C{ULAB?a}WT#wk)E{IY`LXyIg z2@KH(n3H_D8jlBxPLcZj;Yf*;=W4@zUTy(~Mjpin;8R|;doTXE?4j)JbEJNc*sIGO z!h4Or1nfU^qvG+Ujk;mG`N|NjtO-6$NkP0u*^@dg4EHU(67g_FhG|$&B6v0M9EW?W ziWb&ci&x*d{krv2=;_t7X07@pbkIG>yz17!^^P~o>b%@vp7_7@YfHEM#6Icio=!F$ z|1HE8>LuG<mFS7Qu{1=<N&xA$L<LEf8_GSCABx)vdoy_Tiq3nJ=TODBSF{)uJSj$u zUVVxD?TdSt-!Tb0wVvhMG%J30)vG(AJy)Cz-jrkF=hPQ&)^*9x*RX!!{*#MZ73KsM zJiUHoZN-=B{2CL3I=_!kKcAmFVfNCgrZ1jP4SZbECq2#nn7{S)!aq~uzufu!a`~Z3 z@iYJad`jI_D)~t=aHZvk7gHxMeS6BC-ypukrE2M?HPr@HXBE{R*~eY~ETjF$NA6w* zyy|mc6KDua{_WQil)SS0N2=8{k!>veZVD4DS!TuloTTv>bf{hAVJYxY;QbxjKK(LX zausy2DEGRvy-U`vS*f4TeRAeW?E<syT}9`%S*15l@)3UKqUS!-{2W)JbZ~~pEzO=O zwa!z2|2$^DqULX`y8k>G^VF#D?*R`2F8|+FbLp!2lm8{py)Qlc{(VRJ&g$xK`~KW{ z|F8V~yk%<T{O0cqH(!4gZ?3)fb8ub2rr=W_FFihIdHny!iT?um_V3^BZt?xk%DcMj z_v&3+YWOfuHGGl(vnl&I@)oI_+m=v#WA^$G-I{;e`Q;tA*K>cDeeiZk(86nV|68Z> z@=g`c>UaD5y;Xa^lFj`WVyAaV&llgf>67=fxdyKy3hau{6>ULkzy$e&;`Q03H|jCn z(T(iV0w)xhT(9PORk=o&3SRdAwvD57Y0N&ww{52lDnp}JM|;Ws{Q5L{Yw&EZQ(CV) zDik+&Z4#Q<(<iKTebaT{Pd%G+oD;dX2Y6aP^qIOtWaHxR2O5)wkM*8i)^h!#uv(>k zMe_6yH&>rNk~4c{aQc~D7Wt1<(qCTR_pSV#=gr8F1Reiff-63>Ty%QRc>YcHdfn(S zhgaUk@87Imw|CwdFMXShzlGOpS*G9l@$v3lTT9Ex<94=Yb&paKPn<rZUi!~Bx#-xB zk9(OLJ(GX0xUqAw-#1?g*%xm`&&{yvjAJn`UF@_eqNQn1<evl6<*Qzto)Y-^#`XW7 z*KYq;{BdUbw7T!RmoDwMeP;FfjB#wqj5v9L|6T4ko>hfzS=@YyaZ{y_&*_J^*G#?6 zwZGcarl4Sc!P`@jcRV{ff4raY_>Q*hq&w*s1l)t+MYvIWgVtm=Pt&sZVW4i7$DgTE z`)5Wau`3IlC}GO_sTOehsraeR&I>t#O_@tVW-bUg?A2y@Qd=bIZtv|VuFn~#L_AG> zHU}<|mA${|ivq{qDVm=Td9UC1>)6NQu5~}&%(OdY&&hFjevQ@{%{kR>3!bywj}Yt2 zKk@vvb?K^p(TUSOs-Aze{BBESt9Z{@DVxGa0oDBlZ~jh?t9W-aeSU7n%U4#W1#L@S zZjd@}mwszve_z_y@AKxB{bRL^n?L_%S^4)Y-?VwwYj=Mx3H$%@<8v{ecfUS(^ezAX z<wxgami6Y_f<8Z8o&W3T^>bFQ*W?#nY(1$x)&B05ijT|oZ`;2A$M<07{MzjQSKq#U z%g<`->3-|>|L4o%|8%5G3*W!<Ni^$!=hR!b|L@8y?BEcYF*W?dwSUbeZ?1~hFXV9g zvOZt$=6~Odi~g>^{^#B6e%T49Wh-8mvzl}2Z;If1$NwZ=qw4e*#lCOw2Er0W#$Q|e z{`%hp?OPCDc;(1N+Z{6f%yK@C3dWopGQDz^1;4l!5vgUuA~i?POxkPn)G3y+OV<h9 zbUn`*eJSnoGO?)BZZRDdx3`@rp3fp=v*&KjYuPWovo|-b5B^-<o!;}x?vLmC^Y6cI zj+J<7ef6H6Xo~8~1^FMgd}^BQ-MY7~KO*Ao1k1mdSZ^}+zgfJy`ix|-wf`1*>uJVM zb&kJ0H+j=eq2`=P#;0yytot%~UZAD$xp`Hu7B8;ddnReY^N<Un=3ARKbD6o<lz-gI zeq-C4pPMsxKmHzMT-&_Y<^k*dsLc_1*0Le;mcN@=OP>6lCgv*{y7X@M^uK@g=l!oW z7yb1+^-24got+=L_osiITl-DiY~SB+@9wUN@jm_g?(XvQk=vd%iRBqS|FhX8-0R6q z%M%y1z?~>Y0fxpBRfbZv+$uh=-l^*r#V`4|d8KH<2FAuS>IcG>E}ZGN%Ct4pHStoW z#?EC+rfr$^XG3a(=4!V9-`b>(LvuH5ky$uX*UBgV^66dEoIa)=@r~+h<vulUvi#1Y zZx{D5);;OTOy^?%R<|hXc5C1Fi?56rw{79AfB60TT$`KnYaDgv%(h<k{=hx{)b=wk z12Y4qH=gpGT>Q=S?QDbEV-^1VwuxSAvJc%b5dQx}bKl;z%g<ZBpL21sy1(4750?Xl z&rA4<y$Vgal6yHa_L=wWTes%@`2D}~XX!Q{Ue)&(<gao+-TG--(G%zIyZ3BZwkPEH z^ss+_>%PBU|2Og7DgBjmb#^?zYL<H2B|p|6x}g5YuhYNN;|mUMn)FwH|G$N^qc2SR zd00jlx##Jj#;9Ss?B%9TW}EG@lJAy1JjlRe)Zq~KLU`-c`b*rYPQ1}}JC>L!_%{XZ z4QX7k_>zid)J3-{ukF`3MVBXi$~v-Y`osn;#ScucH0>TWetaJPW9GU2`#v4B&atl0 z5;$R7{%hv(f4kmJ{qFBK@9WIVUz+Y&-LOxK2|JgulkeimCz0Z3-%R4YfAh0v{fjpX z4?NKfZu$IaPO$63wtBC5ljZX!Ss%Oqdj7ocGw0l!x5n^a@?7DxdCC=R&NVA%i`6_n zygcv6wfRfy>nalNt8Ug8X#IR(H@n>veHG2vO4+g}-rD=V<sFtkdTHTP)%EdF6aODr z%l~BkkDv_)ST}#ZU;E&B(bhe8Si`5V)P37rs~R4ou&?IlQwDz5yizvaQWI8KXF;Kv zBOs19DErO*`2ksLz6gqEe|V#={U(8#Nnt__lZu!Jr;_F6XR$WfP9N^q?JrV!zGjd9 znh4!<-Mfkk|LuJIS2(@qpLckD?$xK_=XGbCzrXX_Ded)pYQo;NM2fGT`^0CavUJ_s zTc`E+CA@kup=WxhvAuozqzjktu3e{nr==@)QhC~f<<$rD_t}(xQP>-j-}Pi6-+lY! z%#;6aKl_xM>U@$vZ<eE(ab8sU;msvqviH9Xux0787x4NUq4Dq6ruTnr{x?p&bC~&k ztG&sqO`_%;=4*ENoZ2<fC+-*j(px*@t6wpPy<Bsk+UaD_#($BG>EF+b#dpoLnjt;= zk7J({ywqPKkg)pdl8FJIkKdF0sXq1Z`)xngY_ZhMmD#bt<ZAxpW#_AZzukT<bo26$ zm)^9c&)@5uI}b6!G{qmZ5XOU%@mELqb!=_;33|)F@yl0zd7XW|=EuW!%>}crXzA_w zaL8TmzE`NqM$7u2eV?~J)%_kf?MB;&6IYpaHvW5vbg}6bmJ<D>pI>$L!}k0-Ctvfw z+TToW${MD|vs1anbYgClmdvm9-1jSAJ^yEJM8&zn`g>+++iDm4g`}KV+1ad;W`C5C zf0+UUlc(x}%^SRT$p(G)%z5*_dVcV&Yix3NBc?<=k65m@l3Ds3ynErs)@c9D%jj&W zuwCBlUms6DwmW_M?xpW1<lUJVL6u_Ul?;R5Cxxsf8W}iL<~F3goblzay86@)Kf2A| zP1@djl=FMv(yU2#2Lc&k4Qq!QmK^*4C&PaS_un`&XSv*&#Q$?mkCo2-aI=24%c`@^ z@qOz*zD(p@daTAiu~+KznFL1g0%6Yc!k&AbO*dY-F6ZB?`7S#IKB3CMq{ew8X4TJx z7p-C&UC#xca#=3Q?^pYATh8RSKKCC*EI$@=e`9IZy{gyWUa1vkSl7kwkIU^Z%{p_@ zB~!pdu~BfVpD)+WMes5eRIG*wKX|QPR$BV8%XfXSGRJIfy^SBOOt(xZSUMxP_->2+ zbAFxL3)*JISGLE^i?Gzbx~6@lordYN1I{ZAp=-O``ht?BpKu_x(;O5&vb^{xsO+|q zbFsVd0ynob-ZcA2tKtnVy{b6|Xq)H3U8ch<Ke`U(3g-#v-mCvm@|L|V_wo*fDN?KF z9uHrQHtY=TT})tM`qXvE>D=}Ixl>-;|9vQXpGruI`ScloQ`WgJx#@48mz2i0aNj?_ zt+v-z8oCQFbyR3&5i<JiIg@A3p#$(G%njgvFbn6EyvnpAXX=Xjet+I(cxln0RY$Y! zp7FPwdctdII`htML_-~{9-?cBXk+AJyV+qM)f6K%ObZ>3K3Q(@;GhVsh(YQkAL2M8 zRl7FW=EkE+*SM+A9yr?Tf4})>;)gYP8m1Qd@cf8iC@kh=X*0gqAg1(Sx8sqU+W-Bc zras$!U&i7@k4?YF`B&!(@3JjDrr-wKDF+#9M3B0STOE=^*37KEePsDMVcD%;bW?@= z->*Mfe>cE7@o0xa&zxC;7tdy>z)~u*uO>CDw2{h9(3YF?t8i`A(+6{w-&$t(<!Q(< z`<_zAm6C2hR={?gA>7Nr66Dn2+u(IkX2lMZSqeS+{y%o)uG-T-AxG+7m4>ONrD^~t z7Q1-l8PzT=aaqx6bhI;N`a|Xkex}YVJ(u5eS_6$_q}c|Agt-nz#@UOOUvgMxcrQC3 zt7o&5C#-RR@VS78J(JB$w^{$D%sDgb#Y&S2nLfNy8m7w%78+o2z!KR;6}=!~)v0ak zjV70EXtPbwFnzZBfFj41WaOnu;3Nv(e|Vr(%IvG=LFurio(2II=PFNVS?A@p!0e-C z=C3{5@7KNlCU3s6g30M`arr7{<Sm>Tf@~ZO4NeZ9MPWtdZlrS^8~om`Tc@YM+E~Dp zzvu6}0}mG5f4`kgU0XZbC-0rOxPC{HoWH2spXhFxFnGYMR9|qXNNf7CUE&-6{F>Gt z4jOZ>&%Z3p%g)l?oGNP}W4|h9L&C#D>lXih)G06JYx8B%ZKsun$HlyQE#owJnYJl1 zEIn2dz9-7`=da}_S8d*WdCOZ5qaVeWXHQo1+w-LO+{eeqBD250+_&$0+18TMa(&%> zA=jPfgdX{lubUGAZ_n~@GiH08WnOaS&%v`TQh{rJUcA*>sAW1KbJDHfGyYBq*;ByB zq+rm*5n~y7b5-0{*WK}JcYV6pET&w!_0=z1{ypAWy^b^0=IzpH%ebcFDf{H}Z}FOU zj|!8I^F`b}G0kSed=K5O&0RD8ot@+YKRdm#L`6Yg{mk;K5%bwvLo<Ue{0_)^)X;M^ z>rn%Hu)qliChr}aF5dh(r(kbsr;1?$pPkpPmKj3Hxz;=C`wK4Kx!Kn9c<t!`)lQ8m zbNCi{9(jDMS5`*GMB-7fzwJ^@&uvc>Po+HZ2)%Oks^m(OW%bH_0c@~5t+1DKf}Qfa zYobyc|9UL-JZsPpG+FB03RV_}1Qo%Ejjx_<{}yc2t&#Y_H!LrteM#~`<yS@@wQM(E z-+SlhJ7#a5ApT<qHaEttjVd@FedzM_?#AO^64$Mp@h&Jp;T&I=@*(-ZFWi^=&+h|W znowSDZs{|{9C2;Ji3FxgO^2p<9afe8EFF}2#&~lc<I-bR))7q%91RV6jm`c4KD<=b zk#F^s2%2`*^}CIa6i2XwUX`DX%1Moql>c}4oY}p4etdT2rl6SEg)U#;F;}lkk2>2W z#nqp_V9%UJ?<M@<?6!YC94`DC%<_2FtXU~LTK!=;tdU3A;irkuQbYTXnq6+r9UlbV zrSu4cj_Bc<ufV{hJn2C6cO8Mx>0&nff8CvaedA1LuXS8!oo{Xaui&d0_36MbQ7wy{ zNfT%6I&|h;rT3X5f~<0R^B4JcW|f_MrRtx*{kW2~XGZlRs}n&P_P=kQw~^~ty)5At zw_bdv=}87|kQJbmKf#m5WoDbV>9eA&MgHYYK9iR?GA%tO6`>QD+$+7tL18hc#_0tb zM!c7ELL^Ptzwa02bJ&=~ntjE{&+V{O-!a~J_CPaUUGq6t%#=5)t*m$`1C3at28QXG zDtnJPR8R0qW(eBU<*?FIEb<3<f;I8vD<MPEX9<r#`z%g8z1ZgdiaM#wZ+43BRXx`o zl&>SKey=pk=U{kJLgBqVSu87EuUVZCiK*gx)?YVeNsd&h!ihD8H+3~&x3wwvG;En; z5WVQw2^Nhdmw4X)Xb3Xi^C!@nqru^s(2TwB-gPhe8Ib)wUPbTS?nTcme+ooz3b#3Q zt?lAEYZ-fyW#2Zu4AE(rah@kUDPi@C8UC*gL&N|0de3N|QgXq+{@3Le)|>-^M%g?L zPJ+;wlUT@d!|0IDl83?zl$;KnI#?zlACRT<ok`6h(v96&;Dis8e*0S8&5PWk0)9N5 zCG|4)>4jo*Z~udQde&#Ay-(G&=!{tI_SSUUHz6I}=}VQ{rk^qlzy6`L?vPc+k68_~ z;LRt815%8E%Q*8U&Uv7C=h_FgJ6vA9qDxdRfzG&)(*Bab%%nW?!0OPVUuV8HwZ54; zu}9A|*S~`OZsBp+m7R002Ze@CJ@qO;99Bp>NC^h$Ys$!(1!d-3of?ppb5)jujm1IX zFsFv5X@t#<dA4(V_<mil|9gGToH;4m%de~m3<=zn-B=IxHbdhURfY8d%C^5WQ+^2t zWxlz#HX!TGHD%})9EHmqYvT9Uota_inJc;}b5fT$tRblIma{|q3XA*|-R<lvO}@Q} z)G+<_M%;xJJf1oskY(S;-h36!&1^SKBuxV@NI<Rg;A7Og^5JRAP3}TxE#IO9^#j^d zq+Sbb^y)1w+W_jDHBNMIFv^~EF(c)&O0!lCD9eHlb9yE?p+xE<V?eNe?2m&Q`}3ri z*WGceer9UFH;QGc+TLH>7a=N_7&1nArTzKwu`}zykxt=_X1<FO4#D<ErC2Z;PHtO% z<<F<^`yE#zGEB@Q*#fe1E(vl#CPxxn1a>@~7A<u3Tvu0@%g!cwsG}Jg1sxPVyjlPL z&;0bSlWQh=C9h^=Sb8k%Zes$ZYQNOeaQNYi*RRi?J-b!L{N^O~Pr@f5Re)uY1jJzt z3>-_i8&m(6TwVV<cH$yet=_x81igCiR<V49wvvP!*SuL%Uj8>XAz{M2cPY8b(VraZ zluWJ9X(j#gSHIIC3eAHK2W%Sumzuj?%uu*ILw!~Wcl)L{#g|r}>floIo&WvY?fkXB z3yt&7u7B-pbbM2E*_FJ?XYY1jOLd99$RTh-gK5^(x7$N@YUS?^%v7Aa^Naud;)%P? zmVnPYxO?^L)WCoXGgt&G_P+Gpe?R}{?<qlPn>KBlCK@lLI;Ucl!6SP|l?RAY{w2$l zXuqeILcS}7eg73Edq*cf?E1x8PkwRH2qlK4$7IYjOrKROG~u|>#xO<db_pvJ^3^sQ z{0{60DvtIoU6N&W@5aWAk3t%z*LEwOoHpa{l#~Mn{NRLy+^}I_(o}JXG@F<*>(lGi z`5OHz9xO3%3lZ&Qm?G7~4~r_K7S0I)rdcNgUWLW}zbfDD|7zL)#LcFR8m8Oc$*~~y z6hOr#*p@<}AD8P*<NjZ5Kf#%4G9l|x%S@(X4O7jA9xX^LqmT&|95M64b;5NxO%DsR zXPNpic=aZRXkfeO>!ovpT$)tPyp=01CA<ob`XV<4be0ke#>LGF3`|i>fniHIvrHBV zUR&n5_+s<&lG(3yY?j`JZJRw9yi30BP3CPA@kU6hfsjkI8^3P9FQZy=Hh5R*RH;iD zD<Yoenitt0UH$&gxxLc$+j6%z|G)jP;?KI%;`#@JcfGZC0&NDAhDVP>)|6Sj|Ld0L zM)f!#d$Vokfd>x~s;hsm2wYrLRJ3VRlW~*`UzxgJ{nQ^XOmmr;nfvWOp0=1OHP1^p zbfuun(r4VU?%#Qh6++}28Pe<{rKAoDpPFRZgKQ?0t&qnwOVjV-Ur*r$2K-uiZ%&pm zEIr1Q_`*bN!9nCM5~O>OFoW|$YU{?Ea~P&b%`O)>gr(KVC?Mg;vfxV3f^%-ch|(6K z9Zcr<F?jX9<P&;sXZfN&=Q!qhRp4X*x*GHtmv`XO#*k!I*&K%i7r_;p&sP5kH#?TK zE$`$M*&fl@6TkDsrmb@Aow{dY-y^Bux+90W3N@DRsPPIs@nuTH&dWDy1(%8@+C@g{ z3M>{;+G2a+NYDzw3zG6(4<B~(PWgRf?H+l4|G(SZSDerY*!)zfXTlD)&Rfe@S-RP? zm&~4!Fn^`AqLa<yzQq^51Uk8OY`fp=*PWfE)t%kseCJ1pm)jh}?CU%R-t)zSR39xc zc<<1wr)Cy*qek?i21|QUVd0j#$){DfeVg&O8MN`+p{&fzmbdHQF}+zkgmyIh%A8(O z-4ryr<j4vJ7Kelsp#`rm{rY59^)G3GqegF4=Za{fRQ9u9{gPAbYAZ`8zAD=rl9ABM zV`32-mRHoZ%JsFw0^g6fA|#jl2fmr`fSqZps!r6q5Ye4G%ZdX%A5Z?x%bIj-t>5jX z7QH;uduM&QC@J4Hanbq*wK5s2P6g+^ee`(c^|B(_xQUVrj-7UsQ4BlT?W|bR@+8!B zYiM{#_k6}Jky6#1-)HU;bo&03&7MKIWcEKv@%tQ{-!<nQ*wcUO)a%&NW5*}N7)cgN zbv3a?IJ-`?IgnI))}=HuC_AyHZPDreuOIy%ddVMaixS@);JfjU?Zq%X6L)RDwVSJ$ zj`c9HIvlWK6v}wfd3SnTmF8dHxe>~*O=d_Y?R_4U!MRkebpxo&d%#0!!`^#4C*Hq4 zZA$2tH&4sI7QO5IqAV|7P~x@hg97V;ddc3>g}P=9>w0Ie3c2fX{Xh)o!Z0(Bx26|Q zt8U$7ZXT#H+2-i;$+I?hy3Aa#;=tkHIkPzQBSNk(mlJq=uk^ND)3#ly(PwhjT=?~6 zw{v-eB!9^Elp34lt+wYLB+Ybx;d^t<l4~}Ve*=%(Ui#^pUKKjIWZ97}y=N=BkEg$K z<G4FL`<&xrUh#!5=Nw&T(;|ND<INpwmsYJ_VsE5*u;k3ij>}2L-CRG}S9~dqQ%<$^ zvKMCge4}Z<G)r+()A1+ynx`gm)+N4lUE+8>?B1@svS-dt+#j+dwIZzhhuzXcEh(>G z%JujxUNM3D_?pL0Hj3q>t<g7mtg8Es{fvWx6yv0{3~e198RIk`S65fBqf%YoQKy+} zQ_4XHI^J^zpYtKiVX}QwblxuSNk;BoT-_1B8qTei)?ayZQcb`f=g!)0rB^0`@62AV z+FlYZV|#VS&V4bjZ|(A5zQK1Fb4TgcJew5R`4<}`%5_?{>|HXgPI~&gxR|rL)yd~H zFRazzvbwubMEjPN<&q;Gr@VV$@^{{rE)(4=FVF5c`MPhHSol8W`=VdP|7U!d{4jW5 zX<x}9wY(M&Cx<8fy(=F3{nzQsZ^@|L^?lnBso#e8{oUpmYKL-}TxJm79+a3YYVRfg zoLBU$-t;MNHR{(*^Xx3-J)~xL*!xW9L(cdw3zhkUtoSto-9y$tnZE0yfK__qoFw&W z8JVT*#l<(KdpWn}NY1;eq{d=uZhdsYtyQhR-iCyIPf!sHjXwQ)>9*6GS7jVHS!t%@ zoaO85(s#^T>OI#K7RJLYJA59OSUo>Ke}B@^E^ob^Pt@&yp4`x3+UD$b@FA%0X;r?Y zH!_{wTR<X{<w?Bt%b+QG`Y$)l5_<R5lz-_GslZcwZg0hRt$euMbKNtmuQhsQ_Q%%s z`!45U$zD7^{dD+B?f&D-cW+&{&UF`aV)*N8NBROpcG)R28k+Cgn)}?`)Fw8*SUcrJ zAy3J!WX)B{dQU#C-BY*uq{;jh>zr@TJJQATW!Z`)QR?!ES1dD&yb6-$FXZD9^J??| zG;fojQmMvChG*g%FXdLxQC7K=9@ls|WqwAty0V|K;>vXUmD3v+K30@J@ow*Im7QBd zW<7Kb@^006*K(##YvokG;%WLR7J--UYI$ht9XqVQ>Yl<f#@3SNcaFC64_;I_|EFlX znfLubzGeMp*WLeoFps-bksTn!!XvCO^Vzf6`THKWNw3@g@7K|8@yT(YkLuTbJYWCM zxYM+)cEN)Vg$71LrCpM}EQ|skwvC}ro2CdT{`+x)c|o<xKV!AOQY)6IznJE8)A4c2 z6zOlT7ICR=Zwryy=vsKf<jZ3{;jAY6^T%FpPH`^qoDll-<Gs#8yIpprjS|mKdS~5Q zH{)_Z;mOYjdwySWU2Z*%=l7C7GN~)fF3k;K+J0f1`bH(+GZ)=EOg{zIT#{9tE7$u> ze6?@ed68a$ub(znwz@w1T=M0X+<T6TA0vaFm9QR-DP?6lUTO5mB%(CKP|V|qj7|Aj zDa%^7lO>9kOY(wypDfuJH1|j7)`?H=Zb-3Tx8y}`Wr&C1o1-G4kyj=zQkZ-E&?<Yk z+j5)i3{MB9O81(iGU}-9a+_C|zGunBh5$YmAAt`)Yy9p1e%ZeN@7w+VfA8P_YSn7J z{eM2GdQa1d-F4;t_t_tkHfk90>NH8q89!||+GF69@Mvf8_xd|qAI;{idH=&_Ue)_I zZ)!fc_e*?iHd0_<(o|bu8T~S3sc_iMANGgOXOuE>MdS+o`}Obr^%fJYAKtsZY+gQx z+wbzc5dEWf@+&*zp0ZyOk(;tQ=&J0};wLA5vKD4+YcS-0crJ2V?S~AdnpK@e=NG=- zdFu3}S(2>}?Ob06D5S}FJyYB+wu+N^;c;Hez81go2FXtvVnI7Y4;(!|dEw<Pf$NnX zC(hE6yf^#cN-41u*%qC0hk`QK%#ojE@%Zb^LxMs^Q=X<yef&oG?!p-k^G|hM<NT8O zbn~%@ueS~^_&#&Z77dF%M|bneP5srPy+~j2>WOsqiZd6kKJU46bd_NAku>{>lRr2# zcc!i3dwF=tB1b)mq5yffmWeV|5jhQUZxh>-&8|jFUm(KaqF`WP@ZsZed3oEaEsGaF zo|3g#+w<4-Usan{uU@@-_wOGcAD4Ja{+$)P^Jz%e%eW(}^vj>?M}NNantk1l&*i7~ zy<Z$$lHXmoS(lOB)yzgHu<Dvs=C3`n`TO^-i~1G%@n-z}g?a8}r~7W{p1)Ijeb<*9 znMG`kK57L;Zu@psMz4yQy8Z47nT5vF|Gg~MyENzGE2fgH%jOv(Zv6J&z8tIHZ#-FX z5%hpd<pu}e!i^hDpG~@u<ES&u!ddA2v9ROYHvK5lc4r7PDO@5XAtRHMpD%BkC1N`{ z+V*JYvdNd{TKo+?@S$|M$IZ$=o$>4T|9z%$0M_827JnbwzO21pml9o2yYBe=T{Ryk z>6ggfH4myj_U`SmH|o2;3p_$;sWplS2*}I2c26|jowVLlRsXF^|A+4PnFX2|;;TS| zhmBj58J4QO-NnP$j5O5R;P8l(MO>gi`{TwV>}>rC3{0F#4w^O*Yt<ZeCck0x@}0zZ z*cR3yM$*S)&KS9*F~azcZQ_DD4O2FSg&bH^fqG^w3{#}EXH;I2SmFVh+yXZR;avme zwgb!O*WJ2u<;$Jo^M9>geY@nXzw_=pmB7HfghKV%Du+1BxtAUj3hFSKw&5TLte?gJ zWw?nnI=A!1R=r&M-~Zk}&pZ2mU0okne)sF@@aeTrwO5C)-SzC0_WD`Y+aEOZ+j*Et zUS-j^b6HKgEau<BD@R)SkAa*a(8^HX(RMiSrUduoypuopE`1IzU1cU0v}8gm|G}`M z4=1y0<}aLc=S+T13EN|ly&u=^IQHs&=)>IQx7HqCxn<uDx4T^y6<&FV9$k^=+32QP zZ=WQ8R5bn4t-LjXYeFiHAHAxy@e#)p-dYX`$&;%RbG~eLy`Gyf=c1o8v(4ADlZ%eA z&K0|UB_zsva&Tdpi^M&)1U`R3!?@S-+cq}$T`7E1q4av{LG?@NZ>}w5;gC>p@P9ea zs#HsK$?>A<z55i`Uw<t5>b0~*?XMF5_b=D2oA*svR$l&}inaCc%gOVlK8WWFp5g19 zp5XOn;guyU##)Sw0uq%hFNC)2+ta&m5;Lz;=9SlOcPACf<*d;Wm14T;s(7cjU1Z_z z8>t(vtZ-<smuS)3!fO_MKRwXY*(EwUV?*!MpI@KO`oYVuG}q$fwndHCuY^oZzY)A) z!9M>>hHH+U-0dNw;5WVK{LCJ^OR_v_0x!M>*8H8fWZUeF;ELl%uPd#JN^e<lOY*Vv zfd`V)!>?Wmiw)GRTX!MtCCf$WlN0@%n_ZM=sQ>B__BXrtZQG}+@VN(HgdA1+Hc@rb zqU5>TUi0UFz8JN20l(m6FIL;6+g6P?65ZZeNL{#O?wO<S=JnxtoBC#5w?z(;0vFT| z*l+(^^Z943oqVThbMrjM!q@NRAFwy_vxqPSWEn_+I!g+gEZeSIn-_U5Sh8kOs($ss z`uEA4BA4{*{}e?nPr1YXvdQ$1;ObqXfee4XpPOMHushpq;+6#$Enhg@p7lx5Nq=ST zsz+b$ip0!Z@wXsoNz#e@nQ!IpTAa1IIHmuA@jQ#>*pQ%W3cOP}{^r?K+_flWZ%&;5 zt5zg`|LMcVjk)G`l>Rb`#dp6@xnybGq&W3T*!G<6nbGMvS2~|}R~W}#P5I?`s;bb< zikDZY_j1gBvAGt~+qZ_~PfZCcYtR2RSv@qp{ol&m3CngSt%{j?$}4dG!uQi^!i!^9 znl&2C_$l&d34he_kg}#{s}^bfex&gzprw!de7)dbQSs9+`?LN=d3CH=^W>)eK^29c zx3#6r_dZyvzgJ3gt+5(I@!zIP3IdG{E3SAX^`3wJ{nwr?yp?Spn>c@{a>{*hZ~(QP zZY2~XcqV2)NML1Bp5jofz1wp!cZFv0k|i5DmR7vDllF1aEZuX>yDo&<9o;RbyxrC> zadwH|+G(XrPM2N^^SN)PHPJM0oqqTl*T08%={sKN58hYVxz_U~<K>T%<#Up3OT+_r z`TpN?;q7;c<rC^|3m4vN{URvNedBGgP3_bN+oW?-m-Kb7ceQ%rou#?ZZ`bh>)9r6e zZQuHBH;<0_`6lg7M)uaHi+Tid#b>W^%AR+__}t#@M^kJb9t|!pJ7Tf*abD+_n+v^+ zvQ`SWv;3cSaf$K86Vr@;L|9##B_$^p`8nEIYS~7%keO2^-B8Gxw7h@Qzh|0$yiEc7 z90hNg_I6(>eE3uUi|>_yi+A3Ltj=03_G-Iv_`6xA2Q6N|(&${dO=Sklk$romw30qt z;fyoMF59`}$gzrj`9haxeqdtKRDQ7Fc7%@qWTQKUp)5;}aoH7?BzHtRvP%m{EM)28 zTDtnio>gm~el2<J7QW-x^foU~)0Gzdubi%bmE2l=XKiVz?xm@=yKhX-x88Z-u--T4 z>(Pc6uYXyb{ZnhH&E1I~t8Knr-thCjRq5j?O(OZ)r(T=SK9_ePyLwJx*LQ`ZJ}*0_ z{GY$W&gi1}#ICk)f>XOT-xt1D_BglaO5w*X8i#HkeDC(NhbO)9WM;WwjaBBi$!VJw zeB9=4)qOPj`-ICEcKEMMSy6fD{Ej_L%U@1#;$5`W*6(`aizJ@+7ONjWQ)vu2akE0{ zT}M&#?yZr(d`b-_uHQM&ZtqUh?;^$DCRe{#^DNTg^|R8}ES{91acb+uv_&)D>{yhw z?&pcLDS4VF?(?bC9urC}Iq`~3f138Hz7Mu@Cj4s@7TBQ9_>xb|eABl#^DeAdaOKEl zZ;8hrFEs0Nq*#EOpkIWoVg;?amw3OPmGsXzt+ICCq-l$yjm|aiDk!a$dfzsQ_u$L_ zt4|%>t@gEQLS?IKSdqgF>5pdW72>C-%71*e?T}MmuiqS<Lf40PJ<4^{%x&kJd{<d# z;ki_h-TB1Z&_};d<OC~E;eWY!$8TH7T=RPYbNjk?yY5nU;q1J#J7n{3o;InY>UU>c z-jQjte?^|i{8^VTBuwzy81PwTPN9zk2iK8TTs&=3d;58;F6u6GTyDMR@yGS~-cfF` zEt;h@`*fwRK6)-!YoY!6<pzFTv*f9f`Ku<{n1{KYUKyCWwdKirmeLa|K9$$VPIsT* zX|uD<G-I-t@T5ssocP-oc8SzH`pql{8k14D$nr$K`a`@ki`qQv^8d$U!|z?)5p>7e zZu0Vb*4EbYe=aJw$t)D$XmH5l%s3Zj75cIz)a>8+55`fk4Ua-+x9s2d|F@}PF4w<T zzV>%IJ=HI*Z=5n?U6p5k%hZ&mkF6zkEm<^&YyIosbzWUYS^HPWdayR{FO(`=@Otk; zr6+n#(<lCYwMVr2#fu{=y__Z#9{ILdZ{cI(c^1x-m73lteVO<%;_%}u@;t|EKc!_^ zDb1_%kGg$!i)K#4(aTC39~FGcnx2-#J?-ib9`B_ai!Qm!oSb&f)biQ}!AU*Fes}A< zmltZC>+?8#`xZw>p6INkMGAp_l}|k~0xl(%ii=+S^m!tCgW6QrE&P^Z$qH@dbILS~ z**_URi_2<?n7rzG*A)Im6PinkT~xo;WHCSWKAr6qCFOnch5wH;AxxlgHrsC!w$D~> z-@bkI>fcXJ2CMs($XH+7m%qRI`@6ln%eL<Md~Tijy^7youmAsauX?v!<(G+%kN00z zP5qMX_jFpY=CW$R)%)(0>P3H^eVu>JieG<=w(Z~W=bZSr+AE&lx6SObWxn-vftgCw zpOY!|lb4;p{qfuF`#(-fH+8%XKVRp3_ZDJR`ph1NT;|3vDxg-V)d$_sb*FCUh4fvR z>HYtUrFiDKj8aCct-E*aTD0Zg!{hVr{dix#OkK_ew!!h6n#0VH*<6~cC+-C*SqWSa zTHtPN`}In&`P~xXyXBXi4t;4*|Mo?F{{GFYPkWz#ohEI|-et>@b!mz5touK_e|~)m z8gB%Rb+RrkI=wPx)~mQ9pI%45d%o#vdEN7U`S#!b$W@(v|6l&^v*}{`k(WwK<bR!+ z$71mNWYqoyO||Sh36S{-So7`}=L!FOt<?ViMtN<ZtCgdeK1CghIHat5jBUy+i(Q<_ zHhdKZ;MpzM_;O<e%M{VV8(h}lQ}hyAKv$`+UF^AJq3oA67n@-xzCng%L8QYejt@G_ zb<(HHbGE55tUY+`Zu0|BrOp6t975R&j4T;UQ#39*EcawMqq4gpXflo=@WWmXeoH2X zNOhPVz9qd;yFEyFwjh?h3Sg_VKqu<+re9%VQZNwWydq+KWbG!yu-B#D$4Ue0!rB(^ zaEsmfaYBicUz`6%DRXXb-_GkIv!g}U6?v!XC&@kviwO>njCtI5Ro&{n`i*o8|EC=X z3xyZ*dOn}Iz{1p~Io72%WobQ6S!T-%WuE+Ize>Zm9D*Xtudx@;@LxKO<yX)99`8fy z&PxsoTvwlwC$IW=vg51r*Rm;DS6aowO50wkOzLlISyCOaKC5<qA&cg0qaU10meglS z=cO@8v513Oy%QWjw`_9=uLFgWf=7d%<LlG6nYNg6EDc=mTIzkQe8a{~AsGp!>{4^| zp02xI;qgoSb?0}@YnLNt#>dCSimaLJzTPgWC}E>^F=w4ZK(x|z#cys4*6z6%nto~F z3&n$WUw^GwvTg0I6;0n|q|K+Xbc=lOahUVaCUX9XT>nqPab2q{A2B?f*4Fe-GdXR} zi!B~cO^&rYv~-o!Tw1&KAivmSyT{g#Cw<IZY%lTXH;ebN$ThDg+vz;|!(wdwZcFOT z<ViP<d$ew@s}5N8kl+7O&5BoYS5`;gPqzv5+Ey9r`$yQyaQ3(6&iap1d1*;a4dMbG z{7j#+OkWDV_2?DyI_vSaa*H&JgThI0^Y0UT7kDr-RsV;7wa!V`UlaS|-Cs@V`K}N< z%WL|6)l}Xf3Bj5mhCl94BUUw7&To6!Wp3&l`s&lcSv=K&;w9H}loqN#iQ8Wo?fo_E z<;Qhz?kRkUW!|cCaJij-sE+DZmCd<*Gy9iz+Ns(&zuF?SoX?+m?}P<Ps#`x*6kpyM ze(b$)a+!P2spKsymTcRVI{W6nD_=bio6E_1Ur(<|kC|jAS<>*jE<{RR)YGE-<zeGD zm)&e<^srCAFexYI`m~85lO5JCv^%<f!=t2sXAcU`U6MZ`A<p}Qw(GC9m4f>jpXPY} z4G|CR3QkSk_(j_N!tzcQnUCG(MS1g7=W{;c3|BDdVQE@@HDTeb#5Zirq0TD}88}_R ziNcTR?AkYKz3(!X-2dPW8EfqC+_NNYbIk-jH}CB)kFWcrnI+zq|G(#_35U-WQK28R zwbozL%$dB*>SHzQ_j_W^A6@jO@yt)k4Xk)}(ZF!~(zfMhYM%?+z6*Yj3}59F=>6!6 zy5+xPXTLtZbx?e%by7)dSxZN{jjEfcZjq_`?%bXS(Z|)L&;L1h<I&2+?=Ro6xU4(( zf`8kMX2<Wr7gIo~UXfAdammAVnY#A_l&0iptT$K8`QR10`P`D7i~hJ=`6aSBd={&h zw5sh))yl1*+-vjF^p?kMdUMp&^p1AzVUrM(-7!JS)a_q>35q?^;$Zo6<I;7JYJtmC zr1Fex3@2G#k5u><v1otfN6GZ_2V_`s92}}XOy*T`<k$$hu=p&8Dma+pm|R<fn#$v@ zUi(zFi)q>Fz}i|T&6VpeU2-ftc~)<h@(YDscF9|fAKH03Jv4v5?%A#v#Yd7_#cJ-~ zjS9aWbS{1ShHBRB6T%;u<gJS~lC)d7NW$js+Ea784*m!}94y`Q)8cUDB>#01r)1Nu zW}i@4lwf#ji&p&7ZCw{-1GO*YPOLFMr9RJPZ|;?1xr57jyynQIZ@W6NX4comn)5$^ z!s_53^$4SLk5oSPEVq_2-~B4)=a+@E{O7Mq6W)2{&dm)|KW+a~8}^~*?4nPhn-mV& zai#2>x+;HN_)9I<tAhK!gv`HN9j!9|(s9QB--_PfRpFeslud1&*4Ose8?@Fut2uUA zegiAxZ9#>NY&%W1y%xROu;9uPcY8%I0fxpc${SY2OfXu1bpE%BKPC3g_L5y(PWvWF ztpl~pmR#x(Z9QSK%dWTCx6S|Qy*aw)CoQ-$YZC9ls}f;TyQO?RXI?(4BE9co{{M~3 zsxnuq9A2*HUwSm>oY-HJyfkmY^A{%Q99enTcuBOBZ+1wUhUei1PSb<)?<AMGf06nU zC9-9K@O{<un~mgF_W6J1S~KNTirspZsyWA!gQxo(Qg8kx!^_uZVSjK^p_qE}@~v?b z*4}uzLSr6pQ{+mw?L~*}GJUkV9agr;E!I`?wT+1`y1qtmzsb>~yS0*bPZHm)G*vSx zakE|W^)4ZBQOd$}YPn^cgrdR6J3D{dzuQ%G_%!LGdpjaD|4v)6@5B;r&!1J3<Ad9# z_Iyvcp!oaNgjM|^6JzQ(%*eYx<4fkU`c$b;s&y|mO+Qt-opXBDqDeEY>a_Kot27zy zN-MM8IqMvi+%wx#?!3zp$-VtLW_OQBWUdIfALJ%=Pfg}k&jf|#6K;nK`;}^}ocpO# zNo{+<{KC0~p1)E8cJlJE-R<`>KI?y0-8shQtcm)XoD=CQW!xraWqgw6{CL=I%i}BY zA`A0MYvWWr)kJw8-4^9tWd2F|Rp=WlU)NjtwxJ#&7GE~EPB;Bixmarj&n%9!CU1<_ z{cAAfD1bJzZoIs_yt=x2_pV+3^K42Vxg6h^{Py>^-R1A^?amHAZT<dD)#Kjn@%4Z8 z-|yZ2dZN3$W!)c(*dVw4&qDGnrzY(Z-}vfu>~m4`|KIBEBPy@U-}rY{JoEnlLiM}1 z7tPM`KHxY})$#wyi0QCKR>hC?ds_GZx@uJ#ycsrI@5Gm;!)?ODa;fXUNy(qDDxeeg zmQLw<e=k3eSz@{PD(j0Y?_Ry?y7Z!5zPjr1{`)h-LIiY>Mz<V<IC=Q^?BGqS-!*me zfA9O(|D78fdrxuwj-NJi{Gzi>UiLgQ{})tO`}48?pQ68S&D}dacRmf#^DPChDgIs@ z8F}^Z{hi-G-rwqF{=e~n^14T^-P22C?@m8*>~N_Js9|MeQ&=Rw?E6f1c5YZ32|fqk zn5e8^`<rw1Ri0>miM0}5y@5gKw|2r>Vkbe@wcTuaD397Mf;E$Rgc^d9r%c%<v&=qH zl^yd&G|&oN50(X2BIKoK+)1A+s{`t7z%+wOKn9i|*M?N76R+1Qy;calvi3Uj(qmHA zJ-HZ7LQrNgh++9qFz2CC{<=8m6nO&!hlF}S@Ed{cr;bIK?NSXcGYBjB^Y@t7J*nK; zQyy=eExA%@=Taff?Vs}93wv)zlpG8ad=$bbetpJQiA%o%iXX@3ta-ceptO{=RiCL% zCFkAdwg49garfKGy{ck;H-29`K53!YOD0Y}>(^V=OH@{$+j*pS7l-=vyXTTtN*`v^ z?Y|twuKIkkVny1?Kv(Iz$J&?kdb3HVy(*40*?cYa6nj(iKCY&Cr)zU>PSA2<YJ8}q zV0T6WcJY#e6{w_BbtrfF`ZSmEmQ>5772(r%sXn&xD7SdHRhr*(epR4pHeW92V&2YU zr-Bwb+DNRPDOfcr_L%oVHm0qrK`Xi58D9vQnqJ59;>b#_%P);eXDf!S&zIBp5B$TG zTkV;<V4+i<jp15@yH&CCeog58>F0O*>oFnqx$*IGGI7V8Oya%RJszj+)P7?$X|i*i zz#)G<>v>15(%VbqqU7Z||EDAzTJ&x5wk6Z-6jD!^%s5kjZ-)E@%?$<Db0*onT3oLu zJn_PN>t6wz@1-_P2*2twzgbjz^@?6qX_rl>zPoVE>eX^kc+BC^|Ki+^vecC31y@p1 zwl4})U|>4zpHRKGSb4gn*D0;2Z=ZGte5*G2og470a8mq*S5ta^CxlM!JFzfYko7=) zT7Rj1V9@O&>!wCl7KNx~YjM4tbnDf$T*J-nCbEau|I>YGIB{2mx!<nH3G3c@pORWq zXK3j5<*f2YlNT0Qx23gjT4=5`t@K~?+Su;I$&BhH8&$N}J{cHyTy)yV;V_3aM(m7s zNQ=kgbB~+XMEe_^IG!~j_FU4hfJ;A9ID|T{^6mXT`Qyn2|6i_MwRg$3gD-F8d@H_~ z@cBu;h?fmd-Od%4<(uVST}rR%ogyjub~|&Z--Mu^GoNG6mM-16$>n5NsNdhYn|#lm z<O$2QaBo-WvM=wjddK#2wfl9O3WJFL&TY~x{YeTFuCW{mky>(jiL1QR%8hq?15|Vu zH!E`V*nrwlL37_3FUgrAv`hTT|I7)~ujEYQ^SUha;#&Cky!fY+>$aFo-gjsczsU4Q zrdv#uPhGvU>H3!x)#V#}XQ?dPw`O`iXVNS8z+*ukbAl{)_37VDtNr6@c>V2S3DcL` zV-tGy*KU?ry6!xO=*(402Xmj7wttzp;_{3s%X~}~BO=&6JZIWWxLV$<_D4NeMSWJy zkCUmVH(LlchwcA8>BGqb+L!(cY*6_lDP4XgU)1$#^i6%HPu|ORpU&)S1a0s%y(3zC z%pBZIit;&f*(dkhCzYlCsYc<dT&{MWKg;L%d8Ne4uHU(KSL$SmpcV^dlR5nXfybW~ zWx0Gd(v;ooctgd1uIa6^<O_jZEJoc7BGS>{)u%{Bm-9C<GYXs#U~+A}^uD1IG>hwb zV?j&h-_@~8m+X2vjj!l$Ykbb@gezY&S;`-8oAxPmRZ~f>9w-xqH3{1PsRB*9E}e6G z^KP!d7Za7H^F{r&jgnqI!|KSpM4c=~!!u_;U&*!3w%>hzqrrPkrSl!4lJA$jcyVTX z>?+GG{ol5AC`~<lux^k4vmlXO4o$_@FaBNov%ve3hu@DC-33KA-|6(#UvQJT+xahr zBWy{v(vIlayz?`baZkJA)jaj7Lg&e*HCB<`i@!{JR&_Nf9@I`MYx=q?x;0BRyH!n^ zbM3OD<#*jeJfw2s8Yl0U*Y&gIpYk>|M9}AHPr|!<yFGtBbXZ*~ov}OfmjQTU=7~^4 z(BznXA3&>=lQ`FCi7#Oh{(es^y|JV;D%i*VM)xY0eUqFPMH{Vae)G+5-{qz8B~Rn4 zN^57mRrqM;p8io{)#ate>RN5p+uk+Aq=Z`TZ(A<H)atwV>24X{IXczzCvMlc{9@Me zlfmoXa;<yd!y7ES<h5~@>&Cn4i{I`E^OY~moM`rK@t&i7U3X=)7V;lid1B?Kvr81y zgBGUrJW-j@Us!bWxlUj41-F;Gj?@_)`6IC4Rnw*RnS!Ysa;~~fvpICBWyb+0`5&i> zY{aJhI;9<wZM@{RNK}Mo&-rhu@y-*UUpXeb+|T%~Y4(xz;UCqxK4;fRs`Mo(OkiX& zVAP7W3jC)j^54`2JT)r+Zr7`K;Xm$uoN4p*-p!joAN0!^KH+F}U|<RIb|~I<X{DF? znoS?;+vZ<<#U!%+mdc;6fA6p7%nUBL8T-rBzxJhvrtqgwmGeUU+A|xP555jr`K`n5 z>95eIi@xxl-WI-p?YiSp(^p07R|c$&kco-CKIi)di%`Cow{J#xhkkW6y8hO}xUg+& zY-x4k)~8lB&h0a1GB}6z^Erx_-@dsw<V6J6&V!dKPscpC=-nP1RKCgd8>ie!PpQ%> z_35_f9~I17$bC8L_0pC)qZf5m*(OZciL)f%@N}=5cA-&upJ0_oti_&r6F#JFSA3E@ zceYnz-r9fLCf~cnsU@XW`s38{?S96GzeqkaDZ2gBdf9%yGbOyIni$kUlb|<}`{&x# z?xJ*jDz5PJw*P-0tm5tcbZ^7|$9lWAyPDse*3hivEgpE1uh4InUH<XD?e8mo=*peZ zudm!~wF)sXRmLG|*ucQCf^*KCiR=G8pQaW5G}m0q{l%H3^}ptHo1|~q#W43)Y;0`c z3cEiyE=&La>z4pMO1p82;0jGWv2AK4k>94Y_H{WVqzFjJ$ke=Axjb*zOSN6^zy17U z_iO+Bf4{7E@7m)WSNOToMo!Bt^OEG*{69<o{Q7i!{*R}>Zs+$kxudt9mc73d{rh+A zm#97e`TvyEUR-pvdw1U^<r_I344dcY+|cCUWPvnKAmk!Jf%#c3udPhg-+l~wz|W*G zA(AEI-eilfoY7GN4MCH|?zSkPG;I_-93pR>e8m*gz{#XwFp1M))5hxe&MP-o^DEk6 zw8ucLq>0W9UT06d%-$k`Vll}21Qy{1ngL9=A<OKzWm_6^8KrzcGN>)7w&@K!qIlnB zv~L&Yxx%;f7{iheN;#TpJ$c?Q5?C;nZB8g+S~WZ3&Y5L%_MPNfcx48QnpnE?oZj4? ze8_6&c7}R`cF@e`>a*ZBN$IYc-4ky0wl9$`no*gon!jlAj$^W`Cko!X{wpL#DrNa| zvxkLUDu<&_CHLOlUuF1eyRnn&vm06mPfgS;jpUwsb=|j>T$f&O^jpo5IOy`z#Kp@r z=jzkPHr6InM9x24zHp(!Q>R(?e9m!PEZew}qw?XDBQt*(_p#?6w%c@pb(wEd^T`A3 z7TP&~nN_@Ul9nI)BJ<~fiNNYiAp?d+K^KR=Z`ALczP0=D!Yem+*9*vUG&tN6T5$T- zuTR?;azXQys{=sulqol)v_HQ-y}G-JrMG>FckKB+OUwi^R_m==QE)APyVBJcKXg{6 z@<~frPMrJl^rw^~o(@kY%v$wH#ikc@vXO)DjXN2-tDg0yu!K%~C_1z7^t<#Wjp7sJ zI1WEHF%nS@S@LxzbW*Y}@0O0BN1K21oDiEidZ`shE6X-~*6rEzE;GZxYvYW4=Ue(G zbR3lKHFYgid)dSNe}&1dcPU>d&iu7@y6AqzACY&$;^xc0o;=O(_Y<3>u6?dab!|Jc z%{=9k8XZ0;-$=Oq@=l*7i)2Y_lEMT{76V%q-6|n3->4GdCeX?nd#2m3=Su&yt@Vs_ zJstOR(!A99AAT!6O?R0)sY&3uV;Jk*dFG)j55D}hgy~QF)rjjae<@D1+^M@-S9#?z zCv{gY&$3X^DeSp@Gbf7#6|2nucx2^mlU)Z_=x)4_krx!C{k?CtYueq3R!nvF!XN#X zfrp(eXXRA5d^!2PVbv_3WREug!?uENwolsh|Ng!I4krume&3tWtD$}Ggwms&M-w=A z-uyaSu+cZVPDwKTe$O1?pL4fX$yD5zj;uAav|(S8yes{r?}>MZncMt&Y-Uezx%l98 ziG=fmGmP>bCsN`rS>~6Sf0()PT75?Q<qLL9&mJw=Y5Zi%wJJqTJx8WP4K92Pg$BQO z*T1^9c2#uf_iOXr&Y#(C(vr67{olLy-+$iy{o3CBze2xGl3Bv3d@d?YNcFIRj?U${ zhJ{Ne*0^mynYAIIbaBPvGg)qTPW;s9F87?TumA12->DtO-22SJ{CS(ci2YxsAoW=| zs;Pnfe@)h@^QI!x`5&KDDQ#|%v+YUpn!9kB+O55<FALb_8=h3NSg9(KHMRM)Oi_u~ zD|dm-x||!PUwQCxLhb`Am#k0Lp66vx>$93VGO&~}H{R2_EqB?@InDpdci&AiyocGs zr}W6YQ~&u)x%B^<lPTZ5V)H{*y=p#}^*G_~YWbX!?t9xzW?A~J;F5Xz^5uKsP0mq$ zuk_?!nw5l$X0Ldrd+O}uTayEJoSr;;&c?F!`=8DElQQ9D<=<~Cx9u#YR(FLfUJew$ zwaQn2)@zB~No^I)t~U=~h*i6)vA4Zq-bLAOHfOJDU$`8%bjqZKg65O#w2q$PQEc8? zm%Dzx{E5@w!r2|GxOZ#mnAS?_R2t2(b)T<qTD@25{I%%$pDUK!tGKj=-Ty`4%*jPc z3m^2(|9|{a&Aay<yOwlK%Q&fix@FQl^Tn48`McGNj;5MVYM&NSEAiwa8^;|NCXb~% zJ3kbg^m_R6WvpNVm05i(YTr*z>HK)@q}%j&JVBRsTJ|mSdZoK#e$4CBZ)J81XZ9?R zNWC@tX?VQdrMLyUza{oRe>rEJVBYx^ml90N4H`W4J^cmG2)QqQJ>$t_zp3wX%)hNx zVwIL!qo?!b>A&{el9T|qH=B>dX>YPVT~^t2M#}cDNL`M0^c1bYR-g7~N6*%8Q}^je z+ttsv*!AXNgV4;yXSAw3nyhm=`F#DOTVveraQs>!V;sAbCv0!+!UMgn4JR$TE?qX< zw_R+C*}NXE#TJ2|1H9+(9&*mv_Wf~niR;T!;rRM#0Yw|iBG{HL7r*pnd;W<grmltq zWl9H}O)IR=mK91WnchAcd_kDSAz`-Qjr$)`J~8bt*W9xF@4_7uSL_!(5V7fjr)Wfi zx$xh+D*~6<h6R^Sb6D>r;XSW-g<7!cwT2r!5%QuhJa39?Ij8Q7c%hNS#(!l6Z_vfI zSM1H=c5m`CcB}9Iz4h+=&0Z5d1DRjNoZdXs|D5aEbxzAl*%ROIdwSSFWZB6#T`xcN zib=LF+&fQg=F~3}zT{0_`QgHsGgpo*bEr77v4+>aL(*reS&_?3t(@)odp%BmyteQG zZ<fvRBlSW7%kExe&RBV|PpNnFjdO<{_K9q?(Js!?Xb#%Dx4TmHXRpbzNzLc}*3Iji z#(zXwkY8algYNt_Z=|(SRJEE9a0p#kWWsTyXF<J^)=E*cx{ZnjuXE?uetvuUYyF?! zkDecref;bEQt#>W>YlCWm6-xsmSWU+B4g=7FXk}WN9TWZT;rZ_sA}qu_x^TQIVDA( zNc(h^um833$&~iBf4$_7cx}4G>i>#Y>Rya?s1R58GN<J|?>bjKi9Y!Bw_sC_;mawD zv~%pU?=CzXvU+*d)`BOxGb}}(&Q;oC%(*w#V!q4WDn{LkHpNTROfPqwiO}j@e0gi! z@oOqEtAkRaBt`Nx1MXTpTBCBxsqmBHpPdh+Q?h<dzv`^?xwre`$!*~a(tqsT{Buoz zuf^k#mrV<}<Zo`zpR+gD|5b4F|E7Yob3DI&5l-ym^E1o%Q+$T|lKxrM$0t>yzwjA( zPFFZ=qYx|eX}5h}&-+Avo=3Z7uewfQDLwW_s=WH01}Bpq%euI|Rc~%=)DB-)^W~zu zwDffSxIYKk<zp(|@BMziqWHtF*V)g{eLX+Vw*1$Z)%yGYoXTE5*ZSAl#m~>rU#^<^ zYgTZsWvJm}rLg#S*Y^E5@c-@9|4+r|{rIN;=W)LO=lNf^n`h*|PU1SnH}!zTR<mCZ zmt4G9aQ<!iT+8BT6YGE4b5D({`S^d)>oV{EXa0N?m#=^G@M56EtOf=S4kq#Ub1nqR z<Zn%v-{U`b;Y9EHyld}zdouPi@V@Qs?G>4KUatD#1>t@s3+PB$4m;DESYMsOwnOsm zVaLVNyY?v8THoN7b$swlU`N^8Tb;t{d@>dezu%obD?R(mecoT+k1g%(?XUk~Xm7SY ze!t(*Z*PA3y#J!zyWV78^}nU=a#aehv0I;pcn3dL3R{!kI!FJ^mVH$}%*FloKKyvs z{_p2E_P?UP-}!BBey{fNvjWG}kt`p+1dA!wz_z`CMxPj%ta}^&vuXd5+m#f*X6xkx z2jm29++_K%ZC381c$chgor@Q!LER6U=7TMGd!l+EUZdxI!>R849bW}jO6uir!M4T0 zyqO_RwZ?eG^GxB1vuv&eAYZkF)XZC@(BR=K8lotS(Mn`saht>tl<js&cUMrym7YD_ z3ly-pW{P8jd#1oDP3F|8Mgl8WPSQ(hX5e^}$251PVci+M^g@GaIz>ef!sVoAzv5|n z_BPZjD3bHq+DB(oXJ=0Eyf38Px3ceFW})q2t(9ph**~ZB-jWMAmuhWpaV&Uc)U-2) zwuL`f{OVWwwSdLv4?7&1@%j4`ll*7JPd|L|DQai+iCgkVZc@r_i+Hv3i?&UFUmpFc z%JQ75sCUBhJxWVL6I(w!@_lVvx$?qQ_5Q>a%uEUaR*d#`%@)2dGrYw+JbI0TjwsBX zxR8nCjTh6FYj4f2ZGRE*Y1!s!7d}op_UfBDXJv7x>AtO7FG)@3+YqjKFgYhzKlJXc zS?hl<otCb?t9R!~nY_4pbHBCB^4_{F>WcWa$+@zJwJw@p&@-)7x)OCcGP3#YY4;k5 zNWE>(R|=kdVRp@k`&Qi4{zrc&m$grGK6bNuBG=^Nq@0|!?YndT&C@YoG4Z0}ji*vl zF^>~pX3o)DqZoeK*=Jk$5#xKJYjf8hd#`u4dy~nD;N6n%Z~iITvi05zzYROh)}E@! zcAfoT?v<B5KZ}1=9e({YG}CW;&z~F9OM<vt9T`|G7<cx{K8|N-O@6|u5H$I?>zeAz z^)DV*K3K@d@kWek`L3<bN^U{(GrwKGq5r7Pz*}x&dC$>XR|7VE@KjDsb`A-;lY4g0 zZ_5`l%W~5NeoV~$aQCv8_VoD7%?iwRUuUXzY9A~U|EZ~^d*0~Z*PjaKQdBJte!CSX z$SQq*y0YI?h0E8M+u2`_KXc|-SH^rT<N0qzf1YTVTh_kuUg}fX<4#{I_wVM*@Hmqp zc>Is;Oty)MB`j}bLZ2LMU!E@aw#h2=i@@f$S3l^a)Uwu<UpQ{Gx_`=>^K+*t{{DFF zq~-c*ue2z=U!J{M6CN!$ZdKNfniL#%BDHA#9MQjwzNPB7_O@o)S6}k~#FO$%X|s1) z%(5?M6w4xKzhYVG{IAq6b_bVggjEHnt7F0z4i-&Qj%z*B(s^zv1Q~zQYid$pV6tv- z$e)_KGjqP;`-j&v)BVkhcpowa8WlaUda2(d>|`*@r;IuD{9aF%xX)rwnPao|o@rL< zOYGlK6Xol#KWnz>t$DXpg+h~DmWdaYsW-p<D(RnR_oD8r<JO1U^AD&L&-+yTgm2N^ z*XuL=*WEm6dLl)X`{uc5y{qm)%0KT!CoH*>G4<kdoq~-^G_IC&e}BUANvtYGRI+WJ z<Ym`sU7=qDF1{_1znPI3sHU}f#@nkuZBL8L(@>stIOAHzY8J6zTl*Df?4<AC{}6U` zL3D(GXYcFczlUW5`}KlLT8v6EB7Sum?OC~{!1J}r(>Et1eb^F?w4R@^(?t2R-Sj<& zA4$e0d+sgu;@B1cDsw~8g`N9jg^gAw?7qGvn#1vx!0vM|Z%)~GZF9xrVu2f+EPv9S zo&N6^=D9u7Od)8q@n5dh4h$@A-3Ol7?d)IvduFemZnCEEU733Us-?_#{JS1>TS(ni zZhO%mn5MP$;HyJU@p(Kqs%Gl1z5dIF!@%s=yP0Wsb4<I^XBThd_2Brv<MqrHLbtV^ zRJ`lV%-u3KJ@ChECgI0l{4%Dz%%5^3&GUX-<kuH0Gap6nn6u6J^XYGaLI0;b|Cx5- z)B~l~Y2v?o|9UwboHxf~Uq{=bysuSh{^F5gQ|>vZG$-EPyk*008=cJy-irRRJw5AS z)c(p9s$QwKf1kW`jQ3LgoN~`Qxb5cg@7IE6Nw29Y))I-ew|IWMvL}>jfh2z`-!;C| z3rec~)NHslS$wA9wAq(mzsirh9GXz}vucvqOMls0+vYuGt>I(3-Rm&Hqj}1#i{E9H zOj&DM_~IDkRy7^yQ+L>|o9e`(yCS=~b?=t>g5{1+S2O+aOg@>UuK8c_MAgF5brwBF zZ)F{|OTPA;|JN3CV|9nX?(|plqMZd9_*6nRFPOJdi`75$hV(fzC$-yqXK@`^`mR_g z%INeL?%?puZ2xBwS+li_m%kPLapH>o*Xc7ZT~2woGh|vvh~d7(@An@*sbsA#+GQSF zdiiwt`sJ0oHeBD?B&Q_Ze<N>wkk`o#XBKS>fBxMkS##H>2kM6cPDOk9ovnBsuvRzu zb&24v{cm5|+HY2@+7;Y?HsFrivC2oL&g+%ZRxUoMD94z_`eSS7l@G#AiwvK5c+TRz z;@us=V*OFjbDH**Z_dvY6^#5`{ToltIW^_l=E4Om967~Ie{|(;-)W0oyl>abuJ{~| zJ5{&SuixKi^Y@5+$9(Scp4ax%^<t}j&0K6&6u`#fkZ^)UY4OxHE#8RI4*SQ-QTh&C zuR|a0xBnTUo)Yq5)1{M^AJY<lN=19+U#NRJ^ZCD~uxU?j-cFqxvR=$@!pr&BZuyn; zt(y{d!d!jJylo!}e$=jOWOBQ$`$Tp1lBJVb-iww^me?K}Za@FZjx!E{;WPG`8qPeL zv;Ktptcc6q^Kz{g&;FgXbowl|LzUH=POQ1qwkAWbCfq(=Ub1c8uh~=QZe6pYy+hOZ z&0?<#sojgbpRYRhK1}MxF8@oRDyf$|cFX;gomwMbdECsCCw9+|cN$B(RZ7`%bynP( zC}Uq5R~b2%)7$s;!bF8lOVWO+?B@7<*>i1lp}V3$fl9&GS67pd_r>lkdb+sZ?$(VR zH6I`G+x>WOsQUfh|Ho!GUyqNsE?-yw?aj{1%j0W*J`InnetYL)zMO6SKO0@m%h%^* zonF}`DZcSn(e`gg+5f%Q{{K?^|4I2b%jd`cuKl$zR`+eL>{`c<4+SL_FDvs6S;gY~ z{Z8HWo5tyKKi`J8uDSnnZe;8W-M_}4kH^>i+1T!#!KviHz~ZG^@bMgH?7fd+)!z>O zz9K2L^UL$JxA#tTT;slQ;oglK9)YiJChN;oJ-QgQwaoxNR+Y~5r8KxY{LW{axwjoz z1x~0HyuGzmSlv&?qM+g1-PyCv&0g-8{_?)pTUuKF|A*wdoVfjUbGzQ&{5<pC%W$dq zOq=h2y!&mwICN#8x5K_&Rqy}*&g%A`&m0Ht{QsK%Zs+%Vz2)~$Y-3c-V`H@WTVlLo zu`k>mU`FF5&JX%EN$dTj54~RJ6)wl*m|(&3;m_p)3-N5$iL;Xa1W2Q{j}lxsI^M5e zl)ThbNy?E|Kthx0Q}_H2+h$Gt)a5DZlI3>KH9!DW2e{33N}*xOEF+CDJ?4qCP6;lC zPoN?(cAR9nQEq=XMfAcRRYsRA9mj<dSejiq-b^BkCidH%jNi6Ybhmq^OIBI``b14E zDjN>05O!FScEy(EuLA?iHvPtPBDIXHvYSswnn`$z*?8vu5@O<g6WX=%%zi&-*;8tz zR_C|psGN9`%Rgh?%@>m{xaB;*bj0wgWXezFUzMWUPMa;V(>h}8xJ<p}S$kwzywQu5 zmMb=_oB7VSAts@u<6YLfgv#nq7ph`+C_bMz$)xM*&luVK4m+(!<rl9zEw;!FJN;&s z`A!C7mGeI9t~@&yZDC_{@2%F;HsO+GD_6>Vu76h+C<qETE<uMS%LME~*g#{MDok61 z-kM#zdEH;9^72aU@Z^(C>bCnVr*q}xp1q#>=5Ube=D^9tpSVr0Jy%QZe0no8zjJ=< zs;!@O8hMR&zIb}GGtb%d@r|=Q+a|Xx3z)KxFXc|4oap*PWzGFupG|(oa-8L!Y^{84 zdWL)W3jL!gecQvP&6-?Xb0no-vYb83^vr~}>^VV?pYeq)QRiQI{i69(9n;#koOPE) z*Jp}kPcc?=2+ltIIq;?J&DG~Gv%Gw~<fi@kJuhB022{Q}CALv0SvW^TENixOzIvl_ zQuDlj=XXt-`=VgwxheHiqw*{E+6V=(vy>??e%mIsXI<JA*=~=sE2=quH8ODI1Vb8U zDgmIznadZ)B_%)hpN#Hrn=~){!;=NYGt8b(oY4}f_EI%3KkcphtIz+;=ka-5;OYN+ zVVR3t<B3zMnd_Sm_ZV4fMnygU+Z4L^EuWWUS6HHTV*l?I3jT|I&U)_Dkf_`i_Q`e6 z61JOmv+k%@MX<I@7F~LwvCLuOJew_X%Y9<zrEU(cjdLl>?Ozi3=KA{c=f8>@f95*8 zmiN57==UeTY>sZ|w}{I3j(hUSr_{>m{=}o{FSLv=zSH$_|Gc}&XMVym^N{Dh**|^i z{v`&)ax<}Z8U}CP{P4vDo%t1^3s0=Mclyfww5eN6RQFf@&+_786ThZXF!{Gj$-G&K zpT*WY+%#p9^KU!7>rdov7FNduYk?2<!<x&l_Uzg&uu`&=-_c%xp>eLmg6*fKz1s47 z!gjvbzttkU+7q2syxjV1)U)p`s*yRohwW<0rl+f&SDpMcF;97wrEcwVaqbE&mC5h( z?wWN!Ty}Qb@7dFpx<3`=`hN?on-^Jk{;|qtpPjy^UurKt6Ibn&W3YU$^IDr(R#!b6 zb7Tr54?UJ$Q{XS=%eVBp;oIfnn{s^q+AL9T)v%G&lgR%5EBjo(4A<q!>eD9Gxb%ix zm~86z*yLt->4h_Uue{lM+i2rN-&v2egipR#;{Lm3(%P?X-~aUmoCuhE?%S<ZIg70y zy1S*Ncs-g_9${y9YV%PSp*vNJ_X~K3C0bdi8%Tv*nwl=T>QR&1-|kC=ew%hH{#)-k zC0hL?-_Hys^LF)rUu=Tr9m+V<_SG`qG@gC!sm&9(nM8#gw0v6&yv2Gwd`~(k@_}*} z4@*eX0gGspOS2}1wLc4JF`Rnf?~{bm#D(_-{3mT_t*jB9Wu2Z_x$*vu^|w!av&_ki zSJ);rZRfS`N0v>$D^=$I*!-5>qCmR|d%o}R-fDZ&-L)d^_ubkWwUbjkeqK8nn$_g< z_oe#m>9IS^q^F#3cw=YPBfBQSf7&a)rPn{UGk4qm6uLS&iS5&j*=ydG);}q*uv0oA z`Xyy;I$xM}-Geqa-)nbHmwaIEoKkrCbyj#wL}``G$?4avTz)Qi^T;s5TIX<{)-3ag z*XDmsy!;FTnr5AnJRo}KkQQ&)-kr^L)58BQ;97O%xpb`E<jp*Lue6*?D9Gwp@_wo= z{rm3jw11uKrj8Gu2`BX1C`J^2{+qCrQOPuHMgVv_R}ANy{EAOzMr$*&t6fWPRbR;U zkh7f`uu|{XBv$`RRbh8e+`Ye|^IES_?Au4THzs6y2TJ7yUJFy)I<vz^G$e6*+g;Y# zIm@FzcYQB<H#d0aHtE`s3CjbQt?pKS%4>8}?iT;Tz*7y?WzN&)z4^Q+Q{v_`DMfK< z*=KxV8`QbI+b+DWNjX^Tb5kH$RjF##`IVcu{9Ug4_9)*;_o?4gp6ydOmyln7aMGj7 z=rq~+-!mqxD(6hyw|e#Uu!kSdJ!BP2mM(ese7f#GF3tb8W{<10xjFf_242w*XSkm8 z<%gZ^!`4S;p90lRaatV_s)^8=-u2{&>kGYa5oX$a0t}3f4EZZ>ve`P`O+KP;#*(-9 z?dI3{@$>2)@h_kMgZbCag5x{>6~DZ+boqSCEM@jo2L_fl9|fbR%oUd!Lfd~B+b#Oa zv}8k^>c8KU{Y#zPSl@e0naT7|Xu59l)2#3(D~@|jD=^Xt)k@1bp}+EzWKgVfJcFe0 ziFM^=LXRFDHd2;uy1;gL+w~W1$3l7U&CSw2e}D0dQ!V!!XP*DIVqWNpJ6(IcE&9K* z&2#+aYIoUrubm0UkxQD>@2~wclf^QzB;q8Gw1C^2$)_>{e=6%e^VOZI=KtQHm(SK- zz5U_gFM&60EoaS~BA*#{y?akvc(%vUmsfWdMAqF3nR{@?oDh9czDaiuy_cMpbl5WD z6YoKjisb1Qi&d*~H4P3f3b0O`cji*bp|*V@G4((5&#K0$J$IS*RJDeW$>qVTtE-Rq z$?h(CddgkCcFV@XpO22p*L*nG`u$$@|6X(U_51ggy^Hz(=4SD7|NXx{onF7^+pV38 z@7q-U`%@Vev~0cQ)oH<^#(GI#pXR;o=Ko_K_V052=hyXL>KDzg|JDA*xZ=6d+uVnX zC#o8_&B|@AxO8I0j_2QYpPOg-`9%Kwk2c5Nme-|+g}<HlZ|2X(`gZ?r99CYeFT%(u zFo8wyp5?;L7WcBw+f~fBa#o)H@6MXL(vlae7^QAWOG|4y%(wk^Xra0sYazJl1FByY z1z!00R;tgv-)78m^a2aV3zl`UyUQLO>11Z-yRfgi`13Kfzva#U_7-L)KYlD<cc%aB z>+9=-H`-R)UAF$~^;o<2`Mmm<6WirH4zAcXCo3~6=1AAqwG%$K&b)Sg|F0*Xz3+cD z{~!JT&%)~W`<{cEVh#J<CNs>dJM~ojUrYSDSu4;c6DQ1X_;F6H>ZM<4{MxDUmRDFB zFRDGL|1NB{dGTBI^Uh1u`rH3F@ct^7s{#$`z*d$iFfi@pWO?6FUOzqZom-$F%Qjoa zs_6#b*55wf-Erl~7tu{wMNQ78Fi*pqT#d6G7!J;w&0rfpx#P-{$H%f1m1fSD&4M52 z10Q?i>1HTfe^@Ej&${Evl*58Sm=mTB312uBvW$P(IW0;1Qp>`NGJ^|l06HwNV60-` zYMk{*LVJ3HhwsyliwqnM2iB=7?3<I6lT&8N-MBHOaq{WSi=IaO{-&k6@{M;u*vf62 z&i0)2xiZ;{FT&e0<&@i^s-nVa?+k9NGnxB}Wj>qHa;v#FSDsTieg5J3UL)J}9sNwb z$4p9vq&8i?_C~qbxlG7*z0>~Ns{{(f=IZz^-DBh`FV<fC-XmlsQ~snz*Q!_se|g!~ z6tx|TnQnLgJYjG<gNfV6;#+Os*6D`+ML9p8U;6Oi#Kp;PdmTLm7#dG;{)qqMqW{TZ z!?L1VtkMokmMJ)dfG60E8KdmWrC&#vfLdwYDWF!`-jkNsOk`gdPu|z`O-t2cs_u`a zfzi>AxXq`fFW;+rFJRitw3%wQt#>-}lmqUroj&u6%_Hr3?*3;_Mcux?vOsia`}S+n zcfU2w?z7tIpmzIqblL1B&t@Hxjn-aU7<gpGp6*SYc3q|+O=ptowuc|M;N0VUEN&6U z8W%VAQ2p6Ks`r-ct!s=+4_lexZ}w%ESC0Ox#WU_7kJf%&eAd#?I4Ae%+#_pt%WYLx zPtIM$A7A+D^U*6S&a;c@UcL3b{L&QV<Ki4#k+XY2LqV+^3Le26_cv%M2N~;J%3x=4 zNSH2YadoY%Q1#PaKAZQeZ9DVm*{)sDdSYAJCb{}wdmbLu^u1xp`42O^nta0A?)#tL z6KeHBX4!%sE(Vvsk@M%j)=x|0Z_S?hb;?23`z+V{CND_OUEdMY^FDZ?cJ|3FmnYt5 ziJl)hDK9n-G~RVlU|Xb@T5{eo72})k*H#_lo+Z6WY{nDiY{s^xsXy+<DF*XvW~Ci_ zu_0VfBQs>BP=3&NUzzJSXN6y!+@4;&t#+kq&>uY~v9(jV_Pg9VZ+OW`xg=}R-RK#8 z%Zqe>&79WCq*-G5*rCZr_Wv)%^RuF^8%d=%|Cy&ysI}wAiR?i4S6ZQ0U->UR*7)dZ zZ&gucaB$tR=x1BkC#XA?3P|WOc`TLGtzVMa>~Z$nM^O`2Mu8jqSgKa*v^ZKz&3qWN zJcIFWj=9c5*OMnE{(oY$bkYoSu30{E=^JjYy1K`8=eAJq+rMm{t~kMNb8GLvS&x|= z_AOMj{kitD(rxL<^Njb+n!-^W(6(-lwaD6E%f(&S9*nxbbJxZuwacg8N3Q)<y(Qv> z?$U)iGn2B#UV3-(MtTajp8C4G_HdhA(wnYtLbm61HkWt>E#0(N^ZOxJx44_OH*dVI zSkKwEu)8_rW>NK~i|_w_W8t3hB<TD?q1d2BnbwcAl0BYAMF`yN2M?IFn;ml1G};<) z+xvNwjcnQ92%(44mA&0t>|WftpWDH+ST#SfansU_vgLfwmnUzU<6`gMe)`qc+eX2` zX?a<a6XRZekzJp6Wpc=}uqso|Bd_P3;$;y96$=Zjm^!Y692c7e;v7&n*y(?a?O3$B zbSziSh0Scw0$Q|I9zI<=>64w*@3VOZr+mKN05#9_#qZ>#>NXoCZB{Vjsk_&;`uX9i zARd=D`8U@le*eAS&9>5R!v7_g1dm^l&*Qs&YSY@*FSmc(o3(oC$4`PYFEYKe6LK^! zG}+ZSSCaQ;gwVIZAZN2lO-4(9-QD-HW!@RqB|MVfF9xzMtq9*@ZqsQqclxTJJEniu zNqRqA`aR`l-Wl1&*Cq@93hJF#cS+7>>yn7fjmvuKp3m7C@uriHt7P^&gC&`Mm2>CS zOD;OGujeICSas1X^@VTa*00|CEW1drrgF{sD=x2-FPrhtbX%>iVQ#7J^v$v{<dqHw zdt(>phxGX$7($Lt@fPU!@Z}UxWCAr*AF+Hhx0#vXbW{9~+L9Yd8>i~scJ*JeMFdo~ zxE9yUR=ywRR4<i!>-V}kgNmnz{<)d>IWF6JwK(jXlW*0k4CdXYZ{|fOU)#K_DYeo` zM`Y>4zROz@ce9JGOWOW3HuwdvQTH#8>q#@qoE{mNJ$bRnBi_h7#7E6meUVdL<)6I! zRbKvmJTsGwv=@f#GyfWX>C)!LV?6sp1Vq22+>ARS`}DS))Q*D_G@q46&Tfh~iPzb^ zKkLrEuSY;_v}cjmGc`R`x@|Z1$n3f-;Br1yNY#7G#n-LT^2@pV=Wh|3vSi+}IM*XA z%kApK@9=T3E?DcR`XVz{p4BnoxZr~Kb+-!5-g-1&IcxqW$@#&x+jhJEeR~@JW2?Q0 zz4$wc>-BoEyS{uecF%pXfQO^uzywYgH*MZfsSU3L>W{f^iE9wKw)#kY{il_FCssV@ z)4Ka8dHxS`VNKJR-&1w#LRnm<J<)!Yr0&|haA`r4&;Kpg$`%!uEOk-5FQi|gxO#JT za@DIQWwjfe{jXQvzyGcH^V^ixnuB6Yj4PC!4x8WcHOiF{GIkW!KI@Zp;#Sqm=STJ} ziJSFW?cxP{?%#Lgnk)DXXJ_gg+U!Z$yTdw$MJi;~iP^slzQwm@ug-L}wX|yvO{q?l zcl{NlGga-n!?uO;xtbXsu{K9k7R2X2asQ`s!v54O!Nb?JzlqQ1H94$aYB=%QV%5Jh zRo2*DS4^6CMf=6vg)hzfPQ=_@usnW(sQ_aVvs|jffvE?st`6^)wJv*lYHGjTuZ-l! zpN@9h|9H^M{eJKFf71DUarL!t@9g|{bMte*`E_5PPLHpAyS3PTf901yKR<6-;uBxI zN_V+dTFjAGr|;epm;dp7@AiMU>%SfUcm8y9x!&b_*RIM;k(X*T%*u3kTcBl>1)8d~ zEq-=!aeB+2{95m{!Y=##m-A=Z|9kYf-!>-jwE#Dh!i3oej#{gK*>ybn?M?Rg!RZ-K zF3q34wfd`($)c}JCR@zS%z{KJzTMz%pI2eBy=?{TR5@pr193lvZ7x~1w5>dN__s!5 z8i(&fP5}v7rt9lstqUI=X=G;4xW9L2W%A^IyB+`E+p%Ti$B+E>&yGL)`uh6H8}n@E zznojQ^yAcH#pm~bIpNH|WX1xtc3E(|{U3Xszx6N6_x-<LmG<r3?)N*(AKx{1YZo=S z$ob%<`WJSThSH5xmTBTI|L%LoKjYbgC-vtqoBTeuN9JoFD~rPd6{atDCRcsn^mmxb zven42<4Q=ISQDsNgS2=+$B&tCUicl~Hs#);dnUmTUO#Z3thj}#@vSez!C4c($t#)u zywjXFw_iF7eu^%<&2`6w>BgyhCSUY;m4hBTai^jf3o$=ow$KB92gL~EU-z7GH@kS4 zMAkU2SjID9>M4gM%Yya@pw7fX=3^BYnD|%(Ru(ph>UkA<v?vu{c6JrGA<AMEocw1- z>^Y<B5t}ZYY>c<Qvum%Hr`GGDX1A7wV$-CK9xM5}UqfZRL)OwN+o_W(eZ!fSSy@dh zsy(8jZZhSnw)1@T9~!&!mv0ezzxZhGc5|(z?N2tYV#?2YoW08UgRZn?z8Y^!(&7sB z4`=LEZ<Qw(dtNL3^ySf!pO!Z6maC4}W-j(yp`BTKZ{yy8k0LXd25Bu)eg$ftHcVtt zGJPQda(e(LV-!mnyzLbNDj%o!pE&mQ+S^bsg+tf&?7O4;EARTpYo~t26!%4Y9>0^q zHz{zY%?5+Fx`myQFY?ySyZ2<ymKxjkm$RmB-F9orly{2-{MIUphpYb5Xunyt$ML;) z$vm^^)0~gFRwhR}`^RPZ{j#-m-@f|9?6_bamS1i23KKhaDvB$JR$Mj_=<0nm_rT@@ zJkK8aCr8ejb(1Id+{LKKEU`%;^S94YjCB0pv?(O}{(a3WYgWur+8pAgx`Ink!9av5 zY8_({Uz^h&2jz|{A`R`UKwg{R^B`n<na7)TuZ++Bn{^{);~Va>;-Guagc)U=PaaaY zUB4|n=k2lYD}QuuRMb++yPJORpiBv0FvHOws;gBRb28Ujyyp!{>2m!RQ*UUjtof)V z@nz)v@B1H=Ii#e=Y<K;#b*oT#ZJKA<RF?g>`;8~Reb&}>QsunJEe@$#m)WNu*0kok ztyeag{9ER3WT&~Wos?sK8gGlu;)?3eJTlXdm)%}?^7-49nlpDw`aGx;@+_!VSh-|c zrRD6I-xjG_{`?v1xT~v7UrE5q)cW)~?t_Y_)8n!#cz5Nkn$_0!XSL=_p_qux7cz|= zPuZjenoQGV`SH4?Fo&C|<4O*<Ik>%@>$hP0scWl2!&_pnMeG*te%f}RO+(W1j{mjv zJ((XJF1c(kys+i<m6T1^-M3<Yr(84556t7<vbAi#t)bb)cTc}ga7?S6H%aQr=a9E? z^}e>>6K@}z@a4<ZL{6V`hFZ14Mtd{1oq6${hr{i5rR=R)DyCDSm#uYw^z=;CsaUzE zAy3(}7Ej*zRqks_olkXplvxl@YLLS7kIS|{;BR^Hu58O5O^+5fr-y-au4cN=NVnXU zUg|h&`}A3R<9e6Ju03CQH+T_SY`T(U-!sqxox5!wH={m@iD?*WrC#`Yt8UTbu*KF7 zkH@E_oVpGg@|w5Z#yebQV(QL&FZ7SB<JR#!qb2A4@Jj2gxcQEI6q9@+3)FAk75IN$ zC!xe&X@cbPDUq_Qpl(>g2^N8sl12q4>`V$9v^iHqe|fxia<AT7)=b0fI8o{RXS?S= zd8uEt^NwxODX+qFQXkk>b92}3+>~GP{(JnKz{TlqI>omi@AIFa8Fn#g|3h{5$nrUg zuQbgjcmF+Bm;Kg>H8P<ow?U}PW9iS1<-SWzrmU)EI$tApI?B_?^}+<(uVF9tN=WWf z-LlU9Z_3xOUJv7?)xnn@FfUxl`#A9PvL^zv9IbAKC-0oI>Asa`yG!l4i$YyZzV2eb zEh?!@RsW70O_F_ib*qKnYXQ~HO&@+HyxqW~;-~+Exq9vWFTyO9-+7mraal#VCPco7 zzmpU&m6tcL`fH`7MnvD7Q(h*s5+`K(O0a@T#s|v;9hN*>w$S}BX!d&cfq!l4lO5Tz zYyaO<cx!uuY0BH(YFB)VKxM<;S^s~uZEG?=wdK3h--HiQlm7Nz*w=9F$rh#fd0V}+ zug~(CsJSictxUftZ@B+H`>FbZ8{0iqH7gETJ8Sp^xAyn&-dsKFopQBhm1nch-?#I= zoQPZ3!|9#6NhfLk?qx-x4}8652Qp_>UOn$8;h4|$#*<m`zQ#RCo6k4%ZuWAENiW}d z%>QuWNwt@cs&c=|2>bg;F25PM^hwT23;x(VF`;?kOLL@FbLepY{oFHW9nW+r=|{J= z@okKen|3Poj5M!K*GZidd{-S4b_+kaf1$U1!L~-}zqhCTsMluNe(&4OuiN$iA6ox+ z;*Xuk<5sHRrTcB(=;K!FVdGY2td(k?;`Z*Jm8u<9$sD{#-z03)4^P{ZN9#2+ot*z= zP7R#!NHX^Fgh!u>(v_99?35;_hOD@~`<3s~zP+gyRYgl9xb`hB+f!k|tI3f5hDVRr zrBcl_#3k*^+l!9ko2N^CuRihdU-qiEtX5Ocyii<cxAw&BSrMHTA$uj|Ia=L5nmvy^ zQTDp-jdN10Guy?N*E8yrXGfh;brx?qIi<2^rm^M9v!{v*+&&egi1W^Ws{V83jneZ8 z89xr4xShIr^-jgO`I7VO{z|0I(uiz!cN8d4qw;Lw-<R9>|B?Rh`0r17y-~$;=Uca} zZZ~rsRx)toMID}cadETL;{4jz;iXse;O!wBqhC&f0t}3v4<5}Gw(5So_S>80?<<W> zie8>Sdu#7R!L{NG7Vh1+aU#<f$XsEd06S!Wrtz&y!>8?h?-z@o$WfoWbKTsPn(vof z?atpeH#49@U69PhTdYmDidHRMStzJ|ZM)Ms@w6!a+P|yS>)xMVa%1h<`&o7W-c`T5 zS@FGhu1mH0&8Fq^%O;s8a-&SH-4OV&pD}Znzy9;BD-Entf0&E)ZLQwB?W1eX;>8*! zjE#Xx4eImUPD<b0r4Te3x;q=vUIDd-(gg$Z?e5iOYCd}U_|1xM)sM=i9Zuxsc(H!D z<BhZ@znPUxmES92J!F`b^TTz{&&og6F7OCh-@%|{D%#i@fznh1ZQ}ulU4dGIN3XF_ z2wVV#(b&bI5ELvJ(SdU81z00P<3z;+`@hYUYdDmh<#tT9vr8e!_?KN%n*syV?Wqkv zin=y#y!ljzyGONq?w9>nlp)Qb-$G0~m!6hcVRmepRkKdn$MaKP2Fw0EeCg{Kn~Oo) z>VtDGRA#l^{wA~d$&UUN65{i`ub!%K3*~xqe(CaL|IR?IN4`fr<Ubyp+!wX!y`tD$ zN6Ymc^EQ2Dnb~SpeA4Lj`%=$$8iy|HY<|J>?2da|c%$?j3!7S*5QpDeMcztWj@W%{ z@=_CaMTHH)oGU)?JTkd`@My=C9Cm$2cL9dRT#trp6Yd_f`kmILnr~J5I8!I`!;?>M zwroGLU)(wSZroCqdpRF<dq3?jXr6X{TH3ACOD6d){1eufuX536{npSW%eij5dKXXL zS)D%Rc|~?=?K;cj)x5GhRitZ<e2Jbn_k~#zS4iwipLuLkr}h7stDSw~iQ2nxlK`z( zXHQzb+*ZoF`Qwu2Z=x?wZoe=wFlUaQ%oUyZG}Fa5p7eSBiOXOsX0-pZ=}T&$=4Fom zQ`GW*nW_CMUFmt?^sgkfSu&3|^{BU>W8nq0_Z(bV1Xix(&^gk?!11OGJUO_w&~2gJ z<u~g)?;7nkJ||@R<gc6H0mCUeHAV~KL4!<POXQNBOXBV@p7V*9Ea3}IP!h6U__Vk$ zqbumV#^#9Y3uT+`$XrREwuF09?)IG1E7C7aS~{g*qsZ-(%2&*zw9oCH!!onReAlH@ zOVd<sZVDKz2)TXQy~li?e*KTrhfZ+qiJbraBVWdhvsZSC9h)rn>!+*Mg~@EY6Gfz# zb62}+Pl$9~Z@hc)4Gq0lN!2HwO>+Ep?#dgT*(Ocgy*q9!d9K2y>9|R2y1D7o<%KUN zzVk?%KKt3mHW#*O6ZCrpG$(AFbZh4YS^nQkWO;+yZ(rv$YW~wbf3~FtFOzjEgHX2H z9ng4f@q~&U{CBP8ZLcsj-gO5}1YX#pKH>ZA*IR@|%jFigLmEoYHFX{J*52OxFREtm zx|1p9YHKfrXWd&AbLh1-!%n_sz1xcu8sC_lj`=Y4{H-jN@2XKf{`#}*%|4xZF*VJ$ zyEJw2nY!wvoJDs}Yu{9u%<lT>huRY7l{URvSJVI4dH=L$f1IqWFXX&eYmerv#7;-U zYsV&=Jqua5+%fH2$wNCUuG1nGr)7_7+HERy_nNt)+k3{rO{R}#7Adjj@4XoRU^1KU z@j4-yxo_^>_Y^f&o-96n&taPkr|V5i)7FPSUVi=go_CrLS+m@i^js`e%`OUB=C99^ z>n@!&H|3<c(y8;(bLUv!d~|fN>PwMW%g2^&$0oBSv(No~`;gqR#dnj}vdwgS^Jx2( zGj6>?3LBC+E|?d8p0E2RWqYH);L4LvRa!EN5}j2AZtMjui?4lN@j7L(x1dN={Os-L zRxRPvKJU4)Pn0{xK2$L{ZB;v@)fAU*&0zmanaMVXQ@&2Wr+0U+(Nc$XHH)iNKI__l zY>W8NksB^_NZ4)O&YbNV4OjXwotLuxyTsn%@s*aqXHoZsXD=_ySN!X^$0hXiv&@jr z^y(kht8DVNyH33_IrsJQDbaCn%)hzYo6p;lv4+c5I3>+jywc5GapskTmy08$CSI4# z<T+&2eLg{KZ!^Q%ue0l}DdbN&Ti$$ip3J*sokzD{FI#ez=NjMX2|MIMKB_%;nNw1e z-}_qemY~*B`@cuJfAp`*5)^QDR+$sz`}fH-)Afo*0m31h9wq9ySmw>!(%#xqWXm{f zf9VyLMnM&a!dZe>xU?ie>n0Z`FQ|Xs(59uZ;Wfvb{0gJVt=D#L-Fv9+R&~eh$-VDd zPKg;#)2Rr0xJ>N!zrzx4Gr#q%l;;WC`CGb%cm4hg6X!(~o)0xVk<wj$G;QWK*>&u$ zq83jAW-P0@9ecHFs`*Vl?u&g*TjJ-Hp3^WoB{I=OZgcjt6KhvCEstC}i!0-lZc^g0 zG)B!Q+}lo=zj?&D?t#I)EtxC0Y%iz2y4>2^w#Y}+X!VOyr`vblc`yo1i!5Q=tm=QT zkM(Ctc0lX1#IIIzW-lho`z=iowhvabUE8v?c!%=rh<RsEt?XQxpSQv;IC^gEoAYaf z?aqf>e>~kIduong;Ev8^|F+40=hf5?_I-KNR`>hyI0G+mG4z$?PxU%PW6S<eYyGEB z`hTQ;lic1Cocu_3V_l!=-J&aXOZk&jBVQ(|H`nCVUd@~G(p+_`&)04}2eB*BpW<6z zKZ$Pk(Ov3tcmCF?l78--Jzg8`hUMH)tb5?R-@`gvs<7yVzvhi&>Ve!mHec_F-#Qu@ z5ifZ@!QqG2OW&spGZTBYgqDl!yE$)t?LV%oFA{AsS7(b>9ZQ|HoI6@}@#U#2!adTK z?$vv<*y~SR3S03(xy}t8anfzmuT56&{~HjvUvIVQ$pXe*j+4I#t!&A3*}viC)yKS^ zGh_HT&7VB{U^!uKf11Rn$cq(5jIj}wH>a3!solKn|I=;H<jnyU;=((szP{R+e0*KZ z&QBNJ<#Tgl_Emgjm#-;!xcB?L`p0JvzFxn6uJv{M>Th>mUS7ZN&nNBmd&}OvFz=sd zUq5f!l$Y6lTc3s;?dguF-5LG+5%cnWpU;KY6+fL`_jzjkFWzsT@4m11sJ<QhW@eyy zZI8$rJDDxTQ8$Wz$EKg3Q~PChx^3Uv==)Ux+mYr9t&b-}Ffm!Tf<~uGg8R1L+RT4% z`MC=xmfD+Ve|K}+64%i7?btCluKx7?y#+5i-OITQZZI-|dgBaC)?EyHSJ$rpJ^NO< z2$MvyF-OeqvbRS%h1vOJ7Sw)!_N>?U*L$|V)sHV7J9gau&kXt5*Vo4{PpbY_v#k8r z)MMdN=WYLAQs%dvuxJfh8|;3?t8D#0_rAaQuDfsQ-?j07U!K2Td;Zw&{5w2a8OF0g z6NYIiS_kDn9u5xp`Cy?KN_&i_m!V#ruR47C@84J2mMKdyH7*o9a67B5ZI_30$CW3` z+AVzZO5g)*5T6`YT5zvm?<J|Q$)E`x1{TnoBQ<`z|JJ(%*PL|bF9r21;cYfBqs{Zc z{lkwQPDl(oe_u?=^ykfm*jDJ@0ADX+_jRTJ-<|f~SIYmrXkY$1-EMRG`L*`{9@jtA z|94dW|3>-WTYSF?oqoW$LMSmzg=^xht^-cUCwsuw`+G3W|8Ycp-<Qw-k6&BdZ};`< z`oG=h?Ek;5|EVwbe|dfRyZ^P{-0Q!%ALL+BVi8#BI31;#2W`-u;{4OQ|D*Z8Z}<P* z{(tq!k{>JoUh)5Xb^o{PTKS^9InGQSS8|+}JEnpfOHK=nUGJMZ9)D9b?a;AFto~BB zw}fkYrp7mI>Z)Jd*4nGqxM*FyhTp4_dHOFsCY+otZ}4{W-Na1m>1utTNyy_D&#&GP zyG`(GpyE7EqrFOX{*zvczMuas?}BFLx-++D3oD3k*SMG2eVXU{go5xh*0UDx)l0Ct z`tpob--Il;j~8k}j&*E)e=>A>%Dl72qS|{c_)b?|-*x*(kM7epg{cPjR=4r}w4TmT zYyaJT{_C2b)9YTo|1($r-<k7&<lpUlp6};#=j-(UpK`<3$KBoOc6ieq7J-!~Ir*-F zB2!^5!&=tey<c^$rtNuo<>-=)DF-LJ-F*}4Wzf5}7c?>Xxil=Rvg}s$ty#0r+?G{) zE}>*~Z7PrAq{*wd%9>Zi@HYF@)m4@)x_x5xs)J=hH$}Sg)^0g=mop^Mntwq{ZODw} zj%kVeXQy0hyHIpu$L78(9YIq0YjsT3pZ};hE4Q)j+1Ux){T9y4b$vANIlu5OoHna2 zT<!Dhb2Ywu``Bhb*m>{8Ht{*G)9kz2pDli*d~Rk~8SAU=$|NZt18JF?yi2C6IM05$ zdY6Ko`|VQckD-1Sf8IHF=FsE40(>F&p0a%Sa#`;^gWogdpvNuXh5rr*rX5(B_jbaK zeb>`x{WTTT6nH8AFaML?;)P3|i`r=3=6cR9kvb{v5nFPaPs#;LAHgXeK26h3E2T_+ zz2f}u_!(9TPt#f!IHc63c^Z{W$eVKVWiW%r`|q2ja?1lw1#IEEeR67{yy%n6DJv~C z#aWflU-R16F?}=J&3kk1JioE>?1af~bG9C9^NXGkwCe5YDZdV}EqFY^>_iNBLi3^b zEivokMyn-`I)4tlD42fN_R3V1DVvm*f9~^%Nckwa>x<8pYVOMyc@8L)YR>q_dv&K% z)VvAv9V9}oH#tNFoq3aEVWo0fJw9vFuHI=$Q^oSUjEsd>e6Bb@rGrUff*XUs{lfYP zA%`W$ghaYPqsk79OnXDWF^K3sc)IrJuYI1=`VwylbWWP6eEy{5%(ok#$eP*BTzvA0 zwdQQ!qO;Lc&i_tnE0syqm49ir$Ry*Y?cNs}?)q|*PHx}RCw(E{cG~T~d;QDiXy2Rw zT{9N?<E~EdyH8xdw02*Xh<?9S{fJ-LE$b_%rX}i3WV&h56+GMX)s~|gsuhz<pJsl) zBA)0F@+@KPeBp#GQ9BpU@RslDH<Hro?0YWxta8@5>9h8hMW?B4iu8}EQj%=A();I) z>$LAB_3j#}EBw-{b3?aXocrOh>c?x&o`!#0<E{iOb53GgwDb0hs!cpspLF+MJmYdD zwdeb#KOBy`I~eBG-Euvrm!qX*+A8P-E>lv30=B;a&o$oS4r<$OnUk<*=kvOv4P_Dc z?0s+5?7Z(P1KP|e{phE_wsqxo#@<G1yQbc{vA+Jyw?#SW0icy&p4RSyp^4?w?#^d2 zxTU8QV>dy0X1=n~?f6x1J?*p(ZRXmq4q6IUrc)g9RBytCUH`sJej9BnW3~2ohxe;3 zt{SRUlXDjq+dUDQZn<y!wA<DTyO#DPO`2mUaO!j5M8Wiay~=sZ&&@Hd<O{1V3X(~d zG~c_<Z0Ye;mk(#`+jC9PODJ{o{)MGoTTTAjc--@4R?YZ#w(G#G-DeZ7&bEH>e8*M( zbCs)~##D9nl~<cDRN;8RlK1bje{#WzZHf&ZXSWrKih$;*<3Ll3`(~xSzFC*MK49Lo z_g^IJ`b&IPST`S=)au7)_5E|$4{P%#a~_G*Tfs|BH&w}={paRsZFtY-ejlrT)j|#4 z<x{p^_6W6A3T6$xF*mjRpxW)1*Y<pRXp~#^N%rZjyf1-{^Fn{zRhXQc`&Z!BkA0rs zc|@xJMT%`ae>CpOKLaN{i$^?jw;3!Ax!s)J_l9@*B(|AfXGU3bJbUGQ)U#;k;tCJD zPdB<ZcArnUxj^XI&m&!r6l1Qn{y5^g*k><~#^==Nz1zC-%lY)LeCwMmb2zjuNte6( z*$mTGCS&Cd$MTH#`Gc0`r^WyBKB$zIR(!_z-sYu?SU6OKe_Wcr?@RaoAKmu<m+E)U zpZ_zu{&oHL$@ZKH3JD4e-myOtmxd0b+5g%7|4IMR^R3p$zRvfau4nuAOrW%-1~Zd_ zK?>8vi(bxC+16Mcng3C6t++z#SFMlt=hv(fHqxqSU$m$E`Ej2cU7>CME>=}*Qa(<e zIQy~D+q*X=+~2qB@Qg=Nu?-qxbqkX}gawKJ-&DSn?djq7^R`?(btNn!O(je8*8Ce; zQrlyT=TvRou-0UM%+GD^Uv-+(MeEEz@Koi-ZI6E3zeTS0;mT}&&!#yBkJenh;<VOl z>7gk}PqyAvy3fIPKJk*(Tu;A^OZy%z{JEk>F#V=8&*z#Y+SyO8#;iTpdivAlWv|vu zJ?Sa>iN7civiQsD<K#afZ+4|`yLctnNoldT@5Zg1X+1k;er)UNEBF4sK!W23%Zuu{ zeX@}G#T$<Q<9>cP%x`X{xBvIM>iqqG|Nj3n|K7jN_P_oAf3*KsA6NHt>h(D5@-MU9 z&(F8__dfN-bos5KRY}KO*X+Bqw)SJ={lDj|d)33G_G{Mf`~8<cGoRbNSEteN5|5xx zHB)uo{?~72ZeE-JZ{><l>;GL{|DqHzx0s_Zpz6rL(&h{rORI85n_E;?j?#B<u1-!? zcD<brX}z^4^F<-w$R$xr_B`S;w0XqK{<Uvg^Xt!lF8_c3$JO(-|K3%b-K$OhBKgjb z_v4q#@4i^C0j=PMv_fFyjZ~Hwp{5nlXUjfVDw*Cs=zT#DG}jNRp~0;zC?la<z+p*R z`47pkCUCh0pA>{Ja@awQ7RU$>%w%}eN28TNu0e}6d8!k9QzAqc3faKT=#mwau@GCc ztAT+d#FJs-EUlMLW*iL%-l<)fDfRgHn<6px<db*QBag1^+vr<8HR<Z~^j1^B*;ih+ zh;8;spZ`0`Gl==C`AowNf(aUnPhVlVRi!dj?($}?nR@~mO?IDOQlNSB+l+4SjkdQ$ zg@1+neNPYV=4Cm1Vo~h5@3E3%p$pYFK9mcoUBhzw@#2c@U!JsZZaCmG`)Yal)8`K@ zmtXj@L;L5!3{WEt<TRVS!^yRkD?t1BjF`4;dIR0S7%V>R*d$lKZDG@9sonafHM7># z^7xsB$+dYw(<0{0{Wk5#&ZSY-;SsI5B`Pb{uKl@d%54#+?O{=mEr0ojJcABz?R9Lw zbkFsRLCPl!UglZe&WXM+tE6IL<}6>ReeL<m=%01V4JWTQzgc<3MBvruJ@MwVx4v6x zvv8J{&MGJWi|%T>c-QueZneGly3E(#%)h}kJ!*H}p4DC#=N#5IKI>`Lznc5#x+I2V z&^ZONj4oMsV*4z5t&OiRG{$;>C;M6?!IORaJH>A5eX?7_@j${$%uaLr8=GdA+{#|w zK+nS6M%n2x^W!r)?fE<|^mMGeAm^_)>$S1>r8x0)eyes(gNgcbldt%7`D~gpV|&;f z@n6o9B^gQ&t~eF8AbnPM@n@e`UHcTjR(Ac7J$c6U^ihq(g3gH+#`ew&XUP<;-k{-` zCTN>#a6$g`sY^;my?gV@zodMAapDz^<*(^GyXNe)Ho6~pPmp8M&L>OGrT<u|IrFjR z@~X!tA6P9-{iZri=WJh06O-}MyUMH5^&SUsf)Y1qsP+XLsNWG_3p$yh<kG6Rw8dAx z`&Lb{OW=^`m^4xO_{q52{$)3_O4NBQZD;uu?!IIdv#Dmu?T#$J?q@HL#>iyfTXe_a z#ll6cnLnq5hW$BlV_9GtbdoP<k`}LTS{!TYUac=r7A@A(I}vPr`NrPknH@Y&1J?3e zt?q3uU0=81qVBH(S5dL4OVs_DI(=<ibIto7CH=b{W^0+sWK!0alo66UYbUt<p=M^Z zKWK-O@88$G@BYea`54=XzP?(q?9s0|$CD=>n;i40=S)V-C%(_i{U>`*OL6lvyzP2^ z&a;J5piY@WP_rEalL7<NRpA+T)a74G=FiP3(d2ME|9i$~s}RrFl``rtJyrKNUQ;~v zveWiL;*?D1B=A~u@sx6-oA(Y_2DY~Fgo%s&;{6yPbUU=bG<DH#o0oGU6Q_7C6gxGG zU+(s%jUn2`E;IXPwRVRuR4<-<@MvpA+ZMC3qX)CzEtn<kxc}=@<+rR{&w4i&+&h%C zv1Fc>j+W>7t^3puEl62frL}p%Th6`b&hk&ZbbEz*x=+K-^r+~%FE$g*zHe%L%)V=- z_V-=?R_{}LuEBS5+4a3!9X36DlJIsz&t!l73@wS(w^v21m~-Mzx2*E=bVcPrNl^6i zfO;8Mb#EvgKO7ve^Tt9U(AL`D((`!wd9MB1y7y2{RPiNgrHYUwr_^rHwwsq<Z)FwU zw%ikN`}DlSMyE=?vh!bI(eGcVYqMR$e@5G^b@DuM(>Lx{EE6cHj@lS`ZezUp$tht$ zJRKsj^GeTMk=*1HzI?@}&=)fwJ-TCKyj!W%c<075XO(s?T3LE+K~2A4_0}oHE0%F} zueuPt=UwyuwJTpfzb3NPcIow}-|m&YJbCQm#G8^u$tTx&oXmLDnq(RG)%3-k^Xmg1 zEj74#mUnqeMa_(LyxnylGEBb8@bPY8Vp7;p&9S1C6MA$)Z2j}YfA{}WfAf6)zmFs~ z4o=*E@ZN#v+TJfWChunv(+}vKs#7t^bN-x=)j2n7f}HDqJ8m?&zroy!ZGL-k$Qu=x zrLV7@K5w$|pLW{aU*0ZhI#bp9mpM;3`ThJaCYAoLs;@JP3OQ{a*V=8;J(IkvRK0WC zyX|LxZ+p*l+%KrrHT1<wf7dhjjB@zTCm!P6y+~c%x8a!P-CfnU#Cm$1>rb@!Z{GY* z^4sn&-o+;?f_D3z?Cf}@GBsrSloJ7hPrYq2ceovS<YD<`%hR4Bg@74UUSM?h{hrGe zMXrBqzW<hg;c#;|14D0=r;B6ArF+{p)CvTMHW~`;sXi2RRQE1;EN5P>e06W<ty@-= zpTbLKZvS%rjC}pakH_Wo?g^+gFmO!q1~mtE9l$xYw&?2S<8c;Wjx2t<iZ>Hf5P`EO zXi8`Lfvwrs{pMH{J~+U5t2{sN-i;;y^DgW+*UQbR`E$7c=f=vvze=^XrJql)S{|QS zv-IPg&-%8XE--7Vt=3&0HA_l-V^Xd5lbXb3U%v#$S3kUcKR9Xs#|O{t>c87czu&j9 z_U5~svmd`)KKD(34azM+uv+_uAB(_B%?G+w;k=-|2v}ybH2N8oOrLISQNbd|z$l>M z#(-^;9;`8OO1Z(qw^BzDTo6MW7ce;o29_?+Rx=6vE0_%xP;;X36KI}H&f9|tv{K%n z@!S;&`?TqsPk?f9X3pg})z`01Z$9M3ZOm&F`gWz?hnEM!i*r_8o;mjw&!!)(_U5O) z?D>@IpK&5Cx>~${hEHl`-Ff$1ea9uXODfVY)V#cLH)M5agve_})fb*zp9Pnl_jbzp z=9B6o(-SVWA+c&>n@mm0h0PDn9FW$(UY6Le7rZzyA!*Cgkb_@l8-%KrAN@1AVeZs6 zJNf1_zt+_Sy*}0U>W<jO@W1|FxhKqx(qILZ!lA+rOO|CFn!wMbu)&-2!m5q8BknIs zJ~`X(E~BKkn9a;B3pa(FjF=m?{o||Cn=juJ+H7>$XR^=QvbAsXKTS(lPqB`E-J4f^ za3iy1>L%Bko7-kfZ@PZ%#AYVj)f?`9R(rnV`u1(to~ymh{pKxoX3hD@OP0OxUSn*@ z{^HG61IKmei-TvKjrtxkFTht6)Vx`I#C^s)vx`$dTU=^?XPvjyblp$IYZLbN`&5a| zk*s(udP8oa<-MrL`Pt__?wsGJ6k=Q$YVdc~a_-N2LUM#oY&oZ&AUAu@X<gHud`Ut| zpI)7*iS0BG0gbWjjr+}U*Ew<irq1-GscZSUKyAhY6F3xtj8!gVu(3EKY=^AZ-aQSx zUfYcG%`@fQ<?8PrcQW)XOnEr@*4v{iZ{A!vrOkt}P}`_D-RJa!4|Y0lF8%rgS~pa! z5tZ(}ZpCY3Z=vg-lIq_rx%2+x((<UqZE>#J?`NE0nfI;sQp)a~3zLk_&Q1K1a_#xw z-m?w6-urCO-V}26#`CSazW!V)b>BU-NM-9epPBO)2Ke@ct=_PL%l76I=fs&G_L;mm zWvS!8CMn~DYt5Rfi!&Sj4?ev;FGKC@YLk!K!nQ1E?EagVdU{r!te&l_I-@$Xa`NPL zJXY6E%r88-Y~kIUv^&m)K?1Fg3@i={YM45%OgS$i1mY-oE!cj_Z0;8MNt_&CYbVRy z6*2)Y#C}*~RPuS}{tLzxE|X6_Rt#eloEhi0TQ<J*R#5fjPal_;t=~UQUAEDE-7@jk zNzGg9EdRPs&OB<o`s$9io7}vdccylAx$W<tcIK(_UAK#KS6n<(D5d0V8S)x&m{hSH z>yj^P4=tMX<w;@dBDrqsw1e|mLJn+CaQ^t}XnI?dmgMf_CdjN>?yL&$w^x?>?+*)3 z-BLZ>kaJ10riGdCs`DGV!!K@(TV=1v1FB-3K!cm@;4Jxy)92mfNOtfVA6By$o-&{F zJf~inT4d{4J!{#S071!zZQFW`HhXl;=&LY0s(*UZ@xM0zZ^iw+*{+lMs920K@qC<z z?D6l{-n?2mwd+KWnC{tcD?Y88HM=6q=+tFnfv9ypUd0)2%D3J+CEI-U)b^cD{PHJ0 zP5j1`yZ-nMw(5hXmO4q31dANIy)I2=TBx+jDQwzS@2PiZoM-A?=hLcnBVbR}$C(Qk zcpa;or?A=0-~MTp-i1<wsWyM3de3@%*Gm=h*lPX!M$EML7T)X5DaE$O-fw>PN@)sc z#Y5vBP(#9-?<=U7QkV)_!6WRWkr#AZ`&1B1<2`|c-;IS|J=?r7W#Qy4%MIU}_8R5h zJ<%lp@2&f(@{UyA3(s@EA5ZYmU|+O9G-27beet^UG!s=nZ(P&C$u@Idc<b9^ZCsz$ zIGxu@;WGXych=S-{UP7CCEThzLW*ZJY+(C4LAh0FuCwXP3B?g1t@D(wow`5&l8)wf zH~Gb<wGM=BP;~xUbrI~db2F5JZ6-Z#=U(;l)V?d1mfdgJIP=opVt=M<E?j+Que|#D z)9w4ebz8L{YZ#nW7hF^QakTBg+U>Pvf9LXl|Nm=#2dVq|3*1YC_QX!Qmw1A|>W$~` z(7k*UYgN2AUE266PyMf0$mGtef0u39COk*@1kb5g&*#)i?RzQ1arOM~^;%m+=jj^X z4sebxyggZJQ>e)cftz*mjx!gzuMY3Jm961*Y<KyN<C_A5?h5AK&7VE{@qVUj8|Q~4 z28vd_3ZD3W--qb@yBD*Q6=N(}uHBu#@s(>D+s&Ggw7}cRHpweZ`eaYC24DJe`h5D& zi<zrT;`)Wu7z53c%I;0>Ob(uJ(6aKQ%Cdw>y!>yU-M_5YvnEPRTYUKf9gZWMF?*}N z-q@HNzAonHi^ctBW_s~^el+vj?f7u7`u+Zo&mMfee*N6s*Yj<w-+g%*9#7<O!j<#o z`~NGx&3(8Dym5@z)M(3D>D%!3gYS*PPp$O}q)QNID&^*>USV&P^#HdXLU9fzu%3ms z9;_$G`hcoJMu8h<EH_qfZesV^-g_%Rgr!WUG5h+uxfX?w4m2`vd4KQDo{gUW?=Gm% zkGXZ@$B%aT&&i*EeSIC0bAI0WFMj(k{qTCc^Lc#LlZEU-9V>`wMkHU%FFyR?%Vo22 zg)5+}0&6`mFghkw7A6+0`?KARSs&E@XgE*+nz8LRf2yb`swr+60&y>>=wK9B(Z#Sg z)#8utn^04hosecwsF1^wWnQ}`z%H+Wh{8!d(30SVt()KiD2xEmF8x(YxNo9}!rE2} z51be#N{L5J+*A?j%UH333sfPas}xXg@Zhat1vx#$b%C+zvHqJ+*NF9~a?caVz4U$S zE3O->MZznghbTGC|J=Xntj{5V)#tXJ(+#+?EP2)9?GZ=H4jQTi&)xW?@XimdFHhF? z*qmo6<8;{M=6~*dXt|iI`O@m!<^mHvMY+FP-7APllbHKiW95XJJ7vM)Thb!`z3`CP znEHFgoPAR~y<TrDDtcra$t*r^sWGdX_zI^q#?nKf%GY;Xdg3Gia^syGrj9Fja`+e2 z3NSRvdNoYDc=y;ZF<I|>C0PQ8K}X54PTj|rk{9$Zb$!qz|5@H=7U=#;n^?H^#HTkd z+ZRR^eoJ5T3$*w~WW`&JfGf`)Wao+oX{GJ<OslP{&AY_zWY_1me$$n8PX70vnLT(} zIk|X|daj_0=P4c)?&N*vZ$9(mJHJ-<YwfXT?{aT9IjXfX=%_cgxIHq;bkH}gbzRwS zo_qE4=}@P8XN>QOuARCztwbUxy>Y{)+9PXpu1(Le{1`TE)*Zcil|cT){orwnO-`nv zC$?-g+&rhQ_q0wAIEFU#awr6C?w!LL>d3&dO}H`m?kz>Z^DEAq{LW6|eyg5(B6^Ba zL$XHXkCcMlq1-}}(n_o@iPt@v-}CHSe(L|y4Q;Qsd<vVLUOt_DD`-%HmD6Tz>+IC5 ztFJ$ch*?dVX}#1uqIKS$$w%)PcG>*pGhX0l8T>rPNHKc1_UZ=<if1%cJ}gKMo4e+G zuTiviYn12J;>u}Dd#*me+vZifkLeR<mDo(lRT8ppxA$t*PPv-dRcm)I>f+q>|4+JI z{ln9m)wNY%Rjy`moR5_eXJA}?Q;phNE8&=>%hJ-9C#g0s@mlQj*z{b^`mmBy`RXTZ zPu0HE7SwYAO_MZqf>xA^gAyoYnBvIgch2{|uX#T^#XOdGwoaf?(T;gfB1M%_8z<S` zvYp&G%O~p5@lPpde8iSrHFo%vr+dG5XRcW3Mb_2JEBn5&UG9Fy<TlT2uY&6{i=8Id z16R$v-Lrf<XiVeVJQ0PR470Va?s5H@u}E$~PkH`ywzEc0)eN6&7@qzzW6@=9y;Da| zP4m9DAl)){<CTjKojY#Dwf1*?UFx)M>4o30Ln|+DvRv%%zx3EE-P9_bPg|i|?0fUF zPMj~k6O~``{(ZscAE908b1$9z$F$$;rRvSC-m6k3WES^c{;Mk$^~uIf&2wqejX?1E z9;ehAJbZ7uDDs2a8;@AjzISe6%->VG>EhB1cHO|U4|zj_#2-}@ZMc>%m&M80IrE|0 z%$56u8D$Gib{RFMtUbTIH#zz3J*QvJac(zRSF67~{Y@b!e}aHh(e~IiZ!f3th4nIS z{Bkj1*Sy;u>dKq<+{k}(T`-kFGc!*TG~tq}F*#SJ^2)^<d*4c%oZ>n1DR%i@lRzU+ zwfZf`{_a%Y`!ndI^jDpGqTcedLJnujUjF)26S6^n=eNloKc6bUZT-e__N1_hroNi` zua{BB=4bM9Z=I@{?R)O!b#pWGUlX-2t-PM9>=(22Nbr^zVY$nZU!PT|w90;MF20xb z;ZK;yva6=&%oo}PKepNOVOikPraOVMpin>w5{t&ay!pOsj4}fwZ)>l(aL+kqx5+Ny zSA5Ghrc9g++H&4*eTo0{X07GNG%nwYEh&#)xo6EGA+4&z_ijF#7ahD|S72q=ih>i0 zxm`EU#ia>OU%B0H_x^<L#N%7IY`1g!J9gyHY&Mrmb=vlLR&3X{1}(;{`o(G`hGp+_ zBI`JteZ(?96iaD5J!L!j^pfS5G%BVYkMj)O6!Xc=mb>hzmRtM6>!FVpFRImSciyU% zqZOq1RaIX#B>BFd;mj*PuSz$Ccyz=rP1@D_{&KRh$o8Ad_Y3%5Hh(FVZq~UsO}(c7 z;EGAM{8Ly!y}XA40h7h+HiD0d1dnz6|Kfjy<XMnVt-Cx=W?ujFbbg6*%<rjB>sHq; z);Z}VZY_D`+pNi3v_-j77lZd+H5HdE{B-ruq9yr$8J2nPA7*_0aJsX3`|>EyD^r%7 z&PWJpdiyigtw>7d>Xn*<>%KjGq1h{0InT>~?_m|obEllowSIZ0psik(AN`PRrla~v zxwvC#Nk&`qp5J=f#P-BG<8fR2u0?C_UR>$AdU|=<iX;)~>bYjsFBe}p`sKowsId4= zArA9fp4@Id`mC{Er(Wso&F?j`PJU-5NS4j1T3_^IOBH|hi_#m9ax$Vsmv2hVx^BU| zV}i%gLu)3fmWwbmx-*5ZkFza%b7QJ@xZST8i+g)di|hY;(9Ey5=li|i`FkuY{(jwB z{QOt?`FYm0zphS?uY0=n`Z?LZ&n|v`e*W?#quR48x6N5Kqfl_QetC9$&4cp&pZy-6 z6#WWW)e`NV9Z*xja%{!Qhb=8-Zrb39k(-;}=I>KGV_Er0{zci{OZLX~e~uoPudYa! z;MR6XP#4@$@w_GP9M1EI5<k7!D9&g5@r7R#TQsPh4I2ySBKIuFrGaQ?5Y4N5m91a% zyV~oGx!j*S&)@G$e|*=xE24eZRlx(7{jY9pO~F2pQJ~!5(JQS#1;<dtD-MOA$?b2a zwYwktRNyR&&5Xtprj9EM+EJ!C;Ik(OR)A(yLTngqk-d$?o+$MN(X2u-UP6=!w27W& z?<%(Z)hAE#U3EyfF7U#q_hWLI<!SI%@7~;7t3_7tv(a8-c+(`IX!BW_E}xqn`749G zU(R>-Z}!P6GMcE<zxw>)s%4JbgjTZnlz#cd`X{dSZJM#^lHj?GQ+K*@wVn`X(>Lk- zwu`0QVx{cF$ey64xvXDhyw-o-v*A;i@#@BsoHPT=bN8I5-ppIylndG?b-r%f+8a}o z<2cR-mVGUn&SiDpKyCV+tVK$orb-5=&sYv>_%(WQTv)XOHu4cGC+#g}lWB4?PStqg zNy{`o&=&QoPS8m~$~C8?GDVGk_W2#Ue{0ry<5ciY^>sDVtc61QPs!x3U31>_`HuFN zCsOx0`s;Ichz6cL6&0Q9(e=yr*k+d7!e?^0<a5_<IkuMPT(pMUK0E)pxAN!i^60x8 zb7yv1`HmMkuN3EncT8%makOo}^4ey--TtjtzVt4ic&Ehi<Y}qOS&Fw$t~*h-``Aj6 z-nT!F9<7+fb$Q3s%L}*uImNXttZ0Y+ezWFtiI)Gv?RP%8E(AL1*+IdFVWQL*4p4Nh zXgL60@sW28wBn<FwnCoDso&K}y}25ZKbDmJw!Bd+B`vhNc9;F!t>$abuiwJ5l96-P z!;k!lqDLM6^veW>DNa6<*!}6q-n!blb^B+`d@5q7;=1gH*w!!?mlF>SPWmt<X-?a= zDX90?nMrTzIBQP^DZQ8LwE281?t)MC-LtC3RUED?)3V+w=hYs0<2%{<&DQgmF2_yM z%2dgJXLjvU``y<!<{VDD_-oJO8OEP<*mert&OLcKH3hU4U2J7-5tI2mo=+2-cJR&r zwtU&2D-O0BUaR|^+hlX9<u=c;SAPy2)BYhYdUI1o`YL6iSs~F;PLt-lq@SvtD88c4 z=e5u7j|-p1u1pGveQcr?>AEe>%~F7&G1iA+;;h&=H8c2_6bww5_J(e&SQ@(bjN3|3 zljaz&G%vVGvm|uWe8){&@4dL^zk8O+%r{}H56?aJRQYb(r8&nlWz2opa!*Z-{4DnL zpK~r}#^<*uWzR<Jz8+s(x8s<?<<Gy~a&BWkal60AsC9#YK>E)uu`}aLt{Z(@+QYVL z!`+-^`(K~wk+xFi4EInx&)s*Kq11L#>arcm{FUo@yq57zi}$~n-hSb=P2Qg`O{<Gj zDi`-}vTF8?R=u5fc}cxvXG%opY9F1qU4HIC|1)mIXML+Oop)@T-SblajbZF_fA8j< zcw^fWU7Y~7utRV1*7&VG@y4kvP%zTiCU))fz$VS3_K~ZUw{AW4{C-??>@umloMMii zJBkV;_m)L3JE{_w|K*iVWsu+hkXYxSKUt~IWv77pN{xp=1F}5=OrWAcVe)||b~6hM z?^)e^amm*;YQrq?o>fcqE`NQJuyuJ^v53cuQr`T(2B*%Lw7fko_Ph7*ss~Z=+m5_@ z`)pry<f=1}10KyHW_Yos9tm^J3D2sQm0#yMA#(BZ`AYpwHx)!ug;GA9KjiQx_0!sG zS0rvTsOEUw`5V{z_R^vaGnJAw`rNJ?E<f5DC{=mieBHzCDl;YDd4%59*ev6<kuS{U zyy7>jk1xW{v8VUgY_@g|yRKDxB-J$H(eug0>_3-g*5v#8crD*G&wg)kiS_HBn=-z- zoSmg~IDgZ|_}P_P4FX;ZsLtcd@blSM<a<sv#<<yyef7L8?dPuY{}Nm%ROu)JDnxiD zGbow9+p_)6>IH0|nPBA&`yZY>(t9v!|F-Zv2J7H2UgG-%=LWo#1Fahga%-rPZvA$R zf3Z*a`475r8*YWo&MuQSe}DH>QR*eGSXGxd`5n9++h)A?*}64-yUtnviJsQ!n`Ybg zKb*0AvXU{=kswd4W1s#+vU681T5x~$hS&%Zv&ol)nwBeN91puY@t$)_(!sv-e*BAl z7F)l0vN1?)=F@<#k_}B&d^@jiH0h1$kCv*Pa#Qls-_X{#-)vi^iu7OGR4~zuRnkA| zgzWN@PAb<w9G5G8s&}&I=$lu2%RV$*ddMnf=f9&UQsZ2A&-=+Yt(^Xc=Fd-dxwlPm z3Ny4d^nLw@Zr;Y|{NHbW-Io7%xBl1hM<kz`9d+TX!#p3o{D4coiEqQ_Rlai<OYscb zb>n2gqW1Y*`BPq+FWox#(VV4e8f+?Fzn)3hZTeXJ)2P(>u-2vAyOz>(AEhc8C9gCo z`*W!1ah2D+pHp~Vi)c)FP+rX!dgI(K-y=T0{~zq#_$_MJl%7fbDf~~e?6ize%DR5x zIm`3v>LER$qYYP2ieD*?*sC|iYw~HwiJ75+-V$wMA=;boF3OE`iM1(Fxj6aa&91Y& z|187&r#)9Pk(#{hX56;y(79zsXAi&Hb(}r2xbym-`~SmDMEzIIku{B!To)twG&ojX z>UiDB3$O2e_Fen!pM$4>fgp7k{O<ofw_M79-HQ3|>;606x_u~9**l@fMB2|IBYn#z z$e}>Dt-dWkG^f7wQ+Ua4#ICD7#yzc~3L7SK#Ox_{GJjsN+V=N@+E+ZiF~5p8m*uCp zyk^bF$j`}HVo(X$gI=QU*sKfc{4p@?p2F}nU-q8+`?UK@pB>H-(C8<3l1Ph~(Vf6~ zYbS)LG1~l{(yq2B8oZ_f(S$kRA^c&#edaFva-qao6U#(F$@0cc&_L<K_-U;!2c?c= z7j1AB1yz8csveYP163Eq?b~-Kp1Fq^)QfR=@JzsAiJE*l*R=;LH`cre;0BAr8h)T+ zj)BEN0lc4D1`+`1q=6QwOnk(-<f_QR_Fd?*;PIY7P}9pF;cj@li-Ds7-1JiGSO1{* z5PTSSnLKPJDaU-8PQ|6qf7XAH03DLu!UZ|@hhvRablQS#2htCoUyu`WzR}9?>dP}) z3X$_TYwcKOHqL6iJg4N!UY!%Im1*T}#l?cRyI-xGGV9fgx1#U8zioJA8!4^u(`v3% zyxOOyU!F8AR$gmdF#p+G`Ga>Jb$b+S+}rH)PQdB2cIE`jRmRQ2E6yC+XYTZ(N8Q-< zscym!xu>E>*`q36c?g;^ZF_De0y?pz%#_h3>(kD9?t`;x9t3c+l<_l0{V$h(Z4#NI zTX}h<HFxsKCiTwG3yN<<C%wI_xbN`cxTP%S8%5WfWMyaX(`#m$mKJq-NxocUmRar9 zm*vm>gs&G@mK_SO*?Tcp-=h1;$G#13Lr<hs{ap6^_ao8f{yirxZ}MMzu69>feB->1 z``s^h+F0xUeipQL?V_~S-^=&rx^<sPi{kDLU%yCQeA>(_k`?9WuG{<A9(j|LJtO48 z13pEQ^^@FYhW0#qWE5+0bE@e5=OT{jHks<@cZU3_dZN&@tnGv8maUHpVt2gUW*yPB z2o$9Y1Ra(f+iAUG`elWP$7lFN9TLnTvqtv|qd<o+-q3$^O>VcaM*gSHqsu|FMkS{U zL5&wa)uj^BN~}kGpPn%h-gu?&2!E9JMPoldvr}JGb%I}UKb$RYsQCJ@LUH9r`|_Z= z$8RiFzFG5mLQ2%_86g*rY_{8fN$4s273Q=%37_62eyBF|&3vsgH)?+5q{Au;&x>cD zh`F5+=xE%2WioT~r{2CL=ME$*)Y%uN=DjOb6Tj_k_KD|L?_PzqPbRn(KD>GCpoOkt zM%lIgw2aQ+%1!+~JM|r{H*bDpr1m5#{iMWt_o{923({jMtro|g`SN<ov~8-B-Ardz z`jjj5gTo-emeD0^ReFyYC|4}leoAcHmh%%ldB4_9)+s$C&?KO$-2U6M%Pk<duB=V- z%EFURHgeB?;CeQC3V+GV)2TZ<md~A+?9m#XIql^}h07&<SHu^eIT*FSK)&ZyWUJ4@ zCGzp7`{vH<@p^Fbd#L-aUK>5H4}pfZJKt@&JS)y*_puw#xvMXVCoGxLbZ*(h#4jl; z-4|X|Olh%V?!Wxxl~mBeloCz7a}7}!WZhmKmN=SvhR5u0Z@;{5=!X3llCNf1eG|S` zVV9o9Vs~d++}un2@85IG{9Z1tq@RB>I%2^VomV=?CUJI2uXA^^?NvWoYCJFNMz*%I z^j%JS17qdQhST>P{%5>@nn@sd!pW_dLCJKdZIgc8sa`%&$As^KGw!GxOM+L<?o#zU zKWT=!+o~meD<60&=Py1Javr>7rD*TDX&?T@`Ut)doXr$|UG3zPeg?}Y+h4yumfH7z z?M^K*O?#P{S5~x~G<WTNH}Q<QOzJC1kp<Czd;eNmNYsV|_-|Y+lWe`Vg`u(f{}%JJ z8G%XRTP9o2nWs~#X<)Uar67HQ$Fh#y8*Oa9$F!*2HjbH-y=~*?ww+fB+zLP5Ja)~k zi_`RPkBOba%?PPARmJRokL>()&@%t({1t1D@P$=th55|X*{gT<^OWxAKZD(C@6Dg) ztGafUKx<Exm8L$E+n)^CMSDWio+rHB;G=R@_IddRMpw{0;({np@9&}adE1Zf^93NA zBNC<y+_?YY$EAt7a=*9kEh@b=bJ6StHNtia-<3*%I#(?@Q!?N4MSWepea@Tw4>#Cv zcm0&!{jqlPyGjAJnT<{dCrf?v3i50|^UG(gY|FG4X8RxaK1)2A;;H7fHT9P9PB~4R zpZDh2_dTzeks@|=vMujHHYW|A;0^V+W~VNha!Yh`D*sA#aXDEhhb6`x5!&_rp2qHZ zy%)<CcW<`*rOLJI@Qn*)GbM901AQ_Q4W-V=-d}z^P2<bP^O+Yeo2<K+@?`&`oH=f3 z->1}bTI&SM`l{xdE-!Mk4W1(IFR)p=&))glEv*$dKnrxN*FFFDr1!IRL<1yySTa@? z9{Yb&aL3ne=lA{m_Vkx<y^H<j{omZhk&fkgtFlmpqv1dR`msD$uC9h2%d_Oc+qIL6 zADun)>FN&f_>f)4)Rd*&b9we!Ui!cnxN=fJgo&ut)CV%Lnvp6VH5&yJCP+_Sx%3j~ zc<R@>Y_?ygzkDWST{Cm%6`oR=-djP&TNt$`FW)@xp|~{r-(xqP-!<8)oBJWH;>=C1 zOQ(33s!untx)GA{f@j~8n7=An)swnoHyo=KsZ(56yuaILb<p&Qb0l*tTR-!$PP|}Q zsP#*$(C%4}`r_rPDQCqeuln4=x@70!3R|NWnIZEw2M94qtE*o<{p_lY(8<Fot+6@V zkM<QQJn(ox-7^v2mEX&>*}13=vOe~825%RC{{acp&`OgGcGC@@hR+=6X^39J-|C)6 z?_VWd?hU^zL^j3Hhp|!C2|Tf-dK~ox9>gkH*5j~=trqb!u;v2?qt|llJ^lBx*bEdH zn7)yF9Ac(ZuI1HBS9WxWzK&LW&TYJQ`TSqExbOd)C-l3Q-TwQ}-S2N!eCMr>4k(%d zx*w$OR!8B}^!8bxnh4yWP+(xX-Q4is*8B3C>@VBePhAjV0iEG&$>@@`Z71_WJ5cWg z-rNZBXxP{2DWk2sT>O5>3L%$fP^*Jay}`pbkNt9Raz%lTxorq&coSoU#{kqe^56bp z|8GtI*ei?}@}N*@Q~{L$ucc2cJ9(UUE2wHfYdkTqTmp?w?XQ2(dkDwAs0Q%#!p`5U zm$Hf$JG%<p(1o3>v*|{}rC&>ag!N@;U%R?_O7Q&O_x~B1UA_4F#_X9_Ch04tG=E&O zbzR(=T{9=`b<kRQT4sfP%Vga>GI`z?d#>pnDbBFtdUO8Wy=!&)2i?W^d{yKNH@2?G znCP+oven6u^apzR8TWX8ee0;$+;wr{v+{Q<W447qQ~v&L(RGfVvsXWFl77znL}{9? zH24m61{MiWOXmx-{cN^_vuwVAj%Vg%jQUkB{rb&rBhbbn*0md#{5|>fW@dh7cAn9Z ztNV6swRW+-vmh#Z?Z3BYeKI<9f2e|2)@r2MWUgJga@WL3dynk!dc1b(*PYK~z8lC2 z{tKI={ygRB*9B&|61uy4S9U)9nensZ{gyTFa^HVHWVdP2Ij)%}!Y{sFv2vM&apgY4 z^on~r*Iu7t-nPR0w7jfmUHZKFFU&siB(91)xhCW8WMM8otM;cUb5}pVY2tsMb!zvF z-Zz_0UkK$gT)JtYlN?9G0Rd3l2ph@Op5lZI-GR?8j86x*YX1B<EaC4l(cI?ftBV1b zo~o>!@t47!;d-3fRl)LqoAdUvy#?(M&*ZGSWgYoOL+SqSESt!HWfOxOXD-@xgLO;T zBR>!E`1$dfo}5qCN=h!yTKnYY<=?uz=iTRp-`3u@ro1NJ!XtzA>WfEBcAK(h@Ovo# z)T)}h)$3T(;m>Is<J_GO7<6@4Zk}~9QK~S<Y*|M4|A~uFYki!!nD62vlezv|s<|&e zjM=Yn(v3~`#}<22Rbl(BKjXcp&py>vp!2EbTtJ!c8pX<{^rTn&f7eIE)G$q5mX=;S zH;MP;%Ny4{wET~n$V5)x+4KfFpP|y=;XBhr5!?Yd13IQq&3SdzOxwWacXjXPnCHB6 zJ$WLr{?d(_uu?Dn!W}RDx$nO`YGQoX%JFRUlxo&o-dvkZ{p|^*$<A&wL3f|A-pEeV zI(aGh%RGg0)h*Q}y#F*_Uj4no?(xaF3aQF6Qxet0`9go3SXvuq=Cp5t*Rxmu+ANKQ zX056DdT+_L?ytL=UIfX6AAG^_d+zbfqJES3&y#AO+?wqCG}CJN>z?^%mio+|cr(`f zUgAF$Ip5#jXXDl%^Iw0y@@}wG*F3%FsXcF7Stst=Y<J!M&c~@8W-izFE`9do&PlQT zY@6aWrOsN-ncoMxC+6PzRmXFmYx*ly7w)|nAMiPMi{j=_k2XasY+pOUH~_qWl}o^3 z$ub6;5LQs`_hy>>`$=3Gc;>6RZp#Oge7+FR*iC;u7u&I}&NjMP)~CB(*v#x$TaX}c zm^f&iZVgBD+Rx>c68=$>^y2Q`2x#&$t@`CzU2-zceeIJ^N&7d(uh(Qsf3tAshu;l4 zOZktxAG|EO<+RnLpGwPCykm{c=~P-AF{8$DYR}cB+Ns~mj;k<fT<y1D3SDwt)Mfg! zWt-gDv$b`K*S_z}kn(mu`L)OArJdID>h`6eo!%E-eQEl3^2r>I&3*6J{!D*uY|7=Z zSvlm=ijd%AJGQ(!*7l11sm{Sm>-n}G(YZhQ!SRSKyRZA!OuU@1_Wqa27M13r)8&hu z`A&s5N*aONIzFJ1Zh0sBf=`>BeFbi?vV1e&WBQRVFe>BPH?HnXU;lFU%8(?dr4uB) zZ_PK^q!V#hW3uX1<EPGvQpwKW-mR7AxmUVjzoI$!vB|8dx5CY*`2==;<8w)=G)s@N zy>Hg_yyM8eJNI=i1-l+gSrOvh_Dp&GvZnrna_8lW9K~;&PYE(|nfLD7>|Kj$otM3u zlCiMrs8Oy@Y`<dV=7ROw9p|pOw|*7jb^W9FXwje0;JP~pkNSfX*zQfu=l=fLb=dj9 z*&eGYEsx~S1>RWFb}YL0pAu_HGrMhOUGRD(ulk9?t&L(4cP~u55-{o0BgT|#twnxU z$`%B2fvOfS)dkCv|3J<g{Qd0q^!k4v?FH<S8#cLw&l^;@o)omF{93$Xu-vw9+O-1O zC%vNQ^X$KN(f`x7b?atLic+&wn`0#;VrKT_QEY6(s&t!7ebczRJ}2XnZYV1LKha&p zw!dZBkIf9f1m7&a!^(Hjy(+kFe(^%d$DUKWf1hw|mZ+TUrN`v#92R!Pz%p2Bk@?oU zyQ|kfUKVEf=*E=DM=vJm8UC=HF<bd;>aP7p@~PYA1Sy#G)pRR;lzi2@@7<c@Q(AAX z2OOMoZ$bRwEw3&*1YCGq$r_s=5%=l`N49>~F<q~~IKx7@HdmX*T?!AVym=daEGG~= zmZNR@Y4hRMw>$r?GfqGE=Wu$wXxYEl)6+_u5xai&9M(KwBXFY)e7tjZ?VhXiYCqVO zwz=v3-5I&t+z5W2piez?EJu1%<0<5p#8h%;w_K%(ncdPdly>44K5*Ipr-0I)saOy5 zYhd75BIvM$?Js0Z2BQJt*2<t{y7&?23r6r73|JEg?um{oJH9jid?Nf;eqLkI@^&e> z1Ty0!Xk6&B^^NEmf=f?2^OfRksx<$@Va;ODlAUt@p2~X?L0NZpE@b0)W5)!&&+KNN zPG)UU<+Tf4AD5)B5AsP>ykLLGjCaPJ9OKCbKcapr?Xd7JnP$X1F*$gy<1~9AyZ)6+ zXFS<p+qm4y_Ug&SsZL*+>ZV7z<m#_bpFZn=G5Z;t6_cv(hAcOpy?%O#zVV&hHEH6q zexi#l0@D`8rN2oyXmIZ7;)T6@=WYHzd%3KywBoRya))B6=KI%&=VaTu|9s%gE9q}F ztNRfs2sTUxEqgk?TV(Y?u-9I)WH8>zU6X%t;}hTI>soqM-}>vF_pA1fE}pDd+N1t9 z)M&ODcx#aDom-%_If8))c2#e9x{GD&R@3<OuhaT}sBgNUx+Q6Xr|N8Pr{7br?bur8 z=s0=aoISnWYb&|-7f#%|t$M?On7u3R|J-K$W^q%Mk-GGsyjLeJV^RZ;rU;fM*~M)K zpWoa%!DHgX6Kl@r>ze*u=W}<-%T*boi*Kk*F8ef1c)>}gWcJ6xzIF1vxg`P5&CZ-$ z*SAT_KiRsbaN)m)W}^Mu!=CKPzPdo`N>t&C>LsGGf=7GQ&w3p>Q*v2!DX73ss1|Zq zqPG10F@d!wJwdIT?E>J|jbh_3pUwM^DGS(Wx87}^QZ9T{>NdD}Q|{W}Y~Q2a%NwX$ zxY$ZtFJOLrW~UmPN`{;1$#T_y?(6Q!mhc6qD2Z9Gd@Fiz%E#J=3{$55V3`?KI+-i= z#2WAw7{<#N=^1_C`4cuja?;=9j)lcvRrW`7nca*F@PAdrwqM$M?b1npM|svlZhIAw zyS>}$_~$ki;|;|#FV$rf&Fts@XCfBbleF2VX@<VqsjKFt8y49~-Fk6hOZltm>sntL z8C`s*>(l+mxt1yZi?Bkof!~CmA|fVfTTiTZbno&wzy0E-DSv#9E?8)@((2#VKyP7R zqhRm7bGnYK&hZeta(Nji=o(9g#w1W~IL==<tL6@9%uXA$_2}4TKgYDiS2UR%zaNFH z>A5j~3;UXrPppG~=Zbn)2G06y(R(}1a82^r=qdeHD|uaNk4>J<zpJ&*K&<uDwu=gr zwSHR9Ix}O+M#jnWK2Q0qEPpxc`>$+E`BhvWr{rGNOR6%wePM}^=GER>&Bdz5{$ZN? z=bbeAJUchu_|~t4wfXUu3!fOIoLUwcKJVPbZ;LbI-f4(6Ew+u!TiSg_Ac|f4u)EXQ zCkI2{z0kO`)QF{nyGt>=Aki`9+1m48`O9Yrd}^7$=6KMtchA*-ifYb#<rLn$G;RIe zX(wwlCs(guyTojla9u*0o0`5}WqYi=$<?nZCs+KLH6dZyysDQ^clwE3*qn9V3EXok z0M+yFI5@67acl2V*zlXf=iTIwZ6B|lbenGWeaeyiIL6hJtW<ta{+7{el)LKk+_%T- zLMN2%P+~gt?(MGo&a$92JJOF<s%&d~aFB0a{zLorq9cZ(t!1ieGnJ&Cnm^IGqH+2D z%Z|H!^Vw4l2j~kw(<}>3&S9Qn{BLUD-MjBOw~1de_FSgDr{?M7wf*ncJ{4Y?#p}K- zr!V)M>^xh;8DXz9rhQ7bjpVc1_xN0+`K8I-zcs20rkYz7-H48xx{PO@c1rWrd0ipF zQhw`ai#pAm<GsV7b;^?E_x?n#D(x_Gzxl-$bXCT6%cRcc(0sq6&t9`X-*ffJhw|EG z*XBKF{3OFGdS$asxT6rL7r8{hVF}w^aJj6d2%6tg;oc=4b6fk?g1ziZJ3p*A(&D9P zIBko4=K8&X%W6vlC*>b+65qRmfn)df*K*Mdj_#=1msx-KzV7vq1nu)|w^SzQE!Mtw zdP{bp?U|}yK_}MczO6J+e<(OlWa&fOBeJUbS0nZ=xZk@?{EG41<-!MKT6x!Q&YjOA zvdM2<skrw~=Sh+o!ZyVzD;LJCxf7T(L-Nb_E0>IW-tE+C;|sgt?kp{9X)|emSH+fT zjQ({EQ)3p~Q=RfZHr7zKI#+bgdzrX|jjtS^*VQ#XUVp2ou3gCX-Kyhh8hM-jW3wKm zb@eDnJ}u|jCw|3v|MmdzwU;p*D>C`^-w=R}=*+MG!~f&_`}iHnG5>d#yu5Vzyv){# z%|;3gOwMWol50&uG7qeB{v#=Wv5GM$V!hD+zbBVlDK2ih{_fIW&)SDx=12aTuJMTJ zpITxiS?9ahr`3F(iTRW5`diNwoCz}C@`zvmB(Hqx@5t?OQ?A8F$n3E;jSdP>(hC-k znsz2ZebVWIowF~#Zi~N~^IWjkJE%07UHj1H1@i>;f3uvKd(GAV_okP&E_-Wl#U-T3 zobGDfUF74R`+N3!`R<h~-UQ}MSjo@-Q7YlL@@{qZe2(o?XX#$9JmC6#_3Vq2udWch z>$rc*iT)q#iLZH=+w{+tuZ*rKl27LK^;?zDlO*1G-hfeX=CQUTCp{|Mvu%^omMnN@ zxz6F+4TBe%w<ibivCN_EqUE`79a|FxB^I~EFj?>3`)1zl_g2Nv&e+#{3uSy1zu#oF z@Xn?6Y5#t7_uGH_kawKrw`0N=@XS{DE1WZ15#OL|eO}Du>xDK263hh>@)b}0fAb<w zfkir>jof9+Q$nNtwwjpgB^~`0cH-wDpVu#!@B4OW`~Kxe>K-42ZH0cE7T`GhCTMiW zOnC}uAO+OF5`ZuyGMP?yb5Aa|oG&Yzd3b>gN5g?Ul?IQqd0(t@P*wmn%DOhh#cjTH zD^Tp91lpnoj8>9@0jSWIG;DXkwm?W@Dnp!qwAQ&(t%^axmPsa<+QA~zSOivXWNA$T zH7mdZD2xEm2$Yt451Ru6OPOvXbW4<ggm={ZCGS;xw<?{xXn6Ia^mg#EF-)7Y7W|vg zn;M-Zvifug>y8gGOzla#FI`?yGwpEm`NLPIz7krY+)z-;s?XT5cGA<&J{KlyPr3ho z+qV-%fyY_*T86KG9HeZtmC@*`q{S=uquWJ)Dt@@q@#I6G>Egpr${)U5`1Q$>zN5V7 zSVR*}UUlDGy>+hC&7v<tnMRV|eO5CkhOT&?#^cp|pn&rM<BEr$^sY!LnYMmdXap+t zR0J11P1?S3pX>2S=5u%DnM~VazthJ0t#0mF-?r-;-^k?exfb?1zj~@rPf~VN=9Oz= zwZg9|vcc#7tzDwLraAR`$Ehh-!I#0#VQNpZzHaPT>3x~^>dV>Q(`NZTw0gF8*;<YL zcb?2yvuoXhPClWxJlC4eUhV#-+B|PkM%?~r=_wC(JXNl{eokt`w8hRMpXctpBvpQC z!uNGrRYj^#c$pV+&6Aqg<9YSWu0Izi+HgLZe=z2^XHw-XU!&z09G`EPBfIT|_vAUh zS1in(C3Wb!wX~^GPT3^S>8fR=n{2%T&TrG4!rUmRxS=)SY)6GsFt1CNk>En`q~sID zf>qJhDq{P-&P=O6dta_gMZ8ivSSN#5HP-Kvlkqkk-g8&er!A4<H1cFDd~W}_ZB@i& z>G01<ig%+5BjmZ4aT@*X(|JC9?XH`7FQXRE({#u=vMelqUh3Z^cJJM`*u8g_4p=`+ zaJQ(jfHZILDrxJr%|6ZZLUwoDUn}kZrgZDxq{UYI^hLgH5suklJVR>bB6aC%kHAly z+rm$7wgX=l8_E;BHmM}Uu=!@Gg=N0K@5wV~6PUL9^DXYI2hX=Xuglu$uJuGoUr=`D zs+kq98((D!ea$|#X#P{lD_hSzE1dYUn@2Mv<lekVYwZKTS6+b^vg$2Lo~K?{02(uG z;03jXLN1*1PP4j_sqbNaoA-7>pi$9{`8^>^N?(6j6zS-zwwpb()OqVO-BY=Z+gRRj zSHJP-4qNle9!ItN>vy+m@JxD}vpwu~#_o?xwtDC<w7PBStAC^0P|}}MDX>Y?A?KFX z%;g!ARO2*kPk-FqtE=|utEB(C2+h^c7yQ+&ygKjZ?0;q!)<UyZ{4i6<->{c!-q*@g z<&*f?wpIV#D#JhJXw}>!^Xf}N%$ifbra+HWRzCwiQu&U>v|f$iPkUZ|>71!nw@c|~ zW_*o85X0f~PaeHoP_%6Mq$^>&bwB3|rKcD68mmmw)#+FTzRY6T@_QGm7FXNbXWG0; z{gj<!v-|RbJ={xm>>m^h+^}Q0a!u6wX6_>s7uem?2ezph?DT*42R!9<E9*kD*t4VS zv{v5Et`Ay$^qu4;)AB=$ZfO{ceo81!T&Vw@AtzOLyQgW@FU^W8$1eK1&CIU#f0KXn zZCtxJA4@L(@oy{&+c<<)Z?5h8UF=`A`84Qo<-aa$6Lh9}Ki8Dzc^!G@ePr2*^Sw`+ zmpf$KuQ*~D+iW&(*+s>q1&>ZBhdl9}V%4=;!QN!vKfjna$NtWd^<KX^X=z_ySDHcg zY_;buA%!*hz1Jnze4X7MwWw;|^D4I0^QN3&k(u*3thwOElbA!Hr=4yu>)HFe>QckY zlbLlruD_~dzl&QQO<DF*Fle8KDtB`r3ya$v23v;K^aXBr+?U8HnJ#{>oWa4QutAp- zbTimA{k2@#)vdf+-V2%ANZ;k0IxR^jv;LAt`_iqO+nf@m7W-81*pd_O-})xMqqfl| z!`(}Fqk5Ul`y%PoRd027TfUwbZESKoxZy^C?^-#Vm5It)L2dc2&Eb9$jW@d2HZ9Mv zU6k&)|8{hWT72-skex5LihHQ~8fp4F_jaV-nz2jncI%%F6>NVplyZOjf8QCTTMo)1 zJEKHqb$!1k=5mQkI$`s<lYNhWf4RYPH22%nit^ryThm=7C$H!D(zCECSD<@O>Ry%O zZp%z9y2M2nrQ8+ZYC5n&$YDWRh^_EN@4IggLNEWy-&gzd`TvikU%oma-KqTZkKZv* zUngp&I{lui-tt>eATlVWGkPA+e&b2c=e7sOFfDYOSy#CBt;_QlOi6DqJU!~>7E<A| z?El7ojV-gbzcB6F7VR;`wWmr=BVXGzEY^D|=RNHlZC!`u&fZK(np=(L<v2*pnSK5J zv}Zq#KI*&7d-nLf3z8-a&lznO{rT_%Ph0!zEdnL|1?#mftajX(ly2~P-ka^GtETPY za#{ZWnM$ndq{!BFvUM8+tmePiI&sd)HS5+K>1z6QRnO6XS6K?j)=83Q-#)p%nC0o$ zg){w5-cr=yVCrO97q_?S&5e!P;p=L?Ty&R~o~|GF=ODX$OvU@X-|trxfB5w}`}w)A z=jYj$|N638fB&CT+3V+8|2n()`T6<FRa1Y>3eL3*HGHfT7XR*A-Mhx%`<2hN{r4%= z^R2J>{#*XiJ+XPxkxa=;Zkly!_O{FdEpk3H)A;{~_<dSieqPr<_bLl%m9t7otB?W% zlT>4Ox!(&L+-LV)fu8>22wukzZTm2=u#nr_VOXWR9I@H^;pw&cHGe^ioX;=0v2o+_ z`lrS7_y3;PTYkS`x!Yuhd3930`yI5Q4IM~x2SToBVz^|wYC+U8AD6687mjdm{v3d1 zC3E9K;Q;A~pWIBQ&gG5S%^g>E2su|`F^z#yU_}>$l4<C~))?&41*#1mz1oK0-IYjf zFNk9p8drgKcZ)`z0FQfPnh?%}uzG{)1;`OFVZ6znuP2}0yew?Z>U7QJcH(a@7=q`j zB(ps|dx};$scp4ODB65CadkSAK=y()3-VV6oqluHC?%@&=#sWWRcco2Cd|8IJI(pn z%7q0FO`d-KCU9Q*-irX;r!P)Ua$zZ9n0M@(g8HqX>Y}E8uD%@)e|8w2xj((AYQdwd zGxK`%jx#=gKTTAc;UlO`w&5&jqtaO!wo=eWC2q#3Yw%kjvcr=-e@_N&>ArOBP6`Ll z+Le#j-d>&3q;u;b+tpiH_TfIup8K9FoERPbx{=lGsqCM;Nheq7pZ6<~77W;y#A|fc zA%~T#^;nI0ZtmIZM>U(xy(eZ~78RB<dXZTY6KLCi!fv)@N{p1zRNejUJozOVx~V=o zeD}WWStfBiT6^tBnG)?6C!hB3c=&V0i=4@anP-M(EYp*4lFVOwB2sJP#$PpGyi~fy z@@+3WTxU{VF=;iY255u&Wln{l&6jO?emgL*<OzZIU2S~1614B?-?12#B`2zPCq2#4 zcv&<_?0C}T_3~Sm_2uvE0S)B1+rCb#y5Luv<~eKHg5{>4e*N+C7Ll7!WPFKd@h8^Q zQxYBb=WI0zys%=qWXIkoj?WER_bKHWRc&5yW<eEXvGYUG%yUbY-z;qXy5_BDV$;Xk zhX)q#O_)8&^VH|LHSgpe^&eX0?#_B|OXIY#Wli&9j&?}j;|a^zrumA`a^Yu})0%?w z7IL3+*}dK1?Q@q?do(RSmZxl5(({Dnr;lUCaeHyDZyA;ao2!h@E}CB>$zifJZ&UD= z!|PrDtzQ$dU{cvkqnDZ6H0}j4O*r&Ik%7gCqod;oZ{3Ff_eJ(!+F05A@6Im9CWQsU zpwUxC&`A9%^$XFdr&Difo;Wkn>aEL5wKAJSk2)t!Jp6A-SfJkG%+Hw_$1Y1JefN5s zzwEM9dDX?9Gb@&h-c9vde&OnwfP1lO_gkeMBTjzecKteKcZZ6C<R;K%sdv=1ebUx1 z0bLkzY1flv*SB%?XMcX2CSvRBux5(sOUuWrJ$L%ECtq~e-ssorbZYu#=T-8uqLr8L zA5C}5>1|p4;^d-*MecJ1B7gFP`NbE#IvthR){|Zwls8MAZPJb}M?Njfcod)Y?N;tg zotNkPjg9taowR;q&+X3if<sk>&+2=*bkgmepw-NLQ`YR?pzs7T<P*oacJ`aa_wLS_ zV}0^n;g9{B4oseZZYOB9_W9IJhZm$bxo%u06LRV`+ZE<U2}UWg*|W{<{{49DTXyHc z{{IvH=3KHYo5aN+&G7=X8=xMP^BciC$bX-M4ECJeGR3T&H^ehm^Y`Q^UBUW9{z)zI z+REJ$sc91v7)7>a_;FM|nRN124CrLy*S+Z)^OvT_fKD>54lGNz{2t6;XlvZC<dtPa zY{ZMxYx!>1Td)W4ToO*{s-1Qt`)8%L8BgU*6We45ouyK#pJbHlF4Vp0$bQwIdOB+3 zhEGSUPi$~=|9Nl9;oi;X8~1h1)A<|nsv~)BrG|0D$9+%k&2E<ZIy0)e$vthkxXu%w zbFJ%Lo3|b|S~ojt?j{A>`b%k!Qx_~<#?#sVer=?Qyl&9^>9!M6vp(KAdoau2?_RQw z@rvuB!Ks_(1$Gx@G-@dXST)N3|0ut|<mIIsGro8F*F2gQZTIn{|GiJj_McAL|9}2J zeEz>L%k%esHMalvxcc9v|G)JAO`ZSa^!4@e|GBIGIlWx#{J;!UrmlW`tb+Ad_@4)$ z0A)08{LAaFrVl>tW|6>KVU5^^{C2evsn(54{(3rp{<T{ErK6Dj)uS4h@6~TP{_s@$ zArscru4_Nb&eYqwHGTS4C6!V&k0bhHK<oaA1ydz1PTtRB!FMDs>u*9qcU8Ue`DJSN z!gl#M-3~iHBT{>olJOIZ?8cA_I-8d<&D!~`LXXR(I`*NQ(UOY`Z$`{B*F5QR*6s8b z-7?!%FHRl{j43$6d)9sF8MAe99H-b9?kTwAYtwRC?Zy)sJKf;6Pq{%Q63bWauRgVZ zo$R?j&YN4#9o-7PYeG^*==BSsWpPnQmKFRvuwv`HOo_Fjr`~g4VPTwqApZaB`oB}d z<9^N+uYVr@zhD3F?E2sN|8l?IFZq9Wf9$`#OaDKA|Nq|m|NplCf52b=zd!C@v;Dux z_EJ3e{&dd&(Rpfv>$Z)r&YzNMdC<i2=XMU{Jms?Mv-9KsU9$h@{IU39U*X^Oq^17$ z#aFxpxEdKac&0m~Y`GM$lyNoR$MhPP*Q_4#d%gaASD*i?C5J0+qWAV6H`M>_nqG8a zYkVYI<E@RSC)un$@Ga$s=+3&P>J2B(O?qj*bgJ=Bx9Z3GvE@yN+-&d8IsNIbvuV#M z@hK~-6)w$L`((pBPluePu5;h8Px`WY*ZZ?cMx}G~CN*u^HQAKY@c2%T{?k`FpKZLe zwA4(7_wE7rr?;HjEUdIXE?ZV__o*;{*7K!Gc3KvX+FmH<rQX~3q)j8vN+kYbdg)Wa zmyZktzWTlNsA&`JoAPCO{n?k3lT2QUo86pqfBvGi%V(YB%9b^}v+s{W^!YXG-Yf|U z+`i!7J2lW97TfPty}nz1e{aFVL;PEs!zO*1zHi>08#i{;{QUIu^Ycv4nfsoFMEixF z+0k)z`fmHL#ryy4zF)cg<CCsmKi_?~U$Xb@yRvg0(e`e)M0>uzS@o(q?|${OGpql< zh@U4Iw*O1gi?+jvEA7igg(bL|Za0C?MYiqVj&d&YtJDneis{RuCP!~T8&}&|c{Mnp zvsF(87OYuw__xN*r81d1v4y9sXTHxqaVm(h$YFsG=)k?||9`*R|2*km_bPb)qUH0a zWK?-fEPM22eO=qXB`3}mL$B)6Shx-83f0Z=dG(K9$JahYI#g$`^!raO)-sFT8T{>g z=lL%X<N)<&8K7j33FH6Q)0h4JBK9E2<Z1jpmwe&ZTiZV@TNPx|CID*Stmt7-GM&1x zH37r{=Uouv#!Qwg(uH29>jT&S@T|)Hdya*3HK@&azy-9qh#RB?t`^P!Zwl+_QeVIh zwH(<Y4GbLcgTO#771UuQ&?MWez>h3n;D(_xT(T~(gX~|R#q=m!=h(5d>6@brrfsp) z+}CjU!l{N%j=7N0r6&F9+Y>XFEj{D#<VHyPgrj;7KhKEzcYR944rR5VtGv>y{QOHl zWy}oN+t4rc<;f}0FTp#ib||j4%Towh)j!8pfIX;TPmZn9<_v$m{p~Zpiljfj+$wxo zYft8zEla;WF;V#TZ2Ft>-EEccPwd;la%e_#?5W!;6E#93odYMI<z?MGx$LjOyfe9q zT1}wURtBKsW_V6zFta!$hzl(+O@WUs*_a`XElC~X7QWk7cQ0-!OZ~>9>rAq|>r9V- z68!HnZRR(ll_|xY6K~%-^?j<6nysa(boq?0bLI$h<*wCU#AG8LnZ3Jx%9*R(zfLSr zmrP-JWTf)=>PzeRX|wiC=5V;|Dx)9W*e_FJu*Gk8#A!zBHS=P8`8{9poZdX~<srs& z)q5sow=Pu|i7sxQsBP99xpBE;#*A;ltNJdBYoEQoHbq=J1mrJYUS6yAr+e1K+V`k; zOLpD@b$)Xy<^Ddn0Xhlcrrx}!d7y=9J)o^-0oijjW9MgnyZ-0wONphO9l5J^$!BT2 zto){)`7tZ1_H*t%FYo1PQ#@IZ%>92RqB-Ktu_X1ad+&JV*TmaIOnJGPW#-JUm$*`( zlWLpi9OAw5ymk_ElZCRGHRF$8XC{5w+WhF*D^I&k!Z}wa|H&?yGuPvqZO|(H^PB#~ z%rC#g5cWVhy11g<Ji=x7jhaHoiv^A+)ZVUsq3Bs9wT!!ZL1@Kgjm-*A7M|SV9=_+v zq8-y-+%#SGMeu)&&C#M&mnSMs%F{Tp%ceNs|K0z}S9Wbwtn5u>U7nV{JjMB1rrxn5 zXH~k@ZtZP-DIm0K-%<apQ|WQPx~e&aKnYWUAGAsg+IJ~Xz7U<dknvXK$(|l7SJM~E zRwq_#d%5xbo?Pd;@1xgU+iatoy`HPTOr5n|L%uX9`}VIM_3)!5?*9_{es5))nbNZV z%DF!InKFr&isu#8J(;%b?(6kWYgTkE6>!~nsV}kW;#&I`OM_QQ|IND^<l=9fqV2gR zz^U}vl9#O6nh%?<{ygEPxY@PHd4_3;kkpDr>YtZ+y;Eef-MqY;XGLhm<rAB`=Ebz0 zX)>PSD=(HRCg#F)@>k6Ng7&!!{N6nOmAlq_*Z0qp|2%SbS7C2g`v;y)v()eu=b7hd zZdtzR=+h1Hnkyu;I#l~kWjC!<oVWg{u#e}`e@^<Y{>@MKY&(&$B<<FovM$$>-mk*5 zmN=%QeMw<bt$qh77o8OvJkAOzEan6aTl*&z&F@L<+3shyOT=J7>FUbJHD0gIyz&3F z_1dqZ)d$|`OXW|MN?m4^wPDwW3)8jJwlP0A*r#xLP8qAaOmJvMbmAmUCHF@s6hRYf zt2*9x&1Zjd%W%5*@7}*vs@t}w|5iFaMJV3It+ZU;^I)Q_aKjC$`4My9winraKe9bj zZU6Mg%G{eL=}eOCe{ZFGq@^q5;$+DcU-+KgbMC21^A~?-?Ch8?^>xi6^>D?_4|twk z`aa7@!G7O%wN<=f)mlC-GgbEHT>~8pD74OXm(<thBDJ(i&-SQAitx#`B_F<n7ZveY zN}0t*z1Ga)PMstF!^<i2?yheA05O(ryo@#sTVrEdJ$&{2dwZX*YV%THVA|aQKIX?f zV`=1V?eL3pH4CdZT$~$_sd;SDH}zhh&^66><G&o{aGUu}Zy{u&&G{Yoo>^Q@KciWz zJGXo?JF!HB3397Md!&CnS8na?f1kbAO{!#Yv3Y%zZ(7LtJu{7clGnstaCh3+G4G{= zk>Zjt{(0L^O<63y;+(r#mPFL`cwevcA9to3hhCh#`h}v~r(-V<wJp&IZZ+>UTK(dr z=m{OG=9`nvr!2X*Ixg(!qf4%GFE1bI-!AoM;l&3p&ws3~%4vIK_Pc4N;Tmz*iDF6o zbE00K%<3*tG~0T1)tp&@OF}%<L)aP@3OQ^@Td||qeA&Bb$RWef=8kavm!<W8+P{FC zJkKvJ^#-+h-1ts4FmUk9L~rvX!rDANTyeJE=DL;7w$;4VTB?+>e^X0=DC0!c%4s{^ zo-A;x{xI$O0>{JAX<OU=EOS~ebZ4=)Y8Oj-)AWp8Kh5-l#aG=<);HHPKJk|$H~Ecg z5&Nss($lu*+v1$QCy0Mou<PP`zbv;eJv%g~|1_KzrR8hK-)g;M!+IY1o0E*bSnaL+ zxTNiIV3EJytAy6-4o834dQ00SEcsGjeFE-X3w55f@~7VWA1AhX?C(0Unjv53P9e|o zCpE%)%kMSLxnYp+KmUajXX&AH9X_EpbE?y|W*_rBZt1z5dquaJiO4RgU$!?ZE;(pQ zTY5D(_%VgAkE?yXcKf~B?{~Sy_5L_mXQ+DCzkGeNx3~B7bp81lcSQUSw*P(_d`ZN- zm_YmcfB&^_*?u-tbXBN-LeH!dvQKZeihjSd@B5jV;r}n@&;M$%eR>>E?fs)jtsq6o z89YqNe&ChUZD=c}VRx6l<eHWA47zk$`5fab(D5O#HV98IXtUV8`u~6Z>po4M|Le+f zyN{g@I>oBQ=7AbKmt6Mv^($G!FM?Qjs|ax!*ZI1gf3IBM|LYKFBF*kE_!vP@izk2Y z0mCZLJeu764If+B7krw4W!MO`^~(e_t^Y=z<JuFJ_AJbXhXMl=Xo-;Hd(`#@tbx-Q z2s$HtMFmq8T3ZIjRWkkgn_=HdYkTV}EQ~N+NDKq;3McU8#h_|}0n}NCGmuv}ZTQSl zvh2ur-E(^BH`BnYip;K^I<Vfx%<QTp%h}tjMS>%@Jd!`9R$8@ca%$?I&nz?Ng**74 z_YPP&!Drp>rd8EfDlRd(irS=ZPMms(H}b1{^Do7jopqZxM2oCE<1Qw(B=bDG-?s+e zEY(|*O@$G&&MaA&n^>{+iT69jWrE>XzC8(y*>u18-`xA}xAEyl=}GV{^mYy0DEYN= z_2D+*+$oi{H>^U=h(2;;U?~$}bjd24Vx0)OY50Y}0@nn1yG9Cm&dkj>UvJ~F?c2hl z9)D7<o_a<?{dvogwWU{QWz30=%zhsELONwrLx-x><audRyKbG^9v8HF?b@GJ0{I<t zx4df({b2GUa{m3OtY3Q@Wv*@syPz+zd9R&+>;ZAlzqhY`7X5kRmO=1(;g5?u^OWtT zym=y3b>frY{_+%GCQe_8>bc_bx5}i7xP6(o{ka&prM)1OS9x8>+fJj?->V%glRs@Q ziwR|ApL@87?Yh3`((P`xIyHhzA~oMToL(QZ<>JR{U9(Pq_IC9JMJUpMVq>h|gOKfI z9!ET08K3<(>jwL#9+7F)O8LoMTURe!a@sSh_E%#w&y!<qEBbZ>&)s@^-TC!fT$q`K zOq7#E9Up(4shYXI`Ejq2ZIm7RLsj<7MJpngs@&E++WptZMf<U*ccahwPnDCjd8>YD z>7L)TFMR&?H+pqjb&Ows7FlXNX{PzI=9Nd>kDmDa(KC?ezUH+{DF<1+w(eE(v)ZRG z=5;ntvAbqlOGKyFiS(B<7q>6@{zRtjbLVLrt5qL%uTQM4Tets(iP@Z-$;RdG&#X@+ zbWA&GD#|&bWohu&&a(VOt0})Tr>#_7^fBzm{ovq7rxY)(6k4wk5|-_zzwL#37F(js zYLWR*uK8Z=otazb_~eSkR|^p~Mga*eMwhI%F6rJz297sDp#Ahamc~vx<F@khzTUhZ z>1}5gr99bSzcTd8_4}OM8NO<}H@_%wo~p{_V!Ax_{g))h=WeN|wwk`3BYT*ukxx@g zvNA0r{<GNA!#TJ74p&?fb>3+s9Fnv*vFc!`X{6ohGck!AYP(b9cg_-5I{*Fk&T47X z+yx=?KR(f$QB=xz%0)+9_v{nnwr#%5s*~3*Y7a@=?U<%oH-EW|*3ShQyRXMzo@c+c zu&-7UdZ_WTqaE*7rx#VOyxX@b`()v!&(bNEO5Q9_`Y01Pi>dNb$oa)v0=q76I<xVs zWxnY_zru&cDNVXM97nG||J82oQ@VHISGVtVb(acMw&bljC;ZgKNMq%_cb<hyL}U-2 zf4#9>4}3im=maHZP`MLe+jz3JXu27A<Gj$kY1^LpF4S77omzisy=s&Gql^+?PJXwU zW-8Ob4H!qU(8Sk2n0DWp;j_~IzQ_#?QO(H<C+&XQe6_W8U(CDBye#)8N%&i3M{AvT znR>%a^LVj;SsGv1-?#nEUzh$qu`oB##HViU`%VrHZ=-_!7xPr)Z6cj+`)%K{*yYnr zXKQYkmrpjcH&yc+p3=$K9hfFs_dKw&@{I4V%FxKVlfQpHiTRNfG=Jq*^@=$f<vG{5 zPs^;SD%QFXVZS2D$akWf<;@%K?Gs<8IS0479shpK#r2y19}AVG55MgC<$Z0@rpIe% zuj0S<D<t5`Ud{fPor;c`pp0|@)B$`4?)Oav?G<~nHY7^x+P71!8R=ek?q`>%hh(*Z zhKDA9D>)w186S2#W3f;8<DcKmBBpQtQ<)anXwZAdC_DdhV1DJ26yEQD#20(9<}Sb6 zSyh!<@0_RIqn@vKK4fas^R;uPoH3ca%Vk6VX5rY@{x?y4UanP}x^g$|{{QaoO`ny^ zoVNUnyW;9S+2`|xZPTMze`-~Eh;Ebqy5`9HefAm}*S^gc+4?>3;v~lz8j3#eZyoqy zXB!V{&lI_&9Z^1@<1^#W0$tx9uVjNBPG1wbGG~=v-~!f(8=Q}ST61dUMxhQTP-GVr zbFP@Z4syof-LKDXPk-(I2kin<W%g7D29`D-^b1Hg#Hs%KJ=wq1$&GdW-KD=L+kB1M zcWUY-=`Hb<@3zacPEd7q+VS*c!M|<uljK6e-#_q~@N)jOTYiP-f`a2cv)5kOddANw zrXpgQn^yk`m8m^8u~iH89IhJAE14K&cYcOfl$P&@xI}T;!?N!0PZcpf*4kzyzcWJg zb?L6eg>M(Fy;6~Wfw#0(CCaqK;PHiRS2h}b3ba-J8NIVd|K>N9d7?jTH`s-{Zz@@K z&GLuClnKr+E<b;AVXN~BsdtL69tjGqQh#AO{fGNm)i}eYmRF|*1n*}#)&GP2;kU`Z zd;_d6?b^7@E=g_Yv_RwH_}w|Ntwp=%f=*GsU-f!z`Tg4Ohg!MqFYrZqUW)%!Rg|3k z_|wzV&oO4q{#`l$_tVPvdp=K94~Ly^SiZa3?Z!XDOQ74Dw}rok4(jy(`4+kGTlfCY zt9SiF9FTl3&do7e;07;v<@D@ItShHqa?LvQ3Uc-6#k&l`W}xmotTl5(0Cdaf@Av!v zpY*T$6g>ae6?Hp7n~P5TnwR|M{0ntD!o5yo(`VS3$cL^@3)c1R?T*;EPqe7++v&H< z_x-ynzVENC>bIAWJzsY#rZ3;~P{Nj};#cOE8YbAXB-EBdnKr1-UHv@K9NW;!ffs@f zOVS2ha~W6TxhX&P9liNfr@KdWt-s!RwJndlIZQT$YkEGNapuUi%{|ZNci$=j9rd&H zwPiq6us5^z)h$k5r#IL$FTAPOXF5~i^5<>sZ#nxmE6>ib4t*X_{9#MB<(21)7H<~# zDIu`-^v!e3h0=?(mQLKPDqtKOe77>=gxmJ+c@z1<y81oRD#CcIPrl+xcx^qUSoJ`x z^0S)z`VX^vS37{G`x+O5LMda#MFEb61Mid^svGi>YrFfPSAb^L7eTLj>Uog5I%wsA zYu9S#)@H2_YFf=>BpkK<%hnZV6|dgXY6@zdw<I8V%a*N|q_&6nYnxfBYvr$HUoyS_ zN5kfroV@cY#j|hZmCa!eoBUR(%jjb65v$G339A<^yO!ymZkgcgE78!iJ?z@^S;aMc z3zXXf+s*~dU(Wa9d&;Y_bBXT3?5odzuDhFaZP)ToEm_;T=Y8Z0yW^hpUw&R@=kuV; z<w9q3eOLSK4CV^VUtx0L)rpl`o&Hq6RW8}x^0nBkDlDqcC_o0(#LVMkbjix&E8oJ! zq_E*J=bTs9_&O&z)GoUjFFc#YzS8C19bxV$XV2-AxBL-ll=v%A!WYb;A~e~+%w_A5 z-lu15=Las^SepHuZ7b-A<M5`p*NjfeG{60J)mQcP=YNmt90bxu-rb55{33Z@oOep< z_Vj5ppDfO)+;e0@j=A-@AkS^7MxUR2>^t>6@Y%I!?Vm{%hhCT{B)z^B)yaRECn0j~ zLOXv(ziq6g7L!so)!EuRFO*`Bth@Mjk^1Z=VXKHd`K5h3o<>gF7dXHC+n%k$O<(4& zdEpUoY5q&!>&j)CGhRtdTJz{?s@lbn<;tIxX0nCkfEEFL6IT6uVE(i^i&9}G%d=^J z$~ve0oO1NsEm;i?(1`3((5apwa|GBx95+x)W$vQ8bIzPtarxZ5cRQuTK7d;)k|Ap< zyFWeDF6MBX>}fvjZIJJ#lxN@UbZ0FWKfASeTe?ZgwafSIQjRZ~bab<c)YGlMdeqBR zrmz<oi0N)#DmY1UmC2!P-nPLq>8W)m%J%iH%L|qc*YJwVQ}50YWWAK{zhUia(Vj0( z$IeYqcUfV&IEBw@^&0l;{ARmc%hxKeNq1t`ezCYEa-y&KWo}gqyVxT=XGCH?@h!Kx z>S=rXeB2%I35Es>m%SD|?eKDI=uNlsrmyVDrTtC)Q}nN7Z%>U=k>2H$rc)c}Z~uks z%+#HQ=gzc$mMiU!xR(8_w(E}WV(>9oPt+SceC^7Tf35=Ens-1?6|}17@$qPN>DXQO zJ#Kz_rn^#W<>XEFFRx2M7Bz3=-e%Bme>q{w%vbYrX71c`dfV}w^a&eW^*#Lsdp|W= zJX6%z4Q{r)(x10mS*|my<a5`TLq^UV?l;OV86Pe*o2!`fJL<mhMU%4NeHjN1Ecz)? zdDHX9v9pWnwsdfM^v<ihBsb%<;??y@Z+M!oIyoxDKLeew+&bl0h24=w(UbhHED^kB zys%mHQ{baDCl-lLwf}AsVXf1A^rfTXHUB>zrayOFpBm2c_-n^J-Y@EpuPL5lm#y%; zI`h5yb0NLds^crpU#a*n<@Mo|%?S-gU+y&Cu)UU|G3({$d=C3;^DR8VVzCy-9UG?T zXt}=?Uz(Gjfc8zCb`@D6nf(9hsva-UpiI+&e{JsGF=gNxtwU+IP6z&C?VsnfVs{02 zSjHst?aFz_Z{A<gY2-HZ+c|?%Th{04cm_)Gsfa9F>EQ2G8n9=2@%y}=*W#*A`uegy z_~v!worRLo_U^ZC$9G1_Z;WNVe8czWtKw{@wVO4%<z*JRh<?vmCZZt1pp<=MvO(YO zgJ;e;sImO^wf?0x)2F8^S+DZk!dY(@rF*fTe!KWeq+!LmbLTAkma@(L{qt&z>`O<* zSC?Mh^;xr}M(<jM?V{<sRv2VH|G-pz$arDZqFs+N<IR@+u{$3p7;F*nu0uU)kDb4{ z?yg5~e%RTXITy~ZwTz1k3y=>1ovYjE!<6;v2xKA9I`jMcV*YQPe)GJrKB>#0tzVX0 z4~+M|d^W5;Qg_plWYxKTZTCZ@_8bqIt|e-023ip9Q|c3w7W6voAFsMJ3zy1^Ox4Na zURz`LM%{>;w_lR$ZJE<fA;xm^mELDJ_!OrXOtj>=Jz3`YBK6xbZaLT8J0B{Wzl>a( zyq3K>cJ@L6v3w>W@1>eb*Vaqlobdcb*~NoTy`LQT`|!<*teOLT%jRw53v24<+1#5} z!^fUl8uPcf`b?tt*OvJwzIGftx}=JA(<}CmuP%ldo((Du3|PPK+WnPlzUwNQUAleB zR&v)hql-Z+1$K4aeex)1%H5fu^+3O_Md$DR{cg9oUd)fivI}05{$090Sz20px_-P} z{XZLB&CA#4WSw5wB`Ln~SJC(7b?>J8*FK*c|LZL5Y{T1gIcwb`Ox?m#+=>Gn1aB1o zzGs{sSNr6}{7uHu_qz9gUcmQ!+P|4UAM4xwyKz{7jY+{E3*3fTU4p9(lXM+ABC|Nn z;tOmew>8t0-&>c({m2bxUFrZ@S^&DR^Y8cj|DUMa|6J)``$~8|$GnV%>P(sHe*ahf zdX#%d<Ywi&pVQ?kUo?vB%sRbt+OlJ=Ya;G*S=#@8`YkyA|EtdXzvl`4j^6)k=lT1! z?~m=a;paR40(7z=YfV%8e69n|p`hkJbbzJtqM}2-T-=MTx%;>ZN=n+)K+WY1!Ju^> z!M5DH;bS8p#(`-KRa5(GCimvrf)4osUF|R*bn}C8s|%8eNTV$$+!-c9_O^huqc))& z7+6k$3cjB{idgTLVqp0s=&(dh-uw#a%rhiIVGjSqsSp%w7wiEZ=W$$Mthz71u*|Z% zW8;#qC!gNT(0<fYpYawnP-7XWHdV%8=gqWRr$T&vOE;ZRt$P=(b@h={SMn<3g6Xps z1ToGFVpra^$7bo7j<@r~-z%PDaWcC6tEu_Pq}r7GML+NPC<V3biA=jVPiEGvD+_ev z{cpbf(Xjb@PyD8?o5yUdx<2|`*xVy|Mm9>))Jy7C>Ix=Fa46meh2rgMhBxet0xLQg zav65PF1J(w^{n7~)N_tMk;$Ib_w|8r_0%&yK1Puz!ABjgYETVp_DK{_56^zix7y=J zboA%am0rOdcTas>tClvk>ywXDc#HaddG{Ri?*iWJob2u?*Fd*F*{rO8{$Y}%f7Z%| z{x@$|9-F=FV&IgTLmk>~E1Tqkj%ut++Gg0>w`lJ=uG?>a8=ZBuRC=QM$y?&qw_D)> zn@SW!UvNxRC=li(JgLOHe#c>*{FpA&Z3~y2KKZLgpyz|+)#u?+kG?Z{&Y!rEE7^Gs z&-vUFw{mBv8bxbtcx3+kh05YH2NwJ~Gb!bTQuzf-pNaEiKF)aJc1BC}<Cd^%9qTy! zi<TZN3+CT=ZDMJE$-J+XT`Ocyo{{F>Iz#ocqwV)ap%s^Hthy%pOBKEo%Qn?|p%~ip zNGomjnR#=Vb40gAuXdb15j=V_Nn2z2=RTh`Qzp()h*Zm7#((R2TUkKtiO2Q+zMb0b z9(|LG)=G12n%UB_l5hQ~r@ybOtn}VeT6QZTjcJ0yUhmzfW@<)mc6S7&Y6&LLkP3sO zZvz9zn<`L4<=2wh*=GtsM-;wf*1D_ApaPysx;X2!`z~H*?GT^ImiM9xJxw`JJ}G1^ z=GKcdf9ZMp-Ah+-#Z@_Hqo<s=dO2ID-hHy<WUoA9SJlP+L0ioiX`i{AQ?1t{X~R78 z@s+u;{ikYD)_bhH_hq)PT;aE_)ZRx)wmZAzluY!>MWj>0Osu*-t~vK@jhwQc#zr1( z#GRBkXEMpxEqZjVYH@YFy7!j<l?GeVQ@kEcDxYC%cd9tQN^WUy(41+iAJ?9*T+Q6x z#y0o&ZBxa`CRyKSiM&&9PRUc-t)^?rtgF0sGe1w7RHMp`ycK!etWQCiH^GBNV5Ou` zh6yv1!iLqL8y+%sAFrL<t9RFY$<no!dlq`V+VjTWO+#P*oAmFqPkN1V=ZH+(dF}fV zyY{=c&(3X^zdZSFP-=9yjp2fWuMRowSDaUpG+XFjn3Q1eCx5H7h5{W)t(~7u7HOZj zoUyw%Jor?~X_+<OWNxoG;r=aZ$~)hiC8s(zhwGJ!h`%{`^PZ09`8SHmmjhOA_HEs} z?uz6YHlMJWCoTVS9d=tG-@nLYPTcixv9bRy$gPo`w$l1Cx8r5siJvTP-Z;P6edg(0 z=|w62`R^9&&<UFES6^}Mj@4=@v&$T+zN+1?A{TtL1a;{`Kqc3!8%{<X4F}e#ZP@>C zZKwHlKG0=RMY6YNE(+iEf#Xn%*LQ<yTkK~#&CHkoW4h(JWa=&}O{HK~hZ}qE+7yaj zt8-Cv&9qoL=g}+n=G6cH+<K)wUJ7@8-&7pan11VcsMd+g9qSbQC%;`M*Ej9_6wh~` zzsGFL4SlG5d)w-d%Q9>)O@14?N$#j?b<r~O;@2_nG|WD&NhlF{nt25@{q>CLV}>rb zt(yHcmz9REYOVC%znbJc`&0an)b9N@KBr4MwX^PCusA#K)y$JmZ<YzXe%t+8&32i3 zveUP<+_g#$YeI_-_gzxhFqiW|uIcS#)vx4~Atx%A?*$#2vwp8mo!%Y8b^l{_mArhJ z-goPSqoe>sqoQy}PngsylZ2~^|9bi}_A+R$3Ge*>?@93734sS!*StJ7ci)kvIi>Ym zwS}&OTNLlzey#kl=-`D{HVYO1Z@FT0*wAq1uGERoa%yF!t=!8rQ*UWmlxy^*&Qs@2 zHd-lb%T5k4vO4FrNbAY>76Gfrp3yrCZ%?lFh?_a_?kwXA8SMH8-M1}kxwldFRl?E= zV;h#P$^NoOU$LI~c5L>^>Fd)a7vD&zet2`)lbMc9`t@v^zpwZ-SEe=b)2i+kfA#(w zEemC>Wn&Kg$Um!kkHPo)Hr`gYq~c5U9p1$kmI$0#pRzDk)Ovb?nrI(W=d`CnlULuK z?CvSBL7lu+F7N&Ke|~x&KEt!soJF<WC!y!oZL`3of&nGx-&UWWQ~7n`;(D!;%8$|f zue^}f5VM%Haw#w{DKd$_pL5~A-My^yb`|rjoRz2lyR+u5wB*GqMyXpRtiA_-L3U4R z>}ZA$h6pcMzv0&INyeR*_K8kmX`Jo);MUgc_xu0<QwObWseKhZ|A)&57j9ciKkLF@ z;hJi30)7+cKA%_ra$>ujM_>f<fjH^=@BI69eP7ih(BhW**Wvc%-|v3U+jBbjb3u<B zqs?EFD!WEEP(248LIg23Jm&oHzBFmQW%B*54rUgI1yxK_mL3!`ov=F4_SGR>g`i*w zMHbjh4Jem2FmUV;TA-gJblmIoR;^PYZyY$M*5Gj#|7BD+{q8lb16c^S8OE@l&7fpz zeS7}~@TL+_xrNl|s9}2JYg!R{cExvgmn^rt&KJN3$)hMrU<Y3g{=$2~iysr^e+qtF zZ}H*}-v&OlDIN?HX9*=bfsY(*flm!J8cy3{cXGdt@}*M;*2~)EuMe7ZDsbnbLMyJC zVt1eL$*z$+%JYxE)xZ9YVZ+k?$G_AUXs=Vh?)$p5wPuM{`&%8A;7uzIz5jOih=tRl z7db~&13q2(`Ns3Wg%DO-m)F~a=Qd_-KG9)(d)|c!x&eWD3)>@nSD6_{q=?);bJcC* zu6d~^&!`-g(lvNpwWv6%<c!cWtNRkS)s&C1OTCzD)+nHzlNhQNFT&7xiX*@!Ei3EQ z{wK$6zu)=1RKIrR-8^~gGN1oU?@vj!KX~iHFmcw~C%P{{!xOz67m7CCj!2Ks+z8s3 zF5Qc~G2QI6d&=Xg*Wa{M3(`*K#J{^%GuNy0*v_e2w;ffwC9{s>^b{v$v7I~Y)~VnA z6uIm0rEedvoeC;0>Z`W6ef(JL4$jy_dBgcWCDKxR582I{Gdcd;rgclirkyPBO#OX# zU%y0D`qafQ-mq59Yn)_fW2D9y?45SvXthUhPsFcva|>^-Dda0OxR+ub+Hd|u!FXr; z6PbcT2Oq|{FRrLv_p<-d3!SXxxuQmEqtc8ggdSYt^z~<g%W_UFo9nEHUUtvBqh4mG zbJS<|y%&BdvFRSMg{6lWnHGB`6c-n#rnVk3nLK&2v9U3~?UxJp|NpL^|8H;M<6|pU z@$AJmb~85sG<NfOJLe<46??dKnJn5S>8WSF&5oLO?ORvwjURTRhYihKT#xXcUh`F7 z)Y>O-W<vGx+~D5p>C=|%)mvwJ@=D9Dj-b?Dqs)(T*Y5ak2~6`i^2F}=-bTsTN&RcC zKArvU!uPvkUjl3IO*aGG^F5U{RqA(8;QnZ3qwRW!`z-fs-SF_dyaKWtYc2QefIxo3 z0<Rg)I-O}Z^EB0BbdrxeeK_+;`89*HjV99D!{(I#(5!kk?InxP>D`}#mo%xUzZGko zHqFTTbPq3Iq}^w(2iHG5x2nAR;=~p&&C6GIX&w!p^0@cc{#m^7;0wV6UB#lZ*UXb* z*=hOjs`r(z()@28&kz39<n=dYN{{;74T}vpL=+t+N?FBKJZzo+qjUa(inFohcfT6j ze>N6bws5lRkwx#$f$n+Zo8Jdos|0StXM-A32Fw0V*wY@l`~&CR0<#=$7x4K$>m%lW zTz2%*ly`1&CPxKKX1<YIQrB*Kam}pl8sd8{y4vbaST4S{@CEDS)MrA+wP&WDy353B zG-rFVr&0A=PRB~n-QFwnxvUo751#$7a2CtwPrp4(PJY_5Xwm1>YYx5tCTFl^Ufa32 zf*C=z^MqbK5!-n8^?Fu+X-kik-RGAae0tA$#Y5J3)z@oxF5PxfE@+Knb3fN-lW)81 zdLMO`oxgM<Vxv|{)ay&xzh_oPPsx3BTs<x2+LcM=5q1y7yu4rPAL&Vb>Hl(J&fysM z>%HLRI+;`dJrT&BYrbw0f9<6wK3-l=6ea$LFTUBlbzl8$$GUs*vMf6--@FoiB6hLT z>dO|{c>-5nU$vO@)pC7x*AfZ;C}(#^ffJq%aXdf%2gbDZ-T%>he}VeKZ*On68~FMy zv)(JEWNLl)@CJSshXfIh6)oN1b<=v6rku&W=Pw;>{Ko&+u}@#b?PLFRyo}pd%-3NK zUJA`xzPNgS)k)Uwh7E6>=KXM=bVkX~dy*zo(3?Vo@6)YSPF$H^cj|Li3s1>AyQtTv zYb$ndUtnJxe#HHfcuD&1jq%^T1!so-xV!JXM6|zCy8g8G%}P^_oC|y-r~KPj`{2^= z0+w7myn5FaW^D*M6QGe(eXvca%0qD;r&0EoFO%;kJFqQYJ>lg8hN^dG=9fpeYm`q` z?^z=|ZR3uYteRbmWPR<QPPA5=u|{)Fn&=+CS+8HzWIXHNt|uivt7Tr@s`IDiP6$n2 zV{F8}`kvkYjkeK2lZzjf9sO}HD&T0vr7)#ajShTFB2zk9vNPoVwZ{Ko{WV?5^q0G3 z%i>dgpgp{OCE7hqi~>7;f^HeF<eqz9ScL21KJPoRSLSas2W_M`+xpDDXYpF!UZc03 zSNYktYkfC=(lvdN$(=<uiBj7N%uj9!KN)dJA-MjyiY?!>d7TrMs{g)YntG^X-GY7> zgRbMOv$VD^ThPyvvX7VF%!4&G?W4{OR-;wY(dLVauPQrvhA!v3@om1$=IN1+{0slc zO!eHnXO?yUkrd|}-xl#M{XU__CO9SNN7J$mPa~h3EY?c7^<7~7^|13lOZfCRL_Anf zynp@yp(nF0geE9Hd}w`YSs{1a@^huju0=j>x4yLEX{2rS%F>S1zZ+t7k{_wBH}-1{ zxiVAc{3r3FE-L9UU7vplYO)t;a4{WLcbF(um0q9{@%iI%d1W8tn)saAVt;4bB9=SX zNBrMv|I8kBd`YOqNr8dsu&RJ0%69up;jr!YvzvBr`INV0{-U$fj(zf-@M!Anjg$P; z59?=4(f@cQU-0+)uRa+k?AN}VxvawNy2%=q-LGzXba3~d;(5M~eZ6YwOM}9hQB5^= zrp|F(mcB6`u6l>+e&xA;gule7jLm!IrWyBlw|IH-?mTscSI0R`v~K(MlNX#Lo*GzH z7k1U`kY@2u-BH#ra$NL{;;i>q&LqrnmRXzLze&ZX;nmecc}kD%w2n+RmzyZ*z4WB9 zWr*VCHj%}KmMi15WK{OH+&9+QD^vH|!2YEFQ9bv};4OC7U2puHtNCf#;}@#uvi&Y~ zU*59r(66|HPOlBo<$G#6cfa%EYix13dvd~$=MmDI=9^FNQO}*Rn1|zuGPLE`eXV!; z;p6S{bsp+3?w=_9_op%{XxVzptJ8u-jrEegK7Hr^_m2Mm-<RLl{4|dXv~PZ2?@@ib z#%<v>0gj$P>Dy|nOqjaf?W}!2(>Ptu^4D^w>EippYVQi#{snf&s2rp3LMDy|hYrxf z=r8;GQ5QzLxowGSX!~~Tm>btM=(^~G@J(k2+8olePFc_Vxvl)$I<;vQ&WiJ#S0{HH zS5CIbHF1&@(3lTfD`Z>!Ex@T)Z|=V(b1R;xi2gYL|EInE_dnkKHeVdNw9v<)uJ8YL zRe1mRbgwu0ruDzx?S6l^VtV~+*1n6%4a?`domaoW0h$(px4p{r82?=jOnw`;e(v90 zD*ykwe7Tx)bl-}c=Z{)aZ#OtRxu`C<ptC)5Tcc_~VFainDwes088mZ%XazpFSib0Y zKi`v@(~=5J2h5ZmW*SX9Zf4B$D$I?+-+t%9qnG{j_5?_=xV0T9m{%tyS-g+~+5`o) zNDq{$HY}gNZT0h0m!&64nNRDuvg4yurhtSblXJ(Fo}RS<EJ*H6I4*RcI;(6=w&~#y zUoPi;Fv<asL4igKz!e*maYK$pVC7A@x~6FeSHc>qpfT)51|`$o2TyOn9R5lO7rt@p z>a~31$AT+wrtvjnJJ5PUGeeW9<$}9Yv^uWb5qXm#g5*G?Mla~<W5?~t&O)&9uBLKW z%JPCy!-hFj^I=ena!@dr8wYI266!ywL5)J7O?pf&9Z){nP+emXNE)B+p4{Aril*#+ zkZIzX?tTAOuK4_Dd!6h08u)pkiR_&kTucfEBH%vJZA&bDBA&MkEx39?kqPS!EfM^& z_W!@xNwK>&Zd5!a3BCxI>(86%x8wic3jg2!)IPbsXJdVz2{eJ0^R96RT_%uM=eXop zueew9ffE86aw{bzgBPGAm33+p^n*VC`80o{2CtIo?S=0Zf*wCpb;-I@vCxF0ho`Y= z;w;<hZ#_MlD2axFWlnLHz{;C$bJ-?JnWx`$$@=21b!W+96OIOlR2C)Ah3ow7LzjuO zG{amE@`-~Y(=>m3#h~DhPX*eKdk-Cc+ItP2X%LJDX@U#HuRe<1YR<i{ba%&<h{aCe zu`9F~xv`C<NrSh^bn#mkm#jH|562&90iP*@FbI}#$RC+)eCy8OZ`Zr;yueDyT6srj z)U*Og8;y6J7$(lLnYS$b>VsU<$^#4eka8m2`wpPBOrOdHShB$<{h|2<%oS#I$-1DA z>3on#LI`NNzt+44Ijp%)!C>3gR&jgll4jfO?`^A}ol$oGA9CgA-2A^@OFn%JyX`2` z)x^NT(|VwJ?#>?pb3v!M75)3s{iS+|MBC?pIn8b$J7B@ZCFl`#WYyDmpw*FI*Vlgi z`P4r6tj*;=FL%G+S^oI$Rwv%YMX8{B3Z11puN-MM-TvkL4o{a%0fxp`oH^ItU6uBf zT0ZUQs_Wvqph$;@K!a}M8CM-8(`_2=%Va=hR=9&8*6@t=XP7u^(ryQpIgy)6I+z&+ z3e+0{U!LPJMRp`;%cc~g&EF?&cK^Nve}4b($^C!T@jV_tzsLVAHQ%Yh%cKy%+Zg}n z>-t;#=RFd6o@CW9twavHRG||wNB({P|EmAvyjez_;riSYrOc1jEqP`d+UuV6&oAaw zd`<RUUlXrp297DdpyjE4$;Lr)i+AL-JIEo$u)|LlBk_&%f3N?~*ng$Qf9qeL&&3ss z3x3Yi@K;hY&C}_fIII5KdA_}Wp4E47AG+Oo_rW3)jwxOTeq0Ftwc<>TWb{fdCkZ6; z7&xXlC=?66-XAD2ah6a9zdOsl;9$P=$KUw#k87~&Eoo@5Zj?!!RiP|#=-q=r<P@K< zf@MRBtk%0k(>4#^txGa*Bs>Y}mbm1o;G>Xv;pUSaH>WV>qXf7_BvZtNzBSo%M4Xo# z;|z~_I7P9s!Z&k@A_vPP&V&UE%TeNwf#VGWQ-y!;Y~jiGf<MduTW+b!;c1fR6DY-^ zrS_mCS<$X;?yB${t|O><-r+#e+ph0da(4SQ&zTjYC;i#xueuKN?_DuIft)N_iVv*h z9zPYVUVFq)fD5S#4CrY{ouQVYQYszoBYs71CWDfxDzoUL81we28jK4SHtgoSV4#z& zq7<=t_imvzps7S?W}K+p!20UM&LttO0xLB|m#eKg5}OpN<)p{)CWgs1$>fLD_PMw9 z6C@D<{)UCga^LfkZ1o#^yK@|t96Nh+ioRQW?X?*l*F|oc?0VULNnt}b=Zc46HAfU9 zHh2FP^g*^wZGy6o^0y85u3ft^?arA~#>%-b)`juqi<A}rkKX}l<otb>y($WnKo>f< ze=+CU4aq7KRVGXdh_VqfnIz_{i4-f16V)bcaX1?@_gB8iKVz{4lF5#<mCv5PTl{_R z^n0<=na$-Ji%zV(dGuWSOYrLAAiatoRs|(8$VMaz9r#r|V~hJj-6vOeR5Dtcf}0B4 z>>2m0&HepbKnxMB2hOQXnCYv0#?9~SwqpCDtZj2oFE9X~B_0v?zipMU6zEbGNXRk@ z-1y4!NjG@=kBzS%_F6H(2b~@)6FyNcy60t<GfW|<G;5UgT+oug)^SbRmTER7)5UM) zGuW9F45V1RcF6R#DPCYgs^Al%g%9{1$$e|*{ZtTs63~N{`b_Mod%+~67`Jk{&PdBR zlb`2Yv3P@Y{hq)ZpsEdC#=sbNLYRI@x3(&sH>v+Mulj@TUGuBjD|?lfr<K$)pG7N1 zAlx!(&>E=O#}gs9y21>C2GxNVLJmvtYTmQ_*xAP)zhC(?|NptU+WP<Ry?p;?{~eZv zCWw><HH(2G#Qy>J<ofJa@2~v7TVD}v+WP%Ui2vRI?v5)v9(KED*?pf}pLqZOGvjKz zzsi11pX#b>?^P|C6CJw!lHWG=)|C@CPFa<l+~(i=e8+?tTUc&p`u@6Q@cFYs!Rp6h zR<cIZr|MkTrMW-Bi8b5ulB(X*;L~n)Q~Xl?FaPVcfAjy3hu>@b`Tw*2RgcQbu4ixd zt(<GFcX`?Ur&m>i)^A8veHl1!hVJi&GYo~Cta6v~e2FOMna?q6<NNK;Cb7EbCY645 ztUAA0c9G}Pq)W~B#A`%kXZ%v&<$h3a**i5Oarvn=y2rVGxgL5yZIALv=f8S&6JyO6 zvPWM!zjD!I2A!p%b6Jez-Ic#=lxABP^oid)>Sfw=B^A5glns6QF;2-2G0XmBPx(_{ zd1-&cPCg#@_u-*?Z0>nZYRZi1wWz=HQ+Usdwuzp*b<TQ8njig`?lbpVRFt^RIwO@S zP7a@E%y4fB`MbsLf6kxh{r4+gf2#kp`ShzN6XXBBtbTt~y4AbTP1Q+YW#Qpp!S;WD zGVlMy|9|?%^Z#%Df8Q1D8=U!_yS1A4YF^F3DOn8r*NJB6HTQ|E_my9G+Ihp-Yulgv z+GkU_a($HFjt4h#SucGn(A>uA&A9vBMBfNq(@oRoXXy%Q&(b~eee3#wrX<DRH?lNN zGq5ZC+NYM6<1*n+{7TscKU{yymnv@i@RYs((ub?-BbZ+Qf2F%L$IAE1+;Edf(M@*S zUj%O|pRRCn(Z+|O8{cIuj68k8^6I{sujM44PUO_Tw_;mjNT}~@kF^gkG;kgBUg2^| z;nbY=$?Ue9{r^lC>gjkBductVXVt2EVmC8aeOMt?koDu^#8rz{ICg~gzW(5398n>a z%NcLu<hG=@C8^o<Y&cVQ&*=}kihtF&x7~UCW%q}c|M?d*H$C&u^j`RJPK6>*{e%Bg zSFfEQ`zlH4OxQuGgKoF=v*&f`nmJt;yR6{-ZguALrEk2aO_+Tx=}M*<_tF=ST)*u7 z@HI2%jqsQK4?b|a=tmr@jtKQTHf^toZ>x~Y5pn6FvMI@aWoCw_4z<5%sR>ynY5K)G zuxgog$4sNGb`vA7t#df`=vvm>*{4OUzxFIGI&02)OS*AYDo@*kNiXhqinN{7UcJrn z(dzhIK>?jvt*ifUuYY>E{%d>s|Er((|CK+#*NmxPK~p2cz2L{!bie)WJzr||f6qVj z{NmMNQJLGW>-a{jQrNg~?JnJYi$r^mOso1=YW_zv{#B;=t2@v4By60KHh2Hla+L>O zI=lBgy*kHTQ7HCV{iM5d^7EbiA1`lKt=+cgjZj}pYT>=YKmR|z6aFdxKjO>O2ln-w zr)=2LSE_c?tEuZ;t-r>U8Vhcpur)e?KlcQCu3fWk%2&(quA}Tf{?F_?(W0JITXitQ zwEl`~Yvxm>uWP4VIg)zr@XF84Il8IkulO@&pP6*zb)!Ufj>xITrSH#vt+d&(`RwV} z-*<k!GWo$Of$x((ZdTfBn;oF`Ewx@($9nPt<tm={;*auw?$&to>aW+az)2VGC?qk3 zx=##ixAJ?%;d5!NPeIwHC#)CNZD^hUBvj+h+rKv&<?nX0NF4d<Epo|ix~Bh0r{=fu zD%&(J`m=10Z)#k5fAz)5`B#HhZc$z5yFu?6!@Da%cPDM!A-Xxwty^i%tjIMXd&_5T zFiIC~_50=XD<W?4U%h4bOM^}`-ps83H*dew?pyo6Os`9tUYTe;v)iM0_V&EJrRS%v zo}E80a@o1JVV|E(?~8qwx6G@ES!iFtEPcg?(j|gRk20xER}GEr`Qf!?%SwysnYVWY zX@0q~ZQ}h1;f+!^1Gnr`djFv<(ej(>@kdv!-LyhNpRc>ua7B#kT%w^?k?~sI>nASR zY9Bke_3L8IgA2-EiABcR>HSlyR=ihpt7UoM$Bh}k{Y)!g8>^KUS53Jh<#@~E0$caw z;~|fu(&XQB)Y-VjFe(-9dl0-l!aRRX*T<aMu}Q5~i7Bg&Xxh&_b>B5TULn=RJy};N zLF^UBuV+mk73ZrO=xJ!#erL7k@b7v(Wk<xx)6>0p4Am7=SH?bjKJCuwoJ+1@7E|?4 zED@c&*<*$1<KU$qmmYZ?8>P22XWvfs^vh)jXU#cO9J)Fw@AT3W-`0p6Nvipq8ltwN zUsG>W)rMpDO>%SpUZ4M8d-ea%LT|I`-xzPt^Jm!Yl<ksr=gyz-yxq0`&;Nh>|K0q* zzn*=MuY4i?zx)5A_5Wr>|D7GN>rJ&wt1suef1Wc<S9K<=&fT$MW9L1IHJ*E!I{3X~ z*R*xq(9z&lE)h*w7*gRoZLia5y~MRCyH<$YRgM#xu2;!8IXk{G`qKVYE16VvCV2@Y z_MTYvz%S-!imS1SLFQeLbrDVbQYNit%@%sbE@#bY&!)Hi<;S>L7i{kw<GufFxz+uo zjOfyNhgw5S)Ra8WU3?WNVJDIr<oif~OIL4ef$OUo#$W$W5#zdN)5o6u#rV_1(+?WG z1+NwR`0z}7u=CDj8^w_FzmL0qW%Jql96qmFlCpI!U%Z?1-&+eOFBdHpo^1PV$y&ao zQt6|~mb1EDPq=a4Iq{*F>%o&(Eatm|{H$(fxi=YT$!R5-BpDRR|C04r+q?4T?k#&} z<-|T#eR4zQmC_-r2;(zTj|6Z&`FMrn`o$*Gk288=I9GeGeg9Xt>P6<a_y3-J-TtrT z+vfV$`~T>?&2_(V<nB5tP_e>1uj<)${kT0J-hIDs`Sq>+&oBM=KAl+nHvZSC`^CbA zpS`Wmbn>}sZ#Z32Sne0Dnc7-VY?+avE3#1|sB8VCZ7H3H+84}t_9npn;d9<t^$@$c zUYdVbh<p%8az3zjyQ}x^tJl6qib?;UbLjG#bq*<B#WUBwT)1I|%+JJ6Y?@|Q&WJP3 zjw`r)>PL5aki+6sw&|UlMYQwYv54)P{wS$%#~SamK^s)LHP?CFQ2mvBbm8gHOAR}B z%B`KTuKC9V<t>fst}BkH#xJ=h-u?T6<N1Z+XJ071uy_7`VuMuAu50t1Tz)@VUw{3t z{QSS-#Z!Ep6KCx&J3iO`Tk>|h-{<E`O>4?H4!WTzZ_m8icdfm>-qX#^_Wl1BEnm0e zqx$`y{dr#lrH~qQu%2WdTjTtD$C*sF-~AVE|M#W*@6Yr9eKF_z|Lg1prrb1Phb3yW z1-;<SA{54f0*(i^riUN)ghAS8=%fN@ZuDkP0CGDLW-VyvgEPa#Sq}@`w2`}f2=)YD zhKaLs+%&*PS0jXB<5`D6`|=7b79(HthSaz{0lK;y^N3AQvzJkTq46Q;;#-S37rC%B z{TdiJQV985A;?(fTm~za@N{5c*#ufXdX_^KJv<<OPp|+DC-S9lVM6Ll!F;8_z;qLI zL~~k;5T=(wA_g){9anhTjiYc3jpZ<PTuCu@;za6eAccwqA82XOVac^9@d$57JD4%L zWNngM$bvmoc-k41Mxz@Ni%8^XbRz`@Jk7Ta=G^_`Kl915!^_P)y@ePU7#KWV{an^L HB{Ts58jO8M literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/CasePropertiesHelp.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/CasePropertiesHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..04c1cdb0bb50fbbcda13d4242aef118230c3193f GIT binary patch literal 48676 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 literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/NewCaseWizardHelp.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/NewCaseWizardHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..f86132d9a8c03b86d7432ecde31a9da1381dd259 GIT binary patch literal 58574 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�+%@xvrV{+u)E{!`^zZwB8Cj@$FfLHR;K#M13- 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 R7y|<XgQu&X%Q~loCIDC$U+(|_ literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html new file mode 100644 index 0000000000..e941cd4eaa --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html @@ -0,0 +1,51 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>About Image</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Images</h2> + <p> + In Autopsy, an "Image" refers to the "Disk Image". Before an image can be analyzed, it must be added to a <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html">case</a>. + </p> + <p>Autopsy creates a database for each image that it imports. This database is a SQLite database and it contains all of the file system metadata from the image. When adding an image, it will take a little bit of time to populate the database. The database is stored in the case directory, but the image will stay in its original location.</p> + + <h2>Supported Formats</h2> + <p> + Currently, Autopsy only supports these formats of image: + <ul type="circle"> + <li>Raw Single (For example: *.img, *.dd, etc)</li> + <li>Raw Split (For example: *.001, *.002, *.aa, *.ab, etc)</li> + <li>EnCase (For example: *.e01, *e02, etc)</li> + </ul> + + <h2>Adding an Image</h2> + <p> + To see how to add image to the current opened case, click <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/addImage.html">here</a>. + </p> + + <h2>Removing an Image</h2> + <p> + You can remove an image in the <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html">Case Properties</a> window. + </p> + + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage-icon.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a36d4714ac9db8a3888ab2610bef2ab0cfbb6b7c GIT binary patch literal 1632 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 literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage.html new file mode 100644 index 0000000000..327a299e52 --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/addImage.html @@ -0,0 +1,45 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Adding An Image</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Adding An Image</h2> + <p> + There are several ways to add an image to the currently opened case: + <ul type="circle"> + <li>Go to "File" and select "Add Image..." </li> + <li>Select the <img src="addImage-icon.png" alt="Add Image Icon" /> icon on the toolbar</li> + </ul> + + <p> + After that, a "Add Image" wizard dialog will show up. Then follow these following steps:</p> + <ul> + <li>Select "Image Type", then enter the "Image Path" to the image that you want to analyze (you can also use the "Browse" button to browse the location of your image). Also specify the timezone that you want. When everything is completed, press "Next" button.<br><br> + <img src="AddImageWizard1_Help.png" alt="Add Image Wizard Panel 1 Help" /> </li> + <li>Autopsy needs to analyze the image to populate its database with file system metadata. If you have configured hash databases, you will be given the option of looking up files in the hash database during the ingest. Press the "Create Database" button to create the database. When the database creation process is done, you can press the "Next" button.<br><br> + <img src="AddImageWizard2_Help.png" alt="Add Image Wizard Panel 2 Help" /> </li> + <li>After the database is created, the image can be analyzed. You will be given the option to add another image or start the analysis. <br><br> + <img src="AddImageWizard3_Help.png" alt="Add Image Wizard Panel 3 Help" /> </li> + </ul> + <p>Note that Autopsy will store the path to the image in its configuration file. If the image moves, then Autopsy will give an error because it can't find the image file. + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html new file mode 100644 index 0000000000..4ce021926d --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html @@ -0,0 +1,48 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Case Properties Window</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Case Properties Window</h2> + <p> + Case Properties Window is the window where you can check some information about the currently opened case (case name, case creation date, case directory, and images in this case. + <br><br> + In this window, you can also do the following things: + <ul> + <li>Change/update the case name</li> + <li>Delete the current case</li> + <li>Remove image(s) from the current case</li> + </ul> + + </p> + <h2>How to Open Case Properties Window</h2> + <p> + To open the "Case Properties" window, go to "File" and then select "Case Properties..." <br><br> + </p> + + <h2>Example</h2> + <p> + Here's an example of the "Case Properties" window: <br> + <img src="CasePropertiesHelp.png" alt="Case Properties Help" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html new file mode 100644 index 0000000000..83243973f6 --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html @@ -0,0 +1,50 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<html> + <head> + <title>About Cases</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Cases</h2> + <p> + In Autopsy, a "case" is a container concept for a set of <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html">images</a>. The set of images could be from multiple drives in a single computer or from multiple computers. When you make a case, it will create a directory to hold all of the information. The directory will contain a configuration file, some databases, and some other information. + </p> + + <h2>Creating a Case</h2> + <p> + Refer to the <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/createNewCase.html">Creating a Case</a> page for more details. + </p> + + <h2>Opening a Case</h2> + <p> + There are three ways to open a case: + <ul> + <li>Go to "File" and then select "Open Case..."</li> + <li>Select the <img src="open-icon.png" alt="Open Case Icon" /> icon on the toolbar</li> + <li>Press "Ctrl + O" on the keyboard</li> + </ul> + <p> + After that, a File Chooser dialog will show up. Then select a ".aut" file that you previously created. It will be in the case folder. + </p> + + <h2>What's Next?</h2> + <p>After you create a case, you can <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/addImage.html">add an image</a> to the case. </p> + <p>If you want to view case details or edit some case information, use the <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/caseProperties.html">Case Properties</a> window. + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-hs.xml b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-hs.xml new file mode 100644 index 0000000000..916e9d147e --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-hs.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 2.0//EN" "http://java.sun.com/products/javahelp/helpset_2_0.dtd"> +<helpset version="2.0"> + <title>Case Help</title> + <maps> + <homeID>org.sleuthkit.autopsy.casemodule.about</homeID> + <mapref location="casemodule-map.xml"/> + </maps> + <view mergetype="javax.help.AppendMerge"> + <name>TOC</name> + <label>Table of Contents</label> + <type>javax.help.TOCView</type> + <data>casemodule-toc.xml</data> + </view> + <view mergetype="javax.help.AppendMerge"> + <name>Index</name> + <label>Index</label> + <type>javax.help.IndexView</type> + <data>casemodule-idx.xml</data> + </view> + <view> + <name>Search</name> + <label>Search</label> + <type>javax.help.SearchView</type> + <data engine="com.sun.java.help.search.DefaultSearchEngine">JavaHelpSearch</data> + </view> +</helpset> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-idx.xml b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-idx.xml new file mode 100644 index 0000000000..7646264f46 --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-idx.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 2.0//EN" "http://java.sun.com/products/javahelp/index_2_0.dtd"> +<index version="2.0"> + <indexitem text="Overview" target="org.sleuthkit.autopsy.casemodule.overview"/> + <indexitem text="About Cases" target="org.sleuthkit.autopsy.casemodule.about"/> + <indexitem text="Creating a Case" target="org.sleuthkit.autopsy.casemodule.how-to-create-case"/> + <indexitem text="About Images" target="org.sleuthkit.autopsy.casemodule.image-about"/> + <indexitem text="Adding an Image" target="org.sleuthkit.autopsy.casemodule.add-image"/> + <indexitem text="Case Properties Window" target="org.sleuthkit.autopsy.casemodule.caseproperties"/> + <indexitem text="Hash Database Management" target="org.sleuthkit.autopsy.casemodule.hashdbmgmt"/> +</index> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-map.xml b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-map.xml new file mode 100644 index 0000000000..4a55d337ed --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-map.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE map PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Map Version 2.0//EN" "http://java.sun.com/products/javahelp/map_2_0.dtd"> +<map version="2.0"> + <mapID target="org.sleuthkit.autopsy.casemodule.overview" url="overview.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.about" url="casemodule-about.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.how-to-create-case" url="createNewCase.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.image-about" url="aboutImage.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.add-image" url="addImage.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.caseproperties" url="caseProperties.html"/> + <mapID target="org.sleuthkit.autopsy.casemodule.hashdbmgmt" url="hashDbMgmt.html"/> +</map> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-toc.xml b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-toc.xml new file mode 100644 index 0000000000..7c5be4fe0f --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/casemodule-toc.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 2.0//EN" "http://java.sun.com/products/javahelp/toc_2_0.dtd"> +<toc version="2.0"> + <tocitem text="Overview" target="org.sleuthkit.autopsy.casemodule.overview"/> + <tocitem text="Case Management"> + <tocitem text="Case"> + <tocitem text="About Cases" target="org.sleuthkit.autopsy.casemodule.about"/> + <tocitem text="Creating a Case" target="org.sleuthkit.autopsy.casemodule.how-to-create-case"/> + </tocitem> + <tocitem text="Image"> + <tocitem text="About Images" target="org.sleuthkit.autopsy.casemodule.image-about"/> + <tocitem text="Adding an Image" target="org.sleuthkit.autopsy.casemodule.add-image"/> + </tocitem> + <tocitem text="Case Properties Window" target="org.sleuthkit.autopsy.casemodule.caseproperties"/> + <tocitem text="Hash Database Management Window" target="org.sleuthkit.autopsy.casemodule.hashdbmgmt"/> + </tocitem> +</toc> diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/createNewCase.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/createNewCase.html new file mode 100644 index 0000000000..5c0eac8426 --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/createNewCase.html @@ -0,0 +1,43 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Creating A Case</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Creating a Case</h2> + <p> + There are several ways to create a new case: + <ul type="circle"> + <li>Go to "File" and select "New Case..." </li> + <li>Select the <img src="new-icon.png" alt="New Case Icon" /> icon on the toolbar</li> + <li>Press "Ctrl + N" on the keyboard</li> + </ul> + </p> + + <p>The "New Case" wizard dialog will open and you will need to enter the case name and base directory. Each case will have its own directory and the path of the directory is created by combining the "base directory" with the "case name". If the directory already exists, you will need to either delete the existing directory or choose a different combination of names. + </p> + <h2>Example:</h2> + <p> + Here's an example of the "New Case" wizard dialog: <br> + <img src="NewCaseWizardHelp.png" alt="New Case Wizard Help" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/hashDbMgmt.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/hashDbMgmt.html new file mode 100644 index 0000000000..aa613a88aa --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/hashDbMgmt.html @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Hash Database Management</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Hash Database Management Window</h2> + <p> + The Hash Database Management window is where you can set and update your hash database information. Hash databases are used to identify files that are 'known'. + <ul> + <li>Known good files are those that can be safely ignored. This set of files frequently includes standard OS and application files. </li> + <li>Known bad files are those that should raise awareness. This set will vary depending on the type of investigation, but common examples include contraband images and malware.</li> + </ul> + </p> + + <p>Autopsy allows for a single known bad hash database to be set and the <a href="http://www.nsrl.nist.gov">NIST NSRL</a>. Before they can be used, an index of them must exist. + The index can be directly copied in or it can be created within Autopsy. When you select the database from within this window, it will tell you if the index needs to be created. Autopsy + uses the hash database management system from The Sleuth Kit. You can manually create an index using the 'hfind' command line tool.</p> + + <p>Note that the NSRL contains hashes of 'known files' that may be good or bad depending on your perspective and investigation type. For example, the existence of a piece of financial software + may be interesting to your investigation and that software could be in the NSRL. Therefore, Autopsy treats files that are found in the NSRL as simplyi 'known' and does not specify good or bad. </p> + + <p>To use the NSRL, you must concatenate all of the NSRLFile.txt files together. You can use 'cat' on a Unix system or from within Cygwin to do this.</p> + + <p>The 'known bad' hash database can be in the hashkeeper, md5sum, or NSRL format.</p> + + <p>Autopsy uses hash databases when the image is added to the case. Each file is hashed and looked up in the configured databases. If the file is found in the NSRL, then it will be marked as + 'known' in the case database. If it is found in the known bad hash database, it will be marked as 'known bad' in the case database. </p> + + <p>You can see the lookup results in a couple of places. In the <a href="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html">File Search</a> data explorer, there is an option to choose the 'known status'. From here, you can do a search to see all 'known bad' files. + From here, you can also choose to ignore all 'known' files that were found in the NSRL. You can also see the status of the file in a column when the file is listed. </p> + + <p>Currently, you cannot reprocess a disk image with a new hash database after it has been added to a case.</p> + + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/new-icon.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/new-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..14206340e177dc0d06327438ca11fcff38ef706f GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14rT@hhR^1ufeZ``Ea{HEjtmSN`?>!lvNA9* zGX(gAxH2#>u(7dma&mHWbBl<Gh>D6zOG_IY8=D%Nnwy(jT3T9JSlQXxF_bYdR538r zFsR3=dpLXe`}>Fbh6V-(hJ}Ttq@-kIWaQ=L<>%)Y6%{cwFfg<;Fmy98^e`~=GjKL> za(8mecFQs>WMEjtz_5maVFLrhUIxW(MbmCmvpzG16ATPz7#LnKFuY}8_|Fj16H>6f zprxf{(xgdq=gwWbeC?VwYu2t^yJgFk?OV6+*}Z4ao;@AMJLa63v-s5FWv7>IyR+@^ z;lrm+oqF~0)z`0I|9$=U`}gmke}4Y||DRzLjD`TA5J+gOuV-LjWGD&p3;sW{0YmV2 zc2x!j2F?PH$YKTtzQZ8Qcszea3aBJ0ag8Vm&QB{TPb^Ah2uRG#E79|F4N)jF)-%<! zFt=`qWnf^~;pyTSq7j_@qo3R0!SuxEEzEk#GlDkArMYu!Y?ziJ(C*ck8gbVq;lPm& zcOE6yX^Dl6rzN~AJ3JDm7A7Spwd~-E<@eaULQ+psu{i4#$K#^Lg$<3oW!pVpzw}C; zSXf>*_3HKT14_x-i`T4Mzkb!B{)fTUvb6>QhbL^j+;(C`(g}-<j8iXPf6mfO<TkIY zt#zHjJ>e0%#DYDmv}z0_UFI+?zIMs$f{5HAkCzNH6n0n&ENnLY`@k=hq3%p@x~bz5 QV^C`GboFyt=akR{00HmLxc~qF literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/open-icon.png b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/open-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d16e51b68287b10e230b6f6a25efe30e7b7b1dee GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8A9=bshE&X%JJmNQBvqts z{`=qW_7<l{Sxqflpdg~bYZ4;DvA|5JajxNvRWFZ47+#bxUsuxF>6p5-FtMrLaMy$x z8CMc+yl^uyRALlunxrvx$}Rcd)^B+(&)m8H_|YvVr(BTy;Jfe1J^kl<-dlcuvM0Ro z_XP*-gjYvW8U637Rk~^JJCSlDJ6dP9Hq&KepI>(8L)q7|L?!%mdGNQqKazdk%dHny zmF0%JB~|^})3nv$N71sW%Cc`y?KRZzQ|!_@uNl7b-#n43ZFP^Mg9;MDuVgUpjW&A~ zUSFrZR=Rgxp2(6{p^cZgxUx=`>fTs*km;A)t(@0a5<GI+JD8>@Y*bJ@(x@;`LG{87 zi`%mt?%#T$5)jc~Sl4hn&-t@k!Ga?0BMvMr4kr)qH*@*$+vXP^`>Qh!s=6H7Of%GY zzt=IXEH#}xXW8Qv{W%LNA_bWm8^oOr+kOgsQhZW#;@5;S)1`l!7>+gAvj*-fJHPtd zg>Nq+7d?>oIO4&y!7<07c}k;^hv2$6-ipVikpdSCMc5szx3V(al0WWo!dHDR!zG48 z+s=rV<=Jl4P<X)Kxak%5l_nPfu?03vOA~v1r#cvLt-AM3zxDm`GiRsHJatxBG~IJ` zWZ2dpDwDYxS4AnzTasj4dfG*4{>GU?^3UF<Y<cP!R$e0Hrnva=^cx?Zmw!=hzj;r0 z!D`kkI;VHFaCk60QVcwB|8m>nSAu2t{~Bb!W!bjv<Dw2<?Qp}rnfk}i)t}<tKgTg- zPrxR@4bKj0h0J}OP?WGKA??7a=C>0+w_bl_yC#0~T+8|yCok>aV!CG8{?+2wcT8EV zc`f(;dG}?LKYl#Qr*q)rw3@c3QkLNvN8&g3C0U$#R>I%D`&VHP?}6mG?3M2?xjx%d zn6@oXO`2El9pi&*<r4dOo-dKSermE2Ctvwj<JY|(9^XhWSyo<@^?|u4uG7P$_hdtk z_u)kiY`g#QwWKag$;q*GE<assaqQXbh2b+a;?fe{6^n3PzvQy0kk`Ujbo1%TKpwxH z>l(@wl|PH*v`-0Lb7h&Dr}`#^2gkY8O*D8M*92a#<@s>^fa$zl``NGOHvLTa8Qhgv zqp;}0wT4u+8yA16IIiJ*oS#|1B&2pogOSzI^4XV<FDJ3aoIJOw{=ecqv$n6RzRB}0 zyz}Xeb?dUeT1N5Z@k!y&e3dTxh}yfEtSJavd?j+9{mkWay7%pw_$I99-@LXh|6ac6 zycTl)-PV*zxm(oa9WHuot7&|AD1XkMtd__6=Xl*0zS+ULZ+6oB$pMr7ZRSt8ynoy2 z8)ssTOm6DN|KH%oCs*W>{g1)yPy8oW6K3}*kAjSjPI+y_IEQiGvPY{K{;(hVHpTpl Ts_}LP1_lOCS3j3^P6<r_1XTK~ literal 0 HcmV?d00001 diff --git a/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/overview.html b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/overview.html new file mode 100644 index 0000000000..3b3716d90f --- /dev/null +++ b/Case/javahelp/org/sleuthkit/autopsy/casemodule/docs/overview.html @@ -0,0 +1,45 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Overview</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Overview</h2> + <p> + Autopsy allows you to conduct a digital forensic investigation. It is a graphical interface to The Sleuth Kit and other open source tools. This page outlines the basic concepts of the program. The remainder of the help guide is organized around these concepts. + </p> + + <p>All data is organized around the concept of a <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/casemodule-about.html">case</a>. A case can have one or more disk <a href="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/aboutImage.html">images</a> loaded into it.</p> + + <p>The main window has three major areas: + <ul> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html">Data Explorers</a> (area 4 in figure below): This area is where you go find major analysis functionality. It allows you to start finding the relevant files.</li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html">Result Viewers</a> (area 5 in figure below): This area is where the files and directories that were found from the explorer window can be viewed. There are different formatting options for the files.</li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/datacontent-about.html">Content Viewers</a> (area 6 in figure below): This area is where file content can be viewed after they are selected from the Result Viewer area.</li> + </ul> + </p> + <p>The main take away from this should be that analysis techniques can be found on the left-hand side, the results are always listed in the upper right, and the file contents are displayed in the lower left. + + <p> + <img src="Autopsy_overview.png" alt="Autopsy Overview Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/Case/manifest.mf b/Case/manifest.mf new file mode 100644 index 0000000000..9398c0dfec --- /dev/null +++ b/Case/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.casemodule/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Layer: org/sleuthkit/autopsy/casemodule/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/casemodule/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager, org.netbeans.api.javahelp.Help + diff --git a/Case/nbproject/build-impl.xml b/Case/nbproject/build-impl.xml new file mode 100644 index 0000000000..974323e28a --- /dev/null +++ b/Case/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.casemodule-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/Case/nbproject/genfiles.properties b/Case/nbproject/genfiles.properties new file mode 100644 index 0000000000..df5eed5cb5 --- /dev/null +++ b/Case/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=163956d6 +build.xml.script.CRC32=601bc2ba +build.xml.stylesheet.CRC32=a56c6a5b@1.46.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=163956d6 +nbproject/build-impl.xml.script.CRC32=65e93a36 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.46.2 diff --git a/Case/nbproject/platform.properties b/Case/nbproject/platform.properties new file mode 100644 index 0000000000..66c6f5bea1 --- /dev/null +++ b/Case/nbproject/platform.properties @@ -0,0 +1,17 @@ +cluster.path=\ + ${nbplatform.active.dir}/platform +disabled.modules=\ + org.jdesktop.layout,\ + org.netbeans.api.visual,\ + org.netbeans.core.execution,\ + org.netbeans.core.multiview,\ + org.netbeans.libs.jsr223,\ + org.netbeans.modules.autoupdate.services,\ + org.netbeans.modules.autoupdate.ui,\ + org.netbeans.modules.core.kit,\ + org.netbeans.modules.favorites,\ + org.openide.compat,\ + org.openide.execution,\ + org.openide.options,\ + org.openide.util.enumerations +nbplatform.active=default diff --git a/Case/nbproject/project.properties b/Case/nbproject/project.properties new file mode 100644 index 0000000000..08a83eb5cc --- /dev/null +++ b/Case/nbproject/project.properties @@ -0,0 +1,4 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +javahelp.hs=casemodule-hs.xml +spec.version.base=0.0 diff --git a/Case/nbproject/project.xml b/Case/nbproject/project.xml new file mode 100644 index 0000000000..f27f490015 --- /dev/null +++ b/Case/nbproject/project.xml @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.casemodule</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.jdesktop.beansbinding</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.11.1.121</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.netbeans.modules.settings</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.26.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.dialogs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.15.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.filesystems</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.47.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.text</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.30.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <test-dependencies> + <test-type> + <name>unit</name> + <test-dependency> + <code-name-base>org.netbeans.libs.junit4</code-name-base> + <compile-dependency/> + </test-dependency> + </test-type> + </test-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.casemodule</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/Case/nbproject/suite.properties b/Case/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/Case/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java new file mode 100644 index 0000000000..5ecd791292 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java @@ -0,0 +1,304 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.awt.Dialog; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.Action; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.DialogDisplayer; +import org.openide.WizardDescriptor; +import org.openide.util.ChangeSupport; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess; + +/** + * The action to add an image to the current Case. This action should be disabled + * on creation and it will be enabled on new case creation or case opened. + * + * @author jantonius + */ +// TODO: need annotation because there's a "Lookup.getDefault().lookup(AddImageAction.class)" +// used in AddImageWizardPanel1 (among other places). It really shouldn't be done like that. +@ServiceProvider(service = AddImageAction.class) +public final class AddImageAction extends CallableSystemAction implements Presenter.Toolbar { + + // Keys into the WizardDescriptor properties that pass information between stages of the wizard + // <TYPE>: <DESCRIPTION> + // String: time zone that the image is from + static final String TIMEZONE_PROP = "timeZone"; + // String[]: task to clean up the database file if wizard errors/is cancelled after it is created + static final String IMGPATHS_PROP = "imgPaths"; + // CleanupTask: task to clean up the database file if wizard errors/is cancelled after it is created + static final String IMAGECLEANUPTASK_PROP = "finalFileCleanup"; + // int: the next availble id for a new image + static final String IMAGEID_PROP = "imageId"; + // AddImageProcess: the next availble id for a new image + static final String PROCESS_PROP = "process"; + + + private WizardDescriptor wizardDescriptor; + private WizardDescriptor.Iterator<WizardDescriptor> iterator; + private Dialog dialog; + private JButton toolbarButton = new JButton(); + + /** + * The constructor for AddImageAction class + */ + public AddImageAction() { + putValue(Action.NAME, NbBundle.getMessage(AddImageAction.class, "CTL_AddImage")); // set the action Name + + // set the action for the toolbar button + toolbarButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + AddImageAction.this.actionPerformed(e); + } + }); + + this.setEnabled(false); // disable this action class + } + + /** + * Pop-up the "Add Image" wizard panel. + * + * @param e + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(AddImageAction.class); + + iterator = new AddImageWizardIterator(this); + wizardDescriptor = new WizardDescriptor(iterator); + wizardDescriptor.setTitle("Add Image"); + wizardDescriptor.putProperty(NAME, e); + + + if (dialog != null) { + dialog.setVisible(false); // hide the old one + } + dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); + dialog.setVisible(true); + dialog.toFront(); + + boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; + // @@@ Why don't we commit and revert in the same general area???? + if (!cancelled) { + // commit anything + try { + commitImage(wizardDescriptor); + } catch (Exception ex) { + // Log error/display warning + Logger logger = Logger.getLogger(AddImageAction.class.getName()); + logger.log(Level.SEVERE, "Error adding image to case.", ex); + } + } + + // Do any cleanup that needs to happen (potentially: stopping the + //add-image process, reverting an image) + runCleanupTasks(); + } + + /** + * Commit the finished AddImageProcess, and cancel the CleanupTask that + * would have reverted it. + * @param settings property set to get AddImageProcess and CleanupTask from + * @throws Exception if commit or adding the image to the case failed + */ + private void commitImage(WizardDescriptor settings) throws Exception { + + String[] imgPaths = (String[]) settings.getProperty(AddImageAction.IMGPATHS_PROP); + String timezone = settings.getProperty(AddImageAction.TIMEZONE_PROP).toString(); + + AddImageProcess process = (AddImageProcess) settings.getProperty(PROCESS_PROP); + + try { + long imageId = process.commit(); + Case.getCurrentCase().addImage(imgPaths, imageId, timezone); + } finally { + // Can't bail and revert image add after commit, so disable image cleanup + // task + CleanupTask cleanupImage = (CleanupTask) settings.getProperty(IMAGECLEANUPTASK_PROP); + cleanupImage.disable(); + } + } + + /** + * Closes the current dialog and wizard, and opens a new one. Used in the + * "Add another image" action on the last panel + */ + public void restart() { + // Simulate clicking finish for the current dialog + wizardDescriptor.setValue(WizardDescriptor.FINISH_OPTION); + dialog.setVisible(false); + + + // let the previous call to AddImageAction.actionPerformed() finish up + // after the wizard, this will run when its it's done + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + actionPerformed(null); + } + }); + } + + /** + * This method does nothing. Use the "actionPerformed(ActionEvent e)" instead of this method. + */ + @Override + public void performAction() { + } + + /** + * Gets the name of this action. This may be presented as an item in a menu. + * + * @return actionName + */ + @Override + public String getName() { + return NbBundle.getMessage(AddImageAction.class, "CTL_AddImage"); + } + + /** + * Gets the HelpCtx associated with implementing object + * + * @return HelpCtx or HelpCtx.DEFAULT_HELP + */ + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + /** + * Returns the toolbar component of this action + * + * @return component the toolbar button + */ + @Override + public Component getToolbarPresenter() { + ImageIcon icon = new ImageIcon(getClass().getResource("addImage-icon.png")); + toolbarButton.setIcon(icon); + return toolbarButton; + } + + /** + * Set this action to be enabled/disabled + * + * @param value whether to enable this action or not + */ + @Override + public void setEnabled(boolean value) { + super.setEnabled(value); + toolbarButton.setEnabled(value); + } + + /** + * Set the focus to the button of the given name on this wizard dialog. + * + * Note: the name of the buttons that available are "Next >", "< Back", + * "Cancel", and "Finish". If you change the name of any of those buttons, + * use the latest name instead. + * + * @param buttonText the text of the button + */ + public void requestFocusButton(String buttonText) { + // get all buttons on this wizard panel + Object[] wizardButtons = wizardDescriptor.getOptions(); + for (int i = 0; i < wizardButtons.length; i++) { + JButton tempButton = (JButton) wizardButtons[i]; + if (tempButton.getText().equals(buttonText)) { + tempButton.setDefaultCapable(true); + tempButton.requestFocus(); + } + } + } + + /** + * Run and clear any cleanup tasks for wizard closing that might be + * registered. This should be run even when the wizard exits cleanly, so + * that no cleanup actions remain the next time the wizard is run. + */ + private void runCleanupTasks() { + cleanupSupport.fireChange(); + } + + ChangeSupport cleanupSupport = new ChangeSupport(this); + + /** + * Instances of this class implement the cleanup() method to run cleanup + * code when the wizard exits. + * + * After enable() has been called on an instance it will run once after the + * wizard closes (on both a cancel and a normal finish). + * + * If disable() is called before the wizard exits, the task will not run. + */ + abstract class CleanupTask implements ChangeListener { + + @Override + public void stateChanged(ChangeEvent e) { + // fired by AddImageAction.runCleanupTasks() after the wizard closes + try { + cleanup(); + } catch (Exception ex) { + Logger logger = Logger.getLogger(this.getClass().getName()); + logger.log(Level.WARNING, "Error cleaning up from wizard.", ex); + } finally { + disable(); // cleanup tasks should only run once. + } + } + + /** + * Add task to the enabled list to run when the wizard closes. + */ + public void enable() { + cleanupSupport.addChangeListener(this); + } + + /** + * Performs cleanup action when called + * @throws Exception + */ + abstract void cleanup() throws Exception; + + /** + * Remove task from the enabled list. + */ + public void disable() { + cleanupSupport.removeChangeListener(this); + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.form b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.form new file mode 100644 index 0000000000..fad3b1db95 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.form @@ -0,0 +1,205 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <NonVisualComponents> + <Component class="javax.swing.ButtonGroup" name="buttonGroup1"> + </Component> + </NonVisualComponents> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="imgTypeLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="10" pref="10" max="10" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="rawSplit" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rawSingle" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="encase" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Component id="multipleSelectLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="imgPathLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="imgPathTextField" pref="415" max="32767" attributes="1"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="imgPathBrowserButton" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="imgInfoLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="timeZoneLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> + <Component id="timeZoneComboBox" min="-2" pref="315" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="imgInfoLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> + <Component id="imgTypeLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="rawSingle" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="rawSplit" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="encase" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="imgPathLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="imgPathTextField" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="imgPathBrowserButton" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="multipleSelectLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="timeZoneLabel" min="-2" max="-2" attributes="0"/> + <Component id="timeZoneComboBox" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace pref="26" max="32767" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JRadioButton" name="rawSingle"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.rawSingle.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="requestFocusEnabled" type="boolean" value="false"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rawSingleActionPerformed"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="10"/> + </AuxValues> + </Component> + <Component class="javax.swing.JRadioButton" name="rawSplit"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.rawSplit.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="requestFocusEnabled" type="boolean" value="false"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rawSplitActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="imgTypeLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgTypeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JRadioButton" name="encase"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.encase.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="requestFocusEnabled" type="boolean" value="false"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="encaseActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="imgPathLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgPathLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="multipleSelectLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.multipleSelectLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="imgPathTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgPathTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="10"/> + </AuxValues> + </Component> + <Component class="javax.swing.JButton" name="imgPathBrowserButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgPathBrowserButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="imgPathBrowserButtonActionPerformed"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="this.imgPathBrowserButton.setDefaultCapable(true);
this.imgPathBrowserButton.requestFocus();"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="imgInfoLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.imgInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="33" green="0" red="ff" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JComboBox" name="timeZoneComboBox"> + <Properties> + <Property name="maximumRowCount" type="int" value="30"/> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="0"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="timeZoneLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.timeZoneLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.java new file mode 100644 index 0000000000..8d95761848 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel1.java @@ -0,0 +1,493 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.io.File; +import java.util.Calendar; +import java.util.SimpleTimeZone; +import java.util.TimeZone; +import javax.swing.event.DocumentEvent; +import javax.swing.filechooser.FileFilter; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.event.DocumentListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; + +/** + * The "Add Image" wizard panel 1. This class is used to design the "form" of + * the panel 1 for "Add Image" wizard panel. + * + * @author jantonius + */ +final class AddImageVisualPanel1 extends JPanel implements DocumentListener { + + private JFileChooser fc = new JFileChooser(); + private FileFilter filter; + private final String[] imgExt = {".img", ".dd"}; + private final String imgDesc = "Raw Images (*.img, *.dd)"; + private GeneralFilter imgFilter = new GeneralFilter(imgExt, imgDesc, false); + private final String[] splitExt = {".*\\.[0-9][0-9][0-9]", ".*\\.[a-z][a-z]"}; + private final String splitDesc = "Split Part (*.001, *.002, etc)"; + private GeneralFilter splitFilter = new GeneralFilter(splitExt, splitDesc, true); + private final String[] encasExt = {".*\\.e[0-9][0-9]", ".*\\.e[a-z][a-z]"}; + private final String encaseDesc = "Encase Images (*.e01, *.eAA)"; + private GeneralFilter encaseFilter = new GeneralFilter(encasExt, encaseDesc, true); + private boolean multi = false; + private AddImageWizardPanel1 wizPanel; + + /** + * Creates new form AddImageVisualPanel1 + * @param wizPanel corresponding WizardPanel to handle logic of wizard step + */ + AddImageVisualPanel1(AddImageWizardPanel1 wizPanel) { + initComponents(); + this.wizPanel = wizPanel; + fc.setDragEnabled(multi); + fc.setFileSelectionMode(JFileChooser.FILES_ONLY); + fc.setMultiSelectionEnabled(multi); + fc.addChoosableFileFilter(imgFilter); + filter = imgFilter; + buttonGroup1.add(encase); + buttonGroup1.add(rawSingle); + buttonGroup1.add(rawSplit); + imgPathTextField.getDocument().addDocumentListener(this); + imgPathTextField.setText(""); + jLabel1.setText(""); + rawSingle.setSelected(true); + rawSplit.setSelected(false); + encase.setSelected(false); + createTimeZoneList(); + } + + /** + * Returns the name of the this panel. This name will be shown on the left + * panel of the "Add Image" wizard panel. + * + * @return name the name of this panel + */ + @Override + public String getName() { + return "Enter Image Information"; + } + + /** + * Gets the array of image paths from the Image Path Text Field. + * + * @return imagePaths the array of image paths + */ + public String[] getImagePaths() { + String[] imgPath = Case.convertImgPath(imgPathTextField.getText()); + if (Case.checkMultiplePathExist(imgPath)) { + return imgPath; + } else { + return new String[0]; + } + } + + /** + * Gets the type of the image that's selected. + * + * @return imgType the type of the image that selected + */ + public String getImgType() { + if (rawSingle.isSelected()) { + return "Raw Single"; + } + if (rawSplit.isSelected()) { + return "Raw Split"; + } + if (encase.isSelected()) { + return "EnCase"; + } else { + return "Nothing Selected"; + } + } + + /** + * Gets the time zone that selected on the drop down list. + * + * @return timeZone the time zone that selected + */ + public String getSelectedTimezone() { + String tz = timeZoneComboBox.getSelectedItem().toString(); + return tz.substring(tz.indexOf(")") + 2).trim(); + } + + // add the timeZone list to the timeZoneComboBox + /** + * Creates the drop down list for the time zones and then makes the local + * machine time zones to be selected. + */ + public void createTimeZoneList() { + // load and add all timezone + String[] ids = SimpleTimeZone.getAvailableIDs(); + for (String id : ids) { + TimeZone zone = TimeZone.getTimeZone(id); + int offset = zone.getRawOffset() / 1000; + int hour = offset / 3600; + int minutes = (offset % 3600) / 60; + String item = String.format("(GMT%+d:%02d) %s", hour, minutes, id); + + /* + DateFormat dfm = new SimpleDateFormat("z"); + dfm.setTimeZone(zone); + boolean hasDaylight = zone.useDaylightTime(); + String first = dfm.format(new Date(2010, 1, 1)); + String second = dfm.format(new Date(2011, 6, 6)); + int mid = hour * -1; + String result = first + Integer.toString(mid); + if(hasDaylight){ + result = result + second; + } + timeZoneComboBox.addItem(item + " (" + result + ")"); + */ + timeZoneComboBox.addItem(item); + } + // get the current timezone + TimeZone thisTimeZone = Calendar.getInstance().getTimeZone(); + int thisOffset = thisTimeZone.getRawOffset() / 1000; + int thisHour = thisOffset / 3600; + int thisMinutes = (thisOffset % 3600) / 60; + String formatted = String.format("(GMT%+d:%02d) %s", thisHour, thisMinutes, thisTimeZone.getID()); + + // set the selected timezone + timeZoneComboBox.setSelectedItem(formatted); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + rawSingle = new javax.swing.JRadioButton(); + rawSplit = new javax.swing.JRadioButton(); + imgTypeLabel = new javax.swing.JLabel(); + encase = new javax.swing.JRadioButton(); + imgPathLabel = new javax.swing.JLabel(); + multipleSelectLabel = new javax.swing.JLabel(); + imgPathTextField = new javax.swing.JTextField(); + imgPathBrowserButton = new javax.swing.JButton(); + this.imgPathBrowserButton.setDefaultCapable(true); + this.imgPathBrowserButton.requestFocus(); + imgInfoLabel = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + timeZoneComboBox = new javax.swing.JComboBox(); + timeZoneLabel = new javax.swing.JLabel(); + + org.openide.awt.Mnemonics.setLocalizedText(rawSingle, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.rawSingle.text")); // NOI18N + rawSingle.setRequestFocusEnabled(false); + rawSingle.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + rawSingleActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(rawSplit, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.rawSplit.text")); // NOI18N + rawSplit.setRequestFocusEnabled(false); + rawSplit.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + rawSplitActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(imgTypeLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgTypeLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(encase, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.encase.text")); // NOI18N + encase.setRequestFocusEnabled(false); + encase.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + encaseActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(imgPathLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgPathLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(multipleSelectLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.multipleSelectLabel.text")); // NOI18N + + imgPathTextField.setText(org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgPathTextField.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(imgPathBrowserButton, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgPathBrowserButton.text")); // NOI18N + imgPathBrowserButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + imgPathBrowserButtonActionPerformed(evt); + } + }); + + imgInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); + org.openide.awt.Mnemonics.setLocalizedText(imgInfoLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.imgInfoLabel.text")); // NOI18N + + jLabel1.setForeground(new java.awt.Color(255, 0, 51)); + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.jLabel1.text")); // NOI18N + + timeZoneComboBox.setMaximumRowCount(30); + + org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.timeZoneLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imgTypeLabel) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rawSplit) + .addComponent(rawSingle) + .addComponent(encase))) + .addComponent(multipleSelectLabel) + .addGroup(layout.createSequentialGroup() + .addComponent(imgPathLabel) + .addGap(18, 18, 18) + .addComponent(imgPathTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 415, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(imgPathBrowserButton)) + .addComponent(imgInfoLabel) + .addComponent(jLabel1) + .addGroup(layout.createSequentialGroup() + .addComponent(timeZoneLabel) + .addGap(10, 10, 10) + .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(imgInfoLabel) + .addGap(19, 19, 19) + .addComponent(imgTypeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rawSingle) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rawSplit) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(encase) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(imgPathLabel) + .addComponent(imgPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(imgPathBrowserButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(multipleSelectLabel) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(timeZoneLabel) + .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE) + .addComponent(jLabel1) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * When the "rawSingle" radio button is selected. + * + * @param evt the action event + */ + private void rawSingleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rawSingleActionPerformed + rawSingle.setSelected(true); + rawSplit.setSelected(false); + encase.setSelected(false); + multipleSelectLabel.setText("Single Image: Multiple Select Disabled"); + filter = imgFilter; + multi = false; + this.updateUI(null); +}//GEN-LAST:event_rawSingleActionPerformed + + /** + * When the "rawSplit" radio button is selected. + * + * @param evt the action event + */ + private void rawSplitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rawSplitActionPerformed + rawSingle.setSelected(false); + rawSplit.setSelected(true); + encase.setSelected(false); + multipleSelectLabel.setText("Split Image: Multiple Select Enabled. Use Ctrl, Shift, " + + "or Drag to select multiple image parts"); + filter = splitFilter; + multi = true; + updateUI(null); +}//GEN-LAST:event_rawSplitActionPerformed + + /** + * When the "encase" radio button is selected. + * + * @param evt the action event + */ + private void encaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_encaseActionPerformed + rawSingle.setSelected(false); + rawSplit.setSelected(false); + encase.setSelected(true); + multipleSelectLabel.setText("EnCase Image: Multiple Select Enabled. Use Ctrl, Shift, " + + "or Drag to select multiple image parts"); + filter = encaseFilter; + multi = true; + updateUI(null); +}//GEN-LAST:event_encaseActionPerformed + + /** + * When the "Browse" button is pressed, open the file chooser window to + * select the images. + * + * @param evt the action event + */ + private void imgPathBrowserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_imgPathBrowserButtonActionPerformed + fc.resetChoosableFileFilters(); + fc.addChoosableFileFilter(filter); + fc.setFileFilter(filter); + fc.setMultiSelectionEnabled(multi); + fc.setDragEnabled(multi); + + // set the current directory of the FileChooser if the ImagePath Field is valid + File currentDir = new File(imgPathTextField.getText()); + if (currentDir.exists()) { + fc.setCurrentDirectory(currentDir); + } + + int retval = fc.showOpenDialog(this); + if (retval == JFileChooser.APPROVE_OPTION) { + File[] files = fc.getSelectedFiles(); + String path = ""; + if (multi) { + for (File file : files) { + path = path + "\"" + file.getPath() + "\" "; + } + imgPathTextField.setText(path); + } else { + path = fc.getSelectedFile().getPath(); + imgPathTextField.setText(path); + } + } +}//GEN-LAST:event_imgPathBrowserButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JRadioButton encase; + private javax.swing.JLabel imgInfoLabel; + private javax.swing.JButton imgPathBrowserButton; + private javax.swing.JLabel imgPathLabel; + private static javax.swing.JTextField imgPathTextField; + private javax.swing.JLabel imgTypeLabel; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel multipleSelectLabel; + private static javax.swing.JRadioButton rawSingle; + private javax.swing.JRadioButton rawSplit; + private javax.swing.JComboBox timeZoneComboBox; + private javax.swing.JLabel timeZoneLabel; + // End of variables declaration//GEN-END:variables + + /** + * Gives notification that there was an insert into the document. The + * range given by the DocumentEvent bounds the freshly inserted region. + * + * @param e the document event + */ + @Override + public void insertUpdate(DocumentEvent e) { + updateUI(e); + } + + /** + * Gives notification that a portion of the document has been + * removed. The range is given in terms of what the view last + * saw (that is, before updating sticky positions). + * + * @param e the document event + */ + @Override + public void removeUpdate(DocumentEvent e) { + updateUI(e); + } + + /** + * Gives notification that an attribute or set of attributes changed. + * + * @param e the document event + */ + @Override + public void changedUpdate(DocumentEvent e) { + updateUI(e); + } + + /** + * The "listener" that updates the UI of this panel based on the changes of + * fields on this panel. This is also the method to check whether all the + * fields on this panel are correctly filled and decides whether to enable + * the "Next" button or not. + * + * @param e the document event + */ + public void updateUI(DocumentEvent e) { + String[] imgPath = Case.convertImgPath(imgPathTextField.getText()); + boolean isExist = Case.checkMultiplePathExist(imgPath); + File imgFile = new File(imgPath[0]); + + // check if the given paths exist and those are paths to image files + boolean isImagePath = true; + for (int i = 0; i < imgPath.length; i++) { + File tempImgFile = new File(imgPath[i]); + isImagePath = isImagePath && tempImgFile.exists() && !tempImgFile.isDirectory() + && (imgFilter.accept(tempImgFile) || splitFilter.accept(tempImgFile) + || encaseFilter.accept(tempImgFile)); + } + + + if (isImagePath) { + Case currentCase = Case.getCurrentCase(); + File dbFile = new File(currentCase.getCaseDirectory() + File.separator + imgFile.getName() + ".db"); + + if (dbFile.exists()) { + String dbExist = "This database already exists. Do you want to overwrite the database?"; + NotifyDescriptor d = new NotifyDescriptor.Confirmation(dbExist, "Warning: Overwrite Database", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + d.setValue(NotifyDescriptor.NO_OPTION); + + isExist = false; + + Object res = DialogDisplayer.getDefault().notify(d); + if (res != null && res == DialogDescriptor.YES_OPTION) { + isExist = dbFile.delete(); + if (!isExist) { + jLabel1.setText("*Database for this image is already created and it can't be deleted because it's being used."); + } + } + if (res != null && res == DialogDescriptor.NO_OPTION) { + jLabel1.setText("*Database for this image exist. Either delete it or select another image."); + } + } + } else { + isExist = false; + } + + if (isExist) { + jLabel1.setText(""); + } + + this.wizPanel.enableNextButton(isExist); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.form b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.form new file mode 100644 index 0000000000..ddac189bc6 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.form @@ -0,0 +1,122 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="crDbLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="crDbButton" min="-2" max="-2" attributes="0"/> + <EmptySpace min="189" pref="189" max="189" attributes="0"/> + </Group> + <Component id="jLabel5" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="crDbProgressBar" alignment="0" pref="292" max="32767" attributes="1"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="progressLabel" pref="272" max="32767" attributes="0"/> + </Group> + <Component id="jLabel1" alignment="0" min="-2" pref="552" max="-2" attributes="1"/> + <Component id="lookupFilesCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="crDbLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="lookupFilesCheckBox" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="80" max="-2" attributes="0"/> + <Component id="progressLabel" min="-2" pref="12" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="crDbButton" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="30" max="-2" attributes="0"/> + <Component id="jLabel5" min="-2" pref="14" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="crDbProgressBar" min="-2" pref="24" max="-2" attributes="1"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JProgressBar" name="crDbProgressBar"> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="crDbLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.crDbLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="progressLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.progressLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="crDbButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.crDbButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="crDbButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="lookupFilesCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel2.lookupFilesCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.java new file mode 100644 index 0000000000..8897c88e22 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel2.java @@ -0,0 +1,181 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Color; +import javax.swing.JPanel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JProgressBar; + +/** + * The "Add Image" wizard panel 2. Provides checkbox to enable indexing, button + * to start process, and progress bar. + */ +final class AddImageVisualPanel2 extends JPanel { + + /** Creates new form AddImageVisualPanel2 */ + AddImageVisualPanel2() { + initComponents(); + } + + /** + * Returns the name of the this panel. This name will be shown on the left + * panel of the "Add Image" wizard panel. + * + * @return name the name of this panel + */ + @Override + public String getName() { + return "Create Database"; + } + + public JButton getCrDbButton() { + return this.crDbButton; + } + + public JProgressBar getCrDbProgressBar() { + return this.crDbProgressBar; + } + + public JLabel getProgressLabel() { + return this.progressLabel; + } + + public JCheckBox getLookupFilesCheckbox() { + return this.lookupFilesCheckBox; + } + + /** + * Changes the progress bar text and color. + * + * @param text the text to be shown + * @param value the current value of the progress bar + * @param color the color of the progress bar text + */ + public void changeProgressBarTextAndColor(String text, int value, Color color) { + progressLabel.setText(text); + progressLabel.setForeground(color); + crDbProgressBar.setValue(value); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + crDbProgressBar = new javax.swing.JProgressBar(); + jLabel5 = new javax.swing.JLabel(); + crDbLabel = new javax.swing.JLabel(); + progressLabel = new javax.swing.JLabel(); + crDbButton = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + lookupFilesCheckBox = new javax.swing.JCheckBox(); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.jLabel5.text")); // NOI18N + + crDbLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); + org.openide.awt.Mnemonics.setLocalizedText(crDbLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.crDbLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.progressLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(crDbButton, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.crDbButton.text")); // NOI18N + crDbButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + crDbButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.jLabel1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(lookupFilesCheckBox, org.openide.util.NbBundle.getMessage(AddImageVisualPanel2.class, "AddImageVisualPanel2.lookupFilesCheckBox.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(crDbLabel) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(crDbButton) + .addGap(189, 189, 189)) + .addComponent(jLabel5) + .addComponent(crDbProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, 292, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(progressLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE)) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 552, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(lookupFilesCheckBox) + .addContainerGap(407, Short.MAX_VALUE)))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(crDbLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(lookupFilesCheckBox) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(80, 80, 80) + .addComponent(progressLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(crDbButton) + .addGap(30, 30, 30) + .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(crDbProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * When the "Create Database" button is press. It starts the database + * creation process, disables the "Create Database" and "Back" button, and + * sets the progress bar text. + * + * @param evt the action event + */ + private void crDbButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_crDbButtonActionPerformed + }//GEN-LAST:event_crDbButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton crDbButton; + private javax.swing.JLabel crDbLabel; + private javax.swing.JProgressBar crDbProgressBar; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel5; + private javax.swing.JCheckBox lookupFilesCheckBox; + private javax.swing.JLabel progressLabel; + // End of variables declaration//GEN-END:variables +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.form b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.form new file mode 100644 index 0000000000..0cb69a29ae --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.form @@ -0,0 +1,73 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="addImgButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="crDbLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel1" alignment="0" min="-2" pref="549" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="crDbLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + <Component id="addImgButton" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="54" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JButton" name="addImgButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel3.addImgButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addImgButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="crDbLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel3.crDbLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel3.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.java new file mode 100644 index 0000000000..5357543353 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageVisualPanel3.java @@ -0,0 +1,114 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import javax.swing.JPanel; +import org.openide.util.Lookup; + +/** + * The "Add Image" wizard panel 3. This class is used to design the "form" of + * the panel 3 for "Add Image" wizard panel. + * + * @author jantonius + */ +final class AddImageVisualPanel3 extends JPanel { + + /** Creates new form AddImageVisualPanel3 */ + AddImageVisualPanel3() { + initComponents(); + } + + /** + * Returns the name of the this panel. This name will be shown on the left + * panel of the "Add Image" wizard panel. + * + * @return name the name of this panel + */ + @Override + public String getName() { + return "Done"; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + addImgButton = new javax.swing.JButton(); + crDbLabel = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + + org.openide.awt.Mnemonics.setLocalizedText(addImgButton, org.openide.util.NbBundle.getMessage(AddImageVisualPanel3.class, "AddImageVisualPanel3.addImgButton.text")); // NOI18N + addImgButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + addImgButtonActionPerformed(evt); + } + }); + + crDbLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(crDbLabel, org.openide.util.NbBundle.getMessage(AddImageVisualPanel3.class, "AddImageVisualPanel3.crDbLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddImageVisualPanel3.class, "AddImageVisualPanel3.jLabel1.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(addImgButton) + .addComponent(crDbLabel) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 549, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(crDbLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel1) + .addGap(18, 18, 18) + .addComponent(addImgButton) + .addContainerGap(54, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * + * + * @param evt the action event + */ + private void addImgButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addImgButtonActionPerformed + // restart the wizard + AddImageAction act = Lookup.getDefault().lookup(AddImageAction.class); + act.restart(); + }//GEN-LAST:event_addImgButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton addImgButton; + private javax.swing.JLabel crDbLabel; + private javax.swing.JLabel jLabel1; + // End of variables declaration//GEN-END:variables +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIterator.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIterator.java new file mode 100644 index 0000000000..c571a43787 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardIterator.java @@ -0,0 +1,166 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; +import javax.swing.JComponent; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; + +/** + * The iterator class for the "Add Image" wizard panel. This class is used to + * iterate on the sequence of panels of the "Add Image" wizard panel. + */ +class AddImageWizardIterator implements WizardDescriptor.Iterator<WizardDescriptor> { + + private int index = 0; + private List<WizardDescriptor.Panel<WizardDescriptor>> panels; + private AddImageAction action; + + AddImageWizardIterator(AddImageAction action) { + this.action = action; + } + + /** + * Initialize panels representing individual wizard's steps and sets + * various properties for them influencing wizard appearance. + */ + private List<WizardDescriptor.Panel<WizardDescriptor>> getPanels() { + if (panels == null) { + panels = new ArrayList<WizardDescriptor.Panel<WizardDescriptor>>(); + panels.add(new AddImageWizardPanel1()); + panels.add(new AddImageWizardPanel2(action)); + panels.add(new AddImageWizardPanel3()); + + String[] steps = new String[panels.size()]; + for (int i = 0; i < panels.size(); i++) { + Component c = panels.get(i).getComponent(); + // Default step name to component name of panel. + steps[i] = c.getName(); + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + } + return panels; + } + + /** + * Returns the index of the current panel. + * Note: 0 = panel 1, 1 = panel 2, etc + * + * @return index the current panel index + */ + public int getIndex() { + return index; + } + + /** + * Gets the current panel. + * + * @return panel the current panel + */ + @Override + public WizardDescriptor.Panel<WizardDescriptor> current() { + if (panels != null) { + return panels.get(index); + } else { + return getPanels().get(index); + } + } + + /** + * Gets the name of the current panel. + * + * @return name the name of the current panel + */ + @Override + public String name() { + return "Step " + Integer.toString(index + 1) + " of " + getPanels().size(); + } + + /** + * Tests whether there is a next panel. + * + * @return boolean true if it has next panel, false if not + */ + @Override + public boolean hasNext() { + return index < getPanels().size() - 1; + } + + /** + * Tests whether there is a previous panel. + * + * @return boolean true if it has previous panel, false if not + */ + @Override + // disable the previous button on all panels + public boolean hasPrevious() { + return index > 0; + } + + /** + * Moves to the next panel. I.e. increment its index, need not actually + * change any GUI itself. + */ + @Override + public void nextPanel() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + index++; + } + + /** + * Moves to the previous panel. I.e. decrement its index, need not actually + * change any GUI itself. + */ + @Override + public void previousPanel() { + if (!hasPrevious()) { + throw new NoSuchElementException(); + } + index--; + } + + // If nothing unusual changes in the middle of the wizard, simply: + @Override + public void addChangeListener(ChangeListener l) { + } + + @Override + public void removeChangeListener(ChangeListener l) { + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel1.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel1.java new file mode 100644 index 0000000000..71b2d619ac --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel1.java @@ -0,0 +1,189 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +/** + * The "Add Image" wizard panel1 handling the logic of selecting image file(s) + * to add to Case, and pick the time zone. + */ +class AddImageWizardPanel1 implements WizardDescriptor.Panel<WizardDescriptor>, PropertyChangeListener { + + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private AddImageVisualPanel1 component; + private boolean isNextEnable = false; + + /** + * Get the visual component for the panel. In this template, the component + * is kept separate. This can be more efficient: if the wizard is created + * but never displayed, or not all panels are displayed, it is better to + * create only those which really need to be visible. + * + * @return component the UI component of this wizard panel + */ + @Override + public AddImageVisualPanel1 getComponent() { + if (component == null) { + component = new AddImageVisualPanel1(this); + } + component.addPropertyChangeListener(this); + return component; + } + + /** + * Help for this panel. When the panel is active, this is used as the help + * for the wizard dialog. + * + * @return HelpCtx.DEFAULT_HELP the help for this panel + */ + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + /** + * Tests whether the panel is finished and it is safe to proceed to the next + * one. If the panel is valid, the "Next" button will be enabled. + * + * @return boolean true if all the fields are correctly filled, false otherwise + */ + @Override + public boolean isValid() { + + // set the focus to the next button of the wizard dialog if it's enabled + if(isNextEnable){ + Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton("Next >"); + } + + return isNextEnable; + } + + /** + * Enable the "Next" button and fireChangeEvent to update the GUI + * + * @param isEnabled true if next button can be enabled, false otherwise + */ + public void enableNextButton(boolean isEnabled){ + isNextEnable = isEnabled; + fireChangeEvent(); + } + + private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 + + /** + * Adds a listener to changes of the panel's validity. + * + * @param l the change listener to add + */ + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + /** + * Removes a listener to changes of the panel's validity. + * + * @param l the change listener to move + */ + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + /** + * This method is auto-generated. It seems that this method is used to listen + * to any change in this wizard panel. + */ + protected final void fireChangeEvent() { + Iterator<ChangeListener> it; + synchronized (listeners) { + it = new HashSet<ChangeListener>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + + /** + * Provides the wizard panel with the current data--either the default data + * or already-modified settings, if the user used the previous and/or next + * buttons. This method can be called multiple times on one instance of + * WizardDescriptor.Panel. + *s + * @param settings the setting to be read from + */ + @Override + public void readSettings(WizardDescriptor settings) { + } + + /** + * Provides the wizard panel with the opportunity to update the settings + * with its current customized state. Rather than updating its settings + * with every change in the GUI, it should collect them, and then only save + * them when requested to by this method. This method can be called multiple + * times on one instance of WizardDescriptor.Panel. + * + * @param settings the setting to be stored to + */ + @Override + public void storeSettings(WizardDescriptor settings) { + settings.putProperty(AddImageAction.IMGPATHS_PROP, getComponent().getImagePaths()); + settings.putProperty(AddImageAction.TIMEZONE_PROP, getComponent().getSelectedTimezone()); // store the timezone + } + + + /** + * The "listener" for any property change in this panel. Any property changes + * will invoke the "fireChangeEvent()" method. + * + * @param evt the property change event + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + fireChangeEvent(); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel2.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel2.java new file mode 100644 index 0000000000..478d5edaee --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel2.java @@ -0,0 +1,379 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JCheckBox; +import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.hashdatabase.HashDbSettings; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess; +import org.sleuthkit.datamodel.TskException; + +/** + * The "Add Image" wizard panel2. Handles processing the image in a worker + * thread, and any errors that may occur during the add process. + */ +class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> { + + // the paths of the image files to be added + private String[] imgPaths; + // the time zone where the image is added + private String timeZone; + + // paths to any set hash lookup databases (can be null) + private String NSRLPath, knownBadPath; + + // task that will clean up the created database file if the wizard is cancelled before it finishes + private AddImageAction.CleanupTask cleanupImage; // initialized to null in readSettings() + + // flag to control the availiablity of next action + private boolean imgAdded; // initalized to false in readSettings() + + private AddImageProcess process; + private AddImgTask addImageTask; + + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private AddImageVisualPanel2 component; + private AddImageAction action; + + AddImageWizardPanel2(AddImageAction action) { + this.action = action; + } + + /** + * Get the visual component for the panel. In this template, the component + * is kept separate. This can be more efficient: if the wizard is created + * but never displayed, or not all panels are displayed, it is better to + * create only those which really need to be visible. + * + * @return component the UI component of this wizard panel + */ + @Override + public AddImageVisualPanel2 getComponent() { + if (component == null) { + component = new AddImageVisualPanel2(); + component.getCrDbButton().addActionListener(new CrDbButtonListener()); + } + return component; + } + + /** + * Help for this panel. When the panel is active, this is used as the help + * for the wizard dialog. + * + * @return HelpCtx.DEFAULT_HELP the help for this panel + */ + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + } + + /** + * Tests whether the panel is finished and it is safe to proceed to the next + * one. If the panel is valid, the "Next" button will be enabled. + * + * @return boolean true if can proceed to the next one, false otherwise + */ + @Override + public boolean isValid() { + // set the focus to the next button of the wizard dialog if it's enabled + if (imgAdded) { + Lookup.getDefault().lookup(AddImageAction.class).requestFocusButton("Next >"); + } + + return imgAdded; + } + + class CrDbButtonListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + startAddImage(); + } + } + + /** + * Creates the database and adds the image to the XML configuration file. + * + */ + private void startAddImage() { + component.getCrDbButton().setEnabled(false); + component.getCrDbProgressBar().setIndeterminate(true); + component.changeProgressBarTextAndColor("*Adding the image may take some time for large images.", 0, Color.black); + + addImageTask = new AddImgTask(); + addImageTask.execute(); + } + + /** + * Sets the isDbCreated variable in this class and also invoke + * fireChangeEvent() method. + * + * @param created whether the database already created or not + */ + private void setDbCreated(Boolean created) { + imgAdded = created; + fireChangeEvent(); + } + private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 + + /** + * Adds a listener to changes of the panel's validity. + * + * @param l the change listener to add + */ + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + /** + * Removes a listener to changes of the panel's validity. + * + * @param l the change listener to move + */ + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + /** + * This method is auto-generated. It seems that this method is used to listen + * to any change in this wizard panel. + */ + protected final void fireChangeEvent() { + Iterator<ChangeListener> it; + synchronized (listeners) { + it = new HashSet<ChangeListener>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + + /** + * Load the image locations from the WizardDescriptor settings object, and + * the + * + * @param settings the setting to be read from + */ + @Override + public void readSettings(WizardDescriptor settings) { + cleanupImage = null; + imgAdded = false; + imgPaths = (String[]) settings.getProperty(AddImageAction.IMGPATHS_PROP); + timeZone = settings.getProperty(AddImageAction.TIMEZONE_PROP).toString(); + + // If the user went back after the image was processed, it will be replaced so its cleanup task should be executed & removed + AddImageAction.CleanupTask oldImageCleanup = (AddImageAction.CleanupTask) settings.getProperty(AddImageAction.IMAGECLEANUPTASK_PROP); + if (oldImageCleanup != null) { + try { + oldImageCleanup.cleanup(); + } catch (Exception ex) { + Logger logger = Logger.getLogger(AddImageWizardPanel2.class.getName()); + logger.log(Level.WARNING, "Error removing previously added image", ex); + } finally { + oldImageCleanup.disable(); + } + } + + component.changeProgressBarTextAndColor("", 0, Color.black); + component.getCrDbButton().setEnabled(true); + + + // Load hash database settings + this.NSRLPath = null; + this.knownBadPath = null; + + try { + HashDbSettings hashDbs = Autopsy.getHashDbSettings(); + this.NSRLPath = hashDbs.getNSRLDatabasePath(); + this.knownBadPath = hashDbs.getKnownBadDatabasePath(); + } catch (IOException ex) { + Log.get(AddImageWizardPanel2.class).log(Level.WARNING, "Couldn't get hash database settings.", ex); + } + JCheckBox lookupFilesCheckbox = component.getLookupFilesCheckbox(); + lookupFilesCheckbox.setSelected(false); + lookupFilesCheckbox.setEnabled(this.NSRLPath != null || this.knownBadPath != null); + } + + /** + * + * @param settings the setting to be stored to + */ + @Override + public void storeSettings(WizardDescriptor settings) { + + // Store process so it can be committed if wizard finishes + settings.putProperty(AddImageAction.PROCESS_PROP, process); + + // Need to make the cleanup accessible to the finished wizard so it can + // be cancelled if all goes well, and availble if we return to this + // panel so the the previously added image can be reverted + settings.putProperty(AddImageAction.IMAGECLEANUPTASK_PROP, cleanupImage); + } + + /** + * Thread that will make the JNI call to ingest the image. + */ + private class AddImgTask extends SwingWorker<Integer, Integer> { + private JProgressBar progressBar; + private JCheckBox lookupFilesCheckbox; + private Case currentCase; + + // true if the process was requested to stop + private boolean interrupted = false; + + protected AddImgTask() { + this.progressBar = getComponent().getCrDbProgressBar(); + this.lookupFilesCheckbox = getComponent().getLookupFilesCheckbox(); + currentCase = Case.getCurrentCase(); + } + + /** + * Starts the addImage process, but does not commit the results. + * + * @return + * @throws Exception + */ + @Override + protected Integer doInBackground() throws Exception { + this.setProgress(0); + + // Add a cleanup task to interupt the backgroud process if the + // wizard exits while the background process is running. + AddImageAction.CleanupTask cancelledWhileRunning = action.new CleanupTask() { + @Override + void cleanup() throws Exception { + addImageTask.interrupt(); + } + }; + + SleuthkitCase skCase = currentCase.getSleuthkitCase(); + skCase.clearLookupDatabases(); + + if (lookupFilesCheckbox.isSelected()) { + if (NSRLPath != null) { + skCase.setNSRLDatabase(NSRLPath); + } + + if (knownBadPath != null) { + skCase.setKnownBadDatabase(knownBadPath); + } + } + + try { + process = currentCase.makeAddImageProcess(Case.convertTimeZone(timeZone)); + cancelledWhileRunning.enable(); + process.run(imgPaths); + } catch (TskException ex) { + throw ex; + } finally { + // process is over, doesn't need to be dealt with if cancel happens + cancelledWhileRunning.disable(); + } + this.setProgress(100); + return 0; + } + + + + /** + * + * (called by EventDispatch Thread after doInBackground finishes) + */ + @Override + protected void done() { + progressBar.setIndeterminate(false); + + // attempt actions that might fail and force the process to stop + try { + // get() will throw any expetions that were thrown in the background task + get(); + if (interrupted) { + process.revert(); + return; + } + + // When everything happens without an error: + + // the add-image process needs to be reverted if the wizard doesn't finish + cleanupImage = action.new CleanupTask() { + @Override + void cleanup() throws Exception { + process.revert(); + } + }; + cleanupImage.enable(); + + getComponent().changeProgressBarTextAndColor("*Image added.", 100, Color.black); // complete progress bar + + // Get attention for the process finish + java.awt.Toolkit.getDefaultToolkit().beep(); //BEEP! + SwingUtilities.getWindowAncestor(getComponent()).toFront(); + + setDbCreated(true); + + } catch (Exception ex) { + getComponent().changeProgressBarTextAndColor("*Failed to add image.", 0, Color.black); // set error message + + // Log error/display warning + Logger logger = Logger.getLogger(AddImgTask.class.getName()); + logger.log(Level.SEVERE, "Error adding image to case", ex); + } + } + + void interrupt() throws Exception { + interrupted = true; + try { + process.stop(); + } catch (TskException ex) { + throw new Exception("Error stopping add-image process.", ex); + } + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java new file mode 100644 index 0000000000..f999115e44 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java @@ -0,0 +1,157 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +/** + * The "Add Image" wizard panel3. No major functionality, just presents the + * options to finish/cancel image-add or to add another image. + */ +class AddImageWizardPanel3 implements WizardDescriptor.Panel<WizardDescriptor> { + + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private Component component; + + /** + * Get the visual component for the panel. In this template, the component + * is kept separate. This can be more efficient: if the wizard is created + * but never displayed, or not all panels are displayed, it is better to + * create only those which really need to be visible. + * + * @return component the UI component of this wizard panel + */ + @Override + public Component getComponent() { + if (component == null) { + component = new AddImageVisualPanel3(); + } + return component; + } + + /** + * Help for this panel. When the panel is active, this is used as the help + * for the wizard dialog. + * + * @return HelpCtx.DEFAULT_HELP the help for this panel + */ + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + /** + * Tests whether the panel is finished. If the panel is valid, the "Finish" + * button will be enabled. + * + * @return true the finish button should be always enabled at this point + */ + @Override + public boolean isValid() { + // If it is always OK to press Next or Finish, then: + return true; + // If it depends on some condition (form filled out...), then: + // return someCondition(); + // and when this condition changes (last form field filled in...) then: + // fireChangeEvent(); + // and uncomment the complicated stuff below. + } + + /** + * Adds a listener to changes of the panel's validity. + * + * @param l the change listener to add + */ + @Override + public final void addChangeListener(ChangeListener l) { + } + + /** + * Removes a listener to changes of the panel's validity. + * + * @param l the change listener to move + */ + @Override + public final void removeChangeListener(ChangeListener l) { + } + + /* + private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + protected final void fireChangeEvent() { + Iterator<ChangeListener> it; + synchronized (listeners) { + it = new HashSet<ChangeListener>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + */ + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + + /** + * Provides the wizard panel with the current data--either the default data + * or already-modified settings, if the user used the previous and/or next + * buttons. This method can be called multiple times on one instance of + * WizardDescriptor.Panel. + * + * @param settings the setting to be read from + */ + @Override + public void readSettings(WizardDescriptor settings) { + } + + /** + * Provides the wizard panel with the opportunity to update the settings + * with its current customized state. Rather than updating its settings + * with every change in the GUI, it should collect them, and then only save + * them when requested to by this method. This method can be called multiple + * times on one instance of WizardDescriptor.Panel. + * + * @param settings the setting to be stored to + */ + @Override + public void storeSettings(WizardDescriptor settings) { + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Autopsy.java b/Case/src/org/sleuthkit/autopsy/casemodule/Autopsy.java new file mode 100644 index 0000000000..95bc01e3e4 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/Autopsy.java @@ -0,0 +1,70 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.io.File; +import java.io.IOException; +import org.sleuthkit.autopsy.hashdatabase.HashDbSettings; +import org.sleuthkit.datamodel.SleuthkitJNI; + +/** + * Class to consolidate application-wide settings. + */ +public class Autopsy { + private final static String propFilePath = System.getProperty("netbeans.user") + File.separator + "autopsy.properties"; + private static boolean verboseLogging = false; + + /** + * Gets the property file where the user properties such as Recent Cases + * and selected Hash Databases are stored. + * @return A new file handle + */ + public static File getPropertyFile() { + return new File(propFilePath); + } + + /** + * Get the hash database settings as read from the property file. + * @return A new hash database settings object. + * @throws IOException if the property file can't be found + */ + public static HashDbSettings getHashDbSettings() throws IOException { + return new HashDbSettings(getPropertyFile()); + } + + /** + * Activate verbose logging for Sleuth Kit + */ + public static void startVerboseLogging() { + verboseLogging = true; + String logPath = System.getProperty("netbeans.user") + File.separator + "sleuthkit.txt"; + + SleuthkitJNI.startVerboseLogging(logPath); + } + + /** + * Checks if verbose logging has been enabled. + * @return true if verbose logging has been enabled. + */ + public static boolean verboseLoggingIsSet() { + return verboseLogging; + } + +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Autopsy_logo.gif b/Case/src/org/sleuthkit/autopsy/casemodule/Autopsy_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..42cc5033142f00d0f3f5af368ed447588e95c491 GIT binary patch literal 7442 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 literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties new file mode 100644 index 0000000000..d7d06b1e08 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties @@ -0,0 +1,115 @@ +CTL_AddImage=Add Image... +CTL_CaseAction=Case +CTL_CaseCloseAct=Close Case +CTL_CaseNewAction=New Case... +CTL_CaseOpenActionOld=Open Case(old)... +CTL_CasePropertiesAction=Case Properties... +CTL_CaseTopComponent=Case Window +CTL_NewCaseAct=New Case(Old)... +CTL_OpenAction=Open Case... +CTL_RecentCases=Recent Cases +CTL_CaseDeleteAction=Delete Case +CTL_SaveCaseAction=Save Case +CTL_testAction=test +CTL_testTopComponent=test Window +HINT_CaseTopComponent=This is a Case window +HINT_testTopComponent=This is a test window +Menu/File/org-sleuthkit-autopsy-casemodule-CaseCloseAct.shadow= +Menu/File/org-sleuthkit-autopsy-casemodule-OpenAction.shadow=Open Case +OpenIDE-Module-Name=Case +CaseVisualPanel1.jLabel1.text=Name +CaseVisualPanel1.jLabel2.text=Image Path: +CaseVisualPanel1.jLabel3.text=Database Path: +CaseTopComponent.jLabel1.text=Name +CaseVisualPanel1.NameField.text= +CaseVisualPanel1.ImgPath.text= +CaseVisualPanel1.DbPath.text= +CaseTopComponent.jLabel2.text=Image Path +CaseTopComponent.jLabel3.text=DB Path +CaseVisualPanel1.ImgPathBrowserButton.text=Browse +CaseVisualPanel1.DbPathBrowserButton.text=Browse +NewCaseVisualPanel1.jLabel1.text=Name +NewCaseVisualPanel1.jTextField1.text= +NewCaseVisualPanel1.jLabel2.text=Image Type: +NewCaseVisualPanel1.jRadioButton1.text=Raw Single .img .dd +NewCaseVisualPanel1.jRadioButton2.text=Raw Split .001 .002 etc +NewCaseVisualPanel1.jRadioButton3.text=Encase .e01 +NewCaseVisualPanel1.nameLabel.text_1=Name +NewCaseVisualPanel1.NameField.text_1= +NewCaseVisualPanel1.TypeLabel.text_1=Image Type: +NewCaseVisualPanel1.rawSingleRadio.text_1=Raw Single .img .dd +NewCaseVisualPanel1.rawSplitRadio.text_1=Raw Split .001 .002 etc +NewCaseVisualPanel1.encaseRadio.text_1=EnCase .e01 +NewCaseVisualPanel2.jLabel1.text=Image Path: +NewCaseVisualPanel2.jLabel2.text=DataBase Path: +NewCaseVisualPanel2.descriptionText.text=variable text +NewCaseVisualPanel2.ImgBrowserButton.text=Browse +NewCaseVisualPanel2.DcBrowserButton.text=Browse +NewCaseVisualPanel2.ImagePathField.text= +NewCaseVisualPanel2.DbPathField.text= +CaseVisualPanel1.jLabel4.text=Image Type: +CaseVisualPanel1.rawSingle.text=Raw Single .img .dd +CaseVisualPanel1.rawSplit.text=Raw Split .001 .002 etc +CaseVisualPanel1.encase.text=EnCase .e01 .e02 etc +CaseVisualPanel1.multipleSelectLabel.text=Single Image: Multiple Select Disabled +CaseVisualPanel1.jLabel5.text=If a database has not already been loaded / created for the chosen image use this button: (could take a few minutes) +CaseVisualPanel1.ProgressLabel.text= +CaseVisualPanel1.createDbButton.text=Create Database +NewCaseVisualPanel1.jLabel1.text_1=Enter New Case Information: +NewCaseVisualPanel1.caseNameLabel.text_1=Case Name: +NewCaseVisualPanel1.caseDirLabel.text=Base Directory: +NewCaseVisualPanel1.caseDirBrowseButton.text=Browse +NewCaseVisualPanel1.caseNameTextField.text_1= +NewCaseVisualPanel1.jLabel2.text_1=Case data will be stored in the following directory: +NewCaseVisualPanel1.caseParentDirTextField.text= +NewCaseVisualPanel1.caseDirTextField.text_1= +CasePropertiesForm.caseDirLabel.text=Case Directory: +CasePropertiesForm.crDateLabel.text=Created Date: +CasePropertiesForm.caseNameLabel.text=Case Name: +CasePropertiesForm.crDateTextField.text= +CasePropertiesForm.caseNameTextField.text= +CasePropertiesForm.updateCaseNameButton.text=Update +CasePropertiesForm.casePropLabel.text=Case Information +CasePropertiesForm.genInfoLabel.text=General Information +CasePropertiesForm.imgInfoLabel.text=Images Information +CasePropertiesForm.OKButton.text=OK +CasePropertiesForm.deleteCaseButton.text=Delete Case +CueBannerPanel.autopsyLogo.text= +CueBannerPanel.createNewLabel.text=Create New Case +CueBannerPanel.autopsyLabel.text=Autopsy +CueBannerPanel.welcomeLabel.text=Welcome to +CueBannerPanel.openLabel.text=Open Existing Case +CueBannerPanel.startupCheckBox.text=Don't show on startup again +CueBannerPanel.closeButton.text=Close +CueBannerPanel.openRecentLabel.text=Open Recent Case +CueBannerPanel.newCaseButton.text= +CueBannerPanel.openCaseButton.text= +CueBannerPanel.openRecentButton.text= +OpenRecentCasePanel.cancelButton.text=Cancel +OpenRecentCasePanel.jLabel1.text=Recent Cases +AddImageVisualPanel1.imgInfoLabel.text=Enter Disk Image Information: +AddImageVisualPanel2.crDbLabel.text=Adding Image +AddImageVisualPanel2.jLabel5.text=Processing Image and Adding to Database : +AddImageVisualPanel2.crDbButton.text=Process Image +AddImageVisualPanel2.progressLabel.text= +AddImageVisualPanel2.jLabel1.text=<html> We will now analyze the disk image to extract volume and file system data and populate a local database. This may <br>take a while on large images. </html> +AddImageVisualPanel3.addImgButton.text=Add Another Image +AddImageVisualPanel3.crDbLabel.text=Finish or Add More Images +AddImageVisualPanel3.jLabel1.text=Image successfully processed and added to the case. You can add another image or return to the case. +AddImageVisualPanel1.jLabel1.text= +AddImageVisualPanel1.timeZoneLabel.text=Please select your timezone: +AddImageVisualPanel1.rawSingle.text=Raw Single (*.img, *.dd, etc) +AddImageVisualPanel1.rawSplit.text=Raw Split (*.001, *.002, *.aa, *.ab, etc) +AddImageVisualPanel1.imgTypeLabel.text=Image Type: +AddImageVisualPanel1.multipleSelectLabel.text=Single Image: Multiple Select Disabled +AddImageVisualPanel1.imgPathTextField.text= +AddImageVisualPanel1.encase.text=EnCase (*.e01, *.e02, etc) +AddImageVisualPanel1.imgPathLabel.text=Image Path: +AddImageVisualPanel1.imgPathBrowserButton.text=Browse +NewJPanel.jLabel1.text= +NewJPanel.jLabel2.text=NSRL Index +NewJPanel.jLabel5.text=The NSRL index is used to idenify "known" files. +NewJPanel.jFormattedTextField1.text=jFormattedTextField1 +NewJPanel.jButton1.text=Rename +NewJPanel.jLabel4.text=Database: +AddImageVisualPanel2.lookupFilesCheckBox.text=Lookup files in hash databases diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/ButtonColumn.java b/Case/src/org/sleuthkit/autopsy/casemodule/ButtonColumn.java new file mode 100644 index 0000000000..24f67b48f4 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/ButtonColumn.java @@ -0,0 +1,232 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +/** + * @author jantonius + * + * Taken from: http://tips4java.wordpress.com/2009/07/12/table-button-column/ + * Note: everything is the same, except I edited the buttonName + */ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.table.*; + +/** + * The ButtonColumn class provides a renderer and an editor that looks like a + * JButton. The renderer and editor will then be used for a specified column + * in the table. The TableModel will contain the String to be displayed on + * the button. + * + * The button can be invoked by a mouse click or by pressing the space bar + * when the cell has focus. Optionally a mnemonic can be set to invoke the + * button. When the button is invoked the provided Action is invoked. The + * source of the Action will be the table. The action command will contain + * the model row number of the button that was clicked. + * + */ +class ButtonColumn extends AbstractCellEditor + implements TableCellRenderer, TableCellEditor, ActionListener, MouseListener +{ + private JTable table; + private Action action; + private int mnemonic; + private Border originalBorder; + private Border focusBorder; + + private JButton renderButton; + private JButton editButton; + private String text; + private boolean isButtonColumnEditor; + + String buttonName; + + + /** + * Create the ButtonColumn to be used as a renderer and editor. The + * renderer and editor will automatically be installed on the TableColumn + * of the specified column. + * + * @param table the table containing the button renderer/editor + * @param action the Action to be invoked when the button is invoked + * @param column the column to which the button renderer/editor is added + * @param buttonName text displayed on the button + */ + ButtonColumn(JTable table, Action action, int column, String buttonName) + { + this.table = table; + this.action = action; + this.buttonName = buttonName; + + renderButton = new JButton(); + editButton = new JButton(); + editButton.setFocusPainted( false ); + editButton.addActionListener( this ); + originalBorder = editButton.getBorder(); + setFocusBorder( new LineBorder(Color.BLUE) ); + + TableColumnModel columnModel = table.getColumnModel(); + columnModel.getColumn(column).setCellRenderer( this ); + columnModel.getColumn(column).setCellEditor( this ); + table.addMouseListener( this ); + } + + + /** + * Get foreground color of the button when the cell has focus + * + * @return the foreground color + */ + public Border getFocusBorder() + { + return focusBorder; + } + + /** + * The foreground color of the button when the cell has focus + * + * @param focusBorder the foreground color + */ + public void setFocusBorder(Border focusBorder) + { + this.focusBorder = focusBorder; + editButton.setBorder( focusBorder ); + } + + public int getMnemonic() + { + return mnemonic; + } + + /** + * The mnemonic to activate the button when the cell has focus + * + * @param mnemonic the mnemonic + */ + public void setMnemonic(int mnemonic) + { + this.mnemonic = mnemonic; + renderButton.setMnemonic(mnemonic); + editButton.setMnemonic(mnemonic); + } + + @Override + public Component getTableCellEditorComponent( + JTable table, Object value, boolean isSelected, int row, int column) + { + text = (value == null) ? "" : value.toString(); + editButton.setText( text ); + return editButton; + } + + @Override + public Object getCellEditorValue() + { + return text; + } + +// +// Implement TableCellRenderer interface +// + @Override + public Component getTableCellRendererComponent( + JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) + { + if (isSelected) + { + renderButton.setForeground(table.getSelectionForeground()); + renderButton.setBackground(table.getSelectionBackground()); + } + else + { + renderButton.setForeground(table.getForeground()); + renderButton.setBackground(UIManager.getColor("Button.background")); + } + + if (hasFocus) + { + renderButton.setBorder( focusBorder ); + } + else + { + renderButton.setBorder( originalBorder ); + } + + //renderButton.setText( (value == null) ? "" : value.toString() ); + renderButton.setText(buttonName); + return renderButton; + } + +// +// Implement ActionListener interface +// + /* + * The button has been pressed. Stop editing and invoke the custom Action + */ + @Override + public void actionPerformed(ActionEvent e) + { + int row = table.convertRowIndexToModel( table.getEditingRow() ); + fireEditingStopped(); + + // Invoke the Action + + ActionEvent event = new ActionEvent( + table, + ActionEvent.ACTION_PERFORMED, + "" + row); + action.actionPerformed(event); + } + +// +// Implement MouseListener interface +// + /* + * When the mouse is pressed the editor is invoked. If you then then drag + * the mouse to another cell before releasing it, the editor is still + * active. Make sure editing is stopped when the mouse is released. + */ + @Override + public void mousePressed(MouseEvent e) + { + if (table.isEditing() + && table.getCellEditor() == this) + isButtonColumnEditor = true; + } + + @Override + public void mouseReleased(MouseEvent e) + { + if (isButtonColumnEditor + && table.isEditing()) + table.getCellEditor().stopCellEditing(); + + isButtonColumnEditor = false; + } + + @Override + public void mouseClicked(MouseEvent e) {} + @Override + public void mouseEntered(MouseEvent e) {} + @Override + public void mouseExited(MouseEvent e) {} +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Case.java b/Case/src/org/sleuthkit/autopsy/casemodule/Case.java new file mode 100644 index 0000000000..7ebf16e6e0 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -0,0 +1,852 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Frame; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.TimeZone; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.Lookup; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.SystemAction; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.*; +import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess; + +/** + * Class to store the case information + */ +public class Case { + // change the CTL_MainWindow_Title in Bundle.properties as well if you change this value + private static final String autopsyVer = "3.0.0b1"; // current version of autopsy. Changed it when the version is changed + private static final String appName = "Autopsy " + autopsyVer; + + /** + * Property name that indicates the name of the current case has changed. + * Fired with the case is renamed, and when the current case is + * opened/closed/changed. The value is a String: the name of the case. + * The empty string ("") is used for no open case. + */ + public static final String CASE_NAME = "caseName"; + /** + * Property name that indicates a new image has been added to the current + * case. The new value is the newly-added instance of Image, and the old + * value is always null. + */ + public static final String CASE_ADD_IMAGE = "addImages"; + /** + * Property name that indicates an image has been removed from the current + * case. The "old value" is the (int) image ID of the image that was + * removed, the new value is the instance of the Image. + */ + public static final String CASE_DEL_IMAGE = "removeImages"; + /** + * Property name that indicates the currently open case has changed. + * The new value is the instance of the opened Case, or null if there is no + * open case. + * The old value is the instance of the closed Case, or null if there was no + * open case. + */ + public static final String CASE_CURRENT_CASE = "currentCase"; + /** + * Name for the property that determines whether to show the dialog at + * startup + */ + static final String propStartup = "LBL_StartupDialog"; + private static Properties properties = new Properties(); + + // pcs is initialized in CaseListener constructor + private static PropertyChangeSupport pcs; + private static PropertyChangeListener caseListener = new CaseListener(); + + + private String name; + private String configFilePath; + private XMLCaseManagement xmlcm; + private SleuthkitCase db; + + + + // Track the current case (only set with changeCase() method) + private static Case currentCase = null; + + /** + * Constructor for the Case class + */ + private Case(String name, String configFilePath, XMLCaseManagement xmlcm, SleuthkitCase db) { + this.name = name; + this.configFilePath = configFilePath; + this.xmlcm = xmlcm; + this.db = db; + } + + /** + * Gets the currently opened case, if there is one. + * + * @return the current open case + * @throws IllegalStateException if there is no case open. + */ + public static Case getCurrentCase() { + if (currentCase != null) { + return currentCase; + } else { + throw new IllegalStateException("Can't get the current case; there is no case open!"); + } + } + + + + /** + * Updates the current case to the given case and fires off + * the appropriate property-change + * @param newCase the new current case + */ + private static void changeCase(Case newCase) { + + Case oldCase = Case.currentCase; + Case.currentCase = null; + + String oldCaseName = oldCase != null ? oldCase.name : ""; + pcs.firePropertyChange(CASE_CURRENT_CASE, oldCase, null); + pcs.firePropertyChange(CASE_NAME, oldCaseName, ""); + + if (newCase != null) { + currentCase = newCase; + + pcs.firePropertyChange(CASE_CURRENT_CASE, null, currentCase); + //TODO: This will fire off a bunch of stuff in CaseListener.propertyChange() + // that should probably be migrated into here + + pcs.firePropertyChange(CASE_NAME, "", currentCase.name); + RecentCases.getInstance().addRecentCase(currentCase.name, currentCase.configFilePath); // update the recent cases + } + } + + + + AddImageProcess makeAddImageProcess(String timezone) { + return this.db.makeAddImageProcess(timezone); + } + + /** + * Creates a new case (create the XML config file and the directory) + * + * @param caseDir the base directory where the configuration file is saved + * @param caseName the name of case + */ + static void create(String caseDir, String caseName) throws Exception { + Log.get(Case.class).log(Level.INFO, "Creating new case.\ncaseDir: {0}\ncaseName: {1}", new Object[] {caseDir, caseName}); + + String configFilePath = caseDir + File.separator + caseName + ".aut"; + + XMLCaseManagement xmlcm = new XMLCaseManagement(); + xmlcm.create(caseDir, caseName); // create a new XML config file + xmlcm.writeFile(); + + String dbPath = caseDir + File.separator + "autopsy.db"; + SleuthkitCase db = SleuthkitCase.newCase(dbPath); + + Case newCase = new Case(caseName, configFilePath, xmlcm, db); + + changeCase(newCase); + } + + /** + * Opens the existing case (open the XML config file) + * + * @param configFilePath the path of the configuration file that's opened + * @throws Exception + */ + static void open(String configFilePath) throws Exception { + Log.get(Case.class).log(Level.INFO, "Opening case.\nconfigFilePath: {0}", configFilePath); + + try { + XMLCaseManagement xmlcm = new XMLCaseManagement(); + + xmlcm.open(configFilePath); // open and load the config file to the document handler in the XML class + xmlcm.writeFile(); // write any changes to the config file + + String caseName = xmlcm.getCaseName(); + // if the caseName is "", case / config file can't be opened + if (caseName.equals("")) { + throw new Exception("Case name is blank."); + } + + String caseDir = xmlcm.getCaseDirectory(); + String dbPath = caseDir + File.separator + "autopsy.db"; + SleuthkitCase db = SleuthkitCase.openCase(dbPath); + + Case openedCase = new Case(caseName, configFilePath, xmlcm, db); + + changeCase(openedCase); + + } catch (Exception ex) { + // close the previous case if there's any + CaseCloseAction closeCase = SystemAction.get(CaseCloseAction.class); + closeCase.actionPerformed(null); + throw ex; + } + } + + /** + * Adds the image to the current case after it has been added to the DB + * + * @param imgPaths the paths of the image that being added + * @param imgId the ID of the image that being added + * @param timeZone the timeZone of the image where it's added + */ + void addImage(String[] imgPaths, long imgId, String timeZone) throws Exception { + Log.get(this.getClass()).log(Level.INFO, "Adding image to Case. imgPaths: {0} ID: {1} TimeZone: {2}", new Object[]{Arrays.toString(imgPaths), imgId, timeZone}); + + try { + xmlcm.addImage(imgPaths, imgId, timeZone); // add the image to the document handler in the XML class and to the config file + xmlcm.writeFile(); // write any changes to the config file + Image newImage = db.getImageById(imgId); + pcs.firePropertyChange(CASE_ADD_IMAGE, null, newImage); // the new value is the instance of the image + } catch (Exception ex) { + // throw an error here + throw ex; + } + } + + /** + * Get the underlying SleuthkitCase instance from the Sleuth Kit bindings + * library. + * @return + */ + public SleuthkitCase getSleuthkitCase() { + return this.db; + } + + /** + * Closes this case. This methods close the xml and clear all the fields. + */ + void closeCase() throws Exception { + changeCase(null); + + try { + this.xmlcm.close(); // close the xmlcm + this.db.close(); + } catch (Exception e) { + throw new Exception("Error while trying to close the current case.", e); + } + } + + /** + * Delete this case. This methods delete all folders and files of this case. + */ + boolean deleteCase(File caseDir) { + Log.get(this.getClass()).log(Level.FINE, "Deleting case.\ncaseDir: {0}", caseDir); + + try { + + xmlcm.close(); // close the xmlcm + boolean result = deleteCaseDirectory(caseDir); // delete the directory + + RecentCases.getInstance().removeRecentCase(this.name, this.configFilePath); // remove it from the recent case + Case.changeCase(null); + return result; + } catch (Exception ex) { + // TODO: change to using exceptions instead of return value. + // throw an error here + Logger logger = Logger.getLogger(Case.class.getName()); + logger.log(Level.SEVERE, "Error deleting the current case.", ex); + return false; + } + } + + /** + * Updates the case name. + * + * @param oldCaseName the old case name that wants to be updated + * @param oldPath the old path that wants to be updated + * @param newCaseName the new case name + * @param newPath the new path + */ + void updateCaseName(String oldCaseName, String oldPath, String newCaseName, String newPath) throws Exception { + try { + xmlcm.setCaseName(newCaseName); // set the case + name = newCaseName; // change the local value + RecentCases.getInstance().updateRecentCase(oldCaseName, oldPath, newCaseName, newPath); // update the recent case + + pcs.firePropertyChange(CASE_NAME, oldCaseName, newCaseName); + } catch (Exception e) { + throw new Exception("Error while trying to update the case name.", e); + } + } + +// Not dealing with removing images for now. +// /** +// * Removes the image from this case +// * +// * @param givenID the ID of the image to be removed +// * @param givenPath the path of the image to be removed +// */ +// void removeImage(int givenID, String givenPath) throws Exception { +// Log.get(this.getClass()).log(Level.FINE, "Removing image.\ngivenID: {0}\ngivenPath: {1}", new Object[] {givenID, givenPath}); +// +// String[] tempPaths = xmlcm.getImageSet(givenID); +// String tempDb = xmlcm.getImageSetDbPath(givenID); +// +// if (tempPaths[0].equals(givenPath)) { +// xmlcm.removeImageSet(givenID); // make the changes in the config file +// try { +// xmlcm.writeFile(); +// } catch (Exception ex) { +// throw new Exception("Error while trying to remove the image from this case.", ex); +// } +// +// Image img = imageIdToData.get(givenID).image; // save the image that we want to delete temporarily +// +// imageIdToData.remove(givenID); +// +// pcs.firePropertyChange(CASE_DEL_IMAGE, givenID, img); // the old value is the image ID that removed, the new value is the instance of the image +// +// img.getSleuthkit().closeConnection(); // to make sure that we close the connection +// +// // need to remove the database as well?? +// File database = new File(tempDb); +// boolean test = database.delete(); // delete the database of the image that we remove +// if (!test) { +// database.deleteOnExit(); // delete on exit if the delete is not successful +// } +// } else { +// // throw an error here +// Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Couldn't remove image.", new Exception("Couldn't find the image in this case.")); +// } +// } + + + /** + * Checks whether there is a current case open. + * + * @return True if a case is open. + */ + public static boolean existsCurrentCase() { + return currentCase != null; + } + + /** + * Uses the given path to store it as the configuration file path + * + * @param givenPath the given config file path + */ + private void setConfigFilePath(String givenPath) { + configFilePath = givenPath; + } + + /** + * Get the config file path in the given path + * + * @return configFilePath the path of the configuration file + */ + String getConfigFilePath() { + return configFilePath; + } + + /** + * Returns the current version of Autopsy + * @return autopsyVer + */ + public static String getAutopsyVersion() { + return autopsyVer; + } + + /** + * Gets the application name + * @return appName + */ + public static String getAppName() { + return appName; + } + + /** + * Gets the case name + * @return name + */ + public String getName() { + return name; + } + + /** + * Gets the case directory path + * @return caseDirectoryPath + */ + public String getCaseDirectory() { + if (xmlcm == null) { + return ""; + } else { + return xmlcm.getCaseDirectory(); + } + } + + /** + * Gets the full path to the temp directory of this case + * @return tempDirectoryPath + */ + public String getTempDirectory() { + if (xmlcm == null) { + return ""; + } else { + return xmlcm.getTempDir(); + } + } + + /** + * get the created date of this case + * @return case creation date + */ + public String getCreatedDate() { + if (xmlcm == null) { + return ""; + } else { + return xmlcm.getCreatedDate(); + } + } + + + /** + * get the PropertyChangeSupport of this class + * @return PropertyChangeSupport + */ + public static PropertyChangeSupport getPropertyChangeSupport() { + return pcs; + } + + + String[] getImagePaths(int imgID) { + return xmlcm.getImageSet(imgID); + } + + /** + * get all the image id in this case + * @return imageIDs + */ + public int[] getImageIDs() { + if (xmlcm == null) { + return new int[0]; + } else { + return xmlcm.getImageIDs(); + } + } + + /** + * Count the root objects. + * @return The number of total root objects in this case. + */ + public int getRootObjectsCount() { + return getRootObjects().size(); + } + + /** + * Get the data model Content objects in the root of this case's hierarchy. + * @return a list of the root objects + */ + public List<Content> getRootObjects() { + try { + return db.getRootObjects(); + } catch (TskException ex) { + throw new RuntimeException("Error getting root objects.", ex); + } + } + + /** + * Gets the time zone(s) of the image(s) in this case. + * + * @return time zones the set of time zones + */ + public Set<TimeZone> getTimeZone() { + if (xmlcm == null) { + return new HashSet<TimeZone>(); + } else { + return xmlcm.getTimeZone(); + } + } + + public static synchronized void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + public static synchronized void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + /** + * convert the image Path to array string + * @param imgPath the image path + * @return imgPath the converted image path + */ + public static String[] convertImgPath(String imgPath) { + String[] result; + String unsplitPaths = imgPath; + int count = 0; + + for (int i = 0; i < unsplitPaths.length(); i++) { + if (unsplitPaths.charAt(i) == '\"') { + count++; + } + } + + if (count != 0) { + result = new String[count / 2]; + int start = 0; + int current = 0; + for (int i = 0; i < count / 2; i++) { + while (unsplitPaths.charAt(current) != '\"') { + current++; + } + start = current; + current++; + while (unsplitPaths.charAt(current) != '\"') { + current++; + } + result[i] = unsplitPaths.substring(start + 1, current); + current++; + } + } else { + result = new String[1]; + result[0] = unsplitPaths; + } + + return result; + } + + /** + * Check if all the images from the given image path exist. + * @param imgPaths the image paths + * @return isExist whether the multiple paths exist + */ + public static boolean checkMultiplePathExist(String[] imgPaths) { + boolean result = false; + int totalLength = imgPaths.length; + if (totalLength > 0) { + result = true; + for (int i = 0; i < totalLength; i++) { + if (new File(imgPaths[i]).exists()) { + result = result && true; + } else { + result = result && false; + } + } + } + return result; + } + + /** + * Convert the Java timezone ID to the "formatted" string that can be + * accepted by the C/C++ code. + * Example: "America/New_York" converted to "EST5EDT", etc + * + * @param timezoneID + * @return + */ + public static String convertTimeZone(String timezoneID) { + String result = ""; + + TimeZone zone = TimeZone.getTimeZone(timezoneID); + int offset = zone.getRawOffset() / 1000; + int hour = offset / 3600; + + DateFormat dfm = new SimpleDateFormat("z"); + dfm.setTimeZone(zone); + boolean hasDaylight = zone.useDaylightTime(); + String first = dfm.format(new Date(2010, 1, 1)).substring(0, 3); // make it only 3 letters code + String second = dfm.format(new Date(2011, 6, 6)).substring(0, 3); // make it only 3 letters code + int mid = hour * -1; + result = first + Integer.toString(mid); + if (hasDaylight) { + result = result + second; + } + + return result; + } + + /* The methods below are used to manage the case directories (creating, checking, deleting, etc) */ + /** + * to create the case directory + * @param caseDir the case directory path + * @param caseName the case name + * @return boolean whether the case directory is successfully created or not + */ + static boolean createCaseDirectory(String caseDir, String caseName) { + boolean result = false; + + try { + result = (new File(caseDir)).mkdirs(); // create root case Directory + + // create the folders inside the case directory + result = result && (new File(caseDir + File.separator + XMLCaseManagement.EXPORT_FOLDER_RELPATH)).mkdir() + && (new File(caseDir + File.separator + XMLCaseManagement.LOG_FOLDER_RELPATH)).mkdir() + && (new File(caseDir + File.separator + XMLCaseManagement.TEMP_FOLDER_RELPATH)).mkdir(); + + return result; + } catch (Exception e) { + // TODO: change to use execptions instead of return values for error handling + return false; + } + } + + /** + * delete the given case directory + * @param casePath the case path + * @return boolean whether the case directory is successfully deleted or not + */ + static boolean deleteCaseDirectory(File casePath) { + if (casePath.exists()) { + File[] files = casePath.listFiles(); + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + deleteCaseDirectory(files[i]); + } else { + files[i].delete(); + } + } + } + return (casePath.delete()); + } + + /** + * Invoke the creation of startup dialog window. + */ + static public void invokeStartupDialog() { + boolean showDialog = true; + String propFilePath = RecentCases.getPropertiesFilePath(); + + // before showing the startup dialog, check if it has been disabled or not by the user + try { + // try to load the property from the properties file in the home directory + InputStream inputStream = new FileInputStream(propFilePath); + //InputStream inputStream = getClass().getResourceAsStream("Case.properties"); // old variable (can be deleted if no longer needed) + properties.load(inputStream); + + String temp = properties.getProperty(propStartup); + if (temp != null) { + showDialog = !temp.equals("false"); + } else { + // if it's null, we have to write the properties + + // update the properties + properties.setProperty(propStartup, "true"); + + // write the properties file + try { + properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), ""); + } catch (Exception ex) { + Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex); + } + } + } catch (Exception ex) { + // if cannot load it, we create a new properties file without any data inside it + properties.setProperty(propStartup, "true"); + + try { + // create the directory and property file to store it + File output = new File(propFilePath); + + // if the properties file doesn't exist, we create a new one. + if (!output.exists()) { + File parent = new File(output.getParent()); + if (!parent.exists()) { + parent.mkdirs(); // create the parent directory if it doesn't exist + } + output.createNewFile(); // create the properties file + FileOutputStream fos = new FileOutputStream(output); + properties.store(fos, ""); + } // if the output exist, we just add the properties + else { + properties.setProperty(propStartup, "true"); + + // write the properties file + try { + properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), ""); + } catch (Exception ex3) { + Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex3); + } + } + } catch (Exception ex2) { + Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not create the property file.", ex2); + } + } + + if (showDialog) { + StartupWindow.getInstance().display(); + } + } + + + + /** + * Call if there are no images in the case. Displays + * a dialog offering to add one. + */ + private void noRootObjectsNotification() throws TskException { + NotifyDescriptor nd = new NotifyDescriptor( + "This case contains no images. Would you like to add one?", + "No images in case", NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.INFORMATION_MESSAGE, + null, + NotifyDescriptor.YES_OPTION); + if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION) { + Lookup.getDefault().lookup(AddImageAction.class).actionPerformed(null); + } + } + + /** + * Get the properties. + * + * @return properties + */ + public Properties getProperties() { + return properties; + } + + /** + * Checks if a String is a valid case name + * @param caseName the candidate String + * @return true if the candidate String is a valid case name + */ + static public boolean isValidName(String caseName) { + return !(caseName.contains("\\") || caseName.contains("/") || caseName.contains(":") + || caseName.contains("*") || caseName.contains("?") || caseName.contains("\"") + || caseName.contains("<") || caseName.contains(">") || caseName.contains("|")); + } + + static private void clearTempFolder() { + File tempFolder = new File(currentCase.getTempDirectory()); + if (tempFolder.isDirectory()) { + File[] files = tempFolder.listFiles(); + if (files.length > 0) { + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + deleteCaseDirectory(files[i]); + } else { + files[i].delete(); + } + } + } + } + } + + private static class CaseListener implements PropertyChangeListener { + + CaseListener() { + pcs = new PropertyChangeSupport(this); + pcs.addPropertyChangeListener(this); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object oldValue = evt.getOldValue(); + Object newValue = evt.getNewValue(); + + + if (changed.equals(Case.CASE_CURRENT_CASE)) { + try { + if (newValue != null) { // new case is open + Case newCase = (Case) newValue; + + // clear the temp folder when the case is created / opened + Case.clearTempFolder(); + + // enable these menus + CallableSystemAction.get(AddImageAction.class).setEnabled(true); + CallableSystemAction.get(CaseCloseAction.class).setEnabled(true); + CallableSystemAction.get(CasePropertiesAction.class).setEnabled(true); + CallableSystemAction.get(CaseDeleteAction.class).setEnabled(true); // Delete Case menu + + if (newCase.getRootObjectsCount() > 0) { + // open all top components + CoreComponentControl.openCoreWindows(); + } else { + // close all top components + CoreComponentControl.closeCoreWindows(); + // notify user + newCase.noRootObjectsNotification(); + } + } else { // case is closed + // disable these menus + CallableSystemAction.get(AddImageAction.class).setEnabled(false); // Add Image menu + CallableSystemAction.get(CaseCloseAction.class).setEnabled(false); // Case Close menu + CallableSystemAction.get(CasePropertiesAction.class).setEnabled(false); // Case Properties menu + CallableSystemAction.get(CaseDeleteAction.class).setEnabled(false); // Delete Case menu + + // close all top components + CoreComponentControl.closeCoreWindows(); + + Frame f = WindowManager.getDefault().getMainWindow(); + f.setTitle(Case.getAppName()); // set the window name to just application name + } + } catch (TskException ex) { + Log.get(CaseListener.class).log(Level.WARNING, "Error handling change in current case.", ex); + } + } + + + // changed in the case name + if (changed.equals(Case.CASE_NAME)) { + String oldCaseName = oldValue.toString(); + String newCaseName = newValue.toString(); + + // update case name + if (!newCaseName.equals("")) { + Frame f = WindowManager.getDefault().getMainWindow(); + f.setTitle(newCaseName + " - " + Case.getAppName()); // set the window name to the new value + } + } + + // if the image is added to the case + if (changed.equals(Case.CASE_ADD_IMAGE)) { + // open all top components + CoreComponentControl.openCoreWindows(); + } + + // if the image is removed from the case + if (changed.equals(Case.CASE_DEL_IMAGE)) { + // no more image left in this case + if (currentCase.getRootObjectsCount() == 0) { + // close all top components + CoreComponentControl.closeCoreWindows(); + } + + } + + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseCloseAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseCloseAction.java new file mode 100644 index 0000000000..fdfa3be36b --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseCloseAction.java @@ -0,0 +1,132 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.Action; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The action to close the current Case. This class should be disabled on + * creation and it will be enabled on new case creation or case opened. + */ +public final class CaseCloseAction extends CallableSystemAction implements Presenter.Toolbar{ + + JButton toolbarButton = new JButton(); + + /** + * The constructor for this class + */ + public CaseCloseAction() { + putValue("iconBase", "org/sleuthkit/autopsy/images/close-icon.png"); // put the icon + putValue(Action.NAME, NbBundle.getMessage(CaseCloseAction.class, "CTL_CaseCloseAct")); // put the action Name + + // set action of the toolbar button + toolbarButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + CaseCloseAction.this.actionPerformed(e); + } + }); + + this.setEnabled(false); + } + + /** + * Closes the current opened case. + * + * @param e the action event for this method + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + if (Case.existsCurrentCase() == false) + return; + + Case result = Case.getCurrentCase(); + try { + result.closeCase(); + } catch (Exception ex) { + Logger.getLogger(CaseCloseAction.class.getName()).log(Level.SEVERE, "Error closing case.", ex); + } + } + + /** + * This method does nothing. Use the "actionPerformed(ActionEvent e)" instead of this method. + */ + @Override + public void performAction() { + } + + /** + * Gets the name of this action. This may be presented as an item in a menu. + * + * @return actionName + */ + @Override + public String getName() { + return NbBundle.getMessage(CaseCloseAction.class, "CTL_CaseCloseAct"); + } + + /** + * Gets the HelpCtx associated with implementing object + * + * @return HelpCtx or HelpCtx.DEFAULT_HELP + */ + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + /** + * Returns the toolbar component of this action + * + * @return component the toolbar button + */ + @Override + public Component getToolbarPresenter() { + ImageIcon icon = new ImageIcon(getClass().getResource("close-icon.png")); + toolbarButton.setIcon(icon); + return toolbarButton; + } + + /** + * Set this action to be enabled/disabled + * + * @param value whether to enable this action or not + */ + @Override + public void setEnabled(boolean value){ + super.setEnabled(value); + toolbarButton.setEnabled(value); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseConfigFileInterface.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseConfigFileInterface.java new file mode 100644 index 0000000000..3e94393e0d --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseConfigFileInterface.java @@ -0,0 +1,42 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +/** + * NOTE: NOTHING ACTUALLY USES THIS + * + * The interface for the classes that edit the case configuration file + */ +//TODO: check that this can just be deleted. +interface CaseConfigFileInterface { + public void open(String conFilePath) throws Exception; // opens the confiuation store (XML, DB...) + public void writeFile() throws Exception; // writes out the configuration to store + public void close() throws Exception; // close and clear the document handler + public int[] getImageIDs() throws Exception; // returns a list of image IDs and names + public int getNextImageID() throws Exception; // returns the next free ID to be assigned to new image, and increments the internal counter + + // all the get and set methods + public String getCaseName() throws Exception; // get the case name + public void setCaseName(String caseName) throws Exception; // set the case name + + // public void getXXX(); // methods to get the case attributes + // public void setXXX(); // methods to set the case attributes + +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java new file mode 100644 index 0000000000..523b6c6249 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java @@ -0,0 +1,117 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.Action; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; +import org.openide.util.actions.CallableSystemAction; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The action to delete the current Case. This class should be disabled on + * creation and it will be enabled on new case creation or case opened. + */ +public final class CaseDeleteAction extends CallableSystemAction { + + private JPanel caller; // for error handling + + /** + * The constructor for this class + */ + public CaseDeleteAction() { + putValue(Action.NAME, NbBundle.getMessage(CaseDeleteAction.class, "CTL_CaseDeleteAction")); // put the action Name + this.setEnabled(false); + } + + /** + * Deletes the current opened case. + * @param e + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + Case currentCase = Case.getCurrentCase(); + File configFile = new File(currentCase.getConfigFilePath()); + File caseFolder = new File(configFile.getParent()); + String caseName = currentCase.getName(); + if(!caseFolder.exists()){ + // throw an error + Logger logger = Logger.getLogger(CaseDeleteAction.class.getName()); + logger.log(Level.WARNING, "Couldn't delete case.", new Exception("The case directory doesn't exist.")); + } + else{ + // show the confirmation first to close the current case and open the "New Case" wizard panel + String closeCurrentCase = "Are you sure want to close and delete this case? \n Case Name: " + caseName + "\n Case Directory: "+ caseFolder.getPath(); + NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + d.setValue(NotifyDescriptor.NO_OPTION); + + Object res = DialogDisplayer.getDefault().notify(d); + if(res != null && res == DialogDescriptor.YES_OPTION){ + boolean success = Case.getCurrentCase().deleteCase(caseFolder); // delete the current case + + // show notification whether the case has been deleted or it failed to delete... + if(!success){ + JOptionPane.showMessageDialog(caller, "The delete action can't be fully completed because the folder or file in it is open by another program.\n \nClose the folder and file and try again or you can delete the case manually.", "Error: Folder In Use", JOptionPane.ERROR_MESSAGE); // throw an error + } + else{ + CasePropertiesAction.closeCasePropertiesWindow(); // because the "Delete Case" button is in the "CaseProperties" window, we have to close that window when we delete the case. + JOptionPane.showMessageDialog(caller, "Case " + caseName + " has been deleted."); + } + } + } + } + + /** + * This method does nothing. Use the "actionPerformed(ActionEvent e)" instead of this method. + */ + @Override + public void performAction() { + // Note: I use the actionPerformed above instead of this method + } + + /** + * Gets the name of this action. This may be presented as an item in a menu. + * @return actionName + */ + @Override + public String getName() { + return NbBundle.getMessage(CaseDeleteAction.class, "CTL_CaseDeleteAction"); + } + + /** + * Gets the HelpCtx associated with implementing object + * @return HelpCtx or HelpCtx.DEFAULT_HELP + */ + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseNewAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseNewAction.java new file mode 100644 index 0000000000..89d51ea2a8 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseNewAction.java @@ -0,0 +1,48 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.openide.util.actions.SystemAction; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The action to create a new case. This action class is always enabled. + * + * @author jantonius + */ +@ServiceProvider(service = CaseNewAction.class) +public final class CaseNewAction implements ActionListener { + + private NewCaseWizardAction wizard = SystemAction.get(NewCaseWizardAction.class); + + /** + * Calls the "New Case" wizard panel action. + * @param e + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + wizard.performAction(); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java new file mode 100644 index 0000000000..48ebfeb639 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java @@ -0,0 +1,86 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The action to open a existing case. This class is always enabled. + * + * @author jantonius + */ +@ServiceProvider(service = CaseOpenAction.class) +public final class CaseOpenAction implements ActionListener { + + JFileChooser fc = new JFileChooser(); + GeneralFilter autFilter = new GeneralFilter(new String[]{".aut"}, "AUTOPSY File (*.aut)", false); + + /** The constructor */ + public CaseOpenAction() { + fc.setDragEnabled(false); + fc.setFileSelectionMode(JFileChooser.FILES_ONLY); + fc.setMultiSelectionEnabled(false); + fc.addChoosableFileFilter(autFilter); + } + + /** + * Pop-up the File Chooser to open the existing case (.aut file) + * + * @param e the action event + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + + int retval = fc.showOpenDialog((Component) e.getSource()); + if (retval == JFileChooser.APPROVE_OPTION) { + String path = fc.getSelectedFile().getPath(); + + // check if the file exists + if (!new File(path).exists()) { + JOptionPane.showMessageDialog(null, "Error: File doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); + this.actionPerformed(e); // show the dialog box again + } else { + // try to close Startup window if there's one + try { + StartupWindow.getInstance().close(); + } catch (Exception ex) { + // no need to show the error message to the user. + // TODO: But maybe put the error message in the log in the future. + } + try { + Case.open(path); // open the case + } catch (Exception ex) { + Logger.getLogger(CaseOpenAction.class.getName()).log(Level.SEVERE, "Error opening case.", ex); + } + } + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java new file mode 100644 index 0000000000..6a5235e7e9 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesAction.java @@ -0,0 +1,139 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.HashMap; +import java.util.logging.Level; +import javax.swing.Action; +import javax.swing.JDialog; +import javax.swing.JFrame; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; +import org.openide.util.actions.CallableSystemAction; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The action to pop up the Case Properties Form window. By using this form, + * user can update the case properties (for example: updates the case name and + * removes the image from the current case) + * + * @author jantonius + */ +public final class CasePropertiesAction extends CallableSystemAction { + + private static JDialog popUpWindow; + + /** + * The CasePropertiesAction constructor + */ + CasePropertiesAction() { + putValue(Action.NAME, NbBundle.getMessage(CasePropertiesAction.class, "CTL_CasePropertiesAction")); // put the action Name + this.setEnabled(false); + } + + /** + * Pop-up the Case Properties Form window where user can change the case + * properties (example: update case name and remove the image from the case) + */ + @Override + public void performAction() { + Log.noteAction(this.getClass()); + + try { + // create the popUp window for it + String title = "Case Properties"; + final JFrame frame = new JFrame(title); + popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal + + + // get the information that needed + Case currentCase = Case.getCurrentCase(); + String caseName = currentCase.getName(); + String crDate = currentCase.getCreatedDate(); + String caseDir = currentCase.getCaseDirectory(); + int totalImage = currentCase.getRootObjectsCount(); + + // put the image paths information into hashmap + HashMap<Integer, String[]> imgPaths = new HashMap<Integer, String[]>(); + int[] imgIDs = currentCase.getImageIDs(); + + for (int i = 0; i < totalImage; i++) { + int imgID = imgIDs[i]; + String[] imagePaths = currentCase.getImagePaths(imgID); + if (imagePaths != null) { + imgPaths.put(imgID, imagePaths); + } + } + + // create the case properties form + CasePropertiesForm cpf = new CasePropertiesForm(currentCase, crDate, caseDir, imgPaths); + + // add the command to close the window to the button on the Case Properties form / panel + cpf.setOKButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + popUpWindow.dispose(); + } + }); + + // add the case properties form / panel to the popup window + popUpWindow.add(cpf); + popUpWindow.pack(); + popUpWindow.setResizable(false); + + // set the location of the popUp Window on the center of the screen + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + double w = popUpWindow.getSize().getWidth(); + double h = popUpWindow.getSize().getHeight(); + popUpWindow.setLocation((int) ((screenDimension.getWidth() - w) / 2), (int) ((screenDimension.getHeight() - h) / 2)); + + popUpWindow.setVisible(true); + } catch (Exception ex) { + Log.get(CasePropertiesAction.class).log(Level.WARNING, "Error displaying Case Properties window.", ex); + } + } + + /** + * Gets the name of this action. This may be presented as an item in a menu. + * @return actionName + */ + @Override + public String getName() { + return NbBundle.getMessage(CasePropertiesAction.class, "CTL_CasePropertiesAction"); + } + + /** + * Gets the HelpCtx associated with implementing object + * @return HelpCtx or HelpCtx.DEFAULT_HELP + */ + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + static void closeCasePropertiesWindow() { + popUpWindow.dispose(); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.form b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.form new file mode 100644 index 0000000000..a37c13a2ba --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.form @@ -0,0 +1,254 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <NonVisualComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextArea" name="jTextArea1"> + <Properties> + <Property name="columns" type="int" value="20"/> + <Property name="rows" type="int" value="5"/> + </Properties> + </Component> + </SubComponents> + </Container> + </NonVisualComponents> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="casePropLabel" pref="440" max="32767" attributes="0"/> + <Component id="genInfoLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="caseDirLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="crDateLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="caseNameLabel" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jScrollPane2" pref="246" max="32767" attributes="0"/> + <Component id="caseNameTextField" alignment="0" pref="246" max="32767" attributes="1"/> + <Component id="crDateTextField" alignment="0" pref="246" max="32767" attributes="1"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="updateCaseNameButton" max="32767" attributes="1"/> + <Component id="deleteCaseButton" alignment="0" max="32767" attributes="1"/> + </Group> + </Group> + <Component id="imgInfoLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imagesTableScrollPane" alignment="0" pref="440" max="32767" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="191" max="-2" attributes="0"/> + <Component id="OKButton" min="-2" pref="78" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="casePropLabel" min="-2" pref="33" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="genInfoLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="caseNameLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="caseNameTextField" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="updateCaseNameButton" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="crDateLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="crDateTextField" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="caseDirLabel" min="-2" max="-2" attributes="0"/> + <Component id="jScrollPane2" min="-2" pref="40" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="39" max="-2" attributes="0"/> + <Component id="imgInfoLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="deleteCaseButton" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imagesTableScrollPane" min="-2" pref="170" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="OKButton" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="17" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="casePropLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="24" style="1"/> + </Property> + <Property name="horizontalAlignment" type="int" value="0"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.casePropLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="caseNameLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.caseNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="crDateLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.crDateLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="caseDirLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.caseDirLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="crDateTextField"> + <Properties> + <Property name="editable" type="boolean" value="false"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.crDateTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="caseNameTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.caseNameTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="updateCaseNameButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.updateCaseNameButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="updateCaseNameButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="genInfoLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.genInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgInfoLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.imgInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="OKButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.OKButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Container class="javax.swing.JScrollPane" name="imagesTableScrollPane"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="imagesTable"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="2" rowCount="0"> + <Column editable="false" title="Path" type="java.lang.Object"/> + <Column editable="true" title="Remove" type="java.lang.Object"/> + </Table> + </Property> + <Property name="showHorizontalLines" type="boolean" value="false"/> + <Property name="showVerticalLines" type="boolean" value="false"/> + <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> + <TableHeader reorderingAllowed="false" resizingAllowed="true"/> + </Property> + <Property name="updateSelectionOnSort" type="boolean" value="false"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JScrollPane" name="jScrollPane2"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextArea" name="caseDirTextArea"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="f0" green="f0" red="f0" type="rgb"/> + </Property> + <Property name="columns" type="int" value="20"/> + <Property name="editable" type="boolean" value="false"/> + <Property name="rows" type="int" value="1"/> + <Property name="requestFocusEnabled" type="boolean" value="false"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="deleteCaseButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CasePropertiesForm.deleteCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="deleteCaseButtonActionPerformed"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java new file mode 100644 index 0000000000..44c5dbc8b0 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CasePropertiesForm.java @@ -0,0 +1,399 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CasePropertiesForm.java + * + * Created on Mar 14, 2011, 1:48:20 PM + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionListener; +import java.io.File; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.table.DefaultTableModel; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.actions.CallableSystemAction; + +/** + * The form where user can change / update the properties of the current case. + * + * @author jantonius + */ +class CasePropertiesForm extends javax.swing.JPanel{ + + Case current = null; + private static JPanel caller; // panel for error + + // Shrink a path to fit in targetLength (if necessary), by replaceing part + // of the path with "...". Ex: "C:\Users\bob\...\folder\other\Image.img" + private String shrinkPath(String path, int targetLength) { + if(path.length() > targetLength){ + String fill = "..."; + + int partsLength = targetLength - fill.length(); + + String front = path.substring(0, partsLength/4); + int frontSep = front.lastIndexOf(File.separatorChar); + if (frontSep != -1) { + front = front.substring(0, frontSep+1); + } + + String back = path.substring(partsLength*3/4); + int backSep = back.indexOf(File.separatorChar); + if (backSep != -1) { + back = back.substring(backSep); + } + return back + fill + front; + } else { + return path; + } + } + + + /** Creates new form CasePropertiesForm */ + CasePropertiesForm(Case currentCase, String crDate, String caseDir, Map<Integer,String[]> imgPaths) { + initComponents(); + caseNameTextField.setText(currentCase.getName()); + crDateTextField.setText(crDate); + caseDirTextArea.setText(caseDir); + + current = currentCase; + + int totalImages = imgPaths.size(); + + // create the headers and add all the rows + String[] headers = {"Path"}; + String[][] rows = new String[totalImages][]; + + int i = 0; + for(int key : imgPaths.keySet()){ + String path = imgPaths.get(key)[0]; + String shortenPath = shrinkPath(path, 70); + rows[i++] = new String[]{shortenPath}; + } + + // create the table inside with the imgPaths information + DefaultTableModel model = new DefaultTableModel(rows, headers) + { + @Override + // make the cells in the FileContentTable "read only" + public boolean isCellEditable(int row, int column){ + return false; + //return column == lastColumn; // make the last column (Remove button), only the editable + } + }; + imagesTable.setModel(model); + +// // set the size of the remove column +// TableColumn removeCol = imagesTable.getColumnModel().getColumn(lastColumn); +// removeCol.setPreferredWidth(75); +// removeCol.setMaxWidth(75); +// removeCol.setMinWidth(75); +// removeCol.setResizable(false); + +// // create the delete action to remove the image from the current case +// Action delete = new AbstractAction() +// { +// @Override +// public void actionPerformed(ActionEvent e) +// { +// // get the image path +// JTable table = (JTable)e.getSource(); +// int modelRow = Integer.valueOf(e.getActionCommand()); +// String removeColumn = table.getValueAt(modelRow, lastColumn).toString(); +// // get the image ID +// int selectedID = Integer.parseInt(removeColumn.substring(0, removeColumn.indexOf('|'))); +// String imagePath = removeColumn.substring(removeColumn.indexOf('|') + 1); +// +// // throw the confirmation first +// String confMsg = "Are you sure want to remove image \"" + imagePath + "\" from this case?"; +// NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); +// d.setValue(NotifyDescriptor.NO_OPTION); +// +// Object res = DialogDisplayer.getDefault().notify(d); +// // if user select "Yes" +// if(res != null && res == DialogDescriptor.YES_OPTION){ +// // remove the image in the case class and in the xml config file +// try { +// current.removeImage(selectedID, imagePath); +// } catch (Exception ex) { +// Logger.getLogger(CasePropertiesForm.class.getName()).log(Level.WARNING, "Error: couldn't remove image.", ex); +// } +// // remove the row of the image path +// ((DefaultTableModel)table.getModel()).removeRow(modelRow); +// } +// } +// }; +// +// ButtonColumn buttonColumn = new ButtonColumn(imagesTable, delete, 1, "Remove"); +// buttonColumn.setMnemonic(KeyEvent.VK_D); + } + + /** This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); + casePropLabel = new javax.swing.JLabel(); + caseNameLabel = new javax.swing.JLabel(); + crDateLabel = new javax.swing.JLabel(); + caseDirLabel = new javax.swing.JLabel(); + crDateTextField = new javax.swing.JTextField(); + caseNameTextField = new javax.swing.JTextField(); + updateCaseNameButton = new javax.swing.JButton(); + genInfoLabel = new javax.swing.JLabel(); + imgInfoLabel = new javax.swing.JLabel(); + OKButton = new javax.swing.JButton(); + imagesTableScrollPane = new javax.swing.JScrollPane(); + imagesTable = new javax.swing.JTable(); + jScrollPane2 = new javax.swing.JScrollPane(); + caseDirTextArea = new javax.swing.JTextArea(); + deleteCaseButton = new javax.swing.JButton(); + + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + jScrollPane1.setViewportView(jTextArea1); + + casePropLabel.setFont(new java.awt.Font("Tahoma", 1, 24)); + casePropLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + casePropLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.casePropLabel.text")); // NOI18N + + caseNameLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseNameLabel.text")); // NOI18N + + crDateLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.crDateLabel.text")); // NOI18N + + caseDirLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseDirLabel.text")); // NOI18N + + crDateTextField.setEditable(false); + crDateTextField.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.crDateTextField.text")); // NOI18N + + caseNameTextField.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseNameTextField.text")); // NOI18N + + updateCaseNameButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.updateCaseNameButton.text")); // NOI18N + updateCaseNameButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + updateCaseNameButtonActionPerformed(evt); + } + }); + + genInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); + genInfoLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.genInfoLabel.text")); // NOI18N + + imgInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); + imgInfoLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.imgInfoLabel.text")); // NOI18N + + OKButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.OKButton.text")); // NOI18N + + imagesTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Path", "Remove" + } + ) { + boolean[] canEdit = new boolean [] { + false, true + }; + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return canEdit [columnIndex]; + } + }); + imagesTable.setShowHorizontalLines(false); + imagesTable.setShowVerticalLines(false); + imagesTable.getTableHeader().setReorderingAllowed(false); + imagesTable.setUpdateSelectionOnSort(false); + imagesTableScrollPane.setViewportView(imagesTable); + + caseDirTextArea.setBackground(new java.awt.Color(240, 240, 240)); + caseDirTextArea.setColumns(20); + caseDirTextArea.setEditable(false); + caseDirTextArea.setRows(1); + caseDirTextArea.setRequestFocusEnabled(false); + jScrollPane2.setViewportView(caseDirTextArea); + + deleteCaseButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.deleteCaseButton.text")); // NOI18N + deleteCaseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deleteCaseButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(casePropLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE) + .addComponent(genInfoLabel) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(caseDirLabel) + .addComponent(crDateLabel) + .addComponent(caseNameLabel)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE) + .addComponent(caseNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE) + .addComponent(crDateTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(updateCaseNameButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(deleteCaseButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addComponent(imgInfoLabel) + .addComponent(imagesTableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE))) + .addGroup(layout.createSequentialGroup() + .addGap(191, 191, 191) + .addComponent(OKButton, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(casePropLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(genInfoLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(caseNameLabel) + .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(updateCaseNameButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(crDateLabel) + .addComponent(crDateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(caseDirLabel) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(39, 39, 39) + .addComponent(imgInfoLabel)) + .addComponent(deleteCaseButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imagesTableScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(OKButton) + .addContainerGap(17, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * Updates the case name. + * + * @param evt The action event + */ + private void updateCaseNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateCaseNameButtonActionPerformed + String oldCaseName = Case.getCurrentCase().getName(); + String newCaseName = caseNameTextField.getText(); + //String oldPath = caseDirTextArea.getText() + File.separator + oldCaseName + ".aut"; + //String newPath = caseDirTextArea.getText() + File.separator + newCaseName + ".aut"; + + // check if the old and new case name is not equal + if(!oldCaseName.equals(newCaseName)){ + + // check if the case name is empty + if(newCaseName.trim().equals("")){ + JOptionPane.showMessageDialog(caller, "The caseName cannot be empty.", "Error", JOptionPane.ERROR_MESSAGE); + } + else{ + // check if case Name contain one of this following symbol: + // \ / : * ? " < > | + if(newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":") || + newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"") || + newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")){ + String errorMsg = "The Case Name cannot contain any of this following symbol: \\ / : * ? \" < > |"; + JOptionPane.showMessageDialog(caller, errorMsg, "Error", JOptionPane.ERROR_MESSAGE); + } + else{ + // ask for the confirmation first + String confMsg = "Are you sure want to update the case name from \"" + oldCaseName + "\" to \"" + newCaseName + "\"?"; + NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + d.setValue(NotifyDescriptor.NO_OPTION); + + Object res = DialogDisplayer.getDefault().notify(d); + if(res != null && res == DialogDescriptor.YES_OPTION){ + // if user select "Yes" + String oldPath = current.getConfigFilePath(); + try { + current.updateCaseName(oldCaseName, oldPath , newCaseName, oldPath); + } catch (Exception ex) { + Logger.getLogger(CasePropertiesForm.class.getName()).log(Level.WARNING, "Error: problem updating case name.", ex); + } + } + } + } + } + }//GEN-LAST:event_updateCaseNameButtonActionPerformed + + private void deleteCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteCaseButtonActionPerformed + CallableSystemAction.get(CaseDeleteAction.class).actionPerformed(evt); + }//GEN-LAST:event_deleteCaseButtonActionPerformed + + + /** + * Sets the listener for the OK button + * + * @param e The action listener + */ + public void setOKButtonActionListener(ActionListener e){ + OKButton.addActionListener(e); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton OKButton; + private javax.swing.JLabel caseDirLabel; + private javax.swing.JTextArea caseDirTextArea; + private javax.swing.JLabel caseNameLabel; + private javax.swing.JTextField caseNameTextField; + private javax.swing.JLabel casePropLabel; + private javax.swing.JLabel crDateLabel; + private javax.swing.JTextField crDateTextField; + private javax.swing.JButton deleteCaseButton; + private javax.swing.JLabel genInfoLabel; + private javax.swing.JTable imagesTable; + private javax.swing.JScrollPane imagesTableScrollPane; + private javax.swing.JLabel imgInfoLabel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JTextArea jTextArea1; + private javax.swing.JButton updateCaseNameButton; + // End of variables declaration//GEN-END:variables + +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.form b/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.form new file mode 100644 index 0000000000..99dabefd58 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.form @@ -0,0 +1,299 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="startupCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="345" max="32767" attributes="0"/> + <Component id="closeButton" min="-2" pref="73" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="logoPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="editorPanel" max="32767" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="editorPanel" max="32767" attributes="0"/> + <Component id="logoPanel" alignment="0" max="32767" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="20" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="closeButton" alignment="1" min="-2" max="-2" attributes="0"/> + <Component id="startupCheckBox" alignment="1" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JCheckBox" name="startupCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.startupCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="closeButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.closeButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="closeButtonActionPerformed"/> + </Events> + </Component> + <Container class="javax.swing.JPanel" name="logoPanel"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="ff" red="ff" type="rgb"/> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace pref="13" max="32767" attributes="0"/> + <Component id="autopsyLogo" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="55" max="-2" attributes="0"/> + <Component id="autopsyLogo" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="131" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="autopsyLogo"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/Autopsy_logo.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.autopsyLogo.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="this.autopsyLogo.setText("");"/> + </AuxValues> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="editorPanel"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="welcomeLabel" min="-2" max="-2" attributes="0"/> + <Component id="autopsyLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="openCaseButton" alignment="1" min="-2" max="-2" attributes="1"/> + <Component id="newCaseButton" alignment="1" min="-2" max="-2" attributes="1"/> + <Component id="openRecentButton" alignment="1" min="-2" pref="70" max="-2" attributes="1"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="openLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="createNewLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="openRecentLabel" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace pref="124" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="welcomeLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="autopsyLabel" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + <Component id="newCaseButton" min="-2" pref="68" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="openCaseButton" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="openRecentButton" min="-2" pref="67" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="17" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="1"> + <EmptySpace min="-2" pref="41" max="-2" attributes="0"/> + <Component id="createNewLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="72" max="-2" attributes="0"/> + <Component id="openLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="70" max="32767" attributes="0"/> + <Component id="openRecentLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="45" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="welcomeLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.welcomeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="autopsyLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="32" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.autopsyLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="this.autopsyLabel.setText(Case.getAppName());"/> + </AuxValues> + </Component> + <Component class="javax.swing.JButton" name="newCaseButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/new-icon.png"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.newCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="null" type="code"/> + </Property> + <Property name="borderPainted" type="boolean" value="false"/> + <Property name="contentAreaFilled" type="boolean" value="false"/> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[70, 70]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="newCaseButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="openCaseButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/open-icon.png"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openCaseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="null" type="code"/> + </Property> + <Property name="borderPainted" type="boolean" value="false"/> + <Property name="contentAreaFilled" type="boolean" value="false"/> + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> + <Insets value="[1, 1, 1, 1]"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[70, 70]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openCaseButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="openRecentButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/casemodule/open-recent-icon.png"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="null" type="code"/> + </Property> + <Property name="borderPainted" type="boolean" value="false"/> + <Property name="contentAreaFilled" type="boolean" value="false"/> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[70, 70]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openRecentButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="createNewLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="13" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.createNewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="openLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="13" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="openRecentLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="13" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="CueBannerPanel.openRecentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java b/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java new file mode 100644 index 0000000000..4672933f19 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/CueBannerPanel.java @@ -0,0 +1,333 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileOutputStream; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JPanel; +import org.openide.util.Lookup; + +/** + * + * @author jantonius + */ +public class CueBannerPanel extends javax.swing.JPanel { + + final private static String title = "Open Recent Case"; + final private static JFrame frame = new JFrame(title); + final static JDialog recentCasesWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal + + // for error handling + private static JPanel caller = new JPanel(); + private String className = this.getClass().toString(); + + /** Creates new form CueBannerPanel */ + public CueBannerPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + startupCheckBox = new javax.swing.JCheckBox(); + closeButton = new javax.swing.JButton(); + logoPanel = new javax.swing.JPanel(); + autopsyLogo = new javax.swing.JLabel(); + this.autopsyLogo.setText(""); + editorPanel = new javax.swing.JPanel(); + welcomeLabel = new javax.swing.JLabel(); + autopsyLabel = new javax.swing.JLabel(); + this.autopsyLabel.setText(Case.getAppName()); + newCaseButton = new javax.swing.JButton(); + openCaseButton = new javax.swing.JButton(); + openRecentButton = new javax.swing.JButton(); + createNewLabel = new javax.swing.JLabel(); + openLabel = new javax.swing.JLabel(); + openRecentLabel = new javax.swing.JLabel(); + + startupCheckBox.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.startupCheckBox.text")); // NOI18N + + closeButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.closeButton.text")); // NOI18N + closeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + closeButtonActionPerformed(evt); + } + }); + + logoPanel.setBackground(new java.awt.Color(255, 255, 255)); + + autopsyLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/Autopsy_logo.gif"))); // NOI18N + autopsyLogo.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.autopsyLogo.text")); // NOI18N + + javax.swing.GroupLayout logoPanelLayout = new javax.swing.GroupLayout(logoPanel); + logoPanel.setLayout(logoPanelLayout); + logoPanelLayout.setHorizontalGroup( + logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(logoPanelLayout.createSequentialGroup() + .addContainerGap(13, Short.MAX_VALUE) + .addComponent(autopsyLogo) + .addContainerGap()) + ); + logoPanelLayout.setVerticalGroup( + logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(logoPanelLayout.createSequentialGroup() + .addGap(55, 55, 55) + .addComponent(autopsyLogo) + .addContainerGap(131, Short.MAX_VALUE)) + ); + + welcomeLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); + welcomeLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.welcomeLabel.text")); // NOI18N + + autopsyLabel.setFont(new java.awt.Font("Tahoma", 1, 32)); // NOI18N + autopsyLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.autopsyLabel.text")); // NOI18N + + newCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/new-icon.png"))); // NOI18N + newCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.newCaseButton.text")); // NOI18N + newCaseButton.setBorder(null); + newCaseButton.setBorderPainted(false); + newCaseButton.setContentAreaFilled(false); + newCaseButton.setPreferredSize(new java.awt.Dimension(70, 70)); + newCaseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + newCaseButtonActionPerformed(evt); + } + }); + + openCaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/open-icon.png"))); // NOI18N + openCaseButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openCaseButton.text")); // NOI18N + openCaseButton.setBorder(null); + openCaseButton.setBorderPainted(false); + openCaseButton.setContentAreaFilled(false); + openCaseButton.setMargin(new java.awt.Insets(1, 1, 1, 1)); + openCaseButton.setPreferredSize(new java.awt.Dimension(70, 70)); + openCaseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + openCaseButtonActionPerformed(evt); + } + }); + + openRecentButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/casemodule/open-recent-icon.png"))); // NOI18N + openRecentButton.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentButton.text")); // NOI18N + openRecentButton.setBorder(null); + openRecentButton.setBorderPainted(false); + openRecentButton.setContentAreaFilled(false); + openRecentButton.setPreferredSize(new java.awt.Dimension(70, 70)); + openRecentButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + openRecentButtonActionPerformed(evt); + } + }); + + createNewLabel.setFont(new java.awt.Font("Tahoma", 0, 13)); + createNewLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.createNewLabel.text")); // NOI18N + + openLabel.setFont(new java.awt.Font("Tahoma", 0, 13)); + openLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openLabel.text")); // NOI18N + + openRecentLabel.setFont(new java.awt.Font("Tahoma", 0, 13)); + openRecentLabel.setText(org.openide.util.NbBundle.getMessage(CueBannerPanel.class, "CueBannerPanel.openRecentLabel.text")); // NOI18N + + javax.swing.GroupLayout editorPanelLayout = new javax.swing.GroupLayout(editorPanel); + editorPanel.setLayout(editorPanelLayout); + editorPanelLayout.setHorizontalGroup( + editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(editorPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(welcomeLabel) + .addComponent(autopsyLabel) + .addGroup(editorPanelLayout.createSequentialGroup() + .addGap(19, 19, 19) + .addGroup(editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(openCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(newCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(openRecentButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(openLabel) + .addComponent(createNewLabel) + .addComponent(openRecentLabel)))) + .addContainerGap(124, Short.MAX_VALUE)) + ); + editorPanelLayout.setVerticalGroup( + editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(editorPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(welcomeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(autopsyLabel) + .addGroup(editorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(editorPanelLayout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(newCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(openCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(openRecentButton, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(17, 17, 17)) + .addGroup(editorPanelLayout.createSequentialGroup() + .addGap(41, 41, 41) + .addComponent(createNewLabel) + .addGap(72, 72, 72) + .addComponent(openLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 70, Short.MAX_VALUE) + .addComponent(openRecentLabel) + .addGap(45, 45, 45)))) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(startupCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 345, Short.MAX_VALUE) + .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(logoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(editorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(editorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(logoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(20, 20, 20) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(closeButton) + .addComponent(startupCheckBox)) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + + private void newCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newCaseButtonActionPerformed + Lookup.getDefault().lookup(CaseNewAction.class).actionPerformed(evt); + }//GEN-LAST:event_newCaseButtonActionPerformed + + private void openCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openCaseButtonActionPerformed + Lookup.getDefault().lookup(CaseOpenAction.class).actionPerformed(evt); + }//GEN-LAST:event_openCaseButtonActionPerformed + + private void openRecentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openRecentButtonActionPerformed + + // open the recent cases dialog + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + + // set the popUp window / JFrame + recentCasesWindow.setSize(750, 400); + + int w = recentCasesWindow.getSize().width; + int h = recentCasesWindow.getSize().height; + + // set the location of the popUp Window on the center of the screen + recentCasesWindow.setLocation((screenDimension.width - w)/2, (screenDimension.height - h)/2); + + OpenRecentCasePanel welcomeWindow = new OpenRecentCasePanel(); + + // add the command to close the window to the button on the Volume Detail Panel + welcomeWindow.setCloseButtonActionListener( new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + recentCasesWindow.dispose(); + } + }); + + recentCasesWindow.add(welcomeWindow); + recentCasesWindow.pack(); + recentCasesWindow.setResizable(false); + recentCasesWindow.setVisible(true); + }//GEN-LAST:event_openRecentButtonActionPerformed + + private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed + if(this.startupCheckBox.isSelected()){ + + Case current = Case.getCurrentCase(); + Properties properties = current.getProperties(); + + // update the properties + properties.setProperty(current.propStartup, "false"); + + // write the properties file + try{ + properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), ""); + } + catch(Exception ex){ + Logger.getLogger(this.className).log(Level.WARNING, "Error: Could not update the properties file.", ex); + } + } + }//GEN-LAST:event_closeButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel autopsyLabel; + private javax.swing.JLabel autopsyLogo; + private javax.swing.JButton closeButton; + private javax.swing.JLabel createNewLabel; + private javax.swing.JPanel editorPanel; + private javax.swing.JPanel logoPanel; + private javax.swing.JButton newCaseButton; + private javax.swing.JButton openCaseButton; + private javax.swing.JLabel openLabel; + private javax.swing.JButton openRecentButton; + private javax.swing.JLabel openRecentLabel; + private javax.swing.JCheckBox startupCheckBox; + private javax.swing.JLabel welcomeLabel; + // End of variables declaration//GEN-END:variables + + /** + * Sets the Close button action listener. + * + * @param e the action listener + */ + public void setCloseButtonActionListener(ActionListener e){ + closeButton.addActionListener(e); + } + + /** + * Close the open recent cases window. + */ + public static void closeOpenRecentCasesWindow(){ + //startupWindow.setVisible(false); + recentCasesWindow.dispose(); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java b/Case/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java new file mode 100644 index 0000000000..390a09beb6 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/GeneralFilter.java @@ -0,0 +1,84 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.io.File; +import java.util.regex.Pattern; +import javax.swing.filechooser.FileFilter; + +/** + * FileFilter helper class. Matches files based on extension + */ +public class GeneralFilter extends FileFilter{ + + String[] ext; + String desc; + boolean isMultiple; // whether the filter can accept multiple files. + + public GeneralFilter(String[] ext, String desc, boolean isMultiple){ + this.ext = ext; + this.desc = desc; + this.isMultiple = isMultiple; + } + + /** + * Checks whether the given file is accepted by this filter. + * + * @param f the given file + * @return boolean return true if accepted, false otherwise + */ + @Override + public boolean accept(File f) { + if(f.isDirectory()){ + return true; + } + else{ + Boolean result = false; + String name = f.getName().toLowerCase(); + + if(isMultiple){ + for(int i = 0; i < ext.length; i++){ + String regex = ext[i]; + if (Pattern.matches(regex, name)){ + result = result || true; + } + } + } + else{ + for(int i = 0; i < ext.length; i++){ + if (name.endsWith(ext[i])) + result = result || true; + } + } + return result; + } + } + + /** + * Returns the description of this file filter + * + * @return desc return the description + */ + @Override + public String getDescription() { + return desc; + } + +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form new file mode 100644 index 0000000000..1fb4b5286f --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form @@ -0,0 +1,136 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="caseDirLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="caseParentDirTextField" min="-2" pref="296" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="caseNameLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="26" max="-2" attributes="0"/> + <Component id="caseNameTextField" min="-2" pref="296" max="-2" attributes="0"/> + </Group> + <Component id="caseDirTextField" alignment="0" min="-2" pref="380" max="-2" attributes="1"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="caseDirBrowseButton" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="31" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="caseNameLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="caseNameTextField" alignment="3" min="-2" pref="20" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="caseDirLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="caseParentDirTextField" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="caseDirBrowseButton" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="caseDirTextField" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="32" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.jLabel1.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="caseNameLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseNameLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="caseDirLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseDirLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="caseNameTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseNameTextField.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="caseParentDirTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseParentDirTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="caseDirBrowseButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseDirBrowseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="caseDirBrowseButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.jLabel2.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="caseDirTextField"> + <Properties> + <Property name="editable" type="boolean" value="false"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="NewCaseVisualPanel1.caseDirTextField.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java new file mode 100644 index 0000000000..111f331134 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java @@ -0,0 +1,251 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +/** + * The wizard panel for the new case creation. + * + * @author jantonius + */ +final class NewCaseVisualPanel1 extends JPanel implements DocumentListener{ + + private JFileChooser fc = new JFileChooser(); + private NewCaseWizardPanel1 wizPanel; + + NewCaseVisualPanel1(NewCaseWizardPanel1 wizPanel) { + initComponents(); + this.wizPanel = wizPanel; + caseNameTextField.getDocument().addDocumentListener(this); + caseParentDirTextField.getDocument().addDocumentListener(this); + } + + /** + * Returns the name of the this panel. This name will be shown on the left + * panel of the "New Case" wizard panel. + * + * @return name the name of this panel + */ + @Override + public String getName() { + return "Case Info"; + } + + /** + * Gets the case name that the user types on the case name text field. + * + * @return caseName the case name from the case name text field + */ + public String getCaseName(){ + return this.caseNameTextField.getText(); + } + + /** + * Gets the base directory that the user typed on the base directory text field. + * + * @return baseDirectory the base directory from the case dir text field + */ + public String getCaseParentDir(){ + return this.caseParentDirTextField.getText(); + } + + /** This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jLabel1 = new javax.swing.JLabel(); + caseNameLabel = new javax.swing.JLabel(); + caseDirLabel = new javax.swing.JLabel(); + caseNameTextField = new javax.swing.JTextField(); + caseParentDirTextField = new javax.swing.JTextField(); + caseDirBrowseButton = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + caseDirTextField = new javax.swing.JTextField(); + + jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.jLabel1.text_1")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(caseNameLabel, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseNameLabel.text_1")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(caseDirLabel, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseDirLabel.text")); // NOI18N + + caseNameTextField.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseNameTextField.text_1")); // NOI18N + + caseParentDirTextField.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseParentDirTextField.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(caseDirBrowseButton, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseDirBrowseButton.text")); // NOI18N + caseDirBrowseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + caseDirBrowseButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.jLabel2.text_1")); // NOI18N + + caseDirTextField.setEditable(false); + caseDirTextField.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseDirTextField.text_1")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(caseDirLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(caseParentDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 296, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(caseNameLabel) + .addGap(26, 26, 26) + .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 296, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(caseDirTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(caseDirBrowseButton))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(31, 31, 31) + .addComponent(jLabel1) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(caseNameLabel) + .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(caseDirLabel) + .addComponent(caseParentDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(caseDirBrowseButton)) + .addGap(18, 18, 18) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(caseDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(32, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * The action when the Browse button is pressed. The browse button will pop + * up the file chooser window to choose where the user wants to save the + * case directory. + * + * @param evt the action event + */ + private void caseDirBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_caseDirBrowseButtonActionPerformed + // show the directory chooser where the case directory will be created + fc.setDragEnabled(false); + if(!caseParentDirTextField.getText().trim().equals("")){ + fc.setSelectedFile(new File(caseParentDirTextField.getText())); + } + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + //fc.setSelectedFile(new File("C:\\Program Files\\")); + //disableTextField(fc); // disable all the text field on the file chooser + + int returnValue = fc.showSaveDialog((Component)evt.getSource()); + if(returnValue == JFileChooser.APPROVE_OPTION){ + String path = fc.getSelectedFile().getPath(); + caseParentDirTextField.setText(path); // put the path to the textfield + } + }//GEN-LAST:event_caseDirBrowseButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton caseDirBrowseButton; + private javax.swing.JLabel caseDirLabel; + private javax.swing.JTextField caseDirTextField; + private javax.swing.JLabel caseNameLabel; + private javax.swing.JTextField caseNameTextField; + private javax.swing.JTextField caseParentDirTextField; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + // End of variables declaration//GEN-END:variables + + /** + * Gives notification that there was an insert into the document. The + * range given by the DocumentEvent bounds the freshly inserted region. + * + * @param e the document event + */ + @Override + public void insertUpdate(DocumentEvent e) { + this.wizPanel.fireChangeEvent(); + updateUI(e); + } + + /** + * Gives notification that a portion of the document has been + * removed. The range is given in terms of what the view last + * saw (that is, before updating sticky positions). + * + * @param e the document event + */ + @Override + public void removeUpdate(DocumentEvent e) { + this.wizPanel.fireChangeEvent(); + updateUI(e); + } + + /** + * Gives notification that an attribute or set of attributes changed. + * + * @param e the document event + */ + @Override + public void changedUpdate(DocumentEvent e) { + this.wizPanel.fireChangeEvent(); + updateUI(e); + } + + /** + * The "listener" that listens when the fields in this form are updated. + * This method is used to determine when to enable / disable the "Finish" button. + * + * @param e the document event + */ + public void updateUI(DocumentEvent e) { + + String caseName = this.caseNameTextField.getText(); + String caseDir = this.caseParentDirTextField.getText(); + + if(!caseName.equals("") && !caseDir.equals("")){ + caseDirTextField.setText( caseDir + File.separator + caseName); + wizPanel.setIsFinish(true); + } + else{ + caseDirTextField.setText(""); + wizPanel.setIsFinish(false); + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java new file mode 100644 index 0000000000..8e07f6fbd2 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardAction.java @@ -0,0 +1,157 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Component; +import java.awt.Dialog; +import java.text.MessageFormat; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JComponent; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.SystemAction; +import org.sleuthkit.autopsy.logging.Log; + +/** + * Action to open the New Case wizard. + */ +public final class NewCaseWizardAction extends CallableSystemAction { + + private WizardDescriptor.Panel[] panels; + + @Override + public void performAction() { + Log.noteAction(this.getClass()); + + + // there's a case open + if (Case.existsCurrentCase()) { + // show the confirmation first to close the current case and open the "New Case" wizard panel + String closeCurrentCase = "Do you want to save and close this case and proceed with the new case creation?"; + NotifyDescriptor d = new NotifyDescriptor.Confirmation(closeCurrentCase, "Warning: Closing the Current Case", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + d.setValue(NotifyDescriptor.NO_OPTION); + + Object res = DialogDisplayer.getDefault().notify(d); + if (res != null && res == DialogDescriptor.YES_OPTION) { + try { + Case.getCurrentCase().closeCase(); // close the current case + newCaseAction(); // start the new case creation process + } catch (Exception ex) { + Logger.getLogger(NewCaseWizardAction.class.getName()).log(Level.SEVERE, "Error closing case.", ex); + } + } + } else { + newCaseAction(); + } + } + + /** + * The method to perform new case creation + */ + private void newCaseAction() { + WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); + // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() + wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); + wizardDescriptor.setTitle("New Case Information"); + Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); + dialog.setVisible(true); + dialog.toFront(); + + + boolean finished = wizardDescriptor.getValue() == WizardDescriptor.FINISH_OPTION; // check if it finishes (it's not cancelled) + boolean isCancelled = wizardDescriptor.getValue() == WizardDescriptor.CANCEL_OPTION; // check if the "Cancel" button is pressed + + // if the finish button is pressed (not cancelled) + if (finished) { + // nothing to do, the Add Image dialog will pop up on its own because we've just opened a case with no images + } + + // if Cancel button is pressed + if (isCancelled) { + // if there's case opened, close the case + if (Case.existsCurrentCase()) { + // close the previous case if there's any + CaseCloseAction closeCase = SystemAction.get(CaseCloseAction.class); + closeCase.actionPerformed(null); + } + } + panels = null; // reset the panel + } + + /** + * Initialize panels representing individual wizard's steps and sets + * various properties for them influencing wizard appearance. + */ + private WizardDescriptor.Panel[] getPanels() { + if (panels == null) { + panels = new WizardDescriptor.Panel[]{ + new NewCaseWizardPanel1() + }; + String[] steps = new String[panels.length]; + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + // Default step name to component name of panel. Mainly useful + // for getting the name of the target chooser to appear in the + // list of steps. + steps[i] = c.getName(); + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + } + return panels; + } + + @Override + public String getName() { + return "New Case Wizard"; + } + + @Override + public String iconResource() { + return null; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + @Override + protected boolean asynchronous() { + return false; + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java new file mode 100644 index 0000000000..b28724dabe --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java @@ -0,0 +1,278 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.io.File; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.WizardDescriptor; +import org.openide.WizardValidationException; +import org.openide.util.HelpCtx; + +/** + * The "New Case" wizard panel with a component on it. This class represents + * data of wizard step. It defers creation and initialization of UI component + * of wizard panel into getComponent() method. + * + * @author jantonius + */ +class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel<WizardDescriptor> { + + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private NewCaseVisualPanel1 component; + private Boolean isFinish = false; + + /** + * Get the visual component for the panel. In this template, the component + * is kept separate. This can be more efficient: if the wizard is created + * but never displayed, or not all panels are displayed, it is better to + * create only those which really need to be visible. + * + * @return component the UI component of this wizard panel + */ + @Override + public NewCaseVisualPanel1 getComponent() { + if (component == null) { + component = new NewCaseVisualPanel1(this); + } + return component; + } + + /** + * Help for this panel. When the panel is active, this is used as the help + * for the wizard dialog. + * + * @return HelpCtx.DEFAULT_HELP the help for this panel + */ + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + /** + * Tests whether the panel is finished. If the panel is valid, the "Finish" + * button will be enabled. + * + * @return boolean true if all the fields are correctly filled, false otherwise + */ + @Override + public boolean isValid() { + // If it is always OK to press Next or Finish, then: + return isFinish; + // If it depends on some condition (form filled out...), then: + // return someCondition(); + // and when this condition changes (last form field filled in...) then: + // fireChangeEvent(); + // and uncomment the complicated stuff below. + } + private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 + + /** + * Adds a listener to changes of the panel's validity. + * + * @param l the change listener to add + */ + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + /** + * Removes a listener to changes of the panel's validity. + * + * @param l the change listener to move + */ + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + /** + * This method is auto-generated. It seems that this method is used to listen + * to any change in this wizard panel. + */ + protected final void fireChangeEvent() { + Iterator<ChangeListener> it; + synchronized (listeners) { + it = new HashSet<ChangeListener>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + /** + * Sets the isFinish variable in this class. isFinish variable is used to + * determine whether the Finish button should be disabled or not. + * + * @param isFinish the given parameter (boolean) + */ + public void setIsFinish(Boolean isFinish) { + this.isFinish = isFinish; + fireChangeEvent(); + } + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + /** + * Provides the wizard panel with the current data--either the default data + * or already-modified settings, if the user used the previous and/or next + * buttons. This method can be called multiple times on one instance of + * WizardDescriptor.Panel. + * + * @param settings the setting to be read from + */ + @Override + public void readSettings(WizardDescriptor settings) { + } + + /** + * Provides the wizard panel with the opportunity to update the settings + * with its current customized state. Rather than updating its settings + * with every change in the GUI, it should collect them, and then only save + * them when requested to by this method. This method can be called multiple + * times on one instance of WizardDescriptor.Panel. + * + * @param settings the setting to be stored to + */ + @Override + public void storeSettings(WizardDescriptor settings) { + settings.putProperty("caseName", getComponent().getCaseName()); + settings.putProperty("caseParentDir", getComponent().getCaseParentDir()); + } + + @Override + public void validate() throws WizardValidationException { + String caseName = getComponent().getCaseName(); + String caseParentDir = getComponent().getCaseParentDir(); + String caseDirPath = caseParentDir + File.separator + caseName; + + // check if case Name contain one of this following symbol: + // \ / : * ? " < > | + if (!Case.isValidName(caseName)) { + String errorMsg = "The Case Name cannot contain any of this following symbol: \\ / : * ? \" < > |"; + validationError(errorMsg); + } else { + // check if the directory exist + if (new File(caseDirPath).exists()) { + // throw a warning to enter new data or delete the existing directory + String errorMsg = "Case directory '" + caseDirPath + "' already exists."; + validationError(errorMsg); + } else { + // check if the "base" directory path is absolute + File baseDir = new File(caseParentDir); + if (baseDir.isAbsolute()) { + // when the base directory doesn't exist + if (!baseDir.exists()) { + // get confirmation to create directory + String confMsg = "The base directory \'" + caseParentDir + "\' doesn't exist. \n \n Do you want to make that directory?"; + NotifyDescriptor d2 = new NotifyDescriptor.Confirmation(confMsg, "Create directory", NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE); + d2.setValue(NotifyDescriptor.NO_OPTION); + + Object res2 = DialogDisplayer.getDefault().notify(d2); + if (res2 != null && res2 == DialogDescriptor.YES_OPTION) { + // if user say yes + try { + createDirectory(caseDirPath, caseName); + } catch (Exception ex) { + String errorMsg = "Error: Couldn't create directory."; + Logger.getLogger(NewCaseWizardAction.class.getName()).log(Level.WARNING, errorMsg, ex); + validationError(errorMsg); + } + } + if (res2 != null && res2 == DialogDescriptor.NO_OPTION) { + // if user say no + validationError("Prevented from creating base directory."); + } + } else { + try { + createDirectory(caseDirPath, caseName); + } catch (Exception ex) { + String errorMsg = "Error: Couldn't create directory."; + Logger.getLogger(NewCaseWizardAction.class.getName()).log(Level.WARNING, errorMsg, ex); + validationError(errorMsg); + } + } + } else { + // throw a notification + String errorMsg = "ERROR: The Base Directory that you entered is not valid.\nPlease enter a valid Base Directory."; + validationError(errorMsg); + } + } + } + } + + + private void validationError(String errorMsg) throws WizardValidationException { + throw new WizardValidationException(this.getComponent(), errorMsg, null); + } + + /* + * create the directory and create a new case + */ + private void createDirectory(final String caseDirPath, final String caseName) throws Exception { + // try to create the directory with the case name in the choosen parent directory + boolean success = Case.createCaseDirectory(caseDirPath, caseName); + + // check if the directory is successfully created + if (!success) { + + // delete the folder if we already created the folder and the error shows up + if (new File(caseDirPath).exists()) { + Case.deleteCaseDirectory(new File(caseDirPath)); + } + + String errorMsg = "ERROR: Could not create the case directory. \nPlease enter a valid Case Name and Directory."; + validationError(errorMsg); + } // the new case directory is successfully created + else { + // try to close Startup window if there's one + try { + StartupWindow.getInstance().close(); + } catch (Exception ex) { + Logger.getLogger(NewCaseWizardAction.class.getName()).log(Level.INFO, "Startup window didn't close as expected.", ex); + + } + + Case.create(caseDirPath, caseName); // create a new Case + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.form b/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.form new file mode 100644 index 0000000000..217feeb9bf --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.form @@ -0,0 +1,99 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="292" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="imagesTableScrollPane" pref="470" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="cancelButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="imagesTableScrollPane" min="-2" pref="170" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="cancelButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="OpenRecentCasePanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="cancelButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="OpenRecentCasePanel.cancelButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cancelButtonActionPerformed"/> + </Events> + </Component> + <Container class="javax.swing.JScrollPane" name="imagesTableScrollPane"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTable" name="imagesTable"> + <Properties> + <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor"> + <Table columnCount="3" rowCount="0"> + <Column editable="false" title="Case Name" type="java.lang.Object"/> + <Column editable="false" title="Path" type="java.lang.Object"/> + <Column editable="true" title="Open" type="java.lang.Object"/> + </Table> + </Property> + <Property name="showHorizontalLines" type="boolean" value="false"/> + <Property name="showVerticalLines" type="boolean" value="false"/> + <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> + <TableHeader reorderingAllowed="false" resizingAllowed="true"/> + </Property> + <Property name="updateSelectionOnSort" type="boolean" value="false"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java b/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java new file mode 100644 index 0000000000..4f0fc0903f --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java @@ -0,0 +1,213 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableColumn; + +/** + * Panel show from the splash dialog that shows recent cases and allows them + * to be opened. + */ +class OpenRecentCasePanel extends javax.swing.JPanel { + + static String[] caseName; + static String[] casePaths; + + OpenRecentCasePanel() { + initComponents(); + + caseName = RecentCases.getInstance().getRecentCaseNames(); + casePaths = RecentCases.getInstance().getRecentCasePaths(); + int totalRecentCases = RecentCases.getInstance().getTotalRecentCases(); + + // create the headers and add all the rows + String[] headers = {"Case Name", "Path", "Open"}; + String[][] rows = new String[totalRecentCases][]; + final int lastColumn = headers.length - 1; + + for(int i = 0; i < totalRecentCases; i++){ + String path = casePaths[i]; + String shortenPath = path; + if(path.length() > 50){ + shortenPath = shortenPath.substring(0, 10 + shortenPath.substring(10).indexOf(File.separator) + 1) + "..." + + shortenPath.substring((shortenPath.length() - 20) + shortenPath.substring(shortenPath.length() - 20).indexOf(File.separator)); + } + String[] thisRow = {caseName[i], shortenPath, path}; + rows[i] = thisRow; + //model.insertRow(i, row); + } + + // create the table inside with the imgPaths information + DefaultTableModel model = new DefaultTableModel(rows, headers) + { + @Override + // make the cells in the FileContentTable "read only" + public boolean isCellEditable(int row, int column){ + return column == lastColumn; // make the last column (Remove button), only the editable + } + }; + imagesTable.setModel(model); + + // set the size of the remove column + TableColumn removeCol = imagesTable.getColumnModel().getColumn(lastColumn); + removeCol.setPreferredWidth(75); + removeCol.setMaxWidth(75); + removeCol.setMinWidth(75); + removeCol.setResizable(false); + + // create the delete action to remove the image from the current case + Action open = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent e) + { + // get the image path + JTable table = (JTable)e.getSource(); + int modelRow = Integer.valueOf(e.getActionCommand()); + String removeColumn = table.getValueAt(modelRow, lastColumn).toString(); + + // try to close Startup and openRecentCase window if they exist + try{ + StartupWindow.getInstance().close(); + CueBannerPanel.closeOpenRecentCasesWindow(); + } + catch(Exception ex){ + // no need to show the error message to the user. + //TODO: But maybe put the error message in the log in the future. + } + + // Open the recent cases + try { + Case.open(removeColumn); // open the case + } catch (Exception ex) { + Logger.getLogger(OpenRecentCasePanel.class.getName()).log(Level.WARNING, "Error: couldn't open case.", ex); + } + } + }; + + ButtonColumn buttonColumn = new ButtonColumn(imagesTable, open, lastColumn, "Open"); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jLabel1 = new javax.swing.JLabel(); + cancelButton = new javax.swing.JButton(); + imagesTableScrollPane = new javax.swing.JScrollPane(); + imagesTable = new javax.swing.JTable(); + + jLabel1.setText(org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class, "OpenRecentCasePanel.jLabel1.text")); // NOI18N + + cancelButton.setText(org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class, "OpenRecentCasePanel.cancelButton.text")); // NOI18N + cancelButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cancelButtonActionPerformed(evt); + } + }); + + imagesTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Case Name", "Path", "Open" + } + ) { + boolean[] canEdit = new boolean [] { + false, false, true + }; + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return canEdit [columnIndex]; + } + }); + imagesTable.setShowHorizontalLines(false); + imagesTable.setShowVerticalLines(false); + imagesTable.getTableHeader().setReorderingAllowed(false); + imagesTable.setUpdateSelectionOnSort(false); + imagesTableScrollPane.setViewportView(imagesTable); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(292, 292, 292)) + .addGroup(layout.createSequentialGroup() + .addComponent(imagesTableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 470, Short.MAX_VALUE) + .addContainerGap())) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(cancelButton) + .addContainerGap()))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(imagesTableScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cancelButton) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_cancelButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton cancelButton; + private javax.swing.JTable imagesTable; + private javax.swing.JScrollPane imagesTableScrollPane; + private javax.swing.JLabel jLabel1; + // End of variables declaration//GEN-END:variables + + /** + * Sets the Close button action listener. + * + * @param e the action listener + */ + public void setCloseButtonActionListener(ActionListener e){ + this.cancelButton.addActionListener(e); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/RecentCases.java b/Case/src/org/sleuthkit/autopsy/casemodule/RecentCases.java new file mode 100644 index 0000000000..f91a9e8f96 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/RecentCases.java @@ -0,0 +1,442 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Deque; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JMenuItem; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; +import org.sleuthkit.autopsy.logging.Log; +import org.openide.filesystems.FileUtil; + +/** + * The action in this class is to clear the list of "Recent Cases". + * The constructor is called when the autopsy is running. + * All the method to create and modify the properties file are within this class + */ +public final class RecentCases extends CallableSystemAction implements Presenter.Menu { + + static final int LENGTH = 5; + static final String NAME_PROP_KEY = "LBL_RecentCase_Name"; + static final String PATH_PROP_KEY = "LBL_RecentCase_Path"; + static final RecentCase BLANK_RECENTCASE = new RecentCase("", ""); + // get the path of the case.properties file in the user directory + private final static String propFilePath = System.getProperty("netbeans.user") + File.separator + "autopsy.properties"; + + private final static RecentCases INSTANCE = new RecentCases(); + + private Properties properties; + private Deque<RecentCase> recentCases; // newest case is last case + + + /** + * Gets the instance of the RecentCases singleton. + * + * + * @return INSTANCE the RecentCases singleton + */ + static public RecentCases getInstance() { + return INSTANCE; + } + + static private Properties makeDefaults() { + Properties temp = new Properties(); + for (int i = 0; i < LENGTH; i++) { + temp.setProperty(nameKey(i), ""); + temp.setProperty(pathKey(i), ""); + } + + return temp; + } + + /** the constructor */ + private RecentCases() { + properties = new Properties(makeDefaults()); + try { + // try to load all the recent cases from the properties file in the home directory + InputStream inputStream = new FileInputStream(propFilePath); + properties.load(inputStream); + } catch (Exception ignore) { + // if cannot load it, we create a new properties file without any data inside it + try { + // create the directory and property file to store it + File output = new File(propFilePath); + if (!output.exists()) { + File parent = new File(output.getParent()); + if (!parent.exists()) { + parent.mkdirs(); + } + output.createNewFile(); + FileOutputStream fos = new FileOutputStream(output); + properties.store(fos, ""); + } else { + // if the property file already exist, throw an error that says cannot load that file + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not load the property file.", new Exception("The properties file already exist and can't load that file.")); + } + } catch (IOException ex2) { + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not create the property file.", ex2); + } + } + + + // Load recentCases from properties + recentCases = new LinkedList<RecentCase>(); + + for (int i = 0; i < LENGTH; i++) { + final RecentCase rc = new RecentCase(getName(i), getPath(i)); + if (!rc.equals(BLANK_RECENTCASE)) { + recentCases.add(rc); + } + } + } + + private static void validateCaseIndex(int i) { + if (i < 0 || i >= LENGTH) { + throw new IllegalArgumentException("Recent case index " + i + " is out of range."); + } + } + + private static String nameKey(int i) { + validateCaseIndex(i); + return NAME_PROP_KEY + Integer.toString(i + 1); + } + + private static String pathKey(int i) { + validateCaseIndex(i); + return PATH_PROP_KEY + Integer.toString(i + 1); + } + + private String getName(int i) { + return properties.getProperty(nameKey(i)); + } + + private String getPath(int i) { + return properties.getProperty(pathKey(i)); + } + + private void setName(int i, String name) { + properties.setProperty(nameKey(i), name); + } + + private void setPath(int i, String path) { + properties.setProperty(pathKey(i), path); + } + + private void setRecentCase(int i, RecentCase rc) { + setName(i, rc.name); + setPath(i, rc.path); + } + + private static final class RecentCase { + + String name, path; + + /** + * @param name The case name or "" if a blank placeholder case + * @param path A normalized path (via FileUtil.normalizePath(path)) or "" if a blank placeholder case + */ + private RecentCase(String name, String path) { + this.name = name; + this.path = path; + } + + /** + * Used when creating RecentCases with external data. The path must be + * normalized so that duplicate cases always have the same path. + * @param name The case name. + * @param unsafePath The (potentially un-normalized) case path. + * @return The created RecentCase.s + */ + static RecentCase createSafe(String name, String unsafePath) { + return new RecentCase(name, FileUtil.normalizePath(unsafePath)); + } + + // netbeans autogenerated hashCode + @Override + public int hashCode() { + int hash = 7; + hash = 13 * hash + (this.name != null ? this.name.hashCode() : 0); + hash = 13 * hash + (this.path != null ? this.path.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final RecentCase other = (RecentCase) obj; + if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { + return false; + } + if ((this.path == null) ? (other.path != null) : !this.path.equals(other.path)) { + return false; + } + return true; + } + } + + private void storeProperties() throws IOException { + properties.store(new FileOutputStream(new File(propFilePath)), ""); + } + + private void storeRecentCases() throws IOException { + int i = 0; + + // store however many recent cases exist + for (RecentCase rc : recentCases) { + setRecentCase(i, rc); + i++; + } + + // set the rest to blanks + while (i < LENGTH) { + setRecentCase(i, BLANK_RECENTCASE); + i++; + } + + storeProperties(); + } + + /** + * Gets a menu item that can present this action in a JMenu. + * + * @return menuItem the representation menu item for this action + */ + @Override + public JMenuItem getMenuPresenter() { + return new UpdateRecentCases(); + } + + /** + * This action is used to clear all the recent cases menu options. + * + * @param e the action event + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + UpdateRecentCases.hasRecentCase = false; + + recentCases.clear(); + + try { + // clear the properties file + storeRecentCases(); + } catch (Exception ex) { + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not clear the properties file.", ex); + } + } + + private void addRecentCase(RecentCase rc) { + // remove the case if it's already in the list + recentCases.remove(rc); + + // make space if it's needed + if (recentCases.size() == LENGTH) recentCases.remove(); + + recentCases.add(rc); + } + + /** + * Adds a recent case to the top of the list. If the case is already in the + * list, it will be removed before the new entry is added. + * + * @param name the name of the recent case to be added + * @param unsafePath the (potentially un-normalized) path of the case + * config file + */ + public void addRecentCase(String name, String unsafePath) { + RecentCase rc = RecentCase.createSafe(name, unsafePath); + + addRecentCase(rc); + + this.getMenuPresenter().setVisible(true); // invoke the contructor again + + try { + storeRecentCases(); + } catch (Exception ex) { + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex); + } + } + + /** + * This method is used to update the name and path of a RecentCase. + * + * @param oldName the old recent case name + * @param oldPath the old recent case config file path + * @param newName the new recent case name + * @param newPath the new recent case config file path + * @throws Exception + */ + public void updateRecentCase(String oldName, String oldPath, String newName, String newPath) throws Exception { + RecentCase oldRc = RecentCase.createSafe(oldName, oldPath); + RecentCase newRc = RecentCase.createSafe(newName, newPath); + + // remove all instances of the old recent case + recentCases.removeAll(Arrays.asList(oldRc)); + + addRecentCase(newRc); + + this.getMenuPresenter().setVisible(true); // invoke the contructor again + + try { + storeRecentCases(); + } catch (Exception ex) { + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex); + } + } + + /** + * Gets the total number of recent cases + * + * @return total total number of recent cases + */ + public int getTotalRecentCases() { + return recentCases.size(); + } + + /** + * This method is used to remove the selected name and path of the RecentCase + * + * @param name the case name to be removed from the recent case + * @param path the config file path to be removed from the recent case + */ + public void removeRecentCase(String name, String path) { + RecentCase rc = RecentCase.createSafe(name, path); + + // remove all instances of the old recent case + recentCases.removeAll(Arrays.asList(rc)); + + + this.getMenuPresenter().setVisible(true); // invoke the contructor again + + // write the properties file + try { + storeRecentCases(); + } catch (Exception ex) { + Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex); + } + } + + /** + * Gets the recent case names. + * + * @return caseNames An array String[LENGTH], newest case first, with any + * extra spots filled with "" + */ + public String[] getRecentCaseNames() { + String[] caseNames = new String[LENGTH]; + + Iterator<RecentCase> mostRecentFirst = recentCases.descendingIterator(); + int i = 0; + while (mostRecentFirst.hasNext()) { + caseNames[i] = mostRecentFirst.next().name; + i++; + } + + while (i < caseNames.length) { + caseNames[i] = ""; + i++; + } + + return caseNames; + } + + /** + * Gets the recent case paths. + * + * @return casePaths An array String[LENGTH], newest case first, with any + * extra spots filled with "" + */ + public String[] getRecentCasePaths() { + String[] casePaths = new String[LENGTH]; + + Iterator<RecentCase> mostRecentFirst = recentCases.descendingIterator(); + int i = 0; + while (mostRecentFirst.hasNext()) { + casePaths[i] = mostRecentFirst.next().path; + i++; + } + + while (i < casePaths.length) { + casePaths[i] = ""; + i++; + } + + return casePaths; + } + + + // TODO: really shouldn't be done like this; need one common properties tracker + /** + * Gets the properties file paths. + * + * @return propertyPath + */ + public static String getPropertiesFilePath() { + return propFilePath; + } + + /** + * This method does nothing. Use the actionPerformed instead of this method. + */ + @Override + public void performAction() { + } + + /** + * Gets the name of this action. This may be presented as an item in a menu. + * + * @return actionName + */ + @Override + public String getName() { + //return NbBundle.getMessage(RecentCases.class, "CTL_RecentCases"); + return "Clear Recent Cases"; + } + + /** + * Gets the HelpCtx associated with implementing object + * + * @return HelpCtx or HelpCtx.DEFAULT_HELP + */ + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/RecentItems.java b/Case/src/org/sleuthkit/autopsy/casemodule/RecentItems.java new file mode 100644 index 0000000000..8b944350dc --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/RecentItems.java @@ -0,0 +1,70 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import org.sleuthkit.autopsy.logging.Log; + +/** + * This class is used to add the action to the recent case menu item. When the + * the recent case menu is pressed, it should open that selected case. + */ +class RecentItems implements ActionListener { + + String caseName; + String casePath; + private JPanel caller; // for error handling + + /** the constructor */ + public RecentItems(String caseName, String casePath){ + this.caseName = caseName; + this.casePath = casePath; + } + + /** + * Opens the recent case. + * + * @param e the action event + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + // check if the file exists + if(caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())){ + // throw an error here + JOptionPane.showMessageDialog(caller, "Error: Case doesn't exist.", "Error", JOptionPane.ERROR_MESSAGE); + RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore + } + else { + try { + Case.open(casePath); // open the case + } catch (Exception ex) { + Logger.getLogger(RecentItems.class.getName()).log(Level.WARNING, "Error: Couldn't open recent case.", ex); + } + } + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java b/Case/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java new file mode 100644 index 0000000000..86f29c703b --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/StartupWindow.java @@ -0,0 +1,97 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JDialog; +import javax.swing.JFrame; + +/** + * Displays + */ +public final class StartupWindow extends JDialog { + + private static StartupWindow instance; + private static final String TITLE = "Welcome"; + private static Dimension DIMENSIONS = new Dimension(750, 400); + + private StartupWindow(JFrame frame, String title, boolean isModal) { + super(frame, title, isModal); + } + + /** + * Get the startup window + * @return the startup window singleton + */ + public static synchronized StartupWindow getInstance() { + if (StartupWindow.instance == null) { + JFrame frame = new JFrame(TITLE); + boolean isModal = true; + StartupWindow.instance = new StartupWindow(frame, TITLE, isModal); + } + + + return instance; + } + + /** + * Shows the startup window. + */ + public void display() { + + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + + // set the popUp window / JFrame + setSize(DIMENSIONS); + int w = this.getSize().width; + int h = this.getSize().height; + + // set the location of the popUp Window on the center of the screen + setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); + + CueBannerPanel welcomeWindow = new CueBannerPanel(); + + // add the command to close the window to the button on the Volume Detail Panel + welcomeWindow.setCloseButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + close(); + } + }); + + add(welcomeWindow); + pack(); + setResizable(false); + setVisible(true); + + } + + /** + * Closes the startup window. + */ + public void close() { + this.dispose(); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java b/Case/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java new file mode 100644 index 0000000000..7e219fd5c0 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/UpdateRecentCases.java @@ -0,0 +1,94 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import javax.swing.JComponent; +import javax.swing.JMenuItem; +import javax.swing.JSeparator; +import org.openide.awt.DynamicMenuContent; +import org.openide.util.actions.SystemAction; + +/** + * This class is used to change / update the list of recent cases dynamically. + */ +public class UpdateRecentCases extends JMenuItem implements DynamicMenuContent { + + int length; + static boolean hasRecentCase = false; + + /** the constructor */ + UpdateRecentCases(){ + length = RecentCases.LENGTH; + } + + /** + * Creates main menu/popup menu items. Null values will be later replaced by + * JSeparators. This method is called for popups and for menus. It's called + * each time a popup menu is constructed and just once for the main menu. + * Main menu updates happen through the synchMenuPresenters() method. + * + * @return + */ + @Override + public JComponent[] getMenuPresenters() { + String[] caseName = RecentCases.getInstance().getRecentCaseNames(); + String[] casePath = RecentCases.getInstance().getRecentCasePaths(); + JComponent[] comps = new JComponent[length + 2]; // + 2 for separator and clear menu + + // if it has the recent menus, add them to the component list + for (int i = 0; i < length; i++) { + if((!caseName[i].equals(""))){ + JMenuItem menuItem = new JMenuItem(caseName[i]); + menuItem.setActionCommand(caseName[i].toUpperCase()); + menuItem.addActionListener(new RecentItems(caseName[i], casePath[i])); + comps[i] = menuItem; + hasRecentCase = hasRecentCase || true; + } + } + + // if it has recent case, create clear menu + if(hasRecentCase){ + comps[length] = new JSeparator(); + JMenuItem clearMenu = new JMenuItem("Clear Recent Cases"); + clearMenu.addActionListener(SystemAction.get(RecentCases.class)); + comps[length+1] = clearMenu; + } + // otherwise, just create a disabled empty menu + else{ + comps = new JComponent[1]; + JMenuItem emptyMenu = new JMenuItem("-Empty-"); + emptyMenu.addActionListener(new RecentItems("", "")); + comps[0] = emptyMenu; + comps[0].setEnabled(false); + } + return comps; + } + + /** + * Updates main menu presenters. This method is called only by the main menu processing. + * + * @param jcs the previously used menu items returned by previous call to getMenuPresenters() or synchMenuPresenters() + * @return menu a new set of items to show in menu. Can be either an updated old set of instances or a completely new one. + */ + @Override + public JComponent[] synchMenuPresenters(JComponent[] jcs) { + return getMenuPresenters(); + } +} \ No newline at end of file diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java b/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java new file mode 100644 index 0000000000..3b8e85a215 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java @@ -0,0 +1,802 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.io.*; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; +import java.util.TimeZone; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.xml.parsers.*; +import javax.xml.transform.*; +import javax.xml.transform.dom.*; +import javax.xml.transform.stream.*; +import org.w3c.dom.*; + +/** + * + * This class is used to create, access, and modify the XML configuration file, + * where we store the information about the case and image(s). This class uses + * the document handler to store the information about the case. The document + * handler will be created / opened when the case configuration file is created/ + * opened. + * + * @author jantonius + */ +public class XMLCaseManagement implements CaseConfigFileInterface{ + final static String TOP_ROOT_NAME = "AutopsyCase"; + final static String CASE_ROOT_NAME = "Case"; + + // general metadata about the case file + final static String NAME = "Name"; + final static String CREATED_DATE_NAME = "CreatedDate"; + final static String MODIFIED_DATE_NAME = "ModifiedDate"; + final static String SCHEMA_VERSION_NAME = "SchemaVersion"; + final static String AUTOPSY_CRVERSION_NAME = "AutopsyCreatedVersion"; + final static String AUTOPSY_MVERSION_NAME = "AutopsySavedVersion"; + + // disk image paths + final static String IMAGES_NAME = "Images"; + final static String IMG_SET_NAME = "ImgSet"; + final static String IMG_PATH_NAME = "ImgPath"; + final static String IMG_DB_NAME = "ImgDb"; + final static String NEXT_ID_NAME = "NextID"; + + // image attribute + final static String IMG_SET_COUNT = "count"; + final static String IMG_SET_ID = "id"; + final static String IMG_PATH_ID = "idx"; + final static String TIMEZONE = "timezone"; + + // folders inside case directory + final static String LOG_FOLDER_NAME = "LogFolder"; + final static String LOG_FOLDER_RELPATH = "Log"; + final static String TEMP_FOLDER_NAME = "TempFolder"; + final static String TEMP_FOLDER_RELPATH = "Temp"; + final static String EXPORT_FOLDER_NAME = "ExportFolder"; + final static String EXPORT_FOLDER_RELPATH = "Export"; + + // folders attribute + final static String RELATIVE_NAME = "Relative"; // relevant path info + + // folder attr values + final static String RELATIVE_TRUE = "true"; // if it's a relative path + final static String RELATIVE_FALSE = "false"; // if it's not a relative path + + // the document + private Document doc; + + // general info + private DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss (z)"); + private String caseDirPath; // case directory path + private String caseName; // case name + private String schemaVersion = "1.0"; + private String autopsySavedVersion; + + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** The constructor */ + XMLCaseManagement() throws Exception { + String autopsyVer = Case.getAutopsyVersion(); +// System.setProperty("netbeans.buildnumber", autopsyVer); // set the current autopsy version // moved to CoreComponents installer + autopsySavedVersion = System.getProperty("netbeans.buildnumber"); + } + + /** + * Sets the case directory path of the case directory on the local variable + * + * @param givenPath the new path to be stored as case directory path + */ + private void setCaseDirPath(String givenPath){ + caseDirPath = givenPath; // change this to change the xml file if needed + } + + /** + * Sets the case Name on the XML configuration file + * + * @param givenCaseName the new case name to be set + */ + @Override + public void setCaseName(String givenCaseName) throws Exception { + // change this to change the xml file if needed + Element nameElement = (Element) getCaseElement().getElementsByTagName(NAME).item(0); + nameElement.setTextContent(givenCaseName); + doc.normalize(); + + // edit the modified data + String newDate = dateFormat.format(new Date()); + Element rootEl = getRootElement(); + rootEl.getElementsByTagName(MODIFIED_DATE_NAME).item(0).setTextContent(newDate); + + try { + writeFile(); + } catch (Exception ex) { + throw new Exception("Cannot update the case name in the XML config file.", ex); + } + } + + /** + * Sets the case name internally (on local variable in this class) + * + * @param givenCaseName the new case name + */ + private void setName(String givenCaseName){ + caseName = givenCaseName; // change this to change the xml file if needed + } + + /** + * Gets the case Name from the document handler + * + * @return caseName the case name from the document handler + */ + @Override + public String getCaseName(){ + if(doc == null){ + return ""; + } + else{ + Element nameElement = (Element) getCaseElement().getElementsByTagName(NAME).item(0); + String result = nameElement.getTextContent(); + return result; + } + } + + /** + * Gets the case directory path that's stored in this class + * + * @return caseDirPath the case directory path + */ + public String getCaseDirectory(){ + if(doc == null){ + return ""; + } + else{ + return caseDirPath; + } + // Note: change this to get the case name from the xml file if needed + } + + /** + * Gets the Root Element from the document handler + * + * @return rootElement the root element on the document handler + */ + private Element getRootElement(){ + if(doc != null){ + return doc.getDocumentElement(); + } + else{ + return null; // should throw error or exception + } + } + + /** + * Gets the created Date from the document handler + * + * @return createdDate the creation date of this case + */ + protected String getCreatedDate(){ + if(doc != null){ + Element crDateElement = (Element) getRootElement().getElementsByTagName(CREATED_DATE_NAME).item(0); + return crDateElement.getTextContent(); + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the Modified Date from the document handler + * + * @return modifiedDate the modification date of this case + */ + protected String getModifiedDate(){ + if(doc != null){ + Element mDateElement = (Element) getRootElement().getElementsByTagName(MODIFIED_DATE_NAME).item(0); + return mDateElement.getTextContent(); + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the Autopsy Created Version from the document handler + * + * @return createdVersion the version of autopsy when this case was created + */ + protected String getCreatedVersion(){ + if(doc != null){ + Element crVerElement = (Element) getRootElement().getElementsByTagName(AUTOPSY_CRVERSION_NAME).item(0); + return crVerElement.getTextContent(); + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the Autopsy Saved Version from the document handler + * + * @return savedVersion the latest version of autopsy when this case is saved + */ + protected String getSavedVersion(){ + if(doc != null){ + Element mVerElement = (Element) getRootElement().getElementsByTagName(AUTOPSY_MVERSION_NAME).item(0); + return mVerElement.getTextContent(); + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the Schema Version from the document handler + * + * @return schemaVersion the schema version of this XML configuration file + */ + protected String getSchemaVersion(){ + if(doc != null){ + Element schemaVerElement = (Element) getRootElement().getElementsByTagName(SCHEMA_VERSION_NAME).item(0); + return schemaVerElement.getTextContent(); + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the Case Element from the document handler + * + * @return caseElement the "Case" element + */ + private Element getCaseElement(){ + if(doc != null){ + return (Element) doc.getElementsByTagName(CASE_ROOT_NAME).item(0); + } + else{ + return null; // should throw error or exception + } + } + + /** + * Gets the full path to the log directory + * + * @return logDir the full path of the "Log" directory + */ + protected String getLogDir(){ + if(doc != null){ + Element logElement = (Element)getCaseElement().getElementsByTagName(LOG_FOLDER_NAME).item(0); + if(logElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){ + return caseDirPath + File.separator + logElement.getTextContent(); + } + else{ + return logElement.getTextContent(); + } + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the full path to the temp directory + * + * @return tempDir the full path of the "Temp" directory + */ + protected String getTempDir(){ + if(doc != null){ + Element tempElement = (Element)getCaseElement().getElementsByTagName(TEMP_FOLDER_NAME).item(0); + if(tempElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){ + return caseDirPath + File.separator + tempElement.getTextContent(); + } + else{ + return tempElement.getTextContent(); + } + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets the full path to the Export directory + * + * @return exportDir the full path of the "Export" directory + */ + protected String getExportDir(){ + if(doc != null){ + Element exportElement = (Element)getCaseElement().getElementsByTagName(EXPORT_FOLDER_NAME).item(0); + if(exportElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){ + return caseDirPath + File.separator + exportElement.getTextContent(); + } + else{ + return exportElement.getTextContent(); + } + } + else{ + return ""; // should throw error or exception + } + } + + /** + * Gets image Element from the document handler + * + * @return imageElement the "Image" element + */ + private Element getImagesElement(){ + if(doc != null){ + return (Element) doc.getElementsByTagName(IMAGES_NAME).item(0); + } + else{ + return null; // should throw error or exception + } + } + + /** + * Looks up for the Image Set Element in the document handler with the given + * image ID. + * + * @param id the image ID + * @return element the "ImageSet" element + */ + protected Element getImageSetElement(int id){ + if(doc != null){ + Element result = null; + int totalImageSet = getImageSetCount(); + + for(int i = 0; i < totalImageSet; i++){ + Element imageSetElement = (Element)getImagesElement().getElementsByTagName(IMG_SET_NAME).item(i); + int imgSetID = Integer.parseInt(imageSetElement.getAttribute(IMG_SET_ID)); + if(id == imgSetID){ + result = imageSetElement; + } + } + return result; + } + else{ + return null; //TODO: should throw error or exception + } + } + + /** + * Sets the ImgDb entry for corresponding image set in the document handler + * + * @param id the image ID + * @param path the image path + */ + protected void setImageSetDbPath(int id, String path){ + Element imgDbElement = (Element) getImageSetElement(id).getElementsByTagName(IMG_DB_NAME).item(0); + imgDbElement.setTextContent(path); + imgDbElement.setAttribute(RELATIVE_NAME, RELATIVE_TRUE); // depends on the path (relative or not) + + // if need to write the XML file immidiately, uncomment the code below + // writeFile(); + } + + /** + * Returns number of image sets in this case + * + * @return imageSetCount total number of imageSet in this case + */ + protected int getImageSetCount(){ + return getImagesElement().getElementsByTagName(IMG_SET_NAME).getLength(); + } + + /** + * Returns a set of image paths of the given image ID in this case + * + * @param id the image ID + * @return imagePaths the image paths of the given imageID + */ + protected String[] getImageSet(int id){ + Element imgSetElement = getImageSetElement(id); + int totalImagePaths = imgSetElement.getElementsByTagName(IMG_PATH_NAME).getLength(); // or use the attribute count + String[] result = new String[totalImagePaths]; + + for(int i = 0; i < totalImagePaths; i++){ + Element imgPathElement = (Element) imgSetElement.getElementsByTagName(IMG_PATH_NAME).item(i); + if(imgPathElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){ + result[i] = caseDirPath + File.separator + imgPathElement.getTextContent(); + } + else{ + result[i] = imgPathElement.getTextContent(); + } + } + return result; + } + + /** + * Returns absolute path of image database of the given image ID. + * + * @param id the image ID + * @return dbPath the database path of the given image + */ + protected String getImageSetDbPath(int id){ + Element imgDbElement = (Element) getImageSetElement(id).getElementsByTagName(IMG_DB_NAME).item(0); + if(imgDbElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){ + return caseDirPath + File.separator + imgDbElement.getTextContent(); + } + else{ + return imgDbElement.getTextContent(); + } + } + + /** + * Gets the next free image ID and and increments the internal counter + * + * @return imageID the next free image ID + */ + @Override + public int getNextImageID(){ + Element imgElement = getImagesElement(); + if(imgElement == null){ + return -1; // which indicates the error + } + else{ + String nextID = imgElement.getAttribute(NEXT_ID_NAME); + int result = Integer.parseInt(nextID); + + // increment the nextID + int incNextID = result + 1; + getImagesElement().setAttribute(NEXT_ID_NAME, Integer.toString(incNextID)); + + // write the change to the config file immediately + try{ + writeFile(); + } + catch(Exception ex){ + // TODO: throw exception further up + Logger logger = Logger.getLogger(this.className); + logger.log(Level.WARNING, "Error while trying to write the new NextID to the config file.", ex); + } + + return result; + } + } + + /** + * Returns an array of all image ID values in this case. + * + * @return imageIDs array of all image IDs in this case + */ + @Override + public int[] getImageIDs() { + int totalImageSet = getImageSetCount(); + int[] result = new int[totalImageSet]; + + Element imgElement = getImagesElement(); + for(int i = 0; i < totalImageSet; i++){ + Element imgSetElement = (Element)imgElement.getElementsByTagName(IMG_SET_NAME).item(i); + result[i] = Integer.parseInt(imgSetElement.getAttribute(IMG_SET_ID)); + } + + return result; + } + + /** + * Returns the HashSet of all timezone values of all images in this case. + * + * @return imageIDs the HashSet of all timezone values + */ + public HashSet<TimeZone> getTimeZone() { + HashSet<TimeZone> result = new HashSet<TimeZone>(); + + int totalImageSet = getImageSetCount(); + Element imgElement = getImagesElement(); + for(int i = 0; i < totalImageSet; i++){ + Element imgSetElement = (Element)imgElement.getElementsByTagName(IMG_SET_NAME).item(i); + result.add(TimeZone.getTimeZone(imgSetElement.getAttribute(TIMEZONE))); + } + + return result; + } + + /** + * Removes the imageSet of the given image ID. + * + * @param imgID the image ID of the image that going to be removed + */ + public void removeImageSet(int imgID) { + Element imgElement = getImagesElement(); + Element selectedElement = getImageSetElement(imgID); + imgElement.removeChild(selectedElement); // remove the imagesetElement + doc.normalize(); + + // edit the modified data + String newDate = dateFormat.format(new Date()); + Element rootEl = getRootElement(); + rootEl.getElementsByTagName(MODIFIED_DATE_NAME).item(0).setTextContent(newDate); + } + + /** + * Initialize the basic values for a new case management file. + * Note: this is the schema version 1.0 + * + * @param parentPath the name of the parent of the case directory. + * @param caseName the name of the config file to be located in the case directory + */ + protected void create(String dirPath, String caseName) throws Exception { + clear(); // clear the previous data + + // set the case Name and Directory and the parent directory + setCaseDirPath(dirPath); + setName(caseName); + DocumentBuilder docBuilder; + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + + // throw an error here + try { + docBuilder = docFactory.newDocumentBuilder(); + } catch (Exception ex) { + clear(); + throw ex; + } + + doc = docBuilder.newDocument(); + Element rootElement = doc.createElement(TOP_ROOT_NAME); // <AutopsyCase> ... </AutopsyCase> + doc.appendChild(rootElement); + + Element crDateElement = doc.createElement(CREATED_DATE_NAME); // <CreatedDate> ... </CreatedDate> + crDateElement.appendChild(doc.createTextNode(dateFormat.format(new Date()))); + rootElement.appendChild(crDateElement); + + Element mDateElement = doc.createElement(MODIFIED_DATE_NAME); // <ModifedDate> ... </ModifedDate> + mDateElement.appendChild(doc.createTextNode(dateFormat.format(new Date()))); + rootElement.appendChild(mDateElement); + + Element autVerElement = doc.createElement(AUTOPSY_CRVERSION_NAME); // <AutopsyVersion> ... </AutopsyVersion> + autVerElement.appendChild(doc.createTextNode(autopsySavedVersion)); + rootElement.appendChild(autVerElement); + + Element autSavedVerElement = doc.createElement(AUTOPSY_MVERSION_NAME); // <AutopsySavedVersion> ... </AutopsySavedVersion> + autSavedVerElement.appendChild(doc.createTextNode(autopsySavedVersion)); + rootElement.appendChild(autSavedVerElement); + + Element schVerElement = doc.createElement(SCHEMA_VERSION_NAME); // <SchemaVersion> ... </SchemaVersion> + schVerElement.appendChild(doc.createTextNode(schemaVersion)); + rootElement.appendChild(schVerElement); + + Element caseElement = doc.createElement(CASE_ROOT_NAME); // <Case> ... </Case> + rootElement.appendChild(caseElement); + + Element nameElement = doc.createElement(NAME); // <Name> ... </Name> + nameElement.appendChild(doc.createTextNode(caseName)); + caseElement.appendChild(nameElement); + + Element exportElement = doc.createElement(EXPORT_FOLDER_NAME); // <ExportFolder> ... </ExportFolder> + exportElement.appendChild(doc.createTextNode(EXPORT_FOLDER_RELPATH)); + exportElement.setAttribute(RELATIVE_NAME, "true"); + caseElement.appendChild(exportElement); + + Element logElement = doc.createElement(LOG_FOLDER_NAME); // <LogFolder> ... </LogFolder> + logElement.appendChild(doc.createTextNode(LOG_FOLDER_RELPATH)); + logElement.setAttribute(RELATIVE_NAME, "true"); + caseElement.appendChild(logElement); + + Element tempElement = doc.createElement(TEMP_FOLDER_NAME); // <TempFolder> ... </TempFolder> + tempElement.appendChild(doc.createTextNode(TEMP_FOLDER_RELPATH)); + tempElement.setAttribute(RELATIVE_NAME, "true"); + caseElement.appendChild(tempElement); + + // create the new images + Element imagesElement = doc.createElement(IMAGES_NAME); // <Images> ... </Images> + imagesElement.setAttribute(NEXT_ID_NAME, Integer.toString(0)); // add nextID to 0 + rootElement.appendChild(imagesElement); + + // write more code if needed ... + } + + /** + * Writes the case management file to disk (from document handler to .aut file) + * + */ + @Override + public void writeFile() throws Exception { + if (doc == null || caseName.equals("")) { + throw new Exception("No set case to write management file for."); + } + + // Prepare the DOM document for writing + Source source = new DOMSource(doc); + + // Prepare the data for the output file + StringWriter sw = new StringWriter(); + Result result = new StreamResult(sw); + + // Write the DOM document to the file + Transformer xformer;// = TransformerFactory.newInstance().newTransformer(); + TransformerFactory tfactory = TransformerFactory.newInstance(); + + try { + xformer = tfactory.newTransformer(); + } catch (Exception ex) { + throw ex; + } + + //Setup indenting to "pretty print" + xformer.setOutputProperty(OutputKeys.INDENT, "yes"); + xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + + try { + xformer.transform(source, result); + } catch (TransformerException ex) { + throw ex; + } + + // preparing the output file + String xmlString = sw.toString(); + File file = new File(caseDirPath + File.separator + caseName + ".aut"); + + // write the file + try { + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); + bw.write(xmlString); + bw.flush(); + bw.close(); + } catch (Exception ex) { + throw ex; + } + } + + /** + * Opens the configuration file and load the document handler + * Note: this is for the schema version 1.0 + * + * @param conFilePath the path of the XML case configuration file path + */ + @Override + public void open(String conFilePath) throws Exception{ + clear(); + File file = new File(conFilePath); + + try{ + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + doc = db.parse(file); + doc.getDocumentElement().normalize(); + + Element rootEl = doc.getDocumentElement(); + String rootName = rootEl.getNodeName(); + + // check if it's the autopsy case, if not, throws an error + if(!rootName.equals(TOP_ROOT_NAME)){ + // throw an error ... + clear(); + JOptionPane.showMessageDialog(caller, "Error: This is not an Autopsy config file (\"" + file.getName() + "\").\n \nDetail: \nCannot open a non-Autopsy config file (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); + } + else{ + /* Autopsy Created Version */ + String createdVersion = getCreatedVersion(); // get the created version + + // check if it has the same autopsy version as the current one + if(!createdVersion.equals(autopsySavedVersion)){ + // if not the same version, update the saved version in the xml to the current version + getRootElement().getElementsByTagName(AUTOPSY_MVERSION_NAME).item(0).setTextContent(autopsySavedVersion); + } + + /* Schema Version */ + String schemaVer = getSchemaVersion(); + // check if it has the same schema version as the current one + if(!schemaVer.equals(schemaVersion)){ + // do something here if not the same version + // ... @Override + } + + // set the case Directory and Name + setCaseDirPath(file.getParent()); + String fullFileName = file.getName(); + String fileName = fullFileName.substring(0, fullFileName.indexOf(".")); // remove the extension + setName(fileName); + } + } + catch(Exception e){ + throw e; + // throw an error here + //JOptionPane.showMessageDialog(caller, "Error: This file is not supported (\"" + file.getName() + "\").\n \nDetail: \n" + e.getMessage() + " (at " + className + ")." , "Error", JOptionPane.ERROR_MESSAGE); + } + } + + /** + * When user wants to close the case. This method writes any changes to the + * XML case configuration file, closes it and the document handler, and + * clears all the local variables / fields. + * + */ + @Override + public void close() throws Exception { + try { + writeFile(); // write any changes to xml + } catch (Exception ex) { + throw new Exception("Error: error while trying to close XML config file.", ex); + } + + clear(); + } + + /** + * Clear the internal structures / variables + */ + private void clear() { + doc = null; + caseDirPath = ""; + caseName = ""; + } + + /** + * Adds the image to the current document handler. + * + * @param images the paths of the images that want to be added + * @param currentID the ID of the image that want to be added + * @param timeZone the timeZone where the image is added + */ + protected void addImage(String[] images, long currentID, String timeZone) throws Exception { + + String dbName = "image-" + currentID + ".db"; + + if (doc == null) { + throw new Exception("No case open."); + } else { + Element rootEl = getRootElement(); + + int imgCount = images.length; // how many given images to add to the config file + Element imagesElement = getImagesElement(); + + //int currentID = Integer.parseInt(imagesElement.getAttribute(NEXT_ID_NAME)); + + // add the latest image set + Element imgSetElement = doc.createElement(IMG_SET_NAME); // <ImgSet> ... </ImgSet> + imgSetElement.setAttribute(IMG_SET_COUNT, Integer.toString(imgCount)); + imgSetElement.setAttribute(IMG_SET_ID, Long.toString(currentID)); + imgSetElement.setAttribute(TIMEZONE, timeZone); + imagesElement.appendChild(imgSetElement); + + // add all the image Path + for (int i = 0; i < imgCount; i++) { + Element imgPathElement = doc.createElement(IMG_PATH_NAME); // <ImgPath> ... </ImgPath> + imgPathElement.setAttribute(IMG_PATH_ID, Integer.toString(i)); + imgPathElement.setAttribute(RELATIVE_NAME, "false"); + imgPathElement.appendChild(doc.createTextNode(images[i])); + imgSetElement.appendChild(imgPathElement); + } + + // add the database + Element imgDbElement = doc.createElement(IMG_DB_NAME); // <ImgDb> ... </ImgDb> + imgDbElement.setAttribute(RELATIVE_NAME, "true"); + imgDbElement.appendChild(doc.createTextNode(dbName)); + //imgDbElement.appendChild(doc.createTextNode("image-" + currentID + ".db")); + imgSetElement.appendChild(imgDbElement); + + // edit the modified data + String newDate = dateFormat.format(new Date()); + rootEl.getElementsByTagName(MODIFIED_DATE_NAME).item(0).setTextContent(newDate); + } + +// JOptionPane.showMessageDialog(caller, "Error while trying to add the image to XML config file.\n \nDetail: \n" + e.getMessage() + " (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); + + } +} diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/addImage-icon.png b/Case/src/org/sleuthkit/autopsy/casemodule/addImage-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a36d4714ac9db8a3888ab2610bef2ab0cfbb6b7c GIT binary patch literal 1632 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 literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/casemodule-helpset.xml b/Case/src/org/sleuthkit/autopsy/casemodule/casemodule-helpset.xml new file mode 100644 index 0000000000..cf939eae2e --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/casemodule-helpset.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpsetref PUBLIC "-//NetBeans//DTD JavaHelp Help Set Reference 1.0//EN" "http://www.netbeans.org/dtds/helpsetref-1_0.dtd"> +<helpsetref url="nbdocs:/org/sleuthkit/autopsy/casemodule/docs/casemodule-hs.xml"/> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/close-icon.png b/Case/src/org/sleuthkit/autopsy/casemodule/close-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b46fafe588f4b3e296cdfc9b08ff596b9745df GIT binary patch literal 1069 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8zj(ShhE&{|8W!s#5-##D zZTj7bcatKwEc>%`npi+Le{aK9fuKvPGBdVn9@(aLY=(yC<YhA?<iA|~k&?7v-<GEb z+y5=`RP@cr=nhyZ=oGx5mhr4tmao8ywYvf(627Hhdw=du;`=<a26fAs#^#%!TR*RP zK5w(sHGQel<}K4#p8WbR!&Gy*+((A|y$pLk*-TKc`=D=7&pu;I1LM9r-@RYAFsNSP z-g;nRKg0RkRskn&{IyY$SahZO%)@lyA8Z@y*mqTwbXAqxGW_1oaDU##fPw<$3Ho-6 z7PH7kZPIfx4b)+huK99~`MIvkjGKx3{%w*vuv^rj++DBcs%1mD-O~$`<acaadLv4% zK$)**S4)IM#=}5=vxZYn32%xR&cAtf{A5O#tFE`op+cW&r`f(UCcfI}s&j_vstxCI z#tqw=r<d$0v~WEBv2<HU$v%~X2iE-Fb3k3K?s4T}t_uOnAKv<&QrJ9Gt5G1|lXK7Q z?aH_A&wqAff4RPpdA?HN^@pW_X~OFIYh9!_T{v+4wVuQC=~jK)J)ReuYg_U2@*Rqf z>T*AO)}XrjZSmffoaf8Rl?`osJ(87mnmT&KSLiUXl~{NC&01^5aDTa4ZH1+X_th)W zF+IK|^Md2vP1wDs$HTijw|&>H8?NW(cKiE2WONiVHZDt8w3??VQ2wy)v1m<(8vV+I zKNDNdds%(mvY5a1!=0(xAHu`ePf^XB#rJa8z9KPM>BIkje>>Ra@}_)ZtLu7p6PNsG z4z31=wQP@<FL9o-@=9bwPU73IvAZ`3<@EJGwl8{U)$a5ou<D<-CSzQ3nC&DL<HMZ{ zno@FY^IcX8sUF;1TAF!Iv0k5{FYtd0^MuWl8DzBnX#}Yjsd_kZPo1@XO81;I6NR0H z_A}|se!@H}k+VTTpLKa?>ut_epOwnG-B(uLl2uUO{6<go$P|S)7Y&;4KHK(E+<wDS zi#s18$|lBzwu-yEKMYigPdeNBL~BmOnJ4pSNzD)zE?dp@{LyOR1J7$}-Y{L+f8P7! z%$@@i+FRegy>aJS+U@Q))2!c!DMsInWxN^t-P+2a{L_+L^^}72$b)tZ`kr-IX|4Nr z;&rSl<DyS{Ius86s=6a)9xn7s^<(NAz2ppz&6jps|4@@@`ki_E;tJz6i+T?CEj@L* zx%lhdzE3R88+e#krC3+1+?w2<>2T%4dmjeH_j^tip0$2=etM*ivZ<BP(Zv=O9;t?B zr4LjGlsR2%4L;LaET?fpIk?}uw7kK3-`!Y4CtG)`cZ~9v{)CopyLD>M5336`9gUwl z87`Sil?%45y!)g~<VWAL%vUkX7H^$ar#ffpe>K5!kqPpJKN{}ZJl3f-JiNc?^<3X; jOeg+)Tls&R4P$0^j?3h~TlO$8Ffe$!`njxgN@xNA)D!!& literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml new file mode 100644 index 0000000000..13aca85875 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <attr name="Menu\File\Separator2.instance_hidden\position" intvalue="100"/> + <attr name="Menu\File\Separator3.instance_hidden\position" intvalue="200"/> + <attr name="Menu\File\Separator4.instance_hidden\position" intvalue="400"/> + <attr name="Menu\File\org-netbeans-modules-print-action-PageSetupAction.shadow_hidden\position" intvalue="300"/> + <attr name="Menu\File\org-netbeans-modules-print-action-PrintAction.shadow_hidden\position" intvalue="500"/> + <attr name="Toolbars\File\org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance\iconBase" stringvalue="org/sleuthkit/autopsy/images/close-icon.gif"/> + <folder name="Actions"> + <folder name="File"> + <file name="org-sleuthkit-autopsy-casemodule-AddImageAction.instance"> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance"> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseNewAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseNewAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_CaseNewAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseOpenActionOld.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseOpenActionOld"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_CaseOpenActionOld"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CasePropertiesAction.instance"> + </file> + <file name="org-sleuthkit-autopsy-casemodule-NewCaseAct.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.NewCaseAct"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_NewCaseAct"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-NewCaseAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.NewCaseAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_NewCaseAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseOpenAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_OpenAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseSaveAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseSaveAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_SaveCaseAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-RecentCases.instance"> + </file> + </folder> + <folder name="Tools"> + <file name="org-sleuthkit-autopsy-filebrowser-FileBrowserAction.instance"></file> + <file name="org-sleuthkit-autopsy-hashdatabase-HashDbMgmtAction.instance"> + </file> + </folder> + <folder name="View"> + <file name="org-netbeans-core-windows-actions-ToolbarsListAction.instance"> + </file> + </folder> + <folder name="Window"> + <file name="org-sleuthkit-autopsy-casemodule-testAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.casemodule.testTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_testAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file> + <file name="org-sleuthkit-autopsy-filebrowser-FileBrowserAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.filebrowser.FileBrowserTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.filebrowser.Bundle#CTL_FileBrowserAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file> + <file name="org-netbeans-core-windows-actions-GlobalPropertiesAction.instance_hidden"/> + <file name="org-sleuthkit-autopsy-filebrowser-ChangeViewAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.filebrowser.ChangeViewAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.filebrowser.Bundle#CTL_ChangeViewAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + <file name="org-sleuthkit-autopsy-filebrowser-DetailWindowAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.filebrowser.DetailWindowTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.filebrowser.Bundle#CTL_DetailWindowAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file> + </folder> + </folder> + <folder name="Menu"> + <folder name="File"> + <file name="org-sleuthkit-autopsy-casemodule-CaseNewAction.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CaseNewAction.instance"/> + <attr name="position" intvalue="1212"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance"/> + <attr name="position" intvalue="1225"/> + </file> + <folder name="Open Recent Case"> + <attr name="position" intvalue="1262"/> + <file name="org-sleuthkit-autopsy-casemodule-RecentCasesAction.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-RecentCases.instance"/> + </file> + </folder> + <file name="org-sleuthkit-autopsy-casemodule-CaseCloseAct.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance"/> + <attr name="position" intvalue="1300"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-AddImage-separatorBefore.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1318"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-AddImage.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-AddImageAction.instance"/> + <attr name="position" intvalue="1336"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-AddImage-separatorAfter.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1354"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CasePropertiesAction-separatorBefore.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1340"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CasePropertiesAction.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CasePropertiesAction.instance"/> + <attr name="position" intvalue="1345"/> + </file> + + <file name="Separator2.instance_hidden"/> + <file name="Separator3.instance_hidden"/> + <file name="Separator4.instance_hidden"/> + <file name="org-netbeans-modules-print-action-PageSetupAction.shadow_hidden"> + <attr name="position" intvalue="200"/> + </file> + <file name="org-netbeans-modules-print-action-PrintAction.shadow_hidden"> + <attr name="position" intvalue="300"/> + </file> + <file name="org-openide-actions-SaveAction.shadow_hidden"/> + <file name="org-openide-actions-SaveAllAction.shadow_hidden"/> + <file name="org-openide-actions-SaveAsAction.shadow_hidden"/> + </folder> + <file name="GoTo_hidden"/> + <folder name="Help"> + <file name="org-netbeans-modules-autoupdate-ui-actions-CheckForUpdatesAction.shadow_hidden"/> + </folder> + <folder name="Tools"> + <file name="org-sleuthkit-autopsy-hashdatabase-HashDatabaseSettingsAction.shadow"> + <attr name="originalFile" stringvalue="Actions/Tools/org-sleuthkit-autopsy-hashdatabase-HashDbMgmtAction.instance"/> + <attr name="position" intvalue="1000"/> + </file> + <file name="SeparatorAfterHashDatabaseSettings.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1001"/> + </file> + <file name="Separator1.instance_hidden"/> + <file name="Separator3.instance_hidden"/> + <file name="org-netbeans-modules-autoupdate-ui-actions-PluginManagerAction.shadow_hidden"/> + <file name="org-netbeans-modules-favorites-templates-TemplatesAction.shadow_hidden"/> + <file name="org-netbeans-modules-options-OptionsWindowAction.shadow_hidden"/> + <file name="org-openide-actions-ToolsAction.shadow_hidden"/> + </folder> + <folder name="View"> + <file name="org-netbeans-core-actions-HTMLViewAction.shadow_hidden"/> + <file name="org-netbeans-core-actions-LogAction.shadow_hidden"/> + <file name="org-netbeans-core-windows-actions-ToolbarsListAction.instance_hidden"/> + </folder> + <folder name="Window"> + <file name="CloneDocumentAction.shadow_hidden"/> + <file name="CloseAllButThisAction.shadow_hidden"/> + <file name="CloseAllDocumentsAction.shadow_hidden"/> + <file name="DocumentsAction.shadow_hidden"/> + <file name="FileBrowserAction.shadow"/> + <file name="FileBrowserAction.shadow_hidden"/> + <file name="Output_hidden"/> + <file name="ProgressListAction.shadow_hidden"/> + <file name="SwitchToRecentDocumentAction.shadow_hidden"/> + <file name="ViewFavoritesTabAction.shadow_hidden"/> + <file name="org-netbeans-core-windows-actions-ResetWindowsAction.shadow_hidden"/> + <file name="testAction.shadow_hidden"/> + </folder> + </folder> + <folder name="Services"> + <folder name="JavaHelp"> + <file name="casemodule-helpset.xml" url="casemodule-helpset.xml"> + <attr name="position" intvalue="3075"/> + </file> + </folder> + </folder> + <folder name="Shortcuts"> + <file name="D-N.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CaseNewAction.instance"/> + </file> + <file name="D-O.shadow"> + <attr name="originalFile" stringvalue="Actions/File/org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance"/> + </file> + </folder> + <folder name="Toolbars"> + <folder name="File"> + <file name="org-sleuthkit-autopsy-casemodule-NewCaseAct.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseNewAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_CaseNewAction"/> + <attr name="iconBase" stringvalue="org/sleuthkit/autopsy/images/new-icon.png"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + <attr name="position" intvalue="150"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseSaveAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseSaveAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_SaveCaseAction"/> + <attr name="iconBase" stringvalue="org/sleuthkit/autopsy/images/save-icon.png"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + <attr name="position" intvalue="300"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseOpenAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseOpenAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_OpenAction"/> + <attr name="iconBase" stringvalue="org/sleuthkit/autopsy/images/open-icon.png"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + <attr name="position" intvalue="200"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseCloseAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.CaseCloseAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_CaseCloseAct"/> + <attr name="iconBase" stringvalue="org/sleuthkit/autopsy/images/close-icon.png"/> + <attr name="noIconInMenu" boolvalue="false"/> + <attr name="position" intvalue="400"/> + </file> + <file name="sep1.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JToolBar$Separator"/> + <attr name="position" intvalue="500"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-AddImageAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.casemodule.AddImageAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.casemodule.Bundle#CTL_AddImage"/> + <attr name="iconBase" stringvalue="org/sleuthkit/autopsy/images/addImage-icon.png"/> + <attr name="noIconInMenu" boolvalue="false"/> + <attr name="position" intvalue="550"/> + </file> + <file name="org-openide-actions-SaveAllAction.shadow_hidden"> + <attr name="position" intvalue="100"/> + </file> + <file name="org-sleuthkit-autopsy-casemodule-CaseSaveAction.instance_hidden"/> + </folder> + <file name="UndoRedo_hidden"/> + </folder> + <folder name="Windows2"> + <folder name="Components"/> + <folder name="Modes"> + <folder name="editor"/> + <folder name="output"/> + </folder> + </folder> +</filesystem> diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/new-icon.png b/Case/src/org/sleuthkit/autopsy/casemodule/new-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..02566d35affba3384958dc9d7e56bc3ef53dce31 GIT binary patch literal 4021 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 literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/open-icon.png b/Case/src/org/sleuthkit/autopsy/casemodule/open-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..073b95b0869464686de1e0ad3296bafb026bc470 GIT binary patch literal 4143 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 literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/open-recent-icon.png b/Case/src/org/sleuthkit/autopsy/casemodule/open-recent-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3664a9357bf277f16938e6c6f003b557d34650 GIT binary patch literal 4526 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 YV^>MnMpLaS1_lNOPgg&ebxsLQ0Hdsu=Kufz literal 0 HcmV?d00001 diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/package.html b/Case/src/org/sleuthkit/autopsy/casemodule/package.html new file mode 100644 index 0000000000..4d7d55f36f --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/casemodule/package.html @@ -0,0 +1,10 @@ +<body> + <p>A case contains one or more disk images and is the highest-level unit of an investigation. All data in a case will be stored in a single database and configuration file. A case must be open before analysis can occur. You will use a {@link org.sleuthkit.autopsy.casemodule.Case#Case Case} object to get access to the data being analyzed.</p> + + <p>Case settings are stored in an XML file. See the {@link org.sleuthkit.autopsy.casemodule.XMLCaseManagement#XMLCaseManagement() XMLCaseManagement} class for more details.</p> + + <p>Currently, only one case can be opened at a time. To determine the open case, use the static {@link org.sleuthkit.autopsy.casemodule.Case#getCurrentCase() Case.getCurrentCase()} method. Once you have the object for the currently open case, {@link org.sleuthkit.autopsy.casemodule.Case#getRootObjects() Case.getRootObjects()} will return the top-level Sleuth Kit Content modules. You can then get their children to go down the tree of data types. </p> + + <p>To receive an event when cases are opened, closed, or changed, use the {@link org.sleuthkit.autopsy.casemodule.Case#addPropertyChangeListener(PropertyChangeListener) addPropertyChangeListener} method to register your class as a PropertyChangeListener. THis is most commonly required when developing a new {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer#DataExplorer() DataExplorer} module that needs to get data about the currently opened case. </p> +</body> + diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties b/Case/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties new file mode 100644 index 0000000000..4e1a794753 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties @@ -0,0 +1,2 @@ +HashDatabaseManagementPanel.okayButton.text=Okay +HashDbPanel.fileSelectButton.text=Select...\n diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java new file mode 100644 index 0000000000..3a70ad8180 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDb.java @@ -0,0 +1,179 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.io.File; +import java.util.logging.Level; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.SleuthkitJNI; +import org.sleuthkit.datamodel.TskException; + +/** + * HashDb is based on the path to a database, and has methods to check the + * status of database and index files, and create indexes. One of these + * is created for every open hash database. + */ +class HashDb { + + // Suffix added to the end of a database name to get its index file + private static final String INDEX_SUFFIX = "-md5.idx"; + /** + * Path to database (database and/or index may not actually exist) + */ + String databasePath; + + /** + * New {@link HashDb} for database at given path + * @param databasePath Path of database this instance represents (database + * and/or index may not actually exist) + */ + HashDb(String databasePath) { + this.databasePath = databasePath; + } + + /** + * Checks if the database exists. + * @return true if a file exists at the database path, else false + */ + boolean databaseExists() { + return databaseFile().exists(); + } + + /** + * Checks if Sleuth Kit can open the index for the database path. + * @return true if the index was found and opened successfully, else false + */ + boolean indexExists() { + try { + return hasIndex(databasePath); + } catch (TskException ex) { + Log.get(this.getClass()).log(Level.WARNING, "Error checking if index exists.", ex); + return false; + } + } + + /** + * Gets the database file. + * @return a File initialized with the database path + */ + File databaseFile() { + return new File(databasePath); + } + + /** + * Gets the index file + * @return a File initialized with an index path derived from the database + * path + */ + File indexFile() { + return new File(toIndexPath(databasePath)); + } + + /** + * Checks if the index file is older than the database file + * @return true if there is are files at the index path and the database + * path, and the index file has an older modified-time than the database + * file, else false + */ + boolean isOutdated() { + File i = indexFile(); + File db = databaseFile(); + + return i.exists() && db.exists() && isOlderThan(i, db); + } + + /** + * Returns the status of the HashDb as determined from indexExists(), + * databaseExists(), and isOutdated() + * @return IndexStatus enum according to their definitions + */ + IndexStatus status() { + boolean i = this.indexExists(); + boolean db = this.databaseExists(); + + if (i) { + if (db) { + return this.isOutdated() ? IndexStatus.INDEX_OUTDATED : IndexStatus.INDEX_CURRENT; + } else { + return IndexStatus.NO_DB; + } + } else { + return db ? IndexStatus.NO_INDEX : IndexStatus.NONE; + } + } + + /** + * Tries to index the database (overwrites any existing index) + * @throws TskException if an error occurs in the SleuthKit bindings + */ + void createIndex() throws TskException { + SleuthkitJNI.createLookupIndex(databasePath); + //TODO: error checking + } + + /** + * Checks if one file is older than an other + * @param a first file + * @param b second file + * @return true if the first file's last modified data is before the second + * file's last modified date + */ + private static boolean isOlderThan(File a, File b) { + return a.lastModified() < b.lastModified(); + } + + /** + * Determines if a path points to an index by checking the suffix + * @param path + * @return true if index + */ + static boolean isIndexPath(String path) { + return path.endsWith(INDEX_SUFFIX); + } + + /** + * Derives database path from an image path by removing the suffix. + * @param indexPath + * @return + */ + static String toDatabasePath(String indexPath) { + return indexPath.substring(0, indexPath.lastIndexOf(INDEX_SUFFIX)); + } + + /** + * Derives image path from an database path by appending the suffix. + * @param databasePath + * @return + */ + static String toIndexPath(String databasePath) { + return databasePath.concat(INDEX_SUFFIX); + } + + /** + * Calls Sleuth Kit method via JNI to determine whether there is an + * index for the given path + * @param databasePath path Path for the database the index is of + * (database doesn't have to actually exist)' + * @return true if index exists + * @throws TskException if there is an error in the JNI call + */ + static boolean hasIndex(String databasePath) throws TskException { + return SleuthkitJNI.lookupIndexExists(databasePath); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java new file mode 100644 index 0000000000..757dea2f5e --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java @@ -0,0 +1,106 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.logging.Level; +import javax.swing.JDialog; +import javax.swing.JFrame; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.sleuthkit.autopsy.casemodule.Autopsy; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The HashDbMgmtAction opens the HashDbMgmtPanel in a dialog, and saves the + * settings of the panel if the Apply button is clicked. + * @author pmartel + */ +class HashDbMgmtAction extends CallableSystemAction { + + private static final String ACTION_NAME = "Hash Database Management"; + + @Override + public void performAction() { + Log.noteAction(this.getClass()); + + try { + // Load settings from the property file + HashDbSettings hashDatabaseSettings = new HashDbSettings(Autopsy.getPropertyFile()); + + // create the popUp window for it + final JFrame frame = new JFrame(ACTION_NAME); + final JDialog popUpWindow = new JDialog(frame, ACTION_NAME, true); // to make the popUp Window to be modal + + // initialize panel with loaded settings + final HashDbMgmtPanel panel = new HashDbMgmtPanel(hashDatabaseSettings); + + // set action for the "Apply" button + panel.setApplyButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (panel.indexesExist()) { + try { + panel.saveSettings(); + } catch (IOException ex) { + Log.get(HashDbMgmtAction.class).log(Level.WARNING, "Couldn't save hash database settings.", ex); + } + popUpWindow.dispose(); + } else { + NotifyDescriptor d = new NotifyDescriptor.Message("All selected databases must have indexes.", NotifyDescriptor.INFORMATION_MESSAGE); + DialogDisplayer.getDefault().notify(d); + } + } + }); + + // add the panel to the popup window + popUpWindow.add(panel); + popUpWindow.pack(); + popUpWindow.setResizable(false); + + // set the location of the popUp Window on the center of the screen + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + double w = popUpWindow.getSize().getWidth(); + double h = popUpWindow.getSize().getHeight(); + popUpWindow.setLocation((int) ((screenDimension.getWidth() - w) / 2), (int) ((screenDimension.getHeight() - h) / 2)); + + // display the window + popUpWindow.setVisible(true); + } catch (Exception ex) { + Log.get(HashDbMgmtAction.class).log(Level.WARNING, "Error displaying " + ACTION_NAME + " window.", ex); + } + } + + @Override + public String getName() { + return ACTION_NAME; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } +} diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java new file mode 100644 index 0000000000..09d619dbd6 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java @@ -0,0 +1,131 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ActionListener; +import java.io.IOException; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.border.EmptyBorder; + +/** + * Panel for displaying and editing the Hash Database settings. + * @author pmartel + */ +class HashDbMgmtPanel extends javax.swing.JPanel { + + private HashDbSettings settings; + // text of panel for each database + private static final String INTRO_TEXT1 = "Hash lookups are conducted when an image is added to a case."; + private static final String INTRO_TEXT2 = "Lookup results can be found using the File Search feature."; + private static final String NSRL_NAME = "NIST NSRL Database"; + private static final String NSRL_DESC = "Hashes that are known good and bad."; + private static final String KNOWN_BAD_NAME = "Known Bad Database"; + private static final String KNOWN_BAD_DESC = "Hashes that are known bad."; + private JLabel introText1; + private JLabel introText2; + private HashDbPanel NSRLPanel; + private HashDbPanel knownBadPanel; + private JButton applyButton; + + /** + * + * @param settings Settings to initialize the panel state from. + */ + HashDbMgmtPanel(HashDbSettings settings) { + this.settings = settings; + + initComponents(); + } + + /** + * Sets a listener for the Apply button + * @param e The action listener + */ + void setApplyButtonActionListener(ActionListener e) { + this.applyButton.addActionListener(e); + } + + /** + * Checks if indexes exist for all defined databases + * @return true if Sleuth Kit can open the indexes of all databases + * than have been selected + */ + boolean indexesExist() { + HashDb nsrl = this.NSRLPanel.db; + HashDb knownBad = this.knownBadPanel.db; + + if (nsrl != null && !nsrl.indexExists()) { + return false; + } + if (knownBad != null && !knownBad.indexExists()) { + return false; + } + return true; + } + + /** + * Modifies the given settings object to match the current panel state, and + * then persists it to its backing file. + * @throws IOException if there is an error saving the settings to a file + */ + void saveSettings() throws IOException { + this.settings.setNSRLDatabase(this.NSRLPanel.db); + this.settings.setKnownBadDatabase(this.knownBadPanel.db); + this.settings.save(); + } + + /** + * Initializes all the panel components + */ + private void initComponents() { + + NSRLPanel = new HashDbPanel(this.settings.getNSRLDatabase(), HashDbMgmtPanel.NSRL_NAME, HashDbMgmtPanel.NSRL_DESC); + knownBadPanel = new HashDbPanel(this.settings.getKnownBadDatabase(), HashDbMgmtPanel.KNOWN_BAD_NAME, HashDbMgmtPanel.KNOWN_BAD_DESC); + + applyButton = new JButton(); + applyButton.setText("OK"); + applyButton.setAlignmentX(Component.CENTER_ALIGNMENT); + + introText1 = new JLabel(); + introText1.setText(INTRO_TEXT1); + introText1.setBorder(new EmptyBorder(10, 10, 5, 10)); + introText1.setAlignmentX(Component.CENTER_ALIGNMENT); + introText1.setMaximumSize(NSRLPanel.getMaximumSize()); + + introText2 = new JLabel(); + introText2.setText(INTRO_TEXT2); + introText2.setBorder(new EmptyBorder(0, 10, 0, 10)); + introText2.setAlignmentX(Component.CENTER_ALIGNMENT); + introText2.setMaximumSize(NSRLPanel.getMaximumSize()); + + BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS); + this.setLayout(layout); + this.add(introText1); + this.add(introText2); + this.add(NSRLPanel); + this.add(knownBadPanel); + this.add(applyButton); + this.add(Box.createRigidArea(new Dimension(0, 10))); + } +} diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.form b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.form new file mode 100644 index 0000000000..ea8d74107d --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.form @@ -0,0 +1,129 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="databaseNameLabel" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" max="-2" attributes="0"> + <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="indexButton" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> + <Component id="indexStatusLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="databasePathField" min="-2" pref="329" max="-2" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="fileSelectButton" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="databaseDetailsLabel" alignment="0" max="32767" attributes="1"/> + </Group> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="databaseNameLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="databaseDetailsLabel" min="-2" pref="14" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="databasePathField" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="fileSelectButton" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="indexButton" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="indexStatusLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="1"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="databaseNameLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor"> + <FontInfo relative="true"> + <Font bold="true" component="databaseNameLabel" property="font" relativeSize="true" size="2"/> + </FontInfo> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="databaseName()" type="code"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JFormattedTextField" name="databasePathField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="path()" type="code"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="databasePathFieldActionPerformed"/> + <EventHandler event="focusLost" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="databasePathFieldFocusLost"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="indexButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="indexOrReindex()" type="code"/> + </Property> + <Property name="enabled" type="boolean" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="indexable()" type="code"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="indexButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="indexStatusLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="indexStatus()" type="code"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="databaseDetailsLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="databaseDetails()" type="code"/> + </Property> + <Property name="verticalAlignment" type="int" value="1"/> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="fileSelectButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/hashdatabase/Bundle.properties" key="HashDbPanel.fileSelectButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileSelectButtonActionPerformed"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.java new file mode 100644 index 0000000000..49f934d9d4 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbPanel.java @@ -0,0 +1,300 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * HashDbPanel.java + * + * Created on Oct 11, 2011, 2:44:56 PM + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.awt.Cursor; +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JFileChooser; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.TskException; + +/** + * Panel for selecting a hash database. + * @author pmartel + */ +class HashDbPanel extends javax.swing.JPanel { + + /** + * Current hash database backing the panel (can be null). + */ + HashDb db; + /** + * Name to title this database panel. + */ + String databaseName; + /** + * Details of this database slot. + */ + String databaseDetails; + private JFileChooser fc = new JFileChooser(); + + /** + * Create a panel from a current setting and description strings. + * @param db current hash database (can be null) + * @param databaseName name to title this database panel + * @param databaseDetails details of this database + */ + HashDbPanel(HashDb db, String databaseName, String databaseDetails) { + this.db = db; // nullable + this.databaseDetails = databaseDetails; + this.databaseName = databaseName; + + fc.setDragEnabled(false); + fc.setFileSelectionMode(JFileChooser.FILES_ONLY); + fc.setMultiSelectionEnabled(false); + + this.initComponents(); + this.refresh(); + } + + /** + * Gets the string for the (re)index button. + * @return "Reindex" if the database and index exist, otherwise "Index" + */ + private String indexOrReindex() { + return (this.db != null) && this.db.databaseExists() && this.db.indexExists() ? "Reindex" : "Index"; + } + + private String databaseName() { + return this.databaseName; + } + + private String databaseDetails() { + return this.databaseDetails; + } + + /** + * @return Path to database to display in panel + */ + private String path() { + return (this.db != null) ? this.db.databasePath : ""; + } + + /** + * Short description of the index/db state (if there is one) + * @return + */ + private String indexStatus() { + return (this.db != null) ? db.status().message() : ""; + } + + /** + * Check if an index can be created. + * @return true if the database exists + */ + private boolean indexable() { + return (this.db != null) && db.databaseExists(); + } + + private boolean invalid() { + return (this.db != null) && this.db.status().equals(IndexStatus.NONE); + } + + /** + * Updates the state of all panel elements. + */ + private void refresh() { + this.databasePathField.setText(this.path()); + this.indexButton.setEnabled(this.indexable()); + this.indexButton.setText(this.indexOrReindex()); + this.indexStatusLabel.setText(this.indexStatus()); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + databaseNameLabel = new javax.swing.JLabel(); + databasePathField = new javax.swing.JFormattedTextField(); + indexButton = new javax.swing.JButton(); + indexStatusLabel = new javax.swing.JLabel(); + databaseDetailsLabel = new javax.swing.JLabel(); + fileSelectButton = new javax.swing.JButton(); + + databaseNameLabel.setFont(databaseNameLabel.getFont().deriveFont(databaseNameLabel.getFont().getStyle() | java.awt.Font.BOLD, databaseNameLabel.getFont().getSize()+2)); + databaseNameLabel.setText(databaseName()); + + databasePathField.setText(path()); + databasePathField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + databasePathFieldActionPerformed(evt); + } + }); + databasePathField.addFocusListener(new java.awt.event.FocusAdapter() { + public void focusLost(java.awt.event.FocusEvent evt) { + databasePathFieldFocusLost(evt); + } + }); + + indexButton.setText(indexOrReindex()); + indexButton.setEnabled(indexable()); + indexButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + indexButtonActionPerformed(evt); + } + }); + + indexStatusLabel.setText(indexStatus()); + + databaseDetailsLabel.setText(databaseDetails()); + databaseDetailsLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); + + fileSelectButton.setText(org.openide.util.NbBundle.getMessage(HashDbPanel.class, "HashDbPanel.fileSelectButton.text")); // NOI18N + fileSelectButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + fileSelectButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(databaseNameLabel) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(indexButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(indexStatusLabel)) + .addGroup(layout.createSequentialGroup() + .addComponent(databasePathField, javax.swing.GroupLayout.PREFERRED_SIZE, 329, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(fileSelectButton)) + .addComponent(databaseDetailsLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(databaseNameLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(databaseDetailsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(databasePathField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(fileSelectButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(indexButton) + .addComponent(indexStatusLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void indexButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexButtonActionPerformed + if (this.db != null) { + try { + // change the cursor to "waiting cursor" + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + this.db.createIndex(); + } finally { + this.setCursor(null); + } + } catch (TskException ex) { + Log.get(this.getClass()).log(Level.WARNING, "Couldn't create index.", ex); + } + } + + this.refresh(); + }//GEN-LAST:event_indexButtonActionPerformed + + private void databasePathFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_databasePathFieldActionPerformed + // if field becomes editable: add handler + }//GEN-LAST:event_databasePathFieldActionPerformed + + private void fileSelectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSelectButtonActionPerformed + + int retval = fc.showOpenDialog(this); + + if (retval == JFileChooser.APPROVE_OPTION) { + File f = fc.getSelectedFile(); + try { + String filePath = f.getCanonicalPath(); + + if (HashDb.isIndexPath(filePath)) { + filePath = HashDb.toDatabasePath(filePath); + } + + this.db = new HashDb(filePath); + + + } catch (IOException ex) { + Logger.getLogger(HashDbPanel.class.getName()).log(Level.WARNING, "Couldn't get selected file path.", ex); + return; + } + } + + this.refresh(); + }//GEN-LAST:event_fileSelectButtonActionPerformed + + private void databasePathFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_databasePathFieldFocusLost + + String path = databasePathField.getText().trim(); + + if (path.isEmpty()) { + this.db = null; + } else { + File f = new File(path); + try { + String filePath = f.getCanonicalPath(); + + if (HashDb.isIndexPath(filePath)) { + filePath = HashDb.toDatabasePath(filePath); + } + + this.db = new HashDb(filePath); + + } catch (IOException ex) { + Logger.getLogger(HashDbPanel.class.getName()).log(Level.WARNING, "Couldn't get selected file path.", ex); + return; + } + } + + this.refresh(); + }//GEN-LAST:event_databasePathFieldFocusLost + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel databaseDetailsLabel; + private javax.swing.JLabel databaseNameLabel; + private javax.swing.JFormattedTextField databasePathField; + private javax.swing.JButton fileSelectButton; + private javax.swing.JButton indexButton; + private javax.swing.JLabel indexStatusLabel; + // End of variables declaration//GEN-END:variables +} diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbSettings.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbSettings.java new file mode 100644 index 0000000000..370e039451 --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/HashDbSettings.java @@ -0,0 +1,166 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Properties; + +/** + * Loads and stores Hash Database settings from/to a property file + * @author pmartel + */ +public class HashDbSettings { + + private static final String PROP_PREFIX = "HASHDB"; + private static final String NSRL_PROP = "NSRL"; + private static final String KNOWN_BAD_PROP = "KNOWN_BAD"; + private File propertyFile; + private HashDb NSRLDatabase, knownBadDatabase; + + /** + * @param propertyFile file to load settings from + * @throws IOException if there's an error loading the property file + * @throws FileNotFoundException if the property file can't be found + */ + public HashDbSettings(File propertyFile) throws IOException, FileNotFoundException { + this.propertyFile = propertyFile; + + Properties temp = new Properties(); + InputStream loadStream = new FileInputStream(propertyFile); + temp.load(loadStream); + loadStream.close(); + + String NSRL = getNSRL(temp); + String knownBad = getKnownBad(temp); + + if (!NSRL.equals("")) { + this.NSRLDatabase = new HashDb(NSRL); + } + + if (!knownBad.equals("")) { + this.knownBadDatabase = new HashDb(knownBad); + } + } + + /** + * Writes settings to the property file + * @throws IOException if there's an error loading or writing to the + * property file + * @throws FileNotFoundException if the property file can't be found + */ + void save() throws IOException, FileNotFoundException { + Properties temp = new Properties(); + InputStream loadStream = new FileInputStream(propertyFile); + temp.load(loadStream); + loadStream.close(); + + setNSRL(temp, this.NSRLDatabase != null ? this.NSRLDatabase.databasePath : ""); + setKnownBad(temp, this.knownBadDatabase != null ? this.knownBadDatabase.databasePath : ""); + + String comments = ""; + OutputStream storeStream = new FileOutputStream(propertyFile); + temp.store(storeStream, comments); + storeStream.close(); + } + + /** + * Returns the path the the selected NSRL hash database, or null if there is + * none selected. + * @return path or null + */ + public String getNSRLDatabasePath() { + return this.NSRLDatabase != null ? this.NSRLDatabase.databasePath : null; + } + + /** + * Returns the path the the selected Known Bad hash database, or null if + * there is none selected. + * @return path or null + */ + public String getKnownBadDatabasePath() { + return this.knownBadDatabase != null ? this.knownBadDatabase.databasePath : null; + } + + /** + * Gets NSRL database if there is one + * @return database (can be null) + */ + HashDb getNSRLDatabase() { + return this.NSRLDatabase; + } + + /** + * Gets known bad database if there is one + * @return database (can be null) + */ + HashDb getKnownBadDatabase() { + return this.knownBadDatabase; + } + + /** + * Set NSRL database + * @param nsrl database, or null to clear + */ + void setNSRLDatabase(HashDb nsrl) { + this.NSRLDatabase = nsrl; + } + + /** + * Set known bad database + * @param knownBad known bad database, or null to clear + */ + void setKnownBadDatabase(HashDb knownBad) { + this.knownBadDatabase = knownBad; + } + + // helper functions: + private static void setNSRL(Properties props, String databasePath) { + setProp(props, NSRL_PROP, databasePath); + } + + private static void setKnownBad(Properties props, String databasePath) { + setProp(props, KNOWN_BAD_PROP, databasePath); + } + + private static String getNSRL(Properties props) { + return getProp(props, NSRL_PROP); + } + + private static String getKnownBad(Properties props) { + return getProp(props, KNOWN_BAD_PROP); + } + + private static void setProp(Properties props, String propName, String propValue) { + props.setProperty(fullProp(propName), propValue); + } + + private static String getProp(Properties props, String propName) { + return props.getProperty(fullProp(propName), ""); + } + + private static String fullProp(String propName) { + return PROP_PREFIX + "_" + propName; + } +} \ No newline at end of file diff --git a/Case/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java b/Case/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java new file mode 100644 index 0000000000..479f73834c --- /dev/null +++ b/Case/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java @@ -0,0 +1,65 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.hashdatabase; + +/** + * The status of a HashDb as determined from its indexExists(), + * databaseExists(), and isOutdated() methods + * @author pmartel + */ +enum IndexStatus { + + /** + * The index and database both exist, and the index is older. + */ + INDEX_OUTDATED("Index is older than database."), + /** + * The index and database both exist, and the index is not older. + */ + INDEX_CURRENT("Database has index."), + /** + * The index exists but the database does not. + */ + NO_DB("Index does not have database."), + /** + * The database exists but the index does not. + */ + NO_INDEX("Database does not have index."), + /** + * Neither the index nor the database exists. + */ + NONE("No index or database."); + + private String message; + + /** + * @param message Short description of the state represented + */ + private IndexStatus(String message) { + this.message = message; + } + + /** + * Get status message + * @return a short description of the state represented + */ + String message() { + return this.message; + } +} diff --git a/Case/test/unit/src/org/sleuthkit/autopsy/casemodule/RecentCasesTest.java b/Case/test/unit/src/org/sleuthkit/autopsy/casemodule/RecentCasesTest.java new file mode 100644 index 0000000000..f56a7bec6b --- /dev/null +++ b/Case/test/unit/src/org/sleuthkit/autopsy/casemodule/RecentCasesTest.java @@ -0,0 +1,280 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.casemodule; + +import java.awt.event.ActionEvent; +import javax.swing.JMenuItem; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; + +public class RecentCasesTest { + RecentCases instance; + + public RecentCasesTest() { + instance = RecentCases.getInstance(); + } + + @BeforeClass + public static void setUpClass() throws Exception { + } + + @AfterClass + public static void tearDownClass() throws Exception { + } + + @Before + public void setUp() { + instance.actionPerformed(null); + } + + @After + public void tearDown() { + } + + /** + * Test of getInstance method, of class RecentCases. + */ + @Test + public void testGetInstance() { + System.out.println("getInstance"); + RecentCases expResult = RecentCases.getInstance(); + RecentCases result = RecentCases.getInstance(); + assertEquals(expResult, result); + assertNotNull(result); + } + + /** + * Test of getMenuPresenter method, of class RecentCases. + */ + @Test + public void testGetMenuPresenter() { + System.out.println("getMenuPresenter"); + JMenuItem result = instance.getMenuPresenter(); + assertNotNull(result); + } + + /** + * Test of actionPerformed method, of class RecentCases. + */ + @Test + public void testActionPerformed() { + System.out.println("actionPerformed"); + ActionEvent e = null; + instance.addRecentCase("test", "test"); + instance.actionPerformed(e); + assertEquals(instance.getTotalRecentCases(), 0); + + } + + /** + * Test of addRecentCase method, of class RecentCases. + */ + @Test + public void testAddRecentCase() { + System.out.println("addRecentCase"); + String name = "name"; + String path = "C:\\path"; + instance.addRecentCase(name, path); + instance.addRecentCase(name, path); + assertEquals(name, instance.getRecentCaseNames()[0]); + assertEquals(path, instance.getRecentCasePaths()[0]); + assertEquals(1, instance.getTotalRecentCases()); + } + + /** + * Test of updateRecentCase method, of class RecentCases. + */ + @Test + public void testUpdateRecentCase() throws Exception { + System.out.println("updateRecentCase"); + String oldName = "oldName"; + String oldPath = "C:\\oldPath"; + String newName = "newName"; + String newPath = "C:\\newPath"; + instance.addRecentCase(oldName, oldPath); + instance.updateRecentCase(oldName, oldPath, newName, newPath); + assertEquals(newName, instance.getRecentCaseNames()[0]); + assertEquals(newPath, instance.getRecentCasePaths()[0]); + assertEquals(1, instance.getTotalRecentCases()); + } + + /** + * Test of getTotalRecentCases method, of class RecentCases. + */ + @Test + public void testGetTotalRecentCases() { + System.out.println("getTotalRecentCases"); + int expResult = 0; + int result = instance.getTotalRecentCases(); + assertEquals(expResult, result); + instance.addRecentCase("name", "path"); + result = instance.getTotalRecentCases(); + expResult = 1; + assertEquals(expResult, result); + } + + /** + * Test of removeRecentCase method, of class RecentCases. + */ + @Test + public void testRemoveRecentCase() { + System.out.println("removeRecentCase"); + String name = "name"; + String path = "path"; + String name1 = "name1"; + String path1 = "path1"; + instance.addRecentCase(name, path); + instance.addRecentCase(name1, path1); + instance.removeRecentCase(name, path); + assertEquals(1, instance.getTotalRecentCases()); + instance.removeRecentCase(name, path); + assertEquals(1, instance.getTotalRecentCases()); + instance.removeRecentCase(name1, path1); + assertEquals(0, instance.getTotalRecentCases()); + } + + /** + * Test of getRecentCaseNames method, of class RecentCases. + */ + @Test + public void testGetRecentCaseNames() { + System.out.println("getRecentCaseNames"); + String[] expResult = {"","","","",""}; + String[] result = instance.getRecentCaseNames(); + assertArrayEquals(expResult, result); + String name = "name"; + String path = "C:\\path"; + String name1 = "name1"; + String path1 = "C:\\path1"; + instance.addRecentCase(name, path); + instance.addRecentCase(name1, path1); + String[] expResult1 = {name1,name,"","",""}; + String[] result1 = instance.getRecentCaseNames(); + assertArrayEquals(expResult1, result1); + } + + /** + * Test of getRecentCasePaths method, of class RecentCases. + */ + @Test + public void testGetRecentCasePaths() { + System.out.println("getRecentCasePaths"); + String[] expResult = {"","","","",""}; + String[] result = instance.getRecentCasePaths(); + assertArrayEquals(expResult, result); + String name = "name"; + String path = "C:\\path"; + String name1 = "name1"; + String path1 = "C:\\path1"; + instance.addRecentCase(name, path); + instance.addRecentCase(name1, path1); + String[] expResult1 = {path1, path,"","",""}; + String[] result1 = instance.getRecentCasePaths(); + assertArrayEquals(expResult1, result1); + } + + /** + * Test of getName method, of class RecentCases. + */ + @Test + public void testGetName() { + System.out.println("getName"); + String result = instance.getName(); + assertNotNull(result); + } + + + + /** + * Regression tests for TSK-227 + * Make sure that paths are normalized, so that different representations of + * the same path don't result in duplicates. + */ + @Test + public void testNormalizePathAddRecentCase1() { + System.out.println("normalizePathAddRecentCase1"); + String name = "name"; + String path = "C:\\biig-case\\biig-case.aut"; + String oddPath = "c:\\\\biig-case\\biig-case.aut"; + instance.addRecentCase(name, path); + instance.addRecentCase(name, oddPath); + assertEquals(1, instance.getTotalRecentCases()); + } + @Test + public void testNormalizePathAddRecentCase2() { + System.out.println("normalizePathAddRecentCase2"); + String name = "name"; + String path = "C:\\biig-case\\biig-case.aut"; + String oddPath = "c:\\\\biig-case\\biig-case.aut"; + instance.addRecentCase(name, oddPath); + instance.addRecentCase(name, path); + assertEquals(1, instance.getTotalRecentCases()); + } + @Test + public void testNormalizePathUpdateRecentCase1() throws Exception { + System.out.println("normalizePathUpdateRecentCase1"); + String oldName = "oldName"; + String oldPath = "C:\\biig-case\\biig-case.aut"; + String oddOldPath = "c:\\\\biig-case\\biig-case.aut"; + String newName = "newName"; + String newPath = "newPath"; + instance.addRecentCase(oldName, oldPath); + instance.updateRecentCase(oldName, oddOldPath, newName, newPath); + assertEquals(1, instance.getTotalRecentCases()); + } + @Test + public void testNormalizePathUpdateRecentCase2() throws Exception { + System.out.println("normalizePathUpdateRecentCase2"); + String oldName = "oldName"; + String oldPath = "C:\\biig-case\\biig-case.aut"; + String oddOldPath = "c:\\\\biig-case\\biig-case.aut"; + String newName = "newName"; + String newPath = "newPath"; + instance.addRecentCase(oldName, oddOldPath); + instance.updateRecentCase(oldName, oldPath, newName, newPath); + assertEquals(1, instance.getTotalRecentCases()); + } + @Test + public void testNormalizePathRemoveRecentCase1() { + System.out.println("normalizePathRemoveRecentCase1"); + String name = "name"; + String path = "C:\\biig-case\\biig-case.aut"; + String oddPath = "c:\\\\biig-case\\biig-case.aut"; + instance.addRecentCase(name, path); + instance.removeRecentCase(name, oddPath); + assertEquals(0, instance.getTotalRecentCases()); + } + @Test + public void testNormalizePathRemoveRecentCase2() { + System.out.println("normalizePathRemoveRecentCase2"); + String name = "name"; + String path = "C:\\biig-case\\biig-case.aut"; + String oddPath = "c:\\\\biig-case\\biig-case.aut"; + instance.addRecentCase(name, oddPath); + instance.removeRecentCase(name, path); + assertEquals(0, instance.getTotalRecentCases()); + } + + +} \ No newline at end of file diff --git a/CoreComponentInterfaces/build.xml b/CoreComponentInterfaces/build.xml new file mode 100644 index 0000000000..34bf86be8d --- /dev/null +++ b/CoreComponentInterfaces/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.corecomponentinterfaces" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.corecomponentinterfaces.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/CoreComponentInterfaces/manifest.mf b/CoreComponentInterfaces/manifest.mf new file mode 100644 index 0000000000..514519f60e --- /dev/null +++ b/CoreComponentInterfaces/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.corecomponentinterfaces/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Layer: org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager + diff --git a/CoreComponentInterfaces/nbproject/build-impl.xml b/CoreComponentInterfaces/nbproject/build-impl.xml new file mode 100644 index 0000000000..dc08b8cc9c --- /dev/null +++ b/CoreComponentInterfaces/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.corecomponentinterfaces-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/CoreComponentInterfaces/nbproject/genfiles.properties b/CoreComponentInterfaces/nbproject/genfiles.properties new file mode 100644 index 0000000000..614b3b3cd2 --- /dev/null +++ b/CoreComponentInterfaces/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=70bb94aa +build.xml.script.CRC32=c5094f8f +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=70bb94aa +nbproject/build-impl.xml.script.CRC32=23300e1b +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/CoreComponentInterfaces/nbproject/project.properties b/CoreComponentInterfaces/nbproject/project.properties new file mode 100644 index 0000000000..c51692cafc --- /dev/null +++ b/CoreComponentInterfaces/nbproject/project.properties @@ -0,0 +1,3 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +spec.version.base=0.0 diff --git a/CoreComponentInterfaces/nbproject/project.xml b/CoreComponentInterfaces/nbproject/project.xml new file mode 100644 index 0000000000..3276c14db8 --- /dev/null +++ b/CoreComponentInterfaces/nbproject/project.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.netbeans.modules.settings</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.26.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.explorer</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.28.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.corecomponentinterfaces</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/CoreComponentInterfaces/nbproject/suite.properties b/CoreComponentInterfaces/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/CoreComponentInterfaces/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties new file mode 100644 index 0000000000..1468238a77 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/Bundle.properties @@ -0,0 +1 @@ +OpenIDE-Module-Name=CoreComponentInterfaces diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java new file mode 100644 index 0000000000..79892763e0 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/CoreComponentControl.java @@ -0,0 +1,75 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import java.util.Collection; +import java.util.Iterator; +import org.openide.util.Lookup; +import org.openide.windows.Mode; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +/** + * Responsible for opening and closing the core windows when a case is opened and closed. + * + * @author jantonius + */ +public class CoreComponentControl { + + /** + * Opens all TopComponent windows that are needed ({@link DataExplorer}, {@link DataResult}, and + * {@link DataContent}) + */ + public static void openCoreWindows() { + // TODO: there has to be a better way to do this. + + // find the data explorer top components + Collection<? extends DataExplorer> dataExplorers = Lookup.getDefault().lookupAll(DataExplorer.class); + for (DataExplorer de : dataExplorers) { + TopComponent explorerWin = de.getTopComponent(); + Mode m = WindowManager.getDefault().findMode("explorer"); + m.dockInto(explorerWin); // redock into the explorer mode + explorerWin.open(); // open that top component + } + + // find the data content top component + DataContent dc = Lookup.getDefault().lookup(DataContent.class); + TopComponent contentWin = dc.getTopComponent(); + Mode m = WindowManager.getDefault().findMode("output"); + m.dockInto(contentWin); // redock into the output mode + contentWin.open(); // open that top component + } + + /** + * Closes all TopComponent windows that needed ({@link DataExplorer}, {@link DataResult}, and + * {@link DataContent}) + */ + public static void closeCoreWindows() { + WindowManager wm = WindowManager.getDefault(); + Iterator<Mode> iter = (Iterator<Mode>) wm.getModes().iterator(); + + while (iter.hasNext()) { + Mode mode = iter.next(); + for (TopComponent tc : mode.getTopComponents()) { + tc.close(); + } + } + } +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContent.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContent.java new file mode 100644 index 0000000000..ee8e1c78fb --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContent.java @@ -0,0 +1,44 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import org.sleuthkit.autopsy.datamodel.ContentNode; +import java.beans.PropertyChangeListener; +import org.openide.windows.TopComponent; + +/** + * The interface for the "bottom right component" window. + * + * @author jantonius + */ +public interface DataContent extends PropertyChangeListener { + + /** + * Sets the "selected" node in this class + * @param selectedNode node to use + */ + public void setNode(ContentNode selectedNode); + + /** + * Get the TopComponent that is used when displaying this DataContent + * @return TopComponent for this DataContent + */ + public TopComponent getTopComponent(); +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java new file mode 100644 index 0000000000..bb91673725 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java @@ -0,0 +1,63 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import org.sleuthkit.autopsy.datamodel.ContentNode; +import java.awt.Component; + +/** + * Responsible for a tab in the {@link DataContent} component. Displays the + * contents of the node passed to {@link setNode(ContentNode)}. + */ +public interface DataContentViewer { + /** + * Sets the node to display in the viewer. When called with null, must + * clear all references to previous nodes. + */ + public void setNode(ContentNode selectedNode); + + /** + * Returns the title of this viewer. + */ + public String getTitle(); + + /** + * Get new DataContentViewer instance. + */ + public DataContentViewer getInstance(); + + /** + * Get Component to display this DataContentViewer + */ + public Component getComponent(); + + /** + * Resets the component in this viewer. + */ + public void resetComponent(); + + /** + * Checks whether the given node is supported by the viewer + * @param node Node to check for support + * @return True if supported, else false + */ + public boolean isSupported(ContentNode node); + +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataExplorer.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataExplorer.java new file mode 100644 index 0000000000..0b0cdffcf1 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataExplorer.java @@ -0,0 +1,39 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import java.beans.PropertyChangeListener; +import org.openide.windows.TopComponent; + +/** + * The interface for the "top left component" window. + * + * @author jantonius + */ +public interface DataExplorer extends PropertyChangeListener { + + /** + * Gets the TopComponent for rendering this DateExplorer + * + * @return the DataExplorer's TopComponent + */ + public TopComponent getTopComponent(); + +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResult.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResult.java new file mode 100644 index 0000000000..743666df89 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResult.java @@ -0,0 +1,55 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import org.sleuthkit.autopsy.datamodel.ContentNode; + +/** + * The interface for the "top right component" window. + * + * @author jantonius + */ +public interface DataResult { + + /** + * Sets the "selected" node in this class. + */ + public void setNode(ContentNode selectedNode); + + /** + * Gets the unique TopComponent ID of this class. + * + * @return preferredID the unique ID + */ + public String getPreferredID(); + + /** + * Sets the title of this TopComponent + * + * @param title the given title (String) + */ + public void setTitle(String title); + + /** + * Checks if this is the main (uncloseable) instance of DataResult + * + * @return true if it is the main instance, otherwise false + */ + public boolean isMain(); +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResultViewer.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResultViewer.java new file mode 100644 index 0000000000..6ef241e890 --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataResultViewer.java @@ -0,0 +1,64 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.corecomponentinterfaces; + +import org.sleuthkit.autopsy.datamodel.ContentNode; +import java.awt.Component; + +/** + * Interface for the different viewers that show a set of nodes in the DataResult area. + * AbstractDataResultViewer has default implementations for the action handlers. + * + * @author jantonius + */ +public interface DataResultViewer { + /** + * Set the root node to display in this viewer. When called with null, must + * clear all references to previous nodes. + */ + public void setNode(ContentNode selectedNode); + + /** + * Gets the title of this viewer + */ + public String getTitle(); + + /** + * Get a new instance of DataResultViewer + */ + public DataResultViewer getInstance(); + + /** + * Get Component to display this DataResultViewer + */ + public Component getComponent(); + + /** + * Resets the viewer. + */ + public void resetComponent(); + + /** + * Frees the objects that have been allocated by this viewer, in + * preparation for permanently disposing of it. + */ + public void clearComponent(); +} diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml new file mode 100644 index 0000000000..83b7d8df3b --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> +</filesystem> diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/package.html b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/package.html new file mode 100644 index 0000000000..a43d19c45f --- /dev/null +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/package.html @@ -0,0 +1,106 @@ +<body> +<p>This package contains the interface classes that define the core components in Autopsy. These components are used in the difference zones of the GUI.</p> + +<h2>Autopsy Zones</h2> + +<p>There are three major zones in the Autopsy UI. The left hand side has the {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer DataExplorer} zone. This area is where you can search for and explore data. It has all of the analysis smarts. An example of a DataExplorer is the directory tree that shows the hierarchy of directories (and hides the files from view).</p> + +<p>The DataExplorer area identifies a subset of the data to show the user and passes the data to the {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataResult DataResult}s area in the upper right. In the previous example, the contents of a specific folder would be passed to this area and displayed in a table or thumbnail form.</p> + +<p>When a file or object is selected in the DataResult, it is passed to the {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataContent DataContent} zone in the lower right. This is where file content can be viewed in hex form, strings, etc. </p> + + +<h2>Data Flow</h2> +<h3>Creating Nodes in DataExplorer</h3> + +<p>Data flows between the areas inside of a NetBeans node. The DataExplorer modules create the NetBeans nodes. They query the SQLite database or do whatever they want to identify the set of files that are of interest. They create the NetBeans nodes based on Sleuthkit data model objects. See the org.sleuthkit.autopsy.datamodel package for more details on this. </p> + +<h3>Getting Nodes to DataResult</h3> + +<p>Each DataExplorer TopComponent is responsible for creating its own DataResult TopComponent to display its results. It can choose to re-use the same TopComponent for multiple searches (as DirectoryTree does) or it can choose to make a new one each time (as FileSearch does). The setNode() method on the DataResult object is used to set the root node to display. A dummy root node must be created as the parent if a parent does not already exist. </p> + +<p>The DataExplorer is responsible for setting the double-click and right-click actions associated with the node. The default single click action is to pass data to DataContent. To override this, you must create a new DataResultViewer instance that overrides the propertyChange() method. The DataExplorer adds actions to wrapping the node in a FilterNode variant. The FilterNode then defines the actions for the node by overriding the getPreferredAction() and getActions() methods. As an example, org.sleuthkit.autopsy.directorytree.DataResultFilterNode and org.sleuthkit.autopsy.directorytree.DataResultFilterChildren wraps the nodes that are passed over by the DirectoryTree DataExplorer.</p> + +DataResult can send data back to its DataExplorer by making a custom action that looks up it's instance (DataExplorer.getInstance()). + +<h3>Getting Nodes to DataContent </h3> +<p> A default DataContent viewer is created when a case is opened. To display the contents of a node, it must be passed to a DataContent instance. The default single-click behavior of the DataResultViewers is to lookup the default DataContent TopComponent and pass the selected node to it. See {@link org.sleuthkit.autopsy.corecomponents.AbstractDataResultViewer#propertyChange(PropertyChangeEvent) AbstractDataResultViewer.propertyChange()} for details. </p> + +<h2>Creating new Functionality</h2> + +<h3>Creating a DataExplorer</h3> +<ol> + <li>Create a module from within NetBeans. It must be dependent on these modules: + <ul> + <li>Case + <li>CoreComponentInterfaces + <li>CoreComponents + <li>DataModel + <li>DialogsAPI (if pop-ups and such are going to be used) + <li>Explorer & Property Sheet API + <li>Lookup + <li>Nodes API + <li>Setting API + <li>UI Utilities API + <li>Utilities API + <li>Window System API + </ul> + + <li> Create a class that implements {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer DataExplorer}. We have been making the TopComponent class be the one that implements DataExplorer. Register this class as a DataExplorer service provider by specifying "@ServiceProvider(service=DataExplorer.class)" in the class or using layer.xml. + <li>Implement the methods required by the DataExplorer interface. + <li>Register the class to receive property change events from the org.sleuthkit.autopsy.Case module by using its addPropertyChangeListener() method. + <li>Access case data using the org.sleuthkit.autopsy.Case module. + <li>Create Nodes for the data objects using the techniques outlined in the previous section. + <li>Wrap the nodes in FilterNodes to define actions as outlined in the previous section. + <li>Send results to DataResults using the techniques outlined in the previous section. +</ol> + +<h3>Creating a DataResultViewer</h3> +<p>DataResultTopComponent is the high-level window in the DataResult area. Each instance of this loads up all instances of DataResultViewers that have been registered with the system. Example viewers include the table and thumbnail views. If you want to make your own type of viewer, follow the steps below. Note that the table and thumbnail viewers come with Autopsy by default and can be used by all DataExplorers. </p> + +<ol> + <li>Create a module from within NetBeans. It must be dependent on these modules: + <ul> + <li>Case + <li>CoreComponentInterfaces + <li>CoreComponents + <li>DataModel + <li>DialogsAPI (if pop-ups and such are going to be used) + <li>Explorer & Property Sheet API + <li>Lookup + <li>Nodes API + <li>Setting API + <li>UI Utilities API + <li>Utilities API + <li>Window System API + </ul> + + <li>Make a class that extends {@link org.sleuthkit.autopsy.corecomponents.AbstractDataResultViewer#AbstractDataResultViewer() AbstractDataResultViewer} and is registered as a service provider for the {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer DataResultViewer} class by specifying "@ServiceProvider(service = DataResultViewer.class)" or by using layer.xml. This class will extend JPanel. </li> + + <li>See the previous sections on default actions.</li> +</ol> + +<h3>Creating a DataContentViewer</h3> +<p>DataContentTopComponent is the high-level window in the DataContent area. Each instance of this loads up all instances of DataContentViewers that have been registered with the system. Example viewers include the strings and hexdump views. If you want to make your own type of viewer, follow the steps below. Note that the strings, hexdump, and image viewers come with Autopsy by default and can be used by all DataExplorers and DataResults. You only need to make a new DataContentViewer if these viewers do not satisfy your needs.</p> + +<ol> + <li>Create a module from within NetBeans. It must be dependent on these modules: + <ul> + <li>Case + <li>CoreComponentInterfaces + <li>CoreComponents + <li>DataModel + <li>DialogsAPI (if pop-ups and such are going to be used) + <li>Explorer & Property Sheet API + <li>Lookup + <li>Nodes API + <li>Setting API + <li>UI Utilities API + <li>Utilities API + <li>Window System API + </ul> + + <li>Make a class that implements {@link org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer DataContentViewer} and is registered as a service provider for DataContentViewer.class by specifying "@ServiceProvider(service = DataContentViewer.class)" or by using layer.xml. This class must extend JPanel. </li> +</ol> + +</body> \ No newline at end of file diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/Folder-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/Folder-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..77fb7695deb151621129a32a9d1b377851a65359 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|RG)M`SSr1K(i~W;~w1B87p0L9)a(q9iy!t)x7$D3u`~F*C13 z&(AePq0Cs%RL{cPx*?W<fhpM2#WBRfzje}G|4D%|$N%c@db`N}!0dlb>vp|ZBz>Z$ zwR26=g_@NtqTXkBt+>{myEXE%=~|O#EV_;p=PW!RoUi0v&B!e1D(7Ml{N}bL`_hMx zU){8`zJ2rk@0;J}JQoppQ$J_jobs1TH|*DJ4G!=78EDBA*4xm^DOywIdDKyF`?>zp zjbCJ!D6QqVvFf4Jv_q*oIwrgqWN`00bIxSXVIdAyHOp^i`RSfPRuef)62FylK3M(V z`-$WoXHj=<Bk8#}d;{_lr=NFXy?svmM8&Hjp(+<g=J|nrb1T^E*1i{3)^6kq>dR8I z%s8}H*V@S-to7~IvOh7ZF1I&|<|YR?COtFSwqw?u19kygB4_rlce1+F_T`iB5{-vC zAsdXACg^^9_Uhwohwm)z3!2Ve;8m#?m=?8B@QhPC^D^#^=+GO5*A3VFJ^JHDe9R2> zkNYN1jJ~e)F_!z^Y_X5)b$PTtNT)<>n;;gWdr8kU%<k^dlKVgZh|LR>d=wwGVc(6O z8&1ZD)~)8al{NE#p@M6HQ{&f}QYz2oCz~_+?A5VSkyz>SrdT-auarxzl-Qhi+6Pne zH7hNOT6DBp>{o1fR(FDB+P&hROxqVuVh!Ju<#MOjC!r#$Wudz3gOVbhKFy68AxW2( zv|L)#veUiBW5IftBbPfie717BW2$zcwDV$pe9K2UPMcremNLyoJ^KYdS5Eg}@;l$b z<GqcIC0%;PgUaKXHUaYwt*%Z_cq1lzVD>K8t1XY4;ys<BemhA1QDc>9e!61noREnN tlba6K=L&c#9`t$8zU$n)AMro<>sJ}<eBrjZfq{X6!PC{xWt~$(696*oLhk?o literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/addImage-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/addImage-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a36d4714ac9db8a3888ab2610bef2ab0cfbb6b7c GIT binary patch literal 1632 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 literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/close-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/close-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b46fafe588f4b3e296cdfc9b08ff596b9745df GIT binary patch literal 1069 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8zj(ShhE&{|8W!s#5-##D zZTj7bcatKwEc>%`npi+Le{aK9fuKvPGBdVn9@(aLY=(yC<YhA?<iA|~k&?7v-<GEb z+y5=`RP@cr=nhyZ=oGx5mhr4tmao8ywYvf(627Hhdw=du;`=<a26fAs#^#%!TR*RP zK5w(sHGQel<}K4#p8WbR!&Gy*+((A|y$pLk*-TKc`=D=7&pu;I1LM9r-@RYAFsNSP z-g;nRKg0RkRskn&{IyY$SahZO%)@lyA8Z@y*mqTwbXAqxGW_1oaDU##fPw<$3Ho-6 z7PH7kZPIfx4b)+huK99~`MIvkjGKx3{%w*vuv^rj++DBcs%1mD-O~$`<acaadLv4% zK$)**S4)IM#=}5=vxZYn32%xR&cAtf{A5O#tFE`op+cW&r`f(UCcfI}s&j_vstxCI z#tqw=r<d$0v~WEBv2<HU$v%~X2iE-Fb3k3K?s4T}t_uOnAKv<&QrJ9Gt5G1|lXK7Q z?aH_A&wqAff4RPpdA?HN^@pW_X~OFIYh9!_T{v+4wVuQC=~jK)J)ReuYg_U2@*Rqf z>T*AO)}XrjZSmffoaf8Rl?`osJ(87mnmT&KSLiUXl~{NC&01^5aDTa4ZH1+X_th)W zF+IK|^Md2vP1wDs$HTijw|&>H8?NW(cKiE2WONiVHZDt8w3??VQ2wy)v1m<(8vV+I zKNDNdds%(mvY5a1!=0(xAHu`ePf^XB#rJa8z9KPM>BIkje>>Ra@}_)ZtLu7p6PNsG z4z31=wQP@<FL9o-@=9bwPU73IvAZ`3<@EJGwl8{U)$a5ou<D<-CSzQ3nC&DL<HMZ{ zno@FY^IcX8sUF;1TAF!Iv0k5{FYtd0^MuWl8DzBnX#}Yjsd_kZPo1@XO81;I6NR0H z_A}|se!@H}k+VTTpLKa?>ut_epOwnG-B(uLl2uUO{6<go$P|S)7Y&;4KHK(E+<wDS zi#s18$|lBzwu-yEKMYigPdeNBL~BmOnJ4pSNzD)zE?dp@{LyOR1J7$}-Y{L+f8P7! z%$@@i+FRegy>aJS+U@Q))2!c!DMsInWxN^t-P+2a{L_+L^^}72$b)tZ`kr-IX|4Nr z;&rSl<DyS{Ius86s=6a)9xn7s^<(NAz2ppz&6jps|4@@@`ki_E;tJz6i+T?CEj@L* zx%lhdzE3R88+e#krC3+1+?w2<>2T%4dmjeH_j^tip0$2=etM*ivZ<BP(Zv=O9;t?B zr4LjGlsR2%4L;LaET?fpIk?}uw7kK3-`!Y4CtG)`cZ~9v{)CopyLD>M5336`9gUwl z87`Sil?%45y!)g~<VWAL%vUkX7H^$ar#ffpe>K5!kqPpJKN{}ZJl3f-JiNc?^<3X; jOeg+)Tls&R4P$0^j?3h~TlO$8Ffe$!`njxgN@xNA)D!!& literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon-deleted.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon-deleted.png new file mode 100644 index 0000000000000000000000000000000000000000..ef172e501b5ff414e7c95d9a96f70e2be2063bfb GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|RG)M`SSr1K(i~W;~w1B87p0L9)a(q9iy!t)x7$D3u`~F*C13 z&(AePq0Cs%RL{cPx*?W<f$@!}i(`m|fA1vQ{96GcZ7YpRR!o_~qP*md;N8W4T3HlT zga3K8{b})u+|ytvk(y`g;>G5$O2F%gz!90o9|hgX+&zrR2H$F5XE#Y_-FoH~K268| zeD%4HoUL*GD??6Qef{;e@Ak0Ocg46`*LS)o?fYf-;Z50Yp?`&Gn<Y;@{p271DRuD^ zTc*&^z_nrZDw9txcw*ZWx1PO9d#abUSa)sA>L>Y3P8=^vW!SgnCU1;5klSv+^ZDog zCi}$Gn+)ckPn@OJ>9%-3D@Uu{ilzmRo*tD~F1*Zf{9t9(r=a@>40w|FGKCAMMn|*! z{(a!{=S@#$OYeC9P)5Gm;4gQcQLCX`f3t4J^y$uA6PlSV77L!ZI8l8=mn;7~zvbEz zyVm8;W3;sYu2599%g5g4%fpi?PLnlxd@naO`7Kwrob@c!AyI#B>fRKt{yVGU62JWZ zyI{fHJnxc-?&I$93HR>){7_)A<fKU3?f^%})mJCI*q}4-J8Me0_~dr>fC>YNH3=GB zPD&F`{E{=7?c2$B+Rl>k=DoH+t%H5XAHI3(xPN~=xAU~83l?0=@YoW+X*2WZUsX5P z>m1&(>(HAwJgXL6Na4C%%EuKk?P-^|_<eVt#m_%i1`4nkPCwmwGbijxW!#w*Bc<bo pNmg^kf>&PIUSRR3bKNKX!=3Fu(-v<QWME)m@O1TaS?83{1OP-_6dC{k literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add0e90646ddd16d3d53fb96f50523586ca2f74a GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s74Lw~PLn>~~y=<G+;vmBQ z;ifRhYqPqA9UUF>ly)}ezEfPXdE@3S-V?n$=8At{nC*5q)bj{Gj|Ug??qgF+jgzlT zu#re}__zPN#4+9-)1FtJx9EF+z-R9H^nlQ-%Tpu!*S+3%;J(>oMbAl7mSuA3gxubC z;QL?m%O>xuQvT~N$dnRry|_A2;(OoYH~)FAl-kZYY|vxsE4*1JyPkE|y4`OdTg~;8 zJ#27$k;c97#>^i@Gq3MWjx3w~{HGB^`|$@A`xs=7>-sbFTVJkasF*jO{aTZO0>>f$ zhF953wV65=bubmm+;3=I$D!aU#3j>ze2R)^R#9YkgU)G<0t*?o1XUJ)Q-;*YI_AHx zqga={cL)>_;b>A&<!EX;d|AP!an&k~gxlYQ+Y)#0G&k666?<L&SN-G1+@^)^6@F{k S$}%u8FnGH9xvX<aXaWF&>6(E6 literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/folder-icon-deleted.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/folder-icon-deleted.png new file mode 100644 index 0000000000000000000000000000000000000000..3603190e327ac916f05127dd986307e240568d65 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^xl_H+M9WMyDr z;4JWnEM{QfI|Ravq8eTe3=9mCC9V-A!TD(=<%vb93;~Imc_n&&t|1C##(JiD7UtFs zu?!4MC7v#hAr}6vlVUxB6D5v^PY@R^G2~d(G|AE2G44yLFbiiar>jA9-Z|Z`6L$73 zyO$z3ZI)|Df_#9=LYLrhqdOeWp2ZygbL-^UJ1s3Uw#-SZdUmH>Zu`Hz&sQ9O*24Fv zLN0FJ^Y3==A5QcLvtQ<Xc9(Ay&(_rjcNVt2S7xohf7WDQ>E#czOjxsPlfK;4Q250# zF@g6_b810()<d)D3J+?z4yaCgQ1x+ZaC1rHRHvec|F{z8v9<i!Zg624%bw8JEb#}E zb#BB=n2~>=sN=cZw40(82OoVXRdLgD<@|qS3+J9#ksUj$bk45(G~0zqzhlQKmXo(s z&b0sWWto<wbMA`bzixxr_8TQ@8T2{6#yj_DinBViUES4?63uZld99X9^VSZ(d#)-0 z%}3jx3v8ak(WIHa(!jN73s*hIpP4^cCcRZFm{Ve{<R|q|zFZ)C4?_{#yDdH%-=fzi ztm|iczEb4H<>wDK+v&fK=R9k!VziW_GC$$xi8x1rYvLSDhQ)$vvMF54m;%d9m+iB0 zdcWIy<^M+8shTFbb1k<B@xMQKB%xKIKyu5B7kWo?>MalLOHWZ}cpmM#D&fk6{v(bn zFP!<j_Xo>P*UoujqLDIOjO@Mh=VzR$kYa6I{4{CRfn>cSIk!^-AMBpX``MedM_(kt zN~0&bMB@FWg~wMlpIg_w*Rs6%KnTY+J9m)+YvY8~cHDo3EpyIF^~_k;wd0=n!Eb8Q zeIwOAU3>U5`S-*-6B{37t1kLors(&{>}%i_yK|1=lWTad-BQt4mhrfK?8&yZh4mjj zdm_CLzL+X8#q+kfijeYt?aZUn{2mtzo7#OQxo!}Sc>MYErvIk@SpAnMRJitd2{AA* OFnGH9xvX<aXaWF#nM&UP literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/hard-drive-icon.jpg b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/hard-drive-icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f948ab2ac1492f62a0872e50d516b48c018e3fa4 GIT binary patch literal 822 zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7xnm>3yBhzSCiS(!nAjfI7om7R^99fUbJ zxj8vFxH#C^xp=v_xOsSZc-T4l_<4EwKx~j9j7&^S%*@Pe%*<>&9PAt*6{O++2N(o7 z7z7vum>HEAm;@P_1sVSzVUTBFU}R+k0|qEyWMXDvWn<^y<l_E+gkh@y0}~@NGZPCl zD=P~N0|R3%BNH<Niy*6zqM;+3a9|?4QlW@Z<HUs=%1#>(iUwW$pkka<)WpdpCN3c< zrK+Z`p{ZqJYG!U>Y31zV>gMj@=@lFj8WtWA8I_!pnwFlCnN?g;T2@|BS=HRq+ScCD z*)?hMl&RCE&zL!D(c&dbmn~nha@D5ITefc7zGLUELx+zXJ$C%W$y1juU%7hi`i+~n z9zJ^f<mt2LFJ8X-`04YPuiw7^`1uRuFGdDtu&+P_#A9gw5@cXvWMW}qW?={Ui;=0E zfsu(>kcCyzkWI)jkUg<bSjni7L&Ry~!i@(xm5qZwh$a<X<PuXcd8qmk<TbF*i1Szz zSw4e%4B@X^3_Q$?3`~N|f(-Tyf93wJ{VKU9{-bkbwtt7b&>p#6zK^54+1pKLS4&q< zzbPl>sJrLr4Bk~7+Ao_b*C~I?{IPlEkLYhxf8;JX|LDC$#caP>zn=R|s?86LKKXo> zM+(QKEtxX8+l3U4B(tn5a?5V{@%ZEQW4FwYy_b!sKh*o<ajo9`b+2^U)-L=}7TO%h zR2e8IdF;cB7pp=y@W~XhpR)MR(0FTq|DNjK9zU2q{89LE_ThW&V^T4jV}7(Bo;*=R b>6yJ*_znq|9=CX%!xrZQqkpet{C^Vws>UQr literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/new-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/new-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..14206340e177dc0d06327438ca11fcff38ef706f GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14rT@hhR^1ufeZ``Ea{HEjtmSN`?>!lvNA9* zGX(gAxH2#>u(7dma&mHWbBl<Gh>D6zOG_IY8=D%Nnwy(jT3T9JSlQXxF_bYdR538r zFsR3=dpLXe`}>Fbh6V-(hJ}Ttq@-kIWaQ=L<>%)Y6%{cwFfg<;Fmy98^e`~=GjKL> za(8mecFQs>WMEjtz_5maVFLrhUIxW(MbmCmvpzG16ATPz7#LnKFuY}8_|Fj16H>6f zprxf{(xgdq=gwWbeC?VwYu2t^yJgFk?OV6+*}Z4ao;@AMJLa63v-s5FWv7>IyR+@^ z;lrm+oqF~0)z`0I|9$=U`}gmke}4Y||DRzLjD`TA5J+gOuV-LjWGD&p3;sW{0YmV2 zc2x!j2F?PH$YKTtzQZ8Qcszea3aBJ0ag8Vm&QB{TPb^Ah2uRG#E79|F4N)jF)-%<! zFt=`qWnf^~;pyTSq7j_@qo3R0!SuxEEzEk#GlDkArMYu!Y?ziJ(C*ck8gbVq;lPm& zcOE6yX^Dl6rzN~AJ3JDm7A7Spwd~-E<@eaULQ+psu{i4#$K#^Lg$<3oW!pVpzw}C; zSXf>*_3HKT14_x-i`T4Mzkb!B{)fTUvb6>QhbL^j+;(C`(g}-<j8iXPf6mfO<TkIY zt#zHjJ>e0%#DYDmv}z0_UFI+?zIMs$f{5HAkCzNH6n0n&ENnLY`@k=hq3%p@x~bz5 QV^C`GboFyt=akR{00HmLxc~qF literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/open-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/open-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d16e51b68287b10e230b6f6a25efe30e7b7b1dee GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8A9=bshE&X%JJmNQBvqts z{`=qW_7<l{Sxqflpdg~bYZ4;DvA|5JajxNvRWFZ47+#bxUsuxF>6p5-FtMrLaMy$x z8CMc+yl^uyRALlunxrvx$}Rcd)^B+(&)m8H_|YvVr(BTy;Jfe1J^kl<-dlcuvM0Ro z_XP*-gjYvW8U637Rk~^JJCSlDJ6dP9Hq&KepI>(8L)q7|L?!%mdGNQqKazdk%dHny zmF0%JB~|^})3nv$N71sW%Cc`y?KRZzQ|!_@uNl7b-#n43ZFP^Mg9;MDuVgUpjW&A~ zUSFrZR=Rgxp2(6{p^cZgxUx=`>fTs*km;A)t(@0a5<GI+JD8>@Y*bJ@(x@;`LG{87 zi`%mt?%#T$5)jc~Sl4hn&-t@k!Ga?0BMvMr4kr)qH*@*$+vXP^`>Qh!s=6H7Of%GY zzt=IXEH#}xXW8Qv{W%LNA_bWm8^oOr+kOgsQhZW#;@5;S)1`l!7>+gAvj*-fJHPtd zg>Nq+7d?>oIO4&y!7<07c}k;^hv2$6-ipVikpdSCMc5szx3V(al0WWo!dHDR!zG48 z+s=rV<=Jl4P<X)Kxak%5l_nPfu?03vOA~v1r#cvLt-AM3zxDm`GiRsHJatxBG~IJ` zWZ2dpDwDYxS4AnzTasj4dfG*4{>GU?^3UF<Y<cP!R$e0Hrnva=^cx?Zmw!=hzj;r0 z!D`kkI;VHFaCk60QVcwB|8m>nSAu2t{~Bb!W!bjv<Dw2<?Qp}rnfk}i)t}<tKgTg- zPrxR@4bKj0h0J}OP?WGKA??7a=C>0+w_bl_yC#0~T+8|yCok>aV!CG8{?+2wcT8EV zc`f(;dG}?LKYl#Qr*q)rw3@c3QkLNvN8&g3C0U$#R>I%D`&VHP?}6mG?3M2?xjx%d zn6@oXO`2El9pi&*<r4dOo-dKSermE2Ctvwj<JY|(9^XhWSyo<@^?|u4uG7P$_hdtk z_u)kiY`g#QwWKag$;q*GE<assaqQXbh2b+a;?fe{6^n3PzvQy0kk`Ujbo1%TKpwxH z>l(@wl|PH*v`-0Lb7h&Dr}`#^2gkY8O*D8M*92a#<@s>^fa$zl``NGOHvLTa8Qhgv zqp;}0wT4u+8yA16IIiJ*oS#|1B&2pogOSzI^4XV<FDJ3aoIJOw{=ecqv$n6RzRB}0 zyz}Xeb?dUeT1N5Z@k!y&e3dTxh}yfEtSJavd?j+9{mkWay7%pw_$I99-@LXh|6ac6 zycTl)-PV*zxm(oa9WHuot7&|AD1XkMtd__6=Xl*0zS+ULZ+6oB$pMr7ZRSt8ynoy2 z8)ssTOm6DN|KH%oCs*W>{g1)yPy8oW6K3}*kAjSjPI+y_IEQiGvPY{K{;(hVHpTpl Ts_}LP1_lOCS3j3^P6<r_1XTK~ literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/save-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/save-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b6595171d4df29c3d0917a743e7a7fe116077b1a GIT binary patch literal 1215 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|RG)M`SSr1K$x4W}K?cC(XdX65{FN7~<i*HO#wPCRF6#tBd`! z+|za~-)&qdu(_k-QO1GRcQG8V4)rQ3^)0Y>D0zHJCq~op&JF>VPPU^uF)cSWPbRU1 zr)3&+^a!LaOJ8>R>fL3#m+xBj`ek`u=+_b@r>GByu7AI`s`y=H?e~&QPWFG#7y3&7 zd@wtA&MGm(c%zT;I@u-HJ}S#>la0BP!SGb{>Axc<vc>C<3a9%&e%bC-@ybQoQAKNW zZ_~sF&lWV^e|O}@t}0&p+HW={t7l2={P5Q7R4<zrx2sK<`G-e~9VAqZU6u7_wza*! zeL#LM%iT2g`n=e~<?(wsV{6vxPB-8a`eWMlpw(gh<!0ZKw1yMi^IqJ4YMCdX%-Qxq z*4$Lc)$q+?iQJ?It}E7DxsY)saJ{{SOWYTi{k1B5$93BH=3dlPHe8)!{mJN9fsg+# zT^YG;7qV=@O5)GGywvd_?9z%Jk5BIV43yiB8)$D0of8#%^c9al<wfDz<NgL*En%94 zQzo`ZyPdSj;@I)B+&bg7*&9iPPm9!lB^?k}zUk3xAY|`jpvIK6a#xSnQX^v*|1Vc9 z3umqKR1p$?Kfy@ksMW8%a=Y%{RIFO`esbc$zY{$k+6LWFT;Lk9YW|U1x84ZYUM!Cg zpU#&Z`S5D$pC7OI^zLs;h-8z?pHWeE*7?kdkQHmDyUe{`?<*E;+wNlP*UfmxLgR6{ zwd0MKkJkKUURU!ktm^U66RJ`xb!KI{)Kx9{BNY-7lJfP-nOR0h4sOw|7L*nGbRzk* zk3srO3AwTlK4~dV5B~&oPhW1vZ_+V!CrhaI%rjSW*3T3C8F#I;dv5avuHzH$9@hKl zqp<SgOUt(!=MzOH&QLvKBy4oNig99|l1fUS$>j6C5<;3^UBcHc53=bza;Bx^9NXtf zEjfnO)*s5s4f5U{yl;Qt!?#?E-PIC;=kkR04DaP1vc8diop0*AqL2f{pDxX;{4`ZO zbMnFojJJJ1oSW=BhcE9yf42d*+PS&aqPIFz=WTGYe5NWLy`AmGj!Va9Ze^XMoqEPz z$+MbA(|yBIO?{O&J7Nw`zn}l`viIyAA5MmEXik;6!)ch(%yoD|i$|@j1*4B><FPHT zwXV+Ekn+punW-o1rFAP=j^0mV4BP2aHC=t>iJMd1mEJw=4OqS}Dp<q+`jYaK-Zx(e z`ML!jjd&`1-?QSsRfd{!|0%ZAsU>M1Yv=Ae&6eqqe9zR#b;0K*i4^A-{SPaZcdR?S z>xF@D^F_%yn$ufT0{ZK_FR->U>Bsj}SRA={AW+8p|Kq=MaTV{=--KV^81ck;Rvy35 zo=qjf>8EygY*q4FDs=7o&$>jx&)wV_qFt{NR;MI<p3Y~t=iS4JlZzkx<oNBprS6Z^ zbo(kk{rUBee>gKemb+J1FZ}KWhuYz(Wr+$-fs2CWvUSQ9aLw-f^2<BR*=)bz>_vZ$ zYb)K6eR%h}{4ww6=2!mB^H*wEBe`?c4<$dN)zc=48N{wQ-~D^v^dd7qd$UtcpG*Gm Z&JgG;klMG0lYxPO!PC{xWt~$(69B}$HVps( literal 0 HcmV?d00001 diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/vol-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/vol-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd23b971a3687894f31ca04c2cbd9179fb2e57f GIT binary patch literal 3196 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 literal 0 HcmV?d00001 diff --git a/CoreComponents/build.xml b/CoreComponents/build.xml new file mode 100644 index 0000000000..da573e2729 --- /dev/null +++ b/CoreComponents/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.corecomponents" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.corecomponents.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ContentViewer_example.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ContentViewer_example.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d71c4a06c8d63ae581684547870c27ee934552 GIT binary patch literal 48659 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 literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Hex_Content_Viewer.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Hex_Content_Viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..1766f03aec6f5386d89c497af4b18eb55648ce3e GIT binary patch literal 40655 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 Yt{@@xD^-CV3=9kmp00i_>zopr0QoV3)Bpeg literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Picture_Content_Viewer.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Picture_Content_Viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..79914b834bc3870967f8ff166a2637c4621426ec GIT binary patch literal 49846 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 literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ResultViewer_example.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/ResultViewer_example.png new file mode 100644 index 0000000000000000000000000000000000000000..fd813be8529c1127064b641ec9ab4e552561e7bd GIT binary patch literal 45776 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 apD{T0>)N__XI=&d1_n=8KbLh*2~7aL@8HV- literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/String_Content_Viewer.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/String_Content_Viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..cb0b296174d20a21fd75bd48910711228ba05b0c GIT binary patch literal 19924 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 ANdN!< literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Table_Results_Viewer.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Table_Results_Viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..10af96f850fe9300ad439bcaa9346bdef325e8c2 GIT binary patch literal 72064 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	C63g7@ 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 T5o-Yk1_lOCS3j3^P6<r_|4OqL literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Thumbnail_Results_Viewer.png b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/Thumbnail_Results_Viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..5494c3cadf8212b71c433fb6a0abce5526c29a29 GIT binary patch literal 117148 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%0A5=v6B5~7VAS(#inM{=EEgU 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 literal 0 HcmV?d00001 diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-about.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-about.html new file mode 100644 index 0000000000..c212ee26dd --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-about.html @@ -0,0 +1,30 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<html> + <head> + <title>About CoreComponents</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About CoreComponents</h2> + <p> + <!-- TODO describe your module, add more pages... --> + Contains data result and data content. + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-hs.xml b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-hs.xml new file mode 100644 index 0000000000..e69727b569 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-hs.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 2.0//EN" "http://java.sun.com/products/javahelp/helpset_2_0.dtd"> +<helpset version="2.0"> + <title>CoreComponents Help</title> + <maps> + <homeID>org.sleuthkit.autopsy.corecomponents.about</homeID> + <mapref location="corecomponents-map.xml"/> + </maps> + <view mergetype="javax.help.AppendMerge"> + <name>TOC</name> + <label>Table of Contents</label> + <type>javax.help.TOCView</type> + <data>corecomponents-toc.xml</data> + </view> + <view mergetype="javax.help.AppendMerge"> + <name>Index</name> + <label>Index</label> + <type>javax.help.IndexView</type> + <data>corecomponents-idx.xml</data> + </view> + <view> + <name>Search</name> + <label>Search</label> + <type>javax.help.SearchView</type> + <data engine="com.sun.java.help.search.DefaultSearchEngine">JavaHelpSearch</data> + </view> +</helpset> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-idx.xml b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-idx.xml new file mode 100644 index 0000000000..651659b2b4 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-idx.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 2.0//EN" "http://java.sun.com/products/javahelp/index_2_0.dtd"> +<index version="2.0"> + <indexitem text="About CoreComponents" target="org.sleuthkit.autopsy.corecomponents.about"/> + <indexitem text="About Result Viewers" target="org.sleuthkit.autopsy.corecomponents.dataresult-about"/> + <indexitem text="About Content Viewers" target="org.sleuthkit.autopsy.corecomponents.datacontent-about"/> + <indexitem text="About Data Explorers" target="org.sleuthkit.autopsy.corecomponents.dataexplorer-about"/> + + <indexitem text="About Directory Tree" target="org.sleuthkit.autopsy.directorytree.about"/> + <indexitem text="How to Open Directory Tree" target="org.sleuthkit.autopsy.directorytree.open-directorytree"/> + <indexitem text="How to Use Directory Tree" target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree"/> + <indexitem text="Image Details Window" target="org.sleuthkit.autopsy.directorytree.image-details"/> + <indexitem text="Volume Details Window" target="org.sleuthkit.autopsy.directorytree.volume-details"/> + <indexitem text="File System Details Window" target="org.sleuthkit.autopsy.directorytree.filesystem-details"/> + + <indexitem text="About File Search" target="org.sleuthkit.autopsy.filesearch.about"/> + <indexitem text="How to Open File Search" target="org.sleuthkit.autopsy.filesearch.open-filesearch"/> + <indexitem text="How to Use File Search" target="org.sleuthkit.autopsy.filesearch.how-to-use-filesearch"/> + + <indexitem text="About Result Viewers" target="org.sleuthkit.autopsy.corecomponents.dataresult-about"/> + <indexitem text="Table Results Viewer" target="org.sleuthkit.autopsy.corecomponents.table-results-viewer"/> + <indexitem text="Thumbnail Result Viewer" target="org.sleuthkit.autopsy.corecomponents.thumbnail-results-viewer"/> + + <indexitem text="Hex Content Viewer" target="org.sleuthkit.autopsy.corecomponents.hex-content-viewer"/> + <indexitem text="String Content Viewer" target="org.sleuthkit.autopsy.corecomponents.string-content-viewer"/> + <indexitem text="Picture Content Viewer" target="org.sleuthkit.autopsy.corecomponents.picture-content-viewer"/> +</index> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-map.xml b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-map.xml new file mode 100644 index 0000000000..a8379fb4cf --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-map.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE map PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Map Version 2.0//EN" "http://java.sun.com/products/javahelp/map_2_0.dtd"> +<map version="2.0"> + <mapID target="org.sleuthkit.autopsy.directorytree.about" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.open-directorytree" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.image-details" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/image-details.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.volume-details" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/volume-details.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.filesystem-details" url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html"/> + + <mapID target="org.sleuthkit.autopsy.filesearch.about" url="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html"/> + <mapID target="org.sleuthkit.autopsy.filesearch.open-filesearch" url="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html"/> + <mapID target="org.sleuthkit.autopsy.filesearch.how-to-use-filesearch" url="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html"/> + + <mapID target="org.sleuthkit.autopsy.corecomponents.about" url="corecomponents-about.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.dataexplorer-about" url="dataexplorer-about.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.dataresult-about" url="dataresult-about.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.datacontent-about" url="datacontent-about.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.table-results-viewer" url="table-results-viewer.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.thumbnail-results-viewer" url="thumbnail-results-viewer.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.hex-content-viewer" url="hex-content-viewer.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.string-content-viewer" url="string-content-viewer.html"/> + <mapID target="org.sleuthkit.autopsy.corecomponents.picture-content-viewer" url="picture-content-viewer.html"/> +</map> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-toc.xml b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-toc.xml new file mode 100644 index 0000000000..eb5d8fa3d0 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-toc.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 2.0//EN" "http://java.sun.com/products/javahelp/toc_2_0.dtd"> +<toc version="2.0"> + <tocitem text="Data Explorers"> + <tocitem text="About Data Explorers" target="org.sleuthkit.autopsy.corecomponents.dataexplorer-about"/> + <tocitem text="Directory Tree"> + <tocitem text="About Directory Tree" target="org.sleuthkit.autopsy.directorytree.about"/> + <tocitem text="How to Open Directory Tree" target="org.sleuthkit.autopsy.directorytree.open-directorytree"/> + <tocitem text="How to Use Directory Tree" target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree"/> + <tocitem text="Image Details Window" target="org.sleuthkit.autopsy.directorytree.image-details"/> + <tocitem text="Volume Details Window" target="org.sleuthkit.autopsy.directorytree.volume-details"/> + <tocitem text="File System Details Window" target="org.sleuthkit.autopsy.directorytree.filesystem-details"/> + </tocitem> + <tocitem text="File Search"> + <tocitem text="About File Search" target="org.sleuthkit.autopsy.filesearch.about"/> + <tocitem text="How to Open File Search" target="org.sleuthkit.autopsy.filesearch.open-filesearch"/> + <tocitem text="How to Use File Search" target="org.sleuthkit.autopsy.filesearch.how-to-use-filesearch"/> + </tocitem> + </tocitem> + <tocitem text="Result Viewers"> + <tocitem text="About Result Viewers" target="org.sleuthkit.autopsy.corecomponents.dataresult-about"/> + <tocitem text="Table Results Viewer"> + <tocitem text="Table Results Viewer" target="org.sleuthkit.autopsy.corecomponents.table-results-viewer"/> + </tocitem> + <tocitem text="Thumbnail Results Viewer"> + <tocitem text="Thumbnail Result Viewer" target="org.sleuthkit.autopsy.corecomponents.thumbnail-results-viewer"/> + </tocitem> + </tocitem> + <tocitem text="Content Viewers"> + <tocitem text="About Content Viewers" target="org.sleuthkit.autopsy.corecomponents.datacontent-about"/> + <tocitem text="Hex Content Viewer"> + <tocitem text="Hex Content Viewer" target="org.sleuthkit.autopsy.corecomponents.hex-content-viewer"/> + </tocitem> + <tocitem text="String Content Viewer"> + <tocitem text="String Content Viewer" target="org.sleuthkit.autopsy.corecomponents.string-content-viewer"/> + </tocitem> + <tocitem text="Picture Content Viewer"> + <tocitem text="Picture Content Viewer" target="org.sleuthkit.autopsy.corecomponents.picture-content-viewer"/> + </tocitem> + </tocitem> +</toc> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/datacontent-about.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/datacontent-about.html new file mode 100644 index 0000000000..6d648e57ec --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/datacontent-about.html @@ -0,0 +1,45 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>About Content Viewers</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Content Viewers</h2> + <p> + The "Content Viewers" are in the lower right area of the interface. They allow you to view raw data. The data being shown should be have been selected from a <a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html">Result Viewer</a> window (upper right). + </p> + <p> + Currently, there are 3 main tabs on "Content Viewer" window: + <ul> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/hex-content-viewer.html">Hex Content Viewer</a></li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/string-content-viewer.html">String Content Viewer</a></li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/picture-content-viewer.html">Picture Content Viewer</a></li> + </ul> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of a "Content Viewer" window: + <br> + <img src="ContentViewer_example.png" alt="Example of Content Viewer Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html new file mode 100644 index 0000000000..39cd795ab6 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html @@ -0,0 +1,35 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Data Explorers</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Data Explorers</h2> + <p> + The Data Explorer area of the Autopsy interface is the area in the left-hand side. It provides different methods for finding relevant data. It will publish its results to the upper-right <a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html">Result Viewer</a> area. + In general, if you are looking for an 'analysis technique', then this is where you should look. + </p> + <p>Some example Data Explorers include:</p> + <ul> + <li><a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html">Directory Tree</a></li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html">File Search</a></li> + </ul> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html new file mode 100644 index 0000000000..b0ff962a20 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html @@ -0,0 +1,64 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>About Result Viewers</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Result Viewers</h2> + <p> + The Result Viewer windows are in the upper right area of the interface and display the results from a <a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataexplorer-about.html">Data Explorer</a> window. + You will have the option in this are to display the results in a variety of formats. + Currently, there are 2 main tabs on "Result Viewer" window: + <ul> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/table-results-viewer.html">Table Results Viewer</a></li> + <li><a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/thumbnail-results-viewer.html">Thumbnail Results Viewer</a></li> + </ul> + </p> + + <h2>Right Click Functions</h2> + <p> + Viewers in Result Viewers have some right click function that built in into them: + <br><br> + 1. Open File in External Viewer<br> + This right click function will open the selected node/data in an "external" application. Note: This does not support all file types. + <br><br> + + 2. View in New Window<br> + This right click function will pop up a new "Content Viewers" window for the selected node/data. You can dock this new window or close it. + <br><br> + + 3. Extract<br> + This right click function will extract the selected file or directory to any location on the local hard drive (you can specify the location). + <br><br> + + 4. View (Hex and String)<br> + This right click function will change the active tab on the main "Content Viewers" window to be the selected tab. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of a "Result Viewer" window: + <br> + <img src="ResultViewer_example.png" alt="Example of Result Viewer Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/hex-content-viewer.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/hex-content-viewer.html new file mode 100644 index 0000000000..409c33f398 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/hex-content-viewer.html @@ -0,0 +1,40 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Hex Content Viewer</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Hex Content Viewer</h2> + <p> + Hex Content Viewer show you the raw and exact contents of a file. + In this Hex Content Viewer, the data of the file is represented as hexadecimal values grouped in 2 groups of 8 bytes, followed by one group of 16 ASCII characters which are derived from each pair of hex values (each byte). + Non-printable ASCII characters and characters that would take more than one character space are typically represented by a dot (".") in the following ASCII field. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of "Hex Content Viewer": + <br> + <img src="Hex_Content_Viewer.png" alt="Example of Hex Content Viewer Tab" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/picture-content-viewer.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/picture-content-viewer.html new file mode 100644 index 0000000000..03390f1c61 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/picture-content-viewer.html @@ -0,0 +1,40 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Picture Content Viewer</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Picture Content Viewer</h2> + <p> + Picture Content Viewer will show the actual picture from the picture file. + Currently, Picture Content Viewer only support JPG, GIF, and PNG formats. + If you select an non-picture file or an unsupported picture format on the "Result Viewers", this tab will be disabled. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of "Picture Content Viewer": + <br> + <img src="Picture_Content_Viewer.png" alt="Example of Picture Content Viewer Tab" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/string-content-viewer.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/string-content-viewer.html new file mode 100644 index 0000000000..7c1286dc30 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/string-content-viewer.html @@ -0,0 +1,38 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>String Content Viewer</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>String Content Viewer</h2> + <p> + Strings Content Viewer just scans the data of the file / folder and show you it for printable ASCII strings of a default length of 4 or more ASCII characters. If the length of printable ASCII is less than 4, it won't show the string. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of "String Content Viewer": + <br> + <img src="String_Content_Viewer.png" alt="Example of String Content Viewer Tab" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/table-results-viewer.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/table-results-viewer.html new file mode 100644 index 0000000000..33ec0ce7c2 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/table-results-viewer.html @@ -0,0 +1,39 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Table Results Viewer</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Table Results Viewer</h2> + <p> + Table Results Viewer displays the catalog as a table with some details (properties) of each file. The properties that it shows are: name, time (modified, changed, accessed, and created), size, flags (directory and meta), mode, user ID, group ID, metadata address, attribute address, and type (directory and meta). + Click the Table Viewer tab to select this view. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of a "Table Results Viewer": + <br> + <img src="Table_Results_Viewer.png" alt="Example of Table Result Viewers Tab" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/thumbnail-results-viewer.html b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/thumbnail-results-viewer.html new file mode 100644 index 0000000000..2b960b0482 --- /dev/null +++ b/CoreComponents/javahelp/org/sleuthkit/autopsy/corecomponents/docs/thumbnail-results-viewer.html @@ -0,0 +1,40 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Thumbnail Results Viewer</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Thumbnail Results Viewer</h2> + <p> + Thumbnail Results Viewer displays the catalog as a table of thumbnail images in adjustable sizes. + This viewer only supports picture file(s) (Currently, only supports JPG, GIF, and PNG formats). + Click the Thumbnail tab to select this view. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's one of the example of "Thumbnail Results Viewer": + <br> + <img src="Thumbnail_Results_Viewer.png" alt="Example of Thumbnail Results Viewer Tab" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/CoreComponents/manifest.mf b/CoreComponents/manifest.mf new file mode 100644 index 0000000000..4bdafdae11 --- /dev/null +++ b/CoreComponents/manifest.mf @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.corecomponents/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Install: org/sleuthkit/autopsy/corecomponents/Installer.class +OpenIDE-Module-Layer: org/sleuthkit/autopsy/corecomponents/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/corecomponents/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager, org.netbeans.api.javahelp.Help + diff --git a/CoreComponents/nbproject/build-impl.xml b/CoreComponents/nbproject/build-impl.xml new file mode 100644 index 0000000000..6824a818f5 --- /dev/null +++ b/CoreComponents/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.corecomponents-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/CoreComponents/nbproject/genfiles.properties b/CoreComponents/nbproject/genfiles.properties new file mode 100644 index 0000000000..18dcc0bc4d --- /dev/null +++ b/CoreComponents/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=c2ffee94 +build.xml.script.CRC32=d7506201 +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=c2ffee94 +nbproject/build-impl.xml.script.CRC32=c3845be2 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/CoreComponents/nbproject/project.properties b/CoreComponents/nbproject/project.properties new file mode 100644 index 0000000000..72f5d107d6 --- /dev/null +++ b/CoreComponents/nbproject/project.properties @@ -0,0 +1,4 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +javahelp.hs=corecomponents-hs.xml +spec.version.base=0.0 diff --git a/CoreComponents/nbproject/project.xml b/CoreComponents/nbproject/project.xml new file mode 100644 index 0000000000..919dada1fd --- /dev/null +++ b/CoreComponents/nbproject/project.xml @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.corecomponents</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.jdesktop.layout</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.13.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.netbeans.core</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>2</release-version> + <implementation-version/> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.netbeans.core.startup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <implementation-version/> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.netbeans.modules.settings</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.26.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.netbeans.swing.outline</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>1.9.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.dialogs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.15.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.explorer</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.28.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.casemodule</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.corecomponents</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/CoreComponents/nbproject/suite.properties b/CoreComponents/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/CoreComponents/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AbstractDataResultViewer.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AbstractDataResultViewer.java new file mode 100644 index 0000000000..2b85a8fb9e --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AbstractDataResultViewer.java @@ -0,0 +1,82 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Cursor; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.JPanel; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.ExplorerManager.Provider; +import org.openide.nodes.Node; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; +import org.sleuthkit.autopsy.datamodel.ContentNode; + +/** + * Holds commonalities between all DataResultViewers + */ +public abstract class AbstractDataResultViewer extends JPanel implements DataResultViewer, Provider, PropertyChangeListener { + + /** + * Propagates changes in the current select node from the DataResultViewer to the DataContentTopComponent + * + * @param evt + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + + // change that should affect view + if (changed.equals(ExplorerManager.PROP_SELECTED_NODES) + || changed.equals(ExplorerManager.PROP_NODE_CHANGE) + || changed.equals(ExplorerManager.PROP_EXPLORED_CONTEXT) + || changed.equals(ExplorerManager.PROP_ROOT_CONTEXT)) { + + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + Node originalSelectedNode = this.getOriginalSelectedNode(); + + // DataContent is designed to return only the default viewer + DataContent dataContent = Lookup.getDefault().lookup(DataContent.class); + + if (originalSelectedNode != null && originalSelectedNode instanceof ContentNode) { + // there's a new/changed node to display + ContentNode newSelectedNode = (ContentNode) originalSelectedNode; // get the selected Node on the table + // push the node to default "DataContent" + dataContent.setNode(newSelectedNode); + } else { + // clear the node viewer + dataContent.setNode(null); + } + } finally { + this.setCursor(null); + } + } + } + + /** + * Gets the current node, stripping off any FilterNode that this class might + * have wrapped it in. + * @return + */ + public abstract Node getOriginalSelectedNode(); +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties new file mode 100644 index 0000000000..bd2723bcfe --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -0,0 +1,66 @@ +CTL_DataContentAction=DataContent +CTL_DataContentTopComponent=Data Content +CTL_NodeTableAction=NodeTable +CTL_NodeTableTopComponent=NodeTable Window +CTL_HexViewAction=HexView +CTL_HexViewTopComponent=Hex View +CTL_StringViewAction=StringView +CTL_StringViewTopComponent=String View +CTL_CustomAboutAction=About +HINT_DataContentTopComponent=This is a DataContent window +HINT_NodeTableTopComponent=This is a NodeTable window +HINT_HexViewTopComponent=This is a HexView window +HINT_StringViewTopComponent=This is a StringView window +OpenIDE-Module-Name=CoreComponents +OutputViewPanel.prevPageButton.text=Previous Page +OutputViewPanel.totalPageLabel.text=100 +OutputViewPanel.ofLabel.text=of +OutputViewPanel.currentPageLabel.text=1 +OutputViewPanel.pageLabel.text=Page: +OutputViewPanel.filePathLabel.text=FilePath +OutputViewPanel.nextPageButton.text=Next Page +DataResultTopComponent.directoryTablePath.text=directoryPath +DataContentViewerHex.filePathLabel.text=FilePath +DataContentViewerHex.pageLabel.text=Page: +DataContentViewerHex.currentPageLabel.text=1 +DataContentViewerHex.ofLabel.text=of +DataContentViewerHex.totalPageLabel.text=100 +DataContentViewerHex.prevPageButton.text= +DataContentViewerHex.nextPageButton.text= +DataContentViewerString.totalPageLabel.text=100 +DataContentViewerString.prevPageButton.text= +DataContentViewerString.nextPageButton.text= +DataContentViewerString.filePathLabel.text=FilePath +DataContentViewerString.pageLabel.text=Page: +DataContentViewerString.currentPageLabel.text=1 +DataContentViewerString.ofLabel.text=of +DataContentViewerHex.pageLabel.text_1=Page: +DataContentViewerHex.currentPageLabel.text_1=1 +DataContentViewerHex.ofLabel.text_1=of +DataContentViewerHex.totalPageLabel.text_1=100 +DataContentViewerString.pageLabel.text_1=Page: +DataContentViewerString.currentPageLabel.text_1=1 +DataContentViewerString.ofLabel.text_1=of +DataContentViewerString.totalPageLabel.text_1=100 +DataContentViewerPicture.picLabel.text=[Picture goes Here] +DataContentViewerHex.pageLabel2.text=Page +DataContentViewerString.pageLabel2.text=Page +DataResultTopComponent.matchLabel.text=Results +DataResultTopComponent.numberMatchLabel.text=0 + + +# Product Information panel +LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} <br><b>Sleuth Kit Version:</b> {7} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div> +Format_OperatingSystem_Value={0} version {1} running on {2} +LBL_Copyright=<div style\="font-size\: 12pt; font-family\: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; "> The Autopsy Forensic Browser is a graphical interface to the command line digital investigation analysis tools in The Sleuth Kit. <br> <br>Copyright © 2003-2011. For more information, please visit: <a style\="color\: \#1E2A60;" href\="http\://www.sleuthkit.org">http\://www.sleuthkit.org</a>. </div> +URL_ON_IMG=http://www.sleuthkit.org/ + + +#SwingBrowser +LBL_SwingBrowserDescription=Simple HTML Browser based on a Swing component +MSG_cannot_create_browser=Cannot create Swing HTML Browser. +Services/Browsers/SwingBrowser.settings=Swing HTML Browser +LBL_Close=Close +MNE_Close=C +ACSN_Close=Close +ACSD_Close=Close diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java new file mode 100644 index 0000000000..fd691327ca --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/CustomAboutAction.java @@ -0,0 +1,57 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Dialog; +import org.openide.util.NbBundle; +import org.netbeans.core.actions.AboutAction; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.sleuthkit.autopsy.logging.Log; + +/** + * Action to open custom implementation of the "About" window from the Help menu. + */ +public class CustomAboutAction extends AboutAction { + + @Override + public void performAction() { + Log.noteAction(this.getClass()); + + DialogDescriptor descriptor = new DialogDescriptor( + new ProductInformationPanel(), + NbBundle.getMessage(AboutAction.class, "About_title"), + true, + new Object[0], + null, + DialogDescriptor.DEFAULT_ALIGN, + null, + null); + Dialog dlg = null; + try { + dlg = DialogDisplayer.getDefault().createDialog(descriptor); + dlg.setResizable(false); + dlg.setVisible(true); + } finally { + if (dlg != null) { + dlg.dispose(); + } + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.form new file mode 100644 index 0000000000..a99a3b3a2b --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.form @@ -0,0 +1,42 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="dataContentTabbedPane" alignment="0" pref="800" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="dataContentTabbedPane" alignment="0" pref="360" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JTabbedPane" name="dataContentTabbedPane"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="ff" red="ff" type="rgb"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[700, 5]"/> + </Property> + </Properties> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java new file mode 100644 index 0000000000..080a354f73 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java @@ -0,0 +1,336 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Cursor; +import java.beans.PropertyChangeEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; +import javax.swing.JTabbedPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; +import org.sleuthkit.autopsy.datamodel.DataConversion; + +/** + * Top component that organizes all of the data content viewers. Doing a lookup on this class will + * always return the default instance (which is created at startup). + */ +// Registered as a service provider in layer.xml +public final class DataContentTopComponent extends TopComponent implements DataContent, ChangeListener { + + // reference to the "default" TC that always stays open + private static DataContentTopComponent defaultInstance; + private ContentNode currentNode; + // set to true if this is the TC that always stays open and is the default place to display content + private boolean isDefault; + // Different DataContentViewers + private List<UpdateWrapper> viewers = new ArrayList<UpdateWrapper>(); + // contains a list of the undocked TCs + private static ArrayList<DataContentTopComponent> newWindowList = new ArrayList<DataContentTopComponent>(); + private static final String PREFERRED_ID = "DataContentTopComponent"; + private static final String DEFAULT_NAME = NbBundle.getMessage(DataContentTopComponent.class, "CTL_DataContentTopComponent"); + private static final String TOOLTIP_TEXT = NbBundle.getMessage(DataContentTopComponent.class, "HINT_DataContentTopComponent"); + + private DataContentTopComponent(boolean isDefault, String name) { + initComponents(); + setName(name); + setToolTipText(TOOLTIP_TEXT); + + this.isDefault = isDefault; + putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.valueOf(isDefault)); // prevent option to close compoment in GUI + + // set the tab to listen to any tab change (see the "stateChange" method) + this.dataContentTabbedPane.addChangeListener(this); + } + + private static class UpdateWrapper { + + private DataContentViewer wrapped; + private boolean outdated; + + UpdateWrapper(DataContentViewer wrapped) { + this.wrapped = wrapped; + this.outdated = true; + } + + void setNode(ContentNode selectedNode) { + this.wrapped.setNode(selectedNode); + this.outdated = false; + } + + void resetComponent() { + this.wrapped.resetComponent(); + this.outdated = true; + } + + boolean isOutdated() { + return this.outdated; + } + + boolean isSupported(ContentNode node) { + return this.wrapped.isSupported(node); + } + } + + /** + * This createInstance method is used to create an undocked instance + * for the "View in New Window" feature. + * @param filePath path of given file node + * @param givenNode node to view content of + * @return newly undocked instance + */ + public static DataContentTopComponent createUndocked(String filePath, ContentNode givenNode) { + + DataContentTopComponent dctc = new DataContentTopComponent(false, filePath); + dctc.componentOpened(); + dctc.setNode(givenNode); + + newWindowList.add(dctc); + + return dctc; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + dataContentTabbedPane = new javax.swing.JTabbedPane(); + + dataContentTabbedPane.setBackground(new java.awt.Color(255, 255, 255)); + dataContentTabbedPane.setPreferredSize(new java.awt.Dimension(700, 5)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(dataContentTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(dataContentTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE) + ); + }// </editor-fold>//GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTabbedPane dataContentTabbedPane; + // End of variables declaration//GEN-END:variables + + /** + * Gets default instance. Do not use directly: reserved for *.settings files only, + * i.e. deserialization routines; otherwise you could get a non-deserialized defaultInstance. + * To obtain the singleton instance, use {@link #findInstance}. + */ + public static synchronized DataContentTopComponent getDefault() { + if (defaultInstance == null) { + defaultInstance = new DataContentTopComponent(true, DEFAULT_NAME); + } + return defaultInstance; + } + + /** + * Obtain the default DataContentTopComponent defaultInstance. Never call {@link #getDefault} directly! + */ + public static synchronized DataContentTopComponent findInstance() { + TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); + if (win == null) { + Logger.getLogger(DataContentTopComponent.class.getName()).warning( + "Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system."); + return getDefault(); + } + if (win instanceof DataContentTopComponent) { + return (DataContentTopComponent) win; + } + Logger.getLogger(DataContentTopComponent.class.getName()).warning( + "There seem to be multiple components with the '" + PREFERRED_ID + + "' ID. That is a potential source of errors and unexpected behavior."); + return getDefault(); + } + + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; + } + + @Override + public void componentOpened() { + // Add all the DataContentViewer to the tabbed pannel. + // (Only when the it's opened at the first time: tabCount = 0) + int totalTabs = dataContentTabbedPane.getTabCount(); + if (totalTabs == 0) { + // find all dataContentViewer and add them to the tabbed pane + for (DataContentViewer factory : Lookup.getDefault().lookupAll(DataContentViewer.class)) { + DataContentViewer dcv = factory.getInstance(); + this.viewers.add(new UpdateWrapper(dcv)); + dataContentTabbedPane.addTab(dcv.getTitle(), dcv.getComponent()); + } + } + + resetTabs(currentNode); + } + + @Override + public void componentClosed() { + + // clear all set nodes + for(UpdateWrapper dcv : viewers) { + dcv.setNode(null); + } + + if (!this.isDefault) { + newWindowList.remove(this); + } + } + + @Override + protected String preferredID() { + if (this.isDefault) { + return PREFERRED_ID; + } else { + return this.getName(); + } + } + + @Override + public void setNode(ContentNode selectedNode) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + // set the file path + if (selectedNode == null) { + setName(NbBundle.getMessage(DataContentTopComponent.class, "CTL_DataContentTopComponent")); + } else { + String path = DataConversion.getformattedPath(selectedNode.getDisplayPath(), 0); + setName(path); + } + + currentNode = selectedNode; + + resetTabs(selectedNode); + + // set the display on the current active tab + int currentActiveTab = dataContentTabbedPane.getSelectedIndex(); + if (currentActiveTab != -1) { + UpdateWrapper dcv = viewers.get(currentActiveTab); + dcv.setNode(selectedNode); + } + } finally { + this.setCursor(null); + } + } + + @Override + public boolean canClose() { + return (!this.isDefault) || !Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0; // only allow this window to be closed when there's no case opened or no image in this case + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + } + + @Override + public void stateChanged(ChangeEvent evt) { + JTabbedPane pane = (JTabbedPane) evt.getSource(); + + // Get and set current selected tab + int currentTab = pane.getSelectedIndex(); + if (currentTab != -1) { + UpdateWrapper dcv = viewers.get(currentTab); + if (dcv.isOutdated()) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + dcv.setNode(currentNode); + } finally { + this.setCursor(null); + } + } + } + } + + /** + * Resets the tabs based on the selected Node. If the selected node is null + * or not supported, disable that tab as well. + * + * @param selectedNode the selected content Node + */ + public void resetTabs(ContentNode selectedNode) { + + int totalTabs = dataContentTabbedPane.getTabCount(); + + if (totalTabs > 0) { // make sure there are tabs to reset + int tempIndex = dataContentTabbedPane.getSelectedIndex(); + for (int i = 0; i < totalTabs; i++) { + UpdateWrapper dcv = viewers.get(i); + dcv.resetComponent(); + + // disable an unsupported tab (ex: picture viewer) + if (!dcv.isSupported(selectedNode)) { + dataContentTabbedPane.setEnabledAt(i, false); + + // change the tab selection if it's the current selection + if (tempIndex == i) { + if (i > 0) { + dataContentTabbedPane.setSelectedIndex(0); + } else { + dataContentTabbedPane.setSelectedIndex(1); + } + } + } else { + dataContentTabbedPane.setEnabledAt(i, true); + } + } + int newIndex = dataContentTabbedPane.getSelectedIndex(); + // set the display of the tab + viewers.get(newIndex).setNode(selectedNode); + } + } + + /** + * Get the tab pane + * @return tab pane with individual {@link DataContentViewer}s + */ + public JTabbedPane getTabPanels() { + return this.dataContentTabbedPane; + } + + @Override + public TopComponent getTopComponent() { + return this; + } + + /** + * Returns a list of the non-default (main) TopComponents + * @return + */ + public static List<DataContentTopComponent> getNewWindowList() { + return newWindowList; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentSettings.xml b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentSettings.xml new file mode 100644 index 0000000000..c48ecdaf28 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentSettings.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd"> +<settings version="1.0"> + <module name="org.sleuthkit.autopsy.corecomponents" spec="1.0"/> + <instanceof class="org.openide.windows.TopComponent"/> + <instanceof class="org.sleuthkit.autopsy.corecomponents.DataContentTopComponent"/> + <instance class="org.sleuthkit.autopsy.corecomponents.DataContentTopComponent" method="getDefault"/> +</settings> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentWstcref.xml b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentWstcref.xml new file mode 100644 index 0000000000..abd7e0f000 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponentWstcref.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE tc-ref PUBLIC "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN" "http://www.netbeans.org/dtds/tc-ref2_0.dtd"> +<tc-ref version="2.0" > + <module name="org.sleuthkit.autopsy.corecomponents" spec="1.0"/> + <tc-id id="DataContentTopComponent"/> + <state opened="false"/> +</tc-ref> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.form new file mode 100644 index 0000000000..d454394bd5 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.form @@ -0,0 +1,182 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <EmptySpace min="0" pref="622" max="32767" attributes="0"/> + <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="hexViewerPanel" max="32767" attributes="0"/> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <EmptySpace min="0" pref="411" max="32767" attributes="0"/> + <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="hexViewerPanel" max="32767" attributes="0"/> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="hexViewerPanel"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="pageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="currentPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="ofLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="totalPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="51" max="-2" attributes="0"/> + <Component id="pageLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="prevPageButton" min="-2" pref="27" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="nextPageButton" min="-2" pref="26" max="-2" attributes="0"/> + <EmptySpace pref="374" max="32767" attributes="0"/> + </Group> + <Component id="jScrollPane1" alignment="0" pref="622" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="pageLabel" min="-2" max="-2" attributes="0"/> + <Group type="103" alignment="0" groupAlignment="3" attributes="0"> + <Component id="currentPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="ofLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="totalPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="pageLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="nextPageButton" alignment="0" min="-2" pref="23" max="-2" attributes="0"/> + <Component id="prevPageButton" alignment="0" min="-2" pref="23" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="jScrollPane1" pref="388" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="ff" green="ff" red="ff" type="rgb"/> + </Property> + </Properties> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextPane" name="outputViewPane"> + <Properties> + <Property name="editable" type="boolean" value="false"/> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Courier New" size="11" style="0"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[700, 20]"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[700, 400]"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JTextPane(){
 public boolean getScrollableTracksViewportWidth() {
 return (getSize().width < 700);
}};"/> + <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="this.outputViewPane.setBackground(new java.awt.Color(255, 255, 255)); // to make sure the background color is white"/> + </AuxValues> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="totalPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.totalPageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="ofLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.ofLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="currentPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.currentPageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="pageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.pageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="prevPageButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/corecomponents/arrow_left.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.prevPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="prevPageButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="nextPageButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/corecomponents/arrow_right.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.nextPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nextPageButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="pageLabel2"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerHex.pageLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java new file mode 100644 index 0000000000..c8995a7cfb --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -0,0 +1,328 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Component; +import java.awt.Cursor; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JTextPane; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; +import org.sleuthkit.autopsy.datamodel.DataConversion; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; + +/** + * Hex view of file contents. + */ +@ServiceProvider(service = DataContentViewer.class) +public class DataContentViewerHex extends javax.swing.JPanel implements DataContentViewer { + + private static long currentOffset = 0; + private static long pageLength = 10240; + private static int currentPage = 1; + private Content dataSource; + // for error handling + private String className = this.getClass().toString(); + + /** Creates new form DataContentViewerHex */ + public DataContentViewerHex() { + initComponents(); + this.resetComponent(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + hexViewerPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + outputViewPane = new JTextPane(){ + public boolean getScrollableTracksViewportWidth() { + return (getSize().width < 700); + }}; + this.outputViewPane.setBackground(new java.awt.Color(255, 255, 255)); // to make sure the background color is white + totalPageLabel = new javax.swing.JLabel(); + ofLabel = new javax.swing.JLabel(); + currentPageLabel = new javax.swing.JLabel(); + pageLabel = new javax.swing.JLabel(); + prevPageButton = new javax.swing.JButton(); + nextPageButton = new javax.swing.JButton(); + pageLabel2 = new javax.swing.JLabel(); + + jScrollPane1.setBackground(new java.awt.Color(255, 255, 255)); + + outputViewPane.setEditable(false); + outputViewPane.setFont(new java.awt.Font("Courier New", 0, 11)); // NOI18N + outputViewPane.setMinimumSize(new java.awt.Dimension(700, 20)); + outputViewPane.setPreferredSize(new java.awt.Dimension(700, 400)); + jScrollPane1.setViewportView(outputViewPane); + + totalPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.totalPageLabel.text_1")); // NOI18N + + ofLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.ofLabel.text_1")); // NOI18N + + currentPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.currentPageLabel.text_1")); // NOI18N + + pageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.pageLabel.text_1")); // NOI18N + + prevPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/arrow_left.gif"))); // NOI18N + prevPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.prevPageButton.text")); // NOI18N + prevPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + prevPageButtonActionPerformed(evt); + } + }); + + nextPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/arrow_right.gif"))); // NOI18N + nextPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.nextPageButton.text")); // NOI18N + nextPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + nextPageButtonActionPerformed(evt); + } + }); + + pageLabel2.setText(org.openide.util.NbBundle.getMessage(DataContentViewerHex.class, "DataContentViewerHex.pageLabel2.text")); // NOI18N + + javax.swing.GroupLayout hexViewerPanelLayout = new javax.swing.GroupLayout(hexViewerPanel); + hexViewerPanel.setLayout(hexViewerPanelLayout); + hexViewerPanelLayout.setHorizontalGroup( + hexViewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(hexViewerPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(pageLabel) + .addGap(18, 18, 18) + .addComponent(currentPageLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(ofLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(totalPageLabel) + .addGap(51, 51, 51) + .addComponent(pageLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(374, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE) + ); + hexViewerPanelLayout.setVerticalGroup( + hexViewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(hexViewerPanelLayout.createSequentialGroup() + .addGroup(hexViewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(pageLabel) + .addGroup(hexViewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(currentPageLabel) + .addComponent(ofLabel) + .addComponent(totalPageLabel)) + .addComponent(pageLabel2) + .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, 0) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 622, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(0, 0, 0) + .addComponent(hexViewerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 411, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(0, 0, 0) + .addComponent(hexViewerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0))) + ); + }// </editor-fold>//GEN-END:initComponents + + private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset -= pageLength; + currentPage = currentPage - 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false); + }//GEN-LAST:event_prevPageButtonActionPerformed + + private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset += pageLength; + currentPage = currentPage + 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false); + }//GEN-LAST:event_nextPageButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel currentPageLabel; + private javax.swing.JPanel hexViewerPanel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JButton nextPageButton; + private javax.swing.JLabel ofLabel; + private javax.swing.JTextPane outputViewPane; + private javax.swing.JLabel pageLabel; + private javax.swing.JLabel pageLabel2; + private javax.swing.JButton prevPageButton; + private javax.swing.JLabel totalPageLabel; + // End of variables declaration//GEN-END:variables + + /** + * Sets the DataView (The tabbed panel) + * + * @param dataSource the content that want to be shown + * @param offset the starting offset + * @param reset whether to reset the dataView or not + */ + public void setDataView(Content dataSource, long offset, boolean reset) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + try { + this.dataSource = dataSource; + byte[] data; + + if (!reset && dataSource.getSize() > 0) { + data = dataSource.read(offset, pageLength); // read the data + } else { + // empty file + data = null; + } + + // I set the -1 to for empty node or directory + if (reset) { + data = null; + } + + // set the data on the bottom and show it + String text = ""; + Boolean setVisible = false; + + if (data != null) { + text = DataConversion.getString(data, 4); + setVisible = true; + } + + // disable or enable the next button + if (!reset && offset + pageLength < dataSource.getSize()) { + nextPageButton.setEnabled(true); + } else { + nextPageButton.setEnabled(false); + } + + if (offset == 0) { + prevPageButton.setEnabled(false); + currentPage = 1; // reset the page number + } else { + prevPageButton.setEnabled(true); + } + + if (setVisible) { + int totalPage = (int) (dataSource.getSize() / pageLength) + 1; + totalPageLabel.setText(Integer.toString(totalPage)); + currentPageLabel.setText(Integer.toString(currentPage)); + setComponentsVisibility(true); // shows the components that not needed + + // set the output view + outputViewPane.setText(DataConversion.byteArrayToHex(data, pageLength, offset, outputViewPane.getFont())); + } else { + // reset or hide the labels + totalPageLabel.setText(""); + currentPageLabel.setText(""); + outputViewPane.setText(""); // reset the output view + setComponentsVisibility(false); // hides the components that not needed + } + + outputViewPane.moveCaretPosition(0); + } catch (TskException ex) { + // TODO: maybe make this error bubble up further + Logger.getLogger(this.className).log(Level.WARNING, "Error while trying to show the hex content.", ex); + } + } finally { + this.setCursor(null); + } + } + + @Override + public void setNode(ContentNode selectedNode) { + if (selectedNode != null) { + this.setDataView(selectedNode.getContent(), 0, false); + } else { + this.setDataView(null, 0, true); + } + } + + @Override + public String getTitle() { + return "Hex View"; + } + + @Override + public DataContentViewer getInstance() { + return new DataContentViewerHex(); + } + + @Override + public void resetComponent() { + // clear / reset the fields + this.dataSource = null; + currentPageLabel.setText(""); + totalPageLabel.setText(""); + prevPageButton.setEnabled(false); + nextPageButton.setEnabled(false); + setComponentsVisibility(false); // hides the components that not needed + } + + /** + * To set the visibility of specific components in this class. + * + * @param isVisible whether to show or hide the specific components + */ + private void setComponentsVisibility(boolean isVisible) { + currentPageLabel.setVisible(isVisible); + totalPageLabel.setVisible(isVisible); + ofLabel.setVisible(isVisible); + prevPageButton.setVisible(isVisible); + nextPageButton.setVisible(isVisible); + pageLabel.setVisible(isVisible); + pageLabel2.setVisible(isVisible); + } + + @Override + public boolean isSupported(ContentNode node) { + return true; + } + + @Override + public Component getComponent() { + return this; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.form new file mode 100644 index 0000000000..43f9a88aea --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.form @@ -0,0 +1,45 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="picViewerScrollPanel" alignment="0" pref="589" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="picViewerScrollPanel" alignment="0" pref="382" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="picViewerScrollPanel"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JLabel" name="picLabel"> + <Properties> + <Property name="horizontalAlignment" type="int" value="0"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerPicture.picLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="horizontalTextPosition" type="int" value="0"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java new file mode 100644 index 0000000000..5defaf15ef --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java @@ -0,0 +1,156 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Image; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.imageio.ImageIO; +import javax.swing.JPanel; +import org.openide.nodes.Node; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; +import org.sleuthkit.datamodel.TskException; + +/** + * File content viewer capable of displaying some image formats. + */ +@ServiceProvider(service = DataContentViewer.class) +public class DataContentViewerPicture extends javax.swing.JPanel implements DataContentViewer { + + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** Creates new form DataContentViewerPicture */ + public DataContentViewerPicture() { + initComponents(); + this.resetComponent(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + picViewerScrollPanel = new javax.swing.JScrollPane(); + picLabel = new javax.swing.JLabel(); + + picLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + picLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerPicture.class, "DataContentViewerPicture.picLabel.text")); // NOI18N + picLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + picViewerScrollPanel.setViewportView(picLabel); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(picViewerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 589, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(picViewerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE) + ); + }// </editor-fold>//GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel picLabel; + private javax.swing.JScrollPane picViewerScrollPanel; + // End of variables declaration//GEN-END:variables + + @Override + public void setNode(ContentNode selectedNode) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + if (selectedNode != null) { + try { + // read the byte of the image file + byte[] dataSource = selectedNode.getContent().read(0, selectedNode.getContent().getSize()); + + // create the input stream for the content + InputStream is = new ByteArrayInputStream(dataSource); + + Image test = ImageIO.read(is); // create the image + + this.picLabel.setIcon(new javax.swing.ImageIcon(test)); // show the file + + + } catch (TskException ex) { + // TODO: maybe make errors bubble + Logger.getLogger(this.className).log(Level.WARNING, "Error while trying to display the picture content.", ex); + } catch (Exception ex) { + Logger.getLogger(this.className).log(Level.WARNING, "Error while trying to display the picture content.", ex); + } + } + } finally { + this.setCursor(null); + } + } + + @Override + public String getTitle() { + return "Picture View"; + } + + @Override + public DataContentViewer getInstance() { + return new DataContentViewerPicture(); + } + + @Override + public void resetComponent() { + this.picLabel.setText(""); + //this.picLabel.setIcon(null); + } + + @Override + public boolean isSupported(ContentNode cNode) { + Node node = (Node) cNode; + + if (node != null) { + // Note: only supports JPG, GIF, and PNG for now + return node.getDisplayName().toLowerCase().endsWith(".jpg") + || node.getDisplayName().toLowerCase().endsWith(".jpeg") + || node.getDisplayName().toLowerCase().endsWith(".jpe") + || node.getDisplayName().toLowerCase().endsWith(".jfif") + || node.getDisplayName().toLowerCase().endsWith(".gif") + || node.getDisplayName().toLowerCase().endsWith(".bmp") + || //node.getDisplayName().toLowerCase().endsWith(".tif") || + //node.getDisplayName().toLowerCase().endsWith(".tiff") || + //node.getDisplayName().toLowerCase().endsWith(".tga") || + node.getDisplayName().toLowerCase().endsWith(".png"); + } else { + return false; + } + } + + @Override + public Component getComponent() { + return this; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.form new file mode 100644 index 0000000000..8ca239c65d --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.form @@ -0,0 +1,156 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jPanel1" alignment="1" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jPanel1" alignment="1" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel1"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="pageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="currentPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="ofLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="totalPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="50" max="-2" attributes="0"/> + <Component id="pageLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="prevPageButton" min="-2" pref="27" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="nextPageButton" min="-2" pref="26" max="-2" attributes="0"/> + <EmptySpace pref="375" max="32767" attributes="0"/> + </Group> + <Component id="jScrollPane1" alignment="1" pref="622" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" alignment="0" groupAlignment="3" attributes="0"> + <Component id="pageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="currentPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="ofLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="totalPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="pageLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="nextPageButton" alignment="0" min="-2" pref="23" max="-2" attributes="0"/> + <Component id="prevPageButton" alignment="0" min="-2" pref="23" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="jScrollPane1" pref="401" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextPane" name="outputViewPane"> + <Properties> + <Property name="editable" type="boolean" value="false"/> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Courier New" size="11" style="0"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[700, 400]"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="totalPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.totalPageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="ofLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.ofLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="currentPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.currentPageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="pageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.pageLabel.text_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="nextPageButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/corecomponents/arrow_right.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.nextPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nextPageButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="pageLabel2"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.pageLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="prevPageButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/corecomponents/arrow_left.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataContentViewerString.prevPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="prevPageButtonActionPerformed"/> + </Events> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java new file mode 100644 index 0000000000..990ac9ac36 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -0,0 +1,307 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Component; +import java.awt.Cursor; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; +import org.sleuthkit.autopsy.datamodel.DataConversion; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; + +/** + * Viewer displays strings extracted from contents. + */ +@ServiceProvider(service = DataContentViewer.class) +public class DataContentViewerString extends javax.swing.JPanel implements DataContentViewer { + + private static long currentOffset = 0; + private static long pageLength = 10240; + private static int currentPage = 1; + private Content dataSource; + // for error handling + private String className = this.getClass().toString(); + + /** Creates new form DataContentViewerString */ + public DataContentViewerString() { + initComponents(); + this.resetComponent(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jPanel1 = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + outputViewPane = new javax.swing.JTextPane(); + totalPageLabel = new javax.swing.JLabel(); + ofLabel = new javax.swing.JLabel(); + currentPageLabel = new javax.swing.JLabel(); + pageLabel = new javax.swing.JLabel(); + nextPageButton = new javax.swing.JButton(); + pageLabel2 = new javax.swing.JLabel(); + prevPageButton = new javax.swing.JButton(); + + outputViewPane.setEditable(false); + outputViewPane.setFont(new java.awt.Font("Courier New", 0, 11)); // NOI18N + outputViewPane.setPreferredSize(new java.awt.Dimension(700, 400)); + jScrollPane1.setViewportView(outputViewPane); + + totalPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.totalPageLabel.text_1")); // NOI18N + + ofLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.ofLabel.text_1")); // NOI18N + + currentPageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.currentPageLabel.text_1")); // NOI18N + + pageLabel.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.pageLabel.text_1")); // NOI18N + + nextPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/arrow_right.gif"))); // NOI18N + nextPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.nextPageButton.text")); // NOI18N + nextPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + nextPageButtonActionPerformed(evt); + } + }); + + pageLabel2.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.pageLabel2.text")); // NOI18N + + prevPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/arrow_left.gif"))); // NOI18N + prevPageButton.setText(org.openide.util.NbBundle.getMessage(DataContentViewerString.class, "DataContentViewerString.prevPageButton.text")); // NOI18N + prevPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + prevPageButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(pageLabel) + .addGap(18, 18, 18) + .addComponent(currentPageLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(ofLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(totalPageLabel) + .addGap(50, 50, 50) + .addComponent(pageLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(375, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pageLabel) + .addComponent(currentPageLabel) + .addComponent(ofLabel) + .addComponent(totalPageLabel)) + .addComponent(pageLabel2) + .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(prevPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, 0) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 401, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + }// </editor-fold>//GEN-END:initComponents + + private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset -= pageLength; + currentPage = currentPage - 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false); + }//GEN-LAST:event_prevPageButtonActionPerformed + + private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset += pageLength; + currentPage = currentPage + 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false); + }//GEN-LAST:event_nextPageButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel currentPageLabel; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JButton nextPageButton; + private javax.swing.JLabel ofLabel; + private javax.swing.JTextPane outputViewPane; + private javax.swing.JLabel pageLabel; + private javax.swing.JLabel pageLabel2; + private javax.swing.JButton prevPageButton; + private javax.swing.JLabel totalPageLabel; + // End of variables declaration//GEN-END:variables + + /** + * Sets the DataView (The tabbed panel) + * + * @param dataSource the content that want to be shown + * @param offset the starting offset + * @param reset whether to reset the dataView or not + */ + public void setDataView(Content dataSource, long offset, boolean reset) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + try { + this.dataSource = dataSource; + byte[] data; + + if (!reset && dataSource.getSize() > 0) { + data = dataSource.read(offset, pageLength); // read the data + } else { + // empty file + data = null; + } + + // I set the -1 to for empty node or directory + if (reset) { + data = null; + } + + // set the data on the bottom and show it + String text = ""; + Boolean setVisible = false; + + if (data != null) { + text = DataConversion.getString(data, 4); + setVisible = true; + } + + // disable or enable the next button + if (!reset && offset + pageLength < dataSource.getSize()) { + nextPageButton.setEnabled(true); + } else { + nextPageButton.setEnabled(false); + } + + if (offset == 0) { + prevPageButton.setEnabled(false); + currentPage = 1; // reset the page number + } else { + prevPageButton.setEnabled(true); + } + + if (setVisible) { + int totalPage = (int) (dataSource.getSize() / pageLength) + 1; + totalPageLabel.setText(Integer.toString(totalPage)); + currentPageLabel.setText(Integer.toString(currentPage)); + outputViewPane.setText(text); // set the output view + setComponentsVisibility(true); // shows the components that not needed + } else { + // reset or hide the labels + totalPageLabel.setText(""); + currentPageLabel.setText(""); + outputViewPane.setText(""); // reset the output view + setComponentsVisibility(false); // hides the components that not needed + } + outputViewPane.moveCaretPosition(0); + } catch (TskException ex) { + Logger logger = Logger.getLogger(this.className); + logger.log(Level.WARNING, "Error while trying to show the String content.", ex); + } + } finally { + this.setCursor(null); + } + } + + /** + * To set the visibility of specific components in this class. + * + * @param isVisible whether to show or hide the specific components + */ + private void setComponentsVisibility(boolean isVisible) { + currentPageLabel.setVisible(isVisible); + totalPageLabel.setVisible(isVisible); + ofLabel.setVisible(isVisible); + prevPageButton.setVisible(isVisible); + nextPageButton.setVisible(isVisible); + pageLabel.setVisible(isVisible); + pageLabel2.setVisible(isVisible); + } + + @Override + public void setNode(ContentNode selectedNode) { + if (selectedNode != null) { + this.setDataView(selectedNode.getContent(), 0, false); + } else { + this.setDataView(null, 0, true); + } + } + + @Override + public String getTitle() { + return "String View"; + } + + @Override + public DataContentViewer getInstance() { + return new DataContentViewerString(); + } + + @Override + public void resetComponent() { + // clear / reset the fields + this.dataSource = null; + currentPageLabel.setText(""); + totalPageLabel.setText(""); + prevPageButton.setEnabled(false); + nextPageButton.setEnabled(false); + setComponentsVisibility(false); // hides the components that not needed + } + + @Override + public boolean isSupported(ContentNode node) { + return true; + } + + @Override + public Component getComponent() { + return this; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.form new file mode 100644 index 0000000000..13b479834a --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.form @@ -0,0 +1,72 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="directoryTablePath" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="855" max="32767" attributes="0"/> + <Component id="numberMatchLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="matchLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="dataResultTabbedPanel" alignment="0" pref="967" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="matchLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="numberMatchLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="directoryTablePath" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="dataResultTabbedPanel" pref="565" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="directoryTablePath"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataResultTopComponent.directoryTablePath.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="matchLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataResultTopComponent.matchLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="numberMatchLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="DataResultTopComponent.numberMatchLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Container class="javax.swing.JTabbedPane" name="dataResultTabbedPanel"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java new file mode 100644 index 0000000000..f893aa22c6 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java @@ -0,0 +1,358 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Cursor; +import java.beans.PropertyChangeListener; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JTabbedPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.nodes.Node; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; +import org.sleuthkit.autopsy.datamodel.DataConversion; + +/** + * Top component which displays something. + */ +public final class DataResultTopComponent extends TopComponent implements DataResult, ChangeListener { + + private ContentNode rootNode; + private PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private boolean isMain; + /** path to the icon used by the component and its open action */ +// static final String ICON_PATH = "SET/PATH/TO/ICON/HERE"; + private static String PREFERRED_ID = "NodeTableTopComponent"; + /** + * Name of property change fired when a file search result is closed + */ + public static String REMOVE_FILESEARCH = "RemoveFileSearchTopComponent"; + // Different DataResultsViewers + private List<UpdateWrapper> viewers = new ArrayList<UpdateWrapper>(); + + public DataResultTopComponent(boolean isMain, String title) { + initComponents(); + setToolTipText(NbBundle.getMessage(DataResultTopComponent.class, "HINT_NodeTableTopComponent")); + + setTitle(title); // set the title + this.isMain = isMain; + putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.valueOf(isMain)); // set option to close compoment in GUI + + this.dataResultTabbedPanel.addChangeListener(this); + } + + private static class UpdateWrapper { + + private DataResultViewer wrapped; + private boolean outdated; + + UpdateWrapper(DataResultViewer wrapped) { + this.wrapped = wrapped; + this.outdated = true; + } + + void setNode(ContentNode selectedNode) { + this.wrapped.setNode(selectedNode); + this.outdated = false; + } + + void resetComponent() { + this.wrapped.resetComponent(); + this.outdated = true; + } + + void clearComponent() { + this.wrapped.clearComponent(); + this.outdated = true; + } + + boolean isOutdated() { + return this.outdated; + } + } + + /** + * Creates a new non-default DataResult component + * + * @param title Title of the component window + * @param pathText Descriptive text about the source of the nodes displayed + * @param givenNode The new root node + * @param totalMatches Cardinality of root node's children + * @return + */ + public static DataResultTopComponent createInstance(String title, String pathText, Node givenNode, int totalMatches) { + DataResultTopComponent newDataResult = new DataResultTopComponent(false, title); + + newDataResult.numberMatchLabel.setText(Integer.toString(totalMatches)); + + newDataResult.open(); // open it first so the component can be initialized + + // set the tree table view + newDataResult.setNode((ContentNode) givenNode); + newDataResult.directoryTablePath.setText(pathText); + + return newDataResult; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + directoryTablePath = new javax.swing.JLabel(); + matchLabel = new javax.swing.JLabel(); + numberMatchLabel = new javax.swing.JLabel(); + dataResultTabbedPanel = new javax.swing.JTabbedPane(); + + org.openide.awt.Mnemonics.setLocalizedText(directoryTablePath, org.openide.util.NbBundle.getMessage(DataResultTopComponent.class, "DataResultTopComponent.directoryTablePath.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(matchLabel, org.openide.util.NbBundle.getMessage(DataResultTopComponent.class, "DataResultTopComponent.matchLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(numberMatchLabel, org.openide.util.NbBundle.getMessage(DataResultTopComponent.class, "DataResultTopComponent.numberMatchLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(directoryTablePath) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 855, Short.MAX_VALUE) + .addComponent(numberMatchLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(matchLabel)) + .addComponent(dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 967, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(matchLabel) + .addComponent(numberMatchLabel)) + .addComponent(directoryTablePath)) + .addGap(0, 0, 0) + .addComponent(dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTabbedPane dataResultTabbedPanel; + private javax.swing.JLabel directoryTablePath; + private javax.swing.JLabel matchLabel; + private javax.swing.JLabel numberMatchLabel; + // End of variables declaration//GEN-END:variables +// /** +// * Gets default instance. Do not use directly: reserved for *.settings files only, +// * i.e. deserialization routines; otherwise you could get a non-deserialized instance. +// * To obtain the singleton instance, use {@link #findInstance}. +// */ +// public static synchronized DataResultTopComponent getDefault() { +// if (instance == null) { +// instance = new DataResultTopComponent(); +// } +// return instance; +// } +// +// /** +// * Obtain the DataResultTopComponent instance. Never call {@link #getDefault} directly! +// */ +// public static synchronized DataResultTopComponent findInstance() { +// TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); +// if (win == null) { +// Logger.getLogger(DataResultTopComponent.class.getName()).warning( +// "Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system."); +// return getDefault(); +// } +// if (win instanceof DataResultTopComponent) { +// return (DataResultTopComponent) win; +// } +// Logger.getLogger(DataResultTopComponent.class.getName()).warning( +// "There seem to be multiple components with the '" + PREFERRED_ID +// + "' ID. That is a potential source of errors and unexpected behavior."); +// return getDefault(); +// } + + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; + } + + @Override + public void componentOpened() { + // Add all the DataContentViewer to the tabbed pannel. + // (Only when the it's opened at the first time: tabCount = 0) + int totalTabs = this.dataResultTabbedPanel.getTabCount(); + if (totalTabs == 0) { + // find all dataContentViewer and add them to the tabbed pane + for (DataResultViewer factory : Lookup.getDefault().lookupAll(DataResultViewer.class)) { + DataResultViewer drv = factory.getInstance(); + this.viewers.add(new UpdateWrapper(drv)); + this.dataResultTabbedPanel.addTab(drv.getTitle(), drv.getComponent()); + } + } + + if (this.preferredID().equals(DataResultTopComponent.PREFERRED_ID)) { + // if no node selected on DataExplorer, clear the field + if (rootNode == null) { + setNode(rootNode); + } + } + } + + @Override + public void componentClosed() { + pcs.firePropertyChange(REMOVE_FILESEARCH, "", this); // notify to remove this from the menu + + // try to remove any references to this class + PropertyChangeListener[] pcl = pcs.getPropertyChangeListeners(); + for (int i = 0; i < pcl.length; i++) { + pcs.removePropertyChangeListener(pcl[i]); + } + + // clear all set nodes + for (UpdateWrapper drv : this.viewers) { + drv.setNode(null); + } + + if (!this.isMain) { + for (UpdateWrapper drv : this.viewers) { + drv.clearComponent(); + } + this.directoryTablePath.removeAll(); + this.directoryTablePath = null; + this.matchLabel.removeAll(); + this.matchLabel = null; + this.numberMatchLabel.removeAll(); + this.numberMatchLabel = null; + this.setLayout(null); + this.pcs = null; + this.removeAll(); + System.gc(); + } + + } + + @Override + protected String preferredID() { + if (this.isMain) { + return PREFERRED_ID; + } else { + return this.getName(); + } + } + + @Override + public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { + this.pcs.addPropertyChangeListener(listener); + } + + @Override + public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { + this.pcs.removePropertyChangeListener(listener); + } + + @Override + public String getPreferredID() { + return PREFERRED_ID; + } + + @Override + public void setNode(ContentNode selectedNode) { + this.rootNode = selectedNode; + String path = ""; + if (selectedNode != null) { + path = DataConversion.getformattedPath(selectedNode.getDisplayPath(), 0); + + int childrenCount = ((Node) selectedNode).getChildren().getNodesCount(true); + this.numberMatchLabel.setText(Integer.toString(childrenCount)); + } + + this.numberMatchLabel.setVisible(true); + this.matchLabel.setVisible(true); + + this.directoryTablePath.setText(path); // set the node path + + resetTabs(selectedNode); + + // set the display on the current active tab + int currentActiveTab = this.dataResultTabbedPanel.getSelectedIndex(); + if (currentActiveTab != -1) { + UpdateWrapper drv = viewers.get(currentActiveTab); + drv.setNode(selectedNode); + } + } + + @Override + public void setTitle(String title) { + setName(title); + } + + @Override + public boolean isMain() { + return this.isMain; + } + + @Override + public boolean canClose() { + return (!this.isMain) || !Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0; // only allow this window to be closed when there's no case opened or no image in this case + } + + @Override + public void stateChanged(ChangeEvent e) { + JTabbedPane pane = (JTabbedPane) e.getSource(); + + // Get and set current selected tab + int currentTab = pane.getSelectedIndex(); + if (currentTab != -1) { + UpdateWrapper drv = this.viewers.get(currentTab); + if (drv.isOutdated()) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + drv.setNode(rootNode); + } finally { + this.setCursor(null); + } + } + } + } + + /** + * Resets the tabs based on the selected Node. If the selected node is null + * or not supported, disable that tab as well. + * + * @param selectedNode the selected content Node + */ + public void resetTabs(ContentNode selectedNode) { + + for (UpdateWrapper drv : this.viewers) { + drv.resetComponent(); + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.form new file mode 100644 index 0000000000..66868f5057 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.form @@ -0,0 +1,41 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="tableScrollPanel" alignment="0" pref="691" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="tableScrollPanel" alignment="0" pref="366" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="tableScrollPanel"> + <Events> + <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="tableScrollPanelComponentResized"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new OutlineView(this.firstColumnLabel);"/> + <AuxValue name="JavaCodeGenerator_InitCodePre" type="java.lang.String" value="//new TreeTableView()"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java new file mode 100644 index 0000000000..834e2fea30 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -0,0 +1,355 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Component; +import java.awt.Cursor; +import java.awt.FontMetrics; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.view.OutlineView; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.openide.nodes.Node.PropertySet; +import org.openide.nodes.Sheet; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; +// TODO We should not have anything specific to Image in here... +import org.sleuthkit.datamodel.Image; + +/** + * DataResult sortable table viewer + */ +@ServiceProvider(service = DataResultViewer.class) +public class DataResultViewerTable extends AbstractDataResultViewer { + + private transient ExplorerManager em = new ExplorerManager(); + private String firstColumnLabel = "Name"; + private boolean isImageNode; + + /** Creates new form DataResultViewerTable */ + public DataResultViewerTable() { + initComponents(); + + OutlineView ov = ((OutlineView) this.tableScrollPanel); + + // only allow one item to be selected at a time + ov.getOutline().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + // don't show the root node + ov.getOutline().setRootVisible(false); + + this.isImageNode = false; + this.em.addPropertyChangeListener(this); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + tableScrollPanel = new OutlineView(this.firstColumnLabel); + + //new TreeTableView() + tableScrollPanel.addComponentListener(new java.awt.event.ComponentAdapter() { + public void componentResized(java.awt.event.ComponentEvent evt) { + tableScrollPanelComponentResized(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(tableScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 691, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(tableScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE) + ); + }// </editor-fold>//GEN-END:initComponents + + private void tableScrollPanelComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tableScrollPanelComponentResized + if (this.tableScrollPanel.getWidth() < 700 && isImageNode) { + ((OutlineView) this.tableScrollPanel).getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + } else { + if (isImageNode) { + ((OutlineView) this.tableScrollPanel).getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + } + } + }//GEN-LAST:event_tableScrollPanelComponentResized + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane tableScrollPanel; + // End of variables declaration//GEN-END:variables + + @Override + public ExplorerManager getExplorerManager() { + return this.em; + } + + @Override + public Node getOriginalSelectedNode() { + Node result = null; + Node[] selectedNodes = this.getExplorerManager().getSelectedNodes(); + if (selectedNodes.length > 0) { + result = selectedNodes[0]; + if (result != null && result instanceof TableFilterNode) { + result = ((TableFilterNode) result).getOriginal(); + } + } + return result; + } + + /** + * Gets regular Bean property set properties from first child of Node. + * @param parent Node with at least one child to get properties from + * @return Properties, + */ + private Node.Property[] getChildPropertyHeaders(Node parent) { + Node firstChild = parent.getChildren().getNodeAt(0); + + if (firstChild == null) { + throw new IllegalArgumentException("Couldn't get a child Node from the given parent."); + } else { + for (PropertySet ps : firstChild.getPropertySets()) { + if (ps.getName().equals(Sheet.PROPERTIES)) { + return ps.getProperties(); + } + } + + throw new IllegalArgumentException("Child Node doesn't have the regular PropertySet."); + } + } + + @Override + public void setNode(ContentNode selectedNode) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + boolean hasChildren = false; + + + if (selectedNode != null) { + hasChildren = ((Node) selectedNode).getChildren().getNodesCount() > 0; + } + + + // if there's no selection node, do nothing + if (hasChildren) { + Node root = (Node) selectedNode; + + if (root instanceof TableFilterNode) { + root = ((TableFilterNode) root).getOriginal(); + } else { + root = new TableFilterNode(root, true); + } + + em.setRootContext(root); + + OutlineView ov = ((OutlineView) this.tableScrollPanel); + + List<Node.Property> tempProps = new ArrayList<Node.Property>(Arrays.asList(getChildPropertyHeaders((Node) selectedNode))); + + tempProps.remove(0); + + Node.Property[] props = tempProps.toArray(new Node.Property[tempProps.size()]); + + + // *********** Make the TreeTableView to be sortable *************** + + //First property column is sortable, but also sorted initially, so + //initially this one will have the arrow icon: + props[0].setValue("TreeColumnTTV", Boolean.TRUE); // Identifies special property representing first (tree) column. + props[0].setValue("ComparableColumnTTV", Boolean.TRUE); // This property column should be used for sorting. + props[0].setValue("SortingColumnTTV", Boolean.TRUE); // TreeTableView should be initially sorted by this property column. + + // The rest of the columns are sortable, but not initially sorted, + // so initially will have no arrow icon: + for (int i = 1; i < props.length; i++) { + props[i].setValue("ComparableColumnTTV", Boolean.TRUE); + } + + // ***************************************************************** + + //ttv.setProperties(props); // set the properties + ov.setProperties(props); // set the properties + + // // set the first entry + // Children test = root.getChildren(); + // Node firstEntryNode = test.getNodeAt(0); + // try { + // this.getExplorerManager().setSelectedNodes(new Node[]{firstEntryNode}); + // } catch (PropertyVetoException ex) {} + + + // show the horizontal scroll panel and show all the content & header + if (!(selectedNode.getContent() instanceof Image)) { + this.isImageNode = false; + int totalColumns = props.length; + + //int scrollWidth = ttv.getWidth(); + int scrollWidth = ov.getWidth(); + int minWidth = scrollWidth / totalColumns; + int margin = 4; + int startColumn = 1; + ov.getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + // get the fontmetrics + //FontMetrics metrics = ttv.getGraphics().getFontMetrics(); + FontMetrics metrics = ov.getGraphics().getFontMetrics(); + + // get first 100 rows values for the table + Object[][] content = null; + try { + content = selectedNode.getRowValues(100); + } catch (SQLException ex) { + // TODO: potential exception is being ignored (see below), should be handled + } + + + if (content != null) { + // for the "Name" column + int nodeColWidth = getMaxColumnWidth(0, metrics, margin, 40, firstColumnLabel, content); // Note: 40 is the width of the icon + node lines. Change this value if those values change! + ov.getOutline().getColumnModel().getColumn(0).setPreferredWidth(nodeColWidth); + + // get the max for each other column + for (int colIndex = startColumn; colIndex < totalColumns; colIndex++) { + int colWidth = getMaxColumnWidth(colIndex, metrics, margin, 8, props, content); + ov.getOutline().getColumnModel().getColumn(colIndex).setPreferredWidth(colWidth); + } + } + + // if there's no content just auto resize all columns + if (!(content.length > 0)) { + // turn on the auto resize + ov.getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + } + } else { + this.isImageNode = true; + // turn on the auto resize for image result + ov.getOutline().getColumnModel().getColumn(0).setPreferredWidth(175); + ov.getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + } + } else { + Node emptyNode = new AbstractNode(Children.LEAF); + em.setRootContext(emptyNode); // make empty node + ((OutlineView) this.tableScrollPanel).getOutline().setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + ((OutlineView) this.tableScrollPanel).setProperties(new Node.Property[]{}); // set the empty property header + } + } finally { + this.setCursor(null); + } + } + + @Override + public String getTitle() { + return "Table View"; + } + + @Override + public DataResultViewer getInstance() { + return new DataResultViewerTable(); + } + + @Override + public void resetComponent() { + } + + /** + * Gets the max width of the column from the given index, header, and table. + * + * @param index the index of the column on the table / header + * @param metrics the font metrics that this component use + * @param margin the left/right margin of the column + * @param padding the left/right padding of the column + * @param header the property headers of the table + * @param table the object table + * @return max the maximum width of the column + */ + private int getMaxColumnWidth(int index, FontMetrics metrics, int margin, int padding, Node.Property[] header, Object[][] table) { + // set the tree (the node / names column) width + String headerName = header[index - 1].getDisplayName(); + + return getMaxColumnWidth(index, metrics, margin, padding, headerName, table); + } + + /** + * Gets the max width of the column from the given index, header, and table. + * + * @param index the index of the column on the table / header + * @param metrics the font metrics that this component use + * @param margin the left/right margin of the column + * @param padding the left/right padding of the column + * @param header the column header for the comparison + * @param table the object table + * @return max the maximum width of the column + */ + private int getMaxColumnWidth(int index, FontMetrics metrics, int margin, int padding, String header, Object[][] table) { + // set the tree (the node / names column) width + String headerName = header; + int headerWidth = metrics.stringWidth(headerName); // length of the header + int colWidth = 0; + + // Get maximum width of column data + for (int i = 0; i < table.length; i++) { + String test = table[i][index].toString(); + colWidth = Math.max(colWidth, metrics.stringWidth(test)); + } + + colWidth += padding; // add the padding on the most left gap + headerWidth += 8; // add the padding to the header (change this value if the header padding value is changed) + + // Set the width + int width = Math.max(headerWidth, colWidth); + width += 2 * margin; // Add margin + + return width; + } + + @Override + public void clearComponent() { + em.removePropertyChangeListener(this); + this.tableScrollPanel.removeAll(); + this.tableScrollPanel = null; + try { + this.em.getRootContext().destroy(); + em = null; + } catch (IOException ex) { + // TODO: Proper thing to do? Log? Don't throw RuntimeException? + throw new RuntimeException("Error: can't clear the component of the Table Result Viewer.", ex); + } + } + + @Override + public Component getComponent() { + return this; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.form new file mode 100644 index 0000000000..4c5b1ed717 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.form @@ -0,0 +1,37 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="thumbnailScrollPanel" alignment="1" pref="675" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="thumbnailScrollPanel" alignment="1" pref="336" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="thumbnailScrollPanel"> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new IconView();"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + </Container> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java new file mode 100644 index 0000000000..c0fdc0ea6b --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java @@ -0,0 +1,158 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.io.IOException; +import javax.swing.ListSelectionModel; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.view.IconView; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; + +/** + * Thumbnail view of images in data result + */ +@ServiceProvider(service = DataResultViewer.class) +public class DataResultViewerThumbnail extends AbstractDataResultViewer { + + private transient ExplorerManager em = new ExplorerManager(); + + /** Creates new form DataResultViewerThumbnail */ + public DataResultViewerThumbnail() { + initComponents(); + + // only allow one item to be selected at a time + ((IconView) thumbnailScrollPanel).setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + this.em.addPropertyChangeListener(this); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + thumbnailScrollPanel = new IconView(); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(thumbnailScrollPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 675, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(thumbnailScrollPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE) + ); + }// </editor-fold>//GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane thumbnailScrollPanel; + // End of variables declaration//GEN-END:variables + + @Override + public ExplorerManager getExplorerManager() { + return this.em; + } + + @Override + public Node getOriginalSelectedNode() { + Node result = null; + + Node[] selectedNodes = this.getExplorerManager().getSelectedNodes(); + if (selectedNodes.length > 0) { + result = selectedNodes[0]; + if (result != null && result instanceof ThumbnailViewNode) { + result = ((ThumbnailViewNode) result).getOriginal(); + } + } + return result; + } + + @Override + public void setNode(ContentNode givenNode) { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + if (givenNode != null) { + Node root = (Node) givenNode; + + if (root instanceof ThumbnailViewNode) { + root = ((ThumbnailViewNode) root).getOriginal(); + } else { + Node temp = new AbstractNode(new ThumbnailViewChildren((ContentNode) root)); + root = temp; + } + + em.setRootContext(root); + } else { + Node emptyNode = new AbstractNode(Children.LEAF); + em.setRootContext(emptyNode); // make empty node + + IconView iv = ((IconView) this.thumbnailScrollPanel); + iv.setBackground(Color.BLACK); + } + } finally { + this.setCursor(null); + } + } + + @Override + public String getTitle() { + return "Thumbnail View"; + } + + @Override + public DataResultViewer getInstance() { + return new DataResultViewerThumbnail(); + } + + @Override + public void resetComponent() { + } + + @Override + public void clearComponent() { + em.removePropertyChangeListener(this); + this.thumbnailScrollPanel.removeAll(); + this.thumbnailScrollPanel = null; + try { + this.em.getRootContext().destroy(); + em = null; + } catch (IOException ex) { + // TODO: What's the proper thing to do here? Should it log? Not throw runtime exception? + throw new RuntimeException("Error: can't clear the component of the Thumbnail Result Viewer.", ex); + } + } + + @Override + public Component getComponent() { + return this; + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java new file mode 100644 index 0000000000..5a3cacffdb --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java @@ -0,0 +1,43 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import org.openide.modules.ModuleInstall; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.casemodule.Case; + +/** + * Manages this module's lifecycle. Opens the startup dialog during startup. + */ +public class Installer extends ModuleInstall { + + @Override + public void restored() { + //TODO: the version number shouldn't really be stored in the Case class + System.setProperty("netbeans.buildnumber", Case.getAutopsyVersion()); + + WindowManager.getDefault().invokeWhenUIReady(new Runnable() { + + @Override + public void run() { + Case.invokeStartupDialog(); // bring up the startup dialog + } + }); + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.form new file mode 100644 index 0000000000..3ac931b2dc --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.form @@ -0,0 +1,139 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jScrollPane1" pref="602" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="pageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="currentPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="ofLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="totalPageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="prevPageButton" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="nextPageButton" min="-2" pref="99" max="-2" attributes="0"/> + <EmptySpace pref="276" max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="filePathLabel" max="32767" attributes="0"/> + <EmptySpace min="-2" pref="574" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="filePathLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="pageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="currentPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="ofLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="totalPageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="prevPageButton" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="nextPageButton" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="jScrollPane1" pref="337" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JButton" name="nextPageButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.nextPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nextPageButtonActionPerformed"/> + </Events> + </Component> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextPane" name="outputViewPane"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Courier New" size="11" style="0"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="prevPageButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.prevPageButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="prevPageButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="totalPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.totalPageLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="ofLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.ofLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="currentPageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.currentPageLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="pageLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.pageLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="filePathLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/corecomponents/Bundle.properties" key="OutputViewPanel.filePathLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.java new file mode 100644 index 0000000000..f7be0036da --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/OutputViewPanel.java @@ -0,0 +1,251 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.sleuthkit.autopsy.datamodel.DataConversion; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; + +/** + * Paging view for DataContentViewer. + */ +public class OutputViewPanel extends javax.swing.JPanel { + + private static long currentOffset = 0; + private static long pageLength = 10240; + private static int currentPage = 1; + private int outputType; + private Content dataSource; + + /** + * Creates new form OutputViewPanel + * @param outputType type of panel to display: 1 = hex view, 2 = string view + */ + public OutputViewPanel(int outputType) { + initComponents(); + this.outputType = outputType; + this.dataSource = null; + + // clear / reset the fields + filePathLabel.setText(""); + currentPageLabel.setText(""); + totalPageLabel.setText(""); + ofLabel.setVisible(false); + prevPageButton.setEnabled(false); + nextPageButton.setEnabled(false); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + nextPageButton = new javax.swing.JButton(); + jScrollPane1 = new javax.swing.JScrollPane(); + outputViewPane = new javax.swing.JTextPane(); + prevPageButton = new javax.swing.JButton(); + totalPageLabel = new javax.swing.JLabel(); + ofLabel = new javax.swing.JLabel(); + currentPageLabel = new javax.swing.JLabel(); + pageLabel = new javax.swing.JLabel(); + filePathLabel = new javax.swing.JLabel(); + + nextPageButton.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.nextPageButton.text")); // NOI18N + nextPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + nextPageButtonActionPerformed(evt); + } + }); + + outputViewPane.setFont(new java.awt.Font("Courier New", 0, 11)); + jScrollPane1.setViewportView(outputViewPane); + + prevPageButton.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.prevPageButton.text")); // NOI18N + prevPageButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + prevPageButtonActionPerformed(evt); + } + }); + + totalPageLabel.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.totalPageLabel.text")); // NOI18N + + ofLabel.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.ofLabel.text")); // NOI18N + + currentPageLabel.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.currentPageLabel.text")); // NOI18N + + pageLabel.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.pageLabel.text")); // NOI18N + + filePathLabel.setText(org.openide.util.NbBundle.getMessage(OutputViewPanel.class, "OutputViewPanel.filePathLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 602, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(pageLabel) + .addGap(18, 18, 18) + .addComponent(currentPageLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(ofLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(totalPageLabel) + .addGap(18, 18, 18) + .addComponent(prevPageButton) + .addGap(18, 18, 18) + .addComponent(nextPageButton, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(276, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(filePathLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(574, 574, 574)))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(filePathLabel) + .addGap(4, 4, 4) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pageLabel) + .addComponent(currentPageLabel) + .addComponent(ofLabel) + .addComponent(totalPageLabel) + .addComponent(prevPageButton) + .addComponent(nextPageButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + + private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset -= pageLength; + currentPage = currentPage - 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false, outputType); + }//GEN-LAST:event_prevPageButtonActionPerformed + + private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed + //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar + currentOffset += pageLength; + currentPage = currentPage + 1; + currentPageLabel.setText(Integer.toString(currentPage)); + setDataView(dataSource, currentOffset, false, outputType); + }//GEN-LAST:event_nextPageButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel currentPageLabel; + private javax.swing.JLabel filePathLabel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JButton nextPageButton; + private javax.swing.JLabel ofLabel; + private javax.swing.JTextPane outputViewPane; + private javax.swing.JLabel pageLabel; + private javax.swing.JButton prevPageButton; + private javax.swing.JLabel totalPageLabel; + // End of variables declaration//GEN-END:variables + + /** + * Sets the DataView (The tabbed panel) + * + * @param dataSource the content that want to be shown + * @param offset the starting offset + * @param reset whether to reset the dataView or not + * @param outputType the type of the output. 1 = hex view, 2 = string view + */ + public void setDataView(Content dataSource, long offset, boolean reset, int outputType) { + try { + this.dataSource = dataSource; + byte[] data; + + if (dataSource.getSize() > 0) { + data = dataSource.read(offset, pageLength); // read the data + } else { + // empty file + data = null; + } + + // I set the -1 to for empty node or directory + if (reset) { + data = null; + filePathLabel.setText(""); + } + + // set the data on the bottom and show it + String text = ""; + Boolean setVisible = false; + + if (data != null) { + text = DataConversion.getString(data, 4); + setVisible = true; + } + + // disable or enable the next button + if (offset + pageLength < dataSource.getSize()) { + nextPageButton.setEnabled(true); + } else { + nextPageButton.setEnabled(false); + } + + if (offset == 0) { + prevPageButton.setEnabled(false); + currentPage = 1; // reset the page number + } else { + prevPageButton.setEnabled(true); + } + + // type 1 = hex view + if (outputType == 1) { + outputViewPane.setText(DataConversion.byteArrayToHex(data, pageLength, offset, outputViewPane.getFont())); + outputViewPane.moveCaretPosition(0); + } + // type 2 = string view + if (outputType == 2) { + outputViewPane.setText(text); + outputViewPane.moveCaretPosition(0); + } + + if (setVisible) { + int totalPage = (int) (dataSource.getSize() / pageLength) + 1; + ofLabel.setVisible(true); + totalPageLabel.setText(Integer.toString(totalPage)); + currentPageLabel.setText(Integer.toString(currentPage)); + } else { + // reset or hide the labels + ofLabel.setVisible(false); + totalPageLabel.setText(""); + currentPageLabel.setText(""); + } + } catch (TskException ex) { + // TODO: maybe make bubble instead + Logger.getLogger(OutputViewPanel.class.getName()).log(Level.WARNING, "Error while trying to set the display on the ouput view panel.", ex); + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.form new file mode 100644 index 0000000000..1479125a3e --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.form @@ -0,0 +1,150 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.3" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jScrollPane2" alignment="0" pref="394" max="32767" attributes="0"/> + <Component id="jScrollPane3" alignment="1" pref="394" max="32767" attributes="0"/> + <Component id="jLabel1" alignment="0" pref="394" max="32767" attributes="0"/> + <Group type="102" attributes="0"> + <Component id="jPanel1" pref="237" max="32767" attributes="1"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="verboseLoggingButton" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> + <Component id="jScrollPane3" pref="101" max="32767" attributes="2"/> + <EmptySpace min="-2" pref="32" max="-2" attributes="0"/> + <Component id="jScrollPane2" pref="103" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="27" max="-2" attributes="0"/> + <Component id="jPanel1" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="verboseLoggingButton" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="horizontalAlignment" type="int" value="0"/> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="about" type="code"/> + </Property> + <Property name="horizontalTextPosition" type="int" value="0"/> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jLabel1MouseClicked"/> + </Events> + </Component> + <Container class="javax.swing.JPanel" name="jPanel1"> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/> + <SubComponents> + <Component class="javax.swing.JButton" name="jButton2"> + <Properties> + <Property name="mnemonic" type="int" editor="org.netbeans.modules.i18n.form.FormI18nMnemonicEditor"> + <ResourceString bundle="" key="MNE_Close" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/core/ui/Bundle.properties" key="LBL_Close" replaceFormat="NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/> + </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> + <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/> + </Constraint> + </Constraints> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JScrollPane" name="jScrollPane3"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="null"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextPane" name="copyright"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="null"/> + </Property> + <Property name="contentType" type="java.lang.String" value="text/html"/> + <Property name="editable" type="boolean" value="false"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/netbeans/core/ui/Bundle.properties" key="LBL_Copyright" replaceFormat="org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString("{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="copyrightMouseClicked"/> + </Events> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JScrollPane" name="jScrollPane2"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextPane" name="description"> + <Properties> + <Property name="contentType" type="java.lang.String" value="text/html"/> + <Property name="editable" type="boolean" value="false"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_SerializeTo" type="java.lang.String" value="ProductInformationPanel_description"/> + </AuxValues> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="verboseLoggingButton"> + <Properties> + <Property name="text" type="java.lang.String" value="Activate verbose logging"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="activateVerboseLogging"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java new file mode 100644 index 0000000000..d29e1ea8f3 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ProductInformationPanel.java @@ -0,0 +1,256 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Cursor; +import java.awt.Window; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.MessageFormat; +import java.util.Locale; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import org.netbeans.core.actions.HTMLViewAction; +import org.openide.awt.HtmlBrowser; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.casemodule.Autopsy; +import org.sleuthkit.datamodel.SleuthkitJNI; + +/** + * Custom "About" window panel. + */ +class ProductInformationPanel extends JPanel implements HyperlinkListener { + + private URL url = null; + private Icon about; + + ProductInformationPanel() { + about = new ImageIcon(org.netbeans.core.startup.Splash.loadContent(true)); + initComponents(); + jLabel1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + description.setText(org.openide.util.NbBundle.getMessage(ProductInformationPanel.class, + "LBL_Description", new Object[]{getProductVersionValue(), getJavaValue(), getVMValue(), + getOperatingSystemValue(), getEncodingValue(), getSystemLocaleValue(), getUserDirValue(), getSleuthKitVersionValue()})); + description.addHyperlinkListener(this); + copyright.addHyperlinkListener(this); + copyright.setBackground(getBackground()); + if (Autopsy.verboseLoggingIsSet()) { + disableVerboseLoggingButton(); + } + + } + + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + jLabel1 = new javax.swing.JLabel(); + jPanel1 = new javax.swing.JPanel(); + jButton2 = new javax.swing.JButton(); + jScrollPane3 = new javax.swing.JScrollPane(); + copyright = new javax.swing.JTextPane(); + jScrollPane2 = new javax.swing.JScrollPane(); + description = new javax.swing.JTextPane(); + verboseLoggingButton = new javax.swing.JButton(); + + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + jLabel1.setIcon(about); + jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jLabel1MouseClicked(evt); + } + }); + + jPanel1.setLayout(new java.awt.GridBagLayout()); + + jButton2.setMnemonic(NbBundle.getMessage(ProductInformationPanel.class, "MNE_Close").charAt(0)); + jButton2.setText(NbBundle.getMessage(ProductInformationPanel.class, "LBL_Close")); // NOI18N + jButton2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton2ActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + jPanel1.add(jButton2, gridBagConstraints); + + jScrollPane3.setBorder(null); + + copyright.setBorder(null); + copyright.setContentType("text/html"); + copyright.setEditable(false); + copyright.setText(org.openide.util.NbBundle.getBundle(ProductInformationPanel.class).getString("LBL_Copyright")); // NOI18N + copyright.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + copyrightMouseClicked(evt); + } + }); + jScrollPane3.setViewportView(copyright); + + description.setContentType("text/html"); + description.setEditable(false); + jScrollPane2.setViewportView(description); + + verboseLoggingButton.setText("Activate verbose logging"); + verboseLoggingButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + activateVerboseLogging(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE) + .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE) + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(verboseLoggingButton))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE) + .addGap(32, 32, 32) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(27, 27, 27) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(verboseLoggingButton)) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + +private void copyrightMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_copyrightMouseClicked + showUrl(); +}//GEN-LAST:event_copyrightMouseClicked + +private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed + closeDialog(); +}//GEN-LAST:event_jButton2ActionPerformed + +private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked + try { + url = new URL(NbBundle.getMessage(ProductInformationPanel.class, "URL_ON_IMG")); // NOI18N + showUrl(); + } catch (MalformedURLException ex) { + //ignore + } + url = null; // TODO add your handling code here: +}//GEN-LAST:event_jLabel1MouseClicked + + private void activateVerboseLogging(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_activateVerboseLogging + Autopsy.startVerboseLogging(); + disableVerboseLoggingButton(); + }//GEN-LAST:event_activateVerboseLogging + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextPane copyright; + private javax.swing.JTextPane description; + private javax.swing.JButton jButton2; + private javax.swing.JLabel jLabel1; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JScrollPane jScrollPane3; + private javax.swing.JButton verboseLoggingButton; + // End of variables declaration//GEN-END:variables + + private void disableVerboseLoggingButton() { + this.verboseLoggingButton.setEnabled(false); + this.verboseLoggingButton.setText("Verbose logging enabled"); + } + + private void closeDialog() { + Window w = SwingUtilities.getWindowAncestor(this); + w.setVisible(false); + w.dispose(); + } + + private void showUrl() { + if (url != null) { + org.openide.awt.StatusDisplayer.getDefault().setStatusText( + NbBundle.getBundle(HTMLViewAction.class).getString("CTL_OpeningBrowser")); + HtmlBrowser.URLDisplayer.getDefault().showURL(url); + } + } + + private static String getSleuthKitVersionValue() { + return SleuthkitJNI.getVersion(); + } + + private static String getProductVersionValue() { + return MessageFormat.format( + NbBundle.getBundle("org.netbeans.core.startup.Bundle").getString("currentVersion"), + new Object[]{System.getProperty("netbeans.buildnumber")}); + } + + private static String getOperatingSystemValue() { + return NbBundle.getMessage(ProductInformationPanel.class, "Format_OperatingSystem_Value", + System.getProperty("os.name", "unknown"), + System.getProperty("os.version", "unknown"), + System.getProperty("os.arch", "unknown")); + } + + private static String getJavaValue() { + return System.getProperty("java.version", "unknown"); + } + + private static String getVMValue() { + return System.getProperty("java.vm.name", "unknown") + " " + System.getProperty("java.vm.version", ""); + } + + private static String getSystemLocaleValue() { + String branding; + return Locale.getDefault().toString() + ((branding = NbBundle.getBranding()) == null ? "" : (" (" + branding + ")")); // NOI18N + } + + private String getUserDirValue() { + return System.getProperty("netbeans.user"); + } + + private static String getEncodingValue() { + return System.getProperty("file.encoding", "unknown"); + } + + @Override + public void hyperlinkUpdate(HyperlinkEvent event) { + if (HyperlinkEvent.EventType.ENTERED == event.getEventType()) { + url = event.getURL(); + } else if (HyperlinkEvent.EventType.EXITED == event.getEventType()) { + url = null; + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java new file mode 100644 index 0000000000..dcc3a78846 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java @@ -0,0 +1,59 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import org.openide.nodes.Children; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; + +/** + * Complementary class to TableFilterNode. + */ +class TableFilterChildren extends FilterNode.Children { + + /** the constructor */ + TableFilterChildren(Node arg) { + super(arg); + } + + @Override + protected Node copyNode(Node arg0) { + return new TableFilterNode(arg0, false); + } + + @Override + protected Node[] createNodes(Node arg0) { + // filter out the children + return new Node[]{this.copyNode(arg0)}; + } + + /** + * Converts the given FsContent into "Children". + * + * @param fs + * @return children + */ + public static Children createInstance(Node arg, boolean createChild) { + if (createChild) { + return new TableFilterChildren(arg); + } else { + return Children.LEAF; + } + } +} \ No newline at end of file diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java new file mode 100644 index 0000000000..33236fc791 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java @@ -0,0 +1,59 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; + +/** + * This class is used to filter the nodes that we want to show on the "TreeTableView". + * So basically we just want to show one layer of nodes from it's parent. + * + * @author jantonius + */ +class TableFilterNode extends FilterNode { + + private boolean createChild; + + /** the constructor */ + public TableFilterNode(Node arg, boolean crChild) { + super(arg, TableFilterChildren.createInstance(arg, crChild)); + this.createChild = crChild; + } + + @Override + public Node getOriginal() { + return super.getOriginal(); + } + + /** + * Override the display name / header for the first (tree) column on the + * "TreeTableView". + * + * @return disName the display name for the first column + */ + @Override + public String getDisplayName() { + if (createChild) { + return "Name"; + } else { + return super.getDisplayName(); + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java new file mode 100644 index 0000000000..42916ee103 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java @@ -0,0 +1,78 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.datamodel.ContentNode; + +/** + * Complementary class to ThumbnailViewNode + */ +class ThumbnailViewChildren extends FilterNode.Children { + + private int totalChildren; + + /** the constructor */ + ThumbnailViewChildren(ContentNode arg) { + super((Node) arg); + this.totalChildren = 1; + } + + @Override + protected Node copyNode(Node arg0) { + return new ThumbnailViewNode((ContentNode) arg0); + } + + @Override + protected Node[] createNodes(Node arg0) { + // filter out the FileNode and the "." and ".." directories + if (arg0 != null && //(arg0 instanceof FileNode && + isSupported(arg0)) { + totalChildren++; + return new Node[]{this.copyNode(arg0)}; + } else { + return new Node[]{}; + } + } + + public int childrenCount() { + return this.totalChildren; + } + + public static boolean isSupported(Node node) { + if (node != null) { + String lowerName = node.getDisplayName().toLowerCase(); + // Note: only supports JPG, GIF, and PNG for now + // TODO: replace giant OR with check if in list + return lowerName.endsWith(".jpg") + || lowerName.endsWith(".jpeg") + || //node.getName().toLowerCase().endsWith(".jpe") || + //node.getName().toLowerCase().endsWith(".jfif") || + lowerName.endsWith(".gif") + || //node.getName().toLowerCase().endsWith(".bmp") || + //node.getName().toLowerCase().endsWith(".tif") || + //node.getName().toLowerCase().endsWith(".tiff") || + //node.getName().toLowerCase().endsWith(".tga") || + lowerName.endsWith(".png"); + } else { + return false; + } + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java new file mode 100644 index 0000000000..304cdeea6c --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java @@ -0,0 +1,125 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.MediaTracker; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.lang.ref.SoftReference; +import java.util.logging.Level; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.TskException; + +/** + * + * @author jantonius + */ +class ThumbnailViewNode extends FilterNode { + + private ContentNode currentNode; + // for error handling + private SoftReference<Image> iconCache; + private static Image defaultIcon = new ImageIcon("/org/sleuthkit/autopsy/images/file-icon.png").getImage(); + + /** the constructor */ + ThumbnailViewNode(ContentNode arg) { + super((Node) arg, Children.LEAF); + this.currentNode = arg; + } + + @Override + public Node getOriginal() { + return super.getOriginal(); + } + + @Override + public Image getIcon(int type) { + Image icon = null; + + if (iconCache != null) { + icon = iconCache.get(); + } + + if (icon == null) { + try { + System.out.println("generate"); + icon = generateIcon(); + iconCache = new SoftReference<Image>(icon); + } catch (TskException ex) { + icon = ThumbnailViewNode.defaultIcon; + } + } + + return icon; + } + + private Image generateIcon() throws TskException { + ContentNode temp = currentNode; + byte[] content = temp.read(0, temp.getContent().getSize()); + Image result = Toolkit.getDefaultToolkit().createImage(content); + + // scale the image + MediaTracker mTracker = new MediaTracker(new JFrame()); + mTracker.addImage(result, 1); + try { + mTracker.waitForID(1); + } catch (InterruptedException ex) { + // TODO: maybe make bubble instead + Log.get(ThumbnailViewNode.class).log(Level.WARNING, "Error while trying to scale the icon.", ex); + } + int width = result.getWidth(null); + int height = result.getHeight(null); + + int max = Math.max(width, height); + double scale = (75 * 100) / max; + + // getScaledInstance can't take have width or height be 0, so round + // up by adding 1 after truncating to int. + width = (int) ((width * scale) / 100) + 1; + height = (int) ((height * scale) / 100) + 1; + + result = result.getScaledInstance(width, height, Image.SCALE_SMOOTH); + + // load the image completely + mTracker.addImage(result, 1); + try { + mTracker.waitForID(1); + } catch (InterruptedException ex) { + // TODO: maybe make bubble instead + Log.get(ThumbnailViewNode.class).log(Level.WARNING, "Error while trying to load the icon.", ex); + } + + // create 75x75 image for the icon with the icon on the center + BufferedImage combined = new BufferedImage(75, 75, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = (Graphics2D) combined.getGraphics(); + g.setColor(Color.WHITE); + g.setBackground(Color.WHITE); + g.drawImage(result, (75 - width) / 2, (75 - height) / 2, null); + + return Toolkit.getDefaultToolkit().createImage(combined.getSource()); + } +} diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_left.gif b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0d85dba4b9abc810f454a014fafc142f97f5f16 GIT binary patch literal 874 zcmZ?wbhEHb6k!ly_|5<V%*@Q1nwmN~I>yGv<>lodp;0^<0wW^?6o0ZXGBEsS&;fZD zlqVQC+!_9J%6M#8aIl#}SSzMt1A}uj1BZ=@hQcG4Mi!=sIT{X+-P#zO+NPW+XgD#E h-*=u0XVKH6eH!{{e@;w%<}zDYHtx>J$>|OZ)&M?!B|`uJ literal 0 HcmV?d00001 diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_right.gif b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/arrow_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..85272ad99cc0df252748b08468d0649a9c90fcda GIT binary patch literal 870 zcmZ?wbhEHb6k!ly_|5<VGBPrup`jqwC>{-g5f%c9KUo+V82&Tpfcy>06AT>A4F5T0 zJT@#i*vuiU6{C@$=)}MvBh@0|pyb#gpv!fHW5FWVK1tQ4HyT1qj<+h?C)vE5u=rTL UNc^E5jm-<s%(lp9V_~oc0Lob(Pyhe` literal 0 HcmV?d00001 diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/corecomponents-helpset.xml b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/corecomponents-helpset.xml new file mode 100644 index 0000000000..367403b593 --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/corecomponents-helpset.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpsetref PUBLIC "-//NetBeans//DTD JavaHelp Help Set Reference 1.0//EN" "http://www.netbeans.org/dtds/helpsetref-1_0.dtd"> +<helpsetref url="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/corecomponents-hs.xml"/> diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml new file mode 100644 index 0000000000..e9a8fa7c8f --- /dev/null +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <folder name="Actions"> + <folder name="Help"> + <file name="org-netbeans-core-actions-AboutAction.instance_hidden"/> + <file name="org-sleuthkit-autopsy-corecomponents-CustomAboutAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.corecomponents.CustomAboutAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.corecomponents.Bundle#CTL_CustomAboutAction"/> + <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + </folder> + <folder name="Window"> + <file name="org-sleuthkit-autopsy-corecomponents-DataContentAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.corecomponents.DataContentTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.corecomponents.Bundle#CTL_DataContentAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file> + </folder> + </folder> + <folder name="Menu"> + <folder name="Help"> + <attr name="master-help.xml/org-sleuthkit-autopsy-corecomponents-CustomAboutAction.shadow" boolvalue="true"/> + <file name="org-netbeans-core-actions-AboutAction.shadow_hidden"/> + <file name="org-sleuthkit-autopsy-corecomponents-CustomAboutAction.shadow"> + <attr name="originalFile" stringvalue="Actions/Help/org-sleuthkit-autopsy-corecomponents-CustomAboutAction.instance"/> + </file> + </folder> + <folder name="Window"/> + </folder> + <folder name="Services"> + <folder name="JavaHelp"> + <file name="corecomponents-helpset.xml" url="corecomponents-helpset.xml"> + <attr name="position" intvalue="3801"/> + </file> + </folder> + <file name="org-sleuthkit-autopsy-corecomponents-DataContentTopComponent.instance"> + <attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.corecomponentinterfaces.DataContent"/> + <attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.corecomponents.DataContentTopComponent.getDefault"/> + </file> + </folder> + <folder name="Windows2"> + <folder name="Components"> + + </folder> + <folder name="Modes"> + <folder name="editor"> + </folder> + <folder name="output"> + </folder> + </folder> + </folder> +</filesystem> diff --git a/DataModel/build.xml b/DataModel/build.xml new file mode 100644 index 0000000000..1c5480c65a --- /dev/null +++ b/DataModel/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.datamodel" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.datamodel.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/DataModel/manifest.mf b/DataModel/manifest.mf new file mode 100644 index 0000000000..e6e7aaf8c3 --- /dev/null +++ b/DataModel/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.datamodel/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Install: org/sleuthkit/autopsy/datamodel/Installer.class +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/datamodel/Bundle.properties + diff --git a/DataModel/nbproject/build-impl.xml b/DataModel/nbproject/build-impl.xml new file mode 100644 index 0000000000..93e8e0c4d4 --- /dev/null +++ b/DataModel/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.datamodel-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/DataModel/nbproject/genfiles.properties b/DataModel/nbproject/genfiles.properties new file mode 100644 index 0000000000..1b1b7ff913 --- /dev/null +++ b/DataModel/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=3fc9375e +build.xml.script.CRC32=3bd58878 +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=c861ba34 +nbproject/build-impl.xml.script.CRC32=b0a13adb +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.46.2 diff --git a/DataModel/nbproject/project.properties b/DataModel/nbproject/project.properties new file mode 100644 index 0000000000..6687cb6920 --- /dev/null +++ b/DataModel/nbproject/project.properties @@ -0,0 +1,5 @@ +file.reference.sqlite-jdbc-3.6.20.jar=release/modules/ext/sqlite-jdbc-3.6.20.jar +file.reference.Tsk_DataModel.jar=release/modules/ext/Tsk_DataModel.jar +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +spec.version.base=0.0 diff --git a/DataModel/nbproject/project.xml b/DataModel/nbproject/project.xml new file mode 100644 index 0000000000..4e76ac7974 --- /dev/null +++ b/DataModel/nbproject/project.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.datamodel</package> + <package>org.sleuthkit.datamodel</package> + <package>org.sqlite</package> + </public-packages> + <class-path-extension> + <runtime-relative-path>ext/sqlite-jdbc-3.6.20.jar</runtime-relative-path> + <binary-origin>release/modules/ext/sqlite-jdbc-3.6.20.jar</binary-origin> + </class-path-extension> + <class-path-extension> + <runtime-relative-path>ext/Tsk_DataModel.jar</runtime-relative-path> + <binary-origin>release/modules/ext/Tsk_DataModel.jar</binary-origin> + </class-path-extension> + </data> + </configuration> +</project> diff --git a/DataModel/nbproject/suite.properties b/DataModel/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/DataModel/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java new file mode 100644 index 0000000000..9d50383d15 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java @@ -0,0 +1,95 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.datamodel; + +import org.openide.nodes.Children.Keys; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.ContentVisitor; +import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.datamodel.File; +import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.Volume; +import org.sleuthkit.datamodel.VolumeSystem; + +/** + * Abstract subclass for ContentChildren and RootContentChildren implementations + * that handles creating Nodes from Content objects. +*/ +abstract class AbstractContentChildren extends Keys<Content> { + private static CreateNodeVisitor createNode = new CreateNodeVisitor(); + + /** + * Uses lazy Content.Keys + */ + AbstractContentChildren() { + super(true); // use lazy behavior + } + + @Override + protected Node[] createNodes(Content key) { + return new Node[]{key.accept(createNode)}; + } + + @Override + abstract protected void addNotify(); + + @Override + abstract protected void removeNotify(); + + + /** + * Creates appropriate Node for each sub-class of Content + */ + static class CreateNodeVisitor implements ContentVisitor<AbstractContentNode> { + + @Override + public AbstractContentNode visit(Directory drctr) { + return new DirectoryNode(drctr); + } + + @Override + public AbstractContentNode visit(File file) { + return new FileNode(file); + } + + @Override + public AbstractContentNode visit(FileSystem fs) { + throw new UnsupportedOperationException("No Node defined for FileSystems."); + } + + @Override + public AbstractContentNode visit(Image image) { + return new ImageNode(image); + } + + @Override + public AbstractContentNode visit(Volume volume) { + return new VolumeNode(volume); + } + + @Override + public AbstractContentNode visit(VolumeSystem vs) { + throw new UnsupportedOperationException("No Node defined for VolumeSystems."); + } + } + +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java new file mode 100644 index 0000000000..ac8deb19ea --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentNode.java @@ -0,0 +1,243 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.datamodel; + +import java.sql.SQLException; +import java.util.LinkedList; +import java.util.List; +import org.openide.nodes.AbstractNode; +import org.openide.util.lookup.Lookups; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.ContentVisitor; +import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.datamodel.File; +import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.Volume; +import org.sleuthkit.datamodel.VolumeSystem; + +/** + * Interface class that all Data nodes inherit from. + * Provides basic information such as ID, parent ID, etc. + * @param <T> type of wrapped Content + */ +abstract class AbstractContentNode<T extends Content> extends AbstractNode implements ContentNode { + /** + * Underlying Sleuth Kit Content object + */ + T content; + + /** + * Handles aspects that depend on the Content object + * @param content Underlying Content instances + */ + AbstractContentNode(T content) { + super(new ContentChildren(content), Lookups.singleton(content)); + this.content = content; + super.setName(content.accept(systemName)); + } + + @Override + public void setName(String name) { + throw new UnsupportedOperationException("Can't change the system name."); + } + + @Override + public String getName() { + return super.getName(); + } + + /** + * Gets the ID of this node. + * + * @return ID the ID of this node + */ + public long getID() { + return content.getId(); + } + + /** + * Gets the row values for this node. The main purpose of this method is to + * get the 'x' number of the row values for this node to set the width of each + * column of the DataResult Table. Row values is the children and it's properties. + * + * @param rows the number of rows we want to show + * @return rowValues the row values for this node. + * @throws SQLException + */ + abstract public Object[][] getRowValues(int rows) throws SQLException; + + /** + * Reads the content of this node. + * + * @param offset the starting offset + * @param len the length + * @return the bytes + * @throws TskException + */ + public byte[] read(long offset, long len) throws TskException { + return content.read(offset, len); + } + + /** + * Returns the location of the file ID / Metadata address on the columns on + * the directory table. + * + * @return + */ + abstract public int getFileIDColumn(); + + /** + * Returns the content of this node. + * + * @return content the content of this node (can be image, volume, directory, or file) + */ + public Content getContent() { + return content; + } + + private static final ShortNameVisitor shortName = new ShortNameVisitor(); + + private static final GetPathVisitor getDisplayPath = new GetPathVisitor(shortName); + + /** + * Returns full path to this node. + * + * @return the path of this node + */ + public String[] getDisplayPath() { + return content.accept(getDisplayPath).toArray(new String[]{}); + } + + private static final SystemNameVisitor systemName = new SystemNameVisitor(); + + private static final GetPathVisitor getSystemPath = new GetPathVisitor(systemName); + + /** + * Returns full path to this node. + * + * @return the path of this node + */ + public String[] getSystemPath() { + return content.accept(getSystemPath).toArray(new String[]{}); + } + + private static class SystemNameVisitor extends ContentVisitor.Default<String> { + SystemNameVisitor() {} + + @Override + protected String defaultVisit(Content cntnt) { + return cntnt.accept(shortName) + ":" + Long.toString(cntnt.getId()); + } + } + + private static class ShortNameVisitor extends ContentVisitor.Default<String> { + ShortNameVisitor() {} + + @Override + protected String defaultVisit(Content cntnt) { + throw new UnsupportedOperationException("Can't get short name for given content type:" + cntnt.getClass()); + } + + @Override + public String visit(Directory dir) { + return DirectoryNode.nameForDirectory(dir); + } + + @Override + public String visit(File f) { + return FileNode.nameForFile(f); + } + + @Override + public String visit(Volume v) { + return VolumeNode.nameForVolume(v); + } + + @Override + public String visit(Image i) { + return ImageNode.nameForImage(i); + } + } + + private static class GetPathVisitor implements ContentVisitor<List<String>> { + ContentVisitor<String> toString; + + GetPathVisitor(ContentVisitor<String> toString) { + this.toString = toString; + } + + @Override + public List<String> visit(Directory dir) { + List<String> path; + + if (dir.isRoot()) { + path = dir.getFileSystem().accept(this); + } else { + try { + path = dir.getParentDirectory().accept(this); + path.add(toString.visit(dir)); + } catch (TskException ex) { + throw new RuntimeException("Couldn't get directory path.", ex); + } + } + + return path; + } + + @Override + public List<String> visit(File file) { + try { + List<String> path = file.getParentDirectory().accept(this); + path.add(toString.visit(file)); + return path; + } catch (TskException ex) { + throw new RuntimeException("Couldn't get file path.", ex); + } + } + + @Override + public List<String> visit(FileSystem fs) { + return fs.getParent().accept(this); + } + + @Override + public List<String> visit(Image image) { + List<String> path = new LinkedList<String>(); + path.add(toString.visit(image)); + return path; + } + + @Override + public List<String> visit(Volume volume) { + List<String> path = volume.getParent().accept(this); + path.add(toString.visit(volume)); + return path; + } + + @Override + public List<String> visit(VolumeSystem vs) { + return vs.getParent().accept(this); + } + + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java new file mode 100644 index 0000000000..4ab314bb2b --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java @@ -0,0 +1,73 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import org.openide.nodes.Sheet; +import org.sleuthkit.datamodel.FsContent; + +/** + * Abstract class that implements the commonality between File and Directory + * Nodes (same properties). + */ +abstract class AbstractFsContentNode<T extends FsContent> extends AbstractContentNode<T> { + + /** + * Name of the property that holds the name. + */ + public static final String PROPERTY_NAME = "Name"; + /** + * Name of the property that holds the path. + */ + public static final String PROPERTY_LOCATION = "Location"; + + AbstractFsContentNode(T fsContent) { + super(fsContent); + } + + @Override + protected Sheet createSheet() { + Sheet s = super.createSheet(); + Sheet.Set ss = s.get(Sheet.PROPERTIES); + if (ss == null) { + ss = Sheet.createPropertiesSet(); + s.put(ss); + } + + // Note: this order matters for the search result, changed it if the order of property headers on the "KeywordSearchNode"changed + ss.put(new NodeProperty(PROPERTY_NAME, "Name", "no description", content.getName())); + ss.put(new NodeProperty(PROPERTY_LOCATION, "Location", "no description", DataConversion.getformattedPath(this.getDisplayPath(), 0))); + ss.put(new NodeProperty("Modified Time", "Modified Time", "no description", content.getMtimeAsDate())); + ss.put(new NodeProperty("Changed Time", "Changed Time", "no description", content.getCtimeAsDate())); + ss.put(new NodeProperty("Access Time", "Access Time", "no description", content.getAtimeAsDate())); + ss.put(new NodeProperty("Created Time", "Created Time", "no description", content.getCrtimeAsDate())); + ss.put(new NodeProperty("Size", "Size", "no description", content.getSize())); + ss.put(new NodeProperty("Flags (Directory)", "Flags (Directory)", "no description", content.getDirFlagsAsString())); + ss.put(new NodeProperty("Flags (Meta)", "Flags (Meta)", "no description", content.getMetaFlagsAsString())); + ss.put(new NodeProperty("Mode ", "Mode", "no description", content.getModeAsString())); + ss.put(new NodeProperty("User ID", "User ID", "no description", content.getUid())); + ss.put(new NodeProperty("Group ID", "Group ID", "no description", content.getGid())); + ss.put(new NodeProperty("Metadata Address", "Metadata Addr", "no description", content.getMeta_addr())); + ss.put(new NodeProperty("Attribute Address", "Attribute Addr", "no description", Long.toString(content.getAttr_type()) + "-" + Long.toString(content.getAttr_id()))); + ss.put(new NodeProperty("Type (Directory)", "Type (Directory)", "no description", content.getDirTypeAsString())); + ss.put(new NodeProperty("Type (Meta)", "Type (Meta)", "no description", content.getMetaTypeAsString())); + ss.put(new NodeProperty("Known", "Known", "no description", content.getKnown().getName())); + + return s; + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/Bundle.properties b/DataModel/src/org/sleuthkit/autopsy/datamodel/Bundle.properties new file mode 100644 index 0000000000..cd313e7b75 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/Bundle.properties @@ -0,0 +1 @@ +OpenIDE-Module-Name=DataModel diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentChildren.java new file mode 100644 index 0000000000..710a02efdf --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentChildren.java @@ -0,0 +1,100 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.ContentVisitor; +import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.VolumeSystem; + +/** + * Class for Children of all ContentNodes. Handles creating child ContentNodes. + */ +class ContentChildren extends AbstractContentChildren { + + private Content parent; + + ContentChildren(Content parent) { + this.parent = parent; + } + private static CreateKeysVisitor createKeys = new CreateKeysVisitor(); + + @Override + protected void addNotify() { + setKeys(createKeys.getChildrenKeys(parent)); + } + + @Override + protected void removeNotify() { + setKeys(Collections.EMPTY_SET); + } + + static private class CreateKeysVisitor extends ContentVisitor.Default<List<? extends Content>> { + + List<Content> getChildrenKeys(Content parent) { + List<Content> keys = new ArrayList<Content>(); + + List<Content> children; + + try { + children = parent.getChildren(); + } catch (TskException ex) { + Log.get(CreateKeysVisitor.class).log(Level.WARNING, "Error getting Content children.", ex); + children = Collections.EMPTY_LIST; + } + + for (Content c : children) { + keys.addAll(c.accept(this)); + } + + return keys; + } + + @Override + protected List<Content> defaultVisit(org.sleuthkit.datamodel.Content c) { + return Collections.singletonList(c); + } + + @Override + public List<Content> visit(VolumeSystem vs) { + return getChildrenKeys(vs); + } + + @Override + public List<Content> visit(FileSystem fs) { + return getChildrenKeys(fs); + } + + @Override + public List<? extends Content> visit(Directory dir) { + if (dir.isRoot()) { + return getChildrenKeys(dir); + } else { + return Collections.singletonList(dir); + } + } + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNode.java new file mode 100644 index 0000000000..885bdc51ea --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNode.java @@ -0,0 +1,105 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.sql.SQLException; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; + +/** + * Interface class that all Data nodes inherit from. + * Provides basic information such as ID, parent ID, etc. + */ +public interface ContentNode { + + /** + * Returns the programmatic name for this node. This is NOT the name to + * display to users, or the plain name of the Content object - use + * Node.getDisplayName() for that. + * + * @return name the programmatic name for this node + */ + public String getName(); + + /** + * Gets the ID of this node. + * + * @return ID the ID of this node + */ + public long getID(); + + /** + * Gets the row values for this node. The main purpose of this method is to + * get the 'x' number of the row values for this node to set the width of each + * column of the DataResult Table. Row values is the children and it's properties. + * + * @param rows the number of rows we want to show + * @return rowValues the row values for this node. + * @throws SQLException + */ + public Object[][] getRowValues(int rows) throws SQLException; + + /** + * Reads the content of this node. + * + * @param offset the starting offset + * @param len the length + * @return the bytes + * @throws TskException + */ + public byte[] read(long offset, long len) throws TskException; + + /** + * Returns the location of the file ID / Metadata address on the columns on + * the directory table. + * + * @return + */ + public int getFileIDColumn(); + + /** + * Returns the content of this node. + * + * @return content the content of this node (can be image, volume, directory, or file) + */ + public Content getContent(); + + /** + * Returns full path to this node. + * + * @return the path of this node + */ + public String[] getDisplayPath(); + + /** + * Returns full path to this node. + * + * @return the path of this node + */ + public String[] getSystemPath(); + + /** + * Visitor pattern support. + * + * @param <T> visitor return type + * @param v visitor + * @return visitor return value + */ + public <T> T accept(ContentNodeVisitor<T> v); +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java new file mode 100644 index 0000000000..e31782487f --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java @@ -0,0 +1,69 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +/** + * Interface for visitor pattern on ContentNodes + * @param <T> visit method return type + */ +public interface ContentNodeVisitor<T> { + + T visit(DirectoryNode dn); + + T visit(FileNode fn); + + T visit(ImageNode in); + + T visit(VolumeNode vn); + + /** + * Visitor with an implementable default behavior for all types. Override + * specific visit types to not use the default behavior. + * @param <T> + */ + static abstract public class Default<T> implements ContentNodeVisitor<T> { + + /** + * Default visit for all types + * @param c + * @return + */ + protected abstract T defaultVisit(ContentNode c); + + @Override + public T visit(DirectoryNode dn) { + return defaultVisit(dn); + } + + @Override + public T visit(FileNode fn) { + return defaultVisit(fn); + } + + @Override + public T visit(ImageNode in) { + return defaultVisit(in); + } + + @Override + public T visit(VolumeNode vn) { + return defaultVisit(vn); + } + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/DataConversion.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/DataConversion.java new file mode 100644 index 0000000000..e4a54cf5a3 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/DataConversion.java @@ -0,0 +1,189 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.awt.Font; +import java.util.Arrays; + +/** + * Helper methods for converting data. + */ +public class DataConversion { + + public static String byteArrayToHex(byte[] array, long length, long offset, Font font) { + if (array == null) { + return ""; + } else { + String base = new String(array); + + StringBuilder buff = new StringBuilder(); + int count = 0; + int extra = base.length() % 16; + String sub = ""; + char subchar; + + //commented out code can be used as a base for generating hex length based on + //offset/length/file size + //String hex = Long.toHexString(length + offset); + //double hexMax = Math.pow(16, hex.length()); + double hexMax = Math.pow(16, 6); + while (count < base.length() - extra) { + buff.append("0x" + Long.toHexString((long) (offset + count + hexMax)).substring(1) + ": "); + for (int i = 0; i < 16; i++) { + buff.append(Integer.toHexString((((int) base.charAt(count + i)) & 0xff) + 256).substring(1).toUpperCase() + " "); + if (i == 7) { + buff.append(" "); + } + } + sub = base.substring(count, count + 16); + for (int i = 0; i < 16; i++) { + subchar = sub.charAt(i); + if (!font.canDisplay(subchar)) { + sub.replace(subchar, '.'); + } + + // replace all unprintable characters with "." + int dec = (int) subchar; + if (dec < 32 || dec > 126) { + sub = sub.replace(subchar, '.'); + } + } + buff.append(" " + sub + "\n"); + count += 16; + + } + if (base.length() % 16 != 0) { + buff.append("0x" + Long.toHexString((long) (offset + count + hexMax)).substring(1) + ": "); + } + for (int i = 0; i < 16; i++) { + if (i < extra) { + buff.append(Integer.toHexString((((int) base.charAt(count + i)) & 0xff) + 256).substring(1) + " "); + } else { + buff.append(" "); + } + if (i == 7) { + buff.append(" "); + } + } + sub = base.substring(count, count + extra); + for (int i = 0; i < extra; i++) { + subchar = sub.charAt(i); + if (!font.canDisplay(subchar)) { + sub.replace(subchar, '.'); + } + } + buff.append(" " + sub); + return buff.toString(); + } + } + + protected static String charArrayToByte(char[] array) { + if (array == null) { + return ""; + } else { + String[] binary = new String[array.length]; + + for (int i = 0; i < array.length; i++) { + binary[i] = Integer.toBinaryString(array[i]); + } + return Arrays.toString(binary); + } + } + + /* + * Gets only the printable string from the given characters + * + * The definition of printable are: + * -- All of the letters, numbers, and punctuation. + * -- space and tab + * -- It does NOT include newlines or control chars. + * -- When looking for ASCII strings, they evaluate each byte and when they find four or more printable characters they get printed out with a newline in between each string. + * -- When looking for Unicode strings, they evaluate each two byte sequence and look for four or more printable characters… + * + * @param args the bytes that the string read from + * @param parameter the "length" parameter for the string + * + * @author jantonius + */ + public static String getString(byte[] args, int parameter) { + + /* + // these encoding might be needed for later + // Note: if not used, can be deleted + CharsetEncoder asciiEncoder = + Charset.forName("US-ASCII").newEncoder(); // or "ISO-8859-1" for ISO Latin 1 + + CharsetEncoder utf8Encoder = + Charset.forName("UTF-8").newEncoder(); + */ + + String result = ""; + String temp = ""; + int counter = 0; + //char[] converted = new java.lang.System.Text.Encoding.ASCII.GetString(args).ToCharArray(); + + char NL = (char) 10; // ASCII char for new line + + for (int i = 0; i < args.length; i++) { + char tempChar = (char) args[i]; + int dec = (int) tempChar; + + // the printable ASCII chars are dec 32-126 + // and we want to include TAB as well (dec 9) + if (!((dec < 32 || dec > 126) && dec != 9)) { + temp = temp + Character.toString(tempChar); + counter = counter + 1; + } else { + if (counter >= parameter) { + // add to the result and also add the new line at the end + result = result + temp + Character.toString(NL); + + // reset the temp and counter + temp = ""; + counter = 0; + } + // reset the temp and counter + temp = ""; + counter = 0; + } + } + + result = result + temp; + + return result; + } + + /** + * Converts the given paths into the formatted path. This mainly used for + * the paths for the "new directory table" and "new output view". + * + * @param paths the given paths + * @param index the starting index of the given paths + * @return path the formatted path + * + * @author jantonius + */ + public static String getformattedPath(String[] paths, int index) { + String result = ""; + for (int i = index; i < paths.length; i++) { + result = result + "\\" + paths[i]; + } + return result; + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java new file mode 100644 index 0000000000..0d8ac100f0 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java @@ -0,0 +1,112 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import javax.swing.Action; +import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.datamodel.TskData; + +/** + * This class is used to represent the "Node" for the directory. + * Its children are more directories. + */ +public class DirectoryNode extends AbstractFsContentNode<Directory> { + + /** + * Helper so that the display name and the name used in building the path + * are determined the same way. + * @param d Directory to get the name of + * @return short name for the directory + */ + static String nameForDirectory(Directory d) { + return d.getName(); + } + + /** + * + * @param dir Underlying Content instance + */ + public DirectoryNode(Directory dir) { + super(dir); + + // set name, display name, and icon + String dirName = nameForDirectory(dir); + this.setDisplayName(dirName); + if (Directory.dirFlagToValue(dir.getDir_flags()).equals(TskData.TSK_FS_NAME_FLAG_ENUM.TSK_FS_NAME_FLAG_UNALLOC.toString())) { + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/folder-icon-deleted.png"); + } else { + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/Folder-icon.png"); + } + } + + /** + * Right click action for this node + * + * @param popup + * @return + */ + @Override + public Action[] getActions(boolean popup) { + return new Action[]{}; + } + + @Override + public Object[][] getRowValues(int rows) { + + // how many rows are we returning + int maxRows = rows; + if (this.getChildren().getNodesCount() < maxRows) { + maxRows = this.getChildren().getNodesCount(); + } + Object[][] objs = new Object[maxRows][]; + + for (int i = 0; i < maxRows; i++) { + PropertySet[] props = this.getChildren().getNodeAt(i).getPropertySets(); + Property[] property = props[0].getProperties(); + objs[i] = new Object[property.length - 1]; // - 1 because we don't want to show the location property + + // name property + try { + objs[i][0] = property[0].getValue(); + } catch (Exception ex) { + objs[i][0] = "n/a"; + } + + // the rest of the properties(not including the location property) + for (int j = 1; j < property.length - 1; j++) { + try { + objs[i][j] = property[j + 1].getValue(); + } catch (Exception ex) { + objs[i][j] = "n/a"; + } + } + } + return objs; + } + + @Override + public int getFileIDColumn() { + return 1; + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + return v.visit(this); + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java new file mode 100644 index 0000000000..0105c72f47 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java @@ -0,0 +1,107 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.sql.SQLException; +import java.util.Arrays; +import javax.swing.Action; +import org.sleuthkit.datamodel.File; +import org.sleuthkit.datamodel.FsContent; +import org.sleuthkit.datamodel.TskData; + +/** + * This class is used to represent the "Node" for the file. + * It has no children. + * + */ +public class FileNode extends AbstractFsContentNode<File> { + + /** + * Helper so that the display name and the name used in building the path + * are determined the same way. + * @param f File to get the name of + * @return short name for the File + */ + static String nameForFile(File f) { + return f.getName(); + } + + /** + * + * @param file underlying Content + */ + public FileNode(File file) { + super(file); + + // set name, display name, and icon + String fileName = nameForFile(file); + this.setDisplayName(fileName); + if (File.dirFlagToValue(file.getDir_flags()).equals(TskData.TSK_FS_NAME_FLAG_ENUM.TSK_FS_NAME_FLAG_UNALLOC.toString())) { + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-icon-deleted.png"); + } else { + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-icon.png"); + } + } + + /** + * Right click action for this node + * + * @param popup + * @return + */ + @Override + public Action[] getActions(boolean popup) { + return new Action[]{}; + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + FsContent con = content; + Object[][] objs = new Object[1][16]; + Arrays.fill(objs, 0, 1, new Object[]{ + con.getName(), + con.getMtimeAsDate(), + con.getCtimeAsDate(), + con.getAtimeAsDate(), + con.getCrtimeAsDate(), + con.getSize(), + con.getDirFlagsAsString(), + con.getMetaFlagsAsString(), + con.getModeAsString(), + con.getUid(), + con.getGid(), + con.getMeta_addr(), + con.getAttr_type() + "-" + con.getAttr_id(), + con.getDirTypeAsString(), + con.getMetaTypeAsString(), + con.getKnown().getName() + }); + return objs; + } + + @Override + public int getFileIDColumn() { + return 1; // change this later when it's defined + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + return v.visit(this); + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ImageNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ImageNode.java new file mode 100644 index 0000000000..2a2f34362b --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ImageNode.java @@ -0,0 +1,130 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.sql.SQLException; +import javax.swing.Action; +import org.openide.nodes.Children; +import org.openide.nodes.Sheet; +import org.sleuthkit.datamodel.Image; + +/** + * This class is used to represent the "Node" for the image. + * The children of this node are volumes. + */ +public class ImageNode extends AbstractContentNode<Image> { + + /** + * Helper so that the display name and the name used in building the path + * are determined the same way. + * @param i Image to get the name of + * @return short name for the Image + */ + static String nameForImage(Image i) { + return i.getName(); + } + + /** + * @param img + */ + public ImageNode(Image img) { + super(img); + + // set name, display name, and icon + String imgName = nameForImage(img); + this.setDisplayName(imgName); + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/hard-drive-icon.jpg"); + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + // how many rows are we returning + int maxRows = rows; + if (this.getChildren().getNodesCount() < maxRows) { + maxRows = this.getChildren().getNodesCount(); + } + Object[][] objs = new Object[maxRows][]; + + for (int i = 0; i < maxRows; i++) { + PropertySet[] props = this.getChildren().getNodeAt(i).getPropertySets(); + Property[] property = props[0].getProperties(); + objs[i] = new Object[property.length]; + + + // the rest of the properties(not including the location property) + for (int j = 0; j < property.length; j++) { + try { + objs[i][j] = property[j].getValue(); + } catch (Exception ex) { + objs[i][j] = "n/a"; + } + } + } + return objs; + } + + @Override + public int getFileIDColumn() { + return 0; + } + + @Override + public Cookie getCookie(Class clazz) { + Children ch = getChildren(); + + if (clazz.isInstance(ch)) { + return (Cookie) ch; + } + + return super.getCookie(clazz); + } + + /** + * Right click action for this node + * + * @param context + * @return + */ + @Override + public Action[] getActions(boolean context) { + return new Action[]{ // SystemAction.get( NewAction.class ), + // SystemAction.get( PasteAction.class ) + }; + } + + @Override + protected Sheet createSheet() { + Sheet s = super.createSheet(); + Sheet.Set ss = s.get(Sheet.PROPERTIES); + if (ss == null) { + ss = Sheet.createPropertiesSet(); + s.put(ss); + } + + ss.put(new NodeProperty("Name", "Name", "no description", "")); + // @@@ add more properties here... + + return s; + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + return v.visit(this); + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/Installer.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/Installer.java new file mode 100644 index 0000000000..ed06522396 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/Installer.java @@ -0,0 +1,81 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.awt.Component; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JOptionPane; +import org.openide.LifecycleManager; +import org.openide.modules.ModuleInstall; +import org.sleuthkit.datamodel.SleuthkitJNI; + +/** + * Installer checks that the JNI library is working when the module is loaded. + */ +public class Installer extends ModuleInstall { + + @Override + public void validate() throws IllegalStateException { + /* + * The NetBeans API specifies that a module should throw an IllegalStateException + * if it can't be initalized, but NetBeans doesn't handle that behaviour + * well (it just disables the module, and all dependant modules, on the + * current and all subsequent application launches). Hence, we deal with + * it manually. + * + */ + + + // Check that the the Sleuth Kit JNI is working by getting the Sleuth Kit version number + Logger logger = Logger.getLogger(Installer.class.getName()); + try { + String skVersion = SleuthkitJNI.getVersion(); + + if (skVersion == null) { + throw new Exception("Sleuth Kit JNI test call returned without error, but version string was null!"); + } else if (skVersion.length() == 0) { + throw new Exception("Sleuth Kit JNI test call returned without error, but version string was \"\"!"); + } else { + logger.log(Level.CONFIG, "Sleuth Kit Version: {0}", skVersion); + } + + } catch (Exception e) { + logger.log(Level.SEVERE, "Error calling Sleuth Kit library (test call failed)", e); + + + // Normal error box log handler won't be loaded yet, so show error here. + final Component parentComponent = null; // Use default window frame. + final String message = "Problem with Sleuth Kit JNI. Test call failed!\n\nDetails: " + e.toString(); + final String title = "Fatal Error!"; + final int messageType = JOptionPane.ERROR_MESSAGE; + + JOptionPane.showMessageDialog( + parentComponent, + message, + title, + messageType); + + + // exit after user exits the error dialog box + LifecycleManager.getDefault().exit(); + } + + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/NodeProperty.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/NodeProperty.java new file mode 100644 index 0000000000..13c91ab436 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/NodeProperty.java @@ -0,0 +1,43 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.lang.reflect.InvocationTargetException; +import org.openide.nodes.PropertySupport; + +/** + * This class is used to represent the properties for each node. + * + * @author jantonius + */ +class NodeProperty extends PropertySupport.ReadOnly { + + private Object value; + + NodeProperty(String name, String displayName, String desc, Object value) { + super(name, value.getClass(), displayName, desc); + setValue("suppressCustomEditor", Boolean.TRUE); // remove the "..." (editing) button + this.value = value; + } + + @Override + public Object getValue() throws IllegalAccessException, InvocationTargetException { + return this.value; + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RootContentChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RootContentChildren.java new file mode 100644 index 0000000000..27e52d9e92 --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RootContentChildren.java @@ -0,0 +1,50 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.datamodel; + +import java.util.Collection; +import java.util.Collections; +import org.sleuthkit.datamodel.Content; + +/** + * Children implementation for the root node of a ContentNode tree. Accepts a + * list of root Content objects for the tree. + */ +public class RootContentChildren extends AbstractContentChildren { + private Collection<? extends Content> contentKeys; + + /** + * @param contentKeys root Content objects for the Node tree + */ + public RootContentChildren(Collection<? extends Content> contentKeys) { + super(); + this.contentKeys = contentKeys; + } + + @Override + protected void addNotify() { + setKeys(contentKeys); + } + + @Override + protected void removeNotify() { + setKeys(Collections.EMPTY_SET); + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java new file mode 100644 index 0000000000..bf0f06857a --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/VolumeNode.java @@ -0,0 +1,134 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.sql.SQLException; +import javax.swing.Action; +import org.openide.nodes.Sheet; +import org.sleuthkit.datamodel.Volume; + +/** + * This class is used to represent the "Node" for the volume. + * Its child is the root directory of a file system + */ +public class VolumeNode extends AbstractContentNode<Volume> { + + /** + * Helper so that the display name and the name used in building the path + * are determined the same way. + * @param vol Volume to get the name of + * @return short name for the Volume + */ + static String nameForVolume(Volume vol) { + return "vol" + Long.toString(vol.getAddr()); + } + + /** + * + * @param vol underlying Content instance + */ + public VolumeNode(Volume vol) { + super(vol); + + // set name, display name, and icon + String volName = nameForVolume(vol); + + long end = vol.getStart() + vol.getSize(); + String tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + "-" + end + ")"; + this.setDisplayName(tempVolName); + + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/vol-icon.png"); + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + + // how many rows are we returning + int maxRows = rows; + if (this.getChildren().getNodesCount() < maxRows) { + maxRows = this.getChildren().getNodesCount(); + } + Object[][] objs = new Object[maxRows][]; + + for (int i = 0; i < maxRows; i++) { + PropertySet[] props = this.getChildren().getNodeAt(i).getPropertySets(); + Property[] property = props[0].getProperties(); + objs[i] = new Object[property.length - 1]; // - 1 because we don't want to show the location property + + // name property + try { + objs[i][0] = property[0].getValue(); + } catch (Exception ex) { + objs[i][0] = "n/a"; + } + + // the rest of the properties(not including the location property) + for (int j = 1; j < property.length - 1; j++) { + try { + objs[i][j] = property[j + 1].getValue(); + } catch (Exception ex) { + objs[i][j] = "n/a"; + } + } + } + return objs; + } + + @Override + public int getFileIDColumn() { + return 1; + } + + /** + * Right click action for volume node + * + * @param popup + * @return + */ + @Override + public Action[] getActions(boolean popup) { + return new Action[]{ //new ShowDetailAction("Volume Details", this.getName(), this), + //new ShowDetailAction("File System Details", this.getName(), this) + }; + } + + @Override + protected Sheet createSheet() { + Sheet s = super.createSheet(); + Sheet.Set ss = s.get(Sheet.PROPERTIES); + if (ss == null) { + ss = Sheet.createPropertiesSet(); + s.put(ss); + } + + ss.put(new NodeProperty("Name", "Name", "no description", this.getDisplayName())); + ss.put(new NodeProperty("ID", "ID", "no description", content.getAddr())); + ss.put(new NodeProperty("Starting Sector", "Starting Sector", "no description", content.getStart())); + ss.put(new NodeProperty("Length in Sectors", "Length in Sectors", "no description", content.getLength())); + ss.put(new NodeProperty("Description", "Description", "no description", content.getDescription())); + ss.put(new NodeProperty("Flags", "Flags", "no description", content.getFlagsAsString())); + + return s; + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + return v.visit(this); + } +} diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/package.html b/DataModel/src/org/sleuthkit/autopsy/datamodel/package.html new file mode 100644 index 0000000000..ce63c11c6d --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/package.html @@ -0,0 +1,12 @@ +<body> +<h2>Overview</h2> +<p>Autopsy 3 uses NetBeans Nodes to pass data around. The Sleuth Kit comes with Java datamodel classes in org.sleuthkit.datamodel and it contains classes for files, directories, file systems, volumes, and other data types that can be found in a disk image. These classes are not NetBeans specific. </p> + +<p>This package, org.sleuthkit.autopsy.datamodel, contains classes that are NetBeans-specific and map to classes in the Sleuth Kit datamodel. For example org.sleuthkit.autopsy.datamodel.DirectoryNode is the Node class for the org.sleuthkit.datamodel.Directory class.</p> + +<p>ContentNode is the interface class for the data type-specific nodes, just like org.sleuthkit.datamodel.Content is the interface class for the TSK datamodel. ContentNode provides the standard methods that all nodes must provide. AbstractContentNode implements some of those methods. </p> + +<h2>Creating Nodes</h2> +<p>You should only have to create the root node in a hierarchy. To do so, use the RootContentChildren class and pass in the list of TSK datamodel objects that you need to encapsulate. After that, the children will automatically be created as nodes when they are requested. ContentChildren deals with this.</p> + +</body> \ No newline at end of file diff --git a/DirectoryTree/build.xml b/DirectoryTree/build.xml new file mode 100644 index 0000000000..72c3163bdf --- /dev/null +++ b/DirectoryTree/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.directorytree" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.directorytree.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/DirectoryTree_example.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/DirectoryTree_example.png new file mode 100644 index 0000000000000000000000000000000000000000..57fa6e100f89af28e72c94dd219665e16e97857d GIT binary patch literal 17946 zcmeAS@N?(olHy`uVBq!ia0y~yV6<XjV7$q}#K6EX^Fx9<0|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{QfI}E~%$MaXDFfh2T_jGX#sfc?!x3WOgectn* z>CgIS-o0V}Y<=(Dzsc%mNy*A)X}g!()>f1$sU0)6e*3b_fBS9bUg@0Xi5%M(9?VVN z&3OAp?uNT^()aUj=O#CwP1Iu+Vv=o8VR8E2$@56SNukiwX?tsn+3HPwYfi1IiadTg z{Oi5#iypmP87H^@Pg>nQ{nc?#*QeEX@p3sdwrCh+3rLGJFmVPl>`+^>I6+NBLWX6X z1Z#kTAs55-BPF6dtxQtu*8lmv`^IMH#{a+X$i0bN*6`6b^^sMxuC|DRvZ?m1Mz;*E z34Eo;zDjLt(RQes@yP1SS&?r#0S#p<jMs&4RE=SLFpITglP|+MPW4NdYaYyU-Vt|j zS^;ZAHs8Zr%k!koYxh-s&H5!5y-8%lL$BRNr`-yaW);7z`v2+a>Hja=?f>56|JS%@ z()WXBzRlvfywKC?$3=H})t6@`R{d$+KQlG2{_~-ac3)5YIa~Woy0LI?<-V|vAg7ku zSw2Tn-7@AKS(LLwDmJrk>bL9rj+Z=b+WSgW^Xr0db~jA5f(|V@l%PE6<kzp>_tSfV z@7KM*y53n_`}eBb*PrjwSi0PA?z?yI^78FH?|oid@p0-`70JrC@^cOD-JVqW@Yd@5 zFG8C>=D*+g{QV5m?0adS8!otSdoug^*;%E>KOfIXJT?2owin(#XG~7Aew>_mYpPj{ z=FHyp{}QgPk>7JguFhoj4A+L$c_;7f>EPkMZ*pH%Agun|=ii)5S&p7N=lAK>t!r*^ zl`$s|PMkP#{=I7Z#HoAu`1wDd+*7dk&9=~$JL(SB<j5r2|7v1bnLF)>$^1_*WzUC4 zzAiYGBzJkzYRl(mmCXXQuUK8}4O{%L{<!S5=5@U%pYaFH-yJ2B`H<<=zBA3QCc0Lx zVn27=(`Kzx-!{p2;ZI}kinvHl|MB;_)ZEP*j-Cs=u}pJ+V4rnC-to{ATJFKB)oF*c z7~j8MzdtW8Q}NB!YgZ>;e<iFgQ@C`>w{Kr3UY|El?$lcT_g?HqwhuS*WKHIm6_g9N z-Yzp!YrR^sRhrZdwlhz7&t^SZn`Uy#xG&htGb(Fd)PzEv*$YeZqhA$=bFbSKzU9%X z%_(zLq&Xz>uf)7cnfh_vGe_Q1(IQcA-oRt4cl#ciTi}~08XfX%j`6`wZ=al8_4s)A z=~E|uH!ofKWb2a)itaHlWo86KUBBTGsp?+ypepEYkFeaY^_xU(|GtgfoK~M8XVCvb zer3JxY}LK<zBb=9IlFzn-l9~C)I_@g?m*+0M?Y@6&@@G8>y}&5$L_>bW<RKU_{==T zeAlFZtKamluS>tS=6Cs}`rGqW57=&*Zn@)oosy~LA~n6|eyW~sUmq+w-@|mXXp7FV z<zAWhD_8zK<m<ihOZ?gu@ApRKX?mIFJXd1+zPWeT*=uj!g+(5lbkA+EfMkA_)w#Q$ z*B5i~%iP#hYwcL_``z6qrT70Seab3pymv4C+CD!G-Sw-K*6-%#I`Mke^!r;>KhNUX z{#x4hq2a$={i;{do74W@W`D-`x#Qo&U*DtsMGZ4!?$>?D&k8!O^UP6IbZv;Y|LMoM z3){Es(#>@3Il0P&ZCz~h{R?x;mVV3+Z|-`{_iJU><y~dZ7Sy?%txlP1lv}&ZQM*fQ zkzCA|m2vy3HvFCWUTZ?}e5s|8U8*PTYCD$HPkj=UwOwTCwXMzvr>+dYptXA?pX%pQ z*V-p8$9L|o|MU6$_F7MYyIV@7EAOsZbXwY(PsrX!BX(`k@1xh&mjAo^f3xc6LtD@0 z-d_Lc7yGm1#~okKZl8C{U+Ck>lLzfre9=r@A+N33YwjbaJoA_0*#$C-RkdeFPN<us zd3@Tnt*(*38XI5#JjnSx_GsxlzOR>M`B#Vd%rWPGH+MDDnx~=tm+Sepr`Y{jIjwtI zg37gm&?3XgGoQ{**%j(__0*q;m2=In8u<M7IH2VoeAmU}^G9LXbk45-KhE3V{c!V` zecp`^2j%S*-~UWo7x!Dr(=G0NjC|$0r{<iipIn`GhWmP0>Eh?>zU<v5YUg=j=lj~_ z%5U7?-(T+UzVB<w!levf<v%};JodasY^y`+?)P><b7lp29+{S*a<OmK|7^}TnU%(y zes(mz-r2~x>GHZI@3-##cXfZ-v!3GZtB+r8epSudvp?>7-m?3CJA*Dn#jY1E@^B2l zyYKfa#jQ_xk3>uTpB0%g)9>giQOTRSVw1jjai*0vg{|EAX4x(8w51-;e_wl-eR`U{ z`jnu&lfM(DRXn`4DDN02|6lRwCJ}=ITWbTyvc=jj_ZQy!{?F-eT*qY3jhEbwk8xjD zt6i*ab8LUbWD!=LnDbxyFM|_?%)KdVm!A9i(7#0aaYCp~?uSEL1)~p%J}B&cuF(?O z#8vU|R)g+CE{Ppw_au(bW96!N7}XEv&)a9%XUi>8aMaXVNpzuTfWmK)f)2GtgW>=N zt|I}ApWZUZB;U|C;N-H<V2Cl)S>TW)!mzIMrIrL2YlHSN1`&@QrURyiv8>Ju848X{ zG%$67DyC(t6Es8^)=4lUS4#&(lNq>F+!!Csnz62FVSs|gI#<>9GI5c&ccLW{)FnO3 z^1mLQ;_oB0lIbo#>!hU)4l&<F<Sc?J-#oi;A!I>sipot-#k{0eo%s?|H+7|a6<*WI z<kHx%<K3<8^%)sIuC0xJ;>pNpHfdstdh3p_jwe2KdTOqA`0m_zL{mT@+~~H7oDRbZ zH?c``MIJ2+|MAJw^<JpTy448=aCe?K@b&HX`_KLsB)tFi>-Bo>s?v(<M|hkiw3a#C zDvaHncJ{RXei_AeOB^<J3UJ39J;o5E>el$>(XPC^yG$Pbdep7IOhs&mTAIY607KSG z9omJft_UwXyu0g1!~-oewh3B>TuZpaUxi=pUA?`ZbzP@qn?Z<A<CX_m4YTrM_SWhY zh)OeiOqF0=bo}em>2Z^KR?mj3Vtk;rOgPA~Q9?t&cHNVvwJGmkm32zoGi77uQFB@8 z5LKZ1=Rr{Ll)WvR7BsAK*j1o<<Waj!kD-RZTBgh+S3hig`QxtWc25^;zJMqt5fA-! zUu?`|cP!hplvBG%$namn5`ET7ecA`vw*UD3N=T)RDUa*KfvXpV+2STDKMK#3ijh3F z<Gc}TL-w>%jaie=a<LpSO(~c*Wn!e$wEhSBH*M02cjPh_{>|Di6qQ>MF|&Z}hKCzC zkZT}OaN?n#`{l{292{aii}!2UIMgIGtXQhTebQr7b+*{DnuA)CZe?z;4j1L<%U-9| zR_5H;qsb6stY)j###ATDu&z$jxk_V#A!|eSu_f+D0}iZbI&gJ;k_SJl(K3dDvopS| zkl^|e%CO^CD9_7<4#z|o)=5s56Ln_X&&3eFze~|p<irf71E$HB7AI*u2xoloD%@~M zJCkHE!;Uncst_L5KUxoZUh|k~Ft9#a?hsWlciz0btSl*M>DhDUNXh?CtEebRN$J_c z$J-mTx9abyso8t?hD%A!dbFHPr-^A}m_k*Iy1F{&iqg_jc7C~<zhBMcs&oI&&fn)7 zcYRG|<DQ#aU$35PU0(m~=Cbm8mHO8X9k9?4uxDL#eCn2ux3*?4_bc7^``z#IyI=k7 z|2*9P=fnK^n)Chj-<se5zkAnyPx|layZPlbe&6NR&%L>)HYX=3>s8qwlSbD7g=Jhz zSg)@RUw`e|wfG$c8~4{wI8(j;%iSF}?s|V)_t|!-s{6iMu^;}-+8UpCyYy#KyiaIj zWPrjnt|iB|?pX50cX_W&dCtYRw~cLWr_YwUE%hpTRo}c7Yb@fzq6$A8Sa_)E(cbE= zZ#7%%@84ry|F7<^b^iZ{cW%C08U1cm$-4cY&wZWSw8~QLTWC{)s|Opa(Q=2Z7|vCb zx95GdwtScNZKm<_vUfL%w`|(=tK#m$O<j{7DIaC$7Y^HhD|Scj>vj6u-~K!NyS^sp zXV>Jn%hPS19om=hd8$Qm(c&}>0k_5%g?nvnKbIb#**ia1ZOt@!%d!P4-h5cNnDsZ` zJAIv-dsioX7Qem!$Dh;Z&2yvo<s6-O*!^yy>YuZVW<N?=`+p+aX7)Az4gbwBTC?Zb z^VLhAif8`()E#p1Oi+gDjRg*CL_6fdof2|=l@Ct6;IZuBk*#%~J}!&3{+|2))9U;C zH`TqKHg|sQuFAve^Vdi1OgkUm+LC+yY{?AQpDZS`&M5@g2TfUD_ry>#Y(_|=%2A2@ zDa@z-t8G7EdW~81m?js;!>Y%}zRKI~X}x<=&`MIR|G>t*LNTYkPIE4LQZw~TWBI!q zw{KjycCBjFzI978>NPF@J!F@*`&DqbOTF&*%eM2a1*x?PUngp1vSq6s+h%9Fcl9ev z-X*!m?`9n5Xk;=Bb`S|av^=-mx_s`uS&Dg|GoEr939E@uJK@)%I;HN*!{sUeAG^=r z`}<rw%k}H=)vupU{}=n>&egAbrZir=y*uc9=HaPN%xtv$YLm_M68jc2Iqirmxpk-D zZ(7o<KbySj)@Ek^-L+{^)#YPrrR{HjdfBFb;@`d9@_YYY`#pRAk4bM{$JbY1U6p<! zHD&$D4QAn~X={H?v52?6e8n=@#=tmn+55eFS3g=*8rP`(!=s7m;$yG6R8^mMx1*Qb z6D(Y@aNpK-+h)E|UnPC2KV;(k==)Wl_lC#S^=_Coefy2yW}L5V*G`}H;{O-nzrmpy z*-3&iUv0KEO}db~!O&dPqj&ZF`?2|VBoxdgCe5B^mV4*Z&t+?$uuR>fxNnMqkAtfH z_PP%T-Q{b)818)jvQvGY3jgNL)^}%)u8Fw8th}IMGSkY!ud8o=`EsUw|L@wO{SRgD z|NOWA&fm%N?^{1#$Syw7THxfrz3>0M-M;_t+{({#3JdfiK76SCe%D=$`G>Ckp)bq& z&D1UlPU~B=z~Ks)OTYHU31^Dl?|dHr|KI!n50BgbJ9)nD+vl5`>mC2?{eJKFiNA;K zf1dPzer9I%`@P@K&9kk(xhXZ!oc*a|V@{ZY?hZaazKL6lo=kmXp3gVgy8Yzqudn|u zUi_Gu+5F`GCy)RAtNS$T?4?Dy0SZ~HmzuJ#xGl2LU|<ztRe9+3e%S#w)&&j{tSS$s zj=4N(WeRA}Qs4})2<NfT5Qt;++|gz(qUyk?p}={a;oj6gD%OUEeuwOO`?c4ru!N-S zRjoR`aMw16{aY`Vzy0IHbl<fjRUo%7B6C~FF{5P;J11&Jv8p_Lb^67_hY#yMHJ?8_ zd-0R$@}<f<CjFj&BHx~wnR)wi=l1eV{qGmmEWcWOEBC~<Bad=gj)!hoCvvi9wqwk` ziZAC&d3Vfqzp+(dpOsMO;xGrHb&u|qrd0emGjlW7iX-cVe7^SXQ$H}zs@7@^$C)43 z#GYF|SjB&-<#E=XxRZKK2CPrQ{3leeUz^?S8TEWkVm0H>zuF3%;f05fxwS`0_m@xl zVfcKv-uG{@JF9x%Jn=uj^xo#@=jOl4cyD$2S?H|PjF-t*V+>z!nRfT0wWQur!SJsS zs%qyl%HB^?Em_FFU(O?XYC?tO<^GAz-`;HFka~9fjFwXE+~#eYJUo+sKYAGUEqZJ5 zyzq?7Gkcoy;`U6RXf%UqQi16Ab&rLGr!KYbpPFZXw`|eQcNvE}mA_tXf7LhjT8P-h z=G%60*Y8eM^60iawWWL+yWsr$vzV{&hCg02ZNB!UD%~ALW)(Yht|?}H`FO>$_0Wf7 zp^=+YX7d|=j{BWd|N2$EP9sNK_?4Y1553Mjd+fKty{D|VpLhFq6O*gq<y%a*n1z{! zO}`Q%BBOn~bW4u^)ro&|b$RbT_ggC9C?7rRbwcIhJzQt<gCC#L&rScc_|cPynBZFp zU(YSuZX$L~y6;MdrRtV#^Pc)t=g+8o{;OX%uv8}DSk;3Sjojh$RAOo?u7CWvSk*d9 z``f&%wYk}=GIQ6cReK-)xNO#^Tc-}iO2_XluoGR^^*D(6$c-isiS)#m2c~|_v00&6 z_;hn{_D{77|F(&~kjgk!ZFJ_)8-s^WpJ_fkCRNl9j`*^^UOr**sQBV9A=S>=&Z&nt zK6>@Z*1dasxXhin$ZgA4{&V^M^UCyDB5|G{oOK_$OgL#EoOQ_PX6X#S+vfsbdagOU z+bHqQ7NMNUiELt%V{A2J-Sg+3m=zXz`S!uD`>v$ux~^PUyjN~T^F)T{>mD&%tkqO~ zsP!)P<oUIt?Axz~iIi-)vc>f3R<o;HOs`M6KJ8a>X()SHZq?hQaIg2LVo#eaU-`}3 z_YKRnUiS7M%lyurwGa$BwB%M{>Ux)rj#+0``+s|rwf%Cl-$#=(0TNNAx9&84-|Tj< z&;E%)aB`JzgXR3Ei(W1%)mZf53YW(r)2)g=T`N~cr&~!``Cl`?Hf5sl^~FnX^NZKT zZTi0XvHQMPcHg(IUvx;ttTuW^&?W`_dR<*^si|kwJPw84*?lWT<y_gUBVlLGEUTJ# zpxiX|*s~Scp>uSd4BXddUHGK(Q0j`!lV+xX10fDV>l*iJ|Kj3uV032m+~HKH!N7V5 zltn78e~4`rTF{^pqi7=1!1PdbLW}mE>>ul#I0GDn)(J>)IW&F%xwE0%x5lLN%3R@> z?{{(jYBX_Nw(OnDO3h0htM9kJmUuf&+_z~b>%{${2lm*`*c<4u_wR*@O}jVx9V=SA z=;NEniJzvXRo_?lXx+FxF@L_v{HocX`q=hLT)!ds=7aHTgHum^pT3JK$uQj=<gd$B z?!|h@rgz6AbuYhryN<rk^Pjckn|H5TqMP4?_WnAThm-HIthx1ko5-<BM{eU&Z_C|h znpWL!%|DQ(*YrGZOH$6)J=~`=mokW3AChqQnf!%I#^>o`e~T5T^!_e<`dI9|!k%M% z*LhqfZwOvtZCv(I%Gys>d{)&u`{Eap>`}e%nbJ0`(A}QcW*skR{OK(J*;1>tr%fA` zzwlfOb-Gn-b@ydi#J{{L2OekryvJ=+RBYt`rr@lD3FqwdTPy=>Ph={eJG}c=*aYd% z;mddTt)17+%f5KMq!Dw_g_#D^-Q?F#>ufyw_hVy%kFez87f-H!yqA$I<lS9le0V9# z=84ZzZfrTp_;8NP1^>mDyI=Q8U$6i2L99&O{Y1))ex1Y{a~d;*{M3WQ%#ZGhl%Jf~ zrq0(cvg6h3w=;}=#A9+Nd$FtMdt{eh)Z3`sBkUivb)KW`vMcYuu01%n-)i1GBlf*M zUyWOeHFIwjs@B{pdtV$bv@9ggg!6f~9N&&r98V{o_E|JJu}tP>Y^U+MHymNIlbF|C z3(VVo?{w<M`J89&>UzGgpI2POefHd{D8IiCWB=A)Tq1tG+i$k{x}e3L7IPnDN=ZFF zYm}wSv$W&Dq62H&JW6KeY?izG@K^7%<1&5)y7#U;i;9$*b3V58-`AeLjmkG78?Q0h z+UBov=B&AT?5O&&1dH(hTb6y6v}8HWu;WyZTB6UN7n*awhWNW5HCq$0{h^tmndDYi zv8_L&x5v9r(P!-y{=ByE*YP^`8#&u9J=owkb?&QI;a5teW&PrO8}HPgF!c8}oh=)Z z%BSe$%HY+jllf&`V}1GAi5Wt3vUx7|TUBe;m-EJYny~KhowiuhHrv}%dEJ^c#&=nZ zZf>@k)l$f*-t};4#m<%kvlN0CznIB!dO}Nfi`ZffjR~7USz<%^*_(ZihZi!e2jw1H zXzs~QcrRs<T#*^TB+@aPX;Q(|3vZS+xzFMfyOuZq{*K=VC%bm<?pvSs{c`&>-WVIL zgFGROte2KIsKhW^dw%RuKP`5?=U?5D??2bgdg}XI%uMv(s^x#@&YWqr%ilL_>$~U) zcCvv+A`?IvR&~phl$VcQJ`A5y+wn%9zs$Dy(dkO#x7u6weqa2|mfzEWIn<%?izcWZ zRL{&_RpHk3`pVhq`Mi_<E{$eB<ySB_<ImZU)523Cj6B6IU5r_$ImM<z=}wz?%x;;p znw;UBueMFsnfE6C`&r)7{p;SaT%Wk>X-h;`_TP2vEoU~|d2mXvt9U1;qCsh+F_$TG z=cWKg&mCRXClB1)y4Rxq(XCq_S7#qzzeaZVC#9R5>zc3bms?%m^C)U}a@{Gul)Q$y zQ~w)o{&7q>J>eBoy3b7>l@md%Di5_B_ik(cxp=RBU);aD95?kftq*QpU&L9s;c~8a z-uATteyMxScin6Gx{lA^J5_w^os)L#mwrXKn=a>iQuTFV|Ff>}Z(=`M?wD#U{2kER z0Sf&Gv7GA;+v@Yg)+Da@{d2bXl(`>nhW_&S|1ov)S^o)te_V_2<0+}^bb4=HKAT6n z`-*O%+zr?4J4FHCmL<GhR+hGvchBk*9IjGsjGjB#uFdJUekj(t=&QrMgzK{oe$Hk) zxAvv|Z<(8%>ttIir=OnQbH(27)|OT4AAVh>`@K3ksmktAT5Q3hOrQN3Dx25JD2II3 zeiO82C-)j*qh~D;=S6pY`gPu>eDUX-ub0o?d*#cO)>+3n*Ogj}#aV25;`TM!S^d81 z-^iaw?_Altsw(`b_`0Y}w!VbTk=Iwu4*6WceEmw1aw|Wm{dIWJ0?+7g`n&30&0H<J zdi|F5Y74@0XO^d2{&TIiyZY4h*i{i_Yk%ej75rQlUlDJ-h_TbA@Tz|S@BgfI(Wz>? zwn(wZXX$+j`SkFPX-4_;G&|27ULV$-ZSCe*QM-0^)$DMg7;gJHyPyBv`E|E=xtRW2 zoye*sB`+@>_U6x@^Z4r7H#yV%+H?={W^PcjJJ&3>@pjcp&$)Wmezjj$pU?U7=#ETH z#@2X{JFl-{csZL}?CZ8Qd#?PrJ@40Y&UL%*&))pC_hzcJ_!bcxukX9&Rz96AzDzIj zR<6)WUq>#Dgg^(ObwYcxvp=qy_P6q`sehcsN0o!6hj;D1A60sN+t=??YK&&TX}6ER za5v1tuEw<VKlAk~Qi`r=A`@Cx&pGyW%iA?~KRUR-oV05$f0#)A%h#_b2kU1wG8KX3 zS>Ahnm6Cn&%3{y9yz+l19;8}wEfUjE@MZMe;g!v=)x;FJra>iUY2|gDcUmUATpou) zn=W*yDLSTvOpF92*@L^4X1S!f3uR4*WJ;EcDk>d4T1KlIRAN#quCG|+DIx3h-gDB1 zJU1uNnX;)XY?VOm@QGXFj=G5XDmlflT8j9nIl6=h=0l8g6Y@QDDe~do)e7xRCm-2P zN|?(6l31wvaIvSs_Aj$HDx5jFAyro=cY>t$v0X|BVov7SbzM5MPXDlD1SjWVrQNG0 zw5(=%FXd>$xj6f!l4W<f>Gel1xSySAE&ir>&~8ga@?>t4g^Tj+-biS_+|<3=WUHId zy2iEBrF;)PdlwOt>-{iiqEg1^iu{+_7hDp0Cm5zff=SA37R&CaIqasY>uSolHW=z} z`{{pt=>|*VHy17>fC|JJh5L$Hd({qpSiJCgw$YjN>wk3Tekf{GyYj)vYm3XPsfLo@ zuHM`^D*_ysKQe@lwJPhLYkqsmpnhfN%)gf^3~#kA{ZpfSLfH0&Kt|KffYuE{JH6(= zFY`Whb$jeTV;3>sL-kirFtR?;P~Z&byl1*8L#U|5T{qysex^wUU-Kg-$aJU)x|lxk z?1N;jmCriVCeGQ&?p+IN>D(_<WEN>)ngf!17JKn%fI_z@D4<vceVv+4tWW}#>7h;K zt|pyl`c$syIfCLpgL9Fmhk#^gN*JT(j#D4j3A#-#h;ERoOU(KqWMmx|Q0)dXqQ%Tj z(pQOLU6Tx#+T;b|t2`Ef?068nxJQjKM%ZFX@xc_&9bOZRYD_qvv#$PC`}@=@$@Z_S zIb;+U<_ESeYfy<%t+;;SqRNjCd@&pxyy12xEWe+mvh*>;z6=62+|EuH_ic*TKj+pS zP?J+PapRJ6pJt?$x@t4Iv%E`A5dk%th4y5#TvX{XeY9=ry0%$)$8&cm6|{W#;p`O8 z<#Fihbl-zQ?Y(Lb1@1L+GbZ}AeO-~EbMlrUOCQIz#uHPcKtBDj?%`rjiH{0rKJabJ z$m}zYyE|Q}z~$A$Hj#%S6I!w@lv|6GXSGc5@tBeVN{rw{Kk2w)jyTALPTN}iS~7$d zs=6?4gt$g~s^mqLB-=X)F&3c2e$L}b8&iM-C>vkeqg^G+m9h~OL<<y<g4gTAx(>C8 zHz&5-QU%AauA>Pjr_$oCGoY@j<UP|v8A3DP3U4brdHUwp=YKNz=k@mUZEy(%l?+$< z6lSp$pI-Pv_~D@kDJNeC1<d%AyXbTOlTF{deg^D0@vD1pZg9xu6I$o@HK{z*I=H*7 zPwgPzwM8|K|An~JUpuSGx)-nbwDaMs*ja}*Cv0wY?6_9<Fl)2vLX{ZR6XI60ST?VT zF`h2FU+T=V?p?*UzxR~9R#puCG-aZfoNVTrDNFNpyk<1-)R<p+Lp#>@w9ewvnC{nM z7TJq_{fQ{v{A<_OU&4A<XZ1XfU3Gr@mYqqai)Y#0UmSbqO^adbRj<z{uiVN?+}s%E zt->>HNthxyWtW(6)*jg8A<1#soM->6|EZ0}2`1ByURtiBt?(j0M=wNw{?FA@7lo#Z z99@63RPT=FrB*|Wwc1@<+N3sfc}H6q_q>-nYIL!z@O-~{xcDqy6EDBRDK;x(cHPkB zynbNS$!@j886J0gET>H^*YOjR&tz@jG+Nj`PvL0Q-2IaA%-1G}n21a7Ka~4&&)R}x z2WRTt5)6-S%q!cJcA@CUGmEYSmW@gGZ!F_<W6o7&m(#mBFA$ugZ)6Bfn`c%#<<~hg z|Fnj04i}Rnj7v2)KUnm&{8B#q_KR<9B*SdB%gULl+Ly_${kkn!Cj9X0Dh1w{!?g=N z4w=rG=(O{&+hhghlQY<EyNk~KqnY#MvN@aTvoAMvzqD*Gzj{vc>#VuYx^B%}GR>v= z&{RXaX{?LqDXe?-<?auri|3evs*>GICdW9-zYX3vsnyCxT-ftaXj3__tZ&m?_f5-Z z=<I&>RYJKnTY%H>eU{&rUQWew)wa0pi`ut(i0?~VQgd?8?y?VW?})AsnVje>Yb?`V z$NAdtytnTyQN#Bu9rYe%=5JPsQT3R+E<<R?KgETg16o17{HYIOFN^p#{jYTQiCEIa zbWvM@^ZE<kaxKA&Do<YYL>Vmw=kD-T3X42bvQ!qvae^ukC+`4OkrP#*jC6K)T5bEn z#+_?G>O6WfgoIq&L}!9i^&ag-o+)K23(KH-1dz(9w(?%BSuG!;!k^FU{&sCnhWF_= z5zcQHicV<B&ae&^7jQJ;jOr8(-ySU-%ge<k5#9SXaudg)3A;WQtG2?58;w=Zq%3l4 zS9^AE%)44#z;Z0q$)qzz@@nL5KhGUr7xYU^IRB<qU*27`ojX|MYPj8&rfnYA{#=PM zJN?5?`2vfsqyJ&&b61w?PPsg(I8psUohr}ziV#Tptuf(z+jxd;9baA0-sXtb^SkEx z&UV#qzv=(;DPvj)R~q9U)f-)X8(72j+*)=PoHwiNKfa+!^d+c#XzZOX<9n#2xkM|c zJjQC>pGW?=TD8xA1*wVeK67?P>g#_uH)Wl<z57%8wp&|lUwLFS{^pci3L3dOa4$5b z<-{V-7575FcFSw)=ad-TW|=CHe$eOak;khJESvr~%*iWeZu*{S4yKQy6jPl*MK??7 zA-Bl^7Z(@KEQz^V(eP)f+VQP-zgUH8onI+>V)}$fcdjaiwA!v~W$6rbT?W?hUdn0~ zi*)-Hp83blIiLL;T4t29bK04s(MCyZR>ztQ{%r2|_BC0v$T_Clr(gBT{4!RRhqJzw zojC)ly{_j99jx0nQGtEc2{%yWAKdLG=F7Ar?Xko8J~Pilp?wh@YKrdZS0-sfWP?}* zeU*ZhIlp>=I^#l7O<D^au7T>Z%zLJ<t$BFQq=HO8EwuP;fPxmQ%0sUAQlae&=fs3L z2(8<xV|a^?brGm|X591o%a<=lj{LZB<HnC2pR6n`B|~S=eRsE9XLf9iaOBe<uC6OZ z8%y^E-BMjWX@{9*?+&r)Q}(^wGV$@fRs8(?-}!m&?5Qj+DVegtt58-_^5uK=cJ@5~ z`+T=EpRM&cQ&f^y*uBl|>@KM`-=lR&_ae{8Y`rt>{f1R-+noP8_^-0xd1}w*iJC_$ zj_jJ{zkTlhpZ7QI>Z^5_wz;5<!{>2M>++g_2{)~7Z{Byq{aA69b;eOPj)LeDuh%v^ z6ze2%Wa!4Mo8rr7&DH$GUwIwN)sxZNf6SHnzM%x`;Gl=|O&hj#&v<?QoNcKpznOPD zef|<qTjFhsURO`{o{m2?w}WiY$>b(PM-)Wcrr%1?nVib7t^4_ew&;Kb_A<A8D~`qN zEjpf5+Wqwl-$aHPQ}_C9U3$fFjpetfIW3<q=)7UznPXqJqpz25tC`$;o8o78ey%&c zw>ErToU--L%f&0dzuEbDxz(-R=eAUCy{5G39{02D7T+fnt<}k!B9VO0t?!%u_q*A0 z<qJ<deV0^qBW_M|61T`ZMHQJ0Q!zP%$u_RSQO5ieogbz>jdDBw-hP`>^+q4Id7jUt zuWWFCar$7|s)XVkHj5{VF3;P+`l>^gnDND<>l{j71O->Wo%>S9WSZ_@hrn&dX_9lN z`2};AzVKXT)c$GB=~|t{#4o1SIl7t!rfGR;j%@;A{^?t~|2|8aes44L^nK-;cOEtT zNX&U+^lVzp)njMovtKf~wdSs<=<*}Go;01^c=gcpOaA6b+y2?_-EnV6;a_+D{KWF2 z7N54C5`xDvq~)da@-s75t$&x1osqjHYmMH@l^Pad+g@kfoVQB(_w6XDUFYX|8BV`& z^txZ+o6V8tH{PVry7j-TDCj{}Rkrk&m7FO&9&=}WjJ<YoK2!MLYUlN53Tv!I-@VM% zxh%0O<HnY*?@PCxWHArD=yz6By0>%U(^n1O`mbtd-8bE~p3{!kx+deQ-nC=r_b!tK z&4PTlD_0et);I0VinTYYS8d(4cIC3I8)v=I<vl(->r}QjcX@8j*F!%;c4WOi^Oal3 zX-Cwt>8VOj@{Mw&xz0@A9DH9oIk4Jjm*6fZnee<*&w8|@7rcs+DY$xRL-O_3+S}ik z)^2-bbG&Tgv5BGQSFSj^TZ-%Q;y+uiEw!9wnzys)((bsDTYCy+rDfIhw(NWMV&%8C zYi+06l8;_}THPm>zuscU-c33F!GAm7eO{?=I??Zh`t<xQ7vEb+zKdDko^nCSF~Wa+ zM&0R%En-LGvx2nL_PO4jW4V3qC&PIYWw&b<q@D@w*naNDj3OQ32;HfMkGEE9ELPdf zu&m&+(o=={V<(Qy+PoutF%SFJpNnqnD9cmdc<sGFvCxub&u726AhS+PePPl2JEjcl zo;<(S)qFcko69OH>(;DSQM0pd&B{KR?frM-u2syt&GwdU)LvTtR4-*#+?lGCCv93E zwzu6oEykZQ-#~i*_6?Wa|1K!?`OI>w-(XH*XQcKQvm3FS{`np#%HJ|UDx>bML4I!L z3-jK!1=>5xVs082pFWzcY_K|R=hJl6_LHo|Cq8ZobYO3MW^v`w9PPB_>x?t!@UZ{8 zTblLi+RVPTbCbXJnx;NE@-^e-x5KUTr@#68=EubKyUy3neRRZhSAXSx(b$_Wbv3I_ z-%VTdGS}VByFYdE<qmD_vWDHWGRhw1EMLCd=t};p=>>Q8CA4noxKecV<B_-Gyo#bt z>Rs8BRUb;lSUhQA3UCMqwY&FfS78j8UO#ZpwBXo>OAA;u1k6FD^un9Ito<gUI&1FQ z?JxY^tllkFE*pRL-Ew|i=^YgzO_D2^xR&^X1`o<6J(BdFraMpa?_ZDipJPo=&;F*H zqxC1$|F^ZVacRl?S!=THZda(aT9l%p0O@?3JbCHp<-_YWehb`;mwQw7?8x-bX}7{N zs^7bxt(KdVz_zM^>18lzs>JWowUCcJEZ0}g*1s>M^4ohm+myKvtS<hTy>gnm#>SLM zZ~Wb>vL`<N+whOeYig8}=t`dh&pW|Y%9afMNSmAc-_4eORTq1cbDeVOY0ixz*MG(G z|1egz0rzM=r`ralF9c0!luv5hn_XS_@5t7zkHfF`#Yb9~J$2nA9K*i4-Zt#N#L=x~ z$7||kIb#04Y`u~R3c<|$<7a$sAN+Iip18aI|Gbtr)2GaRa4URgi^YwX+eEkD4%1k^ zX`XcP<Ly=F=kkW%wqjhWQQXN8`!RR#&ighAkvmS>&6-)eWEV?sfa@Vh<?B@-`>rza z#UpO#yXWukS@5Ri{JKl-zxwrO=hQX5Illd0QOW}E75iUQX>qT+qh%xN|6IE3=F^Bi z?v+!U&peXwX=|-w?Yy*8NnNP)=MLe#i5gM-Pk77LO4{sCdvIsgzs=_-&V6tza7Ovg znv))XA20S@{Yxrt{jH+?(?j39(s`^TY_Ga(j+I`==1Onn-rSWlbgc_|Q`S6jP`vp# zmY8vzy^%kU#$2}x?YMM(?uHJoN2k)&O*ihib#2Rr4yNle3c8cjybhTPMepU#yt)6y zua)WR%GT_=v~N~J)YjB{6Ma8Nf7gAd8DF+C>E_mF+daR1^4<U8(A0&Yir25F%y2xX za(#}zad7-urtAsLGSLgv5^YjaMJE+ZEqHe;W=BWEt?Rp1ZLd^4xb?%~oz?f|NAIsL zO#gW4+@z)MUeon#_k8(q%u;S|MvR5h#N;#aF|uk~_!cVP;An~}+o~3|>}$~EeN`dr z`+et6ZRY9i@?!Md;g-72-SRAJcU5#)T-Kjl|G$@6uHSus_U5l+Z#MOEM{&t5t-gD1 z&!@B8su7@O%Phzk!mX%1t5WOZ%Fj*~_p|XVxVz!qyX|3jx90w}Rh@rE?f1j;;w9Tf z`}pI1C--THae08#Xq3~c7n!#scRz0IyQErbEx$(N-lgl;)tARzVS)_>Onqf)b>V7Z zMef~qe<mJ0T_ob78{jYt)Wy6e7sA52DFW2R{k$&nPH2V{*dYr^?DX&MH2-sU??dks zZz>$$N`jl`w<J<cIvI9w6=}@yX^LB+)Cg+XH<kAq&0;C=eGqVtb+YQiS#g^A_vdM9 zzPw=;->r7>^PeO8|Cg-!5ni|0bHhi4En7>jH3&>&ExdIp?6Km8Gyk{6Ecv)?>Xw&N znU|)oWtvpryS{vHQR*}Qe<`2z|K%(xlI&D7{Pyj9dfM4pe}4aeXgrHW{@%e3u0(E@ z!?MdAlnPv~B?(P$^E_l)Q0%(cbI(UM$C6k2|C2V<K3)6&bNq?l3)k}h>{dItUc8)} z@t}Nqq3eT=19N+OR)Tu?ReM+8I?=fQx3|+v^YXv`Prugxf35%?QmA3!T($Uiq4YWq znTc699)5<8^=y4xk??B&f7ZmQZ=QeJ|J-_3%ce;&kA3*r54JX3urZLAYMM9qQtE3C znTM<IPq@(zijD`do+h2r@pe9iwm<LKvvsH?9#J$sY<)vd(9&g^fxJ%N0YSTCvXj_A z&DO@8&(k|yCQC$=^B*n!WdA4g=Bj!(6V7@rrP4Rh(qNJ2oj<exoBe%Wf9v<hJs1D~ znt$y7AOHO|ANX7*cl_mOX|w~yHh;I1%G`hb_1C8UuNCrLRQGz%IaTgs^`9n7ewwUf zrZGVm5_5Ac3zMF$|HpMvWm9U(B3V8zk3*ujoEafA<flHYdwA4=GeF@USTP4_BY+}L zt?jplZdkl1wm~j8v&q+C(+<$62Itv+omnlS;rF#en;D;N{Kd|{e6m56P!Obx=CR0A zf`6fM_t}@9FZZVJyHx!>c(brX`0+)}Q>RTh$Zq@>WW@e7R*(B-2Jzi$g+I%cr%$<C zZo;|i&7Cjno=M4`l}ls1TlLg)!p~QetUgtE>P~4f>JGcSV!oF2+;HQ4!L5`04<~0v zuQ~3z;(>D*ivVxrBxrZF>2<+*Zk1U_0=|DX*Vov6K0|2LZxs{C9aa@)q8XwhZ~sjD zy1(S9%x}%(yMtPvZT%{gF-v4};_@A0X^accZJlfyS9~YRa|c^kq{*x!XMA2a?m4*5 zwE6jUo;lH%>%UoU`rWOza8^c;^TJL30i`jy+&8yATlr+F(at+!cQ&f-)~!tM|7?)m z{g)x@!NjR2dL|X{zKK2RnyY#0wf*Niz30-`&#(IybUAq6VowRvmG?qb-zO&@w6d2} z3y$i|7tR!qiR3?XShHjGXHR3>>ug&d9agysn&EX^GVO2oy7^VlvW~yfe!IFe{;RyN z)5m3}4wx5)E?*%gb@hM6eUI7cKG}DhPh_zE`ns;BrR&_+pQk(x<_av?_fOTaK12~* zFMn94GK+<A>-y5r{LfxZ*%LB^-pmR99>I4!XG5m=)Dr#YESn1tMs^23ln%H1va*s_ zdV|*k6}3>0L!nODo+h35rcIqLRewA9zsbSU@72XjZj(Qh&St5Z-LlSAbQe62V2*Q# zPsk8DAX;%G6f_i>S?7QI+$~xD2^m7TO2pO-p`v5FStmi$AZI;p2WX0%FakAL&hAc& z{Jy|4paE2h3CKbxct!7-)`Tx)0gb$I@Ukv&r~nPy9oX&X@9*!^)8E_M+poQT^5n@6 zqgPK=sLE&Fz2jK@(>!zL-};)ad>5a-0biA1-_@JAnxQsfMePvgVcZ*1o~bG|SC zZ<^h|Fgw<;y4XGo>4$})YrHig1MO}*Rj=-imYR8$X<g=tx6`)hERXp%?_2o#!<UrT zI&70s>uC6RVgH>SqQN-VhujkX!`IpS@$Hu<?zVgPg<WN97Ld-8+;}iF`GCZQnAN>k zx7;$H;<hMvA^+xQVY&02^;TbVe3j~DAjbXqseyUP<*=D;?XuDz&*^i97YagGkIb_y zephq->Aij0;p->P{qu6?mFjPIeg@0FjZMF`$7^%R9J@tl^mDf^E`74*{-0|>HxC}F zD>fGBYUv3O`#M9ptJmOQm3s0?E8m3k3v`(;T@!k7ZNt11XC6LEosloO?&_Ue<*csz zWTe;e?cB3ZQufpror7!(K5t(V+4N)kiXQ<ziC&&Nx~i{#?Cd;sY3^~a?ep`jFUFK_ zd3a>vuUF2c$Gx((x=$R;m0$n*-KA->cCF0(w(#4zFKX9*>KZS9bggIB-S;nIZ*Goa z&N-|Qwf^YtBC`q$mTS40S3W4uE}S?mzh%mfPixaGm%NvqYRJE;^ux|MR!2hom&9#m z*}bAn=4JWR(pU4CPuHnF^!jzsTCe3|;N#@OZ*_Tnzh0Hi<z3qw+Iv;iRFw7jsWMsJ z+rgzN_0itW-**OU?)&zoamh}OZOb*+-xAbjzUF#wW#Ln1uN!w{yH~H~^$C{QyY%kG zSO0E?C7d!g=Qexu$boCQ;U(Uf+{}oRnqGW6q;w6=ehgn9$8Ep8^y|7aG0ICh3`?fl z`A%wC&HvuYu5L?;d+yPD!E3kX`kJooy_%ArX>l(kI4(MJNA}~@;^&qh3XM)*=l{Z` z;Hg;U?_;5oiPsiB<_@>BHqI=MXp-Yx7qzo*-ED>$?5%PittHbw`UNuC#}`JooIksy zhVTCp)#)v(cjzQ9K76G0+I1P*tM@M43b<LYX2-6Y^A{hz6=mNZKJ9JhD*KDIc3+pO z8OeO|tZ~x4*K|82g8To18^`MB&UQX#RI#PSM)!;$udP_PnoLXF)U952yN_z6y;|*= z8I?NeoKb%89L@W)CLcSWpk%gc&Zo>X3=?-ftXUWGeBH0_Gs`(^;y2un@rr-hXtE~l zSwr#Mi7l&ll&jir50kkQ79DuuV$kJlA=ht(T)r0L9T)wo|7xi0jjb=YcE@V&)o!0} zd45YwR#K9QMO@^^Ju43Tw)IXn_CCSUEIgZ6syD4BxVo(L&E@86-oD@F2X1+_g-Moe zZRF;%ZRs)_Vsz4&)^0jx*|DHH?r_TU&BqRWy>%-=zul7i+l)=!)g3HLr?jlrcU`tD zZ|=*C7dDaiBZA%hV*01$*~k2-JbCYYpZw2Nzwcb%*TpsY#>Z$opT-lj^;l)n&c9rx zwfU(Rc+JWag>z+9Ra(wcE8|~V7VI^2{^S<2_EAo8qSBfZs+`w5s@RS?G|mAHVKwf} z_ABR;;%8k0s){$ks^UYt+umzUVE~PHEnLVT!U39oe;9kXT-2+9X;MM!g#ZSw7Etel zaZmQ6#hxwi=R8n#`PE&h_jkiftx6jg59M`7RhQ;l<v!W*-C~NEZ`0o0z4ad!RaS5K zc|q&6uW(M;X(<ugy-$x<Uq5w)|I3nBy9`br6L};%^PtGoo$}g8Yn!s<mYe)CEM}a4 zVJ=5dlKY0m?SWJGy3TpasQxfEHF3q0OGh5uTWRvhD`4)P((d~w3;AP~x=l`a^Wc}0 zeZub9@%zu7tg_yF@pO*iwf46gp59=aQ+a*;KgQ`1(#6we*W7)#ebXAh1)Vl|D@t|* z&yNpK5Ll<UwDq1h6VKwGMLTW?PRmQqOIY?w;;TiEQB?PA)l<t;Qaeg5^_63v<$L$a zt}|NfY4J<>t%7w;#PLOqM=s`q#+z8fA;V4276i!fls%aBY~$&qIoA(bisgmn{av)l z;9;twv*3LzX^wMIm4zp4o?o+_8P>g7HEM2+z0t89wNKgXvp>!>F5BVNqn7A()W29~ z@ns|a5bN6u?{9Hj;JdIQZSJ#_92u$8wd*wtOrK@)o%h?WkQ`s0_ajnS)OyFu>gk7c z^-iXy<y<=}eklCOy8U~9hFG89y?ySgZILU#Z)#SJDc>FO`fu;U$$J@2Vp;k!L(gy) zi}B|tZB7X>zRz={6IODjxP`wuvd;T>(1TU_QYq)Y9C7mOs1V~e)=UoD@%sI%SY2;U z-Sn?~<v*kMxA?N>xnKOXCR<8Zdw%zZg;Cl{P7GYFo0q@`gc7|{T_<nwuYQ|8rKEKC z+V(RiCw<+0`|ka$qgG$HoP8X%F8m|k89}yw3kkl-iC4w0eztsY>OAw!L#{I2(_7a~ zPOQtCY*p5hT4OD8VDnKGFH_y{C54{KN=*jUj6%zxi)4%zduEteo!iv&ZfnA_o|4ax zdOfEU#r%F&-aYG4!|I={>jP6nW*pkhb?jh4k8akPinHDOww(@qb|Q^ui;wvou{Dvl zyTcmeI#SKft~&Di{FKKM)`zMt9{hDQE#^V;)u&U+_A)IGf18oJY;Lxd_ys{7<_B8# zvszA9&alhSmAmkDxn$Y1=Rd6dx+=WQ;&v7uj9Tb^Bw_KKP4};?*=~4Fab@GP>%5<@ zO=~-+k<%J|u=G&q0jK9(Ilpe7PCVBX94D~h%+#}!W0!hZUrv+YUp;xVk3ddi+S&{3 z1$_%QFS)pz?cZI|iz-fK*<TKy%H1b<=|W0se<Mfc5z|Tg985YLj8^Gst+J5#<zqiV z_2wi^Ii(}A*K=OxZeiwfS-?=x>);{+n$%^8dHSL!YJmd_*Adz44BnMW0j#bLjS*S` z<uONHv$ZOgtV~FJ`|W4%Zh4!?EjwQS$SSk1&A55s=;B996;(w#7BUqc552Q{o=&ul z@vq+#?>*n0HO>5O^o@`otLJ?yPfL6C!p=1E>aKi89%}|QN5(?dM}4a+y#1!>&6BHh zz1e=^-=~D@#_Id#m|x!Kbi3L<>)z)H6`3BKtVt^z?i7A~80#(Wf4Ao6HHDk;yG$3n zVY%LU?7q)d8^=!7$tf54PW(8Vwx~@hHcwN)J*N3C-_^KH6`ShsnwwwwyK9qhjQgu; z!bzIzzV4P2cpKfd+IY*Kxh0F1D#?m)taOkmR5h3Ox6Hkl&3vo-v--NVvio<H{W*1O zqqhE}xeu%&{=VM$>$t|ct=7-FyPm#_o%=pmTvz<%0tXG&M}4pV|7yQ4@uceUtull9 zE#Hq`JiT99@waNK`i^g*dWw8yyK;}d-6nc!<(luu?#1R+gp1z&dTQ3@8t()_pBc`) zHYt3I9DE8*m23oKdcSKH5*%7N9jlVImCIUk+nu`X_?v6=iVw1}s%Q$t$K)nzaBL9? z-|iu@mi-gk?rS{r;*AUPeE;8ke!{Qdt;U(%G5b=M{QG!uS!gZq`taPH_d~<4Mc*pe zx+Z(;(YOg${8zAX39u%0trl!(stA9)cY8TTV_!T=PJPF<w-FT&FHDlY+Rr<;X8M+G zpSpKWeAso;fML=)kUy?%6$bgE;4Z<zlg@2VXV*QnluUahA8|hRs)50&HgDfc?HXDp zq8--ja%{NrV`g)U3kLj-3jb=hUS)?^okjWi-^H)X_222l-HP1w#pC6rrR~$@?pYjP z{rT(tj4cV9&)GkJ&@S^~vLWlEj_eKhV~JVflID{c!o%vME#Mw=)2;LV)hk4fj_|IP z;A&u!3|4rz<CoB~<+<r^``E3#reAqmvtdz%cYOT(^=~|QSd-Q{+$j|OzAog&#m04g zhqGUoJ@4m<>)ZLofS>C}C`fNE|0U-}oiGsdD|B$A!+PB#+m;L=$P5{XcTe=9ijWmc z;<g>247NwLLrrm=XpmY+<BrF#4ujUdI2~6wBNnF6w}Wl>YR@nePOY`qAD?bL>h7fR zz`xPrk<{}HA(z-(!QH2uU;jDTe<k2RKU3jx)3A#wXO6yzuzj9BK`}Rk>xjtp9d45^ zq_VFI<aL<x*uC+`BdOCFLI<v%f8ca$g=mN7y24&H#+b!&4I1bBnGBDbZo8;rl4~gW z&G^IwGcDFfec68&dA<m5^HjO~LM}iqw0zN=H()pY29->ks+TM(b!oJCbgHc9N33s$ zS|j7!uUtoD!{cQeGKBU$ae8z_6I9IX)t)MMQANm{C2<4Pw;r6Vo8mxTy$+kG1qJGR zX_v_Y*SR!>SAlrnK?@fyC~|B*3Q9eXKnoWN*G@262(myP5`1il+cq#29x=TU>pN+Y zr-6UOai-FTiES+xH3Zyal4X4tX~fsd8CQzPHuR>6ED~`9dB|t6r^c(K(7p!}&YMn% zfI^^OjWJ4Dx>4gqJJZLbrq?d2Oj*7nS?x{o9K}o(PzYAIPi9y>vBy^AQFP;sM^g7Q zgicLO{1JNpF^{BDpu)Qy$8=}0e75cr@@0D9X2ccPu>kC(_v<>;6mLBBm=?qOs6%`8 zGH?J*yc5WAnib@qrn3u93iuwH9^)~`0#s)1C|`O>d6vtgHU%EBaD{g}y0)`uE_Ar2 zEl?iwx9a+u_XZ{g(?R+k)i#r#jDk!!Q+50Hz2v^ydezNIL%^%i;?b-L8A1{B<g%V9 z7Bhgtr)ROJfI0Vfse}`X-UX~lUD<mUdtOMjOfdbi!TDSQ*AemS74DN2vXUoOZBT5F zIS5KaAN$l6p6tC@@S(7MP9rEtH}<Ms+-X-|s~#$K&-6lv^D+TY<+H<e@`3jjifq!G z+Co9;8k~j>^|3zb-^)~ZWU8p|pLJ@W0j7lJ#zc@;_uXozcPiSn$TQ=TmZRzi2knQ2 zZ7ma_>BuQGcIR$;`~Q9qq)tk>C>{d&M#63Kg{FN9-?~32I3HR8^>v~XSIlCmW)1fU zXinR<-0<<2(250$i6Wq+#Nsl!p}aTg&qAJf5ch`LWP_uu>-Mop3ArzHxKr30Yr^SV z@<8h74`<1JA|1->4%U^snsCO;_8;*KQRv&T$*SxA)s_q)Pnr4+H>Wcd9={r%O!GwK zChEIL!~V+T=*4?)Yu>sfWaW{#4O|AkUwLAYXGCG@^#>ff?)+>sYFGN#3F@jxWIkG@ zn7T*=T*_gtTJ^87%-`_qdh*x)vs>0HRKM-}skz&Y^W~!aBgeG_X7+R)t>$E#5xp*9 z>Czl^A(i099gnrvWnr1^NLiBiv*dQy?Og2>`!&55pAR?NtNooN{Mh5Q;RnuzH-sHJ zkkO&NIm5K~*UC*7D@`9;hyMC$Vl&O`eU{k5+WG?aBTJo5EdjTJ_G%w2-SND2VYfa{ zseS$DrcJ_jyS?OJ+V9KR^pkUw{QY02CpPM>?^{$Mg)&mt^?hsIDf^8x>y$UBUNF&A zJA9`37H?0fu+zM3_0lKLmfSsgV5-yWZ(i2xz7n^v_4_7I-qurf+g3f!lG(l_@T7KX zk>vba=NfLt<UL>Urcf^J?ZyiW^}3!uY49&w{J3xRj$OL0m4DOc?Y{W)&DYE4<Fcw= zIh}pXa($O9x4ukN(c)hl7fyaZX_40c8MAjeT#a7&q;`#!of>=pG>&y^*vqsJRvW#k zV)H(~l`;2K+}S>n$d=dtT(A4v7H>`dI`!LCmMg1tKlkO#y1y&G(EsNqZ_(51O!xa* zt*N=JZ?mh{VIfbAaCm9gsral%waU6zW?Z{fqdz%L`@;J2(At%(r_O!-c}u)g`_xTC zhl^Zcjc*Qa-B}=r7~Ol=Ui^KJ{r0-=kIp?>I#<=Ze~MmgRmIDPy~TTW&7WKRs=z{K z^TD*8)7HegU5eQ>@6wJ3Yh2a8^{#%JHT4&7Qruy&UzMDT?X*QsD8&%7=JlOv{PesB zw}ZI5L?&uZu-yS(AL3@VD<I$qR|@|+7YUci9Tg=DcFfS65V}JsSI}1}jhW|}%SwlB z52coxX>fBL@nL)*wVAKcGT=Zg<Abh?jI2V7847%T!Vd<3wqdhTZyPqljwBw3#v>XG zF~XNa4MeyY!h0AsCP=V0WGC(7YI9<I&}GOlR4ng){hvKnGx6Hn6>C2+FfcH9y85}S Ib4q9e06tKohyVZp literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/FileSystemDetailHelp.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/FileSystemDetailHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..01c6c3c67558f1ab1645c5150ff653c274293bd2 GIT binary patch literal 39452 zcmeAS@N?(olHy`uVBq!ia0y~yV0K_&U~=VPVqjpX-pwGyz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@I14-?iy0XB4ude`@%$Aj3=A_jdb&7<RK&fV%e^4hwetOU zOU@I@ijFQ*qSgi~vx)FZ-FGwS4Y?#`YWnS#*OoZn%hj1{y43cqy0IW4>qxd#w*19y z;Y$M-FU{=`++x=`fy?QN#_{W0r<yZ{D4et`PurI-m;H9@_qgi$wdZbTufLyEyy@Gm z&1w67o?SEZ|F5*PwG-FZzRli#zwUQ#-tM2zX50VSD9dZc;lRKo(7?c=5YTs^h0`qY z|Bd>)^}5?9K8kmfI?1nl$V5tcZQV!CG-1E}spoV$)TQno`%z?K)!udNMciqb^v6{{ zyQj}BIK;_cdBXYG+1cjh@9s>j|2e&W=gVcY-|cwZ$8G<i{J4ze>pfpz$5+0SFY()F z(4uc2-r_pj+KRWJYV-c3iBIb^IHsP=|C991C)2b&|FHf~%{0AZ0_*22Tl0LT`pIqk zPJP<e%5B`aPiE>i*NGu_b9A@e?|M~w((7LI&+yMW;a^-!*RMR~BNDbK>)Ec`=MrZX zd)mI`tvI<)v3vVcxesPr-hAF|Xw<o+`%<p>mY3VVHCnHl9p<#aQ|m@f`jwyu51Pbg zO%%14Ecg_BNmA6@W1VmQ+S5jy+dbE|*4`CKUAaM6xVV4j-&gl7e=q)DRk`v*u*{1) z#q<7~&%gciAb<TA=J)mg_21k7Sv7s`=MC+)XEb(B%)PzsZq@6x;(MO|t^c;Je17e@ z?)~34SLf}2y`X5?qnxxj1>2mNGY>B`HjGb+KXh#W&A25#(}fN_(e~PQYX$3B8TUiI zj(>brLZlq^{8yTB{XRBHaQf=P+0omdKfQQl$Jvc(H{Z_u|He={%IQ}9QL)YIXBPdR z^*>gCQ*}*F#!t_lErD5+^8B4&Th5xm^6AEBv8+=?UK{RDpK-^e_0uI0VW)2*lk;tD z_g^lsuat64U_Ioq!fzYv#Ox@uˋ&(<#tU$tO*$-6(_avN`4JHPhr-;|v#US+;Z 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 HB{Ts5TT~&D literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/ImageDetailHelp.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/ImageDetailHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..cd60598f9ec0a761068ca22bd8d85e3f3c798534 GIT binary patch literal 20204 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 literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/VolumeDetailHelp.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/VolumeDetailHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..984dbacc0a4e798defa857c9f4dce6121594e3b9 GIT binary patch literal 21558 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 literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html new file mode 100644 index 0000000000..4dc6504dae --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-about.html @@ -0,0 +1,50 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<html> + <head> + <title>About Directory Tree</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About Directory Tree</h2> + <p> + Directory Tree is one of the main windows in Autopsy. Here, you can see and analyze all the images (also volumes and directories inside that images) which are shown in tree format. You can also see the details of the image, volume, and the file system from directory tree. + <br><br> + </p> + + <h2>How to Open Directory Tree</h2> + <p> + To see how to open Directory Tree, click <a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html">here</a>. + <br><br> + <b>Note:</b> The Directory Tree Window is opened and closed automatically. If there's a case opened and there is at least one image inside that case, Directory Tree Window can't be closed. + <br><br> + </p> + + <h2>How to Use Directory Tree</h2> + <p> + To see how to use Directory Tree, click <a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html">here</a>. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's an example of a Directory Tree window: + <img src="DirectoryTree_example.png" alt="Directory Tree Top Component Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-hs.xml b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-hs.xml new file mode 100644 index 0000000000..0954595e4b --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-hs.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 2.0//EN" "http://java.sun.com/products/javahelp/helpset_2_0.dtd"> +<helpset version="2.0"> + <title>DirectoryTree Help</title> + <maps> + <homeID>org.sleuthkit.autopsy.directorytree.about</homeID> + <mapref location="directorytree-map.xml"/> + </maps> + <view mergetype="javax.help.AppendMerge"> + <name>TOC</name> + <label>Table of Contents</label> + <type>javax.help.TOCView</type> + <data>directorytree-toc.xml</data> + </view> + <view mergetype="javax.help.AppendMerge"> + <name>Index</name> + <label>Index</label> + <type>javax.help.IndexView</type> + <data>directorytree-idx.xml</data> + </view> + <view> + <name>Search</name> + <label>Search</label> + <type>javax.help.SearchView</type> + <data engine="com.sun.java.help.search.DefaultSearchEngine">JavaHelpSearch</data> + </view> +</helpset> diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-idx.xml b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-idx.xml new file mode 100644 index 0000000000..35230646f0 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-idx.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 2.0//EN" "http://java.sun.com/products/javahelp/index_2_0.dtd"> +<index version="2.0"> + <indexitem text="About Directory Tree" target="org.sleuthkit.autopsy.directorytree.about"/> + <indexitem text="How to Open Directory Tree" target="org.sleuthkit.autopsy.directorytree.open-directorytree"/> + <indexitem text="How to Use Directory Tree" target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree"/> + <indexitem text="Image Details Window" target="org.sleuthkit.autopsy.directorytree.image-details"/> + <indexitem text="Volume Details Window" target="org.sleuthkit.autopsy.directorytree.volume-details"/> + <indexitem text="File System Details Window" target="org.sleuthkit.autopsy.directorytree.filesystem-details"/> +</index> diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-map.xml b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-map.xml new file mode 100644 index 0000000000..d8f3b9ce81 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-map.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE map PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Map Version 2.0//EN" "http://java.sun.com/products/javahelp/map_2_0.dtd"> +<map version="2.0"> + <mapID target="org.sleuthkit.autopsy.directorytree.about" url="directorytree-about.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.open-directorytree" url="open-directorytree.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree" url="how-to-use-directorytree.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.image-details" url="image-details.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.volume-details" url="volume-details.html"/> + <mapID target="org.sleuthkit.autopsy.directorytree.filesystem-details" url="filesystem-details.html"/> +</map> diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-toc.xml b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-toc.xml new file mode 100644 index 0000000000..ab71cee268 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/directorytree-toc.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 2.0//EN" "http://java.sun.com/products/javahelp/toc_2_0.dtd"> +<!-- +<toc version="2.0"> + <tocitem text="DirectoryTree"> + <tocitem text="About DirectoryTree" target="org.sleuthkit.autopsy.directorytree.about"/> + <tocitem text="How to Open Directory Tree" target="org.sleuthkit.autopsy.directorytree.open-directorytree"/> + <tocitem text="How to Use Directory Tree" target="org.sleuthkit.autopsy.directorytree.how-to-use-directorytree"/> + <tocitem text="Image Details Window" target="org.sleuthkit.autopsy.directorytree.image-details"/> + <tocitem text="Volume Details Window" target="org.sleuthkit.autopsy.directorytree.volume-details"/> + <tocitem text="File System Details Window" target="org.sleuthkit.autopsy.directorytree.filesystem-details"/> + </tocitem> +</toc> +--> \ No newline at end of file diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html new file mode 100644 index 0000000000..0d83250f7a --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html @@ -0,0 +1,48 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>File System Details Window</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>File System Details Window</h2> + <p> + File System Details Windows shows the general and detailed information of file system from the selected volume. + <br><br> + </p> + + <h2>General File System Information</h2> + <p> + This windows shows the information about file system type, image offset, volume ID, block size, block count, root metadata entry, first metadata entry, and last metadata entry. + <br><br> + </p> + + <h2>Detailed File System Information</h2> + <p> + <i>More coming about this information...</i> + <br><br> + </p> + + <h2>Example</h2> + <p> + <img src="FileSystemDetailHelp.png" alt="Example of File System Details Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html new file mode 100644 index 0000000000..4926bad183 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/how-to-use-directorytree.html @@ -0,0 +1,54 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>How to Use Directory Tree</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>How to Use Directory Tree</h2> + <p> + Information on Directory Tree functionality: + <br><br> + 1. To pass the data and show it on the "Result Viewer". <br> + To pass the data and show it on the "Result Viewer", select / click the corresponding node on the Directory Tree. + <br><br> + <img src="node_selected.png" alt="select node on directory tree" /> + <br><br> + 2. To show the "Image Details" <br> + To see the detail of the image, right click on the image node and select "Image Details".<br> + <b>Note:</b> To know more about "Image Detail" window, click <a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/image-details.html">here</a>. + <br><br> + <img src="rightClick_imageDetails.png" alt="Right click on directory tree to show Image Details" /> + <br><br> + 3. To show the "Volume Details" <br> + To see the detail of the volume, right click on the volume node and select "Volume Details".<br> + <b>Note:</b> To know more about "Volume Detail" window, click <a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/volume-details.html">here</a>. + <br><br> + <img src="rightClick_volumeDetails.png" alt="Right click on directory tree to show Volume Details" /> + <br><br> + 4. To show the "File System Details" <br> + To see the detail of the file system of a volume, right click on that volume node and select "File System Details".<br> + <b>Note:</b> To know more about "File System Detail" window, click <a href="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/filesystem-details.html">here</a>. + <br><br> + <img src="rightClick_fileSystemDetails.png" alt="Right click on directory tree to show File System Details" /> + <br><br> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/image-details.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/image-details.html new file mode 100644 index 0000000000..01c3f4e672 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/image-details.html @@ -0,0 +1,36 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Image Details Window</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Image Details Window</h2> + <p> + Image Details Windows shows the information about name, type, and sector size of the selected image. + <br><br> + </p> + + <h2>Example</h2> + <p> + <img src="ImageDetailHelp.png" alt="Example of Image Details Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/node_selected.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/node_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..bf6e31eb56a0b958bcdd60fef40e22d48d9e40ce GIT binary patch literal 31607 zcmeAS@N?(olHy`uVBq!ia0y~yVEV(rz?i|o#K6F?M0JM%0|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{QfI}E~%$MaXDFfdf}c)B=-RK&gATRB1W_}urm z1<T+4eSGhGn$ofQy)%CQs}MGScGkt`j(Hs0=~?E2!q?x&-7a_gCfm=>8L7~?z&fRQ zqK@Lt1{D=%r%9?Qr#Bs&rW&chX)rrtR$E*{+UsTC_p+Y7bl0Th@&)d_m%0Deg+_W` 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 literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html new file mode 100644 index 0000000000..28812459ff --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open-directorytree.html @@ -0,0 +1,45 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>How to Open Directory Tree</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>How to Open Directory Tree</h2> + <p> + To open the Directory Tree, you can do one of the following thing: + <ul type="circle"> + <li> + Click the Directory Tree tab. + <br><br> + <img src="open_directoryTree1.png" alt="Open Directory Tree Top Component 1" /> + <br><br> + </li> + <li> + Select the "Tools" -> "Directory Tree" + <br><br> + <img src="open_directoryTree2.png" alt="Open Directory Tree Top Component 2" /> + <br><br> + </li> + </ul> + + <b>Note:</b> The Directory Tree Window is opened and closed automatically. If there's a case opened and there is at least one image inside that case, Directory Tree Window can't be closed. + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree1.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree1.png new file mode 100644 index 0000000000000000000000000000000000000000..a25586f31779eb89428367eeb390ca13ffc841c9 GIT binary patch literal 29880 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 RCI$uu22WQ%mvv4FO#oK}9*_V4 literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree2.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/open_directoryTree2.png new file mode 100644 index 0000000000000000000000000000000000000000..f988720bc6be6e5fc2dee476517252a4d24e06df GIT binary patch literal 19808 zcmeAS@N?(olHy`uVBq!ia0y~yV02|*V3^9m#K6Gd5MMu$fq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#MuMdb&7<RK&fFWls=2dU^l! zmN;iYZe31J*9Xik0WMh_vW{I`T!JE*mqc9t-Cz|A6r8Y1aKq)LZ4)kZx2zLTn9#z| z<ly0?{&sJESz7t~cU$*_aNH@ZjJY{??%cWe&%C*JZ(ioNSsF(dX^8!3?)~3>Tuu1j z1J!Ts&)?KrwAx#k9-Pm*eslDMV^5Yv+_}M9*0^c+M<1~r`PU{re;T;6rulczGMiSL zS-*cRxm6>@rKK5L6vzJB>yycm=~H<kYDFGMYOgW!I4<^DrzA93Q!~Wog2<5<U2kTz zt0r7`DcfqM5I05t{8<UZ#W52jRTe#4q&$x`uW`#ww#YMGH*-9X7yn3H9<oBxUsG^5 zQ{@AB(>bfS_AFb)vn98QXI1F(=t+sXkN-%l;&d%YOqQ*14e$!EUBK{W;+ZXrlvm!! zm{4o#pk}n+@<j96!&@677Dp9LbEy_O9wIxn_~JJvF`vVC8B{);t`pE&!*Ip))VWvs zE)A*&U3GjF0`ytuNj=T_mFFwsu9NO2kiJtgrPD}6uk>_^k+S*`0oCSDHw<GNc@uor zT+-j#FE;m*564RH+Oma;CSL_ToVynt@{{3w^=jw8J{#qYtL>$hiW~~P-G5+pSjV}o zJQ=HX6qjF{8SiwZ(7E%dGINXiIo?jzqh2~j+}f8WO$yYjJ92w&qG%+Ggz*t0o5RbN zERVh<VD@r_>9dk$E<E>?Y{R;?&eZbBJGi8wlDU&*Nfy(tO`I)HLah~aO*5sYE36m) zaICdoWXDv&twEiU=4<vO*FI>HvOJMJH(2as>mny9X|9XsHlAVB^bv^@%X)Y$ps6FF zqO95X!AzUw2aL97#kj<5TEZM;*ipPzr^2x#eGB^!^^oQdr#>n0+AIrWTPLA7`Q%;M zi`;gSdJ|77#u-Y=Cd5T<$#7X$X;o%XJt_Ijl9kI3r!8*zb^DUT%B%!k2BFpiiu<(# z4}M<Q`(W1b%f*6OUJtT#bEhgC@)q#bnjIRWUMT#z#b3lIM`qVAufjRX*To**k1RTM z<fq8KiLr|Jxf#;-KP$0d$XUKIo-Jq3i9cmh%tAkNS+-qKZp#jJIK=ca#ymY%JLal+ z@yAJG9+i`|Hr78;2>8sgH^TIibK<g)rDCF2ez83FO7u65IgzL?ZOZ?T)5AMk-O#V# zh<($f17_1#Gzd5MSTCB%JnKShiHo&><Rtc$9S7!%DNJHtc-&{j=J5GWR%aqV-??MF z`7(EUQop>NRJql%h>wp<UteDt_&xLdr+GYwc@A)y8y}FgNGany$P*{!$9dz>6yb^; zPnRy5(;2pE)2#W~jMw<gLg%F@e7)kryrOHF*mCxHufkopR{s`Sw~0k`!jkEWR#wV> zElFAJ!Il!8$@%KYLB9=6t8S{@K4!aIW6B<;=}SXd4>B{`T$Y^2cq+}s$eO`s`OJqQ zi3w~g4wwE&6!)AjvE<>RRa}Q&6iyV%Kl8)m+d@MVh48cH>}?w&r!*hWxl`1s;IU#~ zgUP87b*sz`As=_O_-Y?5(B$8gxpiexnpnuKV9^IxG%lGPG<^S_BW7}avwcB*Lt6O} zllOCy3N>of>I`-WotMZke&4~kU-sAr%_W8*4CmD=%8oJINtIo(<VVY7_rABBcY_u! ziC&z(n%(aHr~Adz&DPzhGqYNF>vHL9vvu#kmwaWClgoRTC)bczKH0k2JV)l(ndHwO zr04G1vQ5feN%{nr`lZF2WA>=`d3uy@4P?H~e?={*yfMCR$;Q>&cr^|4Q=<&@|6jZ? zk#9nUVC%$7D=mM-UajJsm!c`vzP9||o<l0i>;Aq{-0$|UXZr#xxr2g7cQO_(*l%k5 zf~oEDj4p<G!Iv4XzFhfYMdX9C{1SU4H(Z=N`E}Z~W(QYRuI<W4I!>vsStYt9G|+gR z$%zI3r2Fqg@ErGYRB91BWH8ljk)po3s?O4N**v$GU5z<eYLon0_|F0_78j>YKU@ow zJ{w*?vqzTM_<&@cz!Q<y%{n?INoLb}OIN&`Dl+GLOluZLj`FS@e`eUEukA?*Yy1@< z_Vik>bbI+b>s|TfTcw^_f6KVJB=qqi*RCZ?mKiiZdRO-HPU}~1^Y^ztl_xn>t-l_Z zbz#ZA2R@6WV$DCEy<y_rC{!CFnpk6bLDsaxW#thq^<!DbkKH`+ps<5mXZ5zJ32Fg( zv0ZM#JC3c;RP{2Q*}{9}Q8-gPM|?he%F9iKA<nBdG98l2Sdn>p>h_(Y%exjI<38>4 z|Fiub&yU6jEp&Bd6?!YomM>ereCe{~vqa10D)6#%<UiXoQ;;F&a{_Pn;YaeDzQmNS zRCt$DG2g>$)~v4f>r>`R^;Q)~96D&f><`Z=mw7sN->a6Wge(XM$x&F#UT|kk*x5O* zHr!hxwyTRbrIj>FIJf&&xH(K(oodgbo1?vKg~W}f|H(TV?Wb^d&g5m?bmHWkd1;M1 zx^8DpV)$uVaPiJQ?u9|AAFc9@E}s!Seo|w@MAz<0{}<niHy&@Vv)HrjeR8YqnU$I= zFMP0>ee%ge#yJ&7)bHNhRCfHG@5IB$_+9tS$Sz}#eq8qT!;*A69&shv-Ii<OeWmVS zYnr+0_(A7suD3Z>F;05n%B93BZ)7ig=iyZUwm(JdmdhLG{aKb}QxbXQPL-{KM>KQX zYgUQkRnM<GL>1LMJ@C8N?q1XKwc>w&cxwA+Iyao#y7qE4&z-~XN`Kuy75Vja!MX|O zI=`;nt#hpAulT%|Z+zzkI2>JcWbGQWgPY!MzczjUTjLk{aZ$@ZdZ%A?R&vUU(#%@h z&gqo#tVNgOnQ{01s^dn_o=-ouY$@ZChg>^en0&aJ)>hC|!WGOY_G;rt<Dv^K8t>c$ zeJ;gvwFcboZE<-c;G?Pkv+%5ez~z*ShL5kevK6de{_#wS>(<jkm-HUbEM66AaJ@gb zhw-`V?b`xvZ9bDF+7whC>o4M7dO)GG!tH<0gf@?9CpnWvZbVM!uy%Vg-*v*FB`2Lj zdE+Kn_mw36Jd-CPwV*pq_5bGg35O4aznk?+rcbltPt(s^xn}>o%AWWY{W{w6#QXZC zQ&Vf+^g904o4dbb@r^Ys<~{EUReUP*jy=5a_kUZfPUg?j-BXvJ)cYJijpx#1&DY7v zC)^4`%F}WS+`lib4Lf{kgObF=8_e?^c7En_+0>om(5J*y=MetDB=h`)1K+o)BnrjV z3hq!aEt0HxzVoN%O2uwd4aW5>@)ivrnY3Qdx|I3<*4^~$e|EmOxz_Ri``uoP93H7( z`zo=*r#oV+^0(K5(rV{#&2wRyxnP~#&mE^9J$yYauQ$$M>*Y!2bvDOeJ~m*PBJufg z%VYa9uS1zXUdTMO>BarSi<k4=Hh8-`_qwa>%5vpD^NQ+Hw}yw$JEG?BWy9_>4#tdO zZ@+(RQNG_YC&_>Ji=Cp}Zz8r!^(~mr%Wm+2x6hi_%%Z{B!7lGjl+~X@f-}B}l%3Jr zXe-)dtD3O#@&mQq9iAV<xF#iRe=(hvZO6jC<Ou(Vnny(swRr4yRBQ1OzpKjnJk9k- zp;hU=m9aN_f?mD5og)0KwOzZz_2Xe{o=J{}%#NNv<lXJXWq)Y33YTjqhwy>Eh-^+S z0h@~_)Y`SWSNwROCVw+Uj73hOxbafs?)Kwfe|)}vE^bfh&Bw2<Zn_wLYHpwYr}w<u zwappbj@Hg!apS`3BuW0uEB7nga#e6t_joLnXvm(tXv+G_3+D<|e&tf^EnAm4OIyoj z<wp}o(Q^KnxRgJxi?!7I&b_etIo(xv-%a6Owbski%NTW6WW{}CnW)6mF8c4}dJnse zNloz&4}@;BO!SH0oOt<@PT|hw%(oW2;<P$7bML`ZziV&Ac8A}7kQP0CzOO=@Xz-zr zYj0cm=0po~OwF^&X)yX3v1Ln)PDPis(N53ysHLI)hhD|)3Q|8Oy5Dcw6wy<WOQkrP zT{|Ni5(B-$UPgU?{&)I}mu?2iJqO*FHyb;I_chA>YoDPO!n`hW0-r=1^P9@UeLs$Q z7qtF;sM;3pWOl%+)p5G}&o>Ph6@nAnA|{D8+qJOH2wJR~b@f18!}N6p9_fr{XQ;lO zaP6tcHCKm#2$@jdjfEBNj=364l8NzbMu)@-79VA7P@6d~@xwZf@>41ISp0Szcw)oM z6}doNc?!!_S*M04)!X0S^W9VY_|@DWuea+hi`^ZwsibrHte+w4K3_?875&^=Ebe#w zNSwFVk{S{3!WS0|+2odGA9pe<e;cuvDW>b^(xlgHQ*YS>@60`{rG0*ePkPhspX|pC z_U_*GzuvBK|NMlXLfiZ^za{ImOLjZ7Okd0#R9;w9b$-vby{muP-Bo-rSvmd0l$g$n z?T^%VuTOZiT2NT4ZqswGNAnbG-PQ&l`t?0CqVQ<u1MQ;J#a?fJ{Hx{JB=tLc>4EtD z@h{_7+P+(TPT~Ku6QRA@<q5wxFke>+H($Aji-~tl>YMjdt^f8pHfG5F6Zv=R;|JZj z%r&P^M|*y3pK|Tq(hN0+n_Q+-c*TVcZJKlq)7A&=_mNzcc2hlCGw@^hQW4S1CzFe< zwmJpPdi(0;1YVveItrWSL_hpobURC*{XqT)%gIG~u3I^a6=Pmr+I~0MU3ki8?V9-9 z_u^Mp9(x@-pU=K~&$M;-F4Vi7sa(gqX8EzXY|RD<vwMq^*LSeC-{4Jgeo%65j|J1b zrH?P9KYx*Vk;9<pl7&^Zjhi*Ij_UKs9orYxDSbO3c)g$@)>baG*j*=N`Ub~@1xHqO zi><pAI)ApSNA%?DTf3^10<{WPdwc9_`K_N5*(f^CXK$;cvK`Ab#w9$(rip57iA;MA zRdxo5uC-#>BycPFvqQ&}oNX%FUZ?IJnY~gc$Ru|6w1StPp1wBEJ7Alk{HVYEvQ+$z z<dDB*yxQA%V{R3G-lKM=RMYOSUXFcD-R*_N_xnSivE=)H$Tst_oHAj-jCHPUPU+Rh z;y0=VKUyhj?PmHl@nq%wj%;Jo%`av>{QptVzV6zh?6pSAK3&~aHgEU;9eT{k-72dp z?5y)|p3(C<Fe#N?@5`6HLWYV3?{4@evY*ShE2#T-qyK(QzV;9AZMB~_etNz0!r$l5 z`U0PQjg?p&bI*RG^AmG+r*Ct)Z<;R;ycwmt|J|O1i_=(^`A-xOuMrBEti)MTJMD<= z;aw)HFKxZOX<K%heX!VCzQ{nifP(LOv!XTBLpxV5ms+y%%=LfWL9Z&SCcSf7#2Z{4 zUcEB+^2$@+9eYnX&zQ9(|H<y-^)sZ)er^9?9Ng|VZ^NIIr}LIC=L?*&FuVS)jj+{? zsa0-&Wu&%d96s59FJPMP?aF4;oSl>Qo%(qsJA=1{H~sJflW3l+OowGUk}7u2n6yV} z_ADi4%N=~rD>~ObWX^eK_fzq}Ox{`1m7#WCEuKF$CR!wj2yS)SG-ayyL@%L$YYtHs zn&FCbTT7I3rhHud<bvLYo$ppoRQNj6^v08RBZen|Q{Px`{AjfC@rfy%aw-Quh{P=k zo;AT~ZsFGRD{7bYPHRqEyJXp&X2WeIJaZCkj@~^yW!;8}=c~WJTe{()A=lhXGq^nJ zb&`W!Ge5q4xPf_gyJoieygg2hEkav2r2h3<D-}}rH#=xf)YoI{_$@`}OKh$AJ>z@3 zR{P`ivAuEo7rI_8$~dTz)^p!}Wz_FwJO0-NMJZ1Eee2_e59b=|o;DWDe6=^a&emEf z?m+t*M)L_VCwH`V*l*KZbNb1Fs3j`*8oQ%gbZu*SFZXd)E|fa`RCdRT)}jx$wtnJO zf6pItz2Ir)y<e$+s_e!0=~&%cH0R#l1-|+DA6DNuapkV&-IQ;)?rzNf_eS*E+10n@ zCps-O)oWekb&Op;b5fzOKEwNyy>4cL8YZW17XFbB+@IGsOL#|;hr@@+(^GFu;63%t z(V4mCpsVrrnm_wp9t!Vx<gQ<(I^pN@ez8U8JZC<TWDU7vy}<87Tt~;1o2K{b4}I|F zle@scYX0yA!xFF0=Q!S9Jh6`Z*>p*bFu}J<3|g!Gw$E7UAl$gzBB3WXcUQ-`Ies7Y zj7|64_FQhcFStH*%akoo&YXJrR4Z2fdcw2RpXVMP57cEi^V?19isYo57Lw9h&FTj~ zI7obBl6xn|ddKF@LiIDpE<QLQtM|yj#P0K<FC_=+EDNi4^zJ{PQ9AX~rAdh#EJwI< znZ71ImR>X4Wv=$D=c{k-)Y>R!7M=C&&X>ubuCdoUid2@qcGs`7`SYFoHs9QM#(P59 zvCF)kzs>HSZ@IfJW3l7cV{7h<l>VuySbpGDf2PmX<X$!R_J5*#IloQMUKJbt?Bw+K z0oVLrJ-K>rf0jf0g14u3O_)4A&^)Am(JRT9#^0w#UEy$j{>txNyWqjj_I}ejGK=;E zElr-B`1`T$G^4GzwnoZVX&EJ5Tz=O2s#fpg_N?}vS-X8sU*G>`iOg?)AC}yur>})? zJEo!-S^VeeWUu4u5q>2dOZUz;(01EZ{`OJX(e*x+r&I;c&#UH`=JD9Oa{q-0%Q*$T zhBtp~zPrE0?I2&>kLjMeUW@mqTy6eyecO2%qowcXOg{Kpd3pT}x!3J`%Ulezy}OQz z%rQBz#_qpjaKCZ$gGkou7)Gn+d#pj1jCrc2IsR(qV+!q<ms+&^pnS!GZHBjOSpED2 zgcqGSR^aVCZ~7`P>;8ftGc>;aFRbF-ecHY0q)Xv$ExlDDU-pF*&%G@q9+Y+0$Xqtc zJ4LjVbN8|8=#0ZR_6SZ=?(~w$2=twBj73GmMW?yYvBB`T@dEMwyLTCnv2r|Dl9Xj$ z@^Siy9)DKBGZqtgn<a0k9$I+nN{U6AqRs<JIcH;s#~P|%CTQ3R$2tj0f1EY*^tN~A zWp7)2kLz-#Z_|=D`@ozS(;2n7@5*W6KUonMs_)kXoDct)`Qu;TMdrx*9XgjS1lu-L zbp`6y^;A`U<*E3TujKT7Zff<Bn?I9940x~WJUxA_u{pV6-;cZUemu#%eT%!8o~CB8 zvaR`j|I6A3sf_CBX1q5pZks+`U2TS8cD#+WdCxtOEt_?V_jg=-b^d+l4~~SIPhPv0 z*8KhV{(aT%%kI%?U-N?c(p(;ADDQiIfL(RHOa6@oHn9t*{5<uKzjoQ%y-DBlxR_&4 ze~WAUV)(H6+qO56JEy3o&CH*ls(#7)ddAJ9$5%cGPcVPDey8`8?^#ue;$rh9mQUAu z&z#Yp9{%AV>$$%M(L#RfZ!Eu}9k?oIX_@Rd-(Oz@ybo9{vaoE~%HA<UR{hu;=BChv zvpyCk&UTph<D2WBua~`2&wpz0sfcSdxZIZWrp30vL3abgH;=6nex89gGY&V%?q&Y7 zp?4?Otq1{*U+vQ`Og^ChXTuV?1({rbisl%HKIWUv9A&zF&Ds~0Y;OD(DNeC|g8mOg zuWXrf+wxnh<hH-_r!O^Jm(g^>|3mLF*Bxh{eB|Kon5pYhyrOcF(&2n2<GTxIMk;tS zhCiDrcw1(Rf=kiG3uddnKfCd)jbXl|;U||XdtF`znNQYpUi|oj8js(y8JB|<IW_nW zNU|HueCEKya3bx}@de&d5wFq$L-#UI-||PRVCB=^r<?isvH~`KH9o&b{MhPz&G6l| z3@p3O)+9Kr>+$FAxU~C<Uh~^y9GCQ>g!n!zRl4K4L3eHO)w1rW7F}!E^%WZhst$Db zYVF^#?cnTO!z^a?n<YnPCo;!<TEFK}$j@}U+ZGlz4)JEELQ`+_eBb|jjpz^WV>!~Q zTZ*sx`L5>s|Lt$&{4FdFZhzKiJzo|#clOWvFJFFr^gU&``@!WDfe&_zJX3%EY3%(q z<LvV0>Mb7<t52)VpIIOA!>P1J=7>z{uAA#0|LLs0pM7n4@B1H??|tWfiSg{(J#(W@ zc>0T`W1r`}zrF6)2G42R>tFsCvD16TuYI=8l)XL2zF3rfCPR;6{MXfn3!Hnm+XWo^ zb7%jen?ZXH9x*)Yyzf=?;(GQQtIyv$?&Ee;j9cn#eVxPci|$^$Gd`Yt_&w2JjdyqC zZq|%Ri}+l6)<$){<o^}+MJ(qW!>{x<!#zo#7M%2c(loQ`;eVg?9uo~dI3FlFBGkb7 zwWY9!gY)UE{|bzyY(Ed%H?r{julUo_lsv;V-{)VXRbrd?Kat71v+Xwfs9dWG5$`t* zY)oce*eQEO!;ja{;N8Lp?9~f60&nhq`uV_)&#r<28f)&K*ugc^m|?N*5$3d@nZHHj zq<qx(JI#ySK09q)+wn;(4&U^Dxm-E*e*gDXuY-4Ic0W?pnlXjRwY$=+?%3~_r^=O; z7r$G&<gT}`UCDzJ%R;TQuV&wSdo)jCO{3{^;rJt$qdw+Hw$BT-KK52>tEzrzxksA6 zvd-6wwrb+fCh$+2sPVP`d+VYXr!LJ1>bdRVpV0mHZuXK*b!WRxRderY3UOMje<qwA zT^hL0{_;_Gm#CC&ESv8nbVn6to|^T5v9!nYniI<$@kq-$?Xr^#mWJ-H+U}~k%H&+n zl2wo1B(AfGQFvpOIc1IY=2V@61Cets*n3%7yqjFlUU%tSyDwid|Eh#V60<#-_8Z7{ z`sy5vRMmNRVCVdv`jdJyg5yFTNq<z2ovab8JNK1`XR7~P83}h|-_&Qal{15O*!s=s z(cL<=<H*NJdluy~e2p-A@}c2LN;Gp}=u;2%P`e$A6X)6(uGj44_251-J95>+6?*KO z<SuJysWiBRTw~D=Dvn_M5u|C?>d;qug2CqX>hzs8{~k@e`}?2ehw!CRqOZ5V3s|=& zesf!$>AYRVKW=<v{>{HWe%seqN1yoBR@q2jkg1N!$(Soy`6D%1ovUo;k1Kq<lU1~P zdA|Crp0&<5>9Uf~{G0RVq&?b^xFe_JlHe=F9~(3_dhb21@jC45I#1Vy+cGvy_!l7} z5hN#bsrVneu6OtDRXRKSR$hHPai-hL)H6z}PP!gEJ!!-ASF1I|uU(nBMrZ!*wY#!1 zQo6ZiA9cBS9e>XBDKYC+^=EU#q-i~~6DqSk?{DHc{On4|H;&GSmb@R%G}p{gZIk7# zIV;p&)v~XE#ry6=-<46J3olFcUE!FreG$W!uGEJ&a;^rkXJ#>Hap-PaDzG%}=0+nk zEfxKai+g-hl5`t{dv|JXI=K0YQl#qIo|Lnh_q6YK%<H+{x_`o=D@?5$R!5o6&3Ce$ zvD3<HMtSU2{Ub-@?uizDdjB`{^^bj@o@IX*TGW*OxA5)$DGhS5(ze&P6ijRqvHa-3 z$YGdsd5vaUdW)I-y+<Wm`Fw*#{Mv*)P2z%z1Mi7Gy0l9<^X!%t6LuX>bk|xTC88zr zMIo<pYq`$rX<t_<?g;2r&f?EeH)kpN8~M`W-FM0V&sR#Re37_h<i#0$@J{sQ+dnH@ zO@%H!|M2?6l+u@1at=K`IFrZuLxZ*TB0i>eCc_KCs-AXY)emy`6u)l#_*CmzujHzW zil1M$ioCtN`@$2RpZ2}tmsjmIov>Ew#HrB9X_F3p>RVQl6{f4-YdKxv`_VfmCcQWj z;@QYGeZ{6#A30Vzypfy8d*%6)uUA3>>sRpVZmCF%%HJE=>bvNg&`FNuL>ZHrFH6OD zIpocknEKf9#O5BOo!b&#<%hc;lrfCGaNzavb$_eP-hEhCyHVXwR5NhT!Ogv|&GG_v zWC&Iraja!{^ZN4!E_Q|=lh|%-es(}?mco|!*NtoUY-HgGbG;+7Los$*_*SL`U$jgk z!!IVpC}>57=I$(DVf0yfS$(BV6UTEWtE42Zi`u5W@*i}V9xW1h_q)Q8qoz0QV^@Tx zTIl>)GY;kNJh{RD0oy6%^waETGH&$j|L?<`BlLVq&>0nxGOtU=B;Q<{t>>~~@7m74 zraqsXO<k_0U19W|6}RrBmAG!r)+@zV*9kes%4GCg%66$rt+CiJTQFVov)O_|TV4;> z`A+fv_qt~E{a?|asyb)q(%|3>AI)nXR-BK-@9)3hAeG8cB6!{;Hz4QNv*bLcT$YdL z=J_fKUlP5X%=gnzbY5W6pV0fR8>dar>IuE;s8_j|qhQ7L6&rul#?EQ!*ZlfwVU(_R zv(n=Dn;)c@+na>B6icP|8csW>zcMr6T1!fz%NmUj@AzJ+OcGcU^14;bWpPAStcKPU z&6!^wx-1r#az1Bx&c@W%K-Gge`h)lTSb>s<x#>;jy;mR45jv&#OG?Fm@5KvU;T2JH z&&-`;@!`c3=knmIT#5o$U5WyWEm!LvO;rhX*6P%C4~ueIzQ=XV@3gX4hi`MFr>&ef zOQ3N-k0;ZULkzb=;=KIdPI{dz&REyU8s{u?`N21zD8sA9jFuhSBcH5^;@1u-$hmlj zQBvvx<2maGjN4+SwY*YZY@d0e^-RgDm5(mhMQ0eCR!*6#Jh?4m+2pQ#c4H}HJsAc0 z&w+bYL&f#GL!)nqdZ{mx>+_kS%=`ZIjG4`|KCEYRiLmx;$zeVieRQ9Rq?3k}%I6>6 z3X(>j#3nb+d~-4IccQ+;TMNItDL0NSFSjV4Y@HJIxk2n#V#cvZwv1hCdzBl{>8ZVq zEy-Y;vnWcVEx@6-F}V61i`^Q@?F$wKYU~!>^j0BgeNm6twP-2c+d6w*KIL6^^2W-L zwJR-_%`^1sajUGTac)xOYkjD?^VB(xN8U*jjV`E_aLUK8dbKQB+H-c=-^w=ISJTgA zxvslq#AGbIXp6=sqaP)lmWfer9O`|Um$sHFdnHVE^6q1OzDG*x^WtTK-?~019PAFg zwvEHmN0axaQdnPjbC8}Cqu(h#Mb959CqJ<VRroLFxl_vB(Us=#^78|awL4YRdUe<L ztm<bvt750-K1G9n%g(TZm~0uQ$lxbp4PNXfE4!pMpS1rmo2fWgV8!BhIj0RSEjzR4 z>f5DdO<A!Q7kTb@z}l1QJbA^+m#t15D>)ZNUUvy*FjWv<!<D|4?`F!@OCHv7;X90; zy|P%+p{V2fxXUF@QB|%$v2Ta53QJ)?L0sXMN%!2+%XgShsxb`js(4mgnf@%e$(ff` zV5`sK50YH3MC`+62R}N%HaTifA%}N{_u6Soy^fsHI%TtB+O0Ar)1_jfZ+%ymE_2DB za#K<$@T>Ghg@(09&9oh2C%4CJ+#vF%apSf21(vExljOPBkBDAfUhsM0b<b6j+jPx; zPw0v2a`6jNPIoxvAS>%P|7X-rHjd|QS<AKtoS5)qqMozKtZ((b{+r69i_h+}vQ*3K zc5O`2vto?0)|<6i->~`lH{QunJuX{Hs{S09xA<ZukNcLDMH>X?xn3?l_HasouB!4` z*(CQI29I}#E}Ac5`^dZ7Z%Ketpk!g5j>6A1rWbQ!W@&f)o#C~>b*tDdw^V(d*Gf7% z45dAWd8vY~)xn~n8?#kZ0@a0AyyKDWd(fP*@WPjymPRj^Ez8{cEas7S@x<vq0xsMq zzRvRsVC-i|Yr6Wwp|NJtwk$i3Z*SZSl2TJ!Rtl_Hm2|D6gHa@M(%cj^u9q`*Dk;9; zyqt1*gX|2p!m|_kr+WTbm9Tch%3_6U2SU!ztz`JU>&b&vy_px9X1ARDzjD)3Godue z*2i4)Dg*DFGP)_ywNvV1V^^GHdzL=e=Y#PXR|@=_u04pn!S%KNn%12l&fPs3j@AnE zydS&d>^WxC^^o_V`ohSkQ~dWR+EhO%is!BI7S~&F?5-J;*pJKiHW&tL)m3`G&e1zQ ze@Vjqx>sjcapi4In0x)&)`e>8Me~0Jdpc@0n0AzeH4A9@>`REgYET${!XrO^Nzsb! zuCXOCE7i9(U6d%bZEI=09`kfx%xm@;NjEaNs(W?TTefbwJZEP~aQ^dLsS{CaWiqCV z?ERv#Dc00NEce+8t*G#n$!-$<S2+YXUsB3g=AR)aw;@L)r+BeKvwmXb(()j|19KZ5 zG=9jbI<~!};>E9}+1m}RCwiYvoM5W*A;H7Jb=RxQrtjj9gx{&_h?r8aaI;WYqqbVW zZ~Lq_3*0(wt_bKwCG@WNR1q!Px@e<DmyxE^lrYD5_ETr-(w+CbO{>}#Hj~l$o}I*} zzs-sT&D_pRZ7iFV7~9e%;`9HR9RA!mq4igQnYM`hG8<|0JdWEkWj{YXy|W^ul}nWA z7Hi3y6JdfzX3k8ON{q7ezORjM$oH3&o_ydK?`vnXycMy#%T5L@Epk>eUl-qhL;m9- z?!8uJujWX9;hojLfTg73-tN3QE}gSEIU0>0A0NB6Ci3&f<62Wr$=V#2Zk>3%e{NUT ztZ%C8ZYSlmv24->S+Hhiy*_K0zJZxq<8}6L@4wZ2Kdxo-F7lSKxeC*Ify0-4<NbdB z`Tan3r{nzvKRLV{zBh2i?e_HZ6#so}qAGV~mu*2>$fuL}%--APlnMzQ(6u^oWu3A` z(c;iJ$6(!~s*j}IMUwV-`kC>4mDw10c$K%yn=qENwgX)HtlVNZ&9}x0*Wb1K(eIu2 zjy3k)_u7a5Z^?_Vy?po)<2$+51tP02Ep(H5_`-GW%Uh{ym(JlnJ8jwIprYo+HQO`Q zOwIm_y1f4SiI?s06O-DC^>-JU{LHxjwtoGF+OG-kzpOeO9?vNsGIj4KzMUWLe)oB6 z)f5~Z{Z!QCYLL@?&Fg7#C2X!+-k22BhirMGl2iLZd+x2wh_fQ?yN(37N2xCQ*}j}# zuJv!b_!PGM^{L10zpZEM-m-H~^?_t|^N2s5^IO;QK6=NvG@?^5>&xX|0d<DIu5dnG zZ#w(jg_ko|oM_v3tL?;wvdC=B=P9|FR+_5j5+^oX>(68A*q)s5udKKxPW033HLE+z zS$7?_|2FrX?6!|rwYDX8PmcCWl6k%}=l!lQuRD9fnHIIp`M1kbTXNHy{L}rLrE`1b zjdxt{{wr6%C+VY*iQKm0s>$zH>HOYXzVu8`*|fq}>B7rvH#@isW|_pz{B(T6sji}T z$NTKH&d=}r`1faUgp=m8<>Kwym)~sbP@WbuIq{j+l$Fy?@v<2mf2TY(YR~tjVYAK} z30ucpotO9X#`eelg(a?cn4W&tjh_8Bx%{P2wy~8`Mv%+5@VXT4d&;R{T>rjBE_107 z4A}PV_lHW2-B&&&P5t&(T8Hm`<8kY2`qeAFiyd1wuX<i^{dcPUvLg`_W*zg><XSiN z=(XHKvhkc(*Hk^P`?&m}@2c$w{;sY~GPSW5Pd&zcnmu}XxT@xB4%482cg{VL*=_6c zG4Jv7-@mJ-yuCTY*>vx!49nwMe=NkF#($eCpS*Ly8;?*?(<LgLDQ+TRpSB0_JpZ-8 z?6tr3j%_Q}q^&XTn|<#@wld?tSoJ33bMjNIm#|t)UHSI(H~+Fn+~;k2Z8-j`JUGwy zuyf+Y&WQ(?{p?OQy}5PCiwN(6H+f~OoBp5IpOO0i&fD{;QjhHCbN{fYij+TE&m=Hk z=E0OT{;U1|r6)yR+-<J^PS~SUw&;eELB`Ez1=G@=|1##Cav@je@z31)S*t3er!sxc zy%Ckeb5U-`VViQ{Io+3I<M(}-dA_{xci)k>(VrdPtgt(+cTjh?xa+YF`LthpX)pVa z_~x8^>7Z%0_4CJX-5s{<TRVC~cWwW~#ZmF{NTkKxlWRh`W8VfWF^moP=jgudOqot- z=#_~NgU|82`taFu^6NzxidO{lg!JEA^fu?K<7#8U_?q-zG7-G<lV%z5NEF;!bL_5; zmxJ-)$;<k>d>JirJ*@-}f9sF_=(+Tfs2ofDotKxrj$GL`Z)=TBHg8Ocg_K>%!<@?k zb1pV*GM`~2pcyV}v5!Ae<e$*QcLywQuFBn|Ep0Z}_~<dWpVi@_lb?0W(rpj@`^tT; zUAocRTQWEQ>CP+s&9<~wT7Gqqg1z2!-}t=b?A%SA<&SpjJ=?r|@zm+jW(TAFS@(WB zbZ~Rw%WwLpdi*P|M;bo(I)728LT$0zxlfm;-CI<9;nLZM%Vb|q5BuKC6}oa+&Mm2G zJ+)1Brsq_)@AC=!C(O1zxiY%+<zkm($1EpkO?D1o=(_d9H0Q->K|=+m>8^>&lA(qH zw$nau+q|6LDr`A_@>^xef_v+Z-96*&AfDe`b|I*)#?gLR_P6y57BAbrscB!oua)cX zDGa$~x07dj-(z~68$HJ-ZT3C8+Vy<0KC8FC=eU{j>fW)_vnsRsGz()QDnh=St$kqe z%4v??;#2&7^IC&{eieK+|EG|5j-rd2-p@oKlh$wgk2dk^Bu{m;m+AX^!ere`<9nCC zty-;iYo&;D)RlKLPKe(&o>;Z@?K+qCock+EGG6CiHHi{j*_-6Q>Ox4C<CPk{?n7P9 zx629_@qddlRx>*lwRKK*U*Yvo&Wv!WO{D>S>k8IC3cc$e`6af1EiY1N<2Tm{e;*u? z-?sVp^QQfOoX@#$w>)ve@8_16DZgwo7F}AoxZwO1V}|gA(~90QpUzDW)G?Hqe`Ak< z*X+Q<x<_tr=`;ENjX_z<e{aod&HcIeySM-Q`>|cLHhOzO`R3}0rF*XSg#KC|W%_RB ziyfasCUAIt3H|cwM&QgJzm}`Xuj0S*XnW^;`87`;ADz6i_`9j#)Tq?xm5XG|7O(Iv zEZ+ZHcZKZdtLwTBg&y6ooL?$T*=gH?RY!8UEIoK6qWQcX-p_ye*L&v^bCcF*b95O_ ztUu9w;H34kS$1pRhi?_Rt?sn{%1O4J-+VJ$HCIoo(v+}T*Eo6lo^S2~*0tBKJXV!{ z^!9hsFP;;dg!bP0nz6v--IaB-ct4j}v>aL1%%$4)`11aF7gDb1R{D7#aGow{{)X+e zaeo89S)GjSnxezIrb?IH6xdN%#XarVJJ*SY?_H+t$a^Xmf34>8)~rpcZ#&mS-9Fbl zHNC3A{+RBD+IZKOx7SWBy?mnW!1c793~#-ro_uK1b!+|ASAN!Mf|}y43!eu>Yuqhd z#2+;`Gsd=x!{|fYSJgR;%ej*8oY}(S^ZD9l{^e$?Bh@la+)h0GOyzC^e;BCVUm?iM z&a(I8li;b|Q*`D^3pMJ`W4_6+zW49jHxKSC_}_5x&Y%5W@ju@1NJo5SeEj-h((zxF zp?tgl|MB%ZwrS1g>5q4p<o=BI&@1lmUmN3>t8!)%%NOpiX`M$7&sv#t^V9bCcaG(= zJvkM|V6O2rQFKA+ULK3*j^5{wSM1h2b~}37`Mq`BwKs0waA0~k+x*?l&2L-h>4&fE zx<B*$OI=OFhyC}(uCKnoBG-C`eR574OOXSUn(jP%X?qiP4?7o?f44S2KC!UYJWu7R z+gz_{I<e~=AFG{x@Osv<G!KPzl?8`CpV)W)DNks#*F28}ua}(vv|!HG`M#%`gL;&T zT$rqE<nN@ckw3O{SH;Ii@9yq?-qB&~s<OB2u+P%^1wy;!ttXh)g{_aXO*qi7=Ba5> zrs{&~xUH!#!`n(cm=+}NY=2(EduvT*NAZg1tF~-DR$zBF^})@$!=Aj&Q$L(ntBl$8 za^9S!t<h0sYbX1gD)Zkk`&-;FZ@omtIn7MzigOI-FLui1<+1KLrPX>TcG6GT`^#g! z(p5H1beMLy)OlJEQ%8FDr8Q!9>#H_A&aJro^48YumoLA`E?vGneW6q9rVCp(L{t_P z8Ktzm`Ot7d>)yS}br*{7<-PmC80LN?IQz<3r=2&?1U-0i|K^ehN#A}4Su@|(+twFq zba_vy#r@#^=bLwI&AO_U?NY29UQ<&OaG_zxj%HSyHxtq$jHk}F`+Iv^ZlWyz^ldL* zys-cGBl-BY-0gmIG%8<<J^11F@zK$&YdIHJh0eFD?US{3`}<sXW9zN!1>WA9lU*)l zJ+tYt^?M@d6+0<VP55b>15ZNwDnW~Rv#))s$vt6x$zI;Fh~)#1bKmv#@!P%m5}5Vn zEi^gPLQ3D=sXWplIP;O3p`oFo;=y(5GRA3VPQU%m_li&c`9r-cT}4+|iw`jL3#<P> zyWvQ;xc<KX|9<~p7xi_~%{v<>d~!)#s<6j<g@(c0U!QDKlQ(^uJ^S{92MN0Kf=w&@ z&YShz{cN0JEVBMCi>1PrHGK2Zdmq-!>V7D>ubcT_WOw=s9$l-q9OwOQzlL~tbS&Q8 z$}JwZyX@`u`*qeSCnl^6UcO67>cEFDFE5Mh|629vv1ZhPL)`yG;>9(W<jjcLQ^5E; zVVP3Z{`%^RuPUA&ZEbJ&ulV~l(X;dX^boJ+VE?d7?;l=2UuZ7cwjp}wS`F)cu}cmY zYb7h~4GWXmRIO6JQ{c?~z18BsSU<e(@{xOI5-GB*F>85N;;h|zv%b%7-?#bd(|?=S zuh*}zRM)ezu=sIlsrSN#3+w9Y7_RVy7T?`fI=@z6%kR@dNAErrIy9?a|4|detk#e> zmtUK|eRiny+&*7svlo-Y<Nuyg-ny{;QQhR^8TFd8YGtM|OY?2h3Ho@4@6p>UC7Vwt zlnFCzdvxi*<}if~b(fz_er6Vz^MvWx_SpH-$u1AhJxcnMC!06xp&ZAy?YXy~sYvg* zJVhiuKkVMVT4|-{Z*Olu%yErfzGi~ryoIi}t9Od``Whd<>uF!E{`b$@Ejw<nG~7Pf z|L(5u-_P!@zq@Dq^L3Ud57#Vin0$BAt25Q}?P`D3H?!5oDs1(%VmB^eJ+_$Poj_4@ ze%oC?eWra&<_OO4omhW*Zp_~7>K892x!NAR_iuN`JngEo-;;8m8F*LMf7=kK6@Fyi zsc629Oa2EfX406tyEwO!W&XW%4*8h}dV6ngI^R3_*#}+D?Qd$HFZG<PW^gNHOUA{o zudkn<V`=Q%mT={kt?Jf-RPTqgLc6c5jasrVJh1+KlJ6dGlh2wzW3~pJ57i3Mw0t}N z_OoKmXP;M=m3!}T^(=0CzA^b&kMHig7Ooo)=t(4TcV?IE;JKl<DBb+%`H#vg9@lH{ zczk{9=1tmOlTWt4kJ-)l`_-)XS2c}|rd<3exAEhzX^QtE6(p>drOe)$z_IB_&zY-f zZ0VT|3Hgr==I316a_XInsu9aJ#!UB1#fPUI=l9Q^cl^rgaQ)ez-%FWhl{`GuYF+;B zz+wdnJw9&k(*l>?sotG(%zMhO?y1YgwXce6Ulr4?>z+ERd#Y8p=>PlN*WQ*Jf4sId zw)1(p+L1RN78`XRKA6@byO8s>naZC{R*BaxwH&QKa)0l`4^KDPR)3pO{{9uCsBbbu z+dYHV0^w_3+*>Crdzo)}LE!I%Q}0>?xEW@AlPL=GQ2(&{@Z~?^YZ*PCYTRU>GHYu6 zw$*Ze4Y>}t)*ZPsqd09h-}wn5$9Bo^mZx_3tY%@z{26mSGOoN__35f2<4gbkMJzsE z{Ub~==E8H`{#TD}Uip2>__NY|w!Y20`EM@%5AF|?ud=zW{rAY#5ce<j|NnkxWSx5G zB+nU!s%z=%A~rs`wpR7}I^7F9jdx~PGz9P9*gog0Y2V+ulLZ#e<9iz?yZa~m`ujY` z7bbfj-0t|};EllCQ&Xh``8XG)murP?k-7bG%G-;dZ(W?aXvXT_LQmIwe(jznEqdzR zs+Zk;sVSjNQvzc`rkqtiwRJYH^Wtlvmp8S?SSBCitLE#Se0cfKZ!Y;?X2!D2m5%P8 zwpPkJ`}il_!~ZsSUooD3=Ioj~mTT|yZQ8#)CP?dh$@jX`e@_O=rMg#6kqKRJVg*yH zo2ZWIs)W|S);(_5vMz0{D{W_Wdvoh5oBd_xj`VpyS1z~Np7U`<*x8U30V|)LW<0s! zFyov<t~;h$o+~#08n6CW?3nu5ywxpzxf?d!UTFQ%v;5I??RdxUQJwR|Bhr1p*WZ}B z#JWr9N9m<k|GXxjS2)|_(7IGUKG|}ay~*2@^=6-MgfQQbaCH4BX;k-MQt84H&6?PP z{~wk27_aLPPRqG@dd8gBnmiu6m9*Q^BY0+&E;9XC_U-ribyITZvh7<sRcN`&ajSdh zwKT=2g#6`;d?ynw<TUlQ_1%T<v-7=ueYgIpz9+1ld#L!<T<f%t8Fxc=Y<S)!y5TV6 z(`nn^1Q}mlH@o?xfylz;*N%wqIvcS;;!?(?t<C(_eVtADk-k|0TVh@=dRoQm?&2Dq zWcE+eut4Waj;TvXlg{4*evBT+tB>4Ruz%5w5QiHq2OIMKR#wRGvMah(;I;Dp+8e>2 zZzUdUvt2IR?vu&ka^0=rZPyWrd67GKop*>`wNKywe~s?$1v?jbU*5)We&zqD!&kZX zR?I5;eP?R@;y!n|f4>h*+u^+W{lDFgJDCj&l>YPe`|iDb>5|vdB~G%Mm(mo=lO8=i zaNtQZyQc1r)Eh4)^bYBICjY)wpY!xZ*lxWymPU3i2c9ljWWKI*#nabE{hpTQGPz3r zsD3n8drQ6W3SYIE7ng^3-d2{dsPR(y@pFb{uz$(>7peIizQ^aaY3tmYCiz<1&t*y0 z>|oo{mXyP>w?(DD%)ePK74i9nwTb1`dO2aEXZh#%$N&HLwNm|AYC;0T`DfZ*zfzC? zuAerg_<x+0sp_|L|L@HD|IGH!^;yDdQ{S2YOnJIk-8Zcw-s$_-=-AAjZE1J7V@k4; z9xW|<8{{|V!m?&irr9EX*I#D)>7CVccWrq-VK-mx@0lM>r=87vdtz<n@2de#`)6s- z%QRend*kZ;|GLcdm&MDs>6xc}3-4wt+w$>1=<WRr*8EHRmbEmydhX=&JKV}<Y)m}A zv%ZWgqiN&A$*~_#-ZD93zu5W$qZRw_^TyxKT6{gb^67e=`5Q8wj#Zd7_WN$QH#NKK zsr^xzbkAP9;-`-)J{K>2weRYRRr~wXTUX8NH(xIrpz>kwc`p0iuN!6`J@{BFqD+5j zg5#=%WhT25Hm9-f*|R0)pk~aLxvS^?+P*pSs$A)-Q?{G^q^mZ|+XQcEQhyU%%YWzR zCf)B>%kI9M&b~}j_;tdgMWSwpC+p5XsJJ@2L;F2LiEg7TyMkkxxxl6QZ+biDN8bE; z;LWucjiq|mvyaS}b<qCm90Q4FrrUQn)~6l$dgex4;kO%S!X#DN<{qBGw%2&|i++!) z%hUJEHl7S$`^w%h;lqr(+4~k}rCZeRj@p`4SXlU>;^xE|L6?Hp-QO2?Zt<MkGUiWZ zr>#1%+*Pl4&l8Qm+3WX)t$nd7Q@N5qOhfip$VEYqU5QoND_;hSGIQ^o&9y_c`q@S| z-FaW)>(UO-e0@BBshawmII-OpS#RS#%epJpB_5t&obE6)zw`D{tMa;{qg>{*!#ABd zc~ZRk8_)Z@(dWMB1fP8?cka7RfcfRmwp-gC9GoM+E!F2@Z|n@&laJRHFn<3sYi8Z{ zD-N4Jr!{eiKIq9bIj8&k@ALV6f4<z9bNtS<-I}}>%;nj4b@whSdHHgwtPzXxW-hhv zzjD?ZQ&x!>UEZVXt*H7a?Bf(6(f3Q{u8-LB=m(p!by#NL8i$ACtF~$eDwv-AbARhA zJI<GUY)3?%&U|)Oc|+HeMYdVj>xzCBaX#D4&VR_S=b-D3rKv$~`kM9sd8?Owk@IP| zWBclg=EL{%3pHj>KR-V?t-dztRsaWA(f)w78V@WsCz##Yq}|1yuf1{S#U1B%uKPao z?7!kb@4%&V7kvqzV%F3<uj|vQMHZ2A+*Su#b(6#|>t_n3C91OS>&eoLz46#B@cR@- z(>PzBeH;FqdG5Zht)}?L*3;!mmvqIu#XWsBqR#}*jjwvSbbdf;Vx0PepXW9vbAEmv z{K%S}@5r`nc59gnqLto3m)RDbbpOBXuISHO%RIk-)s5J`?yl|TjaA<+x$D0O_|n;? zy}QnQQPwxL$(c6`LQHqeGc8QD2-nF@k-rwR>}CBQ=KJzlKkNJ1_ga=c*RnG-KKy;Y zanJVpd;dSLeilCUm|0QuLKRk(n_iQT-hTRT&NsaSXaAM`UY2_5=5oF18n-{KJh%SZ zkAjPx;rjP2`I0|nrd{4!vi<hTJkOJ-w!PfwKK)Q|<nQS1>tgTU-MM+&p}6^rRzCMX zHzROO<!6Z*N^Q&u@8-?BH{1OFy{)ewy}0Op<hR6zd5!g{X0O@Ycx40izSKvCT+_)8 zown9<n)jK<R#Jtf*P>2+`MSyD!v)>fc5JUFzlr#%8+fwre`WHQV-HuiO%Fcx*8FYw zJ-0>gwf^=0j`!OC<-By+JceE=(^XS`Kgzc+is;_Ged<qjts~RE=6p=qKJV(jA1_mW z-_Bfq;Nh|vzU7zi<S*NyuC_aO#*g<Cd!Nfrv?zY&6R<jL|D9c-Of^O}(+`#89qpQ# z&wSvgn*V>ningz9mwZ`QO$p=LvF+Xj)z7tu)@;3Vc>3uB1>bI8F-bn^`66`NifFle z_4l?tlJ>m#^Y?klU+JF5O%5;VNlQPvO!W76-}Y`^h8tD;E~K3-H(&Mp*7_-yv7EP~ zEmmC%7WJMY8It{b;cD;m_iM!W?U*;`U77aL$5md9tFQZV$M32!J9V>)?Zdt&*Z=-L z@9C-8tM^Op+}|y?3S1l~R<Ny?nfu`5{oHaH!P8&T*08^DNjX;4F!S2-9-|riVkKGs z{oHx$Dchmn=TGlHr(wH){=?trwdUP7)%^EDz+cPr@#Hxd+EwfB)qcPG|KIQH7rkOX zFg@!I?l!Ai7cjRd_SMwiMgOOYhQDW7K4WS~aclI-`n9v_7hk#h?enwL4^yPC8CU%O zdi}V%n%U8JCJ$z+%{*YZH^EogS?IhT*O93y1}=qvkM$<`K4kp7c!y=-{$s!9SuPb= zHgol&hHJ&84Cfzj(|i0nKmA61**?3@lyi5V#4Si@d>Ooa|Hog_xz@YBcpN#oshZ)3 z++M3ayEjB^Zu6g}|EXf9(pg`xk1f^h=kHr>$vWB^8ZUl(U#|L^e-jsGB&fD^3acMm zA9?w7PTn$&4`+PW`4<HTmT8~TD*wLF{?CNRuk(fHX@{<P@xpa_d%`c5Ye{L$=Owk) zc60h{4x7(b{w3z^Cg%3u$*(7;+^9cS@Yg_hN#d_B&k8DbtFv$0Tm79+>dOAm?a}M^ z2kvvbI%(z0X@@6r8t>orEq=>)`FfqzAuA`nPCf96?L*tQb8m0w&#{U8Ay%zZyWXYq zl4<s~oV&k{ipSejeaX1@_-5&|&k{c)omalTYWU&Jt~GO(o1BfQo%J)_cHYCT&;N@3 zMCY?wJ-7qvicZxISBc%96Le=@%_VIOjTPzV=S4=Z5tk^~7nd()Q8Go<`Tv~e)TjDE zZ1aj&?Y&`~KKtdoo(i-1_RmG?x0M{Yu;=f$+q=u(Th{6Py0P){2A9bD`)W7yq%Gh# zXlCU}EPko__Ri`VjyESbY*RgO@3_EvFRPk;v)%^rFtxGpa6V~ex%1#{dey-$U8S@f zut+-Rf#0Dox6Et&_V@Xpn8kmNR^NDW>6Ms;x?AT=;fPs(*J~7X^UcZAYP=|^e{q_i z;hy(VJM|_S2|eA);&Zt!`SXP6>-9+wCT!$h&UgOxC;2O%{N~xrRDXP%VP0lkyHoqk z$d|`Y>MEKt)HkpA=xNOK!0F5!OT)u$8yDx~=}nn^Rw!rF;fjb}Dbu1^uNHfp|MK&E z`@(y<(l$SDP1yLD?U1&}v16(e_&?0izHnM}(YdW$A97a2_IVsIsr*=XG>I!C#4zK; zjJ?^<pK)AlZ}7;oaoqTQ&nYpRPhHQ%J|7l-SnKb~8Rd6xM*f6l;ZH>N)^GPbBcywX z$Hsi|8WzoNv8zs5VUio}JiQzKJxTRfwBY%<%g*v<KIdD`ZxtHDe__(OYY)th9e(GZ z?CO(qVD|;Ssso9OrPsWx<G7v?v(D#o=}P7_71>w&W<3?Je5=ytGQ~1u;u%@Nm*)DO z4UqxUmnkJZGGWbg?(66@E?yB`SKsn`#Z<2Q#|63%*<^**2fX6eoA6=T=RI2GhJh2i z4%Do772M#lJnyrd*sLif8D1&+EnDs$sX5bQoq6W%{k_a(H<O*h+*x|JzuWiQe`fo1 zrd=$W6R)w_X%rd%*r3e#?Q3X_U#iWTstI42nNl}q9?m_v>HCJt;6LJPmBUy0^IR;^ zXWcA6i%I{O#BFC?#>?v6N(prl)&ITL@3l;OZ}qR}(x3PBl`FF67CzOQqFpxs*x{Vt z=f7E<3~AnAS-huxp?Yd<0>^CU_M;KsSE$;~JQ967GkiVQ!i@LNF5Zy%GGG7r>imW2 zcWm6a*o6#gx4mH4@$7(`XktzE`CFD#cs|(tdz;w5>4KPk+@AvvW?t}moEWB@^eSMw zRZ!a88?)2D@i#rVnJ;G}z1eBy)ry;c4;Gv4pZ-nb^{Q>}mYuYhWwhB|{p_Tp^YM4T zinocK|M*d|M*6R!m{N_HvHyoZ0^J6}q0Im9tPWrAlVULG)?|l`Nk{M8DNJ6?xGQqK z+xg{X_LKfgawU5x*n2SqoH2{JclqOW)lbQ1dFJtQ+EfW8B$Sye&P!Ypz2A0HU*zX~ zHy1DGb?g1Sn}y+I&d1ypZOS(JTz74<udQ+Cz5R1<EbqV16It@^?Xk?fv_#JK_txC& zymb#PPM<kkeoLoD(T3e*k>6Y&AD=Y=3!AF!%N(yCzq<ByQv~b!p62yxr<uhqZW;9n zCyEpmILj5yNaNd-KH=0NmPP5?b@R4vo%^<6=T{xENzZR4nC^b3|HZmasqEVs{po)< zW*oad|L{g#apSaetXmH2*XV@G-BvsN)$_&qG&jzlPaYm_KR@s6vAv~wQGszkzY67M z-&>Kj^4GCh-qV+DedevaK{H)4FZ$lg-@%9bzsKDATzL4e{2o(#wZl9!Jrj=RrfpjF z+WJZ5WhqvxsSW2lK1An4n+60*`P-i2JM8}BN%lg<8TV`7D>r=Xl{QZlS^d4+@xv`6 zncHDmZ*TQJoPAx!qM+j2oYoK0V!za5Ha4e!`<Whf{s7wrA=Z{?UX2NTVk(B*yX-z5 z*`b?M=(lTY>K);v!_i^V>P*WXJaSDFmPrjfSrXf@B3*n}pESE_(98&nygd?2_LMF8 zm-NhF?)t4N_D1*1o_KuO=Xi#*c>C^3l^BVc54|So%skPz(ojA(D{r^>`_)Sr&OBDH z`SSA#ztH4K4HK8VzW(t0wr8*TqTcN)d;7!d|H0ztHD?uUi*K!FzSp8%_JOBc@<0<C zLx%hPVovV+M(KR>(-)onU%X$vP<sE>bpc7@Wv{<~*51!>UR?j*r&H(u?$X`Dr4&_O z<7)Zg;btkOvduZN_uoG`zI$RvQ9|wvg`x*b-f!>uvgKOzar@s34+XvXw`1Y58O)}~ z4&?4w_UBJ;>Ba9`MSBmu^-8#3xS#dRW4%{57H`~?f7PvH@nZjj<=ffIN?*#xO{`6` z?l@J=!XI<gwz7bK3vZeJz4y~9N)JppZ#TO{*YM+~tE&%qGcEeHjM=7N;+xyywy*7c z($+8k7Am{-wI}aLI&Z)Espq8&H>2tqn$mcJ|4Y`)o#QyC<guR0TVs2n?VVpAvc-As zTq-9MyIacc-7&-a@6%l^3;xXTV(5S6-_tYae!EcVyh@Xkbz&Z0U)~i=Fb`4Me&hP` zJ@VgOwA}wUx*Zojf6rS<dHR=cDrv96b(qU-<=anAcv+qwAv*Wt%fETA-PiwFzB>5D z8{?!y4yp2cScLW#Ufp*r*nKBUx~t&LNIh51ca8UUx^GbOycx6Sz0$wTk9)q~`z>+j z)7BQ2glETm#nSHYc9&1ubWh`q+~;o}&fEPhI&ffLfldCu{<05qrg6#U#5nWVy;*l( z!>RV?)9Gt}pRaKZ$Yt=$Zn-p_?Iz>D`1f~vk3apESZpnr|C#^czd!d*J)DqRSho3y z?z`yK$sP(98bd-@%6MK?hCY*x4cz24w_<^x4Ij^rEAy`xm*1EE9hkge<NTOKOJlD$ zdVRQcljoeR)vg=%*HYL|e!OS;>qWHjPS*|9AM3g#=UfSoud}ND=F}kXTx9e)*gXHV z{*>1h&G$a-D9o?@e6{?+OmX)Aw|4t)-}?H^*ZGpOE(b}@l6@fgWsbqiHUE8*GdUEj zR$SRsYy0%XvfRP~%{<Tj%jf^gST1K^ZC^DjzNb4;yFvTg<|9XC0!8B2dx=f-3T6{p z^MqA?Pn6iP6~>ePPIKr~;pi*>YG7>pA}05F&*5fw<yK`y<pt_KCs^i$df8>|Ikzb1 zmE-NbGgkY)Q7UZsvOT`uF8kP?NvhsURMqzz{<u2(dj6q}xn(bO`(=OIb8Vh&l4tUK z_k(q@Z@$d8y-~!r<hR*tNdYT<c}p%u^BN;3UFP-5R!2;~cI^m#Id%Rsx9gI(R(=zo zu<YKCuktplJ^7~3`<sxrKGnJXO58Dz1AoJ{B1Nntr!4sRb((MT$r~*9m6s<!(sA&J z{<B$rjePwsV?iaW=Py_Tiq4y@*`@LFj!)Q9uc>!b=I3Wv|9aQo)WBDE*E&0!XYqs8 zi@Lu5*#AiQf!2?dlJjNyb`nKQ9_!<No)(X<`S^Ohc0!8ufj=d_`q9_i`enGRW91G1 z@ZNa4DSwthxj0W-Y3{SHzcy_AZKkup<xAaF`~MsGck9LO68Uvrpy={T<xR3yB_}H6 zmCxV0^{kdhqUT*<&8v%l{#j_9XYpX&_}#D|W48OEu%p2Oe039loiF*-kyCj`$gMDl zNkZkY!?gpPKmXkPRGS$*!{5nq^VcW2J5+wp{!nRk!|3wgGv71cdnZe@HnAL8BWT!@ z%Asm3wBYCM4Tt~aKCbmVD^Z!&lCi{8<wJu9gWAlUo4>0vUjDH7{-?c@&$_Y7O?YN_ z!$4(%Cg+TQ+Y9V%s^4AN^6A0D_irM9%ch!L<3GLn>tUm-5&XGH$$vM@$%?wnZZFfc z+)7r;{_C@j!rfu#Csova{#s`l>Q=X8vb6Rd>HGC%OE`BbzWuYJ^yc%MXP-Re%jQem zle@-$Qf;M_2oL8Sf6fb^R5sK}@byT}R%CQ$`WeaeU`pXq#mR@lu9=&G77u;e%yLJE z=NLx@^SSQ}6*vF<n;!dZ&M$^9wF1q7DSVy>c++}k{4mL3zF?_x<;=vu{qaZbn9tg| zr+zQK(AUxR=8bR|+ahE2U+wy)Yvh+5sGjs{wkUtRsQg5!%HLOw_Q`(l*s}F;)~5GI z51l^$W!?v6{a$uQ1_3AbSNk}*eGaPU%&89&yVSBa`iQ;ANsS&kUds!yt1Ew+r#{^F zt1vQBOy%(V;Hc>-wT}LO90g_^Y<6RMQ_J(stL@jjO^Wkura6@D`_HrHl>bSs(^vid zPo1|u{Ct7>q43);KTn#tcgE6&{sW)%1KZYie+dt3-@t$2P<gUwM4&>>G7n$*^;>_x z%=EPBXH6BEzLDil!dHWcf{wV2r!00(RC=yD;p}_+)BiT#H@Uj;^m*&U+ZQ+QGDtbJ z$mj4e_J`LO@BRDd<KlA+&)+@Xt-L^T&Q0-!53eb)*yet-x7F=<zDI+n>*iF3AL$Lo zi*BaXPI`06?9=lZEJnZn88>IQzx!t<U%mY_!;%z*w1Rg6495cvna){AO*iqEWV*Pw z<7BLc)$vuC0;kro+)3EE@XHpHn0ZG&oWD6WZQYY}=Gg9Kk>x9MyO@03eyr{;xLAAU zwEbr}<MdlfpRRJeP`u1=?!iRslKvQTW3Ii%_ZhBycv=4JP^^ws_^Moivt2Ac`RDI( z&wc)UcDSrr)}Oqy-;-iz?%!Mfe_{2>liRracOK&K@zIW15pda!caF+AzFLLXUV?pI z=X)iOetVXGyUyV5x9WH6YX3(z9+)jx@-lPP{N`z#CiCmtzueN_6<y0UtMyLU{CQz+ z)8{=q&Rw*0Zmid2=}ToRAGGUD%=~i3)?o6I>d#t-8P8{5`M%od$mef&>!)f(Zu<BC zs$STZ46!3czt7D*?A{-{zi{!>&AxBa&a2ffn3*W(cjFu{ukpR(C%j+JWSv{Xv1v!- zj|2(5mf16T#UAE=s4wjj(=5{WmQHDT<8UN!=FKJiKB*BdX{)lAn5s<RS7G>U`*5dm zqgL_f!wmmjyTv^Hw(b8@-WJ;4GvRKh;7PUG1ck#&Mk$v(5<C>@JsbA+C2qV><@~d| zxH%e>J=Ulmh?~4be17i!|8trz{rc!`egD}Bqra@&KXx68T$YexqVgfYt6}foGxzG3 zZC5K!pKVvWYw`MLscR2No98i{1<f5x3RQHdJ~%e-l|caWs^V1J=9$Ln&nEpyJ2PXV z_mtvJogR)UI)R5Cx+@l~3~7F|ScUPxCicU|w~OS?ZxE>W;`)6mEHCH7Q{BVf&)X7s zXZ;LkT2?MDvrS{!I^TH}*>9?EPpkJeZTxC$T=P$6U-I|Qb8j6^R&<}reqQHb%#MPG zg34|YOIy0@^KM+(c64)@rp3bbtsC3hkH5IMSoY(CJsj$1+0M`ZoWJ;)`?=yjubqAd za@>4=(<Jd>V8y#TOHT?bANRYlOXv89oTrw>{O47g%I{SkU#GLF=lL7&YYP%Q6yB>k z_^-M#$$4h&zc(${BRBupwZAfKe$Dmi=ZsHEu-XO*9r$|q#lzw}-hBI@PbON~9uMlg z9BQ7h?Pr`D+_UHFwP;J%Q?6EiyDsPj8BCHCs^Cz0;CA2U_}8|gqGrC_gH5c(lNK>Y z8OS|b@p%sWQfXHSp^616502UYKNH4(I?<zF#!{$lanbH=ZRzK7Ii<gRp2%|J`~2ed zk9p3oC_3*gJ<n49<;;Uw_dFW*J@-4!_-sS{GOmW{=a$Zrm}fbiC40iz{Xz|2zZ@<4 zwKI(K#eFgDFdg=j({&;*y)b^hz=k)7znA5LeewA@+W%&%e7%*u{^^1fZ2WR_ny>H# zwXw)aac=mja%}SR_GOm6T{e$|67H`TV!l07TD&<jwfx;3-H;Ul*Hkzp6?adbZnD`^ ze#fZ|9cv2no*1coIN-&wFTQp2;U8<x`+Ru$>|NQ57xv%ZsUCJ-sgpB7a1*njyKCBH zyA4wk1!t~UJMqc{hq?(3FXythC-zR#^PMMS`R#7*>3xdxVk`G^P0GFfSN!*{&}nSP zZvLK`m$z0%=bdLxO1oW3`O=O*7u?wT+gM_zHe~)eq`ctghq|jPeD=jZ&Ej;k0;TRx zUQ7b-HmNf9zTf$L>Ve)O9?mC=SQM^3D==%@SsZwVEz_B)Qi;(_Ce>!+Dd9lrRtcdK zrJNhSt8O-#H}&-#NmdCV1C<GpoD1sD-D!S)Ml5lOxk`eELcdDGYu=}Uk#2_I!H9J% u2kd7b;hwzHqTae(J23#HhC%hi|Cnt$!L{KV1Q{3@7(8A5T-G@yGywnrJ@Xm> literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_fileSystemDetails.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_fileSystemDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..aa90ba13c1aed398242c3ff6975bf04dcdd0390d GIT binary patch literal 9481 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 F2>|Ad``Z8j literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_imageDetails.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_imageDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..05b922cbd54a65a6f76c579ca136b84914a9dff1 GIT binary patch literal 9122 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 literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_volumeDetails.png b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/rightClick_volumeDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..991eb80dfc48b6b1aac6e76f40078430daec3327 GIT binary patch literal 9563 zcmeAS@N?(olHy`uVBq!ia0y~yVANq?V7SG>#K6EXdGU)$3=9m6#X;^)4C~IxykuZt zU`coMb!1@J*w6hZk(GggfwRCPvY3H^?=T269?xHq!oZ;N!PCVtq$2L^+}o4y9hrJy zxz_(<cJH`DD;tb>_-=+Qoph=#rIF?Ffjp*z7SivX<r20#d6;?XS|s!c+gLapkVvXI z`t64i+wI5J`{JJ`RUc!E-_ZN^$Ge@i^M2awGpN3zTe^K$bdYye=92f;v8(b;g1%q8 z`114Rm(#ASZL{;qVBB(GMbv`Ckp4b)ckTtOzhpS#f1kd+W6Bk#|DWo$3pKa0GB}7I z67+exh2clMrKtN_S#F1~KNa>gt;`Wyu$5!~b;GF_n4~!LleK2E3LFwzbUf6J<22hG zzxb97*A(`&tjrN};K=4Z)U9%MuK9od`X9`($3qIZJp?Z8(%u?B&FLq%xSq}TJH_{Z z|LcGE|5*70@oSS;uFdQVYHyDEb9H?k>+YTZ-_EOvXZHW@d#`q4PG#0Z*L_J3)^g7; zYPAs3QCrlLI#cZG>7XerimR>P39~Q1r+?+{5z!R>n=jU>7t2qWu*$}ERlMb*=YNCw z)h=sn4?5l_yZDW)ZPlAIGmYE%<r_=CzR>soX`Ip=zvJi0YfE#aI2!Y3y*Qiv?R{&k z{@vRbK0I;ScQ9l6l-h@rd3nF@+tSTd9JWUFx6s;^)3z#Xwe))J*EHdiQ_Q`t$;;bs zyzkXkiwe>y7HT};F8^C|1ABw4eVt6*?p?bdhT9t4{qeZao|Wn0_Mnw3Zkh<p<M*=W zY~gOXo724`n=#>;T6|j6xtrDRy{-QqzaaYX_MJCNo=o;{;tSy}@|pA^@x=e{_g>$Z zs4z0!s=Ukp#p9#JW&0-P%(R&3;@z}r^Fd#oD<2!4<_H}USB(mG5wVU-n4c2ryn<)p z#IUGP<D~)|EOYGs|M}e9&c_(|`}VB|<>&A1jpER(7T1ewxnKPJT%goqWyMneTkAjU z)cRg^{$nUds+8zGj@CIc{Bq*qZ5nGXERu-|ns74twr2H&>8spXHs+ePMtwNx@}09* zpz8k*#U~d7&zw1splvgW>*tXVrv#O=<1SpC_Ic-GzC#>qx2#I*dhqo%L-hBF%GTxY z<Mw9?uUUV4hhUv~&b>9Q6Sg@u?%j6I&r2bvv+V<i=bCuO|D{2%^WSG?RMe>5Kd`-G z_lfxUPfx#hovWGiZ0GasYeU-Bb!=$nP;9j+T%{K>LHXj@*Xy`mU3;@CasGvFTSkFj zWxumnzP*?=uV!}rdj1&2N0zr^18+UsAa*EYZAz$d+6OC_L+$lnj=b8MZJ(9L_F-1| znuh!S*S55|99nB#&eW(Kwzld1%JrtM&J{Pjx5OX(XM5+@p}V}i_A^hKf6%?B_v!mP z@u*gt#?{94PMfm2KlJ+PRRx&aPhI}X$$aPWZ%<7Fm))sM`pTJk_~Jr`tiG!6PFv<4 zJ0j4vLy&8^)9#S_s#ne27jNBkX@9S~Ucry%cDdR6D>xg>^Did-i1lc=@{Ln5ZIj)@ zCfDwLKiAgxwr#N1SgR<oPy0<;^dIf={TtYfR^Ci}yt_ryo$cn^Cn?%ag4256EMc9K z8?tHg4u$;P3ht+*E8MnjQjVK{;r@n{Sci9~nOcLoug<qzVtHzJr=824x?~2kg#umX zQ<ez$9KE^ESENyOx3yLExjWy}&(Hh$@4oW;J|`X)re38)anCLO9@p<~`DM;<<VSf) z^pV*2J>PG!m;X=O>d)}A{e51-@2g5K3nm}yXD?J)JlS)~iA_7APyWwivs}N*%{SNZ zjqs+j*`GR`cIuyezsVy<Nb;VUe6XW=S`EK+&0d$AXAdiWx%*qt;Mz(l{dKBm=RPbx z<gBvMPVujJ@I+mKyXro#(zl(S`dqW+tug<^<&`dl2fVlVpZIrl>Y*rwUH&r`d$Y=( zs$Q1(@MRt2xns+?q&Tb%r=DfHSnD*~u6dJAv;%V@`?5`u42oNNT=zXP5!ePPr)pMi ztTB;1H0j)irmV%Rr}7x>_Okj_wu(7$Kgnm@(WKDwbGB@Mhu8x#2ab!<7nm03Ft!v- z(PrT92MMrKD$v3EP&$9l$3xuu2bSFD6cTB9^w2H;?uN>vtFEQWulL*L5ILdYYnPbD zMAk=+KVDr~X`FVZ!SZgtx>tZeSMvk~=Cv_<%T9lb{mabUdBnPPfsO}*rRpl?kgex* z1^5p=pI<L$cdqpFv$KsZoLo+Y0zxTYp3Yw*DY4?tu2SufGjuh$g&h3mUe}&i*Qq1G z@08Kxw8fKUK{N;0Xh&fYBNep?Vl12r%UwzvR$bf4n&ix}aGAYp(<6?=xxZ!R?MrD? z5s;D+%safoQrOv|_E*Vaj?Re}HZ&PTJL*heITY8-GWkfKq_NxC84`!YJ&hg;DC%_N zFO+H%JHc{j_q$!%${g`^Kc9N=2|69#bv%c4qeBkIL%!!*FR(Cv$d3Ol)f#Y?<LKnC zoS7;no$VZnjy2p@4YoK4aja)k?`WLjz_oDJMXr{I9|aUm)>NMf6W~^9{NUyAsaC7c zVMW>&ro;*x7Y^=6(JR^(vL-oOn3#NN)vNvcIzC)6#MtTMm$QLfi2*h)9K5gPHj5r% z;z)GVV!FB_9%M*`Ly+>qSr?O3cy{@AP25m-cjuh+c`Qypd@=(j<(*k^bB#lXdD^L$ zIV-l_W7?=FBO~+2#-y`f<4R9}P3?SxKY@yFP9@)pA{97W+!qN|N32it;Z(F+qd&cR z;Wjm~6D&>%{dVeG_!6JIHnQkCwB(wh|3V!BX{QgL@;0;R7p#_CSh4Au#=Zlw8v7kn zb)pnFTiSz`91)mx#6iYC<DzjuNS;^+Z{pG*%Na_JA5$g@D4sd1{=vaAT0ySG!1(A) z<Mao;7tVp>d(J(j=T^rKi{4@Ss4&N>G%Gmx^3LMt3JX*{AgO2ZmNkWHRjWegXlhMT z1*e6BZ~I;?WSznK$dTh{T;)?yj#SQP)-6f_0$uIV`%}M0%~+;+v!*?O>r@lVnuIM5 zojL;2hlJ)zuj&%hXk`^R6ci$?6?qy|&F?Jxc*iS|v1NnE)fTU7n^*-7MXigq*&Y<Z zps3?&x^U9g9LAOn)3U|SuN4t<;P4LgU6G<2&7ipE>8+#1+W3vC5$H>B;$Fa7w7tQX z<NckT#SacJ&bad7+1cAyUllAhs`&d$;13^9%>J66ua<g;>&5K2a<Ne1d+`zGMXX%8 zjM)N*+|?NNZ`-!5^z}90`Tvf+UT=PO#z(b3`+hu1iHO{{C-vqg(c))ks$Z|&FM3OE zg-nz}Id?>}fJyuL{W7*yf8K7t|MOk>{_hW(?Q1^#=C}QGVex&5-)rS<eiVG3B>MVV z-ml9~!tJAO*qD?&{`Pi#k$td@Lezo<VjDOgK0Q7C`}_R=pH6SKwXMDIX-~<=TQ`lx z6D(_A-8se^9Tm2w>gCb!X*zLr|Nb0pl48E<#NE@z%A^>xKk+e7Y}4B)+x@??p4{2_ zncZr)^)3FlcQ%&)-gbAkSzh$^vd^zVU)#ss+_fq7th)UAzn`}(+kUU+`xEi>y!%{s z*B|@x+gvEQb3yFZnT;wEavYl%vKno6P-tOza5j4T71nL+n#GTfoJ{o&e|KYF`uTU; z&d%PJ8?it2?=Jtw1JguTi|a@2OZnJUe!uen{`uAaPCQIjR$O~Ag5&6^IWq+V4Wbl! zS=TuJxH@;@d3$Ta@^elK1+S;YW=EUX?y5Y#%KzHh$i0b2KZSCOo9NHjpYm_d(et*y z|4j2QXL05T*(qOMbZFs!dkg=<=KuDJWkE)B?|V+}*y6c1Z>Q(lBVjRK&drrqe3R33 zy2UuQHJEZVuKxSmiqR>7M{1D(+y8$D_dGpqml=1-=<U{JuJXFGKR-Nlvwr^n-~Ve1 zQ%`3pm>GP0aLtPI!@{2u;rFIp^Gpf%D88cDE5Md?qigfQpYtzw2q?)d&TTZ{SRcFl zSN{GV9x(~rxqXM)i<ZVW6kI;GmO<_d^Fq;GIWLdTmA!j6*8TQvzOCzSa@@W@+p_vv z_2&8izrMGdV|$;&$uRC>h1-urmO=|v<xd_SzozkoWL66tUL31h@uzCD151m;+$}6$ zIp5!rYZTa?{5vkA`%tb#M1yle{<UiPL!bVwvCQB9RnEcU@7Mi)wO{q!Y7ZUwH?JY7 zLS;#yUz32><`?a;r>Z`Gcbb<k(UM-O$#LkRbom2M1)KI4?|#+%-e&vxncghx=ZpE% z^&6h%=bx|oy#BpT%m$We%U<UH`}e)RC3<Dz*}&~vHMU6ab$hAuecwv=eqr5KHSJjb z{uV!ruNp2K+%KnmT{gv(<Kaq$3Exg0U;AX|pJ#pF)@}RCo_KTj^5oak=6<O7u-^FJ zw_8`PHy()p_i6tj`D>Rwp6@qw{=d9>&)y~L{>=1M_;Sjl>DAh2A8WXi8MDuGu8)1) z8h+_P>x{}``&st+f+c?vSRctv;QVp$@xhtK>1StsW!&Tc`E~q%wteq{IJh~s*KsZ6 z*9x32w&B~cGjpw#dwY`~@@}m@-t+e%zg%U`9bw^l|NJY`d8hrB-d}m%HhEsnr{@j# zjnDr{`t#%ChgIJ-qGlftzBWbHHTT1X(tO5jfhN_3bANs~Z2#-q_WhqPIQQH9dXe03 z|L^^W_d5z7KeWB%F8A}Ju>YUqI|?7m)&KdJKEHO`yR&_44%`LYH(EBV&u4JcJ*cnq z_pfM0vq;_gxVMrrYrcK^c6k4W-OHD=*KK6Gz?8w5#yDGGQRGFYj7Ao*6Jk!keB_0r z7<2`a8gmp~E-z-iz%&sg+|x2qv_bL$(@m$2Z?4=6Se0}q=(cbwDcU&gDO}8T`D)1O zbNW89!j*i>Bz@w8l=J(l^$*YFO8<G~`jO;r1MP$=tF%i?Vsc)1F1i$<F^zRotHCs_ zsa{Lj<x;<V=Rai3JBh)mVmsTstS{fb)s?D$-D0xo`Zm8yy~#!K?o*9sSJzZ=@b-&N z?A<#_puqCuw`#M1xI}^bCH<ijXIL&{-PC%)MksE5h~JzahYs>5DI9pNx{FUj&bCbF z*-Fiutm{kLJu?-)#H@cJuu1&Wk?=b^U8j^kekdFB|Az00)%vrxiEY>e@~(;bj|&eR z!k@o;Y~Xxs<>lx4F?&jWa_M|{e#c&~rts61i|6^~+g+4ZJNw*V9{VT3&Rv2BZh0Ki z`ya(|@|fCt-J(}p|0t9cv{|(su6;hoRYk5iVRB5&EZ>IrVs3R6`5SjHcAR5#>8Xn( z|J&_z_whb>_Ar&#c~hlsvfo;W55n^A+}Kxmb6xM*<Ga4g<=nowvE2LjytBEx&EDO< z$0aRZZ}9ZY%Z`)tcf8+`{U<B`-k~RX;w*}<byux5t%{Lv>Ecs-=*knP7p&#IE0gh% zV#%?Y9=bsbpK9_?{MJA7nE0LIojEDoigTK**y8UTI=9g(#Ik0^V~5}K&hN6`WmR7G z?&gO4+pA({PkVo3OVRUbrgz(|&dsrrN)$MseCPBY55c7u7PLz8F0@jJ=t%W*5K`>9 za!}s0G9~%&#K;TD#ZM)AJ;YuXUY|LO-=y}zY;%`pjlS(?Snb{`+;oyq77AN!ZKiW~ z|J%olV}I}FfAjj)9p=*u`|h%T%e}k5_Uose_5VJFh_v`kPz+A+V15<(UX7dMsK$~< z;+zYk=47p&$F$bKGvNV?<-@aqf`Pu1gENDlyqZ{Au^~s%#QepD1lB{bzxT<y^Ou*D z=DfeLweI}2sn*xb^P{itsl9xP`EB+2IbHh<9|v#<ui3fy{bUpO*2M4oo-JGEsQvYC z#`A!#mP1Q|*0HR#)KWN5`DN3ki^u;hQ@MU>e*7`RKgW9FyNX*L``%l^+QhlRKjYnj z%%U{zg_SBT$D40o)4jJp_iB3kw^I3x*H#<W|9(*S!}iL))w$1aJ^dVKUu|V1r1kxC zg>&FOLuE6?<~=dS#*6d>Hu6m~KDdZyVa0v7Ic?4NS5NGod}@hwX)*VQOvXEhcNWI= zcKU4iCfItxVrgye!uc!Ch)+6pa6`@(P^S6y!>RA~_WZd&);#_(@!PrD*$bR^Bqx7f zzWRCokBW2ebam7H>g2pbW}UI&TRJg_IrXZwziB~Gt4(W;qDg<tq(TLQdyPMDyQxpq znE0c2=EaLQzXi@c&=I`p*0!vMJvoYJUaEXB$Y?Z*R*2>hc0Xh^Tcp&T`^aX8Z34$G zvlcIAeRYZHrqhgQ6&d4Vmg$qC7U=E#Jhx<<z_YablYYss;uSkEMYlzQQ*g5fw?fNJ zrx~+rm9wRcMXoXJwDe5mp8_f{5;sl!>Lz#1rf66ClXSMd$1QD@mDP>kq}-a~Zx?5` z+|oI>Hzzycsv+Ylv1z?`L^ks$-s!))IoQ{D)4dac5-l4Z$$l-_{brwiwmQosn;L!1 z*9RW^o6Mf^kK<j2()^0IVe6L!Yb8wlWbvw#Glcbd-<}-;3<?{KlafrQOFP!LZC|xY z$FcmH4gcPt7a?cQUgxe>_$_c~`{lgXK_`yCJ7}fpe(iX3!Q&Ixde>cUp6-!&<gU|- z+guMWDk!^MTu|Dt6!<Jmb<w81^)@e8Jxp5PY+%FxW@*5|tBrFf9usMCkbmC9x?oKT z<G!QGZj0Nr9MeNBB47Smv??mXtSDF~n&bVibN>zG4lDXtZkop?A9g?QF8B2`a|ca9 z=Q78#mCKeK+&^W}3;{MbGewaC_OC66#ms{Q&o=U!@~8V)q#lUS(pbd7(Yhsk>l}~i z^9)QqY{ESk3tfqg34On4^6d5E-yCK-RD8asyNjVE$5!Uh6y?_o_uagDEAz8J(E;X+ zng_Z*oK8!pzxbRs>87YO)51$KtxA5EzG}IOi^zuT$!c)k?A@%^|9rO&kJX+|aqifh zbgM4L$=lX#z0Q5DCnQoR^pdwg&e10y+H8YG6~APuYI7{@zsuaku<)7p_jz)f?$^5e zUc~)S%{g#e<jIw7E4UU)Ge355GUvLOH$(m?2gl2=hwc|oK5YFpw*JX?)~uzGue+1E zO0RINS<Sg+!)eLgjUq+53&gDrFRcpu`ZO?W;RZ%6^P@(M6KbEyDJe$xceK28yB55k zeL3Uw*1kE#+$LO3Yu9Hes3hdHev|876j<xDQBz~<@h<{hOq{zOy%iRB+W-F7p#>70 zrLx|dWuCsl_nHzaxZko$O+Gw(@gkPBp_x~A96#!@;=o+amN(Jg85E=YUkNXhiuC_` zZ{gA1;eyv>zE;Kjs+Q0?{KagUVvE8YSNo@{^zX@CxmU9Aom}B(H?HO<M-KmPc@#H+ z|L6L@m+hZ#>nN1|-ICRCR?NvwVNHwkjG~mi-IH&5d_EVk$58q1)9Leqb})GS>G*za zs>hE+#-Kcx)Y=6#IWwb!FF$ekrs(r$j=|XzRg2w4)cB{|jFs7Z=F5%;=Czee*GOut zsp)2G`(>1<yxr!TqDZL!hhsdta^)#|T{$w@)vie!OFBkG$aO7_Ffw}0edx|Q)iT8% z?Ow+lmv3J$eD&*<^VO$wJ*PdgD6cfV7$uj*@`^R9ec7)jgF=-a@BEmYH_y@qw$0yl z@8{Ek`(GbsUCofxjW-WDAGR&f-gkxI3h@<lt6B{7ygNVNZq-_6!uC+TeO18ysRv&j z__}a{D)(|8`=riqX^Ao*rOV3<gw)d3JYbb<xgaLBhVOfL+m>$8?_5H0pKq^?STCoj zV_~!H%4CH%t9d-Vjo5cpEKUFMtwW1<y8*X~vCcQn+{(JfCnp5>c)nJ8>*yygO<1}= zXm7>N^dHwcb_iZStSfN(*3rTRIr4!b&uxsay0mNvl6@yDv8cP#f5VweUhzw-9u}SN zjaGJ)EU4bW>eDlSW%vy4^J0fs%H1dTt}(Yty!?Llk$H``*&kjgIDbGu=b@j&=N6s4 zQ(yf&ZF@CZS;zmgF>mksvX4rq)y!-z3n?so`m$}~`Vu!8r6BfLwh3n@`_Ert{K@n6 zoNF(#X3Smn?qz#;%lTrr%zK5u1=Q-2)y|&yHA5h4U)>><5Bvt4_tgBl^lSSCxV!}7 zUdtDWy*)j%WctBN#sPniFP*n=wz7?Jfce7Kzq?bM4qraq<g#;KZqb4nl`bb)JRDW` zYdFjDY?hSNeG;SPeAv-sQq{Mt3X^>Y66FsCN=C}_JDvT0b0))jp(p;_ySA#-1x%<r z#j)?kgXV&QAFKKtZb)SBGz+jTUzz^l8HfH;m;TP~SW8{|=dV|#+_3)k^jw9zN$`37 zo69GaSb(fqYCHYZ1A{xe+jcM3>I(RND7?Y#VY9<crx~|TRQ*r?zo-8*YrWLjWWS$s zCc6c^a>KvJKeh7Q)-Axt&{A6@(V|;8J^Sy~V)1IWcK4R1SbcM|KQ)?yTd#C>y<5lE zaM}0WJ-bIYWhYEt+wnT(anN=Vk(=hJI=c5QmU>ULEZpc{8K`hVB;-++kIM0{LKlla zvfSU_l;pEOxl8T6PLj0lkrM&>B2H7Ck4yfM?>h4{*kY!`jQ=O93>JT?z4@WPCCK4v zzW&Eu6Ran=>{%B6GN->qVBJ15g_4Yga~k})_f)>-V-u=&6ksa2{4H>XWc4{KS3ixd zB}(eSx1Rnvtq{`fu_I{FmDSDLUH7axvOmpr)^x`ey)BD=bIeP*a=>f8rZz{hT;zKR zrFZ79?;7n}Jx`Qly~e}|p*C-fV%B{NKOgsIr=88C)AtSE?mL!Q{d?EHD;D4UWnDya zGH2{KA-uceKxOL>tCI)9l+3v#WoA0fx}fwzfvZJnp4u#>e{)*OCaE0VljCxzHh34$ zTVZo)2Z<}{Dk81*2{yJFi9$w=2LC61eInAhz~cUz>ACOor>f-kedFbee<$0d`ed2R zS%G~qFIUgoc_DbG;iL0zbN0<#;Gw!jn8P-cujTB9xfNx*cL?naJn>-q%kT!zZ}PFh zE+<ZY7y4V<^^@hDDsOTTm)Z0QyBhpkz0Y2h>TLPhzb1W}$<MUC-+sS&H`VLD`j_oF zm2a-xnelQpPy8#{McpSCYfX!c+Ic7Z?<c482YLlFf6F~uCSbVdt**bRiOp4?K98Ee z%Fi!sD17szEaK&?J1^emwney@Z`$kly3gmKz`K_dl)X}IAD$~)*)c(w@2*8||LTQH znl&z13d~73u+Y_X(RJUR^M~eFm>>J%Ic@KY8J;R4>{q1y@+TIh?9CQ<c`oci@5~MA zB8Tn<-cy=9drc1i+u*KRr-lzn=LMpDVj7<ca>u<|JJ0U^<#<^^bF0_64!3Tc%>5&f z(tZ2V=WW90msQGq^Qfv?v_0^~ZQ%{)Qk@QpIkK~xUE9DDa9DTK1iPS;F6-+|>ZX1* zt0rn4>wCS{z*bsKPlQKfe%*_85!b#&Iep2wakp{S4(nMzEE8u<{Q7O3*T3Iu(u$lF zme`4$wv0%#ZSj;fnPxs+wb<xz+g|G^>GPbf`+Z?0wWLnl&Y-=9m!l>3T`*n}JE^iK zLd&CQZjOKcfsQ~C)6d6x7B0UYWM(MD)be~iZ>#>xxt>!6DlcqGIdQ@wK>v-UV&9?_ zs=w|O3$lNWdnLW^MzradA38GUT$U}Y65Bj8Bh{AwvV0cHtEGPIU#}??><SiIzWqjd zmBg#v%Y~{pzH9ob8IWDMLU6_OZIeqa_qsl^OWgTFRK4of|D&Zl9;wZK;i(fkpF`Cm zTR7Oc*J1CKmoENKlQcJOi}b0yasPh(vp10eo^!71H}+o(nwTOivuf!E{~0%~c1IhS zb2#tWke0C7HL7FIuci$<?nGQ&!y$0&)7?3py-TC{X1?Y=#8P`GsDI7&7Y?_ct#JMM zRcF;cg&xuTBAH14_QzJ9vX;l(uXX=+ir3JIRaukHRLJ(uK`Xd!^SzETHlcd?Xx-(~ zk^DOa4oNYID=(Zkeaihc{id7tl?Ht{@$$pOuPjH^%sW1D>Kh16>%Q=->B1iW8J}i< zb=datL{%bBtI-y_f&l%yiu*#f_Pm@e-r}wPL6FBl)YU!y_!PHK+t>4#U7UL12&+$o z)YR**>RdmkTzWh&|3Kg?Zl?t2zkYjnw6-3da(_+vlNo($zV|QucD_K6SCM;>&g(+E z<32{$FHO62cLt~8Sq7)$&9>jHmiZViy5O+pqGfjx$Am_4#>2`|X_vLb;{}d&w7lFG z>7QUG6RGd_PNn>7lJkor$JmQ{S{xsqJD|zCNyBdTlAd!P{}vrN-8kp=hmN+J0#1u} ztL80RcrfJtn&m+<T<RP7;vcy9?@?UI_u$Fz8s^g`+kGOLLucfk)zF%eYSi6wMx1qd zNz5EI%{vx~9t}78nFKGmOYJb3sJ3qU3YADB&COSI86$7hJq=PcRF;XFuu?8C({A;1 z>56TNX~#TPxEo)e`1OgI-vME+Mq4|B`_)qv+5GZlxt>UHRxY1Vu+VDhgLmHQ8U{P` zUSHy@wDr3in#f(4v{Lfr$zoMuw}|;u1mER^{S+@v6j*gD%Q@yl<|!`e*oUvU4_Rz1 zSi<IZO?qcT<g%8D6WG~eb(XZNRob*^>dLK8ncmQCcEIQ)V@K9Ip_LOS$ha(CYp>4V zdg-sa{_HgyCKkTtcKU3$uqE5m9b$rrfZP3_DHA!u4(xuZf4O_n!~QKIGba2HV^NtZ zbwQnH`pNG`tfgo3`=7qJ{O#NZP%7g*J=^m5vlUkkT-kP+NiIxh?xV(I@4r}QnEK6l zkbHr6+7l0<s7X&!CI;lJ^|~8kzs_gRvy&}%vZk(6eki^R+(6P1pWxbb;r_ADuI%@= z2|LeP&%S)O@S*&V9c$g)i*z_5^RLy*PE4)Z-YoO;o?YF{06nX&Luzk(el=}~(NVo- zrqAIkqf<7|WxH9D{L%o{SKLlLEuC}qmj{Y$oK@KAzbt|EHTR(-8<)ngo|fdyOg{f0 zb$gTIl(@OSngo;+llo6;3aMRNe+Hzeh;_@6Thok%rb#X?*>znUH1N{5W;tKmL<8B3 z#HGm&GfvOB^Ua=P@{eedoxN+s<K2t%=KS6-aw=X}^cb&X-R66X?klv2^=fu9aop8k zRM{)vXliyzcmMhux7#<c++QPpYwoG<_9e=%TN7JSuDDz-3~&0AY0_QSED&X~jB8=V z)6!Kk_kOEiUG+O6>e>CwQ(}h})o->-5ot9!aq@3?;<TLOc8O&NQWPa$bt}2M-?Lb~ zr*1EUhK0k6J8GTpRX#M$bckrnzqb2u!_rPYrsKkwyq7F9oAZ_<QEWwuy6~&hD}4)} zDTq3KY~K4wAcXtENu^CqAXi=AY9w&zP0W6aNt!J!jtlSeufCx5^liw09-f1jg_bTi z66Wy!c(&^8bp>U&Yu4fJ^|=YfTP$)Uvz5%;V_TeNFOIA~YA4LW{qJnmc5Q{bqD!|f zoS%Ev-a|hBjKuD0Lu00vqNm)>TQZji<fu>G<R9@R|C%s2`xgC{-HZ3EO!{@Us@qQ7 zU|xV!Wd6s7MH+8El&LoxWyIMZ&{y7?(-|rs$np7<R=>ui8VB1r;j48jK7Zy2xL@n` zOEX(>eOk0v5tG6d9y=ZF7DJ7T-=dSI^q<R;KlCD5>dAqLUs+oM%z5@-Q`C7WZOqnj zHEP-(xxf|1TPvCs?$|!*H~%XsEx%BD<!y`9F6-%1@@@x@U9kFn<)Y}l73%k2ERSk8 z5D(YQP&xDT&RSU&caEi=94|X!%=D%|aQi5@Y{Q3Jvy=?()nx3MeEj;C$?ApQT(|_C zxZ_#`q70Jy1YV_mc_Pg7%Slz<=)ChntMq;0F7o#);sfvKpE=(m5cNU6<wBDnH|Iik zuN!kxztk-^|E<6tv)54hjQ?Y{<otC<BIFOBc;Oc0v(eBkFycdBh9F1cmR_ae9=VoT z&sKB`CHFHfow?bkA)w;dg3P{CA*(Ji&(Au-qSF6{BXNoMbbaSOfltp{dV|9@<r`Jj zSgIUgX)_W2|AYJPf|;9rS|<2A`RCpGaci$uqFn0@nXM1jNpR{)80vE<FLs%EDDcV2 zl<ADh3t5-z&*Eq?uuj-Cp+`WhSAqMNLQCX=NppQ#E;L;h_jO5BICCyP+snu)!lX&( zMYF)P?m&nPi&KZdvX7p7tY;mo%8P6fQ1p51#*rxXTCwHnqVre9W-k_-voAvlRF}B6 zY{+1VyuhyL!f|<rpqcyS2>#iNpDyB`y;y9|-USdPIelUxOH8s9TR0M>{vUjnA@#b~ zt2pGxsp=czcAus1A2|MGx6ZTj7bzc-Rkl3%;wn5bUPXnWDtXErOPyspyq^y5@z8iE zlEaaBkz>;W|2P4z%U&++4RaK99*g8~fc@ApM}a3XAY)NgVG#4ex?84|WoCM(MVICX ztYcU@r-@flN6Jy`%SnExTJ?YzQ!<}zxZo#oIISiqE&cIl=fG<%kG$1S9M^viH|>vt z$ggG_nV-r_*e9;Dlrnoe%e-)r$>AP><fE3xFD`mpu}VWiY_f1mie6w{cw1lwN8*t! z*>;*Dw$CFH|6bVScd$($s^Hh6&J)~D<$7vQ->tYJ!#krV!2azl^Tm^yW{W?SdDyr% z;eOvGpM!0XsCmM!n9H<D^ST6c&0>q6drhvcpMKK*?JOJX*+t)vmAfbkOfTm$gG7(Z zIsrHPIR@tgmv7#z*y5^uqREb9q2+hi6P*xC9XPrhrtRc|hFGSe$@kl{PQm3)AJu?3 zzga-3CG!qPyV25(ac#~sPd&Z%^pY4P)pY16CGNblE9RCG#Q1=fGft&4a&OJ^XEAes zds9etA*)a%gQ8E0nNEw?hIGc33-fdXg`yNDvI-n>NjvP6!B{QkzyVX(;Pm7F`PSEM VYmc>lWnf@n@O1TaS?83{1OV9N>+k>o literal 0 HcmV?d00001 diff --git a/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/volume-details.html b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/volume-details.html new file mode 100644 index 0000000000..598a30bf40 --- /dev/null +++ b/DirectoryTree/javahelp/org/sleuthkit/autopsy/directorytree/docs/volume-details.html @@ -0,0 +1,36 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Volume Details Window</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>Volume Details Window</h2> + <p> + Volume Details Windows shows the information about volume ID, starting sector, the length, description, and flags of the selected volume. + <br><br> + </p> + + <h2>Example</h2> + <p> + <img src="VolumeDetailHelp.png" alt="Example of Volume Details Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/DirectoryTree/manifest.mf b/DirectoryTree/manifest.mf new file mode 100644 index 0000000000..3cd61b1c0a --- /dev/null +++ b/DirectoryTree/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.directorytree/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Layer: org/sleuthkit/autopsy/directorytree/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/directorytree/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager, org.netbeans.api.javahelp.Help + diff --git a/DirectoryTree/nbproject/build-impl.xml b/DirectoryTree/nbproject/build-impl.xml new file mode 100644 index 0000000000..3892441abf --- /dev/null +++ b/DirectoryTree/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.directorytree-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/DirectoryTree/nbproject/genfiles.properties b/DirectoryTree/nbproject/genfiles.properties new file mode 100644 index 0000000000..7c15c292e3 --- /dev/null +++ b/DirectoryTree/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=db477856 +build.xml.script.CRC32=6ec7becb +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=db477856 +nbproject/build-impl.xml.script.CRC32=8c5007a7 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/DirectoryTree/nbproject/project.properties b/DirectoryTree/nbproject/project.properties new file mode 100644 index 0000000000..ad6b9c5580 --- /dev/null +++ b/DirectoryTree/nbproject/project.properties @@ -0,0 +1,4 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +javahelp.hs=directorytree-hs.xml +spec.version.base=0.0 diff --git a/DirectoryTree/nbproject/project.xml b/DirectoryTree/nbproject/project.xml new file mode 100644 index 0000000000..6af52a56ca --- /dev/null +++ b/DirectoryTree/nbproject/project.xml @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.directorytree</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.netbeans.modules.settings</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.26.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.dialogs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.15.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.explorer</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.28.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.casemodule</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponents</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.directorytree</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/DirectoryTree/nbproject/suite.properties b/DirectoryTree/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/DirectoryTree/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties new file mode 100644 index 0000000000..de02dec972 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties @@ -0,0 +1,49 @@ +CTL_DirectoryTreeAction=DirectoryTree +CTL_DirectoryTreeExplorerAction=DirectoryTreeExplorer +CTL_DirectoryTreeTopComponent=Directory Tree +CTL_FileBrowserAction=FileBrowser (new) +HINT_DirectoryTreeTopComponent=This is a DirectoryTree window +OpenIDE-Module-Name=DirectoryTree +FileSystemDetailsPanel.imgOffsetLabel.text=Image Offset: +FileSystemDetailsPanel.fsTypeLabel.text=FileSystem Type: +FileSystemDetailsPanel.genInfoLabel.text=General File Information +FileSystemDetailsPanel.jLabel2.text=bytes +FileSystemDetailsPanel.jLabel3.text=bytes +FileSystemDetailsPanel.fsTypeValue.text=... +FileSystemDetailsPanel.imgOffsetValue.text=... +FileSystemDetailsPanel.volumeIDValue.text=... +FileSystemDetailsPanel.blockSizeValue.text=... +FileSystemDetailsPanel.blockCountValue.text=... +FileSystemDetailsPanel.rootInumValue.text=... +FileSystemDetailsPanel.firstInumValue.text=... +FileSystemDetailsPanel.lastInumValue.text=... +FileSystemDetailsPanel.jLabel1.text=Detailed File Information +FileSystemDetailsPanel.volumeIDLabel.text=Volume ID: +FileSystemDetailsPanel.blockSizeLabel.text=Block Size: +FileSystemDetailsPanel.blockCountLabel.text=Block Count: +FileSystemDetailsPanel.rootInumLabel.text=Root Metadata Entry: +FileSystemDetailsPanel.firstInumLabel.text=First Metadata Entry: +FileSystemDetailsPanel.lastInumLabel.text=Last Metadata Entry: +FileSystemDetailsPanel.OKButton.text=OK +VolumeDetailsPanel.volumeIDLabel.text=Volume ID: +VolumeDetailsPanel.volumeIDValue.text=... +VolumeDetailsPanel.startValue.text=... +VolumeDetailsPanel.lengthValue.text=... +VolumeDetailsPanel.descValue.text=... +VolumeDetailsPanel.flagsValue.text=... +VolumeDetailsPanel.startLabel.text=Starting Sector: +VolumeDetailsPanel.lengthLabel.text=Length in Sectors: +VolumeDetailsPanel.descLabel.text=Description: +VolumeDetailsPanel.flagsLabel.text=Flags: +VolumeDetailsPanel.jLabel1.text=General Volume Information +VolumeDetailsPanel.OKButton.text=OK +ImageDetailsPanel.imageInfoLabel.text=Image Information +ImageDetailsPanel.imgNameLabel.text=Name: +ImageDetailsPanel.imgNameValue.text=... +ImageDetailsPanel.imgTypeLabel.text=Type: +ImageDetailsPanel.imgTypeValue.text=... +ImageDetailsPanel.OKButton.text=OK +ImageDetailsPanel.imgSectorSizeLabel.text=Sector Size: +ImageDetailsPanel.imgSectorSizeValue.text=... +DirectoryTreeTopComponent.backButton.text= +DirectoryTreeTopComponent.forwardButton.text= diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java new file mode 100644 index 0000000000..6242d633bc --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ChangeViewAction.java @@ -0,0 +1,103 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import org.sleuthkit.autopsy.datamodel.ContentNode; +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import org.openide.util.actions.Presenter; +import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; +import org.sleuthkit.autopsy.corecomponents.DataContentViewerHex; +import org.sleuthkit.autopsy.corecomponents.DataContentViewerString; +import org.sleuthkit.autopsy.logging.Log; + +/** + * The actions to change between the "Hex View" and "String View". + * + * @author jantonius + */ +public class ChangeViewAction extends AbstractAction implements Presenter.Popup { + + private int type; // type 1 = hex view, 2 = string view + private ContentNode node; + + /** the constructor */ + public ChangeViewAction(String title, int viewType, ContentNode node) { + super(title); + this.type = viewType; + this.node = node; + } + + /** + * The action that this class performs. The action is divided into 2 type. + * First if the the type is 1, it will change the active output top component + * to "Hex View". Another one is if the type is 2, it will change the active + * top component to "String View." + * + * @param e the action event + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + DataContentTopComponent dctc = DataContentTopComponent.findInstance(); + int totalTabs = dctc.getTabPanels().getTabCount(); + + // change the output view to hex view + if (type == 1) { + // find the hex view top component +// TopComponent hexWin = WindowManager.getDefault().findTopComponent("HexViewTopComponent"); // Note: HexViewTopComponent = the preffered ID of that top component +// hexWin.requestActive(); // set it to become the active top component + + for (int i = 0; i < totalTabs; i++) { + if (dctc.getTabPanels().getComponentAt(i) instanceof DataContentViewerHex) { + dctc.getTabPanels().setSelectedIndex(i); + } + } + } + // change the output view to string view + if (type == 2) { + // find the string view top component +// TopComponent stringWin = WindowManager.getDefault().findTopComponent("StringViewTopComponent"); // Note: StringViewTopComponent = the preffered ID of that top component +// stringWin.requestActive(); // set it to become the active top component + + for (int i = 0; i < totalTabs; i++) { + if (dctc.getTabPanels().getComponentAt(i) instanceof DataContentViewerString) { + dctc.getTabPanels().setSelectedIndex(i); + } + } + } + // else do nothing + } + + /** + * To create the sub-menu for "Hex View" and "String View". + * + * @return menuItem the menu items + */ + @Override + public JMenuItem getPopupPresenter() { + JMenu item = new JMenu("View"); + item.add(new ChangeViewAction("Hex", 1, node)); + item.add(new ChangeViewAction("String", 2, node)); + return item; + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java new file mode 100644 index 0000000000..7b18336427 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java @@ -0,0 +1,70 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.view.BeanTreeView; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.logging.Log; + +/** + * + * @author jantonius + */ +public class CollapseAction extends AbstractAction { + + CollapseAction(String title) { + super(title); + } + + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + ExplorerManager em = DirectoryTreeTopComponent.findInstance().getExplorerManager(); + Node[] selectedNode = em.getSelectedNodes(); + + // Collapse all + + BeanTreeView tree = DirectoryTreeTopComponent.findInstance().getTree(); + collapseAll(tree, selectedNode[0]); + } + + /** + * Collapse all visible children of the given node on the given tree. + * + * @param tree the given tree + * @param currentNode the current selectedNode + */ + private void collapseAll(BeanTreeView tree, Node currentNode) { + + Children c = currentNode.getChildren(); + + for (Node next : c.getNodes()) { + if (tree.isExpanded(next)) { + this.collapseAll(tree, next); + } + } + + tree.collapseNode(currentNode); + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterChildren.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterChildren.java new file mode 100644 index 0000000000..128889a499 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterChildren.java @@ -0,0 +1,46 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; + +/** + * This class is used for the creation of all the children for the + * DataResultFilterNode that created in the DataResultFilterNode.java. + * + * @author jantonius + */ +public class DataResultFilterChildren extends FilterNode.Children { + + /** the constructor */ + public DataResultFilterChildren(Node arg) { + super(arg); + } + + @Override + protected Node copyNode(Node arg0) { + return new DataResultFilterNode(arg0); + } + + @Override + protected Node[] createNodes(Node arg0) { + return new Node[]{this.copyNode(arg0)}; + } +} \ No newline at end of file diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java new file mode 100644 index 0000000000..280d32dca4 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java @@ -0,0 +1,233 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionEvent; +import java.beans.PropertyVetoException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import org.sleuthkit.autopsy.datamodel.ImageNode; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.datamodel.VolumeNode; +import org.sleuthkit.autopsy.datamodel.FileNode; +import org.sleuthkit.autopsy.datamodel.DirectoryNode; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JPanel; +import org.openide.explorer.ExplorerManager; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.openide.nodes.Sheet; +import org.sleuthkit.autopsy.datamodel.ContentNodeVisitor; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; + +/** + * This class wraps nodes as they are passed to the DataResult viewers. It + * defines the actions that the node should have. + */ +public class DataResultFilterNode extends FilterNode implements ContentNode { + + private Node currentNode; + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** the constructor */ + public DataResultFilterNode(Node arg) { + super(arg, new DataResultFilterChildren(arg)); + this.currentNode = arg; + } + + @Override + public Node getOriginal() { + return super.getOriginal(); + } + + /** + * Right click action for the nodes that we want to pass to the directory + * table and the output view. + * + * @param popup + * @return actionss + */ + @Override + public Action[] getActions(boolean popup) { + + List<Action> actions = new ArrayList<Action>(); + + + // right click action(s) for image node + if (this.currentNode instanceof ImageNode) { + actions.add(new NewWindowViewAction("View in New Window", (ImageNode) this.currentNode)); + actions.addAll(ShowDetailActionVisitor.getActions(((ImageNode) this.currentNode).getContent())); + } // right click action(s) for volume node + else if (this.currentNode instanceof VolumeNode) { + actions.add(new NewWindowViewAction("View in New Window", (VolumeNode) this.currentNode)); + //new ShowDetailActionVisitor("Volume Details", this.currentNode.getName(), (VolumeNode) this.currentNode), + actions.addAll(ShowDetailActionVisitor.getActions(((VolumeNode) this.currentNode).getContent())); + actions.add(new ChangeViewAction("View", 0, (ContentNode) currentNode)); + } // right click action(s) for directory node + else if (this.currentNode instanceof DirectoryNode) { + actions.add(new NewWindowViewAction("View in New Window", (DirectoryNode) this.currentNode)); + actions.add(new ChangeViewAction("View", 0, (ContentNode) currentNode)); + actions.add(new ExtractAction("Extract Directory", (DirectoryNode) this.currentNode)); + } // right click action(s) for the file node + else if (this.currentNode instanceof FileNode) { + actions.add(new ExternalViewerAction("Open File in External Viewer", (FileNode) this.currentNode)); + actions.add(new NewWindowViewAction("View in New Window", (FileNode) this.currentNode)); + actions.add(new ExtractAction("Extract", (FileNode) this.currentNode)); + actions.add(new ChangeViewAction("View", 0, (ContentNode) currentNode)); + } + + return actions.toArray(new Action[actions.size()]); + } + + /** + * Double click action for the nodes that we want to pass to the directory + * table and the output view. + * + * @return action + */ + @Override + public Action getPreferredAction() { + // double click action(s) for volume node or directory node + if (this.currentNode instanceof VolumeNode || (this.currentNode instanceof DirectoryNode && !this.currentNode.getDisplayName().equals("."))) { + + if (this.currentNode instanceof DirectoryNode && this.currentNode.getDisplayName().equals("..")) { + ExplorerManager em = DirectoryTreeTopComponent.findInstance().getExplorerManager(); + Node[] selectedNode = em.getSelectedNodes(); + Node selectedContext = selectedNode[0]; + final Node parentNode = selectedContext.getParentNode(); + + return new AbstractAction() { + + @Override + public void actionPerformed(ActionEvent e) { + try { + DirectoryTreeTopComponent.findInstance().getExplorerManager().setSelectedNodes(new Node[]{parentNode}); + } catch (PropertyVetoException ex) { + Logger logger = Logger.getLogger(DataResultFilterNode.class.getName()); + logger.log(Level.WARNING, "Error: can't open the parent directory.", ex); + } + } + }; + } else { + ExplorerManager em = DirectoryTreeTopComponent.findInstance().getExplorerManager(); + final Node[] parentNode = em.getSelectedNodes(); + final Node parentContext = parentNode[0]; + + return new AbstractAction() { + + @Override + public void actionPerformed(ActionEvent e) { + if (parentContext != null) { + ExplorerManager em = DirectoryTreeTopComponent.findInstance().getExplorerManager(); + for (int i = 0; i < parentContext.getChildren().getNodesCount(); i++) { + Node selectedNode = parentContext.getChildren().getNodeAt(i); + if (selectedNode != null && selectedNode.getName().equals(currentNode.getName())) { + try { + em.setExploredContextAndSelection(selectedNode, new Node[]{selectedNode}); + } catch (PropertyVetoException ex) { + // throw an error here + Logger logger = Logger.getLogger(DataResultFilterNode.class.getName()); + logger.log(Level.WARNING, "Error: can't open the selected directory.", ex); + } + } + } + } + } + }; + } + + } // // right click action(s) for the file node + // if(this.currentNode instanceof FileNode){ + // // .. put the code here + // } + else { + return null; + } + } + + @Override + public Node.PropertySet[] getPropertySets() { + Node.PropertySet[] propertySets = super.getPropertySets(); + + for (int i = 0; i < propertySets.length; i++) { + Node.PropertySet ps = propertySets[i]; + + if (ps.getName().equals(Sheet.PROPERTIES)) { + Sheet.Set newPs = new Sheet.Set(); + newPs.setName(ps.getName()); + newPs.setDisplayName(ps.getDisplayName()); + newPs.setShortDescription(ps.getShortDescription()); + + newPs.put(ps.getProperties()); + newPs.remove(FileNode.PROPERTY_LOCATION); + propertySets[i] = newPs; + } + } + + return propertySets; + } + + @Override + public long getID() { + return ((ContentNode) currentNode).getID(); + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + return ((ContentNode) currentNode).getRowValues(rows); + } + + @Override + public byte[] read(long offset, long len) throws TskException { + return ((ContentNode) currentNode).read(offset, len); + } + + @Override + public int getFileIDColumn() { + return ((ContentNode) currentNode).getFileIDColumn(); + } + + @Override + public Content getContent() { + return ((ContentNode) currentNode).getContent(); + } + + @Override + public String[] getDisplayPath() { + return ((ContentNode) currentNode).getDisplayPath(); + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + // TODO: Figure out how visitors should be delegated + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String[] getSystemPath() { + return ((ContentNode) currentNode).getSystemPath(); + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java new file mode 100644 index 0000000000..8f365354e4 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java @@ -0,0 +1,70 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import org.openide.nodes.Children; +import org.sleuthkit.autopsy.datamodel.ImageNode; +import org.sleuthkit.autopsy.datamodel.VolumeNode; +import org.sleuthkit.autopsy.datamodel.DirectoryNode; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.Directory; + +/** + * This class wraps around nodes that are displayed in the directory tree and + * hides files, '..', and other children that should not be displayed. + * + * @author jantonius + */ +class DirectoryTreeFilterChildren extends FilterNode.Children { + + /** the constructor */ + public DirectoryTreeFilterChildren(Node arg) { + super(arg); + } + + @Override + protected Node copyNode(Node arg0) { + return new DirectoryTreeFilterNode(arg0); + } + + @Override + protected Node[] createNodes(Node arg0) { + // filter out the FileNode and the "." and ".." directories + if (arg0 != null && (arg0 instanceof ImageNode + || arg0 instanceof VolumeNode || (arg0 instanceof DirectoryNode + && !((Directory) ((DirectoryNode) arg0).getContent()).getName().equals(".") + && !((Directory) ((DirectoryNode) arg0).getContent()).getName().equals("..")))) { + return new Node[]{this.copyNode(arg0)}; + } else { + return new Node[]{}; + } + } + + /** + * Return the children based on the current node given. If the node doesn't + * have any directory or volume or image node inside it, it just returns leaf. + * + * @param arg the node + * @return children the children + */ + public static Children createInstance(Node arg) { + return new DirectoryTreeFilterChildren(arg); + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java new file mode 100644 index 0000000000..9d23f82ee5 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java @@ -0,0 +1,74 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.Action; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.Content; + +/** + * This class sets the actions for the nodes in the directory tree and creates + * the children filter so that files and such are hidden from the tree. + * + */ +public class DirectoryTreeFilterNode extends FilterNode { + + private static final Action collapseAll = new CollapseAction("Collapse All"); + + /** the constructor */ + public DirectoryTreeFilterNode(Node arg) { + super(arg, DirectoryTreeFilterChildren.createInstance(arg)); + } + + // TODO This seems bad. We should have this return the real original and modify code somewhere else to wrap it + @Override + public Node getOriginal() { + return new DataResultFilterNode(super.getOriginal()); + } + + /** + * Right click action for the nodes in the directory tree. + * + * @param popup + * @return + */ + @Override + public Action[] getActions(boolean popup) { + List<Action> actions = new ArrayList<Action>(); + + Content content = super.getOriginal().getLookup().lookup(Content.class); + if (content != null) { + actions.addAll(DirectoryTreeFilterNode.getActions(content)); + actions.add(collapseAll); + } + + return actions.toArray(new Action[actions.size()]); + } + + private static List<Action> getActions(Content c) { + List<Action> actions = new ArrayList<Action>(); + + actions.addAll(ShowDetailActionVisitor.getActions(c)); + + return actions; + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form new file mode 100644 index 0000000000..f5128e7c56 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form @@ -0,0 +1,91 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Component id="backButton" min="-2" pref="26" max="-2" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="forwardButton" min="-2" pref="27" max="-2" attributes="0"/> + <EmptySpace pref="199" max="32767" attributes="0"/> + </Group> + <Component id="jScrollPane1" alignment="0" pref="262" max="32767" attributes="0"/> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Component id="forwardButton" min="0" pref="0" max="32767" attributes="1"/> + <Component id="backButton" alignment="0" pref="26" max="32767" attributes="1"/> + </Group> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Component id="jScrollPane1" pref="846" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new BeanTreeView()"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + </Container> + <Component class="javax.swing.JButton" name="backButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/directorytree/arrow_left.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="DirectoryTreeTopComponent.backButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[55, 100]"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[5, 5]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="backButtonActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="forwardButton"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/sleuthkit/autopsy/directorytree/arrow_right.gif"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="DirectoryTreeTopComponent.forwardButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[55, 100]"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[5, 5]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="forwardButtonActionPerformed"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java new file mode 100644 index 0000000000..f691f39e65 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -0,0 +1,643 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.awt.Cursor; +import java.awt.EventQueue; +import java.beans.PropertyVetoException; +import java.io.IOException; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.Action; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.tree.TreeSelectionModel; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.ExplorerUtils; +import org.openide.explorer.view.BeanTreeView; +import org.openide.explorer.view.TreeView; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; +import org.sleuthkit.autopsy.datamodel.RootContentChildren; + +/** + * Top component which displays something. + */ +// Registered as a service provider for DataExplorer in layer.xml +public final class DirectoryTreeTopComponent extends TopComponent implements DataExplorer, ExplorerManager.Provider { + + private transient ExplorerManager em = new ExplorerManager(); + private static DirectoryTreeTopComponent instance; + private DataResultTopComponent dataResult = new DataResultTopComponent(true, "Directory Listing"); + private boolean backFwdFlag; // flag whether the back or forward button is pressed + private ArrayList<Node> backList; + private ArrayList<Node> forwardList; + /** path to the icon used by the component and its open action */ +// static final String ICON_PATH = "SET/PATH/TO/ICON/HERE"; + private static final String PREFERRED_ID = "DirectoryTreeTopComponent"; + private PropertyChangeSupport pcs; + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** the constructor */ + private DirectoryTreeTopComponent() { + initComponents(); + + // only allow one item to be selected at a time + ((BeanTreeView) jScrollPane1).setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + // remove the close button + putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); + setName(NbBundle.getMessage(DirectoryTreeTopComponent.class, "CTL_DirectoryTreeTopComponent")); + setToolTipText(NbBundle.getMessage(DirectoryTreeTopComponent.class, "HINT_DirectoryTreeTopComponent")); + + setListener(); + associateLookup(ExplorerUtils.createLookup(em, getActionMap())); + + + this.pcs = new PropertyChangeSupport(this); + this.backFwdFlag = false; + + // set the back & forward list and also disable the back & forward button + this.backList = new ArrayList<Node>(); + this.forwardList = new ArrayList<Node>(); + backButton.setEnabled(false); + forwardButton.setEnabled(false); + } + + /** + * Set the FileBrowserTopComponent as the listener to any property changes + * in the Case.java class + */ + private void setListener() { + Case.addPropertyChangeListener(this);// add this class to listen to any changes in the Case.java class + this.em.addPropertyChangeListener(this); + } + + public void setDirectoryListingActive() { + this.dataResult.requestActive(); + } + + public void openDirectoryListing() { + this.dataResult.open(); + } + + public DataResultTopComponent getDirectoryListing() { + return this.dataResult; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new BeanTreeView(); + backButton = new javax.swing.JButton(); + forwardButton = new javax.swing.JButton(); + + backButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/directorytree/arrow_left.gif"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(backButton, org.openide.util.NbBundle.getMessage(DirectoryTreeTopComponent.class, "DirectoryTreeTopComponent.backButton.text")); // NOI18N + backButton.setMaximumSize(new java.awt.Dimension(55, 100)); + backButton.setMinimumSize(new java.awt.Dimension(5, 5)); + backButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + backButtonActionPerformed(evt); + } + }); + + forwardButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/directorytree/arrow_right.gif"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(forwardButton, org.openide.util.NbBundle.getMessage(DirectoryTreeTopComponent.class, "DirectoryTreeTopComponent.forwardButton.text")); // NOI18N + forwardButton.setMaximumSize(new java.awt.Dimension(55, 100)); + forwardButton.setMinimumSize(new java.awt.Dimension(5, 5)); + forwardButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + forwardButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(4, 4, 4) + .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(199, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(4, 4, 4) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(forwardButton, 0, 0, Short.MAX_VALUE) + .addComponent(backButton, javax.swing.GroupLayout.DEFAULT_SIZE, 26, Short.MAX_VALUE)) + .addGap(4, 4, 4) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 846, Short.MAX_VALUE) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + + private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); +// try { + // update the back and forward List + int currentIndex = backList.size() - 1; + Node currentNode = backList.get(currentIndex); + Node newCurrentNode = backList.get(currentIndex - 1); + backList.remove(currentIndex); + forwardList.add(currentNode); + + // enable / disable the back and forward button + if (backList.size() > 1) { + backButton.setEnabled(true); + } else { + backButton.setEnabled(false); + } + this.forwardButton.setEnabled(true); + + this.backFwdFlag = true; // set the flag + + // update the selection on directory tree + try { + em.setExploredContextAndSelection(newCurrentNode.getParentNode(), new Node[]{newCurrentNode}); + } catch (PropertyVetoException ex) { + Logger.getLogger(this.className).log(Level.WARNING, "Error: can't go back to the previous selected node.", ex); + } + + this.backFwdFlag = false; // reset the flag +// } +// finally { + this.setCursor(null); +// } + }//GEN-LAST:event_backButtonActionPerformed + + private void forwardButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_forwardButtonActionPerformed + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); +// try { + // update the back and forward List + int newCurrentIndex = forwardList.size() - 1; + Node newCurrentNode = forwardList.get(newCurrentIndex); + forwardList.remove(newCurrentIndex); + backList.add(newCurrentNode); + + // enable / disable the back and forward button + if (forwardList.size() > 0) { + forwardButton.setEnabled(true); + } else { + forwardButton.setEnabled(false); + } + this.backButton.setEnabled(true); + + this.backFwdFlag = true; // set the flag + + // update the selection on directory tree + try { + em.setExploredContextAndSelection(newCurrentNode.getParentNode(), new Node[]{newCurrentNode}); + } catch (PropertyVetoException ex) { + Logger.getLogger(this.className).log(Level.WARNING, "Error: can't go forward to the previous selected node.", ex); + } + + this.backFwdFlag = false; // reset the flag +// } +// finally { + this.setCursor(null); +// } + }//GEN-LAST:event_forwardButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton backButton; + private javax.swing.JButton forwardButton; + private javax.swing.JScrollPane jScrollPane1; + // End of variables declaration//GEN-END:variables + + /** + * Gets default instance. Do not use directly: reserved for *.settings files only, + * i.e. deserialization routines; otherwise you could get a non-deserialized instance. + * To obtain the singleton instance, use {@link #findInstance}. + */ + public static synchronized DirectoryTreeTopComponent getDefault() { + if (instance == null) { + instance = new DirectoryTreeTopComponent(); + } + return instance; + } + + /** + * Obtain the DirectoryTreeTopComponent instance. Never call {@link #getDefault} directly! + */ + public static synchronized DirectoryTreeTopComponent findInstance() { + WindowManager winManager = WindowManager.getDefault(); + TopComponent win = winManager.findTopComponent(PREFERRED_ID); + if (win == null) { + Logger.getLogger(DirectoryTreeTopComponent.class.getName()).warning( + "Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system."); + return getDefault(); + } + if (win instanceof DirectoryTreeTopComponent) { + return (DirectoryTreeTopComponent) win; + } + Logger.getLogger(DirectoryTreeTopComponent.class.getName()).warning( + "There seem to be multiple components with the '" + PREFERRED_ID + + "' ID. That is a potential source of errors and unexpected behavior."); + return getDefault(); + } + + /** + * Overwrite when you want to change default persistence type. Default + * persistence type is PERSISTENCE_ALWAYS + * + * @return TopComponent.PERSISTENCE_ALWAYS + */ + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; + } + + /** + * Called only when top component was closed on all workspaces before and + * now is opened for the first time on some workspace. The intent is to + * provide subclasses information about TopComponent's life cycle across all + * existing workspaces. Subclasses will usually perform initializing tasks + * here. + */ + @Override + public void componentOpened() { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + if (Case.existsCurrentCase()) { + Case currentCase = Case.getCurrentCase(); + + // close the top component if there's no image in this case + if (currentCase.getImageIDs().length == 0) { + //this.close(); + ((BeanTreeView) this.jScrollPane1).setRootVisible(false); // hide the root + } else { + // if there's at least one image, load the image and open the top component + Node root = new AbstractNode(new RootContentChildren(currentCase.getRootObjects())) { + + /** to override the right click action in the white blank space + * area on the directory tree window + */ + @Override + public Action[] getActions(boolean popup) { + return new Action[]{}; + } + + // Overide the AbstractNode use of DefaultHandle to return + // a handle which can be serialized without a parent + @Override + public Node.Handle getHandle() { + return new Node.Handle() { + + @Override + public Node getNode() throws IOException { + return em.getRootContext(); + } + }; + } + }; + /*try { + root = new DirectoryTreeFilterNode(root); + } catch (SQLException ex) { + JOptionPane.showMessageDialog(caller, "Error: problem making directory filter node.\n \nDetail: \n" + ex.getMessage() + " (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); + }*/ + + + // TODO It seems that we can get rid of the first condition. root is an abstract node + if (root instanceof DirectoryTreeFilterNode) { + root = ((DirectoryTreeFilterNode) root).getOriginal(); + } else { +// try { + root = new DirectoryTreeFilterNode(root); +// } catch (SQLException ex) { +// JOptionPane.showMessageDialog(caller, "Error: problem making directory filter node.\n \nDetail: \n" + ex.getMessage() + " (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); +// } + } + + em.setRootContext(root); + em.getRootContext().setName(currentCase.getName()); + em.getRootContext().setDisplayName(currentCase.getName()); + ((BeanTreeView) this.jScrollPane1).setRootVisible(false); // hide the root + + + Children imageNodes = em.getRootContext().getChildren(); + TreeView tree = getTree(); + + // expand until image node + for (Node image : imageNodes.getNodes()) { + tree.expandNode(image); + } + + // if the dataResult is not opened + if (!dataResult.isOpened()) { + dataResult.open(); // open the data result top component as well when the directory tree is opened + } + + + // select the first image node, if there is one + // (this has to happen after dataResult is opened, because the event + // of changing the selected node fires a handler that tries to make + // dataResult active) + if (imageNodes.getNodesCount() > 0) { + try { + em.setSelectedNodes(new Node[]{imageNodes.getNodeAt(0)}); + } catch (Exception ex) { + Logger logger = Logger.getLogger(DirectoryTreeTopComponent.class.getName()); + logger.log(Level.SEVERE, "Error setting default selected node.", ex); + } + } + + } + } + } finally { + this.setCursor(null); + } + } + + /** + * Called only when top component was closed so that now it is closed on all + * workspaces in the system. The intent is to provide subclasses information + * about TopComponent's life cycle across workspaces. Subclasses will usually + * perform cleaning tasks here. + */ + @Override + public void componentClosed() { + //@@@ push the selection node to null? + } + + void writeProperties(java.util.Properties p) { + // better to version settings since initial version as advocated at + // http://wiki.apidesign.org/wiki/PropertyFiles + p.setProperty("version", "1.0"); + // TODO store your settings + } + + Object readProperties(java.util.Properties p) { + if (instance == null) { + instance = this; + } + instance.readPropertiesImpl(p); + return instance; + } + + private void readPropertiesImpl(java.util.Properties p) { + String version = p.getProperty("version"); + // TODO read your settings according to their version + } + + /** + * Returns the unique ID of this TopComponent + * + * @return PREFERRED_ID the unique ID of this TopComponent + */ + @Override + protected String preferredID() { + return PREFERRED_ID; + } + + @Override + public boolean canClose() { + return !Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0; // only allow this window to be closed when there's no case opened or no image in this case + } + + /** + * Gets the explorer manager. + * + * @return the explorer manager + */ + public ExplorerManager getExplorerManager() { + return this.em; + } + + /** + * Right click action for this top component window + * + * @return actions the list of actions + */ + @Override + public Action[] getActions() { + return new Action[]{}; + } + + /** + * Gets the original selected node on the explorer manager + * + * @return node the original selected Node + */ + // TODO Rename or get rid of it entirely. + public Node getOriginalSelectedNode() { + Node result = null; + + Node[] selectedNodes = this.getExplorerManager().getSelectedNodes(); + if (selectedNodes.length > 0) { + result = selectedNodes[0]; + if (result != null && result instanceof DirectoryTreeFilterNode) { + result = ((DirectoryTreeFilterNode) result).getOriginal(); + } + } + return result; + } + + /** + * The "listener" that listens to any changes made in the Case.java class. + * It will do something based on the changes in the Case.java class. + * + * @param evt the property change event + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object oldValue = evt.getOldValue(); + Object newValue = evt.getNewValue(); + + // change in the case name + if (changed.equals(Case.CASE_NAME)) { + // set the main title of the window + String oldCaseName = oldValue.toString(); + String newCaseName = newValue.toString(); + + + // update the case name + if ((!oldCaseName.equals("")) && (!newCaseName.equals(""))) { + // change the root name and display name + em.getRootContext().setName(newCaseName); + em.getRootContext().setDisplayName(newCaseName); + } + } + + // changed current case + if (changed.equals(Case.CASE_CURRENT_CASE)) { + + // case opened + if (newValue != null) { + resetHistoryListAndButtons(); + } + } + + // if the image is added to the case + if (changed.equals(Case.CASE_ADD_IMAGE)) { + componentOpened(); +// Image img = (Image)newValue; +// +// int[] imageIDs = Case.getCurrentCase().getImageIDs(); +// +// // add the first image +// if(imageIDs.length == 1){ +// +// } +// else{ +// // add the additional images +// ImageNode newNode = new ImageNode(img); +// ((ImageChildren)getOriginalRootContent().getChildren()).addNode(newNode); +// +// // expand the new added node +// int count = em.getRootContext().getChildren().getNodesCount(); +// em.setExploredContext(em.getRootContext().getChildren().getNodeAt(count - 1)); +// } + } +// not supporting deleting images for now +// // if the image is removed from the case +// if(changed.equals(Case.CASE_DEL_IMAGE)){ +// if(Case.getCurrentCase().getImageIDs().length > 0){ +// // just remove the given image from the directory tree +// Image img = (Image)newValue; +// int ID = Integer.parseInt(oldValue.toString()); +// ImageNode tempNode = new ImageNode(img); +// ((ImageChildren)getOriginalRootContent().getChildren()).removeNode(tempNode); +// } +// } + + // change in node selection + if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) { + + + // Some lock that prevents certian Node operations is set during the + // ExplorerManager selection-change, so we must handle changes after the + // selection-change event is processed. + EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + // change the cursor to "waiting cursor" for this operation + DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + + // make sure dataResult is open + dataResult.open(); + + ContentNode node = (ContentNode) DirectoryTreeTopComponent.this.getOriginalSelectedNode(); + if (node != null) { + + //pcs.firePropertyChange(DataExplorer.EXPLORER_NODE_SELECTION_CHANGED, "", node); + int count = ((Node) node).getChildren().getNodesCount(true); + if (count > 1000) { + DirectoryTreeTopComponent.this.setCursor(null); + JOptionPane.showMessageDialog(caller, "Note: The selected directory contains " + count + " child files and folders. It may take some time to display them.\n\nAlso note that in the current version of Autopsy this will also make certain functions very slow (thumbnail view in particular, should be fixed in a future version)", "Large Data", JOptionPane.INFORMATION_MESSAGE); + DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + } + DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + DirectoryTreeTopComponent.this.dataResult.setNode(node); + } + + // set the directory listing to be active + dataResult.requestActive(); + } finally { + DirectoryTreeTopComponent.this.setCursor(null); + } + } + }); + + // update the back and forward list + Node[] selectedNode = em.getSelectedNodes(); + if (selectedNode.length > 0 && !backFwdFlag) { + Node selectedContext = selectedNode[0]; + + backList.add(selectedContext); // add the node to the "backList" + if (backList.size() > 1) { + backButton.setEnabled(true); + } else { + backButton.setEnabled(false); + } + + forwardList.clear(); // clear the "forwardList" + forwardButton.setEnabled(false); // disable the forward Button + } + } + } + + @Override + public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + @Override + public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + /** + * Resets the back and forward list, and also disable the back and forward + * buttons. + */ + private void resetHistoryListAndButtons() { + // clear the back and forward list + backList.clear(); + forwardList.clear(); + backButton.setEnabled(false); + forwardButton.setEnabled(false); + } + + /** + * Gets the tree on this DirectoryTreeTopComponent. + * + * @return tree the BeanTreeView + */ + public BeanTreeView getTree() { + return (BeanTreeView) this.jScrollPane1; + } + + @Override + public TopComponent getTopComponent() { + return this; + } +// private class HistoryManager<T> { +// private Stack<T> past, future; +// +// } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentSettings.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentSettings.xml new file mode 100644 index 0000000000..c3c9c60090 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentSettings.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd"> +<settings version="1.0"> + <module name="org.sleuthkit.autopsy.directorytree" spec="1.0"/> + <instanceof class="org.openide.windows.TopComponent"/> + <instanceof class="org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent"/> + <instance class="org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent" method="getDefault"/> +</settings> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentWstcref.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentWstcref.xml new file mode 100644 index 0000000000..a33969d893 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponentWstcref.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE tc-ref PUBLIC "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN" "http://www.netbeans.org/dtds/tc-ref2_0.dtd"> +<tc-ref version="2.0" > + <module name="org.sleuthkit.autopsy.directorytree" spec="1.0"/> + <tc-id id="DirectoryTreeTopComponent"/> + <state opened="false"/> +</tc-ref> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java new file mode 100644 index 0000000000..8b149605d7 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java @@ -0,0 +1,124 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.datamodel.FileNode; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.TskException; + +/** + * + * @author jantonius + */ +public class ExternalViewerAction extends AbstractAction { + + private byte[] content; + private FileNode fileNode; + private String fileName; + private String extension; + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** the constructor */ + public ExternalViewerAction(String title, FileNode fileNode) { + super(title); + this.fileNode = fileNode; + + long size = fileNode.getContent().getSize(); + String fullFileName = ((Node)fileNode).getDisplayName(); + if (fullFileName.contains(".") && size > 0) { + String tempFileName = fullFileName.substring(0, fullFileName.indexOf(".")); + String tempExtension = fullFileName.substring(fullFileName.indexOf(".")); + this.fileName = tempFileName; + this.extension = tempExtension; + } else { + this.fileName = fullFileName; + this.extension = ""; + this.setEnabled(false); // fix this later (right now only extract a file with extension) + } + } + + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + try { + // @@@ Thing to do: maybe throw confirmation first??? + + // the menu should be disabled if we can't read the content (for example: on zero-sized file). + // Therefore, it should never throw the TSKException. + try { + this.content = fileNode.getContent().read(0, fileNode.getContent().getSize()); + } catch (TskException ex) { + Logger.getLogger(this.className).log(Level.WARNING, "Error: can't read the content of the file.", ex); + } + + // Get the temp folder path of the case + String tempPath = Case.getCurrentCase().getTempDirectory(); + tempPath = tempPath + File.separator + this.fileName + this.extension; + + // create the temporary file + File file = new File(tempPath); + if (file.exists()) { + file.delete(); + } + + file.createNewFile(); + + // convert char to byte + byte[] dataSource = new byte[content.length]; + for (int i = 0; i < content.length; i++) { + dataSource[i] = (byte) content[i]; + } + + FileOutputStream fos = new FileOutputStream(file); + //fos.write(dataSource); + fos.write(dataSource); + fos.close(); + + try { + Desktop.getDesktop().open(file); + } catch (IOException ex) { + // if can't open the file, throw the error saying: "File type not supported." + JOptionPane.showMessageDialog(caller, "Error: File type not supported.\n \nDetail: \n" + ex.getMessage() + " (at " + className + ").", "Error", JOptionPane.ERROR_MESSAGE); + } + + // delete the file on exit + file.deleteOnExit(); + + } catch (IOException ex) { + // throw an error here + Logger.getLogger(this.className).log(Level.WARNING, "Error: can't open the external viewer for this file.", ex); + } + + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExtractAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExtractAction.java new file mode 100644 index 0000000000..d1c4adf529 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ExtractAction.java @@ -0,0 +1,218 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import org.sleuthkit.autopsy.datamodel.FileNode; +import java.io.*; +import java.awt.event.ActionEvent; +import javax.swing.JFileChooser; +import java.io.File; +import java.awt.Component; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import javax.swing.JPanel; +import javax.swing.filechooser.FileFilter; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.casemodule.GeneralFilter; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.datamodel.DirectoryNode; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.TskException; + +/** + * This is an action class to extract and save the bytes given as a file. + * + * @author jantonius + */ +public final class ExtractAction extends AbstractAction { + + private JFileChooser fc = new JFileChooser(); + private byte[] source; + private ContentNode contentNode; + private String fileName; + private String extension; + // for error handling + private JPanel caller; + private String className = this.getClass().toString(); + + /** the constructor */ + public ExtractAction(String title, ContentNode contentNode) { + super(title); + + String fullFileName = ((Node)contentNode).getDisplayName(); + + if (fullFileName.equals(".")) { + // . folders are not associated with their children in the database, + // so get original + Node parentNode = ((Node) contentNode).getParentNode(); + this.contentNode = (ContentNode) parentNode; + fullFileName = parentNode.getDisplayName(); + } else { + this.contentNode = contentNode; + } + long size = contentNode.getContent().getSize(); + + + + /** + * Checks first if the the selected it file or directory. If it's a file, + * check if the file size is bigger than 0. If it's a directory, check + * if it's not referring to the parent directory. Disables the menu otherwise. + */ + if ((contentNode instanceof FileNode && size > 0) || (contentNode instanceof DirectoryNode && !fullFileName.equals(".."))) { + if (contentNode instanceof FileNode && fullFileName.contains(".")) { + String tempFileName = fullFileName.substring(0, fullFileName.indexOf(".")); + String tempExtension = fullFileName.substring(fullFileName.indexOf(".")); + this.fileName = tempFileName; + this.extension = tempExtension; + } else { + this.fileName = fullFileName; + this.extension = ""; + } + } else { + this.fileName = fullFileName; + this.extension = ""; + this.setEnabled(false); // can't extract zero-sized file or ".." directory + } + + } + + /** + * Converts and saves the bytes into the file. + * + * @param e the action event + */ + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + // set the filter for FileNode + if (contentNode instanceof FileNode && !extension.equals("")) { + //FileFilter filter = new ExtensionFileFilter(extension.substring(1).toUpperCase() + " File (*" + extension + ")", new String[]{extension.substring(1)}); + String[] fileExt = {extension}; + FileFilter filter = new GeneralFilter(fileExt, extension.substring(1).toUpperCase() + " File (*" + extension + ")", false); + fc.setFileFilter(filter); + } + + + fc.setSelectedFile(new File(this.fileName)); + + int returnValue = fc.showSaveDialog((Component) e.getSource()); + if (returnValue == JFileChooser.APPROVE_OPTION) { + String path = fc.getSelectedFile().getPath() + extension; + + try { + // file extraction + if (contentNode instanceof FileNode) { + extractFile(path, (FileNode) contentNode); + } + + // directory extraction + if (contentNode instanceof DirectoryNode) { + extractDirectory(path, (DirectoryNode) contentNode); + } + } catch (Exception ex) { + Logger.getLogger(this.className).log(Level.WARNING, "Error: Couldn't extract file/directory.", ex); + } + + } + + } + + /** + * Extracts the content of the given fileNode into the given path. + * + * @param givenPath the path to extract the file + * @param fileNode the file node that contain the file + */ + private void extractFile(String givenPath, FileNode fileNode) throws Exception { + try { + if (fileNode.getContent().getSize() > 0) { + try { + this.source = fileNode.getContent().read(0, fileNode.getContent().getSize()); + } catch (TskException ex) { + throw new Exception("Error: can't read the content of the file.", ex); + } + } else { + this.source = new byte[0]; + } + + String path = givenPath; + + File file = new File(path); + if (file.exists()) { + file.delete(); + } + file.createNewFile(); + // convert char to byte + byte[] dataSource = new byte[source.length]; + for (int i = 0; i < source.length; i++) { + dataSource[i] = (byte) source[i]; + } + FileOutputStream fos = new FileOutputStream(file); + //fos.write(dataSource); + fos.write(dataSource); + fos.close(); + } catch (IOException ex) { + throw new Exception("Error while trying to extract the file.", ex); + } + } + + /** + * Extracts the content of the given directoryNode into the given path. + * + * @param givenPath the path to extract the directory + * @param dirNode the directory node that contain the directory + */ + private void extractDirectory(String givenPath, DirectoryNode dirNode) throws Exception { + String path = givenPath; + File dir = new File(path); + if (!dir.exists()) { + dir.mkdir(); + } + + int totalChildren = dirNode.getChildren().getNodesCount(); + for (int i = 0; i < totalChildren; i++) { + Node childNode = dirNode.getChildren().getNodeAt(i); + + if (childNode instanceof FileNode) { + FileNode fileNode = (FileNode) childNode; + String tempPath = path + File.separator + ((Node)fileNode).getDisplayName(); + try { + extractFile(tempPath, fileNode); + } catch (Exception ex) { + throw ex; + } + } + + if (childNode instanceof DirectoryNode) { + DirectoryNode dirNode2 = (DirectoryNode) childNode; + String dirNode2Name = ((Node)dirNode2).getDisplayName(); + + if (!dirNode2Name.trim().equals(".") && !dirNode2Name.trim().equals("..")) { + String tempPath = path + File.separator + dirNode2Name; + extractDirectory(tempPath, dirNode2); + } + } + } + + + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.form b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.form new file mode 100644 index 0000000000..6892af7264 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.form @@ -0,0 +1,384 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="367" max="-2" attributes="0"/> + <Component id="OKButton" min="-2" pref="93" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jSplitPane1" min="-2" pref="786" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jSplitPane1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="OKButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="1"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JButton" name="OKButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.OKButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Container class="javax.swing.JSplitPane" name="jSplitPane1"> + <Properties> + <Property name="dividerLocation" type="int" value="180"/> + <Property name="orientation" type="int" value="0"/> + </Properties> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/> + <SubComponents> + <Container class="javax.swing.JPanel" name="genInfoPanel"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> + <EtchetBorder/> + </Border> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[815, 170]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription"> + <JSplitPaneConstraints position="top"/> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="95" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="fsTypeLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imgOffsetLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="volumeIDLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="blockSizeLabel" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="108" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="genInfoLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="blockSizeValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="volumeIDValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imgOffsetValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="fsTypeValue" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="31" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="33" max="-2" attributes="0"/> + <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="31" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="blockCountLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rootInumLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="firstInumLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="lastInumLabel" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="111" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="lastInumValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="firstInumValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rootInumValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="blockCountValue" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace min="-2" pref="245" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace pref="23" max="32767" attributes="0"/> + <Component id="genInfoLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="fsTypeLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imgOffsetLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="volumeIDLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="blockSizeLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="fsTypeValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="imgOffsetValue" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="volumeIDValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="blockSizeValue" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="blockCountValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="rootInumValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="firstInumValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="lastInumValue" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="blockCountLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="rootInumLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="firstInumLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="lastInumLabel" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Component id="jSeparator1" pref="101" max="32767" attributes="1"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="fsTypeLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.fsTypeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgOffsetLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.imgOffsetLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="volumeIDLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.volumeIDLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="blockSizeLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.blockSizeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="blockCountLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.blockCountLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="rootInumLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.rootInumLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="firstInumLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.firstInumLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="lastInumLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.lastInumLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="fsTypeValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.fsTypeValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgOffsetValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.imgOffsetValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="volumeIDValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.volumeIDValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="blockSizeValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.blockSizeValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="blockCountValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.blockCountValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="rootInumValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.rootInumValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="firstInumValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.firstInumValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="lastInumValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.lastInumValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="genInfoLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.genInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator1"> + <Properties> + <Property name="orientation" type="int" value="1"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="detailInfoPanel"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> + <EtchetBorder/> + </Border> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[516, 293]"/> + </Property> + </Properties> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription"> + <JSplitPaneConstraints position="right"/> + </Constraint> + </Constraints> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace pref="278" max="32767" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="276" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="23" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="235" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="FileSystemDetailsPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.java new file mode 100644 index 0000000000..31a51334c9 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/FileSystemDetailsPanel.java @@ -0,0 +1,367 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionListener; + +/** + * This is the form / panel to show the File System Details. + * + * @author jantonius + */ +class FileSystemDetailsPanel extends javax.swing.JPanel { + + /** Creates new form FileSystemDetailsPanel */ + FileSystemDetailsPanel() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + OKButton = new javax.swing.JButton(); + jSplitPane1 = new javax.swing.JSplitPane(); + genInfoPanel = new javax.swing.JPanel(); + fsTypeLabel = new javax.swing.JLabel(); + imgOffsetLabel = new javax.swing.JLabel(); + volumeIDLabel = new javax.swing.JLabel(); + blockSizeLabel = new javax.swing.JLabel(); + blockCountLabel = new javax.swing.JLabel(); + rootInumLabel = new javax.swing.JLabel(); + firstInumLabel = new javax.swing.JLabel(); + lastInumLabel = new javax.swing.JLabel(); + fsTypeValue = new javax.swing.JLabel(); + imgOffsetValue = new javax.swing.JLabel(); + volumeIDValue = new javax.swing.JLabel(); + blockSizeValue = new javax.swing.JLabel(); + blockCountValue = new javax.swing.JLabel(); + rootInumValue = new javax.swing.JLabel(); + firstInumValue = new javax.swing.JLabel(); + lastInumValue = new javax.swing.JLabel(); + genInfoLabel = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + detailInfoPanel = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + + OKButton.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.OKButton.text")); // NOI18N + + jSplitPane1.setDividerLocation(180); + jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); + + genInfoPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + genInfoPanel.setPreferredSize(new java.awt.Dimension(815, 170)); + + fsTypeLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.fsTypeLabel.text")); // NOI18N + + imgOffsetLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.imgOffsetLabel.text")); // NOI18N + + volumeIDLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.volumeIDLabel.text")); // NOI18N + + blockSizeLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.blockSizeLabel.text")); // NOI18N + + blockCountLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.blockCountLabel.text")); // NOI18N + + rootInumLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.rootInumLabel.text")); // NOI18N + + firstInumLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.firstInumLabel.text")); // NOI18N + + lastInumLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.lastInumLabel.text")); // NOI18N + + fsTypeValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.fsTypeValue.text")); // NOI18N + + imgOffsetValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.imgOffsetValue.text")); // NOI18N + + volumeIDValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.volumeIDValue.text")); // NOI18N + + blockSizeValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.blockSizeValue.text")); // NOI18N + + blockCountValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.blockCountValue.text")); // NOI18N + + rootInumValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.rootInumValue.text")); // NOI18N + + firstInumValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.firstInumValue.text")); // NOI18N + + lastInumValue.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.lastInumValue.text")); // NOI18N + + genInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N + genInfoLabel.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.genInfoLabel.text")); // NOI18N + + jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL); + + jLabel2.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.jLabel2.text")); // NOI18N + + jLabel3.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.jLabel3.text")); // NOI18N + + javax.swing.GroupLayout genInfoPanelLayout = new javax.swing.GroupLayout(genInfoPanel); + genInfoPanel.setLayout(genInfoPanelLayout); + genInfoPanelLayout.setHorizontalGroup( + genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addGap(95, 95, 95) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(fsTypeLabel) + .addComponent(imgOffsetLabel) + .addComponent(volumeIDLabel) + .addComponent(blockSizeLabel)) + .addGap(108, 108, 108) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(genInfoLabel) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(blockSizeValue) + .addComponent(volumeIDValue) + .addComponent(imgOffsetValue) + .addComponent(fsTypeValue)) + .addGap(31, 31, 31) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(jLabel3)) + .addGap(33, 33, 33) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(31, 31, 31) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(blockCountLabel) + .addComponent(rootInumLabel) + .addComponent(firstInumLabel) + .addComponent(lastInumLabel)) + .addGap(111, 111, 111) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lastInumValue) + .addComponent(firstInumValue) + .addComponent(rootInumValue) + .addComponent(blockCountValue)))) + .addGap(245, 245, 245)) + ); + genInfoPanelLayout.setVerticalGroup( + genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, genInfoPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(genInfoLabel) + .addGap(18, 18, 18) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addComponent(fsTypeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imgOffsetLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(volumeIDLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(blockSizeLabel)) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addComponent(fsTypeValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(imgOffsetValue) + .addComponent(jLabel2)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(volumeIDValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(genInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(blockSizeValue) + .addComponent(jLabel3)))) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addComponent(blockCountValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rootInumValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(firstInumValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(lastInumValue)) + .addGroup(genInfoPanelLayout.createSequentialGroup() + .addComponent(blockCountLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rootInumLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(firstInumLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(lastInumLabel))) + .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)) + .addContainerGap()) + ); + + jSplitPane1.setTopComponent(genInfoPanel); + + detailInfoPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + detailInfoPanel.setPreferredSize(new java.awt.Dimension(516, 293)); + + jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N + jLabel1.setText(org.openide.util.NbBundle.getMessage(FileSystemDetailsPanel.class, "FileSystemDetailsPanel.jLabel1.text")); // NOI18N + + javax.swing.GroupLayout detailInfoPanelLayout = new javax.swing.GroupLayout(detailInfoPanel); + detailInfoPanel.setLayout(detailInfoPanelLayout); + detailInfoPanelLayout.setHorizontalGroup( + detailInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, detailInfoPanelLayout.createSequentialGroup() + .addContainerGap(278, Short.MAX_VALUE) + .addComponent(jLabel1) + .addGap(276, 276, 276)) + ); + detailInfoPanelLayout.setVerticalGroup( + detailInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(detailInfoPanelLayout.createSequentialGroup() + .addGap(23, 23, 23) + .addComponent(jLabel1) + .addContainerGap(259, Short.MAX_VALUE)) + ); + + jSplitPane1.setRightComponent(detailInfoPanel); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(367, 367, 367) + .addComponent(OKButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 786, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(OKButton) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + /** + * Sets the FileSystem type value on this panel. + * + * @param arg the file system type + */ + public void setFileSystemTypeValue(String arg) { + fsTypeValue.setText(arg); + } + + /** + * Sets the image offset value on this panel. + * + * @param arg the image offset + */ + public void setImageOffsetValue(String arg) { + imgOffsetValue.setText(arg); + } + + /** + * Sets the volume ID value on this panel. + * + * @param arg the volume ID + */ + public void setVolumeIDValue(String arg) { + volumeIDValue.setText(arg); + } + + /** + * Sets the block size value on this panel. + * + * @param arg the block size value + */ + public void setBlockSizeValue(String arg) { + blockSizeValue.setText(arg); + } + + /** + * Sets the block count value on this panel. + * + * @param arg the block count value + */ + public void setBlockCountValue(String arg) { + blockCountValue.setText(arg); + } + + /** + * Sets the root Inum value on this panel. + * + * @param arg the root Inum value + */ + public void setRootInumValue(String arg) { + rootInumValue.setText(arg); + } + + /** + * Sets the first Inum value on this panel. + * + * @param arg the first Inum value + */ + public void setFirstInumValue(String arg) { + firstInumValue.setText(arg); + } + + /** + * Sets the last Inum value on this panel. + * + * @param arg the last Inum value + */ + public void setLastInumValue(String arg) { + lastInumValue.setText(arg); + } + + /** + * Sets the action listener on the OK button on this panel. + * + * @param e the action listener + */ + public void setOKButtonActionListener(ActionListener e) { + OKButton.addActionListener(e); + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton OKButton; + private javax.swing.JLabel blockCountLabel; + private javax.swing.JLabel blockCountValue; + private javax.swing.JLabel blockSizeLabel; + private javax.swing.JLabel blockSizeValue; + private javax.swing.JPanel detailInfoPanel; + private javax.swing.JLabel firstInumLabel; + private javax.swing.JLabel firstInumValue; + private javax.swing.JLabel fsTypeLabel; + private javax.swing.JLabel fsTypeValue; + private javax.swing.JLabel genInfoLabel; + private javax.swing.JPanel genInfoPanel; + private javax.swing.JLabel imgOffsetLabel; + private javax.swing.JLabel imgOffsetValue; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JSplitPane jSplitPane1; + private javax.swing.JLabel lastInumLabel; + private javax.swing.JLabel lastInumValue; + private javax.swing.JLabel rootInumLabel; + private javax.swing.JLabel rootInumValue; + private javax.swing.JLabel volumeIDLabel; + private javax.swing.JLabel volumeIDValue; + // End of variables declaration//GEN-END:variables +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.form b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.form new file mode 100644 index 0000000000..7913ee465f --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.form @@ -0,0 +1,138 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="89" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="imgNameLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imgTypeLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imgSectorSizeLabel" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="29" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="imgNameValue" min="-2" max="-2" attributes="0"/> + <Component id="imgTypeValue" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="imgSectorSizeValue" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="118" max="-2" attributes="0"/> + <Component id="OKButton" min="-2" pref="80" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="71" max="-2" attributes="0"/> + <Component id="imageInfoLabel" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="75" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="38" max="-2" attributes="0"/> + <Component id="imageInfoLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" attributes="0"> + <Component id="imgNameLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imgTypeLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imgSectorSizeLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Component id="imgNameValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imgTypeValue" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="imgSectorSizeValue" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="29" max="32767" attributes="0"/> + <Component id="OKButton" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="imageInfoLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imageInfoLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgNameLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgTypeLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgTypeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgSectorSizeLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgSectorSizeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgNameValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgNameValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgTypeValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgTypeValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="imgSectorSizeValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.imgSectorSizeValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="OKButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ImageDetailsPanel.OKButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.java new file mode 100644 index 0000000000..eeadbee6d4 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ImageDetailsPanel.java @@ -0,0 +1,174 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * ImageDetailsPanel.java + * + * Created on May 2, 2011, 3:53:49 PM + */ + +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionListener; + +/** + * + * @author jantonius + */ +class ImageDetailsPanel extends javax.swing.JPanel { + + /** Creates new form ImageDetailsPanel */ + ImageDetailsPanel() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + imageInfoLabel = new javax.swing.JLabel(); + imgNameLabel = new javax.swing.JLabel(); + imgTypeLabel = new javax.swing.JLabel(); + imgSectorSizeLabel = new javax.swing.JLabel(); + imgNameValue = new javax.swing.JLabel(); + imgTypeValue = new javax.swing.JLabel(); + imgSectorSizeValue = new javax.swing.JLabel(); + OKButton = new javax.swing.JButton(); + + imageInfoLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N + imageInfoLabel.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imageInfoLabel.text")); // NOI18N + + imgNameLabel.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgNameLabel.text")); // NOI18N + + imgTypeLabel.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgTypeLabel.text")); // NOI18N + + imgSectorSizeLabel.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgSectorSizeLabel.text")); // NOI18N + + imgNameValue.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgNameValue.text")); // NOI18N + + imgTypeValue.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgTypeValue.text")); // NOI18N + + imgSectorSizeValue.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.imgSectorSizeValue.text")); // NOI18N + + OKButton.setText(org.openide.util.NbBundle.getMessage(ImageDetailsPanel.class, "ImageDetailsPanel.OKButton.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(89, 89, 89) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imgNameLabel) + .addComponent(imgTypeLabel) + .addComponent(imgSectorSizeLabel)) + .addGap(29, 29, 29) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imgNameValue) + .addComponent(imgTypeValue) + .addComponent(imgSectorSizeValue))) + .addGroup(layout.createSequentialGroup() + .addGap(118, 118, 118) + .addComponent(OKButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGap(71, 71, 71) + .addComponent(imageInfoLabel))) + .addContainerGap(75, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(38, 38, 38) + .addComponent(imageInfoLabel) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(imgNameLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imgTypeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imgSectorSizeLabel)) + .addGroup(layout.createSequentialGroup() + .addComponent(imgNameValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imgTypeValue) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(imgSectorSizeValue))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE) + .addComponent(OKButton) + .addGap(22, 22, 22)) + ); + }// </editor-fold>//GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton OKButton; + private javax.swing.JLabel imageInfoLabel; + private javax.swing.JLabel imgNameLabel; + private javax.swing.JLabel imgNameValue; + private javax.swing.JLabel imgSectorSizeLabel; + private javax.swing.JLabel imgSectorSizeValue; + private javax.swing.JLabel imgTypeLabel; + private javax.swing.JLabel imgTypeValue; + // End of variables declaration//GEN-END:variables + + + /** + * Sets the image name value on this panel. + * + * @param arg the new image name value + */ + public void setImgNameValue(String arg){ + imgNameValue.setText(arg); + } + + /** + * Sets the image type value on this panel. + * + * @param arg the new image type value + */ + public void setImgTypeValue(String arg){ + imgTypeValue.setText(arg); + } + + /** + * Sets the image size value on this panel. + * + * @param arg the new image size value + */ + public void setImgSectorSizeValue(String arg){ + imgSectorSizeValue.setText(arg); + } + + /** + * Sets the OK button action listener. + * + * @param e the action listener + */ + public void setOKButtonActionListener(ActionListener e){ + OKButton.addActionListener(e); + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/NewWindowViewAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/NewWindowViewAction.java new file mode 100644 index 0000000000..81d40916e7 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/NewWindowViewAction.java @@ -0,0 +1,66 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import javax.swing.AbstractAction; +import org.openide.windows.Mode; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.datamodel.DataConversion; +import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; +import org.sleuthkit.autopsy.logging.Log; + +/** + * Opens new ContentViewer pane in a detached window + */ +class NewWindowViewAction extends AbstractAction{ + + private ContentNode contentNode ; + + NewWindowViewAction(String title, ContentNode contentNode){ + super(title); + this.contentNode = contentNode; + } + + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + String[] filePaths = this.contentNode.getDisplayPath(); + String filePath = DataConversion.getformattedPath(filePaths, 0); + + DataContentTopComponent dctc = DataContentTopComponent.createUndocked(filePath, this.contentNode); + + Mode m = WindowManager.getDefault().findMode("output"); + m.dockInto(dctc); + dctc.open(); + + // Undocked it (right now, I do it by pressing the "Alt+Shift+D" to undock. + // If there's a better way, change the code below.. + dctc.requestActive(); + KeyEvent evt = new KeyEvent(dctc, 401, System.currentTimeMillis(), 585, 68, 'D'); + WindowManager.getDefault().getMainWindow().dispatchEvent(evt); + } + + + +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ShowDetailActionVisitor.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ShowDetailActionVisitor.java new file mode 100644 index 0000000000..84e678cb1e --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ShowDetailActionVisitor.java @@ -0,0 +1,301 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.directorytree; + +import javax.swing.*; +import java.awt.Toolkit; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import org.sleuthkit.autopsy.logging.Log; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.ContentVisitor; +import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.Volume; + +/** + * + * + * @author jantonius + */ +class ShowDetailActionVisitor extends ContentVisitor.Default<List<? extends Action>> { + + private static ShowDetailActionVisitor instance = new ShowDetailActionVisitor(); + + public static List<Action> getActions(Content c) { + List<Action> actions = new ArrayList<Action>(); + + actions.addAll(c.accept(instance)); + + while (c.isOnto()) { + try { + List<Content> children = c.getChildren(); + if (!children.isEmpty()) { + c = c.getChildren().get(0); + } else { + return actions; + } + } catch (TskException ex) { + Log.get(ShowDetailActionVisitor.class).log(Level.WARNING, "Error getting show detail actions.", ex); + return actions; + } + actions.addAll(c.accept(instance)); + } + return actions; + } + + ShowDetailActionVisitor() {} + + @Override + public List<? extends Action> visit(final Image img) { + final String title = "Image Details"; + + return Collections.singletonList(new AbstractAction(title) { + + @Override + public void actionPerformed(ActionEvent e) { + // TODO: fix log action + Log.noteAction(this.getClass()); + + final JFrame frame = new JFrame(title); + final JDialog popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal + // if we select the Image Details menu + + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + + // set the popUp window / JFrame + popUpWindow.setSize(750, 400); + + int w = popUpWindow.getSize().width; + int h = popUpWindow.getSize().height; + + // set the location of the popUp Window on the center of the screen + popUpWindow.setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); + + ImageDetailsPanel imgDetailPanel = new ImageDetailsPanel(); + Boolean counter = false; + + imgDetailPanel.setImgNameValue(img.getName()); + imgDetailPanel.setImgTypeValue(Image.imageTypeToString(img.getType())); + imgDetailPanel.setImgSectorSizeValue(Long.toString(img.getSsize())); + counter = true; + + if (counter) { + // add the volume detail panel to the popUp window + popUpWindow.add(imgDetailPanel); + } else { + // error handler if no volume matches + JLabel error = new JLabel("Error: No Volume Matches."); + error.setFont(new Font("Arial", Font.BOLD, 24)); + popUpWindow.add(error); + } + + // add the command to close the window to the button on the Volume Detail Panel + imgDetailPanel.setOKButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + popUpWindow.dispose(); + } + }); + + + popUpWindow.pack(); + popUpWindow.setResizable(false); + popUpWindow.setVisible(true); + } + }); + } + + @Override + public List<? extends Action> visit(final FileSystem fs) { + final String title = "File System Details"; + + return Collections.singletonList(new AbstractAction(title) { + + @Override + public void actionPerformed(ActionEvent e) { + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + + // TODO: fix log action + Log.noteAction(this.getClass()); + + final JFrame frame = new JFrame(title); + final JDialog popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal + + // set the popUp window / JFrame + + popUpWindow.setSize(1000, 500); + + int w = popUpWindow.getSize().width; + int h = popUpWindow.getSize().height; + + // set the location of the popUp Window on the center of the screen + popUpWindow.setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); + + String[] columnNames = new String[]{ + "fs_id", + "img_offset", + "par_id", + "fs_type", + "block_size", + "block_count", + "root_inum", + "first_inum", + "last_inum" + }; + + + + + Object[][] rowValues = new Object[1][9]; + + Arrays.fill(rowValues, 0, 1, new Object[]{ + fs.getId(), + fs.getImg_offset(), + fs.getParent().getId(), + fs.getFs_type(), + fs.getBlock_size(), + fs.getBlock_count(), + fs.getRoot_inum(), + fs.getFirst_inum(), + fs.getLast_inum() + }); + + + JTable table = new JTable(new DefaultTableModel(rowValues, columnNames)); + + FileSystemDetailsPanel fsdPanel = new FileSystemDetailsPanel(); + + // add the command to close the window to the button on the Volume Detail Panel + fsdPanel.setOKButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + popUpWindow.dispose(); + } + }); + + try { + fsdPanel.setFileSystemTypeValue(table.getValueAt(0, 3).toString()); + fsdPanel.setImageOffsetValue(table.getValueAt(0, 1).toString()); + fsdPanel.setVolumeIDValue(table.getValueAt(0, 2).toString()); //TODO: fix this to parent id, not vol id + fsdPanel.setBlockSizeValue(table.getValueAt(0, 4).toString()); + fsdPanel.setBlockCountValue(table.getValueAt(0, 5).toString()); + fsdPanel.setRootInumValue(table.getValueAt(0, 6).toString()); + fsdPanel.setFirstInumValue(table.getValueAt(0, 7).toString()); + fsdPanel.setLastInumValue(table.getValueAt(0, 8).toString()); + + popUpWindow.add(fsdPanel); + } catch (Exception ex) { + Log.get(ShowDetailActionVisitor.class).log(Level.WARNING, "Error setting up File System Details panel.", ex); + } + + popUpWindow.pack(); + popUpWindow.setResizable(false); + popUpWindow.setVisible(true); + + } + }); + } + + @Override + public List<? extends Action> visit(final Volume vol) { + final String title = "Volume Details"; + + return Collections.singletonList(new AbstractAction(title) { + + @Override + public void actionPerformed(ActionEvent e) { + + // TODO: fix log action + Log.noteAction(this.getClass()); + + final JFrame frame = new JFrame(title); + final JDialog popUpWindow = new JDialog(frame, title, true); // to make the popUp Window to be modal + + + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + + // set the popUp window / JFrame + popUpWindow.setSize(800, 400); + + int w = popUpWindow.getSize().width; + int h = popUpWindow.getSize().height; + + // set the location of the popUp Window on the center of the screen + popUpWindow.setLocation((screenDimension.width - w) / 2, (screenDimension.height - h) / 2); + + VolumeDetailsPanel volumeDetailPanel = new VolumeDetailsPanel(); + Boolean counter = false; + + volumeDetailPanel.setVolumeIDValue(Long.toString(vol.getAddr())); + volumeDetailPanel.setStartValue(Long.toString(vol.getStart())); + volumeDetailPanel.setLengthValue(Long.toString(vol.getLength())); + volumeDetailPanel.setDescValue(vol.getDescription()); + volumeDetailPanel.setFlagsValue(vol.getFlagsAsString()); + counter = true; + + if (counter) { + // add the volume detail panel to the popUp window + popUpWindow.add(volumeDetailPanel); + } else { + // error handler if no volume matches + JLabel error = new JLabel("Error: No Volume Matches."); + error.setFont(new Font("Arial", Font.BOLD, 24)); + popUpWindow.add(error); + } + + // add the command to close the window to the button on the Volume Detail Panel + volumeDetailPanel.setOKButtonActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + popUpWindow.dispose(); + } + }); + + + popUpWindow.pack(); + popUpWindow.setResizable(false); + popUpWindow.setVisible(true); + + } + }); + } + + @Override + protected List<? extends Action> defaultVisit(Content c) { + return Collections.EMPTY_LIST; + } +} \ No newline at end of file diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.form b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.form new file mode 100644 index 0000000000..5c73074beb --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.form @@ -0,0 +1,215 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="jPanel1" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="OKButton" min="-2" pref="100" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="145" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jPanel1" max="32767" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="OKButton" min="-2" pref="23" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel1"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="112" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="startLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="volumeIDLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="lengthLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="descLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="flagsLabel" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="flagsValue" min="-2" max="-2" attributes="0"/> + <Component id="descValue" min="-2" max="-2" attributes="0"/> + <Component id="lengthValue" min="-2" max="-2" attributes="0"/> + <Component id="startValue" min="-2" max="-2" attributes="0"/> + <Component id="volumeIDValue" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="59" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="58" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" pref="35" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="11" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="volumeIDLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="volumeIDValue" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="startLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="startValue" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="lengthLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="lengthValue" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" attributes="0"> + <Component id="descLabel" min="-2" pref="14" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="flagsLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="flagsValue" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="descValue" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="25" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace pref="15" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="flagsValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.flagsValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="descValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.descValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="lengthValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.lengthValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="startValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.startValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="startLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.startLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="lengthLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.lengthLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="volumeIDLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.volumeIDLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_SerializeTo" type="java.lang.String" value="VolumeDetailsPanel_volumeIDLabel"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="volumeIDValue"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.volumeIDValue.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="descLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.descLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="flagsLabel"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.flagsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="OKButton"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="VolumeDetailsPanel.OKButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.java new file mode 100644 index 0000000000..3a4aa9660f --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/VolumeDetailsPanel.java @@ -0,0 +1,205 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.directorytree; + +import java.awt.event.ActionListener; + + +/** + * This is the form / panel to show the Volume Details. + */ +class VolumeDetailsPanel extends javax.swing.JPanel { + + /** Creates new form VolumeDetailPanel */ + VolumeDetailsPanel() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jPanel1 = new javax.swing.JPanel(); + flagsValue = new javax.swing.JLabel(); + descValue = new javax.swing.JLabel(); + lengthValue = new javax.swing.JLabel(); + startValue = new javax.swing.JLabel(); + startLabel = new javax.swing.JLabel(); + lengthLabel = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + volumeIDLabel = new javax.swing.JLabel(); + volumeIDValue = new javax.swing.JLabel(); + descLabel = new javax.swing.JLabel(); + flagsLabel = new javax.swing.JLabel(); + OKButton = new javax.swing.JButton(); + + flagsValue.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.flagsValue.text")); // NOI18N + + descValue.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.descValue.text")); // NOI18N + + lengthValue.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.lengthValue.text")); // NOI18N + + startValue.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.startValue.text")); // NOI18N + + startLabel.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.startLabel.text")); // NOI18N + + lengthLabel.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.lengthLabel.text")); // NOI18N + + jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); + jLabel1.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.jLabel1.text")); // NOI18N + + volumeIDLabel.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.volumeIDLabel.text")); // NOI18N + + volumeIDValue.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.volumeIDValue.text")); // NOI18N + + descLabel.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.descLabel.text")); // NOI18N + + flagsLabel.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.flagsLabel.text")); // NOI18N + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(112, 112, 112) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(startLabel) + .addComponent(volumeIDLabel) + .addComponent(lengthLabel) + .addComponent(descLabel) + .addComponent(flagsLabel)) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(flagsValue) + .addComponent(descValue) + .addComponent(lengthValue) + .addComponent(startValue) + .addComponent(volumeIDValue))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(59, 59, 59) + .addComponent(jLabel1))) + .addContainerGap(58, Short.MAX_VALUE)) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(11, 11, 11) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(volumeIDLabel) + .addComponent(volumeIDValue)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(startLabel) + .addComponent(startValue)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lengthLabel) + .addComponent(lengthValue)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(descLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(flagsLabel) + .addComponent(flagsValue))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(descValue) + .addGap(25, 25, 25))) + .addContainerGap(15, Short.MAX_VALUE)) + ); + + OKButton.setText(org.openide.util.NbBundle.getMessage(VolumeDetailsPanel.class, "VolumeDetailsPanel.OKButton.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(OKButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(145, 145, 145)))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, 18) + .addComponent(OKButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + }// </editor-fold>//GEN-END:initComponents + + public void setVolumeIDValue(String arg){ + volumeIDValue.setText(arg); + } + + public void setStartValue(String arg){ + startValue.setText(arg); + } + + public void setLengthValue(String arg){ + lengthValue.setText(arg); + } + + public void setDescValue(String arg){ + descValue.setText(arg); + } + + public void setFlagsValue(String arg){ + flagsValue.setText(arg); + } + + public void setOKButtonActionListener(ActionListener e){ + OKButton.addActionListener(e); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton OKButton; + private javax.swing.JLabel descLabel; + private javax.swing.JLabel descValue; + private javax.swing.JLabel flagsLabel; + private javax.swing.JLabel flagsValue; + private javax.swing.JLabel jLabel1; + private javax.swing.JPanel jPanel1; + private javax.swing.JLabel lengthLabel; + private javax.swing.JLabel lengthValue; + private javax.swing.JLabel startLabel; + private javax.swing.JLabel startValue; + private javax.swing.JLabel volumeIDLabel; + private javax.swing.JLabel volumeIDValue; + // End of variables declaration//GEN-END:variables + +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_left.gif b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0d85dba4b9abc810f454a014fafc142f97f5f16 GIT binary patch literal 874 zcmZ?wbhEHb6k!ly_|5<V%*@Q1nwmN~I>yGv<>lodp;0^<0wW^?6o0ZXGBEsS&;fZD zlqVQC+!_9J%6M#8aIl#}SSzMt1A}uj1BZ=@hQcG4Mi!=sIT{X+-P#zO+NPW+XgD#E h-*=u0XVKH6eH!{{e@;w%<}zDYHtx>J$>|OZ)&M?!B|`uJ literal 0 HcmV?d00001 diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_right.gif b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/arrow_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..85272ad99cc0df252748b08468d0649a9c90fcda GIT binary patch literal 870 zcmZ?wbhEHb6k!ly_|5<VGBPrup`jqwC>{-g5f%c9KUo+V82&Tpfcy>06AT>A4F5T0 zJT@#i*vuiU6{C@$=)}MvBh@0|pyb#gpv!fHW5FWVK1tQ4HyT1qj<+h?C)vE5u=rTL UNc^E5jm-<s%(lp9V_~oc0Lob(Pyhe` literal 0 HcmV?d00001 diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/back-button.png b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/back-button.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c02aa3dd41f715b488ee3ac11425ccf12a0142 GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU{K~@V_;wqHxgE6U|?V@4sv&5Sa(k5B?AKk zOS+@4BLl<6e(pbstPBhcoCO|{#S9F5he4R}c>anM1_lPn64!{5;QX|b^2DN4hJeJ( zyb?V>*ARs=V?9$n3v=s+SOx~>Kb|g*ArbCx!#zD_JBn;;_3F-y^|-3=&Mh!-@v+)o z>#UVtu?FuJHLX~1Y^es<I&tks2N!iX1uBZaT{*q!Ye3axFa56yaaCHaVqSu}k6u?d zD__2EuNE~ufT!lno|)h8)qKA9Tiw{qZ2SJ(9CP{(+`4sZ@ztwWt;57;A3b_>`RC7{ zk4>E_8ogS{+}L>W{8_Vpbw<QTL~P(II(_<d`SRt<c^5BUT+PhPY+z@%ug@ia-knRA zCcQm!<Vg3vefyek-HOV{$Y?lt@Zk62;^H#%Sz$hR|1Mm(aQfW2bK9%-%6<C$dEu^I zQao&j6Z7-m=lT1eH*+s9|8BN$_3GCwE4KG;Q-AT|#SOJB+qWAp=<hvw@?=ACzR=}w z8}{%2Us_!JIk2$M@X51hMj~QjPMMjSQ>ISc7}hmul8}JowwPu6I##XHy7l6A@x;Tw zf*$tWzk210jHrl+gP-5IsSRdP@$vspCKdfqU1b<GTV&>*JvJxKo%_cf85y}e#jfm{ z%y;Ei0W+sepC0X&S5aZHVcojC>5E*?85tWZDl0cP{tAlB>w7(OljvW8i;EU1eSUK6 z*s)25QSlnBTQaJueob{=emSu0oLYP9{MMiU=S`c&#$u$@Vf4Ox?VNd6{H843=IQA< zh4=E455;=!-+nKdF=-Oh%9ShCb>Dw3ob>eB(_^|9dwYAAZhdmn)YLR|!DQwjFF(J1 zWiD=ROzUcA$%yTjTD(<WPL8j$vy(@}mg)WH!k2UA=xsM%uKkOTo4dKAgX8CkhmxOV z)cHL%_4N3JgoGp>J$@{?q&B#Ck>2;jQ(-a678VjtPEJ18W3scex4SL=DJvntVQ6UB zqq1~n)ID?6%R5T?ZiBpcX_m)_H|w`<+_;fx@%HEM-}6VUoi=d~9}5c$gOEx6xvg8b zPEBB`|M}}zkgP*ViHUPahzRrapEK^vS#dhoB|0;HZ5XqViGSa}`vy(BE?l^f9~T$b z;1VhFvRf%2e#+9vHGZp(r|zueYMDQOe(IBs1aEI|CaYhs-o5iXdTLQc=!b9L*yQEq zPoETY+%q}T(8yYADpyleQ-sLN6N(<cpQYrfr@wyrlC$IUMCGOm%`fgv^XJZ;yHbzg zGH=Nffyh;&-VK_Ix14-+X-9WA_s_dqew<R#dK5of{oRk|pp_}z0kdpvYz|z!IC1Ni z;#K||ZTr}ym1Wnd_kFgLQ?~zb=;srsCw<u$B+oD7RaaMEAXQjgyqLB8!@|V}%UiUa zRFlfe!c-50D$PGLaqY#7J>`i>cM4Kco*2%1lP@D9)A#1>TgKqMt=3`xHa|XH)Noyk z^`Eb<wn&$<&*!kz)TLi1EcSgQe39>c{Q3=Pc8{{p>^dRnxMm^yj}Mh?{?<oRQ=eWt dUoYQi|6;vU@)Xr`{0s~X44$rjF6*2Ung9R<BbopJ literal 0 HcmV?d00001 diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/directorytree-helpset.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/directorytree-helpset.xml new file mode 100644 index 0000000000..70b8cfd113 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/directorytree-helpset.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpsetref PUBLIC "-//NetBeans//DTD JavaHelp Help Set Reference 1.0//EN" "http://www.netbeans.org/dtds/helpsetref-1_0.dtd"> +<helpsetref url="nbdocs:/org/sleuthkit/autopsy/directorytree/docs/directorytree-hs.xml"/> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/explorerWsmode.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/explorerWsmode.xml new file mode 100644 index 0000000000..92b65d8d47 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/explorerWsmode.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE mode PUBLIC + "-//NetBeans//DTD Mode Properties 2.0//EN" + "http://www.netbeans.org/dtds/mode-properties2_0.dtd"> + +<mode version="2.0"> + <module name="org.netbeans.core.ui/1" spec="1.2" /> + <name unique="explorer" /> + <kind type="view" /> + <state type="joined" /> + <constraints> + <path orientation="horizontal" number="20" weight="0.3" /> + <path orientation="vertical" number="20" weight="0.5" /> + </constraints> + <relative-bounds x="10" y="22" width="32" height="50" /> + <empty-behavior permanent="true" /> +</mode> diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/forward-button.png b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/forward-button.png new file mode 100644 index 0000000000000000000000000000000000000000..f89271f1485ca4835f407c4635fe84363877a866 GIT binary patch literal 1156 zcmeAS@N?(olHy`uVBq!ia0y~yU{D8P4mJh`hMvWNrVI=WjKx9jP7LeL$-HD>U|>mi z^mSxl*x1kgCy|wbfq}EYBeIx*f$uN~Gak=hk;1^hAX(xXQ4*Y=R#Ki=l*$m0n3-3i z=jR%tP-d)Ws%K$t-4M&b!2HG2#W5tp{cX6XM|7abRJ~cPQrub@`wFim9I-fm(9ln? zP>hqyO>mXPqaN<1yEgb0x(Kr02@$xv^YyMR7ecS!ExG8s@KUJsl=Qs!e?L5(U6U;J z*;$-Z=3d2n>;Hc5kDfpO{d44jbjC{E3-|A@mz0*ie6qT0_O0&j?p~?hXX)kT<?Ci^ zJrUN{)HKu*;R;xN^?Ge>ZRn@DPuiYs+GMnN|9*Rosa_pjUB8meX1~50psZU|S}NMa zQOu~n)WpQpbY@3{lM_=*Tbol#%95?CSFe5?$@2R3YhO=K&-;RAYs0vMJpBCF7$w5Z zJ3BkW3=7UlNlRCYi-@qSXumHlC&wo!D7am1^2@E!EZetlcMkZdtJ&4rS;%E0GtVg| zMrO&9B@S6xTKALw2u36)KmK4ZEF&ZHq^Y@CQmEz2moMxd-rkRoJ87@Ee520SM(n-% zq>C3Xx_nr-dGqJDFJHdop6)4R*~9O)?!<``6Ij0lrUd#3NgrF9nw@>xw8`1oIVK`P zVzI=@Q>UsL&Ybb7^I3aAykCCy=K10&C#+orlK(L1YRnAbUt?usb7p0TmfOdPlP4cm zwzmGgZ|Ob*vGv{GJx<<uFZyMI;EA&m&C{i&rMZ^t$;rw-HCQZh)GaS>UARNrf+J2% z@5{@|nB-ME$`#v}rHP1FR#w`4`uzF5qN)0t+v_<uCCNUrESx_{&CX6vN=nLZ-I_If zCaGB1*_}(|OcYUPWo3<H-8oBW<F;+zE<bvd)WLjk<w{MyZq3ELReSHfUJ!8UWl2Np zuTzb8-n`LiH#~46)Ya8Bj#aW*h&}oJ>n~qQmN4)9`LmKQc&@0J7?WM497DV$Uvi?~ z9<{6D?-%d;JL8;E(c8Cg=j)1fdl@~ua9!q@)Z(*CmoANC+!wcC&mNhosw%sjygV;; z=8dsYQI95w2(x&2_=SXoG+fMRxp(j0>BWl|Gb}I7D=nS6dfmD-6&2Rzg9pxYzfJxf zGgCdNqV}eno7=s)bLQC8IzO;Ip6IY?)-0(NYt~F*4Gj%#2p20UDY>Dhrl!Nr&c5#M z+TXu_%Pccoy?QnCmIcQh<?r6Q<&~E*qb6TZPcKH<?Vp{sHMfj}#E;%c=Cfzd`dz$q ziK)MlLm)%8TT4Ft%A<B>JH3t@Gfw-femvIN%4!^!Y%dVTbWh6W0_*n~bLMOj+K}=2 zz^;=1nKLD|8K37H&U@j-^oivkH}jO8k#TYFin?d0w{D1gIZ<WH)~$^H+FN(-+!-%% zxpbb*;oR8l?Chv7ObbF8y{~+|cW>Uo+|+quckbT3x^De?=6#p<$;!#4RYv{a{6$t? zK6|52%|WSUb<>nATh5<9KQ%&2X1-mK%(KfcH#ey3CTzaR^e_AmtIXUz3DWPQR2di; O7(8A5T-G@yGywq8ANrF3 literal 0 HcmV?d00001 diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml new file mode 100644 index 0000000000..3b34adc2d7 --- /dev/null +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <folder name="Actions"> + <folder name="Window"> + <!--<file name="org-sleuthkit-autopsy-directorytree-DirectoryTreeAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.directorytree.Bundle#CTL_DirectoryTreeAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file>--> + </folder> + </folder> + <folder name="Menu"> + <folder name="Window"> + <!--<file name="DirectoryTreeAction.shadow"> + <attr name="originalFile" stringvalue="Actions/Window/org-sleuthkit-autopsy-directorytree-DirectoryTreeAction.instance"/> + </file>--> + </folder> + </folder> + <folder name="Services"> + <folder name="JavaHelp"> + <file name="directorytree-helpset.xml" url="directorytree-helpset.xml"> + <attr name="position" intvalue="3086"/> + </file> + </folder> + <file name="org-sleuthkit-autopsy-directorytree-DirectoryTreeTopComponent.instance"> + <attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer"/> + <attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent.getDefault"/> + </file> + </folder> + <folder name="Windows2"> + <folder name="Components"> + <file name="DirectoryTreeTopComponent.settings" url="DirectoryTreeTopComponentSettings.xml"/> + </folder> + <!-- Not letting NetBeans manage docking for us at all. It's all handled in CoreComponentInterfaces:CoreComponentControl + <folder name="Modes"> + <folder name="explorer"> + <file name="DirectoryTreeTopComponent.wstcref" url="DirectoryTreeTopComponentWstcref.xml"/> + </folder> + <file name="explorer.wsmode" url="explorerWsmode.xml"/> + </folder--> + </folder> +</filesystem> diff --git a/FileSearch/build.xml b/FileSearch/build.xml new file mode 100644 index 0000000000..78e6fe7c49 --- /dev/null +++ b/FileSearch/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.filesearch" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.filesearch.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_example.png b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_example.png new file mode 100644 index 0000000000000000000000000000000000000000..b9cb8a80f2b73946c2626c67d495d77c56f9a2d1 GIT binary patch literal 13632 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 literal 0 HcmV?d00001 diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_usage.png b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/FileSearch_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..33072549c19123ed1ea25bc1b75b92890aa7eb08 GIT binary patch literal 14856 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 N22WQ%mvv4FO#t=TPTl|j literal 0 HcmV?d00001 diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html new file mode 100644 index 0000000000..f47136dbbb --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-about.html @@ -0,0 +1,54 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<html> + <head> + <title>About File Search</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>About File Search</h2> + <p> + File Search is one of the main windows in Autopsy. + By using File Search, you can specify, filter, and show the directories and files that you want to see from the images in the current opened case. + <br><br> + Currently, Autopsy only supports 3 categories in File Search: Name, Size, and Date based search.<br> + <b>Note</b>: For now, Autopsy doesn't support keyword search and regular expression. + <br><br> + </p> + + <h2>How to Open File Search</h2> + <p> + To see how to open File Search, click <a href="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html">here</a>. + <br><br> + <b>Note:</b> The File Search Window is opened and closed automatically. If there's a case opened and there is at least one image inside that case, File Search Window can't be closed. + <br><br> + </p> + + <h2>How to Use File Search</h2> + <p> + To see how to use File Search, click <a href="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html">here</a>. + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's an example of a File Search window: + <img src="FileSearch_example.png" alt="File Search Top Component Window" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-hs.xml b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-hs.xml new file mode 100644 index 0000000000..13bffc15c5 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-hs.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 2.0//EN" "http://java.sun.com/products/javahelp/helpset_2_0.dtd"> +<helpset version="2.0"> + <title>FileSearch Help</title> + <maps> + <homeID>org.sleuthkit.autopsy.filesearch.about</homeID> + <mapref location="filesearch-map.xml"/> + </maps> + <view mergetype="javax.help.AppendMerge"> + <name>TOC</name> + <label>Table of Contents</label> + <type>javax.help.TOCView</type> + <data>filesearch-toc.xml</data> + </view> + <view mergetype="javax.help.AppendMerge"> + <name>Index</name> + <label>Index</label> + <type>javax.help.IndexView</type> + <data>filesearch-idx.xml</data> + </view> + <view> + <name>Search</name> + <label>Search</label> + <type>javax.help.SearchView</type> + <data engine="com.sun.java.help.search.DefaultSearchEngine">JavaHelpSearch</data> + </view> +</helpset> diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-idx.xml b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-idx.xml new file mode 100644 index 0000000000..34807378c2 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-idx.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE index PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Index Version 2.0//EN" "http://java.sun.com/products/javahelp/index_2_0.dtd"> +<index version="2.0"> + <indexitem text="About FileSearch" target="org.sleuthkit.autopsy.filesearch.about"/> + <indexitem text="How to Open FileSearch" target="org.sleuthkit.autopsy.filesearch.open-filesearch"/> + <indexitem text="How to Use FileSearch" target="org.sleuthkit.autopsy.filesearch.how-to-use-filesearch"/> +</index> diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-map.xml b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-map.xml new file mode 100644 index 0000000000..ee1c91f8c3 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-map.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE map PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp Map Version 2.0//EN" "http://java.sun.com/products/javahelp/map_2_0.dtd"> +<map version="2.0"> + <mapID target="org.sleuthkit.autopsy.filesearch.about" url="filesearch-about.html"/> +</map> diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-toc.xml b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-toc.xml new file mode 100644 index 0000000000..bc5d1b9d05 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/filesearch-toc.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE toc PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp TOC Version 2.0//EN" "http://java.sun.com/products/javahelp/toc_2_0.dtd"> +<!-- +<toc version="2.0"> + <tocitem text="FileSearch"> + <tocitem text="About FileSearch" target="org.sleuthkit.autopsy.filesearch.about"/> + </tocitem> +</toc> +--> \ No newline at end of file diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html new file mode 100644 index 0000000000..5d7839f9f9 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/how-to-use-filesearch.html @@ -0,0 +1,52 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>How to Use File Search</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>How to Use File Search</h2> + <p> + Currently, there are 3 categories that you can use to filter and show the directories and files within the images in the current opened case. + <br><br> + The categories are: + <br><br> + 1. Name <br> + Search for all files and directory whose name contains the pattern given.<bR> + <b>Note</b>: it doesn't support regular expression and keyword matching. + <br><br> + 2. Size <br> + Search for all files and directory whose size matches the pattern given. The pattern can be "equal to", "greater than", and "less than". The unit for the size can be "Byte(s)", "KB", "MB", "GB", and "TB". + <br><br> + 3. Date <br> + Search for all files and directory whose "date property" is within the date range given. The "date properties" are "Modified Date", "Accessed Date", "Changed Date", and "Created Date". You must also specify the timezone for the date given. + <br><br><br> + To use any of these filters, check the box next to the category and click "Search" button to start the search process. The result will show up in the "<a href="nbdocs:/org/sleuthkit/autopsy/corecomponents/docs/dataresult-about.html">Result Viewer</a>". + <br><br> + </p> + + <h2>Example</h2> + <p> + Here's an example where I try to get all the directories and files whose name contains "hello", has a size greater than 1000 Bytes, and was created between 06/15/2010 and 06/16/2010 (in GMT-5 timezone): + <br><br> + <img src="FileSearch_usage.png" alt="Example of File Search usage" /> + </p> + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html new file mode 100644 index 0000000000..1f765812b8 --- /dev/null +++ b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open-filesearch.html @@ -0,0 +1,45 @@ +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>How to Open File Search</title> + <link rel="stylesheet" href="nbdocs:/org/netbeans/modules/usersguide/ide.css" type="text/css"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + </head> + <body> + <h2>How to Open File Search</h2> + <p> + To open the File Search, you can do one of the following thing: + <ul type="circle"> + <li> + Click the File Search tab. + <br><br> + <img src="open_fileSearch1.png" alt="Open File Search Top Component 1" /> + <br><br> + </li> + <li> + Select the "Tools" -> "File Search" + <br><br> + <img src="open_fileSearch2.png" alt="Open File Search Top Component 2" /> + <br><br> + </li> + </ul> + + <b>Note:</b> The File Search Window is opened and closed automatically. If there's a case opened and there is at least one image inside that case, File Search Window can't be closed. + </body> +</html> +<!-- +Tip: to create a link which will open in an external web browser, try: +<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"> + <param name="content" value="http://www.netbeans.org/"> + <param name="text" value="<html><u>http://www.netbeans.org/</u></html>"> + <param name="textFontSize" value="medium"> + <param name="textColor" value="blue"> +</object> +To create a link to a help set from another module, you need to know the code name base and path, e.g.: +<a href="nbdocs://org.netbeans.modules.usersguide/org/netbeans/modules/usersguide/configure/configure_options.html">Using the Options Window</a> +(This link will behave sanely if that module is disabled or missing.) +--> \ No newline at end of file diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch1.png b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d86d1340881b387b0aefad36ed5409ef2112cef GIT binary patch literal 30977 zcmeAS@N?(olHy`uVBq!ia0y~yU<_tpVD#l+Vqjn}`YL^bfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#J$1dAc};RK&fFWls=s{eIt@ z-_%5OX^Y9Ke@j_iHJutRh}d&#EKo3QVEw^j+N8u$)~OJ>B+^bn!Gl+^#F6tX6QdKC zZ-|hP)ywbo#`$UG@AKBHPq=e-N88@Jn)!8~Z=LbGc=q?pDNEY_KRJ;1wQ8>4a+|4F z0#!KgIoQ<j*OyLOC-HCk33(q^r3?SBRytT#P1+kH)wxhh>ayk(iM`F@N0;?ylsw(& z`0rTd%F{-tPBs|H^&dYty(O>aaNTSX--aiKsX<TYJZyWic$MuR6@LL=(Ir(~%xAsX zT3nmLb)0>;?QbwkO*U7pj98-_*mZKTQb*Jp{bd(lG8Z{}wM#o`tc^GP<36iFrTIVa zZMQb>Sob60SG(F?oHkgc<=c_aa@lM08wu7Eaz{;=n4CPHUQoE@H92ahaYCGQ@JvtV zi0I60zos+Kr+BysXEiZK&;Q7IOl6YezXSGiKlD#df988j(($-R$3&+2is~~sdRN`# z)mp_k?URT3`{kEs1c>rRw{Yk__f(P1=HGJYe~TsOM-{ol4395s39eku)tKa_^g+xl zhj}Z9qWg-ky=;+1MaDV`_GYId&zfk>OuslYp?G83S)bL+XO=TLPK#N`{X|9UUr47_ za@b6XY4c95I`eDK%ifvN3CrFdIHA%aVyw61k=Iua<;J@kRYES!ENRve6@T6RBL9bT zUC~T+`-z!?*;;?LoD@ktwRPSs!Kq;?EUR25xlQ5>6F&E@F>ytm<H-b}!ynnRJWLe$ zE$3hHzZzvTQ;~n>&(Nkx{;a{*_QZU6lBHZWC5}lgBce^~F{jey3tbBDLab~$?o751 z`4{LFa7W^Cz}kgDGHMDEv%On$d6qgwyIB~oRGA;zplxx*Yt2EM3R}&upIjGJT=*q0 z)j{j9%XHV|^&3`h)Qn8fU2h^CSn*{#uWy>x?hKXGXC^7)TW?55@+$itG})^7`%~J3 zDaJk_qK}f+2VGvJb^6fCD>I{wl;-;^E%JOY>G-SW4HuR<9AntJ%7Zs}WmiGbRPP`C zNqkKGZz4i?9JRDAiBFpUfK}k9mYxz<lLnLA{B1&sZlSR$YunCWVVe+eQiti#;uq{Y zms;j+`hVQi%5}n3?u_IImt|(yEs~tI!FQ#nU0TkW2BUt1fB=oiQcvy^jXy#cq^zu3 zI`uIZ-=`%^{x0n&Y*>~tUHD`yeLC0fTBKlIuyNa)RF;;;pJ};?0`6a(`OW@|C<}`6 z{&~<gD^o?Jw8Z^}?a!AFPtFnJ=U;Vl#tr4ki?R~TWmMwC@6B4)Qp^+4tFb!Z+VyL3 zMMryYb$Pcj@u)l2HSwoRI~M<D`KqNmeNz=qx2*6osBD$|eEbB%8qudlGxwin<xCFv z>iNMv(O`{;V7;Exo&D)+kDgJU)cbAP68F>0i~RnHi67+6Xmt8CeFej>2|t)xU7kp6 z77{%W)p@P)*B=?xy7fU^TKOHP_awc)DePsMcBDiiyZ(!x#v31>8I=wN7y6QNC6=tJ zpR#OgO?tEB#Zw1Zs{Po->!v<@BsSl}dTOQ8SB;-BlRO1|J_QEZl+1Javr^BYcEOHD z8`<;IuSa>a`Lx`hv2v=5+sUuHcE0vsbSf#UZKF(~Z-c4clKHlUU;2wzz7*9C&ARmG zp<BPn%COB=Z&x_@HWUTP7riW*_l51Z!IF7r^dI!uc`>hKG1Z&(uj>+v(T6*GPFPLc zB*?P!)C+FuZaemd&$DmceDJ;P)`1&G3jL<BMlb6#G~Bdg&Fqg`bw09bH5VJW1#V_u zetrS#N&YCut&fr&jIImFGOi0vdHKM^LDOYh_rmIUmzI4qPTA~aJgKkKHeX1vI)Lkg z%)bfkJq7}G6)Va%1-^@r^pFk=Hj-O%eEAO!Hok^8Ka5u&i-|4~oO$s1j1Nkd##(v} zO<Pt)Zhhk5+~)1_DRSc-b;YoNi8WR2eWG8#WFGJG+Mg82ndlOA;qdf;2%87`;?<`v z_DsKVfcx{$t7ZPTzeEeD-E_!Yuypory_rELcUN!mE#9=r|8Lo!1K(n&uCCZpw<z&? zy49c3fA803f1l%fnlJa)3FU|VZD!do-adW$^5H|*67jX1SGeBI^irNFAnLHoy+=G? z{|QmUtxx7y-PCkhAH1<dg(+2Ps<Th6ppbWJoyh4kvwfOXLyjF05EC{|&nQlLnY!rQ zQa{gQOIg0kXh&t5=&kb!ELeG{Ml!fC_E=2qI{6NL*V{8A<x=-dJ}H--d4jc<U$AJx zHz$G82|ph-IZgP#h$-t&=k4=(9ZCvX4OQ$f_!jJKkIDQVmRlRKb)|;!-|QtUA{#hE zwJt7R>&f)e%1LyExTo<#g&^<qbNKXFcyz8s6djKG&SWXLRPX1M9J>~$>d=gDEA=L5 zx7P58x+i{jX`lbs<)7-->FsGV?yAcgbsHUyVvclIHdvecLP}x(>wUjIvg}eXDR8ZS zeCunnz5JiQ4;m-9ZQW&m`{BmE+&_Q*e&+t<=v-M<^{4jVqi0ud*Wdf;?pGFg<@Dd# z+cV!iWnI;sp|AB{pyPn>|M@3ZI0^KXU#dzFHm);UzbCbF+R|B9`wnm{=3bM3U`iuT z6A$Bd(WnUqevhZk{kJ+`QAUZVw6O^9)=r%dS=tKEk3>#2Ran1GXu7!O;)6xu6VHTl z7w2eXiU=r~^SJ++{?|W#(cw;}_=pIWL;kA!cPv=3V#9(J3nG-x2mW~2rp5G#Ltq)J z?tx>|G((RpU!>c<WZ?v@UE<X#U*`HqmcKK!+{Rv<&AIt-eNK&psF?RT9Ze%nu@h@` zPC6J$6(!!{&Hix3@nm}Gp|%iB8MdZ3pM!V3*rCF9^r8F7^mV*Uj)n<LPXCrpI)7Gd zwcb}LkGFwxAM3Sd&Ur7Abw$+loy@8C5;@COmTbN*$G$$`-831G8?|=Im0zlprQ7d4 ze;yh$A)Y~}=_bR?glDDm;v&QI-{09${(svO!^w*}@4BCU&-p)9cJ7@|cV+in;pDVt zGkYi&FIc_oyn$G{%2KhO)fV6GOrCyp5}&45(5p!&94{~0Z~s3=BFaf+V!AT7O7#Md z8BrHkED3F0bZgUuX~BCqL&Dp*zI=M9x%U2j&&l>%b6#%gyPD$HShMcUuQxXrvY*&3 z_x_K?^2*Y%<XMMLp7sA4<#&1Sm(r~B3R~92toU+ir@ZsMOZmU<2mi0TnSWz_&n~&i zVdpESq#ZgLkjZnjQ;DOA*`H_kysp|;pTh57=>Pxjr&MdJ!k-T;XX+Gh{7+iM9q{8b z=kdn>{=ZmHRQY_Hk@+kwKDN@idff}ZFNZR61N1jA%D)kBVqAEse;31ECbl)F4y<gM zzcMkU_L{}5H|w)p4o9;;y{{sfETNb7M}6y6jXyOB^KaHDpJZQE(LbZ|I159_2A7Ky zuPhP#kgfJgWSN7Ar=h51SmZ176>q06+F?=A!+6qOE+%l{P5pnLA6yKJWxspTwnpdf z^CL$eX>UJq!??^N@40B~sdK-7dnKOL`ra#H_TfGE^o+wB584R0Uz#=Piru%2M-RI@ zKWbamT>N_6_|<v_0mg{NmDNJ?t$H+eoMQEVp`P`K?-KXxqe>H$Jk%uHmmfUL+CKSY zvC$C^J-ZzT<{db{ntjpkeS1G^)i&%*@R=w5Yu=kl?P@<VR69M68C87ec`NoY`-SV~ zT}odqwiN!q$!o7$opgP|QFdcb*_loDJ73;hcuC#!^|!Q|kEf<d7JrLbT5H1<@+|-T z_b9uv%dcWHyX{_WOgeJu^B2*TOhs<LE^YU#*}NcMS<BM)UYB?DPUW|Y4WsR5?*1*c zo@rP3ooQa;bv%_Hj|Xqz%-B3(`vF^n!%q6Fd^P{q-cLI^Uu|#wpIz=%i<bQ6FJJKe zAsgG@gOVC84CV#gR!wZ5)^PkgBrDNaQ{*o<aW%skCO3tR+z(YNJr-XI|7pVgiR-^m zdNbQAp5ST67+JrBhV<EqSBJFxn6$GyMk&Dfrqm4a-0Tv$^D2_!DPh|-E(?6EoWmCR zRx?oaJ*Oz^UIt;A-i7rqUE5Mm_!oK4?&3Q=!EmP1Ew?L^C+mNCdm@2v*>Yzq71gS0 z*B{g4bjtaUzF+qB>z7Zvrj<TCb<^AY|JPGz)=Vth`D~`n|NZN#WA-sJg==mpn;XXa zD&+g6x&M@J-oD+<t@4>`Cev}j`B7(;c6+EB=}VtddFmPYCx9t%#>IOpW2{QPU)ZB5 zp2}!2WB>7Qb3Xpv^ldZWlEBi=r5apKS*fn6m*qp2g-E%q)eP8KaA-qJoUH5j4;(tl zzcv@HKAt`Cgz0Rzl0`nJK2Hp)k5uw~>3;8(bV=N$vg@-p-}G3$<h0$!?DGB@=Xw<v zH<%@}c^mgFKWWuhQh)xh+2f5T)EKkMCVpWotv(_8WP?B|`%mMbnL=r+c$I~hyXuFo zy#IURd%nNEmAxAzMJqP^KHxHCx`j1Ec)&~dpX~b-V_7DY?O3SHQV{6tAb(K!lYOm= zigYQ1MnjF#lQsR0c^+~rLb|vcXI?z4a_D@I>U+NA$3}-+w`+X%`6U{--TU24!)@X3 zDvg+bKCkNdZP&$}`J(Mam`mWfjDi)@lFxC=J_=y9GdN*)I$(ceUDr~sD9#^-Ezg{< zs=FQb=Soo%xvC~1a(0oI|NP+7N6(rWX3UeT+`0YTos&CjZ9kV?+d6wX*ZM!vstZ0j z=Qh8#{d1vKbjhRc=lb(J&+jNQZPzwY3u-wz!$m;ezx?TuZEyGPHs2-xMECD+E7|BP zZ?9~MTORhc-skGepy?%?@ss?NQst`Dcf39|*+pgZ_cJ-WO`2!s83p!6`|WW&_~3gw zpUw*zQK4HVMoG8wSDtt=ee%6E#<~Afr7VqKuC=<%7jw>1;O_gczCn+?|3+PntY&-R z{cmIGUA;F^bNrU7KW^U@TOaW!x#Di#m#FDoSH0q{FN;&zc}!;Cq&@#OR=qw@x$x`h zh{*NFy<TM$JWLigS~us$#?9$28M;5OUR|^JQm|ua;ftlm{`M}>onF*&Wpat-%l#f_ zSBD?Zx>m7a@svqZS3X#7U0M^@-)Ev7dcsC}f9ne7S7P(xrT;iRpCGRE;Qge}RxkhD zny~#@GxwEjhw0(<=cnnd;jP^mePe=LZ`=30U5|B^nl4CO{o%$JZlC>3#})hq;uQbc zO8!<~<5JoCK{!#tO0=O?alxv_Bahu!-*RpBJ)^PE)A6<o8}~`?wD=eHKlXBeR*&)O zTrkP^_r^1dsmJF2duG%>t8sSS%{R9bzswb^OYU8G?f8q%6L$rcE!~lt;Irt4w5!XE zu)}=wJRPFj9~fLc{w^}dlIfM8nD@!{gC~sxtXl7My!v`1G2~awgB#UVm)cm^b=ODC zSNHr`UX&*yU>{ok)a%>*|NpAr{wl3t@8$WrRQ}V`ot|s<RmbNGUfkrjeBEm0?fMmK z)EreS9vrnjuJ^{Ss_r98=DkU=HxqM@d$@1j>}ai`eqe#aoAr`bvFBcHt&Xp^nX%y1 z6!mcBFP)ca8-K4^vQ&P{`@2hatqb#bKkqaDTmuh>gf!8$-;OlxxVd*phiGBDzMXiL z<;%6}KC9<=+teife#p(OzQ_L6+t`F=&lz9$eL4KI#rgU3{^?>oKdfSZeGl+S`LyQn zNA~l_<>y@A<u;iw{!7f3oOClrTgjT<Ou=5k+$_JZmh8vAWJT})ez|b2dCk>LY?oj9 zto&R*q3%nJ<oXZpG5<G*DgTW7sqR{}CCb!<cS6Q#_dvz-<#m6QGe1taw$<ToyzP%$ zv(@*_oL}**-a5!$%J%VE)8(&h%bzXI@RZv7vHk7lM1=+KiZ$=6F44JNl=X^3Q!np+ z>7|paB2`0nO(<@C#rteAW6+J=>HAl{X5l$_YN_GG?<bZhd~06TcK?f@-Q&m6CzeQb zFng;+edUlhPCQ=kxvs*wNag<~t<60W#tPSXG@r)z#NToh(_JiW_o}mEm9E_;`QYdn z{}XS|OE-iIYA<|pAXwPjAy-3|Z($SLC9mCuOVp27uj>-`)>SsPxzjvlZ<eLq$*wf- zT^kF|ACrAi{<G;%%nNam!0o(l9X5MQT!kdRo;`c^tU7buiyfjur!FKfkPWdc`SIyS zpYrYF9@3Bf|DN7q`}8&6+1F(`f%!kgRi^o6eR|Py_T%!+MM2lzNZO}vDbacDm3Hfy z?px;UpxGU=_trR1cHU*{w|?sK46S>?`-_wk-OsN}+{$qK74KrJnvbDD(;8b8lZ&T4 z=$%kn6P>hPGIqAY3CGy!+x=r|pK<kC+x@dwWcjmT-RWE2?(1S!Ud=kTaNX>vzZGqU zp<g$wD6@WaY15ZWGyis5xw1B{T^7?YFYG{aeD0n38y_y;*XeIwQ5CwWOEgt!!g57H zY3s+jXJ>}F>P_Wa^>W7?kD%|KtApxp%rjd5`qqmM)%35^jUR3IsBY`+<6zzF@AJ2_ zz9{63+bOSTvlZGKe+KV==5u0-;!*k8J^KzS^0n!`K64>5t;V3G&#K_s<Xo2b-!yif zx~FS4`Huc0&yD78f92PhI(7Wt*s#7MXyK`re=7Ib>sB6Uzv6gcK8NV4o}fJ!o<36v zs!ZJ#yf1N2e^lSgvdHd-yv5rl@a~XXoUq}X)_hg<^46CIe2({>n;Zkbz2srL@iANB z@1(x@SAI+{skGyj)mikp#in$Uy8P58>AI7X^IyymeaQI7hTS4*`nnAU{A{HGlO5Kc z=-_>ME>V5Lx%bB=S{#er^G_x3@xI&prpDENzwYBXe`j&l|L@1wvCOVd)Qw0uC2{rj z_dA<Ey1cr1c5yU+b;+M+xti*FZ(dy7`mlD*ZO0$a_FXf+Bvj{no9#Mx?^HdDk9^nO zOf~a=cX5GtMS{zd3AUHi0t`h8j=HV<A+xk=cFa+Sf{6=s8*|$(zA(A;JL+u5bhfMS z|J|7399dQSRV~&k*Uw_^oGm%OCfm+pxzKNZrea~uq4Td~+v;yQTm9qL5awYto#nmz z()vp|-JAc}s+O+z4GL107Wg7@vHZlwaJ{z^53Ra>C}dOKgUQZQszP~x`Affy_$K;k z$yxT_`~5u{xpRJhpM0BrLnpJz->J5n7pL>hD9<|i?8*6iuiaj|yNj=ISR|@wF7$Ur zPq1OZ4q40I54=A^oS)CC2r^|b)I5Cfx%4OfRC}v_=KU`oiN`;25^DaV@IN3g$?(PZ zIJ?Z=jrLCZ&F53QZabKr@;<Kl;tZn@<L+ZI6E<Z2bdJ<Idtc#%Pety&L@&3Ck$1cn zOCNtTyXO2&U)?`btV6~7o+b;e(vs|+Y^LB5c#w@{?*sii%^xmHR~`IrvPbda1NBbk zptYA+HJ+I8nas0VJ4Yb>-l8jyQ<CQLwWViV@8!EJ_T-@LM{9>q4>#Kh)>=7n-!(fF z*tPcgufCJ<g}r^uYB^QK(VPBx-O_ux_gUhuM~_ZxN}DMvhcQRbwRrM2^1Ypu7VGv| zo67G5T*_bHs4;=N@xkMgH}i@L(zGhrH%}7co2MFn>1OL=)c~dNFI%&0c+8JG`fdKU zUwpF1UyolCTV6K5^4;Z@Q}ujvY{E{*J3-rd@7>;+-<)OQ^kz<TWXcKa+}jgs=XQE7 zFS`3-CbMU-;{*R#y-U}#{#}|f|NrgeSLaR!_Fp|R^FzuZwz==z@)xW*of*B&!}tCA zsG6S_st?ZpQ?%3KMWMv5?%z+1j`-g<d^4Tz{MFT~{QJ4zikENFSP<C$E!zH8q0ptY z|5o*_U&<b{ZCTyhyeBl9wK?v@BImtVmaA;e>-u^#{hHhqxwSD{-R|m5WLNjM_fnd` zXDltaY>vyj;!FHaZH)nE*A#c&Ug6E3krHdIe06mgw*}*_k`RT|W=CC?zt0%h80Nk1 zoSA6!hBH2=Q=<Cd^5~+*p3C+s6&ve0+b8kw`!GB9iJaVo6>$ev2&E>h669EJ$R0LL zGBPOR_hhlfHLkW{CE+{!o#wA#UBU8hrd&Wy)5p0vn^Hd?k`bB`WAb>@<)bFt+f{u$ zB{O8Mh<@RfXG-w1Eq#`n%=d|BMzH9CCA0P?6>iAvxFP(pZU3L3Oh)~>^()vy<lh_? zFk>rlc-pYaeBD3pH;(OPi3w)=cdTHz$JE{U;PS!f36&>L-)1gh@Oz|W=9|0zhs}ir z>$I(E?v-w>`!VaLd)xLEmsf_K-Yy*I>h(+N>@L@a*>}w(q&8I*RR0jWu{yG}i}`0t zyLdZm-U}wvs>1O3h1@k8Uu{}bn{;QU&Pv9@2khVTW7q#bCbrlrc)lRd`^W2hyk!2= zRP5clJbUY(gx4ozo7pE6?*5gWwEWE91<E%Pf*SpToX#JR>u2x#TXbqprmREB<a?ZN zepWQk%RRi@?5@qrjk8>uS?tYtUerC^SXHxSN?)?5`25IEIlmK%N-N$pKg!?t&)@mi zMV_v<>4|s6kNx>ncDrt_lls}}--}PaUA5r4|COw>?e6+nn;*<%jFsw}x#s`-@A|eb z_WM6yys_b!^5gGI(jJM+?G^d|^MG5kvh?0x>rDRbp8iVYwf5Ey$^R*To-<4B72ym& zY{}kPwDNLY;Oo}&Jn!t@ZC}-#yj*rR)8Xp9x6a=@fAn?MsfSBA8%sH}1FO&SvTZ$m z<jjT6CkDyRPHBtM=5FBlE6y^r(_VvVO4gnoD;C!|<T{8jg>or;J7sV2k@-|=toJd_ zkV7|19McY5G)()a;>GcK{m<=j&zLscthd>;ciNoU1vk453{G|V1@7eRO4o?4R{MNs z&SpE!<l;PukH1a0*W5pKW#%e%|K*1ki={0(mt#Fw+xy+g_(fhH*K0|Y?w!(Y$+~Iz z0UN_B`&?!_{M)tu+T0^~>{YRu>cQ9QHg7qoeDJJXe*DT$f2~gLb~>7s8^vb2wp`uP zQq_FF!FGlBFCO0Cw)Xb*FaK|Sdv|~KuC_J19qfN^?thhYWr9}rmfbu&U-CWX^M}rl z`n+2HRDQ~rDKE0(o1ZO_N}FKWb<OjucWJ+$TJ405n+|4QddB-#x;RMU{z*ZJ#-r-y zWp7k<{oab6QA+xzBfax^yQ#z8^?Opj9^%`>#Us|fG)%g`NAz$Qd)>dZ->V`rt<F!q zBJ^L?e?onR)V;>AgatBQ%O_5Xth!*myDH_;mi=vhuZ4WnK1@7cX)v?@%)`e0t`<w# z_sf1xwP~rF856K)%_<N3sUfC2BD4>?B?LYdWWDy+edqG~N`)mH%jYL#-AkEaxhnNY zNA;8wEB<uuVw_UF<XDh{mv8og`C1~9SGswf0vAahU30GF74OT{6aUY2bG#N{(d+uu zG<})aar+-0GatEVh)mKtZL~n)kR<QKN0X0S-FnO|NOX0T=Z_bw<tK~oT>k#w-`DT& z^Q-)=R9Ts~*y`;3t~HU`YjRg_aO1ygSN7+~L+9gW$KRgXGv&JRtC`#8-VS1Qwc&qd zvFW7lj|pETd97G@BG{zsTMe|07G?=t-lixr`TtezLuX7Bg`H;3jo2Hi<e8MRhEGaA zH%k1fM7*)@dX1uIR}K{XI`QMV*uL9}4WHGOXRA2mO}X0O^`Vkgg1@*_`7^V3Z_hc+ z17f>(JbWm5Y1U7F^N<jsI-!&#eRE|q-K*?Bx|q6^pXIFe`_<K%|1v(-Z~@!gdw~HC z`}PZ-)Mq)F9?N4jnSZzLl*ub@E1C0dKGntKzBX-50q@QpZ}#O=3U|!9{Bwcsru9rr z`W&tEXRBsi35{x48RoiU%a@5!Vm$AEsw?oSrs)Z0GFIN&v8wLOS?3EEzb`0{Xu0#| z&1^mSBhOa#r?uRibwO#iSc<>ZnzqT6nlUk!tD@Xot<U<N)|#}W<eT24RbEUcu|D?y zf9tpV{jF5_@bH4;;<$5X{UVLhuTHK1WNm+WbLeiffBWo8ilk@WXRlw$?=Hc2T=-)1 zL4E!u)`<cee*L&ILrYS5tI6q>lSM~j)R*nzy~DZnUO+@=_cW!dJ3Vuwg+H~`1;^ZX zi}KE%&=nl5R8_BDI)8`JxBsg&OHR&6ymv=zqx>7iyXj4ZTXQZ*=qH@sD1U6}=IK20 zB1R#9zqC1f6tl13bQicFx}b2$gg%iAI}=LEBw|;%>)1@J&wBE5m#kRh+N<stgS6Gp zgq~G+wxe_U`j7KoR+qkBef$1|!>K3Tjb3=qJUz3fa9Zk>AO*>#Z9M4@#k0H*Pgyf> zm6pW4Q_t>2eA0CM)aJRTa%WxOihz}NTi+ym&r+V&Y0($0`C8-3tsvb)J|<^6ZBu98 z*kQk6WoV=I6sx;Si^c!_cpC8QWypUo(daF?e+yo_|NZ;-<&@}WHx{=Z7qt9U+i==O zG*9XOf-?bMPv{BVS-9K%|Kz(&aonvUJ2h`=KdD;F7RKU}R~x5(ZOfgXlWs>Q7O2%` zd8X8?6Jm(;n8|m1+SHqUf0h)Tn|Ior?bOV@s)f9-k6lk$Vba>A7&&*tFA<Ape@^Ev z`@r*k#f=@xw|m*yxqtqukujQL$~3F$&f(^tYqRnu*x#4f&=DyY+F|-EX<p0c?TKP+ zN*dB$$7Zvo#h0<nm}FEW9^!Uw&4tz6!7CGj&-fNE_|{|I{AbpyIJN4m!YLO6xFu%U z-DHrub0K`$(nY0i^OD!J%{f}a_))*7baP|!na*iPoy@bZ=DU5H_i5UqMT*tiF7tJn zZ#QRQ{3Xee)noka;^FCQEzN(gkt_K!W6`l`T8o}s?$+>@@@1X1hNGt;#KnzQ?eClH z1M9n{oP5^x^vD-=(coo98cSx#$eR9}W3G01Ze`I81{+3mudcZ!XBc(ui@8%CAH5Zz z=CII9t^1LxvF2VygM+-R+@{OB1b3Qq{@-L6{%SAt(huU{&lXHLoK+JkzMy@*&qhZX z0e@!mLkw|o+cf*L>^H8^;E6kRR)cxbg5z)Oi_4}?OHw(#CNbkg&yPb5-V%S-eB@Pi zT&;HJ{4q9%FHb{if~9X>k?P)ksmvr_(q*SAuMF4Hnw>0*W>`Mf2xH${CHirbqCsoy z%c`1<pJq5&E^hd(oO7AmmD^zDGRe!;+YYM<RwwO|l!=hLRnuyj>g!;yG(r4`{DjQp zS?4bN4OnUTY<}@ZgPa`8d27@pn2m$ay3E>Sa__Nyj)?ch1FMd67#%vFeqG{(!PNXe zdfqF-dYcV-&)#fFRZdru*7VWdJtyXc#8j=B=`sgX<I1L7sS|0PbDR5CwEF+YE-@M` z`wJ&&KFGPICn>(@zOaYSB25kc%VDNri|6>7rZ{>pIjhB!-PhE3WL1dbtFTD!<g)>V z#Xqk6NqBN-R)Fs6oE)pD{K&mCt_jAUJil{?#7pfcjbDd0r5*eAV1r#=nnL>GN7ZGk zJ?1|8E*+?4tiyLG;V$P#jqV-oLc0V`#UI{VlDh0t?Z!_l&J^5XbS&<ZTl#30=BGYC ztM^5R3WTP)2VMzY-jKz3&2Z_md6pb&zWYBbU2wiXj_Ke$!?lOr$!M^a96j^MnpuPQ zR^PthD~)%`+>XszdhmpfIh(q#UiI%M^EA2lMKL*s-)KALet6xApsIea#{En8D5SS- z=lZS1bEeT@pF)AK$ImeJ8%K78c_xZ1tGd{&w3mO+!Or}Uj|u9MZ*77j*c3LnT@@(& z*J0e!s<A>NV)g7}n-%_d)tuBg>3eL#p|*sMleZd;Th7?=m^{7|%6j6I%gx&-CjHTt zITYcT`leEI%hZhK1?{U1rrOj7x=xsQG5M3LZ00(<9Z!lmkNcW*oK(^|>ceUG=on+B z!^NZZD=tmUWir=(@%HpQ*~^hSrfF`M1$<U$Eq^wzrYxPUcdzmh0j?VjY_~7AdYV3E zv3hVkt#HH7q>wK=y;pu{PGY{gYMQqZJM+;-<HlXCD^EO{F|+Y*fJ$HIu3ZZQT|_Mc zuk2(?-2O&g)8XdEu47A5FFpD6MA6OQ^o*6^zxa1a{NXg_*)%Khykxh5Y-86HN&bI@ z5|yrEhD)z@NTo_YdmuNz$L5M%1ozZmiSzn(Ojr2$xK6W6lu3KG_SeQTzGuefQ={%3 zSfjbK;<S{QbcgAj#t*^o3@#`erFt0_B`uq}v*zR)*VCawMN=1_i@x@W%R*!46`o?T zkSliC{#)j<RTxc7uT4y=?Ofl`dyL8WcZmdh@$;_><*Qd3CN=)Lnz3i+mrFv1j6EOz z>Lo8R;W9s}@zduW=lj5U37&$nUj#Lq4T}%$W!w^?<sx!&`DV70C4Nhor*gMPFisBj zN>$R-)q41RYPjiUrNc7iJDakE4=(99<~uv>@QI_%Yn76l)&}u@;oLY&Yq!@C&$HfH zQ~hg=(|-DX5u9F`;}v;(<NTiXP7UQSj+KpzmqgUvduJj#H}Py#r{|_W6Xh%$J}z9@ zQLysprj%#lGp_zPr_mK=Bt1!E=ZdQg;h}3}Q~$2kNYd*Tsh`$qdGh)Cm1*j_%T9=G zYB&`maP8SDK33m{nn(Jg>?G}{@VkE6>E+nAsHw?JBzjVc+Uf|8qw0a5rwWDqlJKoj zVOyPX<>B*1ZmV2)bYzPbe{RySjrkDzR;T{z<R#a7-+%u8F~nTK`1rCMN9C2p3-^oq z9sO>@WbQR5UDM*sii~d@yj&(%R(i~9G7(xNR=tzSjW_>C@Ht1nGg~>m=6kLF%oZ-U zDzZEM^kl=<ET2g|y|WfxUHYMG1J|nAjSF@CnT)46FEv+Np7@XP>M5Iq&(d3Fc}lwR z>u~MgdSvOxdl!@>Bp8_c9{6U?WHa5J6qnU${?KUg8HpLUHZ9cPK4-FqA+q$OR^-~S z-rAC*3zMz9!i=T_g_`!Bd~j@Dr_{o^UbC#^ZZ-<f+ny6q?0)FlRQtCEUyg>%WnTKs zhh55ZUyh#Td#P8BI}5HpXnwRND{9)M1i6XJ9UOESvQ9p6Yv`Q%hOuaN|EvoqbY^B{ z<-J(3{rptU^5+3xJms`D>pwrWr$pw@qrX|x_@yjv>a7fsUF<P2bc*)9lglTiUnoD! zvg@aGP{W>WzS+ETrVnp?TiRsE!o<W_?%=RJAy{kTA2n09{$KAWw&e53W|liRTnSWo z(8uvYEU#(qn<d9*hp?Zt-|;kimykb8V}rwiqk<Q7@A#<hH}v=?y+0>z27mO%ZUq4W zjvZD^Y?JB}9v`|>bEDlEs?^}ax9{uX3tscxOz3ZG=`{UabGm-ZzX#`gW4C|f`@gaL z(z%I_A6_jEC`uN$Vw2pr<JGt28|vGHD&}1Z-y<^H=)UE`Lu)qJo4Z{;YpwXE;%Vbq z|No!8x?*QW=y7&QY&fLA<>;(;(Q4+mgRDn$-)c4|&$#yP*3IxOUso9%GsvptUOI)1 zaoa@Aq)3+o%-?4`yxcOSRc6D*d2v-auMS4n$EscbHPO+vG5LD@Jwu%dZ&q<NGnR<6 z@78PPv9CI%p?f}9Q}to*thr)KA~hE|_b+S@x|HH2WUeoHWpQ^`$Zm}*eRm!jvn2ji z;Nx&S+_&pCyZDtCx6g9w{NHj}eQCUTj`z{|D>YB9b-K!%xV7w?Xm0dUpU+zYyfOt6 zwq8?eDrI?~bNBKBsd+hJua^c23x%CMeP-uj)1!Ugo$a~3?)*xs4ZfQAa4M^9vgOp5 z(YL)Uw<iR+czv0vKW~ZH|GyW`&b?XN`MT!zi;Ei9&b0(A_Plf^^x{{Qmwzt3^In>M zZb^Hcxvb2RFZsXwr`lc25iFj%b#umSgUzd#dNni5ULi73NBKeH^3@YG*-Hc&<_4?8 zyV;lTlfU)%cJZexN>$7`Qc;T~cdGr#nGiO&e<#n>C(Y9)EjGxwxJ2aF_V_tdz7)Fj zrUgH^VRiP-i^IR}?%Eo$FIj)@{oR)De#ZHK@{w5CCi2f_>9OAuGsTu1*%-s6d_X`z zHQmzRRAE*7nk>ot-`v++S?{xo&2&=TE$4!BH-z<BOS!mXcg{?zHv60LnC<J;DVMc$ z<~CIFMa??c@Tg^Fz*U7aoEkk6%<1cAJZ4`Sx&Q9z9j=O3t<KNLubOy`lf~wPi0Ykp zGtYcYovnWPuUW@~(0nnkb(z0EaL(jgvg@Xy?xW==WGzo-TAuVS;hvtpV$$l(hpJ24 zguhKzpYUhy233`x?Q-@<R~r3)S99cdX5rr@AGRxemJ}4*%=_+!vW;o8$lm(jpXy=_ zH~FkGY<;_%uk-f4<|8+^TW)QgvSGH$o(;d%V?8Du4Z2d9R4Vdla`_n_S+SpYD~tIp z4S(<ZWueoTFm>AJI``n3C+Y_s6FntWw)gO?^gqrfD0qIp4Y&Pw!M)e+EhrPY^d(N@ zzvBM0e@@w~lDcBW)ykM0@U7!fZu%+yta+ZlD%QPoRwzC0bN7s)h+g4cYnBtwer-r* z7OdTLSU3K;v-<zW2XFUO8O@D3urh~BVV%1|Rm^hh@@G9$z63tc@@-meD!J=Tgp|y* zWX%;uJ-PiSqtD2A74ykht(1SJnZ9n<#yPnO%k3^r%Y9xdDXIC;v9X40i6s~F;aSV) zSgybPcaQDP+pBdR&eILr?sssScc8Fa(xhGdoePe<mg<rG>l9>_vg&8RIu4P&Mp+7T z6w`FKyf;hv`b~D%-r3>iJk4BJ`6q6Bd&*+|ygN26f+s&5H<P;A`sDh?aC=S5$8#h@ zOgW21xJ;7+zC|3q<<~9G<MB6#CsSThFWaKy`_guX8#Prwm}3{R)U@n=z0vmDi%n8z z)vx?`T-fI<mL6l<d;JVYY0Bkl%c+03N_sO3i%c&6xb@S#qvy)n`<u<{X0P*K&UWmG zba2PS^Q!MWUS3|Qd}n!#P5OijPNF?88c%6Y6m>9>+tk8)Y|WV+zc%XaDhxPqWiQ(S zDRHk9qtyDUqW^g;m)Pe1_Q?ELz0GUl+~%HHZoZQ)X+*8a3V5v{vg~bAqx_aAV_W5; zGq&m!_f<rH;<%8?kn?fj#HK{Gh_4}ahw`LMcqUIf8=G{uBT?>{q|+y5!~1U(*Pqk> zSt43)(c`^w-S;NzuNP`9RNP)&oIATFZW>#wO3@$b`O7ApD5x*`eO>cai<p=3g89$( z%oSR1ZC?NGe_ILT@AW?~Y<Sdocw7GbOKL|q)n8dqU9Oq-qa@bg8vCZd@n_oIXR(+k zT*-7=V$!9#>Q;*-M{DG<3y;`ES9*T5)?7X3wpe}3A=N{Bof~pzG#_qoV3XT=_}uMA z^;P#%F6vh+-7lHD@w@WfFV7MiLr;n_|4rv+43eF5bK)_cHNXA{y+|mZyYbP}Q0Eip z%}dYQ<xi^I&S<i4YK~_o?=G9$PFa^1dv|btloD}Dxhu%2eE9E7dB0UcQOn|aIZpoM zQMFt1_?KMu^AZ(LQ~9DD-}(;kDxZ1p$yGt4m9tdaO5WXc%lfHvqe5y|nY4l@^SouQ z4hFd#U!8qJOgWXWZkOlUSrQy(=o;;tHM=eIqR6`K((4>{xa>&hcwzVZe&B>1%V*hJ zWE}bNclNZny?pF1I~4>p3R$-85B~o6L2aiqv$sw9#D&Tn4W|~muX#9c#<ILSdq2Cm zoYZS$_`BnIQmNMQtBxnt)l)z0{dlS{mE~os6r<vg)K!(w4!n$-bmiT{-)#MJHhf=x z^m^W@&);MV6<wqn8yptIC>%(8Z+Efh&B@OXZ?B)iy@+)p6Juk;WR3%QF)6olZZAvm zpI6vyWifNEhn|1{#}saslF#PLgihuMC3}3S?^mk{*6R>+;bLK7@>5zcdw-|*zZK?X zM{D1ulqv0Wa8L-)69_o}M9})f)NVCl7cLer2F4-*wfjtaST+@J*V*^$m3Dr9e);OH zE7o%>JaD}BVxs7-iXCw?`5e;I(w^C;ImN}zOTOZKwK(&F)w$yvbt1KPy=<&qcqFr6 z6_e7&*Gda!Z+<6oh40&w#`RUz^?!u2tERQ}$y!gF+m)W0$}4H~<IYaydvQ`O7Z0Dx zs{3|x`dn-2oOkJs|F&$|61qC<?cKe<pPif>ns={-v*)^Y=&Bn#3V-*>{{H$}Tu3O% z`|iPK{qpwv7A!bm@@cAe__w#W*|irmH#cWrUl$t@;c(6IGQ%vfWxoG@zfY}N-{L)8 z@8_>yc0Zp?HqE-SVQGn=yTStlrd|5iW!iU!zLnc2pZ4iZv^~4=ueaOpJA7j2m#cYu z%k=CT#{+xzY;l=zylrQrZS}XBr=q{rIG#Ltl9HaDealv0gZQq$Mr-=T&l#EVYKnI& zvsKTv`8qvR$Kk*-pP8So?<)P<-M#y_*Vex(@)7yko*R-L-jB)5p7+I`zyJ6A%CuuW zlKgf*7CgP9<MHp|;dVvcYfHVRYSoyE{1orE{qy_%{=a|zJTULD3)vI4HmV>vB7)<> z)|{J{vUFWo8XJr`4rt!0XOJ$d*z(O=`Pke02I1#cXI))Ykni_NzUsxoA3rLJ^BWhM z=iT}7bb7p-yL<hYi|*SlunT><nLb}P{#)f-_D@$A@uqF+c*p$iy>{-;6_e&~-*zKe zFfcezH+p{R&K<JWWqV9(e#}^Hc|K$!lf%DHOBTfxz0lz+fAL4<WcV&s&)NAN#j9A( z#O$$9Qaa?+CZ<yV{M_8{_v`E3+}sws^%kVEu$|zo3tJKJ@JOfd*H;JQs*k)`zHFIU z#s!8Way2cdr|Xx$x^hzNf{RRJ!(omWc7Ge!UCsXZpj-La-%W-4dL>)i+M1qjN%%Hh zCz8obS5Z+>M~BDdR@S!JX1Tu}+*SN-zc%J%@V`3?tp15jtD2DOpwnq9V)$XQbbS7= z>rRmi)-K!o<I(dt*0p<7&P)5;y2z@&oAWYve#z9OPn<HH7Jh#ss=e!QQl;_1IZv9E zZf{EEK2cLuWu<W7n#)Az!%MqFwVSvZq!^#<30mq^;w@t9QTO*(%Ie?=e=aZg|Ni14 zb7>0)Q)7@5L)n9tIQ5&2!rLxRJIxSY|NY%vv96XMKYvcU_W9nfQtm(BY^%RHlz+cl zet)ai-(O!}?>7CgW<p>@&AYOTKX1E==ZVhS9Xg>-`~8=*ckJ`-{QT<nuF?8v_};Gd z)zLe?uufa@^vq1-_dL?yTFVb6yZXH8{5e%cVpco1Ox=d>1&Q*@UbJ1=5YTiYxQ)NP zCG4en7sHPRp2HjJpPrgpTT}CZ?O)RY=kEtEUlxAQs?NyBxWG#Bfb9+jg;xd4jd|S> z*W9Duvbr46&*rF@AX~X&Y4GP;p;8wfmh0GjyOC^A$Hud_^7FHso71DuvfQ|9y#K)Z zdH2>AF8Ht9`0uQA2nYYF9}xjhw;c?<)f$o;etmmh+{5|XyUsrskJq@c=SyVO$_ta8 z_)FN=IXzr!_H&Y)p5KI=R~H{RGw43>H+2eZ6q&@I_Fqh8i`V{@PbRO~v-jYt=9cE$ z@tf0pB{=@PUcW!@-X6|Z2kzgGFJrmzv;D^k)(37L`}Q_;|M;fVaC^7J?~DC*zchH> z-<&<&s_yl*wfb>;Dt>><{c(fM`DtfoXISy)HIEdxMk<=d>zT&tna1d~>P$a0&AWHH zH^2V$L*c({j6S%XJG;OB+|CX9*0uTHPTsxgUY7RW_r$#|s=t4Ky;&TVt{*?O^!cuv zt!?alG8*^(f8MMR(&}<3@kK+A+?AD&Z!YD&_n6iGq2dZ=gMafrED3nU;mP;s&uRVr z5liD`8D%uza5bK3KENz;;XC77Hs|jNpD!L(mzMv;z{NCgv0j7pPwj@-)~*vwjJE|7 zl>H|hSdq-RxcnL0hn(}W$xR<_U&;RZWy&YxrP3#FU9Vj$UtzZ8pU3<M;d`b0zEq`b z3ZMNlZm!+8s<gK2-k0~r)t_G-dw<d7nNsoBC$vq~4(Ize@z1A@8_iV;&-VJw)!JPa zdUMCc-Rb@&KMI)bA1dx?n!hhZzUqnR`Rd6}%C1Va{<*O+`NGV0LF*mt`S)L(-uGv# zeBOa)%w7|?_N_YbL*vek&^aAC0vp5`w>{ly^QPzJ+HarV>K<G6L+<FMx5k&&ioDhS zpTF{6@jS=%Rdzpih4)_HyK2w7xBqu-fB)JpH2(X}|E2fY)|*zYDgWG-cG~mT&*y$$ z0t_zjx~!6`T5;>#+&D!=tN8n?vadCqIm~MQL0ImPb_c^D{<-x(ZZC_l+ETyYH}t_o zhmu4UeH$AYE8l{}^DZe%*MzW`7w5<9om*`Ceb(}Rb{DpI&PUuQw{zzT-ehF4vDvf7 z#wO8UZj<nWIro0n?PFfzAy=jOf6kQYiT|v$pT<w&;?egg`rR^Ru0rhX=b348x<79J z+OHR~xX#Y2?%~_pM{8C!ojbq&)~&4t2YDy)u2*1kIh@G+-)ZHGN0l4yZ42k}YWZm6 z!K6HQL1^m9c69@zuK4!~ch2qJ`tMS|{r#KUzkj>uJH2jK-DfMCmX=w;%{lt9M?^Rx zTpRNKdaBIt*e7%QXWhPC3G<WWXD_?f_(c3qs?H6!BER})_pR!GuAd@&^7ucCJ)iGf z{969+meSpS&X=Cg`2C7~Qkdy}hGRw-&#Uv*`<>e#yZf1}Wm8Gh%69JeplIcg5N?sT zs|q=Bdb_vO!BY0iwSRw=zIfZ5$X>}Nr4X~DfN}Y2hdcqjKcyd6{fpW-KjcO9l;9H4 zV=)WbS!?Us)0Lug^93Ch8aOW0{wT?jw=>mHy?S0=-u_>IRy|L=P0hiRtYHr9C-wK~ zi2lv~_se~L{lE45{m-A-@we~z<p11Kznvd%S7YayQ@HBh`{gA^4V2P1wC`}tRLQ^U zA$Q|*)0{c`cbA;BuMCpquRG*iq1yj*qoiF~T`Kbzhi8R6{$kYvKeDc_Iw&suCb}`J zL9aG0@ZH%%ueWpMKM|jNQNV*qxn_Y8OEVXXmnfseLudQ>zWRp`d2N_4Uv2R1%bLsC zY-=mCZ%1EKjb|^jzWrm;I*(uVOCA;fYT9z;^mH}R?W=#CSiP3{aP#WB@)2(v)n~i> zD6jp^ykEV}?u{cK=OwNWD|PN4XHSi=o%H_lwzcKWY_CK<2+OT{{NRq9N8a^WHZSxT z7kqfhCtLkf-=<}K)rYzKOlt(2ViGwvI_#RLAFF@u>A{=J7Vs(Xspww~6Q9Y=^1#P= z*F&?r{E=;kf7aF21=c<L>hm{uZ%E*zRfn(Zp1jX&H#wSTUe(Fh)1H)0jyG31pFJsk z+mlMyPrLLgpU0lQ?ysE}yZzhY@Xz`&`#yhX7JXm8F;L##fB&6DXRP?ke;hM@GQWPy zXZFw00qf;<{5n$le0u%)dHgGWeVZY)>(>W?xRVz<${EhTzP^2r-@z3L0{JnFoa=Vq zx_$oa?qa*wcRqfxf4HmQ>7T7ltE<*qx9)oFy6bh-`Ix=&fqwU<&iV7EeqH>oN!h7V zn;yi1nj0(rCcA!``~G?T@7vqIpWS^vxwrjF)5P-SC+9ZsGBVC*ouMkeum1OwkJ{7k z{1Eflchq9L-+OJ<yKAPz?>zVR5O=B8)tOfwZGHFkcKDZXzx_RypSs7|dh~xxro^1s zl(LmIr`6~CESl7xc7Ju`X7=lAK0c`ZZSCH7pta?oa|Ns52?vGVKeJV~=3PHmHl^^U zKHuHu*L-O*`(8P&mpk??Xx-en$^YMqoxgf}Pk7$ve|i1)SDm_AdQ|Ruw@qF}`2Nq6 z^B!)RJzwv{yqz0A{g1OZIrUA*)u*vxFUN^V{BHLZ)=vKWhwB$tkho`+=cFfF)z5og z>YjAvluhe}!0(qocl$3ps=2i;$Zn4KTK*58cf}nvt}j?DUi?XKo#)>V+t2)nJRbM& zds)!Le?hAMo8Cx0NXTe^KEM87wAQx|3;9}pe*5_NCbxLfmD}z7=_N0j#P2*1u3#0s zaLakpRx4SR?Xr;*Y9<uR>}_ZGJUwxTorVTS)mPTmpBrq}JGDOI675brS9i4Q=sdga z-L?lG#DD*Gc5TGU1x`nq{&TVJt7E;ludK#v!(21LV1)xZGBfvPGqrvG`$wr(aN~?+ z2bt^-N6F^f7l$u=QhogL?c0yNE=wJ>n|Ckz{NCARx_Pg6ZZEkMX}{h_zTe0G{A#;U zhsq508NPF_uDkobB+4%4!I}T2c`?tX$KSInQrVjwE^(=uJMV$IO-s0i3`c#xv-<vI z_a8?2*2f=+R|m{BaOpq%V}m%unv*Nz_EvcWJcy61K9_pz|J2QI*Jt0>kGosBS;P5x zsqDJhteKJ5>-UyvzkIgVd3&DB$=z<>d<7g80=zgTRQ@iRwWINe_5Jhf1NXW$*YZZy zUyGV#{<S8UYrbfl`QmkHz6Z1pF-(8L?6>dR(}&Z;z3W#m`rgYGw_TCl|L)UO`)*#X zSs(UwZ`9G}QL67>i|);Tm9XSY&5xvOYs|Gncb%I4v>_p0!d!2ub9;^5Bz{m;^N2&f z!#2n7L*P`c`Sl-LV_!@*<(N0`!qxVZr#~I|*DGy4Y4YUD|7_wb*4=w+{B_;jHS_<b z@6|s3`p&Le@8_ky&uiZv>)jKrxzOCd{f?DvjrP)iwUxPVv_f3OIBv8uc-X~@FPl{R z{P)kh&AXTHpE&P}o6yXEe$GdwM1|Yb{#ZWp_x%-D`}OL4q1A8x#{T-g?OW;Ah*cA7 z*LIaVhP_*N=#e$=YTgx3r$?_oG<Vj&omXo<ulgkxa^-ov?_pQ-Ta4Ro&fHV+kwbod zj@BQ8dmMjfH$`v1qWtqia2w+y-w$8s?n~iZGiN(@@QZuPmn@lMUCwvy_P<}R*Kgnh zRquyS-MRh$S(#Sfs~PqSoZlVjtJJrvv-S#~QhoaImE3-j`A+A}%okbRk-W0ApkTH3 z-ZY!k*Ik*rGlVCyGIccQmA%#cvF`f5$g>NR)o$&3z3uAPpGNz3nU@MxoJv^k?-{P% zc+^z7Pu~9Dv)TFoKA(?&7Pji(ru+ZoLo+U)`~Gm&Ub(eDUoJeIZJe)vQhyp(*ZcjE zA71Zjy}mlFEPBI%Q)?J+%w!h3=XdI4<(zL17k+NMTzz7jObv&?yTrzG;ig$Ndr~~x z`DAr2tl4QN-}e1p^?Tb5KLZ3;h^)Dk9&!2n*MvU@1sgK|7`)N{De{}Yd%yk{tBm{I z$FrWT%YL}_^S3>*qGF%-{{Q#eKu_UD2q^8nNLy>kdjIon`y7RzVc#Ea-lN{{vwHct z%eRmJ-rR2|ZCK;-{GHj`3F(QAS{@fS*DBxtvn%O#82`0T^$V8$pKP@<sO;TFZu9<i z(ba`_#YMlrxyK%yx<-k$y6ec1BPqEzE^ObiW39@;UlCJkcI0^o`CN#9{xb6a&gaW~ zXMa1u%pY;iH~7=SYWw16J`)N&xJ{bR^Pm2d$i(kqR3r80`~CWbpZV`H{#f!p_T=hU z8`kohsmyL!BD=2c`SIm8U+2ZKri9uDaKy8$x#sF3z+utW@UDBuWQCuyaw|<sc;;+5 zXtm|s`@_q{>LecB+LydL`HSSzrmLF{x9z?1@#XBp?pLxzB9<=jsMoQq{`NflpC@<J zR;_h;v2Pt&&Mr#a&wIl$;r=|^>;7{;?XDDl^dxMZ%!M6=?aSxAy1##auiU<6Pnx&a zzq+D%;{K~cvukSeisnw`XPuOI-g~9!>_3;M->C8TFIZW?zg~#ZH$_Rnz}4aV&sQl4 zrphPVE2e#axVt^z(2Sptj&|4oDSUf1`~NGIes=jBgOn2!p3kd3m&nZ-$98UVyG%}$ z@0wM6cHZ4l@U1U&N)dN)@;Cn9%U`hE_>=H|+k0EH+ozk?ygI)1SJ>ok4kpHSL4`^D z+GP%(+E?c6JA89zv=g^=!7gc$Mf;v|GxE>as{O4_D?V3kg(!zbKf}%6b9e7Z+8n<7 zV+%9uo2b3n<%~*=4hu>I8uqSnt>09#Ky)V;%PG)U!L>PU8<%|Jceby8^yj7WDT9?w zCZI8zBLWxBMpaAg`Xwv3&NAoCk?ZU?HY%+>;;~^`;QN#E5#2#d@6GEBcCr)+Msl#6 z;$$*t@At4f^Mvu_{jE{+QtHi5=x3!RKD>8V;lMp3oBqv5Yrd(8d}L)x<z<Y0vrA+F zXWDx{dF#S-O^>>r!uiLeJTzF37YMI>C(5L%^D|HB`L-?7F0gJ}pz`RBHjB-Polzyd z>*iMb7&SRwxq5x?DmO`;>l~5`g-<6)?=<#IY2i<id-j1heC^fOrrG_L0d>Eg?JpNz zpWb$N=|cAKwbQR2dlmb0(Nznjrqc=rSw9@sbiey-x;%l6e`1Zq!^fZ?{q9>E6?^;5 zu7#>`KVONzv0J?DNahCf!$QX&-fOy$_lj+C+ct3l!TmCdA5K31EOPRHNvP48hp&Is zf9I9|eC*xU%^RdNewu&k=4!fmtEheT^SRH&c6&{AU!e87V$qZI)Xv&E*|ZNulLh>W z!@T#guhY8x`lQ@NH@AC?d2E*EyH4>MoD+OibCfZcouRxhYg&}uEB`w?44B;3JYp>B zw?6#3`{t@3iSA8%FTb8wl-Iq-vh9rRl=^5b)kiycnB)|`ySBRiO8O*!<<vCA3{(Hz zJOWE&1$R5_K7H(dEAQMDvw9jfo@Ec_w@#VtUwyRdbdvt(yiD%S)6es{CrxYpf2{ZQ z`+Yx;6`%j|_R>b}Kdsg24$jYROxsX<ZjPl>NQ@|>aK3y@?W?!%Pd7Mcm>gQ8cz*wH zAM<9#7gzLm|ELOm7(V^xN}<|Mzsx*$Zfq3Z-k&;if{d3zK$4fmc_9`5sZ&!$6a0SY z|1JG!zxVe%i_&ka_3b;Ox9WWRJhLF*>%p5FmJ7rm=;!=azaPEA{nX1~OH0e|_v`ly zsV4{K-{_jq-f8_(`qzZJ)@<BQ9)wisT%BOymGa(IvM=yS+sYS0v3u=wf|A$reR{e? zGdS_NWN=2@y?_ea{+QeG+!LMR?#~PVk!oJeaL4S|&ZGVH6^lOHSl%x`=f|fzLQ`w2 zUuXyy3T6cd`LxO(`S-TdP~pS%^|9YSTyXs=&ooQ=o$uwmnEi#vzwx&7%gy?JwdTj{ z86SjgF0Rpy+PN|Lc#^ZUgsrF4m&5l3`1ag?b(?Xo*s|AO8<oxe{Qa)(Z<!-?S$yBG zcZ!cvtRyvL1?nVN)Xn$SH{8jS5PXrcOmEJe6)#U}?wWOHf!U`ImHc|%N=mnDN|)p= zPTk+IgE`IVL-y}=&)-T*JH=<KPK<5VlHKRCcw!v;WV<qxuhwpd&&|u+e0yWlu~l7> zzc(E_Y^3-st#iXKR*@tB)|w~T&H0$eXPfi=m8k`n%dXPb)6)9({{ABO<<g0tpZ76r z{GatrU7t^m)nCWM&cJr+lKr7~{1;!o->7_ye-dB*oq6m0<FD*4d)sOK@aDPBt=Zq_ zSqRpxlA9p^$K2Cn@#+2t;kUmh+`U}Rob^49C9CCG;uM#;xh9^yhK5?YHw-jfE<HC3 zTpGHL+uL^Ktj;Hsn@f7lp9h?u6TQFcsru#Rvx?4KT7EHHebaJ52XULfrk}aZdLn+6 zSSPQ(xAy$$OZxfdUsox0uTB#x;O(og<C)XVtGp!s`jO)64<3AU<L)?axc~IFi)Yon z9$3fNf2^E+)HYT9f5PUI5BeLN6?OkDkg*h*)>{AJz(V;NgP&f0=l0K>*-&XV^}lqQ zO8pt_#nD?cZL7|-oD5dm_vx0(j&^mikoZS^b3Z>jYb>v5uw`n=k28^rIokbO>o{-E zi2wCuWzYKgazE}acz?3r`#%4#ya$)#n_utEz9jtK^Zon%C7J(!uRWohd4z2Tv-_jp z-qLO+3p}GHUZ3&gpy%$0Z#K7o3hrHarMGiJsGF9BYx6Gq)b4NFoTjR+-1g+PQ{f&P zn+G4Vl4~9Iz4EQKQlEaK^3A`4Yx+N5|9La?=g|$mUmCVn%DV-q6m=K9n7oJS>9ZSc zJDMkze8^nCRA!C6zv$B|fy&~BU!&rVU$14?e;1khG5NjR?aP*N+MY+kpT9cyuYbMx zyb^C?O(p54W?XCeo_bxnDO`}@znT5@fxp_T*Y9P@FS^8OsN2lk`0tgYZ{qpi)<0b> zcRpQwQOlIIiI-^`Q=6r?*#5uQZeLs+zt7M7^YQ&Vce3!8n)K}XvAVKe&eG=J{$%?Z z|6V>=$UIH|XX3VdkDp$=Sd@2RSp|Rl%7gJa83wD>{pY0=uDjp3>2v<0>VM9a6_X8I zE-+tx@w-_1db6&*&4+{UD;U-L;{Vz{Zc%BSBoTC_>xo9xHA~CjSxfF8(wOD=x$N(f z_kMqV{=WK*?PgfF)W!FE15H+cZJ)j0bg!k*VlI`ci*sLpDvn-pN#X0Nugy|Cr*-r9 zFG#(r;v6pc@A8ca+{;!@nrc&(`9nIm;(PzPw+qEN|J-}g`NwOL-0UKg_isYW&c0cr zGX3*Q0q%Tro(Xk#_n1yi%buf>oY(&A?DcOAHP?8;pXzMo;SLj4zCU}CyN0RC)-(T1 zM5~n_y<h$J!jpcxKd)A=@9yG^*jefFCGU<>JL`-vt;EaAI)&rse*JkTO*gvnhWpoQ ztHjS~r6x1^FPyD?*ec%h`{$OGmDB&!+%kN5k?re-zb~DW3{MD4y?E??{|;As=f)5B zCa>DjrM=c~{VBQWy&u0O7j3KhJ9+NnC09F7mmim}-jdB8HshAz^vfID&4N;WR(1dW zwd|f<hwY5NS6Y~tX{{;RysW@6dd}Wy?9;t!)^OMTJ@GusYkyv+e`|>3XDb%Ao}0NR z=IlQHb5r}v<^Gp9nNFVL`!jUXEH?I+#z7B4qOX{padoVE)!sNUW{<AmyX|{rAN;;! zqcM^7oa<AEZ-QBu)ppeV*)j3juJzxVgYEyO_`PX56}n2~+0$N$pO1R8%^%zg*;)GX zYVo0#@>yGREK{zW_|KhhT>fs7o^AE2#gd+O8|=E)c(DZ>y}Uu+(64Gsbo;KD_orjs z#rEd4=k<H-&%IsCS2sV}a6{(hmA}9I+Qpl&(>+G%&dcw<xwlFlaD56pH$|;;w!i$U zPvJ@l*Zdn^9IyTJF+XBgW`JO)m4{-~df%yHEA!NUx_mhJ;dRMeDZ7;~_lIO&<I!hc zos{&M^WLTv2Ys8vA3ti7?aaKTaNzw)iOf$EcfRGV-28V9ufE599?lQh7m^-L{NQgd zE4yaqlE16xZ(DG2o>%6tCY8B<o`<J}zHxrO(>mSm+x~rZyiD`{$v-<RE_?dh{xedQ zlF`0T*8i=Hnfxh=-)2k2)m6)SnfL#HcznHht+e=d#&^ESe6q&h>Z7+Ei0AiTe{iu| z?e;|GKU)(%_sjjxeR^uD8xupzQCD+iMXPo1|Kzg=UYxwO@fF{anhV=M|Ni%_kiX;h z<K)as&&ua31pR*Z%(MTJ%%aC~b4{9;te56kyz@iGg|6aNDzE<VZc?3D@`~Hl?$*}5 z%O0$L>G(?Y*O`E&o~u@O?-T5QX%|%~wCc{zpS8;IGj~*<)ro%gA@=X&8S#QLZVC?` zriER;$2y^zsiyGgx%u^znES%l$MOEHDfsa*J(A1bzdFU|)e&FqxHaL^R%oSfvHA1i zFq?K+N7It~Ukk3+Mwd-uJT_H7Jba33n7wI6SftwXetYjV37;iTrW`oL%TfFL+tE6^ ze>%z!-*kz~SEihidbv}O`SldRNvAX=-D29SKfSop{9EDAw)gFUZzr~2ogO-`Y(7Vy zBC`?y^;kF0FusCGS}nU5l;r3ydUqi8xW|k;*S?u3ExY+ppmnoN$CcSVzYkW=I63+6 z?z=h}N8Y7wYmSv_u~d6i6wGj|U@BYUvrkjH#U?%C<B+&rQ#;Wm?AhhgU2g9me4l#% z|B=&%+97}c%bArw6sX;~Tj$CN!;X}e_jV#qpYA$7cxol}ae3aY?e$FOOS3;7SaDtL zU8HpPdU3sf_hjVx`{zED=(e7g^>N3?KGhP1t9RGjy1QmNb3lj6x~_&z(${~Vu5XW2 zoVYftzv^r6-q&fTC+Q#Gz|g2G&lDr-$o?wz^oy0uH@j4r7^MXny4QL9+wI-w=x)F1 zYxBkRes{Ll^~Fxg51ALh;?~fxf}Mrs#tki{sF|(@QVtc&TzZ8ok!{ldbJsT{1-<$h zF*k7io{j&P?>y(RFLPtwQf?DpD-S!LOzrh^lwPRC?|!{|$&<;l7K!P6$NO(>I3c6J z^K4zwsgQNyi;HdvH07uZUf8?!LHLHBdv9IqW}CggQTI|vHLIW4gOpFZpP5bxQjfV& zqb~Vio_cxc?DeyEJP4n$`}*sTRg2^2?x=U>tp5Fd&&_w1j8324R|;ErHmvrt)46cf zv&yP4ygFY_y-@h1D9a=FtL$b$@%~5VO<i(#amoKq(_1|{UuUcP$gkSCMe3l?hk!*+ zYzrMv`gTiLuKuyz@?-w-={|>}bj~>mmWABEsN}V*Db-wjlhOQhH?H59x%^E~tes|e z49Drfhf#JxS(dMPcHXzw3)rotc=+4vdYN|XDVc1m1=lzn;YcvKF-e*ux;#^R;r}`R zd`_$s5~^j7z9iNpd*)W`q{frWt&1BT1RvIKa&VAtymEy(*Lj8>m!z3q(1VbDf(=`L z##!<EYyEKg^gcFP==;=)2Uq^LEBs!Oo;*Kc-cJo?<80HWB_(=pZ?}aR7Tfaa%=-0h z;$1hn8D=vk9{>C}WwXVk%!Mk?0~h~0teg>ge8)ST;sx`=BVFZO)UHmPe_?jSHQt9W z4!(PDG_T}x7!TK0o%C+kh{J2<>{n-tR~MYkU;cED-qY!SlpinmK7FwJp4Ec`KU&$C z<n|ZTY<{|>zaVenvYDpxjxS?$X64%SDacC7uUZ+9!c*SQbyvo9x5}@zmr9gA$cn%E z?sBx0A$9@Bl0q5J)fbeHOV=;FUN529c%!_d`&M#<?B>$`nz93nN<-3*=3Czj>$>ey zlJsiX*`UV`ho{*Y{Yx?TTHYfkV88ZenA4x4%+E?<(UmLgKfn9<E+yyaGo@4d*)x~U zd3T&yy!3nQhPtPVy>!!c<=td5H>|$&GWgZSeG?{Z>t@qlc4mu}n9>Huod@T9z1lgo zZr?U1PhV@j?Dlu|G8Udo{3bCSf7|Y7*TE}Vch*9xbz9FX*HqI|_dAV@!9DF}I@kVI zNHqxVe^+v4%DkXEeIYO3EVJl*y6nobr)xT8PwGqBDy(_CTX^Ln9?9>wJbFA=$bQht zIzJ&X*iFuoGm^Q=Of=B$#tA*G&O5;e)st(=mWoV#&&HIZ!Oe4>W$IE>oog{HsSbJP z*KF$xv})*m-e?)?;mYlNV#CwTQAXK1lE*X~okEwi9r#y0+kEM}xbi*e>pgb(`?B6u z{Q4#}@xkSLUH4j*-l)FJJGxxX?$^)n0Us_uFMVsJf7fZQ@bQD~g&dECa@pMG9`XA3 z;g(AFq&r5wT3%}|<r`m}CFp$YZ$(<z>Bmv-8HR}_y$bv%1iiECKPnzPyF`A)<nzvd z%=esTX#4IFU9i*lafF`8ku_@*=Y_rCdczu>&o{5uW>s+q%lGBiYiDUqtj=cSur_!b zd@I|lckbC3Ij^@?Z@iY)8P^Kls(0_+;O2C*o_}u5uIn53Hga*Z&3=0Lp3##ZosWO1 zowwoIynOw!M|}UUG5Z&lq<vBsEA3KQdcM0abJH=4*Bv)jXU{s~6788iZNj8Wtbc^7 zUi@fNt25HQ6Vq}caPyMPg$8!!7F%a3o9%ym$oRe2W6$;TVhmP@N!Co_<t=Gg$o|Xr zl1blFr-hq0?2$Zwx!^#M^oa>^wo94M>}~)3xZ7{`j$gAlt@Z9$B?Oi`{Y+S?{`s5c z)(ifMR}~Kn8@zL9TI?E;e$YtH*}PKo=JlQKui4`y|6g0T<NU;!)tk$YvzG8$&oWTs zc%;@Rt$y^D&cs^<4Rc()xee?uGvr4v@!1snN|AlB%Ct}HkN<J5?+(0aCZ1zgZ`i)R zhr1#4Q%o7({J3}*v9}txZ$!5;DVuO6CrKSV68Dj5hH%0gu>fO>{vB^$Y%VUBse8Zt zT6g6aH@(_NJH!k<FKya)Ww(OT*%;ngorUu}W@~x=Ze;t*A*{6Yi0|n`zg;fvnz4tc z>y7ZdIg4Jko|rbr<!ICa+1E`H7vh7=?jO4*aFK<nOzA=35!QJB{@jg*U!<H|17DUk zZ)l8M_Aq1q*DIcUQj;6_J8s*|?(z)s@zVct)6wXcSN4tHH`Jem3sjykV*YQV^zFr& z4+XE@sJAqVF&v*GVr0Bif7-eynwQskZQ|K9t(k4&OU;u$A7)<e|6)|g&y_uC$+Vh( z*0y!ElNB$it*Q=ES;Z_V>GmaBYWD`gEJ0s|04a`&1D3u=U0pW_%Kyo(X1u_yw(z=| z*&8;dmNZGG85tttH`~6&sx5rUGykVl*%ikUmAd|=r`9(eI&}7;<B=&#m7Y~dirQK( z41HzVIVHF;WU`h(>7lz47vd7z-0T-!7YLgCWs2I~IBxH@Pm2Cu>P%kxt22AK6@NW? z{!?p1=r*n8f;L@TTwL7TU7buDoIge8b}}(YpH-RAcQCP|SE2UF*V+$)5^s%|_<!*k zO=JsMXf}DOWY&r)Dm$Z{<yl%iHD7klo^-g$;d{diVcCStD-$cVBNn~cBXM_i{i(ta zZ4Spf&8kurg)fKCay`L+wMFyCj0-%uyhr||OjIdmjdVNE!JxcgiDI^o=9G_)Q=Uvy z?cinHFYr%xQ`%X9Pjl{0TF%#MbZC#NH(SN;R@a2jUlo3odDy+bEp*d^kKK@A`;5vj zT(w32E$eD030_q&o8(!u+BA47lb`b?fo`MpS+m6^KDqg;;!D7>iFRBk><zeH-%Wmc z#ZvH){ZEydJv<X``_8^_-CS5^^|HXUSq6*3Q}h3^#fpa-&N`bOr7k19lADiDUNUg| z8mnTrd1B!axv7Ua)-2QwUU5_+ExK#RqNV?BPo2xU_xFWdt81%3$I<P_Z@-^>CgwMT z!5i)bpLr!~pQf|iSYSAL){!j>-qn|Q2@B7bH%V(0l6U`+!{Md5WPkp5c2;4fg&rU7 z2Yxv?%eX3XYR3E{C!So+@Dwt#yQAmLcle@X@uK$urdN$tvMMKdACF8pa=Gu%(~$e| zh6}^EB`t%54y!V_r9JrFopxGFW$9rCes%p5GqiIulEqrZy=2@kT@cd@*&8Zxc;B>5 zbB)A1S4w|9srO@n{MV2Zs~@ZV-BigKcKTJgt@ujYwQV=^%f<G6-x>5*_xjOK?BU-J z9#qX*H7$F_-s5&JZyIiTFQjo|YQnqri(ecBs%O}_+>sPyVbbehn0xs7yT-bDlULRg zKH3!rci-XEKj3!YK^L!I_^ZYr-CuvMyRmDL9}{CSN5hTkNoOrvo^Z<va_kUhlA9Md zuV5mtRf4~sAZXe5cZUOqPhY-$`LeXwE3T8}{bJ%<MK}alY!2M~t`y{7_CjC+2MY^R zUK7KKJ<HDpzd7(y?X2!9O@RcC34(U}?(h3?K>dc3!UH{y3GaU<z4tB8%nkH!WN<&g zeC_$ATuT=L4i1((9E?R>W;Z9Ze|seS>Al-qy;ZN?aa0^gi%ChfGyHSt({5|?j$ga^ znKr2Nzd6o&DgXYjn(vGrS3(pXOyYPE*ZEhn=WnsB)E=w4OaJCSOHz%^pZe~b?C+RO ze_fWcFlDjqD#=S{6xbT`+O2*Y`?cra-%9*B^}}<2&Ybs$Cf)yTzn5h?2TP1Zqp5w~ zrr1x3E$aogJyzOVQ~m8;Y2pu;t1L|K8W`T~@^$;^@a68pLyP*D7#kTB7D(F}GrE17 z-=Fd0)a%KUw$;6D*uFpIWl;12nO~nyZ*$RJYH{Jb_`N#KMD0zw${aVIzddXvduP_+ znaZZ_eG-X3wUjS#7=c39h2h$ZgXd%nO6BwB%-TMGL-ziQTWh~J-u=!0Z&Jw-iR>z- z_D%0MT6B0BEOvOXPMP8L=e-GycCkxdPkF-pwDk3riR%{}_?4*W$m`rxvuCe~mZ;ql zPPv1sO%4tU1^NOXK79K2>BA?bqW2FYl~^47_SxO5tFx=ycdy{_+odyeZ)9(fwU^s= zy!jgEoX5v5GMgM%-84O?Ip%V+;n9zrs+TI1gtt2$IDA<;<^JrP!!N&_lbOKGVdb%V z|NQOy*PDCTNz};8=jR$ICtde=6X4Ucpp+@S=mt|&U3k1jO0?aYpvMV5+cWh80~;Mq zDlkZYs;I84wA{}>fBJOwjw)9B`Cg)bw8Fovk2rY${PpX%rF-`8xAanun>}-lomu!} z7Qd<)yfWFH$1NWw&Ys1dEVNaztX)rXp1{r>%uE~JuVe4|c#+X=dD-Jnjwio=U-{rY z_d)g?Ti&|5y0pR;W4&K%=KG$TeROhOj$PyBO9yAXyO0Hnx^zK>=nn_OYFysUmA=hB zn}46}5B_;36JlP*fB3I^fx~@+r=j7SJ-*!P1*<k+u!#x$@_Fu4mWlWF3OLMMKL5)c z>09ctRhRM=Ci!3GJS(Yk|Ma9MlP3#3%t*U+dV2-a@?D`i^6Os2y;aZB7AW9h-1SoL z_muZjUi|*~D<v&0HT`+a-m<s9dZo?t@9rx7ZT5$M_fP5Iw2}njImxcoFDmM6TUu^J z6fK%8<NMjojzhNk`=a^pBYt;>yz63kb4>N&)0B)$I|36D{@&Uuzanz6+tgE2wSWBn zefYt={qaY;MCY7|R1xRkVDXY+<nPqEa&W6vU-$n->-TS~nQC!Y$r-d4Lz1QBz0OZr zm3`?IZ#O=^cV};!*t4gTtcyEDt<M>Bc|?B`+>n2i@693CZx5BZzsPR?nJO>hxX{5t zVS$^&_h*L=Z+KYu{<yr<=UYqmzE0b{;jB2XzCb}GOV0ht?&gL693^hOzq{?;i|cCt z_SE&Q_S$#aeCLV<4hOWDUd8QcXSrv`^NBP6zE+M>lf!{lfe#C$-(G%SwP^l(r?*<G zlms^PFzB3G{`_@^aT&{U4wgHdjQn<)*H_-%afj0|FuburTcP1}@yS22&&A&CU=mxz z$He&Ek>T3QiQaRTzP0n!%hD2HU^$T$waG4CqV^yk6Jxnk!<t3yty@dv?Ut84)40Dt zwJ+KF&(yP7Dt*D*wDe|+?2-@de4J2yq9`Vp-(P=ME8E7Od73{<xHlBeR?%e5TTvsK z!<AR({o&KSPklzZjmQ0_l`C{ImX^!E+8w`W@!5w3Rxh4R?lrk{{pRxDb>AjU(~ah@ zuK6_g&xvIZ+N7DSc{ZF@RcSctb|X}mebSAo`#at+FqIhVC4EZ#v@h7Y*dm~8riYX6 zAGORA6YPSv6#Ze(;mX@#xIv{+GGXCsn@_9X8)ZhuZ&I|d;@n|rv362hr}8@I@NJDd zJZn_bRUA?ac<$7gvc8zDQF$t2RcGKfjpXtP%-)AqZgrRuBNKA^gWPU8w<iIcjvG$s zu~LuVEmbqx8@2L`^V!Lg7mw8nuuac2^_@TC(s~C$(bRo~l_z8EJ@thDyfzSg5~Hi$ zf30Z88>5L6ZvBa{h_^md@ICHuZ)2mj9jA5IZwA@7oA<rmqp+#-#st#|CK+)iw=KV9 z+)x+0^I(bEWRI-JKPD8%bAD1}{H|&&{bQM{d%D-_$1gQiZTxStESDCTY^TQ9(K~Ot z$9$vqW&Anuep!m|t8>~m9PvHv@t5PI;Hzqt^Be+YS*MIvia$Hc8FKxoiSV~;22)vA zJk6SQ)=TsJl39}u3g`Zk6e%oBlM25Y!ToCr=eN>191=H@7rn2L)0<$VbnQsvQfcN* zy^V>>-!D;1Ou4Sl;W)8&iOACmg^H;nmz!q%5i|5W`J{DQvGlo1(nswlOfp$AJ@=fk z`SSq2<~h$bw>NMaI-FiIWuNBcC$c9iO;6Y@i{LhHVLdqS#e>TiiZ66XJ^AkQ$&@kC zv~iDV#UT@6v6Em2`kYNuJ#Mge*+b#CL2Dka%+h&lHBC9N!M3s>(r)H~=)M>Gq?ZW& zOOj?j?Dzk)*~W=?zWn$qbe+jXu%*@bw#POBmDx;Dau<xc?wje%S;c+Up-*gr^P@L2 z)UI&I&-Lt+y}+Y(B;dAL@T=@kxeRBP3C@>Zo~k~7O(qjx+b_AR^D7<BnDu(9JzJH) zm!-O|ER3xnG39dBBVp;6=Jz9tB9|x!%AN0gy!+j*RQda}el>h%m@$EI`N2+y8?)P! z8O0hJgzqW-{qx0;`;gs3X9hE#D(7Xdeyp->XI@b5*_3mUY0>r79z8Eu(|HZ=A6oN7 zI_00P?cs!jGYmIo&pNWj;g&&n1H+3XiMc*WE)wrAeDi%LJoDVH_fO<(<#`>}EL?eR z!cPAvPaOx{dKcppUc!2pv!v`cI_;l%EHqzWZJtzisDAhRQu(!BY%AY?c~N`#_`Z$l zzB-p)RP8RD>iVWPlj%24d&ksgo{kEJv#V}e8^y~lFkW(T%dEVh!ffBv9d_{_Keleq z=iPa!V*MPxQ*$~mX}CPm6fkgN*#CTDyVJY(yu}*qozwmuZ1_-m;GF-*?`*>A-ll7p z%?`OEcV~`G@acJrTw*{IzGoC1!e3tWW&xFzwE_#QizmFac^8}-7~I(4(7<IIyYlgu ziL;n|KuZ58H2keGpSwA}ZkA_&mVibg%Zjth(=)hV>L+HnmN7LN^)N&)jBe8uS;EP} z!lc^Yp!e;#$c7(p<=0u3e39P$Xx{;$Q}1Q=y|w-})y8Apq{S~UdgrlD{~dDwj%0M! z&TD7m%Guby-8NlqSaRk_>}vaR#*_O?4ENUm|7V(gtwgl3bemjcWaR3wwN)GZCaAsM zeNyo7tmkK%9u=$RZM<+{S<%|ro9B7_o9vs-C;PcA+oP_%EH}Z`D=%-|W}(MgFaQ4e zlhAs9UM+j;6KPXTkA2#O-K}kAQ)_ndi_hNwT4_$)-l|f?Z?Cqom@o*7XWpH(u1&kJ zJC@gX-_yzb)lY8EYc~EqT_-l{bm%4DG&B3EfCU`KIPRGKIUVk}?zo28qxG}4zhCfR za+4dVrL$?`tVvyAlg`dG+wMJmXQt}R$F?U{FKH+}S>v_Ewjp*^SZ(cY$9cEo*GGNT z`#9k(ugkY52bWg)y*oJ>wJqe*ER~w6b@#%NKliR}yY3>p+2yv-#lTjR8^4O;eqLhj zJNQCvrN?Eb*`Mx)o_MyTZPMy3d$%t0pDiwXSw$~BES<USrH!`wI!~W3cOOXJp51fq z_I1Hx|MQp1w63fTcHh^;^t!#3#gvEh)5mW{Crt`vbX?PaN3P3cst!Epb#>D12~1i+ zF_Ri)4D)8pe>r)Q&U%wiMf(cpKI$==Go!dWj%$A53ohRFG?jWQ{m|W#I_7`B-88(^ zvvID;q%tXM=dPK1_nO?grr>{Dde*!}Z!`GgH#;VNu8Wt?x3`zKkI&!n@!O{>U25;s zJ-_cuF^hl7`9SR2Ddv4wXKtFfMKv!;$~?F3yOhMP^XX<*g*Mer^Bq}!^6n28`WVut zW}o}-M){;k_cD8DYHd8OK5fPFz)dr!CSKhAeTm`~FYV>?{jx+ZHJIt<ha}8?_dsGs zX4N_8&e_x2?e8vS{HoX!x!!U5^27eirtDgtVLdD5d92Ls@=Ledl@jd~FdBNoSwH%U zj_tno(N`<s{NoQZ*Sj`kPjD(<wahwpbMM^TRZ_X9j&MHI6gJAVxbb`WMvY~EmrnhW zQk8AI>1x82G@mIuH(h+P-skAfgDWgAM{l23XJB0XdBqpbhm)l*^6>lF->i4KIkk3n zK=E~t9>Ga!?T1waIR5(k$=~)|pKp+L$Xna&vYGFlJ&%@hKIwG4EL}L=PWNfb>w6&| z99<3eF{pWYE@w62$Yhx<JAI9l`PsAI%tCI~Jl|8RukSDLm8;Hfs@9LtbuZ#KHtnCk ze*JcHiTe8BtQ+S(?loI^Zux_aC+0mnX`I;ay=k}ReKSF`S;uS_brx;7WT>H|qjKue zcl$nX?Ro26oo8#d^UbxW`}(8P`FweXXXwdZYggCuya(|idY}Hj-@Gev)$?$V<Ntre z${x3PCVxEo$Q~EtHUBE6i)mlWKfqCLtFYJ2(U&zL$=ZKMsLwIo3#W9Ggw9`>a3l5Z zi^%=VHM-U|{<ljG{}S!V7f~~Os@K}QF09^Q#)o^WCv1B<Me{^qc=okS#y3x7@~0#? z9}c(uv*>+J@$Usse*X^n@V)f`^R{_xGh!3WvKKL2<C*w9Lha*&6&yFBqwJn$sY&xH zRNUOyFS0BD*E7T0!A}g<%GMrZmc5iBUi|&U`OV(HU2}Smq})!PC4D^b=n<tUGM$%8 z)-wrYvl!U~3O~+yy{n|^m~PSUtK3|+v&yE~<ceRcPdzlxmQ(w;yTH4^?K>pjCD~la zlS*9B(GtKh`Fp~p&6)1b&95wvE2-YNa6$XI_vg9RvD`U!Kfc}jz|Z^Tg5D?bKlRDm z7+354{+Vzi^!C2RcZ>zq(;bgU%+E`AwwK?a+ALQp-6A*p=U2I}Kiuywc(z*ThOo@4 zi{8hB&R^1ywB9avSpBTB^%c{aB&$R1D??l-Jo&3MPv@(k%x2a(R;6CYB;WNu5}YUM z$jx|6_rkj(?f0G$S8X~rIeeV#eBV#f&gSXcg?myh4`&pJr?#)PHs&zaox4ZmU+t&A z!ME?_&70&VCz`%w>4%uPk0wpZ%CJdpzfq&U*6!t{<~zYB)!V;b47TcgQa#hdP9~^X zeVfMY>&deZL<)J{ImmujK#<$r;bTXcY`Vk3+N4+4wx8?CIC6;lv{BdVeHN4LUw%`Z zSbVj4`z5E@m(?#WlrLMHc|+LLKVh=toVwMDkHx25o!I^2TjGmDEB!65F7Z?M^HY0X zbRhonoR%xm4h@G`mCoMUdyyma;dlK-PsFe1-d|h!Iq&UF{j<x|_c-m~wpdrZKl$VC z2kY_{95H$=c0X6`taftvpN$tB=Jgln#wziy{axj)#Zfog&6KTI;{A=f-v*8R%RZ{i zw+THs-{P0S8uoQ|D;O39d=a{`G3h8*_r8BsFHY;<XZ_ba^TyrXwx!?RL~5tb{a+T) zWAb^o`0Kl@vrah(Ha0d!Z+|QF`CIR-Lsr}W{Hfc_>KL8#OgLe++{=r{?^j>iarW(* z<B8J@uV0w4@L=8VBK`X(=UUD($rF)?*kAURJ?q+vz@<g07nuGT?0Ej3J?VXcsf=Gn zx7XB;prYvy3?{vsaDhqqjc?Cu>!JkN**BM*JHW3tuQSiAbiHHO-r(7;^Jo5Ol>K=l zW<jCL?c3hpeQT_4Jp0ggHD1QBF8q#8@ZAJc{S80E9y_$`PW!C9yUfSmygX>G?vz~# za~3RE@T2AKp=Yyi)rdb9E9TABy1q;Gw$Xxi`Fk5~Ef5rrNlx!GTl;^#Q!AIaUQB@_ zXW0s`(%0Aa*8cu>(0M=iN%N^S;g7_)dDklb^cFTs&{-EMF|}s;jhT-h{k*bb#fnv- ztF2Vj^k%%cwKco2u(0%1D+jWc)7#S>`1glqY;9bp^ixk`w`z#$_nUoQ!Uo@0?(^MU zxYomlJN`>l8!L~@J1(>REh#Q3$^r$BEI!A+&HXpyeUn0`7AH%L6yu!3&!6bXO?UGM z@l$xv#c@H{v^1xfFMQ2{6_Xtt6c#ix-0bb1w?1@J_ZQY{OpJ{VGu;}z?7n`R8$UmO znYLDkFb4-q2*(4h*!1bIIXqaIm>NH|GJOB$og}~SQ)sc{T89I31s5pS+&C}psGuNF zAkFfk?)RD7;<L?n_-^j*+GWf1BlP^+L;(g4mODI*RlCHBzqK+IY(6G_wKSP!ilCi2 zn`20<!h<r71>4^zEq}QyR=bOfo8^sb!@DV+?m3<B_U(Pp`GcvksGH%gVz{0A?mJ=5 z0-!CAH(D7c*2uowslV^#?bbORIszK!IVObea`|;qV86s|{qwq-8R8r_ni(cnCBA>l z=zBzzV@fs4jT`$6zCYck>dMN(^i4sb{=E36eEuAzbq)*WC_A|SIPxOSGT+s4pTmJT zmKSegV>T-HMQ;_i5sX&|$P-+U{S`7C#lv`~w>u>2&9SFxzWS?PU*p&iy6e!V-KOFl zr*_LT?NH~Js@-VZ{(I~G6&rUeIf%V3$iE+JDDYK`V~0Fbj=Y`Wndf!B`dM$Taa_2$ z`^CrZefy$|n^x?pR&>}~`+e1>6>A+F6c}EAc`;8WNo@WD*2actMThNA64&k9@Hg-3 zmqnZMdK-$?%`5nIcb1^b)4M#3F{|5~s}DWf9r?KX)h<J(BbUXM-XG&pSoLlh$A-yf zEl0~Qe-po27S2-gyFZ@I-u^=)*IxEL+ls$F?>Kzu=>2{vJAu4uy3yah->-lE^yyA* zyG8ey7{eV7T))1(?Cq_})_WS)k6e<sn8^8`<zD>8=MCZIl3xG*uySkt`2GF;{rzcY zXRQmU4rFg^*sU~S>eQ`SS6AI((s%t-&v^3s%UAcq4~Be7KQqIy@X?WmhK4(LV#-~8 zu0$(5;Ntl4^Jnbds?wKT7LlJe&gWnK<%1CiD=X{O)#2hv@40mKUp=_T(IC>Sv)Yj1 z<a4I=TRp--Gmi=nv^XR@?f$4Z<>&d!g|FPYqTS)ZT0w)Ns*v9wI_Fy6xveO&wOpI! z$M>3B*RS*BtyOn@%F48^siE`ia_5>Hem~)h?NQ?36DFqAvp7uS{rywbw$j|nYF8UC z<D$$R5-+)Tt-j=UBk|t<rWtp|m+YQeucoCfpkc{!;#bY-gK_EU|Ni{Ewn^o^;;giD zK|k0%4c;<1U1C@NeN|$9#<rSG=_@!u`*d?TB&vV!Fl=Z2xm`E9Ib!C_nWe9;7^?sO zz@-#%e%rwnXW5s}|C3WUD{j8oe(N*JOBP!H<mEr+=jSy`rf>h$>p!l2Y5aQ0g{QG0 zTRGv<`S!m%ZuHrNo!zgyZO&24vNtn!-VlqEROjT%t$E?oro!r)&zS0X=+v>`XHN18 z8oyS*TpR6gKV#-jRjbGQbI<(|zb{u)by%DG(q-{IMoT|>iOp33XH^3yhw>*TXYNgv zTNP=z>Hm$pg_}Q^uDdbQs`S;FnZ}7n`wp)teR1L8qodtLMH{|Ve|xiW%I%v=1BI9R zKaS%|nfPsw@SF>#xo+$g_kK1n{;}cc6IlVrzLj;ZarXOF)@D0>xG?oenj3q&r#L4o z)4EoMH8*A&=dV2YCic$c!*h<7rv(&WUl*J8<-zi)cfK5*6tbqq?}UeMreKKv<Jl|D zMJoxPpD;n<GL!NN!-vaUdG;+ytlIsk?D9$9=`9Hy@86UyV^Uh{a3EB`;M=#t?QbvL zp3Lqd;A6|OV`FgpySYM!#yM|Jf9;&x|HkFt#B*<Z(x=JS$@to{*S}_Omz}$_V!hV; zV(;ZTt>$l+3)@bd<fhaKI&(xqVS&_bbK^75|7<w!CzW&B{gV7#Nx`m%s~5c0ynO5B z*RO3ooT>ck%UaFaGmi;8Nc=zbu#@v|-L>Yq)n_ty9KMkM@@AD|m6&Z(_LJkzuWp8I z>QEIZ$Ykj;ng1@sOKis9_N*W7cKLhk<bVC#5b*s_E4NcL7Yhs1Q`yE{rLXHu>t|j% z|J?n}l<!rXzgU@=7_9|1?7O~iHBUiD6$i^5DaOfycHLP{XKt5grwL9iS7h;d_Ex+5 z%bB&;HXm*k2m}?(MU4!Wfs<K{o8CJ``G>eFJlMyPQSn>j_pItqJHDjz1zI*XR4XnJ ztJ`GEe!J^@ioaZb{`)y|=CsRIov8h~WW`R01F8ZHnrx9_-uvG5Z_)m+yR7to#|p#h zYeybg&)L2|;ULqE1@>B6tFo@Hdb;SfQili!2aAc|j<UB=F)=Z96Z=7{{9lGA<oB_! z`tABfc5nLG=~*Y+fA1`Qe#q?ZhQHewLKGAPH1=~e{O4m&ulUKPG3kGFme`f&2c<-J zxnz3O{am|hL5zZefPs^Pohkpk>ItFwM^olFA5Z}u2*b}L_mlN#W$RJbqfVdhF2CsN z%gQv#J<l;Pu1;|3pGkKnyE|wL2yjeEWw9yy|L^>~`~QDxzutEA?2l7LqAa<fTzQwH z;?KNUf2*VXo?W#`{P>p5UqygpN;HcNSGVep7aa2^{4KiO(^SydFqh*(=q{IMFZU~f z<}ThfGMu|7`t6==RP>b~g#&^K=`Xp8^&^}V9)xie%zhs>Rcxv##|~R2Ig3hvpNGZO zegX_T#F<uw?mG3%<{fL}inR_0cm+Qw?7kknTA$@U@9g-Ho4JA?6q@`~<2&}<Hfmh4 zLt2T!Z2k!w!Rm|G%MX7O4=oF4xnhQ>G(O$iedQat%-X@uv@6b#(;&CJqW?nq{n=T& zq^DOmC}dUY3*Ok5e1EUbKA&lKmlp57w7`3>djD>ZeF^%(ep;&EHcd}mnEC79^67h5 z##sEDC2yX1StokioA>+wpF4ee^U_TlBJ<wf+S<+|nWVU>@yYi-&xWm5hpSum{J!_w zt@{0~pt#CT<r}A0EcNQ&`zDq1qRA{@<NAY5T>t+4{r!D?<mP3%6Vg&s*G6r9^=+>8 z;>C;49yPzw&M)@*g6Hp~XZv(N?23{}(7!P;_0Nxw^KXhNs2yn!S;yvbbG84ssoMH` zJ{)4^w|S82{Nh@j$JbX^744R6+Nfo4$o<;$OaEIx+~%0|+C@9}TaoONcU8U#tE&al zG`{WH+OXv5vu92<x6MzqfBl(~X}A4P-<AB6mzHje=}XbQG{uN%>DjoYKKr`U`>m6r zZ5en14`ggpK9plu`b~EGPi6O>4K+9YCUjIz7u1ma<~9HN*4KN!?DpAJEyAuI6UoQH zEW?y0E|=pkr}d-H+ir>9jji`z+}ij1z`MWf^`2HqJ^}@tbG{!uyu;-)3wPb7)rNCB za(Z{)_?Y!=({y2x&LunC=asawbAQ+PS$6BsB<CG@bFDs!ibUA!sH{lzn9#p{x*O+1 z<NiY{V+H!o`Mi@(@ciN3XESlK8k6dwxX+7{CrwI<Vqp<DygsAs;s(_NC7(LyY21_O zc_+K+r(a}MZ&zi-i<;U!fB)3{soDGR*zMDogWfhDQ)&26?<C_oRlA`td6#6}qdZkl zg_tu!4|KV8mZq6<zcEcac&1?0S>a<#`m+Tur|@2X<@9ZC#{5HvoIG^-KSb_09xieJ zSiq#}PZbpv4GWsL{Qh0}`*&6IljeipKYrZi<P{Jxd5Oq`k^rU`>@l&IRnpA9FgEf0 z)JzpB7XG!SUo6&3`u6pzEkbGQzf5@o>ikbAYF7H)qJKMOp>g_L3qj{eO_dA=XYN`j zeSRy+x8(|7T--c`SE7Gvv_e0uj=8u$iM8H7KHlQs<@4w7UwbyWx9)ywkkLg}FNV5F z)4m>E*eLcO;?j1PP?a9eO{Ud?=b4z69*JWrP8T@PcSBQ7=g#5Pixw%d|N8mE@IaqG z)3UE0A+tXGpE+u44_v$a;Q90PrJs&?wXinc*dB48z52g<dfV(}6WiH5dLptyTr?P2 zyn6P|uwvuytID|$-5o#QWXbdlO?By&TYmlAp(nrnS%F%^S@!$)r2j2sw5k8Y{cr!# z9AVGx1wvczJgik($*3-)yxj1ix~lob^X1D9@?5q$9p{*=#;fQTdA-tcW670iR_VUi zI7HvNNG}X(dnduh{r$%&zuEoOpC-8Ybwaz1?2YXVlbJf7RA+kH$+9ndIC;b3D^1L= zO%nMR2hTE?z5b}b%0!9l#ZB{jCQTEmc0D4L-t%SO6h>*q?|xf_&CV*@MC?#+yM1q_ z%?@>b#S1&-_RnAMpOzL@R(9@c_Vso5cNBiUwl;cu{^9@g=BZ6uU%-|u+QJ^$ZqwE4 z``~Z6Zk^LVp}#fDcX;{5ta=k_q_Qhj??UjolP6!^DVv}xuJGl8GrwbvN2+pEj=$XV z?~k(3=b92{PPFHF_w#q?nuvpLK`vW%_d8^6zJ7Q8#M4tE7Q6Ls&AzS||M%jr+|Ri? z6Ykj^X%8_|YIyxQajM>%Gau(ATNfW#QX9=B4VxWJ(p(|9VTV`w!6sG%8EH{b*5V&I zj{hLtqzy?nxBdhLM1KlAF6g`XrpbqbcXxI^V7k47gMEs{m*(Srve}IFXXjcTl9^Uh z9sO(G5%D*r*KeG@_f6C{d0plk*GpM7ia)~?i~e$aIw$je&#I)|DwowXmcE^2^8Lxd z+8;?1IZAt~&q=B}H6*OxeJoD(Qk>G{OAZG-K5aj&v^Oz_-EaETKbH;!KG77=i06=a zcTDx$6V3Rw>MKM!rm!%{ZAdwO(zep8iDzOvXp%Kt@WX_JO|m!VF?;F0{JN`rtI{F^ z(D*SQi&u`nob@RYaK&BS>)^TW{Qm2uf={_wSeUjcF}%)dnV+v6p)}9oK&rq4v->;W zn#Z#71qwDc%vM<N+BjAG%x!ro$v^L|tlS+|-*>fa?@XHreZ%?3eQ)ggvMSPR^J}mE zgwk_t#+56cc*lI&Ur-4eAin!;^Qm`!)g3{n?3gOD?lzY;#khZ(KXa3C&Od_<Ki~V_ z6@C6|(*1?8(h-+fyroXtZRg}V&BwH1rHsz(+ne7n;P(9YMAqfg?slKb_j~UaZqC{A zQ^Dp{80Y`@^-F6_#ismxYjE&({kNI#w&&kp7qheI=0h#Vld*0Oj`d3OO^I0O)LLqv zTPk_-`vKd^6WeUQy*YXK+sP-plhk}>D!pIym|<DDap&IIVt0LSxkQ$;Gp<&@I<vc= z{KRhSr5kK3fAq!liFF-Mn7IG(v5Sj0A5-0AyX9se_bEfEKO($WIipqjE*{h|Ib8Yp zMp|u}(ZP_i{8P(stuQeC#yK}HWY6NOdaWfN7nkf(PYU){Oh3MfrRANarK)dp@}&0? zb*W~eH)^(g&0&s9=k)dBi)L_7Jz%%yqR_nwpNkWkV;2`2{fMi{Zu5AOz_yEd{l$Yi zo`#xxKRn<qo@wE+M(5|sjm^i+Z?B4%;FJuMJ;0P$`e$trm&T-35vxwHwM^)EHHT;A zl>4V5rR_RnR@}dp^C!Xg=5iBD&Gs^{z*oyGUamZI@Kw^=GmeWVE;v@C>oIrEnn`za z6jbCD4!{5T&EnUz!eetcHy=9mRJvn*r5{_R-TLhNPiAr-W66{|bErQ{ap%m_NB$i) zTX6N~#t9$i_f1dpO-YiM5-)8lJTh~|<k=k;bFGV>e0=G{5}dqTKL2*uq^h^eC!RZ# zb-PUL*nNAwBP^39Mn{Gn(|_z<I{n3N<IR2L%Qxl!a_O35;Vt!l<w|9zB?V7BH2Z{} zXK+YvkMB+@zPWVXltuGau?CoQU%uwncR_Hcz!d4Q3EK`9@p8zXynfB(li1_3yEnEj z-@10mo!u4X+27V3vy^;tV~<+)8%a@}g@?@|gpaL{zGAjYTrgVs8@J?kfyj*?HwXHh zQ*hh7LW6y_r(t%$lN0Hkt0p>Cxo)+s(+V}JT~w7BAt(4}Mdx`l>jN(HZ`=!9ykfbL z*1VlMXC?;7NM!k~oZ6?l?u5pk<*S@O`YKF4^)xU#L1BI5;$JLXoxwXcoC?XD>Qtn5 zexksR%kR7zi<G@Yzr0*DF<2l+)qIwV>*htw-Yc|Ka_ks*w96D8@azkUUhVF8F8TSo z6FJRA=gm^WT@9)Yy2I4Yefb>hFPq-9{*GjK*$InN?~gn<KkLTnvV-wg=I;7EZO@Gf zZfE)Cm>Aq!rM^txQKaL+cdpKwG8OS!Ppg7GAB*<Zy*}Z3m)*O<xn|0bz=i6|70Ty# zCN2AQ;K$_ihu*jD;Zuk>^IO4RS+#(5hRum*Gc?#EgFS^LvN-RG@Te^<Sk!nSO?hc) zNR7W&udl7rs-GO2n%R$=-uC((rDA^RV^FoT(DIpX3wAY3$mu_xwCrfh6XBEkr5n{> zxSx2w?nAMWQ2KF|kCQ(o{PF8d_?IAd*(XQbRaH&KmC2bsEvRVs;tm~-TZ`Tum~zG- zbNS@6qQ305r96A~`z<-;SI3*_W6Knp(8PapwTpbHxXZNsj+QxAdWKgQbIaB<eD#ig zbM1pek#W@_cY|H}lPWG|9c-U+CcxOzM3+@VSu@z*thy}e@neNw4xXFcZcXwpo_wI) zaaG5s)Gq@08G=`(vu5%4@T<P!x!SV1aqjDcAO5;)7xX1v_uP7JQpB&9wjFzq=T^R% zyNkaz=Vs{f>Yts@dV7>SRpnP7<UeU_HRGsB@d2k=mv-UyT#51<9UGnaXGPh)IJ~-m zoh?_}Q2cI8@d>ue0s9=4&YCMcEOoA4Q8%gTQ^UeD4J+gr-l?x;S+p{u_AS#736@X? zGY{?+dX;mWSMKBNRD3+m{b=p3&gq#!ULMIWQ?mZ-dfe;mP~-TelTSl1P&Fz+TVAp- zPQxU(&daMS@Z1L%*~>qRPKWU2_{$Z1@jiQ9KlrO^yTC(^`AY9CmZaq|ba!m!J*0fy zs7~a4PV<JKkD<SQ9%)|itmntOFH2tv=P~hKVd~W5mu?Er_x$2{bPF5D)wc|jGEF*8 zRM|~2NV~eRI`KlygC*XNk5A@^S~?+Sxxc-i(8SxNuh0DarKYp+RBu?QbE1Q_L-}GC tJLVbEH=3QZQ%^m(r!lL$_rqU%?zJVQqW@!s85kHCJYD@<);T3K0RYuqIXnOW literal 0 HcmV?d00001 diff --git a/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch2.png b/FileSearch/javahelp/org/sleuthkit/autopsy/filesearch/docs/open_fileSearch2.png new file mode 100644 index 0000000000000000000000000000000000000000..afdfc0fb8d81a61af1baaec5ba3aa565d1bf2822 GIT binary patch literal 22413 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 U#ssdp3=9kmp00i_>zopr0B!j!Q~&?~ literal 0 HcmV?d00001 diff --git a/FileSearch/manifest.mf b/FileSearch/manifest.mf new file mode 100644 index 0000000000..ee8e710a5e --- /dev/null +++ b/FileSearch/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.filesearch/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Layer: org/sleuthkit/autopsy/filesearch/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/filesearch/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager, org.netbeans.api.javahelp.Help + diff --git a/FileSearch/nbproject/build-impl.xml b/FileSearch/nbproject/build-impl.xml new file mode 100644 index 0000000000..84890932f9 --- /dev/null +++ b/FileSearch/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.filesearch-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/FileSearch/nbproject/genfiles.properties b/FileSearch/nbproject/genfiles.properties new file mode 100644 index 0000000000..39ec6d5464 --- /dev/null +++ b/FileSearch/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=782bf133 +build.xml.script.CRC32=c0009852 +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=782bf133 +nbproject/build-impl.xml.script.CRC32=2e520747 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/FileSearch/nbproject/project.properties b/FileSearch/nbproject/project.properties new file mode 100644 index 0000000000..cd238545fe --- /dev/null +++ b/FileSearch/nbproject/project.properties @@ -0,0 +1,5 @@ +file.reference.jcalendarbutton-1.4.5.jar=release/modules/ext/jcalendarbutton-1.4.5.jar +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +javahelp.hs=filesearch-hs.xml +spec.version.base=0.0 diff --git a/FileSearch/nbproject/project.xml b/FileSearch/nbproject/project.xml new file mode 100644 index 0000000000..ad25ec5fca --- /dev/null +++ b/FileSearch/nbproject/project.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.filesearch</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.netbeans.modules.settings</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>1</release-version> + <specification-version>1.26.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.dialogs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.15.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.explorer</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.28.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.nodes</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.16.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.casemodule</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponents</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.datamodel</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.directorytree</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.filesearch</package> + </public-packages> + <class-path-extension> + <runtime-relative-path>ext/jcalendarbutton-1.4.5.jar</runtime-relative-path> + <binary-origin>release/modules/ext/jcalendarbutton-1.4.5.jar</binary-origin> + </class-path-extension> + </data> + </configuration> +</project> diff --git a/FileSearch/nbproject/suite.properties b/FileSearch/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/FileSearch/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/FileSearch/release/modules/ext/jcalendarbutton-1.4.5.jar b/FileSearch/release/modules/ext/jcalendarbutton-1.4.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..4128ca1e05a3e57d1b1a98cf56643daca8e102f2 GIT binary patch literal 28408 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 literal 0 HcmV?d00001 diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java new file mode 100644 index 0000000000..a65e650d4e --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java @@ -0,0 +1,40 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import javax.swing.JComponent; + +/** + * Implements common functionality of file search filters + * @param <T> Type of component to display in file search panel + * @author pmartel + */ +abstract class AbstractFileSearchFilter<T extends JComponent> implements FileSearchFilter { + + final private T component; + + AbstractFileSearchFilter(T component) { + this.component = component; + } + + @Override + public T getComponent() { + return this.component; + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/Bundle.properties b/FileSearch/src/org/sleuthkit/autopsy/filesearch/Bundle.properties new file mode 100644 index 0000000000..73aa883be8 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/Bundle.properties @@ -0,0 +1,45 @@ +CTL_FileSearchAction=FileSearch +CTL_FileSearchTopComponent=File Search +HINT_FileSearchTopComponent=This is a FileSearch window +OpenIDE-Module-Name=FileSearch +FileSearchTopComponent.searchTermLabel1.text=Search for files that match the following criteria: +FileSearchTopComponent.searchButton1.text=Search +FileSearchTopComponent.sizeCheckBox1.text=Size: +FileSearchTopComponent.noteNameLabel1.text=<html>*Note: Name match is case insensitive and matches<br/> any part of the file name. Regular expressions are<br/> not currently supported. </html> +FileSearchTopComponent.searchTextField1.text= +FileSearchTopComponent.nameCheckBox1.text=Name: +FileSearchTopComponent.jLabel8.text=Timezone: +FileSearchTopComponent.jLabel7.text=*The date format is mm/dd/yyyy +FileSearchTopComponent.jLabel6.text=*Empty fields mean "No Limit" +FileSearchTopComponent.createdCheckBox1.text=Created +FileSearchTopComponent.accessedCheckBox1.text=Accessed +FileSearchTopComponent.changedCheckBox1.text=Changed +FileSearchTopComponent.modifiedCheckBox1.text=Modified +FileSearchTopComponent.dateToButtonCalendar1.text= +FileSearchTopComponent.dateToTextField1.text= +FileSearchTopComponent.jLabel5.text=to +FileSearchTopComponent.dateFromTextField1.text= +FileSearchTopComponent.dateFromButtonCalendar1.text= +FileSearchTopComponent.dateCheckBox1.text=Date: +FileSearchTopComponent.dateFiltersButton1.text=Date Filters +KnownStatusSearchPanel.knownCheckBox.text=Known Status: +KnownStatusSearchPanel.knownBadOptionCheckBox.text=Known bad +KnownStatusSearchPanel.knownOptionCheckBox.text=Known (NSRL) +KnownStatusSearchPanel.unknownOptionCheckBox.text=Unknown +DateSearchPanel.dateCheckBox.text=Date: +DateSearchPanel.jLabel4.text=Timezone: +DateSearchPanel.jLabel3.text=*The date format is mm/dd/yyyy +DateSearchPanel.jLabel2.text=*Empty fields mean "No Limit" +DateSearchPanel.createdCheckBox.text=Created +DateSearchPanel.accessedCheckBox.text=Accessed +DateSearchPanel.changedCheckBox.text=Changed +DateSearchPanel.modifiedCheckBox.text=Modified +DateSearchPanel.dateToButtonCalendar.text= +DateSearchPanel.dateToTextField.text= +DateSearchPanel.jLabel1.text=to +DateSearchPanel.dateFromTextField.text= +DateSearchPanel.dateFromButtonCalendar.text= +NameSearchPanel.nameCheckBox.text=Name: +NameSearchPanel.noteNameLabel.text=<html>*Note: Name match is case insensitive and matches<br/> any part of the file name. Regular expressions are<br/> not currently supported. </html> +NameSearchPanel.searchTextField.text= +SizeSearchPanel.sizeCheckBox.text=Size: diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterChildren.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterChildren.java new file mode 100644 index 0000000000..30b56966ca --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterChildren.java @@ -0,0 +1,46 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; + +/** + * This class is used for the creation of all the children for the + * DataResultFilterNode that created in the DataResultFilterNode.java. + * + * @author jantonius + */ +public class DataResultFilterChildren extends FilterNode.Children { + + /** the constructor */ + public DataResultFilterChildren(Node arg) { + super(arg); + } + + @Override + protected Node copyNode(Node arg0) { + return new DataResultFilterNode(arg0); + } + + @Override + protected Node[] createNodes(Node arg0) { + return new Node[]{this.copyNode(arg0)}; + } +} \ No newline at end of file diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterNode.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterNode.java new file mode 100644 index 0000000000..973d0a4343 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DataResultFilterNode.java @@ -0,0 +1,139 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import org.sleuthkit.autopsy.datamodel.ContentNodeVisitor; +import org.sleuthkit.autopsy.datamodel.ImageNode; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.datamodel.VolumeNode; +import org.sleuthkit.autopsy.datamodel.FileNode; +import org.sleuthkit.autopsy.datamodel.DirectoryNode; +import java.sql.SQLException; +import javax.swing.Action; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.autopsy.directorytree.ChangeViewAction; +import org.sleuthkit.autopsy.directorytree.ExtractAction; + +/** + * This class wraps nodes as they are passed to the DataResult viewers. It + * defines the actions that the node should have. + */ +public class DataResultFilterNode extends FilterNode implements ContentNode { + + private Node currentNode; + + /** the constructor */ + public DataResultFilterNode(Node arg) { + super(arg, new DataResultFilterChildren(arg)); + this.currentNode = arg; + } + + @Override + public Node getOriginal() { + return super.getOriginal(); + } + + /** + * Right click action for the nodes that we want to pass to the directory + * table and the output view. + * + * @param popup + * @return actions + */ + @Override + public Action[] getActions(boolean popup) { + // right click action(s) for image node + if (this.currentNode instanceof ImageNode) { + return new Action[]{}; + } // right click action(s) for volume node + else if (this.currentNode instanceof VolumeNode) { + return new Action[]{}; + } // right click action(s) for directory node + else if (this.currentNode instanceof DirectoryNode) { + return new Action[]{ + new ChangeViewAction("View", 0, (ContentNode) currentNode), + new OpenParentFolderAction("Open Parent Directory", ((ContentNode) currentNode).getSystemPath()) + }; + } // right click action(s) for the file node + else if (this.currentNode instanceof FileNode) { + return new Action[]{ + new ExtractAction("Extract", (FileNode) this.currentNode), + new ChangeViewAction("View", 0, (ContentNode) currentNode), + new OpenParentFolderAction("Open Parent Directory", ((ContentNode) currentNode).getSystemPath()) + }; + } else { + return new Action[]{}; + } + } + + /** + * Double click action for the nodes that we want to pass to the directory + * table and the output view. + * + * @return action + */ + @Override + public Action getPreferredAction() { + return null; + } + + @Override + public long getID() { + return ((ContentNode) currentNode).getID(); + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + return ((ContentNode) currentNode).getRowValues(rows); + } + + @Override + public byte[] read(long offset, long len) throws TskException { + return ((ContentNode) currentNode).read(offset, len); + } + + @Override + public int getFileIDColumn() { + return ((ContentNode) currentNode).getFileIDColumn(); + } + + @Override + public Content getContent() { + return ((ContentNode) currentNode).getContent(); + } + + @Override + public String[] getDisplayPath() { + return ((ContentNode) currentNode).getDisplayPath(); + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + //TODO: figure out how to deal with visitors + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String[] getSystemPath() { + return ((ContentNode) currentNode).getSystemPath(); + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java new file mode 100644 index 0000000000..7a7e12a660 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -0,0 +1,254 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.SimpleTimeZone; +import java.util.TimeZone; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JSeparator; +import javax.swing.ListCellRenderer; +import javax.swing.border.EmptyBorder; +import org.sleuthkit.autopsy.casemodule.Case; + +/** + * Filters file date properties (modified/created/etc.. times) + * @author pmartel + */ +class DateSearchFilter extends AbstractFileSearchFilter<DateSearchPanel> { + + private static final String NONE_SELECTED_MESSAGE = "At least one date type must be selected!"; + private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy"); + private static final String SEPARATOR = "SEPARATOR"; + + /** + * New DateSearchFilter with the default panel + */ + DateSearchFilter() { + this(new DateSearchPanel(DATE_FORMAT, DateSearchFilter.createTimeZoneList())); + } + + private DateSearchFilter(DateSearchPanel panel) { + super(panel); + Case.addPropertyChangeListener(this.new CasePropertyChangeListener()); + } + + @Override + public boolean isEnabled() { + return this.getComponent().getDateCheckBox().isSelected(); + } + + @Override + public String getPredicate() throws FilterValidationException { + String addQuery = "1"; + DateSearchPanel panel = this.getComponent(); + + // first, get the selected timeZone from the dropdown list + String tz = this.getComponent().getTimeZoneComboBox().getSelectedItem().toString(); + String tzID = tz.substring(tz.indexOf(" ") + 1); // 1 index after the space is the ID + TimeZone selectedTZ = TimeZone.getTimeZone(tzID); // + + // convert the date from the selected timezone to get the GMT + long fromDate = 0; + String startDateValue = panel.getDateFromTextField().getText(); + Calendar startDate = null; + try { + DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); + sdf.setTimeZone(selectedTZ); // get the time in the selected timezone + Date temp = sdf.parse(startDateValue); + + startDate = Calendar.getInstance(new SimpleTimeZone(0, "GMT")); + startDate.setTime(temp); // convert to GMT + } catch (ParseException ex) { + // for now, no need to show the error message to the user her + } + if (!startDateValue.equals("")) { + if (startDate != null) { + fromDate = startDate.getTimeInMillis() / 1000; // divided by 1000 because we want to get the seconds, not miliseconds + } + } + + long toDate = Date.parse(DATE_FORMAT.format(Calendar.getInstance().getTime())); // get today's date + String endDateValue = panel.getDateToTextField().getText(); + Calendar endDate = null; + try { + DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); + sdf.setTimeZone(selectedTZ); // get the time in the selected timezone + Date temp2 = sdf.parse(endDateValue); + + endDate = Calendar.getInstance(new SimpleTimeZone(0, "GMT")); + endDate.setTime(temp2); // convert to GMT + endDate.set(Calendar.HOUR, endDate.get(Calendar.HOUR) + 24); // get the next 24 hours + } catch (ParseException ex) { + // for now, no need to show the error message to the user here + } + if (!endDateValue.equals("")) { + if (endDate != null) { + toDate = endDate.getTimeInMillis() / 1000; // divided by 1000 because we want to get the seconds, not miliseconds + } + } + + final boolean modifiedChecked = panel.getModifiedCheckBox().isSelected(); + final boolean changedChecked = panel.getChangedCheckBox().isSelected(); + final boolean accessedChecked = panel.getAccessedCheckBox().isSelected(); + final boolean createdChecked = panel.getAccessedCheckBox().isSelected(); + + + if (modifiedChecked || changedChecked || accessedChecked || createdChecked) { + + String subQuery = "0"; + + if (modifiedChecked) { + subQuery += " or mtime between " + fromDate + " and " + toDate; + } + + if (changedChecked) { + subQuery += " or ctime between " + fromDate + " and " + toDate; + } + + if (accessedChecked) { + subQuery += " or atime between " + fromDate + " and " + toDate; + } + + if (createdChecked) { + subQuery += " or crtime between " + fromDate + " and " + toDate; + } + + addQuery += " and (" + subQuery + ")"; + } else { + throw new FilterValidationException(NONE_SELECTED_MESSAGE); + } + + return addQuery; + + } + + private void updateTimeZoneList() { + this.getComponent().setTimeZones(DateSearchFilter.createTimeZoneList()); + } + + private static List<String> createTimeZoneList() { + + List<String> timeZones = new ArrayList<String>(); + + if (Case.existsCurrentCase()) { + // get the latest case + Case currentCase = Case.getCurrentCase(); // get the most updated case + + Set<TimeZone> caseTimeZones = currentCase.getTimeZone(); + Iterator<TimeZone> iterator = caseTimeZones.iterator(); + while (iterator.hasNext()) { + TimeZone zone = iterator.next(); + int offset = zone.getRawOffset() / 1000; + int hour = offset / 3600; + int minutes = (offset % 3600) / 60; + String item = String.format("(GMT%+d:%02d) %s", hour, minutes, zone.getID()); + timeZones.add(item); + } + + if (caseTimeZones.size() > 0) { + timeZones.add(SEPARATOR); + } + + // load and add all timezone + String[] ids = SimpleTimeZone.getAvailableIDs(); + for (String id : ids) { + TimeZone zone = TimeZone.getTimeZone(id); + int offset = zone.getRawOffset() / 1000; + int hour = offset / 3600; + int minutes = (offset % 3600) / 60; + String item = String.format("(GMT%+d:%02d) %s", hour, minutes, id); + timeZones.add(item); + } + } + + return timeZones; + } + + /** + * Inner class to put the separator inside the combo box. + */ + static class ComboBoxRenderer extends JLabel implements ListCellRenderer { + + JSeparator separator; + + ComboBoxRenderer() { + setOpaque(true); + setBorder(new EmptyBorder(1, 1, 1, 1)); + separator = new JSeparator(JSeparator.HORIZONTAL); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + String str = (value == null) ? "" : value.toString(); + if (SEPARATOR.equals(str)) { + return separator; + } + if (isSelected) { + setBackground(list.getSelectionBackground()); + setForeground(list.getSelectionForeground()); + } else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + } + setFont(list.getFont()); + setText(str); + return this; + } + } + + private class CasePropertyChangeListener implements PropertyChangeListener { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object oldValue = evt.getOldValue(); + Object newValue = evt.getNewValue(); + + if (changed.equals(Case.CASE_CURRENT_CASE)) { + // create or open a case + if (newValue != null) { + DateSearchFilter.this.updateTimeZoneList(); + } + } + + // if the image is added to the case + if (changed.equals(Case.CASE_ADD_IMAGE)) { + DateSearchFilter.this.updateTimeZoneList(); + } + + // if the image is removed from the case + if (changed.equals(Case.CASE_DEL_IMAGE)) { + DateSearchFilter.this.updateTimeZoneList(); + } + } + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form new file mode 100644 index 0000000000..4d5fad9724 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form @@ -0,0 +1,234 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="dateCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="dateFromTextField" min="-2" pref="92" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="dateFromButtonCalendar" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="dateToTextField" min="-2" pref="92" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="0" max="-2" attributes="0"/> + <Component id="dateToButtonCalendar" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="21" pref="21" max="21" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="changedCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="modifiedCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="accessedCheckBox" min="-2" max="-2" attributes="0"/> + <Component id="createdCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel4" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="timeZoneComboBox" min="-2" pref="193" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="21" pref="21" max="21" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="dateCheckBox" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="dateFromTextField" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="103" alignment="1" groupAlignment="3" attributes="0"> + <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="dateToTextField" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="dateToButtonCalendar" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> + </Group> + <Component id="dateFromButtonCalendar" alignment="1" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="timeZoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="modifiedCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="changedCheckBox" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="1" attributes="0"> + <Component id="accessedCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace min="23" pref="23" max="23" attributes="0"/> + </Group> + <Component id="createdCheckBox" alignment="1" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JFormattedTextField" name="dateToTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.dateToTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="focusLost" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="dateToTextFieldFocusLost"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JFormattedTextField(this.dateFormat);"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel4"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="dateCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.dateCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JComboBox" name="timeZoneComboBox"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="0"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(this.timeZones.toArray());"/> + <AuxValue name="JavaCodeGenerator_CreateCodePost" type="java.lang.String" value="timeZoneComboBox.setRenderer(new DateSearchFilter.ComboBoxRenderer());"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="jLabel3"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JFormattedTextField" name="dateFromTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.dateFromTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="focusLost" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="dateFromTextFieldFocusLost"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JFormattedTextField(this.dateFormat);"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="org.sourceforge.jcalendarbutton.JCalendarButton" name="dateFromButtonCalendar"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.dateFromButtonCalendar.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="dateFromPopupChanged"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="modifiedCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.modifiedCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="changedCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.changedCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="accessedCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.accessedCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="createdCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.createdCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="org.sourceforge.jcalendarbutton.JCalendarButton" name="dateToButtonCalendar"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="DateSearchPanel.dateToButtonCalendar.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="dateToPopupChanged"/> + </Events> + </Component> + </SubComponents> +</Form> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java new file mode 100644 index 0000000000..9af85af157 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java @@ -0,0 +1,313 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.filesearch; + +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Date; +import java.util.List; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; + +/** + * Subpanel with controls for file data filtering. + */ +class DateSearchPanel extends javax.swing.JPanel { + + DateFormat dateFormat; + List<String> timeZones; + + DateSearchPanel(DateFormat dateFormat, List<String> timeZones) { + this.dateFormat = dateFormat; + this.timeZones = timeZones; + + initComponents(); + } + + JCheckBox getAccessedCheckBox() { + return accessedCheckBox; + } + + JCheckBox getChangedCheckBox() { + return changedCheckBox; + } + + JCheckBox getCreatedCheckBox() { + return createdCheckBox; + } + + JCheckBox getDateCheckBox() { + return dateCheckBox; + } + + JFormattedTextField getDateFromTextField() { + return dateFromTextField; + } + + JFormattedTextField getDateToTextField() { + return dateToTextField; + } + + JCheckBox getModifiedCheckBox() { + return modifiedCheckBox; + } + + JComboBox getTimeZoneComboBox() { + return timeZoneComboBox; + } + + void setTimeZones(List<String> newTimeZones) { + this.timeZones = newTimeZones; + this.timeZoneComboBox.removeAllItems(); + for (String tz : newTimeZones) { + this.timeZoneComboBox.addItem(tz); + } + } + + //TODO: calendar button stuff + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + dateToTextField = new JFormattedTextField(this.dateFormat); + jLabel1 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + dateCheckBox = new javax.swing.JCheckBox(); + timeZoneComboBox = new JComboBox(this.timeZones.toArray()); + timeZoneComboBox.setRenderer(new DateSearchFilter.ComboBoxRenderer()); + jLabel3 = new javax.swing.JLabel(); + dateFromTextField = new JFormattedTextField(this.dateFormat); + jLabel2 = new javax.swing.JLabel(); + dateFromButtonCalendar = new org.sourceforge.jcalendarbutton.JCalendarButton(); + modifiedCheckBox = new javax.swing.JCheckBox(); + changedCheckBox = new javax.swing.JCheckBox(); + accessedCheckBox = new javax.swing.JCheckBox(); + createdCheckBox = new javax.swing.JCheckBox(); + dateToButtonCalendar = new org.sourceforge.jcalendarbutton.JCalendarButton(); + + dateToTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateToTextField.text")); // NOI18N + dateToTextField.addFocusListener(new java.awt.event.FocusAdapter() { + public void focusLost(java.awt.event.FocusEvent evt) { + dateToTextFieldFocusLost(evt); + } + }); + + jLabel1.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel1.text")); // NOI18N + + jLabel4.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel4.text")); // NOI18N + + dateCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateCheckBox.text")); // NOI18N + + jLabel3.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel3.text")); // NOI18N + + dateFromTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateFromTextField.text")); // NOI18N + dateFromTextField.addFocusListener(new java.awt.event.FocusAdapter() { + public void focusLost(java.awt.event.FocusEvent evt) { + dateFromTextFieldFocusLost(evt); + } + }); + + jLabel2.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel2.text")); // NOI18N + + dateFromButtonCalendar.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateFromButtonCalendar.text")); // NOI18N + dateFromButtonCalendar.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + dateFromPopupChanged(evt); + } + }); + + modifiedCheckBox.setSelected(true); + modifiedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.modifiedCheckBox.text")); // NOI18N + + changedCheckBox.setSelected(true); + changedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.changedCheckBox.text")); // NOI18N + + accessedCheckBox.setSelected(true); + accessedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.accessedCheckBox.text")); // NOI18N + + createdCheckBox.setSelected(true); + createdCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.createdCheckBox.text")); // NOI18N + + dateToButtonCalendar.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateToButtonCalendar.text")); // NOI18N + dateToButtonCalendar.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + dateToPopupChanged(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(dateCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dateFromTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(dateFromButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(dateToTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(dateToButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(changedCheckBox) + .addComponent(modifiedCheckBox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(accessedCheckBox) + .addComponent(createdCheckBox))) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel3) + .addComponent(jLabel2))))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(dateCheckBox) + .addComponent(dateFromTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(dateToTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(dateToButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(1, 1, 1)) + .addComponent(dateFromButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(4, 4, 4) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel4) + .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(modifiedCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(changedCheckBox)) + .addGroup(layout.createSequentialGroup() + .addComponent(accessedCheckBox) + .addGap(23, 23, 23)) + .addComponent(createdCheckBox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void dateFromTextFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_dateFromTextFieldFocusLost + // set the "from" calendar button to listen to change in the text field + String fromDateString = this.dateFromTextField.getText(); + if (!fromDateString.equals("")) { + try { + Date fromDate = dateFormat.parse(fromDateString); + dateFromButtonCalendar.setTargetDate(fromDate); + } catch (ParseException ex) { + // for now, no need to show the error message to the user her + } + } + }//GEN-LAST:event_dateFromTextFieldFocusLost + + private void dateToTextFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_dateToTextFieldFocusLost + // set the "to" calendar button to listen to change in the text field + String toDateString = this.dateToTextField.getText(); + if (!toDateString.equals("")) { + try { + Date toDate = dateFormat.parse(toDateString); + dateToButtonCalendar.setTargetDate(toDate); + } catch (ParseException ex) { + // for now, no need to show the error message to the user here + } + } + }//GEN-LAST:event_dateToTextFieldFocusLost + + private void dateFromPopupChanged(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_dateFromPopupChanged + if (evt.getNewValue() instanceof Date) { + setFromDate((Date) evt.getNewValue()); + } + }//GEN-LAST:event_dateFromPopupChanged + + private void dateToPopupChanged(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_dateToPopupChanged + if (evt.getNewValue() instanceof Date) { + setToDate((Date) evt.getNewValue()); + } + }//GEN-LAST:event_dateToPopupChanged + + /** + * Validate and set the datetime field on the screen given a datetime string. + * @param date The date object + */ + private void setFromDate(Date date) { + String dateStringResult = ""; + if (date != null) { + dateStringResult = dateFormat.format(date); + } + dateFromTextField.setText(dateStringResult); + dateFromButtonCalendar.setTargetDate(date); + } + + /** + * Validate and set the datetime field on the screen given a date. + * @param date The date object + */ + private void setToDate(Date date) { + String dateStringResult = ""; + if (date != null) { + dateStringResult = dateFormat.format(date); + } + dateToTextField.setText(dateStringResult); + dateToButtonCalendar.setTargetDate(date); + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox accessedCheckBox; + private javax.swing.JCheckBox changedCheckBox; + private javax.swing.JCheckBox createdCheckBox; + private javax.swing.JCheckBox dateCheckBox; + private org.sourceforge.jcalendarbutton.JCalendarButton dateFromButtonCalendar; + private javax.swing.JFormattedTextField dateFromTextField; + private org.sourceforge.jcalendarbutton.JCalendarButton dateToButtonCalendar; + private javax.swing.JFormattedTextField dateToTextField; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JCheckBox modifiedCheckBox; + private javax.swing.JComboBox timeZoneComboBox; + // End of variables declaration//GEN-END:variables +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java new file mode 100644 index 0000000000..5159ae020a --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java @@ -0,0 +1,62 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import javax.swing.JComponent; + +/** + * Provides a filter and the panel to display it to the FileSearchTopComponent + */ +interface FileSearchFilter { + + /** + * Gets the panel to put in the File Search pane. + * @return component that provides input to filter + */ + JComponent getComponent(); + + /** + * Checks if this filter is currently enabled. + * @return true if it should be included in the search + */ + boolean isEnabled(); + + /** + * Gets predicate expression to include in the SQL filter expression + * @return SQL expression that evaluates to a boolean true if the + * filter matches the file, otherwise false + * @throws FilterValidationException with a message if the filter is in an + * invalid state + */ + String getPredicate() throws FilterValidationException; + + /** + * Thrown if a filter's inputs are invalid + */ + static class FilterValidationException extends Exception { + + FilterValidationException(String message) { + super(message); + } + + FilterValidationException(String message, Exception cause) { + super(message, cause); + } + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponent.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponent.java new file mode 100644 index 0000000000..d02e291974 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponent.java @@ -0,0 +1,342 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.border.EmptyBorder; +import org.openide.nodes.Node; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer; +import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; +import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; +import org.sleuthkit.datamodel.FsContent; +import org.sleuthkit.datamodel.SleuthkitCase; + +/** + * Top component which displays something. + */ +//@ConvertAsProperties(dtd = "-//org.sleuthkit.autopsy.filesearch//FileSearch//EN", autostore = false) +// Registered as a service provider for DataExplorer in layer.xml +public final class FileSearchTopComponent extends TopComponent implements DataExplorer { + + private List<FilterArea> filterAreas = new ArrayList(); + private JButton searchButton; + private static FileSearchTopComponent instance; + private PropertyChangeSupport pcs; + private int index; + private static ArrayList<DataResultTopComponent> searchResults = new ArrayList<DataResultTopComponent>(); + private static final String PREFERRED_ID = "FileSearchTopComponent"; + + private FileSearchTopComponent() { + initComponents(); + setListener(); + setName(NbBundle.getMessage(FileSearchTopComponent.class, "CTL_FileSearchTopComponent")); + setToolTipText(NbBundle.getMessage(FileSearchTopComponent.class, "HINT_FileSearchTopComponent")); + + putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); + + this.pcs = new PropertyChangeSupport(this); + + this.index = 1; + } + + /** + * This method is called from within the constructor to + * initialize the form. + */ + private void initComponents() { + + this.setLayout(new BorderLayout()); + + JPanel filterPanel = new JPanel(); + filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.Y_AXIS)); + filterPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); + + JScrollPane scrollPane = new JScrollPane(filterPanel); + scrollPane.setPreferredSize(this.getSize()); + this.add(scrollPane, BorderLayout.CENTER); + + JLabel label = new JLabel("Search for files that match the following criteria:"); + label.setAlignmentX(Component.LEFT_ALIGNMENT); + label.setBorder(new EmptyBorder(0, 0, 10, 0)); + filterPanel.add(label); + + // Create and add filter areas + this.filterAreas.add(new FilterArea("Name", new NameSearchFilter())); + + List<FileSearchFilter> metadataFilters = new ArrayList<FileSearchFilter>(); + metadataFilters.add(new SizeSearchFilter()); + metadataFilters.add(new DateSearchFilter()); + this.filterAreas.add(new FilterArea("Metadata", metadataFilters)); + + this.filterAreas.add(new FilterArea("Known Status", new KnownStatusSearchFilter())); + + for (FilterArea fa : this.filterAreas) { + fa.setMaximumSize(new Dimension(Integer.MAX_VALUE, fa.getMinimumSize().height)); + fa.setAlignmentX(Component.LEFT_ALIGNMENT); + filterPanel.add(fa); + } + + // Create and add search button + this.searchButton = new JButton("Search"); + this.searchButton.setAlignmentX(Component.LEFT_ALIGNMENT); + this.searchButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + FileSearchTopComponent.this.search(); + } + }); + + filterPanel.add(searchButton); + } + + /** + * @return true if any of the filters in the panel are enabled (checked) + */ + private boolean anyFiltersEnabled() { + for (FileSearchFilter filter : this.getFilters()) { + if (filter.isEnabled()) { + return true; + } + } + + return false; + } + + /** + * Action when the "Search" button is pressed. + * + * @param evt the action event + */ + private void search() { + // change the cursor to "waiting cursor" for this operation + this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + if (this.anyFiltersEnabled()) { + String title = "File Search Results " + index; + String pathText = "Filename Search Results:"; + + // try to get the number of matches first + Case currentCase = Case.getCurrentCase(); // get the most updated case + int totalMatches = 0; + ArrayList<FsContent> fsContentList = new ArrayList<FsContent>(); + try { + List<FsContent> currentDbList; + SleuthkitCase tempDb = currentCase.getSleuthkitCase(); + ResultSet rs = tempDb.runQuery(this.getQuery("count(*) as TotalMatches")); + totalMatches = totalMatches + rs.getInt("TotalMatches"); + rs = tempDb.runQuery(this.getQuery(null)); + currentDbList = tempDb.resultSetToFsContents(rs); + fsContentList.addAll(currentDbList); + } catch (SQLException ex) { + Logger logger = Logger.getLogger(this.getClass().getName()); + logger.log(Level.WARNING, "Error while trying to get the number of matches.", ex); + } + + TopComponent searchResultWin = DataResultTopComponent.createInstance(title, pathText, new SearchNode(fsContentList), totalMatches); + + searchResultWin.requestActive(); // make it the active top component + + searchResultWin.addPropertyChangeListener(this); + searchResults.add((DataResultTopComponent) searchResultWin); + index++; + + /** + * If total matches more than 1000, pop up a dialog box that say + * the performance maybe be slow and to increase the performance, + * tell the users to refine their search. + */ + if (totalMatches > 1000) { + // show the confirmation + NotifyDescriptor d = new NotifyDescriptor.Message("Note: " + totalMatches + " matches found. Due to the large number of search results, performance may be slow for some operations. (In particular the thumbnail view in this version of Autospy, should be fixed in a future version) \n\nPlease refine your search to get better search results and improve performance."); + DialogDisplayer.getDefault().notify(d); + } + } else { + throw new FilterValidationException("At least one filter must be selected."); + } + } catch (FilterValidationException ex) { + NotifyDescriptor d = new NotifyDescriptor.Message("Validation Error: " + ex.getMessage()); + DialogDisplayer.getDefault().notify(d); + } finally { + this.setCursor(null); + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables + /** + * Gets default instance. Do not use directly: reserved for *.settings files only, + * i.e. deserialization routines; otherwise you could get a non-deserialized instance. + * To obtain the singleton instance, use {@link #findInstance}. + */ + public static synchronized FileSearchTopComponent getDefault() { + if (instance == null) { + instance = new FileSearchTopComponent(); + } + return instance; + } + + /** + * Obtain the FileSearchTopComponent instance. Never call {@link #getDefault} directly! + */ + public static synchronized FileSearchTopComponent findInstance() { + TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); + if (win == null) { + Logger.getLogger(FileSearchTopComponent.class.getName()).warning( + "Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system."); + return getDefault(); + } + if (win instanceof FileSearchTopComponent) { + return (FileSearchTopComponent) win; + } + Logger.getLogger(FileSearchTopComponent.class.getName()).warning( + "There seem to be multiple components with the '" + PREFERRED_ID + + "' ID. That is a potential source of errors and unexpected behavior."); + return getDefault(); + } + + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; + } + + @Override + public void componentOpened() { + } + + @Override + public void componentClosed() { + } + + @Override + protected String preferredID() { + return PREFERRED_ID; + } + + @Override + public boolean canClose() { + return !Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0; // only allow this window to be closed when there's no case opened or no image in this case + } + + @Override + public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + @Override + public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + private void setListener() { + Case.addPropertyChangeListener((PropertyChangeListener) this); // add this class to listen to any changes in the Case.java class + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object newValue = evt.getNewValue(); + + // if the one of the "FileSearchResult" window is closed + if (changed.equals(DataResultTopComponent.REMOVE_FILESEARCH)) { + searchResults.remove((DataResultTopComponent) newValue); + } + + } + + public static ArrayList<DataResultTopComponent> getFileSearchResultList() { + return searchResults; + } + + /** + * Gets the SQL query to get the data from the database based on the + * criteria that user chooses on the FileSearch. + * + * @param addition the additional selection for query. If nothing/null, will select all. + * @return query the SQL query + * @throws org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException if an enabled filter is in an invalid state + */ + private String getQuery(String addition) throws FilterValidationException { + String tempQuery = "*"; + if (addition != null && !addition.equals("")) { + tempQuery = addition; + } + + String query = "select " + tempQuery + " from tsk_files where 1"; + + for (FileSearchFilter f : this.getEnabledFilters()) { + query += " and (" + f.getPredicate() + ")"; + } + + return query; + } + + private Collection<FileSearchFilter> getFilters() { + Collection<FileSearchFilter> filters = new ArrayList<FileSearchFilter>(); + + for (FilterArea fa : this.filterAreas) { + filters.addAll(fa.getFilters()); + } + + return filters; + } + + private Collection<FileSearchFilter> getEnabledFilters() { + Collection<FileSearchFilter> enabledFilters = new ArrayList<FileSearchFilter>(); + + for (FileSearchFilter f : this.getFilters()) { + if (f.isEnabled()) { + enabledFilters.add(f); + } + } + + return enabledFilters; + } + + @Override + public TopComponent getTopComponent() { + return this; + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentSettings.xml b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentSettings.xml new file mode 100644 index 0000000000..1e1aace257 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentSettings.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd"> +<settings version="1.0"> + <module name="org.sleuthkit.autopsy.filesearch" spec="1.0"/> + <instanceof class="org.openide.windows.TopComponent"/> + <instanceof class="org.sleuthkit.autopsy.filesearch.FileSearchTopComponent"/> + <instance class="org.sleuthkit.autopsy.filesearch.FileSearchTopComponent" method="getDefault"/> +</settings> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentWstcref.xml b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentWstcref.xml new file mode 100644 index 0000000000..e492dd24f7 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FileSearchTopComponentWstcref.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE tc-ref PUBLIC "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN" "http://www.netbeans.org/dtds/tc-ref2_0.dtd"> +<tc-ref version="2.0" > + <module name="org.sleuthkit.autopsy.filesearch" spec="1.0"/> + <tc-id id="FileSearchTopComponent"/> + <state opened="false"/> +</tc-ref> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/FilterArea.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FilterArea.java new file mode 100644 index 0000000000..c1e8e625cb --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/FilterArea.java @@ -0,0 +1,126 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import java.awt.Component; +import java.util.Collections; +import java.util.List; +import javax.swing.BoxLayout; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; + +/** + * Holds the filters in one category (and in the future controls toggling the + * visibility of the category in the search panel) + * @author pmartel + */ +class FilterArea extends JPanel { + +// private JButton toggleButton; +// private boolean collapsed; + private final String title; + private List<FileSearchFilter> filters; + private JPanel filtersPanel; + + /** + * Filter areas with one filter + * @param title name of the area + * @param filter single filter + */ + FilterArea(String title, FileSearchFilter filter) { + this(title, Collections.singletonList(filter)); + } + + /** + * Filter area with multiple filters + * @param title name of the area + * @param filters multiple filters + */ + FilterArea(String title, List<FileSearchFilter> filters) { + this.title = title; + this.filters = filters; +// this.collapsed = false; + this.init(); + this.refresh(); + } + + /** + * Get the filters for this area + * @return all the filters + */ + List<FileSearchFilter> getFilters() { + return filters; + } + + private void init() { + + // TODO: this icon (and its twin) should be used in the toggle button + // this.dateFiltersButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/filesearch/arrow_down.gif"))); // NOI18N + +// toggleButton = new JButton(); +// toggleButton.setAlignmentX(Component.CENTER_ALIGNMENT); +// toggleButton.addActionListener(new ActionListener() { +// +// @Override +// public void actionPerformed(ActionEvent e) { +// FilterArea.this.toggle(); +// FilterArea.this.refresh(); +// } +// }); +// +// this.add(toggleButton); + + filtersPanel = new JPanel(); + filtersPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + BoxLayout filtersPanelLayout = new BoxLayout(filtersPanel, BoxLayout.Y_AXIS); + filtersPanel.setLayout(filtersPanelLayout); + + for (FileSearchFilter f : filters) { + JComponent filterComponent = f.getComponent(); + filterComponent.setAlignmentX(Component.LEFT_ALIGNMENT); + filterComponent.setBorder(new EmptyBorder(0, 0, 20, 0)); + filtersPanel.add(filterComponent); + } + + this.add(filtersPanel); + + BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS); + this.setLayout(layout); + } + + private void refresh() { +// int height = toggleButton.getHeight(); +// toggleButton.setMaximumSize(new Dimension(Integer.MAX_VALUE, height)); +// +// filtersPanel.setVisible(!collapsed); +// toggleButton.setText(title); +// +// filtersPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, filtersPanel.getHeight())); +// +// this.setPreferredSize(this.getPreferredSize()); +// +// this.revalidate(); +// this.repaint(); + } +// private void toggle() { +// collapsed = !collapsed; +// } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java new file mode 100644 index 0000000000..3a55bd2b99 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java @@ -0,0 +1,76 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import org.sleuthkit.datamodel.TskData.FileKnown; + +/** + * Filters on the known status of a file (known/unknown/known-bad) + */ +class KnownStatusSearchFilter extends AbstractFileSearchFilter<KnownStatusSearchPanel> { + + private static final String NONE_SELECTED_MESSAGE = "At least one known status must be selected!"; + + KnownStatusSearchFilter(KnownStatusSearchPanel panel) { + super(panel); + } + + KnownStatusSearchFilter() { + this(new KnownStatusSearchPanel()); + } + + @Override + public boolean isEnabled() { + return this.getComponent().getKnownCheckBox().isSelected(); + } + + @Override + public String getPredicate() throws FilterValidationException { + KnownStatusSearchPanel panel = this.getComponent(); + + boolean unknown = panel.getUnknownOptionCheckBox().isSelected(); + boolean known = panel.getKnownOptionCheckBox().isSelected(); + boolean knownBad = panel.getKnownBadOptionCheckBox().isSelected(); + + if (!(unknown || known || knownBad)) { + throw new FilterValidationException(NONE_SELECTED_MESSAGE); + } + + String expr = "0"; + if (unknown) { + expr += " or " + predicateHelper(FileKnown.UKNOWN); + } + if (known) { + expr += " or " + predicateHelper(FileKnown.KNOWN); + } + if (knownBad) { + expr += " or " + predicateHelper(FileKnown.BAD); + } + return expr; + } + + /** + * Make the predicate fragment for a file known status + * @param knownStatus status for the file to match + * @return un-padded SQL boolean expression + */ + private String predicateHelper(FileKnown knownStatus) { + return "known is " + knownStatus.toLong(); + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.form b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.form new file mode 100644 index 0000000000..8eb2e5fe2c --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.form @@ -0,0 +1,77 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="knownCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="21" pref="21" max="21" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="knownBadOptionCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="unknownOptionCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="knownOptionCheckBox" alignment="0" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="knownCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="unknownOptionCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="knownOptionCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="knownBadOptionCheckBox" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JCheckBox" name="knownCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="KnownStatusSearchPanel.knownCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="unknownOptionCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="KnownStatusSearchPanel.unknownOptionCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="knownOptionCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="KnownStatusSearchPanel.knownOptionCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="knownBadOptionCheckBox"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="KnownStatusSearchPanel.knownBadOptionCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java new file mode 100644 index 0000000000..28475e690c --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java @@ -0,0 +1,111 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * KnownStatusSearchPanel.java + * + * Created on Oct 19, 2011, 11:45:44 AM + */ +package org.sleuthkit.autopsy.filesearch; + +import javax.swing.JCheckBox; + +/** + * + * @author pmartel + */ +class KnownStatusSearchPanel extends javax.swing.JPanel { + + /** Creates new form KnownStatusSearchPanel */ + KnownStatusSearchPanel() { + initComponents(); + } + + JCheckBox getKnownCheckBox() { + return knownCheckBox; + } + + JCheckBox getKnownBadOptionCheckBox() { + return knownBadOptionCheckBox; + } + + JCheckBox getKnownOptionCheckBox() { + return knownOptionCheckBox; + } + + JCheckBox getUnknownOptionCheckBox() { + return unknownOptionCheckBox; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + knownCheckBox = new javax.swing.JCheckBox(); + unknownOptionCheckBox = new javax.swing.JCheckBox(); + knownOptionCheckBox = new javax.swing.JCheckBox(); + knownBadOptionCheckBox = new javax.swing.JCheckBox(); + + knownCheckBox.setText(org.openide.util.NbBundle.getMessage(KnownStatusSearchPanel.class, "KnownStatusSearchPanel.knownCheckBox.text")); // NOI18N + + unknownOptionCheckBox.setSelected(true); + unknownOptionCheckBox.setText(org.openide.util.NbBundle.getMessage(KnownStatusSearchPanel.class, "KnownStatusSearchPanel.unknownOptionCheckBox.text")); // NOI18N + + knownOptionCheckBox.setSelected(true); + knownOptionCheckBox.setText(org.openide.util.NbBundle.getMessage(KnownStatusSearchPanel.class, "KnownStatusSearchPanel.knownOptionCheckBox.text")); // NOI18N + + knownBadOptionCheckBox.setSelected(true); + knownBadOptionCheckBox.setText(org.openide.util.NbBundle.getMessage(KnownStatusSearchPanel.class, "KnownStatusSearchPanel.knownBadOptionCheckBox.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(knownCheckBox) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(knownBadOptionCheckBox) + .addComponent(unknownOptionCheckBox) + .addComponent(knownOptionCheckBox))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(knownCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(unknownOptionCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(knownOptionCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(knownBadOptionCheckBox)) + ); + }// </editor-fold>//GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox knownBadOptionCheckBox; + private javax.swing.JCheckBox knownCheckBox; + private javax.swing.JCheckBox knownOptionCheckBox; + private javax.swing.JCheckBox unknownOptionCheckBox; + // End of variables declaration//GEN-END:variables +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java new file mode 100644 index 0000000000..fbe3997170 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java @@ -0,0 +1,57 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; + +/** + * + * @author pmartel + */ +class NameSearchFilter extends AbstractFileSearchFilter<NameSearchPanel> { + + private static final String EMPTY_NAME_MESSAGE = "Must enter something for name search."; + + public NameSearchFilter() { + this(new NameSearchPanel()); + } + + public NameSearchFilter(NameSearchPanel component) { + super(component); + } + + @Override + public boolean isEnabled() { + return this.getComponent().getNameCheckBox().isSelected(); + } + + @Override + public String getPredicate() throws FilterValidationException { + String keyword = this.getComponent().getSearchTextField().getText(); + + if (keyword.isEmpty()) { + throw new FilterValidationException(EMPTY_NAME_MESSAGE); + } + + keyword.replace("'", "''"); // escape quotes in string + //TODO: escaping might not be enough, would ideally be part of a prepared statement + + return "name like '%" + keyword + "%'"; + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.form b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.form new file mode 100644 index 0000000000..52702f54dd --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.form @@ -0,0 +1,77 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="nameCheckBox" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="12" max="-2" attributes="0"/> + <Component id="noteNameLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="1"> + <EmptySpace max="-2" attributes="0"/> + <Component id="searchTextField" max="32767" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="nameCheckBox" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="searchTextField" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="noteNameLabel" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JCheckBox" name="nameCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="NameSearchPanel.nameCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JTextField" name="searchTextField"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="NameSearchPanel.searchTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="searchTextFieldMouseClicked"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="noteNameLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="10" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="NameSearchPanel.noteNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java new file mode 100644 index 0000000000..b7e34c745c --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java @@ -0,0 +1,108 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * NameSearchPanel.java + * + * Created on Oct 19, 2011, 11:58:53 AM + */ +package org.sleuthkit.autopsy.filesearch; + +import javax.swing.JCheckBox; +import javax.swing.JTextField; + +/** + * + * @author pmartel + */ +class NameSearchPanel extends javax.swing.JPanel { + + /** Creates new form NameSearchPanel */ + NameSearchPanel() { + initComponents(); + } + + JCheckBox getNameCheckBox() { + return nameCheckBox; + } + + JTextField getSearchTextField() { + return searchTextField; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + nameCheckBox = new javax.swing.JCheckBox(); + searchTextField = new javax.swing.JTextField(); + noteNameLabel = new javax.swing.JLabel(); + + nameCheckBox.setText(org.openide.util.NbBundle.getMessage(NameSearchPanel.class, "NameSearchPanel.nameCheckBox.text")); // NOI18N + + searchTextField.setText(org.openide.util.NbBundle.getMessage(NameSearchPanel.class, "NameSearchPanel.searchTextField.text")); // NOI18N + searchTextField.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + searchTextFieldMouseClicked(evt); + } + }); + + noteNameLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); + noteNameLabel.setText(org.openide.util.NbBundle.getMessage(NameSearchPanel.class, "NameSearchPanel.noteNameLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(nameCheckBox) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addGap(12, 12, 12) + .addComponent(noteNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchTextField)))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameCheckBox) + .addComponent(searchTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(noteNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void searchTextFieldMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchTextFieldMouseClicked + + this.nameCheckBox.setSelected(true); }//GEN-LAST:event_searchTextFieldMouseClicked + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox nameCheckBox; + private javax.swing.JLabel noteNameLabel; + private javax.swing.JTextField searchTextField; + // End of variables declaration//GEN-END:variables +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/OpenParentFolderAction.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/OpenParentFolderAction.java new file mode 100644 index 0000000000..781e136642 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/OpenParentFolderAction.java @@ -0,0 +1,88 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.filesearch; + + +import java.awt.event.ActionEvent; +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import org.openide.explorer.ExplorerManager; +import org.openide.nodes.Node; +import org.openide.nodes.NodeOp; +import org.openide.windows.TopComponent; +import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent; +import org.sleuthkit.autopsy.logging.Log; + + +/** + * The action to open the parent folder of the given Node + */ +public class OpenParentFolderAction extends AbstractAction{ + + private String[] paths; + + // for error handling + private String className = this.getClass().toString(); + + public OpenParentFolderAction(String title, String[] paths){ + super(title); + this.paths = paths; + } + + @Override + public void actionPerformed(ActionEvent e) { + Log.noteAction(this.getClass()); + + try { + + ExplorerManager em = DirectoryTreeTopComponent.findInstance().getExplorerManager(); + Node root = em.getRootContext(); + + if(paths.length > 1 && root != null) { + String[] parentPath = Arrays.copyOf(paths, paths.length - 1); + + Node parentNode = NodeOp.findPath(root, parentPath); + + em.setExploredContextAndSelection(parentNode, new Node[]{parentNode}); + TopComponent dirTree = DirectoryTreeTopComponent.findInstance(); + if(!dirTree.isOpened()){ dirTree.open(); } + dirTree.requestActive(); // make the directory tree the active top component + +// TopComponent resultTable = new DataResultTopComponent(); +// if(!resultTable.isOpened()){ resultTable.open(); } +// resultTable.requestActive(); // make the directory tree the active top component + ((DirectoryTreeTopComponent)dirTree).setDirectoryListingActive(); + + // make the node table the active top component + // @@@ Make the node table the active top component + + + } + + } catch (Exception ex) { + // throw an error here + Logger.getLogger(this.className).log(Level.WARNING, "Error: error while trying to open the parent directory.", ex); + } + } + +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchChildren.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchChildren.java new file mode 100644 index 0000000000..d13811e214 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchChildren.java @@ -0,0 +1,61 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.filesearch; + + +import java.util.ArrayList; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.autopsy.datamodel.DirectoryNode; +import org.sleuthkit.datamodel.File; +import org.sleuthkit.autopsy.datamodel.FileNode; +import org.sleuthkit.datamodel.FsContent; + + +/** + * Makes nodes for search results. + */ +class SearchChildren extends Children.Keys<FsContent> { + + SearchChildren(boolean lazy, ArrayList<FsContent> fsContentList) { + super(lazy); + this.setKeys(fsContentList); + } + + + @Override + protected Node[] createNodes(FsContent t) { + Node[] node = new Node[1]; + if(t.isDir()){ + node[0] = new DataResultFilterNode(new DirectoryNode((Directory) t)); + + //node[0] = new DirectoryNode((Directory)t); + return node; + } + else{ + node[0] = new DataResultFilterNode(new FileNode((File)t)); + //node[0] = new FileNode((File)t); + return node; + } + } + + +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchNode.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchNode.java new file mode 100644 index 0000000000..f38d584e7a --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SearchNode.java @@ -0,0 +1,119 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.filesearch; + +import java.sql.SQLException; +import java.util.ArrayList; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Node.Property; +import org.sleuthkit.autopsy.datamodel.ContentNode; +import org.sleuthkit.autopsy.datamodel.ContentNodeVisitor; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.FsContent; +import org.sleuthkit.datamodel.TskException; + +/** + * + * @author jantonius + */ +class SearchNode extends AbstractNode implements ContentNode { + + private SearchChildren children; + + SearchNode(ArrayList<FsContent> keys) { + super(new SearchChildren(true, keys)); + this.children = (SearchChildren)this.getChildren(); + } + + @Override + public String getName() { + return "Search Result"; + } + + @Override + public long getID() { + return -1; // change this later when needed + } + + @Override + public Object[][] getRowValues(int rows) throws SQLException { + int totalNodes = children.getNodesCount(); + + Object[][] objs; + int maxRows = 0; + if(totalNodes > rows){ + objs = new Object[rows][]; + maxRows = rows; + } + else{ + objs = new Object[totalNodes][]; + maxRows = totalNodes; + } + + for(int i = 0; i < maxRows; i++){ + PropertySet[] props = children.getNodeAt(i).getPropertySets(); + Property[] property = props[0].getProperties(); + objs[i] = new Object[property.length]; + + for(int j = 0; j < property.length; j++){ + try { + objs[i][j] = property[j].getValue(); + } catch (Exception ex) { + objs[i][j] = "n/a"; + } + } + } + return objs; + } + + + @Override + public byte[] read(long offset, long len) throws TskException { + // change this in the future when needed + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int getFileIDColumn() { + return -1; // change this later when needed + } + + @Override + public Content getContent() { + return null; + } + + @Override + public String[] getDisplayPath() { + return new String[]{"KeyWord Search Result:"}; + } + + @Override + public <T> T accept(ContentNodeVisitor<T> v) { + //TODO: figure out how to deal with visitors + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String[] getSystemPath() { + // Shouldn't be used + throw new UnsupportedOperationException("Not supported yet."); + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java new file mode 100644 index 0000000000..b960a679c3 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java @@ -0,0 +1,66 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.filesearch; + +import javax.swing.JComboBox; +import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; + +/** + * + * @author pmartel + */ +class SizeSearchFilter extends AbstractFileSearchFilter<SizeSearchPanel> { + + SizeSearchFilter() { + this(new SizeSearchPanel()); + } + + SizeSearchFilter(SizeSearchPanel component) { + super(component); + } + + @Override + public boolean isEnabled() { + return this.getComponent().getSizeCheckBox().isSelected(); + } + + @Override + public String getPredicate() throws FilterValidationException { + int size = ((Number) this.getComponent().getSizeTextField().getValue()).intValue(); // note: already only allow number to the text field + String operator = compareComboBoxToOperator(this.getComponent().getSizeCompareComboBox()); + int unit = this.getComponent().getSizeUnitComboBox().getSelectedIndex(); + int divider = (int) Math.pow(2, (unit * 10)); + size = size * divider; + return "size " + operator + " " + size; + } + + private String compareComboBoxToOperator(JComboBox compare) { + String compareSize = compare.getSelectedItem().toString(); + + if (compareSize.equals("equal to")) { + return "="; + } else if (compareSize.equals("greater than")) { + return ">"; + } else if (compareSize.equals("less than")) { + return "<"; + } else { + throw new IllegalArgumentException(); + } + } +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.form b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.form new file mode 100644 index 0000000000..4c4414ff5c --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.form @@ -0,0 +1,87 @@ +<?xml version="1.1" encoding="UTF-8" ?> + +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="sizeCheckBox" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="sizeCompareComboBox" min="-2" pref="95" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="sizeTextField" min="-2" pref="79" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="sizeUnitComboBox" min="-2" pref="72" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" alignment="0" groupAlignment="3" attributes="0"> + <Component id="sizeCompareComboBox" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="sizeTextField" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="sizeUnitComboBox" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="sizeCheckBox" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JComboBox" name="sizeUnitComboBox"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="5"> + <StringItem index="0" value="Byte(s)"/> + <StringItem index="1" value="KB"/> + <StringItem index="2" value="MB"/> + <StringItem index="3" value="GB"/> + <StringItem index="4" value="TB"/> + </StringArray> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JFormattedTextField" name="sizeTextField"> + <Properties> + <Property name="value" type="java.lang.Object" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> + <Connection code="0" type="code"/> + </Property> + </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="sizeTextFieldMouseClicked"/> + </Events> + <AuxValues> + <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JFormattedTextField(NumberFormat.getIntegerInstance())"/> + </AuxValues> + </Component> + <Component class="javax.swing.JComboBox" name="sizeCompareComboBox"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="3"> + <StringItem index="0" value="equal to"/> + <StringItem index="1" value="greater than"/> + <StringItem index="2" value="less than"/> + </StringArray> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="sizeCheckBox"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="org/sleuthkit/autopsy/filesearch/Bundle.properties" key="SizeSearchPanel.sizeCheckBox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java new file mode 100644 index 0000000000..ca97944e42 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java @@ -0,0 +1,114 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.filesearch; + +import java.text.NumberFormat; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; + +/** + * + * @author pmartel + */ +class SizeSearchPanel extends javax.swing.JPanel { + + /** Creates new form SizeSearchPanel */ + SizeSearchPanel() { + initComponents(); + } + + JCheckBox getSizeCheckBox() { + return sizeCheckBox; + } + + JComboBox getSizeCompareComboBox() { + return sizeCompareComboBox; + } + + JFormattedTextField getSizeTextField() { + return sizeTextField; + } + + JComboBox getSizeUnitComboBox() { + return sizeUnitComboBox; + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + sizeUnitComboBox = new javax.swing.JComboBox(); + sizeTextField = new JFormattedTextField(NumberFormat.getIntegerInstance()); + sizeCompareComboBox = new javax.swing.JComboBox(); + sizeCheckBox = new javax.swing.JCheckBox(); + + sizeUnitComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Byte(s)", "KB", "MB", "GB", "TB" })); + + sizeTextField.setValue(0); + sizeTextField.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + sizeTextFieldMouseClicked(evt); + } + }); + + sizeCompareComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "equal to", "greater than", "less than" })); + + sizeCheckBox.setText(org.openide.util.NbBundle.getMessage(SizeSearchPanel.class, "SizeSearchPanel.sizeCheckBox.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(sizeCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeCompareComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sizeCompareComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sizeCheckBox)) + ); + }// </editor-fold>//GEN-END:initComponents + + private void sizeTextFieldMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_sizeTextFieldMouseClicked + this.sizeCheckBox.setSelected(true); + this.sizeTextField.selectAll(); // select all so user can change it easily + }//GEN-LAST:event_sizeTextFieldMouseClicked + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox sizeCheckBox; + private javax.swing.JComboBox sizeCompareComboBox; + private javax.swing.JFormattedTextField sizeTextField; + private javax.swing.JComboBox sizeUnitComboBox; + // End of variables declaration//GEN-END:variables +} diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_down.gif b/FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..1151f48f9a1122e8c97c4a468f36de44bb0e8722 GIT binary patch literal 848 zcmZ?wbhEHb<Y(Yw_|5<V0s;cU!os4WqT=G>GBPsW-rhk$K_H1yJQ@PSJp>egvM@3* z{AbVsc@&f<7&vqp{&UKBY*=uxnVFv<;=~3;24-eiFC7mDr3OZJU8O(j4T%lCOp;A9 M5eZLDG%#2L0NaokZvX%Q literal 0 HcmV?d00001 diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_right.gif b/FileSearch/src/org/sleuthkit/autopsy/filesearch/arrow_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..f85fe5e22577aeb8047714a2d6e21a3c235c44ea GIT binary patch literal 861 zcmZ?wbhEHb<Y(Y#_|5<VGBPrup`jqwC>{-g5f%c9KUo+V82&Tpfcy>06AT<y4F5Sr zG!hmZY-VC)a5xc=$k4_vs?}l<pw!SVqU+bP;-iv#uY_RP84be}=S~sfDxaVE%BP!j JlG#`otO1*s8ZQ6< literal 0 HcmV?d00001 diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/filesearch-helpset.xml b/FileSearch/src/org/sleuthkit/autopsy/filesearch/filesearch-helpset.xml new file mode 100644 index 0000000000..4cf665f139 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/filesearch-helpset.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +To change this template, choose Tools | Templates +and open the template in the editor. +--> +<!DOCTYPE helpsetref PUBLIC "-//NetBeans//DTD JavaHelp Help Set Reference 1.0//EN" "http://www.netbeans.org/dtds/helpsetref-1_0.dtd"> +<helpsetref url="nbdocs:/org/sleuthkit/autopsy/filesearch/docs/filesearch-hs.xml"/> diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml b/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml new file mode 100644 index 0000000000..36332b2899 --- /dev/null +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <folder name="Actions"> + <folder name="Window"> + <file name="org-sleuthkit-autopsy-filesearch-FileSearchAction.instance"> + <attr name="component" methodvalue="org.sleuthkit.autopsy.filesearch.FileSearchTopComponent.findInstance"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.filesearch.Bundle#CTL_FileSearchAction"/> + <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/> + </file> + </folder> + </folder> + <folder name="Menu"> + <folder name="Window"/> + </folder> + <folder name="Services"> + <folder name="JavaHelp"> + <file name="filesearch-helpset.xml" url="filesearch-helpset.xml"> + <attr name="position" intvalue="3662"/> + </file> + </folder> + <file name="org-sleuthkit-autopsy-filesearch-FileSearchTopComponent.instance"> + <attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer"/> + <attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.filesearch.FileSearchTopComponent.getDefault"/> + </file> + </folder> + <folder name="Windows2"> + <folder name="Components"> + <file name="FileSearchTopComponent.settings" url="FileSearchTopComponentSettings.xml"/> + </folder> + + <!-- Not letting NetBeans manage docking for us at all. It's all handled in CoreComponentInterfaces:CoreComponentControl + <folder name="Modes"> + <folder name="explorer"> + <file name="FileSearchTopComponent.wstcref" url="FileSearchTopComponentWstcref.xml"/> + </folder> + </folder--> + </folder> +</filesystem> diff --git a/LICENSE-2.0.txt b/LICENSE-2.0.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/LICENSE-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Logging/build.xml b/Logging/build.xml new file mode 100644 index 0000000000..fbf2530e25 --- /dev/null +++ b/Logging/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.logging" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.logging.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/Logging/manifest.mf b/Logging/manifest.mf new file mode 100644 index 0000000000..7883520189 --- /dev/null +++ b/Logging/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.logging/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Install: org/sleuthkit/autopsy/logging/Installer.class +OpenIDE-Module-Layer: org/sleuthkit/autopsy/logging/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/logging/Bundle.properties + diff --git a/Logging/nbproject/build-impl.xml b/Logging/nbproject/build-impl.xml new file mode 100644 index 0000000000..0b474da861 --- /dev/null +++ b/Logging/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.logging-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/Logging/nbproject/genfiles.properties b/Logging/nbproject/genfiles.properties new file mode 100644 index 0000000000..d94cf24310 --- /dev/null +++ b/Logging/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=cacaba65 +build.xml.script.CRC32=5960e63f +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=cacaba65 +nbproject/build-impl.xml.script.CRC32=db164ed0 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/Logging/nbproject/platform.properties b/Logging/nbproject/platform.properties new file mode 100644 index 0000000000..319807f1cd --- /dev/null +++ b/Logging/nbproject/platform.properties @@ -0,0 +1,7 @@ +cluster.path=\ + ${nbplatform.active.dir}/platform +disabled.modules=\ + org.netbeans.libs.jsr223,\ + org.openide.compat,\ + org.openide.util.enumerations +nbplatform.active=default diff --git a/Logging/nbproject/private/platform-private.properties b/Logging/nbproject/private/platform-private.properties new file mode 100644 index 0000000000..feb70af372 --- /dev/null +++ b/Logging/nbproject/private/platform-private.properties @@ -0,0 +1 @@ +user.properties.file=C:\\Users\\pmartel\\.netbeans\\6.9\\build.properties diff --git a/Logging/nbproject/private/private.xml b/Logging/nbproject/private/private.xml new file mode 100644 index 0000000000..137618d8d2 --- /dev/null +++ b/Logging/nbproject/private/private.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> + <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"> + <file> + <url>src/org/sleuthkit/autopsy/logging/Installer.java</url> + <line>62</line> + </file> + </editor-bookmarks> +</project-private> diff --git a/Logging/nbproject/project.properties b/Logging/nbproject/project.properties new file mode 100644 index 0000000000..c51692cafc --- /dev/null +++ b/Logging/nbproject/project.properties @@ -0,0 +1,3 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +spec.version.base=0.0 diff --git a/Logging/nbproject/project.xml b/Logging/nbproject/project.xml new file mode 100644 index 0000000000..0adbf513ee --- /dev/null +++ b/Logging/nbproject/project.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.netbeans.core</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>2</release-version> + <implementation-version/> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.dialogs</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.15.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.logging</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/Logging/nbproject/suite.properties b/Logging/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/Logging/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/Logging/src/org/sleuthkit/autopsy/logging/AutopsyExceptionHandler.java b/Logging/src/org/sleuthkit/autopsy/logging/AutopsyExceptionHandler.java new file mode 100644 index 0000000000..22b7779e00 --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/AutopsyExceptionHandler.java @@ -0,0 +1,154 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.logging; + +import java.awt.Component; +import java.util.logging.Filter; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.SimpleFormatter; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import org.openide.util.lookup.ServiceProvider; +import org.netbeans.core.NbErrorManager; + +/** + * Replaces default NetBeans exception handler. Displays messages in a dialog. + */ +@ServiceProvider(service = Handler.class, supersedes = "org.netbeans.core.NbErrorManager") +public class AutopsyExceptionHandler extends Handler { + + static final int INFO_VALUE = Level.INFO.intValue(); + static final int WARNING_VALUE = Level.WARNING.intValue(); + static final int SEVERE_VALUE = Level.SEVERE.intValue(); + static final Handler nbErrorManager = new NbErrorManager(); // Default NetBeans handler + + public AutopsyExceptionHandler() { + super(); + // Only display messages for WARNING level and above, that come from an uncaught exception. + this.setLevel(Level.WARNING); + this.setFilter(new ExceptionFilter()); + this.setFormatter(new SimpleFormatter()); + } + + @Override + public void publish(LogRecord record) { + + if (isLoggable(record)) { + + if (record.getMessage() != null) { + // Throwable was anticipated, caught and logged. Display log message and throwable message. + + final int levelValue = record.getLevel().intValue(); + + final Component parentComponent = null; // Use default window frame. + final String message = formatExplanation(record); + final String title = getTitleForLevelValue(levelValue); + final int messageType = getMessageTypeForLevelValue(levelValue); + + // publish() was probably not called from the EDT, so run the message box there instead of here. + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + JOptionPane.showMessageDialog( + parentComponent, + message, + title, + messageType); + } + }); + } else { + // Throwable (unanticipated) error. Use built-in exception handler to offer details, stacktrace. + nbErrorManager.publish(record); + } + } + } + + + /** + * Filter only accepts records with exceptions attached. + */ + private static class ExceptionFilter implements Filter { + @Override + public boolean isLoggable(LogRecord record) { + // True if there is an uncaught exception being thrown. + return record.getThrown() != null; + } + } + + /** + * + * @param record A LogRecord with both a message and associated Throwable set. + * @return A String containing the log message and the cause of the Throwable (if there is one). + */ + private String formatExplanation(LogRecord record) { + final String logMessage = getFormatter().formatMessage(record); + String explanation = record.getThrown().getMessage(); + String causeMessage = (explanation != null) ? "\nCaused by: " + explanation : ""; + + return logMessage + causeMessage; + } + +// It's harder to do this cleanly than I thought, because Exceptions +// initialized with no message copy and prepend the cause's message +// +// private String recursiveExplanation(Throwable e) { +// String message = e.getMessage(); +// String explanation = (message != null) ? "\nCaused by: " + message : ""; +// Throwable cause = e.getCause(); +// if (cause == null) { +// return explanation; +// } else { +// return explanation + recursiveExplanation(cause); +// } +// } + + private static int getMessageTypeForLevelValue(int levelValue) { + if (levelValue >= SEVERE_VALUE) { + return JOptionPane.ERROR_MESSAGE; + } else if (levelValue >= WARNING_VALUE) { + return JOptionPane.WARNING_MESSAGE; + } else { + return JOptionPane.INFORMATION_MESSAGE; + } + } + + private static String getTitleForLevelValue(int levelValue) { + if (levelValue >= SEVERE_VALUE) { + return "Error"; + } else if (levelValue >= WARNING_VALUE) { + return "Warning"; + } else { + return "Message"; + } + } + + @Override + public void flush() { + // no buffer to flush + } + + @Override + public void close() throws SecurityException { + // no resources to close + } +} diff --git a/Logging/src/org/sleuthkit/autopsy/logging/Bundle.properties b/Logging/src/org/sleuthkit/autopsy/logging/Bundle.properties new file mode 100644 index 0000000000..7ff32e866b --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/Bundle.properties @@ -0,0 +1,2 @@ +CTL_TestLogger=Test log +OpenIDE-Module-Name=Logging diff --git a/Logging/src/org/sleuthkit/autopsy/logging/Installer.java b/Logging/src/org/sleuthkit/autopsy/logging/Installer.java new file mode 100644 index 0000000000..f8fa016254 --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/Installer.java @@ -0,0 +1,63 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.logging; + +import java.io.IOException; +import java.util.logging.FileHandler; +import org.openide.modules.ModuleInstall; +import java.util.logging.Logger; +import java.util.logging.Handler; +import java.util.logging.SimpleFormatter; + + + +/** + * Manages a this module's lifecycle. Sets up logging to file. + */ +public class Installer extends ModuleInstall { + + static final Logger autopsyLogger = Logger.getLogger(""); + static final String LOG_FILENAME_PATTERN = System.getProperty("netbeans.user") + "/var/log/autopsy.log"; //%t is system temp dir, %g is log number + static final int LOG_SIZE = 0; // in bytes, zero is unlimited + static final int LOG_FILE_COUNT = 10; + static Handler logs; + + @Override + public void restored() { + if (logs == null) { + try { + logs = new FileHandler(LOG_FILENAME_PATTERN, LOG_SIZE, LOG_FILE_COUNT);; + } catch (IOException ex) { + throw new RuntimeException(ex); + } + logs.setFormatter(new SimpleFormatter()); + autopsyLogger.addHandler(logs); + } + } + + @Override + public void uninstalled() { + autopsyLogger.removeHandler(logs); + logs.close(); + logs = null; + } + + +} diff --git a/Logging/src/org/sleuthkit/autopsy/logging/Log.java b/Logging/src/org/sleuthkit/autopsy/logging/Log.java new file mode 100644 index 0000000000..a8df07d91b --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/Log.java @@ -0,0 +1,42 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.logging; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Helper class to slightly simplify getting the logger for a class, and other + * common log tasks. + */ +public class Log { + static public void noteAction(Class actionClass) { + get(actionClass).log(Level.INFO, "Action performed: {0}", actionClass.getName()); + } + + + static public Logger get(Class clazz) { + return Logger.getLogger(clazz.getName()); + } + + static public Logger get(String loggerName) { + return Logger.getLogger(loggerName); + } +} diff --git a/Logging/src/org/sleuthkit/autopsy/logging/LogIcon.png b/Logging/src/org/sleuthkit/autopsy/logging/LogIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2908c13a57e3f3d1bb6b1678f0a10094388093 GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU<L*T#^NA%Cx&(BWL`2bFtDUM z`Z_W&Z0zU$lgP@zz|0Wf6XMFiz`()5;ppfXA0J;{Uf$T)ICJLA<;$1v-@pI-`STAS zK78@w#k+U!K7IQ1<;$0^U%!6)_U*@yAAkP*`TO_pzkmP!|NqZ03PwX<$cDg@k3xqS z7#KJUJR*x382Ao@Fyrz36)6l143Z_T5hcO-X(i=}MX3w{iJ5sNdVa1U3T4K6rg|3U z)(x=?3=9^YE{-7@!N~~<!W#+~WIlQ3E}Zb(SvcXLt8l_IN8tofH{l0Di3tfQPC`#a jL<K~g!d;h%Z^&e3Xkush{WR7m929h(u6{1-oD!M<>B(r; literal 0 HcmV?d00001 diff --git a/Logging/src/org/sleuthkit/autopsy/logging/TestLogger.java b/Logging/src/org/sleuthkit/autopsy/logging/TestLogger.java new file mode 100644 index 0000000000..54dd06b40a --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/TestLogger.java @@ -0,0 +1,43 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.logging; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.logging.Formatter; +import java.util.logging.Logger; +import java.util.logging.Level; + +/* + * Toolbar button for testing logging. Not a normal part of application. + */ +public final class TestLogger implements ActionListener { + + static final Logger logger = Logger.getLogger(TestLogger.class.getName()); + Formatter fmt; + @Override + public void actionPerformed(ActionEvent e) { + + logger.log(Level.WARNING, "Testing log!", new Exception(new Exception(new Exception(new Exception("original reason with asdfasdfasdfasdfasd fasdfasdfasdf sdfasdfasdfa asdfasdf asdfa sdfas ", new Exception("more original reason")))))); + //throw new RuntimeException("othe"); + + //logger.log(Level.WARNING, "Testing log!"); + } +} diff --git a/Logging/src/org/sleuthkit/autopsy/logging/TimestampingFormatter.java b/Logging/src/org/sleuthkit/autopsy/logging/TimestampingFormatter.java new file mode 100644 index 0000000000..5e52520e0c --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/TimestampingFormatter.java @@ -0,0 +1,50 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.sleuthkit.autopsy.logging; + +import java.text.DateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.logging.Formatter; +import java.util.logging.LogRecord; + +/* + * Formatter to wrap another formatter and prepend a timestampe to each formatted string + * Not currently used. + */ +public class TimestampingFormatter extends Formatter { + + Formatter original; + DateFormat timestampFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.US); + String lineSeparator = System.getProperty("line.separator"); + + TimestampingFormatter(Formatter original) { + this.original = original; + } + + @Override + public String format(LogRecord record) { + long millis = record.getMillis(); + String timestamp = timestampFormat.format(new Date(millis)); + + return timestamp + lineSeparator + original.format(record); + } +} diff --git a/Logging/src/org/sleuthkit/autopsy/logging/layer.xml b/Logging/src/org/sleuthkit/autopsy/logging/layer.xml new file mode 100644 index 0000000000..25d015eaf5 --- /dev/null +++ b/Logging/src/org/sleuthkit/autopsy/logging/layer.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <folder name="Actions"> + <folder name="Edit"/> + </folder> + <folder name="Toolbars"> + <folder name="File"/> + </folder> +</filesystem> diff --git a/MenuActions/build.xml b/MenuActions/build.xml new file mode 100644 index 0000000000..7f26f62e4a --- /dev/null +++ b/MenuActions/build.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="org.sleuthkit.autopsy.menuactions" default="netbeans" basedir="."> + <description>Builds, tests, and runs the project org.sleuthkit.autopsy.menuactions.</description> + <import file="nbproject/build-impl.xml"/> +</project> diff --git a/MenuActions/manifest.mf b/MenuActions/manifest.mf new file mode 100644 index 0000000000..c92eae3577 --- /dev/null +++ b/MenuActions/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.sleuthkit.autopsy.menuactions/0 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Layer: org/sleuthkit/autopsy/menuactions/layer.xml +OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/menuactions/Bundle.properties + diff --git a/MenuActions/nbproject/build-impl.xml b/MenuActions/nbproject/build-impl.xml new file mode 100644 index 0000000000..2502efc722 --- /dev/null +++ b/MenuActions/nbproject/build-impl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="org.sleuthkit.autopsy.menuactions-impl" basedir=".."> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/suite-private.properties"/> + <property file="nbproject/suite.properties"/> + <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> + <property file="${suite.dir}/nbproject/private/platform-private.properties"/> + <property file="${suite.dir}/nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/build.xml"/> +</project> diff --git a/MenuActions/nbproject/genfiles.properties b/MenuActions/nbproject/genfiles.properties new file mode 100644 index 0000000000..4ab1b65f73 --- /dev/null +++ b/MenuActions/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=b49f5bc1 +build.xml.script.CRC32=46209f11 +build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=b49f5bc1 +nbproject/build-impl.xml.script.CRC32=cb422238 +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 diff --git a/MenuActions/nbproject/project.properties b/MenuActions/nbproject/project.properties new file mode 100644 index 0000000000..c51692cafc --- /dev/null +++ b/MenuActions/nbproject/project.properties @@ -0,0 +1,3 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +spec.version.base=0.0 diff --git a/MenuActions/nbproject/project.xml b/MenuActions/nbproject/project.xml new file mode 100644 index 0000000000..32ed35628a --- /dev/null +++ b/MenuActions/nbproject/project.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> + <code-name-base>org.sleuthkit.autopsy.menuactions</code-name-base> + <suite-component/> + <module-dependencies> + <dependency> + <code-name-base>org.openide.awt</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.23.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.explorer</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.28.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.modules</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>7.17.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.6.2</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.util.lookup</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>8.3.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.openide.windows</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>6.33.1</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.casemodule</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponentinterfaces</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.corecomponents</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.directorytree</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.filesearch</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + <dependency> + <code-name-base>org.sleuthkit.autopsy.logging</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <release-version>0-1</release-version> + <specification-version>0.0</specification-version> + </run-dependency> + </dependency> + </module-dependencies> + <public-packages> + <package>org.sleuthkit.autopsy.menuactions</package> + </public-packages> + </data> + </configuration> +</project> diff --git a/MenuActions/nbproject/suite.properties b/MenuActions/nbproject/suite.properties new file mode 100644 index 0000000000..29d7cc9bd6 --- /dev/null +++ b/MenuActions/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/Bundle.properties b/MenuActions/src/org/sleuthkit/autopsy/menuactions/Bundle.properties new file mode 100644 index 0000000000..090b77bcef --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/Bundle.properties @@ -0,0 +1,2 @@ +CTL_FileBrowserAction=File Browser +OpenIDE-Module-Name=MenuActions diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java new file mode 100644 index 0000000000..661fca1f33 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentDynamicMenu.java @@ -0,0 +1,85 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import java.util.List; +import javax.swing.JComponent; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import org.openide.awt.DynamicMenuContent; +import org.openide.util.Lookup; +import org.openide.windows.TopComponent; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; +import org.sleuthkit.autopsy.corecomponents.DataContentTopComponent; + +/** + * + * @author jantonius + */ +public class DataContentDynamicMenu extends JMenuItem implements DynamicMenuContent { + + @Override + public JComponent[] getMenuPresenters() { + List<DataContentTopComponent> newWindowLists = DataContentTopComponent.getNewWindowList(); + + // Get DataContent provider to include in the menu + DataContent dataContent = Lookup.getDefault().lookup(DataContent.class); + int totalItems = newWindowLists.size() > 0 ? 2 : 1; + JComponent[] comps = new JComponent[totalItems]; + int counter = 0; + + TopComponent contentWin = dataContent.getTopComponent(); + JMenuItem defaultItem = new JMenuItem(contentWin.getName()); // set the main name + + defaultItem.addActionListener(new OpenTopComponentAction(contentWin)); + + if (!Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0) { + defaultItem.setEnabled(false); // disable the menu items when no case is opened + } else { + defaultItem.setEnabled(true); // enable the menu items when there's a case opened / created + } + + comps[counter++] = defaultItem; + + // add the submenu + if (newWindowLists != null) { + if (newWindowLists.size() > 0) { + + JMenu submenu = new JMenu("Data Content Windows"); + for (int i = 0; i < newWindowLists.size(); i++) { + DataContentTopComponent dctc = newWindowLists.get(i); + JMenuItem item = new JMenuItem(dctc.getName()); + item.addActionListener(new OpenTopComponentAction(dctc)); + submenu.add(item); + } + + comps[counter++] = submenu; + } + } + + return comps; + } + + @Override + public JComponent[] synchMenuPresenters(JComponent[] jcs) { + return getMenuPresenters(); + } +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java new file mode 100644 index 0000000000..4468794852 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataContentMenu.java @@ -0,0 +1,54 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import javax.swing.JMenuItem; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; + +/** + * Menu item that displays DataContentViewers + */ +public class DataContentMenu extends CallableSystemAction implements Presenter.Menu { + + DataContentMenu(){} + + @Override + public JMenuItem getMenuPresenter() { + return new DataContentDynamicMenu(); + } + + @Override + public void performAction() { + + } + + @Override + public String getName() { + return "DataContent Menu"; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerDynamicMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerDynamicMenu.java new file mode 100644 index 0000000000..9321e4a3d0 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerDynamicMenu.java @@ -0,0 +1,71 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import java.util.Collection; +import javax.swing.JComponent; +import javax.swing.JMenuItem; +import org.openide.awt.DynamicMenuContent; +import org.openide.util.Lookup; +import org.openide.windows.TopComponent; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer; + +/** + * Populates the top-level menu with the list of DataExplorers. + * + * @author jantonius + */ +public class DataExplorerDynamicMenu extends JMenuItem implements DynamicMenuContent{ + DataExplorerDynamicMenu(){ + } + + @Override + public JComponent[] getMenuPresenters() { + Collection<? extends DataExplorer> dataExplorers = Lookup.getDefault().lookupAll(DataExplorer.class); + + int totalItem = dataExplorers.size(); + JComponent[] comps = new JComponent[totalItem]; + + int i = 0; + for(DataExplorer dx : dataExplorers){ + TopComponent explorerWin = dx.getTopComponent(); + JMenuItem item = new JMenuItem(explorerWin.getName()); + item.addActionListener(new OpenTopComponentAction(explorerWin)); + + if(!Case.existsCurrentCase() || Case.getCurrentCase().getRootObjectsCount() == 0){ + item.setEnabled(false); // disable the menu when no case is opened + } + else{ + item.setEnabled(true); // enable the menu if the case is opened or created + } + + comps[i++] = item; + } + + return comps; + } + + @Override + public JComponent[] synchMenuPresenters(JComponent[] jcs) { + return getMenuPresenters(); + } + +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java new file mode 100644 index 0000000000..6106690768 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataExplorerMenu.java @@ -0,0 +1,52 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import javax.swing.JMenuItem; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; + +/** + * Menu item that tracks available DataExplorers. + * @author jantonius + */ +public class DataExplorerMenu extends CallableSystemAction implements Presenter.Menu { + + @Override + public JMenuItem getMenuPresenter() { + return new DataExplorerDynamicMenu(); + } + + @Override + public void performAction() { + + } + + @Override + public String getName() { + return "DataExplorer Tools"; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java new file mode 100644 index 0000000000..06c67001df --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/DataResultMenu.java @@ -0,0 +1,83 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CallableSystemAction; +import org.openide.util.actions.Presenter; +import org.sleuthkit.autopsy.casemodule.Case; + +/** + * Menu item tracks the DataResult windows + */ +public class DataResultMenu extends CallableSystemAction implements Presenter.Menu, PropertyChangeListener { + + JMenu menu = new JMenu("DataResult Windows"); + + DataResultMenu(){ + } + + @Override + public JMenuItem getMenuPresenter() { + return new SearchResultMenu(); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object oldValue = evt.getOldValue(); + Object newValue = evt.getNewValue(); + + if (changed.equals(Case.CASE_CURRENT_CASE)) { + if (newValue != null) { + // enable all menus when a case is created / opened + int totalMenus = menu.getItemCount(); + for (int i = 0; i < totalMenus; i++) { + menu.getItem(i).setEnabled(true); + } + } else { + // disable all menus when the case is closed + int totalMenus = menu.getItemCount(); + for (int i = 0; i < totalMenus; i++) { + menu.getItem(i).setEnabled(false); + } + } + } + } + + @Override + public void performAction() { + + } + + @Override + public String getName() { + return "DataResult Menu"; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } +} \ No newline at end of file diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/OpenTopComponentAction.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/OpenTopComponentAction.java new file mode 100644 index 0000000000..42c9aac62c --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/OpenTopComponentAction.java @@ -0,0 +1,45 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.openide.windows.TopComponent; + +/** + * This action opens the TopComponent passed to the constructor + */ +public class OpenTopComponentAction extends AbstractAction{ + + TopComponent tc; + + OpenTopComponentAction(TopComponent top){ + this.tc = top; + } + + @Override + public void actionPerformed(ActionEvent e) { + if(!this.tc.isOpened()){ + this.tc.open(); + } + this.tc.requestActive(); + } + +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java new file mode 100644 index 0000000000..60eafc3b58 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java @@ -0,0 +1,77 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier <at> sleuthkit <dot> org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sleuthkit.autopsy.menuactions; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.JComponent; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import org.openide.awt.DynamicMenuContent; +import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; +import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent; +import org.sleuthkit.autopsy.filesearch.FileSearchTopComponent; + +/** + * Menu item lists DataResult tabs.w + */ +public class SearchResultMenu extends JMenuItem implements DynamicMenuContent { + + SearchResultMenu(){ + } + + @Override + public JComponent[] getMenuPresenters() { + List<DataResultTopComponent> searchResults = FileSearchTopComponent.getFileSearchResultList(); + DirectoryTreeTopComponent directoryTree = DirectoryTreeTopComponent.findInstance(); + DataResultTopComponent directoryListing = directoryTree.getDirectoryListing(); + + + + List<JComponent> menuItems = new ArrayList<JComponent>(); + + // add the main "DirectoryListing" + JMenuItem dlItem = new JMenuItem(directoryListing.getName()); + dlItem.addActionListener(new OpenTopComponentAction(directoryListing)); + dlItem.setEnabled(directoryTree.isOpened()); + + menuItems.add(dlItem); + + + // add search results if there are any + if(searchResults.size() > 0){ + JMenu submenu = new JMenu("File Search Results"); + for(DataResultTopComponent resultTab : searchResults){ + JMenuItem item = new JMenuItem(resultTab.getName()); + item.addActionListener(new OpenTopComponentAction(resultTab)); + submenu.add(item); + } + + menuItems.add(submenu); + } + + return menuItems.toArray(new JComponent[menuItems.size()]); + } + + @Override + public JComponent[] synchMenuPresenters(JComponent[] jcs) { + return getMenuPresenters(); + } +} diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml b/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml new file mode 100644 index 0000000000..9b009d6f12 --- /dev/null +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> +<filesystem> + <folder name="Actions"> + <folder name="Tools"> + <file name="org-sleuthkit-autopsy-menuactions-FileBrowserAction.instance"> + <attr name="delegate" newvalue="org.sleuthkit.autopsy.menuactions.FileBrowserAction"/> + <attr name="displayName" bundlevalue="org.sleuthkit.autopsy.menuactions.Bundle#CTL_FileBrowserAction"/> + <attr name="noIconInMenu" boolvalue="false"/> + </file> + </folder> + <folder name="Window"> + </folder> + </folder> + <folder name="Menu"> + <folder name="Tools"> + <file name="org-sleuthkit-autopsy-menuactions-DataExplorerMenu.instance"> + <attr name="position" intvalue="1225"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-DataExplorerMenu-separatoAfter.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1250"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-FileBrowserAction-separatorAfter.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="1301"/> + </file> + </folder> + <folder name="Window"> + <file name="org-netbeans-modules-favorites-View.shadow_hidden"/> + <file name="org-sleuthkit-autopsy-menuactions-DataResultMenu-separatoBefore.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="75"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-DataResultMenu.instance"> + <attr name="originalFile" stringvalue="Actions/Tools/org-sleuthkit-autopsy-menuactions-DataResultMenu.instance"/> + <attr name="position" intvalue="100"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-DataResultMenu-separatoAfter.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="125"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-DataContentMenu.instance"> + <attr name="originalFile" stringvalue="Actions/Tools/org-sleuthkit-autopsy-menuactions-DataContentMenu.instance"/> + <attr name="position" intvalue="150"/> + </file> + <file name="org-sleuthkit-autopsy-menuactions-DataContentMenu-separatorAfter.instance"> + <attr name="instanceClass" stringvalue="javax.swing.JSeparator"/> + <attr name="position" intvalue="175"/> + </file> + </folder> + </folder> +</filesystem> diff --git a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties new file mode 100644 index 0000000000..dbffcdccee --- /dev/null +++ b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties @@ -0,0 +1,8 @@ +currentVersion=Autopsy {0} +LBL_splash_window_title=Starting Autopsy +SPLASH_HEIGHT=288 +SPLASH_WIDTH=538 +SplashProgressBarBounds=3,236,533,6 +SplashRunningTextBounds=5,212,530,17 +SplashRunningTextColor=0x0 +SplashRunningTextFontSize=18 diff --git a/branding/core/core.jar/org/netbeans/core/startup/frame.gif b/branding/core/core.jar/org/netbeans/core/startup/frame.gif new file mode 100644 index 0000000000000000000000000000000000000000..08dc748a0046d27fd09fc9c9d046e6971bcc241e GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7=6Jd|hE&{|J2{Z6K|#Pp zb;<e{n}thy`fi1{zhs%K*5Z_$6jK%~%w{s{`5Qf}<vRC&c0Y|0^Ev)a<K6R(jEB;~ zM2{GSJEoLeyAVD_>2;ceO}p_8hP8#C%8VKNy_uK%-KWMlsaMRtUX_7?Nu}{jw5ai= z6wfuw3TyNpi#w<}NUmg;YOvN<bY+;mRm5OFLvG8h?Wv!3Zv0Y{J^u@@dScw%H^I5_ Q3=9kmp00i_>zopr0QrSa<NyEw literal 0 HcmV?d00001 diff --git a/branding/core/core.jar/org/netbeans/core/startup/frame32.gif b/branding/core/core.jar/org/netbeans/core/startup/frame32.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cc097241a9227807e7d92aa191e00752cb23270 GIT binary patch literal 1795 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 Y(#UB})YMdV1_lNOPgg&ebxsLQ0OU(>EdT%j literal 0 HcmV?d00001 diff --git a/branding/core/core.jar/org/netbeans/core/startup/frame48.gif b/branding/core/core.jar/org/netbeans/core/startup/frame48.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c6cdfd5870d5af946cdc2106774eb357753ccb6 GIT binary patch literal 3325 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 literal 0 HcmV?d00001 diff --git a/branding/core/core.jar/org/netbeans/core/startup/splash.gif b/branding/core/core.jar/org/netbeans/core/startup/splash.gif new file mode 100644 index 0000000000000000000000000000000000000000..a02e27f26bf3d2d842592562cadb46e775236905 GIT binary patch literal 19506 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 literal 0 HcmV?d00001 diff --git a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties new file mode 100644 index 0000000000..3400dcc9c9 --- /dev/null +++ b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties @@ -0,0 +1,2 @@ +CTL_MainWindow_Title=Autopsy {0} +CTL_MainWindow_Title_No_Project=Autopsy {0} diff --git a/build-unix.xml b/build-unix.xml new file mode 100644 index 0000000000..2cb9866ffb --- /dev/null +++ b/build-unix.xml @@ -0,0 +1,8 @@ +<project name="AutopsyTSKTargets"> + <target name="copyTSKLibs"> + <property environment="env"/> + <copy file="${env.TSK_HOME}/bindings/java/jni/.libs/libtsk_jni.dylib" tofile="${basedir}/DataModel/release/modules/lib/libtsk_jni.dylib"/> + <!-- <copy file="${env.TSK_HOME}/win32/libewf/msvscpp/Release/libewf.dll" tofile="${basedir}/DataModel/release/modules/lib/libewf.dll"/> + <copy file="${env.TSK_HOME}/win32/libewf/msvscpp/zlib/zlib1.dll" tofile="${basedir}/DataModel/release/modules/lib/zlib1.dll"/> --> + </target> +</project> diff --git a/build-windows.xml b/build-windows.xml new file mode 100644 index 0000000000..aef7006231 --- /dev/null +++ b/build-windows.xml @@ -0,0 +1,14 @@ +<project name="AutopsyTSKTargets"> + <target name="copyTSKLibs"> + <property environment="env"/> + <condition property="ewfFound"> + <isset property="env.LIBEWF_HOME"/> + </condition> + <fail unless="ewfFound" message="LIBEWF_HOME must be set as an environment variable."/> + + <!-- Need a way to specify Debug versus release --> + <copy file="${env.TSK_HOME}/win32/release/libtsk_jni.dll" tofile="${basedir}/DataModel/release/modules/lib/libtsk_jni.dll"/> + <copy file="${env.LIBEWF_HOME}/msvscpp/Release/libewf.dll" tofile="${basedir}/DataModel/release/modules/lib/libewf.dll"/> + <copy file="${env.LIBEWF_HOME}/msvscpp/zlib/zlib1.dll" tofile="${basedir}/DataModel/release/modules/lib/zlib1.dll"/> + </target> +</project> diff --git a/build.xml b/build.xml new file mode 100644 index 0000000000..614f35e862 --- /dev/null +++ b/build.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See harness/README in the NetBeans platform --> +<!-- for some information on what you could do (e.g. targets to override). --> +<!-- If you delete this file and reopen the project it will be recreated. --> +<project name="Autopsy3" basedir="."> + <description>Builds the module suite Autopsy3.</description> + <import file="nbproject/build-impl.xml"/> + + + <condition property="os.family" value="unix"> + <os family="unix"/> + </condition> + <condition property="os.family" value="windows"> + <os family="windows"/> + </condition> + <import file="build-${os.family}.xml"/> + + + <!-- This seems really bad to be hard coded, but I couldn't find a better solution --> + <path id="jni-path"> + <pathelement location="./build/cluster/modules/org-sleuthkit-datamodel.jar"/> + <path refid="cluster.path.id" /> + </path> + + <!-- Verify that the TSK_HOME env variable is set --> + <target name="findTSK"> + <property environment="env"/> + <condition property="tskFound"> + <isset property="env.TSK_HOME"/> + </condition> + <fail unless="tskFound" message="TSK_HOME must be set as an environment variable."/> + <echo> TSK_HOME: ${env.TSK_HOME}</echo> + + </target> + + <target name="getExternals" depends="findTSK,copyTSKLibs"> + <property environment="env"/> + <copy file="${env.TSK_HOME}/bindings/java/dist/Tsk_DataModel.jar" tofile="${basedir}/DataModel/release/modules/ext/Tsk_DataModel.jar"/> + <copy file="${env.TSK_HOME}/bindings/java/lib/sqlite-jdbc-3.6.20.jar" tofile="${basedir}/DataModel/release/modules/ext/sqlite-jdbc-3.6.20.jar"/> + <!--<copy file="${env.TSK_HOME}/bindings/java/lib/sqlite-jdbc-3.6.20-javadoc.jar" tofile="${basedir}/DataModel/release/modules/ext/sqlite-jdbc-3.6.20-javadoc.jar"/> + <copy file="${env.TSK_HOME}/bindings/java/lib/sqlite-jdbc-3.6.20-sources.jar" tofile="${basedir}/DataModel/release/modules/ext/sqlite-jdbc-3.6.20-sources.jar"/> --> + </target> + + <!-- This target will create a custom ZIP file for us. It first uses the general + ZIP target and then opens it up and adds in any files that we want. This is where we customize the + version number. --> + <target name="build-zip" depends="suite.build-zip"> + <property name="nbdist.dir" value="dist"/> + <property name="release.dir" value="${nbdist.dir}/${app.name}"/> + + <!-- step (2) unzip the result --> + <property name="zip-tmp" value="${nbdist.dir}/tmp"/> + <delete dir="${zip-tmp}"/> + <mkdir dir="${zip-tmp}"/> + <unzip src="${nbdist.dir}/${app.name}.zip" dest="${zip-tmp}"/> + + <!-- step (3) do your copying stuff here, check the ant doc for copy, move, etc file --> + <copy file="${basedir}/README.txt" tofile="${zip-tmp}/${app.name}/README.txt"/> + <copy file="${basedir}/LICENSE-2.0.txt" tofile="${zip-tmp}/${app.name}/LICENSE-2.0.txt"/> + + <!-- step (4) zip again, but with the version numbers in the dir --> + <zip destfile="${nbdist.dir}/${app.name}-${app.version}.zip"> + <zipfileset dir="${zip-tmp}/${app.name}" prefix="${app.name}-${app.version}"/> + </zip> + + <delete dir="${zip-tmp}"/> + <delete file="${nbdist.dir}/${app.name}.zip"/> + + <echo message=" "/> + <echo message="cleaning and finalizing release" /> + <delete dir="${release.dir}"/> + </target> + + + <target name="-init" depends="-taskdefs,-convert-old-project,getExternals"> + <convertclusterpath from="${cluster.path.evaluated}" to="cluster.path.final" id="cluster.path.id"/> + <property file="nbproject/private/private.properties"/> + <property file="nbproject/project.properties"/> + <sortsuitemodules unsortedmodules="${modules}" sortedmodulesproperty="modules.sorted"/> + <property name="cluster" location="build/cluster"/> + <echo level="verbose">Suite in ${basedir} with clusters ${cluster.path.final}, build cluster ${cluster}, and sorted modules ${modules.sorted}</echo> + <!-- synchronize with SuiteProject --> + <property name="disabled.modules" value=""/> + <property name="enabled.clusters" value=""/> + <property name="disabled.clusters" value=""/> + <property name="app.version" value="0.1"/> + <property name="branding.dir" location="branding"/> + <property name="dist.dir" location="dist"/> + <!-- MOVE THE .DLL FILES TO THE NETBEANS DIRECTORY --> + + <condition property="run.branding"> <!-- #84689 --> + <and> + <available file="${branding.dir}" type="dir"/> + <isset property="branding.token"/> + </and> + </condition> + </target> + + <target name="jni" depends="build,findTSK"> + <javah verbose="yes" outputFile="${env.TSK_HOME}/bindings/java/tsk_jni/tsk_jni/dataModel_SleuthkitJNI.h"> + <class name="org.sleuthkit.datamodel.SleuthkitJNI" /> + <classpath refid="jni-path"/> + </javah> + </target> + + <target name="javadoc" depends="-init,-hide-excluded-modules"> + <subant target="javadoc" buildpath="${modules.sorted}" inheritrefs="false" inheritall="false" /> + </target> +</project> diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000000..253a284f00 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** +--> +<project name="Autopsy3-impl" basedir=".." xmlns:sproject="http://www.netbeans.org/ns/nb-module-suite-project/1"> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <property file="nbproject/private/platform-private.properties"/> + <property file="nbproject/platform.properties"/> + <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-suite-project/1"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-suite-project/1"> + <attribute name="property"/> + <attribute name="value"/> + <sequential> + <property name="@{property}" value="@{value}"/> + </sequential> + </macrodef> + <property file="${user.properties.file}"/> + <sproject:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir"/> + <sproject:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir"/> + <sproject:evalprops property="cluster.path.evaluated" value="${cluster.path}"/> + <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> + <condition> + <not> + <contains string="${cluster.path.evaluated}" substring="platform"/> + </not> + </condition> + </fail> + <fail message="Cannot find NetBeans build harness. ${line.separator}Check that nbplatform.${nbplatform.active}.netbeans.dest.dir and nbplatform.${nbplatform.active}.harness.dir are defined. ${line.separator}On a developer machine these are normally defined in ${user.properties.file}=${netbeans.user}/build.properties ${line.separator}but for automated builds you should pass these properties to Ant explicitly."> + <condition> + <not> + <available type="dir" file="${harness.dir}"/> + </not> + </condition> + </fail> + <import file="${harness.dir}/suite.xml"/> +</project> diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000000..542aedb4cc --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=2e7964b0 +build.xml.script.CRC32=f6b177dc +build.xml.stylesheet.CRC32=eaf9f76a@1.42.2 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=2e7964b0 +nbproject/build-impl.xml.script.CRC32=14b0b78d +nbproject/build-impl.xml.stylesheet.CRC32=183e6ef3@1.42.2 diff --git a/nbproject/platform.properties b/nbproject/platform.properties new file mode 100644 index 0000000000..38ecd5a92e --- /dev/null +++ b/nbproject/platform.properties @@ -0,0 +1,99 @@ +cluster.path=\ + ${nbplatform.active.dir}/java:\ + ${nbplatform.active.dir}/platform +disabled.modules=\ + org.apache.tools.ant.module,\ + org.netbeans.api.debugger.jpda,\ + org.netbeans.api.java,\ + org.netbeans.libs.cglib,\ + org.netbeans.libs.javacapi,\ + org.netbeans.libs.javacimpl,\ + org.netbeans.libs.jsr223,\ + org.netbeans.libs.springframework,\ + org.netbeans.modules.ant.browsetask,\ + org.netbeans.modules.ant.debugger,\ + org.netbeans.modules.ant.freeform,\ + org.netbeans.modules.ant.grammar,\ + org.netbeans.modules.ant.kit,\ + org.netbeans.modules.beans,\ + org.netbeans.modules.classfile,\ + org.netbeans.modules.dbschema,\ + org.netbeans.modules.debugger.jpda,\ + org.netbeans.modules.debugger.jpda.ant,\ + org.netbeans.modules.debugger.jpda.projects,\ + org.netbeans.modules.debugger.jpda.ui,\ + org.netbeans.modules.form,\ + org.netbeans.modules.form.j2ee,\ + org.netbeans.modules.form.kit,\ + org.netbeans.modules.hibernate,\ + org.netbeans.modules.hibernatelib,\ + org.netbeans.modules.hudson.ant,\ + org.netbeans.modules.hudson.maven,\ + org.netbeans.modules.i18n,\ + org.netbeans.modules.i18n.form,\ + org.netbeans.modules.j2ee.core.utilities,\ + org.netbeans.modules.j2ee.eclipselink,\ + org.netbeans.modules.j2ee.eclipselinkmodelgen,\ + org.netbeans.modules.j2ee.jpa.refactoring,\ + org.netbeans.modules.j2ee.jpa.verification,\ + org.netbeans.modules.j2ee.metadata,\ + org.netbeans.modules.j2ee.metadata.model.support,\ + org.netbeans.modules.j2ee.persistence,\ + org.netbeans.modules.j2ee.persistence.kit,\ + org.netbeans.modules.j2ee.persistenceapi,\ + org.netbeans.modules.j2ee.toplinklib,\ + org.netbeans.modules.java.api.common,\ + org.netbeans.modules.java.debug,\ + org.netbeans.modules.java.editor,\ + org.netbeans.modules.java.editor.lib,\ + org.netbeans.modules.java.examples,\ + org.netbeans.modules.java.freeform,\ + org.netbeans.modules.java.guards,\ + org.netbeans.modules.java.helpset,\ + org.netbeans.modules.java.hints,\ + org.netbeans.modules.java.hints.processor,\ + org.netbeans.modules.java.j2seplatform,\ + org.netbeans.modules.java.j2seproject,\ + org.netbeans.modules.java.kit,\ + org.netbeans.modules.java.lexer,\ + org.netbeans.modules.java.navigation,\ + org.netbeans.modules.java.platform,\ + org.netbeans.modules.java.preprocessorbridge,\ + org.netbeans.modules.java.project,\ + org.netbeans.modules.java.source,\ + org.netbeans.modules.java.source.ant,\ + org.netbeans.modules.java.sourceui,\ + org.netbeans.modules.javadoc,\ + org.netbeans.modules.javawebstart,\ + org.netbeans.modules.jellytools,\ + org.netbeans.modules.jellytools.java,\ + org.netbeans.modules.junit,\ + org.netbeans.modules.maven,\ + org.netbeans.modules.maven.coverage,\ + org.netbeans.modules.maven.embedder,\ + org.netbeans.modules.maven.grammar,\ + org.netbeans.modules.maven.graph,\ + org.netbeans.modules.maven.hints,\ + org.netbeans.modules.maven.indexer,\ + org.netbeans.modules.maven.junit,\ + org.netbeans.modules.maven.kit,\ + org.netbeans.modules.maven.model,\ + org.netbeans.modules.maven.osgi,\ + org.netbeans.modules.maven.persistence,\ + org.netbeans.modules.maven.repository,\ + org.netbeans.modules.maven.search,\ + org.netbeans.modules.maven.spring,\ + org.netbeans.modules.projectimport.eclipse.core,\ + org.netbeans.modules.projectimport.eclipse.j2se,\ + org.netbeans.modules.refactoring.java,\ + org.netbeans.modules.spellchecker.bindings.java,\ + org.netbeans.modules.spring.beans,\ + org.netbeans.modules.swingapp,\ + org.netbeans.modules.websvc.jaxws21,\ + org.netbeans.modules.websvc.jaxws21api,\ + org.netbeans.modules.websvc.saas.codegen.java,\ + org.netbeans.modules.xml.jaxb,\ + org.netbeans.modules.xml.tools.java,\ + org.openide.compat,\ + org.openide.util.enumerations +nbplatform.active=default diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000000..1cf6268547 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,28 @@ +app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif +app.name=autopsy +app.title=Autopsy +app.version=3.0.0b1 +auxiliary.org-netbeans-modules-apisupport-installer.license-type=apache.v2 +auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false +auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false +auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false +auxiliary.org-netbeans-modules-apisupport-installer.os-windows=true +auxiliary.org-netbeans-modules-apisupport-installer.pack200-enabled=false +branding.token=${app.name} +modules=\ + ${project.org.sleuthkit.autopsy.directorytree}:\ + ${project.org.sleuthkit.autopsy.menuactions}:\ + ${project.org.sleuthkit.autopsy.corecomponentinterfaces}:\ + ${project.org.sleuthkit.autopsy.corecomponents}:\ + ${project.org.sleuthkit.autopsy.filesearch}:\ + ${project.org.sleuthkit.autopsy.datamodel}:\ + ${project.org.sleuthkit.autopsy.logging}:\ + ${project.org.sleuthkit.autopsy.casemodule} +project.org.sleuthkit.autopsy.casemodule=Case +project.org.sleuthkit.autopsy.corecomponentinterfaces=CoreComponentInterfaces +project.org.sleuthkit.autopsy.corecomponents=CoreComponents +project.org.sleuthkit.autopsy.directorytree=DirectoryTree +project.org.sleuthkit.autopsy.filesearch=FileSearch +project.org.sleuthkit.autopsy.logging=Logging +project.org.sleuthkit.autopsy.menuactions=MenuActions +project.org.sleuthkit.autopsy.datamodel=DataModel diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000000..d93a72bfcc --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.apisupport.project.suite</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/nb-module-suite-project/1"> + <name>Autopsy3</name> + </data> + </configuration> +</project> -- GitLab