From 661b930ae8db37fb39d4bb3c51c3376941d34606 Mon Sep 17 00:00:00 2001
From: Brian Carrier <carrier@sleuthkit.org>
Date: Thu, 13 Oct 2011 11:22:34 -0400
Subject: [PATCH] Revert "Cleaning up to make way for version 3"

This reverts commit e9c3a4a209df0846b4fda14b07e92cb2447f426f.
---
 NEWS.txt => CHANGES.txt                 |    0
 COPYING                                 |  340 ++
 INSTALL.txt                             |   39 +
 Makefile                                |   30 +
 README-LIVE.txt                         |  119 +
 TODO.txt                                |   58 +
 base/.perltidyrc                        |    5 +
 base/autopsy.base                       |  879 +++++
 base/make-live-cd.base                  |  153 +
 configure                               |  475 +++
 docs/sleuthkit-informer-13.txt          |  410 +++
 global.css                              |   19 +
 help/blank.html                         |   25 +
 help/caseman.html                       |  161 +
 help/data_mode.html                     |   97 +
 help/file_category.html                 |   99 +
 help/file_mode.html                     |  221 ++
 help/fs_mode.html                       |   46 +
 help/general.html                       |  103 +
 help/grep.html                          |   70 +
 help/grep_lim.html                      |   75 +
 help/hash_db.html                       |  141 +
 help/index.html                         |   11 +
 help/int_mode.html                      |   29 +
 help/menu.html                          |   37 +
 help/meta_mode.html                     |   93 +
 help/sequencer.html                     |   49 +
 help/srch_mode.html                     |   68 +
 help/temp.html                          |   10 +
 help/timezones.html                     |  508 +++
 help/tl.html                            |  183 +
 lib/.perltidyrc                         |    5 +
 lib/Appsort.pm                          |  399 +++
 lib/Appview.pm                          |  291 ++
 lib/Args.pm                             |  927 +++++
 lib/Caseman.pm                          | 4161 +++++++++++++++++++++++
 lib/Data.pm                             |  927 +++++
 lib/Exec.pm                             |   91 +
 lib/File.pm                             | 2310 +++++++++++++
 lib/Filesystem.pm                       |  170 +
 lib/Frame.pm                            |  336 ++
 lib/Fs.pm                               |  171 +
 lib/Hash.pm                             |  947 ++++++
 lib/Kwsrch.pm                           |  954 ++++++
 lib/Main.pm                             |  357 ++
 lib/Meta.pm                             |  789 +++++
 lib/Notes.pm                            | 1110 ++++++
 lib/Print.pm                            |  390 +++
 lib/Timeline.pm                         | 1425 ++++++++
 lib/Vs.pm                               |    8 +
 lib/define.pl                           |   39 +
 lib/search.pl                           |   51 +
 man/man1/autopsy.1                      |  163 +
 pict/back_pix.jpg                       |  Bin 0 -> 305 bytes
 pict/but_addnote.jpg                    |  Bin 0 -> 1332 bytes
 pict/but_alloc_list.jpg                 |  Bin 0 -> 1852 bytes
 pict/but_export.jpg                     |  Bin 0 -> 2056 bytes
 pict/but_force.jpg                      |  Bin 0 -> 1079 bytes
 pict/but_indexdb.jpg                    |  Bin 0 -> 1568 bytes
 pict/but_lookup.jpg                     |  Bin 0 -> 1458 bytes
 pict/but_new_name.jpg                   |  Bin 0 -> 1435 bytes
 pict/but_next.jpg                       |  Bin 0 -> 1336 bytes
 pict/but_ok.jpg                         |  Bin 0 -> 881 bytes
 pict/but_prev.jpg                       |  Bin 0 -> 1574 bytes
 pict/but_replace.jpg                    |  Bin 0 -> 1273 bytes
 pict/but_report.jpg                     |  Bin 0 -> 1339 bytes
 pict/but_search.jpg                     |  Bin 0 -> 1118 bytes
 pict/but_view.jpg                       |  Bin 0 -> 931 bytes
 pict/but_viewcont.jpg                   |  Bin 0 -> 1924 bytes
 pict/favicon.ico                        |  Bin 0 -> 1406 bytes
 pict/file_b_alldel.jpg                  |  Bin 0 -> 1789 bytes
 pict/file_b_allfiles.jpg                |  Bin 0 -> 1658 bytes
 pict/file_b_check.jpg                   |  Bin 0 -> 474 bytes
 pict/file_b_expand.jpg                  |  Bin 0 -> 2292 bytes
 pict/file_b_hide.jpg                    |  Bin 0 -> 2112 bytes
 pict/file_b_md5list.jpg                 |  Bin 0 -> 2716 bytes
 pict/file_h_acc_cur.jpg                 |  Bin 0 -> 1413 bytes
 pict/file_h_acc_link.jpg                |  Bin 0 -> 1153 bytes
 pict/file_h_chg_cur.jpg                 |  Bin 0 -> 1409 bytes
 pict/file_h_chg_link.jpg                |  Bin 0 -> 1148 bytes
 pict/file_h_cre_cur.jpg                 |  Bin 0 -> 1389 bytes
 pict/file_h_cre_link.jpg                |  Bin 0 -> 1103 bytes
 pict/file_h_del_cur.jpg                 |  Bin 0 -> 941 bytes
 pict/file_h_del_link.jpg                |  Bin 0 -> 694 bytes
 pict/file_h_gid_cur.jpg                 |  Bin 0 -> 953 bytes
 pict/file_h_gid_link.jpg                |  Bin 0 -> 725 bytes
 pict/file_h_meta_cur.jpg                |  Bin 0 -> 1080 bytes
 pict/file_h_meta_link.jpg               |  Bin 0 -> 911 bytes
 pict/file_h_mod_cur.jpg                 |  Bin 0 -> 1364 bytes
 pict/file_h_mod_link.jpg                |  Bin 0 -> 1100 bytes
 pict/file_h_nam_cur.jpg                 |  Bin 0 -> 1097 bytes
 pict/file_h_nam_link.jpg                |  Bin 0 -> 834 bytes
 pict/file_h_siz_cur.jpg                 |  Bin 0 -> 1007 bytes
 pict/file_h_siz_link.jpg                |  Bin 0 -> 749 bytes
 pict/file_h_uid_cur.jpg                 |  Bin 0 -> 923 bytes
 pict/file_h_uid_link.jpg                |  Bin 0 -> 685 bytes
 pict/file_h_wr_cur.jpg                  |  Bin 0 -> 1336 bytes
 pict/file_h_wr_link.jpg                 |  Bin 0 -> 1014 bytes
 pict/hashdb_h_alert.jpg                 |  Bin 0 -> 2419 bytes
 pict/hashdb_h_ig.jpg                    |  Bin 0 -> 2640 bytes
 pict/hashdb_h_nsrl.jpg                  |  Bin 0 -> 1147 bytes
 pict/int_b_calc.jpg                     |  Bin 0 -> 1824 bytes
 pict/int_b_valid.jpg                    |  Bin 0 -> 1660 bytes
 pict/int_h_data.jpg                     |  Bin 0 -> 2058 bytes
 pict/int_h_img.jpg                      |  Bin 0 -> 2005 bytes
 pict/int_h_str.jpg                      |  Bin 0 -> 1553 bytes
 pict/int_h_tl.jpg                       |  Bin 0 -> 1124 bytes
 pict/int_h_unalloc.jpg                  |  Bin 0 -> 2398 bytes
 pict/logo.jpg                           |  Bin 0 -> 39208 bytes
 pict/main_t_dat_cur.jpg                 |  Bin 0 -> 2140 bytes
 pict/main_t_dat_link.jpg                |  Bin 0 -> 1821 bytes
 pict/main_t_fil_cur.jpg                 |  Bin 0 -> 2312 bytes
 pict/main_t_fil_link.jpg                |  Bin 0 -> 2002 bytes
 pict/main_t_fil_org.jpg                 |  Bin 0 -> 1416 bytes
 pict/main_t_ftype_cur.jpg               |  Bin 0 -> 2081 bytes
 pict/main_t_ftype_link.jpg              |  Bin 0 -> 1764 bytes
 pict/main_t_ftype_org.jpg               |  Bin 0 -> 1340 bytes
 pict/main_t_img_cur.jpg                 |  Bin 0 -> 2353 bytes
 pict/main_t_img_link.jpg                |  Bin 0 -> 2044 bytes
 pict/main_t_img_org.jpg                 |  Bin 0 -> 1487 bytes
 pict/main_t_met_cur.jpg                 |  Bin 0 -> 2151 bytes
 pict/main_t_met_link.jpg                |  Bin 0 -> 1832 bytes
 pict/main_t_met_org.jpg                 |  Bin 0 -> 1399 bytes
 pict/main_t_srch_cur.jpg                |  Bin 0 -> 2497 bytes
 pict/main_t_srch_link.jpg               |  Bin 0 -> 2184 bytes
 pict/menu_b_add.jpg                     |  Bin 0 -> 2208 bytes
 pict/menu_b_analyze.jpg                 |  Bin 0 -> 2758 bytes
 pict/menu_b_back.jpg                    |  Bin 0 -> 2410 bytes
 pict/menu_b_cancel.jpg                  |  Bin 0 -> 1632 bytes
 pict/menu_b_ccls.jpg                    |  Bin 0 -> 1933 bytes
 pict/menu_b_close.jpg                   |  Bin 0 -> 2495 bytes
 pict/menu_b_cnew.jpg                    |  Bin 0 -> 1768 bytes
 pict/menu_b_copen.jpg                   |  Bin 0 -> 1913 bytes
 pict/menu_b_fs.jpg                      |  Bin 0 -> 1924 bytes
 pict/menu_b_hashdb.jpg                  |  Bin 0 -> 2257 bytes
 pict/menu_b_hcls.jpg                    |  Bin 0 -> 1921 bytes
 pict/menu_b_help.jpg                    |  Bin 0 -> 1484 bytes
 pict/menu_b_hnew.jpg                    |  Bin 0 -> 1745 bytes
 pict/menu_b_ifnew.jpg                   |  Bin 0 -> 3564 bytes
 pict/menu_b_inew.jpg                    |  Bin 0 -> 1831 bytes
 pict/menu_b_int.jpg                     |  Bin 0 -> 2108 bytes
 pict/menu_b_menu.jpg                    |  Bin 0 -> 1846 bytes
 pict/menu_b_next.jpg                    |  Bin 0 -> 2327 bytes
 pict/menu_b_note.jpg                    |  Bin 0 -> 1871 bytes
 pict/menu_b_ok.jpg                      |  Bin 0 -> 1355 bytes
 pict/menu_b_ref.jpg                     |  Bin 0 -> 1672 bytes
 pict/menu_b_rem.jpg                     |  Bin 0 -> 1681 bytes
 pict/menu_b_seq.jpg                     |  Bin 0 -> 2451 bytes
 pict/menu_b_tl.jpg                      |  Bin 0 -> 2545 bytes
 pict/menu_h_cdet.jpg                    |  Bin 0 -> 1537 bytes
 pict/menu_h_cnew.jpg                    |  Bin 0 -> 2960 bytes
 pict/menu_h_hdet.jpg                    |  Bin 0 -> 1506 bytes
 pict/menu_h_hnew.jpg                    |  Bin 0 -> 1856 bytes
 pict/menu_h_idet.jpg                    |  Bin 0 -> 1553 bytes
 pict/menu_h_inew.jpg                    |  Bin 0 -> 1808 bytes
 pict/menu_t_cg_cur.jpg                  |  Bin 0 -> 3648 bytes
 pict/menu_t_cg_link.jpg                 |  Bin 0 -> 3340 bytes
 pict/menu_t_cg_org.jpg                  |  Bin 0 -> 19559 bytes
 pict/menu_t_hg_cur.jpg                  |  Bin 0 -> 3573 bytes
 pict/menu_t_hg_link.jpg                 |  Bin 0 -> 3260 bytes
 pict/menu_t_hg_org.jpg                  |  Bin 0 -> 2418 bytes
 pict/menu_t_hm_cur.jpg                  |  Bin 0 -> 3736 bytes
 pict/menu_t_hm_link.jpg                 |  Bin 0 -> 3361 bytes
 pict/menu_t_hm_org.jpg                  |  Bin 0 -> 2462 bytes
 pict/sanit_b_norm.jpg                   |  Bin 0 -> 1448 bytes
 pict/sanit_b_san.jpg                    |  Bin 0 -> 1558 bytes
 pict/sanitized.jpg                      |  Bin 0 -> 18357 bytes
 pict/srch_b_lorig.jpg                   |  Bin 0 -> 1963 bytes
 pict/srch_b_lun.jpg                     |  Bin 0 -> 2180 bytes
 pict/srch_b_str.jpg                     |  Bin 0 -> 2111 bytes
 pict/srch_b_un.jpg                      |  Bin 0 -> 2445 bytes
 pict/tab_close.jpg                      |  Bin 0 -> 1357 bytes
 pict/tab_help.jpg                       |  Bin 0 -> 1253 bytes
 pict/tl_t_data_cur.jpg                  |  Bin 0 -> 2906 bytes
 pict/tl_t_data_link.jpg                 |  Bin 0 -> 2580 bytes
 pict/tl_t_notes_link.jpg                |  Bin 0 -> 2216 bytes
 pict/tl_t_notes_org.jpg                 |  Bin 0 -> 1715 bytes
 pict/tl_t_tl_cur.jpg                    |  Bin 0 -> 2844 bytes
 pict/tl_t_tl_link.jpg                   |  Bin 0 -> 2518 bytes
 pict/tl_t_view_cur.jpg                  |  Bin 0 -> 2681 bytes
 pict/tl_t_view_link.jpg                 |  Bin 0 -> 2351 bytes
 xcode/autopsy.xcodeproj/project.pbxproj |  138 +
 182 files changed, 20712 insertions(+)
 rename NEWS.txt => CHANGES.txt (100%)
 create mode 100644 COPYING
 create mode 100644 INSTALL.txt
 create mode 100644 Makefile
 create mode 100644 README-LIVE.txt
 create mode 100644 TODO.txt
 create mode 100755 base/.perltidyrc
 create mode 100644 base/autopsy.base
 create mode 100644 base/make-live-cd.base
 create mode 100755 configure
 create mode 100644 docs/sleuthkit-informer-13.txt
 create mode 100644 global.css
 create mode 100644 help/blank.html
 create mode 100644 help/caseman.html
 create mode 100644 help/data_mode.html
 create mode 100644 help/file_category.html
 create mode 100644 help/file_mode.html
 create mode 100644 help/fs_mode.html
 create mode 100644 help/general.html
 create mode 100644 help/grep.html
 create mode 100644 help/grep_lim.html
 create mode 100644 help/hash_db.html
 create mode 100644 help/index.html
 create mode 100644 help/int_mode.html
 create mode 100644 help/menu.html
 create mode 100644 help/meta_mode.html
 create mode 100644 help/sequencer.html
 create mode 100644 help/srch_mode.html
 create mode 100644 help/temp.html
 create mode 100644 help/timezones.html
 create mode 100644 help/tl.html
 create mode 100755 lib/.perltidyrc
 create mode 100644 lib/Appsort.pm
 create mode 100644 lib/Appview.pm
 create mode 100644 lib/Args.pm
 create mode 100644 lib/Caseman.pm
 create mode 100644 lib/Data.pm
 create mode 100644 lib/Exec.pm
 create mode 100644 lib/File.pm
 create mode 100644 lib/Filesystem.pm
 create mode 100644 lib/Frame.pm
 create mode 100644 lib/Fs.pm
 create mode 100644 lib/Hash.pm
 create mode 100644 lib/Kwsrch.pm
 create mode 100644 lib/Main.pm
 create mode 100644 lib/Meta.pm
 create mode 100644 lib/Notes.pm
 create mode 100644 lib/Print.pm
 create mode 100644 lib/Timeline.pm
 create mode 100644 lib/Vs.pm
 create mode 100644 lib/define.pl
 create mode 100644 lib/search.pl
 create mode 100755 man/man1/autopsy.1
 create mode 100644 pict/back_pix.jpg
 create mode 100644 pict/but_addnote.jpg
 create mode 100644 pict/but_alloc_list.jpg
 create mode 100644 pict/but_export.jpg
 create mode 100644 pict/but_force.jpg
 create mode 100644 pict/but_indexdb.jpg
 create mode 100644 pict/but_lookup.jpg
 create mode 100644 pict/but_new_name.jpg
 create mode 100644 pict/but_next.jpg
 create mode 100644 pict/but_ok.jpg
 create mode 100644 pict/but_prev.jpg
 create mode 100644 pict/but_replace.jpg
 create mode 100644 pict/but_report.jpg
 create mode 100644 pict/but_search.jpg
 create mode 100644 pict/but_view.jpg
 create mode 100644 pict/but_viewcont.jpg
 create mode 100644 pict/favicon.ico
 create mode 100644 pict/file_b_alldel.jpg
 create mode 100644 pict/file_b_allfiles.jpg
 create mode 100644 pict/file_b_check.jpg
 create mode 100644 pict/file_b_expand.jpg
 create mode 100644 pict/file_b_hide.jpg
 create mode 100644 pict/file_b_md5list.jpg
 create mode 100644 pict/file_h_acc_cur.jpg
 create mode 100644 pict/file_h_acc_link.jpg
 create mode 100644 pict/file_h_chg_cur.jpg
 create mode 100644 pict/file_h_chg_link.jpg
 create mode 100644 pict/file_h_cre_cur.jpg
 create mode 100644 pict/file_h_cre_link.jpg
 create mode 100644 pict/file_h_del_cur.jpg
 create mode 100644 pict/file_h_del_link.jpg
 create mode 100644 pict/file_h_gid_cur.jpg
 create mode 100644 pict/file_h_gid_link.jpg
 create mode 100644 pict/file_h_meta_cur.jpg
 create mode 100644 pict/file_h_meta_link.jpg
 create mode 100644 pict/file_h_mod_cur.jpg
 create mode 100644 pict/file_h_mod_link.jpg
 create mode 100644 pict/file_h_nam_cur.jpg
 create mode 100644 pict/file_h_nam_link.jpg
 create mode 100644 pict/file_h_siz_cur.jpg
 create mode 100644 pict/file_h_siz_link.jpg
 create mode 100644 pict/file_h_uid_cur.jpg
 create mode 100644 pict/file_h_uid_link.jpg
 create mode 100644 pict/file_h_wr_cur.jpg
 create mode 100644 pict/file_h_wr_link.jpg
 create mode 100644 pict/hashdb_h_alert.jpg
 create mode 100644 pict/hashdb_h_ig.jpg
 create mode 100644 pict/hashdb_h_nsrl.jpg
 create mode 100644 pict/int_b_calc.jpg
 create mode 100644 pict/int_b_valid.jpg
 create mode 100644 pict/int_h_data.jpg
 create mode 100644 pict/int_h_img.jpg
 create mode 100644 pict/int_h_str.jpg
 create mode 100644 pict/int_h_tl.jpg
 create mode 100644 pict/int_h_unalloc.jpg
 create mode 100644 pict/logo.jpg
 create mode 100644 pict/main_t_dat_cur.jpg
 create mode 100644 pict/main_t_dat_link.jpg
 create mode 100644 pict/main_t_fil_cur.jpg
 create mode 100644 pict/main_t_fil_link.jpg
 create mode 100644 pict/main_t_fil_org.jpg
 create mode 100644 pict/main_t_ftype_cur.jpg
 create mode 100644 pict/main_t_ftype_link.jpg
 create mode 100644 pict/main_t_ftype_org.jpg
 create mode 100644 pict/main_t_img_cur.jpg
 create mode 100644 pict/main_t_img_link.jpg
 create mode 100644 pict/main_t_img_org.jpg
 create mode 100644 pict/main_t_met_cur.jpg
 create mode 100644 pict/main_t_met_link.jpg
 create mode 100644 pict/main_t_met_org.jpg
 create mode 100644 pict/main_t_srch_cur.jpg
 create mode 100644 pict/main_t_srch_link.jpg
 create mode 100644 pict/menu_b_add.jpg
 create mode 100644 pict/menu_b_analyze.jpg
 create mode 100644 pict/menu_b_back.jpg
 create mode 100644 pict/menu_b_cancel.jpg
 create mode 100644 pict/menu_b_ccls.jpg
 create mode 100644 pict/menu_b_close.jpg
 create mode 100644 pict/menu_b_cnew.jpg
 create mode 100644 pict/menu_b_copen.jpg
 create mode 100644 pict/menu_b_fs.jpg
 create mode 100644 pict/menu_b_hashdb.jpg
 create mode 100644 pict/menu_b_hcls.jpg
 create mode 100644 pict/menu_b_help.jpg
 create mode 100644 pict/menu_b_hnew.jpg
 create mode 100644 pict/menu_b_ifnew.jpg
 create mode 100644 pict/menu_b_inew.jpg
 create mode 100644 pict/menu_b_int.jpg
 create mode 100644 pict/menu_b_menu.jpg
 create mode 100644 pict/menu_b_next.jpg
 create mode 100644 pict/menu_b_note.jpg
 create mode 100644 pict/menu_b_ok.jpg
 create mode 100644 pict/menu_b_ref.jpg
 create mode 100644 pict/menu_b_rem.jpg
 create mode 100644 pict/menu_b_seq.jpg
 create mode 100644 pict/menu_b_tl.jpg
 create mode 100644 pict/menu_h_cdet.jpg
 create mode 100644 pict/menu_h_cnew.jpg
 create mode 100644 pict/menu_h_hdet.jpg
 create mode 100644 pict/menu_h_hnew.jpg
 create mode 100644 pict/menu_h_idet.jpg
 create mode 100644 pict/menu_h_inew.jpg
 create mode 100644 pict/menu_t_cg_cur.jpg
 create mode 100644 pict/menu_t_cg_link.jpg
 create mode 100644 pict/menu_t_cg_org.jpg
 create mode 100644 pict/menu_t_hg_cur.jpg
 create mode 100644 pict/menu_t_hg_link.jpg
 create mode 100644 pict/menu_t_hg_org.jpg
 create mode 100644 pict/menu_t_hm_cur.jpg
 create mode 100644 pict/menu_t_hm_link.jpg
 create mode 100644 pict/menu_t_hm_org.jpg
 create mode 100644 pict/sanit_b_norm.jpg
 create mode 100644 pict/sanit_b_san.jpg
 create mode 100644 pict/sanitized.jpg
 create mode 100644 pict/srch_b_lorig.jpg
 create mode 100644 pict/srch_b_lun.jpg
 create mode 100644 pict/srch_b_str.jpg
 create mode 100644 pict/srch_b_un.jpg
 create mode 100644 pict/tab_close.jpg
 create mode 100644 pict/tab_help.jpg
 create mode 100644 pict/tl_t_data_cur.jpg
 create mode 100644 pict/tl_t_data_link.jpg
 create mode 100644 pict/tl_t_notes_link.jpg
 create mode 100644 pict/tl_t_notes_org.jpg
 create mode 100644 pict/tl_t_tl_cur.jpg
 create mode 100644 pict/tl_t_tl_link.jpg
 create mode 100644 pict/tl_t_view_cur.jpg
 create mode 100644 pict/tl_t_view_link.jpg
 create mode 100644 xcode/autopsy.xcodeproj/project.pbxproj

diff --git a/NEWS.txt b/CHANGES.txt
similarity index 100%
rename from NEWS.txt
rename to CHANGES.txt
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000000..5b6e7c66c2
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 0000000000..ef406a4845
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,39 @@
+                    Autopsy Forensic Browser
+                http://www.sleuthkit.org/autopsy
+
+              Brian Carrier [carrier@sleuthkit.org]
+                     Last Update: March 2010
+
+
+Installation 
+-----------------------------------------------------------------------------
+1. Install The Sleuth Kit (see README for download locations).   This
+   includes doing a 'make install' so that the executables and files
+   are installed in a single directory.  Note that this does not 
+   currently work natively on Windows.  It will work using Cygwin, but
+   you must install and build The Sleuth Kit in Cygwin and not use the
+   Win32 executables that are available on the sleuthkit.org website.
+
+2. Untar the Autopsy file. 
+
+3. Run 'make'.  It will try to locate the grep and strings utilities.
+   If any are not found, it will prompt you for the location.  It will
+   also search for the TSK installation. 
+
+4. The install script will ask if you have the NIST National Software
+   Reference Library (NSRL).  If you do, you will need to enter the
+   path of it.  The NSRL is available from www.nsrl.nist.gov.
+   
+5. You will be prompted for the Evidence Locker location.  This is the
+   base directory where all cases will be stored.  You must create this
+   directory on your own.  
+
+
+Live Analysis
+------------------------------------------------------------------------------
+Type 'make live' or run the 'make-live-cd' script to build the 'live-cd'
+directory.  The 'live-cd' directory can be burned to a CD.
+
+------------------------------------------------------------------------------
+Brian Carrier [carrier@sleuthkit.org]
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000..3a6334c196
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
+all:
+	@sh ./configure
+
+conf.pl:
+	@sh ./configure
+
+live: conf.pl
+	./make-live-cd
+
+indent:
+	cd lib; perltidy -b *.pm *.pl
+	cd base; perltidy -b autopsy.base
+
+clean:
+	rm -f ./autopsy
+	rm -f ./make-live-cd
+	rm -f ./conf.pl
+	rm -f ./config.tmp
+	rm -f ./config2.tmp
+	rm -rf ./live-cd/
+	rm -f ./lib/*.bak
+	rm -f ./base/*.bak
+	find . -name ".DS_Store" | xargs rm -f
+	find . -type f -perm +g+x,o+x,u+x | xargs  chmod -x
+	grep "curtskver=" ./configure
+	grep "VER" ./lib/define.pl
+	find . -name ".*" | grep -v perltidy
+
+release:
+	find . -name "CVS" | xargs rm -rf
diff --git a/README-LIVE.txt b/README-LIVE.txt
new file mode 100644
index 0000000000..df1aaabdc6
--- /dev/null
+++ b/README-LIVE.txt
@@ -0,0 +1,119 @@
+                     Autopsy Forensic Browser
+                 http://www.sleuthkit.org/autopsy
+
+                        Live Analysis Mode
+
+                   Last Updated:  January 2005
+
+
+What is Live Analysis?
+--------------------------------------------------------------------
+Live analysis is, in my mind, an investigation that occurs using
+the software resources of the suspect system.  An example scenario
+of this is when a suspect system is found running, a CD is placed
+into it, and commands are run.  If the suspect system is powered
+down and booted from a bootable Linux CD (or similar), then the
+investigation is a dead analysis.
+
+This is most commonly done when investigating a server or other
+computer that is suspected of being compromised, but verification
+is needed before it can be powered down.  Using The Sleuth Kit and
+Autopsy will prevent the access times on individual files from being
+updated (although the raw device's A-time will be) and can bypass
+most rootkits that hide files and directories.
+
+
+What are the Issues with Live Analysis?
+--------------------------------------------------------------------
+Live analysis is not ideal because you are relying on the suspect
+system, which can lie, cheat, and steal.  In addition to the potential
+of getting false information from the operating system you will
+also overwrite memory and maybe swap space during the investigation.
+
+If you are interested in examining the memory of the system, you
+should probably acquire that before you begin a live analysis.
+
+An issue with doing live analysis with Autopsy is that it requires
+Perl, which is a large program and will likely need to depend on
+libraries and other files on the suspect system.
+
+
+How do I make a CD with Autopsy on it?
+--------------------------------------------------------------------
+
+You will want to have a trusted CD for a live analysis, and autopsy
+makes that fairly easy.  Compile autopsy as you would for a normal
+dead analysis installation.  Then execute 'make live' in Autopsy.
+This script will make a 'live-cd' sub-directory in the autopsy directory,
+which contains a copy of autopsy and copies of TSK executables, grep,
+strings, perl etc:
+
+    # make live
+    Making base directory (./live-cd/)
+    Copying executables
+    Copying autopsy files
+    Creating configuration file using existing settings
+
+Try the 'make static' with TSK to see if you can make static
+executables for your platform.  
+
+The 'live-cd' directory has a 'bin' directory where additional
+executables can be copied to and then the whole directory can be
+burned to a CD.
+
+
+How Do I Use the CD?
+--------------------------------------------------------------------
+
+After the CD has been created and there is a system suspected of
+being compromised, then it is time to take advantage of the new
+features.  There are two scenarios for live analysis.  The first
+scenario uses a network share from a trusted system that you can
+write to.  In this case, autopsy is run as normal and you specify
+the evidence locker directory as the mounted disk.  The evidence
+locker is specified with '-d':
+
+    # ./autopsy -d /mnt/ev_lock 10.1.32.123
+
+The above would start autopsy, use '/mnt/ev_lock/' as the evidence
+locker and would allow connections from 10.1.32.123 (where the
+investigator would connect from using an HTML browser).  Remember that
+we do not want to write to the suspect system, so we should only use
+a network share and not a local directory in this scenario.
+
+The second scenario does not use an evidence locker and does not
+intentionally write any data to disk.  This scenario does not need
+the network share and each of the devices (or partitions) that will
+be analyzed are specified on the command line using the '-i' flags.
+The '-i' flag requires three arguments: the device, the file system
+type, and the mounting point.  For example, to examine the '/dev/hda5'
+and '/dev/hda8' partitions on a Linux system, the following could
+be used:
+
+    # ./autopsy -i /dev/hda5 linux-ext3 / -i /dev/hda8 linux-ext3 /usr/ \
+    10.1.32.123
+
+The file system type must be one of the types that are supported
+by TSK.  The remote IP address must also be given, otherwise you
+will have to use a browser on the suspect system and that will write
+data to the disk.
+
+When you use the '-i' flag, then autopsy will start in the 'Host
+Manager' view where you can select the image that you want to
+analyze.  You will skip the case and host configuration.  The default
+case name will be 'live', the default host name is 'local', and the
+default investigator name is 'unknown'.
+
+
+Additional Information
+--------------------------------------------------------------------
+I wrote a more detailed explanation of the live analysis mode of
+Autopsy version 2.00 in the 13th issue of The Sleuth Kit Informer.
+Some of this document is taken from the Informer issue.
+
+    http://www.sleuthkit.org/informer/sleuthkit-informer-13.html
+
+
+--------------------------------------------------------------------
+Copyright (c) 2004 by Brian Carrier.  All Rights Reserved
+Brian Carrier [carrier <at> sleuthkit <dot> org]
diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 0000000000..d8a262840f
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,58 @@
+Remove HFS check in autopsy.base when HFS support is standard.
+
+Look into adding the unallocated partiion space when an image is added.
+Look into integrating clamshell or other AV
+
+There is an error when viewing the event sequencer notes about
+initialized in "ne".
+
+test date search
+
+Add SHA-1 to more places (images, lookups etc.)
+
+Get "Can't ignore signal CHLD, forcing to default." message with
+file type sorting (BUG: 919829).
+
+Figure out details around having Perl on the live analysis CD.
+(BUG: 919831)
+
+
+-------------------- FILE MODE ----------------------------
+- Make a file system depend seperator for / or \
+
+- check for tar during install
+  - List contents like HTML does now
+
+--------------------- SEARCH -----------------------------
+- new mode where searching is done on output of 'icat' of allocated
+  inodes
+
+- Bug: if the string that matches a keyword starts with spaces, then 
+  the 'index' function returns the idx to the start of the spaces and not
+  the substring.  (BUG 842858)
+
+--------------------- TIMELINE -----------------------------
+
+
+--------------------- LOGGING -----------------------------
+- New Report Creation:
+
+- Add pulldown in notes for common things:
+  - New MD5 / SHA-1
+  - Part of rootkit
+  - Suspected child porn
+  - known child porn
+
+--------------------- SORTER -----------------------------
+- Should sorter be at the host level instead of image, with output
+files appended to each other?
+
+- Allow one to browse output files
+
+--------------------- GENERAL -----------------------------
+- Add foremost
+- link in meta data to list just unallocated / used
+- Make data bases updatable in the host details view
+- Option to mount images in loopback when it is a Linux system
+- read config files in autopsy itself and not everytime ...
+- Make a way to kill intensive processes (searching, fls)
diff --git a/base/.perltidyrc b/base/.perltidyrc
new file mode 100755
index 0000000000..f1f2e71a01
--- /dev/null
+++ b/base/.perltidyrc
@@ -0,0 +1,5 @@
+-i=4	# indent of 4
+-pt=2	# paren tightness
+-sbt=2	# square paren tightness
+-bt=2	# curly paren tightness
+-nsfs	# no space after semi in for loop
diff --git a/base/autopsy.base b/base/autopsy.base
new file mode 100644
index 0000000000..3b3bbdc7f2
--- /dev/null
+++ b/base/autopsy.base
@@ -0,0 +1,879 @@
+#
+# autopsy gui server
+# Autopsy Forensic Browser
+#
+#
+# This file requires The Sleuth Kit
+#    www.sleuthkit.org
+#
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# refer to Security Considerations in README for a description of the
+# cookie authentication
+#
+
+require 5.008;
+
+use strict;
+use Socket;
+
+use Main;
+use Print;
+require Fs;
+require Caseman;
+
+require 'conf.pl';
+require 'lib/define.pl';
+
+# Import variables from conf.pl
+use vars '$LOCKDIR', '$INSTALLDIR', '$PICTDIR';
+use vars '$SANITIZE_TAG', '$SANITIZE_PICT';
+use vars '$USE_STIMEOUT', '$STIMEOUT', '$CTIMEOUT';
+use vars '$SAVE_COOKIE',  '$GREP_EXE', '$FILE_EXE';
+use vars '$NSRLDB';
+
+# Default port
+my $port = 9999;
+
+# Default 'remote' host
+my $rema = 'localhost';
+
+$| = 1;
+
+$::LIVE      = 0;
+$::USE_NOTES = 1;
+$::USE_LOG   = 1;
+
+sub usage {
+    print
+"\n\nusage: $0 [-c] [-C] [-d evid_locker] [-i device filesystem mnt] [-p port] [remoteaddr]\n";
+    print "  -c: force a cookie in the URL\n";
+    print "  -C: force NO cookie in the URL\n";
+    print "  -d dir: specify the evidence locker directory\n";
+    print "  -i device filesystem mnt: Specify info for live analysis\n";
+    print "  -p port: specify the server port (default: $port)\n";
+    print "  remoteaddr: specify the host with the browser (default: $rema)\n";
+    exit 1;
+}
+
+my $cook_force = 0;
+
+my $vol_cnt = 0;
+
+# Were options given?
+while ((scalar(@ARGV) > 0) && ($ARGV[0] =~ /^-/)) {
+    my $f = shift;
+
+    # Evidence Locker
+    if ($f eq '-d') {
+        if (scalar(@ARGV) == 0) {
+            print "Missing Directory\n";
+            usage();
+        }
+
+        my $d = shift;
+
+        # We need to do this for the tainting
+        # We don't need to check for special characters in this case because
+        # all commands will be run with the same permissions as the
+        # original user.  We will check for the obvious ';' though
+        if ($d =~ /;/) {
+            print "Illegal argument\n";
+            exit(1);
+        }
+
+        # If the path is relative, autopsyfunc will get screwed up when
+        # this is run from a directory other than where autopsyfunc is
+        # so force full paths
+        elsif ($d !~ /^\//) {
+            print "The evidence locker must be full path (i.e. begin with /)\n";
+            exit(1);
+        }
+        elsif ($d =~ /(.*)/) {
+            $LOCKDIR = $1;
+        }
+    }
+
+    # Force no cookie
+    elsif ($f eq '-C') {
+        $::USE_COOKIE = 0;
+        $cook_force   = 1;
+    }
+
+    # force a cookie
+    elsif ($f eq '-c') {
+        $::USE_COOKIE = 1;
+        $cook_force   = 1;
+    }
+
+    elsif ($f eq '-i') {
+        $::LIVE        = 1;
+        $::USE_LOG     = 0;
+        $::USE_NOTES   = 0;
+        $::SAVE_COOKIE = 0;
+
+        if (scalar(@ARGV) < 3) {
+            print "Missing device, file system, and mount point arguments\n";
+            usage();
+        }
+
+        my $vol = "vol" . $vol_cnt;
+        $vol_cnt++;
+
+        my $dev = shift;
+        if ($dev =~ /($::REG_IMG_PATH)/) {
+            $dev = $1;
+        }
+        else {
+            print "invalid device: $dev\n";
+            usage();
+        }
+
+        unless ((-e "$dev") || (-l "$dev")) {
+            print "Device ($dev) not found\n";
+            usage();
+        }
+
+        my $fs = shift;
+        if ($fs =~ /($::REG_FTYPE)/) {
+            $fs = $1;
+        }
+        else {
+            print "invalid file system: $fs\n";
+            usage();
+        }
+        unless ((exists $Fs::root_meta{$fs})
+            && (defined $Fs::root_meta{$fs}))
+        {
+            print "File system not supported: $fs\n";
+            usage();
+        }
+        $Caseman::vol2ftype{$vol} = "$fs";
+
+        my $mnt = shift;
+        if ($mnt =~ /($::REG_MNT)/) {
+            $mnt = $1;
+        }
+        else {
+            print "invalid mount point: $mnt\n";
+            usage();
+        }
+        $Caseman::vol2mnt{$vol}   = "$mnt";
+        $Caseman::vol2cat{$vol}   = "part";
+        $Caseman::vol2itype{$vol} = "raw";
+        $Caseman::vol2start{$vol} = 0;
+        $Caseman::vol2end{$vol}   = 0;
+
+        # This makes me nervous ...
+        $Caseman::vol2par{$vol}   = $vol;
+        $Caseman::vol2path{$vol}  = "$dev";
+        $Caseman::vol2sname{$vol} = "$dev";
+    }
+
+    # Specify a different port
+    elsif ($f eq '-p') {
+        if (scalar(@ARGV) == 0) {
+            print "Missing port argument\n";
+            usage();
+        }
+
+        my $p = shift;
+        if ($p =~ /(\d+)/) {
+            $p = $1;
+        }
+        else {
+            print "invalid port: $p\n";
+            usage();
+        }
+        if (($p < 1) || ($p > 65535)) {
+            print "invalid port: $port\n";
+            usage();
+        }
+        $port = $p;
+    }
+
+    else {
+        print "Invalid flag: $f\n";
+        usage();
+    }
+}
+
+# remote address
+if (scalar(@ARGV) > 0) {
+    $rema = shift;
+}
+
+# Get remote address
+my @acl_addr;    # Array of host addresses
+my $hn;          # Host name
+my $tmp;
+if ($rema =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/) {
+    $acl_addr[0] = pack('C4', ($1, $2, $3, $4));
+    $hn = $rema;
+}
+else {
+    ($hn, $tmp, $tmp, $tmp, @acl_addr) = gethostbyname($rema);
+    unless (defined $tmp) {
+        print "Host not found: $rema\n";
+        usage();
+    }
+}
+
+# Determine the address that will be used to access this server
+my $lclhost;
+my @ta = unpack('C4', $acl_addr[0]);
+
+my $bindaddr;
+
+# If we are being accessed by localhost, we need that and not the hostname
+if (   ($ta[0] == 127)
+    && ($ta[1] == 0)
+    && ($ta[2] == 0)
+    && ($ta[3] == 1))
+{
+    $lclhost  = "localhost";
+    $bindaddr = $acl_addr[0];
+
+    # Force no cookie to be used unless we already set this value
+    # with arguments
+    $::USE_COOKIE = 0 unless ($cook_force == 1);
+}
+else {
+    $lclhost = `/bin/hostname`;
+    chop $lclhost;
+
+    $bindaddr = INADDR_ANY;
+
+    # Force a cookie to be used unless we already set this value
+    # with arguments
+    $::USE_COOKIE = 1 unless ($cook_force == 1);
+}
+
+# Verify the variables defined in the configuration files
+check_vars();
+
+# Remove the final '/' from TSKDIR if it exists
+$::TSKDIR = $1
+  if ($::TSKDIR =~ /(.*?)\/$/);
+
+#
+# Verify that all of the required executables exist
+#
+check_tools();
+
+
+
+# Currently, HFS is in beta and not enabled by default. 
+# Autopsy has been configured for it though, so disable it if
+# the user has not compiled support into TSK.  remove this when
+# HFS support is standard.
+# This redirects stderr to stdout so we can easily capture it
+my $out = `\'$::TSKDIR/fls\' -f list 2>&1`;
+unless ($out =~ /hfs/) {
+    for (my $i = 0; $i < @Fs::types; $i++) {
+        if ($Fs::types[$i] eq "hfs") {
+            $Fs::types[$i] = "";
+            last;
+        }
+    }
+}
+
+
+
+# remove environment stuff that we don't need and that could be insecure
+# We allow basic bin directories for CYGWIN though, since they are
+# required for the CYGWIN dlls
+my $UNAME = "";
+if (-e "/bin/uname") {
+    $UNAME = "/bin/uname";
+}
+elsif (-e "/usr/bin/uname") {
+    $UNAME = "/usr/bin/uname";
+}
+
+my $ispathclear = 1;
+if (($UNAME ne "") && (`$UNAME` =~ /^CYGWIN/)) {
+    $ENV{PATH} = '/bin:/usr/bin:/usr/local/bin';
+    $ispathclear = 0;
+}
+else {
+    $ENV{PATH} = '';
+}
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
+
+my $date = localtime;
+
+if ($::LIVE == 0) {
+
+    # Remove the final '/' if it exists
+    $LOCKDIR = $1
+      if ($LOCKDIR =~ /(.*?)\/$/);
+}
+
+# Setup socket
+my $proto = getprotobyname('tcp');
+socket(Server, PF_INET, SOCK_STREAM, $proto)
+  or die "Error creating network socket: $!";
+
+setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, 1)
+  or die "Error setting network socket options (reuse): $!";
+
+setsockopt(Server, SOL_SOCKET, SO_KEEPALIVE, 1)
+  or die "Error setting network socket options (keep alive): $!";
+
+bind(Server, sockaddr_in($port, $bindaddr))
+  or die "Error binding to port $port (is Autopsy already running?): $!";
+
+listen(Server, SOMAXCONN)
+  or die "Error listening to socket for connections: $!";
+
+my $magic;    # magic authentication cookie
+my $cook_file;
+my $cookie_url = "";
+
+if ($::USE_COOKIE == 1) {
+
+    # Try for a real random device, or use rand if all else fails
+    if (-e "/dev/urandom") {
+        my $r;
+        open RAND, "</dev/urandom" or die "can not open /dev/urandom";
+        read RAND, $r, 4;
+        $magic = unpack "I", $r;
+        read RAND, $r, 4;
+        $magic .= unpack "I", $r;
+        close RAND;
+    }
+    else {
+        $magic = int(rand 0xffffffff) . int(rand 0xffffffff);
+    }
+
+    $cookie_url = "$magic/";
+
+    # Save to file in case the stdout gets overwritten
+    if ($SAVE_COOKIE == 1) {
+        $cook_file = "$LOCKDIR/.$port.cookie";
+        if (open COOK, ">$cook_file") {
+            chmod 0600, "$cook_file";
+            print COOK "$magic\n";
+            close COOK;
+        }
+        else {
+            print "WARNING: Cannot open file to save cookie in ($cook_file)";
+        }
+    }
+}
+
+print <<EOF;
+
+============================================================================
+
+                       Autopsy Forensic Browser 
+                  http://www.sleuthkit.org/autopsy/
+                             ver $::VER 
+
+============================================================================
+EOF
+
+if ($::LIVE == 0) {
+    print "Evidence Locker: $LOCKDIR\n";
+}
+else {
+    print "Live Analysis Mode\n";
+}
+if ($ispathclear == 0) {
+    print
+"\nCYGWIN Mode (Internal path contains /bin, /usr/bin, and /usr/local/bin)\n\n";
+}
+
+print <<EOF2;
+Start Time: $date
+Remote Host: $rema
+Local Port: $port
+
+Open an HTML browser on the remote host and paste this URL in it:
+
+    http://$lclhost:${port}/${cookie_url}$::PROGNAME
+
+Keep this process running and use <ctrl-c> to exit
+EOF2
+
+Print::log_session_info("Starting session on port $port and $hn\n");
+
+# Set the server alarm
+$SIG{ALRM} = \&SIG_ALARM_SERVER;
+$SIG{INT}  = \&SIG_CLOSE;
+
+# setting this to ignore will automatically wait for children
+$SIG{CHLD} = 'IGNORE';
+
+# Wait for Connections
+while (1) {
+
+    alarm($STIMEOUT) if ($USE_STIMEOUT == 1);
+
+    my $raddr = accept(CLIENT, Server);
+    next unless ($raddr);
+    my ($rport, $riaddr) = sockaddr_in($raddr);
+
+    die "Error creating child" unless (defined(my $pid = fork()));
+
+    if (0 == $pid) {
+        open(STDOUT, ">&CLIENT") or die "Can't dup client to stdout";
+
+        # open(STDERR, ">&CLIENT") or die "Can't dup client to stdout";
+        open(STDIN, "<&CLIENT") or die "Can't dup client to stdin";
+        $| = 1;
+
+        my @rip = unpack('C4', $riaddr);
+
+        # Check ACL
+        foreach $tmp (@acl_addr) {
+            if ($tmp eq $riaddr) {
+                spawn_cli($riaddr);
+                close CLIENT;
+                exit 0;
+            }
+        }
+
+        forbid("$rip[0].$rip[1].$rip[2].$rip[3]");
+        Print::log_session_info("ERROR: Unauthorized Connection from: "
+              . "$rip[0].$rip[1].$rip[2].$rip[3]\n");
+
+        close CLIENT;
+        exit 1;
+    }
+    else {
+        close CLIENT;
+    }
+}
+
+# Error messages
+sub forbid {
+    my $ip = shift;
+    $ip = "" unless defined ($ip);
+
+    print "HTTP/1.0 403 Forbidden$::HTTP_NL"
+      . "Content-type: text/html$::HTTP_NL$::HTTP_NL"
+      . "<html><center>\n"
+      . "<h2>Access Denied</h2>\n"
+      . "<h3>Your connection from: $ip has been logged</h3>\n"
+      . "</center></html>$::HTTP_NL$::HTTP_NL$::HTTP_NL";
+
+    return;
+}
+
+sub bad_req {
+    print "HTTP/1.0 404 Bad Request$::HTTP_NL"
+      . "Content-type: text/html$::HTTP_NL$::HTTP_NL"
+      . "<html><body><center>\n"
+      . "<h2>Invalid URL<br><tt>"
+      . shift()
+      . "</tt></h2>\n"
+      . "</center></body></html>"
+      . "$::HTTP_NL$::HTTP_NL$::HTTP_NL";
+
+    return;
+}
+
+# Alarm Functions
+sub SIG_ALARM_CLIENT {
+    Print::log_session_info("Connection timed out\n");
+    close CLIENT;
+    exit 1;
+}
+
+sub SIG_ALARM_SERVER {
+    print "Server Timeout ($STIMEOUT seconds), Exiting\n";
+    Print::log_session_info("Server Timeout ($STIMEOUT seconds), Exiting\n");
+    exit 0;
+}
+
+# Close the system down when Control-C is given
+sub SIG_CLOSE {
+
+    # delete the cookie file
+    if (($::USE_COOKIE == 1) && ($SAVE_COOKIE == 1)) {
+        unlink "$cook_file";
+    }
+
+    print "End Time: " . localtime() . "\n";
+    Print::log_session_info("Ending session on port $port and $hn\n");
+    exit 0;
+}
+
+# Pass the remote IP address as the argument for logging
+sub spawn_cli {
+
+    # Set timeout for 10 seconds if we dont get any input
+    alarm($CTIMEOUT);
+    $SIG{ALRM} = \&SIG_ALARM_CLIENT;
+
+    while (<STDIN>) {
+
+        last if (/^\s+$/);
+
+        if (/^GET \/+(\S*)\s?HTTP/) {
+            my $url = $1;
+            my $script;
+            my $args;
+
+            if (/\x0d\x0a$/) {
+                $::HTTP_NL = "\x0d\x0a";
+            }
+            else {
+                $::HTTP_NL = "\x0a";
+            }
+
+            # Magic Cookie
+            # If we are using cookies, then the url should be:
+            # cookie/autopsy?var=val ...
+            if ($::USE_COOKIE == 1) {
+
+                if (   ($url =~ /^(\d+)\/+([\w\.\/]+)(?:\?(.*))?$/)
+                    && ($1 == $magic))
+                {
+                    $script = $2;
+                    $args   = $3;
+                }
+                else {
+                    my @rip = unpack('C4', shift());
+                    Print::log_session_info("ERROR: Incorrect Cookie from: "
+                          . "$rip[0].$rip[1].$rip[2].$rip[3]\n");
+                    forbid("$rip[0].$rip[1].$rip[2].$rip[3]");
+                    return 1;
+                }
+            }
+
+            # if we aren't using cookies, then it should be:
+            # autopsy?var=val ...
+            else {
+                if ($url =~ /^\/?([\w\.\/]+)(?:\?(.*))?$/) {
+                    $script = $1;
+                    $args   = $2;
+                }
+                else {
+                    bad_req($url);
+                    return 1;
+                }
+            }
+
+            if ($script eq $::PROGNAME) {
+                $args = "" unless (defined $args);
+
+                # Turn timer off
+                alarm(0);
+
+                 my $has_ref = 0;
+                 while (<STDIN>) {
+                     last if (/^\s+$/);
+                     if (/^Referer: /) {
+                         $has_ref = 1;
+                         last;
+                     }
+                 }
+     
+                 if (($has_ref == 0) && ($args ne "")) {
+                     Print::log_session_info("ERROR: Missing referer value");
+                     forbid();
+                     return 1;
+                 }
+
+                # Print status
+                print "HTTP/1.0 200 OK$::HTTP_NL";
+                ::main($args);
+            }
+            elsif ($script eq "global.css") {
+                show_file($script);
+            }
+
+            # Display the sanitized picture or reference error
+            elsif ($script eq $::SANITIZE_TAG) {
+                Appview::sanitize_pict($args);
+                return 1;
+            }
+
+            # Display a picture or help file
+            elsif (($script =~ /^(pict\/[\w\.\/]+)/)
+                || ($script =~ /^(help\/[\w\.\/]+)/))
+            {
+                show_file($1);
+            }
+            elsif ($script eq 'about') {
+                about();
+            }
+
+            # I'm not sure why this is needed, but there are reqs for it
+            elsif ($script eq 'favicon.ico') {
+                show_file("pict/favicon.ico");
+            }
+            else {
+                bad_req($url);
+                Print::log_session_info("Unknown function: $script\n");
+                return 1;
+            }
+            return 0;
+        }
+    }    # end of while (<>)
+
+}    # end of spawn_cli
+
+# Print the contents of a local picture or help file
+sub show_file {
+    my $file = "$INSTALLDIR/" . shift;
+
+    if (-e "$file") {
+        print "HTTP/1.0 200 OK$::HTTP_NL";
+
+        open FILE, "<$file"
+          or die "can not open $file";
+
+        if ($file =~ /\.css$/i) {
+            print "Content-type: text/css$::HTTP_NL$::HTTP_NL";
+        }
+        elsif ($file =~ /\.jpg$/i) {
+            print "Content-type: image/jpeg$::HTTP_NL$::HTTP_NL";
+        }
+        elsif ($file =~ /\.gif$/i) {
+            print "Content-type: image/gif$::HTTP_NL$::HTTP_NL";
+        }
+        elsif ($file =~ /\.ico$/i) {
+            print "Content-type: image/ico$::HTTP_NL$::HTTP_NL";
+        }
+        elsif ($file =~ /\.html$/i) {
+            print "Content-type: text/html$::HTTP_NL$::HTTP_NL";
+        }
+        else {
+            print "HTTP/1.0 404 Bad Request$::HTTP_NL"
+              . "Content-type: text/html$::HTTP_NL$::HTTP_NL"
+              . "<html>\n"
+              . "<head><title>Error</title></head>\n"
+              . "<h2><center>Unknown Extension</h2>\n"
+              . "</center></html>$::HTTP_NL$::HTTP_NL$::HTTP_NL";
+            exit(1);
+        }
+
+        while (<FILE>) {
+            print "$_";
+        }
+        close(FILE);
+
+        print "$::HTTP_NL$::HTTP_NL";
+    }
+    else {
+        print "HTTP/1.0 404 Bad Request$::HTTP_NL"
+          . "Content-type: text/html$::HTTP_NL$::HTTP_NL"
+          . "<html>\n"
+          . "<head><title>Error</title></head>\n"
+          . "<h2><center>File Not Found</h2>"
+          . "</center></html>$::HTTP_NL$::HTTP_NL$::HTTP_NL";
+        exit(1);
+    }
+
+    return;
+}
+
+sub about {
+
+    print "HTTP/1.0 200 OK$::HTTP_NL"
+      . "Content-type: text/html$::HTTP_NL$::HTTP_NL";
+
+    my $tskver = ::get_tskver();
+
+    print <<EOF;
+
+<html>
+<head><title>About Autopsy</title></head>
+
+<body BGCOLOR=#CCCC99>
+
+<center><h2>About Autopsy</h2>
+  <br>
+  <img src=\"pict/logo.jpg\" alt=\"Logo\">
+  <br><br>
+  <b>Version</b>: $::VER
+  <br>
+  <tt><a href="http://www.sleuthkit.org/autopsy/">http://www.sleuthkit.org/autopsy/</a></tt>
+  <br>
+  <tt><a href="http://www.sleuthkit.org/informer/">http://www.sleuthkit.org/informer/</a></tt>
+</center>
+
+
+<h3>Credits</h3>
+<UL>
+  <LI>Code Development: Brian Carrier (carrier at sleuthkit dot org)
+  <LI>Interface Assistance: Samir Kapuria
+  <LI>Mascot: Hash the Hound
+</UL>
+
+<h3>Configuration</h3>
+<b>The Sleuth Kit</b>:<br> 
+&nbsp;&nbsp;URL: <a href="http://www.sleuthkit.org/sleuthkit/">
+  <tt>http://www.sleuthkit.org/sleuthkit/</tt></a><br> 
+&nbsp;&nbsp;Installation Location: <tt>$::TSKDIR</tt><br>
+&nbsp;&nbsp;Version: $tskver<br>
+<b>Evidence Locker</b>: <tt>$LOCKDIR</tt><br>
+<b>grep</b>: <tt>$GREP_EXE</tt><br>
+<b>file</b>: <tt>$FILE_EXE</tt><br>
+<b><a href="http://www.nsrl.nist.gov/">NIST NSRL</a></b>: <tt>$NSRLDB</tt><br>
+
+</body></html>
+
+EOF
+    return 0;
+}
+
+### Check that the required tools are there
+sub check_tools {
+
+    # Sleuth Kit execs
+    unless (-x $::TSKDIR . "/icat") {
+        print "ERROR: Sleuth Kit icat executable missing: $::TSKDIR\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/istat") {
+        print "ERROR: Sleuth Kit istat executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/ifind") {
+        print "ERROR: Sleuth Kit ifind executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/ils") {
+        print "ERROR: Sleuth Kit ils executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/fls") {
+        print "ERROR: Sleuth Kit fls executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/ffind") {
+        print "ERROR: Sleuth Kit ffind executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/blkcat") {
+        print "ERROR: Sleuth Kit blkcat executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/blkcalc") {
+        print "ERROR: Sleuth Kit blkcalc executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/blkls") {
+        print "ERROR: Sleuth Kit blkls executable missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/img_stat") {
+        print "ERROR: Sleuth Kit img_stat executable missing\n";
+        exit(1);
+    }
+    unless (defined $::FILE_EXE) {
+        print "ERROR: File executable location not defined in config file\n";
+        exit(1);
+    }
+    unless (-x "$::FILE_EXE") {
+        print "ERROR: File executable ($::FILE_EXE) missing\n";
+        exit(1);
+    }
+    unless (-x $::TSKDIR . "/fsstat") {
+        print "ERROR: Sleuth Kit fsstat executable missing\n";
+        exit(1);
+    }
+    unless (defined $::MD5_EXE) {
+        print "ERROR: MD5 executable location not defined in config file\n";
+        exit(1);
+    }
+    unless (-x "$::MD5_EXE") {
+        print "ERROR: md5 executable ($::MD5_EXE) missing\n";
+        exit(1);
+    }
+    if ($::SHA1_EXE ne "") {
+        unless (-x "$::SHA1_EXE") {
+            print "ERROR: sha1 executable missing\n";
+            exit(1);
+        }
+    }
+    unless (-x $::TSKDIR . "/srch_strings") {
+        print "ERROR: Sleuth Kit srch_strings executable missing\n";
+        exit(1);
+    }
+
+    if ($::LIVE == 0) {
+        unless (-x $::TSKDIR . "/sorter") {
+            print "ERROR: Sleuth Kit sorter executable missing\n";
+            exit(1);
+        }
+        unless (-x $::TSKDIR . "/hfind") {
+            print "ERROR: Sleuth Kit hfind executable missing\n";
+            print
+              "  You likely have an old version of The Sleuth Kit or TASK\n";
+            exit(1);
+        }
+    }
+
+    unless (-x "$GREP_EXE") {
+        print "ERROR: grep executable missing\n";
+        exit(1);
+    }
+}
+
+# check values that should be defined in the configuration files
+# This will show incomplete installations
+sub check_vars {
+    unless ((defined $::TSKDIR) && ($::TSKDIR ne "")) {
+        print "ERROR: TSKDIR variable not set in configuration file\n";
+        print "  This could been caused by an incomplete installation\n";
+        exit(1);
+    }
+
+    unless (-d "$::TSKDIR") {
+        print "Invalid Sleuth Kit binary directory: $::TSKDIR\n";
+        exit(1);
+    }
+
+    return if ($::LIVE == 1);
+
+    # Verify The evidence locker directory
+    unless ((defined $LOCKDIR) && ($LOCKDIR ne "")) {
+        print "ERROR: LOCKDIR variable not set in configuration file\n";
+        print "  This could been caused by an incomplete installation\n";
+        exit(1);
+    }
+
+    unless (-d "$LOCKDIR") {
+        print "Invalid evidence locker directory: $LOCKDIR\n";
+        exit(1);
+    }
+}
diff --git a/base/make-live-cd.base b/base/make-live-cd.base
new file mode 100644
index 0000000000..08c66e9f37
--- /dev/null
+++ b/base/make-live-cd.base
@@ -0,0 +1,153 @@
+#
+# This makes a directory ($CD) with the needed files to burn to
+# a CD for live analysis
+#
+# Current limitations are that Perl needs to be on the suspect system and
+# that it uses the untrusted Perl files.
+
+require 'conf.pl';
+use vars '$USE_STIMEOUT', '$STIMEOUT', '$CTIMEOUT', '$SAVE_COOKIE';
+use vars '$GREP_EXE', '$TSKDIR';
+
+
+my $CD = "./live-cd/";
+
+# Make the directories
+if (-d "$CD") {
+	print "Live CD directory already exists ($CD)\n";
+	print "Plese delete and run this again\n";
+	exit (1);
+}
+
+print "Making base directory ($CD)\n";
+die "Error making Live CD directory ($CD)"
+  unless (mkdir "$CD", 0775);
+
+die "Error making Live CD binaries directory ($CD)"
+  unless (mkdir "$CD/bin/", 0775);
+
+
+print "Copying executables\n";
+
+# Copy the executables
+die "Missing grep executable ($GREP_EXE)" 
+  unless (-x "$GREP_EXE");
+`cp '$GREP_EXE' '$CD/bin/grep'`; 
+die "Error copying grep executable" 
+  unless (-x "$CD/bin/grep");
+
+
+die "Missing MD5 executable ($::MD5_EXE)"
+  unless (-x "$::MD5_EXE");
+`cp '$::MD5_EXE' '$CD/bin/md5sum'`; 
+die "Error copying MD5 executable" 
+  unless (-x "$CD/bin/md5sum");
+
+# Sleuth Kit Binaries
+die "Missing Sleuth Kit Directory ($TSKDIR)"
+  unless (-d "$TSKDIR");
+
+foreach my $exec ("blkcalc", "blkcat", "blkls", "blkstat", "ffind", "fls", "fsstat", 
+  "icat", "ifind", "ils", "istat", "srch_strings", "img_stat", "mmls") {
+
+	die "Missing Sleuth Kit executable ($exec)" 
+	  unless (-x "$TSKDIR/$exec");
+
+	`cp '$TSKDIR/$exec' '$CD/bin/$exec'`; 
+
+	die "Error copying Sleuth Kit executable ($exec)" 
+	  unless (-x "$CD/bin/$exec");
+}
+
+
+# Make a fake file
+open FILE, ">$CD/bin/file" or die ("Error creating Live CD file exec");
+print FILE "#!./bin/perl\n";
+print FILE "print STDOUT \"File Type Not Supported During Live Analysis\n\";\n";
+close FILE;
+`chmod +x "$CD/bin/file"`;
+
+
+# Copy the autopsy directories
+print "Copying autopsy files\n";
+`cp -r help "$CD"`;
+`cp -r lib "$CD"`;
+`cp -r pict "$CD"`;
+
+
+# Get the path for Perl from the current autopsy
+open AUT, "<./autopsy" or die ("Error opening normal autopsy exec");
+my $perl;
+while (<AUT>) {		
+	$perl = $_;
+	last;
+}
+close AUT;
+
+if ($perl =~ /^#!(\S+)/) { 
+	$perl = $1;
+} else {
+	die "Error parsing Perl location from autopsy"
+}
+
+
+# Copy the perl exec
+# @@@ I'm not sure if just copying the bin is enough ...
+die "Missing Perl executable ($perl)" 
+  unless (-x "$perl");
+
+`cp '$perl' '$CD/bin/perl'`; 
+
+die "Error copying perl executable" 
+  unless (-x "$CD/bin/perl");
+
+
+# Make a new autopsy 
+open AUT, ">$CD/autopsy" or die ("Error opening Live CD autopsy exec");
+
+print AUT "#!./bin/perl -wT\n";
+print AUT "use lib '.';\n";
+print AUT "use lib './lib/';\n";
+
+
+open BASE, "<./base/autopsy.base" or die ("Error opening base autopsy");
+
+print AUT $_
+  while (<BASE>);
+
+close (AUT);
+close (BASE);
+
+`chmod +x "$CD/autopsy"`;
+
+
+print "Creating configuration file using existing settings\n";
+
+# Make the configuration file
+open CONF, ">$CD/conf.pl" or die ("Error opening Live CD Config file");
+
+print CONF "# Configuration file for Live CD version of Autopsy\n";
+print CONF "# http://www.sleuthkit.org/autopsy\n";
+print CONF "# Created on ".localtime()."\n\n";
+
+# Variables
+print CONF "\$USE_STIMEOUT = $USE_STIMEOUT;\n";
+print CONF "\$STIMEOUT = $STIMEOUT;\n";
+print CONF "\$CTIMEOUT = $CTIMEOUT;\n";
+print CONF "\$SAVE_COOKIE = $SAVE_COOKIE;\n";
+
+print CONF "\n";
+print CONF "\$INSTALLDIR = './';\n";
+print CONF "\$NSRLDB = '';\n";
+print CONF "\$LOCKDIR = './read-only-live-version/';\n";
+
+print CONF "\n";
+print CONF "# System Utilities\n";
+print CONF "\$GREP_EXE = './bin/grep';\n";
+print CONF "\$FILE_EXE = './bin/file';\n";
+print CONF "\$MD5_EXE = './bin/md5sum';\n";
+print CONF "\$TSKDIR = './bin/';\n";
+
+close CONF;
+
+print "\n";
diff --git a/configure b/configure
new file mode 100755
index 0000000000..72d5c84f00
--- /dev/null
+++ b/configure
@@ -0,0 +1,475 @@
+#!/bin/sh
+
+# Minimum version of TSK that is required
+minver="3.1.0";
+
+# The last released version of TSK
+curtskver="3.1.1";
+
+# Configuration script for the Autopsy Forensic Browser
+#
+# Brian Carrier [carrier@sleuthkit.org]
+#
+# Copyright (c) 2003-2008 by Brian Carrier.  All rights reserved
+#
+# Copyright (c) 2001-2003 by Brian Carrier, @stake.  All rights reserved
+#
+# Copyright (c) 2001 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  
+##
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+# Directories to search in
+dirs='/usr/local/bin/ /usr/bin/ /usr/ccs/bin/ /bin/ /usr/ucb/bin/ /sbin/ /usr/sbin/ /usr/local/sbin/'
+
+
+echo ""
+echo "   Autopsy Forensic Browser Installation"
+echo ""
+
+
+
+#############################################################################
+# create conf.pl
+#############################################################################
+
+
+conf='conf.pl'
+
+rep=""
+if (test -f $conf) then
+  echo "A configuration file already exists, overwrite? (y/n):";
+  read rep;
+else
+  rep="y"
+fi
+
+if (test "$rep" = "y") then
+
+
+# First add the variables that are static
+#
+# DEFAULT USER SETTINGS
+#
+echo '# Autopsy configuration settings' > $conf
+echo '' >> $conf
+echo '# when set to 1, the server will stop after it receives no' >> $conf
+echo '# connections for STIMEOUT seconds. ' >> $conf
+echo '$USE_STIMEOUT = 0;' >> $conf
+echo '$STIMEOUT = 3600;'>> $conf    
+
+echo '' >> $conf
+echo '# number of seconds that child waits for input from client' >> $conf
+echo '$CTIMEOUT = 15;' >> $conf
+
+echo '' >> $conf
+echo '# set to 1 to save the cookie value in a file (for scripting)' >> $conf
+echo '$SAVE_COOKIE = 1;' >> $conf
+
+
+#############################################################################
+# INSTALLATION DIRECTORY
+#############################################################################
+echo '' >> $conf;
+echo \$INSTALLDIR = \'$PWD/\'\; >> $conf; 
+
+
+# Now add the variables that need user interaction
+
+#
+# FIND THE UTILITIES
+#
+echo '' >> $conf
+echo '' >> $conf
+echo '# System Utilities' >> $conf
+
+
+
+#
+# GREP
+#
+echo ''
+echo '---------------------------------------------------------------'
+echo ''
+found=0
+for d in $dirs 
+  do if (test -x ${d}grep) then
+    echo \$GREP_EXE = \'${d}grep\'\; >> $conf; 
+    echo "grep found: ${d}grep";
+    grepexe="${d}grep";
+    found=1; 
+    break; 
+  fi;
+done
+
+# Prompt if not found
+if (test $found -eq 0) then
+  echo 'ERROR: grep utility not found';
+  echo 'Enter location of executable:';
+  while (test 1 -eq 1) 
+    do read grepexe;
+    if (test -x "$grepexe") then
+	  echo \$GREP_EXE = \'$grepexe\'\; >> $conf; 
+      break;
+    else
+      echo 'grep was not found (try again):';
+    fi;
+  done
+fi
+
+
+#
+# FILE
+#
+found=0
+for d in $dirs 
+  do if (test -x ${d}file) then
+    echo \$FILE_EXE = \'${d}file\'\; >> $conf; 
+    echo "file found: ${d}file";
+    found=1; 
+    break; 
+  fi;
+done
+
+# Prompt if not found
+if (test $found -eq 0) then
+  echo 'ERROR: file utility not found';
+  echo 'Enter location of executable:';
+  while (test 1 -eq 1) 
+    do read fileexe;
+    if (test -x "$fileexe") then
+	  echo \$FILE_EXE = \'$filexe\'\; >> $conf; 
+      break;
+    else
+      echo 'file was not found (try again):';
+    fi;
+  done
+fi
+
+#
+# MD5
+#
+found=0
+for d in $dirs 
+  do if (test -x ${d}md5) then
+    echo \$MD5_EXE = \'${d}md5\'\; >> $conf; 
+    echo "md5 found: ${d}md5";
+    found=1; 
+    break; 
+  elif (test -x ${d}md5sum) then
+    echo \$MD5_EXE = \'${d}md5sum\'\; >> $conf; 
+    echo "md5 found: ${d}md5sum";
+    found=1; 
+    break; 
+  fi;
+done
+
+# Prompt if not found
+if (test $found -eq 0) then
+  echo 'ERROR: md5/md5sum utility not found';
+  echo 'Enter location of executable:';
+  while (test 1 -eq 1) 
+    do read md5exe;
+    if (test -x "$md5exe") then
+	  echo \$MD5_EXE = \'$md5exe\'\; >> $conf; 
+      break;
+    else
+      echo 'md5 was not found (try again):';
+    fi;
+  done
+fi
+
+
+#
+# SHA-1
+#
+found=0
+for d in $dirs 
+  do if (test -x ${d}sha15) then
+    echo \$SHA1_EXE = \'${d}sha\'\; >> $conf; 
+    echo "sha1 found: ${d}sha1";
+    found=1; 
+    break; 
+  elif (test -x ${d}sha1sum) then
+    echo \$SHA1_EXE = \'${d}sha1sum\'\; >> $conf; 
+    echo "sha1 found: ${d}sha1sum";
+    found=1; 
+    break; 
+  fi;
+done
+
+if (test $found -eq 0) then
+  echo 'WARNING: sha1/sha1sum utility not found';
+  echo \$SHA1_EXE = \'\'\; >> $conf; 
+fi;
+
+
+
+#############################################################################
+# The Sleuth Kit
+#############################################################################
+
+echo '' >> $conf
+echo '' >> $conf
+echo '# Directories' >> $conf
+
+echo ''
+echo '---------------------------------------------------------------'
+echo ''
+echo 'Searching for Sleuth Kit Installation.'
+found=0
+for d in $dirs 
+  do if ((test -x ${d}fls) && (test -x ${d}ffind) && (test -x ${d}blkstat) && \
+          (test -x ${d}blkls) && (test -x ${d}blkcat) && \
+          (test -x ${d}mmls) && (test -x ${d}mmstat) && \
+          (test -x ${d}fsstat) && (test -x ${d}img_stat) && \
+          (test -x ${d}istat) && (test -x ${d}ifind) && \
+          (test -x ${d}icat) && (test -x ${d}ils) && \
+          (test -x ${d}srch_strings) && \
+          (test -x ${d}mactime) && (test -x ${d}sorter)) then
+    echo \$TSKDIR = \'${d}\'\; >> $conf;
+    tskdir=${d};
+    echo "Found in: ${d}";
+    found=1; 
+    break; 
+  fi;
+done
+
+if (test $found -eq 0) then
+  echo 'Sleuth Kit tools were not found in the standard install locations.'
+  echo 'If you have not installed them, do so now and configure autopsy again.'
+  echo 'If you have installed them in a non-standard location, then'
+  echo '  enter the "bin" directory now:'
+
+  while (test 1 -eq 1) 
+    do read tskdir;
+    if ((test -x ${tskdir}/fls) && (test -x ${tskdir}/ffind) && (test -x ${tskdir}/blkstat) && \
+          (test -x ${tskdir}/blkls) && (test -x ${tskdir}/blkcat) && \
+          (test -x ${tskdir}/mmls) && (test -x ${tskdir}/mmstat) && \
+          (test -x ${tskdir}/fsstat) && (test -x ${tskdir}/img_stat) && \
+          (test -x ${tskdir}/istat) && (test -x ${tskdir}/ifind) && \
+          (test -x ${tskdir}/icat) && (test -x ${tskdir}/ils) && \
+          (test -x ${tskdir}/srch_strings) && \
+          (test -x ${tskdir}/mactime) && (test -x ${tskdir}/sorter)) then
+      echo \$TSKDIR = \'${tskdir}\'\; >> $conf;
+      break;
+    else
+      echo 'TSK tools were not found or incomplete (try again):';
+    fi;
+  done
+fi;
+
+# Test for latest version
+ver=`"${tskdir}/fls" -V | awk '/The Sleuth Kit ver / {print $5}'`;
+echo "  Version $ver found";
+
+
+if (test "$ver" '<' "$minver") then 
+  echo "Your version of The Sleuth Kit is not current enough - $minver is needed";
+  if (test "$ver" '>' "0.0.0") then 
+    exit 1;
+  fi;
+elif (test "$ver" '<' "$curtskver") then 
+	echo '';
+    echo "*** NOTE: A more recent version ($curtskver) of The Sleuth Kit Exists ***"
+	echo "  [Press Enter to Continue]";
+	read foo;
+
+else
+	echo '  Required version found';
+fi
+
+
+
+# NSRL
+echo ''
+echo '---------------------------------------------------------------'
+echo ''
+echo 'The NIST National Software Reference Library (NSRL) contains'
+echo 'hash values of known good and bad files.'
+echo '         http://www.nsrl.nist.gov'
+echo ''
+echo 'Have you purchased or downloaded a copy of the NSRL (y/n) [n]'
+read rep;
+if (test "$rep" = "y") then
+
+  echo 'Enter the directory where you installed it:'
+  while (test 1 -eq 1) 
+    do read nsrldir;
+    if (test "$nsrldir" = "cancel") then
+        echo \$NSRLDB = \'\'\; >> $conf;
+		break;
+	fi;
+    if (test -f "${nsrldir}/NSRLFile.txt") then
+      echo '  NSRL database was found (NSRLFile.txt)';
+      echo \$NSRLDB = \'${nsrldir}/NSRLFile.txt\'\; >> $conf;
+
+	  if (test -f "${nsrldir}/NSRLFile.txt-md5.idx") then
+		echo '  NSRL Index file found (NSRLFile.txt-md5.idx)';
+      else
+        echo '  NSRL Index file not found, do you want it created? (y/n) [n]:'
+        read rep;
+        if (test "$rep" = "y") then
+          echo ''
+          echo '-------------- begin hfind output --------------'
+          "${tskdir}/hfind" -i nsrl-md5 "${nsrldir}/NSRLFile.txt";
+          echo '--------------- end hfind output ---------------'
+          echo ''
+		fi;
+	  fi;
+      break;
+    else
+      echo 'The NSRL was not found (the directory should have NSRLFile.txt in it)';
+	  echo 'Enter a new directory (or cancel to stop):';
+    fi;
+  done
+else
+  echo \$NSRLDB = \'\'\; >> $conf;
+fi;
+
+#############################################################################
+# EVIDENCE LOCKER
+#############################################################################
+mdone=0
+echo ''
+echo '---------------------------------------------------------------'
+echo ''
+echo 'Autopsy saves configuration files, audit logs, and output to the'
+echo 'Evidence Locker directory.'
+echo ''
+echo 'Enter the directory that you want to use for the Evidence Locker:';
+read locker;
+if (test -d "${locker}") then
+  echo "  $locker already exists"
+else
+  echo '';
+  echo "WARNING: $locker does not exist"
+  mdone=1
+fi
+
+echo \$LOCKDIR = \'${locker}\'\; >> $conf;
+
+fi
+
+# Start of non-conf.pl file configuration
+
+#############################################################################
+# Setup Perl locations
+#############################################################################
+found=0;
+
+for d in $dirs
+  do if (test -x ${d}perl) then
+    if (test -n "`${d}perl -v 2> /dev/null | awk '/This is perl/ {print $0}'`") then
+      ver=`${d}perl -e 'print $];'`;
+      if (`${d}perl -e 'exit( $] >= 5.008);'`) then 
+        echo "old version of perl found: ${d}perl (version $ver) -- continuing";
+      else      
+        echo "perl found: ${d}perl (version $ver)";
+        echo "#!${d}perl -wT" > ./config.tmp;
+        echo "#!${d}perl" > ./config2.tmp;
+        perlexe="${d}perl";
+        found=1; 
+        break; 
+      fi;
+    fi;
+  fi;
+done
+
+# If it wasn't found, then prompt for it.
+if (test $found -eq 0) then
+  echo 'ERROR: perl not found or the incorrect version found';
+  while (test 1 -eq 1) 
+    do echo 'Enter location of perl executable:';
+    read perlexe;
+    if (test -x "$perlexe") then
+      if (test -n "`$perlexe -v 2> /dev/null | awk '/This is perl/ {print $0}'`")       then
+        ver=`$perlexe -e 'print $];'`;
+        if (`$perlexe -e 'exit( $] >= 5.008);'`) then 
+          echo "This version of Perl is too old, 5.8.0 or older needed";
+        else      
+          echo "Correct version found";
+          echo "#!${perlexe} -wT" > ./config.tmp;
+          echo "#!${perlexe}" > ./config2.tmp;
+          found=1; 
+          break; 
+        fi;
+      else
+        echo "Perl found, but is not working.  Try another";
+      fi;
+    else
+      echo "file not found";
+    fi
+  done
+fi
+
+# Check if this version of Perl supports large files
+if (test -z "`$perlexe -V 2> /dev/null | awk '/USE_LARGE_FILES/ {print $0}'`") then
+  echo ''
+  echo '    NOTE: It appears that your Perl does not support large files.';
+  echo '    You therefore will not be able to analyze images larger than 2GB.';
+  echo '    Download the source version from www.cpan.org and compile a new version.';
+  echo "  [Press Enter to Continue]";
+  read foo;
+  echo ''
+fi;
+
+# Get current working directory for lib
+echo "use lib '$PWD/';" >> ./config.tmp
+echo "use lib '$PWD/lib/';" >> ./config.tmp
+
+if (test -f ./autopsy) then
+  echo "autopsy already exists, overwrite? (y/n):";
+  read rep;
+  if (test "$rep" = "y") then
+    cat ./config.tmp base/autopsy.base > ./autopsy
+    cat ./config2.tmp base/make-live-cd.base > ./make-live-cd
+  else 
+    echo '  original version was kept';
+  fi
+else
+  cat ./config.tmp base/autopsy.base > ./autopsy
+  cat ./config2.tmp base/make-live-cd.base > ./make-live-cd
+fi
+chmod 0755 ./autopsy
+chmod 0755 ./make-live-cd
+
+# cleanup
+rm -f ./config.tmp
+rm -f ./config2.tmp
+
+
+#############################################################################
+# CLEANUP
+#############################################################################
+echo ''
+echo '---------------------------------------------------------------'
+echo ''
+echo "Execute the './autopsy' command to start with default settings."
+echo ''
+
diff --git a/docs/sleuthkit-informer-13.txt b/docs/sleuthkit-informer-13.txt
new file mode 100644
index 0000000000..24d55bb371
--- /dev/null
+++ b/docs/sleuthkit-informer-13.txt
@@ -0,0 +1,410 @@
+                        The Sleuth Kit Informer
+
+                    http://www.sleuthkit.org/informer
+                http://sleuthkit.sourceforge.net/informer
+
+                             Brian Carrier
+                      carrier at sleuthkit dot org
+
+                               Issue #13
+                             March 15, 2004
+
+
+
+CONTENTS
+--------------------------------------------------------------------
+- Introduction
+- What's New?
+- Call For Papers
+- Did You Know?
+- UNIX Incident Verification With Autopsy 
+
+
+
+INTRODUCTION
+--------------------------------------------------------------------
+
+I'm almost done!  Releasing version 2.00 of Autopsy that is.  I'm
+polishing up the final changes and documentation and it will be
+released later this week.  March 19 is the birthday of Autopsy and
+The Sleuth Kit's predecessor, TCTutils, also the goal release date
+for version 2.00.
+
+This issue of the Informer will focus on the new live analysis
+feature of (the unreleased) Autopsy.  This issue also has a lot
+entries in the "What's New?" category because we are on a bimonthly
+schedule.   If you missed getting the February issue of The Informer
+and have lessons to share with people then make sure you read the
+Call For Papers section so that you can learn how to submit articles
+of your own.
+
+
+
+WHAT'S NEW?
+--------------------------------------------------------------------
+A new version (1.68) of The Sleuth Kit was released.  It contains
+a couple of bug fixes.  There have been discussions on the
+sleuthkit-developers list about what new functions should be added
+to the next big version 2.00 release.  Michael Cohen has been looking
+into support for disk images, split images, RAID images, and other
+non-raw formats.  David Collett has been looking into output formats
+for TSK tools so that they can be imported into databases.
+
+Version 2.00 of Autopsy will be released later this week.  I'm
+adding the final touches and documentation and the goal is to release
+it on March 19, which is the 3 year anniversary of the first release
+of Autopsy and TCTutils.   Version 2.00 has a new internal design
+and has live analysis features (see below article).  If you can't
+wait for a few days and want one of the beta copies, let me know.
+
+Guido Metzner has been translating The Sleuth Kit Informer into
+German.  If anyone else is translating this, let me know and I'll
+add a link.
+
+    http://www.guframe.de/sleuthkit.html
+
+
+I started to provide a GPG signature of the source code as it is
+released.  I have meant to do this for ages.  This can help to
+ensure that the code being downloaded has not been modified by an
+attacker.
+
+
+
+CALL FOR PAPERS
+--------------------------------------------------------------------
+
+I posted a call for papers on the website in late  January for
+people that are interested in writing articles for the Informer.
+Here is the relevant section:
+
+The Sleuth Kit Informer is looking for articles on open source tools
+and techniques for digital investigations (computer / digital
+forensics) and incident response. Articles that discuss The Sleuth
+Kit and Autopsy are appreciated, but not required. Example topics
+include (but are not limited to):
+
+- Tutorials on open source tools
+- User experiences and reviews of open source tools
+- New investigation techniques using open source tools
+- Open source tool testing results 
+
+http://www.sleuthkit.org/informer/cfp.html
+
+
+Writing these articles takes away from my development time of new
+tool features, so any help is appreciated.  To keep with the incident
+verification theme, any articles on the basics of using 'netstat',
+'lsof', etc. to look for signs of an intrusion are also welcome for
+the next few issues.  If we get enough interest, I'll consider going
+back to a monthly schedule.
+
+
+
+DID YOU KNOW?
+--------------------------------------------------------------------
+
+Have you ever noticed that the number of occurrences and locations
+of keywords for regular expressions in Autopsy are not always
+accurate?  This came up on one of the mailing lists this past month
+and I'll explain it again here.
+
+Previous issues of The Informer have covered keyword searching, but
+the general idea in Autopsy is that it runs the 'strings' command
+on the image file and then uses 'grep' to find the keyword.  The
+'strings' command returns a long ASCII string that grep examines.
+If the keyword is found in the string, then grep fill flag the
+string and autopsy will search the string to find the exact location
+of the keyword.
+
+This is easy if a non-regular expression is used, but much more
+difficult with regular expressions because 'grep' regular expressions
+are different from Perl regular expressions.  I do not have a way
+to convert the grep regular expression to Perl and therefore I only
+return the number of big strings that have the keyword and the
+location of the start of the big string.  There could be more than
+one keyword in the string, in which case the total occurrences value
+is too small.  The location will also be off because it points to
+the start of the large string and not the specific keyword.
+
+If anyone knows of, or wants to write, a grep to perl regular
+expression converter, let me know so that we can update this.
+
+
+
+UNIX INCIDENT VERIFICATION WITH AUTOPSY
+--------------------------------------------------------------------
+
+INTRODUCTION
+
+For a couple of years, I have been saying that Autopsy can be used
+to analyze a live system, but it has taken me a while to make it
+EASY to use to analyze a live system.  When version 2.0 of Autopsy
+is released later this week, you will find that it is much easier
+to configure so that it runs on a CD-ROM so that you can examine a
+system that is suspected of being compromised.  This will allow you
+to view files that are hidden by rootkits and will not change the
+access times on files that are viewed.
+
+This article will give an overview of how to use the new features
+and what features are available for dead analysis are not for live
+analysis.  I will also show the future work for Autopsy.  This
+article uses many of the same concepts as the "UNIX Incident
+Verification with The Sleuth Kit" article in issue #10 of the
+Informer.
+
+MOTIVATION
+
+Some may be asking "why would I want a live analysis feature?".
+The primary motivation is for a more automated Incident Verification
+procedure.  We saw in issue #10 of the Informer, that The Sleuth
+Kit can be used to verify an incident because it can show files
+that are hidden by rootkits and will not update the access times
+on files when they are read.  Executing a bunch of command line
+tools is tedious though and Autopsy can provide a more automated
+investigation procedure.
+
+The basic scenario is that Autopsy and The Sleuth Kit will be burned
+to a CD and inserted into a suspect computer.  An investigator will
+connect to Autopsy on the suspect UNIX computer with her HTML browser
+on a trusted laptop and remotely examine the hard disk contents.
+If the computer is found to have been compromised, then it can be
+taken offline and acquired using normal procedures.
+
+Recall from issue #10 that I used two guidelines for incident
+verification:
+
+  1.  Minimize the amount of trust that you place in the system so
+  that more accurate information is collected.
+
+  2. Minimize the amount of data that you change on the system so
+  that evidence is preserved.
+
+
+CREATING THE CD
+
+To satisfy guideline #1 from above, we want to minimize the amount
+of trust that we place in the system, so we use our own executables.
+At a minimum, we need The Sleuth Kit and Autopsy on the CD and you
+will probably have additional tools to examine open network ports
+and running processes.  This has been the most difficult part of
+using Autopsy for live analysis because Autopsy relies on a given
+directory structure and locations that it can write to.
+
+It is now very easy with v2.  With v2, you compile TSK and Autopsy
+on a similar system to the one that will be investigated just like
+you do for a dead analysis.  Try the 'make static' with TSK to see
+if you can make static executables for your platform.  After both
+Autopsy and TSK have been compiled, you execute the 'make-live-cd'
+command in Autopsy.  This script will make a 'live-cd' sub-directory
+in the autopsy directory, which contains a copy of autopsy and
+copies of TSK executables, grep, strings, perl etc:
+
+    # ./make-live-cd 
+    Making base directory (./live-cd/)
+    Copying executables
+    Copying autopsy files
+    Creating configuration file using existing settings
+
+
+The 'live-cd' directory has a 'bin' directory where additional
+executables can be copied to and then the whole directory can be
+burned to a CD.
+
+
+BASIC USAGE
+
+After the CD has been created and there is a system suspected of
+being compromised, then it is time to take advantage of the new
+features.  There are two scenarios for live analysis.  The first
+scenario uses a network share from a trusted system that you can
+write to.  In this case, autopsy is run as normal and you specify
+the evidence locker directory as the mounted disk.  The evidence
+locker is specified with '-d':
+
+    # ./autopsy -d /mnt/ev_lock 10.1.32.123
+
+The above would start autopsy, use '/mnt/ev_lock/' as the evidence
+locker and would allow connections from 10.1.32.123 (where the
+investigator would connect from using an HTML browser).  Remember that
+we do not want to write to the suspect system, so we should only use
+a network share and not a local directory in this scenario.
+
+The second scenario does not use an evidence locker and does not
+intentionally write any data to disk.  This scenario does not need
+the network share and each of the devices (or partitions) that will
+be analyzed are specified on the command line using the '-i' flags.
+The '-i' flag requires three arguments: the device, the file system
+type, and the mounting point.  For example, to examine the '/dev/hda5'
+and '/dev/hda8' partitions on a Linux system, the following could
+be used:
+
+    # ./autopsy -i /dev/hda5 linux-ext3 / -i /dev/hda8 linux-ext3 /usr/ \
+    10.1.32.123
+
+The file system type must be one of the types that are supported
+by TSK.  The remote IP address must also be given, otherwise you
+will have to use a browser on the suspect system and that will write
+data to the disk.
+
+When you use the '-i' flag, then autopsy will start in the 'Host
+Manager' view where you can select the image that you want to
+analyze.  You will skip the case and host configuration.  The default
+case name will be 'live', the default host name is 'local', and the
+default investigator name is 'unknown'.
+
+
+DIFFERENCES WITH DEAD ANALYSIS
+
+There are some features that are not available for live analysis
+because they write files to the disk.  In this section, I am using
+the term live analysis for the scenario where there is not a mounted
+network share and there is not evidence locker.
+
+No auditing is performed during a live analysis because there is
+no where to write the logs.  In the future, if this is needed, then
+a method of writing logs to a floppy disk could be configured.
+Timelines of file activity cannot be created because they need to
+create files.  Hash databases are also not currently used, although
+they could in the future.  It may be difficult to maintain the
+latest hash database on the same CD as the latest autopsy and TSK
+version though.  Notes and event sequencer notes cannot be created.
+
+Keyword searches can be performed, but the strings file and unallocated
+only search cannot be performed because they both require a file
+to be created.  The search results are also not cached.  You can
+also not sort files by their type (all executables, all pictures
+etc.).  In many cases, you would not want to do many of these
+operations because they are time intensive and you are generally
+looking for obvious and quick evidence during the incident verification.
+If you need theses features, then you can use the network share
+scenario.
+
+
+SIMILARITIES WITH DEAD ANALYSIS
+
+Now that we know what is different, I'll cover what is the same.
+All of the file mode analysis is the same, except that you cannot
+get the file type.  The method that is used to compile 'file' in
+TSK does not allow autopsy to easily move it around.  This behavior
+may change in the future.  Meta data, data unit, and file system
+mode all work as usual.
+
+You can still export file contents to your trusted laptop because
+it uses the HTTP to save the file.  So, you can select the export
+button on a log file to save a copy.  You can also generate ASCII
+reports and save them to your local analysis station.
+
+
+GUIDELINE COMPLIANCE
+
+All of these features may sound great, but lets examine how well
+the new Autopsy satisfies the two guidelines.  I think it is always
+important to compare a new tool or technique against generic
+guidelines.
+
+The first guideline was about not trusting the local system.  No
+software-based live analysis tool can be 100% independent from the
+local system because it always needs to request service from the
+operating system.  With Autopsy, we use our own copies of the Autopsy
+perl code, TSK executables, grep, and strings.
+
+There is one large problem with the current Autopsy model and it
+is because of Perl.   Perl is a beast and contains many modules and
+libraries.  When the 'make-live-cd' script is run, a copy of the
+'perl' executable is copied to the 'live-cd' directory, but that
+is it.  The executable will still need the modules and libraries
+on the local system.  Solving this may require building a special
+version of Perl that is more static.  I need to investigate this
+more.
+
+Another method of getting around this limitation is to use the
+'perl2exe' program that converts a Perl script to a dynamic executable.
+The resulting executable will still rely on dynamic libraries on
+the suspect system, but  it seems a little cleaner.  The perl2exe
+program is a commercial tool.
+
+One of the benefits of the Autopsy design, is that Autopsy did not
+exist on the system when it was suspected of being compromised.
+Therefore, the attacker will not know that Autopsy will be used to
+investigate the system and therefore will be less likely to tamper
+with its dependencies.  If the investigation tools are running on
+the system during the attack, then I would guess that the attacker
+will be more likely to tamper with them.
+
+The second guideline was about modifying data on the system.  I
+described the features that were removed in the previous section.
+This was easy to do because there were functions that write the
+logs or notes.  Each of those starts with a check to see if logging
+is enabled.  Timelines and file type sorting were also disabled
+because it required writing to disk.
+
+I can never guarantee that no data will be written from a live
+analysis.  Memory will be overwritten when the software is loaded
+and the access times on dynamic libraries will updated.  Running
+the tools may require the operating system to write memory to the
+page file, which may overwrite data from the attacker.
+
+This is a shameless plug, but for those that are interested in live
+analysis, then you may want to check out a paper that a colleague,
+Joe Grand (author of pdd), and I wrote about a hardware device to
+acquire memory from a live system.  It does not overwrite memory
+because there is no process to load and it access the physical
+memory directly so it does not rely on the local operating system.
+It was recently published in the new Journal of Digital Investigation
+(reference is below and that issue of the journal is currently free
+to view).
+
+
+
+FUTURE WORK
+
+There is always more to do, and I'll cover that here.  
+
+I would like to also include other system utilities, such as 'ps' or
+'netstat' on the CD and allow the Autopsy user to run the commands
+from within autopsy.  This should be fairly easy, but the difficult
+part is that many of the operating systems use different flags for
+different tools.
+
+I would like to start incorporating scripts into the tool (for both dead
+and live analysis).  This will allow you to more easily detect rootkits
+or other signatures.   
+
+The biggest thing that needs future work is using Perl.  Autopsy
+still relies on the version of Perl on the suspect system and that
+could run into problems if an attacker modifies it.  Using the 
+perl2exe tool can reduce the risk, but it is a commercial tool.
+
+
+CONCLUSION
+
+The live analysis mode of Autopsy allows you to more easily analyze
+a system that is suspected of being compromised.  It can also be
+used to examine a honeypot.  Live analysis is not ideal because you
+are stilly relying on the suspect operating system for data, but
+it is required in some situations.  More work needs to be done with
+Autopsy so that it depends less on the local system.  
+
+
+
+REFERENCES
+Autopsy
+    http://www.sleuthkit.org/autopsy/ 
+
+perl2exe
+    http://www.indigostar.com/perl2exe.htm
+
+Sleuth Kit
+    http://www.sleuthkit.org/sleuthkit 
+
+Sleuth Kit Informer #10
+    http://www.sleuthkit.org/informer/sleuthkit-informer-10.html
+
+A hardware-based memory acquisition procedure for digital investigations
+    Brian D. Carrier and Joe Grand
+	Volume 1, Issue 1 - Journal of Digital Investigations
+    http://www.sciencedirect.com/science/journal/17422876
+
+--------------------------------------------------------------------
+Copyright (c) 2004 by Brian Carrier.  All Rights Reserved
diff --git a/global.css b/global.css
new file mode 100644
index 0000000000..d44dcca673
--- /dev/null
+++ b/global.css
@@ -0,0 +1,19 @@
+h3 {
+	font-size: 18px;
+	color: #000000;
+}
+h2 {
+	font-size: 20px;
+	color: #000000;
+}
+h1 {
+	font-size: 24px;
+	color: #000000;
+}
+body {
+	font-family: Helvetica, Geneva, Arial, sans-serif;
+	font-size: 14px;
+	color: #000000;
+	#background-color: #dedede;
+}
+
diff --git a/help/blank.html b/help/blank.html
new file mode 100644
index 0000000000..3e40eb24cf
--- /dev/null
+++ b/help/blank.html
@@ -0,0 +1,25 @@
+<HTML>
+<HEAD><TITLE>Blank Page</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+  &nbsp;
+  <p>
+  &nbsp;
+  <p>
+  &nbsp;
+  <p>
+  <center>
+  <h3>HELP!</h3> 
+  Here are the help files for using Autopsy.
+
+  <p>In addition to these files, the <tt>Sleuth Kit Informer</tt>
+  newsletter could be useful.<br>
+  The Informer typically goes into more technical details than what
+  is provided here.</p>
+  
+  <p><a href="http://www.sleuthkit.org/informer/" target=\"_blank\">
+  http://www.sleuthkit.org/informer/</a></p>
+
+  <p>Send documentation updates to &lt;doc-updates at sleuthkit dot org&gt;</p>
+
+</BODY>
+</HTML>
diff --git a/help/caseman.html b/help/caseman.html
new file mode 100644
index 0000000000..ee4fc315b8
--- /dev/null
+++ b/help/caseman.html
@@ -0,0 +1,161 @@
+<HTML>
+<HEAD><TITLE>Autopsy Case Management Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+
+<CENTER><H2>Case Management</H2></CENTER>
+<P> 
+<H3>Overview</H3>
+Autopsy organizes images based on the case and host that they came
+from.  A case contains one or more hosts (a new case should be
+created for each investigation).  Each host can contain one or more
+images, which correspond to disks or partitions on the host.
+
+
+<P>
+<H3>Creating a New Case</H3>
+From the Main Menu (at startup) select <U>New Case</U>.  You will
+have to enter the case name and an optional short description.
+The case name must be a valid directory name (no spaces - no
+symbols).  A list of investigators will also be requested.  These
+will be used for the audit logs, not for authentication.  A directory
+with the same name as the case will be created in the Evidence
+Locker.  To later rename the case, simply rename the directory.
+
+<P>
+For example:
+<TABLE CELLSPACING=8>
+<TR>
+  <TD>Case Name:</TD><TD><TT>bankofmars</TT></TD>
+</TR>
+<TR>
+  <TD>Case Description:</TD><TD><TT>Theft of $1,000,000,000.01 from The Bank of Mars</TT></TD>
+</TR>
+<TR>
+  <TD>Investigators:</TD><TD><TT>gadget</TT></TD>
+</TR>
+</TABLE>
+
+<P>
+<H3>Adding a New Host</H3>
+A Host must then be created in the Case.  Select the Case that was
+just created from the Case Gallery and enter the Host Gallery.
+Select <U>Add Host</U> and enter the host name, a short description,
+and time information such as time zone and clock skew.  The clock
+skew is how many seconds the system was off from a synchronized
+clock.  Adding a host will create a directory in the case directory
+and subdirectories in the host for the images, output data, logs,
+and reports.   If you do not add a time zone, then it will default to
+the time zone of your analysis system.  A list of time zones can be
+found <a href="timezones.html">here</a>.
+
+<P>
+You can optionally add the path to <A HREF="hash_db.html">hash databases</A>.
+
+<P>
+For example, the 'Bank of Mars' incident could have two hosts
+involved:
+
+<TABLE CELLSPACING=8>
+<TR>
+  <TD>Host Name:</TD><TD><TT>db_server</TT></TD>
+</TR>
+<TR>
+  <TD>Host Description:</TD><TD><TT>Main Database Server - Solaris</TT></TD>
+</TR>
+<TR>
+  <TD>Timezone:</TD><TD><TT>EST5EDT</TT></TD>
+</TR>
+<TR>
+  <TD>Timeskew:</TD><TD><TT>-100</TT></TD>
+</TR>
+<TR>
+  <TD>Known Good Database:</TD><TD><TT>none</TT></TD>
+</TR>
+<TR>
+  <TD>Known Bad Database:</TD><TD><TT>none</TT></TD>
+</TR>
+</TABLE>
+
+<P>
+<TABLE CELLSPACING=8>
+<TR>
+  <TD>Host Name:</TD><TD><TT>file_server</TT></TD>
+</TR>
+<TR>
+  <TD>Host Description:</TD><TD><TT>Windows File Server - Win 2k</TT></TD>
+</TR>
+<TR>
+  <TD>Timezone:</TD><TD><TT>CST6CDT</TT></TD>
+</TR>
+<TR>
+  <TD>Timeskew:</TD><TD><TT>0</TT></TD>
+</TR>
+<TR>
+  <TD>Known Good Database:</TD><TD><TT>/usr/local/forensics/hash/win2k.txt</TT></TD>
+</TR>
+<TR>
+  <TD>Known Bad Database:</TD><TD><TT>/usr/local/forensics/hash/win_hack.txt</TT></TD>
+</TR>
+</TABLE>
+
+<P>
+<H3>Adding a New Image</H3>
+Next, images must be added to the host.  Select the host that was
+just added from the Host Gallery and enter the Host Manager.  Select
+<U>Add Image File</U> and a new form is shown.  The first text box in
+the form is for the path of the image file.  If you are importing a
+split image, then the extension must be ordered based on the file order.
+Supply a '*' in the file name extension where the numbers or letters are.
+(i.e. .../image.*).  The image file can be
+of a full disk or of an individual partition.  You must select which
+it is though.  Before they can analyzed, the images will have to
+be located in the evidence locker.  You are given a choice to either
+create a symbolic link from the current location, to copy the file,
+or to move the file from its current location to the host directory.
+Select the desired import method.  For example:
+
+<TABLE CELLSPACING=8>
+<tr><td>Image Path:</TD><TD><TT>/mnt/sys1/disk2.*</TT></TD></TR>
+<tr><td>Type:</td><td><tt>Disk</tt></td></tr>
+<tr><td>Import Action:</TD><TD><TT>symlink</TT></TD></TR>
+</table>
+
+<p>
+If you are importing a split image, then the next window will confirm the
+order of the images.  After that, the next window will allow you to specify
+or calculate the MD5 for the file.  This should be of the full file and if you
+are importing a split image then it should be for all files combined.  
+If you are importing a volume image, then Autopsy will try to determine the
+file system type.  You will also need to specify the mounting point.  This is used for cosmetic purposes only when printing the full path of files.
+
+<p>
+If the image file is a disk image then Autopsy will list all of the partitions and try to determine the file system in each one.  You have the option to not import a partition and to change the file system type. 
+
+<P>
+<H3>MD5 Values</H3>
+Each host has an <TT>md5.txt</TT> file that contains
+the MD5 value for files in that directory.  Autopsy  uses that file
+to validate the integrity of files.   By default, when a file is
+imported into Autopsy, its MD5 will be calculated.  If it is already
+known, then it can be entered in the 'Add Images' window.
+
+
+<P>
+<H3>Host Subdirectories</H3>
+Each host has an <TT>images</TT> directory and an <TT>output</TT>
+directory.  All data generated by Autopsy is saved to the <TT>output</TT>
+directory.  The theory behind this design, was to allow the <TT>images</TT>
+directory to have strict permissions to prevent accidently modifying
+the images.  Therefore, the <TT>images</TT> directory can have its write
+bits removed to prevent modifications.
+
+<p>
+<h3>References</h3>
+Issue 2 of <a href="http://www.sleuthkit.org/informer/"  target=\"_blank\">The Sleuth Kit Informer</a> discusses case management and how to break a disk image into file system images.
+
+
+
+<P><HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/data_mode.html b/help/data_mode.html
new file mode 100644
index 0000000000..db2d20eafd
--- /dev/null
+++ b/help/data_mode.html
@@ -0,0 +1,97 @@
+<HTML>
+<HEAD><TITLE>Autopsy Data Unit Analysis Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+<CENTER><H2>Data Unit Analysis</H2></CENTER>
+
+
+<H3>Overview</H3>
+<P>
+The Data Analysis Mode allows an investigator to view the contents
+of an individual data unit.  Data units is a generic term used to
+describe the areas on the disk that are used to store data.  Each
+file system calls the data unit a different thing (i.e.  Fragments
+or Clusters).  This mode is most useful when recovering and analyzing
+deleted data.
+
+<H3>Input</H3>
+<P>
+To view the contents of a specific address, enter it into the text
+box on the left-hand side.  By default, only one data unit will be
+displayed.  To view more than one consecutive unit, enter the
+number in the text box below. 
+
+<P>
+It is common to extract the unallocated space from a file system
+image and analyze it for deleted material.  The 'blkls' tool in The
+Sleuth Kit allows one to extract the data.  If interesting data is
+found in the 'blkls' file, the next step could be to find its location
+in the original image and examine the surrounding data.  To do
+this, simply calculate which data unit the data was found in (by
+dividing the byte offset of the interesting data by the data unit
+size (which can be found in <U>Image Details</U>)).  Enter that
+address into the original text box and select the <U>Unallocated</U>
+type.  This will find the original location and display it for you.
+
+<P>
+If Autopsy knows about the 'blkls' image, then it can be loaded at any
+time by selecting the <U>Load Unallocated</U> button.  Then, any
+data unit in that file can be examined.  
+
+
+<P>
+The <B>Lazarus</B> tool was part of <TT>TCT</TT>.  It analyzes a chunk
+of data and identifies what file type it is and tries to group 
+consecutive types together.  Lazarus numbers its output though starting
+with 1.  Therefore, instead of subtracting 1 every time you want to view
+a data unit identified by Lazarus, simply select the check box.  
+
+<P>
+Press the <U>Ok</U> button to display the contents of the address on
+the right-hand side of the window.  
+
+<P>
+The <U>Allocation List</U> link displays the allocation status of  
+addresses in intervals of 500.  
+
+
+<H3>Viewing</H3>
+<P>
+After the unit address has been entered, the contents are displayed
+in the right-hand side.  Filters can be used to view the data in the
+desired format (strings, hexdump, ASCII).
+
+<P>
+A report can be generated so that the contents and meta-data about
+it will be saved on record.  To save the contents locally, press the
+<U>Export Contents</U> button.  The <U>Add Note</U> button will allow
+one to add a comment about the given data unit so that it can be
+easily recalled later.  
+
+<P>
+The file type is also displayed.  This is identified by running
+the output through the 'file' command in The Sleuth Kit.
+
+
+
+<P>
+Autopsy will try to find the meta-data structure that allocated
+the unit and display both its address and a file name.  This process
+is very slow for FAT file systems, so this process is not done by
+default during analysis.
+
+<H3>FAT Notes</H3>
+<P>
+The Sleuth Kit and Autopsy do not use clusters when dealing with a FAT image.
+Only sectors are used.  The reason is because FAT does not start
+addressing clusters until many sectors into the file system.  If
+clusters were used to address data units, then there would be no
+way to address the sectors in the FAT and secondary FAT.  Therefore,
+sectors are used for all addresses.  NTFS changed the way clusters
+were addressed and do not have this problem.  See the documentation
+in The Sleuth Kit for more details.
+
+
+<P>
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/file_category.html b/help/file_category.html
new file mode 100644
index 0000000000..6665c90b68
--- /dev/null
+++ b/help/file_category.html
@@ -0,0 +1,99 @@
+<HTML>
+<HEAD><TITLE>Autopsy File Category Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>File Category Type Analysis Help</H2></CENTER>
+
+<H3>Overview</H3>
+Analyzing large file system images can be very daunting.  One way 
+of identifying files that should be examined is to sort the files based
+on file type.  This mode of Autopsy will allow one to sort the files
+in an image based on type and to exclude known files (i.e. data 
+reduction).  It also allows one to flag files that are known to be bad.
+
+<H3>Procedure</H3>
+The <TT>sorter</TT> document in the <TT>docs</TT> directory of The
+Sleuth Kit has more details on the details, but this will provide
+an overview of the interface given by Autopsy.
+
+<P>
+The first step is to <U>Sort</U> the image.  There are several
+options to choose when doing this.  The <TT>sorter</TT> tool from
+The Sleuth Kit will perform the sorting.  There are two major
+actions that <TT>sorter</TT> can do:  sort files by type and validate
+extensions.
+
+<P>
+By default, Autopsy will perform both actions.  If you do not want
+it to do a given action, deselect it.   
+
+
+<P>Within sorting, there are two options:
+
+<UL>
+<LI> The first is to save the output.  By default,
+details about each file will be added to a category file.  For
+example, a JPEG image will have the meta data address and image
+name saved to the <TT>images</TT> file.  By selecting the <U>Save</U>
+option, a directory will be created for each category and a copy
+of the files will be saved.  This could require lots of disk space
+(as much as the original image size).
+
+<LI> The second option is to save unknown file types.  There are
+configuration files that contain rules about common data types.  If
+a file is encountered that does not have a rule, it is added to an
+<TT>unknown</TT> file.  If this is not desired, select the <U>Do Not
+Save Unknown</U> option.  
+</UL>
+
+<P>
+During the sorting process, the <TT>sorter</TT> tool will also examine
+the extension of the file.  If the file type is known, it has known
+extensions, and the file does not have one of those extensions, it will
+be added to a <TT>mismatch</TT> file.  This can be deselected if it is
+not wanted.  
+
+
+<H3>Hash Databases</H3>
+One easy way of data reduction is to use hash databases.  The <TT>sorter</TT>
+tool can use three different hash databases.  Each can be configured
+within Autopsy and used in other screens.  
+
+<UL>
+  <LI><B>NIST NSRL</B>: The NIST NSRL contains hashes of trusted operating
+  systems and programs.  This is used to ignore known files.  Files found
+  in the NSRL will not be included in the file categories (to save time
+  when reviewing the files).  If the file is in the NSRL and has an
+  extension mismatch, it will be noted in a special file.  
+
+  <LI><B>Ignore Database</B>: This database must be created by the user
+  and added to the host.  It is similar to the NSRL in that it contains 
+  hashes of known good files.  They will be ignored in the same way that
+  those from NSRL are.  
+
+  <LI><B>Alert Database</B>: This database must also be created by the
+  user and added to the  host.  It contains hashes of files that are
+  known to be bad and should identified if found in the image.  This would
+  include known rootkits or photographs.  Hits from this databases are
+  found in the <TT>alert</TT> file.
+</UL>
+
+<P>
+More details can be found in the <A HREF="hash_db.html">Hash
+Database</A> Help.
+
+<H3>Output</H3>
+Currently, there is no way to view the output from within Autopsy.
+All data can be found in the <TT>output</TT> directory of the host.
+A directory is created for the <TT>sorter</TT> output.  View the
+<TT>index.html</TT> file and it contains links to the other files.
+
+<p>
+<h3>References</h3>
+Issues 3, 4, and 5 of <a href="http://www.sleuthkit.org/informer/"  target=\"_blank\">The
+Sleuth Kit Informer</a> discussed using the 'sorter' tool.
+
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/file_mode.html b/help/file_mode.html
new file mode 100644
index 0000000000..ca39d1d342
--- /dev/null
+++ b/help/file_mode.html
@@ -0,0 +1,221 @@
+<HTML>
+<HEAD><TITLE>Autopsy File Analysis Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>File Analysis</H2></CENTER>
+<H3>Overview</H3>
+The File Analysis mode allows one to analyze an image from the file
+and directory perspective.  This provides the same interface that users
+typically use with a normal computer.  This mode will also display 
+information about deleted files though.  
+
+<P>
+This mode will allow one to examine the contents of files and directories
+for evidence.  It even allows one to perform basic binary analysis by
+extracting the ASCII strings from a binary file.  The files can also
+be sorted by any field.  
+
+
+<H3>Directory List</H3>
+<P>
+The left-hand side window has four main options:
+<UL>
+  <li>Directory Seek
+  <li>File Name Search
+  <LI>Hide / Expand Directories
+  <LI>Show All Deleted Files
+</UL>
+
+<P>
+By default, the directory listing is not shown when this mode is
+first entered.  By select the <U>Expand Directories</U> button,
+the full list of directories will be shown.  The number of '+'
+symbols represent the depth of the directory.   As this is an HTML
+interface and there is no state management occurring (no cookies
+or session id), it would be difficult to have an interface where
+one or more directories are expanded yet the rest are collapsed.
+
+<P>
+Selecting the <U>All Deleted Files</U> link will display all of the deleted
+files in the image on the right-hand side.
+
+<P>
+There is a text box where a directory (or file) name can be
+entered and it will be displayed on the right-hand side.  This
+makes it easy to jump to a directory without going through the
+directory listings.  For example, to seek to the 'windows\system32'
+folder, you can enter that string into the box instead of scrolling
+through the directories.
+
+<p>
+There is also a text box where a pattern of a file name can be
+entered and all files that match that pattern will be displayed on
+the right-hand side.  The search pattern is a Perl regular expression,
+so some values, such as '.' or '*' will need to be escaped.  The
+search is done case insensitive.  To find all files that have a JPG
+extension, the following could be used "\.jpg".  Or to find all files
+that begin with a dot, then we could use "^\.".  
+
+
+<H3>Directory Contents</H3>
+<P>
+The window in the upper right-hand side contains the directory
+contents.  In a file system, a directory allocates data units on
+the disk and fills the data units with structures that contain the
+name of the file and the address of the meta data structure.  This
+view parses the file name structures in the directory.  It is filled
+by either selecting a directory from the left-hand side directory
+list or a directory from within the same window.  The entries can
+be resorted by clicking on any of the header values.
+
+<P>
+The column headers have the following definitions:
+<UL>
+  <LI><B>del</B>: A check in this column represents a deleted file.
+  See below for a discussion on the different color types of deleted files.
+
+  <LI><B>Type</B>: This column contains the "type" that the file or
+  directory is. There are two values.  The first (<TT>dir</TT>) is the
+  type according to the directory entry structure.  The directory entry
+  is where the file name is located.  The second value (<TT>in</TT>) is
+  the type according to the meta data structure.
+  These should be the same except
+  for deleted files.  They are both given to help the investigator
+  identify if a deleted file has been reallocated or not.  For example,
+  if the meta data structure type is different than the file name
+  type, then it is likely that one of the structures was reallocated for
+  a new file.  
+
+  <LI><B>Name</B>: The name of the file or directory.  Clicking on the
+  name displays file contents in the bottom window or directory contents
+  in the same window.  For deleted files, no link will exist if the meta
+  data structure address 
+  has been cleared (which many OS do).  To identify the destination of 
+  a UNIX symbolic link,
+  click on the address at the end of the row.  Note that the name
+  will not be a link if the size of the file is 0 or if the meta data
+  structure is unknown.  
+
+  <LI><B>Modified Time</B>: This column exists for UNIX and NTFS file 
+  systems.  It shows the last time that the file data was last modified.
+  In other words, when was data last written to the data units allocated
+  by the file.  In UNIX, the <TT>utimes()</TT> function can modify this
+  value vary easily.  
+
+  <LI><B>Written Time</B>: This column exists for FAT file systems and
+  is the time when the file was last written to.  Of the three times,
+  this is the only value that is required by the FAT specification.  
+
+  <LI><B>Accessed Time</B>: This column contains the last accessed time of
+  the file data.  On a FAT image, this value is optional and is only
+  accurate to the day (not hours or seconds).  This value can be 
+  modified by the utimes() function in UNIX.
+
+  <LI><B>Changed Time</B>: This column exists for UNIX and NTFS file
+  systems.  It is the last time that the file status (or meta data) was
+  changed.  This is different than the Modified time because modified
+  deals with the file data and this deals with the descriptive data
+  in the inode or MFT entry.    This value cannot be changed by the
+  <TT>utimes()</TT> function in UNIX.  
+
+  <LI><B>Created Time</B>: This column exists for NTFS and FAT file systems.  It
+  is the time when the file was created.  According to the FAT spec,
+  it is an optional time.  
+
+  <LI><B>Size</B>: The size of the file.  Note that if the size of the
+  file is 0, no link will be shown with the name.  
+
+  <LI><B>UID</B>: The User ID of the file owner.
+
+  <LI><B>GID</B>: The Group ID of the file owner.
+
+  <LI><B>Meta Data</B>: The file name structures contain a pointer to
+  the meta data structure that describes the file.  This column contains
+  the address of the structure.  Selecting this value
+  will display the details in the bottom window.
+  If the value is invalid, then a link will not exist.  If it is for
+  a deleted file name that has a meta data structure with an allocated
+  status, a "realloc" string will 
+  exist to identify this.  
+
+</UL>
+The <U>Add Note</U> link allows you to make a comment about this directory and 
+have it saved in your personal notes file.  
+
+<P>
+The <U>Generate MD5 List</U>
+link will generate the MD5 value for every file in the directory and
+allow you to save it as a text file.  Using fingerprint data bases,
+This makes it easy to check for files that were modified by an attacker.
+
+<P>
+The path on top of the window has hyperlinks in it that allow the
+user to easily change to a previous directory.  
+
+<P>
+There are two different colors used for deleted files.  The difference
+is based on the status of the data structures in the file.  A <FONT
+COLOR="red">bright red</FONT> entry means that the file
+name data structure is not allocated and the meta data structure
+that it points to is also not allocated.  This is what we would
+expect of a recently deleted file.  This means that we can trust
+the data we are seeing as long as the meta data structure was not
+allocated and unallocated since the deletion.  If it is <FONT
+COLOR="#800000">darker red</FONT>, then the meta data
+structure has been reallocated and the data is most likely not
+accurate.
+
+
+<P>
+The file size reported by the meta data structure is very important
+with The Sleuth Kit.  The Sleuth Kit uses this value to identify
+how many data units to display.  If this size is 0, but the meta
+data structure points to data blocks still, they will not be shown.
+You can force Autopsy to display the values by selecting the meta
+data address and using the 'force' option.
+
+<P>
+To look a file up in one of the <A HREF="./hash_db.html">Hash
+Databases</A>, then select the meta data address.  That view will
+provide an interface to the databases.
+
+<H3>File Contents</H3>
+<P>
+The lower right-hand side window displays the contents of a specified
+file.  The contents can be viewed in either the raw format (which your
+browser will not likely display much of if the file is non-ASCII) or
+through 'strings'.  The strings option is helpful for a quick analysis
+of a binary file.
+
+<P>
+Also shown is the file type.  This is determined by running the 'file' 
+command on the output.  It uses the magic header and footer values to
+guess the file type.  If the file type is an image or HTML, an option
+will exist to <U>View</U> the data in its interpreted form (i.e. as
+a picture or as a web page instead of the raw data).  Note that
+any HTML that is viewed will be processed in a sanitized environment 
+that does not load pictures and will not allow one to connect to a 
+remote site.  To view the native picture, select 'Export' and open
+the HTML document in another browser.  Refer to issue #1 of The Sleuth
+Kit Informer for more details on the sanitizing.  
+
+<P>
+The <U>Report</U> options create ASCII reports that contain the file 
+contents as well as data such as MD5 values and dates.  
+
+<P>
+The <U>Export</U> button extracts the file out of the image so you can save it
+locally and use other tools on it. 
+
+<P>
+The <U>Add Note</U> button adds a personal note to the investigator log for
+future reference.
+
+<p>
+<h3>References</h3>
+Issue 1 of <a href="http://www.sleuthkit.org/informer/"  target=\"_blank\">The Sleuth
+Kit Informer</a>.
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/fs_mode.html b/help/fs_mode.html
new file mode 100644
index 0000000000..ef8ec4d760
--- /dev/null
+++ b/help/fs_mode.html
@@ -0,0 +1,46 @@
+<HTML>
+<HEAD><TITLE>Autopsy Image Details Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Image Details</H2></CENTER>
+
+<P>
+<H3>Overview</H3>
+Sometimes there are details about an image that do not correspond to
+any file in particular.  Those details can likely be found in this
+mode.  This mode gives the general details of the image and therefore
+the contents will vary depending on the file system type.  
+
+<P>
+<H3>FFS & EXT2FS</H3>
+For the UNIX file systems, this mode will contain the details from
+the super block.  This generally includes times that the file system
+was last mounted and any special flags.  It also has the range of
+inode addresses and fragment addresses.   For advanced file recovery,
+you can also identify the group layout and on-disk structure details.
+These could be useful for restricting where you search for data.
+Files will allocate blocks and fragments in the same Cylinder or
+Block group as their inode is in, so your attention can be restricted
+to that area.
+
+
+<P>
+<H3>FAT</H3>
+For FAT file systems, this mode will contain the File Allocation
+Table.  It will have the cluster runs, which can be selected to
+view their contents in <A HREF="data_mode.html">data unit</A>
+analysis mode.  Or, if the file is fragmented, the pointer can
+be selected and the screen will link to the next cluster chain.  
+
+
+<P>
+<H3>NTFS</H3>
+The unique information for an NTFS image is the numerical type
+associated with attributes.  These values can be dynamic and this
+area will identify what they are for that file system.  
+
+
+<P>
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/general.html b/help/general.html
new file mode 100644
index 0000000000..5d20c6bbde
--- /dev/null
+++ b/help/general.html
@@ -0,0 +1,103 @@
+<HTML>
+<HEAD><TITLE>General Autopsy Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>General Autopsy Help</H2></CENTER>
+<P>
+The Autopsy Forensic Browser is a graphical interface to command
+line forensics tools and standard UNIX utilities.   It allows
+you to perform volume and file system analysis on UNIX and Windows systems.
+
+<P>
+All data are saved in a directory in the Evidence Locker, which
+was specified at install time or at run time.  See 
+<A HREF="caseman.html">Case Management</A> 
+for more information.  In the normal mode, Autopsy imports an
+image file from a disk or partition.  In the live mode, Autopsy
+can analyze a running system and does not save any data to the 
+local disk. 
+
+
+<P>
+The browser has the following modes: 
+<UL>
+
+<LI>
+<B><A HREF="file_mode.html">Files</A></B>:
+Allows you to browse the image file as a file system and view the
+contents of files and directories.   This mode even shows deleted
+file names and Alternate Data Streams in NTFS images.  You can sort
+the files and directories on meta data.
+
+<LI><B><A HREF="meta_mode.html">
+Meta Data</A></B>:
+Allows you to analyze the image file by examining the meta data structures.
+The address of a structure is entered and the details are shown.
+This mode is useful for examining unallocated structures and getting
+all details about allocated files (including all data units and
+other information such as MD5 value).
+
+
+<LI><B><A HREF="data_mode.html">
+Data Unit</A></B>:
+Allows browsing by block number.  This is most useful when used
+with searching or meta data browsing.  The contents of the block
+can be displayed in ASCII, hex dump, or through <I>strings(1)</I>.
+The meta data structure that has allocated the block will be
+displayed (if any) along with the file name (if any).
+
+
+<LI><B><A HREF="srch_mode.html">
+Keyword Search </A></B>:
+Search an image file using <I>grep(1)</I> for a given string or regular
+expression.  The result will be a list of data units that have the
+string.  Each data unit can be selected to view the contents.
+
+
+<LI><B><A HREF="fs_mode.html">
+Image Details</A></B>:
+List the details about the file or volume system.  The output of
+this mode depends on the file system.  Examples of the file system
+data include the last mount time, the last mount location, and a
+detailed break down of block group information or File Allocation
+Table contents.
+
+<LI><B><A HREF="int_mode.html">
+Image Integrity</A></B>:
+The integrity of the data can be validated at any
+point by selecting this mode.  It uses the values in <TT>md5.txt</TT> to
+identify if any data have been modified in the analysis process.
+
+<LI><B><A HREF="tl.html">
+File Activity Timelines</A></B>:
+Autopsy can create timelines of file activity based on the Modified,
+Access, and Change (Create in FAT/NTFS) times (MAC).  The timeline
+will contain details about deleted and allocated content.  The
+resulting timeline can be either viewed within Autopsy or using
+other text viewing tools (WARNING: many HTML browsers do not handle
+large tables like a timeline very well so using a text editor is 
+recommended).
+
+<LI><B><A HREF="file_category.html">
+File Type Categories</A></B>:
+Autopsy can sort the files in an image file based on their file type.
+For example, all JPEG and GIF files would be identified as images
+and all executable files would be identified.  This mode will also
+ignore files that are found in hash databases of known good files,
+identify files that are found in a hash database of known bad files,
+and identify files that have an extension that is not consistent
+with their file type.
+
+
+<LI><B>Report Generation</B>:  
+Each of the above browsing techniques allows a report to be generated.
+This report lists the date, md5 value, investigator, and other
+context information in a text format.  This can be used for record
+keeping when deleted blocks of data have been found.
+
+</UL>
+
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/grep.html b/help/grep.html
new file mode 100644
index 0000000000..1db6060075
--- /dev/null
+++ b/help/grep.html
@@ -0,0 +1,70 @@
+<HTML>
+<HEAD><TITLE>Autopsy grep Cheat Sheet</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>grep Cheat Sheet</H2></CENTER>
+
+<H3>Escaped Values</H3>
+Autopsy uses the <TT>grep</TT> utility to search an image.  grep requires
+that some values be "escaped" if they are searched for.  Autopsy
+will automatically escape those values if the serach is being done for
+a <U>non-regular expression</U>.  The escaped values include:
+<UL>
+  <LI>\
+  <LI>.
+  <LI>[
+  <LI>^
+  <LI>$
+  <LI>'
+  <LI>*
+  <LI>initial -
+</UL>
+
+
+<H3>Regular Expressions</H3>
+Refer to the man page for 'grep' for more details of creating regular
+expressions.  Autopsy uses the '-E' flag with 'grep' to specify 
+extended regular expressions.  The following have special meaning
+with grep:
+
+<UL>
+  <LI><B>[A-Za-z]</B>: Any lower and upper case letter
+  <LI><B>[:alpha:]</B>: same as above
+  <LI><B>[0-9]</B>: Any number
+  <LI><B>[:digit:]</B>: same as above
+  <LI><B>[0-9A-Za-z]</B>: Any lower and upper case letter or digit
+  <LI><B>[:alnum:]</B>: same as above
+  <LI><B>[:space:]</B>: Any white space
+</UL>
+
+
+<P>
+To specify how many times something can occur, the following are used:
+<UL>
+  <LI><B>?</B>: Optional and can only occur once
+  <LI><B>*</B>: Optional and can occur more than once
+  <LI><B>+</B>: Required and can occur more than once
+</UL>
+
+<P>
+To specify more than one string to match, use the <B>|</B> operator.
+
+<H3>Examples</H3>
+
+<P>
+To search for 'Jane Smith' or 'Jack Smith': (Jane)|(Jack) Smith
+
+<P>
+To ensure it matches if a tab is between the first and last name:
+(Jane)|(Jack)[:space:]Smith
+
+<P>
+To search for 'Jane Smith' or 'Jane Anne Smith':
+Jane( Anne)? Smith
+
+<P>
+or: Jane([:space:]Anne)?[:space:]Smith
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/grep_lim.html b/help/grep_lim.html
new file mode 100644
index 0000000000..d8a29d27e5
--- /dev/null
+++ b/help/grep_lim.html
@@ -0,0 +1,75 @@
+<HTML>
+<HEAD><TITLE>Autopsy grep Search Limitations</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2><TT>grep</TT> Search Limitations</H2></CENTER>
+
+<H3>Overview</H3>
+<P>
+Keyword searches are very basic in Autopsy.  Autopsy uses the
+<TT>strings</TT> and <TT>grep</TT> tools on the image and when a
+hit is found, it uses <TT>ifind</TT> and <TT>ffind</TT> to identify
+the file that has allocated the string.  This is a very simple and
+basic method of searching and is not ideal.  This will cause false
+positives and will miss data that crosses a fragmented part of a file.
+The limitations are outlined in this file.
+
+<H3>What Will Be Found</H3>
+<TT>strings</TT> is first run on the image and the data is passed
+to <TT>grep</TT> to do the actual search.  This process will find
+ASCII and UNICODE strings that are consecutive anywhere in the file.   This is
+frequently referred to as the physical layout.  For example, it
+will find strings in the middle of an allocated sector, in an
+unallocated sector, in slack space, and in meta data strutures.
+This will find a string that crosses sectors, which is good if the
+two sectors are for the same file.
+
+<P>
+This technique leads to several types of false positives.  For example,
+a string that crosses from the allocated space of a file into the slack
+space would be found by <TT>grep</TT>.  A string that starts in the slack space
+and ends in the allocated space of a file will also be found.  A string 
+that crosses sectors of two different allocated files will also be found.  The
+user must identify if the hit is an actual hit or a false positive.  
+
+<h3>What Will Be Found, but May Be Confusing</h3>
+<p>
+If you are searching with regular expressions, then the exact
+location and number of hits may not be correctly reported.  If the
+count is incorrect, then it will be too small.  If the location
+is incorrect, then it will be too early (and could even be in the
+next data unit).  The reason that this is in accurate is because
+the <tt>grep</tt> tool will return a long string to Autopsy that
+will contain one or more occurances of the keyword.  Autopsy can
+not search the long string to find the exact number and location
+of the regular expression keywords like it can for non-regular
+expression keywords, so it returns only the starting location of
+the long string.
+
+<H3>What Will NOT Be Found</H3>
+The biggest category of 'hits' that will not occur using this technique
+is strings in a file that cross fragmented data units.  For example, consider
+a file that has two clusters allocated, cluster 100 and cluster 150.  A 
+string "mississippi" could have "missi" in the final 5 bytes of cluster 100
+and "ssippi" in the initial 6 bytes of cluster 150.  The string exists from
+the logial level, but not at the physical level.  Therefore, the <TT>grep</TT>
+search would not find the string.  
+
+<P>
+Although not because of <TT>grep</TT>, Autopsy will also not find
+data in the slack space during an unallocated-only search.  The
+extraction tool for The Sleuth Kit (<TT>blkls</TT>) differentiates
+between unallocated sectors in FAT and NTFS and slack space.  There
+is currently no way in Autopsy to extract the slack space and search
+it.  Autopsy currently only extracts the unallocated sectors and not
+the allocated sectors that may have deleted data in them.
+
+
+<H3>Conclusion</H3>
+Autopsy has basic keyword search functionality.  Future versions may provide
+more features and better search results.  In the mean time, it is important
+that users understand the abilities and limitations of the tool so that they
+can be taken into account during the investigation.  
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/hash_db.html b/help/hash_db.html
new file mode 100644
index 0000000000..cddb793866
--- /dev/null
+++ b/help/hash_db.html
@@ -0,0 +1,141 @@
+<HTML>
+<HEAD><TITLE>Autopsy Hash Database Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Hash Database Help</H2></CENTER>          
+
+<H3>Overview</H3>
+Hash databases are used to quickly identify known good and known
+bad files using the MD5 or SHA-1 checksum value.  Autopsy uses
+three types of hash databases to help the investigator reduce the
+number of files that they have to look at.
+
+<P>
+The <B>NIST National Software Reference Library (NSRL)</B> contains
+hashes of files that are found in operating systems and software
+distributions.  These files are <I>known to be good</I> in that they came
+from trusted sources and are typically on authorized systems.  When
+processing files in the image, this database can be used to ignore
+files because they are assumed to be known and therefore uninteresting.
+The location of this database is configured when Autopsy is installed.
+The NSRL must be obtained from NIST at <TT>www.nsrl.nist.gov</TT>.
+
+<P>
+The <B>Ignore Database</B> is a database that the investigator must
+create.  It is similar to the NIST NSRL in that it contains files
+that are <I>known to be good</I> and can be ignored if the user
+chooses to do so (only applicable when in <A HREF="file_category.html">File
+Type Category Analysis</A>).  Examples of files in this category include
+system binaries for standard builds.  See <A HREF="#db_create">Database
+Creation</A> for information on creating this database.  Its location
+is configured when the host is created and can be edited in the
+host configuration file.
+
+<P>
+The <B>Alert Database</B> is a database that the investigator must
+create.  It contains hashes of <I>known bad</I> files.  These are
+the files that an investigator wants to know about if they exist
+on the system.  Examples of this include rootkits or unauthorized
+photographs.
+When using the <A HREF="file_category.html">File Type Category
+Analysis</A>, these files will be saved in a special file.  See <A
+HREF="#db_create">Database Creation</A> for information on creating
+this database.  Its location is configured when the host is created
+and can be edited in the host configuration file.
+
+
+<H3>Database Uses</H3>
+Autopsy uses the hash databases in three ways.  
+
+<UL>
+  <LI><B><A HREF="file_category.html">File Type Category Analysis</A></B>: The
+  hash databases are used to identify the <I>known bad</I> files and
+  ignore the <I>known good</I> files.  
+
+  <LI><B><A HREF="meta_mode.html">Meta Data Analysis</A></B>: The hash
+  databases can be used to identify a file from the meta data view.  If
+  the databases are configured, the hash from a given file can be looked
+  up by pressing the 'lookup' button.    
+  All three databases can be used in this view.  This view can be found
+  from the File Analysis mode by selecting the meta data address in
+  the directory listing window.
+
+  <LI><B>Hash Database Manager</B>: From the Host Gallery view, 
+  the Hash Database Manager can be entered.  This is where one can
+  re-index the databases and perform single lookups in any of the
+  databases.  
+</UL>
+
+
+<A NAME="db_create">
+<H3>Database Creation</H3>
+Currently, Autopsy will only allows one to look entries up in a 
+hash database.  It does not allow one to easily create a database,
+but this will describe the process (it is quite simple).  
+
+<P>
+Autopsy uses the <TT>hfind</TT> tool from The Sleuth Kit to do the
+lookups.  This tool requires the database to be indexed so that it
+can perform a fast lookup using a binary search algorithm (instead
+of a slower sequential search that a tool like grep would do).
+When ever a hash database is updated (or created), it must be
+indexed.  This can be done in Autopsy in the Hash Database Manager
+(Note that the database must already be configured though).
+
+<P>
+The NIST NSRL obviously does not have to be created, but it does have
+to be indexed before it is used.
+
+<P>
+To make a hash database, we will create a file with the same format
+as the <TT>md5sum</TT> command uses.  This is just the MD5 hash,
+some white space, and the file name.  For example:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT>c4a6761b486de3c6abf7cf2c554289e5
+&nbsp;&nbsp;&nbsp;&nbsp;/bin/ps</TT><P>
+
+Make a file with this format for every line (it does not have to
+be sorted).  For example, if you have a trusted system then you can make
+a hash database of its system binaries using the following:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT># md5sum /bin/* /sbin/* > bin-md5.db</TT><P>
+
+After creation, hash databases must be indexed and sorted (this
+includes the NSRL).  Databases will be indexed by using the
+<TT>hfind</TT> tool.  The NSRL database would be indexed with:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT># hfind -i nsrl-md5  PATH_TO_NSRL/NSRLFile.txt</TT><P>
+
+A database made by <TT>md5sum</TT> would be indexed with:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT># hfind -i md5sum  bin-md5.db</TT><P>
+
+Or, if Autopsy has this file configured from when the host was added,
+then it can be re-indexed from the Hash Database Manager.
+
+<H3>Autopsy Configuration</H3>
+The alert and ignore databases are stored in the host configuration file
+with the headers of 'exclude_db' and 'alert_db'.  For example:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT>alert_db&nbsp;&nbsp;&nbsp;&nbsp;'/usr/local/hash/bad.db'</TT><P>
+These entries can be edited at any time.  
+
+<P>
+The NSRL database is configured in the <TT>conf.pl</TT> file in the
+directory where Autopsy was installed.  It has the $NSRLDB variable.  
+For example:<BR>
+
+&nbsp;&nbsp;&nbsp;&nbsp;<TT>$NSRLDB = '/usr/local/hash/nsrl/NSRLFile.txt';</TT><P>
+
+It can be edited, added, and removed at any time (but you must restart
+Autopsy).  
+
+
+<p>
+<h3>References</h3>
+Issues 6 and 7 of <a href="http://www.sleuthkit.org/informer/"  target=\"_blank\">The
+Sleuth Kit Informer</a> discussed hash databases.
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/index.html b/help/index.html
new file mode 100644
index 0000000000..c7c46aec4f
--- /dev/null
+++ b/help/index.html
@@ -0,0 +1,11 @@
+<HTML>
+<HEAD><TITLE>Autopsy Help</TITLE></HEAD>
+<LINK REL="SHORTCUT ICON" HREF="../pict/favicon.ico">
+<FRAMESET COLS="20%,*">
+
+	<FRAME SRC="menu.html">
+	<FRAME SRC="blank.html" NAME="cont">
+
+</FRAMESET>
+
+</HTML>
diff --git a/help/int_mode.html b/help/int_mode.html
new file mode 100644
index 0000000000..5152b95ad0
--- /dev/null
+++ b/help/int_mode.html
@@ -0,0 +1,29 @@
+<HTML>
+<HEAD><TITLE>Autopsy Integrity Check Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Integrity Check</H2></CENTER>
+
+<H3>Overview</H3>
+It is always important to validate the integrity of images during
+an analysis.  Autopsy uses the MD5 algorithm to validate images
+and other files that are created by Autopsy.  
+
+<P>
+The <TT>md5.txt</TT> files contain the MD5 values for files in that
+directory.  Values are added to it when file system images are 
+imported into the system or when Autopsy creates the file.  This mode
+allows one to calculate the MD5 value if it was not created before 
+and to validate the integrity.
+
+<P>
+When the <U>Image Integrity</U> button is selected from the <U>Host
+Manager</U> window, all files will be shown with their MD5 value
+if known.  Here any image can have its value verified or a new one
+created.
+
+
+<P>
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/menu.html b/help/menu.html
new file mode 100644
index 0000000000..8b74a86594
--- /dev/null
+++ b/help/menu.html
@@ -0,0 +1,37 @@
+<HTML>
+<HEAD><TITLE>Autopsy Help Topics</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<P><A HREF="general.html" TARGET="cont">General Information</A>
+
+<P><A HREF="caseman.html" TARGET="cont">Case Management</A>
+
+<HR>
+
+<P><A HREF="file_mode.html" TARGET="cont">File Analysis</A>
+
+<P><A HREF="meta_mode.html" TARGET="cont">Meta Data Analysis</A>
+
+<P><A HREF="data_mode.html" TARGET="cont">Data Unit Analysis</A>
+
+<P><A HREF="fs_mode.html" TARGET="cont">Image Details</A>
+
+<P><A HREF="srch_mode.html" TARGET="cont">Keyword Searching</A>
+
+<P><A HREF="grep.html" TARGET="cont">grep Cheat Sheet</A>
+
+<P><A HREF="grep_lim.html" TARGET="cont">grep Search Limitations</A>
+
+<P><A HREF="tl.html" TARGET="cont">Timelines</A>
+
+<P><A HREF="sequencer.html" TARGET="cont">Event Sequencer</A>
+
+<P><A HREF="file_category.html" TARGET="cont">File Type Categories</A>
+
+<P><A HREF="hash_db.html" TARGET="cont">Hash Databases</A>
+
+<P><A HREF="int_mode.html" TARGET="cont">Image Integrity</A>
+
+<P><A HREF="timezones.html" TARGET="cont">Time Zones</A>
+
+</BODY></HTML>
diff --git a/help/meta_mode.html b/help/meta_mode.html
new file mode 100644
index 0000000000..3a7475f713
--- /dev/null
+++ b/help/meta_mode.html
@@ -0,0 +1,93 @@
+<HTML>
+<HEAD><TITLE>Autopsy Metadata Analysis Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Metadata Analysis</H2></CENTER>
+<H3>Overview</H3>
+The Metadata Analysis mode allows the investigator to view the
+details of metadata structures.  The metadata structures on the
+on-disk structures that contain the details of a file, such as
+times and pointers to the allocated data units.  FFS and EXT2FS
+file systems call them inode structures, NTFS file systems call
+them Master File Table (MFT) entries (or File Entries), and the
+FAT file system calls them directory entries.  This mode is useful
+for recovering data and getting a detailed look at a file. 
+
+<H3>Input</H3>
+To view the contents of a structure, enter the address in the text
+box on the left and select <U>Display</U>.
+
+<P>
+The <U>Allocation List</U> button can also be used to view the
+allocation status of metadata structures in groups of 500.
+
+<H3>Viewing</H3>
+The structure details are displayed on the right-hand side.
+Typically, the metadata structure does not have the name of the
+file that uses that structure, so Autopsy will try to locate the
+file name.  This process is slow with a FAT file system, so it is
+not done by default.
+
+<P>
+The <U>File Type</U> is given, which is the output of the 'file'
+tool.  This tool uses any header information in the file to
+guess what its type is.  The MD5 value of the file is also given.
+
+<P>
+If Autopsy has been configured to use hash databases, then one can
+select which databases to look for the file in.  See 
+<A HREF="hash_db.html">Hash Databases</A> for more details.  
+
+<P>
+The rest of the information will vary depending on the file
+system type.  In general, the allocation status will be given as
+well as the size and each data unit that it has allocated.  A
+link will exist for each data unit that will show its contents.  
+
+<P>
+The <U>Report</U> option generates an ASCII report with the structure
+details, MD5 values, and dates in it.  The <U>View Contents</U> option
+displays the allocated data contents as one large file.  The <U>Export</U>
+option allows one to save the data contents to a file.  The
+<U>Add Note</U> button allows one to add a comment about this structure so
+that it can be later recalled. 
+
+<H3>NTFS Notes</H3>
+<P>
+NTFS is a much different design than UNIX file systems and the meta
+data structures are addressed differently.  They typically have
+the form of <TT>A-B-C</TT>, <TT>88-128-3</TT> for example.  The
+<TT>A</TT> value is the address of the file in the Master File
+Table, 88 for example. This is similar to the inode value in UNIX.
+Each file has several attributes, including at least one in files
+for the data.  The <TT>B</TT> value is the type of attribute.  In
+most cases, the data attribute has a type of 128 so this is commonly
+seen.  But, if you want to see the file name attribute, you could
+specify that type and see the contents if you like (it is fairly
+boring).  The final value, <TT>C</TT>, is the id.  Every attribute
+has a unique id value.  So, if there are multiple attributes with
+the same type, you can specify the type.
+
+<H3>FAT Notes</H3>
+<P>
+FAT does not give addresses to the directory entry structures.  in
+FAT, directory entries can be stored anywhere on the disk.  They
+are stored in the clusters allocated to the parent directory.  This
+is unlike NTFS or UNIX where the structures are in a large table
+that does not move.  get around that,
+
+
+<P>
+The addressing issue was solved by providing an address to every
+32-byte area in the Data Area.  Whether that data was currently a
+directory entry or not.  This makes it easy to find a given address
+and scale when new files are created.  The downside is that not
+every address is possible, so it is likely that you will see jumps
+in the address values.  See the documentation in The Sleuth Kit
+for more details.
+
+
+<P>
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/sequencer.html b/help/sequencer.html
new file mode 100644
index 0000000000..6afb01e3e7
--- /dev/null
+++ b/help/sequencer.html
@@ -0,0 +1,49 @@
+<HTML>
+<HEAD><TITLE>Autopsy Event Sequencer Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Event Sequencer</H2></CENTER>
+
+<H3>Overview</H3>
+<P>
+In many investigations, evidence is not found in the order that it was
+created during the incident.  The notes feature in Autopsy allows one to
+make notes about certain files, but it does not help one to put a 
+series of events in order.  
+
+<P>
+The Event Sequencer allows the investigator to make notes and comments
+about pieces of evidence.   Each note must have a time associated with
+it.  For files and meta data, the times can be one or more of the
+MAC times.  Other notes can have times entered manually.  The sequencer
+will sort the events after each is entered so that the investigator can
+quickly identify where there are gaps in the findings. 
+
+<H3>Adding an Event</H3>
+<P>
+To add an event for a file, directory, or meta data structure, select
+the <U>Add Note</U> button.  At the bottom will be check boxes that allow
+an event to be generated for each of the file's times.  The "standard"
+note does not have to be generated if it is not needed.  
+
+<P>
+To add an event from a different source, go to the Event Sequencer from
+the Host Gallery (where the images are listed).  At the bottom of
+the window will be an area where the new event can be added.  The
+<B>Source</B> of the event will be shown where the file name of
+a file event is normally shown.  Examples of this type include 
+entries from firewall logs or reports from the help desk. 
+
+<H3>Viewing the Sequence Events</H3>
+<P>
+The <U>Event Sequencer</U> button can be found in the Host Gallery.  
+This window shows the events that are sorted by the time.  Events that
+correspond to a file, directory, or meta data structure will have either
+[M-Time], [A-Time], or [C-Time] in the note that shows what time this 
+event was generated from.  Clicking on the name will show the contents of 
+the file or directory.  
+
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/srch_mode.html b/help/srch_mode.html
new file mode 100644
index 0000000000..43b65791be
--- /dev/null
+++ b/help/srch_mode.html
@@ -0,0 +1,68 @@
+<HTML>
+<HEAD><TITLE>Autopsy Keyword Search Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+
+<CENTER><H2>Keyword Search</H2></CENTER>
+<H3>Overview</H3>
+<P>
+This mode searches an image for a given string.  This is most useful
+when searching for deleted content.  To decrease the time required
+for a search, a "strings" file can serve as an index.  This file
+will contain only the ASCII strings in the image.  
+
+<P>
+Autopsy will also prompt you to create a file of unallocated data if one
+does not exist.  This obviously is useful for recovering deleted data. 
+If a string is found in this file, Autopsy will also report the location
+in the original image.  
+
+<H3>Entering the String</H3>
+
+Enter the string or regular expression into the text box.  Autopsy
+allows you to search for a either a specific string or using 'grep'
+style regular expressions.  A case insensitive search will occur
+if the appropriate box is checked, otherwise it is case sensitive.
+You will also have the option of searching for the string as an
+ASCII or a Unicode string.  Unicode is much more common in Windows
+systems than Unix systems.  If both types are selected, then two
+searches will be done.
+
+<P>
+If you have not generated a strings file or unallocated data file yet,
+that option will exist.
+
+<P>
+The <U>Load Unallocated Image</U> or <U>Load Allocated Image</U> button
+exists to switch between the two file types if they have both been
+generated.  
+
+<P>
+Autopsy also has the ability to perform pre-configured searches.  They
+are shown in the "Predefined Searches" section.  
+
+<H3>Viewing the Results</H3>
+After the image has been searched, a list of "hits" will appear on the
+left-hand side.  Each data unit that contains the string is listed with
+the offset of each occurrence.  If a regular expression is used, then the
+exact location is not given.  
+
+<P>
+If the search was done on an unallocated data file, then an option will
+exist next to each address to also view the original.  Doing so could
+reveal the inode that allocated it.
+
+<H3>Previous Searches</H3>
+The search results are saved to a file so it is easy to recall the
+results with out having to perform the search again.  
+
+<H3>Regular Expressions</H3>
+You can use grep regular expressions in the search
+(refer to the 'grep' <A HREF="grep.html">
+help page</A> and man page for more details).   To search for
+a couple of different words you would use: <TT>(foo) | (bar)</TT>.
+
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/temp.html b/help/temp.html
new file mode 100644
index 0000000000..c3a4b95ee9
--- /dev/null
+++ b/help/temp.html
@@ -0,0 +1,10 @@
+<HTML>
+<HEAD><TITLE>Autopsy File Analysis Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+
+
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/timezones.html b/help/timezones.html
new file mode 100644
index 0000000000..6fa95b7c21
--- /dev/null
+++ b/help/timezones.html
@@ -0,0 +1,508 @@
+<HTML>
+<HEAD><TITLE>Autopsy File Analysis Help - Time zone</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<p>
+
+When creating a host, you can specify a time zone.  If you do not, it will default to the time zone to which your system is set.  If the system being investigated came from a different time zone, then you need to figure out what it was called.  Below are a list of time zones that are known by most computers. 
+
+<p><br>
+This list was copied from this site:  
+<tt>http://showtunepink.com/ical/TIMEZONES</tt>
+
+<pre>
+
+Africa/Addis_Ababa
+Africa/Algiers
+Africa/Asmera
+Africa/Bangui
+Africa/Blantyre
+Africa/Brazzaville
+Africa/Bujumbura
+Africa/Cairo
+Africa/Ceuta
+Africa/Dar_es_Salaam
+Africa/Djibouti
+Africa/Douala
+Africa/Gaborone
+Africa/Harare
+Africa/Johannesburg
+Africa/Kampala
+Africa/Khartoum
+Africa/Kigali
+Africa/Kinshasa
+Africa/Lagos
+Africa/Libreville
+Africa/Luanda
+Africa/Lubumbashi
+Africa/Lusaka
+Africa/Malabo
+Africa/Maputo
+Africa/Maseru
+Africa/Mbabane
+Africa/Mogadishu
+Africa/Nairobi
+Africa/Ndjamena
+Africa/Niamey
+Africa/Porto-Novo
+Africa/Tripoli
+Africa/Tunis
+Africa/Windhoek
+America/Adak
+America/Anchorage
+America/Anguilla
+America/Antigua
+America/Araguaina
+America/Aruba
+America/Asuncion
+America/Atka
+America/Barbados
+America/Belem
+America/Belize
+America/Boa_Vista
+America/Bogota
+America/Boise
+America/Buenos_Aires
+America/Cambridge_Bay
+America/Cancun
+America/Caracas
+America/Catamarca
+America/Cayenne
+America/Cayman
+America/Chicago
+America/Chihuahua
+America/Cordoba
+America/Costa_Rica
+America/Cuiaba
+America/Curacao
+America/Dawson
+America/Dawson_Creek
+America/Denver
+America/Detroit
+America/Dominica
+America/Edmonton
+America/Eirunepe
+America/El_Salvador
+America/Ensenada
+America/Fort_Wayne
+America/Fortaleza
+America/Glace_Bay
+America/Godthab
+America/Goose_Bay
+America/Grand_Turk
+America/Grenada
+America/Guadeloupe
+America/Guatemala
+America/Guayaquil
+America/Guyana
+America/Halifax
+America/Havana
+America/Hermosillo
+America/Indiana/Indianapolis
+America/Indiana/Knox
+America/Indiana/Marengo
+America/Indiana/Vevay
+America/Indianapolis
+America/Inuvik
+America/Iqaluit
+America/Jamaica
+America/Jujuy
+America/Juneau
+America/Kentucky/Louisville
+America/Kentucky/Monticello
+America/Knox_IN
+America/La_Paz
+America/Lima
+America/Los_Angeles
+America/Louisville
+America/Maceio
+America/Managua
+America/Manaus
+America/Martinique
+America/Mazatlan
+America/Mendoza
+America/Menominee
+America/Merida
+America/Mexico_City
+America/Miquelon
+America/Monterrey
+America/Montevideo
+America/Montreal
+America/Montserrat
+America/Nassau
+America/New_York
+America/Nipigon
+America/Nome
+America/Noronha
+America/Panama
+America/Pangnirtung
+America/Paramaribo
+America/Phoenix
+America/Port-au-Prince
+America/Port_of_Spain
+America/Porto_Acre
+America/Porto_Velho
+America/Puerto_Rico
+America/Rainy_River
+America/Rankin_Inlet
+America/Recife
+America/Regina
+America/Rio_Branco
+America/Rosario
+America/Santiago
+America/Santo_Domingo
+America/Sao_Paulo
+America/Scoresbysund
+America/Shiprock
+America/St_Johns
+America/St_Kitts
+America/St_Lucia
+America/St_Thomas
+America/St_Vincent
+America/Swift_Current
+America/Tegucigalpa
+America/Thule
+America/Thunder_Bay
+America/Tijuana
+America/Tortola
+America/Vancouver
+America/Virgin
+America/Whitehorse
+America/Winnipeg
+America/Yakutat
+America/Yellowknife
+Antarctica/Casey
+Antarctica/Davis
+Antarctica/DumontDUrville
+Antarctica/Mawson
+Antarctica/McMurdo
+Antarctica/Palmer
+Antarctica/South_Pole
+Antarctica/Syowa
+Antarctica/Vostok
+Arctic/Longyearbyen
+Asia/Aden
+Asia/Almaty
+Asia/Amman
+Asia/Anadyr
+Asia/Aqtau
+Asia/Aqtobe
+Asia/Ashgabat
+Asia/Ashkhabad
+Asia/Baghdad
+Asia/Bahrain
+Asia/Baku
+Asia/Bangkok
+Asia/Beirut
+Asia/Bishkek
+Asia/Brunei
+Asia/Calcutta
+Asia/Chungking
+Asia/Colombo
+Asia/Dacca
+Asia/Damascus
+Asia/Dhaka
+Asia/Dili
+Asia/Dubai
+Asia/Dushanbe
+Asia/Gaza
+Asia/Harbin
+Asia/Hong_Kong
+Asia/Hovd
+Asia/Irkutsk
+Asia/Istanbul
+Asia/Jakarta
+Asia/Jayapura
+Asia/Jerusalem
+Asia/Kabul
+Asia/Kamchatka
+Asia/Karachi
+Asia/Kashgar
+Asia/Katmandu
+Asia/Krasnoyarsk
+Asia/Kuala_Lumpur
+Asia/Kuching
+Asia/Kuwait
+Asia/Macao
+Asia/Magadan
+Asia/Manila
+Asia/Muscat
+Asia/Nicosia
+Asia/Novosibirsk
+Asia/Omsk
+Asia/Phnom_Penh
+Asia/Pyongyang
+Asia/Qatar
+Asia/Rangoon
+Asia/Riyadh
+Asia/Riyadh87
+Asia/Riyadh88
+Asia/Riyadh89
+Asia/Saigon
+Asia/Samarkand
+Asia/Seoul
+Asia/Shanghai
+Asia/Singapore
+Asia/Taipei
+Asia/Tashkent
+Asia/Tbilisi
+Asia/Tehran
+Asia/Tel_Aviv
+Asia/Thimbu
+Asia/Thimphu
+Asia/Tokyo
+Asia/Ujung_Pandang
+Asia/Ulaanbaatar
+Asia/Ulan_Bator
+Asia/Urumqi
+Asia/Vientiane
+Asia/Vladivostok
+Asia/Yakutsk
+Asia/Yekaterinburg
+Asia/Yerevan
+Atlantic/Azores
+Atlantic/Bermuda
+Atlantic/Canary
+Atlantic/Cape_Verde
+Atlantic/Faeroe
+Atlantic/Jan_Mayen
+Atlantic/Madeira
+Atlantic/South_Georgia
+Atlantic/Stanley
+Australia/ACT
+Australia/Adelaide
+Australia/Brisbane
+Australia/Broken_Hill
+Australia/Canberra
+Australia/Darwin
+Australia/Hobart
+Australia/LHI
+Australia/Lindeman
+Australia/Lord_Howe
+Australia/Melbourne
+Australia/NSW
+Australia/North
+Australia/Perth
+Australia/Queensland
+Australia/South
+Australia/Sydney
+Australia/Tasmania
+Australia/Victoria
+Australia/West
+Australia/Yancowinna
+Brazil/Acre
+Brazil/DeNoronha
+Brazil/East
+Brazil/West
+CET
+CST6CDT
+Canada/Atlantic
+Canada/Central
+Canada/East-Saskatchewan
+Canada/Eastern
+Canada/Mountain
+Canada/Newfoundland
+Canada/Pacific
+Canada/Saskatchewan
+Canada/Yukon
+Chile/Continental
+Chile/EasterIsland
+Cuba
+EET
+EST
+EST5EDT
+Egypt
+Eire
+Etc/GMT+1
+Etc/GMT+10
+Etc/GMT+11
+Etc/GMT+12
+Etc/GMT+2
+Etc/GMT+3
+Etc/GMT+4
+Etc/GMT+5
+Etc/GMT+6
+Etc/GMT+7
+Etc/GMT+8
+Etc/GMT+9
+Etc/GMT-1
+Etc/GMT-10
+Etc/GMT-11
+Etc/GMT-12
+Etc/GMT-13
+Etc/GMT-14
+Etc/GMT-2
+Etc/GMT-3
+Etc/GMT-4
+Etc/GMT-5
+Etc/GMT-6
+Etc/GMT-7
+Etc/GMT-8
+Etc/GMT-9
+Europe/Amsterdam
+Europe/Andorra
+Europe/Athens
+Europe/Belfast
+Europe/Belgrade
+Europe/Berlin
+Europe/Bratislava
+Europe/Brussels
+Europe/Bucharest
+Europe/Budapest
+Europe/Chisinau
+Europe/Copenhagen
+Europe/Dublin
+Europe/Gibraltar
+Europe/Helsinki
+Europe/Istanbul
+Europe/Kaliningrad
+Europe/Kiev
+Europe/Lisbon
+Europe/Ljubljana
+Europe/London
+Europe/Luxembourg
+Europe/Madrid
+Europe/Malta
+Europe/Minsk
+Europe/Monaco
+Europe/Moscow
+Europe/Nicosia
+Europe/Oslo
+Europe/Paris
+Europe/Prague
+Europe/Riga
+Europe/Rome
+Europe/Samara
+Europe/San_Marino
+Europe/Sarajevo
+Europe/Simferopol
+Europe/Skopje
+Europe/Sofia
+Europe/Stockholm
+Europe/Tallinn
+Europe/Tirane
+Europe/Tiraspol
+Europe/Uzhgorod
+Europe/Vaduz
+Europe/Vatican
+Europe/Vienna
+Europe/Vilnius
+Europe/Warsaw
+Europe/Zagreb
+Europe/Zaporozhye
+Europe/Zurich
+GB
+GB-Eire
+GMT
+HST
+Hongkong
+Indian/Antananarivo
+Indian/Chagos
+Indian/Christmas
+Indian/Cocos
+Indian/Comoro
+Indian/Kerguelen
+Indian/Mahe
+Indian/Maldives
+Indian/Mauritius
+Indian/Mayotte
+Indian/Reunion
+Iran
+Israel
+Jamaica
+Japan
+Kwajalein
+Libya
+MET
+MST
+MST7MDT
+Mexico/BajaNorte
+Mexico/BajaSur
+Mexico/General
+Mideast/Riyadh87
+Mideast/Riyadh88
+Mideast/Riyadh89
+NZ
+NZ-CHAT
+Navajo
+PRC
+PST8PDT
+Pacific/Apia
+Pacific/Auckland
+Pacific/Chatham
+Pacific/Easter
+Pacific/Efate
+Pacific/Enderbury
+Pacific/Fakaofo
+Pacific/Fiji
+Pacific/Funafuti
+Pacific/Galapagos
+Pacific/Gambier
+Pacific/Guadalcanal
+Pacific/Guam
+Pacific/Honolulu
+Pacific/Johnston
+Pacific/Kiritimati
+Pacific/Kosrae
+Pacific/Kwajalein
+Pacific/Majuro
+Pacific/Marquesas
+Pacific/Midway
+Pacific/Nauru
+Pacific/Niue
+Pacific/Norfolk
+Pacific/Noumea
+Pacific/Pago_Pago
+Pacific/Palau
+Pacific/Pitcairn
+Pacific/Ponape
+Pacific/Port_Moresby
+Pacific/Rarotonga
+Pacific/Saipan
+Pacific/Samoa
+Pacific/Tahiti
+Pacific/Tarawa
+Pacific/Tongatapu
+Pacific/Truk
+Pacific/Wake
+Pacific/Wallis
+Pacific/Yap
+Poland
+Portugal
+ROC
+ROK
+Singapore
+SystemV/AST4
+SystemV/AST4ADT
+SystemV/CST6
+SystemV/CST6CDT
+SystemV/EST5
+SystemV/EST5EDT
+SystemV/HST10
+SystemV/MST7
+SystemV/MST7MDT
+SystemV/PST8
+SystemV/PST8PDT
+SystemV/YST9
+SystemV/YST9YDT
+Turkey
+US/Alaska
+US/Aleutian
+US/Arizona
+US/Central
+US/East-Indiana
+US/Eastern
+US/Hawaii
+US/Indiana-Starke
+US/Michigan
+US/Mountain
+US/Pacific
+US/Samoa
+W-SU
+WET
+
+</pre>
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/help/tl.html b/help/tl.html
new file mode 100644
index 0000000000..621165414b
--- /dev/null
+++ b/help/tl.html
@@ -0,0 +1,183 @@
+<HTML>
+<HEAD><TITLE>Autopsy Timeline Analysis Help</TITLE></HEAD>
+<BODY BGCOLOR=#CCCC99>
+
+<CENTER><H2>Timeline Mode</H2></CENTER>
+<H3>Overview</H3>
+<P>
+For some investigations, creating a timeline of activity can be 
+useful to identify places where the analysis should begin.   Of
+course file times can be easily modified by an attacker, so they
+can not be 100% trusted.  But, Autopsy can create timelines of
+file activity.  
+
+<P>
+Files have at least three times associated with them.  The details of
+each time varies with the file system type.  
+
+<P>
+The following times exist for UNIX file systems (EXT2FS & FFS): 
+
+<UL>
+  <LI><B>Modified</B>: When the file data was last 
+  modified.  This time can be modified using the utimes()
+  function.  This time is preserved in a 'tar' archive, so it is
+  possible to have M-times of files prior to when they were introduced
+  to the system.  
+
+  <LI><B>Accessed</B>: When the file data was last
+  accessed.  This time can be modified using the utimes() function.
+
+  <LI><B>Changed</B>: When the file status (inode data)
+  was last changed.  This time can not be set using the utimes()
+  function in UNIX (but it will be set when utimes() is used to modify
+  other values).
+</UL>
+
+The EXT2FS file system also has a Deleted time, but it is not displayed
+in the timeline.
+
+<P>
+A FAT File system has the following times:
+<UL>
+  <LI><B>Written</B>: When the file was last written to.
+  It is the ONLY required time in the FAT file system.
+
+  <LI><B>Accessed</B>: When the file was last accessed.  In
+  FAT, it is only accurate to the day (not minute).  It is an optional
+  value, so some Operating Systems may not update it.
+
+  <LI><B>Created</B>: When the file was created.  It is 
+  also optional, so some Operating Systems may not update it.  In fact,
+  many Windows installations have a C-Time of 0 for directories such as
+  <TT>C:\\Windows</TT> and <TT>C:\\Program Files</TT>.  
+</UL>
+
+<P>
+The NTFS File system has several times, four of which are
+used in the timeline.  These times are gathered from the
+<TT>\$STANDARD_INFORMATION</TT> attribute. 
+<UL>
+  <LI><B>Written</B>: When the file was last written to.
+
+  <LI><B>Accessed</B>: When the file was last accessed.  
+
+  <LI><B>Changed</B>: When the MFT entry was last modified.
+
+  <LI><B>Created</B>: When the file was created.
+</UL>
+
+
+<H3>How to Create a Timeline</H3>
+Creating a timeline takes two steps.  The first step extracts and
+saves the needed data from each file system images.  This step
+stores the data from each specific file system in a generic format.
+Historically (from TCT), this file was called the <TT>body</TT>
+file.  The second step takes the <TT>body</TT> file as input and
+generates an ASCII timeline of file activity between two specified
+dates.  The resulting timeline can be viewed in Autopsy or using
+a text editor.
+
+
+<H3>Creating the Body File</H3>
+The file meta-data must be extracted from the file system images and saved
+to the <TT>body</TT> file.  There are three major types of files that data 
+can be extracted for:  
+<UL>
+  <LI><B>Allocated Files</B>:
+Files that are seen when doing an 'ls' or 'dir' in a directory.  In
+other words, these are the files that have an allocated file name 
+structure.  
+
+  <LI><B>Unallocated Files</B>:
+Files that have been deleted, but that TSK can still access. 
+Files in this category include orphan files, which are files that
+no longer have a name, but whose metadata still exists. 
+If a deleted file name points to an allocated metadata structure, 
+then the name will say (realloc) next to it.
+
+</UL>
+
+<P>
+To create the <TT>body</TT> file, select the images to analyze from
+the list on top.  Next, select which types of data that you want to
+extract.  By default all types are extracted.  Lastly, identify the 
+name of the body file to create.  The file will be created in the
+<TT>output</TT> directory and an entry will be added to the host config
+file.   You will be given the option to calculate the MD5 value of
+the new file.
+
+
+<H3>Creating the Timeline</H3>
+The next window allows one to create a timeline based on the newly
+created <TT>body</TT> file.  Or, one can select the option from
+the left-hand side menu.  The range of dates must be selected as
+well as the name of the timeline file.  The resulting timeline will
+use the time zone for the host. 
+
+<P>
+If the images are from a
+UNIX file system, then the password and group files can be used to
+change the UID and GID to actual names.  If the partition from the
+root directory exists in the host, select it from the pull down
+list and Autopsy will find the <TT>/etc/passwd</TT> and
+<TT>/etc/group</TT> file contents.
+
+<P>
+The timeline  will be created in the <TT>output</TT> directory.
+You will be given the option to calculate the MD5 hash value of
+the new file.
+
+<H3>Viewing the Timeline</H3>
+The timeline can be viewed in Autopsy.  Timelines tend to be very
+large though and have thousands of lines.  HTML browsers can not
+handle tables of this size very well and typically have trouble
+processing it.  Therefore, Autopsy only allows you to view the
+timeline one month at a time.  It will likely be easier to open a
+shell and examine the timeline in a text editor or pager such as
+'less' or 'more'.
+
+<P>
+The 'summary' link will show a page that contains a monthly summary
+of activity.  It shows how many many events occured in that month
+and links to the details.  This allows one to get a high level 
+view of when a lot of activity last occured.  
+
+<P>
+The following columns are in the timeline (in order):
+<UL>
+  <LI><B>Date and time</B>of the activity.  If no date is given,
+  then the activity occured at the same time as the previous entry
+  with a time.
+
+  <LI><B>Size</B>.  The size of the file.
+
+  <LI><B>Entry Type</B>.  The 'm', 'a', 'c', and 'b' letters will exist to 
+  identify which of the activity types this entry corresponds to.  'm' is
+  for modified times, 'a' is for access times, 'c' is for change times, and
+  'b' is for created (or born) times.
+
+  <LI><B>Mode</B.  The UNIX mode is shown.
+
+  <LI><B>UID</B>.  The User Id or User name is shown.  If a password
+  file was provided when the timeline was created, then the colunn should
+  only have names.  
+
+  <LI><B>GID</B>.  The Group Id or Group name is shown.  If a group
+  file was provided when the timeline was created, then the colunn should
+  only have names.  
+
+  <LI><B>Meta Data Address</B>.  The inode or MFT entry address for the 
+  associated file.  
+
+  <LI><B>File Name</B>.  The name of the file and the destination of a 
+  symbolic link.  Deleted entries will have '(deleted)' at the end and 
+  deleted entries that point to an allocated meta data structure will
+  have '(realloc)'.  
+
+
+</UL>
+
+<HR>
+<FONT SIZE=0>Brian Carrier</FONT>
+</BODY></HTML>
diff --git a/lib/.perltidyrc b/lib/.perltidyrc
new file mode 100755
index 0000000000..f1f2e71a01
--- /dev/null
+++ b/lib/.perltidyrc
@@ -0,0 +1,5 @@
+-i=4	# indent of 4
+-pt=2	# paren tightness
+-sbt=2	# square paren tightness
+-bt=2	# curly paren tightness
+-nsfs	# no space after semi in for loop
diff --git a/lib/Appsort.pm b/lib/Appsort.pm
new file mode 100644
index 0000000000..bdf82bfad6
--- /dev/null
+++ b/lib/Appsort.pm
@@ -0,0 +1,399 @@
+#
+# Sort files based on their application type (content)
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2008 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Appsort;
+
+$Appsort::FRAME = 1;
+$Appsort::MENU  = 2;
+$Appsort::ENTER = 3;
+$Appsort::RUN   = 4;
+$Appsort::VIEW  = 5;
+$Appsort::BLANK = 6;
+
+sub main {
+
+    if ($::LIVE == 1) {
+        Print::print_html_header("Unsupported for Live Analysis");
+        print
+"<center><h2>This feature is not available during a live analysis</h2></center>";
+        Print::print_html_footer();
+        return 0;
+    }
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Appsort::FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view == $Appsort::BLANK) {
+        return blank();
+    }
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the meta data address
+    if ($view == $Appsort::FRAME) {
+        return frame();
+    }
+    elsif ($view == $Appsort::ENTER) {
+        return enter();
+    }
+    elsif ($view == $Appsort::MENU) {
+        return menu();
+    }
+    elsif ($view == $Appsort::RUN) {
+        return run();
+    }
+    elsif ($view == $Appsort::VIEW) {
+        return view();
+    }
+    else {
+        Print::print_check_err("Invalid Application Sorting View");
+    }
+}
+
+sub get_sorter_dir {
+    if ($Args::args{'vol'} =~ /^($::REG_VNAME)$/) {
+        return "$::host_dir" . "$::DATADIR/sorter-$1/";
+    }
+    Print::print_err("Invalid Sorter Directory");
+}
+
+sub get_sorter_graphics_dir {
+    if ($Args::args{'vol'} =~ /^($::REG_VNAME)$/) {
+        return "$::host_dir" . "$::DATADIR/sorter-graphics-$1/";
+    }
+    Print::print_err("Invalid Sorter Graphics Directory");
+}
+
+# sorter frameset
+sub frame {
+    Print::print_html_header_frameset("Sorter on $Args::args{'vol'}");
+
+    print "<frameset cols=\"20%,80%\">\n";
+
+    # Block List
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_APPSORT&view=$Appsort::MENU&"
+      . "$Args::baseargs\">\n";
+
+    # Blank
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_APPSORT&view=$Appsort::BLANK&"
+      . "$Args::baseargs\" name=\"content\">\n"
+      . "</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# The left-hand frame for running sorter
+sub menu {
+    Print::print_html_header("sorter menu");
+
+    print "<p><a href=\"$::PROGNAME?mod=$::MOD_APPSORT&view=$Appsort::ENTER&"
+      . "$Args::baseargs\" "
+      . "target=\"content\">Sort Files by Type</a>";
+
+    print "<p><a href=\"$::PROGNAME?mod=$::MOD_APPSORT&view=$Appsort::VIEW&"
+      . "$Args::baseargs\" "
+      . "target=\"content\">View Sorted Files</a>";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Get the data and print the form so that sorter can be run
+sub enter {
+    Print::print_html_header("sorter - enter data to create");
+
+    print "<center>"
+      . "<h3>File Type Sortings</h3></center><br>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_APPSORT\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Appsort::RUN\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$Args::args{'vol'}\">\n"
+      . Args::make_hidden();
+
+    print <<EOF1;
+<p>The <b>sorter</b> tool will process an image and organize the
+files based on their file type.  The files are organized into categories
+that are defined in configuration files.  The categories will be saved
+in the <tt>$::DATADIR</tt> directory.  
+<hr>
+EOF1
+
+    my $sort_dir = get_sorter_dir();
+    if (-d "$sort_dir") {
+        print "WARNING: This will overwrite any existing data in:<br>"
+          . "&nbsp;&nbsp;&nbsp;&nbsp;<tt>$sort_dir</tt><br>\n";
+    }
+
+    my $tab = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
+
+    print <<EOF2;
+
+<p>
+<input type=\"checkbox\" name=\"sorter_cat\" value=\"1\" CHECKED>
+Sort files into categories by type
+
+  <p>$tab
+  <input type=\"checkbox\" name=\"sorter_unk\" value=\"1\">
+  Do not save data about <tt>unknown</tt> file types
+
+  <p>$tab
+  <input type=\"checkbox\" name=\"sorter_save\" value=\"1\">
+  Save a copy of files in category directory (may require lots of disk space)
+
+  <p>$tab
+  <input type=\"checkbox\" name=\"sorter_img\" value=\"1\">
+  Save ONLY graphic images and make thumbnails <br>
+  $tab (may require lots of disk space and will save to a different directory than sorting all file types)
+
+<p>
+<input type=\"checkbox\" name=\"sorter_ext\" value=\"1\" CHECKED>
+Extension and File Type Validation
+
+EOF2
+
+    if (($::NSRLDB ne "") && (-e "$::NSRLDB")) {
+
+        # NSRL
+        print
+"<p><input type=\"checkbox\" name=\"sorter_nsrl\" value=\"1\" CHECKED>"
+          . "Exclude files in the <b>NIST NSRL</b>\n";
+    }
+
+    if (($Caseman::alert_db ne "") && (-e "$Caseman::alert_db")) {
+        print
+"<p><input type=\"checkbox\" name=\"sorter_alert\" value=\"1\" CHECKED>"
+          . "Alert files that are found in the <b>Alert Hash Database</b>\n";
+    }
+
+    if (($Caseman::exclude_db ne "") && (-e "$Caseman::exclude_db")) {
+        print
+"<p><input type=\"checkbox\" name=\"sorter_exclude\" value=\"1\" CHECKED>"
+          . "Ignore files that are found in the <b>Exclude Hash Database</b>\n";
+    }
+
+    print "<p><input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return;
+}
+
+# Run sorter on the image
+sub run {
+    Print::print_html_header("sorter - create");
+
+    my $sort_args = "";
+    my $ext       = 0;
+    my $cat       = 0;
+
+    my $vol = Args::get_vol('vol');
+    my $mnt = $Caseman::vol2mnt{$vol};
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    Print::log_host_inv("Running 'sorter' on ($Caseman::vol2sname{$vol}");
+
+    $ext = 1
+      if ( (exists $Args::args{'sorter_ext'})
+        && ($Args::args{'sorter_ext'} == 1));
+    $cat = 1
+      if ( (exists $Args::args{'sorter_cat'})
+        && ($Args::args{'sorter_cat'} == 1));
+
+    if (($cat == 0) && ($ext == 0)) {
+        print "At least one action must be selected\n"
+          . "<p><a href=\"$::PROGNAME?mod=$::MOD_APPSORT&"
+          . "view=$Appsort::ENTER&$Args::baseargs\">"
+          . "<img border=0 src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+          . "width=43 height=20></a>\n";
+
+        return;
+    }
+
+    # If both actions are wanted then no flags are needed
+    $sort_args .= "-e " if (($ext == 1) && ($cat == 0));
+    $sort_args .= "-E " if (($ext == 0) && ($cat == 1));
+
+    my $sort_dir = get_sorter_dir();
+
+    if ($cat == 1) {
+        if (   (exists $Args::args{'sorter_img'})
+            && ($Args::args{'sorter_img'} == 1))
+        {
+            my $config = "$::TSKDIR/../share/tsk3/sorter/images.sort";
+
+            Print::print_err("images configuration file not found ($config)")
+              unless (-e "$config");
+
+            $sort_args .= "-C \'$config\' -s -U ";
+
+            $sort_dir = get_sorter_graphics_dir();
+
+        }
+        else {
+            $sort_args .= "-s "
+              if ( (exists $Args::args{'sorter_save'})
+                && ($Args::args{'sorter_save'} == 1));
+
+            $sort_args .= "-U "
+              if ( (exists $Args::args{'sorter_unk'})
+                && ($Args::args{'sorter_unk'} == 1));
+        }
+    }
+
+    if ($::NSRLDB ne "") {
+        $sort_args .= "-n \'$::NSRLDB\' "
+          if ( (exists $Args::args{'sorter_nsrl'})
+            && ($Args::args{'sorter_nsrl'} == 1));
+    }
+
+    if ($Caseman::alert_db ne "") {
+        $sort_args .= "-a \'$Caseman::alert_db\' "
+          if ( (exists $Args::args{'sorter_alert'})
+            && ($Args::args{'sorter_alert'} == 1));
+    }
+
+    if ($Caseman::exclude_db ne "") {
+        $sort_args .= "-x \'$Caseman::exclude_db\' "
+          if ( (exists $Args::args{'sorter_exclude'})
+            && ($Args::args{'sorter_exclude'} == 1));
+    }
+
+    unless (-d "$sort_dir") {
+        unless (mkdir "$sort_dir", $::MKDIR_MASK) {
+            Print::print_err("Error making $sort_dir");
+        }
+    }
+    if (-e "$sort_dir/index.html") {
+        unlink("$sort_dir/index.html");
+    }
+
+    my $exec =
+"-h -m '$mnt' -d '$sort_dir' -o $offset -i $imgtype -f $ftype $sort_args $img";
+
+    # print "Executing: <tt>sorter $exec</tt><p>\n";
+
+    # Execute Sorter
+    my $hit_cnt = 0;
+    $SIG{ALRM} = sub {
+        if (($hit_cnt++ % 5) == 0) {
+            print "+";
+        }
+        else {
+            print "-";
+        }
+        alarm(5);
+    };
+    alarm(5);
+
+    local *OUT;
+    Exec::exec_pipe(*OUT, "LANG=C LC_ALL=C '$::TSKDIR/sorter' $exec");
+    alarm(0);
+    $SIG{ALRM} = 'DEFAULT';
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        print "$_<br>\n";
+        $hit_cnt = 0;
+    }
+
+    close(OUT);
+
+    if (-e "$sort_dir/index.html") {
+        print "<p>Output can be found by viewing:<br>"
+          . "&nbsp;&nbsp;<tt>$sort_dir/index.html</tt><p>\n";
+
+        # Print the index.html file from the output
+        print "<hr><center><h3>Results Summary</h3></center>\n";
+        open INDEX, "<$sort_dir/index.html"
+          or die "Can't open sorter index file ($sort_dir/index.html)";
+
+        while (<INDEX>) {
+            next if ((/^<HTML><HEAD><TITLE>/i)
+                || (/^<BODY><center><H2>/i));
+
+            # Extract out the symlinks to the categories
+            if (/^\s*<li><a href="\.\/[\w\.]+">([\w\s]+)<\/a> \((\d+)\)\s*$/i) {
+                print "<LI>$1 ($2)\n";
+            }
+
+            # Skip the link on the thumbnails link
+            elsif (/^\s*\(<a href=[\"\.\/\w]+>thumbnails<\/A>\)\s*$/) {
+                print "(thumbnails)\n";
+            }
+            else {
+                print "$_";
+            }
+        }
+        close(INDEX);
+    }
+
+    Print::print_html_footer();
+    return;
+}
+
+# View Page
+sub view {
+    Print::print_html_header("");
+    print "<center><h3>File Type Sorting</h3>\n"
+      . "Autopsy does not currently support viewing the sorted files.<br>\n"
+      . "After sorting, you can view the results by opening the following file:<p>\n";
+    print "<tt>" . get_sorter_dir() . "index.html</tt>";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("");
+    print "<center><h3>File Type Sorting</h3>\n"
+      . "In this mode, Autopsy will examine allocated and unallocated files<br> and "
+      . "sort them into categories and verify the extension.<p>This allows you to find a file based on"
+      . "its type and find \"hidden\" files.<p>\n"
+      .
+
+      "WARNING: This can be a time intensive process.<br>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
diff --git a/lib/Appview.pm b/lib/Appview.pm
new file mode 100644
index 0000000000..3a407fa2e1
--- /dev/null
+++ b/lib/Appview.pm
@@ -0,0 +1,291 @@
+#
+# View the application layer (HTML, picutures etc.)
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Updated 1/15
+
+package Appview;
+
+$Appview::CELL_FRAME = 1;
+$Appview::CELL_MENU  = 2;
+$Appview::CELL_CONT  = 3;
+
+sub main {
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Appview::CELL_FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    # Check Basic Args
+    Args::check_vol('vol');
+    Args::check_meta('meta');
+    Args::check_dir();
+    Args::check_recmode();
+
+    if ($view == $Appview::CELL_FRAME) {
+        return cell_frame();
+    }
+    elsif ($view == $Appview::CELL_CONT) {
+        return cell_content();
+    }
+    elsif ($view == $Appview::CELL_MENU) {
+        return cell_menu();
+    }
+    else {
+        Print::print_check_err("Invalid Application Viewing View");
+    }
+}
+
+#########################################################################
+#
+# CELL - Sanitized Environment
+#
+
+my $CELL_MODE_SANIT = 1;
+my $CELL_MODE_NORM  = 2;
+
+sub cell_frame {
+    Print::print_html_header_frameset("Autopsy Cell");
+    my $vol = Args::get_vol('vol');
+    my $mnt = $Caseman::vol2mnt{$vol};
+
+    my $fname = "$mnt$Args::args{'dir'}";
+
+    print "<frameset rows=\"15%,85%\">\n";
+
+    # if a mode was not given, then choose the Sanitized by default
+    $Args::args{'cell_mode'} = $CELL_MODE_SANIT
+      unless ((exists $Args::args{'cell_mode'})
+        && ($Args::args{'cell_mode'} =~ /^\d$/));
+
+    my $url =
+        "&$Args::baseargs&meta=$Args::enc_args{'meta'}"
+      . "&dir=$Args::enc_args{'dir'}&"
+      . "cell_mode=$Args::args{'cell_mode'}&recmode=$Args::args{'recmode'}";
+
+    print
+"<frame src=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_MENU${url}\">\n"
+      . "<frame src=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_CONT${url}\">\n"
+      . "</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Print the menu on top.  This allows one to export the file and change modes
+sub cell_menu {
+    Args::check_cell_mode();
+
+    Print::print_html_header("Cell Header");
+
+    my $cell_mode = $Args::args{'cell_mode'};
+
+    my $url =
+        "&$Args::baseargs&meta=$Args::enc_args{'meta'}&"
+      . "dir=$Args::enc_args{'dir'}&recmode=$Args::enc_args{'recmode'}";
+
+    if ($cell_mode == $CELL_MODE_SANIT) {
+
+        print <<EOF1;
+<center>
+This file is currently being viewed in a <b>sanitized environment</b><br>
+HTML files have been edited to disable scripts and links. 
+The script contents will be shown as text.<br>
+Pictures have been replaced by place holders<br>
+
+<table width=300 cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center>
+    <a href=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_FRAME$url&cell_mode=$CELL_MODE_NORM\" 
+      target=\"_top\">
+	  <img src=\"pict/sanit_b_norm.jpg\" alt=\"Normal\" border=\"0\">
+	</a>
+  </td>
+EOF1
+
+    }
+
+    elsif ($cell_mode == $CELL_MODE_NORM) {
+        print <<EOF2;
+<center>
+This file is currently being viewed in a <b>normal environment</b><br>
+HTML files are being viewed without modification.<br>
+
+<table width=300 cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center>
+    <a href=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_FRAME&$url&cell_mode=$CELL_MODE_SANIT\" 
+      target=\"_top\">
+	  <img src=\"pict/sanit_b_san.jpg\" alt=\"Sanitized\" border=\"0\">
+	</a>
+  </td>
+EOF2
+    }
+
+    # Export the file
+    print "<td align=center>\n"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::EXPORT&$url\">"
+      . "<img src=\"pict/but_export.jpg\" alt=\"export\" border=\"0\" "
+      . "width=123 height=20>"
+      . "</a></td></tr>\n";
+
+    print "<tr><td colspan=\"2\" align=\"center\">"
+      . "Deleted File Recovery Mode</td></tr>\n"
+      if ($Args::enc_args{'recmode'} == $File::REC_YES);
+
+    print "</table>";
+
+    Print::print_html_footer();
+    return;
+}
+
+# Display safe and common things in the browser (pictures, basic html)
+sub cell_content {
+    Args::check_meta('meta');
+    Args::check_dir();
+    Args::check_cell_mode();
+
+    my $meta = Args::get_meta('meta');
+    my $vol  = Args::get_vol('vol');
+    my $mnt  = $Caseman::vol2mnt{$vol};
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $fname = "$mnt$Args::args{'dir'}";
+
+    my $recflag = "";
+
+    $recflag = " -r "
+      if (Args::get_recmode() == $File::REC_YES);
+
+    # identify what type it is
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag  -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+    );
+    my $file_type = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $file_type = "Error getting file type"
+      if ((!defined $file_type) || ($file_type eq ""));
+
+    if ($file_type =~ /JPEG image data/) {
+        Print::log_host_inv("$vol: Viewing $fname ($meta) as JPEG");
+        print "Content-type: image/jpeg$::HTTP_NL$::HTTP_NL";
+    }
+    elsif ($file_type =~ /GIF image data/) {
+        Print::log_host_inv("$vol: Viewing $fname ($meta) as GIF");
+        print "Content-type: image/gif$::HTTP_NL$::HTTP_NL";
+    }
+    elsif ($file_type =~ /PNG image data/) {
+        Print::log_host_inv("$vol: Viewing $fname ($meta) as PNG");
+        print "Content-type: image/png$::HTTP_NL$::HTTP_NL";
+    }
+    elsif ($file_type =~ /PC bitmap data/) {
+        Print::log_host_inv("$vol: Viewing $fname ($meta) as BMP");
+        print "Content-type: image/bmp$::HTTP_NL$::HTTP_NL";
+    }
+    elsif ($file_type =~ /HTML document text/) {
+        Print::log_host_inv("$vol: Viewing $fname ($meta) as HTML");
+        print "Content-type: text/html$::HTTP_NL$::HTTP_NL";
+    }
+    else {
+        Print::log_host_inv("$vol: Unknown format of meta $meta ");
+        Print::print_check_err("Unknown File Type for Viewing: $file_type");
+    }
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/icat' -f $ftype $recflag  -o $offset -i $imgtype $img $meta"
+    );
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+
+        # Parse out bad "stuff"
+        if (   ($file_type =~ /HTML document text/)
+            && ($Args::args{'cell_mode'} == $CELL_MODE_SANIT))
+        {
+            $_ =~ s/\bsrc=/src=$::SANITIZE_TAG\?/ig;
+            $_ =~ s/\bhref=/href=$::SANITIZE_TAG\?/ig;
+            $_ =~ s/<script/<$::SANITIZE_TAG-script/ig;
+            $_ =~ s/\bbackground=/background=$::SANITIZE_TAG\?/ig;
+        }
+        print "$_";
+    }
+    print "$::HTTP_NL$::HTTP_NL";
+    close(OUT);
+    return 0;
+}
+
+sub sanitize_pict {
+    my $url  = shift();
+    my $lurl = $url;
+    $lurl =~ tr/[A-Z]/[a-z]/;
+
+    print "HTTP/1.0 200 OK$::HTTP_NL";
+    if (   ($lurl =~ /.jpg/i)
+        || ($lurl =~ /.jpeg/i)
+        || ($lurl =~ /.gif/i)
+        || ($lurl =~ /.png/i)
+        || ($lurl =~ /.bmp/i))
+    {
+
+        open PICT, "<$::PICTDIR/$::SANITIZE_PICT"
+          or die "can not open $::PICTDIR/$::SANITIZE_PICT";
+
+        print "Content-type: image/jpeg$::HTTP_NL$::HTTP_NL";
+        while (<PICT>) {
+            print "$_";
+        }
+        close(PICT);
+        print "$::HTTP_NL$::HTTP_NL";
+    }
+    else {
+        $url =~ tr/\+/ /;
+        $url =~ s/%([a-f0-9][a-f0-9])/chr( hex( $1 ) )/eig;
+
+        Print::print_html_header("Denied");
+        print "<h1><center>Unable to Complete Request</h1><br>\n"
+          . "<tt>Autopsy</tt> will not follow links from "
+          . "untrusted HTML pages:<br><tt>$url</tt><br>\n";
+        Print::print_html_footer();
+    }
+
+    exit(0);
+}
+
diff --git a/lib/Args.pm b/lib/Args.pm
new file mode 100644
index 0000000000..705cc89a39
--- /dev/null
+++ b/lib/Args.pm
@@ -0,0 +1,927 @@
+#
+# Functions to check and get the arguments from URL
+#
+# ver 2.00+
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2003-2004 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Args;
+
+# Parse the argument string into the args hash
+sub parse_args {
+    my $lcl_args = shift;
+    foreach my $nam_val (split(/&/, $lcl_args)) {
+        my ($name, $value) = split(/=/, $nam_val);
+        if (defined $value) {
+            my $dec_name = url_decode($name);
+            $Args::enc_args{$dec_name} = $value;
+            $Args::args{$dec_name}     = url_decode($value);
+        }
+    }
+}
+
+sub url_encode {
+    my $text = shift;
+    $text =~ s/([^a-z0-9_.!~*'() -])/sprintf "%%%02X", ord($1)/eig;
+    $text =~ tr/ /+/;
+    return $text;
+}
+
+sub url_decode {
+    my $text = shift;
+    $text =~ tr/\+/ /;
+    $text =~ s/%([a-f0-9][a-f0-9])/chr( hex( $1 ) )/eig;
+    return $text;
+}
+
+# This assumes that the checking of the types has been done and this just
+# makes a string of the key values if they exist
+#
+#  case
+#  host
+#  img
+
+# Must add & after
+sub make_baseargs {
+    $Args::baseargs = "";
+
+    # The standard case, host, and investigator
+    $Args::baseargs .= "case=$Args::enc_args{'case'}&"
+      if ((exists $Args::enc_args{'case'}) && ($Args::enc_args{'case'} ne ""));
+    $Args::baseargs .= "host=$Args::enc_args{'host'}&"
+      if ((exists $Args::enc_args{'host'}) && ($Args::enc_args{'host'} ne ""));
+    $Args::baseargs .= "inv=$Args::enc_args{'inv'}&"
+      if ((exists $Args::enc_args{'inv'}) && ($Args::enc_args{'inv'} ne ""));
+
+    $Args::baseargs_novol = $Args::baseargs;
+
+    # Add the image, file system type, and mount point
+    $Args::baseargs .= "vol=$Args::enc_args{'vol'}&"
+      if ((exists $Args::enc_args{'vol'}) && ($Args::enc_args{'vol'} ne ""));
+
+    # remove the final '&'
+    $Args::baseargs_novol = $1 if ($Args::baseargs_novol =~ /^(.*?)&$/);
+    $Args::baseargs       = $1 if ($Args::baseargs       =~ /^(.*?)&$/);
+
+    return;
+}
+
+# Does not do mnt or img
+sub make_hidden {
+    my $str = "";
+
+    $str .=
+      "<input type=\"hidden\" name=\"host\" value=\"$Args::args{'host'}\">\n"
+      if ((exists $Args::args{'host'}) && ($Args::args{'host'} ne ""));
+
+    $str .=
+      "<input type=\"hidden\" name=\"case\" value=\"$Args::args{'case'}\">\n"
+      if ((exists $Args::args{'case'}) && ($Args::args{'case'} ne ""));
+
+    $str .=
+      "<input type=\"hidden\" name=\"inv\" value=\"$Args::args{'inv'}\">\n"
+      if ((exists $Args::args{'inv'}) && ($Args::args{'inv'} ne ""));
+
+    return $str;
+}
+
+###############################
+# block
+###############################
+sub check_block {
+    if ((!exists $Args::args{'block'}) || ($Args::args{'block'} !~ /^\d+$/)) {
+        Print::print_check_err(
+            "Invalid block argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_block {
+    if ($Args::args{'block'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Block");
+}
+
+###############################
+# body
+###############################
+
+sub check_body {
+    unless (exists $Args::args{'body'}) {
+        Print::print_check_err("Missing body argument");
+    }
+    unless ($Args::args{'body'} =~ /^$::REG_VNAME$/o) {
+        Print::print_check_err(
+            "Invalid body value (only letters, " . "numbers,-,., and _)");
+    }
+    return 0;
+}
+
+sub get_body {
+    if ($Args::args{'body'} =~ /^($::REG_VNAME)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Body");
+}
+
+################################
+# Case name
+################################
+
+sub check_case {
+    unless (exists $Args::args{'case'}) {
+        Print::print_check_err("Missing case argument");
+    }
+    unless ($Args::args{'case'} =~ /^$::REG_CASE$/o) {
+        Print::print_check_err(
+            "Invalid case value (letters, num, and symbols only");
+    }
+    return 0;
+}
+
+sub get_case {
+    if ($Args::args{'case'} =~ /^($::REG_CASE)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Case Name");
+}
+
+###############################
+# cell_mode
+###############################
+sub check_cell_mode {
+    if (   (!exists $Args::args{'cell_mode'})
+        || ($Args::args{'cell_mode'} !~ /^\d$/o))
+    {
+        Print::print_check_err(
+            "Invalid cell_mode argument (numbers >= 0 only)");
+    }
+    return 0;
+}
+
+################################
+# dir
+################################
+sub check_dir {
+    if (   (!exists $Args::args{'dir'})
+        || ($Args::args{'dir'} =~ /\/\.\.\//)
+        || ($Args::args{'dir'} =~ /\;/))
+    {
+        Print::print_check_err("Invalid dir argument (valid file path only)");
+    }
+    return 0;
+}
+
+sub get_dir {
+    if ($Args::args{'dir'} =~ /([^;]*)/o) {
+        my $d = $1;
+
+        # Remove double slashes
+        $d =~ s/\/\//\//g;
+        return $d;
+    }
+    Print::print_err("Invalid Directory");
+}
+
+###############################
+# dirmode
+###############################
+sub check_dirmode {
+    if ((!exists $Args::args{'dirmode'}) || ($Args::args{'dirmode'} !~ /^\d+$/))
+    {
+        Print::print_check_err(
+            "Invalid dirmode argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_dirmode {
+    if ($Args::args{'dirmode'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid dirmode");
+}
+
+################################
+# do_md5
+################################
+sub check_do_md5 {
+    if ((!exists $Args::args{'do_md5'}) || ($Args::args{'do_md5'} !~ /^\d+$/)) {
+        Print::print_check_err("Missing do_md5 argument");
+    }
+    return 0;
+}
+
+sub get_do_md5 {
+    if ($Args::args{'do_md5'} =~ /^\s*(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid MD5 Flag");
+}
+
+################################
+# fname
+################################
+
+sub check_fname {
+    unless (exists $Args::args{'fname'}) {
+        Print::print_check_err("Missing fname argument");
+    }
+    unless ($Args::args{'fname'} =~ /^$::REG_FNAME$/o) {
+        Print::print_check_err(
+            "Invalid fname value (only letters, " . "numbers,-,., and _)");
+    }
+    return 0;
+}
+
+sub get_fname {
+    if ($Args::args{'fname'} =~ /^($::REG_FNAME)$/o) {
+        return "$::host_dir" . "$::DATADIR/$1";
+    }
+    Print::print_err("Invalid File Name");
+}
+
+################################
+# fname_mode
+################################
+sub check_fname_mode {
+    if (!exists $Args::args{'fname_mode'}) {
+        Print::print_check_err("Missing fname_mode argument");
+    }
+    unless ($Args::args{'fname_mode'} =~ /^\d+$/) {
+        Print::print_check_err("invalid mode: numbers only");
+    }
+    return 0;
+}
+
+################################
+# fname_rel
+# Return the relative fname
+################################
+sub get_fname_rel {
+    if ($Args::args{'fname'} =~ /^($::REG_FNAME)$/o) {
+        return "$::DATADIR/$1";
+    }
+    Print::print_err("Invalid Relative File Name");
+}
+
+###############################
+# force
+###############################
+sub get_force {
+    if ($Args::args{'force'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Force Flag");
+}
+
+################################
+# ftype
+################################
+sub get_ftype_blah {
+    if (exists $Args::args{'ftype'}) {
+        if ($Args::args{'ftype'} =~ /^($::REG_FTYPE)$/o) {
+            return $1;
+        }
+    }
+    if (   (exists $Args::args{'img'})
+        && (exists $Caseman::vol2ftype{$Args::args{'img'}}))
+    {
+        return $Caseman::vol2ftype{$Args::args{'img'}};
+    }
+    Print::print_err("Missing ftype value");
+}
+
+sub check_ftype_blah {
+    unless (
+        (
+               (exists $Args::args{'img'})
+            && (exists $Caseman::vol2ftype{$Args::args{'img'}})
+            && ($Caseman::vol2ftype{$Args::args{'img'}} =~ /^$::REG_FTYPE$/o)
+        )
+        || (   (exists $Args::args{'ftype'})
+            && ($Args::args{'ftype'} =~ /^$::REG_FTYPE$/o))
+      )
+    {
+        Print::print_check_err("Missing or invalid ftype value");
+    }
+    return 0;
+}
+
+################################
+# host
+# Host for the case
+################################
+
+sub check_host {
+    unless (exists $Args::args{'host'}) {
+        Print::print_check_err("Missing host argument");
+    }
+    unless ($Args::args{'host'} =~ /^$::REG_HOST$/o) {
+        Print::print_check_err("Invalid host value");
+    }
+    return 0;
+}
+
+sub get_host {
+    if ($Args::args{'host'} =~ /^($::REG_HOST)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Host");
+}
+
+################################
+# htype
+################################
+sub check_htype {
+    if ((!exists $Args::args{'htype'}) || ($Args::args{'htype'} !~ /^\d+$/)) {
+        Print::print_check_err(
+            "Invalid htype argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_htype {
+    if ($Args::args{'htype'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid htype");
+}
+
+###############################
+# ifind
+# ifind is optional and by default is 0 if not given
+###############################
+sub get_ifind {
+    if (!exists $Args::args{'ifind'}) {
+        return 0;
+    }
+    elsif ($Args::args{'ifind'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid ifind flag");
+}
+
+###############################
+# img_path is used when adding images - it is the full path to the
+# non-evidence locker copy of the image
+###############################
+
+sub check_img_path {
+    if (!exists $Args::args{'img_path'}) {
+        Print::print_check_err("Missing image (img_path) argument");
+    }
+    elsif ($Args::args{'img_path'} =~ /^$::REG_IMG_PATH$/o) {
+
+        # Check for its actual existence
+
+        Print::print_check_err("Image not found at $Args::args{'img_path'}")
+          unless (
+            (-e "$Args::args{'img_path'}")
+            || (   (-l "$Args::args{'img_path'}")
+                && (-e readlink "$::host_dir" . "$Args::args{$img}"))
+          );
+    }
+    else {
+        Print::print_check_err("Invalid image path (only letters, "
+              . "numbers,-,.,_/ and start with /) [$Args::args{'img_path'}]");
+    }
+
+    return 0;
+}
+
+sub get_img_path {
+    if ($Args::args{'img_path'} =~ /^($::REG_IMG_PATH)$/o) {
+        return "$1";
+    }
+    Print::print_err("Invalid Image Path");
+}
+
+sub check_img_path_wild {
+    if (!exists $Args::args{'img_path'}) {
+        Print::print_check_err("Missing  wild image (img_path) argument");
+    }
+    elsif ($Args::args{'img_path'} !~ /^$::REG_IMG_PATH_WILD$/o) {
+
+        # IF there is extra white space then remove it and move on
+        if ($Args::args{'img_path'} =~ /^\s*($::REG_IMG_PATH_WILD)\s*$/o) {
+            $Args::args{'img_path'} = $1;
+            return 0;
+        }
+        else {
+            Print::print_check_err("Invalid wild image (img_path) argument");
+        }
+    }
+
+    return 0;
+}
+
+sub get_img_path_wild {
+    if ($Args::args{'img_path'} =~ /^($::REG_IMG_PATH_WILD)$/o) {
+        return "$1";
+    }
+    Print::print_err("Invalid Image Path");
+}
+
+###############################
+# meta
+###############################
+
+sub check_meta {
+    my $meta = shift;
+    if (   (!exists $Args::args{$meta})
+        || ($Args::args{$meta} !~ /^$::REG_META$/o))
+    {
+        Print::print_check_err(
+            "Invalid meta address ($meta) argument (numbers >= 0 only)");
+    }
+    return 0;
+}
+
+sub get_meta {
+    my $meta = shift;
+    if ($Args::args{$meta} =~ /^($::REG_META)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Meta Address");
+}
+
+################################
+# inv
+# Investigator
+################################
+
+sub check_inv {
+    unless (exists $Args::args{'inv'}) {
+        Print::print_check_err("Missing inv argument");
+    }
+    unless ($Args::args{'inv'} =~ /^$::REG_INVESTIG$/o) {
+        Print::print_check_err(
+            "Invalid inv value (letters, num, and symbols only");
+    }
+    return 0;
+}
+
+sub get_inv {
+    if ($Args::args{'inv'} =~ /^($::REG_INVESTIG)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Investigator");
+}
+
+###############################
+# len
+###############################
+sub check_len {
+    if (   (!exists $Args::args{'len'})
+        || ($Args::args{'len'} !~ /^\d+$/)
+        || ($Args::args{'len'} == 0))
+    {
+        Print::print_check_err("Invalid len argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_len {
+    if ((exists $Args::args{'len'}) && ($Args::args{'len'} =~ /^(\d+)$/)) {
+        return $1;
+    }
+
+    # return the default len of 1 if it is not defined
+    return 1;
+}
+
+###############################
+# min
+###############################
+sub get_min {
+    if ($Args::args{'min'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Minute");
+}
+
+################################
+# module
+################################
+sub check_mod {
+    if ((!exists $Args::args{'mod'}) || ($Args::args{'mod'} !~ /^\d+$/)) {
+        Print::print_check_err(
+            "Invalid Module argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_mod {
+    if ($Args::args{'mod'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Module");
+}
+
+################################
+# mnt
+###############################
+
+sub check_mnt {
+    my $ftype = Args::get_ftype();
+    if (($ftype eq "blkls") || ($ftype eq "swap") || ($ftype eq "raw")) {
+        $Args::args{'mnt'}     = $ftype;
+        $Args::enc_args{'mnt'} = $ftype;
+    }
+    elsif (!exists $Args::args{'mnt'}) {
+
+        # Look it up if it is not found
+        if (exists $Args::args{'img'}) {
+            unless (exists $Caseman::vol2mnt{$Args::args{'img'}}) {
+                Print::print_check_err(
+                    "Mounting point not found: $Args::args{'img'}");
+            }
+            my $mnt = $Caseman::vol2mnt{$Args::args{'img'}};
+            $Args::args{'mnt'}     = $mnt;
+            $Args::enc_args{'mnt'} = Args::url_encode($mnt);
+        }
+        else {
+            Print::print_check_err("Mounting point not found");
+        }
+    }
+    if ($Args::args{'mnt'} =~ /\/\.\.\//) {
+        Print::print_check_err(
+            "Invalid mount point argument (valid file path only)");
+    }
+    unless ($Args::args{'mnt'} =~ /^$::REG_MNT$/o) {
+        Print::print_check_err(
+            "Invalid mount point argument (valid file path only)");
+    }
+    return 0;
+}
+
+sub get_mnt {
+    if ((exists $Args::args{'mnt'}) && ($Args::args{'mnt'} =~ /($::REG_MNT)/o))
+    {
+        return $1;
+    }
+    Print::print_err("Invalid Mounting Point");
+}
+
+################################
+# note
+################################
+sub check_note {
+    if (!exists $Args::args{'note'}) {
+        Print::print_check_err("Missing note argument");
+    }
+    return 0;
+}
+
+#################
+# num_img - adding disk images
+
+sub check_num_img {
+    if ((!exists $Args::args{'num_img'}) || ($Args::args{'num_img'} !~ /^\d+$/))
+    {
+        Print::print_check_err(
+            "Invalid num_img argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_num_img {
+    if ($Args::args{'num_img'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid num_img");
+}
+
+###############################
+# recmode
+###############################
+sub check_recmode {
+    if ((!exists $Args::args{'recmode'}) || ($Args::args{'recmode'} !~ /^\d+$/))
+    {
+        Print::print_check_err(
+            "Invalid recmode argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_recmode {
+    if ($Args::args{'recmode'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid recmode");
+}
+
+################################
+# srchidx
+#
+# Index for previous keyword search
+###############################
+sub check_srchidx {
+    if ((!exists $Args::args{'srchidx'}) || ($Args::args{'srchidx'} !~ /^\d+$/))
+    {
+        Print::print_check_err(
+            "Invalid srchidx argument (positive numbers only)");
+    }
+    return 0;
+}
+
+###############################
+# sort
+###############################
+sub check_sort {
+    if ((!exists $Args::args{'sort'}) || ($Args::args{'sort'} !~ /^\d+$/)) {
+        Print::print_check_err("Invalid sort argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_sort {
+    if ($Args::args{'sort'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid sort flag");
+}
+
+################################
+# st_mon
+################################
+sub check_st_mon {
+    if (   (exists $Args::args{'st_mon'})
+        && ($Args::args{'st_mon'} =~ /^(\d\d?)$/))
+    {
+        if (($1 < 1) || ($1 > 12)) {
+            print("Invalid start month\n");
+            return 1;
+        }
+    }
+    else {
+        print("Invalid start month\n");
+        return 1;
+    }
+}
+
+sub get_st_mon {
+    if ($Args::args{'st_mon'} =~ /^(\d\d?)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Month");
+}
+
+################################
+# st_year
+################################
+sub check_st_year {
+    if (   (exists $Args::args{'st_year'})
+        && ($Args::args{'st_year'} =~ /^(\d\d\d\d?)$/))
+    {
+        if (($1 < 1970) || ($1 > 2020)) {
+            print("Invalid start year\n");
+            return 1;
+        }
+    }
+    else {
+        print("Invalid start year\n");
+        return 1;
+    }
+}
+
+sub get_st_year {
+    if ($Args::args{'st_year'} =~ /^(\d\d\d\d)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid Year");
+}
+
+################################
+# str
+# search string
+################################
+# This should be made more flexible
+sub check_str {
+    if (!exists $Args::args{'str'}) {
+        Print::print_check_err("Missing string argument");
+    }
+    return 0;
+}
+
+sub get_str {
+    if ($Args::args{'str'} =~ /^\s*(.*)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid String");
+}
+
+###############################
+# submod
+# Used by the tab module to identify the actual module
+###############################
+sub check_submod {
+    if ((!exists $Args::args{'submod'}) || ($Args::args{'submod'} !~ /^\d+$/)) {
+        Print::print_check_err(
+            "Invalid sub-mode argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_submod {
+    if ($Args::args{'submod'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid sub-mode");
+}
+
+################################
+# tl
+###############################
+sub check_tl {
+    if ((!exists $Args::args{'tl'}) || ($Args::args{'tl'} !~ /^$::REG_VNAME$/))
+    {
+        Print::print_check_err(
+            "Invalid timeline argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_tl {
+    if ($Args::args{'tl'} =~ /^($::REG_VNAME)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Timeline");
+}
+
+################################
+# ts
+# time skew
+################################
+sub check_ts {
+    if ((!exists $Args::args{'ts'}) || ($Args::args{'ts'} !~ /^$::REG_SKEW$/o))
+    {
+        Print::print_check_err("Missing time skew argument");
+    }
+    return 0;
+}
+
+sub get_ts {
+    if ($Args::args{'ts'} =~ /^\s*($::REG_SKEW)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Time Skew");
+}
+
+################################
+# tz
+# timezone
+################################
+sub check_tz {
+    if (   (!exists $Args::args{'tz'})
+        || ($Args::args{'tz'} !~ /^$::REG_ZONE_ARGS$/o))
+    {
+        Print::print_check_err("Missing time zone argument");
+    }
+    return 0;
+}
+
+sub get_tz {
+    if ($Args::args{'tz'} =~ /^($::REG_ZONE_ARGS)$/o) {
+        return $1;
+    }
+    Print::print_err("Invalid Timezone");
+}
+
+################################
+# unitsize
+################################
+sub get_unitsize {
+
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+    my $blkcat_out;
+
+    if ($ftype eq 'blkls') {
+        if (exists $Caseman::mod2vol{$vol}) {
+            my $orig    = $Caseman::mod2vol{$vol};
+            my $img     = $Caseman::vol2path{$orig};
+            my $offset  = $Caseman::vol2start{$orig};
+            my $imgtype = $Caseman::vol2itype{$orig};
+
+            local *OUT;
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $Caseman::vol2ftype{$orig} -s -o $offset -i $imgtype $img"
+            );
+            $blkcat_out = <OUT>;
+            close(OUT);
+        }
+
+        # We don't have the original image, so just set the size to 512
+        else {
+            return 512;
+        }
+    }
+    elsif ($ftype eq 'swap') {
+        return 4096;
+    }
+    elsif ($ftype eq 'raw') {
+        return 512;
+    }
+    elsif ($Caseman::vol2cat{$vol} eq 'disk') {
+        return 512;
+    }
+    else {
+        my $img     = $Caseman::vol2path{$vol};
+        my $offset  = $Caseman::vol2start{$vol};
+        my $imgtype = $Caseman::vol2itype{$vol};
+
+        local *OUT;
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/blkcat' -f $ftype -s -o $offset -i $imgtype $img");
+        $blkcat_out = <OUT>;
+        close(OUT);
+    }
+    $blkcat_out = "Error getting unit size"
+      if ((!defined $blkcat_out) || ($blkcat_out eq ""));
+
+    if ($blkcat_out =~ /(\d+): Size of Addressable Unit/) {
+        return $1;
+    }
+    else {
+        Print::print_err("Error identifying block size (blkcat -s output)\n"
+              . "$blkcat_out\n");
+    }
+}
+
+################################
+# View - subset of module
+################################
+sub check_view {
+    if ((!exists $Args::args{'view'}) || ($Args::args{'view'} !~ /^\d+$/)) {
+        Print::print_check_err("Invalid View argument (positive numbers only)");
+    }
+    return 0;
+}
+
+sub get_view {
+    if ($Args::args{'view'} =~ /^(\d+)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid View");
+}
+
+###############################
+# We don't allow much for the volume because this is an argument to
+# the TSK programs.  We keep these files only in one
+# directory and for easy/simple security only allow basic names
+# Symbolic links are allowed if these simple names are not desired
+#
+# Allowed values are A-Za-z0-9_-.
+#
+# The argument is the name of the image
+###############################
+
+sub check_vol {
+    my $vol = shift;
+    if ((!exists $Args::args{$vol}) || ($Args::args{$vol} !~ /^$::REG_VNAME$/))
+    {
+        Print::print_check_err(
+            "Invalid volume argument (name and number only)");
+    }
+    return 0;
+}
+
+sub get_vol {
+    my $vol = shift;
+    if ($Args::args{$vol} =~ /^($::REG_VNAME)$/) {
+        return $1;
+    }
+    Print::print_err("Invalid volume ($vol)");
+}
+
+1;
diff --git a/lib/Caseman.pm b/lib/Caseman.pm
new file mode 100644
index 0000000000..a34db68087
--- /dev/null
+++ b/lib/Caseman.pm
@@ -0,0 +1,4161 @@
+#
+# Case Management methods, including the windows and functions to read the
+# config files
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Caseman;
+
+# If the order of these views are changed, then the order of the main
+# function may have to be as well
+
+# Case Views
+$Caseman::CASE_NEW      = 1;
+$Caseman::CASE_NEW_DOIT = 2;
+$Caseman::CASE_OPEN     = 3;
+$Caseman::CASE_OPEN_LOG = 4;
+$Caseman::CASE_DETAILS  = 5;
+
+# $Caseman::CASE_DEL = 6;
+my $CASE_MAX = 5;
+
+# Host Views
+$Caseman::HOST_ADD      = 7;
+$Caseman::HOST_ADD_DOIT = 8;
+$Caseman::HOST_OPEN     = 9;
+$Caseman::HOST_OPEN_LOG = 10;
+$Caseman::HOST_DETAILS  = 11;
+
+# $Caseman::HOST_DEL = 12;
+my $HOST_MAX = 11;
+
+# Image Views
+$Caseman::IMG_ADD       = 13;
+$Caseman::IMG_ADD_PREP  = 14;
+$Caseman::IMG_ADD_DOIT  = 15;
+$Caseman::VOL_OPEN      = 16;
+$Caseman::VOL_OPEN_LOG  = 17;
+$Caseman::VOL_DETAILS   = 18;
+$Caseman::IMG_DEL       = 19;
+$Caseman::VOL_MAKESTR   = 20;
+$Caseman::VOL_MAKEBLKLS = 21;
+my $IMG_MAX = 21;
+
+# Module Variables
+# %vol2par - Volume to parent volume (vol to img, str to vol)
+# %vol2start - Starting sector of volume in image
+# %vol2end  - ending sector of volume in image
+# %vol2cat - The big picture type of volume (part, disk, strings, blkls)
+# %vol2ftype - The file system type (fat, dos, ntfs etc.)
+# %vol2itype - The image file type (could be for a parent image)
+# %vol2dtype- the disk type
+# %mod2vol;   # Mapping for image, given the strings or blkls
+# %vol2mnt;   # Mapping for mount point, given the vol name
+# %vol2str;   # Mapping for ASCII strings file, given  the vol name
+# %vol2uni;   # Mapping for Unicode strings file, given  the vol name
+# %vol2blkls;   # Mapping for blkls file, given  the vol name
+# %vol2path - full file path of volume
+# %vol2sname - short name of volume
+
+sub main {
+
+    # By default, show the case open window
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Caseman::CASE_OPEN
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    # The only live function is for the open img
+    if ($::LIVE == 1) {
+        Args::check_inv();
+        if ($view == $Caseman::VOL_OPEN) {
+            return vol_open();
+        }
+
+        Args::check_vol('vol');
+
+        # Args::check_ftype();
+        # Args::check_mnt();
+
+        if ($view == $Caseman::VOL_OPEN_LOG) {
+            return vol_open_log();
+        }
+        else {
+            Print::print_check_err(
+                "Invalid Live Analysis Case Management View");
+        }
+        return 0;
+    }
+
+    # Case functions
+    if ($view <= $CASE_MAX) {
+        if ($view == $Caseman::CASE_OPEN) {
+            return case_open();
+        }
+        elsif ($view == $Caseman::CASE_NEW) {
+            return case_new();
+        }
+
+        Args::check_case();
+        $::case_dir = "$::LOCKDIR/" . Args::get_case() . "/";
+        $::case_dir =~ s/\/\//\//g;
+
+        if ($view == $Caseman::CASE_OPEN_LOG) {
+            return case_open_log();
+        }
+        elsif ($view == $Caseman::CASE_NEW_DOIT) {
+            return case_new_doit();
+        }
+        elsif ($view == $Caseman::CASE_DETAILS) {
+            return case_details();
+        }
+    }
+
+    Args::check_case();
+    $::case_dir = "$::LOCKDIR/" . Args::get_case() . "/";
+    $::case_dir =~ s/\/\//\//g;
+
+    # Host functions
+    if ($view <= $HOST_MAX) {
+        if ($view == $Caseman::HOST_OPEN) {
+            return host_open();
+        }
+        elsif ($view == $Caseman::HOST_ADD) {
+            return host_add();
+        }
+
+        Args::check_host();
+        $::host_dir = "$::case_dir" . Args::get_host() . "/";
+        $::host_dir =~ s/\/\//\//g;
+        if ($view == $Caseman::HOST_ADD_DOIT) {
+            return host_add_doit();
+        }
+
+        Caseman::read_host_config();
+        if ($view == $Caseman::HOST_OPEN_LOG) {
+            return host_open_log();
+        }
+        elsif ($view == $Caseman::HOST_DETAILS) {
+            return host_details();
+        }
+    }
+
+    Args::check_host();
+    $::host_dir = "$::case_dir" . Args::get_host() . "/";
+    $::host_dir =~ s/\/\//\//g;
+    Caseman::read_host_config();
+    Args::check_inv();
+
+    if ($view <= $IMG_MAX) {
+        if ($view == $Caseman::VOL_OPEN) {
+            return vol_open();
+        }
+        elsif ($view == $Caseman::IMG_ADD) {
+            return img_add();
+        }
+        elsif ($view == $Caseman::IMG_ADD_PREP) {
+            return img_add_prep();
+        }
+        elsif ($view == $Caseman::IMG_ADD_DOIT) {
+            return img_add_doit();
+        }
+
+        Args::check_vol('vol');
+
+        if ($view == $Caseman::VOL_OPEN_LOG) {
+            return vol_open_log();
+        }
+        elsif ($view == $Caseman::VOL_DETAILS) {
+            return vol_details();
+        }
+
+        #       elsif ($view == $Caseman::IMG_DEL) {
+        # 		return img_del();
+        # 	}
+        elsif ($view == $Caseman::VOL_MAKESTR) {
+            return vol_makestr();
+        }
+        elsif ($view == $Caseman::VOL_MAKEBLKLS) {
+            return vol_makeblkls();
+        }
+    }
+
+    Print::print_check_err("Invalid Case Management View");
+}
+
+####################################################################
+# General menu Functions
+
+sub print_menu_tabs {
+
+    if ($::LIVE == 1) {
+        print "<h2>Live Analysis Mode</h2>\n";
+    }
+
+    print "<table width=\"600\" height=\"60\" background=\"$::YEL_PIX\" "
+      . "border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr>\n"
+      . "<td align=\"center\" width=\"200\">";
+
+    my $view = Args::get_view();
+
+    # Case Gallery Tab
+    if ($view == $Caseman::CASE_OPEN) {
+        print "<img border=0 src=\"pict/menu_t_cg_cur.jpg\" "
+          . "width=200 height=65 alt=\"Case Gallery (Current Mode)\">\n";
+    }
+    elsif ($::LIVE == 1) {
+        print "<img border=0 src=\"pict/menu_t_cg_org.jpg\" "
+          . "width=200 height=65 alt=\"Case Gallery\">\n";
+    }
+    else {
+        print "<a href=\"$::PROGNAME?"
+          . "mod=$::MOD_CASEMAN&view=$Caseman::CASE_OPEN\">"
+          . "<img border=0 src=\"pict/menu_t_cg_link.jpg\" "
+          . "width=200 height=65 alt=\"Case Gallery\"></a>\n";
+    }
+    print "</td>\n" . "<td align=\"center\" width=\"200\">";
+
+    # Host Gallery Tab
+    # Current
+    if ($view == $Caseman::HOST_OPEN) {
+        print "<img border=0 src=\"pict/menu_t_hg_cur.jpg\" "
+          . "width=200 height=65 alt=\"Host Gallery (Current Mode)\">\n";
+    }
+
+    # Link
+    elsif (($view == $Caseman::VOL_OPEN) && ($::LIVE == 0)) {
+        print "<a href=\"$::PROGNAME?"
+          . "mod=$::MOD_CASEMAN&view=$Caseman::HOST_OPEN"
+          . "&case=$Args::args{'case'}\">"
+          . "<img border=0 src=\"pict/menu_t_hg_link.jpg\" "
+          . "width=200 height=65 alt=\"Host Gallery\"></a>\n";
+    }
+
+    # Non-link
+    else {
+        print "<img border=0 src=\"pict/menu_t_hg_org.jpg\" "
+          . "width=200 height=65 alt=\"Host Gallery (Not Available)\">\n";
+    }
+
+    print "</td>\n" . "<td align=\"center\" width=\"200\">";
+
+    # Host Manager Tab
+    # Current
+    if ($view == $Caseman::VOL_OPEN) {
+        print "<img border=0 src=\"pict/menu_t_hm_cur.jpg\" "
+          . "width=200 height=65 alt=\"Host Manager (Current Mode)\">\n";
+    }
+
+    # non-link
+    else {
+        print "<img border=0 src=\"pict/menu_t_hm_org.jpg\" "
+          . "width=200 height=65 alt=\"Host Manager (Not Available)\">\n";
+    }
+
+    print "</td>\n</tr>\n" . "</table>\n";
+}
+
+####################################################################
+# Case Functions
+
+# if no args are passed, return case config using args{'case'},
+# else use the case value passed
+#
+# Case config:
+# In case directory with case_name.case
+sub case_config_fname {
+    if (scalar(@_) == 1) {
+        my $c = shift;
+        return "$::LOCKDIR/" . "$c/case.aut";
+    }
+    else {
+        return "$::LOCKDIR/" . "$Args::args{'case'}/case.aut";
+    }
+}
+
+# Read case config and save it to $Caseman::cvals
+sub read_case_config {
+    return if ($::LIVE == 1);
+
+    my $case;
+
+    if (scalar(@_) == 1) {
+        $case = shift;
+    }
+    else {
+        $case = Args::get_case();
+    }
+
+    my $fname = case_config_fname($case);
+
+    %Caseman::cvals = ();
+
+    open CONFIG, "<$fname"
+      or die "Can't open case config file ($fname)";
+
+    while (<CONFIG>) {
+        next if ((/^\#/) || (/^\s+$/));
+        s/^\s+//;
+        s/\s+$//;
+        $Caseman::cvals{$1} = Print::html_encode($2) if (/^(\S+)\s+(.*)$/);
+    }
+    close(CONFIG);
+
+    $Caseman::cvals{'desc'} = "None Provided"
+      unless (exists $Caseman::cvals{'desc'});
+
+    $Caseman::cvals{'created'} = "unknown"
+      unless (exists $Caseman::cvals{'created'});
+}
+
+sub case_new {
+    Print::print_html_header("Create A New Case");
+
+    print <<EOF;
+<br>
+<br>
+<center>
+<img src=\"pict/menu_h_cnew.jpg\" alt=\"New Case\">
+<br><br><br>
+
+<table width=\"600\" background=\"$::YEL_PIX\" cellspacing=\"0\"
+  cellpadding=\"2\" border=0>
+<form action=\"$::PROGNAME\" method=\"get\">
+<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">
+<input type=\"hidden\" name=\"view\" value=\"$Caseman::CASE_NEW_DOIT\">
+<tr>
+  <td colspan=3 align=left>
+    1.  <b>Case Name:</b> The name of this investigation.  It can contain only letters, numbers, and symbols.
+  </td>
+</tr>
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=2><input type=\"text\" name=\"case\"></td>
+</tr>
+
+<tr><td colspan=3>&nbsp;</td></tr>
+
+<tr>
+  <td colspan=3 align=left>
+    2.  <b>Description:</b> An optional, one line description of this case.
+  </td>
+</tr>
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=2><input type=\"text\" name=\"desc\" size=32 maxlength=32></td>
+</tr>
+
+<tr><td colspan=3>&nbsp;</td></tr>
+
+<tr>
+  <td colspan=3 align=left>
+    3.  <b>Investigator Names:</b> The optional names (with no spaces) of the investigators for this case.
+  </td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td align=left><tt>a.</tt> <input type=\"text\" name=\"inv1\"></td>
+  <td align=left><tt>b.</tt> <input type=\"text\" name=\"inv2\"></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td align=left><tt>c.</tt> <input type=\"text\" name=\"inv3\"></td>
+  <td align=left><tt>d.</tt> <input type=\"text\" name=\"inv4\"></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td align=left><tt>e.</tt> <input type=\"text\" name=\"inv5\"></td>
+  <td align=left><tt>f.</tt> <input type=\"text\" name=\"inv6\"></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td align=left><tt>g.</tt> <input type=\"text\" name=\"inv7\"></td>
+  <td align=left><tt>h.</tt> <input type=\"text\" name=\"inv8\"></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td align=left><tt>i.</tt> <input type=\"text\" name=\"inv9\"></td>
+  <td align=left><tt>j.</tt> <input type=\"text\" name=\"inv10\"></td>
+</tr>
+</table>
+
+<br><br>
+<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center>
+    <input type=\"image\" src=\"pict/menu_b_cnew.jpg\" 
+      alt=\"Create Case\" width=\"176\" height=20 border=0>
+  </td>
+</form>
+  <td align=center>
+    <form action=\"$::PROGNAME\" method=\"get\">
+    <input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">
+    <input type=\"hidden\" name=\"view\" value=\"$Caseman::CASE_OPEN\">
+    <input type=\"image\" src=\"pict/menu_b_cancel.jpg\" 
+    alt=\"Cancel\" width=\"167\" height=20 border=0>
+    </form>
+  </td>
+  <td align=center><a href=\"$::HELP_URL\" 
+    target=\"_blank\">
+    <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" 
+    width=\"167\" height=20 border=0></a>
+  </td>
+</tr>
+</table>
+EOF
+
+    Print::print_html_footer();
+    return;
+}
+
+# Create the directory and case configuration file
+# Gets the input from CASE_NEW
+sub case_new_doit {
+    Print::print_html_header("Creating Case: $Args::args{'case'}");
+    my $case = $Args::args{'case'};
+
+    print "<h3>Creating Case: <tt>$case</tt></h3>\n";
+
+    # Make the directory
+    if (-d "$::case_dir") {
+
+        # we can't send all of this to print_err, bc it doesn't want HTML
+        print "Error: $::case_dir already exists<br>"
+          . "Please remove the directory and its contents and try again"
+          . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+          . "view=$Caseman::CASE_OPEN\">"
+          . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+          . "width=\"43\" height=20 border=\"0\"></a>\n";
+        Print::print_err("\n");
+    }
+
+    unless (mkdir "$::case_dir", $::MKDIR_MASK) {
+        Print::print_err("Error making directory $::case_dir: $!");
+    }
+
+    print "Case directory (<tt>$::case_dir</tt>) created<br>\n";
+    Print::log_case_info("Case $case created");
+
+    my $fname = Caseman::case_config_fname();
+
+    open CASE_CONFIG, ">$fname" or die "Can't open case config: $fname";
+
+    print CASE_CONFIG "# Autopsy case config file\n"
+      . "# Case: $case\n\n"
+      . "created "
+      . localtime() . "\n";
+
+    if ((exists $Args::args{'desc'}) && ($Args::args{'desc'} ne "")) {
+        Print::print_err(
+            "Invalid Description\n" . "Use the browser's back button to fix")
+          if ($Args::args{'desc'} =~ /\n/);
+
+        print CASE_CONFIG "desc $Args::args{'desc'}\n";
+    }
+    print CASE_CONFIG "images	$::IMGDIR\n";
+    print CASE_CONFIG "data		$::DATADIR\n";
+    print CASE_CONFIG "log		$::LOGDIR\n";
+    print CASE_CONFIG "reports	$::REPDIR\n";
+
+    close CASE_CONFIG;
+    print "Configuration file (<tt>$fname</tt>) created<br>\n";
+
+    my $iname = investig_fname();
+    open INVES, ">>$iname" or die "Can't open investigators file: $iname";
+
+    my @invs;
+    if (   (exists $Args::args{'inv1'})
+        && ($Args::args{'inv1'} ne "")
+        && ($Args::args{'inv1'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv2'})
+        && ($Args::args{'inv2'} ne "")
+        && ($Args::args{'inv2'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv3'})
+        && ($Args::args{'inv3'} ne "")
+        && ($Args::args{'inv3'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv4'})
+        && ($Args::args{'inv4'} ne "")
+        && ($Args::args{'inv4'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv5'})
+        && ($Args::args{'inv5'} ne "")
+        && ($Args::args{'inv5'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv6'})
+        && ($Args::args{'inv6'} ne "")
+        && ($Args::args{'inv6'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv7'})
+        && ($Args::args{'inv7'} ne "")
+        && ($Args::args{'inv7'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv8'})
+        && ($Args::args{'inv8'} ne "")
+        && ($Args::args{'inv8'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv9'})
+        && ($Args::args{'inv9'} ne "")
+        && ($Args::args{'inv9'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+    if (   (exists $Args::args{'inv10'})
+        && ($Args::args{'inv10'} ne "")
+        && ($Args::args{'inv10'} =~ /^\s*($::REG_INVESTIG)\s*$/o))
+    {
+        print INVES "$1\n";
+        push @invs, $1;
+    }
+
+    close(INVES);
+
+    Print::log_session_info("Case $case created");
+
+    print "<br><br>We must now create a host for this case.\n";
+
+    print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_ADD\">\n"
+      . "<input type=\"hidden\" name=\"case\" value=\"$case\">\n";
+
+    if (scalar @invs == 0) {
+        print "<option hiddden name=\"inv\" value=\"unknown\">\n";
+    }
+    else {
+        print "<br><br>Please select your name from the list: "
+          . "<select name=\"inv\" size=\"1\">\n";
+
+        foreach $i (@invs) {
+            print "<option value=\"$i\">$i</option>\n";
+        }
+        print "</select>\n";
+    }
+
+    print "<br><br>"
+      . "<input type=\"image\" src=\"pict/menu_b_hnew.jpg\" alt=\"Add New Host\" "
+      . "height=20 border=\"0\"></form>\n";
+
+    Print::print_html_footer();
+    return;
+}
+
+# Open a Case
+# This provides a form with a list of options
+sub case_open {
+    Print::print_html_header("Open A Case");
+
+    # Read the directories of the Evidence Locker into an array
+    # Verify that there is a config file in the directory
+    my @cases;
+    opendir CASES, $::LOCKDIR or die "Can't open $::LOCKDIR directory: $!";
+    foreach my $c (readdir CASES) {
+        next if (($c eq '.') || ($c eq '..'));
+        my $cfile = Caseman::case_config_fname($c);
+
+        push @cases, $c
+          if ((-d "$::LOCKDIR/$c") && (-e "$cfile"));
+    }
+    closedir CASES;
+
+    print "<br><br><center>";
+
+    # Were there any cases?
+    if (scalar @cases == 0) {
+        print "No cases exist in <tt>$::LOCKDIR</tt><br><br>\n"
+          . "Select the New Case button below to make one<br>\n";
+    }
+    else {
+
+        print "Select the case to open or create a new one<br>\n";
+
+        print_menu_tabs();
+
+        print "<table width=\"600\" background=\"$::YEL_PIX\" "
+          . " cellspacing=\"0\" cellpadding=\"2\" border=0>\n";
+
+        print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::CASE_OPEN_LOG\">\n"
+          . Args::make_hidden()
+          . "<tr><th>Name</th>"
+          . "<th>Description</th>"
+          . "<td>&nbsp;</td></tr>\n";
+
+        my $first = 0;
+        foreach my $c (@cases) {
+
+            print "<tr><td align=\"left\">"
+              . "<input type=\"radio\" name=\"case\" value=$c";
+            if ($first == 0) {
+                print " CHECKED";
+                $first = 1;
+            }
+            print ">" . Print::html_encode($c) . "</td>";
+
+            Caseman::read_case_config($c);
+
+            print "<td>$Caseman::cvals{'desc'}</td>"
+              . "<td align=center>"
+              . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::CASE_DETAILS&case=$c\">"
+              . "details</a></td>"
+              . "</tr>\n";
+        }
+        print "</table>\n";
+    }
+
+    print "<br><br>"
+      . "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">\n"
+      . "<tr>\n";
+
+    # Print the OK button if there were cases
+    if (scalar @cases != 0) {
+        print "<td align=center>"
+          . "<input type=\"image\" src=\"pict/menu_b_ok.jpg\" "
+          . "width=167 height=20 alt=\"Ok\" border=0>"
+          . "</form></td>\n\n";
+    }
+
+    # Print a 'New Case' Button
+    print "<td align=center>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::CASE_NEW\">\n"
+      . "<input type=\"image\" src=\"pict/menu_b_cnew.jpg\" "
+      . "width=167 height=20 alt=\"New Case\" border=0>\n"
+      . "</form></td>"
+      .
+
+      # Print a Menu Button
+      "<td align=center>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"image\" src=\"pict/menu_b_menu.jpg\" "
+      . "width=167 height=20 alt=\"Main Menu\" border=0>\n"
+      . "</form></td></tr></table>\n";
+
+    print "<table width=600 cellspacing=\"0\" cellpadding=\"2\">\n<tr>"
+      . "<td>&nbsp;</td>\n"
+      . "<td align=center width=200><a href=\"$::HELP_URL\" "
+      . " target=\"_blank\">"
+      . "<img src=\"pict/menu_b_help.jpg\" alt=\"Help\" "
+      . "width=\"167\" height=20 border=0>"
+      . "</a></td>"
+      . "<td>&nbsp;</td>\n"
+      . "</tr>\n"
+      . "</table>";
+
+    Print::print_html_footer();
+    return;
+}
+
+# Log that a given case was opened and then proceed to open a host
+sub case_open_log {
+    Print::log_session_info("Case $Args::args{'case'} opened");
+    Print::log_case_info("Case $Args::args{'case'} opened");
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Caseman::HOST_OPEN;
+    host_open();
+}
+
+# Display Case Details
+sub case_details {
+
+    Print::print_html_header("Details of $Args::args{'case'}");
+
+    read_case_config();
+
+    print "<br><br>"
+      . "<center>"
+      . "<img src=\"pict/menu_h_cdet.jpg\" alt=\"Case Details\">"
+      . "<br><br><br>\n"
+      . "<table width=\"600\" cellspacing=\"0\" background=\"$::YEL_PIX\" "
+      . "cellpadding=\"2\" border=0>\n"
+      . "  <tr><td align=\"right\" width=300><b>Name:</b></td>"
+      . "<td align=\"left\" width=300><tt>$Args::args{'case'}</tt></td></tr>\n"
+      .
+
+      # Description
+      "  <tr><td align=\"right\"><b>Description:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::cvals{'desc'}</tt></td></tr>\n"
+      . "  <tr><td align=\"right\"><b>Created:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::cvals{'created'}</tt></td></tr>\n";
+
+    # Display the valid investigators
+    my @invs = read_invest();
+    my $cnt  = 0;
+    print "  <tr><td colspan=\"2\">&nbsp;</td></tr>\n"
+      if (scalar @invs > 0);
+
+    foreach my $i (@invs) {
+        if ($cnt == 0) {
+            print "  <tr><td align=\"right\"><b>Investigators:</b></td>";
+            $cnt++;
+        }
+        else {
+            print "  <tr><td>&nbsp;</td>";
+        }
+        print "<td align=\"left\"><tt>"
+          . Print::html_encode($i)
+          . "</tt></td></tr>\n";
+    }
+
+    print "</table>\n"
+      . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::CASE_OPEN\">"
+      . "<img src=\"pict/menu_b_ok.jpg\" alt=\"Ok\" "
+      . "width=\"167\" height=20 border=\"0\"></a>";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+####################################################################
+# Host Functions
+
+# if no args are passed, return host config using args{'host'},
+# else use the host value passed
+sub host_config_fname {
+    if (scalar(@_) == 1) {
+        my $h = shift;
+        return "$::case_dir" . "$h/host.aut";
+    }
+    else {
+        return "$::host_dir" . "host.aut";
+    }
+}
+
+# Converts the original single image host config to the volume-based config
+sub convert_host_config {
+
+    return if ($::LIVE == 1);
+
+    my $host = Args::get_host();
+
+    Print::log_host_info("Converting host config files");
+    print STDERR "Converting host config file to new format\n";
+
+    # The file to convert
+    my $cfile = host_config_fname();
+    unless (open(FILE, $cfile)) {
+        Print::print_check_err("Error opening $cfile");
+    }
+
+    my $tmpcfile = "$::host_dir" . "host-convert.aut";
+    unless (open(FILE_TMP, ">>$tmpcfile")) {
+        Print::print_check_err("Error opening $tmpcfile");
+    }
+
+    my $img_cnt = 0;
+    my $vol_cnt = 0;
+    $img2vol{'qazwsxedc'} = ""; # stores the image path to partition / file name
+    $img2vol2{'qazwsxedc'} =
+      "";    # stores the image path to file name (no partitions)
+
+    while (<FILE>) {
+        if ((/^\#/) || (/^\s+$/)) {
+            print FILE_TMP $_;
+            next;
+        }
+
+        # remove whitespace
+        s/^\s+//;
+        s/\s+$//;
+
+        # normal file system image entry
+        #
+        # 'image	images/hda1.dd		openbsd		/usr
+        if (/^image\s+($::REG_IMG)\s+([\w\-]+)\s+([\w\-\_\.\/:\\]+)$/o) {
+
+            my $i = $1;
+            my $t = $2;
+            my $r = $3;
+
+            # Add trailing / to original mount point if needed
+            if (($r !~ /.*?\/$/) && ($r !~ /.*?\\$/)) {
+                $r .= '/';
+            }
+            my $vnum = "vol" . $vol_cnt;
+            my $inum = "img" . $img_cnt;
+            $img2vol{$i}  = $vnum;
+            $img2vol2{$i} = $inum;
+
+            print FILE_TMP "image   $inum     raw     $i\n";
+            print FILE_TMP "part    $vnum     $inum   0   0   $t  $r\n";
+
+            $img_cnt++;
+            $vol_cnt++;
+        }
+
+        # swap
+        # swap		images/hda3.dd
+        elsif (/^swap\s+($::REG_IMG)\s*$/o) {
+            my $i = $1;
+
+            my $vnum = "vol" . $vol_cnt;
+            my $inum = "img" . $img_cnt;
+            $img2vol{$i}  = $vnum;
+            $img2vol2{$i} = $inum;
+
+            print FILE_TMP "image   $inum     raw     $i\n";
+            print FILE_TMP "part	$vnum   $inum 0   0   swap\n";
+            $img_cnt++;
+            $vol_cnt++;
+
+        }
+
+        # raw
+        # raw	images/hda3.dd
+        elsif (/^raw\s+($::REG_IMG)\s*$/o) {
+            my $i = $1;
+            $img2vol{$i}  = "vol" . $vol_cnt;
+            $img2vol2{$i} = "img" . $img_cnt;
+
+            print FILE_TMP "image   img" . $img_cnt . "     raw     $i\n";
+            print FILE_TMP "part    vol" . $vol_cnt . "   img" . $img_cnt
+              . " 0   0   raw\n";
+            $img_cnt++;
+            $vol_cnt++;
+        }
+
+        # entry for a strings or blkls file
+        #
+        # strings 	data/hda1.str		images/hda1.dd
+        elsif (/^strings\s+($::REG_IMG)\s+($::REG_IMG)$/o) {
+            my $i = $1;
+            my $o = $2;
+
+            if (exists $img2vol{$o}) {
+                my $vname = $img2vol{$o};
+                print FILE_TMP "strings vol" . $vol_cnt . "     $vname  $i\n";
+                $img2vol{$i}  = "vol" . $vol_cnt;
+                $img2vol2{$i} = "vol" . $vol_cnt;
+            }
+            else {
+                print STDERR "Error: Volume for strings $o not found<br>\n";
+            }
+            $vol_cnt++;
+        }
+
+        # entry for a strings or blkls file
+        #
+        # unistrings 	data/hda1.str		images/hda1.dd
+        elsif (/^unistrings\s+($::REG_IMG)\s+($::REG_IMG)$/o) {
+            my $i = $1;
+            my $o = $2;
+
+            if (exists $img2vol{$o}) {
+                my $vname = $img2vol{$o};
+                print FILE_TMP "unistrings    vol" . $vol_cnt
+                  . "   $vname     $i\n";
+                $img2vol{$i}  = "vol" . $vol_cnt;
+                $img2vol2{$i} = "vol" . $vol_cnt;
+            }
+            else {
+                print STDERR
+                  "Error: Volume for unicode strings $o not found<br>\n";
+            }
+            $vol_cnt++;
+        }
+
+        # blkls entry
+        # blkls data/image.blkls	[images/image.dd]
+        elsif (/^blkls\s+($::REG_IMG)\s*($::REG_IMG)$/o) {
+            my $i = $1;
+            my $o = $2;
+
+            $img2vol{$i} = "vol" . $vol_cnt;
+
+            if (exists $img2vol{$o}) {
+                my $vname = $img2vol{$o};
+                print FILE_TMP "blkls     vol" . $vol_cnt . "  $vname     $i\n";
+                $img2vol{$i}  = "vol" . $vol_cnt;
+                $img2vol2{$i} = "vol" . $vol_cnt;
+            }
+            else {
+                print STDERR "Error: Volume for blkls $o not found<br>\n";
+            }
+            $vol_cnt++;
+        }
+
+        # body data/body.txt
+        elsif (/^body\s+($::REG_IMG)$/o) {
+            my $i = $1;
+            print FILE_TMP "body    vol" . $vol_cnt . " $i\n";
+            $img2vol{$i}  = "vol" . $vol_cnt;
+            $img2vol2{$i} = "vol" . $vol_cnt;
+
+            $vol_cnt++;
+        }
+
+        # timeline data/timeline.txt
+        elsif (/^timeline\s+($::REG_IMG)$/o) {
+            my $i = $1;
+            print FILE_TMP "timeline    vol" . $vol_cnt . " $i\n";
+            $img2vol{$i}  = "vol" . $vol_cnt;
+            $img2vol2{$i} = "vol" . $vol_cnt;
+            $vol_cnt++;
+        }
+
+        # timezone XYZ
+        elsif (/^timezone\s+($::REG_ZONE_ARGS)$/o) {
+            print FILE_TMP "$_\n";
+        }
+
+        # timeskew XYZ
+        elsif (/^timeskew\s+($::REG_SKEW)$/o) {
+            print FILE_TMP "$_\n";
+        }
+
+        # desc XYZ
+        elsif (/^desc\s+(.*)$/) {
+            print FILE_TMP "$_\n";
+        }
+
+        # hash databases
+        elsif (/^alert_db\s+'(.*)'$/) {
+            print FILE_TMP "$_\n";
+        }
+        elsif (/^exclude_db\s+'(.*)'$/) {
+            print FILE_TMP "$_\n";
+        }
+        else {
+            my $msg =
+                "Error: invalid entry in $cfile:$." . "\n"
+              . "image	path	fs_type		mnt_point\n"
+              . "strings	path	orig_img\n"
+              . "blkls		path	[orig_img]\n"
+              . "body		path\n"
+              . "timeline	path\n"
+              . "timezone	TZ\n"
+              . "desc		DESCRIPTION\n";
+            Print::print_check_err($msg);
+        }
+    }
+
+    close(FILE);
+    close(FILE_TMP);
+    unless (rename $cfile, $cfile . ".bak") {
+        print STDERR "Error backing up original host config file\n";
+    }
+    unless (rename $tmpcfile, $cfile) {
+        print STDERR "Error renaming new host config file\n";
+    }
+
+    Notes::convert(\%img2vol);
+    Hash::convert(\%img2vol2);
+}
+
+# reads host config file and sets global hash values for images and other
+sub read_host_config {
+
+    if ($::LIVE == 1) {
+        %Caseman::mod2vol    = ();
+        %Caseman::vol2str    = ();
+        %Caseman::vol2uni    = ();
+        %Caseman::vol2blkls  = ();
+        $Caseman::tz         = "";
+        $Caseman::ts         = 0;
+        $Caseman::host_desc  = "";
+        $Caseman::exclude_db = "";
+        $Caseman::alert_db   = "";
+        return;
+    }
+
+    my $host = Args::get_host();
+
+    my $cfile = host_config_fname();
+  restart:
+    unless (open(FILE, $cfile)) {
+        Print::print_check_err("Error opening $cfile");
+    }
+
+    %Caseman::vol2mnt   = ();
+    %Caseman::vol2ftype = ();
+    %Caseman::vol2dtype = ();
+    %Caseman::vol2cat   = ();
+    %Caseman::mod2vol   = ();
+    %Caseman::vol2str   = ();
+    %Caseman::vol2uni   = ();
+    %Caseman::vol2blkls = ();
+    %Caseman::vol2par   = ();
+    %Caseman::vol2start = ();
+    %Caseman::vol2end   = ();
+    $Caseman::vol2path  = ();
+    $Caseman::vol2sname = ();
+
+    $Caseman::tz         = "";
+    $Caseman::ts         = 0;
+    $Caseman::host_desc  = "";
+    $Caseman::exclude_db = "";
+    $Caseman::alert_db   = "";
+
+    while (<FILE>) {
+        next if ((/^\#/) || (/^\s+$/));
+
+        # remove whitespace
+        s/^\s+//;
+        s/\s+$//;
+
+        # old file system image entry
+        #
+        # 'image	images/hda1.dd		openbsd		/usr
+        if (/^image\s+($::REG_IMG)\s+([\w\-]+)\s+([\w\-\_\.\/:\\]+)$/o) {
+
+            close(FILE);
+            convert_host_config();
+            goto restart;
+        }
+        elsif (
+            /^image\s+($::REG_INAME)\s+($::REG_IMGTYPE)\s+($::REG_IMG_CONFIG)$/o
+          )
+        {
+            my $me = $1;
+            my $t  = $2;
+            my $i  = $3;
+
+            unless ((-e "$::host_dir$i")
+                || ((-l "$::host_dir$i") && (-e readlink "$::host_dir$i")))
+            {
+                Print::print_check_err(
+                        "Error: image $i in ${host}.host:$. not found: "
+                      . "$::host_dir"
+                      . "$i \nEdit the config file and refresh your browser\n"
+                      . "(Or your version of Perl does not support large files)"
+                );
+            }
+
+            if (exists $Caseman::vol2path{$me}) {
+                $Caseman::vol2path{$me} .= " \'$::host_dir" . "$i\'";
+            }
+            else {
+                $Caseman::vol2path{$me}  = "\'$::host_dir" . "$i\'";
+                $Caseman::vol2sname{$me} = $i;
+                $Caseman::vol2sname{$me} = $1 if ($i =~ /\/($::REG_FILE)$/);
+
+                $Caseman::vol2par{$me}   = "";
+                $Caseman::vol2cat{$me}   = "image";
+                $Caseman::vol2itype{$me} = $t;
+                $Caseman::vol2ftype{$me} = "";
+
+                $Caseman::vol2start{$me} = 0;
+                $Caseman::vol2end{$me}   = 0;
+            }
+        }
+        elsif (
+/^part\s+($::REG_VNAME)\s+($::REG_INAME)\s+(\d+)\s+(\d+)\s+($::REG_FTYPE)\s*([\w\-\_\.\/:\\]+)?$/o
+          )
+        {
+            my $par = $2;
+            my $me  = $1;
+            my $s   = $3;
+            my $e   = $4;
+            my $t   = $5;
+            my $r   = $6;    # Not defined for swap and raw
+
+            unless (exists $Fs::addr_unit{$t}) {
+                Print::print_check_err(
+                        "Error: unknown type: $t in host config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            if (exists $Caseman::vol2itype{$par}) {
+                $Caseman::vol2itype{$me} = $Caseman::vol2itype{$par};
+            }
+            else {
+                Print::print_check_err(
+"Error: Image $par for partition $me was not found in config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            $Caseman::vol2ftype{$me} = $t;
+            $Caseman::vol2cat{$me}   = "part";
+            $Caseman::vol2start{$me} = $s;
+            $Caseman::vol2end{$me}   = $e;
+
+            # Add trailing / to original mount point if needed
+            if ((defined $r) && ($r !~ /.*?\/$/) && ($r !~ /.*?\\$/)) {
+                $r .= '/';
+            }
+            $Caseman::vol2mnt{$me}   = $r;
+            $Caseman::vol2par{$me}   = $par;
+            $Caseman::vol2path{$me}  = $Caseman::vol2path{$par};
+            $Caseman::vol2sname{$me} =
+              $Caseman::vol2sname{$par} . "-" . $s . "-" . $e;
+        }
+        elsif (/^disk\s+($::REG_VNAME)\s+($::REG_INAME)\s+($::REG_FTYPE)?$/o) {
+            my $par = $2;
+            my $me  = $1;
+            my $t   = $3;
+
+            unless (exists $Vs::type{$t}) {
+                Print::print_check_err(
+                    "Error: unknown volume system type: $t in host config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            if (exists $Caseman::vol2itype{$par}) {
+                $Caseman::vol2itype{$me} = $Caseman::vol2itype{$par};
+            }
+            else {
+                Print::print_check_err(
+"Error: Image $par for disk $me was not found in config: $.\n"
+                      . "Edit the file and refresh your browser");
+            }
+
+            $Caseman::vol2ftype{$me} = "raw";
+            $Caseman::vol2dtype{$me} = $t;
+            $Caseman::vol2cat{$me}   = "disk";
+            $Caseman::vol2start{$me} = 0;
+            $Caseman::vol2end{$me}   = 0;
+            $Caseman::vol2mnt{$me}   = "";
+            $Caseman::vol2par{$me}   = $par;
+            $Caseman::vol2path{$me}  = $Caseman::vol2path{$par};
+            $Caseman::vol2sname{$me} = $Caseman::vol2sname{$par} . "-disk";
+        }
+
+        # entry for a strings or blkls file
+        #
+        # strings 	data/hda1.str		volX
+        elsif (/^strings\s+($::REG_VNAME)\s+($::REG_VNAME)\s+($::REG_IMG)$/o) {
+            my $i   = $3;
+            my $par = $2;
+            my $me  = $1;
+
+            unless ((-e "$::host_dir$i")
+                || ((-l "$::host_dir$i") && (-e readlink "$::host_dir$i")))
+            {
+                Print::print_check_err("Error: strings file not found: "
+                      . "$::host_dir$i\nEdit host config in $::host_dir and refresh your browser"
+                );
+            }
+
+            unless (exists $Caseman::vol2cat{$par}) {
+                Print::print_check_err(
+"Error: Volume $par for strings $me was not found in config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            $Caseman::vol2ftype{$me} = "strings";
+            $Caseman::vol2cat{$me}   = "mod";
+            $Caseman::vol2itype{$me} = "raw";
+            $Caseman::mod2vol{$me}   = $par;
+            $Caseman::vol2str{$par}  = $me;
+            $Caseman::vol2par{$me}   = $par;
+            $Caseman::vol2path{$me}  = "\'$::host_dir" . "$i\'";
+            $Caseman::vol2start{$me} = 0;
+            $Caseman::vol2end{$me}   = 0;
+            $Caseman::vol2sname{$me} = $i;
+            $Caseman::vol2sname{$me} = $1 if ($i =~ /\/($::REG_FILE)$/);
+
+        }
+
+        # entry for a strings or blkls file
+        #
+        # unistrings 	data/hda1.str		volX
+        elsif (/^unistrings\s+($::REG_VNAME)\s+($::REG_VNAME)\s+($::REG_IMG)$/o)
+        {
+            my $i   = $3;
+            my $par = $2;
+            my $me  = $1;
+
+            unless ((-e "$::host_dir$i")
+                || ((-l "$::host_dir$i") && (-e readlink "$::host_dir$i")))
+            {
+                Print::print_check_err("Error: Unicode strings file not found: "
+                      . "$::host_dir$i\nEdit host config in $::host_dir and refresh your browser"
+                );
+            }
+
+            unless (exists $Caseman::vol2cat{$par}) {
+                Print::print_check_err(
+"Error: Volume $par for unistrings $me was not found in config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            $Caseman::vol2ftype{$me} = "strings";
+            $Caseman::vol2cat{$me}   = "mod";
+            $Caseman::vol2itype{$me} = "raw";
+            $Caseman::mod2vol{$me}   = $par;
+            $Caseman::vol2uni{$par}  = $me;
+            $Caseman::vol2par{$me}   = $par;
+            $Caseman::vol2path{$me}  = "\'$::host_dir" . "$i\'";
+            $Caseman::vol2start{$me} = 0;
+            $Caseman::vol2end{$me}   = 0;
+            $Caseman::vol2sname{$me} = $i;
+            $Caseman::vol2sname{$me} = $1 if ($i =~ /\/($::REG_FILE)$/);
+        }
+
+        # blkls entry
+        # blkls themname	myname
+        elsif ((/^blkls\s+($::REG_VNAME)\s+($::REG_VNAME)\s+($::REG_IMG)$/o) || 
+          (/^dls\s+($::REG_VNAME)\s+($::REG_VNAME)\s+($::REG_IMG)$/o)) {
+            my $i   = $3;
+            my $par = $2;
+            my $me  = $1;
+
+            unless (
+                (-e "$::host_dir$i")
+                || (   (-l "$::host_dir$i")
+                    && (-e readlink "$::host_dir$i"))
+              )
+            {
+                Print::print_check_err("Error: blkls file not found: "
+                      . "$::host_dir$i \nEdit host config in $::host_dir and refresh your browser"
+                );
+            }
+
+            unless (exists $Caseman::vol2cat{$par}) {
+                Print::print_check_err(
+"Error: Volume $par for blkls $me was not found in config: $."
+                      . "\nEdit the file and refresh your browser");
+            }
+
+            $Caseman::vol2ftype{$me}  = "blkls";
+            $Caseman::vol2cat{$me}    = "mod";
+            $Caseman::vol2itype{$me}  = "raw";
+            $Caseman::vol2mnt{$me}    = "";
+            $Caseman::vol2par{$me}    = $par;
+            $Caseman::mod2vol{$me}    = $par;
+            $Caseman::vol2blkls{$par} = $me;
+            $Caseman::vol2path{$me}   = "\'$::host_dir" . "$i\'";
+            $Caseman::vol2start{$me}  = 0;
+            $Caseman::vol2end{$me}    = 0;
+            $Caseman::vol2sname{$me}  = $i;
+            $Caseman::vol2sname{$me}  = $1 if ($i =~ /\/($::REG_FILE)$/);
+
+        }
+
+        # body data/body.txt
+        elsif (/^body\s+($::REG_VNAME)\s+($::REG_IMG)$/o) {
+            my $me = $1;
+            my $i  = $2;
+
+            unless ((-e "$::host_dir$i")
+                || ((-l "$::host_dir$i") && (-e readlink "$::host_dir$i")))
+            {
+                Print::print_check_err("Error: body file not found: "
+                      . "$::host_dir$i <br>Edit host config in $::host_dir and refresh your browser"
+                );
+            }
+
+            $Caseman::vol2cat{$me}   = "timeline";
+            $Caseman::vol2ftype{$me} = "body";
+            $Caseman::vol2itype{$me} = "raw";
+            $Caseman::vol2path{$me}  = "\'$::host_dir" . "$i\'";
+            $Caseman::vol2start{$me} = 0;
+            $Caseman::vol2end{$me}   = 0;
+            $Caseman::vol2sname{$me} = $i;
+            $Caseman::vol2sname{$me} = $1 if ($i =~ /\/($::REG_FILE)$/);
+        }
+
+        # timeline data/timeline.txt
+        elsif (/^timeline\s+($::REG_VNAME)\s+($::REG_IMG)$/o) {
+            my $me = $1;
+            my $i  = $2;
+
+            unless ((-e "$::host_dir$i")
+                || ((-l "$::host_dir$i") && (-e readlink "$::host_dir$i")))
+            {
+                Print::print_check_err("Error: timeline file not found: "
+                      . "$::host_dir$i \nEdit host config in $::host_dir and refresh your browser"
+                );
+            }
+
+            $Caseman::vol2cat{$me}   = "timeline";
+            $Caseman::vol2ftype{$me} = "timeline";
+            $Caseman::vol2itype{$me} = "raw";
+
+# We do not add the quotes to the path for timeline because it is opened only by the Perl code and it doesn't like the quotes
+            $Caseman::vol2path{$me}  = "$::host_dir" . "$i";
+            $Caseman::vol2start{$me} = 0;
+            $Caseman::vol2end{$me}   = 0;
+            $Caseman::vol2sname{$me} = $i;
+            $Caseman::vol2sname{$me} = $1 if ($i =~ /\/($::REG_FILE)$/);
+
+        }
+
+        # timezone XYZ
+        elsif (/^timezone\s+($::REG_ZONE_ARGS)$/o) {
+            $Caseman::tz = "\'$1\'";
+        }
+
+        # timeskew XYZ
+        elsif (/^timeskew\s+($::REG_SKEW)$/o) {
+            $Caseman::ts = "\'$1\'";
+        }
+
+        # desc XYZ
+        elsif (/^desc\s+(.*)$/) {
+            $Caseman::host_desc = Print::html_encode($1);
+        }
+
+        # hash databases
+        elsif (/^alert_db\s+'($::REG_HASHDB)'$/) {
+            $Caseman::alert_db = "$1";
+        }
+        elsif (/^exclude_db\s+'($::REG_HASHDB)'$/) {
+            $Caseman::exclude_db = "$1";
+        }
+        else {
+            my $msg = "Error: invalid entry in $cfile:$." . "\n" . "$_\n";
+            Print::print_check_err($msg);
+        }
+    }
+    close(FILE);
+}
+
+# Add a new image entry to the host config and return its id
+sub add_img_host_config {
+    my $type  = shift;
+    my $other = shift;
+    my $id    = shift;
+
+    my $read  = host_config_fname();
+    my $write = $read . "-" . rand();
+
+    unless (open(READ, "<$read")) {
+        Print::print_check_err("Error opening $read");
+    }
+
+    unless (open(WRITE, ">$write")) {
+        Print::print_check_err("Error opening $write");
+    }
+
+    my $maxcnt = 0;
+
+    while (<READ>) {
+        s/^\s+//;
+        s/\s+$//;
+        if (/^\w+\s+img(\d+)\s+.*$/) {
+            $maxcnt = $1 if ($1 > $maxcnt);
+        }
+        print WRITE "$_\n";
+    }
+    $maxcnt++;
+    if ($id eq "") {
+        $id = "img" . $maxcnt;
+    }
+    print WRITE "$type  $id  $other\n";
+
+    Print::log_host_info("Image added: $type $id $other");
+
+    close(READ);
+    close(WRITE);
+    unless (rename $write, $read) {
+        print STDERR "Error renaming temp host config file\n";
+    }
+
+    return $id;
+}
+
+# Add a new volume entry to the host config and return its id
+sub add_vol_host_config {
+    my $type  = shift;
+    my $other = shift;
+
+    my $read  = host_config_fname();
+    my $write = $read . "-" . rand();
+
+    unless (open(READ, "<$read")) {
+        Print::print_check_err("Error opening $read");
+    }
+
+    unless (open(WRITE, ">$write")) {
+        Print::print_check_err("Error opening $write");
+    }
+
+    # We want to find the max count ... not just the unused
+    # ones because we could end up reusing one and that could
+    # mess up the notes
+    my $maxcnt = 0;
+
+    while (<READ>) {
+        s/^\s+//;
+        s/\s+$//;
+        if (/^\w+\s+vol(\d+)\s+.*$/) {
+            $maxcnt = $1 if ($1 > $maxcnt);
+        }
+        print WRITE "$_\n";
+    }
+    $maxcnt++;
+    print WRITE "$type  vol" . $maxcnt . "  $other\n";
+    Print::log_host_info("Volume added: $type  vol" . $maxcnt . " $other");
+
+    close(READ);
+    close(WRITE);
+    unless (rename $write, $read) {
+        print STDERR "Error renaming temp host config file\n";
+    }
+
+    return "vol" . $maxcnt;
+}
+
+# Delete anentry from the host config
+# DOES NOT WORK RIGHT NOW
+sub del_host_config_BLAH {
+    return;
+    my $type  = shift;
+    my $other = shift;
+
+    my $read  = host_config_fname();
+    my $write = $read . "-" . rand();
+
+    unless (open(READ, "<$read")) {
+        Print::print_check_err("Error opening $read");
+    }
+
+    unless (open(WRITE, ">$write")) {
+        Print::print_check_err("Error opening $write");
+    }
+
+    while (<READ>) {
+        s/^\s+//;
+        s/\s+$//;
+        print WRITE "$_\n"
+          unless ((/^(\w+)\s+($::REG_IMG)/o)
+            && ($2 eq $img)
+            && ($1 ne 'desc')
+            && ($1 ne 'timezone'));
+    }
+
+    if ($type ne "") {
+        if (defined $ref) {
+            print WRITE "$type  $img    $ref\n";
+        }
+        else {
+            print WRITE "$type  $img\n";
+        }
+    }
+
+    close(READ);
+    close(WRITE);
+    unless (rename $write, $read) {
+        print STDERR "Error renaming temp host config file\n";
+    }
+
+    return;
+}
+
+# Given the image and md5, it is saved to the MD5.txt file and any other
+# references to the image are removed
+#
+# if $md5 is "", then nothing is written
+sub update_md5 {
+    my $vol = shift;
+    my $md5 = shift;
+    $md5 =~ tr/[a-f]/[A-F]/;
+
+    my $read  = "$::host_dir/md5.txt";
+    my $write = $read . "-" . rand();
+
+    unless (open(WRITE, ">$write")) {
+        Print::print_check_err("Error opening $write");
+    }
+
+    if (-e "$read") {
+        unless (open(READ, "<$read")) {
+            Print::print_check_err("Error opening $read");
+        }
+
+        while (<READ>) {
+            s/^\s+//;
+            s/\s+$//;
+            print WRITE "$_\n"
+              unless ((/^$::REG_MD5\s+($::REG_VNAME)/o) && ($1 eq $vol));
+        }
+        close(READ);
+    }
+
+    print WRITE "$md5   $vol\n" if ($md5 ne "");
+
+    close(WRITE);
+
+    unless (rename $write, $read) {
+        print STDERR "Error renaming temp MD5 hash file\n";
+    }
+    return;
+}
+
+sub host_add {
+    Print::print_html_header("Add A New Host To $Args::args{'case'}");
+
+    print "<b>Case: </b> $Args::args{'case'}<br><br>\n";
+
+    print "<center>"
+      . "<img src=\"pict/menu_h_hnew.jpg\" alt=\"Add Host\">"
+      . "<br><br><br>\n";
+
+    print "<table width=\"600\" cellspacing=\"0\" background=\"$::YEL_PIX\" "
+      . "cellpadding=\"2\" border=0>\n"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_ADD_DOIT\">\n"
+      . Args::make_hidden()
+      . "<tr><td colspan=\"2\">&nbsp;</td></tr>"
+      .
+
+      # Host name
+"<tr><td align=\"left\" colspan=2>1.  <b>Host Name:</b>  The name of the computer being investigated.  It can contain only letters, numbers, and symbols.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\"><input type=\"text\" name=\"host\" size=32 maxlength=32 value=\"host1\"></td></tr>\n"
+      .
+
+      # Description
+"<tr><td align=\"left\" colspan=2>2.  <b>Description:</b>  An optional one-line description or note about this computer.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\">"
+      . "<input type=\"text\" name=\"desc\" size=32 maxlength=32></td></tr>\n"
+      .
+
+      # Empty line
+      "<tr><td colspan=\"2\">&nbsp;</td></tr>" .
+
+      # Timezone
+"<tr><td align=\"left\" colspan=2>3.  <b>Time zone:</b> An optional timezone value (i.e. EST5EDT).  If not given, it defaults to the local setting.  A list of time zones can be found in the help files.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\">"
+      . "<input type=\"text\" name=\"tz\" size=16 maxlength=64></td></tr>\n"
+      .
+
+      # Timeskew
+"<tr><td align=\"left\" colspan=2>4.  <b>Timeskew Adjustment:</b> An optional value to describe how many seconds this computer's clock was out of sync.  For example, if the computer was 10 seconds fast, then enter -10 to compensate.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\">"
+      . "<input type=\"text\" name=\"ts\" size=8 maxlength=16 value=\"0\">"
+      . "</td></tr>\n"
+      .
+
+      # Spacer
+      "<tr><td colspan=\"2\">&nbsp;</td></tr>" .
+
+      # Alert
+"<tr><td align=\"left\" colspan=2>5.  <b>Path of Alert Hash Database:</b> An optional hash database of known bad files.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\">"
+      . "<input type=\"text\" name=\"alert_db\" size=32 maxlength=512>"
+      . "</td></tr>\n"
+      .
+
+      # Ignore
+"<tr><td align=\"left\" colspan=2>6.  <b>Path of Ignore Hash Database:</b> An optional hash database of known good files.</td></tr>"
+      . "<tr><td align=\"left\">&nbsp;&nbsp;&nbsp;</td>"
+      . "<td align=\"left\">"
+      . "<input type=\"text\" name=\"exclude_db\" size=32 maxlength=512>"
+      . "</td></tr>\n"
+      .
+
+      # Spacer
+      "<tr><td colspan=\"2\">&nbsp;</td></tr>" . "</table>\n";
+
+    if (exists $Args::args{'inv'}) {
+        print
+          "<input type=\"hidden\" name=\"inv\" value=\"$Args::args{'inv'}\">\n";
+    }
+
+    # Ok Button
+    print "<br><br><table width=\"600\" cellspacing=\"8\" cellpadding=\"2\">\n"
+      . "<tr><td align=center>"
+      . "<input type=\"image\" src=\"pict/menu_b_hnew.jpg\" "
+      . "width=167 height=20 alt=\"Add Host\" border=0>\n"
+      . "</form></td>\n"
+      .
+
+      # Cancel Button
+      "<td align=center>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_OPEN\">\n"
+      . "<input type=\"hidden\" name=\"case\" value=\"$Args::args{'case'}\">\n"
+      . "<input type=\"image\" src=\"pict/menu_b_cancel.jpg\" "
+      . "alt=\"Cancel\" width=\"167\" height=20 border=0>\n"
+      . "</form></td>\n"
+      .
+
+      # Help Button
+      "<td align=center><a href=\"$::HELP_URL\" "
+      . "target=\"_blank\">"
+      . "<img src=\"pict/menu_b_help.jpg\" alt=\"Help\" "
+      . "width=\"167\" height=20 border=0></a>"
+      . "</td></tr>\n"
+      . "</table>";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Make the directories and config files for a host
+sub host_add_doit {
+    Args::check_tz()
+      if ((exists $Args::args{'tz'}) && ($Args::args{'tz'} ne ""));
+    Args::check_ts();
+    Print::print_html_header(
+        "Adding Host $Args::args{'host'} to $Args::args{'case'}");
+
+    print "<h3>Adding host: <tt>$Args::args{'host'}</tt> to "
+      . "case <tt>$Args::args{'case'}</tt></h3>\n";
+
+    # Do some sanity checks before we start making the directories and such
+    if (   (exists $Args::args{'alert_db'})
+        && ($Args::args{'alert_db'} ne ""))
+    {
+
+        unless ($Args::args{'alert_db'} =~ /^$::REG_HASHDB$/o) {
+            print "Invalid Alert Database path\n"
+              . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::HOST_ADD&case=$Args::args{'case'}\">"
+              . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=\"43\" height=20 border=\"0\"></a>\n";
+            return 1;
+        }
+
+        unless (-e "$Args::args{'alert_db'}") {
+            print "Alert Database Not Found: $Args::args{'alert_db'}"
+              . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::HOST_ADD&case=$Args::args{'case'}\">"
+              . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=\"43\" height=20 border=\"0\"></a>\n";
+            return 1;
+        }
+    }
+
+    if (   (exists $Args::args{'exclude_db'})
+        && ($Args::args{'exclude_db'} ne ""))
+    {
+        unless ($Args::args{'exclude_db'} =~ /^$::REG_HASHDB$/o) {
+            print "Invalid Exclude Database path\n"
+              . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::HOST_ADD&case=$Args::args{'case'}\">"
+              . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=\"43\" height=20 border=\"0\"></a>\n";
+            return 1;
+        }
+
+        unless (-e "$Args::args{'exclude_db'}") {
+            print "Exclude Database Not Found: $Args::args{'exclude_db'}"
+              . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::HOST_ADD&case=$Args::args{'case'}\">"
+              . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=\"43\" height=20 border=\"0\"></a>\n";
+            return 1;
+        }
+    }
+
+    # Make the directory
+    if (-d "$::host_dir") {
+
+        print "Error: $::host_dir already exists<br>"
+          . "Please remove the directory and its contents and try again"
+          . "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+          . "view=$Caseman::HOST_OPEN&case=$Args::enc_args{'case'}\">"
+          . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+          . "width=\"43\" height=20 border=\"0\"></a>\n";
+        Print::print_err("\n");
+    }
+    unless (mkdir "$::host_dir", $::MKDIR_MASK) {
+        Print::print_err("Error making directory $::host_dir: $!");
+    }
+
+    print "Host Directory (<tt>$::host_dir</tt>) created<p>\n";
+    Print::log_case_info("Host $Args::args{'host'} added to case");
+
+    # Images directory
+    unless (mkdir "$::host_dir" . "$::IMGDIR", $::MKDIR_MASK) {
+        rmdir "$::host_dir";
+        Print::print_err("Error making $::host_dir" . "$::IMGDIR");
+    }
+
+    # Output Directory
+    unless (mkdir "$::host_dir" . "$::DATADIR", $::MKDIR_MASK) {
+        rmdir "$::host_dir" . "$::IMGDIR";
+        rmdir "$::host_dir";
+        Print::print_err("Error making $::host_dir" . "$::DATADIR");
+    }
+
+    # Log Directory
+    unless (mkdir "$::host_dir" . "$::LOGDIR", $::MKDIR_MASK) {
+        rmdir "$::host_dir" . "$::DATADIR";
+        rmdir "$::host_dir" . "$::IMGDIR";
+        rmdir "$::host_dir";
+        Print::print_err("Error making $::host_dir" . "$::LOGDIR");
+    }
+
+    # Reports directory
+    unless (mkdir "$::host_dir" . "$::REPDIR", $::MKDIR_MASK) {
+        rmdir "$::host_dir" . "$::LOGDIR";
+        rmdir "$::host_dir" . "$::DATADIR";
+        rmdir "$::host_dir" . "$::IMGDIR";
+        rmdir "$::host_dir";
+        Print::print_err("Error making $::host_dir" . "$::REPDIR");
+    }
+
+    # Make a directory for mounting the image in loopback
+    unless (mkdir "$::host_dir" . "mnt", $::MKDIR_MASK) {
+        rmdir "$::host_dir" . "$::REPDIR";
+        rmdir "$::host_dir" . "$::LOGDIR";
+        rmdir "$::host_dir" . "$::DATADIR";
+        rmdir "$::host_dir" . "$::IMGDIR";
+        rmdir "$::host_dir";
+        Print::print_err("Error making $::host_dir" . "mnt");
+    }
+
+    Print::log_host_info(
+        "Host $Args::args{'host'} added to case $Args::args{'case'}");
+
+    # Create config file
+    my $fname = Caseman::host_config_fname();
+    open HOST_CONFIG, ">$fname" or die "Can't open host config: $fname";
+
+    print HOST_CONFIG "# Autopsy host config file\n"
+      . "# Case: $Args::args{'case'}		Host: $Args::args{'host'}\n"
+      . "# Created: "
+      . localtime() . "\n\n";
+
+    if ((exists $Args::args{'desc'}) && ($Args::args{'desc'} ne "")) {
+        Print::print_err(
+            "Invalid Description\n" . "Use the browser's back button to fix")
+          if ($Args::args{'desc'} =~ /\n/);
+
+        print HOST_CONFIG "desc $Args::args{'desc'}\n";
+    }
+
+    print HOST_CONFIG "timezone  " . Args::get_tz() . "\n"
+      if ((exists $Args::args{'tz'}) && ($Args::args{'tz'} ne ""));
+    print HOST_CONFIG "timeskew  " . Args::get_ts() . "\n";
+
+    if (   (exists $Args::args{'alert_db'})
+        && ($Args::args{'alert_db'} ne ""))
+    {
+
+        # Index it if it is not
+        unless (-e "$Args::args{'alert_db'}-md5.idx") {
+            print
+"Alert Database has not been indexed - it will be as an md5sum file<br>\n";
+
+            print "<hr>\n";
+            Hash::index_md5sum($Args::args{'alert_db'});
+            print "<hr>\n";
+        }
+
+        # only print it if it was successful
+        print HOST_CONFIG "alert_db \'$Args::args{'alert_db'}\'\n"
+          if (-e "$Args::args{'alert_db'}-md5.idx");
+    }
+
+    if (   (exists $Args::args{'exclude_db'})
+        && ($Args::args{'exclude_db'} ne ""))
+    {
+
+        # Index it if it is not
+        unless (-e "$Args::args{'exclude_db'}-md5.idx") {
+            print
+"Exclude Database has not been indexed - it will be as an md5sum file<br>\n";
+
+            print "<hr>\n";
+            Hash::index_md5sum($Args::args{'exclude_db'});
+            print "<hr>\n";
+        }
+
+        # only print it if it was successful
+        print HOST_CONFIG "exclude_db \'$Args::args{'exclude_db'}\'\n"
+          if (-e "$Args::args{'exclude_db'}-md5.idx");
+    }
+
+    close HOST_CONFIG;
+
+    print "Configuration file (<tt>$fname</tt>) created<br><br>\n";
+
+    print "We must now import an image file for this host\n";
+
+    print "<br><br><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::HOST_OPEN_LOG&$Args::baseargs\">"
+      . "<img src=\"pict/menu_b_inew.jpg\" alt=\"Add Image\" "
+      . " height=20 border=\"0\"></a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Open a host in the given case
+sub host_open {
+    Print::print_html_header("Open Host In $Args::args{'case'}");
+
+    # Create an array of directories in the case, verifying that there is
+    # a config file
+    my @hosts;
+    opendir HOSTS, $::case_dir or die "Can't open $::case_dir directory: $!";
+    foreach my $h (readdir HOSTS) {
+        next if (($h eq '.') || ($h eq '..'));
+
+        my $hfile = Caseman::host_config_fname($h);
+        push @hosts, $h
+          if ((-d "$::case_dir" . "$h") && (-e "$hfile"));
+    }
+    closedir HOSTS;
+
+    print "<b>Case:</b> $Args::args{'case'}<br><br>\n";
+
+    print "<center>";
+
+    if (scalar @hosts == 0) {
+        print "No hosts have been added to the case yet"
+          . "<br><br>Select the Add Host button below to create one.<br>\n";
+    }
+    else {
+
+        print "Select the host to open or create a new one<br>\n";
+
+        print_menu_tabs();
+
+        print "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\" "
+          . "background=\"$::YEL_PIX\" border=0>\n";
+
+        print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_OPEN_LOG\">\n"
+          . Args::make_hidden()
+          . "<tr><th>Name</th>"
+          . "<th>Description</th><th>&nbsp;</th></tr>\n";
+
+        my $first = 0;
+        foreach my $h (@hosts) {
+
+            print "<tr><td align=\"left\">"
+              . "<input type=\"radio\" name=\"host\" value=$h";
+            if ($first == 0) {
+                print " CHECKED";
+                $first = 1;
+            }
+            print "> " . Print::html_encode($h) . " </td>";
+
+            my $fname = Caseman::host_config_fname($h);
+            open CONFIG, "<$fname"
+              or die "Can't open host config file ($fname)";
+
+            my $desc = "None Provided";
+            while (<CONFIG>) {
+                s/^\s+//;
+                s/\s+$//;
+
+                if (/^desc\s+(.*)$/) {
+                    $desc = Print::html_encode($1);
+                    last;
+                }
+            }
+            close CONFIG;
+
+            print "<td align=left>$desc</td>"
+              . "<td align=center>"
+              . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::HOST_DETAILS&$Args::baseargs&"
+              . "host=$h\">details</a></td></tr>\n";
+        }
+        print "</table>\n";
+
+        # Display pulldown of investigators
+        my @invs = read_invest();
+        if (scalar @invs == 0) {
+            print "<input type=\"hidden\" name=\"inv\" value=\"unknown\">\n";
+        }
+        else {
+            print "<br>Investigator (for reports only): ";
+            my $cur_inv = "";
+            $cur_inv = $Args::args{'inv'} if (exists $Args::args{'inv'});
+
+            print "<select name=\"inv\" size=\"1\">\n";
+
+            if (($cur_inv eq "") && (scalar @invs != 1)) {
+                print "<option value=\"\" selected>Select One" . "</option>\n";
+            }
+            foreach my $i (@invs) {
+                print "<option value=\"$i\"";
+                print " selected" if ($cur_inv eq $i);
+                print ">" . Print::html_encode($i) . "</option>\n";
+            }
+            print "</select>\n";
+        }
+    }
+    print "<br><br><table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">\n"
+      . "<tr>\n";
+
+    # Make a table for the buttons.  The table will either be 3 or 2
+    # entries wide, depending on if there is an 'Ok' button or not
+
+    unless (scalar @hosts == 0) {
+        print "<td align=center>"
+          . "<input type=\"image\" src=\"pict/menu_b_ok.jpg\" "
+          . "alt=\"Ok\" width=\"167\" height=20 border=0>\n"
+          . "</form>\n</td>\n";
+    }
+
+    # Add Host
+    print "<td align=center>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_ADD\">\n"
+      . "<input type=\"hidden\" name=\"case\" value=\"$Args::args{'case'}\">\n"
+      . "<input type=\"image\" src=\"pict/menu_b_hnew.jpg\" "
+      . "alt=\"Add Host\" width=\"176\" height=20 border=0>\n"
+      . "</form></td>"
+      .
+
+      # Close Button
+      "<td align=center>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::CASE_OPEN\">\n"
+      . "<input type=\"image\" src=\"pict/menu_b_ccls.jpg\" "
+      . "alt=\"Close Case\" width=\"176\" height=20 border=0>\n"
+      . "</form></td></tr></table>\n";
+
+    print "<table width=\"600\"  cellspacing=\"0\" cellpadding=\"2\">\n"
+      . "<tr><td>&nbsp;</td>"
+      . "<td align=center><a href=\"$::HELP_URL\" "
+      . " target=\"_blank\">"
+      . "<img src=\"pict/menu_b_help.jpg\" alt=\"Help\" "
+      . "width=\"167\" height=20 border=0>"
+      . "</a></td><td>&nbsp;</td></tr>\n"
+      . "</table>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Log that a given host was opened and then proceed to open an image
+sub host_open_log {
+    unless ((exists $Args::args{'inv'}) && ($Args::args{'inv'} ne "")) {
+        my @invs = read_invest();
+        if (scalar @invs == 0) {
+            $Args::args{'inv'} = $Args::enc_args{'inv'} = 'unknown';
+        }
+        else {
+            Print::print_html_header("Missing Investigator");
+            print "<br>An investigator must be selected<p>\n"
+              . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_OPEN_LOG\">\n"
+              . Args::make_hidden();
+
+            print "Select one of the following:";
+            print "<select name=\"inv\" size=\"1\">\n";
+
+            print "<option value=\"\" selected>Select One" . "</option>\n";
+
+            foreach my $i (@invs) {
+                print "<option value=\"$i\">$i</option>\n";
+            }
+            print "</select><p>\n"
+              . "<input type=\"image\" src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=43 height=20 border=\"0\">\n"
+              . "</form>\n";
+
+            Print::print_html_footer();
+            return 0;
+        }
+    }
+
+    Args::check_inv();
+    Print::log_case_info(
+        "Host $Args::args{'host'} opened by $Args::args{'inv'}");
+    Print::log_host_info(
+        "Host $Args::args{'host'} opened by $Args::args{'inv'}");
+    Print::log_host_inv("Host $Args::args{'host'} opened");
+
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Caseman::VOL_OPEN;
+    vol_open();
+}
+
+# Provide details about the configuration of a host.  This window is
+# a link from the HOST_OPEN window
+sub host_details {
+    Print::print_html_header(
+        "Details of $Args::args{'case'}:$Args::args{'host'}");
+
+    print "<b>Case: </b>$Args::args{'case'}<br><br>"
+      . "<center>"
+      . "<img src=\"pict/menu_h_hdet.jpg\" alt=\"Host Details\">"
+      . "<br><br><br>\n"
+      . "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\" "
+      . "background=\"$::YEL_PIX\" border=0>\n"
+      .
+
+      # Name
+      "<tr><td align=\"right\" width=300><b>Name:</b></td>"
+      . "<td align=\"left\" width=300><tt>$Args::args{'host'}</tt></td></tr>\n"
+      .
+
+      # Description
+      "<tr><td align=\"right\"><b>Description:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . (($Caseman::host_desc ne "") ? $Caseman::host_desc : "&nbsp;")
+      . "</tt></td></tr>\n"
+      .
+
+      # Timezone
+      "<tr><td align=\"right\"><b>Time zone: </b></td>"
+      . "<td align=\"left\"><tt>$Caseman::tz</tt></td></tr>\n"
+      .
+
+      # Timeskew
+      "<tr><td align=\"right\"><b>Timeskew:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::ts</tt></td></tr>\n"
+      . "<tr><td colspan=2>&nbsp;</td></tr>\n"
+      .
+
+      # Actual Directory
+      "<tr><td align=\"right\"><b>Directory:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . Print::html_encode($::host_dir)
+      . "</tt></td></tr>\n"
+      . "<tr><td colspan=2>&nbsp;</td></tr>\n"
+      .
+
+      # Alert Database
+      "<tr><td align=\"right\"><b>Alert Hash Database:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . (($Caseman::alert_db ne "")
+        ? Print::html_encode($Caseman::alert_db)
+        : "&nbsp;")
+      . "</tt></td></tr>\n"
+      .
+
+      # Exclude Database
+      "<tr><td align=\"right\"><b>Exclude Hash Database:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . (($Caseman::exclude_db ne "")
+        ? Print::html_encode($Caseman::exclude_db)
+        : "&nbsp;")
+      . "</tt></td></tr>\n"
+      . "</table>\n";
+
+    # Final Button
+    print "<br><br><form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_OPEN\">\n"
+      . Args::make_hidden()
+      . "<input type=\"image\" src=\"pict/menu_b_ok.jpg\" "
+      . "alt=\"Ok\" width=\"167\" height=20 border=\"0\">\n</form>";
+
+    Print::print_html_footer();
+
+    return;
+}
+
+# Read the investigators file and return a sorted list
+sub read_invest {
+    my $fname = investig_fname();
+    open INVES, "<$fname" or return;
+
+    my @investigs;
+    while (<INVES>) {
+        chomp;
+        s/^\s+//;
+        s/\s+$//;
+        push @investigs, $1
+          if (/^($::REG_INVESTIG)$/o);
+    }
+    close(INVES);
+    sort { lc($a) cmp lc($b) } @investigs;
+}
+
+# File of investigators name in list
+sub investig_fname {
+    return "$::case_dir" . "investigators.txt";
+}
+
+####################################################################
+# Image Functions
+
+# Types of modes for fname (i.e. can we overwrite it if it exists)
+my $FNAME_MODE_INIT = 0;
+my $FNAME_MODE_OVER = 1;
+
+my $MD5_NOTHING = 1;
+my $MD5_CALC    = 2;
+my $MD5_ADD     = 3;
+
+my $IMG_ADD_SYM  = 1;
+my $IMG_ADD_COPY = 2;
+my $IMG_ADD_MOVE = 3;
+
+# Open an image that has been configured
+sub vol_open {
+    Print::print_html_header(
+        "Open Image In $Args::args{'case'}:$Args::args{'host'}");
+
+    print "<b>Case:</b> $Args::args{'case'}<br>\n";
+    print "<b>Host:</b> $Args::args{'host'}<br>\n";
+    print "<center>\n";
+
+    # the images have been loaded from reading the host config file in
+    # autopsy_main
+    if (scalar(keys %Caseman::vol2ftype) == 0) {
+        print "No images have been added to this host yet<br><br>\n"
+          . "Select the Add Image File button below to add one\n";
+        goto EGRESS;
+    }
+
+    if ($::LIVE == 1) {
+        print "Select a volume to analyze.<br>\n";
+    }
+    else {
+        print "Select a volume to analyze or add a new image file.<br>\n";
+    }
+
+    print_menu_tabs();
+
+    print "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\" "
+      . "background=\"$::YEL_PIX\" border=0>\n";
+
+    # We want to sort, so rearrange the hash
+    my %mnt2vol;
+    my %par2disk;
+
+    # Cycle through each image we read from the host config
+    foreach my $i (keys %Caseman::vol2cat) {
+        if ($Caseman::vol2cat{$i} eq "disk") {
+            $mnt2vol{"1disk--AUTOPSY--$i"} = $i;
+        }
+        elsif ($Caseman::vol2cat{$i} eq "part") {
+            if (   ($Caseman::vol2ftype{$i} eq "raw")
+                || ($Caseman::vol2ftype{$i} eq "swap"))
+            {
+                $mnt2vol{"2$Caseman::vol2ftype{$i}--AUTOPSY--$i"} = $i;
+            }
+            else {
+                $mnt2vol{"2$Caseman::vol2mnt{$i}--AUTOPSY--$i"} = $i;
+            }
+        }
+    }
+
+    # sort via parent volume, then starting location,
+    # and then mount point (which includes the name)
+    my @mnt = sort {
+        ($Caseman::vol2par{$mnt2vol{$a}} cmp $Caseman::vol2par{$mnt2vol{$b}})
+          or ($Caseman::vol2start{$mnt2vol{$a}} <=>
+            $Caseman::vol2start{$mnt2vol{$b}})
+          or (lc($a) cmp lc($b))
+    } keys %mnt2vol;
+
+    # It is possible to have only the blkls image and not the original
+    # We need to search for those now because they will not be in the
+    # list that we just made (which are arranged via mount point)
+    my @orphan_blkls;
+
+    # cycle through each image and check its type and original
+    foreach my $k (keys %Caseman::vol2ftype) {
+        if (   ($Caseman::vol2ftype{$k} eq "blkls")
+            && (!exists $Caseman::mod2vol{$k}))
+        {
+            push @orphan_blkls, $k;
+        }
+    }
+
+    print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_OPEN_LOG\">\n"
+      . Args::make_hidden()
+
+      . "<tr><th>&nbsp;</th>"
+      . "<th align=left>mount</th>"
+      . "<th align=left>name</th>"
+      .    # vol name
+      "<th align=left>fs type</th></tr>\n";
+
+    my $prev_par = "";
+
+    for (my $i = 0; $i <= $#mnt; $i++) {
+        my $vol = $mnt2vol{$mnt[$i]};
+
+        if ($Caseman::vol2par{$vol} ne $prev_par) {
+            print "<tr><td colspan=5><hr></td></tr>\n" if ($i != 0);
+            $prev_par = $Caseman::vol2par{$vol};
+        }
+
+        # Mount Point
+        # If we have the dummy string at the end of the duplicate
+        # entry, then take it off and print the original
+        $mnt[$i] = $1 if ($mnt[$i] =~ /^\d(.*?)--AUTOPSY--$::REG_VNAME$/o);
+        print "<tr>" . "<td><input type=\"radio\" name=\"vol\" value=$vol";
+        print " CHECKED" if ($i == 0);
+        print "></td>"
+          . "<td><tt>"
+          . Print::html_encode($mnt[$i])
+          . "</tt></td>";
+
+        # image name and ftype
+        print
+"<td><tt>$Caseman::vol2sname{$vol}</tt></td><td>$Caseman::vol2ftype{$vol}</td>";
+        if ($::LIVE == 0) {
+            print "<td align=center><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+              . "view=$Caseman::VOL_DETAILS&$Args::baseargs&"
+              . "vol=$vol\">details</a></td>"
+              . "</tr>\n";
+        }
+        else {
+            print "<td>&nbsp;</td></tr>\n";
+        }
+    }
+
+    # If we are done with the regular images and have some orphan
+    # blkls images, print them
+    my @sort = sort @orphan_blkls;
+    for (my $i = 0; $i <= $#sort; $i++) {
+        print
+"<tr><td>&nbsp;</td><td>&nbsp;</td><td>(<input type=\"radio\" name=\"vol\" "
+          . "value=$sort[$i]";
+        print " CHECKED" if ($#mnt == 0);
+        print "> unalloc)</td><td><tt>"
+          . Print::html_encode($Caseman::vol2sname{$sort[$i]})
+          . "</tt></td><td>"
+          . Print::html_encode($Caseman::vol2ftype{$sort[$i]})
+          . "</td></tr>\n";
+    }
+
+    # Begin Button
+    print "</table>\n";
+
+  EGRESS:
+
+    print "<br><br>"
+      . "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">\n";
+
+    # Ok Button
+    if (scalar(keys %Caseman::vol2ftype) == 0) {
+        print "<tr><td width=200>&nbsp;</td>\n";
+    }
+    else {
+        print "<tr><td align=center width=200>"
+          . "<input type=\"image\" src=\"pict/menu_b_analyze.jpg\" "
+          . "alt=\"Analyze\" width=\"167\" height=20 border=0>\n"
+          . "</form></td>\n";
+    }
+
+    # Image Add Button
+    if ($::LIVE == 0) {
+        print "<td align=center width=200>"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::IMG_ADD\">\n"
+          . Args::make_hidden()
+          . "<input type=\"image\" src=\"pict/menu_b_ifnew.jpg\" "
+          . "alt=\"Add Image\" width=167 height=20 border=0></form></td>\n"
+          .
+
+          # Cancel Button
+          "<td align=center width=200>"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::HOST_OPEN\">\n"
+          . "<input type=\"hidden\" name=\"case\" value=\"$Args::args{'case'}\">\n"
+          . "<input type=\"image\" src=\"pict/menu_b_hcls.jpg\" "
+          . "width=167 height=20 alt=\"Close Host\" border=0>\n"
+          . "</form></td></tr>";
+    }
+    else {
+        print "<td width=200>&nbsp;</td><td width=200>&nbsp;</td></tr>\n";
+    }
+
+    # Help Button
+    print
+"<td width=200>&nbsp;</td><td align=center width=200><a href=\"$::HELP_URL\" "
+      . " target=\"_blank\">"
+      . "<img src=\"pict/menu_b_help.jpg\" alt=\"Help\" "
+      . "width=\"167\" height=20 border=0>"
+      . "</a></td><td width=200>&nbsp;</td></tr>\n"
+      . "</table>\n";
+
+    # Other features that can be done on a host
+
+    if ($::LIVE == 0) {
+        print "<hr><p>"
+          . "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">\n"
+          . "<tr>\n";
+
+        # Timeline of file activity
+        print "<td align=\"center\" width=200>"
+          . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&"
+          . "mod=$::MOD_TL&view=$Timeline::FRAME\">"
+          . "<img border=0 "
+          . "src=\"pict/menu_b_tl.jpg\" "
+          . "width=\"167\" height=20 "
+          . "alt=\"File Activity Timelines\"></a></td>\n";
+
+        # verify the integrity of the images
+        print "<td align=\"center\" width=200>"
+          . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&"
+          . "mod=$::MOD_HASH&view=$Hash::IMG_LIST_FR\">"
+          . "<img border=0 "
+          . "src=\"pict/menu_b_int.jpg\" "
+          . "width=\"167\" height=20 "
+          . "alt=\"Image Integrity\"></a></td>\n"
+          .
+
+          # Hashdatabases
+          "<td align=\"center\" width=200>"
+          . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&"
+          . "mod=$::MOD_HASH&view=$Hash::DB_MANAGER\">"
+          . "<img border=0 "
+          . "src=\"pict/menu_b_hashdb.jpg\" "
+          . "width=\"167\" height=20 "
+          . "alt=\"Hash Databases\"></a></td>\n"
+          . "</tr></table>\n";
+
+        # Notes
+        if ($::USE_NOTES == 1) {
+            print "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">\n"
+              . "<tr>\n"
+              . "<td align=\"center\" width=300>"
+              . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_NORM\">"
+              . "<img border=0 "
+              . "src=\"pict/menu_b_note.jpg\" "
+              . "width=\"167\" height=20 "
+              . "alt=\"View Notes\"></a></td>\n"
+              .
+
+              "<td width=300 align=\"center\">"
+              . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_SEQ\">"
+              . "<img border=0 "
+              . "src=\"pict/menu_b_seq.jpg\" "
+              . "width=\"167\" height=20 "
+              . "alt=\"Event Sequencer\"></a></td>\n"
+              .
+
+              "</tr>\n" . "</table>\n";
+        }
+
+        # If LIVE
+    }
+    else {
+        print "<a href=\"./about\"><br>\n"
+          . "<img src=\"pict/logo.jpg\" border=0 alt=\"Logo\"></a><br>\n";
+
+    }
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Log in the host log that a given image was opened by what user
+# then open the main window
+sub vol_open_log {
+
+    # These will be stopped in the func during  LIVE
+    Print::log_host_info(
+        "Image $Args::args{'vol'} opened by $Args::args{'inv'}");
+    Print::log_host_inv("$Args::args{'vol'}: volume opened");
+
+    $Args::args{'mod'}  = $Args::enc_args{'mod'}  = $::MOD_FRAME;
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Frame::IMG_FRAME;
+    Frame::main();
+}
+
+# Menu to add a new image to the host
+#
+# The list of new images is determined by looking in the images directory
+# and seeing which is not yet configured
+#
+sub img_add {
+    Print::print_html_header(
+        "Add Image To $Args::args{'case'}:$Args::args{'host'}");
+
+    print "<b>Case:</b> $Args::args{'case'}<br>\n"
+      . "<b>Host:</b> $Args::args{'host'}<br>\n";
+
+    print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::IMG_ADD_PREP\">\n"
+      . Args::make_hidden();
+
+    print <<EOF1;
+<center>
+<img src=\"pict/menu_h_inew.jpg\" alt=\"Add Image\">
+<br><br><br>
+
+<table width=\"600\" cellpadding=\"2\" cellspacing=\"0\" background=\"$::YEL_PIX\" border=0>
+<tr>
+  <td colspan=4>&nbsp;</td>
+</tr>
+
+<tr>
+  <td align=left colspan=4>
+    1. <b>Location</b><br>Enter the full path (starting with <tt>/</tt>) to the image file.<br>
+    If the image is split (either raw or EnCase), then enter '*' for the extension.
+  </td>
+</tr>
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>
+    <input type=\"text\" name=\"img_path\" size=36 maxlength=256>
+  </td>
+</tr>
+<tr><td colspan=4>&nbsp;</td><tr>
+<tr>
+  <td align=left colspan=4>2. <b>Type</b><br>Please select if this image file is for a disk or a single partition.</td>
+</tr>
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left>
+    <input type=\"radio\" name=\"imgtype\" value="disk" CHECKED>
+      Disk
+  </td>
+  <td align=left>
+    <input type=\"radio\" name=\"imgtype\" value="volume">
+      Partition 
+  </td>
+  <td align=left>&nbsp;
+  </td>
+</tr>
+
+<tr><td colspan=4>&nbsp;</td><tr>
+<tr>
+  <td align=left colspan=4>3. <b>Import Method</b><br>To analyze the image file, it must be located in the evidence locker. It can be imported from its current location using a symbolic link, by copying it, or by moving it.  Note that if a system failure occurs during the move, then the image could become corrupt.</td>
+</tr>
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left>
+    <input type=\"radio\" name=\"sort\" value=$IMG_ADD_SYM CHECKED>
+      Symlink
+  </td>
+  <td align=left>
+    <input type=\"radio\" name=\"sort\" value=$IMG_ADD_COPY>
+      Copy 
+  </td>
+  <td align=left>
+    <input type=\"radio\" name=\"sort\" value=$IMG_ADD_MOVE>
+	  Move 
+  </td>
+</tr>
+
+
+<tr>
+  <td colspan=4>&nbsp;</td>
+</tr>
+
+</table>
+
+<br>
+<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center colspan=2>
+    <input type=\"image\" src=\"pict/menu_b_next.jpg\" alt=\"Next Step\" width=\"167\" height=20 border=0>
+  </td>
+</tr>
+
+</form>
+
+EOF1
+
+    print "<tr><td colspan=2>&nbsp;</td></tr>\n"
+      . "<td align=center>\n"
+      . "    <form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "    <input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "    <input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_OPEN\">\n"
+      .
+
+      Args::make_hidden()
+      . "    <input type=\"image\" src=\"pict/menu_b_cancel.jpg\" "
+      . "alt=\"Cancel\" width=\"167\" height=20 border=0></form>\n"
+      . "  </td>\n"
+      .
+
+      # HELP
+      "  <td align=center>\n"
+      . "    <a href=\"$::HELP_URL\" target=\"_blank\">\n"
+      . "    <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" "
+      . "width=\"167\" height=20 border=0></a>\n"
+      . "  </td>\n"
+      . "</tr>\n"
+      . "</table>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# List the images from the glob - called from img_add_prep if spl_conf is not set
+sub img_add_split_conf {
+    my $img_path = Args::get_img_path_wild();
+    my $img_type = $Args::args{'imgtype'};
+
+    print "<center><br><br><b>Split Image Confirmation</b><br><br>\n";
+
+    my @spl_img = glob($img_path);
+    if (scalar(@spl_img) == 0) {
+        print "No images were found at this location ($img_path)<br>\n"
+          . "Use the back button and fix the path<br>\n";
+        return;
+    }
+
+    print <<EOF1;
+The following images will be added to the case.<br>
+If this is not the correct order, then you should change the naming convention.<br>
+Press the Next button at the bottom of the page if this is correct.<br><br>
+
+<table width=\"600\" cellpadding=\"2\" cellspacing=\"0\" background=\"$::YEL_PIX\" border=0>
+<tr>
+  <td colspan=2>&nbsp;</td>
+</tr>
+EOF1
+
+    my $a = 0;
+    foreach $i (@spl_img) {
+
+       # We need to do this when we analyze the image, so do it here too to show
+       # what will be analyzed
+        $i = $1 if ($i =~ /^($::REG_IMG_PATH)$/);
+        print
+"<tr><td align=\"center\">$a</td><td align=\"left\"><tt>$i</tt></td></tr>\n";
+        $a++;
+    }
+
+    my $vs = "";
+    $vs = "&vstype=$Args::args{'vstype'}"
+      if (exists $Args::args{'vstype'});
+
+    # Print the Ok Button
+    print "</table><br><br>\n"
+      . "<table width=\"600\" cellpadding=\"2\" cellspacing=\"0\" border=0>"
+      . "<tr><td width=\"300\" align=\"center\"><a href=\"$::PROGNAME?${Args::baseargs_novol}&"
+      . "mod=$::MOD_CASEMAN&view=$Caseman::IMG_ADD_PREP&spl_conf=1&sort=$Args::args{'sort'}&"
+      . "img_path=$img_path&imgtype=$Args::args{'imgtype'}$vs\">"
+      . "<img src=\"pict/menu_b_next.jpg\" alt=\"Next\" "
+      . "width=\"167\" height=20 border=0></a></td>\n"
+      . "<td width=\"300\" align=\"center\"><a href=\"$::PROGNAME?${Args::baseargs_novol}&"
+      . "mod=$::MOD_CASEMAN&view=$Caseman::IMG_ADD\">"
+      . "<img src=\"pict/menu_b_cancel.jpg\" alt=\"cancel\" width=\"167\" height=\"20\" border=\"0\">"
+      . "</a></td></tr></table>\n";
+
+    return 0;
+}
+
+# Run the autodetect stuff and get confirmation from the user
+sub img_add_prep {
+    Args::check_img_path_wild();
+    Args::check_sort();
+    unless ((exists $Args::args{'imgtype'})
+        && ($Args::args{'imgtype'} =~ /^\w+$/))
+    {
+        Print::print_check_err("Invalid image type");
+    }
+
+    Print::print_html_header("Collecting details on new image file");
+
+    my $img_path = Args::get_img_path_wild();
+
+    my $img_type = $Args::args{'imgtype'};
+    my $spl_conf = 0;
+    $spl_conf = 1
+      if ((exists $Args::args{'spl_conf'}) && ($Args::args{'spl_conf'} == 1));
+
+    # If we have a wildcard then it is a split image, so we verify it first and
+    # then make a string of the images so we can test it.
+    if ($img_path =~ /[\*\?]/) {
+        if ($spl_conf == 0) {
+            return img_add_split_conf();
+        }
+        else {
+            $img_tmp = "";
+            foreach my $i (glob($img_path)) {
+                if ($i =~ /^($::REG_IMG_PATH)$/) {
+                    $img_tmp .= "\"$1\" ";
+                }
+            }
+            $img_path = $img_tmp;
+        }
+    }
+    else {
+        unless ((-f $img_path)
+            || (-d $img_path)
+            || (-l $img_path)
+            || (-b $img_path)
+            || (-c $img_path))
+        {
+            Print::print_err("Image file not found ($img_path)");
+        }
+        $img_path = "\"$img_path\"";
+    }
+
+    # Get the image type
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/img_stat' -t $img_path");
+    my $itype = Exec::read_pipe_line(*OUT);
+    if (defined $itype) {
+        chomp $itype;
+        $itype = $1 if ($itype =~ /^(\w+)$/);
+    }
+    else {
+        print
+"The image format type could not be determined for this image file<br>\n";
+        return;
+    }
+    close(OUT);
+
+    # The plan here is to collect the needed info and then we print it
+
+    my $conflict = 0;
+    my $cnt      = 0;
+    $start[0]  = "";
+    $end[0]    = "";
+    $type[0]   = "";
+    $desc[0]   = "";
+    $active[0] = "";
+
+    my $vstype = "";
+
+    my $vstype_flag = "";
+    my $mmls_out    = "";    # Will contain output of mmls (if disk image)
+    if ($img_type eq "disk") {
+        my $out;
+
+        if (   (exists $Args::args{'vstype'})
+            && ($Args::args{'vstype'} =~ /^(\w+)$/))
+        {
+            $vstype      = $Args::args{'vstype'};
+            $vstype_flag = "-t $vstype";
+        }
+
+        # Get the type
+        else {
+
+            Exec::exec_pipe(*OUT, "'$::TSKDIR/mmstat' -i $itype $img_path");
+
+            $vstype = Exec::read_pipe_line(*OUT);
+            close(OUT);
+
+            chomp $vstype if (defined $vstype);
+
+            if (   (!defined $vstype)
+                || ($vstype =~ /^Error determining/)
+                || ($vstype eq "")
+                || (!exists $Vs::type{$vstype})
+                || ($vstype !~ /^\w+$/))
+            {
+                print
+"<table><tr><td colspan=2><font color=\"$::DEL_COLOR[0]\">Warning:</font> Autopsy could not determine the volume system type for the disk image (i.e. the type of partition table).<br>\n"
+                  . "Please select the type from the list below or reclassify the image as a volume image instead of as a disk image.</td></tr>\n"
+                  . "<tr><td colspan=2>&nbsp;</td></tr>\n"
+                  . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+                  . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+                  . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::IMG_ADD_PREP\">\n"
+                  . "<input type=\"hidden\" name=\"spl_conf\" value=\"1\">\n"
+                  . "<input type=\"hidden\" name=\"img_path\" value=\"$Args::args{'img_path'}\">\n"
+                  . "<input type=\"hidden\" name=\"sort\" value=\"$Args::enc_args{'sort'}\">\n"
+                  . Args::make_hidden()
+                  . "<tr><td>Disk Image <input type=\"radio\" name=\"imgtype\" value=\"disk\" CHECKED></td>\n"
+                  . "<td>Volume Image<input type=\"radio\" name=\"imgtype\" value=\"volume\"></td></tr>\n"
+                  . "<tr><td>Volume System Type (disk image only): <select name=\"vstype\">\n";
+
+                foreach my $vs (sort keys %Vs::type) {
+                    print "<option value=\"$vs\"";
+                    print " selected" if ($vs eq 'dos');
+                    print ">${vs}</option>\n";
+                }
+
+                print "</select></td>"
+                  . "<td>&nbsp;</td></tr>"
+                  . "<tr><td colspan=2>&nbsp;</td></tr>"
+                  . "</table><br><br>\n"
+                  . "<input type=\"image\" src=\"pict/menu_b_ok.jpg\" alt=\"Ok\" width=\"176\" height=20 border=0>"
+                  . "</form>\n";
+                return;
+            }
+            $vstype = $1 if ($vstype =~ /^(\w+)$/);
+            $vstype_flag = "-t $vstype";
+        }
+
+        # Run 'mmls' on the image
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/mmls' -a -i $itype -aM $vstype_flag -r $img_path");
+
+        # cycle through results and add each to table with file system type
+        my $part_type = "";
+
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+            $mmls_out .= "$_";    # Save the line
+            last if (/^Error determining partition/);
+
+            if (/^\d+:\s+[\d:]+\s+(\d+)\s+(\d+)\s+\d+\s+(\S.*)$/) {
+                $start[$cnt]  = $1;
+                $end[$cnt]    = $2;
+                $desc[$cnt]   = $3;
+                $active[$cnt] = 1;
+            }
+            elsif ((/^DOS Partition/)
+                || (/^BSD Disk/)
+                || (/^Sun VTOC/)
+                || (/^MAC Partition/)
+                || (/^GUID Partition/))
+            {
+                $part_type = $_;
+
+                #print "<tr><td colspan=7>&nbsp;</td></tr>\n";
+                #print "<tr><td colspan=7>$_</td></tr>\n";
+                next;
+            }
+            elsif (/^Sector:/) {
+
+                #print "<tr><td colspan=7>$_</td></tr>\n";
+                next;
+            }
+            else {
+                next;
+            }
+
+            # Skip the BSD partition for the full disk
+            next
+              if ( ($part_type =~ /^BSD Disk/)
+                && ($start[$cnt] == 0)
+                && ($desc[$cnt] =~ /^Unused/));
+
+            # Skip if this is an extended DOS partition
+            next
+              if ( ($part_type =~ /^DOS Partition/)
+                && ($desc[$cnt] =~ /Extended \(/));
+
+            # Get rid of the leading 0s
+            $start[$cnt] = $1
+              if ($start[$cnt] =~ /^0+([1-9]\d*)$/);
+            $end[$cnt] = $1
+              if ($end[$cnt] =~ /^0+([1-9]\d*)$/);
+
+            # Do we already have this partition?
+            my $i;
+            for ($i = 0; $i < $cnt; $i++) {
+                next if ($active[$i] == 0);
+
+                if ($start[$i] == $start[$cnt]) {
+                    $conflict = 1;
+
+                    if ($end[$i] == $end[$cnt]) {
+                        last;
+                    }
+
+                    #The previous was the BSD partition - skip it */
+                    if (   ($desc[$i] =~ /^FreeBSD \(0xA5\)/)
+                        || ($desc[$i] =~ /^OpenBSD \(0xA6\)/)
+                        || ($desc[$i] =~ /^NetBSD \(0xA9\)/))
+                    {
+                        $active[$i] = 0;
+
+                        # if the current one is the BSD partition for
+                        # the full partition/disk then skip it
+                        if ($desc[$cnt] =~ /^Unused /) {
+                            $active[$cnt] = 0;
+                        }
+                    }
+                }
+
+                # Do we start inside of another?
+                if (($start[$i] > $start[$cnt]) && ($end[$i] < $start[$cnt])) {
+                    $conflict = 1;
+                }
+
+                # Do we end inside of another?
+                elsif (($start[$i] < $end[$cnt]) && ($end[$i] > $end[$cnt])) {
+                    $conflict = 1;
+                }
+            }
+            if (($end[$i] == $end[$cnt]) && ($i != $cnt)) {
+                next;
+            }
+
+            local *OUT2;
+            my $out2;
+
+            # Run 'fstat -t' on the image
+            Exec::exec_pipe(*OUT2,
+                "'$::TSKDIR/fsstat' -o $start[$cnt] -i $itype -t $img_path");
+
+            $type[$cnt] = Exec::read_pipe_line(*OUT2);
+            close(OUT2);
+
+            if (   (!exists $type[$cnt])
+                || (!defined $type[$cnt])
+                || ($type[$cnt] =~ /^Cannot determine/)
+                || ($type[$cnt] eq ""))
+            {
+                $type[$cnt] = "Unknown";
+            }
+            chomp $type[$cnt];
+
+            $cnt++;
+        }
+        close(OUT);
+
+        if ($conflict == 1) {
+            print
+"<tr><td colspan=2><font color=\"$::DEL_COLOR[0]\">Warning:</font> Conflicts in the partitions were detected.<br>The full <tt>mmls</tt> output is given at the bottom of the page</td></tr>\n"
+              . "<tr><td colspan=2>&nbsp;</td></tr>\n";
+        }
+    }
+
+    # If a volume, then run fsstat on it
+    elsif ($img_type eq "volume") {
+
+        # Run 'fstat -t' on the image
+        Exec::exec_pipe(*OUT, "'$::TSKDIR/fsstat' -t -i $itype $img_path");
+
+        $type[0] = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        if (   (!defined $type[0])
+            || ($type[0] =~ /^Cannot determine/)
+            || ($type[0] eq ""))
+        {
+            $type[0] = "Unknown";
+            print
+"<font color=\"$::DEL_COLOR[0]\">Warning:</font> The file system type of the volume image file could not be determined.<br>\n"
+              . "If this is a disk image file, return to the previous page and change the type.<br><br>\n";
+        }
+        chomp $type[0];
+        $start[0]  = 0;
+        $end[0]    = 0;
+        $active[0] = 1;
+        $desc[0]   = $type[0];
+        $cnt++;
+        close(OUT);
+    }
+    else {
+        Print::print_err("Unknown image type: $img_type");
+    }
+
+    my $sname = $img_path;
+    $sname = "$::IMGDIR/" . "$1" if ($sname =~ /\/($::REG_FILE)\"$/);
+
+# Now that we have the information about the partitions and disks, print the fields
+    print <<EOF1;
+		
+<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">
+<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">
+<input type=\"hidden\" name=\"view\" value=\"$Caseman::IMG_ADD_DOIT\">
+<input type=\"hidden\" name=\"img_path\" value=\"$Args::args{'img_path'}\">
+<input type=\"hidden\" name=\"num_img\" value=\"$cnt\">
+<input type=\"hidden\" name=\"sort\" value=\"$Args::enc_args{'sort'}\">
+
+
+<center>
+<h3>Image File Details</h3>
+<table width=\"600\" cellpadding=\"2\" cellspacing=\"0\" background=\"$::YEL_PIX\" border=0>
+<tr>
+  <td align=left colspan=4>
+	<b>Local Name: </b> $sname
+  </td>
+</tr>
+
+EOF1
+
+    # We do not currently offer integrity options for non-raw files
+    if (($itype eq "raw") || ($itype eq "split")) {
+
+        print <<EOF1b;
+<tr>
+  <td align=left colspan=4>
+	<b>Data Integrity: </b> An MD5 hash can be used to verify the 
+	integrity of the image.  (With split images, this hash is for the full image file)
+  </td>
+</tr>
+
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>
+    <input type=\"radio\" name=\"do_md5\" value=\"$MD5_NOTHING\" CHECKED>
+	<u>Ignore</u> the hash value for this image.
+  </td>
+</tr>
+
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>
+    <input type=\"radio\" name=\"do_md5\" value=\"$MD5_CALC\">
+	<u>Calculate</u> the hash value for this image.
+  </td>
+</tr>
+
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>
+    <input type=\"radio\" name=\"do_md5\" value=\"$MD5_ADD\">
+	<u>Add</u> the following MD5 hash value for this image:
+  </td>
+</tr>
+
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>&nbsp;&nbsp;&nbsp;&nbsp;
+	<input type=\"text\" name=\"md5\" size=36 maxlength=32>
+  </td>
+</tr>
+
+<tr>
+  <td>&nbsp;&nbsp;</td>
+  <td align=left colspan=3>&nbsp;&nbsp;&nbsp;&nbsp;
+	<input type=\"checkbox\" name=\"ver_md5\" value=\"1\">
+	&nbsp;Verify hash after importing?
+  </td>
+</tr>
+EOF1b
+    }
+    else {
+        print
+          "<input type=\"hidden\" name=\"do_md5\" value=\"$MD5_NOTHING\">\n";
+    }
+
+    print <<EOF1c;
+</table>
+
+<h3>File System Details</h3>
+<table width=\"600\" cellpadding=\"2\" cellspacing=\"0\" background=\"$::YEL_PIX\" border=0>
+
+<tr>
+  <td colspan=2 align=left>Analysis of the image file shows the following partitions:</td>
+</tr>
+<tr>
+  <td colspan=2>&nbsp;</td>
+</tr>
+
+EOF1c
+
+    print Args::make_hidden();
+
+    print "<input type=\"hidden\" name=\"vstype\" value=\"$vstype\">\n"
+      if ($vstype ne "");
+
+    my $idx     = 1;
+    my $ms_cnt  = 0;
+    my @ms_name = ("C:", "D:", "E:", "F:", "G:", "H:", "I:", "J:");
+    for (my $i = 0; $i < $cnt; $i++) {
+        next if ($active[$i] == 0);
+        print
+"<tr><td colspan=2><u>Partition $idx</u> (Type: $desc[$i])</td><tr>\n";
+
+        if ($cnt > 1) {
+            print "<tr><td colspan=2>&nbsp;&nbsp;Add to case? "
+              . "<input type=\"checkbox\" name=\"yes-${idx}\" value=1 CHECKED></td></tr>\n";
+        }
+        else {
+            print "<input type=\"hidden\" name=\"yes-${idx}\" value=1>\n";
+        }
+
+        unless (($start[$i] == 0) && ($end[$i] == 0)) {
+            print "<tr><td colspan=2>&nbsp;&nbsp;Sector Range: "
+              . "$start[$i] to $end[$i]"
+              . "</td></tr>\n";
+        }
+
+        print
+          "<input type=\"hidden\" name=\"start-${idx}\" value=\"$start[$i]\">"
+          . "<input type=\"hidden\" name=\"end-${idx}\" value=\"$end[$i]\">\n"
+          . "<tr><td>&nbsp;&nbsp;Mount Point: <input type=\"text\" name=\"mnt-${idx}\" size=\"6\"";
+        if (($type[$i] =~ /^ntfs/) || ($type[$i] =~ /^fat/)) {
+            print " value=\"$ms_name[$ms_cnt]\""
+              if ($ms_cnt < 8);
+            $ms_cnt++;
+        }
+        elsif (($type[$i] =~ /^raw/)
+            || ($type[$i] =~ /^swap/))
+        {
+            print " value=\"N/A\"";
+        }
+        else {
+            print " value=\"/$idx/\"";
+        }
+        print "></td>\n"
+          . "<td>File System Type: <select name=\"ftype-${idx}\">\n";
+
+        foreach my $fs (@Fs::types) {
+            print "<option value=\"$fs\"";
+            print " selected" if ($fs eq $type[$i]);
+            print ">${fs}</option>\n";
+        }
+
+        # The following do not have 'metas' but should be in the list
+        print "<option value=\"\">======</option>\n";
+        if ($type[$i] eq "Unknown") {
+            print "<option value=\"raw\" selected>raw</option>\n";
+        }
+        else {
+            print "<option value=\"raw\">raw</option>\n";
+        }
+
+        print "<option value=\"swap\">swap</option>\n"
+          . "</select></td></tr>\n"
+          . "<tr><td colspan=2>&nbsp;</td></tr>\n";
+
+        $idx++;
+    }
+
+    print "</table>\n";
+
+    print <<EOF2;
+<br><br>
+<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center>
+    <input type=\"image\" src=\"pict/menu_b_add.jpg\" 
+      alt=\"Add\" width=\"176\" height=20 border=0>
+  </td>
+</form>
+  <td align=center>
+    <form action=\"$::PROGNAME\" method=\"get\">
+EOF2
+    print Args::make_hidden();
+    print <<EOF3;
+    <input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">
+    <input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_OPEN\">
+    <input type=\"image\" src=\"pict/menu_b_cancel.jpg\" 
+    alt=\"Cancel\" width=\"167\" height=20 border=0>
+    </form>
+  </td>
+  <td align=center><a href=\"$::HELP_URL\" 
+    target=\"_blank\">
+    <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" 
+    width=\"167\" height=20 border=0></a>
+  </td>
+</tr>
+</table>
+EOF3
+
+    if ($img_type eq "disk") {
+        print
+"</center><p>For your reference, the <tt>mmls</tt> output was the following:<br><pre>$mmls_out</pre>\n";
+    }
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Add the image to the configuration by adding it to the host config file
+# and the md5.txt file if that data was provided
+sub img_add_doit {
+
+    Args::check_num_img();
+    Args::check_img_path_wild();
+    Args::check_sort();
+    Args::check_do_md5();
+
+    my $num_img     = Args::get_num_img();
+    my $img_path    = Args::get_img_path_wild();
+    my $import_type = Args::get_sort();
+
+    Print::print_html_header("Add a new image to an Autopsy Case");
+
+    my $err     = 0;
+    my $add_num = 0;
+    $start[0] = 0;
+    $end[0]   = 0;
+    $ftype[0] = "";
+    $mnt[0]   = "";
+
+ # We need a string with all images in it for the hashes and file system testing
+    my $img_path_full;
+    if ($img_path =~ /[\*\?]/) {
+        $img_path_full = "";
+        foreach my $i (glob($img_path)) {
+            if ($i =~ /^($::REG_IMG_PATH)$/) {
+                $img_path_full .= "\"$1\" ";
+            }
+        }
+    }
+    else {
+        $img_path_full = "\"$img_path\"";
+    }
+
+    # Get the image type
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/img_stat' -t $img_path_full");
+    my $itype = Exec::read_pipe_line(*OUT);
+    if (defined $itype) {
+        chomp $itype;
+        $itype = $1 if ($itype =~ /^(\w+)$/);
+    }
+    else {
+        print
+"The image format type could not be determined for this image file<br>\n";
+        return;
+    }
+    close(OUT);
+
+    # Check the hash of the image if that is the plan
+    my $do_md5  = Args::get_do_md5();
+    my $act_md5 = "";
+    unless ($do_md5 == $MD5_NOTHING) {
+
+        # Do we need to calculate an MD5?
+        if (
+            ($do_md5 == $MD5_CALC)
+            || (   ($do_md5 == $MD5_ADD)
+                && (exists $Args::args{'ver_md5'})
+                && ($Args::args{'ver_md5'} == 1))
+          )
+        {
+
+            print "<p>Calculating MD5 (this could take a while)<br>\n";
+            $act_md5 = Hash::calc_md5_split($img_path_full);
+            unless ($act_md5 =~ /^$::REG_MD5$/o) {
+                print "Error calculating MD5: $act_md5<br>\n";
+                return 1;
+            }
+            print "Current MD5: <tt>$act_md5</tt><br>\n";
+        }
+
+        # And md5 value was given so we can add it to the md5.txt file
+        if (($do_md5 == $MD5_ADD) && (exists $Args::args{'md5'})) {
+
+            my $md5 = $Args::args{'md5'};
+            unless ($md5 =~ /^$::REG_MD5$/o) {
+                if ($md5 eq "") {
+                    print "MD5 value missing<br>\n";
+                }
+                else {
+                    print "Invalid MD5 value (32 numbers or letters a-f)<br>\n";
+                }
+                print "<p><a href=\"$::PROGNAME?"
+                  . "mod=$::MOD_CASEMAN&view=$Caseman::IMG_ADD&"
+                  . "$Args::baseargs\">"
+                  . "<img src=\"pict/menu_b_back.jpg\" border=\"0\" "
+                  . "width=\"167\" height=20 alt=\"Back\"></a>\n";
+                return 1;
+            }
+            $md5 =~ tr/[a-f]/[A-F]/;
+
+            # They also want us to validate the MD5
+            if (   (exists $Args::args{'ver_md5'})
+                && ($Args::args{'ver_md5'} == 1))
+            {
+
+                if ($act_md5 eq $md5) {
+                    print "Integrity Check Passed<br>\n";
+                    Print::log_host_info("Integrity check passed on new image");
+                }
+                else {
+                    print "<font color=\"$::DEL_COLOR[0]\">"
+                      . "Integrity Check Failed<br></font><br>\n"
+                      . "Provided: <tt>$md5</tt><br>\n"
+                      . "Image not added to case<br>\n";
+
+                    Print::log_host_info("Integrity check failed on new image");
+                    return 1;
+                }
+            }
+
+            # set the act_md5 value to what was given and verified
+            $act_md5 = $md5;
+        }
+
+        # We will add the MD5 to the config file after we get its ID
+    }
+
+    # Proces the image arguments to make sure they are all there and test the
+    # file system type
+    print "Testing partitions<br>\n";
+    for (my $i = 0; $i <= $num_img; $i++) {
+
+        next
+          unless ((exists $Args::args{"yes-" . $i})
+            && ($Args::args{"yes-" . $i} == 1));
+
+        if (   (exists $Args::args{"start-" . $i})
+            && ($Args::args{"start-" . $i} =~ /^(\d+)$/))
+        {
+            $start[$add_num] = $1;
+        }
+        else {
+            print "Missing starting address for partition $i<br>\n";
+            $err = 1;
+            last;
+        }
+
+        if (   (exists $Args::args{"end-" . $i})
+            && ($Args::args{"end-" . $i} =~ /^(\d+)$/))
+        {
+            $end[$add_num] = $1;
+        }
+        else {
+            print "Missing ending address for partition $i<br>\n";
+            $err = 1;
+            last;
+        }
+
+        if (   (exists $Args::args{"mnt-" . $i})
+            && ($Args::args{"mnt-" . $i} =~ /^($::REG_MNT)$/))
+        {
+            $mnt[$add_num] = $1;
+        }
+        else {
+            print "Missing mount point for partition $i<br>\n";
+            $err = 1;
+            last;
+        }
+
+        if (   (exists $Args::args{"ftype-" . $i})
+            && ($Args::args{"ftype-" . $i} =~ /^($::REG_FTYPE)$/))
+        {
+            $ftype[$add_num] = $1;
+        }
+        else {
+            print "Missing file system type for partition $i<br>\n";
+            $err = 1;
+            last;
+        }
+
+        # Test the File System
+        if (($ftype[$add_num] ne 'swap') && ($ftype[$add_num] ne 'raw')) {
+
+            local *OUT;
+            my $out;
+
+            # Run 'fsstat' and see if there is any output - else there was
+            # an error and the data went to STDERR
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fsstat' -o $start[$add_num] -i $itype -f $ftype[$add_num] $img_path_full"
+            );
+            unless (read(OUT, $out, 1)) {
+                print
+"<p>Partition $i is not a <tt>$ftype[$add_num]</tt> file system<br>\n";
+                $err = 1;
+                last;
+            }
+            close(OUT);
+        }
+        $add_num++;
+    }
+
+    # Go back if we got an error
+    if ($err == 1) {
+        print "Use the browser's back button to fix the data<br>\n";
+        return 1;
+    }
+
+    ##################################################
+    # Copy the images and add them to the config file
+
+    if ($import_type == $IMG_ADD_SYM) {
+        Print::print_err("ERROR: /bin/ln missing")
+          unless (-x '/bin/ln');
+
+        print "Linking image(s) into evidence locker<br>\n";
+    }
+    elsif ($import_type == $IMG_ADD_COPY) {
+        Print::print_err("ERROR: /bin/cp missing")
+          unless (-x '/bin/cp');
+
+        print
+"Copying image(s) into evidence locker (this could take a little while)<br>\n";
+    }
+    elsif ($import_type == $IMG_ADD_MOVE) {
+        Print::print_err("ERROR: /bin/mv missing")
+          unless (-x '/bin/mv');
+
+        print "Moving image(s) into evidence locker<br>\n";
+    }
+    else {
+        Print::print_err("Invalid Import Type: $import_type\n");
+    }
+
+    my $imgid = "";
+    foreach my $i (glob($img_path)) {
+
+        # remove the tainting
+        $i = $1 if ($i =~ /^($::REG_IMG_PATH)$/);
+
+        # Deterine the local (target) name
+        my $img = "";
+        if ($i =~ /\/($::REG_FILE)$/) {
+            $img = "$::IMGDIR/$1";
+        }
+        else {
+            Print::print_err("Error Parsing Image Path ($i)\n");
+        }
+
+        # Get the full path of the destination
+        my $img_dst = "$::host_dir" . "$img";
+        if ((-e "$img_dst") || (-l "$img_dst")) {
+            Print::print_err(
+"An image by the same name already exists in the Host directory ($img)\n"
+                  . "Use the browser's back button to fix the name or delete the existing file."
+            );
+        }
+
+        my $orig_size = (stat("$i"))[7];
+
+        # Copy, Move, or link it
+        if ($import_type == $IMG_ADD_SYM) {
+
+            Print::log_host_info(
+"Sym Linking image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+            );
+
+            Exec::exec_sys("/bin/ln -s '$i' '$img_dst'");
+        }
+        elsif ($import_type == $IMG_ADD_COPY) {
+            Print::log_host_info(
+"Copying image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+            );
+
+            Exec::exec_sys("/bin/cp '$i' '$img_dst'");
+        }
+        elsif ($import_type == $IMG_ADD_MOVE) {
+            Print::log_host_info(
+"Moving image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+            );
+
+            Exec::exec_sys("/bin/mv '$i' '$img_dst'");
+        }
+
+        my $new_size = (stat("$img_dst"))[7];
+
+        if ($new_size != $orig_size) {
+            Print::print_err(
+"Original image size ($orig_size) is not the same as the destination size ($new_size)"
+            );
+        }
+
+        # Add the disk and partition images to the config file
+        $imgid = Caseman::add_img_host_config("image", "$itype  $img", $imgid);
+    }
+    print "Image file added with ID <tt>$imgid</tt><br>\n";
+
+    # AFM files have raw files that we also need to copy
+    # This approach is not the best, since it may copy more than
+    # is needed
+    if ($itype eq "afm") {
+        my $afm_base_path = "";
+
+        if ($img_path =~ /^(.*?)\.afm/i) {
+            $afm_base_path = $1;
+            $afm_base_path .= ".[0-9][0-9][0-9]";
+        }
+        else {
+            Print::print_err(
+                "Error parsing out base name of AFM file $img_path");
+        }
+
+        print "BASE: $afm_base_path<br>\n";
+
+        my $copied = 0;
+
+        foreach my $i (glob($afm_base_path)) {
+            $copied++;
+
+            # remove the tainting
+            $i = $1 if ($i =~ /^($::REG_IMG_PATH)$/);
+
+            # Deterine the local (target) name
+            my $img = "";
+            if ($i =~ /\/($::REG_FILE)$/) {
+                $img = "$::IMGDIR/$1";
+            }
+            else {
+                Print::print_err("Error Parsing Image Path ($i)\n");
+            }
+
+            # Get the full path of the destination
+            my $img_dst = "$::host_dir" . "$img";
+            if ((-e "$img_dst") || (-l "$img_dst")) {
+                Print::print_err(
+"An image by the same name already exists in the Host directory ($img) (AFM import)\n"
+                      . "Use the browser's back button to fix the name or delete the existing file."
+                );
+            }
+
+            my $orig_size = (stat("$i"))[7];
+
+            # Copy, Move, or link it
+            if ($import_type == $IMG_ADD_SYM) {
+
+                Print::log_host_info(
+"Sym Linking image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+                );
+
+                Exec::exec_sys("/bin/ln -s '$i' '$img_dst'");
+            }
+            elsif ($import_type == $IMG_ADD_COPY) {
+                Print::log_host_info(
+"Copying image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+                );
+
+                Exec::exec_sys("/bin/cp '$i' '$img_dst'");
+            }
+            elsif ($import_type == $IMG_ADD_MOVE) {
+                Print::log_host_info(
+"Moving image $img_path into $Args::args{'case'}:$Args::args{'host'}"
+                );
+
+                Exec::exec_sys("/bin/mv '$i' '$img_dst'");
+            }
+
+            my $new_size = (stat("$img_dst"))[7];
+
+            if ($new_size != $orig_size) {
+                Print::print_err(
+"Original image size ($orig_size) is not the same as the destination size ($new_size) after AFM import"
+                );
+            }
+        }
+        if ($copied == 0) {
+            Print::print_err(
+"No AFM raw files were found with the same base name and a numeric extension"
+            );
+        }
+        else {
+            print "$copied AFM raw files imported<br>\n";
+        }
+    }
+
+    Caseman::update_md5("$imgid", "$act_md5")
+      unless (($do_md5 == $MD5_NOTHING) || ($imgid eq ""));
+
+    # Add a disk entry if the image is of a disk
+    unless (($add_num == 1) && ($end[0] == 0) && ($start[0] == 0)) {
+        unless ((exists $Args::args{'vstype'})
+            && ($Args::args{'vstype'} =~ /^(\w+)$/))
+        {
+            Print::print_err("Missing Volume System Type");
+        }
+        my $vstype = $Args::args{'vstype'};
+
+        my $diskid = Caseman::add_vol_host_config("disk", "$imgid    $vstype");
+        print "<p>Disk image (type $vstype) added with ID <tt>$diskid</tt>\n";
+    }
+
+    # Add the file system / partition entries
+    for (my $i = 0; $i < $add_num; $i++) {
+        my $volid =
+          Caseman::add_vol_host_config("part",
+            "$imgid	$start[$i]  $end[$i]    $ftype[$i]  $mnt[$i]");
+        print
+"<p>Volume image ($start[$i] to $end[$i] - $ftype[$i] - $mnt[$i]) added with ID <tt>$volid</tt>\n";
+    }
+
+    print <<EOF;
+<p>
+<center>
+<table width=600>
+<tr>
+  <td width=300 align=center>
+    <a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::VOL_OPEN&${Args::baseargs_novol}\">
+    <img src=\"pict/menu_b_ok.jpg\" alt=\"Ok\" width=\"167\" height=20 border=\"0\">
+    </a>
+  </td>
+  <td width=300 align=center>
+    <a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::IMG_ADD&${Args::baseargs_novol}\">
+    <img src=\"pict/menu_b_inew.jpg\" alt=\"Ok\" width=\"167\" height=20 border=\"0\">
+    </a>
+  </td>
+</tr>
+</table>
+</center>
+
+EOF
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Display details of image based on config values
+# provides links to remove the config of the image and to get the file
+# system details
+
+sub vol_details {
+    Print::print_html_header("Details of $Args::args{'vol'}");
+
+    Args::get_unitsize();
+
+    my $vol = Args::get_vol('vol');
+
+    my $mnt   = $Caseman::vol2mnt{$vol};
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    print "<center>"
+      . "<img src=\"pict/menu_h_idet.jpg\" alt=\"Image Details\">"
+      . "<br><br><br>\n"
+      . "<table width=\"600\" cellspacing=\"0\" cellpadding=\"2\" "
+      . "background=\"$::YEL_PIX\" border=0>\n"
+      . "  <tr><td colspan=\"2\">&nbsp;</td></tr>\n"
+      .
+
+      # Name
+      "  <tr><td align=\"right\" width=\"300\"><b>Name:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::vol2sname{$vol}</tt></td></tr>\n"
+      . "<tr><td align=\"right\" width=\"300\"><b>Volume Id:</b></td>"
+      . "<td align=\"left\"><tt>$vol</tt></td></tr>\n"
+      . "<tr><td align=\"right\" width=\"300\"><b>Parent Volume Id:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::vol2par{$vol}</tt></td></tr>\n"
+      . "<tr><td align=\"right\" width=\"300\"><b>Image File Format:</b></td>"
+      . "<td align=\"left\"><tt>$Caseman::vol2itype{$vol}</tt></td></tr>\n"
+
+      # Mount
+      . "  <tr><td align=\"right\"><b>Mounting Point:</b></td>"
+      . "<td align=\"left\"><tt>$mnt</tt></td></tr>\n"
+      .
+
+      # Type
+      "  <tr><td align=\"right\"><b>File System Type:</b></td>"
+      . "<td align=\"left\"><tt>$ftype</tt></td></tr>\n";
+
+    # Host Directory
+    print "  <tr><td colspan=\"2\">&nbsp;</td></tr>\n"
+
+      # Strings File
+      . "  <tr><td colspan=2 align=\"center\"><b>External Files</b></td></tr>\n"
+      . "  <tr><td align=\"right\"><b>ASCII Strings:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . (
+        (exists $Caseman::vol2str{$vol})
+        ? $Caseman::vol2sname{$Caseman::vol2str{$vol}}
+        : "&nbsp;"
+      )
+      . "</tt></td></tr>\n"
+      .
+
+      # Unicode Strings File
+      "  <tr><td align=\"right\"><b>Unicode Strings:</b></td>"
+      . "<td align=\"left\"><tt>"
+      . (
+        (exists $Caseman::vol2uni{$vol})
+        ? $Caseman::vol2sname{$Caseman::vol2uni{$vol}}
+        : "&nbsp;"
+      )
+      . "</tt></td></tr>\n";
+
+    if (($ftype ne "raw") && ($ftype ne "swap")) {
+
+        # blkls file
+        print
+"  <tr><td align=\"right\"><b>Unallocated $Fs::addr_unit{$ftype}s:</b></td>"
+          . "<td align=\"left\"><tt>"
+          . (
+            (exists $Caseman::vol2blkls{$vol})
+            ? $Caseman::vol2sname{$Caseman::vol2blkls{$vol}}
+            : "&nbsp;"
+          )
+          . "</tt></td></tr>\n";
+
+        # Strings of blkls
+        print
+          "  <tr><td align=\"right\"><b>ASCII Strings of Unallocated:</b></td>"
+          . "<td align=\"left\"><tt>"
+          . (
+            (
+                     (exists $Caseman::vol2blkls{$vol})
+                  && (exists $Caseman::vol2str{$Caseman::vol2blkls{$vol}})
+            )
+            ? $Caseman::vol2sname{$Caseman::vol2str{$Caseman::vol2blkls{$vol}}}
+            : "&nbsp;"
+          )
+          . "</tt></td></tr>\n";
+
+        # Unicodde Strings of blkls
+        print
+"  <tr><td align=\"right\"><b>Unicode Strings of Unallocated:</b></td>"
+          . "<td align=\"left\"><tt>"
+          . (
+            (
+                     (exists $Caseman::vol2blkls{$vol})
+                  && (exists $Caseman::vol2uni{$Caseman::vol2blkls{$vol}})
+            )
+            ? $Caseman::vol2sname{$Caseman::vol2uni{$Caseman::vol2blkls{$vol}}}
+            : "&nbsp;"
+          )
+          . "</tt></td></tr>\n";
+    }
+
+    print "  <tr><td colspan=\"2\">&nbsp;</td></tr>\n"
+      . "</table>\n<a name=\"extract\"\n";
+
+    # Section for Strings file and 'blkls' file
+
+    if (
+           (!(exists $Caseman::vol2str{$vol}))
+        || (!(exists $Caseman::vol2uni{$vol}))
+        || (!(exists $Caseman::vol2blkls{$vol}))
+        || (
+            (exists $Caseman::vol2blkls{$vol})
+            && (   (!(exists $Caseman::vol2str{$Caseman::vol2blkls{$vol}}))
+                || (!(exists $Caseman::vol2uni{$Caseman::vol2blkls{$vol}})))
+        )
+      )
+    {
+        print "<hr><table width=600>\n<tr>";
+    }
+
+    # Strings File
+    if (   (!(exists $Caseman::vol2str{$vol}))
+        || (!(exists $Caseman::vol2uni{$vol})))
+    {
+
+        print
+"<td align=\"center\" width=280><h3>Extract Strings of<br>Entire Volume</h3>"
+          . "Extracting the ASCII and Unicode strings from a file system will "
+          . "make keyword searching faster.<br><br>\n"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "Generate MD5? "
+          . "<input type=\"checkbox\" name=\"md5\" value=\"1\" CHECKED><br><br>"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_MAKESTR\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$Args::args{'vol'}\">\n"
+          . Args::make_hidden();
+
+        if (!(exists $Caseman::vol2str{$vol})) {
+            print
+"ASCII: <input type=\"checkbox\" name=\"str\" value=\"1\" CHECKED>  \n";
+        }
+        if (!(exists $Caseman::vol2uni{$vol})) {
+            print
+"  Unicode: <input type=\"checkbox\" name=\"uni\" value=\"1\" CHECKED>\n";
+        }
+
+        print "<br><br><input type=\"image\" src=\"pict/srch_b_str.jpg\" "
+          . "alt=\"Extract Strings\" border=\"0\">\n</form></td>\n"
+          . "<td width=40>&nbsp;</td>\n";
+    }
+
+    if (($ftype eq 'blkls') || ($ftype eq 'swap') || ($ftype eq 'raw')) {
+
+        # Place holder for types that have no notion of unallocated
+    }
+
+    # Unallocated Space File
+    elsif (!(exists $Caseman::vol2blkls{$vol})) {
+
+        print
+"<td align=\"center\" width=280><h3>Extract Unallocated $Fs::addr_unit{$ftype}s</h3>"
+          . "Extracting the unallocated data in a file system allows "
+          . "more focused keyword searches and data recovery.<br><br>\n"
+          . "(Note: This Does Not Include Slack Space)<br>\n"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n";
+
+        print "Generate MD5? "
+          . "<input type=\"checkbox\" name=\"md5\" value=\"1\" CHECKED><br><br>"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_MAKEBLKLS\">\n"
+          .
+
+          "<input type=\"hidden\" name=\"vol\" value=\"$Args::args{'vol'}\">\n"
+          . Args::make_hidden()
+          . "<input type=\"image\" src=\"pict/srch_b_un.jpg\" "
+          . "alt=\"Extract Unallocated Data\" border=\"0\">\n<br></form>\n";
+    }
+
+    # strings of 'blkls'
+    elsif ((!(exists $Caseman::vol2str{$Caseman::vol2blkls{$vol}}))
+        || (!(exists $Caseman::vol2uni{$Caseman::vol2blkls{$vol}})))
+    {
+
+        print
+"<td align=\"center\" width=280><h3>Extract Strings of<br>Unallocated $Fs::addr_unit{$ftype}s</h3>"
+          . "Extracting the ASCII strings from the unallocated data will make "
+          . "keyword searching faster.<br><br>\n"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "Generate MD5? "
+          . "<input type=\"checkbox\" name=\"md5\" value=\"1\" CHECKED><br><br>"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_MAKESTR\">\n"
+          .
+
+"<input type=\"hidden\" name=\"vol\" value=\"$Caseman::vol2blkls{$vol}\">\n"
+          . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_INIT\">\n"
+          . Args::make_hidden();
+
+        if (!(exists $Caseman::vol2str{$Caseman::vol2blkls{$vol}})) {
+            print
+"ASCII: <input type=\"checkbox\" name=\"str\" value=\"1\" CHECKED>  \n";
+        }
+        if (!(exists $Caseman::vol2uni{$Caseman::vol2blkls{$vol}})) {
+            print
+"  Unicode: <input type=\"checkbox\" name=\"uni\" value=\"1\" CHECKED>\n";
+        }
+        print "<br><br><input type=\"image\" src=\"pict/srch_b_str.jpg\" "
+          . "alt=\"Extract Strings\" border=\"0\">\n</form></td>\n";
+    }
+    if (
+           (!(exists $Caseman::vol2str{$vol}))
+        || (!(exists $Caseman::vol2uni{$vol}))
+        || (!(exists $Caseman::vol2blkls{$vol}))
+        || (
+            (exists $Caseman::vol2blkls{$vol})
+            && (   (!(exists $Caseman::vol2str{$Caseman::vol2blkls{$vol}}))
+                || (!(exists $Caseman::vol2uni{$Caseman::vol2blkls{$vol}})))
+        )
+      )
+    {
+        print "</tr></table><hr>\n";
+    }
+
+    print "<p>"
+      . "<table width=\"400\" cellspacing=\"0\" cellpadding=\"2\">\n"
+      .
+
+      # Ok
+      "<tr><td align=center width=200>"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_OPEN\">\n"
+      . Args::make_hidden()
+      . "<input type=\"image\" src=\"pict/menu_b_close.jpg\" "
+      . "alt=\"Close\" width=\"167\" height=20 border=0></form></td>\n";
+
+    print "<td align=center width=200>";
+    if (($ftype ne "raw") && ($ftype ne "swap")) {
+
+        # File System Details
+        print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_blank\">\n"
+          . Args::make_hidden()
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FRAME\">\n"
+          . "<input type=\"hidden\" name=\"submod\" value=\"$::MOD_FS\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+          . "<input type=\"image\" src=\"pict/menu_b_fs.jpg\" "
+          . "width=167 height=20 "
+          . "alt=\"File System\" border=0></form></td>\n";
+    }
+    else {
+        print "&nbsp;</td>\n";
+    }
+
+# Remove Image
+# THis was removed 12/03 because it causes problems because the image still
+# exists and config entries and ... it becomes a mess
+#	print
+#	  "<td align=center width=200>".
+#	  "<form action=\"$::PROGNAME\" method=\"get\">\n".
+#          "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n".
+#          "<input type=\"hidden\" name=\"view\" value=\"$Caseman::IMG_DEL\">\n".
+#	  Args::make_hidden().
+#          "<input type=\"hidden\" name=\"vol\" value=\"$Args::args{'vol'}\">\n".
+#          "<input type=\"hidden\" name=\"mnt\" value=\"$Args::args{'mnt'}\">\n".
+#	  "<input type=\"image\" src=\"pict/menu_b_rem.jpg\" ".
+#	  "width=167 height=20 alt=\"Remove\" border=0></form>".
+#          "</td>\n".
+#	  "</tr></table>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# remove the config files
+sub img_del {
+    Args::check_vol('vol');
+
+    # Args::check_ftype();
+    Print::print_html_header(
+        "Removing Configuration Settings for $Args::args{'vol'}");
+
+    Caseman::del_host_config("", $Args::args{'vol'}, "");
+    Caseman::update_md5($Args::args{'vol'}, "");
+
+    print "Settings for <tt>$Args::args{'vol'}</tt> removed from "
+      . "<tt>$Args::args{'case'}:$Args::args{'host'}</tt>.\n"
+      . "<p>NOTE: The actual file still exists in the host directory.\n";
+
+    print "<p><a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_OPEN&${Args::baseargs_novol}\">"
+      . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+      . "width=\"43\" height=20 border=\"0\"></a>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Make a strings -t d file for the image to decrease the search time
+# Can make both ASCII and Unicode strings files
+sub vol_makestr {
+    Print::print_html_header("Extracting Strings");
+
+    my $ascii = 0;
+    my $uni   = 0;
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    if ((exists $Args::args{'str'}) && ($Args::args{'str'} == 1)) {
+        if (exists $Caseman::vol2str{$vol}) {
+            Print::print_err(
+"Image already has an ASCII strings file: $Caseman::vol2sname{$vol}"
+            );
+        }
+        $ascii = 1;
+    }
+
+    if ((exists $Args::args{'uni'}) && ($Args::args{'uni'} == 1)) {
+        if (exists $Caseman::vol2uni{$vol}) {
+            Print::print_err(
+"Image already has a Unicode strings file: $Caseman::vol2sname{$vol}"
+            );
+        }
+
+        $uni = 1;
+    }
+    if (($uni == 0) && ($ascii == 0)) {
+        goto str_egress;
+    }
+
+    my $base_name = $Caseman::vol2sname{$vol};
+
+    if ($ascii == 1) {
+        my $fname_rel = "$::DATADIR/${base_name}-$ftype.asc";
+        my $fname     = "$::host_dir" . "$fname_rel";
+
+        if (-e "$fname") {
+            my $i = 1;
+            $i++ while (-e "$::host_dir"
+                . "$::DATADIR/"
+                . "${base_name}-$ftype-$i.asc");
+
+            $fname_rel = "$::DATADIR/${base_name}-$ftype-$i.asc";
+            $fname     = "$::host_dir" . "$fname_rel";
+        }
+
+        print
+"Extracting ASCII strings from <tt>$Caseman::vol2sname{$vol}</tt><br>\n";
+
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Saving ASCII strings to $fname_rel");
+
+        local *OUT;
+
+        my $hit_cnt = 0;
+        $SIG{ALRM} = sub {
+            if (($hit_cnt++ % 5) == 0) {
+                print "+";
+            }
+            else {
+                print "-";
+            }
+            alarm(5);
+        };
+
+        alarm(5);
+
+        if ($ftype eq "blkls") {
+            Exec::exec_pipe(*OUT,
+                "'$::TSKDIR/srch_strings' -a -t d $img > '$fname'");
+        }
+        elsif ((($ftype eq "raw") || ($ftype eq "swap"))
+            && ($Caseman::vol2end{$vol} != 0))
+        {
+            Exec::exec_pipe(*OUT,
+                    "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                  . $Caseman::vol2start{$vol} . "-"
+                  . $Caseman::vol2end{$vol}
+                  . " | '$::TSKDIR/srch_strings' -a -t d > '$fname'");
+        }
+        else {
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d > '$fname'"
+            );
+        }
+        alarm(0);
+        $SIG{ALRM} = 'DEFAULT';
+
+        print $_ while ($_ = Exec::read_pipe_line(*OUT));
+        close(OUT);
+
+        print "<br>\n" if ($hit_cnt != 0);
+
+        # Verify that it worked
+        unless (open(STR, "$fname")) {
+            print(  "Error opening $fname<br>\n"
+                  . "Either an error occurred while generating the file or "
+                  . "no ASCII strings exist<br>");
+            goto str_uni;
+        }
+
+        # append to config
+        my $strvol =
+          Caseman::add_vol_host_config("strings", "$vol   $fname_rel");
+        print "Host configuration file updated<br>";
+
+        $Caseman::vol2ftype{$strvol} = "strings";
+        $Caseman::mod2vol{$strvol}   = $vol;
+        $Caseman::vol2str{$vol}      = $strvol;
+        $Caseman::vol2cat{$strvol}   = "mod";
+        $Caseman::vol2itype{$strvol} = "raw";
+
+        $Caseman::vol2par{$strvol}   = $vol;
+        $Caseman::vol2path{$strvol}  = "$::host_dir" . "$fname_rel";
+        $Caseman::vol2start{$strvol} = 0;
+        $Caseman::vol2end{$strvol}   = 0;
+        $Caseman::vol2sname{$strvol} = $fname_rel;
+
+        # Calculate MD5
+        if ((exists $Args::args{'md5'}) && ($Args::args{'md5'} == 1)) {
+            print "Calculating MD5 Value<br><br>\n";
+            my $m = Hash::int_create_wrap($strvol);
+            print "MD5 Value: <tt>$m</tt><br><br>\n";
+        }
+    }
+
+  str_uni:
+
+    if ($uni == 1) {
+
+        my $fname_rel = "$::DATADIR/${base_name}-$ftype.uni";
+        my $fname     = "$::host_dir" . "$fname_rel";
+
+        if (-e "$fname") {
+            my $i = 1;
+            $i++ while (-e "$::host_dir"
+                . "$::DATADIR/"
+                . "${base_name}-$ftype-$i.uni");
+
+            $fname_rel = "$::DATADIR/${base_name}-$ftype-$i.uni";
+            $fname     = "$::host_dir" . "$fname_rel";
+        }
+
+        print "<hr>\n" if ($ascii == 1);
+
+        print
+"Extracting Unicode strings from <tt>$Caseman::vol2sname{$vol}</tt><br>\n";
+
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Saving Unicode strings to $fname_rel");
+
+        local *OUT;
+
+        my $hit_cnt = 0;
+        $SIG{ALRM} = sub {
+            if (($hit_cnt++ % 5) == 0) {
+                print "+";
+            }
+            else {
+                print "-";
+            }
+            alarm(5);
+        };
+
+        alarm(5);
+        if ($ftype eq "blkls") {
+            Exec::exec_pipe(*OUT,
+                "'$::TSKDIR/srch_strings' -a -t d -e l $img > '$fname'");
+        }
+        elsif ((($ftype eq "raw") || ($ftype eq "swap"))
+            && ($Caseman::vol2end{$vol} != 0))
+        {
+            Exec::exec_pipe(*OUT,
+                    "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                  . $Caseman::vol2start{$vol} . "-"
+                  . $Caseman::vol2end{$vol}
+                  . " | '$::TSKDIR/srch_strings' -a -t d -e l > '$fname'");
+        }
+
+        else {
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d -e l  > '$fname'"
+            );
+        }
+
+        alarm(0);
+        $SIG{ALRM} = 'DEFAULT';
+
+        print $_ while ($_ = Exec::read_pipe_line(*OUT));
+        close(OUT);
+
+        print "<br>\n" if ($hit_cnt != 0);
+
+        # Verify that it worked
+        unless (open(STR, "$fname")) {
+            print "Error opening $fname<br>\n"
+              . "Either an error occurred while generating the file or "
+              . "no Unicode strings exist";
+            goto str_egress;
+        }
+
+        # append to config
+        my $strvol =
+          Caseman::add_vol_host_config("unistrings", "$vol    $fname_rel");
+        print "Host configuration file updated<br>";
+
+        $Caseman::vol2ftype{$strvol} = "strings";
+        $Caseman::mod2vol{$strvol}   = $vol;
+        $Caseman::vol2uni{$vol}      = $strvol;
+        $Caseman::vol2cat{$strvol}   = "mod";
+        $Caseman::vol2itype{$strvol} = "raw";
+
+        $Caseman::vol2par{$strvol}   = $vol;
+        $Caseman::vol2path{$strvol}  = "$::host_dir" . "$fname_rel";
+        $Caseman::vol2start{$strvol} = 0;
+        $Caseman::vol2end{$strvol}   = 0;
+        $Caseman::vol2sname{$strvol} = $fname_rel;
+
+        # Calculate MD5
+        if ((exists $Args::args{'md5'}) && ($Args::args{'md5'} == 1)) {
+            print "Calculating MD5 Value<br><br>\n";
+            $m = Hash::int_create_wrap($strvol);
+            print "MD5 Value: <tt>$m</tt><br><br>\n";
+        }
+    }
+
+  str_egress:
+
+    my $dest_vol = $vol;
+
+    # We need to return with a real image to VOL_DETAILS so check the mod
+    $dest_vol = $Caseman::mod2vol{$vol}
+      if (exists $Caseman::mod2vol{$vol});
+
+    print "<hr><a href=\"$::PROGNAME?$Args::baseargs_novol&mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_DETAILS&vol=$dest_vol\" target=_top>Image Details</a><p>\n";
+
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_KWSRCH&$Args::baseargs\""
+      . " target=\"_top\">Keyword Search</a>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+sub vol_makeblkls {
+    Print::print_html_header("Extracting Unallocated Space");
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $base_name = $Caseman::vol2sname{$vol};
+    $base_name = $1 if ($base_name =~ /^(.*?)\.dd$/);
+    my $fname_rel = "$::DATADIR/${base_name}-$ftype.unalloc";
+    my $fname     = "$::host_dir" . "$fname_rel";
+
+    if (-e "$::host_dir" . "$fname_rel") {
+        my $i = 1;
+        $i++ while (-e "$::host_dir"
+            . "$::DATADIR/"
+            . "${base_name}-$ftype-$i.unalloc");
+
+        $fname_rel = "$::DATADIR/${base_name}-$ftype-$i.unalloc";
+        $fname     = "$::host_dir" . "$fname_rel";
+    }
+
+    Print::log_host_inv(
+        "$Args::args{'vol'}: Saving unallocated data to $fname_rel");
+
+    print
+"Extracting unallocated data from <tt>$Caseman::vol2sname{$vol}</tt><br>\n";
+
+    local *OUT;
+
+    my $hit_cnt = 0;
+    $SIG{ALRM} = sub {
+        if (($hit_cnt++ % 5) == 0) {
+            print "+";
+        }
+        else {
+            print "-";
+        }
+        alarm(5);
+    };
+
+    alarm(5);
+
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/blkls' -f $ftype  -o $offset -i $imgtype $img > '$fname'");
+
+    alarm(0);
+    $SIG{ALRM} = 'DEFAULT';
+
+    print "$_" while ($_ = Exec::read_pipe_line(*OUT));
+    close(OUT);
+
+    print "<br>\n"
+      if ($hit_cnt != 0);
+
+    # append to config
+    my $blklsvol = Caseman::add_vol_host_config("blkls", "$vol    $fname_rel");
+    print "Host configuration file updated<br>";
+
+    $Caseman::vol2ftype{$blklsvol} = "blkls";
+    $Caseman::mod2vol{$blklsvol}   = $vol;
+    $Caseman::vol2blkls{$vol}      = $blklsrvol;
+    $Caseman::vol2cat{$blklsvol}   = "mod";
+    $Caseman::vol2itype{$blklsvol} = "raw";
+
+    $Caseman::vol2par{$blklsvol}   = $vol;
+    $Caseman::vol2path{$blklsvol}  = "$::host_dir" . "$fname_rel";
+    $Caseman::vol2start{$blklsvol} = 0;
+    $Caseman::vol2end{$blklsvol}   = 0;
+    $Caseman::vol2sname{$blklsvol} = $fname_rel;
+
+    # Calculate MD5
+    if ((exists $Args::args{'md5'}) && ($Args::args{'md5'} == 1)) {
+        print "Calculating MD5 Value<br>\n";
+        my $m = Hash::int_create_wrap($blklsvol);
+        print "MD5 Value: <tt>$m</tt><br><br>\n";
+    }
+
+    print "<a href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_DETAILS\" target=_top>Image Details</a><p>\n";
+
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_KWSRCH&$Args::baseargs_novol&"
+      . "vol=$fname_rel\" target=\"_top\">Keyword Search</a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+1;
diff --git a/lib/Data.pm b/lib/Data.pm
new file mode 100644
index 0000000000..f8e2ef43fe
--- /dev/null
+++ b/lib/Data.pm
@@ -0,0 +1,927 @@
+#
+# Data / Content layer functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Data;
+
+$Data::FRAME        = 1;
+$Data::ENTER        = 2;
+$Data::CONT         = 3;
+$Data::CONT_MENU    = 4;
+$Data::CONT_MENU_FR = 5;
+$Data::REPORT       = 6;
+$Data::LIST         = 7;
+$Data::EXPORT       = 8;
+$Data::BLANK        = 9;
+
+# Display types that use the sort variable
+$Data::SORT_ASC = 0;
+$Data::SORT_HEX = 1;
+$Data::SORT_STR = 2;
+
+# Types of block numbers
+$Data::ADDR_DD    = 0;
+$Data::ADDR_BLKLS = 1;
+
+sub main {
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Data::FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the data unit address
+    if ($view == $Data::FRAME) {
+        return frame();
+    }
+    elsif ($view == $Data::ENTER) {
+        return enter();
+    }
+    elsif ($view == $Data::LIST) {
+        return list();
+    }
+    elsif ($view == $Data::BLANK) {
+        return blank();
+    }
+
+    # These windows do need the data unit address
+    Args::check_block();
+    if ($view == $Data::CONT) {
+        return content();
+    }
+    elsif ($view == $Data::CONT_MENU) {
+        return content_menu();
+    }
+    elsif ($view == $Data::CONT_MENU_FR) {
+        return content_menu_frame();
+    }
+    elsif ($view == $Data::REPORT) {
+        return report();
+    }
+
+    elsif ($view == $Data::EXPORT) {
+        return export();
+    }
+    else {
+        Print::print_check_err("Invalid Data View");
+    }
+
+}
+
+# Generate the 2 frames for block browsing
+sub frame {
+    Print::print_html_header_frameset("Data Browse on $Args::args{'vol'}");
+
+    print "<frameset cols=\"20%,80%\">\n";
+
+    # Data Contents
+    if (exists $Args::args{'block'}) {
+        my $len = Args::get_len();
+
+        print "<frame src=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::ENTER&"
+          . "$Args::baseargs&block=$Args::enc_args{'block'}\">\n"
+          . "<frame src=\"$::PROGNAME?"
+          . "mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+          . "block=$Args::enc_args{'block'}&$Args::baseargs&len=$len\" "
+          . "name=\"content\">\n</frameset>\n";
+    }
+    else {
+        print "<frame src=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::ENTER&"
+          . "$Args::baseargs\">\n"
+          . "<frame src=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::BLANK&"
+          . "$Args::baseargs\" name=\"content\">\n</frameset>\n";
+    }
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Frame to enter the data into
+sub enter {
+    Print::print_html_header("");
+
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+    my $bs    = Args::get_unitsize();
+
+    print "<form action=\"$::PROGNAME\" method=\"get\" "
+      . "target=\"content\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_DATA\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Data::CONT_MENU_FR\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+      . Args::make_hidden()
+      .
+
+      # Address
+      "<b>$Fs::addr_unit{$ftype} Number:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;"
+      . "<input type=\"text\" name=\"block\" size=12 maxlength=12";
+    print " value=\"$Args::enc_args{'block'}\""
+      if (exists $Args::args{'block'});
+    print ">\n";
+
+    # Number of units
+    print "<p><b>Number of $Fs::addr_unit{$ftype}" . "s:</b>"
+      . "<br>&nbsp;&nbsp;&nbsp;&nbsp;"
+      . "<input type=\"text\" name=\"len\" value=\"1\" size=6 maxlength=6>\n";
+
+    print "<p><b>$Fs::addr_unit{$ftype} Size:</b>" . "&nbsp;$bs\n";
+
+    # blkls images do not get to select this
+    # if (($ftype ne 'blkls') && ($ftype ne 'swap') && ($ftype ne 'raw')) {
+    if ($Fs::is_fs{$ftype} == 1) {
+        print "<p><b>Address Type:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;"
+          . "<select name=\"btype\" size=1>\n"
+          . "<option value=\"$Data::ADDR_DD\" selected>Regular (dd)</option>\n"
+          . "<option value=\"$Data::ADDR_BLKLS\">Unallocated (blkls)</option>\n"
+          . "</select>\n";
+    }
+    else {
+        print
+          "<input type=\"hidden\" name=\"btype\" value=\"$Data::ADDR_DD\">\n";
+    }
+
+    # Lazarus
+    print "<p><b>Lazarus Addr:</b> "
+      . "<input type=\"checkbox\" name=\"btype2\">\n"
+      . "<p><input type=\"image\" src=\"pict/but_view.jpg\" "
+      . "width=45 height=22 alt=\"View\" border=\"0\">\n"
+      . "</form>\n";
+
+    print "<hr><p>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::LIST&$Args::baseargs\" target=\"content\">"
+      . "<img src=\"pict/but_alloc_list.jpg\" border=\"0\" "
+      . "width=113 height=20 alt=\"Allocation List\"></a><br>\n"
+      if ($Fs::is_fs{$ftype} == 1);
+
+ #      unless (($ftype eq 'blkls') || ($ftype eq 'swap') || ($ftype eq 'raw'));
+
+    # If there is a blkls image, then provide a button for it
+    if (($ftype ne 'blkls') && (exists $Caseman::vol2blkls{$vol})) {
+        print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FRAME\">\n"
+          . "<input type=\"hidden\" name=\"submod\" value=\"$::MOD_DATA\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$Caseman::vol2blkls{$vol}\">\n"
+          . Args::make_hidden()
+          . "<p><input type=\"image\" src=\"pict/srch_b_lun.jpg\" "
+          . "alt=\"Load Unallocated Image\" border=\"0\">\n<br></form>\n";
+    }
+
+    # If we are using a blkls image, then give a button for the original
+    elsif (($ftype eq 'blkls') && (exists $Caseman::mod2vol{$vol})) {
+        print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FRAME\">\n"
+          . "<input type=\"hidden\" name=\"submod\" value=\"$::MOD_DATA\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$Caseman::mod2vol{$vol}\">\n"
+          . Args::make_hidden()
+          . "<p><input type=\"image\" src=\"pict/srch_b_lorig.jpg\" "
+          . "alt=\"Load Original Image\" border=\"0\">\n<br></form>\n";
+    }
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# generate frame for block content
+sub content_menu_frame {
+    Print::print_html_header_frameset("");
+
+    my $sort = $Data::SORT_ASC;
+    $sort = $1
+      if ((exists $Args::args{'sort'}) && ($Args::args{'sort'} =~ /^(\d+)$/));
+
+    my $len = Args::get_len();
+    if ($len == 0) {
+        Print::print_err("Invalid length: 0");
+    }
+
+    my $blk;
+
+    my $ifind = Args::get_ifind();
+
+    # off is 1 if a lazarus block number as they are off by one
+    my $off = 0;
+    $off = -1 if (exists $Args::args{'btype2'});
+
+    # Do we need to convert from blkls value to dd value ?
+    if (   (exists $Args::args{'btype'})
+        && ($Args::args{'btype'} == $Data::ADDR_BLKLS))
+    {
+
+        my $vol     = Args::get_vol('vol');
+        my $b       = Args::get_block() + $off;
+        my $ftype   = $Caseman::vol2ftype{$vol};
+        my $img     = $Caseman::vol2path{$vol};
+        my $offset  = $Caseman::vol2start{$vol};
+        my $imgtype = $Caseman::vol2itype{$vol};
+
+        local *OUT;
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/blkcalc' -f $ftype -u $b -o $offset -i $imgtype $img");
+        $blk = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $blk = "Error getting block"
+          if ((!defined $blk) || ($blk eq ""));
+
+        if ($blk !~ /^\d+$/) {
+            print "$blk\n";
+            return 1;
+        }
+    }
+    else {
+        $blk = Args::get_block() + $off;
+    }
+
+    print "<frameset rows=\"25%,75%\">\n"
+      . "<frame src=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU&$Args::baseargs"
+      . "&block=$blk&sort=$sort&len=$len&ifind=$ifind\">\n"
+      . "<frame src=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT&$Args::baseargs"
+      . "&block=$blk&sort=$sort&len=$len\" name=\"cont2\">\n"
+      . "</frameset>";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+sub print_ifind {
+    my $block = Args::get_block();
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Finding $Fs::meta_str{$ftype} for data unit $block"
+    );
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ifind' -f $ftype -d $block -o $offset -i $imgtype $img");
+    my $meta = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $meta = "Error getting meta address"
+      if ((!defined $meta) || ($meta eq ""));
+
+    if ($meta =~ /^($::REG_META)$/o) {
+        $meta = $1;
+        my $tmpr = $Caseman::vol2mnt{$vol};
+        print "<b>Pointed to by $Fs::meta_str{$ftype}:</b> "
+          . "<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs&"
+          . "meta=$meta\" target=\"_top\">$meta</a><br>\n";
+
+        print "<b>Pointed to by file:</b>\n";
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/ffind' -f $ftype -a -o $offset -i $imgtype $img $meta");
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+            chop;
+
+            # Make it red if it is deleted
+            if (/^(\*)\s+\/*(.*)$/) {
+                Print::print_output("<tt><font color=\"$::DEL_COLOR[0]\">"
+                      . Print::html_encode(${tmpr} . ${2})
+                      . "</font></tt> (deleted)<br>\n");
+            }
+
+            # If it starts with a '/' then it must be a file
+            elsif (/^\/(.*)$/) {
+                Print::print_output("<tt>"
+                      . Print::html_encode(${tmpr} . ${1})
+                      . "</tt><br>\n");
+            }
+
+            # this must be an error
+            else {
+                Print::print_output(Print::html_encode($_) . "<br>\n");
+            }
+        }
+        close(OUT);
+    }
+    else {
+        print "$meta\n";
+    }
+}
+
+# Generate index for block content
+sub content_menu {
+    Print::print_html_header("");
+
+    my $block = Args::get_block();
+    my $prev  = $block - 1;
+    my $next  = $block + 1;
+
+    my $sort    = Args::get_sort();
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $ifind = Args::get_ifind();
+
+    my $len = Args::get_len();
+    my $bs  = Args::get_unitsize();
+
+    if ($len == 0) {
+        Print::print_err("Invalid length: 0");
+    }
+
+    print "<center>";
+    my $url =
+        "$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+      . "$Args::baseargs&sort=$sort&len=$len"
+      . "&ifind=$ifind";
+
+    # Next and Previous pointers
+    print "<table cellspacing=\"0\" cellpadding=\"2\">\n" . "<tr>\n";
+
+    # Previous
+    if ($prev < $Fs::first_addr{$ftype}) {
+        print "<td align=\"right\">&nbsp;</td>\n";
+    }
+    else {
+        print "<td align=\"right\">"
+          . "<a href=\"$url&block=$prev\" target=\"_parent\">\n"
+          . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+          . "width=\"89\" height=20 border=\"0\"></a></td>\n";
+    }
+
+    # Next
+    print "<td align=\"left\"><a href=\"$url&block=$next\""
+      . " target=\"_parent\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a></td>\n</tr>\n";
+
+    print "<tr><td align=\"right\"><a href=\"$::PROGNAME?"
+      . "mod=$::MOD_DATA&view=$Data::EXPORT&$Args::baseargs&"
+      . "block=$block&len=$len\">"
+      . "<img src=\"pict/but_export.jpg\" border=\"0\" alt=\"Export\" "
+      . "width=123 height=20></a></td>\n";
+
+    if ($::USE_NOTES == 1) {
+        print "<td align=\"left\">"
+          . "<a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::ENTER_DATA&$Args::baseargs&block=$block&len=$len\" "
+          . "target=\"_blank\">"
+          . "<img src=\"pict/but_addnote.jpg\" border=\"0\" "
+          . "width=\"89\" height=20 alt=\"Add Note\"></a></td>\n";
+    }
+    else {
+        print "<td align=\"left\">&nbsp;</td>\n";
+    }
+
+    print "</tr></table>\n";
+
+    # Display formats
+    print "<table cellspacing=\"0\" cellpadding=\"2\">\n" . "<tr><td>ASCII (";
+    if ($sort == $Data::SORT_ASC) {
+        print "display - ";
+    }
+    else {
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+          . "$Args::baseargs&"
+          . "sort=$Data::SORT_ASC&block=$block&len=$len\" target=\"_parent\">"
+          . "display</a> - \n";
+    }
+
+    print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::REPORT&"
+      . "$Args::baseargs&sort=$Data::SORT_ASC"
+      . "&block=$block&len=$len\" target=\"_blank\">report</a>)</td>\n"
+      . "<td>*</td>\n";
+
+    print "<td>Hex (";
+    if ($sort == $Data::SORT_HEX) {
+        print "display - ";
+    }
+    else {
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+          . "$Args::baseargs&"
+          . "sort=$Data::SORT_HEX&block=$block&len=$len\" target=\"_parent\">"
+          . "display</a> - \n";
+    }
+
+    print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::REPORT&"
+      . "$Args::baseargs&sort=$Data::SORT_HEX"
+      . "&block=$block&len=$len\" target=\"_blank\">report</a>)</td>\n"
+      . "<td>*</td>\n";
+
+    print "<td>ASCII Strings (";
+    if ($sort == $Data::SORT_STR) {
+        print "display - ";
+    }
+    else {
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+          . "$Args::baseargs&"
+          . "sort=$Data::SORT_STR&block=$block&len=$len\" target=\"_parent\">"
+          . "display</a> - \n";
+    }
+
+    print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::REPORT&"
+      . "$Args::baseargs&sort=$Data::SORT_STR"
+      . "&block=$block&len=$len\" target=\"_blank\">report</a>)</td>\n"
+      . "</tr></table>\n";
+
+    # Special case for 'blkls' b.c. we need to specify original data unit size
+    local *OUT;
+    if ($ftype eq 'blkls') {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype -u $bs  -o $offset -i $imgtype $img $block | '$::FILE_EXE' -z -b -"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype  -o $offset -i $imgtype $img $block | '$::FILE_EXE' -z -b -"
+        );
+    }
+    my $file_type = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $file_type = "Error getting file type"
+      if ((!defined $file_type) || ($file_type eq ""));
+
+    print "<b>File Type:</b> $file_type<br></center>\n";
+
+    if ($len == 1) {
+        print "<b>$Fs::addr_unit{$ftype}:</b> $block<br>\n";
+    }
+    else {
+        my $end = $block + $len - 1;
+        print "<b>$Fs::addr_unit{$ftype}" . "s:</b> $block-$end<br>\n";
+    }
+    if ($Fs::is_fs{$ftype} == 1) {
+
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/blkstat' -f $ftype  -o $offset -i $imgtype $img $block"
+        );
+
+        my $cnt = 0;
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+
+            if ($_ =~ /((Not )?Allocated)/) {
+                print "<font color=\"$::DEL_COLOR[0]\">" if (defined $2);
+                print "<b>Status:</b> $1<br>";
+                print "</font>" if (defined $2);
+            }
+            elsif ($_ =~ /Group: (\d+)/) {
+                print "<b>Group:</b> $1<br>\n";
+            }
+            $cnt++;
+        }
+        close(OUT);
+        if ($cnt == 0) {
+            print "Invalid $Fs::addr_unit{$ftype} address<br>\n";
+            return;
+        }
+
+        # Make ifind an option
+        $url =
+            "$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU&"
+          . "$Args::baseargs&sort=$sort&len=$len&block=$block";
+        if ($ifind == 0) {
+            print "<a href=\"$url&ifind=1\">Find Meta Data Address</a><br>\n";
+        }
+        else {
+            print "<a href=\"$url&ifind=0\">Hide Meta Data Address</a><br>\n";
+            print_ifind();
+        }
+    }
+
+    # Option to view original if it exists
+    if (   ($ftype eq 'blkls')
+        && (exists $Caseman::mod2vol{$vol}))
+    {
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&"
+          . "view=$Data::CONT_MENU_FR&${Args::baseargs_novol}"
+          . "&vol=$Caseman::mod2vol{$vol}&"
+          . "block=$block&sort=$sort&len=$len&btype=$Data::ADDR_BLKLS\" "
+          . "target=\"_parent\">View Original</a><br>\n";
+    }
+
+    Print::print_html_footer();
+    return 0;
+}
+
+#Display actual block content
+sub content {
+    Args::check_sort();
+
+    Print::print_text_header();
+
+    my $sort    = Args::get_sort();
+    my $block   = Args::get_block();
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $len = Args::get_len();
+    my $bs  = Args::get_unitsize();
+
+    my $range = "";
+    if ($len == 0) {
+        print "Invalid length: 0\n";
+        exit(1);
+    }
+    elsif ($len == 1) {
+        $range = "$Fs::addr_unit{$ftype} $block";
+    }
+    else {
+        my $end = $block + $len - 1;
+        $range = "$Fs::addr_unit{$ftype}" . "s $block-$end";
+    }
+    my $str     = "Contents of $range in $Caseman::vol2sname{$vol}\n\n\n";
+    my $log_str = "contents of $range";
+
+    my $usize_str = "";
+    $usize_str = " -u $bs "
+      if ($ftype eq 'blkls');
+
+    local *OUT;
+    if ($sort == $Data::SORT_HEX) {
+        print "Hex " . $str;
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Displaying Hex $log_str");
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -h -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    elsif ($sort == $Data::SORT_ASC) {
+        print "ASCII " . $str;
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Displaying ASCII $log_str");
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -a -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    elsif ($sort == $Data::SORT_STR) {
+        print "ASCII String " . $str;
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Displaying string $log_str");
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -o $offset -i $imgtype $img $block $len | '$::TSKDIR/srch_strings' -a"
+        );
+    }
+    print $_ while ($_ = Exec::read_pipe_data(*OUT, 512));
+    close(OUT);
+
+    Print::print_text_footer();
+
+    return 0;
+}
+
+sub report {
+    Args::check_sort();
+
+    my $sort    = Args::get_sort();
+    my $vol     = Args::get_vol('vol');
+    my $block   = Args::get_block();
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $len     = Args::get_len();
+    my $type;
+
+    if ($len == 0) {
+        print("Invalid length: 0");
+        exit(1);
+    }
+    my $bs = Args::get_unitsize();
+
+    my $usize_str = "";
+    $usize_str = " -u $bs " if ($ftype eq 'blkls');
+
+    Print::print_text_header("$vol" . "-"
+          . "$Fs::addr_unit{$ftype}"
+          . "$Args::args{'block'}"
+          . ".txt");
+
+    if ($sort == $Data::SORT_ASC) {
+        Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Generating ASCII report on data unit $block"
+        );
+        $type = "ascii";
+    }
+    elsif ($sort == $Data::SORT_STR) {
+        Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Generating ASCII strings report on data unit $block"
+        );
+        $type = "string";
+    }
+    elsif ($sort == $Data::SORT_HEX) {
+        Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Generating hex report on data unit $block"
+        );
+        $type = "hex";
+    }
+    else {
+        print "\n\n";
+        print "invalid sort value";
+        return 1;
+    }
+
+    print "                 Autopsy $type $Fs::addr_unit{$ftype} Report\n\n"
+      . "-" x 70 . "\n"
+      . "                   GENERAL INFORMATION\n\n";
+
+    if ($len == 1) {
+        print "$Fs::addr_unit{$ftype}: $Args::args{'block'}\n";
+    }
+    else {
+        my $end = $block + $len - 1;
+        print "$Fs::addr_unit{$ftype}" . "s: $Args::args{'block'}-$end\n";
+    }
+    print "$Fs::addr_unit{$ftype} Size: $bs\n";
+
+    # if (($ftype ne 'blkls') && ($ftype ne 'raw') && ($ftype ne 'swap')) {
+    if ($Fs::is_fs{$ftype} == 1) {
+
+        local *OUT;
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/ifind' -f $ftype -d $block  -o $offset -i $imgtype $img"
+        );
+        my $meta = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $meta = "Error getting meta address"
+          if ((!defined $meta) || ($meta eq ""));
+
+        if ($meta =~ /^($::REG_META)$/o) {
+            my $tmpi = $1;
+            print "\nPointed to by $Fs::meta_str{$ftype}: $tmpi\n";
+
+            my $tmpr = $Caseman::vol2mnt{$vol};
+            print "Pointed to by files:\n";
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ffind' -f $ftype -a  -o $offset -i $imgtype $img $tmpi"
+            );
+            while ($_ = Exec::read_pipe_line(*OUT)) {
+                chop;
+                if (/^(\*)\s+\/*(.*)$/) {
+                    Print::print_output(
+                        "  $tmpr$2 (deleted)\n");
+                }
+                elsif (/^\/(.*)$/) {
+                    Print::print_output(
+                        "  $tmpr$1\n");
+                }
+                else {
+                    Print::print_output("  $_\n");
+                }
+            }
+            close(OUT);
+        }
+        else {
+            print "Not allocated to any meta data structures\n";
+        }
+    }    # not blkls
+
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str  -o $offset -i $imgtype $img $block $len | '$::MD5_EXE'"
+    );
+    my $md5 = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $md5 = "Error getting md5"
+      if ((!defined $md5) || ($md5 eq ""));
+
+    chop $md5;
+    print "MD5 of raw $Fs::addr_unit{$ftype}: $md5\n";
+
+    if ($sort == $Data::SORT_HEX) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -h  -o $offset -i $imgtype $img $block $len | '$::MD5_EXE'"
+        );
+    }
+    elsif ($sort == $Data::SORT_ASC) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -a  -o $offset -i $imgtype $img $block $len | '$::MD5_EXE'"
+        );
+    }
+    elsif ($sort == $Data::SORT_STR) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str  -o $offset -i $imgtype $img $block $len | '$::TSKDIR/srch_strings' -a | '$::MD5_EXE'"
+        );
+    }
+
+    $md5 = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $md5 = "Error getting md5"
+      if ((!defined $md5) || ($md5 eq ""));
+
+    chop $md5;
+    print "MD5 of $type output: $md5\n";
+
+    print "\nImage: $Caseman::vol2path{$vol}\n";
+    if (($Caseman::vol2start{$vol} == 0) && ($Caseman::vol2end{$vol} == 0)) {
+        print "Offset: Full image\n";
+    }
+    elsif ($Caseman::vol2end{$vol} == 0) {
+        print "Offset: $Caseman::vol2start{$vol} to end\n";
+    }
+    else {
+        print "Offset: $Caseman::vol2start{$vol} to $Caseman::vol2end{$vol}\n";
+    }
+    print "File System Type: $ftype\n";
+
+    my $date = localtime();
+
+    print "\nDate Generated: $date\n"
+      . "Investigator: $Args::args{'inv'}\n"
+      . "-" x 70 . "\n"
+      . "                        CONTENT\n\n";
+
+    if ($sort == $Data::SORT_HEX) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -h  -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    elsif ($sort == $Data::SORT_ASC) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str -a  -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    elsif ($sort == $Data::SORT_STR) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype $usize_str  -o $offset -i $imgtype $img $block $len | '$::TSKDIR/srch_strings' -a"
+        );
+    }
+    Print::print_output($_)
+      while ($_ = Exec::read_pipe_data(*OUT, 512));
+    close(OUT);
+
+    print "\n"
+      . "-" x 70 . "\n"
+      . "                   VERSION INFORMATION\n\n"
+      . "Autopsy Version: $::VER\n";
+    print "The Sleuth Kit Version: " . ::get_tskver() . "\n";
+
+    Print::print_text_footer();
+
+    return 0;
+}
+
+#
+# Display the block allocation list
+#
+sub list {
+    Print::print_html_header("Block Allocation List");
+
+    my $BLKLS_GAP = 500;
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $min = 0;
+    $min = Args::get_min() if (exists $Args::args{'min'});
+    my $max = $min + $BLKLS_GAP - 1;
+
+    # set fmin to the minimum for the file system
+    my $fmin = $min;
+    $fmin = $Fs::first_addr{$ftype} if ($min < $Fs::first_addr{$ftype});
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: Block Allocation List for $min to $max");
+    print "<center><H2>$Fs::addr_unit{$ftype}: $min - $max</H2>";
+
+    my $tmp;
+
+    if ($min - $BLKLS_GAP >= 0) {
+        $tmp = $min - $BLKLS_GAP;
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::LIST&"
+          . "$Args::baseargs&min=$tmp\">"
+          . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+          . "width=\"89\" height=20 border=\"0\"></a> ";
+    }
+    $tmp = $min + $BLKLS_GAP;
+    print " <a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::LIST&"
+      . "$Args::baseargs&min=$tmp\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a><br>";
+    print "</center>\n";
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -el -f $ftype  -o $offset -i $imgtype $img $fmin-$max"
+    );
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if (/^(\d+)\|([af])/) {
+            print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&"
+              . "view=$Data::CONT_MENU_FR&$Args::baseargs&block=$1\">"
+              . "$1:</a> ";
+            if ($2 eq "a") {
+                print "allocated<br>\n";
+            }
+            else {
+                print "<font color=\"$::DEL_COLOR[0]\">free</font><br>\n";
+            }
+        }
+    }
+    close(OUT);
+
+    print "<center>\n";
+    if ($min - $BLKLS_GAP >= 0) {
+        $tmp = $min - $BLKLS_GAP;
+        print "<a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::LIST&"
+          . "$Args::baseargs&min=$tmp\">"
+          . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+          . "width=\"89\" height=20 border=\"0\"></a> ";
+    }
+    $tmp = $min + $BLKLS_GAP;
+    print " <a href=\"$::PROGNAME?mod=$::MOD_DATA&view=$Data::LIST&"
+      . "$Args::baseargs&min=$tmp\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a><br>";
+    print "</center>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub export {
+    my $block   = Args::get_block();
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $len     = Args::get_len();
+    my $bs      = Args::get_unitsize();
+
+    Print::print_oct_header(
+        "$vol" . "-" . "$Fs::addr_unit{$ftype}" . "$block" . ".raw");
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Saving contents of data unit $block (unit size: $bs  number: $len)"
+    );
+
+    local *OUT;
+    if ($ftype eq 'blkls') {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype -u $bs  -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkcat' -f $ftype  -o $offset -i $imgtype $img $block $len"
+        );
+    }
+    print "$_" while ($_ = Exec::read_pipe_data(*OUT, 512));
+    close(OUT);
+
+    Print::print_oct_footer();
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("Data Unit Blank Page");
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    print "<center><h3>Data Unit Mode</h3><br>\n"
+      . "Here you can view the contents of any $Fs::addr_unit{$ftype} in the file system.<br>\n"
+      . "Enter the address in the field on the left.\n";
+    Print::print_html_footer();
+    return 0;
+}
diff --git a/lib/Exec.pm b/lib/Exec.pm
new file mode 100644
index 0000000000..e138712756
--- /dev/null
+++ b/lib/Exec.pm
@@ -0,0 +1,91 @@
+#
+# Functions that wrap the execution of tools so that they are logged
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Exec;
+
+# exec_pipe(HANDLE, CMD);
+sub exec_pipe {
+    my $handle = shift(@_);
+    my $cmd    = shift(@_);
+
+    die "Can't open pipe for exec_pipe"
+      unless defined(my $pid = open($handle, '-|'));
+
+    if ($pid) {
+        return $handle;
+    }
+    else {
+        $| = 1;
+        Print::log_host_inv_exec("$cmd");
+        exec("$cmd") or die "Can't exec program: $!";
+    }
+}
+
+sub read_pipe_line {
+    my $handle = shift(@_);
+    my $out;
+
+# for (my $i = 0; ($len = read ($handle, $$buf, $size)) && (!defined $len); $i++) {
+
+    for (my $i = 0; $i < 100; $i++) {
+        $out = <$handle>;
+        return $out if (defined $out);
+    }
+    return $out;
+}
+
+sub read_pipe_data {
+    my $handle = shift(@_);
+    my $size   = shift(@_);
+    my $out;
+    my $len;
+
+    for (
+        my $i = 0;
+        ($len = read($handle, $out, $size)) && (!defined $len) && ($i < 100);
+        $i++
+      )
+    {
+    }
+
+    return $out;
+}
+
+sub exec_sys {
+    my $cmd = shift(@_);
+    Print::log_host_inv_exec("$cmd");
+    system($cmd);
+    return;
+}
+
+1;
diff --git a/lib/File.pm b/lib/File.pm
new file mode 100644
index 0000000000..59696d013c
--- /dev/null
+++ b/lib/File.pm
@@ -0,0 +1,2310 @@
+#
+# File name layer functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Updated 1/15
+
+package File;
+
+# If the order of these views are changed, then the checks in main
+# must be as well
+$File::BLANK          = 0;
+$File::FRAME          = 1;
+$File::DIR_LIST       = 2;
+$File::FILE_LIST_DIR  = 3;
+$File::FILE_LIST_FILE = 4;
+$File::FILE_LIST_DEL  = 5;
+$File::FILE_LIST      = 6;
+$File::CONT           = 7;
+$File::CONT_FR        = 8;
+$File::CONT_MENU      = 9;
+$File::REPORT         = 10;
+$File::EXPORT         = 11;
+$File::MD5LIST        = 12;
+$File::CONT_IMG       = 13;
+
+$File::REC_NO  = 0;
+$File::REC_YES = 1;
+
+sub main {
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $File::FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view == $File::BLANK) {
+        blank();
+        return 0;
+    }
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the meta data address
+    if ($view < $File::FILE_LIST) {
+
+        if ($view == $File::FRAME) {
+            return frame();
+        }
+
+        Args::check_dir();
+        if ($view == $File::DIR_LIST) {
+            return dir_list();
+        }
+        elsif ($view == $File::FILE_LIST_DIR) {
+            return file_list_dir();
+        }
+        elsif ($view == $File::FILE_LIST_DEL) {
+            return file_list_del();
+        }
+        elsif ($view == $File::FILE_LIST_FILE) {
+            return file_list_file();
+        }
+    }
+
+    # These windows need the meta data address
+    Args::check_dir();
+    Args::check_meta('meta');
+
+    if ($view < $File::REPORT) {
+        if ($view == $File::FILE_LIST) {
+            return file_list();
+        }
+        elsif ($view == $File::CONT) {
+            return content();
+        }
+        elsif ($view == $File::CONT_FR) {
+            return content_fr();
+        }
+        elsif ($view == $File::CONT_MENU) {
+            return content_menu();
+        }
+    }
+    else {
+        if ($view == $File::REPORT) {
+            return report();
+        }
+        elsif ($view == $File::EXPORT) {
+            return export();
+        }
+        elsif ($view == $File::MD5LIST) {
+            return md5list();
+        }
+        elsif ($view == $File::CONT_IMG) {
+            return content_img();
+        }
+    }
+
+    Print::print_check_err("Invalid File View");
+}
+
+# Sorting and display types
+my $FIL_SORT_ASC = 0;
+my $FIL_SORT_STR = 1;
+my $FIL_SORT_HEX = 2;
+
+# Methods of sorting the file listings
+my $SORT_DTYPE = 0;    # type according to dentry
+my $SORT_ITYPE = 1;    # type according to meta
+my $SORT_NAME  = 2;
+my $SORT_MOD   = 3;
+my $SORT_ACC   = 4;
+my $SORT_CHG   = 5;
+my $SORT_CRT   = 6;
+my $SORT_SIZE  = 7;
+my $SORT_GID   = 8;
+my $SORT_UID   = 9;
+my $SORT_META  = 10;
+my $SORT_DEL   = 11;
+
+my $DIRMODE_SHOW   = 1;
+my $DIRMODE_NOSHOW = 2;
+
+#
+# Make the three frames and fill them in
+#
+sub frame {
+    my $vol = Args::get_vol('vol');
+    my $mnt = $Caseman::vol2mnt{$vol};
+
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    # If we were not given the meta, then look up the root
+    unless (exists $Args::args{'meta'}) {
+        $Args::args{'meta'} = $Args::enc_args{'meta'} = $Fs::root_meta{$ftype};
+    }
+
+    unless (exists $Args::args{'dir'}) {
+        $Args::enc_args{'dir'} = $Args::args{'dir'} = "/";
+    }
+
+    Args::check_meta('meta');
+    Args::check_dir();
+
+    my $meta = Args::get_meta('meta');
+    my $dir  = Args::get_dir();
+
+    Print::print_html_header_frameset("$mnt$dir on $Args::args{'vol'}");
+
+    my $sort = $SORT_NAME;
+    $sort = $Args::args{'sort'} if (exists $Args::args{'sort'});
+
+    my $dirmode = $DIRMODE_NOSHOW;
+    $dirmode = $Args::args{'dirmode'} if (exists $Args::args{'dirmode'});
+
+    print "<frameset cols=\"175,*\">\n";
+
+    # Directory Listing on Left
+    my $url =
+      "$::PROGNAME?$Args::baseargs&dir=$dir&" . "sort=$sort&dirmode=$dirmode";
+
+    print "<frame src=\"$url&mod=$::MOD_FILE&view=$File::DIR_LIST\">\n";
+
+    # File frameset on right
+    print "<frameset rows=\"50%,50%\">\n";
+
+    # File Listings on top
+    print
+      "<frame src=\"$url&mod=$::MOD_FILE&view=$File::FILE_LIST&meta=$meta\" "
+      . "name=\"list\">\n";
+
+    # File Contents
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::BLANK&"
+      . "$Args::baseargs\" name=\"content\">\n"
+      . "</frameset>\n"
+      . "</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+#
+# Print the directory names for the lhs frame and other
+# Search forms
+#
+
+sub dir_list {
+    Args::check_sort();
+    Args::check_dirmode();
+
+    Print::print_html_header("");
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $sort    = Args::get_sort();
+    my $dirmode = Args::get_dirmode();
+    my $mnt     = $Caseman::vol2mnt{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $lcldir     = "";
+    my $prev_plus  = "";    # previous number of '+' directory spacers
+    my $prev_fname = "";
+    my $prev_meta  = "";
+
+    # Field to enter a directory into:
+    print "<p><form action=\"$::PROGNAME\" method=\"get\" target=\"list\">\n"
+      . "<center><b>Directory Seek</b></center><br>"
+      . "Enter the name of a directory that you want to view.<br>"
+      . "<tt>$mnt</tt>"
+      . "<input type=\"text\" name=\"dir\" size=24 maxlength=100>\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FILE\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$File::FILE_LIST_DIR\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+      . "<input type=\"hidden\" name=\"sort\" value=\"$Args::args{'sort'}\">\n"
+      . "<input type=\"hidden\" name=\"dirmode\" value=\"$Args::args{'dirmode'}\">\n"
+      . Args::make_hidden()
+      .
+
+      # View Button
+      "<br><input type=\"image\" src=\"pict/but_view.jpg\" "
+      . "width=45 height=22 alt=\"View\" border=\"0\"></form>\n";
+
+    # Field to enter a name into:
+    print
+      "<hr><p><form action=\"$::PROGNAME\" method=\"get\" target=\"list\">\n"
+      . "<center><b>File Name Search</b></center><br>"
+      . "Enter a Perl regular expression for the file names you want to find.<br><br>\n"
+      . "<input type=\"text\" name=\"dir\" size=24 maxlength=100>\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FILE\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$File::FILE_LIST_FILE\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$Args::args{'vol'}\">\n"
+      . "<input type=\"hidden\" name=\"sort\" value=\"$Args::args{'sort'}\">\n"
+      . "<input type=\"hidden\" name=\"dirmode\" value=\"$Args::args{'dirmode'}\">\n"
+      . Args::make_hidden()
+      . "<br>\n"
+      .
+
+      # Search Button
+      "<input type=\"image\" src=\"pict/but_search.jpg\" "
+      . "width=61 height=22 alt=\"Search\" border=\"0\"></form>\n";
+
+    print "<p><hr><p>\n";
+
+    my $base_url = "$::PROGNAME?$Args::baseargs&sort=$sort";
+
+    # All deleted files button
+    print "<a href=\"$base_url&mod=$::MOD_FILE&view=$File::FILE_LIST_DEL&"
+      . "dir=&dirmode=$dirmode\" target=\"list\">"
+      . "<img border=\"0\" src=\"pict/file_b_alldel.jpg\" width=\"127\" "
+      . "alt=\"Show All Deleted Files\">"
+      . "</a><p>\n";
+
+    # The dirmode arg shows if we should expand the whole directory listing
+    # or not
+    if ($dirmode == $DIRMODE_NOSHOW) {
+        print "<a href=\"$base_url&mod=$::MOD_FILE&view=$File::FRAME&"
+          . "dirmode=$DIRMODE_SHOW\" target=\"_parent\">"
+          . "<img src=\"pict/file_b_expand.jpg\" alt=\"Expand All Directories\" "
+          . "border=\"0\"></a><p><hr>\n";
+
+        return;
+    }
+    else {
+        print "<a href=\"$base_url&mod=$::MOD_FILE&view=$File::FRAME&"
+          . "dirmode=$DIRMODE_NOSHOW\" target=\"_parent\">"
+          . "<img src=\"pict/file_b_hide.jpg\" alt=\"Hide All Directories\" "
+          . "border=\"0\"></a><p><hr>\n";
+    }
+
+    $base_url .= "&dirmode=$dirmode";
+
+    Print::log_host_inv("$Args::args{'vol'}: List of all directories");
+
+    # We need to maintain state to create dir and this is done by
+    # counting the + marks.
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/fls' -f $ftype -ruD -o $offset -i $imgtype $img");
+
+    # Print root
+    my $url =
+        "$base_url&mod=$::MOD_FILE&view=$File::FILE_LIST&"
+      . "meta=$Fs::root_meta{$ftype}&dir=";
+    print "<p><a href=\"$url\" target=\"list\">$mnt</a><br>\n";
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if (
+/^(\*)?(\+*)\s*[\-d]\/[\-d]\s*(\d+)\-?\d*\-?\d*\s*(\(realloc\))?:\t(.+)$/
+          )
+        {
+
+            my $del   = $1;
+            my $plus  = $2;
+            my $meta  = $3;
+            my $re    = $4;
+            my $fname = $5;
+
+            # Adjust the dir value using the '++' values to determine
+            # how "deep" we are
+            unless ($prev_plus eq $plus) {
+
+                # are we in 1 more
+                if ($plus eq $prev_plus . '+') {
+                    $lcldir .= ($prev_fname . "/");
+                }
+
+                # we are back (at least one)
+                elsif (defined $plus) {
+                    my @dirs = split('/', $lcldir);
+                    my $idx = -1;
+                    $lcldir = "";
+
+                    while (($idx = index($plus, '+', $idx + 1)) != -1) {
+                        $lcldir .= ($dirs[$idx] . "/");
+                    }
+                }
+            }
+
+            $prev_plus  = $plus;
+            $prev_fname = $fname;
+            $prev_meta  = $meta;
+
+            $url =
+                "$base_url&mod=$::MOD_FILE&view=$File::FILE_LIST&"
+              . "meta=$meta&dir="
+              . Args::url_encode($lcldir . $fname . "/");
+
+            print "<font color=\"$::DEL_COLOR[0]\">" if defined $del;
+            print "+$plus<a href=\"$url\" target=\"list\"><tt>/"
+              . Print::html_encode($fname)
+              . "</tt></a><br>\n";
+            print "</font>" if defined $del;
+        }
+    }
+    close(OUT);
+    Print::print_html_footer();
+    return 0;
+
+};    # end of FIL_DIR
+
+# Print the files and directories for the upper rhs frame
+# These can be sorted in any format
+#
+# We need to find a way to cache this data
+#
+sub file_list {
+    Args::check_sort();
+    Args::check_dirmode();
+
+    my $vol     = Args::get_vol('vol');
+    my $sort    = Args::get_sort();
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $meta    = Args::get_meta('meta');
+    my $mnt     = $Caseman::vol2mnt{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+
+    my $sp = "&nbsp;&nbsp;";
+
+    Print::print_html_header("Entries in $fname");
+
+    my (@itype, @dtype, @name, @mod, @acc, @chg, @crt, @size, @gid, @uid,
+        @meta);
+    my (@dir, @entry, @del, @realloc, @meta_int);
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: Directory listing of $fname ($meta)");
+
+    local *OUT;
+
+    # execute command
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' -f $ftype -la $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta"
+    );
+
+    # Make the big table, small table, and start the current directory
+
+    my $iurl =
+"$::PROGNAME?$Args::baseargs&dirmode=$Args::enc_args{'dirmode'}&sort=$sort";
+
+    # base number of columns in table
+    my $cols = 15;
+    $cols += 2 if ($Fs::has_ctime{$ftype});
+    $cols += 2 if ($Fs::has_crtime{$ftype});
+    $cols += 2 if ($Fs::has_mtime{$ftype});
+
+    print <<EOF1;
+<!-- Big Table -->
+<table cellspacing=\"0\" cellpadding=\"2\" border=0>
+
+<!-- Small Table -->
+<tr>
+  <td colspan=$cols>
+    <table border=0 align=\"left\" cellspacing=\"0\" cellpadding=\"2\" width=500>
+    <tr>
+      <td colspan=2><b>Current Directory:</b> <tt>
+
+        <a href=\"${iurl}&mod=$::MOD_FILE&view=$File::FILE_LIST&meta=$Fs::root_meta{$ftype}&dir=\">$mnt</a>&nbsp;
+
+EOF1
+
+    # Each file in the path will get its own link
+    $iurl .= "&mod=$::MOD_FILE&view=$File::FILE_LIST_DIR";
+    my $path = "";
+    my @dir_split = split('/', $Args::args{'dir'});
+    while (scalar @dir_split > 1) {
+        my $d = shift @dir_split;
+
+        next if ($d eq '');
+
+        $path .= "$d/";
+        print "        <a href=\"${iurl}&dir=$path\">/${d}/</a>&nbsp;\n";
+    }
+    print "        /$dir_split[0]/&nbsp;\n"
+      if (scalar @dir_split == 1);
+
+    print "      </tt></td>\n" . "    </tr>\n";
+
+    # Add Note Button
+    $iurl =
+"&$Args::baseargs&dir=$Args::enc_args{'dir'}&meta=$Args::enc_args{'meta'}";
+    if ($::USE_NOTES == 1) {
+
+        print <<EOF2;
+    <tr>
+      <td width=\"100\" align=left>
+        <a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::ENTER_FILE$iurl\" target=\"_blank\">
+          <img border=\"0\" src=\"pict/but_addnote.jpg\" width=\"89\" height=20 alt=\"Add Note About Directory\">
+         </a>
+      </td>
+EOF2
+
+    }
+
+    # Generate MD5 List Button
+    print <<EOF3;
+
+      <td width=\"206\" align=left>
+        <a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::MD5LIST$iurl\" target=\"_blank\">
+          <img border=\"0\" src=\"pict/file_b_md5list.jpg\" width=\"206\" alt=\"Generate list of MD5 values\">
+        </a>
+      </td>
+    </tr>
+  <!-- END of Little Table -->
+  </table>
+  </td>
+</tr>
+<tr>
+  <td colspan=$cols><hr></td>
+</tr>
+
+EOF3
+
+    # Make the Table and Headers
+    my $url =
+        "$::PROGNAME?mod=$::MOD_FILE&view=$File::FRAME&"
+      . "$Args::baseargs&meta=$Args::enc_args{'meta'}"
+      . "&dir=$Args::enc_args{'dir'}&dirmode=$Args::enc_args{'dirmode'}";
+
+    print "<tr valign=\"MIDDLE\" " . "background=\"$::YEL_PIX\">\n";
+
+    # Print the Headers - If the sorting mode is set to it, then don't
+    # make it a link and print a different button
+    if ($sort == $SORT_DEL) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_del_cur.jpg\" "
+          . "width=\"49\" height=20 "
+          . "alt=\"Deleted Files\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_DEL";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_del_link.jpg\" "
+          . "width=\"28\" height=20 "
+          . "alt=\"Deleted Files\">"
+          . "</a></td>\n";
+    }
+
+    # type only gets one column for two 'types'
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n"
+      . "  <th align=\"center\" background=\"$::YEL_PIX\">"
+      . "&nbsp;&nbsp;Type&nbsp;&nbsp;<br>";
+
+    if ($sort == $SORT_DTYPE) {
+        print "dir";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_DTYPE";
+        print "<a href=\"$iurl\" target=\"_parent\">dir</a>";
+    }
+
+    print "&nbsp;/&nbsp;";
+
+    if ($sort == $SORT_ITYPE) {
+        print "in</th>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_ITYPE";
+        print "<a href=\"$iurl\" target=\"_parent\">in</a></th>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    if ($sort == $SORT_NAME) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_nam_cur.jpg\" "
+          . "width=\"76\" height=20 "
+          . "alt=\"File Name\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_NAME";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_nam_link.jpg\" "
+          . "width=\"50\" height=20 "
+          . "alt=\"File Name\">"
+          . "</a></td>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    # Modified / Written
+    if ($Fs::has_mtime{$ftype}) {
+        if ($sort == $SORT_MOD) {
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_wr_cur.jpg\" "
+              . "width=\"89\" height=20 "
+              . "alt=\"Modified/Written Time\">"
+              . "</td>\n";
+        }
+        else {
+            $iurl = $url . "&sort=$SORT_MOD";
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<a href=\"$iurl\" target=\"_parent\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_wr_link.jpg\" "
+              . "width=\"60\" height=20 "
+              . "alt=\"Modified/Written Time\">"
+              . "</a></td>\n";
+        }
+        print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+    }
+
+    # Accessed
+    if ($sort == $SORT_ACC) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_acc_cur.jpg\" "
+          . "width=\"90\" height=20 "
+          . "alt=\"Access Time\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_ACC";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_acc_link.jpg\" "
+          . "width=\"66\" height=20 "
+          . "alt=\"Access Time\">"
+          . "</a></td>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    # Change
+    if ($Fs::has_ctime{$ftype}) {
+        if ($sort == $SORT_CHG) {
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_chg_cur.jpg\" "
+              . "width=\"90\" height=20 "
+              . "alt=\"Change Time\">"
+              . "</td>\n";
+        }
+        else {
+            $iurl = $url . "&sort=$SORT_CHG";
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<a href=\"$iurl\" target=\"_parent\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_chg_link.jpg\" "
+              . "width=\"62\" height=20 "
+              . "alt=\"Change Time\">"
+              . "</a></td>\n";
+        }
+        print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+    }
+
+    # Create
+    if ($Fs::has_crtime{$ftype}) {
+        if ($sort == $SORT_CRT) {
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_cre_cur.jpg\" "
+              . "width=\"84\" height=20 "
+              . "alt=\"Create Time\">"
+              . "</td>\n";
+        }
+        else {
+            $iurl = $url . "&sort=$SORT_CRT";
+            print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+              . "<a href=\"$iurl\" target=\"_parent\">"
+              . "<img border=\"0\" "
+              . "src=\"pict/file_h_cre_link.jpg\" "
+              . "width=\"59\" height=20 "
+              . "alt=\"Create Time\">"
+              . "</a></td>\n";
+        }
+        print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+    }
+
+    # Size
+    if ($sort == $SORT_SIZE) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_siz_cur.jpg\" "
+          . "width=\"53\" height=20 "
+          . "alt=\"Size\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_SIZE";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_siz_link.jpg\" "
+          . "width=\"31\" height=20 "
+          . "alt=\"Size\">"
+          . "</a></td>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    # UID
+    if ($sort == $SORT_UID) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_uid_cur.jpg\" "
+          . "width=\"49\" height=20 "
+          . "alt=\"UID\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_UID";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_uid_link.jpg\" "
+          . "width=\"27\" height=20 "
+          . "alt=\"UID\">"
+          . "</a></td>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    # GID
+    if ($sort == $SORT_GID) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_gid_cur.jpg\" "
+          . "width=\"49\" height=20 "
+          . "alt=\"GID\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_GID";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_gid_link.jpg\" "
+          . "width=\"28\" height=20 "
+          . "alt=\"GID\">"
+          . "</a></td>\n";
+    }
+
+    print "  <td background=\"$::YEL_PIX\">$sp</td>\n";
+
+    # meta
+    if ($sort == $SORT_META) {
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_meta_cur.jpg\" "
+          . "width=\"62\" height=20 "
+          . "alt=\"Meta\">"
+          . "</td>\n";
+    }
+    else {
+        $iurl = $url . "&sort=$SORT_META";
+        print "  <td align=\"left\" background=\"$::YEL_PIX\">"
+          . "<a href=\"$iurl\" target=\"_parent\">"
+          . "<img border=\"0\" "
+          . "src=\"pict/file_h_meta_link.jpg\" "
+          . "width=\"41\" height=20 "
+          . "alt=\"Meta\">"
+          . "</a></td>\n";
+    }
+    print "</tr>\n";
+
+    my $cnt = 0;
+    my %seen;
+
+    # sort fls into arrays
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if (
+/^($::REG_MTYPE)\/($::REG_MTYPE)\s*(\*?)\s*($::REG_META)(\(realloc\))?:\t(.+?)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t(\d+)\t(\d+)\t(\d+)$/o
+          )
+        {
+
+            my $lcldir = $Args::args{'dir'};
+            $dtype[$cnt]   = $1;
+            $itype[$cnt]   = $2;
+            $del[$cnt]     = $3;
+            $meta[$cnt]    = $4;
+            $realloc[$cnt] = "";
+            $realloc[$cnt] = $5 if (defined $5);
+            $name[$cnt]    = $6;
+            $mod[$cnt]     = $7;
+            $acc[$cnt]     = $8;
+            $chg[$cnt]     = $9;
+            $crt[$cnt]     = $10;
+            $size[$cnt]    = $11;
+            $gid[$cnt]     = $12;
+            $uid[$cnt]     = $13;
+
+            if ($meta[$cnt] =~ /^(\d+)(-\d+(-\d+)?)?$/) {
+                $meta_int[$cnt] = $1;
+            }
+            else {
+                $meta_int[$cnt] = $meta[$cnt];
+            }
+
+            # See if we have already seen this file yet
+            if (exists $seen{"$name[$cnt]-$meta[$cnt]"}) {
+                my $prev_cnt = $seen{"$name[$cnt]-$meta[$cnt]"};
+
+                # If we saw it while it was deleted, & it
+                # is now undel, then update it
+                if (   ($del[$cnt] eq "")
+                    && ($del[$prev_cnt] eq '*'))
+                {
+                    $del[$prev_cnt] = $del[$cnt];
+                }
+                next;
+
+                # Add it to the seen list
+            }
+            else {
+                $seen{"$name[$cnt]-$meta[$cnt]"} = $cnt;
+            }
+
+            # We must adjust the dir for directories
+            if ($itype[$cnt] eq 'd') {
+
+                # special cases for .. and .
+                if ($name[$cnt] eq '..') {
+                    my @dirs = split('/', $lcldir);
+                    my $i;
+                    $lcldir = "";
+                    for ($i = 0; $i < $#dirs; $i++) {
+                        $lcldir .= ($dirs[$i] . '/');
+                    }
+                }
+                elsif ($name[$cnt] ne '.') {
+                    $lcldir .= ($name[$cnt] . '/');
+                }
+                $name[$cnt] .= '/';
+            }
+            else {
+                $lcldir .= $name[$cnt];
+            }
+
+            # format the date so that the time and time zone are on the
+            # same line
+            $mod[$cnt] = "$1&nbsp;$2"
+              if ($mod[$cnt] =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            $acc[$cnt] = "$1&nbsp;$2"
+              if ($acc[$cnt] =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            $chg[$cnt] = "$1&nbsp;$2"
+              if ($chg[$cnt] =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            $crt[$cnt] = "$1&nbsp;$2"
+              if ($crt[$cnt] =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            $dir[$cnt]   = Args::url_encode($lcldir);
+            $entry[$cnt] = $cnt;
+            $cnt++;
+
+        }
+
+        # We missed it for some reason
+        else {
+            print
+"<tr><td colspan=10>Error Parsing File (Invalid Characters?):<br>$_</td></tr>\n";
+        }
+    }
+    close(OUT);
+
+    if ($cnt == 0) {
+        print "</table>\n<center>No Contents</center>\n";
+        return 0;
+    }
+
+    # Sort the above array based on the sort argument
+    my @sorted;    # an array of indices
+
+    if ($sort == $SORT_DTYPE) {
+        @sorted =
+          sort { $dtype[$a] cmp $dtype[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_ITYPE) {
+        @sorted =
+          sort { $itype[$a] cmp $itype[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_NAME) {
+        @sorted = sort { lc($name[$a]) cmp lc($name[$b]) } @entry;
+    }
+    elsif ($sort == $SORT_MOD) {
+        @sorted =
+          sort { $mod[$a] cmp $mod[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_ACC) {
+        @sorted =
+          sort { $acc[$a] cmp $acc[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_CHG) {
+        @sorted =
+          sort { $chg[$a] cmp $chg[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_CRT) {
+        @sorted =
+          sort { $crt[$a] cmp $crt[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_SIZE) {
+        @sorted =
+          sort { $size[$a] <=> $size[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_UID) {
+        @sorted =
+          sort { $uid[$a] <=> $uid[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_GID) {
+        @sorted =
+          sort { $gid[$a] <=> $gid[$b] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+    elsif ($sort == $SORT_META) {
+        @sorted = sort {
+            $meta_int[$a] <=> $meta_int[$b]
+              or lc($name[$a]) cmp lc($name[$b])
+        } @entry;
+    }
+    elsif ($sort == $SORT_DEL) {
+        @sorted =
+          sort { $del[$b] cmp $del[$a] or lc($name[$a]) cmp lc($name[$b]) }
+          @entry;
+    }
+
+    # print them based on sorting
+    my $row = 0;
+    foreach my $i (@sorted) {
+        my $url;
+        my $target;
+        my $color;
+        my $lcolor;
+        if ($del[$i] eq '*') {
+            $color =
+              "<font color=\"" . $::DEL_COLOR[$realloc[$i] ne ""] . "\">";
+            $lcolor = $color;
+        }
+        else {
+            $color  = "<font color=\"$::NORM_COLOR\">";
+            $lcolor = "<font color=\"$::LINK_COLOR\">";
+        }
+
+        # directories have different targets and view values
+        if ($itype[$i] eq 'd') {
+            $target = "list";
+            $url    =
+                "$::PROGNAME?mod=$::MOD_FILE&view=$File::FILE_LIST&"
+              . "$Args::baseargs&meta=$meta_int[$i]"
+              . "&sort=$sort&dir=$dir[$i]&dirmode=$Args::enc_args{'dirmode'}";
+        }
+        else {
+            $target = "content";
+            $url    =
+                "$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR&"
+              . "$Args::baseargs&meta=$meta[$i]"
+              . "&sort=$sort&dir=$dir[$i]&dirmode=$Args::enc_args{'dirmode'}";
+            if ($del[$i] eq '*') {
+                $url .= "&recmode=$File::REC_YES";
+            }
+            else {
+                $url .= "&recmode=$File::REC_NO";
+            }
+        }
+
+        if (($row % 2) == 0) {
+            print
+"<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR\">\n  <td align=\"center\">";
+        }
+        else {
+            print
+"<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR_TABLE\">\n  <td align=\"center\">";
+        }
+
+        print "<img src=\"pict/file_b_check.jpg\" border=\"0\">\n"
+          if ($del[$i] eq '*');
+
+        print "</td>\n"
+          . "  <td>$sp</td>\n"
+          . "  <td align=\"center\">${color}$dtype[$i]&nbsp;/&nbsp;$itype[$i]</td>\n"
+          . "  <td>$sp</td>\n";
+
+        # for valid files and directories make a link
+        # Special rule for $OrphanFiles directory and HFS directories, which have a size of 0
+        if (
+               ($meta_int[$i] >= $Fs::first_meta{$ftype})
+            && (($size[$i] > 0) || (($name[$i] =~ /^\$Orphan/) && ($itype[$i] eq 'd')) || (($ftype =~ /hfs/) && ($itype[$i] eq 'd')))
+            && (   ($itype[$i] eq 'r')
+                || ($itype[$i] eq 'd')
+                || ($itype[$i] eq 'v'))
+          )
+        {
+            print "  <td><a href=\"$url\" target=\"$target\">$lcolor";
+        }
+        else {
+            print "  <td>$color";
+        }
+        print "<tt>"
+          . Print::html_encode($name[$i])
+          . "</tt></td>\n"
+          . "  <td>$sp</td>\n";
+        print "  <td>${color}$mod[$i]</td>\n" . "  <td>$sp</td>\n"
+          if ($Fs::has_mtime{$ftype});
+        print "  <td>${color}$acc[$i]</td>\n" . "  <td>$sp</td>\n";
+        print "  <td>${color}$chg[$i]</td>\n" . "  <td>$sp</td>\n"
+          if ($Fs::has_ctime{$ftype});
+        print "  <td>${color}$crt[$i]</td>\n" . "  <td>$sp</td>\n"
+          if ($Fs::has_crtime{$ftype});
+        print "  <td>${color}$size[$i]</td>\n"
+          . "  <td>$sp</td>\n"
+          . "  <td>${color}$uid[$i]</td>\n"
+          . "  <td>$sp</td>\n"
+          . "  <td>${color}$gid[$i]</td>\n"
+          . "  <td>$sp</td>\n";
+
+        # for a valid meta, make a link to meta browsing mode
+        if ($meta_int[$i] >= $Fs::first_meta{$ftype}) {
+            my $iurl =
+"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs&meta=$meta[$i]";
+            print "<td><a href=\"$iurl\" target=\"_top\">$lcolor";
+        }
+        else {
+            print "<td>$color";
+        }
+        print "$meta[$i]</a> $realloc[$i]</td>\n</tr>\n";
+
+        $row++;
+    }
+
+    print "</table>\n";
+    Print::print_html_footer();
+    return 0;
+
+};    #end of FIL_LIST
+
+# This takes a directory name as an argument and converts it to
+# the meta value and calls FIL_LIST
+#
+# The meta value can be anything when this is run, it will be
+# overwritten
+sub file_list_dir {
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $dir     = Args::get_dir();
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    Print::log_host_inv(
+        "$Args::args{'vol'}: Finding meta data address for $dir");
+
+    # Use 'ifind -n' to get the meta data address for the given name
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ifind' -f $ftype -n '$dir'  -o $offset -i $imgtype $img");
+    my $meta;
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        $meta = $1
+          if (/^($::REG_META)$/);
+    }
+    close(OUT);
+
+    Print::print_check_err("Error finding meta data address for $dir")
+      unless (defined $meta);
+
+    Print::print_check_err("Error finding meta data address for $dir: $meta")
+      unless ($meta =~ /^$::REG_META$/);
+
+    # Verify it is a directory with istat
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/istat' -f $ftype  -o $offset -i $imgtype $img $meta");
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+
+        # This is a directory
+        if (   (/mode:\s+d/)
+            || (/File Attributes: Directory/)
+            || (/^Flags:.*?Directory/))
+        {
+            close(OUT);
+
+            # Set the meta variables
+            $Args::enc_args{'meta'} = $Args::args{'meta'} = $meta;
+
+            $Args::args{'dir'} .= "/"
+              unless ($Args::args{'dir'} =~ /.*?\/$/);
+            $Args::enc_args{'dir'} .= "/"
+              unless ($Args::enc_args{'dir'} =~ /.*?\/$/);
+
+            # List the directory contents
+            file_list();
+
+            return 0;
+        }
+    }
+    close(OUT);
+
+    # This is not a directory, so just give a link
+    Print::print_html_header("");
+
+    my $meta_int = $meta;
+    $meta_int = $1 if ($meta_int =~ /(\d+)-\d+(-\d+)?/);
+
+    my $recmode = $File::REC_NO;
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ils' -f $ftype -e  -o $offset -i $imgtype $img $meta_int");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        chop;
+        next unless ($_ =~ /^$meta/);
+        if ($_ =~ /^$meta\|f/) {
+            $recmode = $File::REC_YES;
+        }
+        elsif ($_ =~ /^$meta\|a/) {
+            $recmode = $File::REC_NO;
+        }
+        else {
+            Print::print_err("Error parsing ils output: $_");
+        }
+    }
+    close(OUT);
+
+    print <<EOF;
+
+<tt>$dir</tt> (
+<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs&meta=$meta&recmode=$recmode\" target=\"_top\">
+meta $meta</a>) is not a directory.
+
+<p>
+<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR&$Args::baseargs&meta=$meta&dir=$dir&recmode=$recmode\" target=\"content\">
+  <img src=\"pict/but_viewcont.jpg\" height=20 width=123 alt=\"view contents\" border=\"0\">
+</a>
+
+EOF
+
+    Print::print_html_footer();
+    return 1;
+
+}
+
+# List the files that meet a certain pattern
+sub file_list_file {
+    Args::check_sort();
+    Args::check_dirmode();
+    Args::check_dir();
+
+    my $vol     = Args::get_vol('vol');
+    my $mnt     = $Caseman::vol2mnt{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $meta    = $Fs::root_meta{$ftype};
+    my $sort    = Args::get_sort();
+    my $dirmode = Args::get_dirmode();
+    my $dir     = Args::get_dir();
+
+    Print::print_html_header(
+        "Filtered files on $Caseman::vol2sname{$vol} $mnt");
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    my $sp = "&nbsp;&nbsp;";
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: Listing all files with $dir");
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' -f $ftype -lpr $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta"
+    );
+
+    print "<b>All files with \'<tt>$dir</tt>\' in the name</b><p>\n"
+      . "<a href=\"$::PROGNAME?$Args::baseargs&dirmode=$Args::enc_args{'dirmode'}"
+      . "&sort=$sort&mod=$::MOD_FILE&view=$File::FILE_LIST"
+      . "&meta=$Fs::root_meta{$ftype}&dir=\">"
+      . "<img border=\"0\" src=\"pict/file_b_allfiles.jpg\" width=\"112\" "
+      . "alt=\"Show All Files\"></a>\n" . "<hr>"
+      . "<table cellspacing=\"0\" cellpadding=\"2\"  border=0>\n"
+      . "<tr valign=\"MIDDLE\" align=\"left\" "
+      . "background=\"$::YEL_PIX\">\n";
+
+    # deleted
+    print "<td align=\"left\">"
+      . "<img border=\"0\" src=\"pict/file_h_del_link.jpg\" "
+      . "width=\"28\" height=20 alt=\"Deleted Files\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Type
+    print "<th align=\"center\">&nbsp;&nbsp;Type&nbsp&nbsp;<br>"
+      . "dir&nbsp;/&nbsp;in</th>"
+      . "<td>$sp</td>\n";
+
+    # Name
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_nam_link.jpg\" "
+      . "width=\"50\" height=20 "
+      . "alt=\"File Name\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Mod / Written
+    if ($Fs::has_mtime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_wr_link.jpg\" "
+          . "width=\"60\" "
+          . "alt=\"Written Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Access
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_acc_link.jpg\" "
+      . "width=\"66\" height=20 "
+      . "alt=\"Access Time\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Change
+    if ($Fs::has_ctime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_chg_link.jpg\" "
+          . "width=\"62\" "
+          . "alt=\"Change Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Create
+    if ($Fs::has_crtime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_cre_link.jpg\" "
+          . "width=\"59\" "
+          . "alt=\"Create Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Size
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_siz_link.jpg\" "
+      . "width=\"31\" height=20 "
+      . "alt=\"Size\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # UID
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_uid_link.jpg\" "
+      . "width=\"27\" height=20 "
+      . "alt=\"UID\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # GID
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_gid_link.jpg\" "
+      . "width=\"28\" height=20 "
+      . "alt=\"GID\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Meta
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_meta_link.jpg\" "
+      . "width=\"41\" height=20 "
+      . "alt=\"Meta\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    my $row = 0;
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if (
+/^($::REG_MTYPE)\/($::REG_MTYPE)\s*(\*?)\s*($::REG_META)(\(realloc\))?:\t(.+?)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t(\d+)\t(\d+)\t(\d+)$/o
+          )
+        {
+
+            # We have to remove the / from the beginning of the file name so
+            # save all values so they aren't lost
+            my $dt = $1;
+            my $it = $2;
+            my $d  = $3;
+            my $i  = $4;
+            my $r  = 0;
+            $r = 1 if (defined $5);
+            my $n  = $6;
+            my $m  = $7;
+            my $a  = $8;
+            my $c  = $9;
+            my $cr = $10;
+            my $s  = $11;
+            my $g  = $12;
+            my $u  = $13;
+
+            if ($n =~ /^\/(.*)/) {
+                $n = $1;
+            }
+
+            my $p = "";
+            my $f = $n;
+
+            if ($n =~ /^(.+?)\/([^\/]+)$/) {
+                $p = $1;
+                $f = $2;
+            }
+
+            next unless ($f =~ /$dir/i);
+
+            my $enc_n = Args::url_encode($n);
+            my $iurl  =
+"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs&meta=$i";
+            my $i_int = $i;
+            $i_int = $1 if ($i =~ /(\d+)-\d+-\d+/);
+
+            if (($row % 2) == 0) {
+                print "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR\">\n";
+            }
+            else {
+                print "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR_TABLE\">\n";
+            }
+
+            print "<td align=\"left\">\n";
+
+            my $color;
+            my $lcolor;
+            if ($d eq '*') {
+                $color  = "<font color=\"" . $::DEL_COLOR[$r] . "\">";
+                $lcolor = $color;
+
+                print "<img src=\"pict/file_b_check.jpg\" border=\"0\">\n";
+
+            }
+            else {
+                $color  = "<font color=\"$::NORM_COLOR\">";
+                $lcolor = "<font color=\"$::LINK_COLOR\">";
+                print "&nbsp;";
+            }
+
+            print "</td><td>$sp</td>";
+
+            print "<td align=\"center\">$color"
+              . "$dt&nbsp;/&nbsp;$it</td>"
+              . "<td>$sp</td>\n";
+
+            if ($it eq 'd') {
+                my $url =
+                    "$::PROGNAME?mod=$::MOD_FILE&"
+                  . "view=$File::FILE_LIST&$Args::baseargs&meta=$i"
+                  . "&sort=$sort&dir=$enc_n&dirmode=$dirmode";
+
+                print "<td>";
+                if ($i_int >= $Fs::first_meta{$ftype}) {
+                    print "<a href=\"$url\" target=\"_self\">$lcolor";
+                }
+                else {
+                    print "$color";
+                }
+                print "<tt>"
+                  . Print::html_encode($mnt . $n)
+                  . "</tt></td>"
+                  . "<td>$sp</td>\n";
+            }
+            else {
+                my $url =
+                    "$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR&"
+                  . "$Args::baseargs&meta=$i&sort=$sort&dir=$enc_n";
+
+                if ($d eq '*') {
+                    $url .= "&recmode=$File::REC_YES";
+                }
+                else {
+                    $url .= "&recmode=$File::REC_NO";
+                }
+
+                print "<td>";
+                if (($i_int >= $Fs::first_meta{$ftype}) && ($it eq 'r')) {
+                    print "<a href=\"$url\" target=\"content\">$lcolor";
+                }
+                else {
+                    print "$color";
+                }
+                print "<tt>$mnt$n</tt></td>" . "<td>$sp</td>\n";
+            }
+
+            $m = "$1&nbsp;$2"
+              if ($m =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $a = "$1&nbsp;$2"
+              if ($a =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $c = "$1&nbsp;$2"
+              if ($c =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $cr = "$1&nbsp;$2"
+              if ($cr =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            print "<td>$color$m</td>" . "<td>$sp</td>\n"
+              if ($Fs::has_mtime{$ftype});
+
+            print "<td>$color$a</td>" . "<td>$sp</td>\n";
+            print "<td>$color$c</td>" . "<td>$sp</td>\n"
+              if ($Fs::has_ctime{$ftype});
+            print "<td>$color$cr</td>" . "<td>$sp</td>\n"
+              if ($Fs::has_crtime{$ftype});
+
+            print "<td>$color$s</td>"
+              . "<td>$sp</td>\n"
+              . "<td>$color$g</td>"
+              . "<td>$sp</td>\n"
+              . "<td>$color$u</td>"
+              . "<td>$sp</td>\n";
+
+            print "<td>";
+            if ($i_int >= $Fs::first_meta{$ftype}) {
+                print "<a href=\"$iurl\" target=\"_top\">";
+                print "$lcolor$i</a>";
+            }
+            else {
+                print "$color$i";
+            }
+            print " (realloc)" if $r;
+            print "</td></tr>\n";
+        }
+        else {
+            print "Error Parsing File (invalid characters?)<br>: $_\n<br>";
+        }
+
+        $row++;
+    }
+    close(OUT);
+    print "</table>\n";
+
+    print "<center>No files found with that pattern</center>\n"
+      if ($row == 0);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# display deleted files only
+#
+# Sorting should be added to this
+sub file_list_del {
+    Args::check_sort();
+    Args::check_dirmode();
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $mnt     = $Caseman::vol2mnt{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $meta    = $Fs::root_meta{$ftype};
+    my $sort    = Args::get_sort();
+    my $dirmode = Args::get_dirmode();
+
+    Print::print_html_header("Deleted files on $Caseman::vol2sname{$vol} $mnt");
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    my $sp = "&nbsp;&nbsp;";
+
+    Print::log_host_inv("$Caseman::vol2sname{$vol}: Listing all deleted files");
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' -f $ftype -ldr $tz -s $Caseman::ts  -o $offset -i $imgtype $img $meta"
+    );
+
+    print "<b>All Deleted Files</b><p><hr>"
+      . "<table cellspacing=\"0\" cellpadding=\"2\"  border=0>\n"
+      . "<tr valign=\"MIDDLE\" align=\"left\" "
+      . "background=\"$::YEL_PIX\">\n";
+
+    # Type
+    print "<th align=\"center\">&nbsp;&nbsp;Type&nbsp&nbsp;<br>"
+      . "dir&nbsp;/&nbsp;in</th>"
+      . "<td>$sp</td>\n";
+
+    # Name
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_nam_link.jpg\" "
+      . "width=\"50\" height=20 "
+      . "alt=\"File Name\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Mod / Written
+    if ($Fs::has_mtime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_wr_link.jpg\" "
+          . "width=\"60\" "
+          . "alt=\"Written Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Access
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_acc_link.jpg\" "
+      . "width=\"66\" height=20 "
+      . "alt=\"Access Time\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Change
+    if ($Fs::has_ctime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_chg_link.jpg\" "
+          . "width=\"62\" "
+          . "alt=\"Change Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Create
+    if ($Fs::has_crtime{$ftype}) {
+        print "  <td><img border=\"0\" "
+          . "src=\"pict/file_h_cre_link.jpg\" "
+          . "width=\"59\" "
+          . "alt=\"Create Time\">"
+          . "</td>\n"
+          . "<td>$sp</td>\n";
+    }
+
+    # Size
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_siz_link.jpg\" "
+      . "width=\"31\" height=20 "
+      . "alt=\"Size\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # UID
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_uid_link.jpg\" "
+      . "width=\"27\" height=20 "
+      . "alt=\"UID\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # GID
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_gid_link.jpg\" "
+      . "width=\"28\" height=20 "
+      . "alt=\"GID\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    # Meta
+    print "  <td><img border=\"0\" "
+      . "src=\"pict/file_h_meta_link.jpg\" "
+      . "width=\"41\" height=20 "
+      . "alt=\"Meta\">"
+      . "</td>\n"
+      . "<td>$sp</td>\n";
+
+    my $row = 0;
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+
+        if (
+/^($::REG_MTYPE)\/($::REG_MTYPE)\s*(\*?)\s*($::REG_META)(\(realloc\))?:\t(.+?)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t($::REG_DATE)\t(\d+)\t(\d+)\t(\d+)$/o
+          )
+        {
+
+            # We have to remove the / from the beginning of the file name so
+            # save all values so they aren't lost
+            my $dt = $1;
+            my $it = $2;
+            my $d  = $3;
+            my $i  = $4;
+            my $r  = 0;
+            $r = 1 if (defined $5);
+            my $n  = $6;
+            my $m  = $7;
+            my $a  = $8;
+            my $c  = $9;
+            my $cr = $10;
+            my $s  = $11;
+            my $g  = $12;
+            my $u  = $13;
+
+            if ($n =~ /^\/(.*)/) {
+                $n = $1;
+            }
+            my $enc_n = Args::url_encode($n);
+            my $iurl  =
+"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs&meta=$i";
+            my $i_int = $i;
+            $i_int = $1 if ($i =~ /(\d+)-\d+-\d+/);
+
+            if (($row % 2) == 0) {
+                print "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR\">\n";
+            }
+            else {
+                print "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR_TABLE\">\n";
+            }
+
+            print "<td align=\"center\"><font color=\"$::DEL_COLOR[$r]\">"
+              . "$dt&nbsp;/&nbsp;$it</td>"
+              . "<td>$sp</td>\n";
+
+            if ($it eq 'd') {
+                my $url =
+                    "$::PROGNAME?mod=$::MOD_FILE&"
+                  . "view=$File::FILE_LIST&$Args::baseargs&meta=$i"
+                  . "&sort=$sort&dir=$enc_n&dirmode=$dirmode";
+
+                print "<td>";
+                if ($i_int >= $Fs::first_meta{$ftype}) {
+                    print "<a href=\"$url\" target=\"_self\">";
+                }
+                print "<font color=\"$::DEL_COLOR[$r]\"><tt>"
+                  . Print::html_encode($mnt . $n)
+                  . "</tt></td>"
+                  . "<td>$sp</td>\n";
+            }
+            else {
+                my $url =
+                    "$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR&"
+                  . "$Args::baseargs&meta=$i&sort=$sort&dir=$enc_n"
+                  . "&recmode=$File::REC_YES";
+
+                print "<td>";
+                if (($i_int >= $Fs::first_meta{$ftype}) && ($it eq 'r')) {
+                    print "<a href=\"$url\" target=\"content\">";
+                }
+                print "<font color=\"$::DEL_COLOR[$r]\"><tt>"
+                  . Print::html_encode($mnt . $n)
+                  . "</tt></td>"
+                  . "<td>$sp</td>\n";
+            }
+
+            $m = "$1&nbsp;$2"
+              if ($m =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $a = "$1&nbsp;$2"
+              if ($a =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $c = "$1&nbsp;$2"
+              if ($c =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+            $cr = "$1&nbsp;$2"
+              if ($cr =~ /($::REG_DAY\s+$::REG_TIME)\s+($::REG_ZONE2)/o);
+
+            print "<td><font color=\"$::DEL_COLOR[$r]\">$m</td>"
+              . "<td>$sp</td>\n"
+              if ($Fs::has_mtime{$ftype});
+
+            print "<td><font color=\"$::DEL_COLOR[$r]\">$a</td>"
+              . "<td>$sp</td>\n";
+            print "<td><font color=\"$::DEL_COLOR[$r]\">$c</td>"
+              . "<td>$sp</td>\n"
+              if ($Fs::has_ctime{$ftype});
+            print "<td><font color=\"$::DEL_COLOR[$r]\">$cr</td>"
+              . "<td>$sp</td>\n"
+              if ($Fs::has_crtime{$ftype});
+
+            print "<td><font color=\"$::DEL_COLOR[$r]\">$s</td>"
+              . "<td>$sp</td>\n"
+              . "<td><font color=\"$::DEL_COLOR[$r]\">$g</td>"
+              . "<td>$sp</td>\n"
+              . "<td><font color=\"$::DEL_COLOR[$r]\">$u</td>"
+              . "<td>$sp</td>\n";
+
+            print "<td>";
+            if ($i_int >= $Fs::first_meta{$ftype}) {
+                print "<a href=\"$iurl\" target=\"_top\">";
+            }
+            print "<font color=\"$::DEL_COLOR[$r]\">$i</a>";
+            print " (realloc)" if $r;
+            print "</td></tr>\n";
+        }
+        else {
+            print "Error Parsing File (invalid characters?)<br>: $_\n<br>";
+        }
+
+        $row++;
+    }
+    close(OUT);
+    print "</table>\n";
+
+    print "<center>None</center>\n"
+      if ($row == 0);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Content Frame
+# This creates two frames for the lower rhs frame
+#
+sub content_fr {
+    Print::print_html_header_frameset("");
+
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    print "<frameset rows=\"65,*\">\n";
+
+    my $recmode = $File::REC_NO;
+
+    if (exists $Args::enc_args{'recmode'}) {
+        $recmode = $Args::enc_args{'recmode'};
+    }
+    else {
+
+        # We need to get the allocation status of this structure
+        my $meta_int = $meta;
+        $meta_int = $1 if ($meta_int =~ /(\d+)-\d+(-\d+)?/);
+
+        local *OUT;
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ils' -f $ftype -e  -o $offset -i $imgtype $img $meta_int"
+        );
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+            chop;
+            next unless ($_ =~ /^$meta/);
+            if ($_ =~ /^$meta\|f/) {
+                $recmode = $File::REC_YES;
+            }
+            elsif ($_ =~ /^$meta\|a/) {
+                $recmode = $File::REC_NO;
+            }
+            else {
+                Print::print_check_err("Error parsing ils output: $_");
+            }
+        }
+    }
+    close(OUT);
+
+    # Get the file type so we can show the thumb nails automatically
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r  -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype  -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+
+    my $apptype = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $apptype = "Error getting file type"
+      if ((!defined $apptype) || ($apptype eq ""));
+
+    # The menu for the different viewing options
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_MENU&"
+      . "$Args::baseargs&dir=$Args::enc_args{'dir'}"
+      . "&meta=$Args::enc_args{'meta'}&sort=$FIL_SORT_ASC&recmode=$recmode\">\n";
+
+    # Print the image thumbnail
+    if (($apptype =~ /image data/) || ($apptype =~ /PC bitmap data/)) {
+        print "<frame src=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_IMG"
+          . "&$Args::baseargs&dir=$Args::enc_args{'dir'}"
+          . "&meta=$Args::enc_args{'meta'}"
+          . "&sort=$FIL_SORT_ASC&recmode=$recmode\" name=\"cont2\">\n</frameset>";
+    }
+    else {
+
+        # Where the actual content will be displayed
+        print "<frame src=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT"
+          . "&$Args::baseargs&dir=$Args::enc_args{'dir'}"
+          . "&meta=$Args::enc_args{'meta'}"
+          . "&sort=$FIL_SORT_ASC&recmode=$recmode\" name=\"cont2\">\n</frameset>";
+    }
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# This is the index for the lower rhs frame
+# Choose the content display type here
+sub content_menu {
+    Args::check_sort();
+    Args::check_recmode();
+
+    Print::print_html_header("");
+
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $recmode = Args::get_recmode();
+
+    # Get the file type
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r  -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype  -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+
+    my $apptype = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $apptype = "Error getting file type"
+      if ((!defined $apptype) || ($apptype eq ""));
+
+    # We already have the path in the content window below, so save space
+    # print "<center><tt>$mnt$Args::args{'dir'}</tt>\n";
+    print "<center>\n";
+
+    my $url =
+        "&$Args::baseargs&dir=$Args::enc_args{'dir'}"
+      . "&meta=$Args::enc_args{'meta'}&recmode=$recmode";
+
+    # Print the options for output display
+    print "<table cellspacing=\"0\" cellpadding=\"2\">\n<tr>\n"
+      . "<td>ASCII (<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT&"
+      . "sort=$FIL_SORT_ASC$url\" target=\"cont2\">display</a> - "
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::REPORT&"
+      . "sort=$FIL_SORT_ASC$url\" target=\"_blank\">report</a>)</td>\n"
+      . "<td>*</td>\n"
+      . "<td>Hex ("
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT&"
+      . "sort=$FIL_SORT_HEX$url\" target=\"cont2\">display</a> - "
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::REPORT&"
+      . "sort=$FIL_SORT_HEX$url\" target=\"_blank\">report</a>)</td>\n"
+      . "<td>*</td>\n"
+      . "<td>ASCII Strings ("
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT&"
+      . "sort=$FIL_SORT_STR$url\" target=\"cont2\">display</a> - "
+      . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::REPORT&"
+      . "sort=$FIL_SORT_STR$url\" target=\"_blank\">report</a>)</td>\n"
+      . "<td>*</td>\n"
+      . "<td><a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::EXPORT&$url\">"
+      . "Export</a></td>\n";
+
+    # if the file is either image or HTML, then let them view it
+    if (   ($apptype =~ /image data/)
+        || ($apptype =~ /PC bitmap data/))
+    {
+        print "<td>*</td>\n<td><a href=\"$::PROGNAME?"
+          . "mod=$::MOD_FILE&view=$File::CONT_IMG$url\""
+          . "target=\"cont2\">View</a></td>\n";
+    }
+    elsif ($apptype =~ /HTML document text/) {
+        print "<td>*</td>\n<td><a href=\"$::PROGNAME?"
+          . "mod=$::MOD_APPVIEW&view=$Appview::CELL_FRAME$url\""
+          . "target=\"_blank\">View</a></td>\n";
+    }
+
+    print "<td>*</td>\n"
+      . "<td><a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::ENTER_FILE$url\" target=\"_blank\">"
+      . "Add Note</a></td>\n"
+      if ($::USE_NOTES == 1);
+
+    print "</tr></table>\n";
+
+    print "File Type: $apptype\n";
+    print
+      "<br><font color=\"$::DEL_COLOR[0]\">Deleted File Recovery Mode</font>\n"
+      if ($recmode == $File::REC_YES);
+    print "</center>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+#
+# Display the actual content here
+#
+# NOTE: This has a media type of raw text
+#
+sub content {
+    Args::check_sort();
+    Args::check_recmode();
+
+    Print::print_text_header();
+
+    my $sort    = Args::get_sort();
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $mnt     = $Caseman::vol2mnt{$vol};
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $recflag = "";
+    $recflag = " -r " if (Args::get_recmode() == $File::REC_YES);
+
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+
+    local *OUT;
+    if ($sort == $FIL_SORT_ASC) {
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Viewing $fname ($meta) as ASCII");
+
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta"
+        );
+
+        print "Contents Of File: $fname\n\n\n";
+        Print::print_output($_) while ($_ = Exec::read_pipe_data(*OUT, 1024));
+        close(OUT);
+    }
+    elsif ($sort == $FIL_SORT_HEX) {
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Viewing $fname ($meta) as Hex");
+
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta"
+        );
+
+        print "Hex Contents Of File: $fname\n\n\n";
+        my $offset = 0;
+        while ($_ = Exec::read_pipe_data(*OUT, 1024)) {
+            Print::print_hexdump($_, $offset * 1024);
+            $offset++;
+        }
+        close(OUT);
+    }
+    elsif ($sort == $FIL_SORT_STR) {
+        Print::log_host_inv(
+            "$Caseman::vol2sname{$vol}: Viewing $fname ($meta) as strings");
+
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::TSKDIR/srch_strings' -a"
+        );
+
+        print "ASCII String Contents Of File: $fname\n\n\n\n";
+        Print::print_output($_) while ($_ = Exec::read_pipe_line(*OUT));
+        close(OUT);
+    }
+
+    Print::print_text_footer();
+
+    return 0;
+}
+
+sub content_img {
+
+    Print::print_html_header("image content");
+
+    my $vol   = Args::get_vol('vol');
+    my $mnt   = $Caseman::vol2mnt{$vol};
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+
+    my $url =
+        "&$Args::baseargs&meta=$Args::enc_args{'meta'}"
+      . "&dir=$Args::enc_args{'dir'}&"
+      . "cell_mode=2&recmode=$Args::enc_args{'recmode'}";
+
+    print "<tt>$fname</tt><br><br>\n"
+      . "<table><tr>\n"
+      . "<td width=250 align=\"center\">"
+      . "<b>Thumbnail:</b><br>"
+      . "<img src=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_CONT${url}\" width=\"200\"></td>\n"
+      . "<td valign=top>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_APPVIEW&view=$Appview::CELL_CONT${url}\" "
+      . "target=_blank>View Full Size Image</a><br>\n</td>\n"
+      . "</tr></table>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Export the contents of a file
+sub export {
+
+    my $meta = Args::get_meta('meta');
+    my $vol  = Args::get_vol('vol');
+    my $mnt  = $Caseman::vol2mnt{$vol};
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+
+    my $recflag = "";
+
+    $recflag = " -r "
+      if ( (exists $Args::enc_args{'recmode'})
+        && ($Args::enc_args{'recmode'} == $File::REC_YES));
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: Saving contents of $fname ($meta)");
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta"
+    );
+
+    # We can't trust the mnt and dir values (since there
+    # could be bad ASCII values, so only allow basic chars into name
+    $fname =~ tr/a-zA-Z0-9\_\-\@\,/\./c;
+    $fname = $1 if ($fname =~ /^\.(.*)$/);
+
+    Print::print_oct_header("$vol-${fname}");
+
+    print "$_" while ($_ = Exec::read_pipe_data(*OUT, 1024));
+
+    Print::print_oct_footer();
+
+    return 0;
+}
+
+# Display a report for a file
+# This is intended to have its own window
+#
+sub report {
+    Args::check_sort();
+
+    my $sort = Args::get_sort();
+    my $vol  = Args::get_vol('vol');
+    my $meta = Args::get_meta('meta');
+    my $mnt  = $Caseman::vol2mnt{$vol};
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $type;
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    my $recflag = "";
+
+    $recflag = " -r "
+      if ( (exists $Args::enc_args{'recmode'})
+        && ($Args::enc_args{'recmode'} == $File::REC_YES));
+
+    # We can't trust the mnt and dir values (since there
+    # could be bad ASCII values, so only allow basic chars into name
+    $fname =~ tr/a-zA-Z0-9\_\-\@\,/\./c;
+    $fname = $1 if ($fname =~ /^\.+(.*)$/);
+    $fname = $1 if ($fname =~ /^(.*?)\.+$/);
+
+    Print::print_text_header("filename=$Args::args{'vol'}-${fname}.txt");
+
+    $fname = "$mnt$Args::args{'dir'}";
+    if ($sort == $FIL_SORT_ASC) {
+        Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Generating ASCII report for $fname ($meta)"
+        );
+        $type = "ASCII";
+    }
+    elsif ($sort == $FIL_SORT_HEX) {
+        Print::log_host_inv(
+            "$Args::args{'vol'}: Generating Hex report for $fname ($meta)");
+        $type = "Hex";
+    }
+    elsif ($sort == $FIL_SORT_STR) {
+        Print::log_host_inv(
+"$Args::args{'vol'}: Generating ASCII strings report for $fname ($meta)"
+        );
+        $type = "string";
+    }
+    else {
+        print "\n\ninvalid sort value";
+        return 1;
+    }
+
+    # NOTE: There is a space in the beginning of the separator lines in
+    # order to make clear@stamper.itconsult.co.uk time stamping happy
+    # I think it confuses the lines that begin at the lhs with PGP
+    # headers and will remove the second line.
+    #
+    print "                  Autopsy $type Report\n\n"
+      . "-" x 70 . "\n"
+      . "                   GENERAL INFORMATION\n\n"
+      . "File: $fname\n";
+
+    # Calculate the MD5 value
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::MD5_EXE'"
+    );
+    my $md5 = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $md5 = "Error getting MD5 Value"
+      if ((!defined $md5) || ($md5 eq ""));
+
+    chomp $md5;
+    if ($recflag eq "") {
+        print "MD5 of file: $md5\n";
+    }
+    else {
+        print "MD5 of recovered file: $md5\n";
+    }
+
+    if ($::SHA1_EXE ne "") {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::SHA1_EXE'"
+        );
+        my $sha1 = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $sha1 = "Error getting SHA-1 Value"
+          if ((!defined $sha1) || ($sha1 eq ""));
+
+        chomp $sha1;
+        if ($recflag eq "") {
+            print "SHA-1 of file: $sha1\n";
+        }
+        else {
+            print "SHA-1 of recovered file: $sha1\n";
+        }
+    }
+
+    if ($sort == $FIL_SORT_STR) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::TSKDIR/srch_strings' -a | '$::MD5_EXE'"
+        );
+        $md5 = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $md5 = "Error getting MD5 Value"
+          if ((!defined $md5) || ($md5 eq ""));
+
+        chomp $md5;
+        print "MD5 of ASCII strings: $md5\n";
+
+        if ($::SHA1_EXE ne "") {
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::TSKDIR/srch_strings' -a | '$::SHA1_EXE'"
+            );
+            $sha1 = Exec::read_pipe_line(*OUT);
+            close(OUT);
+
+            $sha1 = "Error getting SHA-1 Value"
+              if ((!defined $sha1) || ($sha1 eq ""));
+
+            chomp $sha1;
+            print "SHA-1 of ASCII strings: $sha1\n";
+        }
+    }
+
+    print "\nImage: $Caseman::vol2path{$vol}\n";
+    if (($Caseman::vol2start{$vol} == 0) && ($Caseman::vol2end{$vol} == 0)) {
+        print "Offset: Full image\n";
+    }
+    elsif ($Caseman::vol2end{$vol} == 0) {
+        print "Offset: $Caseman::vol2start{$vol} to end\n";
+    }
+    else {
+        print "Offset: $Caseman::vol2start{$vol} to $Caseman::vol2end{$vol}\n";
+    }
+    print "File System Type: $ftype\n";
+
+    my $date = localtime();
+    print "\nDate Generated: $date\n"
+      . "Investigator: $Args::args{'inv'}\n\n"
+      . "-" x 70 . "\n"
+      . "                   META DATA INFORMATION\n\n";
+
+    # Get the meta details
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta"
+    );
+    print $_ while ($_ = Exec::read_pipe_line(*OUT));
+    close(OUT);
+
+    # File Type
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+    );
+    my $apptype = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $apptype = "Error getting file type"
+      if ((!defined $apptype) || ($apptype eq ""));
+
+    print "\nFile Type: $apptype";
+
+    print "\n" . "-" x 70 . "\n";
+    if ($sort == $FIL_SORT_ASC) {
+        print "           CONTENT (Non-ASCII data may not be shown)\n\n";
+    }
+    else {
+        print "                        CONTENT\n\n";
+    }
+
+    if ($sort == $FIL_SORT_ASC) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta"
+        );
+        Print::print_output($_) while ($_ = Exec::read_pipe_data(*OUT, 1024));
+        close(OUT);
+    }
+    elsif ($sort == $FIL_SORT_HEX) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta"
+        );
+        my $offset = 0;
+        while ($_ = Exec::read_pipe_data(*OUT, 1024)) {
+            Print::print_hexdump($_, $offset * 1024);
+            $offset++;
+        }
+        close(OUT);
+    }
+    elsif ($sort == $FIL_SORT_STR) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype $recflag -o $offset -i $imgtype $img $meta | '$::TSKDIR/srch_strings' -a"
+        );
+        Print::print_output($_) while ($_ = Exec::read_pipe_line(*OUT));
+        close(OUT);
+    }
+
+    print "\n"
+      . "-" x 70 . "\n"
+      . "                   VERSION INFORMATION\n\n"
+      . "Autopsy Version: $::VER\n";
+    print "The Sleuth Kit Version: " . ::get_tskver() . "\n";
+
+    Print::print_text_footer();
+    return 0;
+}
+
+# Generate the MD5 value for every file in a given directory and save
+# them to a text file
+sub md5list {
+    my $vol  = Args::get_vol('vol');
+    my $meta = Args::get_meta('meta');
+    my $mnt  = $Caseman::vol2mnt{$vol};
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $fname = "$mnt$Args::args{'dir'}";
+    $fname = 'root' if ($fname eq '/');
+    $fname =~ s/\/\//\//g;
+
+    # We can't trust the mnt and dir values (since there
+    # could be bad ASCII values, so only allow basic chars into name
+    $fname =~ tr/a-zA-Z0-9\_\-\@\,/\./c;
+
+    # remove .'s at beginning and end
+    $fname = $1 if ($fname =~ /^\.+(.*)$/);
+    $fname = $1 if ($fname =~ /^(.*?)\.+$/);
+
+    Print::print_text_header("filename=$fname.md5");
+
+    $fname = "$mnt$Args::args{'dir'}";
+    $fname =~ s/\/\//\//g;
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/fls' -f $ftype -Fu -o $offset -i $imgtype $img $meta");
+
+    print "MD5 Values for files in $fname ($Caseman::vol2sname{$vol})\n\n";
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+
+        # area for allocated files
+        if (   (/r\/[\w\-]\s+([\d\-]+):\s+(.*)$/)
+            || (/-\/r\s+([\d\-]+):\s+(.*)$/))
+        {
+            my $in   = $1;
+            my $name = $2;
+
+            local *OUT_MD5;
+            Exec::exec_pipe(*OUT_MD5,
+"'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $in | '$::MD5_EXE'"
+            );
+            my $md5out = Exec::read_pipe_line(*OUT_MD5);
+
+            $md5out = "Error calculating MD5"
+              if ((!defined $md5out) || ($md5out eq ""));
+
+            chomp $md5out;
+            print "$md5out\t" . Print::html_encode($name) . "\n";
+            close(OUT_MD5);
+        }
+        elsif (/[\w\-]\/[\w\-]\s+([\d\-]+):\s+(.*)$/) {
+
+           # ignore, non-file types such as sockets or symlinks that do not have
+           # MD5 values that make sense
+        }
+
+        # Hmmmm
+        else {
+            print "Error parsing file (invalid characters?): $_\n";
+        }
+    }
+    close(OUT);
+
+    Print::print_text_footer();
+
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("");
+    print "<br><center><h3>File Browsing Mode</h3><br>\n"
+      . "<p>In this mode, you can view file and directory contents.</p>\n"
+      . "<p>File contents will be shown in this window.<br>\n"
+      . "More file details can be found using the Metadata link at the end of the list (on the right).<br>\n"
+      . "You can also sort the files using the column headers</p>\n";
+    Print::print_html_footer();
+    return 0;
+}
+
diff --git a/lib/Filesystem.pm b/lib/Filesystem.pm
new file mode 100644
index 0000000000..935a22b11b
--- /dev/null
+++ b/lib/Filesystem.pm
@@ -0,0 +1,170 @@
+#
+# File system layer functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Updated 1/13
+
+package Filesystem;
+
+$Filesystem::STATS = 0;
+
+sub main {
+
+    # By default, show the main window
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Filesystem::STATS
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the meta data address
+    if ($view == $Filesystem::STATS) {
+        return stats();
+    }
+    else {
+        Print::print_check_err("Invalid File System View");
+    }
+}
+
+sub stats_disk {
+    Print::print_html_header("Disk Status");
+
+    my $vol     = Args::get_vol('vol');
+    my $img     = $Caseman::vol2path{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $dtype   = $Caseman::vol2dtype{$vol};
+
+    # Run 'mmls' on the image
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/mmls' -o $offset -i $imgtype -t $dtype -r $img");
+
+    # cycle through results and add each to table with file system type
+    print "<center><h3>Disk Image Details</h3></center>\n";
+    print "<b>PARTITION INFORMATION</b><p>\n";
+
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        print "<tt>$_</tt><br>\n";
+    }
+    return 0;
+
+}
+
+############ FILE SYSTEM ##################
+sub stats {
+
+    my $vol = Args::get_vol('vol');
+
+    return stats_disk() if ($Caseman::vol2cat{$vol} eq "disk");
+
+    Print::print_html_header("File System Status");
+
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: Displaying file system details");
+    print "<center><h3>General File System Details</h3></center><p>\n";
+
+    my $fat = 0;
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/fsstat' -f $ftype -o $offset -i $imgtype $img");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+
+        if (/\-\-\-\-\-\-\-\-\-\-/) {
+
+            # Ignore these and print them ahead of the headers
+        }
+
+        # need the space to prevent NTFS STD_INFORMATION from triggering it
+        elsif (/ INFORMATION/) {
+            print "<hr><b>$_</b><p>\n";
+        }
+        elsif (($ftype =~ /fat/) && ($_ =~ /FAT CONTENTS/)) {
+            print "<hr><b>$_</b><p>\n";
+
+            # Set the flag if we reach the FAT
+            $fat = 1;
+        }
+
+        # Special case for FAT
+        # We will be giving hyperlinks in the FAT table dump
+        elsif ($fat == 1) {
+
+            # Ignore the divider
+            if (/\-\-\-\-\-\-\-\-\-\-/) {
+                print "$_<br>";
+                next;
+            }
+
+            if (/^((\d+)\-\d+\s+\((\d+)\)) \-\> ([\w]+)$/) {
+                my $full = $1;
+                my $blk  = $2;
+                my $len  = $3;
+                my $next = $4;
+
+                # Print the tag so that other FAT entries can link to it
+                print "<a name=\"$blk\">\n";
+
+                print
+"<a href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_FRAME&submod=$::MOD_DATA&"
+                  . "block=$blk&len=$len\" target=\"_top\">$full</a> -> ";
+
+                if ($next eq 'EOF') {
+                    print "EOF<br>\n";
+                }
+                else {
+                    print "<a href=\"#$next\">$next</a><br>\n";
+                }
+            }
+            else {
+                $fat = 0;
+                print "$_<br>";
+            }
+        }
+        else {
+            print "$_<br>";
+        }
+    }
+    close(OUT);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+1;
diff --git a/lib/Frame.pm b/lib/Frame.pm
new file mode 100644
index 0000000000..20e107f457
--- /dev/null
+++ b/lib/Frame.pm
@@ -0,0 +1,336 @@
+#
+# Functions to create the tabs and frame of the main browsing mode
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Frame;
+
+$Frame::IMG_FRAME = 0;
+$Frame::IMG_TABS  = 1;
+$Frame::IMG_BLANK = 2;
+
+sub main {
+    Args::check_vol('vol');
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Frame::IMG_FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view == $Frame::IMG_FRAME) {
+        vol_browse_frame();
+    }
+    elsif ($view == $Frame::IMG_TABS) {
+        vol_browse_tabs();
+    }
+    elsif ($view == $Frame::IMG_BLANK) {
+        vol_browse_blank();
+    }
+    else {
+        Print::print_check_err("Invalid Frame View");
+    }
+
+    return 0;
+}
+
+# create the frame for the tabs on top and the generic message on the bottom
+sub vol_browse_frame {
+    Print::print_html_header_frameset(
+        "$Args::args{'case'}:$Args::args{'host'}:$Args::args{'vol'}");
+
+    my $submod = $::MOD_FRAME;
+    $submod = Args::get_submod() if (exists $Args::args{'submod'});
+
+    # Print the rest of the frames
+    my $str  = "";
+    my $view = "";
+
+    if ($submod == $::MOD_FILE) {
+        $str .= "&meta=$Args::args{'meta'}"   if (exists $Args::args{'meta'});
+        $str .= "&dir=$Args::args{'dir'}"     if (exists $Args::args{'dir'});
+        $str .= "&sort=$Args::args{'sort'}"   if (exists $Args::args{'sort'});
+        $str .= "&dmode=$Args::args{'dmode'}" if (exists $Args::args{'dmode'});
+    }
+    elsif ($submod == $::MOD_DATA) {
+        $str .= "&block=$Args::args{'block'}" if (exists $Args::args{'block'});
+        $str .= "&len=$Args::args{'len'}"     if (exists $Args::args{'len'});
+    }
+    elsif ($submod == $::MOD_META) {
+        $str .= "&meta=$Args::args{'meta'}" if (exists $Args::args{'meta'});
+    }
+    elsif ($submod == $::MOD_FRAME) {
+        $view = "&view=$Frame::IMG_BLANK";
+    }
+
+    print <<EOF;
+
+<frameset rows=\"40,*\">
+  <frame src=\"$::PROGNAME?mod=$::MOD_FRAME&view=$Frame::IMG_TABS&$Args::baseargs&submod=$submod\">
+
+  <frame src=\"$::PROGNAME?mod=$submod$view&$Args::baseargs$str\">
+</frameset>
+
+<NOFRAMES>
+  <center>
+    Autopsy requires a browser that supports frames.
+  </center>
+</NOFRAMES>
+
+EOF
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Display a message when the image is opened (below the tabs)
+sub vol_browse_blank {
+    Print::print_html_header("Main Message");
+
+    print <<EOF;
+
+<center>
+  <br><br><br><br><br><br><br>
+  To start analyzing this volume, choose an analysis mode from the tabs above.
+</center>
+
+EOF
+    Print::print_html_footer();
+    return 0;
+}
+
+sub vol_browse_tabs {
+    Args::check_submod();
+    Print::print_html_header_tabs("Mode Tabs");
+
+    my $submod = Args::get_submod();
+    my $vol    = Args::get_vol('vol');
+
+    my $special = 0;
+    $special = 1
+      unless (($Caseman::vol2cat{$vol} eq "part")
+        && ($Fs::is_fs{$Caseman::vol2ftype{$vol}} == 1));
+
+    #      if ( ($Caseman::vol2ftype{$vol} eq "strings")
+    #        || ($Caseman::vol2ftype{$vol} eq "blkls")
+    #        || ($Caseman::vol2ftype{$vol} eq "swap")
+    #        || ($Caseman::vol2ftype{$vol} eq "raw"));
+
+    print "<center><table width=\"800\" border=\"0\" cellspacing=\"0\" "
+      . "cellpadding=\"0\"><tr>\n";
+
+    # Files
+    print "<td align=\"center\" width=116>";
+    if ($special == 0) {
+
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_FILE&$Args::baseargs\""
+          . "target=\"_top\">";
+
+        # Current
+        if ($submod == $::MOD_FILE) {
+            print "<img border=0 "
+              . "src=\"pict/main_t_fil_cur.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"File Analysis (Current Mode)\"></a>";
+        }
+
+        # Link
+        else {
+            print "<img border=0 "
+              . "src=\"pict/main_t_fil_link.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"File Analysis\"></a>";
+        }
+    }
+
+    # non-link
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_fil_org.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"File Analysis (not available)\">";
+    }
+
+    # Search
+    print "</td>\n" . "<td align=\"center\" width=116>";
+
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_KWSRCH&$Args::baseargs\""
+      . " target=\"_top\">";
+
+    if ($submod == $::MOD_KWSRCH) {
+        print "<img border=0 "
+          . "src=\"pict/main_t_srch_cur.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Keyword Search Mode (Current Mode)\"></a>";
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_srch_link.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Keyword Search Mode\"></a>";
+    }
+
+    # File Type
+    print "</td>\n" . "<td align=\"center\" width=116>";
+
+    if (($special == 0) && ($::LIVE == 0)) {
+
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_APPSORT&$Args::baseargs\""
+          . " target=\"_top\">";
+
+        # Current
+        if ($submod == $::MOD_APPSORT) {
+            print "<img border=0 "
+              . "src=\"pict/main_t_ftype_cur.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"File Type (Current Mode)\"></a>";
+        }
+        else {
+            print "<img border=0 "
+              . "src=\"pict/main_t_ftype_link.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"File Type\"></a>";
+        }
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_ftype_org.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"File Type (not available)\">";
+    }
+
+    # Image Details
+    print "</td>\n" . "<td align=\"center\" width=116>";
+
+    if (($special == 0) || ($Caseman::vol2cat{$vol} eq "disk")) {
+
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_FS&$Args::baseargs\""
+          . " target=\"_top\">";
+
+        if ($submod == $::MOD_FS) {
+            print "<img border=0 "
+              . "src=\"pict/main_t_img_cur.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"Image Details Mode (Current Mode)\"></a>";
+        }
+        else {
+            print "<img border=0 "
+              . "src=\"pict/main_t_img_link.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"Image Details Mode\"></a>";
+        }
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_img_org.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Image Details Mode (not available)\">";
+    }
+
+    # Meta Data
+    print "</td>\n" . "<td align=\"center\" width=116>";
+
+    if ($special == 0) {
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_META&$Args::baseargs\""
+          . " target=\"_top\">";
+
+        if ($submod == $::MOD_META) {
+            print "<img border=0 "
+              . "src=\"pict/main_t_met_cur.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"Meta Data Mode (Current Mode)\"></a>";
+        }
+        else {
+            print "<img border=0 "
+              . "src=\"pict/main_t_met_link.jpg\" "
+              . "width=116 height=38 "
+              . "alt=\"Meta Data Mode\"></a>";
+        }
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_met_org.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Meta Data Mode (not available)\">";
+    }
+
+    # Data Units
+    print "</td>\n" . "<td align=\"center\" width=116>";
+
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_DATA&$Args::baseargs\""
+      . " target=\"_top\">";
+
+    # Current
+    if ($submod == $::MOD_DATA) {
+        print "<img border=0 "
+          . "src=\"pict/main_t_dat_cur.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Data Units Mode (Current Mode)\"></a>";
+    }
+
+    # Link
+    else {
+        print "<img border=0 "
+          . "src=\"pict/main_t_dat_link.jpg\" "
+          . "width=116 height=38 "
+          . "alt=\"Data Units Mode\"></a>";
+    }
+
+    # Help - set to current mode
+    print "</td>\n"
+      . "<td align=\"center\" width=52>"
+      . "<a href=\"$::HELP_URL\""
+      . " target=\"_blank\">"
+      . "<img border=0 "
+      . "src=\"pict/tab_help.jpg\" "
+      . "width=52 "
+      . "alt=\"Help\">"
+      . "</a></td>\n";
+
+    # Close
+    print "<td align=\"center\" width=52>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_OPEN&$Args::baseargs_novol\" target=\"_top\">"
+      . "<img border=0 src=\"pict/tab_close.jpg\" width=52 "
+      . "alt=\"Close Image\"></a></td>\n";
+
+    print "</tr></table>\n";
+
+    Print::print_html_footer_tabs();
+    return 0;
+}
diff --git a/lib/Fs.pm b/lib/Fs.pm
new file mode 100644
index 0000000000..cc188012b7
--- /dev/null
+++ b/lib/Fs.pm
@@ -0,0 +1,171 @@
+#
+package Fs;
+
+$Fs::types[0]  = "ext";
+$Fs::types[1]  = "fat";
+$Fs::types[2]  = "ntfs";
+$Fs::types[3]  = "ufs";
+$Fs::types[4]  = "iso9660";
+$Fs::types[5]  = "-----";
+$Fs::types[6]  = "fat12";
+$Fs::types[7]  = "fat16";
+$Fs::types[8]  = "fat32";
+$Fs::types[9]  = "bsdi";
+$Fs::types[10] = "freebsd";
+$Fs::types[11] = "openbsd";
+$Fs::types[12] = "solaris";
+$Fs::types[13] = "hfs";
+
+# These need to be updated as The Sleuth Kit supports more file systems
+#
+# addr_unit contains the addressable unit per filesystem type
+# first_meta contains the first usable meta address on a system
+# root_meta is the meta address for the root directory (diff than
+# first on ntfs)
+
+$Fs::addr_unit{'disk'}  = 'Sector';
+$Fs::first_addr{'disk'} = 0;
+$Fs::is_fs{'disk'}      = 0;
+
+$Fs::addr_unit{'blkls'}  = 'Unit';
+$Fs::first_addr{'blkls'} = 0;
+$Fs::is_fs{'blkls'}      = 0;
+
+# raw
+$Fs::addr_unit{'raw'}  = 'Unit';
+$Fs::first_addr{'raw'} = 0;
+$Fs::is_fs{'raw'}      = 0;
+
+# Swap
+$Fs::addr_unit{'swap'}  = 'Unit';
+$Fs::first_addr{'swap'} = 0;
+$Fs::is_fs{'swap'}      = 0;
+
+# BSDI
+$Fs::first_meta{'bsdi'} = $Fs::root_meta{'bsdi'} = 2;
+$Fs::first_addr{'bsdi'} = 0;
+$Fs::addr_unit{'bsdi'}  = 'Fragment';
+$Fs::has_ctime{'bsdi'}  = 1;
+$Fs::has_crtime{'bsdi'} = 0;
+$Fs::has_mtime{'bsdi'}  = 1;
+$Fs::meta_str{'bsdi'}   = "Inode";
+$Fs::is_fs{'bsdi'}      = 1;
+
+# FreeBSD
+$Fs::first_meta{'freebsd'} = $Fs::root_meta{'freebsd'} = 2;
+$Fs::first_addr{'freebsd'} = 0;
+$Fs::addr_unit{'freebsd'}  = 'Fragment';
+$Fs::has_ctime{'freebsd'}  = 1;
+$Fs::has_crtime{'freebsd'} = 0;
+$Fs::has_mtime{'freebsd'}  = 1;
+$Fs::meta_str{'freebsd'}   = "Inode";
+$Fs::is_fs{'freebsd'}      = 1;
+
+# OpenBSD
+$Fs::first_meta{'openbsd'} = $Fs::root_meta{'openbsd'} = 2;
+$Fs::first_addr{'openbsd'} = 0;
+$Fs::addr_unit{'openbsd'}  = 'Fragment';
+$Fs::has_ctime{'openbsd'}  = 1;
+$Fs::has_crtime{'openbsd'} = 0;
+$Fs::has_mtime{'openbsd'}  = 1;
+$Fs::meta_str{'openbsd'}   = "Inode";
+$Fs::is_fs{'openbsd'}      = 1;
+
+# Solaris
+$Fs::first_meta{'solaris'} = $Fs::root_meta{'solaris'} = 2;
+$Fs::first_addr{'solaris'} = 0;
+$Fs::addr_unit{'solaris'}  = 'Fragment';
+$Fs::has_ctime{'solaris'}  = 1;
+$Fs::has_crtime{'solaris'} = 0;
+$Fs::has_mtime{'solaris'}  = 1;
+$Fs::meta_str{'solaris'}   = "Inode";
+$Fs::is_fs{'solaris'}      = 1;
+
+# UFS
+$Fs::first_meta{'ufs'} = $Fs::root_meta{'ufs'} = 2;
+$Fs::first_addr{'ufs'} = 0;
+$Fs::addr_unit{'ufs'}  = 'Fragment';
+$Fs::has_ctime{'ufs'}  = 1;
+$Fs::has_crtime{'ufs'} = 0;
+$Fs::has_mtime{'ufs'}  = 1;
+$Fs::meta_str{'ufs'}   = "Inode";
+$Fs::is_fs{'ufs'}      = 1;
+
+# Linux
+$Fs::first_meta{'linux-ext2'} = $Fs::root_meta{'linux-ext2'} = 2;
+$Fs::first_addr{'linux-ext2'} = 0;
+$Fs::addr_unit{'linux-ext2'}  = 'Fragment';
+$Fs::has_ctime{'linux-ext2'}  = 1;
+$Fs::has_crtime{'linux-ext2'} = 0;
+$Fs::has_mtime{'linux-ext2'}  = 1;
+$Fs::meta_str{'linux-ext2'}   = "Inode";
+$Fs::is_fs{'linux-ext2'}      = 1;
+
+$Fs::first_meta{'linux-ext3'} = $Fs::root_meta{'linux-ext3'} = 2;
+$Fs::first_addr{'linux-ext3'} = 0;
+$Fs::addr_unit{'linux-ext3'}  = 'Fragment';
+$Fs::has_ctime{'linux-ext3'}  = 1;
+$Fs::has_crtime{'linux-ext3'} = 0;
+$Fs::has_mtime{'linux-ext3'}  = 1;
+$Fs::meta_str{'linux-ext3'}   = "Inode";
+$Fs::is_fs{'linux-ext3'}      = 1;
+
+$Fs::first_meta{'ext'} = $Fs::root_meta{'ext'} = 2;
+$Fs::first_addr{'ext'} = 0;
+$Fs::addr_unit{'ext'}  = 'Fragment';
+$Fs::has_ctime{'ext'}  = 1;
+$Fs::has_crtime{'ext'} = 0;
+$Fs::has_mtime{'ext'}  = 1;
+$Fs::meta_str{'ext'}   = "Inode";
+$Fs::is_fs{'ext'}      = 1;
+
+# FAT
+$Fs::first_meta{'fat'} = $Fs::first_meta{'fat12'} = $Fs::first_meta{'fat16'} =
+  $Fs::first_meta{'fat32'} = 1;
+$Fs::root_meta{'fat'}      = $Fs::root_meta{'fat12'} = $Fs::root_meta{'fat16'} =
+  $Fs::root_meta{'fat32'}  = 2;
+$Fs::first_addr{'fat'} = $Fs::first_addr{'fat12'} = $Fs::first_addr{'fat16'} =
+  $Fs::first_addr{'fat32'} = 0;
+$Fs::addr_unit{'fat'}      = $Fs::addr_unit{'fat12'} = $Fs::addr_unit{'fat16'} =
+  $Fs::addr_unit{'fat32'}  = 'Sector';
+$Fs::has_ctime{'fat'} = $Fs::has_ctime{'fat12'} = $Fs::has_ctime{'fat16'} =
+  $Fs::has_ctime{'fat32'} = 0;
+$Fs::has_crtime{'fat'} = $Fs::has_crtime{'fat12'} = $Fs::has_crtime{'fat16'} =
+  $Fs::has_crtime{'fat32'} = 1;
+$Fs::has_mtime{'fat'}      = $Fs::has_mtime{'fat12'} = $Fs::has_mtime{'fat16'} =
+  $Fs::has_mtime{'fat32'}  = 1;
+$Fs::meta_str{'fat'} = $Fs::meta_str{'fat12'} = $Fs::meta_str{'fat16'} =
+  $Fs::meta_str{'fat32'} = "Dir Entry";
+$Fs::is_fs{'fat'}        = $Fs::is_fs{'fat12'} = $Fs::is_fs{'fat16'} =
+  $Fs::is_fs{'fat32'}    = 1;
+
+# NTFS
+$Fs::first_meta{'ntfs'} = 0;
+$Fs::root_meta{'ntfs'}  = 5;
+$Fs::first_addr{'ntfs'} = 0;
+$Fs::addr_unit{'ntfs'}  = 'Cluster';
+$Fs::has_ctime{'ntfs'}  = 1;
+$Fs::has_crtime{'ntfs'} = 1;
+$Fs::has_mtime{'ntfs'}  = 1;
+$Fs::meta_str{'ntfs'}   = "MFT Entry";
+$Fs::is_fs{'ntfs'}      = 1;
+
+# ISO9660
+$Fs::first_meta{'iso9660'} = $Fs::root_meta{'iso9660'} = 0;
+$Fs::first_addr{'iso9660'} = 0;
+$Fs::addr_unit{'iso9660'}  = 'Block';
+$Fs::has_ctime{'iso9660'}  = 0;
+$Fs::has_crtime{'iso9660'} = 1;
+$Fs::has_mtime{'iso9660'}  = 0;
+$Fs::meta_str{'iso9660'}   = "Directory Entry";
+$Fs::is_fs{'iso9660'}      = 1;
+
+# HFS
+$Fs::first_meta{'hfs'} = $Fs::root_meta{'hfs'} = 2;
+$Fs::first_addr{'hfs'} = 0;
+$Fs::addr_unit{'hfs'}  = 'Block';
+$Fs::has_ctime{'hfs'}  = 1;
+$Fs::has_crtime{'hfs'} = 1;
+$Fs::has_mtime{'hfs'}  = 1;
+$Fs::meta_str{'hfs'}   = "Record";
+$Fs::is_fs{'hfs'}      = 1;
diff --git a/lib/Hash.pm b/lib/Hash.pm
new file mode 100644
index 0000000000..640e38548e
--- /dev/null
+++ b/lib/Hash.pm
@@ -0,0 +1,947 @@
+#
+# Hash database and calculation functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2008 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Hash;
+
+$Hash::DB_MANAGER  = 1;
+$Hash::DB_LOOKUP   = 2;
+$Hash::DB_INDEX    = 3;
+$Hash::IMG_VERIFY  = 4;
+$Hash::IMG_CALC    = 5;
+$Hash::IMG_LIST_FR = 6;
+$Hash::IMG_LIST    = 7;
+$Hash::BLANK       = 8;
+
+sub main {
+
+    return if ($::LIVE == 1);
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view == $Hash::BLANK) {
+        blank();
+        return 0;
+    }
+    elsif ($view == $Hash::DB_MANAGER) {
+        return db_manager();
+    }
+    elsif ($view == $Hash::DB_LOOKUP) {
+        return db_lookup();
+    }
+    elsif ($view == $Hash::DB_INDEX) {
+        return db_index();
+    }
+    elsif ($view == $Hash::IMG_LIST_FR) {
+        return img_list_fr();
+    }
+    elsif ($view == $Hash::IMG_LIST) {
+        return img_list();
+    }
+
+    Args::check_vol('vol');
+    if ($view == $Hash::IMG_CALC) {
+        return img_calc();
+    }
+    elsif ($view == $Hash::IMG_VERIFY) {
+        return img_verify();
+    }
+    else {
+        Print::print_check_err("Invalid Hash View");
+    }
+
+}
+
+sub index_md5sum {
+    my $db = shift;
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/hfind' -i md5sum '$db'");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        print "$_<br>\n";
+    }
+    close(OUT);
+}
+
+sub index_nsrl {
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/hfind' -i nsrl-md5 '$::NSRLDB'");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        print "$_<br>\n";
+    }
+    close(OUT);
+}
+
+# Manager/status Window from HOST Manager
+sub db_manager {
+    Print::print_html_header("Hash Database Manager");
+
+    print <<EOF;
+
+Hash databases allow Autopsy to quickly identify known files.  This includes
+files that are known to be good and those that are known to be bad.  The
+'hfind' tool is used to lookup entries in the databases and it needs an
+index file for each database.  This window allows one to re-index the
+database after it has been updated.  
+
+<p>
+To edit the location of the databases, you must manually edit the 
+<tt>host.aut</tt> file in the host directory.  
+
+<hr>
+<center>
+<img src=\"pict/hashdb_h_alert.jpg\" alt=\"Alert Database\" border=\"0\">
+</center>
+<p><b>Overview</b><br>
+These files are known to be <U>bad</U> and are the ones that you want to
+know about if they are in the image you are analyzing.  For example,
+this database would include hashes of known attacker tools, rootkits,
+or photographs.  
+
+EOF
+    print "<p><b>Details</b><br>\n";
+    if ($Caseman::alert_db eq "") {
+        print "Location: <tt>Not Configured</tt><br>\n";
+    }
+    elsif (-e "$Caseman::alert_db") {
+        print "Location: <tt>$Caseman::alert_db</tt><br>\n";
+        if (-e "$Caseman::alert_db" . "-md5.idx") {
+            print "Status: MD5 Index File Exists<br>\n";
+        }
+        else {
+            print "Status: Database has not been MD5 indexed<br>\n";
+        }
+
+        # Index Button
+        print "<p><a href=\"$::PROGNAME?mod=$::MOD_HASH&"
+          . "view=$Hash::DB_INDEX&hash_alert=1&$Args::baseargs\">"
+          . "<img src=\"pict/but_indexdb.jpg\" alt=\"Index DB\" "
+          . "width=116 height=20 border=\"0\">"
+          . "</a>\n";
+
+        # Lookup Button
+        if (-e "$Caseman::alert_db" . "-md5.idx") {
+            print "<p><b>Lookup</b><br>"
+              . "<form action=\"$::PROGNAME\" method=\"get\">"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Hash::DB_LOOKUP\">\n"
+              . "<input type=\"hidden\" name=\"hash_alert\" value=\"1\">\n"
+              . Args::make_hidden()
+              . "<table cellspacing=\"10\" cellpadding=\"2\">\n<tr>\n"
+              . "<td align=\"left\">Enter MD5 Value: "
+              . "<input type=\"text\" name=\"md5\" size=40 maxlength=32></td>\n"
+              . "<td align=\"left\">"
+              . "<input type=\"image\" src=\"pict/but_lookup.jpg\" alt=\"Ok\" "
+              . "width=116 height=20 border=\"0\">\n"
+              . "</td></tr>\n</table>\n"
+              . "</form>";
+        }
+    }
+    else {
+        print "Location: <tt>$Caseman::alert_db</tt><br>\n"
+          . "ERROR: Database not found<br>\n";
+    }
+
+    print <<EOF2;
+<hr>
+<center>
+<img src=\"pict/hashdb_h_ig.jpg\" alt=\"Ignore Database\" border=\"0\">
+</center>
+<p><b>Overview</b><br>
+These files are known to be <U>good</U> and are the ones that you
+can ignore if they are found in the image you are analyzing.  For
+example, this database would include hashes of known system binaries
+and other documents that you do not want to waste time on when running
+'sorter' or files that you want to confirm were not modified by an 
+attacker.  
+
+EOF2
+
+    print "<p><b>Details</b><br>\n";
+    if ($Caseman::exclude_db eq "") {
+        print "Location: <tt>Not Configured</tt><br>\n";
+    }
+    elsif (-e "$Caseman::exclude_db") {
+        print "Location: <tt>$Caseman::exclude_db</tt><br>\n";
+        if (-e "$Caseman::exclude_db" . "-md5.idx") {
+            print "Status: MD5 Index File Exists<br>\n";
+        }
+        else {
+            print "Status: Database has not been MD5 indexed<br>\n";
+        }
+
+        # Index Button
+        print "<p><a href=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::DB_INDEX&"
+          . "hash_exclude=1&$Args::baseargs\">"
+          . "<img src=\"pict/but_indexdb.jpg\" alt=\"Index DB\" "
+          . "width=116 height=20 border=\"0\">"
+          . "</a>\n";
+
+        # Lookup Button
+        if (-e "$Caseman::exclude_db" . "-md5.idx") {
+            print "<p><b>Lookup</b><br>"
+              . "<form action=\"$::PROGNAME\" method=\"get\">"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Hash::DB_LOOKUP\">\n"
+              . "<input type=\"hidden\" name=\"hash_exclude\" value=\"1\">\n"
+              . Args::make_hidden()
+              . "<table cellspacing=\"10\" cellpadding=\"2\">\n<tr>\n"
+              . "<td align=\"left\">Enter MD5 Value: "
+              . "<input type=\"text\" name=\"md5\" size=40 maxlength=32></td>\n"
+              . "<td align=\"left\">"
+              . "<input type=\"image\" src=\"pict/but_lookup.jpg\" alt=\"Ok\" "
+              . "width=116 height=20 border=\"0\">\n"
+              . "</td></tr>\n</table>\n"
+              . "</form>";
+        }
+    }
+    else {
+        print "Location: <tt>$Caseman::exclude_db</tt><br>\n"
+          . "ERROR: Database not found<br>\n";
+    }
+
+    print <<EOF3;
+<hr>
+<center>
+<img src=\"pict/hashdb_h_nsrl.jpg\" alt=\"NSRL Database\" border=\"0\">
+</center>
+<p><b>Overview</b><br>
+These files are known to be <U>good</U> and <U>bad</U>.  It is currently
+difficult to distinguish between known good and known bad, but the NSRL
+is used in Autopsy to ignore all known files.
+
+EOF3
+
+    print "<p><b>Details</b><br>\n";
+    if ($::NSRLDB eq "") {
+        print "Location: <tt>Not Configured</tt><br>\n";
+    }
+    elsif (-e "$::NSRLDB") {
+        print "Location: <tt>$::NSRLDB</tt><br>\n";
+        if (-e "$::NSRLDB" . "-md5.idx") {
+            print "Status: MD5 Index File Exists<br>\n";
+        }
+        else {
+            print "Status: Database has not been MD5 indexed<br>\n";
+        }
+
+        # Index Button
+        print "<p><a href=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::DB_INDEX&"
+          . "hash_nsrl=1&$Args::baseargs\">"
+          . "<img src=\"pict/but_indexdb.jpg\" alt=\"Index DB\" "
+          . "width=116 height=20 border=\"0\">"
+          . "</a>\n";
+
+        # Lookup Button
+        if (-e "$::NSRLDB" . "-md5.idx") {
+            print "<p><b>Lookup</b><br>"
+              . "<form action=\"$::PROGNAME\" method=\"get\">"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Hash::DB_LOOKUP\">\n"
+              . "<input type=\"hidden\" name=\"hash_nsrl\" value=\"1\">\n"
+              . Args::make_hidden()
+              . "<table cellspacing=\"10\" cellpadding=\"2\">\n<tr>\n"
+              . "<td align=\"left\">Enter MD5 Value: "
+              . "<input type=\"text\" name=\"md5\" size=40 maxlength=32></td>\n"
+              . "<td align=\"left\">"
+              . "<input type=\"image\" src=\"pict/but_lookup.jpg\" "
+              . "alt=\"Lookup\" width=116 height=20 border=0>\n"
+              . "</td></tr>\n</table>\n"
+              . "</form>";
+        }
+    }
+    else {
+        print "Location: <tt>$::NSRLDB</tt><br>\n"
+          . "ERROR: Database not found<br>\n";
+    }
+
+    print <<EOF4;
+
+<hr><center>
+<table width=600 cellspacing=\"0\" cellpadding=\"2\">
+<tr>
+  <td align=center>
+    <a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::VOL_OPEN&$Args::baseargs\">
+    <img src=\"pict/menu_b_close.jpg\" alt=\"Close\" width=\"167\" height=20 border=\"0\">
+    </a>
+  </td>
+  <td align=center>
+    <a href=\"$::HELP_URL\" target=\"_blank\">
+    <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" 
+    width=\"167\" height=20 border=0>
+    </a>
+  </td>
+</tr>
+</table>
+EOF4
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub db_index {
+    Print::print_html_header("Hash Database Indexing");
+
+    if (   (exists $Args::args{'hash_exclude'})
+        && ($Args::args{'hash_exclude'} == 1)
+        && ($Caseman::exclude_db ne ""))
+    {
+        Print::log_host_info("Exclude Database Re-Indexed");
+        print "<hr><b>Exclude Database Indexing</b><p>\n";
+        index_md5sum($Caseman::exclude_db);
+    }
+
+    if (   (exists $Args::args{'hash_alert'})
+        && ($Args::args{'hash_alert'} == 1)
+        && ($Caseman::alert_db ne ""))
+    {
+        Print::log_host_info("Alert Database Re-Indexed");
+        print "<hr><b>Alert Database Indexing</b><p>\n";
+        index_md5sum($Caseman::alert_db);
+    }
+
+    if (   (exists $Args::args{'hash_nsrl'})
+        && ($Args::args{'hash_nsrl'} == 1)
+        && ($::NSRLDB ne ""))
+    {
+        Print::log_host_info("NSRL Database Re-Indexed");
+        print "<hr><b>NSRL Database Indexing</b><p>\n";
+        index_nsrl();
+    }
+
+    print "<p>Indexing Complete<br>\n"
+      . "<hr><p>\n<a href=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::DB_MANAGER&"
+      . "$Args::baseargs\">\n"
+      . "<img src=\"pict/menu_b_hashdb.jpg\" width=\"167\" "
+      . "height=20 alt=\"Hash Databases\" border=\"0\"></a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Lookup hashes in database
+sub db_lookup {
+    Print::print_html_header("Hash Database Lookup");
+
+    unless ((exists $Args::args{'md5'})
+        && ($Args::args{'md5'} =~ /^$::REG_MD5$/o))
+    {
+        Print::print_err("Invalid MD5 Argument");
+    }
+
+    if (   (exists $Args::args{'hash_nsrl'})
+        && ($Args::args{'hash_nsrl'} == 1)
+        && ($::NSRLDB ne ""))
+    {
+        print "<hr><b>NSRL Lookup</b><p>\n";
+
+        if (-e "$::NSRLDB") {
+            local *OUT;
+            Exec::exec_pipe(*OUT,
+                "'$::TSKDIR/hfind' '$::NSRLDB' $Args::args{'md5'}");
+            print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+            close(OUT);
+            Print::log_host_inv("NSRL Lookup ($Args::args{'md5'})");
+        }
+        else {
+            print "NSRL Database Missing<br>\n";
+            Print::log_host_inv(
+                "NSRL Lookup ($Args::args{'md5'}) - Database Missing");
+        }
+    }
+
+    if (   (exists $Args::args{'hash_exclude'})
+        && ($Args::args{'hash_exclude'} == 1)
+        && ($Caseman::exclude_db ne ""))
+    {
+        print "<hr><b>Exclude Database Lookup</b><p>\n";
+
+        if (-e "$Caseman::exclude_db") {
+            local *OUT;
+            Exec::exec_pipe(*OUT,
+                "'$::TSKDIR/hfind' '$Caseman::exclude_db' $Args::args{'md5'}");
+            print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+            close(OUT);
+            Print::log_host_inv("Exclude Database Lookup ($Args::args{'md5'})");
+        }
+        else {
+            print "Exclude Database Missing<br>\n";
+            Print::log_host_inv(
+"Exclude Database Lookup ($Args::args{'md5'}) - Database Missing"
+            );
+        }
+    }
+
+    if (   (exists $Args::args{'hash_alert'})
+        && ($Args::args{'hash_alert'} == 1)
+        && ($Caseman::alert_db ne ""))
+    {
+        print "<hr><b>Alert Database Lookup</b><p>\n";
+
+        if (-e "$Caseman::alert_db") {
+            local *OUT;
+            Exec::exec_pipe(*OUT,
+                "'$::TSKDIR/hfind' '$Caseman::alert_db' $Args::args{'md5'}");
+            print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+            close(OUT);
+            Print::log_host_inv("Alert Database Lookup ($Args::args{'md5'})");
+        }
+        else {
+            print "Alert Database Missing<br>\n";
+            Print::log_host_inv(
+                "Alert Database Lookup ($Args::args{'md5'}) - Database Missing"
+            );
+        }
+    }
+
+    print "<hr><p>\n"
+      . "If any of the hash databases need to be re-indexed, use the "
+      . "<U>Hash Database Manager</U><p>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::DB_MANAGER&"
+      . "$Args::baseargs\" target=\"_top\">\n"
+      . "<img src=\"pict/menu_b_hashdb.jpg\" width=\"167\" "
+      . "height=20 alt=\"Hash Databases\" border=\"0\"></a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+############ INTEGRITY CHECKS ##################
+
+# Special view for printing integrity check menu
+# We show any file that we have a reference for
+
+# pass the md5 hash (from md5.txt) and then the sorted array
+sub int_menu_print {
+    my %md5s = %{$_[0]};
+    my @sort = @{$_[1]};
+
+    for (my $i = 0; $i <= $#sort; $i++) {
+
+        print
+"<tr><td align=\"right\"><tt><b>$Caseman::vol2sname{$sort[$i]}</b></tt></td>\n";
+
+        # It already exists, so make verify button
+        if (exists $md5s{$sort[$i]}) {
+            print "<td><tt>$md5s{$sort[$i]}</tt></td><td>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"cont\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$sort[$i]\">\n"
+              . Args::make_hidden()
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Hash::IMG_VERIFY\">\n"
+              . "<input type=\"image\" src=\"pict/int_b_valid.jpg\" "
+              . "alt=\"Validate\" border=\"0\">\n"
+              . "</form></td></tr>\n";
+        }
+
+        # we currenly only support integrity for raw and split image formats
+        elsif (($Caseman::vol2itype{$sort[$i]} ne "raw")
+            && ($Caseman::vol2itype{$sort[$i]} ne "split"))
+        {
+            print
+"<td colspan=2>Integrity checks for image type $Caseman::vol2itype{$sort[$i]} not yet supported</td></tr>\n";
+        }
+
+        # Generate New button
+        else {
+            print "<td>&nbsp;</td><td>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"cont\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$sort[$i]\">\n"
+              . Args::make_hidden()
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Hash::IMG_CALC\">\n"
+              . "<input type=\"image\" src=\"pict/int_b_calc.jpg\" "
+              . "alt=\"Calculate\" border=\"0\">\n"
+              . "</form></td></tr>\n";
+        }
+    }
+
+    return;
+}
+
+# Create a frame with two rows, one with the list of images to check
+# and then the bottom actually does it.
+sub img_list_fr {
+    Print::print_html_header_frameset(
+        "$Args::args{'case'}:$Args::args{'host'} Integrity Check");
+
+    print "<frameset rows=\"80%,20%\">\n";
+
+    # Block List
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::IMG_LIST&"
+      . "$Args::baseargs\">\n"
+      . "<frame src=\"$::PROGNAME?mod=$::MOD_HASH&view=$Hash::BLANK&"
+      . "$Args::baseargs\" name=\"cont\">\n"
+      . "</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Reads the MD5 file to fill in the MENU list for the integrity
+# check mode
+sub img_list {
+    Print::print_html_header("Image Integrity Menu");
+
+    my %md5s;
+    my @blkls;
+    my @str;
+    my @img;
+    my @body;
+    my @tl;
+
+    # Read the known values if the file exists
+    if (open(FILE, "$::host_dir" . "/md5.txt")) {
+
+        # Read the md5 values into a hash
+        while (<FILE>) {
+            s/^\s+//;
+            s/\s+$//;
+
+            if (/($::REG_MD5)\s+(.*)/o) {
+                $md5s{"$2"} = $1;
+                $md5s{"$2"} =~ tr/[a-f]/[A-F]/;
+            }
+            else {
+                print "Error reading line $. of md5.txt: $_<br>\n";
+                return 1;
+            }
+        }
+        close(FILE);
+    }
+
+    # sort the images into the different types
+    foreach my $k (keys %Caseman::vol2cat) {
+        if ($Caseman::vol2cat{$k} eq "image") {
+            push @img, $k;
+        }
+        elsif ($Caseman::vol2ftype{$k} eq "blkls") {
+            push @blkls, $k;
+        }
+        elsif ($Caseman::vol2ftype{$k} eq "strings") {
+            push @str, $k;
+        }
+        elsif ($Caseman::vol2ftype{$k} eq "body") {
+            push @body, $k;
+        }
+        elsif ($Caseman::vol2ftype{$k} eq "timeline") {
+            push @tl, $k;
+        }
+    }
+
+    print "<center><table cellspacing=\"10\" cellpadding=\"2\">";
+
+    #  image files
+    if (scalar @img > 0) {
+        print "<tr><th colspan=3>"
+          . "<img src=\"pict/int_h_img.jpg\" alt=\"Image Files\">"
+          . "</th></tr>\n";
+        my @sort = sort { $a cmp $b } @img;
+        int_menu_print(\%md5s, \@sort);
+    }
+
+    # Unallocated (blkls) images
+    if (scalar @blkls > 0) {
+        print "<tr><th colspan=3>&nbsp;</th></tr>\n"
+          . "<tr><th colspan=3>"
+          . "<img src=\"pict/int_h_unalloc.jpg\" alt=\"Unallocated Data Files\">"
+          . "</th></tr>\n";
+        my @sort = sort { $a cmp $b } @blkls;
+        int_menu_print(\%md5s, \@sort);
+    }
+
+    # Strings files (of blkls or fs images)
+    if (scalar @str > 0) {
+        print "<tr><th colspan=3>&nbsp;</th></tr>\n"
+          . "<tr><th colspan=3>"
+          . "<img src=\"pict/int_h_str.jpg\" alt=\"Strings of Images\">"
+          . "</th></tr>\n";
+        my @sort = sort { $a cmp $b } @str;
+        int_menu_print(\%md5s, \@sort);
+
+    }
+
+    # timeline body files
+    if (scalar @body > 0) {
+        print "<tr><th colspan=3>&nbsp;</th></tr>\n"
+          . "<tr><th colspan=3>"
+          . "<img src=\"pict/int_h_data.jpg\" alt=\"Timeline Data Files\">"
+          . "</th></tr>\n";
+        my @sort = sort { $a cmp $b } @body;
+        int_menu_print(\%md5s, \@sort);
+    }
+
+    # timeline files
+    if (scalar @tl > 0) {
+        print "<tr><th colspan=3>&nbsp;</th></tr>\n"
+          . "<tr><th colspan=3>"
+          . "<img src=\"pict/int_h_tl.jpg\" alt=\"Timelines\">"
+          . "</th></tr>\n";
+        my @sort = sort { $a cmp $b } @tl;
+        int_menu_print(\%md5s, \@sort);
+    }
+
+    print <<EOF;
+</table>
+<p>
+<table cellspacing=20 width=600 cellpadding=2>
+<tr>
+  <td><a href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_CASEMAN&view=$Caseman::VOL_OPEN\" target=\"_top\">
+    <img src=\"pict/menu_b_close.jpg\" alt=\"close\" 
+    width=\"167\" height=20 border=\"0\">
+  </a>
+  </td>
+  <td><a href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_HASH&view=$Hash::IMG_LIST_FR\" target=\"_top\">
+    <img src=\"pict/menu_b_ref.jpg\" alt=\"Refresh\" 
+    width=\"167\" height=20 border=\"0\">
+  </a>
+  </td>
+  <td align=center>
+    <a href=\"$::HELP_URL\" target=\"_blank\">
+    <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" 
+    width=\"167\" height=20 border=0>
+  </a>
+  </td>
+</tr>
+</table>
+
+EOF
+    Print::print_html_footer();
+    return 0;
+}
+
+# Pass the relative path (images/xyz) of the file.  The MD5 is
+# returned (or NULL) (in all caps)
+sub lookup_md5 {
+    my $vol = shift;
+    my $md5 = "";
+
+    my $md5_file = "$::host_dir/md5.txt";
+
+    if (-e "$md5_file") {
+        unless (open(FILE, $md5_file)) {
+            print "Error opening $md5_file<br>\n";
+            return "";
+        }
+
+        while (<FILE>) {
+            s/^\s+//;
+            s/\s+$//;
+
+            if (/($::REG_MD5)\s+(.*)/o) {
+                my $m = $1;
+                if ($2 =~ /$vol$/) {
+                    $md5 = $m;
+                    $md5 =~ tr/[a-f]/[A-F]/;
+                    last;
+                }
+            }
+            else {
+                print "Error reading line $. of $md5_file: $_<br>\n";
+                return "";
+            }
+        }
+        close(FILE);
+    }
+
+    return $md5;
+}
+
+sub img_verify {
+
+    Print::print_html_header("Image Integrity Check");
+
+    my $vol = Args::get_vol('vol');
+
+    my $md5 = lookup_md5($vol);
+
+    if ($md5 eq "") {
+        print
+"The MD5 value of <tt>$Caseman::vol2sname{$vol}</tt> was not found<br>"
+          . "It can be calculated by pressing the button below."
+          . "<br><br>\n<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Hash::IMG_CALC\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+          . Args::make_hidden()
+          . "<input type=\"image\" src=\"pict/int_b_calc.jpg\" "
+          . "alt=\"Calculate\" border=\"0\">\n</form>";
+        return 1;
+    }
+
+    Print::log_host_inv("$Caseman::vol2sname{$vol}: Checking image integrity");
+
+    print "Original MD5: <tt>$md5</tt><br>\n";
+
+    # We have the original value, now get the new one
+    my $img = $Caseman::vol2path{$vol};
+
+    my $cur;
+    if ($Caseman::vol2itype{$vol} eq "split") {
+        $cur = calc_md5_split($img);
+    }
+    else {
+        $cur = calc_md5($img);
+    }
+
+    if ($cur =~ /^$::REG_MD5$/o) {
+        print "Current MD5: <tt>$cur</tt><br><br>\n";
+
+        if ($cur eq $md5) {
+            print "Pass<br>\n";
+            Print::log_host_inv(
+                "$Caseman::vol2sname{$vol}: Image integrity check PASSED");
+        }
+        else {
+            print "<font color=\"$::DEL_COLOR[0]\">Fail: Restore from backup"
+              . "<br>\n";
+
+            Print::log_host_inv(
+                "$Caseman::vol2sname{$vol}: Image integrity check FAILED");
+        }
+        Print::print_html_footer();
+        return 0;
+    }
+    else {
+        print "$cur<br>\n";
+        Print::print_html_footer();
+        return 1;
+    }
+}
+
+# Calculate the MD5 value of a file (given the full path)
+# return the value in upper case
+# This one supports only single files - not split volumes
+sub calc_md5 {
+    my $img = shift;
+
+    my $hit_cnt = 0;
+    $SIG{ALRM} = sub {
+        if (($hit_cnt++ % 5) == 0) {
+            print "+";
+        }
+        else {
+            print "-";
+        }
+        alarm(5);
+    };
+
+    alarm(5);
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::MD5_EXE' $img");
+
+    alarm(0);
+    $SIG{ALRM} = 'DEFAULT';
+    print "<br>\n"
+      if ($hit_cnt > 0);
+
+    my $out = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $out = "Error calculating MD5"
+      if ((!defined $out) || ($out eq ""));
+
+    if ($out =~ /^($::REG_MD5)\s+/) {
+        my $m = $1;
+        $m =~ tr/[a-f]/[A-F]/;
+        return $m;
+    }
+    else {
+        return $out;
+    }
+}
+
+# Same as the version above, but this one can do split images
+# it fails though if the file is not a multiple of 512
+sub calc_md5_split {
+    my $img = shift;
+
+    my $hit_cnt = 0;
+    $SIG{ALRM} = sub {
+        if (($hit_cnt++ % 5) == 0) {
+            print "+";
+        }
+        else {
+            print "-";
+        }
+        alarm(5);
+    };
+
+    alarm(5);
+    local *OUT;
+
+    # We use the blkls method so that we can handle split images
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/blkls' -f raw -e $img | '$::MD5_EXE'");
+
+    alarm(0);
+    $SIG{ALRM} = 'DEFAULT';
+    print "<br>\n"
+      if ($hit_cnt > 0);
+
+    my $out = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $out = "Error calculating MD5"
+      if ((!defined $out) || ($out eq ""));
+
+    if ($out =~ /^($::REG_MD5)\s+/) {
+        my $m = $1;
+        $m =~ tr/[a-f]/[A-F]/;
+        return $m;
+    }
+    else {
+        return $out;
+    }
+}
+
+# Pass it the full path and the short name
+# and it adds it to md5.txt and returns the MD5
+sub int_create_wrap {
+    my $vol = shift;
+    my $img = $Caseman::vol2path{$vol};
+
+    my $m;
+    if (   (exists $Caseman::vol2itype{$vol})
+        && ($Caseman::vol2itype{$vol} eq "split"))
+    {
+        $m = calc_md5_split($img);
+    }
+    else {
+        $m = calc_md5($img);
+    }
+    Caseman::update_md5($vol, $m) if ($m =~ /^$::REG_MD5$/o);
+    return $m;
+}
+
+sub img_calc {
+    Print::print_html_header("Image Integrity Creation");
+    my $vol = Args::get_vol('vol');
+    print "Calculating MD5 value for <tt>$Caseman::vol2sname{$vol}</tt><br>\n";
+    Print::log_host_inv("$Caseman::vol2sname{$vol}: Calculating MD5 value");
+
+    my $m = int_create_wrap($vol);
+
+    print "MD5: <tt>$m</tt><br>\n";
+    print "<br>Value saved to host file<br><br>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Conver the 'image' format to the 'volume' format
+# Make one central file
+sub convert {
+    my %img2vol = %{shift()};
+
+    Print::log_host_info("Converting format of MD5 hash files");
+
+    # Get out of here if there are no hash files
+    return 0
+      unless ((-e "$::host_dir" . "$::IMGDIR" . "/md5.txt")
+        || (-e "$::host_dir" . "$::DATADIR" . "/md5.txt"));
+
+    # We are going ot make a single file
+    my $md5_file_new = "$::host_dir" . "/md5.txt";
+    open MD5_NEW, ">$md5_file_new"
+      or die "Can't open writing file: $md5_file_new";
+
+    # Read the md5s for the image directory
+    my $md5_file = "$::host_dir" . "$::IMGDIR" . "/md5.txt";
+    if (open(FILE, $md5_file)) {
+
+        # Read the md5 values into a hash
+        while (<FILE>) {
+            s/^\s+//;
+            s/\s+$//;
+
+            if (/($::REG_MD5)\s+(.*)/o) {
+                my $md5 = $1;
+                my $img = $2;
+
+                unless (exists $img2vol{$img}) {
+                    print STDERR
+"Error finding image during hash file conversion: $img.  Skipping\n";
+                    next;
+                }
+                my $vol = $img2vol{$img};
+
+                print MD5_NEW "$md5 $vol\n";
+            }
+            else {
+                print MD5_NEW "$_";
+            }
+        }
+        close(FILE);
+        rename $md5_file, $md5_file . ".bak";
+    }
+
+    # Now do the data directory
+    $md5_file = "$::host_dir" . "$::DATADIR" . "/md5.txt";
+    if (open(FILE, $md5_file)) {
+
+        # Read the md5 values into a hash
+        while (<FILE>) {
+            s/^\s+//;
+            s/\s+$//;
+
+            if (/($::REG_MD5)\s+(.*)/o) {
+                my $md5 = $1;
+                my $img = $2;
+
+                unless (exists $img2vol{$img}) {
+                    print STDERR
+"Error finding image during hash file conversion: $img.  Skipping\n";
+                    next;
+                }
+                my $vol = $img2vol{$img};
+
+                print MD5_NEW "$md5 $vol\n";
+            }
+            else {
+                print MD5_NEW "$_";
+            }
+        }
+        close(FILE);
+        rename $md5_file, $md5_file . ".bak";
+    }
+
+    close(MD5_NEW);
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("");
+    print "<!-- This Page Intentionally Left Blank -->\n";
+    Print::print_html_footer();
+    return 0;
+}
diff --git a/lib/Kwsrch.pm b/lib/Kwsrch.pm
new file mode 100644
index 0000000000..a643bfa7bf
--- /dev/null
+++ b/lib/Kwsrch.pm
@@ -0,0 +1,954 @@
+#
+# Keyword search mode
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Kwsrch;
+
+require 'search.pl';
+
+$Kwsrch::ENTER      = 1;
+$Kwsrch::RESULTS_FR = 2;
+$Kwsrch::RUN        = 3;
+$Kwsrch::LOAD       = 4;
+$Kwsrch::BLANK      = 5;
+
+my $IMG_DETAILS = 0x80;
+
+sub main {
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Kwsrch::ENTER
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view == $Kwsrch::BLANK) {
+        blank();
+        return 0;
+    }
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the meta data address
+    if ($view == $Kwsrch::ENTER) {
+        return enter();
+    }
+    elsif ($view == $Kwsrch::RESULTS_FR) {
+        return results_fr();
+    }
+    elsif ($view == $Kwsrch::RUN) {
+        return run();
+    }
+    elsif ($view == $Kwsrch::LOAD) {
+        return load();
+    }
+    else {
+        Print::print_check_err("Invalid Keyword Search View");
+    }
+}
+
+my $CASE_INSENS = 1;
+my $CASE_SENS   = 0;
+
+my $REG_EXP = 1;
+my $STRING  = 0;
+
+# Form to enter search data
+sub enter {
+    my $vol = Args::get_vol('vol');
+
+    Print::print_html_header("Search on $Caseman::vol2sname{$vol}");
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    if ($ftype eq 'blkls') {
+        print "<center><h3>Keyword Search of Unallocated Space</h3>\n";
+    }
+    elsif ($ftype eq 'swap') {
+        print "<center><h3>Keyword Search of swap partition</h3>\n";
+    }
+    elsif ($ftype eq 'raw') {
+        print "<center><h3>Keyword Search of raw data</h3>\n";
+    }
+    elsif ($Caseman::vol2cat{$vol} eq "disk") {
+        print "<center><h3>Keyword Search of disk</h3>\n";
+    }
+    else {
+        print
+"<center><h3>Keyword Search of Allocated and Unallocated Space</h3>\n";
+    }
+
+    # @@@ Fix this - caused by writing all results to a file
+    if ($::LIVE == 1) {
+        Print::print_err(
+"Keyword searching is temporarily not available during live analysis mode"
+        );
+    }
+
+    print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "Enter the keyword string or expression to search for:<br> <input type=\"text\" name=\"str\"><br><br>\n"
+      . Args::make_hidden()
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_KWSRCH\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Kwsrch::RESULTS_FR\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n";
+
+    print "<table width=400><tr>\n"
+      . "<td width=200 align=center><input type=\"checkbox\" name=\"ascii\" value=\"1\" CHECKED>"
+      . "ASCII \n</td>"
+      . "<td width=200 align=center><input type=\"checkbox\" name=\"unicode\" value=\"1\" CHECKED>"
+      . "Unicode</td></tr>\n"
+      . "<tr><td align=center><input type=\"checkbox\" name=\"srch_case\" value=\"$CASE_INSENS\">"
+      . "Case Insensitive</td>\n"
+      . "<td align=center><input type=\"checkbox\" name=\"regexp\" value=\"$REG_EXP\">\n"
+      . "<tt>grep</tt> Regular Expression</td></tr></table>\n"
+      . "<input type=\"image\" src=\"pict/but_search.jpg\" "
+      . "alt=\"Search\" border=\"0\">\n</form>\n";
+
+    if ($::LIVE == 0) {
+        print "<table width=600><tr>\n";
+
+        # If we are a non-blkls image and one exists - make a button to load it
+        if (($ftype ne 'blkls') && (exists $Caseman::vol2blkls{$vol})) {
+            print "<td align=center width=200>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FRAME\">\n"
+              . "<input type=\"hidden\" name=\"submod\" value=\"$::MOD_KWSRCH\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$Caseman::vol2blkls{$vol}\">\n"
+              . Args::make_hidden()
+              . "<input type=\"image\" src=\"pict/srch_b_lun.jpg\" "
+              . "alt=\"Load Unallocated Image\" border=\"0\">\n<br></form></td>\n";
+        }
+
+        # If we are a blkls and the original exists - make a button to load it
+        elsif (($ftype eq 'blkls')
+            && (exists $Caseman::mod2vol{$vol}))
+        {
+            print "<td align=center width=200>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_FRAME\">\n"
+              . "<input type=\"hidden\" name=\"submod\" value=\"$::MOD_KWSRCH\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$Caseman::mod2vol{$vol}\">\n"
+              . Args::make_hidden()
+              . "<input type=\"image\" src=\"pict/srch_b_lorig.jpg\" "
+              . "alt=\"Load Original Image\" border=\"0\">\n<br></form></td>\n";
+        }
+
+        # Strings Button
+        if (   (!(exists $Caseman::vol2str{$vol}))
+            || (!(exists $Caseman::vol2uni{$vol})))
+        {
+
+            my $dest_vol = $vol;
+            $dest_vol = $Caseman::mod2vol{$vol}
+              if exists($Caseman::mod2vol{$vol});
+
+            print "<td align=center width=200>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_DETAILS\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$dest_vol\">\n"
+              . Args::make_hidden()
+              . "<input type=\"image\" src=\"pict/srch_b_str.jpg\" "
+              . "alt=\"Extract Strings\" border=\"0\">\n<br></form></td>\n";
+        }
+
+        # Unallocated Space Button
+        if (   ($Fs::is_fs{$ftype})
+            && (!(exists $Caseman::vol2blkls{$vol})))
+        {
+            print "<td align=center width=200>"
+              . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+              . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_CASEMAN\">\n"
+              . "<input type=\"hidden\" name=\"view\" value=\"$Caseman::VOL_DETAILS\">\n"
+              . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+              . Args::make_hidden()
+              . "<input type=\"image\" src=\"pict/srch_b_un.jpg\" "
+              . "alt=\"Extract Unallocated Space\" border=\"0\">\n<br></form></td>\n";
+        }
+
+        print "</tr></table>\n";
+    }
+
+    print "<a href=\"help/grep.html\" target=\"_blank\">"
+      . "Regular Expression Cheat Sheet</a>\n<br><br>\n";
+
+    print "<p><font color=\"red\">NOTE:</font> The keyword search runs "
+      . "<tt>grep</tt> on the image.<br>\n"
+      . "A list of what will and "
+      . "what will not be found is available "
+      . "<a href=\"help/grep_lim.html\" target=\"_blank\">here</a>.<br>\n";
+
+    # Section for previous searches
+    if ($::LIVE == 0) {
+        my $srch_name = get_srch_fname(0);
+        if (-e $srch_name) {
+            print "<hr><h3>Previous Searches</h3>\n" . "<table width=600>\n";
+            my $row_idx = 0;
+
+            # Cycle through the files
+            for (my $srch_idx = 0;; $srch_idx++) {
+
+                $srch_name = get_srch_fname($srch_idx);
+
+                last unless (-e $srch_name);
+
+                # Open the file to get the string and count
+                unless (open(SRCH, "$srch_name")) {
+                    print "Error opening search file: $srch_name\n";
+                    return 1;
+                }
+                my $prev_str = "";
+                my $prev_cnt = 0;
+
+                while (<SRCH>) {
+                    unless (/^(\d+)\|(.*?)?\|(.*)$/) {
+                        print
+                          "Error pasing header of search file: $srch_name\n";
+                        return 1;
+                    }
+                    $prev_cnt = $1;
+                    $prev_str = $3;
+                    if (length($prev_str) > 32) {
+                        $prev_str = substr($prev_str, 0, 32);
+                        $prev_str .= "...";
+                    }
+
+                    last;
+                }
+                close(SRCH);
+
+                print "<tr>\n" if ($row_idx == 0);
+
+                print "  <td align=center width=150>\n"
+                  . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+                  . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_KWSRCH\">\n"
+                  . "<input type=\"hidden\" name=\"view\" value=\"$Kwsrch::RESULTS_FR\">\n"
+                  . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+                  . "<input type=\"hidden\" name=\"srchidx\" value=\"$srch_idx\">\n"
+                  . Args::make_hidden();
+
+                print "<input type=\"SUBMIT\" value=\"".Print::html_encode($prev_str)." ($prev_cnt)\">"
+                  . "<br></form>\n";
+
+                if ($row_idx == 3) {
+                    print "</tr>\n";
+                    $row_idx = 0;
+                }
+                else {
+                    $row_idx++;
+                }
+            }
+            print "</table>\n";
+        }
+    }
+
+    # Predefined expressions from search.pl
+    print "<hr><h3>Predefined Searches</h3>\n";
+    print "<table width=600>\n";
+    my $row_idx = 0;
+    my $r;
+    foreach $r (keys %Kwsrch::auto_srch) {
+
+        $Kwsrch::auto_srch_reg{$r} = 0
+          unless (defined $Kwsrch::auto_srch_reg{$r});
+        $Kwsrch::auto_srch_csense{$r} = 1
+          unless (defined $Kwsrch::auto_srch_csense{$r});
+
+        print "<tr>\n" if ($row_idx == 0);
+
+        # @@@ Make a unicode option in predefined
+
+        print "  <td align=center width=150>\n"
+          . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_KWSRCH\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Kwsrch::RESULTS_FR\">\n"
+          . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+          . "<input type=\"hidden\" name=\"str\" value=\"$Kwsrch::auto_srch{$r}\">\n"
+          . "<input type=\"hidden\" name=\"ascii\" value=\"1\">\n"
+          . Args::make_hidden();
+
+        if ($Kwsrch::auto_srch_reg{$r} == 1) {
+            print
+              "<input type=\"hidden\" name=\"regexp\" value=\"$REG_EXP\">\n";
+        }
+        if ($Kwsrch::auto_srch_csense{$r} == 0) {
+            print
+"<input type=\"hidden\" name=\"srch_case\" value=\"$CASE_INSENS\">\n";
+        }
+        print "<input type=\"SUBMIT\" value=\"$r\"><br></form>\n" . "  </td>\n";
+
+        if ($row_idx == 3) {
+            print "</tr>\n";
+            $row_idx = 0;
+        }
+        else {
+            $row_idx++;
+        }
+    }
+    print "</table>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# MAIN WITH RESULTS
+# Page that makes frame with the results on left and data units on right
+sub results_fr {
+    my $vol = Args::get_vol('vol');
+
+    # A string was given for a new search
+    if (exists $Args::args{'str'}) {
+        Args::check_str();
+
+        Print::print_html_header_frameset(
+            "Search on $Caseman::vol2sname{$vol} for $Args::args{'str'}");
+
+        print "<frameset cols=\"35%,65%\">\n";
+
+        my $srch_case = "";
+        $srch_case = "&srch_case=$Args::args{'srch_case'}"
+          if (exists $Args::args{'srch_case'});
+
+        my $regexp = "";
+        $regexp = "&regexp=$Args::args{'regexp'}"
+          if (exists $Args::args{'regexp'});
+
+        my $ascii = "";
+        $ascii = "&ascii=$Args::args{'ascii'}"
+          if (exists $Args::args{'ascii'});
+
+        my $unicode = "";
+        $unicode = "&unicode=$Args::args{'unicode'}"
+          if (exists $Args::args{'unicode'});
+
+        # Block List
+        print "<frame src=\"$::PROGNAME?"
+          . "mod=$::MOD_KWSRCH&view=$Kwsrch::RUN&"
+          . "$Args::baseargs$srch_case$regexp&str=$Args::enc_args{'str'}$ascii$unicode\">\n";
+    }
+    elsif (exists $Args::args{'srchidx'}) {
+        Args::check_srchidx();
+
+        Print::print_html_header_frameset(
+"Search on $Caseman::vol2sname{$vol} for Index $Args::args{'srchidx'}"
+        );
+
+        print "<frameset cols=\"35%,65%\">\n";
+
+        # Block List
+        print "<frame src=\"$::PROGNAME?"
+          . "mod=$::MOD_KWSRCH&view=$Kwsrch::LOAD&"
+          . "$Args::baseargs&srchidx=$Args::enc_args{'srchidx'}\">\n";
+    }
+
+    # Block Contents
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_KWSRCH&view=$Kwsrch::BLANK&"
+      . "$Args::baseargs\" name=\"content\">\n"
+      . "</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Find an empty file to save the keyword searches to
+sub find_srch_file {
+    my $vol = Args::get_vol('vol');
+
+    my $out_name = "$::host_dir" . "$::DATADIR/$Caseman::vol2sname{$vol}";
+    my $i;
+    for ($i = 0; -e "${out_name}-${i}.srch"; $i++) { }
+
+    return "${out_name}-${i}.srch";
+}
+
+# Pass the index
+# return the full path of the file returned
+sub get_srch_fname {
+    my $idx = shift;
+    my $vol = Args::get_vol('vol');
+    return "$::host_dir"
+      . "$::DATADIR"
+      . "/$Caseman::vol2sname{$vol}-${idx}.srch";
+}
+
+sub load {
+    Args::check_srchidx();
+
+    Print::print_html_header("");
+
+    if ($::LIVE == 1) {
+        print "Searches cannot be loaded during live analysis<br>\n";
+        return 1;
+    }
+
+    my $srch_name = get_srch_fname($Args::args{'srchidx'});
+
+    print "<b><a href=\"$::PROGNAME?mod=$::MOD_KWSRCH&view=$Kwsrch::ENTER&"
+      . "$Args::baseargs\" "
+      . "target=\"_parent\">New Search</a></b>\n<p>";
+
+    print_srch_results($srch_name);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# performs actual search, saves hits to file, and calls method to print
+sub run {
+    Args::check_str();
+
+    Print::print_html_header("");
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $orig_str = Args::get_str();
+    my $grep_str = $orig_str;       # we will escape some values in the grep ver
+
+    # Check for a search string
+    if ($orig_str eq "") {
+        print "You must enter a string value to search<br>\n";
+        print "<b><a href=\"$::PROGNAME?mod=$::MOD_KWSRCH&view=$Kwsrch::ENTER&"
+          . "$Args::baseargs\" target=\"_parent\">New Search</a></b>\n<p>";
+        return 1;
+    }
+
+    my $log = "";                   # Log entry string
+
+    my $ascii   = 0;
+    my $unicode = 0;
+
+    if ((exists $Args::args{'ascii'}) && ($Args::args{'ascii'} == 1)) {
+        $ascii = 1;
+        $log .= "ASCII, ";
+    }
+    if ((exists $Args::args{'unicode'}) && ($Args::args{'unicode'} == 1)) {
+        $unicode = 1;
+        $log .= "Unicode, ";
+    }
+
+    if (($ascii == 0) && ($unicode == 0)) {
+        print "You must choose either ASCII or Unicode to search<br>\n";
+        print "<b><a href=\"$::PROGNAME?mod=$::MOD_KWSRCH&view=$Kwsrch::ENTER&"
+          . "$Args::baseargs\" target=\"_parent\">New Search</a></b>\n<p>";
+        return 1;
+    }
+
+    my $grep_flag = "";    # Flags to pass to grep
+
+    # Check if search is case insensitive
+    my $case = 0;
+    if (   (exists $Args::args{'srch_case'})
+        && ($Args::args{'srch_case'} == $CASE_INSENS))
+    {
+        $grep_flag = "-i";
+        $case      = 1;
+        $log .= "Case Insensitive ";
+    }
+
+    # Check if search is a regular expression
+    my $regexp = 0;
+    if ((exists $Args::args{'regexp'}) && ($Args::args{'regexp'} == $REG_EXP)) {
+        $grep_flag .= " -E";
+        $regexp = 1;
+        $log .= "Regular Expression ";
+    }
+
+    # if not a reg-exp, we need to escape some special values that
+    # 'grep' will misinterpret
+    else {
+        $grep_str =~ s/\\/\\\\/g;    # \
+        $grep_str =~ s/\./\\\./g;    # .
+        $grep_str =~ s/\[/\\\[/g;    # [
+        $grep_str =~ s/\^/\\\^/g;    # ^
+        $grep_str =~ s/\$/\\\$/g;    # $
+        $grep_str =~ s/\*/\\\*/g;    # *
+             # We need to add ' to end begin and end of the search as well
+        if ($grep_str =~ /\'/) {
+            $grep_str =~ s/\'/\\\'/g;    # '
+            $grep_str = "'$grep_str'";
+        }
+        $grep_str =~ s/^\-/\\\-/;        # starting with - (mistakes for an arg)
+    }
+
+    Print::log_host_inv(
+        "$Caseman::vol2sname{$vol}: ${log}search for $grep_str");
+
+    # Get the addressable unit of image
+    my $bs = Args::get_unitsize();
+
+    # $norm_str is normalized to find the "hit" in the output
+    my $norm_str = $orig_str;
+
+    # make this lowercase if we are doing case insens
+    $norm_str =~ tr/[A-Z]/[a-z]/ if ($case == 1);
+
+    my $norm_str_len = length($norm_str);
+
+    # array to pass to printing method
+    my @results;
+
+    my $name_uni = "";
+    my $name_asc = "";
+
+    # round 0 is for ASCII and 1 is for Unicode
+    for (my $i = 0; $i < 2; $i++) {
+
+        next if (($i == 0) && ($ascii == 0));
+        next if (($i == 1) && ($unicode == 0));
+
+        @results = ();
+
+        local *OUT;
+
+        my $hit_cnt = 0;
+        $SIG{ALRM} = sub {
+            if (($hit_cnt++ % 5) == 0) {
+                print "+";
+            }
+            else {
+                print "-";
+            }
+            alarm(5);
+        };
+
+        alarm(5);
+
+        if ($i == 0) {
+            print "<b>Searching for ASCII</b>: ";
+        }
+        else {
+            print "<b>Searching for Unicode</b>: ";
+        }
+
+        # if the string is less than 4 chars, then it will not be in the
+        # strings file so it will be searched for the slow way
+        if (length($orig_str) < 4) {
+            my $ltmp = length($orig_str);
+
+            if ($i == 0) {
+                if (   (($ftype eq "raw") || ($ftype eq "swap"))
+                    && ($Caseman::vol2end{$vol} != 0))
+                {
+                    Exec::exec_pipe(*OUT,
+                            "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                          . $Caseman::vol2start{$vol} . "-"
+                          . $Caseman::vol2end{$vol}
+                          . " | '$::TSKDIR/srch_strings' -a -t d -$ltmp | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+                else {
+                    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d -$ltmp | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+            }
+
+            else {
+                if (   (($ftype eq "raw") || ($ftype eq "swap"))
+                    && ($Caseman::vol2end{$vol} != 0))
+                {
+                    Exec::exec_pipe(*OUT,
+                            "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                          . $Caseman::vol2start{$vol} . "-"
+                          . $Caseman::vol2end{$vol}
+                          . " | '$::TSKDIR/srch_strings' -a -t d -e l -$ltmp | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+                else {
+                    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d -e l -$ltmp | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+            }
+        }
+
+        # Use the strings file if it exists
+        elsif (($i == 0) && (defined $Caseman::vol2str{$vol})) {
+            my $str_vol = $Caseman::vol2path{$Caseman::vol2str{$vol}};
+            Exec::exec_pipe(*OUT,
+                "'$::GREP_EXE' $grep_flag '$grep_str' $str_vol");
+        }
+        elsif (($i == 1) && (defined $Caseman::vol2uni{$vol})) {
+            my $str_vol = $Caseman::vol2path{$Caseman::vol2uni{$vol}};
+            Exec::exec_pipe(*OUT,
+                "'$::GREP_EXE' $grep_flag '$grep_str' $str_vol");
+        }
+
+        # Run strings on the image first and then grep that
+        else {
+            if ($i == 0) {
+                if (   (($ftype eq "raw") || ($ftype eq "swap"))
+                    && ($Caseman::vol2end{$vol} != 0))
+                {
+                    Exec::exec_pipe(*OUT,
+                            "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                          . $Caseman::vol2start{$vol} . "-"
+                          . $Caseman::vol2end{$vol}
+                          . " | '$::TSKDIR/srch_strings' -a -t d | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+                else {
+                    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+            }
+            else {
+                if (   (($ftype eq "raw") || ($ftype eq "swap"))
+                    && ($Caseman::vol2end{$vol} != 0))
+                {
+                    Exec::exec_pipe(*OUT,
+                            "'$::TSKDIR/blkls' -e -f $ftype -i $imgtype $img "
+                          . $Caseman::vol2start{$vol} . "-"
+                          . $Caseman::vol2end{$vol}
+                          . " | '$::TSKDIR/srch_strings' -a -t d -e l | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+                else {
+                    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/blkls' -e -f $ftype -o $offset -i $imgtype $img | '$::TSKDIR/srch_strings' -a -t d -e l | '$::GREP_EXE' $grep_flag '$grep_str'"
+                    );
+                }
+            }
+        }
+
+        alarm(0);
+        $SIG{ALRM} = 'DEFAULT';
+
+        # Cycle through the results and put them in an array
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+
+            # Parse out the byte offset and hit string
+            if (/^\s*(\d+)\s+(.+)$/) {
+                my $off          = $1;
+                my $hit_str_orig = $2;
+                my $idx          = 0;
+
+                # Make a copy that we can modify & play with
+                my $hit_str = $hit_str_orig;
+                $hit_str =~ tr/[A-Z]/[a-z]/ if ($case == 1);
+
+                # How long was the string that we hit?
+                my $hit_str_len = length($hit_str);
+
+                # I'm not sure how to find a grep re in the hit yet, so
+                # for now we do not get the exact offset
+                if ($regexp) {
+                    my $b = int($off / $bs);
+                    my $o = int($off % $bs);
+
+                    # $hit =~ s/\n//g;
+                    push @results, "${b}|${o}|";
+                    next;
+                }
+
+                # There could be more than one keyword in the string
+                # so cycle through all of them
+                my $psize = scalar(@results);
+                while (($idx = index($hit_str, $norm_str, $idx)) > -1) {
+
+                    # The summary of the hit starts 5 chars before it
+                    my $sum_min = $idx - 5;
+                    $sum_min = 0 if ($sum_min < 0);
+
+                    # Goto 5 after, if there is still space
+                    my $sum_max = $idx + $norm_str_len + 5;
+                    $sum_max = $hit_str_len if ($sum_max > $hit_str_len);
+
+                    my $sum_hit =
+                      substr($hit_str_orig, $sum_min, $sum_max - $sum_min);
+
+                    # remove new lines
+                    $sum_hit =~ s/\n/ /g;
+
+                    # The actual offset for Unicode is 2 bytes per char
+                    my $tmpidx = $idx;
+                    $tmpidx *= 2
+                      if ($i == 1);
+
+                    my $b = int(($off + $tmpidx) / $bs);
+                    my $o = int(($off + $tmpidx) % $bs);
+
+                    push @results, "${b}|${o}|$sum_hit";
+
+                    # advance index to find next hit
+                    $idx++;
+                }
+
+                # If we did not find a term, then just print what
+                # was found-this occurs bc index does not find it
+                # sometimes.
+                if ($psize == scalar(@results)) {
+
+                    my $b = int($off / $bs);
+                    my $o = int($off % $bs);
+
+                    # $hit =~ s/\n//g;
+                    push @results, "${b}|${o}|";
+                    next;
+                }
+            }
+
+            # A negative offset is common on FreeBSD with large images
+            elsif (/^\s*(\-\d+):?\s*(.+)$/) {
+                print "ERROR: Negative byte offset ($1) Your version of "
+                  . "strings likely does not support large files: $2<br>\n";
+            }
+            else {
+                print "Error parsing grep result: $_<br>\n";
+            }
+        }
+        close(OUT);
+
+        print " <b>Done</b><br>";
+        my $cnt = scalar(@results);
+
+        my $srch_name = "";
+        if ($::LIVE == 0) {
+            print "<b>Saving</b>: ";
+
+            # Find a file to save the results to
+            $srch_name = find_srch_file();
+            unless (open(IDX, ">$srch_name")) {
+                print "Error opening $srch_name\n";
+                return (1);
+            }
+
+            # Print the header
+            if ($i == 0) {
+                print IDX "$cnt|${grep_flag}|${orig_str}|ascii\n";
+                $name_asc = $srch_name;
+            }
+            else {
+                print IDX "$cnt|${grep_flag}|${orig_str}|unicode\n";
+                $name_uni = $srch_name;
+            }
+
+            for (my $a = 0; $a < $cnt; $a++) {
+                print IDX "$results[$a]\n";
+            }
+            close(IDX);
+            print " <b>Done</b><br>\n";
+        }
+        if ($i == 0) {
+            print "$cnt hits";
+            print "- <a href=\"#ascii\">link to results</a>" if ($cnt > 0);
+            print "<br>\n";
+        }
+        else {
+            print "$cnt hits";
+            print "- <a href=\"#unicode\">link to results</a>" if ($cnt > 0);
+            print "<br>\n";
+        }
+        print "<hr>\n";
+    }
+
+    print "<b><a href=\"$::PROGNAME?mod=$::MOD_KWSRCH&view=$Kwsrch::ENTER&"
+      . "$Args::baseargs\" "
+      . "target=\"_parent\">New Search</a></b>\n<p>";
+
+    if ($::LIVE == 0) {
+        if ($ascii == 1) {
+            print_srch_results($name_asc);
+        }
+
+        if ($unicode == 1) {
+            print_srch_results($name_uni);
+        }
+    }
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Args are search string, grep flags, and array of hits
+sub print_srch_results {
+
+    if (scalar(@_) != 1) {
+        print "Missing Args for print_srch_results()\n";
+        return 1;
+    }
+
+    my $srch_name = shift;
+    my $vol       = Args::get_vol('vol');
+    my $ftype     = $Caseman::vol2ftype{$vol};
+
+    my $addr_str = $Fs::addr_unit{$ftype};
+
+    unless (open(SRCH, "$srch_name")) {
+        print "Error opening search file: $srch_name\n";
+        return 1;
+    }
+
+    my @results;
+    my $grep_str  = "";
+    my $grep_flag = "";
+    my $cnt       = 0;
+    my $type      = 0;    # ASCII iis 0 and Unicode is 1
+
+    my $prev = -1;
+
+    while (<SRCH>) {
+
+        # The first line is a header
+        if ($. == 1) {
+            if (/^(\d+)\|(.*?)?\|(.*)$/) {
+                $cnt       = $1;
+                $grep_flag = $2;
+                $grep_str  = $3;
+                $type      = 0;
+            }
+            else {
+                print "Error pasing header of search file: $srch_name\n";
+                close(SRCH);
+                return 1;
+            }
+
+            if ($grep_str =~ /^(.*?)\|unicode$/) {
+                $grep_str = $1;
+                $type     = 1;
+            }
+            elsif ($grep_str =~ /^(.*?)\|ascii$/) {
+                $grep_str = $1;
+            }
+
+            my $grep_str_html = Print::html_encode($grep_str);
+            print "<hr>\n";
+            if ($type == 0) {
+                print "<a name=\"ascii\">\n";
+            }
+            else {
+                print "<a name=\"unicode\">\n";
+            }
+
+            if ($cnt == 0) {
+                print "<b><tt>$grep_str_html</tt> was not found</b><br>\n";
+            }
+            elsif ($cnt == 1) {
+                print
+"<b>1 occurrence of <tt>$grep_str_html</tt> was found</b><br>\n";
+            }
+            else {
+                print
+"<b>$cnt occurrences of <tt>$grep_str_html</tt> were found</b><br>\n";
+            }
+
+            print "Search Options:<br>\n";
+            if ($type == 0) {
+                print "&nbsp;&nbsp;ASCII<br>\n";
+            }
+            else {
+                print "&nbsp;&nbsp;Unicode<br>\n";
+            }
+
+            if ($grep_flag =~ /\-i/) {
+                print "&nbsp;&nbsp;Case Insensitive<br>\n";
+            }
+            else {
+                print "&nbsp;&nbsp;Case Sensitive<br>\n";
+            }
+            if ($grep_flag =~ /\-E/) {
+                print "&nbsp;&nbsp;Regular Expression<br>\n";
+            }
+
+            print "<hr>\n";
+
+            if ($cnt > 1000) {
+                print "There were more than <U>1000</U> hits.<br>\n";
+                print "Please revise the search to a managable amount.\n";
+                print
+                  "<p>The $cnt hits can be found in: <tt>$srch_name</tt><br>\n";
+                close(SRCH);
+                return 0;
+            }
+
+            next;
+        }
+
+        unless (/^(\d+)\|(\d+)\|(.*)?$/) {
+            print "Error parsing results: $_\n";
+            close(SRCH);
+            return 1;
+        }
+
+        my $blk = $1;
+        my $off = $2;
+        my $str = $3;
+
+        if ($blk != $prev) {
+            my $url =
+"$::PROGNAME?mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&$Args::baseargs&block=$blk";
+
+            print "<br>\n$addr_str $blk (<a href=\"$url&sort=$Data::SORT_HEX\" "
+              . "target=content>Hex</a> - "
+              . "<a href=\"$url&sort=$Data::SORT_ASC\" target=content>"
+              . "Ascii</a>";
+
+            print
+" - <a href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_DATA&view=$Data::CONT_MENU_FR&"
+              . "mnt=$Args::enc_args{'mnt'}&vol=$Caseman::mod2vol{$vol}&"
+              . "btype=$Data::ADDR_BLKLS&block=$blk\" target=content>Original</a>"
+              if ( ($ftype eq 'blkls')
+                && (exists $Caseman::mod2vol{$vol}));
+
+            print ")<br>";
+            $prev = $blk;
+        }
+
+        my $occ = $. - 1;
+        if ($str ne "") {
+            $str = Print::html_encode($str);
+            print "$occ: $off (<tt>$str</tt>)<br>\n";
+        }
+        else {
+            print "$occ: $off<br>\n";
+        }
+    }
+
+    close(SRCH);
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("");
+    print "<!-- This Page Intentionally Left Blank -->\n";
+    Print::print_html_footer();
+    return 0;
+}
+
+1;
diff --git a/lib/Main.pm b/lib/Main.pm
new file mode 100644
index 0000000000..88c39f67a7
--- /dev/null
+++ b/lib/Main.pm
@@ -0,0 +1,357 @@
+#
+# Main.pm
+# Autopsy Forensic Browser
+#
+# This file requires The Sleuth Kit
+#    www.sleuthkit.org
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+use lib './';
+use strict;
+
+use Appsort;
+use Appview;
+use Args;
+use Caseman;
+use Data;
+use Exec;
+use File;
+use Filesystem;
+use Frame;
+use Fs;
+use Hash;
+use Kwsrch;
+use Meta;
+use Notes;
+use Print;
+use Timeline;
+use Vs;
+
+require 'conf.pl';
+require 'define.pl';
+
+# Get rid of insecure settings
+$ENV{PATH} = "";
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
+
+# Formats for regular expressions
+# Year.Mon.Day Hr:Min:Sec (TZ)
+$::REG_DAY       = '\d\d\d\d\-\d\d\-\d\d';
+$::REG_TIME      = '\d\d:\d\d:\d\d';
+$::REG_ZONE_ARGS = '[\w\+\-\/\_]+';
+$::REG_ZONE2     = '\([\w\+\- ]*\)';
+$::REG_DATE  = "$::REG_DAY" . '\s+' . "$::REG_TIME" . '\s+' . "$::REG_ZONE2";
+$::REG_FTYPE = '[\w\-]+';
+$::REG_SKEW  = '[\+\-]?\d+';
+$::REG_MTYPE = '[\?bcdflprsvw-]';    # Type according to meta data
+
+$::REG_FILE     = '[\w\-\_\.]+';
+$::REG_CASE     = $::REG_FILE;
+$::REG_HOST     = '[\w\-\_\.]+';
+$::REG_INVESTIG = '[\w]+';
+
+$::REG_IMG           = "$::REG_FILE" . '/' . "$::REG_FILE";
+$::REG_IMG_PATH      = '/[\w\-\_\.\/]+';
+$::REG_IMG_PATH_WILD = '/[\w\-\_\.\/]+\*?';
+$::REG_IMG_CONFIG    = '[\w\-\_\.\/ ]+';
+$::REG_FNAME         = $::REG_FILE;
+$::REG_MNT           = '[\w\-\_\.\/\:\\\\]+';
+$::REG_SEQ_FILE      = '[\w\s\-\_\.\/\:\\\\]+';
+$::REG_HASHDB        = '[\w\-\_\.\,\/]+';
+$::REG_IMGTYPE       = '[\w\,]+';
+$::REG_INAME         = '[\w]+';
+$::REG_VNAME         = '[\w]+';
+
+$::REG_META = '[\d-]+';
+$::REG_MD5  = '[0-9a-fA-F]{32,32}';
+
+$::HELP_URL = "help/index.html";
+
+# host_dir and case_dir will end with a '/'
+$::host_dir = "";
+$::case_dir = "";
+
+################## NEW STUFF ##########################
+# MODULES
+
+# If the values of these are changed, or if new modules are added,
+# Then the below pseudo-binary sort algorithm must be changed as well
+$::MOD_CASEMAN = 0;
+$::MOD_FRAME   = 1;
+$::MOD_FILE    = 2;
+$::MOD_META    = 3;
+$::MOD_KWSRCH  = 4;
+$::MOD_DATA    = 5;
+$::MOD_TL      = 6;
+$::MOD_FS      = 7;
+$::MOD_APPSORT = 8;
+$::MOD_NOTES   = 9;
+$::MOD_HASH    = 10;
+$::MOD_APPVIEW = 11;
+
+# Main Menu
+#
+# Display the title page
+sub welcome {
+    Print::print_html_header_javascript("Autopsy Forensic Browser");
+
+    print "<center>\n";
+
+    # This problem has not been seen with the 1 second delay
+    if ((0) && ($] >= 5.008)) {
+        print
+"<p><font color=\"red\">Warning: You are using Perl v5.8.</font><br>\n"
+          . "  Some buffer problems have been reported with Autopsy and Perl 5.8 "
+          . "where output is not shown.<br>\n"
+          . "Perl 5.6 should be used if available.\n"
+          . "If data is missing, reload the page<br><hr>\n";
+    }
+
+    print <<EOF;
+<table cellspacing=0 cellpadding=2 width=600 height=350 border=0>
+
+<tr>
+  <td colspan=\"3\" align=\"center\" valign=\"MIDDLE\">
+    <b>Autopsy Forensic Browser  $::VER</b>
+  </td>
+</tr>
+<tr>
+  <td colspan=\"3\">&nbsp;</td>
+</tr>
+<tr>
+  <td colspan=\"3\" align=\"center\" valign=\"MIDDLE\">
+    <a href=\"./about\">
+      <img src=\"pict/logo.jpg\" border=0 alt="Logo">
+    </a>
+  </td>
+</tr>
+<tr>
+  <td colspan=\"3\">&nbsp;</td>
+</tr>
+<tr>
+  <td colspan=\"3\" align=\"center\" valign=\"MIDDLE\">
+    <a href="http://www.sleuthkit.org/autopsy/">
+      <tt>http://www.sleuthkit.org/autopsy/</tt>
+    </a>
+  </td>
+</tr>
+<tr><td colspan=3>&nbsp;</td></tr>
+<tr>
+  <td align=center width=200 valign=\"MIDDLE\">
+    <a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::CASE_OPEN\">
+      <img src=\"pict/menu_b_copen.jpg\" alt=\"Open Case\" width=176 height=20 border=0>
+    </a>
+  </td>
+  <td align=center width=200 valign=\"MIDDLE\">
+    <a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::CASE_NEW\">
+      <img src=\"pict/menu_b_cnew.jpg\" alt=\"New Case\" width=176 height=20 border=0>
+    </a>
+  </td>
+  <td align=center width=200 valign=\"MIDDLE\">
+    <a href=\"$::HELP_URL\" target=\"_blank\">
+      <img src=\"pict/menu_b_help.jpg\" alt=\"Help\" width=167 height=20 border=0>
+    </a>
+  </td>
+</tr>
+</table>
+
+EOF
+
+    Print::print_html_footer_javascript();
+    return 0;
+}
+
+sub get_tskver {
+    local *OUT;
+    Exec::exec_pipe(*OUT, "'$::TSKDIR/fls' -V");
+
+    my $ver = Exec::read_pipe_line(*OUT);
+    $ver = $1 if ($ver =~ /^The Sleuth Kit ver (.*)$/);
+    close(OUT);
+
+    return $ver;
+}
+
+# This function is called by the code in the 'autopy' file.
+# This will check for the basic module arguments and then host
+# and case accordingly.  The main function of each of the modules
+# is called from here.  Each of the modules will have to take care
+# of the detailed argument checking.
+
+sub main {
+
+    # Parse arguments
+    my $lcl_args = shift;
+    Args::parse_args($lcl_args);
+
+    # When autopsy is first run, no mod or arguments are given.
+    unless (exists $Args::args{'mod'}) {
+
+        # if we are not in live analysis mode, display the usual screen
+        if ($::LIVE == 0) {
+            return welcome();
+        }
+        else {
+
+            # If we are in live analysis mode, open up the window to select
+            # and image and supply basic host and case values.
+            $Args::args{'mod'}  = $Args::enc_args{'mod'}  = $::MOD_CASEMAN;
+            $Args::args{'view'} = $Args::enc_args{'view'} = $Caseman::VOL_OPEN;
+            $Args::args{'case'} = $Args::enc_args{'case'} = "live";
+            $Args::args{'host'} = $Args::enc_args{'host'} = "local";
+            $Args::args{'inv'}  = $Args::enc_args{'inv'}  = "unknown";
+        }
+    }
+
+    Args::check_mod();
+    my $module = Args::get_mod();
+
+    Args::make_baseargs();
+
+    # For live analysis, we need to change the regular expression
+    # for images because it can be a full path (to /dev/xxxxxxx)
+    $::REG_IMG = '/[\w\-\_\.\/]+'
+      if ($::LIVE == 1);
+
+    # The Case Management module is handled seperately because
+    # it may not have the host and case values
+    if ($module == $::MOD_CASEMAN) {
+        return Caseman::main();
+    }
+
+    # Check the minimum arguments
+    Args::check_case();
+    Args::check_host();
+
+    # Set the case and host variables
+    if ($::LIVE == 0) {
+        $::case_dir = "$::LOCKDIR/" . Args::get_case() . "/";
+        $::case_dir =~ s/\/\//\//g;
+        $::host_dir = "$::case_dir" . Args::get_host() . "/";
+        $::host_dir =~ s/\/\//\//g;
+    }
+    else {
+        $::host_dir = "";
+        $::case_dir = "";
+    }
+    Caseman::read_host_config();
+
+    # This is a partial binary sort method to reduce the number of checks
+
+    # 0 < mod < 6
+    if ($module < $::MOD_TL) {
+
+        # 0 < mod < 4
+        if ($module < $::MOD_KWSRCH) {
+
+            # mod == 1
+            if ($module == $::MOD_FRAME) {
+                return Frame::main();
+            }
+
+            # mod == 2
+            elsif ($module == $::MOD_FILE) {
+                return File::main();
+            }
+
+            # mod == 3
+            elsif ($module == $::MOD_META) {
+                return Meta::main();
+            }
+        }
+
+        # 4 <= mod < 6
+        else {
+
+            # mod == 4
+            if ($module == $::MOD_KWSRCH) {
+                return Kwsrch::main();
+            }
+
+            # mod == 5
+            elsif ($module == $::MOD_DATA) {
+                return Data::main();
+            }
+        }
+    }
+
+    # 6 <= mod
+    else {
+
+        # 6 <= mod < 9
+        if ($module < $::MOD_NOTES) {
+
+            # mod == 6
+            if ($module == $::MOD_TL) {
+                return Timeline::main();
+            }
+
+            # mod == 7
+            elsif ($module == $::MOD_FS) {
+                return Filesystem::main();
+            }
+
+            # mod == 8
+            elsif ($module == $::MOD_APPSORT) {
+                return Appsort::main();
+            }
+        }
+
+        # 9 <= mod
+        else {
+
+            # mod == 9
+            if ($module == $::MOD_NOTES) {
+                return Notes::main();
+            }
+
+            # mod == 10
+            elsif ($module == $::MOD_HASH) {
+                return Hash::main();
+            }
+
+            # mod == 11
+            elsif ($module == $::MOD_APPVIEW) {
+                return Appview::main();
+            }
+
+            # New modules can be added here
+
+        }
+    }
+    Print::print_check_err("Invalid Module");
+}
+
+1;
diff --git a/lib/Meta.pm b/lib/Meta.pm
new file mode 100644
index 0000000000..a0728c06b9
--- /dev/null
+++ b/lib/Meta.pm
@@ -0,0 +1,789 @@
+#
+# Metadata mode
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Updated 1/13
+
+package Meta;
+
+$Meta::FRAME  = 0;
+$Meta::ENTER  = 1;
+$Meta::STATS  = 2;
+$Meta::EXPORT = 3;
+$Meta::FFIND  = 4;
+$Meta::LIST   = 5;
+$Meta::REPORT = 6;
+$Meta::BLANK  = 7;
+
+sub main {
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Meta::FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    # Check Basic Args
+    Args::check_vol('vol');
+
+    # These windows don't need the meta data address
+    if ($view == $Meta::FRAME) {
+        return frame();
+    }
+    elsif ($view == $Meta::ENTER) {
+        return enter();
+    }
+    elsif ($view == $Meta::LIST) {
+        return list();
+    }
+    elsif ($view == $Meta::BLANK) {
+        return blank();
+    }
+
+    # These windows do need the meta data address
+    Args::check_meta('meta');
+    if ($view == $Meta::STATS) {
+        return stats();
+    }
+    elsif ($view == $Meta::FFIND) {
+        return findfile();
+    }
+
+    Args::check_recmode();
+    if ($view == $Meta::EXPORT) {
+        return export();
+    }
+    elsif ($view == $Meta::REPORT) {
+        return report();
+    }
+    else {
+        Print::print_check_err("Invalid Meta View");
+    }
+
+}
+
+# Print the two frames
+sub frame {
+
+    my $vol = Args::get_vol('vol');
+
+    Print::print_html_header_frameset(
+        "Meta Data Browse on $Caseman::vol2sname{$vol}");
+    print "<frameset cols=\"20%,80%\">\n";
+
+    # Print the frame where an addres can be entered and a frame for the
+    # contents
+    if (exists $Args::enc_args{'meta'}) {
+        print
+"<frame src=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::ENTER&$Args::baseargs"
+          . "&meta=$Args::enc_args{'meta'}\">\n"
+          . "<frame src=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::STATS&"
+          . "meta=$Args::enc_args{'meta'}&$Args::baseargs\" "
+          . "name=\"content\">\n</frameset>\n";
+    }
+    else {
+        print
+"<frame src=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::ENTER&$Args::baseargs\">\n"
+          . "<frame src=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::BLANK&$Args::baseargs\" "
+          . "name=\"content\">\n</frameset>\n";
+    }
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# Generate the frame to enter the data into
+sub enter {
+    Print::print_html_header("");
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    # Address
+    print "<form action=\"$::PROGNAME\" method=\"get\" target=\"content\">\n"
+      . "<b>$Fs::meta_str{$ftype} Number:</b><br>&nbsp;&nbsp&nbsp;&nbsp;"
+      . "<input type=\"text\" name=\"meta\" size=12 maxlength=12";
+
+    print " value=\"$Args::enc_args{'meta'}\"" if exists($Args::args{'meta'});
+
+    print ">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_META\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Meta::STATS\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+      . Args::make_hidden()
+      .
+
+      # View Button
+      "<p><input type=\"image\" src=\"pict/but_view.jpg\" "
+      . "width=45 height=22 alt=\"View\" border=\"0\"></form>\n";
+
+    # Allocation List
+    print "<hr><p>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::LIST&$Args::baseargs\" target=\"content\">"
+      . "<img src=\"pict/but_alloc_list.jpg\" border=\"0\" "
+      . "width=113 height=20 alt=\"Allocation List\">"
+      . "</a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Display the contents of meta
+sub stats {
+    Print::print_html_header("");
+
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Displaying details of $Fs::meta_str{$ftype} $meta"
+    );
+
+    my $meta_int = $meta;
+    $meta_int = $1 if ($meta =~ /^(\d+)-\d+(-\d)?/);
+
+    my $prev = $meta_int - 1;
+    my $next = $meta_int + 1;
+
+    # We need to get the allocation status of this structure
+    my $recmode = $File::REC_NO;
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ils' -f $ftype -e -o $offset -i $imgtype $img $meta_int");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        chop;
+        next unless ($_ =~ /^$meta_int/);
+        if ($_ =~ /^$meta_int\|f/) {
+            $recmode = $File::REC_YES;
+        }
+        elsif ($_ =~ /^$meta_int\|a/) {
+            $recmode = $File::REC_NO;
+        }
+        else {
+            Print::print_err("Error parsing ils output: $_");
+        }
+    }
+    close(OUT);
+
+    print "<center>\n";
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::STATS&$Args::baseargs&meta=$prev\">"
+      . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+      . "width=\"89\" height=20 border=\"0\"></a>\n"
+      unless ($prev < $Fs::first_meta{$ftype});
+
+    print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::STATS&$Args::baseargs&meta=$next\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a>\n<br>";
+
+    # Report
+    print "<table cellspacing=\"0\" cellpadding=\"2\">\n<tr>"
+      . "<td><a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::REPORT"
+      . "&$Args::baseargs&meta=$meta&recmode=$recmode\""
+      . " target=\"_blank\">"
+      . "<img src=\"pict/but_report.jpg\" alt=\"report\" "
+      . "width=88 height=20 border=\"0\">"
+      . "</a></td>\n";
+
+    # View (File Mode)
+    print "<td><a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR"
+      . "&$Args::baseargs&meta=$meta&recmode=$recmode"
+      . "&dir=$vol-meta-$meta\" target=\"_blank\">"
+      . "<img src=\"pict/but_viewcont.jpg\" alt=\"view contents\" "
+      . "width=123 height=20 border=\"0\">"
+      . "</a></td>\n";
+
+    # Export
+    print "<td><a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::EXPORT"
+      . "&$Args::baseargs&meta=$meta&recmode=$recmode\">"
+      . "<img src=\"pict/but_export.jpg\" alt=\"export\" "
+      . "width=123 height=20 border=\"0\">"
+      . "</a></td>";
+
+    # Notes
+    print "<td><a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::ENTER_FILE"
+      . "&$Args::baseargs&meta=$meta&\" "
+      . "target=\"_blank\">"
+      . "<img src=\"pict/but_addnote.jpg\" alt=\"Add Note\" "
+      . "width=\"89\" height=20 border=\"0\">"
+      . "</a></td>"
+      if ($::USE_NOTES == 1);
+
+    print "</tr></table>\n</center>\n";
+
+    my $tmpr = $Caseman::vol2mnt{$vol};
+
+    if ($ftype =~ /fat/) {
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::FFIND&$Args::baseargs&"
+          . "meta=$meta\" target=\"_blank\">Search for File Name</a><br><br>";
+    }
+    else {
+
+        print "<b>Pointed to by file:</b><br>\n";
+
+        local *OUT;
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/ffind' -f $ftype -a -o $offset -i $imgtype $img $meta");
+        my $cnt = 0;
+        while ($_ = Exec::read_pipe_line(*OUT)) {
+            chop;
+            if (/^(\*)\s+\/*(.*)$/) {
+                Print::print_output("<tt><font color=\"$::DEL_COLOR[0]\">"
+                      . Print::html_encode($tmpr . $2)
+                      . "</font></tt> (deleted)<br><br>\n");
+            }
+            elsif (/^\/(.*)$/) {
+                Print::print_output("<tt>"
+                      . Print::html_encode($tmpr . $1)
+                      . "</tt><br><br>\n");
+            }
+            else {
+                Print::print_output(Print::html_encode($_) . "<br><br>\n");
+            }
+            $cnt++;
+        }
+        close(OUT);
+        if ($cnt == 0) {
+            print "<br>Invalid $Fs::meta_str{$ftype} value<br><br>\n";
+            return;
+        }
+    }
+
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+    my $file_type = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $file_type = "Error getting file type"
+      if ((!defined $file_type) || ($file_type eq ""));
+
+    if ($recmode == $File::REC_YES) {
+        print "<b>File Type (Recovered):</b><br>$file_type<br>\n";
+    }
+    else {
+        print "<b>File Type:</b><br>$file_type<br><br>\n";
+    }
+
+    # MD5 Value
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $meta | '$::MD5_EXE'"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $meta | '$::MD5_EXE'"
+        );
+    }
+
+    my $md5out = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $md5out = "Error getting MD5"
+      if ((!defined $md5out) || ($md5out eq ""));
+
+    chomp $md5out;
+    if ($recmode == $File::REC_YES) {
+        print "<b>MD5 of recovered content:</b><br><tt>$md5out</tt><br><br>\n";
+    }
+    else {
+        print "<b>MD5 of content:</b><br><tt>$md5out</tt><br><br>\n";
+    }
+
+    # Hash Database Lookups
+    if (
+        (
+               ($::NSRLDB ne "")
+            || ($Caseman::alert_db   ne "")
+            || ($Caseman::exclude_db ne "")
+        )
+        && ($md5out =~ /^$::REG_MD5$/o)
+      )
+    {
+
+        print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_blank\">\n"
+          . Args::make_hidden()
+          . "<input type=\"hidden\" name=\"md5\" value=\"$md5out\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_HASH\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Hash::DB_LOOKUP\">\n"
+          . "<table cellpadding=\"2\" cellspacing=\"8\"><tr>\n";
+
+        if ($::NSRLDB ne "") {
+            print "<td align=\"left\">"
+              . "<input type=\"checkbox\" name=\"hash_nsrl\" value=\"1\" CHECKED>"
+              . "NSRL</td>\n";
+        }
+        if ($Caseman::alert_db ne "") {
+            print "<td align=\"left\">"
+              . "<input type=\"checkbox\" name=\"hash_alert\" value=\"1\" CHECKED>"
+              . "Alert Database</td>\n";
+        }
+        if ($Caseman::exclude_db ne "") {
+            print "<td align=\"left\">"
+              . "<input type=\"checkbox\" name=\"hash_exclude\" value=\"1\" CHECKED>"
+              . "Exclude Database</td>\n";
+        }
+        print "<td align=\"left\">"
+          . "<input type=\"image\" src=\"pict/but_lookup.jpg\" "
+          . "width=116 height=20 alt=\"Ok\" border=\"0\">"
+          . "</td></tr></table>\n</form>\n";
+    }
+
+    # SHA-1 Value
+    if ($::SHA1_EXE ne "") {
+        if ($recmode == $File::REC_YES) {
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $meta | '$::SHA1_EXE'"
+            );
+        }
+        else {
+            Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $meta | '$::SHA1_EXE'"
+            );
+        }
+
+        my $sha1out = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $sha1out = "Error getting SHA-1"
+          if ((!defined $sha1out) || ($sha1out eq ""));
+
+        chomp $sha1out;
+        if ($recmode == $File::REC_YES) {
+            print
+"<b>SHA-1 of recovered content:</b><br><tt>$sha1out</tt><br><br>\n";
+        }
+        else {
+            print "<b>SHA-1 of content:</b><br><tt>$sha1out</tt><br><br>\n";
+        }
+    }
+
+    # istat output
+    print "<b>Details:</b><br><br>\n";
+    my $mode  = 0;    # set to 1 when showing blocks
+    my $force = 0;    # set to 1 if size of meta is 0
+
+    my @output;
+    if (exists($Args::args{'force'})) {
+        my $f = Args::get_force();
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -B $f -o $offset -i $imgtype $img $meta"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta"
+        );
+    }
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if ($mode == 1) {
+            if (/^Indirect Blocks/) {
+                print "$_<br>\n";
+                next;
+            }
+            elsif (/^Recover/) {
+                print "$_<br>\n";
+                next;
+            }
+            elsif (/^Type: (\S+) \((\d+\-\d+)\) (.*)$/) {
+                print "$1 ("
+                  . "<a href=\"$::PROGNAME?mod=$::MOD_FILE&view=$File::CONT_FR&$Args::baseargs"
+                  . "&meta=$meta_int-$2&dir=$vol-meta-$meta_int-$2\" "
+                  . "target=\"_blank\">$2</a>) $3<br>\n";
+                next;
+            }
+
+            my $blk;
+            foreach $blk (split(/ /, $_)) {
+                if ($blk =~ /^\d+$/) {
+                    print
+"<a href=\"$::PROGNAME?mod=$::MOD_FRAME&submod=$::MOD_DATA&"
+                      . "$Args::baseargs&block=$blk\" target=\"_top\">$blk</a>  ";
+                }
+                else {
+                    print "$blk   ";
+                }
+            }
+            print "<br>\n";
+        }
+        else {
+            if (/^Not Allocated$/) {
+                print "<font color=\"$::DEL_COLOR[0]\">$_</font><br>\n";
+            }
+            else {
+                print "$_<br>\n";
+            }
+            $mode = 1 if (/^Direct Blocks|^Sectors/);
+            $mode = 1 if (/^Attributes:/);  # HFS gets messed up without ":"
+            $mode = 1 if (/^Data Fork Blocks:/); 
+
+            if ((/^size: (\d+)/) && ($1 == 0)) {
+                $force = 1;
+            }
+        }
+    }
+    close(OUT);
+
+    # display a text box to force X number of blocks to be displayed
+    if ($force == 1) {
+        print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . Args::make_hidden()
+          . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+          . "<input type=\"hidden\" name=\"meta\" value=\"$meta\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_META\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Meta::STATS\">\n";
+
+        print
+"Enter number of $Fs::addr_unit{$ftype}s to display: <input type=\"text\" "
+          . "value=5 name=\"force\" size=\"3\">\n";
+
+        print "<input type=\"image\" src=\"pict/but_force.jpg\" "
+          . "width=53 height=20 alt=\"Force\" border=\"0\"> (because the size is 0)\n</form>\n";
+    }
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub findfile {
+
+    Print::print_html_header("Find File");
+
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $tmpr    = $Caseman::vol2mnt{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    print "<b>Pointed to by file:</b><br>\n";
+
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ffind' -f $ftype -a -o $offset -i $imgtype $img $meta");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        chop;
+        if (/(\*)\s+\/*(.*)/) {
+            Print::print_output("<tt><font color=\"$::DEL_COLOR[0]\">"
+                  . Print::html_encode($tmpr . $2)
+                  . "</font></tt> (deleted)<br>\n");
+        }
+        elsif (/^\/(.*)$/) {
+            Print::print_output(
+                "<tt>" . Print::html_encode($tmpr . $1) . "</tt><br>\n");
+        }
+        else {
+            Print::print_output(Print::html_encode($_) . "<br>\n");
+        }
+    }
+    close(OUT);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub export {
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $recmode = Args::get_recmode();
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Saving contents of $Fs::meta_str{$ftype} $meta"
+    );
+
+    Print::print_oct_header("$vol" . "-meta" . "$meta" . ".raw");
+
+    local *OUT;
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $meta");
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+            "'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $meta");
+    }
+
+    print "$_" while ($_ = Exec::read_pipe_data(*OUT, 512));
+    close(OUT);
+
+    Print::print_oct_footer();
+}
+
+sub report {
+
+    my $meta    = Args::get_meta('meta');
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+    my $recmode = Args::get_recmode();
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: Generating report for $Fs::meta_str{$ftype} $meta"
+    );
+
+    Print::print_text_header("filename=$vol-meta$meta.txt");
+
+    print "                 Autopsy $Fs::meta_str{$ftype} Report\n\n"
+      . "-" x 70 . "\n"
+      . "                    GENERAL INFORMATION\n\n"
+      . "$Fs::meta_str{$ftype}: $Args::args{'meta'}\n";
+
+    print "Pointed to by file(s):\n";
+    my $tmpr = $Caseman::vol2mnt{$vol};
+    local *OUT;
+
+    Exec::exec_pipe(*OUT,
+        "'$::TSKDIR/ffind' -f $ftype -a -o $offset -i $imgtype $img $meta");
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        chop;
+        if (/^(\*)\s+\/*(.*)$/) {
+            Print::print_output(
+                "  ${tmpr}${2} (deleted)\n");
+        }
+        elsif (/^\/(.*)$/) {
+            Print::print_output("  ${tmpr}${1}\n");
+        }
+        else {
+            Print::print_output("  $_\n");
+        }
+    }
+    close(OUT);
+
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta | '$::MD5_EXE'"
+    );
+    my $md5 = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $md5 = "Error getting MD5 Value"
+      if ((!defined $md5) || ($md5 eq ""));
+
+    chop $md5;
+    print "MD5 of istat output: $md5\n";
+
+    if ($::SHA1_EXE ne "") {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta | '$::SHA1_EXE'"
+        );
+        my $sha1 = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $sha1 = "Error getting SHA-1 Value"
+          if ((!defined $sha1) || ($sha1 eq ""));
+
+        chop $sha1;
+        print "SHA-1 of istat output: $sha1\n";
+    }
+
+    print "\nImage: $Caseman::vol2path{$vol}\n";
+    if (($Caseman::vol2start{$vol} == 0) && ($Caseman::vol2end{$vol} == 0)) {
+        print "Offset: Full image\n";
+    }
+    elsif ($Caseman::vol2end{$vol} == 0) {
+        print "Offset: $Caseman::vol2start{$vol} to end\n";
+    }
+    else {
+        print "Offset: $Caseman::vol2start{$vol} to $Caseman::vol2end{$vol}\n";
+    }
+    print "File System Type: $ftype\n";
+
+    my $date = localtime();
+    print "\nDate Generated: $date\n"
+      . "Investigator: $Args::args{'inv'}\n\n"
+      . "-" x 70 . "\n"
+      . "                   META DATA INFORMATION\n\n";
+
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/istat' -f $ftype $tz -s $Caseman::ts -o $offset -i $imgtype $img $meta"
+    );
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        print $_;
+    }
+    close(OUT);
+
+    if ($recmode == $File::REC_YES) {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -r -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+    else {
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $meta | '$::FILE_EXE' -z -b -"
+        );
+    }
+
+    my $file_type = Exec::read_pipe_line(*OUT);
+    close(OUT);
+
+    $file_type = "Error getting file type"
+      if ((!defined $file_type) || ($file_type eq ""));
+
+    print "\nFile Type: $file_type";
+
+    print "\n"
+      . "-" x 70 . "\n"
+      . "                   VERSION INFORMATION\n\n"
+      . "Autopsy Version: $::VER\n";
+    print "The Sleuth Kit Version: " . ::get_tskver() . "\n";
+
+    Print::print_text_footer();
+
+    return 0;
+}
+
+# Display the meta Allocation Table
+sub list {
+    my $ILS_GAP = 500;
+
+    my $vol     = Args::get_vol('vol');
+    my $ftype   = $Caseman::vol2ftype{$vol};
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $min = 0;
+
+    $min = Args::get_min() if (exists $Args::args{'min'});
+    my $max = $min + $ILS_GAP - 1;
+
+    # Because we can not use metas 0 and 1 for most FS, set fmin to the
+    # minimum for this fs
+    my $fmin = $min;
+    $fmin = $Fs::first_meta{$ftype} if ($min < $Fs::first_meta{$ftype});
+
+    Print::print_html_header(
+        "$Fs::meta_str{$ftype} Allocation List $fmin -&gt $max");
+
+    Print::log_host_inv(
+"$Caseman::vol2sname{$vol}: $Fs::meta_str{$ftype} Allocation List for $min to $max"
+    );
+
+    print "<center><H2>$Fs::meta_str{$ftype}: $fmin - $max</H2>";
+
+    # Display next and previous links
+    my $tmp;
+    if ($min > $Fs::first_meta{$ftype}) {
+        $tmp = $min - $ILS_GAP;
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::LIST&$Args::baseargs&min=$tmp\">"
+          . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+          . "width=\"89\" height=20 border=\"0\"></a> ";
+    }
+    $tmp = $min + $ILS_GAP;
+    print
+" <a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::LIST&$Args::baseargs&min=$tmp\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a><br>";
+    print "</center>\n";
+
+    # The list
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ils' -e -s $Caseman::ts -f $ftype -o $offset -i $imgtype $img $fmin-$max"
+    );
+    while ($_ = Exec::read_pipe_line(*OUT)) {
+        if (/^($::REG_META)\|([af])\|\d+\|\d+\|\d+\|\d+\|\d+\|/o) {
+            print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::STATS&$Args::baseargs&meta=$1\">"
+              . "$1:</a> ";
+            if ($2 eq "a") {
+                print "allocated<br>\n";
+            }
+            else {
+                print "<font color=\"$::DEL_COLOR[0]\">free</font><br>\n";
+            }
+        }
+    }
+    close(OUT);
+
+    # Display next and previous links
+    print "<center>\n";
+    if ($min > $Fs::first_meta{$ftype}) {
+        $tmp = $min - $ILS_GAP;
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::LIST&$Args::baseargs&min=$tmp\">"
+          . "<img src=\"pict/but_prev.jpg\" alt=\"previous\" "
+          . "width=\"89\" height=20 border=\"0\"></a> ";
+    }
+    $tmp = $min + $ILS_GAP;
+    print
+" <a href=\"$::PROGNAME?mod=$::MOD_META&view=$Meta::LIST&$Args::baseargs&min=$tmp\">"
+      . "<img src=\"pict/but_next.jpg\" alt=\"next\" "
+      . "width=\"89\" height=20 border=\"0\"></a><br>";
+    print "</center>\n";
+
+    Print::print_html_footer();
+    return 0;
+
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("Metadata Blank Page");
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+
+    print "<center><h3>Metadata Mode</h3><br>\n"
+      . "Here you can view the details about any $Fs::meta_str{$ftype} in the file system.<br>\n"
+      . "These are the data structures that store the file details.<br>\n"
+      . "Enter the address in the field on the left.\n";
+    Print::print_html_footer();
+    return 0;
+}
+
diff --git a/lib/Notes.pm b/lib/Notes.pm
new file mode 100644
index 0000000000..5f36f1ad3e
--- /dev/null
+++ b/lib/Notes.pm
@@ -0,0 +1,1110 @@
+#
+# Notes and sequencer functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Notes;
+
+use POSIX;
+
+$Notes::ENTER_FILE    = 1;
+$Notes::ENTER_DATA    = 2;
+$Notes::WRITE_FILE    = 3;
+$Notes::WRITE_DATA    = 4;
+$Notes::WRITE_SEQ_MAN = 5;
+$Notes::READ_NORM     = 6;
+$Notes::READ_SEQ      = 7;
+
+sub main {
+
+    # There is no default for Notes
+    Args::check_view();
+
+    Print::print_check_error("Notes option is not enabled")
+      if ($::USE_NOTES == 0);
+
+    my $view = Args::get_view();
+
+    if ($view == $Notes::ENTER_FILE) {
+        return enter_file();
+    }
+    elsif ($view == $Notes::ENTER_DATA) {
+        return enter_data();
+    }
+    elsif ($view == $Notes::WRITE_FILE) {
+        return write_file();
+    }
+    elsif ($view == $Notes::WRITE_DATA) {
+        return write_data();
+    }
+    elsif ($view == $Notes::WRITE_SEQ_MAN) {
+        return write_seq_man();
+    }
+    elsif ($view == $Notes::READ_NORM) {
+        return read_norm();
+    }
+    elsif ($view == $Notes::READ_SEQ) {
+        return read_seq();
+    }
+    else {
+        Print::print_check_err("Invalid Notes View");
+    }
+}
+
+sub investig_notes_fname {
+    return "$::host_dir" . "$::LOGDIR/$Args::args{'inv'}.notes";
+}
+
+sub investig_seq_notes_fname {
+    return "$::host_dir" . "$::LOGDIR/$Args::args{'inv'}.seq.notes";
+}
+
+# window where user can enter a normal and sequencer note for a file
+# or meta data structure.
+sub enter_file {
+    Args::check_vol('vol');
+    Args::check_meta('meta');
+
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+    my $mnt   = $Caseman::vol2mnt{$vol};
+    my $meta  = Args::get_meta('meta');
+
+    # A file will have a 'dir' argument and a meta structure will not
+    if (exists $Args::args{'dir'}) {
+        my $fname = "$mnt$Args::args{'dir'}";
+        Print::print_html_header("Notes for file $fname");
+        print "<center><b>Enter a note for <tt>$fname</tt> ($meta):</b>"
+          . "<br><br>\n";
+    }
+    else {
+        Print::print_html_header("Notes for $Fs::meta_str{$ftype} $meta");
+        print "<center><b>Enter a note for $Fs::meta_str{$ftype} $meta:</b>"
+          . "<br><br>\n";
+    }
+    print
+"A note works like a bookmark and allows you to later find this data more easily.<br><br>\n";
+
+    # Setup the form
+    print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<textarea rows=10 cols=50 wrap=\"virtual\" name=\"note\">"
+      . "</textarea><br>\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_NOTES\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Notes::WRITE_FILE\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+      . "<input type=\"hidden\" name=\"meta\" value=\"$meta\">\n"
+      . Args::make_hidden();
+
+    print "<input type=\"hidden\" name=\"dir\" value=\"$Args::args{'dir'}\">\n"
+      if (exists $Args::args{'dir'});
+
+    # Option to add a normal note
+    print "<input type=\"checkbox\" name=\"norm_note\" value=\"1\" CHECKED>\n"
+      . "  Add a Standard Note<br>\n";
+
+    # Sequencer notes - which requires the MAC times for the files
+    if ("$Caseman::tz" ne "") {
+        $ENV{TZ} = $Caseman::tz;
+      POSIX: tzset();
+    }
+
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $meta_int = $meta;
+    $meta_int = $1 if ($meta_int =~ /^(\d+)-\d+(-\d+)?$/);
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ils' -s $Caseman::ts -f $ftype -e  -o $offset -i $imgtype $img $meta_int"
+    );
+
+    # Get the fourth line
+    my $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    close(OUT);
+    unless ((defined $tmp)
+        && ($tmp =~ /^$::REG_META\|\w\|\d+\|\d+\|(\d+)\|(\d+)\|(\d+)\|/o))
+    {
+        Print::print_err("Error parsing 'ils' output");
+    }
+
+    my $mtime = $1;
+    my $atime = $2;
+    my $ctime = $3;
+
+    $mtime = localtime($mtime);
+    $atime = localtime($atime);
+    $ctime = localtime($ctime);
+
+    # Print the Times
+    print "<br><hr><b>Add a Sequencer Event:</b><br><br>\n"
+      . "A sequencer event will be sorted based on the time so that event reconstruction will be easier<br><br>\n"
+      . "<input type=\"checkbox\" name=\"mtime\" value=\"1\">"
+      . "&nbsp;&nbsp;M-Time (<tt>$mtime</tt>)<br>\n"
+      . "<input type=\"checkbox\" name=\"atime\" value=\"1\">"
+      . "&nbsp;&nbsp;A-Time (<tt>$atime</tt>)<br>\n"
+      . "<input type=\"checkbox\" name=\"ctime\" value=\"1\">"
+      . "&nbsp;&nbsp;C-Time (<tt>$ctime</tt>)<br><hr><br>\n";
+
+    # The OK Button
+    print "<br><input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# data unit comment
+sub enter_data {
+    Args::check_vol('vol');
+
+    my $vol   = Args::get_vol('vol');
+    my $ftype = $Caseman::vol2ftype{$vol};
+    my $block = Args::get_block();
+    my $len   = Args::get_len();
+
+    Print::print_html_header("Notes for $Fs::addr_unit{$ftype} $block");
+
+    print
+      "<center><b>Enter a note for $Fs::addr_unit{$ftype} $block</b><br><br>\n"
+      . "A note works like a bookmark and allows you to later find this data more easily.<br><br>\n"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<textarea rows=10 cols=50 wrap=\"virtual\" name=\"note\">"
+      . "</textarea><br>\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_NOTES\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Notes::WRITE_DATA\">\n"
+      . "<input type=\"hidden\" name=\"vol\" value=\"$vol\">\n"
+      . "<input type=\"hidden\" name=\"block\" value=\"$block\">\n"
+      . "<input type=\"hidden\" name=\"len\" value=\"$len\">\n"
+      . "<input type=\"hidden\" name=\"norm_note\" value=\"1\">\n"
+      . Args::make_hidden()
+      . "<br><input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return 0;
+
+}
+
+# Write the note to the note file
+sub write_data {
+    Args::check_vol('vol');
+    Args::check_block();
+    Args::check_len();
+    Args::check_note();
+
+    Print::print_html_header("Write a note");
+
+    my $vol    = Args::get_vol('vol');
+    my $ftype  = $Caseman::vol2ftype{$vol};
+    my $img_sh = $Caseman::vol2sname{$vol};
+    my $block  = Args::get_block();
+    my $len    = Args::get_len();
+
+    Print::log_host_inv(
+        "$img_sh: Creating note for $Fs::addr_unit{$ftype} $block");
+
+    my $notes_file = investig_notes_fname();
+    open NOTES, ">>$notes_file" or die "Can't open log: $notes_file";
+    print "Note added to $notes_file:<p>\n\n";
+
+    # Date
+    my $tmp = localtime();
+    print NOTES "$tmp\n";
+    print "$tmp<br>\n";
+
+    print NOTES "Volume: $vol  $Fs::addr_unit{$ftype}: $block  Len: $len\n";
+    print "Volume: $vol  $Fs::addr_unit{$ftype}: $block  Len: $len<br>\n";
+
+    # The actual notes and a line at the bottom
+    print NOTES "\n$Args::args{'note'}\n\n" . "-" x 70 . "\n";
+    print "<p>".Print::html_encode($Args::args{'note'})."<p>";
+    close(NOTES);
+
+    print "<hr>\n"
+      . "You can view the notes from the Host Manager View<p>"
+      . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_NORM\">"
+      . "<img border=0 src=\"pict/menu_b_note.jpg\" "
+      . "width=\"167\" height=20 alt=\"View Notes\"></a>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+sub write_file {
+    Args::check_vol('vol');
+    Args::check_meta('meta');
+    Args::check_note();
+
+    # Get rid of carriage returns that Netscape adds
+    $Args::args{'note'} =~ tr/\r//d;
+
+    my $vol = Args::get_vol('vol');
+    my $mnt = $Caseman::vol2mnt{$vol};
+
+    my $ftype  = $Caseman::vol2ftype{$vol};
+    my $img_sh = $Caseman::vol2sname{$vol};
+    my $meta   = Args::get_meta('meta');
+
+    my $img     = $Caseman::vol2path{$vol};
+    my $offset  = $Caseman::vol2start{$vol};
+    my $imgtype = $Caseman::vol2itype{$vol};
+
+    my $fname = "";
+    my $type  = "";
+
+    if (exists $Args::args{'dir'}) {
+        $Args::args{'dir'} .= "/"
+          if ($Args::args{'dir'} eq "");
+        $fname = "$mnt$Args::args{'dir'}";
+
+        if (($Args::args{'dir'} =~ /\/$/) || ($Args::args{'dir'} eq "")) {
+            Print::log_host_inv(
+                "$img_sh: Creating note for directory $fname ($meta)");
+            $type = "dir";
+        }
+        else {
+            Print::log_host_inv(
+                "$img_sh: Creating note for file $fname ($meta)");
+            $type = "file";
+        }
+    }
+
+    else {
+        Print::log_host_inv(
+            "$img_sh: Creating note for $Fs::meta_str{$ftype} $meta");
+        $type = "$Fs::meta_str{$ftype}";
+    }
+
+    Print::print_html_header("Writing a note / event");
+
+    # Get the times for the meta
+    # Set the timezone to the host zone
+    if ("$Caseman::tz" ne "") {
+        $ENV{TZ} = "$Caseman::tz";
+        POSIX::tzset();
+    }
+
+    my $meta_int = $meta;
+    $meta_int = $1 if ($meta_int =~ /^(\d+)-\d+(-\d+)?$/);
+    local *OUT;
+    Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ils' -s $Caseman::ts -f $ftype -e -o $offset -i $imgtype $img $meta_int"
+    );
+
+    # Skip to the fourth line
+    my $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    $tmp = Exec::read_pipe_line(*OUT);
+    unless ((defined $tmp)
+        && ($tmp =~ /^$::REG_META\|\w\|\d+\|\d+\|(\d+)\|(\d+)\|(\d+)\|/o))
+    {
+        Print::print_err("Error parsing 'ils' output");
+    }
+    my $mtime = $1;
+    my $atime = $2;
+    my $ctime = $3;
+    close(OUT);
+
+    # Create a "normal" note
+    if ((exists $Args::args{'norm_note'}) && ($Args::args{'norm_note'} == 1)) {
+
+        my $notes_file = investig_notes_fname();
+        open NOTES, ">>$notes_file" or die "Can't open log: $notes_file";
+        print "Note added to $notes_file:<p>\n\n";
+
+        # Date
+        my $tmp = localtime();
+        print NOTES "$tmp\n";
+        print "$tmp\n";
+
+        # We have a file name
+        if ($fname ne "") {
+            if ($type eq 'dir') {
+                print NOTES "Directory: $fname\n";
+                print "Directory: $fname<br>\n";
+            }
+            else {
+                print NOTES "File: $fname\n";
+                print "File: $fname<br>\n";
+            }
+        }
+        if ($meta ne "") {
+            print NOTES "Volume: $vol  Meta: $meta\n";
+            print "Volume: $vol  Meta: $meta<br>\n";
+        }
+        print NOTES "M-time: " . localtime($mtime) . "\n";
+        print "M-time: " . localtime($mtime) . "<br>\n";
+        print NOTES "A-time: " . localtime($atime) . "\n";
+        print "A-time: " . localtime($atime) . "<br>\n";
+        print NOTES "C-time: " . localtime($ctime) . "\n";
+        print "C-time: " . localtime($ctime) . "<br>\n";
+
+        # The actual notes and a line at the bottom
+        print NOTES "\n$Args::args{'note'}\n\n" . "-" x 70 . "\n";
+        print "<p>".Print::html_encode($Args::args{'note'})."<p>";
+
+        close(NOTES);
+    }
+
+    # Create a sequencer event - if there are any
+    unless (((exists $Args::args{'mtime'}) && ($Args::args{'mtime'} == 1))
+        || ((exists $Args::args{'atime'}) && ($Args::args{'atime'} == 1))
+        || ((exists $Args::args{'ctime'}) && ($Args::args{'ctime'} == 1)))
+    {
+
+        print "<hr>\n"
+          . "You can view the notes from the Host Manager View<p>"
+          . "<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_NORM\">"
+          . "<img border=0 src=\"pict/menu_b_note.jpg\" "
+          . "width=\"167\" height=20 alt=\"View Notes\"></a>\n";
+
+        Print::print_html_footer();
+
+        return 0;
+    }
+
+    # Get rid of the carriage returns
+    $Args::args{'note'} =~ s/\n/<br>/gs;
+
+    my $notes_file = investig_seq_notes_fname();
+    open NOTES, ">>$notes_file" or die "Can't open log: $notes_file";
+
+    if ((exists $Args::args{'mtime'}) && ($Args::args{'mtime'} == 1)) {
+
+        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+          localtime($mtime);
+        $year += 1900;
+        $mon  += 1;
+        $mday = "0$mday" if ($mday < 10);
+        $hour = "0$hour" if ($hour < 10);
+        $min  = "0$min"  if ($min < 10);
+        $sec  = "0$sec"  if ($sec < 10);
+
+        print NOTES "'$year','$mon','$mday','$hour','$min','$sec',"
+          . "'$Args::args{'host'}','$vol','$fname','$meta','',"
+          . "'$type','[M-Time]$Args::args{'note'}'\n";
+
+        Print::log_host_inv(
+            "$img_sh: M-Time note added for meta $Args::args{'meta'}");
+        print "M-Time sequence event added<br>\n";
+    }
+
+    if ((exists $Args::args{'atime'}) && ($Args::args{'atime'} == 1)) {
+        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+          localtime($atime);
+        $year += 1900;
+        $mon  += 1;
+        $mday = "0$mday" if ($mday < 10);
+        $hour = "0$hour" if ($hour < 10);
+        $min  = "0$min"  if ($min < 10);
+        $sec  = "0$sec"  if ($sec < 10);
+
+        print NOTES "'$year','$mon','$mday','$hour','$min','$sec',"
+          . "'$Args::args{'host'}','$vol','$fname','$meta','',"
+          . "'$type','[A-Time]$Args::args{'note'}'\n";
+
+        Print::log_host_inv(
+            "$img_sh: A-Time note added for meta $Args::args{'meta'}");
+        print "A-Time sequence event added<br>\n";
+    }
+
+    if ((exists $Args::args{'ctime'}) && ($Args::args{'ctime'} == 1)) {
+        my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+          localtime($ctime);
+        $year += 1900;
+        $mon  += 1;
+        $mday = "0$mday" if ($mday < 10);
+        $hour = "0$hour" if ($hour < 10);
+        $min  = "0$min"  if ($min < 10);
+        $sec  = "0$sec"  if ($sec < 10);
+
+        print NOTES "'$year','$mon','$mday','$hour','$min','$sec',"
+          . "'$Args::args{'host'}','$vol','$fname','$meta','',"
+          . "'$type','[C-Time]$Args::args{'note'}'\n";
+
+        Print::log_host_inv(
+            "$img_sh: C-Time note added for meta $Args::args{'meta'}");
+        print "C-Time sequence event added<br>\n";
+    }
+
+    close(NOTES);
+
+    print "<p><hr>\n"
+      . "You can view the notes and events from the Host Manager View<p>";
+
+    if ((exists $Args::args{'norm_note'}) && ($Args::args{'norm_note'} == 1)) {
+        print
+"<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_NORM\">"
+          . "<img border=0 src=\"pict/menu_b_note.jpg\" "
+          . "width=\"167\" height=20 alt=\"View Notes\"></a>\n";
+    }
+
+    print
+"<a href=\"$::PROGNAME?${Args::baseargs_novol}&mod=$::MOD_NOTES&view=$Notes::READ_SEQ\">"
+      . "<img border=0 src=\"pict/menu_b_seq.jpg\" width=\"167\" height=\"20\" "
+      . " alt=\"Event Sequencer\"></a>\n";
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+# Display the contents of the "normal" notes file
+sub read_norm {
+    Print::print_html_header("Contents of Notes File");
+
+    my $notes_file = investig_notes_fname();
+
+    Print::log_host_inv("Viewing contents of notes file ($notes_file)");
+    if ((!(-e "$notes_file")) || (-z "$notes_file")) {
+        print "No notes have been entered yet.<br>\n"
+          . "They can be entered using the <i>Add Note</i> link within each analysis mode.<br>\n";
+        return;
+    }
+
+    open NOTES, "<$notes_file" or die "Can't open log: $notes_file";
+
+    my $file = "";
+    my $dir  = "";
+
+    print "<table width=100%>\n"
+      . "<tr bgcolor=$::BACK_COLOR><td align=left>\n";
+
+    my $row = 0;
+
+    # This will need to change whenever the log format changes
+    while (<NOTES>) {
+
+        # we need to extract mnt from here
+        $file = $1 if (/^File: (.*)$/);
+        $dir  = $1 if (/^Directory: (.*)$/);
+
+        # Reset the $file if we are at the end of the current note
+        if (/^\-+$/) {
+            $file = "";
+            $dir  = "";
+            if (($row++ % 2) == 0) {
+                print
+"</td></tr>\n<tr bgcolor=$::BACK_COLOR_TABLE><td align=left>\n";
+            }
+            else {
+                print "</td></tr>\n<tr bgcolor=$::BACK_COLOR><td align=left>\n";
+            }
+        }
+        else {
+            print Print::html_encode($_);
+        }
+
+        if (/^Volume: ($::REG_VNAME)   Meta: ([0-9\-]+)/o) {
+            $vol  = $1;
+            $meta = $2;
+            next unless (exists $Caseman::vol2cat{$vol});
+
+            # file note
+            if ($file ne "") {
+
+                # extract the prepended mnt value
+                my $mnt   = $Caseman::vol2mnt{$vol};
+                my $fname = "";
+                $fname = $1 if ($file =~ /^$mnt\/?(.*)$/);
+                print "<a href=\"$::PROGNAME?$Args::baseargs_novol"
+                  . "&mod=$::MOD_FILE&view=$File::CONT_FR"
+                  . "&vol=$vol&meta=$meta&dir=$fname\" target=\"_blank\">"
+                  . "<img src=\"pict/but_view.jpg\" alt=\"view\" "
+                  . "width=45 height=22 alt=\"View\" border=\"0\"></a><br>\n";
+            }
+
+            # directory note
+            elsif ($dir ne "") {
+
+                # extract the prepended mnt value
+                my $mnt   = $Caseman::vol2mnt{$vol};
+                my $fname = "";
+                $fname = $1 if ($dir =~ /^$mnt\/?(.*)$/);
+                print "<a href=\"$::PROGNAME?$Args::baseargs_novol"
+                  . "&mod=$::MOD_FRAME&submod=$::MOD_FILE&vol=$vol&"
+                  . "&meta=$meta&dir=$fname\" target=\"_blank\">"
+                  . "<img src=\"pict/but_view.jpg\" alt=\"view\" "
+                  . "width=45 height=22 alt=\"View\" border=\"0\"></a><br>\n";
+
+            }
+
+            # meta note
+            else {
+                print "<a href=\"$::PROGNAME?$Args::baseargs_novol"
+                  . "&mod=$::MOD_FRAME&submod=$::MOD_META&vol=$vol"
+                  . "&meta=$meta\" target=\"_blank\">"
+                  . "<img src=\"pict/but_view.jpg\" alt=\"view\" "
+                  . "width=45 height=22 alt=\"View\" border=\"0\"></a><br>\n";
+
+            }
+        }
+
+        # block note
+        elsif (/^Volume: ($::REG_VNAME)   \w+: ([0-9]+)  Len: (\d+)/o) {
+            $vol = $1;
+            $blk = $2;
+            $len = $3;
+            next unless (exists $Caseman::vol2cat{$vol});
+
+            print "<a href=\"$::PROGNAME?$Args::baseargs_novol"
+              . "&mod=$::MOD_FRAME&submod=$::MOD_DATA&vol=$vol"
+              . "&block=$blk&len=$len\" target=\"_blank\">"
+              . "<img src=\"pict/but_view.jpg\" alt=\"view\" "
+              . "width=45 height=22 alt=\"View\" border=\"0\"></a><br>\n";
+
+        }
+    }
+
+    print "</tr></table>\n";
+
+    # Ok and refresh buttons
+    print "<p><center><table width=600>\n"
+      . "<tr><td width=300 align=center>\n"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&view=$Caseman::VOL_OPEN&$Args::baseargs\">"
+      . "<img border=0 src=\"pict/menu_b_close.jpg\" width=167 height=20 alt=\"close\"></a>\n"
+      . "</td><td width=300 align=center>\n"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::READ_NORM&$Args::baseargs\">"
+      . "<img border=0 src=\"pict/menu_b_ref.jpg\" width=167 height=20 alt=\"refresh\"></a>\n"
+      . "</td></tr></table>\n";
+
+    close(NOTES);
+
+    Print::print_html_footer();
+
+    return 0;
+}
+
+#########################################################################
+# Sequencer Code
+
+# Write a sequence event that was manually entered
+sub write_seq_man {
+
+    Args::check_note();
+
+    Print::print_html_header("Writing Sequencer Event");
+
+    # Get rid of carriage returns that Netscape adds
+    $Args::args{'note'} =~ tr/\r//d;
+    $Args::args{'note'} =~ s/\n/<br>/gs;
+
+    if ($Args::args{'note'} eq "") {
+        print(  "A comment must be given for the event<br>\n"
+              . "<p><a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::READ_SEQ&$Args::baseargs\">"
+              . "<img border=0 src=\"pict/menu_b_ok.jpg\" "
+              . "width=167 height=20></a>");
+        Print::print_err("\n");
+    }
+
+    # Check the args and add them to the final string that will be written
+    my $str = "";
+    unless ((exists $Args::args{'year'})
+        && ($Args::args{'year'} =~ /^(\d\d\d\d)$/))
+    {
+        Print::print_err("Invalid year");
+    }
+    $str .= "'$1',";
+
+    unless ((exists $Args::args{'mon'}) && ($Args::args{'mon'} =~ /^(\d\d?)$/))
+    {
+        Print::print_err("Invalid month");
+    }
+    $str .= "'$1',";
+
+    unless ((exists $Args::args{'day'}) && ($Args::args{'day'} =~ /^(\d\d?)$/))
+    {
+        Print::print_err("Invalid day");
+    }
+    $str .= "'$1',";
+
+    unless ((exists $Args::args{'hour'})
+        && ($Args::args{'hour'} =~ /^(\d\d?)$/))
+    {
+        Print::print_err("Invalid hour");
+    }
+    $str .= "'$1',";
+
+    unless ((exists $Args::args{'min'}) && ($Args::args{'min'} =~ /^(\d\d?)$/))
+    {
+        Print::print_err("Invalid min");
+    }
+    $str .= "'$1',";
+
+    unless ((exists $Args::args{'sec'}) && ($Args::args{'sec'} =~ /^(\d\d?)$/))
+    {
+        Print::print_err("Invalid sec");
+    }
+    $str .= "'$1',";
+
+    # There are no image, meta, file name, or data unit for this type
+    $str .= "'$Args::args{'host'}','','','','',";
+
+    unless ((exists $Args::args{'src'}) && ($Args::args{'src'} =~ /^(\w+)$/)) {
+        Print::print_err("Invalid src");
+    }
+    $str .= "'$1','$Args::args{'note'}'\n";
+
+    # Write the string to the notes file
+    my $notes_file = investig_seq_notes_fname();
+    open NOTES, ">>$notes_file" or die "Can't open log: $notes_file";
+    print NOTES $str;
+    close(NOTES);
+
+    # Send a message to the user
+    print "Event Added to Sequencer file:<br><br>\n"
+      . "$::d2m[$Args::args{'mon'}] $Args::args{'day'}, $Args::args{'year'} "
+      . "$Args::args{'hour'}:$Args::args{'min'}:$Args::args{'sec'}<br><br>\n"
+      . Print::html_encode($Args::args{'note'})."<br>\n"
+      . "<p><a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::READ_SEQ&$Args::baseargs&"
+      . "year=$Args::enc_args{'year'}&mon=$Args::enc_args{'mon'}&day=$Args::enc_args{'day'}&"
+      . "hour=$Args::enc_args{'hour'}&min=$Args::enc_args{'min'}&sec=$Args::enc_args{'sec'}\">"
+      . "<img border=0 src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+      . "width=43 height=20></a>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# View the sequencer file
+sub read_seq {
+
+    Print::print_html_header("Event Sequencer");
+
+    print "<center>\n" . "<h3>Event Sequencer</h3>\n";
+
+    my $cnt = 0;
+    my @entry;
+    my (
+        @year, @mon,   @day,  @hour, @min,  @sec, @host,
+        @vol,  @fname, @meta, @data, @type, @note
+    );
+
+    # Read the sequencer file into arrays that will be sorted
+    my $notes_file = investig_seq_notes_fname();
+    if (-e $notes_file) {
+
+        open NOTES, "$notes_file" or die "Can't open log: $notes_file";
+        while (<NOTES>) {
+
+            unless (
+/^'?(\d+)'?,'?(\d+)'?,'?(\d+)'?,'?(\d+)'?,'?(\d+)'?,'?(\d+)'?,'?($::REG_HOST)'?,'?($::REG_VNAME)?'?,'?(.*?)'?,'?($::REG_META)?'?,'?(\d+)?'?,'?([\w\s]+)'?,'?(.*?)'?$/
+              )
+            {
+                Print::print_err("Error parsing sequence event entry: $_");
+            }
+
+            $year[$cnt]  = $1;
+            $mon[$cnt]   = $2;
+            $day[$cnt]   = $3;
+            $hour[$cnt]  = $4;
+            $min[$cnt]   = $5;
+            $sec[$cnt]   = $6;
+            $host[$cnt]  = $7;
+            $vol[$cnt]   = $8;
+            $fname[$cnt] = "";
+            $fname[$cnt] = $9 if (defined $9);
+            $meta[$cnt]  = "";
+            $meta[$cnt]  = $10 if (defined $10);
+            $data[$cnt]  = "";
+            $data[$cnt]  = $11 if (defined $11);
+            $type[$cnt]  = $12;
+            $note[$cnt]  = $13;
+
+            $entry[$cnt] = $cnt;
+            $cnt++;
+        }
+
+        close(NOTES);
+
+        # Sort the values by date, source, and then note
+        my @sorted = sort {
+                 $year[$a] <=> $year[$b]
+              or $mon[$a] <=> $mon[$b]
+              or $day[$a] <=> $day[$b]
+              or $hour[$a] <=> $hour[$b]
+              or $min[$a] <=> $min[$b]
+              or $sec[$a] <=> $sec[$b]
+              or lc($type[$a]) cmp lc($type[$b])
+              or lc($note[$a]) cmp lc($note[$b])
+        } @entry;
+
+        # Table and header
+        print "<table width=800 border=1>\n"
+          . "<tr background=\"$::YEL_PIX\">\n"
+          . "<th>Date & Time</th>\n"
+          . "<th>Source</th>\n"
+          . "<th>Event & Note</th></tr>\n";
+
+        # Cycle through the sorted events
+        my $row = 0;
+        foreach my $i (@sorted) {
+
+            # Alternate row colors
+            if (($row % 2) == 0) {
+                print "<tr bgcolor=\"$::BACK_COLOR\">\n";
+            }
+            else {
+                print "<tr bgcolor=\"$::BACK_COLOR_TABLE\">\n";
+            }
+
+            # Date & Time
+            print "<td align=left valign=top>\n"
+              . "$::d2m[$mon[$i]]&nbsp;$day[$i],&nbsp;$year[$i]"
+              . "&nbsp;$hour[$i]:$min[$i]:$sec[$i]</td>"
+              . "<td align=left valign=top>\n";
+
+            # If there is as name, then we will show it
+            # @@@ Why does an error message come up from here:
+            # Use of uninitialized value in string ne at
+            if ($fname[$i] ne "") {
+
+                if (   (exists $vol[$i])
+                    && (defined $vol[$i])
+                    && ($vol[$i] ne "")
+                    && (exists $Caseman::vol2mnt{$vol[$i]})
+                    && (exists $meta[$i]))
+                {
+
+                    # extract the prepended mnt value
+                    my $mnt   = $Caseman::vol2mnt{$vol[$i]};
+                    my $fname = "";
+                    $fname = $1 if ($fname[$i] =~ /^$mnt\/?(.*)$/);
+
+                    # Check if it is a directory
+                    if ($type[$i] eq 'dir') {
+                        print "<a href=\"$::PROGNAME?mod=$::MOD_FRAME&"
+                          . "submod=$::MOD_FILE&vol=$vol[$i]&$Args::baseargs&meta=$meta[$i]&dir=$fname\" "
+                          . "target=\"_blank\">\n"
+                          . "<tt>$fname[$i]</tt></a>\n";
+                    }
+                    else {
+                        print "<a href=\"$::PROGNAME?mod=$::MOD_FILE&"
+                          . "view=$File::CONT_FR&vol=$vol[$i]&$Args::baseargs&meta=$meta[$i]&dir=$fname\" "
+                          . "target=\"_blank\">\n"
+                          . "<tt>$fname[$i]</tt></a>\n";
+                    }
+                }
+                else {
+                    print "<tt>$fname[$i]</tt>\n";
+                }
+            }
+
+            # Display the meta value if there was no name
+            elsif (($vol[$i] ne "") && (defined $meta[$i]) && ($meta[$i] ne ""))
+            {
+                my $ftype = $Caseman::vol2ftype{$vol[$i]};
+
+                # Include a link if we can
+                if (exists $Caseman::vol2mnt{$vol[$i]}) {
+                    print "<a href=\"$::PROGNAME?mod=$::MOD_FRAME&"
+                      . "submod=$::MOD_META&vol=$vol[$i]"
+                      . "&$Args::baseargs&meta=$meta[$i]\" target=\"_blank\">\n"
+                      . "$Fs::meta_str{$ftype}: $meta[$i]</a>\n";
+                }
+                else {
+                    print "$Fs::meta_str{$ftype}: $meta[$i]\n";
+                }
+            }
+
+            # Otherwise, just give the source type
+            else {
+                print "$type[$i]\n";
+            }
+            print "</td>\n";
+
+            # Print the actual note
+            $note[$i] = Print::html_encode($note[$i]);
+            $note[$i] = "&nbsp;" if ($note[$i] eq "");
+            print "<td align=left>$note[$i]</td></tr>\n";
+
+            $row++;
+        }
+
+        print "</table>\n";
+
+    }
+
+    # End of if file exists
+    else {
+        print "No events currently exist<br>\n";
+    }
+
+    # Ok and refresh buttons
+    print "<p><table width=600>\n"
+      . "<tr><td width=300 align=center>\n"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_OPEN&$Args::baseargs\">"
+      . "<img border=0 src=\"pict/menu_b_close.jpg\" width=167 height=20 alt=\"close\"></a>\n"
+      . "</td><td width=300 align=center>\n"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_NOTES&"
+      . "view=$Notes::READ_SEQ&$Args::baseargs\">"
+      . "<img border=0 src=\"pict/menu_b_ref.jpg\" width=167 height=20 alt=\"refresh\"></a>\n"
+      . "</td></tr></table>\n";
+
+    # Manually add a new event
+    print "<hr>\n"
+      . "<b>Add a New Event</b><br><br>\n"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<textarea rows=10 cols=50 wrap=\"virtual\" name=\"note\">"
+      . "</textarea><br>\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_NOTES\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Notes::WRITE_SEQ_MAN\">\n"
+      . Args::make_hidden();
+
+    # Month
+    print "<table><tr><td align=\"left\">\n";
+    print "<p>Date: " . "<select name=\"mon\" size=\"1\">\n";
+
+    my $prev = 1;
+    $prev = $Args::args{'mon'}
+      if ((exists $Args::args{'mon'}) && ($Args::args{'mon'} =~ /^\d+$/));
+
+    for my $i (1 .. 12) {
+        if ($i == $prev) {
+            print "<option value=$i selected>$::d2m[$i]</option>\n";
+        }
+        else {
+            print "<option value=\"$i\">$::d2m[$i]</option>\n";
+        }
+    }
+
+    print "</select>\n";
+
+    # Day
+    print "&nbsp;<select name=\"day\" size=\"1\">\n";
+
+    $prev = 1;
+    $prev = $Args::args{'day'}
+      if ((exists $Args::args{'day'}) && ($Args::args{'day'} =~ /^\d+$/));
+
+    for my $i (1 .. 31) {
+        my $dstr = $i;
+        $dstr = "0$i" if ($i < 10);
+
+        if ($prev eq $dstr) {
+            print "<option value=\"$dstr\" selected>$dstr</option>\n";
+        }
+        else {
+            print "<option value=\"$dstr\">$dstr</option>\n";
+        }
+    }
+    print "</select>\n";
+
+    # Year
+    $prev = 1900 + (localtime())[5];
+    $prev = $Args::args{'year'}
+      if ((exists $Args::args{'year'}) && ($Args::args{'year'} =~ /^\d+$/));
+
+    print "&nbsp;<input type=\"text\" value=\"$prev\" "
+      . "name=\"year\" size=\"6\">\n";
+
+    # Hour
+    print "&nbsp;&nbsp;<select name=\"hour\" size=\"1\">\n";
+    $prev = 0;
+    $prev = $Args::args{'hour'}
+      if ((exists $Args::args{'hour'}) && ($Args::args{'hour'} =~ /^\d+$/));
+
+    for my $i (0 .. 23) {
+        my $hstr = $i;
+        $hstr = "0$i" if ($i < 10);
+
+        if ($prev eq $hstr) {
+            print "<option value=\"$hstr\" selected>$hstr</option>\n";
+        }
+        else {
+            print "<option value=\"$hstr\">$hstr</option>\n";
+        }
+    }
+    print "</select>\n";
+
+    # Min
+    print ":<select name=\"min\" size=\"1\">\n";
+    $prev = 0;
+    $prev = $Args::args{'min'}
+      if ((exists $Args::args{'min'}) && ($Args::args{'min'} =~ /^\d+$/));
+
+    for my $i (0 .. 59) {
+        my $mstr = $i;
+        $mstr = "0$i" if ($i < 10);
+        if ($prev eq $mstr) {
+            print "<option value=\"$mstr\" selected>$mstr</option>\n";
+        }
+        else {
+            print "<option value=\"$mstr\">$mstr</option>\n";
+        }
+    }
+    print "</select>\n";
+
+    # Sec
+    print ":<select name=\"sec\" size=\"1\">\n";
+    $prev = 0;
+    $prev = $Args::args{'sec'}
+      if ((exists $Args::args{'sec'}) && ($Args::args{'sec'} =~ /^\d+$/));
+
+    for my $i (0 .. 59) {
+        my $sstr = $i;
+        $sstr = "0$i" if ($i < 10);
+
+        if ($prev eq $sstr) {
+            print "<option value=\"$sstr\" selected>$sstr</option>\n";
+        }
+        else {
+            print "<option value=\"$sstr\">$sstr</option>\n";
+        }
+    }
+    print "</select></td></tr>\n" . "<tr><td>&nbsp;</td></tr>\n";
+
+    # Type
+    print "<tr><td align=\"left\">Event Source: <select name=\"src\" size=1>\n"
+      . "<option value=\"firewall\">firewall</option>\n"
+      . "<option value=\"ids\">ids</option>\n"
+      . "<option value=\"isp\">isp</option>\n"
+      . "<option value=\"log\">log</option>\n"
+      . "<option value=\"other\" selected>other</option>\n"
+      . "<option value=\"person\">person</option>\n"
+      . "</select></td></tr>\n"
+      . "<tr><td>&nbsp;</td></tr>\n";
+
+    print
+"<tr><td align=\"center\"><input type=\"image\" src=\"pict/menu_b_add.jpg\" "
+      . "width=167 height=20 alt=\"Add\" border=\"0\">\n</form></td></tr></table>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Conver the 'image' format to the 'volume' format
+sub convert {
+    my %img2vol = %{shift()};
+
+    my @invs = Caseman::read_invest();
+    if (scalar @invs == 0) {
+        push @invs, "unknown";
+    }
+
+    foreach $i (@invs) {
+        my $notes_file = "$::host_dir" . "$::LOGDIR/$i.notes";
+
+        if ((!(-e "$notes_file")) || (-z "$notes_file")) {
+            next;
+        }
+        Print::log_host_info(
+            "Converting format of notes file for $i ($notes_file)");
+
+        open NOTES, "<$notes_file" or die "Can't open log: $notes_file";
+
+        my $notes_file_new = $notes_file . ".new";
+        open NOTES_NEW, ">$notes_file_new"
+          or die "Can't open writing log: $notes_file_new";
+
+        while (<NOTES>) {
+
+            if (/Image: ($::REG_IMG)\s+(.*)$/) {
+                my $img  = $1;
+                my $addr = $2;
+
+                unless (exists $img2vol{$img}) {
+                    print STDERR
+"Error finding image during notes conversion: $img.  Not converting\n";
+                    next;
+                }
+                my $vol = $img2vol{$img};
+
+                # Convert old description to last versions
+                $addr =~ s/Inode:/Meta:/;
+                print NOTES_NEW "Volume: $vol   $addr\n";
+            }
+            else {
+                print NOTES_NEW $_;
+            }
+        }
+
+        close(NOTES);
+        close(NOTES_NEW);
+        rename $notes_file,     $notes_file . ".bak";
+        rename $notes_file_new, $notes_file;
+    }
+
+    # NOw do sequence notes
+    foreach $i (@invs) {
+        my $notes_file = "$::host_dir" . "$::LOGDIR/$i.seq.notes";
+        if ((!(-e "$notes_file")) || (-z "$notes_file")) {
+            next;
+        }
+
+        open NOTES, "$notes_file" or die "Can't open log: $notes_file";
+
+        $notes_file_new = $notes_file . ".new";
+        open NOTES_NEW, ">$notes_file_new"
+          or die "Can't open log for updating: $notes_file_new";
+
+        while (<NOTES>) {
+
+            # No image in entry
+            if (/^'\d+','\d+','\d+','\d+','\d+','\d+','$::REG_HOST','','/) {
+                print NOTES_NEW $_;
+            }
+            elsif (
+/^('\d+','\d+','\d+','\d+','\d+','\d+','$::REG_HOST',')($::REG_IMG)(','.*)$/
+              )
+            {
+                my $pre  = $1;
+                my $img  = $2;
+                my $post = $3;
+                unless (exists $img2vol{$img}) {
+                    print STDERR
+"Error finding image during notes conversion: $img.  Not converting\n";
+                    next;
+                }
+                my $vol = $img2vol{$img};
+                print NOTES_NEW $pre . $vol . $post . "\n";
+            }
+            else {
+                print NOTES_NEW "$_";
+                return;
+            }
+        }
+
+        close(NOTES);
+        close(NOTES_NEW);
+        rename $notes_file,     $notes_file . ".bak";
+        rename $notes_file_new, $notes_file;
+    }
+
+    return 0;
+}
diff --git a/lib/Print.pm b/lib/Print.pm
new file mode 100644
index 0000000000..417caa70f4
--- /dev/null
+++ b/lib/Print.pm
@@ -0,0 +1,390 @@
+package Print;
+
+#
+# Utilities to print information
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Escape HTML entities
+# Converts \n to <br>\n
+sub html_encode {
+    my $text = shift;
+    $text =~ s/&/&amp;/gs;
+    $text =~ s/</&lt;/gs;
+    $text =~ s/>/&gt;/gs;
+    $text =~ s/\"/&quot;/gs;
+    $text =~ s/\n/<br>\n/gs;
+
+    # @@@ LEADING SPACES and TABS
+    # while ($text =~ s/^(&nbsp;)*\t/"$1&nbsp;&nbsp;&nbsp;&nbsp;"/eig) {}
+    # while ($text =~ s/^(&nbsp;)* /"$1&nbsp;"/eig) {}
+    return $text;
+}
+
+# remove control chars from printout
+# this does not escape HTML entities, so you can pass this HTML code
+sub print_output {
+    my $out = shift;
+    print "$out";
+
+    while (my $out = shift) {
+        foreach $_ (split(//, $out)) {
+            if (   ($_ eq "\n")
+                || ($_ eq "\r")
+                || ($_ eq "\f")
+                || ($_ eq "\t"))
+            {
+                print "$_";
+            }
+            elsif ((ord($_) < 0x20) && (ord($_) >= 0x00)) {
+                print "^" . ord($_);
+            }
+            else {
+                print "$_";
+            }
+        }
+    }
+}
+
+# Added to provide output in hexdump format
+# function gets called on a per-icat basis,
+# The offset value is the byte offset that this data
+# starts at, since the File.pm code calls it in 1024
+# byte chunks)
+sub print_hexdump {
+    my $out    = shift;    # data to output
+    my $offset = shift;    # starting byte offset in file
+    my $buf    = "";
+
+    foreach $i (split(//, $out)) {
+        my $idx = $offset % 16;
+
+        if ($idx == 0) {
+            printf("%08X:  ", $offset);
+        }
+
+        printf("%02X", ord($i));
+        if (($idx % 2) == 1) {
+            printf(" ");
+        }
+
+        $buf[$idx] = $i;
+
+        if ($idx == 15) {
+            print "   ";
+            for (my $j = 0; $j < 16; $j++) {
+                if ($buf[$j] =~ m/[ -~]/) {
+                    print $buf[$j];
+                }
+                else {
+                    print ".";
+                }
+                $buf[$j] = 0;
+            }
+            print "\n";
+        }
+        $offset++;
+    }
+
+    # print out last line if < 16 bytes long
+    my $l = $offset % 16;
+
+    if ($l) {
+        my $t = (16 - $l) * 2 + (16 - $l) / 2;
+        for (my $j = 0; $j < $t; $j++) {
+            print " ";
+        }
+        print "   ";
+        for (my $j = 0; $j < $l; $j++) {
+            if ($buf[$j] =~ m/[ -~]/) {
+                print $buf[$j];
+            }
+            else {
+                print ".";
+            }
+        }
+        print "\n";
+    }
+}
+
+############################################
+#
+# HTTP/HTML Headers and Footers
+
+# The page that makes the frameset does not have a body statement
+# This routine is used to make the minimum required header statements
+sub print_html_header_frameset {
+    my $text = shift;
+    print "Content-Type: text/html; charset=utf-8$::HTTP_NL$::HTTP_NL";
+
+    my $time = localtime();
+
+    print <<EOF;
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Autopsy ver. $::VER Forensic Browser -->
+<!-- Page created at: $time -->
+<head>
+  <title>$text</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" href="global.css">
+</head>
+
+EOF
+}
+
+sub print_html_footer_frameset {
+    print "\n</html>\n" . "$::HTTP_NL$::HTTP_NL";
+}
+
+# Create the header information with the body tag
+sub print_html_header {
+    print_html_header_frameset(shift);
+    print "<body bgcolor=\"$::BACK_COLOR\">\n\n";
+    print "<link rel=\"SHORTCUT ICON\" href=\"pict/favicon.ico\">\n";
+}
+
+sub print_html_footer {
+    print "\n</body>\n</html>\n" . "$::HTTP_NL$::HTTP_NL";
+}
+
+# Print the header with the margins set to 0 so that the tab buttons
+# are flush with the edges of the frame
+sub print_html_header_tabs {
+    print_html_header_frameset(shift);
+    print "<body marginheight=0 marginwidth=0 topmargin=0 "
+      . "leftmargin=0 rightmargin=0 botmargin=0 bgcolor=\"$::BACK_COLOR\">\n\n";
+    print "<link rel=\"SHORTCUT ICON\" href=\"pict/favicon.ico\">\n";
+    $is_body = 1;
+}
+
+sub print_html_footer_tabs {
+    print "\n</body>\n</html>\n" . "$::HTTP_NL$::HTTP_NL";
+}
+
+# Header for front page to warn about java script
+sub print_html_header_javascript {
+    my $text = shift;
+    print "Content-Type: text/html; charset=utf-8$::HTTP_NL$::HTTP_NL";
+
+    my $time = localtime();
+
+    # The write line has to stay on one line
+    print <<EOF;
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Autopsy ver. $::VER Forensic Browser -->
+<!-- Page created at: $time -->
+<head>
+  <title>$text</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" href="global.css">
+  <script language=\"JavaScript\">
+  <!-- hide script from old browsers
+  document.write(\'<center><font color=\"red\"><p>WARNING: Your browser currently has Java Script enabled.</font><p>You do not need Java Script to use Autopsy and it is recommended that it be turned off for security reasons.<hr></center>\');
+  //-->
+  </script>
+</head>
+
+<body bgcolor=\"$::BACK_COLOR\">
+<link rel=\"SHORTCUT ICON\" href=\"pict/favicon.ico\">
+
+EOF
+}
+
+sub print_html_footer_javascript {
+    print "\n</body>\n</html>\n" . "$::HTTP_NL$::HTTP_NL";
+}
+
+# For raw text outputs (Pass the name of a file if it is being saved)
+sub print_text_header {
+    print "Content-Type: text/plain; charset=utf-8$::HTTP_NL";
+    if (scalar @_ > 0) {
+        my $fname = shift();
+        print "Content-Disposition: inline; " . "filename=$fname;$::HTTP_NL";
+    }
+    print "$::HTTP_NL";
+}
+
+sub print_text_footer {
+    print "$::HTTP_NL$::HTTP_NL";
+}
+
+# For forced save outputs
+sub print_oct_header {
+    print "Content-Type: application/octet-stream$::HTTP_NL";
+    if (scalar @_ > 0) {
+        my $fname = shift();
+        print "Content-Disposition: inline; " . "filename=$fname;$::HTTP_NL";
+    }
+    print "$::HTTP_NL";
+}
+
+sub print_oct_footer {
+}
+
+# Error message that is used when an HTTP/HTML header is needed
+# This escapes the characters that chould be HTML entities.
+# it will also replace \n with <br> and other things that html_encode()
+# can do. Do not send arbitrary HTML to this function.
+sub print_check_err {
+    print_html_header("");
+    print html_encode(shift()) . "<br>\n";
+    print_html_footer();
+    sleep(1);
+    exit 1;
+}
+
+# Error message when header already exists
+# This escapes the characters that chould be HTML entities.
+# it will also replace \n with <br> and other things that html_encode()
+# can do. Do not send arbitrary HTML to this function.
+sub print_err {
+    print html_encode(shift()) . "<br>\n";
+    sleep(1);
+    print_html_footer();
+    exit 1;
+}
+
+##################################################################
+#
+# Logging
+#
+#
+
+sub investig_log_fname {
+    return "" unless (defined $::host_dir       && $::host_dir        ne "");
+    return "" unless (exists $Args::args{'inv'} && $Args::args{'inv'} ne "");
+
+    return "$::host_dir" . "$::LOGDIR/$Args::args{'inv'}.log";
+}
+
+sub investig_exec_log_fname {
+    return "" unless (defined $::host_dir       && $::host_dir        ne "");
+    return "" unless (exists $Args::args{'inv'} && $Args::args{'inv'} ne "");
+
+    return "$::host_dir" . "$::LOGDIR/$Args::args{'inv'}.exec.log";
+}
+
+sub host_log_fname {
+    return "" unless (defined $::host_dir && $::host_dir ne "");
+
+    return "$::host_dir" . "$::LOGDIR/host.log";
+}
+
+sub case_log_fname {
+    return "" unless (defined $::case_dir && $::case_dir ne "");
+
+    return "$::case_dir" . "case.log";
+}
+
+# Log data to the investigators specific log file
+sub log_host_inv {
+    return unless ($::USE_LOG == 1);
+
+    my $str = shift;
+    chomp $str;
+
+    my $date  = localtime;
+    my $fname = investig_log_fname();
+    return if ($fname eq "");
+
+    open HOSTLOG, ">>$fname" or die "Can't open log: $fname";
+    print HOSTLOG "$date: $str\n";
+    close(HOSTLOG);
+
+    return;
+}
+
+sub log_host_inv_exec {
+    return unless ($::USE_LOG == 1);
+    my $str = shift;
+    chomp $str;
+
+    my $date  = localtime;
+    my $fname = investig_exec_log_fname();
+    return if ($fname eq "");
+
+    open HOSTLOG, ">>$fname" or die "Can't open log: $fname";
+    print HOSTLOG "$date: $str\n";
+    close(HOSTLOG);
+
+    return;
+}
+
+# log data to the general log file for the host
+sub log_host_info {
+    return unless ($::USE_LOG == 1);
+
+    my $str = shift;
+    chomp $str;
+
+    my $date  = localtime;
+    my $fname = host_log_fname();
+    return if ($fname eq "");
+
+    open HOSTLOG, ">>$fname" or die "Can't open log: $fname";
+    print HOSTLOG "$date: $str\n";
+    close(HOSTLOG);
+
+    return;
+}
+
+sub log_case_info {
+    return unless ($::USE_LOG == 1);
+    my $str = shift;
+    chomp $str;
+    my $date  = localtime;
+    my $fname = case_log_fname();
+    return if ($fname eq "");
+
+    open CASELOG, ">>$fname" or die "Can't open log: $fname";
+    print CASELOG "$date: $str\n";
+    close(CASELOG);
+
+    return;
+}
+
+sub log_session_info {
+    return unless ($::USE_LOG == 1);
+    my $str = shift;
+    chomp $str;
+    my $date = localtime;
+
+    my $lname = "autopsy.log";
+    open AUTLOG, ">>$::LOCKDIR/$lname" or die "Can't open log: $lname";
+    print AUTLOG "$date: $str\n";
+    close(AUTLOG);
+
+    return;
+}
+
+1;
diff --git a/lib/Timeline.pm b/lib/Timeline.pm
new file mode 100644
index 0000000000..4cd676af93
--- /dev/null
+++ b/lib/Timeline.pm
@@ -0,0 +1,1425 @@
+#
+# Timeline functions
+#
+# Brian Carrier [carrier@sleuthkit.org]
+# Copyright (c) 2001-2005 by Brian Carrier.  All rights reserved
+#
+# This file is part of the Autopsy Forensic Browser (Autopsy)
+#
+# Autopsy is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Autopsy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Autopsy; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE.
+# IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package Timeline;
+
+use POSIX;    # needed for tzset
+
+# Changing the order of this may affect the main function ordering
+
+$Timeline::BLANK      = 0;
+$Timeline::FRAME      = 1;
+$Timeline::TABS       = 2;
+$Timeline::BODY_ENTER = 3;
+$Timeline::BODY_RUN   = 4;
+$Timeline::TL_ENTER   = 5;
+$Timeline::TL_RUN     = 6;
+$Timeline::VIEW_FR    = 7;
+$Timeline::VIEW_MENU  = 8;
+$Timeline::VIEW_IDX   = 9;
+$Timeline::VIEW_SUM   = 10;
+$Timeline::VIEW       = 11;
+
+# Types of modes for fname (i.e. can we overwrite it if it exists)
+my $FNAME_MODE_INIT = 0;
+my $FNAME_MODE_OVER = 1;
+
+sub main {
+
+    return if ($::LIVE == 1);
+
+    # By default, show the main frame
+    $Args::args{'view'} = $Args::enc_args{'view'} = $Timeline::FRAME
+      unless (exists $Args::args{'view'});
+
+    Args::check_view();
+    my $view = Args::get_view();
+
+    if ($view < $Timeline::VIEW_FR) {
+        if ($view == $Timeline::BLANK) {
+            return blank();
+        }
+        elsif ($view == $Timeline::FRAME) {
+            return frame();
+        }
+        elsif ($view == $Timeline::TABS) {
+            return tabs();
+        }
+        elsif ($view == $Timeline::BODY_ENTER) {
+            return body_enter();
+        }
+        elsif ($view == $Timeline::BODY_RUN) {
+            return body_run();
+        }
+        elsif ($view == $Timeline::TL_ENTER) {
+            return tl_enter();
+        }
+        elsif ($view == $Timeline::TL_RUN) {
+            return tl_run();
+        }
+    }
+    else {
+        if ($view == $Timeline::VIEW_FR) {
+            return view_fr();
+        }
+        elsif ($view == $Timeline::VIEW_MENU) {
+            return view_menu();
+        }
+        elsif ($view == $Timeline::VIEW_IDX) {
+            return view_idx();
+        }
+        elsif ($view == $Timeline::VIEW_SUM) {
+            return view_sum();
+        }
+        elsif ($view == $Timeline::VIEW) {
+            return view();
+        }
+    }
+    Print::print_check_err("Invalid Timeline View");
+}
+
+# Call the appropriate function based on the value of sort
+sub frame {
+    Print::print_html_header_frameset(
+        "Timeline: $Args::args{'case'}:$Args::args{'host'}");
+
+    print "<frameset rows=\"38,*\">\n";
+
+    my $submod = $Timeline::BLANK;
+    $submod = Args::get_submod() if (exists $Args::args{'submod'});
+
+    # Listing
+    print "<frame src=\"$::PROGNAME?mod=$::MOD_TL&view=$Timeline::TABS&"
+      . "$Args::baseargs&submod=$submod\">\n";
+
+    my $str = "";
+
+    # Contents
+    if ($submod == $Timeline::BLANK) {
+        print
+"<frame src=\"$::PROGNAME?mod=$::MOD_TL&view=$Timeline::BLANK&$Args::baseargs\" "
+          . "name=\"content\">\n</frameset>\n";
+        return;
+    }
+    elsif ($submod == $Timeline::TL_ENTER) {
+        $str .= "&body=$Args::args{'body'}" if (exists $Args::args{'body'});
+    }
+    elsif ($submod == $Timeline::VIEW_FR) {
+        $str .= "&tl=$Args::args{'tl'}" if (exists $Args::args{'tl'});
+    }
+
+    print
+"<frame src=\"$::PROGNAME?mod=$::MOD_TL&view=$submod&$Args::baseargs$str\" "
+      . "name=\"content\">\n</frameset>\n";
+
+    Print::print_html_footer_frameset();
+    return 0;
+}
+
+# The tabs / button images in timeline view
+sub tabs {
+    Args::check_submod();
+    Print::print_html_header_tabs("Timeline Mode Tabs");
+
+    my $submod = Args::get_submod();
+
+    print "<center><table width=\"800\" border=\"0\" "
+      . "cellspacing=\"0\" cellpadding=\"0\"><tr>\n";
+
+    # Create Datafile
+    print "<td align=\"center\" width=174>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_TL&view=$Timeline::FRAME&"
+      . "submod=$Timeline::BODY_ENTER&$Args::baseargs\" target=\"_top\">";
+
+    if ($submod == $Timeline::BODY_ENTER) {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_data_cur.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"Create Data File (Current Mode)\"></a>\n";
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_data_link.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"Create Data File\"></a>\n";
+    }
+
+    print "</td>\n"
+      . "<td align=\"center\" width=174>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_TL&view=$Timeline::FRAME&"
+      . "submod=$Timeline::TL_ENTER&$Args::baseargs\" "
+      . "target=\"_top\">";
+
+    # Create Timeline
+    if ($submod == $Timeline::TL_ENTER) {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_tl_cur.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"Create Timeline (Current Mode)\"></a>\n";
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_tl_link.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"Create Timeline\"></a>\n";
+    }
+    print "</td>\n"
+      . "<td align=\"center\" width=174>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_TL&view=$Timeline::FRAME&"
+      . "submod=$Timeline::VIEW_MENU&$Args::baseargs\" "
+      . "target=\"_top\">";
+
+    # View Timeline
+    if (($submod == $Timeline::VIEW_FR) || ($submod == $Timeline::VIEW_MENU)) {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_view_cur.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"View Timeline (Current Mode)\"></a>\n";
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_view_link.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"View Timeline\"></a>\n";
+    }
+
+    # Notes
+    print "</td>\n" . "<td align=\"center\" width=174>";
+    if ($::USE_NOTES == 1) {
+        print
+"<a href=\"$::PROGNAME?mod=$::MOD_NOTES&view=$Notes::READ_NORM&$Args::baseargs_novol\" "
+          . "target=\"_blank\">"
+          . "<img border=0 "
+          . "src=\"pict/tl_t_notes_link.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"View Notes\"></a></td>\n";
+    }
+    else {
+        print "<img border=0 "
+          . "src=\"pict/tl_t_notes_org.jpg\" "
+          . "width=174 height=38 "
+          . "alt=\"View Notes\"></a></td>\n";
+    }
+
+    # Help - set to current submod
+    print "<td align=\"center\" width=52>"
+      . "<a href=\"$::HELP_URL\" target=\"_blank\">"
+      . "<img border=0 src=\"pict/tab_help.jpg\" width=52 "
+      . "alt=\"Help\"></a></td>\n";
+
+    # Close
+    print "<td align=\"center\" width=52>"
+      . "<a href=\"$::PROGNAME?mod=$::MOD_CASEMAN&"
+      . "view=$Caseman::VOL_OPEN&$Args::baseargs\" target=\"_top\">"
+      . "<img border=0 src=\"pict/tab_close.jpg\" width=52 "
+      . "alt=\"Exit to Host Manager\"></a></td>\n"
+      . "</tr></table>\n";
+
+    Print::print_html_footer_tabs();
+    return 0;
+}
+
+sub body_enter {
+    Print::print_html_header("Enter Data to Make Body File");
+
+    my $i;
+    my %mnt2img;
+
+    # Cycle through each image we read from fsmorgue
+    foreach $i (keys %Caseman::vol2mnt) {
+        next
+          unless ($Caseman::vol2cat{$i} eq "part");
+        next
+          if ( ($Caseman::vol2ftype{$i} eq "swap")
+            || ($Caseman::vol2ftype{$i} eq "raw"));
+        $mnt2vol{"$Caseman::vol2mnt{$i}--$i"} = $i;
+    }
+
+# sort via parent volume, then starting location, and then mount point (which includes the name)
+    my @mnt = sort {
+        ($Caseman::vol2par{$mnt2vol{$a}} cmp $Caseman::vol2par{$mnt2vol{$b}})
+          or ($Caseman::vol2start{$mnt2vol{$a}} <=>
+            $Caseman::vol2start{$mnt2vol{$b}})
+          or (lc($a) cmp lc($b))
+    } keys %mnt2vol;
+
+    print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::BODY_RUN\">\n"
+      . Args::make_hidden()
+      . "<p>Here  we will process the file system images, collect the temporal data, and save the data to a single file."
+      . "<p>1.  Select one or more of the following images to collect data from:\n"
+      . "<table cellspacing=\"8\" cellpadding=\"2\">";
+
+    for (my $i = 0; $i <= $#mnt; $i++) {
+        my $vol = $mnt2vol{$mnt[$i]};
+
+        print "<tr><td><input type=\"checkbox\" name=\"$vol\" value=\"1\">"
+          . "</td><td><tt>$Caseman::vol2mnt{$vol}</tt></td><td><tt>$Caseman::vol2sname{$vol}</tt></td>"
+          . "<td>$Caseman::vol2ftype{$vol}</td>\n";
+    }
+
+    print "</table><p>2.  Select the data types to gather:<br>\n"
+      . "<table cellspacing=\"8\" cellpadding=\"2\"><tr>"
+      . "<td><input type=\"checkbox\" name=\"al_file\" value=\"1\" CHECKED>"
+      . "</td><td>Allocated Files</td>"
+      . "<td><input type=\"checkbox\" name=\"unal_file\" value=\"1\" CHECKED>"
+      . "</td><td>Unallocated Files</td>"
+      . "</tr></table>\n"
+      . "<p>3.   Enter name of output file (<tt>body</tt>):<br>"
+      . "<tt>$::DATADIR/</tt>"
+      . "<input type=\"text\" name=\"fname\" value=\"body\">\n"
+      . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_INIT\">\n"
+      . "<p>4.   Generate MD5 Value? "
+      . "<input type=\"checkbox\" name=\"md5\" value=\"1\" CHECKED>";
+
+    print "<p><input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\"></form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub body_run {
+    Args::check_fname();
+    Args::check_fname_mode();
+    Print::print_html_header("Make Body File");
+
+    my $fname_rel = Args::get_fname_rel();
+    my $fname     = Args::get_fname();
+
+    my $fname_mode = $Args::args{'fname_mode'};
+
+    if ((-e "$fname") && ($FNAME_MODE_INIT == $fname_mode)) {
+        print "File Already Exists: $fname_rel\n";
+
+        my $hidden = Args::make_hidden();
+
+        $hidden .=
+            "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::BODY_RUN\">\n";
+
+        my $i;
+        foreach $i (%Caseman::vol2mnt) {
+            $hidden .= "<input type=\"hidden\" name=\"$i\" value=\"1\">\n"
+              if (exists $Args::args{$i});
+        }
+
+        $hidden .=
+            "<input type=\"hidden\" name=\"al_file\" "
+          . "value=\"$Args::args{'al_file'}\">\n"
+          if (exists $Args::args{'al_file'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"unal_file\" "
+          . "value=\"$Args::args{'unal_file'}\">\n"
+          if (exists $Args::args{'unal_file'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"md5\" "
+          . "value=\"$Args::args{'md5'}\">\n"
+          if (exists $Args::args{'md5'});
+
+        # Make a new name
+        print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "New Name: <input type=\"text\" name=\"fname\">"
+          . "<table cellspacing=\"30\" cellpadding=\"2\"><tr><td>"
+          . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_INIT\">\n"
+          . "$hidden"
+          . "<input type=\"image\" src=\"pict/but_new_name.jpg\" "
+          . "width=79 height=20 alt=\"Use New Name\" border=\"0\">\n"
+          . "</form></td>\n";
+
+        # Overwrite it
+        print "<td><form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"image\" src=\"pict/but_replace.jpg\" "
+          . "width=66 height=20 alt=\"Replace\" border=\"0\"><br>\n"
+          . "<input type=\"hidden\" name=\"fname\" value=\"$Args::args{'fname'}\">\n"
+          . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_OVER\">\n"
+          . "$hidden"
+          . "</form></td></tr></table>";
+
+        return 0;
+    }
+
+    # we will be appending to the file so we should del it now
+    if (-e "$fname") {
+        unlink($fname);
+    }
+
+    my $log_files = "";
+    my $log_type  = "";
+
+    # What kind of data are we collecting?
+    my $al_file = 0;
+    if (exists $Args::args{'al_file'}) {
+        $al_file = $Args::args{'al_file'};
+        $log_type .= "Allocated Files";
+    }
+
+    my $unal_file = 0;
+    if (exists $Args::args{'unal_file'}) {
+        $unal_file = $Args::args{'unal_file'};
+        $log_type .= ", " if ($log_type ne "");
+        $log_type .= "Unallocated Files";
+    }
+
+    if (($unal_file == 0) && ($al_file == 0)) {
+        print
+          "No data types were selected.  You must select at least one.<br>\n";
+        return 1;
+    }
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    my $i;
+    my $found = 0;
+    local *OUT;
+
+    # Analyze each image - the image names are passed as an argument
+    foreach $i (keys %Caseman::vol2mnt) {
+        if (exists $Args::args{$i}) {
+
+            $found = 1;
+            my $ftype   = $Caseman::vol2ftype{$i};
+            my $img     = $Caseman::vol2path{$i};
+            my $offset  = $Caseman::vol2start{$i};
+            my $imgtype = $Caseman::vol2itype{$i};
+            my $mnt     = $Caseman::vol2mnt{$i};
+
+            $log_files .= ", " if ($log_files ne "");
+            $log_files .= "$i";
+
+            if (($al_file) && ($unal_file)) {
+                print "Running <tt>fls -r -m</tt> on <tt>$i</tt><br>\n";
+                Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' $tz -s $Caseman::ts -m '$mnt' -f $ftype -r -o $offset -i $imgtype $img >> '$fname'"
+                );
+                print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+                close(OUT);
+            }
+            elsif ($al_file) {
+                print "Running <tt>fls -ru -m</tt> on <tt>$i</tt><br>\n";
+                Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' $tz -s $Caseman::ts -m '$mnt' -f $ftype -ru -o $offset -i $imgtype $img >> '$fname'"
+                );
+                print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+                close(OUT);
+            }
+            elsif ($unal_file) {
+                print "Running <tt>fls -rd -m</tt> on <tt>$i</tt><br>\n";
+                Exec::exec_pipe(*OUT,
+"'$::TSKDIR/fls' $tz -s $Caseman::ts -m '$mnt' -f $ftype -rd -o $offset -i $imgtype $img >> '$fname'"
+                );
+                print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+                close(OUT);
+            }
+        }
+    }
+
+    unless ($found) {
+        print
+"No images were given for analysis.  At least one must be selected.<br>\n";
+        return 1;
+    }
+
+    Print::log_host_inv(
+        "Saving timeline data for $log_type for $log_files to $fname_rel");
+
+    # append to  host config
+    my $bod_vol = Caseman::add_vol_host_config("body", $fname_rel);
+    $Caseman::vol2cat{$bod_vol}   = "timeline";
+    $Caseman::vol2ftype{$bod_vol} = "body";
+    $Caseman::vol2itype{$bod_vol} = "raw";
+    $Caseman::vol2path{$bod_vol}  = $fname;
+    $Caseman::vol2start{$bod_vol} = 0;
+    $Caseman::vol2end{$bod_vol}   = 0;
+    $Caseman::vol2sname{$bod_vol} = $fname_rel;
+
+    print "<br>Body file saved to <tt>$fname</tt><br><br>\n"
+      . "Entry added to host config file<br><br>\n";
+
+    # Calculate MD5
+    if ((exists $Args::args{'md5'}) && ($Args::args{'md5'} == 1)) {
+        print "Calculating MD5 Value<br><br>\n";
+        my $m = Hash::int_create_wrap($bod_vol);
+        print "MD5 Value: <tt>$m</tt><br><br>\n";
+    }
+
+    print "<p>The next step is to sort the data into a timeline."
+      . "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+      . "<input type=\"hidden\" name=\"body\" value=\"$bod_vol\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::FRAME\">\n"
+      . "<input type=\"hidden\" name=\"submod\" value=\"$Timeline::TL_ENTER\">\n"
+      . Args::make_hidden()
+      . "<input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+my $OTYPE_NORM   = 1;
+my $OTYPE_HOURLY = 2;
+my $OTYPE_DAILY  = 3;
+
+sub tl_enter {
+    Print::print_html_header("Enter data for timeline");
+
+    my @body;
+
+    # Find the body files if we will be looking for them
+    unless ((exists $Args::args{'body'})
+        && (exists $Caseman::vol2cat{$Args::args{'body'}}))
+    {
+        foreach my $k (keys %Caseman::vol2cat) {
+            if (   ($Caseman::vol2cat{$k} eq "timeline")
+                && ($Caseman::vol2ftype{$k} eq "body"))
+            {
+                push @body, $k;
+            }
+        }
+
+        if (scalar(@body) == 0) {
+            print "There are currently no <tt>body</tt> files "
+              . "for this host.<br>You must create the intermediate "
+              . "data file before you can perform this step<br>\n"
+              . "<p><a target=\"_top\"  "
+              . "href=\"$::PROGNAME?$Args::baseargs&"
+              . "mod=$::MOD_TL&view=$Timeline::FRAME&"
+              . "submod=$Timeline::BODY_ENTER\">"
+              . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+              . "width=\"43\" height=20 border=\"0\">"
+              . "</a>\n";
+            return 1;
+        }
+    }
+    print "Now we will sort the data and save it to a timeline.<p>\n"
+      . "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::TL_RUN\">\n"
+      . Args::make_hidden()
+      . "1.  Select the data input file (<tt>body</tt>):\n"
+      . "<table cellspacing=\"0\" cellpadding=\"2\">";
+
+    # if the body file was specified then just print it
+    if (exists $Args::args{'body'}) {
+        print "<tr><td><input type=\"radio\" name=\"body\" "
+          . "value=\"$Args::args{'body'}\" CHECKED>"
+          . "</td><td>$Caseman::vol2sname{$Args::args{'body'}}</td>\n";
+    }
+    else {
+        my @body_sort = sort { lc($a) cmp lc($b) } @body;
+        my $chk = " CHECKED";
+        for (my $i = 0; $i <= $#body_sort; $i++) {
+            print "<tr><td><input type=\"radio\" name=\"body\" "
+              . "value=\"$body_sort[$i]\" $chk></td><td>$Caseman::vol2sname{$body_sort[$i]}</td>\n";
+            $chk = "";
+        }
+    }
+
+    my $cur_mon  = 1 +    (localtime())[4];
+    my $cur_year = 1900 + (localtime())[5];
+
+    # STARTING DATE
+    print "</table>\n"
+      . "<p>2.  Enter the starting date:<br>\n"
+      . "None: <input type=\"radio\" name=\"st_none\" value=\"1\" CHECKED><br>"
+      . "Specify: <input type=\"radio\" name=\"st_none\" value=\"0\">  "
+      . "<select name=\"st_mon\" size=\"1\">";
+
+    for my $i (1 .. 12) {
+        if ($i == $cur_mon) {
+            print "<option selected value=\"$i\">$::d2m[$i]</option>\n";
+        }
+        else {
+            print "<option value=\"$i\">$::d2m[$i]</option>\n";
+        }
+    }
+
+    print "</select>"
+      . "<select name=\"st_day\" size=\"1\">"
+      . "<option selected>1</option>\n";
+
+    for my $i (2 .. 31) {
+        print "<option value=\"$i\">$i</option>\n";
+    }
+
+    print "</select>"
+      . "<input type=\"text\" name=\"st_year\" size=\"6\" value=\"$cur_year\">\n";
+
+    # END DATE
+    print "<p>3.   Enter the ending date:<br>\n"
+      . "None: <input type=\"radio\" name=\"end_none\" value=\"1\" CHECKED><br>\n"
+      . "Specify: <input type=\"radio\" name=\"end_none\" value=\"0\">  \n"
+      . "<select name=\"end_mon\" size=\"1\">\n";
+
+    for my $i (1 .. 12) {
+        if ($i == $cur_mon) {
+            print "<option selected value=\"$i\">$::d2m[$i]</option>\n";
+        }
+        else {
+            print "<option value=\"$i\">$::d2m[$i]</option>\n";
+        }
+    }
+
+    print "</select>\n"
+      . "<select name=\"end_day\" size=\"1\">\n"
+      . "<option selected value=\"1\">1</option>\n";
+
+    for my $i (2 .. 31) {
+        print "<option value=\"$i\">$i</option>\n";
+    }
+
+    print "</select>"
+      . "<input type=\"text\" name=\"end_year\" size=\"6\" value=\"$cur_year\">\n";
+
+    # FILE NAME
+    print "<p>4.   Enter the file name to save as:<br>"
+      . "<tt>$::DATADIR/</tt><input type=\"text\" size=36 name=\"fname\" value=\"timeline.txt\"><br>\n"
+      . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_INIT\">\n";
+
+    # Get only the UNIX images - since only they have /etc/passwd and group
+    my @unix_imgs;
+    my $root_vol = "";
+    foreach my $i (keys %Caseman::vol2ftype) {
+        my $f = $Caseman::vol2ftype{$i};
+
+        next
+          unless (($f =~ /^ext/)
+            || ($f =~ /^ufs/)
+            || ($f =~ /^linux/)
+            || ($f =~ /bsd$/)
+            || ($f =~ /^solaris$/)
+            || ($f =~ /^bsdi$/));
+
+        push @unix_vols, $i;
+
+        # Keep a reference to an image with '/' as the mounting point
+        $root_vol = $i
+          if ($Caseman::vol2mnt{$i} eq '/');
+    }
+
+    my $cnt = 5;
+    if (scalar @unix_vols > 0) {
+
+        print
+"<p>$cnt.  Select the UNIX image that contains the /etc/passwd and /etc/group files:<br>\n";
+        $cnt++;
+
+        print "<select name=\"pw_vol\">\n";
+
+        # If we did not find an image that has a / mounting point, then
+        # we will use none as the default.
+        if ($root_vol eq "") {
+            print "<option value=\"\" selected>None</option>\n";
+        }
+        else {
+            print "<option value=\"\">None</option>\n";
+        }
+
+        foreach my $vol (@unix_vols) {
+            if ($root_vol eq $vol) {
+                print
+"<option value=\"$vol\" selected>$Caseman::vol2sname{$vol} ($Caseman::vol2mnt{$vol})"
+                  . "</option>\n";
+            }
+            else {
+                print
+"<option value=\"$vol\">$Caseman::vol2sname{$vol} ($Caseman::vol2mnt{$vol})</option>\n";
+            }
+        }
+
+        print "</select>\n";
+    }
+
+    print "<p>$cnt. Choose the output format:<br>\n";
+    $cnt++;
+    print
+"&nbsp;&nbsp;<input type=\"radio\" name=\"sort\" value=\"$OTYPE_NORM\" CHECKED>Tabulated (normal)<br>\n"
+      . "&nbsp;&nbsp;<input type=\"radio\" name=\"sort\" value=\"$OTYPE_HOURLY\">Comma delimited with hourly summary<br>\n"
+      . "&nbsp;&nbsp;<input type=\"radio\" name=\"sort\" value=\"$OTYPE_DAILY\">Comma delimited with daily summary<br>\n";
+
+    print "<p>$cnt.  Generate MD5 Value? ";
+    $cnt++;
+
+    print "<input type=\"checkbox\" name=\"md5\" value=\"1\" CHECKED>\n";
+
+    # Create Button
+    print "<p><input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub tl_run {
+    Args::check_fname();
+    Args::check_body();
+    Args::check_sort();
+
+    Print::print_html_header("Make Timeline");
+
+    my $body      = Args::get_body();
+    my $fname     = Args::get_fname();
+    my $fname_rel = Args::get_fname_rel();
+    my $otype     = Args::get_sort();
+
+    my $fname_mode = $Args::args{'fname_mode'};
+
+    if ((-e "$fname") && ($FNAME_MODE_INIT == $fname_mode)) {
+        print "File Already Exists: <tt>$fname_rel</tt><br>\n";
+
+        my $hidden =
+          "<input type=\"hidden\" name=\"body\" value=\"$Args::args{'body'}\">"
+          . Args::make_hidden();
+
+        $hidden .=
+            "<input type=\"hidden\" name=\"st_none\" "
+          . "value=\"$Args::args{'st_none'}\">\n"
+          if (exists $Args::args{'st_none'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"st_year\" "
+          . "value=\"$Args::args{'st_year'}\">\n"
+          if (exists $Args::args{'st_year'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"st_day\" "
+          . "value=\"$Args::args{'st_day'}\">\n"
+          if (exists $Args::args{'st_day'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"st_mon\" "
+          . "value=\"$Args::args{'st_mon'}\">\n"
+          if (exists $Args::args{'st_mon'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"end_none\" "
+          . "value=\"$Args::args{'end_none'}\">\n"
+          if (exists $Args::args{'end_none'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"end_year\" "
+          . "value=\"$Args::args{'end_year'}\">\n"
+          if (exists $Args::args{'end_year'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"end_day\" "
+          . "value=\"$Args::args{'end_day'}\">\n"
+          if (exists $Args::args{'end_day'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"end_mon\" "
+          . "value=\"$Args::args{'end_mon'}\">\n"
+          if (exists $Args::args{'end_mon'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"tz\" "
+          . "value=\"$Args::args{'tz'}\">\n"
+          if (exists $Args::args{'tz'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"pw_vol\" "
+          . "value=\"$Args::args{'pw_vol'}\">\n"
+          if (exists $Args::args{'pw_vol'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"md5\" "
+          . "value=\"$Args::args{'md5'}\">\n"
+          if (exists $Args::args{'md5'});
+        $hidden .=
+            "<input type=\"hidden\" name=\"sort\" "
+          . "value=\"$Args::args{'sort'}\">\n"
+          if (exists $Args::args{'sort'});
+
+        # Make a new name
+        print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "New Name: <input type=\"text\" name=\"fname\">"
+          . "<table cellspacing=\"30\" cellpadding=\"2\"><tr><td>"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::TL_RUN\">\n"
+          . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_INIT\">\n"
+          . "$hidden\n"
+          . "<input type=\"image\" src=\"pict/but_new_name.jpg\" "
+          . "width=79 height=20 alt=\"Use New Name\" border=\"0\">\n"
+          . "</form></td>\n";
+
+        # Overwrite it
+        print "<td><form action=\"$::PROGNAME\" method=\"get\">\n"
+          . "<input type=\"image\" src=\"pict/but_replace.jpg\" "
+          . "width=66 height=20 alt=\"Replace\" border=\"0\"><br>\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::TL_RUN\">\n"
+          . "<input type=\"hidden\" name=\"fname\" value=\"$Args::args{'fname'}\">\n"
+          . "<input type=\"hidden\" name=\"fname_mode\" value=\"$FNAME_MODE_OVER\"
+>\n" . "$hidden\n" . "</form></td></tr></table>";
+
+        return 0;
+    }
+
+    my $mon;
+    my $day;
+    my $year;
+
+    my $date = "";
+
+    # Get the start date
+    unless ((exists $Args::args{'st_none'}) && ($Args::args{'st_none'} == 1)) {
+
+        if (exists $Args::args{'st_mon'}) {
+            Args::check_st_mon();
+            $mon = Args::get_st_mon();
+            if (($mon < 1) || ($mon > 12)) {
+                print("Invalid starting month\n");
+                return 1;
+            }
+            if ($mon < 10) {
+                $mon = "0" . $mon;
+            }
+        }
+        if (exists $Args::args{'st_year'}) {
+            Args::check_st_year();
+            $year = Args::get_st_year();
+            if (($year < 1970) || ($year > 2020)) {
+                print("Invalid starting year\n");
+                return 1;
+            }
+        }
+        if (   (exists $Args::args{'st_day'})
+            && ($Args::args{'st_day'} =~ /^(\d\d?)$/))
+        {
+            $day = $1;
+            if (($day < 1) || ($day > 31)) {
+                print("Invalid starting day\n");
+                return 1;
+            }
+            if ($day < 10) {
+                $day = "0" . $day;
+            }
+        }
+        else {
+            print("Invalid start day\n");
+            return 1;
+        }
+
+        $date = "$year-$mon-$day";
+    }
+
+    unless ((exists $Args::args{'end_none'}) && ($Args::args{'end_none'} == 1))
+    {
+
+        if ($date eq "") {
+            print "Begin date must be given if ending date is given<br>";
+            return 1;
+        }
+
+        if (   (exists $Args::args{'end_mon'})
+            && ($Args::args{'end_mon'} =~ /^(\d\d?)$/))
+        {
+            $mon = $1;
+            if (($mon < 1) || ($mon > 12)) {
+                print("Invalid end month\n");
+                return 1;
+            }
+            if ($mon < 10) {
+                $mon = "0" . $mon;
+            }
+        }
+        else {
+            print("Invalid end month\n");
+            return 1;
+        }
+        if (   (exists $Args::args{'end_year'})
+            && ($Args::args{'end_year'} =~ /^(\d\d\d\d)$/))
+        {
+            $year = $1;
+            if (($year < 1970) || ($year > 2020)) {
+                print("Invalid ending year\n");
+                return 1;
+            }
+
+        }
+        else {
+            print("Invalid end year\n");
+            return 1;
+        }
+        if (   (exists $Args::args{'end_day'})
+            && ($Args::args{'end_day'} =~ /^(\d\d?)$/))
+        {
+            $day = $1;
+            if (($day < 1) || ($day > 31)) {
+                print("Invalid end day\n");
+                return 1;
+            }
+            if ($day < 10) {
+                $day = "0" . $day;
+            }
+        }
+        else {
+            print("Invalid end day\n");
+            return 1;
+        }
+
+        $date .= "..$year-$mon-$day";
+    }
+
+    # temp strings for the password and group files
+    my $pw_tmp   = "";
+    my $gr_tmp   = "";
+    my $mac_args = "";
+    my $log      = "";
+
+    local *OUT;
+
+    # Password and Group Files
+    if ((exists $Args::args{'pw_vol'}) && ($Args::args{'pw_vol'} ne "")) {
+        Args::check_vol('pw_vol');
+        my $pw_vol = Args::get_vol('pw_vol');
+
+        my $ftype   = $Caseman::vol2ftype{$pw_vol};
+        my $img     = $Caseman::vol2path{$pw_vol};
+        my $offset  = $Caseman::vol2start{$pw_vol};
+        my $imgtype = $Caseman::vol2itype{$pw_vol};
+
+        $log .= "Password & Group File ($pw_vol) ";
+
+        # Get the passwd file meta and copy the file
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ifind' -f $ftype -n 'etc/passwd' -o $offset -i $imgtype $img"
+        );
+        my $pwi = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $pwi = "Error getting meta for passwd"
+          if ((!defined $pwi) || ($pwi eq ""));
+
+        # Do the Taint Checking
+        if ($pwi =~ /^($::REG_META)$/) {
+            $pwi = $1;
+
+            $log .= "Password Meta Address ($pwi) ";
+
+            # Find a temp name that we can call it
+            my $i;
+            for ($i = 0;; $i++) {
+                unless (-e "$fname.pw-$i") {
+                    $pw_tmp = "$fname.pw-$i";
+                    last;
+                }
+            }
+
+            Exec::exec_sys(
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $pwi > '$pw_tmp'"
+            );
+            $mac_args .= " -p \'$pw_tmp\' ";
+
+        }
+        else {
+            print(
+"Error finding /etc/passwd meta in $Caseman::vol2sname{$pw_vol} ($pwi)<br>"
+            );
+            Print::log_host_inv(
+"$Caseman::vol2sname{$pw_vol}: /etc/passwd file not found for timeline"
+            );
+        }
+
+        # Get the group file meta and copy the file
+        Exec::exec_pipe(*OUT,
+"'$::TSKDIR/ifind' -f $ftype -n 'etc/group' -o $offset -i $imgtype $img"
+        );
+        my $gri = Exec::read_pipe_line(*OUT);
+        close(OUT);
+
+        $gri = "Error getting meta for group"
+          if ((!defined $gri) || ($gri eq ""));
+
+        # Do the Taint Checking
+        if ($gri =~ /^($::REG_META)$/) {
+            $gri = $1;
+
+            $log .= "Group Meta Address ($gri) ";
+
+            # Find a temp name that we can call it
+            my $i;
+            for ($i = 0;; $i++) {
+                unless (-e "$fname.gr-$i") {
+                    $gr_tmp = "$fname.gr-$i";
+                    last;
+                }
+            }
+            Exec::exec_sys(
+"'$::TSKDIR/icat' -f $ftype -o $offset -i $imgtype $img $gri > '$gr_tmp'"
+            );
+            $mac_args .= " -g \'$gr_tmp\' ";
+        }
+        else {
+            print(
+"Error finding /etc/group meta in $Caseman::vol2sname{$pw_vol} ($gri)<br>"
+            );
+            Print::log_host_inv(
+"$Caseman::vol2sname{$pw_vol}: /etc/group file not found for timeline"
+            );
+        }
+    }
+
+    if ($date eq "") {
+        print
+          "Creating Timeline using all dates (Time Zone: $Caseman::tz)<br>\n";
+        Print::log_host_inv(
+"$Caseman::vol2sname{$body}: Creating timeline using all dates (TZ: $Caseman::tz) ${log}to $fname_rel"
+        );
+    }
+    else {
+        print "Creating Timeline for $date (Time Zone: $Caseman::tz)<br>\n";
+        Print::log_host_inv(
+"$Caseman::vol2sname{$body}: Creating timeline for $date (TZ: $Caseman::tz) ${log}to $fname_rel"
+        );
+    }
+
+    my $tz = "";
+    $tz = "-z '$Caseman::tz'" unless ("$Caseman::tz" eq "");
+
+    # mactime needs the path to run the 'date' command
+    $ENV{PATH} = "/bin:/usr/bin";
+    local *OUT;
+    if ($otype == $OTYPE_NORM) {
+        Exec::exec_pipe(*OUT,
+"LANG=C LC_ALL=C '$::TSKDIR/mactime' -b $Caseman::vol2path{$body} $tz -i day '${fname}.sum' $mac_args $date > '$fname'"
+        );
+    }
+    elsif ($otype == $OTYPE_HOURLY) {
+        Exec::exec_pipe(*OUT,
+"LANG=C LC_ALL=C '$::TSKDIR/mactime' -b $Caseman::vol2path{$body} $tz  -d -i hour '${fname}.sum' $mac_args $date > '$fname'"
+        );
+    }
+    elsif ($otype == $OTYPE_DAILY) {
+        Exec::exec_pipe(*OUT,
+"LANG=C LC_ALL=C '$::TSKDIR/mactime' -b $Caseman::vol2path{$body} $tz -d -i day '${fname}.sum' $mac_args $date > '$fname'"
+        );
+    }
+    else {
+        Print::print_err("Unknown output type");
+    }
+
+    print "$_<br>\n" while ($_ = Exec::read_pipe_line(*OUT));
+    close(OUT);
+    $ENV{PATH} = "";
+
+    # Remove the password and group files
+    unlink("$pw_tmp") if ($pw_tmp ne "");
+    unlink("$gr_tmp") if ($gr_tmp ne "");
+
+    print "<br>Timeline saved to <tt>$fname</tt><br><br>\n";
+
+    # append to fsmorgue if a normal timeline
+    if ($otype == $OTYPE_NORM) {
+        my $tl_vol = Caseman::add_vol_host_config("timeline", $fname_rel);
+        print "Entry added to host config file<br><br>\n";
+
+        $Caseman::vol2cat{$tl_vol}   = "timeline";
+        $Caseman::vol2ftype{$tl_vol} = "timeline";
+        $Caseman::vol2itype{$tl_vol} = "raw";
+        $Caseman::vol2path{$tl_vol}  = "$fname";
+        $Caseman::vol2start{$tl_vol} = 0;
+        $Caseman::vol2end{$tl_vol}   = 0;
+        $Caseman::vol2sname{$tl_vol} = $fname_rel;
+
+        # Calculate MD5
+        if ((exists $Args::args{'md5'}) && ($Args::args{'md5'} == 1)) {
+            print "Calculating MD5 Value<br><br>\n";
+            my $m = Hash::int_create_wrap($tl_vol);
+            print "MD5 Value: <tt>$m</tt><br><br>\n";
+        }
+
+        print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_top\">\n"
+          . "<input type=\"hidden\" name=\"tl\" value=\"$tl_vol\">\n"
+          . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+          . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::FRAME\">\n"
+          . "<input type=\"hidden\" name=\"submod\" value=\"$Timeline::VIEW_FR\">\n"
+          . Args::make_hidden()
+          . "<input type=\"image\" src=\"pict/but_ok.jpg\" "
+          . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n"
+          . "(NOTE: It is easier to view the timeline in a text editor than here)";
+    }
+    else {
+        print
+          "Comma delimited files cannot be viewed from within Autopsy.<br>\n"
+          . "Open it in a spreadsheet or other data processing tool.<br>\n";
+    }
+    Print::print_html_footer();
+    return 0;
+}
+
+sub view_menu {
+    Print::print_html_header("View Timeline Menu");
+
+    my @tl;
+
+    # Find the timelines in the images hash
+    foreach my $k (keys %Caseman::vol2cat) {
+        if (   ($Caseman::vol2cat{$k} eq "timeline")
+            && ($Caseman::vol2ftype{$k} eq "timeline"))
+        {
+            push @tl, $k;
+        }
+    }
+
+    if (scalar(@tl) == 0) {
+        print "There are currently no timeline files in the "
+          . "host config file.<br>One must first be created before you "
+          . "can view it<br>\n";
+
+        print "<p><a target=\"_top\"  "
+          . "href=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_TL&view=$Timeline::FRAME&"
+          . "submod=$Timeline::TL_ENTER\">"
+          . "<img src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+          . "width=\"43\" height=20 border=\"0\">"
+          . "</a>\n";
+
+        return 1;
+    }
+
+    print "<form action=\"$::PROGNAME\" method=\"get\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::VIEW_FR\">\n"
+      . Args::make_hidden()
+      . "1.  Select the timeline file:\n"
+      . "<table cellspacing=\"0\" cellpadding=\"2\">\n";
+
+    my @tl_sort = sort { lc($a) cmp lc($b) } @tl;
+    for (my $i = 0; $i <= $#tl_sort; $i++) {
+        print "<tr><td><input type=\"radio\" name=\"tl\" "
+          . "value=\"$tl_sort[$i]\"></td><td>$Caseman::vol2sname{$tl_sort[$i]}</td>\n";
+    }
+
+    print "</table>\n"
+      . "<input type=\"image\" src=\"pict/but_ok.jpg\" "
+      . "width=43 height=20 alt=\"Ok\" border=\"0\">\n</form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub view_fr {
+    Args::check_tl();
+
+    Print::print_html_header_frameset("");
+    my $tl_vol = Args::get_tl();
+    my $tl     = $Caseman::vol2path{$tl_vol};
+    my $url    = "";
+
+    unless (exists $Args::args{'st_mon'}) {
+
+        unless (open(TL, $tl)) {
+            print("Error opening $tl");
+            return (1);
+        }
+
+        my $beg_mon;
+        my $beg_year;
+        my $cnt = 0;
+        while (<TL>) {
+            $cnt++;
+            if (/^(?:\w\w\w )?(\w\w\w)\s+\d\d\s+(\d\d\d\d)\s+\d\d:\d\d:\d\d/) {
+                $url = "tl=$tl_vol&st_mon=$::m2d{$1}&st_year=$2";
+
+            }
+            last;
+        }
+        close(TL);
+
+        if ($cnt == 0) {
+            print "Empty timeline<br>\n";
+            return 1;
+        }
+        if ($url eq "") {
+            print "Invalid Timeline<br>\n";
+            return 1;
+        }
+    }
+    else {
+        $url =
+            "tl=$tl_vol&st_mon=$Args::enc_args{'st_mon'}&"
+          . "st_year=$Args::enc_args{'st_year'}";
+    }
+
+    print "<frameset rows=\"65,*\">\n"
+      . "<frame src=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_TL&"
+      . "view=$Timeline::VIEW_IDX&$url\">\n"
+      . "<frame src=\"$::PROGNAME?$Args::baseargs&mod=$::MOD_TL&"
+      . "view=$Timeline::VIEW&$url\">\n</frameset>";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+sub view_idx {
+    Args::check_st_mon();
+    Args::check_st_year();
+    Args::check_tl();
+
+    Print::print_html_header("View Timeline Index");
+
+    my $mon    = Args::get_st_mon();
+    my $year   = Args::get_st_year();
+    my $tl_vol = Args::get_tl();
+    my $tl     = $Caseman::vol2path{$tl_vol};
+
+    print "<center>";
+    my $url =
+        "$::PROGNAME?$Args::baseargs&mod=$::MOD_TL&view=$Timeline::VIEW_FR&"
+      . "tl=$tl_vol";
+
+    # Next and Previous pointers
+    my $pyear = $year;
+    my $pmon  = $mon - 1;
+    if ($pmon == 0) {
+        $pmon = 12;
+        $pyear--;
+    }
+    print "<table cellspacing=\"0\" cellpadding=\"2\">\n"
+      . "<tr><td align=\"center\">"
+      . "<a href=\"$url&st_mon=$pmon&st_year=$pyear\" target=\"_parent\">"
+      . "&lt;- $::d2m[$pmon] $pyear</a></td>\n"
+      . "<td>&nbsp;</td>\n";
+
+    if (-e "${tl}.sum") {
+        print "<td><a href=\"$::PROGNAME?$Args::baseargs&"
+          . "mod=$::MOD_TL&view=$Timeline::VIEW_SUM&"
+          . "tl=$tl_vol\" target=\"_parent\">"
+          . "Summary</td>\n"
+          . "<td>&nbsp;</td>\n";
+    }
+
+    my $nyear = $year;
+    my $nmon  = $mon + 1;
+    if ($nmon == 13) {
+        $nmon = 1;
+        $nyear++;
+    }
+
+    print "<td align=\"center\">"
+      . "<a href=\"$url&st_mon=$nmon&st_year=$nyear\" target=\"_parent\">"
+      . "$::d2m[$nmon] $nyear -&gt</a></td></tr></table>\n";
+
+    # Make a form to enter the next month and year to show.
+    # it defaults to the current location
+    print "<form action=\"$::PROGNAME\" method=\"get\" target=\"_parent\">\n"
+      . "<input type=\"hidden\" name=\"mod\" value=\"$::MOD_TL\">\n"
+      . "<input type=\"hidden\" name=\"view\" value=\"$Timeline::VIEW_FR\">\n"
+      . "<input type=\"hidden\" name=\"tl\" value=\"$tl_vol\">\n"
+      . Args::make_hidden()
+      .
+
+      "<table cellspacing=\"0\" cellpadding=\"2\">\n"
+      . "<tr><td align=\"center\"><select name=\"st_mon\" size=\"1\">\n";
+
+    for my $i (1 .. 12) {
+        if ($i == $mon) {
+            print "<option selected value=\"$i\">$::d2m[$i]</option>\n";
+        }
+        else {
+            print "<option value=\"$i\">$::d2m[$i]</option>\n";
+        }
+    }
+
+    print "</select></td>"
+      . "<td align=\"center\">"
+      . "<input type=\"text\" name=\"st_year\" size=\"6\" value=\"$year\">"
+      . "</td>"
+      . "<td align=\"center\">"
+      . "<input type=\"image\" src=\"pict/but_ok.jpg\" alt=\"Ok\" "
+      . "width=43 height=20 border=\"0\"></td>\n"
+      . "</tr></table></form>\n";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Display the contents of the summary file (hits per day) and show
+# it as hits per month
+sub view_sum {
+    Args::check_tl();
+
+    Print::print_html_header("View Timeline Summary");
+
+    my $tl_vol = Args::get_tl();
+    my $tl     = $Caseman::vol2path{$tl_vol};
+
+    $tl .= ".sum";
+
+    open(TL, "<$tl") or die "Can not open $tl";
+    my $url =
+        "$::PROGNAME?$Args::baseargs&mod=$::MOD_TL&"
+      . "view=$Timeline::VIEW_FR&tl=$tl_vol";
+
+    print "<p>This page provides a monthly summary of activity.<br>"
+      . "Each day that has activity is noted with the number of events<br>\n";
+
+    my $p_year = "";
+    my $p_mon  = "";
+
+    print "<p><table cellspacing=2 border=0>\n";
+
+    while (<TL>) {
+        my @a = split(/ /, $_);
+        next unless (scalar(@a) == 5);
+        my $mon  = $::m2d{$a[1]};
+        my $year = $a[3];
+        $year = $1 if ($year =~ /^(\d{4,4}):$/);
+
+        if (($p_year ne $year) || ($p_mon ne $mon)) {
+            print "<tr><td colspan=6 align=left>"
+              . "<a href=\"$url&st_mon=$mon&st_year=$year\">"
+              . "$a[1] $year</a></td></tr>\n";
+
+            $p_year = $year;
+            $p_mon  = $mon;
+        }
+        print "<tr><td>&nbsp;&nbsp;</td><td>$a[0]</td>"
+          . "<td>$a[1]</td><td>$a[2]</td><td>$year</td><td>($a[4])</td></tr>\n";
+    }
+    print "</table>\n";
+
+    close(TL);
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# display a given month of the timeline
+sub view {
+    Args::check_tl();
+    Args::check_st_mon();
+    Args::check_st_year();
+
+    my $tl_vol  = Args::get_tl();
+    my $tl      = $Caseman::vol2path{$tl_vol};
+    my $st_mon  = Args::get_st_mon();
+    my $st_year = Args::get_st_year();
+
+    Print::print_html_header("View $st_mon, $st_year of Timeline");
+
+    unless (open(TL, "$tl")) {
+        print("Error opening $tl");
+        return (1);
+    }
+
+    Print::log_host_inv(
+        "$Args::args{'tl'}: Viewing timeline for $::d2m[$st_mon] $st_year");
+
+    print "<table cellspacing=\"5\" cellpadding=\"2\" width=100%>\n";
+
+    # zone identifies if we should be printing or not
+    my $zone = 0;
+    my $row  = 0;
+    while (<TL>) {
+        if (
+/^(?:(\w\w\w\s+)?(\w\w\w\s+\d\d\s+\d\d\d\d)\s+(\d\d:\d\d:\d\d))?\s+(\d+)\s+([macb\.]+)\s+([-\/\?\w]+)\s+([\d\w\/]+)\s+([\d\w\/]+)\s+($::REG_META)\s+(.*)$/o
+          )
+        {
+
+            my $day = "";
+            $day = $1 if (defined $1);
+            my $date = "";
+            $date = $2 if (defined $2);
+            my $time = "";
+            $time = $3 if (defined $3);
+            my $sz  = $4;
+            my $mac = $5;
+            my $p   = $6;
+            my $u   = $7;
+            my $g   = $8;
+            my $i   = $9;
+            my $f   = $10;
+
+            # we must break this down to see if we can skip it or not
+            if ($date ne "") {
+                if ($date =~ /^(\w\w\w)\s+\d\d\s+(\d\d\d\d)$/) {
+                    if ($2 < $st_year) {
+                        next;
+                    }
+                    elsif (($2 == $st_year) && ($::m2d{$1} < $st_mon)) {
+                        next;
+                    }
+                    elsif ($2 > $st_year) {
+                        last;
+                    }
+                    elsif (($2 == $st_year) && ($::m2d{$1} > $st_mon)) {
+                        last;
+                    }
+                    else {
+                        $zone = 1;
+                    }
+                }
+            }
+
+            # we need to print this entry
+            if ($zone) {
+
+                # the deleted meta <blah-dead-2> entries screw up in HTML
+                $f = "&lt;$1 &gt" if ($f =~ /^<(.*?)>$/);
+
+                if (($row % 2) == 0) {
+                    print "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR\">\n";
+                }
+                else {
+                    print
+                      "<tr valign=\"TOP\" bgcolor=\"$::BACK_COLOR_TABLE\">\n";
+                }
+
+                print "<td>$day&nbsp;$date&nbsp;$time</td>"
+                  . "<td>$sz</td><td>$mac</td><td>$p</td>"
+                  . "<td>$u</td><td>$g</td><td>$i</td><td>"
+                  . Print::html_encode($f)
+                  . "</td></tr>\n";
+
+                $row++;
+            }
+        }
+        else {
+            print "Error parsing timeline: "
+              . Print::html_encode($_)
+              . "<br>\n";
+        }
+    }
+    close(TL);
+    print "</table>";
+
+    Print::print_html_footer();
+    return 0;
+}
+
+# Blank Page
+sub blank {
+    Print::print_html_header("");
+    print "<center><h3>File Activity Timelines</h3>\n"
+      . "Here you can create a timeline of file activity.<br>\n"
+      . "This process requires two steps:<p>\n"
+      . "1.  <b>Create Data File</b> from file system data&nbsp;&nbsp;->"
+      . "&nbsp;&nbsp;2.  <b>Create Timeline</b> from the data file\n"
+      . "<p>Use the tabs above to start.\n";
+    Print::print_html_footer();
+    return 0;
+}
diff --git a/lib/Vs.pm b/lib/Vs.pm
new file mode 100644
index 0000000000..2ce43f3fb0
--- /dev/null
+++ b/lib/Vs.pm
@@ -0,0 +1,8 @@
+package Vs;
+
+# These need to be updated as The Sleuth Kit supports more volume systems
+$Vs::type{'dos'} = 1;
+$Vs::type{'bsd'} = 1;
+$Vs::type{'gpt'} = 1;
+$Vs::type{'mac'} = 1;
+$Vs::type{'sun'} = 1;
diff --git a/lib/define.pl b/lib/define.pl
new file mode 100644
index 0000000000..9bce1fa805
--- /dev/null
+++ b/lib/define.pl
@@ -0,0 +1,39 @@
+#
+$VER = '2.24';
+
+$HTTP_NL    = "\x0a";
+$notes_file = "";
+
+$PICTDIR       = "$INSTALLDIR/pict/";
+$SANITIZE_TAG  = 'AutopsySanitized';
+$SANITIZE_PICT = 'sanitized.jpg';
+
+$PROGNAME = 'autopsy';
+
+# Default directory names
+$MKDIR_MASK = 0775;
+$IMGDIR     = 'images';
+$DATADIR    = 'output';
+$LOGDIR     = 'logs';
+$REPDIR     = 'reports';
+
+# Colors
+$BACK_COLOR       = "#CCCC99";
+$BACK_COLOR_TABLE = "#CCCCCC";
+$DEL_COLOR[0]     = "red";
+$DEL_COLOR[1] = "#800000";  # used when meta data structure has been reallocated
+$NORM_COLOR   = "";
+$LINK_COLOR   = "blue";
+
+$YEL_PIX = "pict/back_pix.jpg";
+
+%m2d = (
+    "Jan", 1, "Feb", 2, "Mar", 3, "Apr", 4,  "May", 5,  "Jun", 6,
+    "Jul", 7, "Aug", 8, "Sep", 9, "Oct", 10, "Nov", 11, "Dec", 12
+);
+@d2m = (
+    "",    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+    "Aug", "Sep", "Oct", "Nov", "Dec"
+);
+
+1;
diff --git a/lib/search.pl b/lib/search.pl
new file mode 100644
index 0000000000..4ea1b363d1
--- /dev/null
+++ b/lib/search.pl
@@ -0,0 +1,51 @@
+#
+# This file contains pre-defined search strings.  A button for each will
+# be displayed in the Search Mode.
+#
+# The $auto_srch{} hash is filled in with the search string
+# The index into the hash is the name of the search.
+#
+# For example, $auto_srch{'foo'} = "bar"; would search for the string
+# bar
+#
+# If the search is case sensitive, then set $auto_srch_csense to 1 (this
+# is the default value if not specified.  Set to 0 for insensitive
+#
+# If the search is a regular expression, set $auto_srch_reg to 1, else
+# 0 (the default)
+#
+#
+# If you develop patterns that you think will be useful to others, email
+# them to me and I will include them in the next version (carrier@sleuthkit.org)
+#
+
+# Date / syslog search of month and date
+$auto_srch{'Date'} =
+"((jan)|(feb)|(mar)|(apr)|(may)|(june?)|(july?)|(aug)|(sept?)|(oct)|(nov)|(dec))([[:space:]]+[[:digit:]])?";
+$auto_srch_reg{'Date'}    = 1;
+$auto_srch_csense{'Date'} = 0;
+
+# IP Address
+$auto_srch{'IP'} =
+'[0-2]?[[:digit:]]{1,2}\.[0-2]?[[:digit:]]{1,2}\.[0-2]?[[:digit:]]{1,2}\.[0-2]?[[:digit:]]{1,2}';
+$auto_srch_reg{'IP'}    = 1;
+$auto_srch_csense{'IP'} = 0;
+
+# SSN in the pattern of 123-12-1234 - from Jerry Shenk
+$auto_srch{'SSN1'}        = '[0-9][0-9][0-9]\-[0-9]]0-9]\-[0-9][0-9][0-9][0-9]';
+$auto_srch_reg{'SSN1'}    = 1;
+$auto_srch_csense{'SSN1'} = 0;
+
+# SSN in the pattern of 123121234 - from Jerry Shenk
+$auto_srch{'SSN2'}        = '[0-9][0-9][0-9][0-9]]0-9][0-9][0-9][0-9][0-9]';
+$auto_srch_reg{'SSN2'}    = 1;
+$auto_srch_csense{'SSN2'} = 0;
+
+# CC # - from Jerry Shenk
+$auto_srch{'CC'} =
+  '[0-9][0-9][0-9][0-9]]0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]]0-9]';
+$auto_srch_reg{'CC'}    = 1;
+$auto_srch_csense{'CC'} = 0;
+
+# This must be the last value
+1;
diff --git a/man/man1/autopsy.1 b/man/man1/autopsy.1
new file mode 100755
index 0000000000..39f983d6a7
--- /dev/null
+++ b/man/man1/autopsy.1
@@ -0,0 +1,163 @@
+.TH AUTOPSY 1 "MAR 2005" "User Manuals"
+.SH NAME
+autopsy \- Autopsy Forensic Browser
+.SH SYNOPSIS
+.B autopsy [-c] [-C] [-d
+.I evid_locker
+.B ] [-i 
+device filesystem mnt
+.B ] [-p
+.I port
+.B ]
+.I [addr]
+.SH DESCRIPTION
+By default, 
+.B autopsy
+starts the Autopsy Forensic Browser server on port 9999 and and accepts 
+connections from the localhost.  If 
+.I -p port
+is given, then the server opens on that port and if 
+.I addr
+is given, then connections are only accepted from that host.
+When the 
+.I -i
+argument is given, then autopsy goes into live analysis mode.
+
+The arguments are as follows:
+.IP "-c"
+Force the program to use cookies even for localhost.
+.IP "-C"
+Force the program to not use cookies even for remote hosts.
+.IP "-d evid_locker"
+Directory where cases and hosts are stored.
+This overrides the 
+.B LOCKDIR 
+value in 
+.I conf.pl.
+The path must be a full path (i.e. start with /).
+.IP "-i device filesystem mnt"
+Specify the information for the live analysis mode.  This can be specified
+as many times as needed.  The 
+.I device
+field is for the raw file system device, the 
+.I filesystem
+field is for the file system type, and the
+.I mnt
+field is for the mounting point of the file system.  
+.IP "-p port"
+TCP port for server to listen on.
+.IP addr
+IP address or host name of where investigator is located.  
+If localhost is used, then 'localhost' must be used in the URL.
+If you use the actual hostname or IP, it will be rejected.
+.PP
+When started, the program will display a URL to paste into an
+HTML browser.  The browser must support frames and forms.   The
+Autopsy Forensic Browser will allow an investigator to analyze
+images generated by
+.BR dd(1)
+for evidence.  The program allows the images to be analyzed by
+browsing files, blocks, inodes, or by searching the blocks.
+The program also generates Autopsy reports that include collection
+time, investigators name, and MD5 hash values.
+.SH VARIABLES
+The following variables can be set in 
+.I conf.pl. 
+
+.I USE_STIMEOUT
+.RS 
+When set to 1 (default is 0), the server will exit after 
+.B STIMEOUT
+seconds of inactivity (default is 3600).  This setting is recommended if 
+cookies are not used.
+.RE
+.I BASEDIR
+.RS 
+Directory where cases and forensic images are located.  
+The images must have simple
+names with only letters, numbers, '_', '-', and '.'.  (See FILES).
+.RE
+.I TSKDIR
+.RS
+Directory where The Sleuth Kit binaries are located.
+.RE
+.I NSRLDB
+.RS
+Location of the NIST National Software Reference Library (NSRL).
+.RE
+.I INSTALLDIR
+.RS 
+Directory where Autopsy was installed.
+.RE
+.I GREP_EXE
+.RS
+Location of 
+.BR grep(1)
+binary.
+.RE
+.I STRINGS_EXE
+.RS
+Location of 
+.BR strings(1)
+binary.
+.RE
+.SH FILES
+.I Evidence Locker
+.RS
+The Evidence Locker is where all cases and hosts will be saved to.  It
+is a directory that will have a directory for each case.  Each case
+directory will have a directory for each host.  
+
+.RE
+.I <CASE_DIR>/case.aut
+.RS
+This file is the case configuration file for the case.  It contains the
+description of the case and default subdirectories for the hosts.  
+
+.RE
+.I <CASE_DIR>/investigators.txt
+.RS
+This file contains the list of investigators that will use this case.  These
+are used for logging only, not authentication.  
+
+.RE
+.I <HOST_DIR>/host.aut
+.RS
+This file is where the host configuration details are saved.  It
+is similar to the 'fsmorgue' file from previous versions of Autopsy.
+It has an entry for each file in the host and contains the host
+description.
+
+
+.RE
+.I md5.txt
+.RS
+Some directories will have this file in it.  It contains MD5 values for 
+important files in the directory.  This makes it easy to validate the
+integrity of images.  
+
+.SH EXAMPLE
+# ./autopsy -p 8888 10.1.34.19
+.SH "SEE ALSO"
+.BR dd (1),
+.BR fls (1),
+.BR ffind (1),
+.BR ifind (1),
+.BR grep (1),
+.BR icat (1)
+.BR md5 (1),
+.BR strings (1),
+.SH REQUIREMENTS
+The Autopsy Forensic Browser requires
+.B The Sleuth Kit 
+<www.sleuthkit.org/sleuthkit>
+
+.SH HISTORY
+.BR "autopsy" " first appeared in " "Autopsy" " v1.0."
+.SH LICENSE
+This software is distributed under the GNU Public License.
+
+.SH AUTHOR
+Brian Carrier <carrier at sleuthkit dot org>
+
+Send documentation updates to <doc-updates at sleuthkit dot org>
diff --git a/pict/back_pix.jpg b/pict/back_pix.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1a5da64c9bda1ad2cec4418a7c7b055b97e2f7da
GIT binary patch
literal 305
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHt42;Z-f(%T8jLd?J
x|Bo<uGcYos0(M45G$B?t0W=W?20;vw|F;-;m>C(E1epaH>>2W$rR)FS1OS=SCC~r>

literal 0
HcmV?d00001

diff --git a/pict/but_addnote.jpg b/pict/but_addnote.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0946f296f4a91ab4ea595689ccd02031f38c1b15
GIT binary patch
literal 1332
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHD43W%?f(%T8jLd?J
z|Bo=VGB7YRFf%eB0Txy!Hg;x41}0Qt1{Nk}Rz?8^MrI~vHda=c7A8h!76w*9AvQ(B
zg_A`>94{&f2L~oLDzg^~GB7eTvazzjjR6@csA#xQNLVB=Xi+eWV`8CF<3%T<|F;-;
zK=uhT3o_U<yeoL%Eb-#Y{79)J#jZt4dT*~byp+0_l{+!CO5?Vj$YbyMx~tyqa=KrA
zX}V-_l4I#iq1<D=ewmv>)nZ}_gn#KT&B~vx!P3opx=A6=|LL|G&Ew}*-`!fC*R$<>
ztHsZYyR*z*)pWm`++W_CR{Jb^mp4<9j*+Un4C8S_u8N0Kvksa@#jsz|n9-W~YIA@2
zWud&Fw>{E%{!I<R%1Z0XCSEzZ)#Ssu&W^ts#upbJi3oR5n5A9>a@O<Ecei$LcZ*Ix
zG^ggp-L29ksoQEakM-UT-0pE+B0<A<ng2Fxi!0^H=9~C?15;mGm8z`NX$W&DRy*Q5
zzw6}OuPVA8vlD_$ZEuCH_dh?EO?&ckqmw!wJxsguY*scWPbqsiGuY^ds+$<Q4O525
zJP%Rs$uD^|*M9L^vE^>c@w}4g6H|O$p77T`@4W8wgyp1?!we0JM@_5pWT&pS`RH@#
zLPm7PTK26>p%eGE$eFL)W@~Mt8}>|h8}|~~EODcf^?uA7AG74`xD#4%W&($p(vy?Z
z^ImO>Y)gvyHsfXKv-h{UBQiAj@-&*4r>U^dY+n9u;@63BGF80Kl{Y@#Dx0>l)8e5-
z)Aq}cx+KG8Zv?z-&5FA$7wy_|_je4B$p)FLdvoJ2lo-!i{ws9#9Z$nW8?)+{?>Xk=
zH!Wjd+d<{dmuF^%Us}D@{>oCDcolcf9doW1a=lE_tN0OhD02T|`+}=^_jTV}J>Hbl
zSQuTGcI+vWkd087VU?|$8jJ5jrT6|@jZ|9LQk9+u?LTR<G_+Da*PZ{=YH{~l@ABfk
zZYE66yR`Q9-V<dveQibk-rTZi`ckoE#e)YopT>5y?Bm|I+RigCYKQo<J;8rIsFr(e
zU0||IEB3dOOs()DH`Zkie)frXof<`d_9-`Wx*n};DO?nPCwg<=-F>1dcA+V?F`9pF
zv9A{uKl(M7{nX3<3}=%MbS}GOlc9e=p=6TB$-XD1rFR-<UPwJ$(ZXrq@>TCj)Y;E5
z-mg6D*;dYocDu7G?kSUknQG^%2OU%9uPRcz;gz&~8dFelQbpaRjD0J#JP&RDGwoPx
z=EA5t<tMxwch3IoGT$fm;is-?m;2{4&AC>eze0JL-iM#AZgXmWh-BMuzan^9yrO2&
zVn4eYF4Ot9Uva$b-eVUSxLn?jRqFiPuPh};@5yVd0BP<`|MsiND(OA{l#tBh=NsKN
z|E_hEH7svGrDgK?`GLiefA=luo3Z=wQ&FkH&kq9E{JS6E4z{`1;^zkqki|;M0ZbmN
p`&X}j{K82{<oM_C11Fl>Z!Haca?&vI*VFv93s!wyvhn)=n*djd6jJ~I

literal 0
HcmV?d00001

diff --git a/pict/but_alloc_list.jpg b/pict/but_alloc_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..525fd081f3ff28dd75136354110695c71f43986d
GIT binary patch
literal 1852
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
T-uTS>`Z`JXt?Lrz|Gx<U#o{=6

literal 0
HcmV?d00001

diff --git a/pict/but_export.jpg b/pict/but_export.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4cbc75a024be2c929a5f8acdad048169b7d2573c
GIT binary patch
literal 2056
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
ScbdgNymp?qD*IUc|C<1^$a!V}

literal 0
HcmV?d00001

diff --git a/pict/but_force.jpg b/pict/but_force.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2a92475c71feecd87e414c36c993dba5eaea0966
GIT binary patch
literal 1079
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY45rMCf(%T8jLd?J
z|Bo<CU|?WmWn@4Gj4Z5d>`aUdOw5cZ5-f~N%&cqz42;aoOiUcCFkQ@yOe}&ztPE_5
z!iI@Ti$qdX*&PcTRYVtVG;(Sd6J%gyW(4`29cl$5gCG;LqT|9OWfsFiA>qWvgGwI)
zH;PRBSk!b#h4ud}1|DWc1|~sfK?Zw<JId2!WD?Wn)SQ<3WZh&LxW+X~N&j?QU8uvR
zFHf!VWJ3$<-oNcx@pvAawob*Ssg^=FyQVD&DZ2EoT<>)7qgNMAjfFaslKwNS(C(Xj
zK>lEa(tFvJdWj2;o^YIKW~6nZOPTell=;%QV>@GRl`flZx{P_ov?uE{kK7Y-zE|y5
z(srzMVxyM#>jbBQiLYH&U0hqV>Q!o3AzzZilSYntEJ}KxZy7zC#uC%RDco2zPoqzK
z>a_n1+BdFi&-U*Pc3f>Bb7Z>;hs!;2hI`d+g|o%PyjW(ctk+?*@Nkdndb)LO(W;9p
zR<F9UGQjnW$ERQkmuUsFe{77ewKl(<|9Z{82jAv>PqojoUR!KcXfyr66UMoV_OK*N
zhIs8f8{)ERmAc$s*T}}8`!if6CUc9GZrHn9Pdmk}Q(xIiE&sqg?Z>++dj(Xq<Bn7_
zv=jtQSDtj`;aYR+8>dz`@WjMs&8n{Cxc9P6IX7MWU%1@cz0!QUQy$r@xzI2BPj#X6
zjBkvKL-g;gy87pK-L6a39o6UK!y_IXJAe9Mm`QrV%e2rp?pvj|nc3&LPAjQN=-8*j
z=)q*8*_(Y+=A>#*W}nKwr|D+z=jvV-`p@7r`9%MdBk`%nPX^>JJ9K{0?wl1fWol~l
z^zzPjO8#iP;d98N<J;;Rs!7v~%pR{kwb$lIy1(e9>aK~?14a3FJ+t@}9lTuO!11Pr
zZ@Y8SzioKPt=X=8!eE8B!KA|TBBfDRA7-@OlnLH^t9pmtw)=URS6G)nxwQRac)nAi
z;^Qw-{MK)N?!SH{Y;V}5UC*}lzx(2Ewmapk-=~<_(r2F4Pu2dqZr0th`*+?ym~`X2
z#Fxz#EAIP$j=ih7csA>W>nFQx?a!8%WIQ`4_0!OO`OkIldSz}X$E#_4`Ojc__u}H&
zEZI+vD({!}yWY7xc9%(U!t&pehC%a_f4tYuzrOtYx?NJWYgSKQeee9orvEnqg+H6_

literal 0
HcmV?d00001

diff --git a/pict/but_indexdb.jpg b/pict/but_indexdb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5e51b780546e75ec6d474bdeec4f29dd7e5b6b47
GIT binary patch
literal 1568
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?<Brf(%T8jLd?J
z|Bo<CU|?WmWn^SP0*uTotZeK|jEoG-j3_cp%q)zoYyu37%uLK|%<Rmp5KT;s%q$G7
zf<kPHi-bi|R1+r#8#)F$O%i2aXrx?tP^qX{kb#kzk&Tswi5Y4SBZD9lv*JRbBxM#u
zM<rpAz{EzUi4Q*<Gz$8Ei-Cukk%38&S&+e=;oXKu&S@5Vek|^jN^062C|INY{CSk2
z*xD&Cb`_?&eK*pW|7z-#_hOBXGI#1->ZYu#?7SJEziZOvlr7%7&*$rC_^!Uh!EC9(
zzcnB@>tXQH9mW$n9)+uVFg#V^4PE}6<I}qh>sB*rJYH$mZ+3Z6o66&gXCkLO->y5i
zW$}^X)Pp`Ehi5%^-J&~rdvpQ!;kk=6d6XoQ7SAZuT{$Dv&}+iVfWN6fG@I-eTIxq;
zYNXsav*SRIUz62^J)d<~n#FH9Zm6cT@98?XHRm}de`phwITUzJDqzBtJb_TgbqQDH
zQVUWG{<+@XVD|5Qs`cjo43mHO2!7>~TXg+b-eESLm$`E~zN;TH5p6kjN<Fs3<F<fU
zK*#0|JqcB>sh&O)bd<Yq?9||B4}JWz*!9zP_W7Iw_qJ|4d!|`W`r?wFnu15&{tSZs
z9go9I?ijGXDTvYd@=wU&&(0;OXPQMG`891f7F+w?Z~Muf)90kp7;>*m3xulNnq79u
zDM2{#@X-zjrMlW_`)BvR=)W{|@|m!2foG3@aewJm*?H5~=7~FFVMg##LBX0!JIXz8
za4qgQF3xlR;cR}X`BN|a`JqwKE?tx!%=O@y1Cx%Zpm6?|HB+Bnag5S9_=v;vtlL-i
zb1O^pg!;0~SJ;)5911J{q@w=bO6q&o_SCA98-0edTMb!)O%56=g}AJh_L|rlapD7O
zc-WjC55~mg3|)umFSox~_jlVzvAfw>=hZuIZh1U$hT(KE=cMfJJfViiAAL^jHhVYi
z(>y`p9G@ls8PpDmGUuDuu{Jd?`!a9ICe@B-nalJ&xsHFkDL7}MAd5<I+Bc1Lf{T{9
z`mUJwYty=Cb3QWK=&L`dm2@*nlV1Af-_`2+Uegfuw<&>K-a3w@o0C{(DDX&sj-6!K
znzrp-+AVg0LP6PmM-Q#}yiy=HyRtdA=bOfl%e?8T)oZ`3{m&3=n?IfFsML+HjuSDn
z`?oB#7Qbz}-C~UehfXT1Y0%BtX%fkOwfmmUHD{~XC||AfpCRmXSjb|_+Q|JqTk0n$
z#pO+VtE+Z3&s{ZY-Nn43+*iMOSC}2v>ojXyI$7qNl3Gl**|jCgnw?&Uh2-vKo!aum
zA@RVPYnv}i?T<Jyzqsz!)isZAE{)E;P`NCw%K6htLuJELH_VvkeL606)w$5CLs00*
zr=o}(r*=(Aw~kyBn7d2r{dZlxC)Lu^wyzad-f#8L>`m}3wJ28c)*Z(lKT>;sVo~Sx
z$3gSn@!IW)XiRKfAJfZe@iOgu?DAQ?ulVOyoZFVD@oaHb^K*9}RYSd}g3CNZkAxmh
zQZ1OO5v;OG&U(*w<Ecf3`+W?KpIdXN+W*~}!n=phbImV!@=0A@=Dwa!aozlT+uv2!
z=b5iJPrv)C;QNDBzw1MHN0b!D?6s|#zIglB=q(q|7G*!#E4zQy-DQ2*ljBuiy!{*Y
z)}%OQ)=z!+{8!sE7teZf{bZGOedumqnd@r%yf5DVwf0uVvz?}&;`;7i&AaSwdUE}w
zFJ=E$m(8+V=S$eoxLLp51uf>}|4M9ocWaI{fA*h$Q?x2|)8zYa?fl2be)_=ahtqYd
RYAuS^i?0{A319#JCICL)j0gY#

literal 0
HcmV?d00001

diff --git a/pict/but_lookup.jpg b/pict/but_lookup.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b6bd6daf9fb7701f56d040a09e485e7246a13deb
GIT binary patch
literal 1458
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?<Brf(%T8jLd?J
z|Bo<CU|?WoU}j`M0?e$8EbL5-j10_-jK~s<Ow25-Yyu37%uLK|EX?ez5IrDa23A2K
zHp4~2A}OkhjuV3ul_muiE;MoyWj|P?+-xGqz{mvhJQK_wMg}Iqg+k1VhDpkfO2RB6
zfr*Vyg%2klG!p%Pi-Ct3B+V?yV9)Sw!z1T3tGHUl<6?%Kb_&cN*3Ykfwk2t|?#-^m
zsnRE>H2z(*)4yUDYfEwA-zk5U7N7C!vfT0SRNX{>Lo2OdsYA!UEt$Mr;O5_RIwjtf
zs(S<v6-EX*eUtIC6J5E-nfZq>YhX?&pXT-0&}C~GH<!-jyC-KE`D||Hoab-+1(wV1
z3k{1e-hbNjkEYozW5uM$t4)q>oEE>+x0SO~{_}3tYqOkZJp3uLX~NpYsowdPH`pfg
zr?TC4OHt=_Ox8C#P-R%>U6b*ab^FX?8;*ChJnov@KI6lRPqG{b9xPuXq?mPA-}1l}
z%?nGdmP}pBv+H!1rsqK~MwL12Ggp>A-)=VX!-D9{6D`Y2kM(A5n_KoWFL(RFVC|4L
zrZ6EdPfx9n2c7x3CKf&Xwfl#c^ea(~?-oK4&L0o^8$393d+pOG5&l^rhAd&}yA%$z
zCZ>p-%d_7!e@RGX=S6pO`J4WiG@q%vYCc!8Xzuou7htekwBWnv1ul2NK0V2OJ~wKz
z{)MYlJX!fj>fs^5=&l`x6FGu5C@?<$9<KVmSRmYWn(KnrzAW<{^P`SwM|oMUxc8_w
zQ)J2FS-tPnuTAvwdR{#9%D4MZUiU5D9(nW<%kG>C56!8vO=6e33f<X7`{d1}wJ#*U
zwK|YI*OSdsXy@7O?UPsvqAo3b#klgxtH`Lt)rayXM0e=+d3D7!Eem@PRBYqymE{l-
z)Mcp5+qO<GdVzu6EWZMa{|prxX7?p7ORTi2cg^B8_`54*wok3!#Ox4OC+{~)4n-}s
z_~+KMrX$#upY5c)`N<7km)@7>J#i?Nx!Au>;K7R9{5b}zS(nUzRO_wSt-`K8J6XqJ
zr;_)DyH2zFR&HW`bNHZ(#kK&p(5G_NhKJVwXK=cqXZgr3@u+*(ANHp)P3P8cy|-5U
z*_PcdN4A{Ud~&P9RKY2VSrab5sGX;DsZZ!f{ggQe{_d;T`)$spTc1k<6@EE!J-U66
zZJt1I?tg}3vs#a4s;Sy_aBjQ(Y`dMeXS<Hsmz9iPOb<_K58A`t7!<fYajpFQ=;z83
z6M2p~$%wk={1Fehv@JSp)&|#2hbJsgK6=i1y~xy+emj<j`2|er3ESMjz_@A8>F>SA
zr^{(Co!0HbwDzpqcj4EOu5ptfapkJ1DfBK-D%E8N=ivifO`$V$CN21Q_vy|#%hjbn
z9OkLb_VV|#d+pJ;)+RIhJD<P8<HxhVJUMRu@Nf41oiG1xp7pufZvAEbnkoD4U(LJD
zcW$M=f4$4a+rQS{%6T;@|HUlp`q16JbAx>U3cKgO+Mc<2mFNCN8E^lFy)`TKH2>l&
zyMNW)W#?9^{p(!3{cH4=n^#rtUo<KEx4LY$)sor2)cWpU&AXf)GMS)}*_Y$D6tWBV
x{ySrE_v7l#3uTf&{|edp<S<vAeb)IO7V^s*r$3yoTUE2=Wt_fkOxCRbHvwm8QZWDk

literal 0
HcmV?d00001

diff --git a/pict/but_new_name.jpg b/pict/but_new_name.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5a24bb42ea857421da071bb977e95469751b65a2
GIT binary patch
literal 1435
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4F1fFf(%T8jLd?J
z|Bo=VGcYhSFf%eB0Txy!W_C741}0Qt1|~*k7FGcUMrI~fMs^lvs1A^*5G#YAqA;7G
zlF=fO6jgS|L}Ss$h01~qj7-cNObo27P^F9vOoEEchJg!(l7y9691{y4epGUrxbdKo
z$p2dmJj@_zW<dsfhBuejP0O=BzBE3sX{nrc*5@b9I~Lve8X~`L*5f8w;VDsJ+cpJi
zCH`4>cyizEpTg;Tvv=;flCjR@mSo<(Ee!(87H!Sg`6X`0I(>bemP6Zk8?>5=>tr@f
zQi^%|TGKyM!u`gbaM8>~U7J^}H9A^7RZ(VL`$03edtwis)}$OVY`Kvl>>J(Y^xCUm
zVy%j<mVR!)mJk`Y&(FWjj8@6r_F?+&;y%OdP3QOQd+m2{n^w=`zNU|6P97>MinA8-
zM)k)SYgwM-Z8_T|bF5K%((+I4!rrFKKHOCPpkE}>$#~3>Z~2pTzS}(JUR|jf^GiR*
zEd5z=qFKjO$!LcBu>GYOo+}xB`)wBPnyAHlch9Hw`Fs7U(x++uXYg!ERQc^>5am4i
z<8g_}3aUrU6j$|ZcRe;mQsq^jke<WJ??-06>yY&MtDL*NW%Hlst(!df@8+Hr<e1TU
zA|ce_B8R7-_d>2`-EI6U>c#6?-Q4bp>7C#HuBFlJlBve4-LrC6*S=cy?y}#`FGovO
z@0fI{YYGG7p|A2!EQ;3sXOO?A^MO@nu94(M*`<ms!6qk-l|o#OY}=5U5Uap7?Xuo-
z?dc}_{)AWdik*qcIG|*!bzgtNjT5&WBn2~-CmqyOSg5O|rm<5zCS&>iM7{IxHNVuT
zmPa1o;9evgQ`}P|?XR~ZRwZ)otTU^(oa|Bb+_sqE%1oBWd6yi5${D%V%D(<`=*pYm
zQiBUWY8OPjU&a;f`taiE=a-^he=Pm6u6%idO{dV6S9f+edpuxbxv6ii<)jsUQ_yUR
z&{`wa!^ZplwUe`#{AXzBaNc#kv%On<!TiJO?T0Q~TnS<S$$H3Yx1q>^a&^yAxd|>Q
zAun83&W#n8ynQSGm-ETr>~9}hE_l1cDa-cpW9u#2{c`oa61`LNw*6lE?U>swZXu-!
zlP4)_P2vi(T-c=NwNtBhU3z67AOF9b9&8_KM3%34;G)yf5$W+bUTM0KU&-x4n+HC(
zxuf=ID(1$wpMDpz@hktg*9+G%-dMPOtEAHnFY|lNZp(5m{8EwsaeB(W`>JmDJT6$W
z+@7=Z+tt#o>YobkZNKD{rMSay!R}ehQ;H66-|Lb3DN0JYd7r0$>@&N^pBxI-c}q{&
zSX6fD&55@TTMX8is@>9^Jt1=Gw|kxnKUZj$)t_m9z3OGB?XJ`%>`r+f-m8T<O7r(5
zmY!bHa;bD_K|<H$!jP`J0f9m657vKtIzQcR{xQob=>g}0=YQHBo+)ym<)n~*%$~iR
zyW{G8_wBzo<KnH`f7X84RI<HZ!ui(hxBpfj?y0fb5Gz+JvH14i@OE~-HG=0Ci&WRI
z`tac4)h5d?N&Wd><78y4Hn`jM1cH<|w}){&zu0BF|7t}+!K;HZzYN{C|60$-CmW$W
z-%TU_dg}UFr{DYW$wp{Czt~l!|N2k&ZOe;Z@1Ea3t$OTMbalG!<-NtL-{);N-8l91
G|C<0yj!KgN

literal 0
HcmV?d00001

diff --git a/pict/but_next.jpg b/pict/but_next.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c5639baeb50091ab6043b3d8a97d66125f3f8468
GIT binary patch
literal 1336
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY43W%?f(%T8jLd?J
z|Bo>AF)%POGcqzD0Txy^b|z*<OmRkLRwgz921aHkW_Ct4HfD$(MkZz!K~@GKHbuil
z!YQikB94KHg-XE_7aC0x;|NL?6=Yy!VrFAyVuvVaU|?im5?sivXegAV%;FfBs3cq{
z(m3&=ky8-s|62?^Ad3Z=1sUua?k?QOXOpty6?5O3@K>Tt`wsBge15%kp|xL6cv?*T
zrunxFR^HS8!|}E7->LeHgYN|&hR#->Vp96b_U`MdpKZsM3l=8&J}qUP;I*Q8OaGDv
zw?hSIoxTZh{9YHj#pIZb_!fDU7nNl{Cifna30t;hrr<@*V>3#&?0OoQduS>{W=HWV
zCO4tPlOEX~Jx<j>>!vO`zrNXRmP<Ro<@}}7jiy+w-7T=@<)ZCUJ>gI5U)6cl<USK`
zxPD7!{WQIAm!1|q`D*xj)|REl`RlBX2Y)F)vEtCZ#PXF}m(98?wlsEqpPK4kZttw>
zDcdua&QeLu)DF8pO{q6M#3D*5WZ&#4rBJ^2f2V$QE}OY7TJP-MBA4<|)~SbP2y8#Z
znW?2ZrAzdJ?BeHbH=VY)M5nL#waWV@H&^}9dxe*Fz0y+tbi1+MDO>5rE}1L$wuv~L
zn}4Rd_Q&(G<CnGx=9^wsy8df*>(LtzGfz!u)wrCn?2p3Pi~7usVf%B%CRwO%_~mG`
za?Pg;Q+1dar0XJ1tb6xJY^~a)3r>%(y8rI{Q|J@A!^<`#f5-geEP*X+g7mxI>)yzl
zuA%L^K4NCMsGDl;+LaSh*Q{}yIMLN4EP2Z05N&C_`<o@$cg<lx(5I=mt%P&uwI#DY
z{#%{o+Il_r+@9{*F4b+$g->ozj^wfX+|Bh>b7DwpL9Scy$K!RMrk59Ny}0wbLs3(I
z-fx|U7kyvb>aY09d+L61drB{(S;d*w=$P6?vm5xgJ#2ced1RYJiup{-qsDn6_x<h{
z`pwYQ?^DWc+;sY{*Sn?SJC5^SezB(hnBx8?8Pl)p8qVIPb>XuS(`A_{=gPeEnYJuh
zZS-kjXvDg|KjQBk>dYuF)7$PC`OxAqx5BJX+a_9F_pnXswp`J-<FjA;TvkuUts!0N
zd3VA$-RaUlk{cY=J@1B&+RMN3dk$>#o}+&;MPkj4ABo%MXctdwTGM%ZZ^(jUm+jXb
zx8RTt%DZX7vGP9O4~C-?r2}6*_bH#LStYu1=@g5pyep$$d$Ow3H~F8x+hxB0irA*P
zd+WM)NgG#Bdt5N<_T?FwljpQ9nN{7m@|dc2oNd_b*=>_Mp9Jr?9ib^bed#I7ouBL1
z*FWFPnYSnK-Tp-vZ&ubzIIrq^`!}3V_~KdBh3h9}fY`h;m)!PwF5dn%#=@l7Q|hN$
z-~Fov4=$cn$$m1+x<2%9v%ASe;+0N${bW|v_5TdkhEKw0zkOD>sz!4&Uv5o&@87Vx
T?`Qe`Gi+aa%AIe`)&DmE33nyg

literal 0
HcmV?d00001

diff --git a/pict/but_ok.jpg b/pict/but_ok.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3bb2996fa2f3ccd958b8f3ccdbf788406799b6ef
GIT binary patch
literal 881
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4BE_$f(%T8jLd?J
z|Bo<qGB7eQGcqzD04oCv8zVa-0~4w+GYbPF6Dykl10ypN3lk?3J5&cF6Eh1d8-t*b
zu%e-3V&g)kMItGxflh@+&WlY%*##LGSs0kvSXrT}85kJ^nV1z93K=RT2`jTWCLUZY
zQrPIUXw&~&3_Q$?3`~N|f(-Ty-#d;O3*2VivNDTdr3+KBO;zEuH}6=S>UPB_>UqDr
zxBa?kXRpPVmq$HY{W}gV@vL@>IwhSWJgNB6;t3L~a;EmV9o#avJGi0C;6KB<o0&^b
ztgvdI`K3sz(@J{dv^&$}Cal#}JvNQ0ZSzUz_BifkXB`ZV3&b;R-gRzrcU|;mJx{YQ
zCR#o}GP!1Kn|1B5O7kR{k_w@H@)PF9M#!w0&@hvS>q3L-q)^TtHLJc$?g@vcmAkxg
zYtQ3Mv0v%__T9I{b@iWDYJWWccB#%zowfjx4MxoKAGYLAQ&D@>nXsYU*J`8K_ht7)
zGS*)GrfBUm+vjfX^yWMZIqx&Nm!^GXRrhL|Vv%s=Hgn)QcR#&<ts$=`Oqjs8vAndm
zELLfIRGCobXRYpK$9lc;f>ocmw|slOe%GfEsXO)wUVRZoeeYI%IeLfvXn%hb&x<*8
zHr<RY`?A|?vs$m8!{qcc=VH>YJg&Z|vf{~OKT!>fPvX-S>{BUvdeZLEkGq0OQ3u<v
zR4IptEQsK}x_b4QK4k$hPFrRUp*hP~uky=Z_|L$<|7H7^`MH`as#kBd_g|CuzUZ&b
zruWCH`@+`5{+agMFR%Bm?z30@$A7QaW4!q2r0MksXZ`!X$Hn;di+Pp)Fb;nF_xg0<
z#YZR2t>d}k|24Yv`u=J4b#rzXJ?`#T{m-B?)%%HIu6(+GMb*yo<n>JtlJ@_<2>^w{
BHyi)}

literal 0
HcmV?d00001

diff --git a/pict/but_prev.jpg b/pict/but_prev.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..46c4f397005d169866102814cac08802f19acc4c
GIT binary patch
literal 1574
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
CT#<1A

literal 0
HcmV?d00001

diff --git a/pict/but_replace.jpg b/pict/but_replace.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0c17557a59ec5367fe5e1970346c8b71060b3fcd
GIT binary patch
literal 1273
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3{K39f(%T8jLd?J
z|Bo<CU|?WkVrFDO0<27IjLa<Tj10_-j3^RJ%q)zo0t}4IOsou?OzcoCOpMGdf~*XR
zLc(l@j)6*xL{e1Q6P+53f|`;|L<JcbnHkv`S=nH!85snbm=z5d3MDDC2s;KQ7EWwb
zGICn9_`}A74?l{q{=db*!_3IQB*-ktV9)Ta@_Mzs?Bh-A%MC;OMYmQtF31zuHrLAi
z#muMuEWYOgE2AE>@datb>lJDmB^o{Pyx{gI;fkd3+Dpj>ulv$&FrPD14E|kwo?Fr2
z&C&Hqq73~H)Om~7iGA+4Y#v?Qw>E=Ou}Npr>Pg~3YARVF@;ZCDY9_wt3jDdAfAY?!
z@5;V!Ym6<={l@RXmy+rf#Z|h_A}d7vSX_rde}zxv&I7d#6AqcYDQD%~-t5W9wKQPD
zWK~zcJwBg0bX-@q3T!bxk>h_*yIKEO8H1vrH*?NR7ydJ=9_h_{YkZ!kQi!!fZ|5bR
z*M0Vu4~r6aTA5zE^F__W^`-BLgj-BHtsEDo1cuEFEjYH+AzEkt$zql2LkB*^S(l_<
z-FBwiH1hK9r?I(Lc|$L+&JCM-Y0LUF<)|%>&T)M9=Q5nyJ->F}{msQ6j?LTfD>n6o
z{A#WEPcoX}_5JI`I+*(WX7b$VyELImb5@|1%Zkp9V;fo%QWID+dX2Tp%C)>>*q-yf
zJ+gGSQtGRloYL04%VOR-3Pn3~otft9<M6F-<zk!7J^`N<HO@o|<tfBj_s@Fq_=I4k
z*AIQ+CuM4(E4P`a?0M|Jb=Q;CNt;gXN^yGZ#GwDmC8~U`-k$J@r<NP1+<JGiUP5KL
zQ}WY4)Bf3i)ajVxX1w{C^!6KNI|CO*vm|V};W1g_@hagr+t@w@{9g6A+i%_+RsSza
zSq49RTDN@@-@W;wNyVnqxo>8#c|S3{)%4iIh)MS?6^-+`SNirOTxE$Y{L2vad*O;!
z;dL{n9S^pg-CmY7Ti0i2(W)=?{X6Gy^B(SL4p<u57UI2z<E_m?$)l+kHO)S|i^e)s
zGDm5B&yKs3VROo8!t9A^%Eu3Uk632$l_71@e}<dpPp8d3ul%UIVxq-lv&c_D97c6X
zTqg@6X54;enjh`K#Jg^;`(?lPDH+#V)P=Ir7=Lre%qv-{F~4-Op3;@mzWaPM%eE^{
zTqWgG`$BKe_aMefwVP6GB`dx@wl`ana>VnG#J|=4LQ@*Im@nG=vi!^XubRJi8{Fi-
z9e7@T*Q;`S{Uzn)+J8dU+HE~v8EgK1?jLcB*s$-BdxGBQe~pt#xp}qe{{F=x)%B}B
zJh*wa$^1)FKS*5KYJ=Oqp1`;NRv&Io597FhvCDS<)rx|gR|lnk8M<%(wVsc6ZiI5Z
tn^xg}hEw-ttGBL;-f}s9t-+UHmb+_LmG0j-<&WL*lFxFRK1~0A699bu@3jB`

literal 0
HcmV?d00001

diff --git a/pict/but_report.jpg b/pict/but_report.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e283c36212ec407630b1956482b898960f305bf3
GIT binary patch
literal 1339
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3=zzXf(%T8jLd?J
z|Bo<CU|?WkVrFDO0<26djLdB8j0{Z7j3^S!j7%)7Yyu37%uLKI?5vznJs@F0Rt6z9
zMaM<LhDstSqN?l@jV3t<2PPIS+~^dPEGEdn$jr#b%EH79)xyXi$i%F;P$)^6#n3TO
zNjR}^qtnEPMnNL~Z!z#NGcqs<G7B=;GkniTXqPkg2vg+xvOZF)GxkJxzpd5Bj_Ayb
zrKZ#6Uu=KqlWKkBKLeBNs?w*;zAE~Hed+rir1lF0Cfj++#q8Xq%+go1YLVU>yI#+b
zvZq&r3Irdmx?LN1@w1AY;m&C*4O=F0Nv}zYzI(FxLPp42T`BG2ozn5!#U{?+V^gS#
z{;+^!zJJNVU9Vj&{I&D8J?AKK5>#P~x^wSc>RFeyW=ZqB=3k3%TFz3{x}$2l_cYGs
zT_sA6{Tn{r3Ruw||I8(3?aO;RR<1RO=B!V(v)H^NAZ^Pf{q0LnPS@buZuw`~S?5-V
z^-GHsjZ@D0Zds>(+B`?~@5CmZcOv$8GxoV>e2gwvHuKBRVDtI1F6QRSsJtUTwX74T
zKUmCC)tYyA#Ts+NJ=1OqruAe`>F@hERciINt~KF-g`V$J<)3f_X)+&-jtsp1Wcx#(
z;J;Zlnkk=-J8hM^l0A2)nHpF0q_jI-Yh(9kPI$82Dx)$ddtS$ij@k7*Y3ubK3BPoi
z(IjFWQorJUp3uu3UJv(rU*23Qa#wFc+_xsylPZ3bm`zwYD)Z6`cZSN&6urM~$L-DQ
zrIPZ`nW=;=))crKu2}o!-M=+gC*C~2ciuxegPii2!4jYOtUM%pdCwZZxU)X3q%LmT
ze}?_3x^L|cJ<{=Ru-t4FvhDM>LsdHGE?KpuO)>2;D{`CQxl!fEl$m0iX1XbFe4ol-
zz#G_`v~$HX-SDLAEaf3bK1%LwJ2w5T<3eMx!yjhE{?#oJV|toz75{A0W1-w*w^fyn
z@GLkY>1MbgLBiqs=6UOVPP%L5#`S2;`{Q-8tW81M+xFF`+kzR}u5A0buvGR{$m<EY
zk2m%`F5WWv&@qp;isP*33ZIFtTG#bR%T`eG+F8G?1vm0u9^iO%<l@wApPyb03sK8W
z+oHX#-hZ9o;@66?kJ(-p&Xql|IcDO9CLzv6N{m7VvqU&&eOi~kD)-LHeUtAUnISQa
z;g;^tXCl3OcF(ESce=RkM_I3FZrcJL&*UyP--L@DtI{~vR_#1<<LRoB>oR|j#uTgG
zu}t|@a-w6SRb=7hXXdwCcBL^*J~iX;ofbpA6xY>Lt<2OUw{Kezwpzv{#p~$lO;7#u
zYVKdZ{PWGRv)4O+@A#!NTVMa`?5ld8{(U{%Q)Rg>mbYg5;?uvc^YO}DSB_VG0TOR^
zH$8FvWR=bSy#)_0o-H!{6xXl+KE}eNIHs2v#jPLS{$1V9)|Wly^^?5@TYuEb-h6##
cd9?jr|I0UfcgM?L?|SyW=6;>r9P$4*0l<zR3;+NC

literal 0
HcmV?d00001

diff --git a/pict/but_search.jpg b/pict/but_search.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ed5287e349e2f92564d49534908f4bdde0799155
GIT binary patch
literal 1118
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHD47SXSf(%T8jLd?J
z|Bo<CVqjooVP-%EOw4TTj4Z5-3{1?7jK~r!j7-d|Yyu37%uFmy94zcmIc7#C7C}}9
zAz?N}5yy#2%E6OE*bM`XMH3qrZoK%>S&)H|nURHqg$-s4BZD9lv!c)<5ktp9r6A#8
zmcYb~Mjs|FJXoaMm^A7CEe0NDMg}H9W<dsfhP{j28aSdpO_X`AwD(-mMXCF*<;p@A
z3(Q;YdZ_=vckNrhTMv}|D6dePmj1G_<BN;-YoA3`7h6gz0$1&r`B_O{Vp>>_f;W@M
zv}yNQ_eO+Uimr<k+4e*C)sg2)J)1OhKSW<`wiHR7W)y8B^0$7D<cY;PlOEnKTFcaV
zz3cQIo+V`mi#EGGEBencH`6EBBF}DnO3L=z!B#~d8tm>*VQRf}#A8XK(#DKWTMvf>
zZq1q!uFmqf=XvnA%(UruGySaRA6lOCX!nu%+jV!B**&P;BGhp6+w4DrIvNv>&E3xB
z-Eusu*KXcS+0esZRfW{j65b~EtW{6`bIq`)k%7~EM$G-3T>0cFoYznDp1ADPS`bjS
zQn#XW#j4{vt=6;R-Z!aDuCutkcl8+-x5E4rRpxhtTJ&xu)p=Lvvft4zdoa6n_sx`|
z=mYHD9mn3KPq$K(7Y)(LE7-cYiuJ^+k8hK$j`b{3mSkV%oOOHq(I}<`DihxYz7{)r
ze}i*Ep!4sX&CyQ;%sm{Y-OQQSP|+^+Xo>X=!<|pEr*x>ehP?1vXTI`o(A4MV&E1?l
z_Y61P?OQ2j%$pqf{A<wKz3I1`H)lBCGOvi9s=JB3a880u#^*KZTV@?AzPRZt$KIB_
zI<0P(7hy{y?-vKLi8r&$*}Fv@V_eg@=e~51ZgqK$JO8%xJLPA!avq8_XwO&R=9_Tm
z>NB6EdO1rLhlcj9-W}0-eM#loM636i+k<8V&3pVSBh1MoZT0-PbBlxaPu_Tx{p<V_
zRiZZx?lb?Ak68Y+XWde+hsz&aEq~i?y&~B7d#tsr;?2;N64m;=3v^?ds+RxEJ9KAO
zO@&vvVerxpWruky|3z;o%KZ3H<4nlQB#sN}tLmq{kpU?%7PX3KGU0qR|LJaawfS;F
zJxBefDfGoaH55M7G8VOR{>w7SJ!bX1;7?z^=N$nVqjh-4>Q&Percb(m;^~!lpKHBz
gi!VR*pC+^0ebV{lm!Cc3-xc$hS8j=X8~^_%0MNm#9smFU

literal 0
HcmV?d00001

diff --git a/pict/but_view.jpg b/pict/but_view.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..90a0ae9b60482d54a3956a2f8fd60039dadcfd3a
GIT binary patch
literal 931
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHD47$vWf(%T8jLd?J
z|Bo>AFfcH(GBO|oMiy2!c4kHfW(H;y31${XCRR2921aIPW+oOEcBmv1BQuMj5G#W)
zn_{5jL}d}9;K?C|iG__Djm6jn85o(ESy|axVdgV3FbOI$I|>Q2h!_?s1uY6pY~1Kn
z6g=^wQIqojTMRtRAO*~V4E79nS_=&f)van*+)nVfdwK0bPSDf%lLA%i_IzB$vNk+;
zvBs3E|GW<`eiU)WR<Yrj*X?hYuGX5HzucPj<9^8Yebcms9$m0#%3O3oIcf4T^C$h&
zCa=l5?bDT9=kYV!>eynR36rI>E>8S(O?FO>m|LVvp6hq7DPLZDXYKOaaHn@;(`^_1
zLnmDARWnaC+*~9epfF*osHmvMiWR%U5<gpC*4W;X7s)R3sPf^{i4|+U$^2)KJ*sLy
z<*2tw>`tz?OWAC%h{R{Cw~kwVm3`Z~wKLKrSMYzSVEA4(Us7e$<n^)2t($+>it4$G
zoSWlkB4ilMqP%^&=hkB<W@cJXR99Bq!gn-ot*&eSi+NHzceXYCu-rGJkn!dGEXO4;
zIHhymhxs`l*`#mU8mHMmxxev*vKY6;=`$9$Cq{TWJ@i()>d_byc*Rxq4@aq~&S}Ro
zMV1Zsgm3G1u3wT`A}A@U|DQqovE+-&o#)eUo8<QyMfh-^<K(iJlrKCwX?l&9@9M;&
zvbbMv^#+FyNYvY@mrHP}rLMI4@@7JKN{xBP>dOT|`!{A!;{R;-@JV>Y_MU40+2NJF
zdpt}kX3L$>ia)mc%;jZq6$>ADwX23Lj$l1~e*@>T!}Ck(eYV>1+SN^3b0y@*t|l{?
z--~~xE@qo=@9DN^`Ozza8=l{lzpN`^^7EIMsi>Xaf(bXY!(O`Q_b-bw$SnRch39B|
x_X_1a{!QD<m;PtCnf0gS?XRraQwkER0&jDdYi=x-__))0w~|@@z5V}h0syiWLu&v4

literal 0
HcmV?d00001

diff --git a/pict/but_viewcont.jpg b/pict/but_viewcont.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..76f58842eee5c730cac18badbefdcf86db88006a
GIT binary patch
literal 1924
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

literal 0
HcmV?d00001

diff --git a/pict/favicon.ico b/pict/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..0a4ba44527995af4c14f35423c64ff52c518e87c
GIT binary patch
literal 1406
zcmZQzU}Ruq5D;JhgA7&%1~CQ(1`P%V29S^f14y0&EQgEu|NlP&!=md9DM<+o3=9hx
zX71X@z>rwYz@Tf#Flj<R18?3&22(E|1`Rb01_p^LhV=GMhQkLBGBAkCF)+JEGrW5F
zih<vwf}wQgYzBt(Squ!VTNoHbtr_MWxy;bDWi5kyXfT7Qo*sjUxHtm?izov_U@pV<
zZCe=_7<w2Olyn&ws+Te_*!VFp2<R{{%sj)um$ii9$M^3H931QnOo|Q+iUtM@bC2v|
zn04?t0|O%$1A}!014Hg21_nN528P;=470XvXJFtFVPKFpV3@k+2m>1f8v_G7AH$Tr
zyBHYeU1XSba6iMJ-@h3cN*6OQ2+A_d+<k&!!O?RJY^>Z24BV0o40&@I*qE6a7}&TN
zX6`%4z%c(R1H<g|3_pMUVwk!AD8tNs`xuxQ85kI5oMT{^cbS1<;WY+^1y>jt=3ZoA
zm~$Riu#Sq4hQOc?0e6rK!2}~1FfcGNF@Om%eSJnoMkXkqL0nv1Twfo|2Ppva#bJCV
z5SKw*T;Cm}o{52pK^!ci57Ny9=8KCnh%@LjFn|;=FfloU%>!8uRU!_OWn^>*+YNRD
z$a+S1cZfU_gFBed09L>RQlQVk$jHb5R=@-T`rx9DfdQn0iHS)clw&~{;vEPV%4Yzn
h0%=F^!A`+XG;lC5H1IJnJm6zs_#nf;@WX(C0RS!qYnK23

literal 0
HcmV?d00001

diff --git a/pict/file_b_alldel.jpg b/pict/file_b_alldel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e82f225dddcf276465c90e7be790bbeddf72efea
GIT binary patch
literal 1789
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

literal 0
HcmV?d00001

diff --git a/pict/file_b_allfiles.jpg b/pict/file_b_allfiles.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ac88e0c2711fa690c927cca15e5fd590018bca98
GIT binary patch
literal 1658
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
Ny4+po;%EK82>@mX#t8rb

literal 0
HcmV?d00001

diff --git a/pict/file_b_check.jpg b/pict/file_b_check.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..68049e674a4b13538ad1e65aa330177c31571ef3
GIT binary patch
literal 474
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cIo41COtf(%T8jLd?J
z|Bo<~FfcMQpa51jMh0e7F-8_v1_1^}CRP>(cDPzbCT2lJAr@8!VG%Y%$Bjmlj70?*
z7+4wDIpIne7#Ibam=z5V3JJ5YItC^dHcm8hQvQF7frpuqfk}{Akini|&#CepKdWb-
zE<Sjamm8_Cs_p3%YsjFuX?>weKWCN@w`8qaWYl$`*y734g;^pZ%e8Ctf{h-%K6778
zF71-AbI#7dy!5kM1wFo6nXo^buJLklOZSu0NAm8ag?_)C;J@{4-88X%ER{-qY0uuI
geht*0ve>V|-#5lGSoru=;Z--iG?rcyV*h^=0MHm`@Bjb+

literal 0
HcmV?d00001

diff --git a/pict/file_b_expand.jpg b/pict/file_b_expand.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..86b720efa5126dae8d836e156b9cfa4f92a87626
GIT binary patch
literal 2292
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
TSUBr{6fOL-^`*XK{r{T)7y|ry

literal 0
HcmV?d00001

diff --git a/pict/file_b_hide.jpg b/pict/file_b_hide.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5689c05b18cb36ce96a771a697cde40c99d137b7
GIT binary patch
literal 2112
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

literal 0
HcmV?d00001

diff --git a/pict/file_b_md5list.jpg b/pict/file_b_md5list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9dac25518acf9deaa84115d9156f7e9b62f0dc34
GIT binary patch
literal 2716
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
a>EdOl`~MW~|MRKf)SmrcS01<ee-i-PY}n5L

literal 0
HcmV?d00001

diff --git a/pict/file_h_acc_cur.jpg b/pict/file_h_acc_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8907e17b7b98daaf1e579501ba8d72243b0a4888
GIT binary patch
literal 1413
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3{lLCf(%T8jLd?J
z|Bo<qFfcGNF*7nC0VWn!MrL+4Mg}HkMidD~CKgs^HUS1kW@Z)!Rwfp9h$bdRW)?wK
zHU>o@VME765m6<hz(QsA#)%h`oSVf2L8_UVnOR{bF)|1;2{E%M8U{KxPE1r1E?l_r
zU=Zv7TMRtRj0{YI%z_N|46h=~(i4uXZ7kZmZ;fl=!#)<JC957TTBRy{A-uL?x5TGi
zQQB$cEY4G{o>y<WwWw$Jk{=h8gckI4>YJU;TDnU~az$@=K<iGAEsm<j3g%Hup4_+-
zon7u}o{<wR7pHTs$l2lGs;e4$6BYEEe(25EY?R5cpQr1v_0n>!qc;;f`QsF}9a$LE
z^YUbd<3Z6yD}<(U3YOjWiP+&CRPx1Z$EQhdiJfl!az5R6*pg3&daSq9oWLI9=`wLs
zkc*a(mafegp6ZqjotG~xe$uaKvuC|{+iP8)J&rwZra1N8z7)w+5S|j?q!Q%2XA8GD
z-$grtbiu3IH_OxxA31z|1+R^^Q^r#xmF^!JE5m(~?^s>dXO&l}<UFo^tS^5f_ZFqu
z=U3la(l+(pk*I=)r>ATE4EBC7+g5d7=XLS)@QV{$O1D`o-V`fp!WyN}lzV3S=MUHB
zu?fs5S{=XFtFvUv6YDt{MN)h-yBwvWtC@BwEx(eqH84~pRCKM_{Bw~%*qBzlnP&S@
zb*h)HY1cZP45#Ok>o_MovkdyaN9?ueF6ka8^Qf#SkE#seBLCGh1PU_)SiS2-eKQ_E
zIdpdaE0@<7XQ#$J-E3JPD!N$Y?}6>si8ISLvpN4~usO0ixG?m`3qK<_ZmHtfW4+%>
z*&{nw>6%}!p8nRu!!6{>@#H&oSCl#13f`=Fnq2<uy;)7~8aLw}x4dZmWS{+#oYPe-
zSd3ZvR~cF@;!>NlM?5uNFX@Zs6m47EGc`pgXNa@SJGEc$&?fKQKi-_ExPQ!)`$<;{
zcTIQ2j47Ma*K{l~dCZl1X;lf+r-gO0Iw?+~%;r_4O0n|0g132Rp68BpZA-Z<yZwA)
z!rc5hNAwds`C?ZzH(90sI<wE#`$Ye&$<=?OyI$Tp*%Bk!#96y!%Gwi~`46q%S$Frj
z$8G)NTX&eZul>0AtcBifJCi$!`;_!tr-?GkZ`rkP>L=Nfw%D~jd)Jk({L?C&6_b6_
zv$^S6K+){hTd^(c9DcvG5nQ}KH%oesvf0H&&2MKPvN>3>V8&bDJ*AQ<w+#e^mv5Q>
zX2y1f*!hR<mK`jbd0|tw#bd+X+jlRy%!p)Zf4t~e=5toZbBbqwwexv2KVNZJ?S{eB
z^xFcO$?IPl=eZuvE00axu+w3uVPTHU4!4MteAT%Z<3yOA@i)9ZU#ep0`$u!-e}<Ve
zlsv3OHmwa63)uABsCth_ckf|0ulow>!rL7!9=$Y;(=ofXJn7TACwqdgM@d#rJCRfp
z`myk()hcWEcO~U|npr0mEt7Ul`Y2LeCZo^4^r*|ynmv0<Tgy4N2AH~LG3?#8Lamp>
ztwq^Ma3RNqmJBBoMJa)~`%e88UB7Ip_=|}t=YIEpD*9(tw0f1}F0Ir15B^U1*`ND1
ld;6Z(uh;)JySzR6ckEx0Df=({yTASNn}4&~R>c3m2><|REV=*y

literal 0
HcmV?d00001

diff --git a/pict/file_h_acc_link.jpg b/pict/file_h_acc_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..50d9ca2a3289308e6919988c79a3095015aa6342
GIT binary patch
literal 1153
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3{K39f(%T8jLd?J
z|Bo;<GcYhQGcq6pCT12^c1A`<Mg|lKMvyq000Sd4GYcaVGbdCN6C*PV11p=LqL8qo
zp-7;TXkwvJlX9?0h#0#d10xGaH4`(`ct!?6CT1bSKo-TuiH?a%!i5JHZVdW=i-Cuk
zk%38&S&+e=;Z<Z=YT}W%jYWI+t#K`U*vF!@WYxn(tJFHbalMZhcb5yB*7Yqtp`&Ph
z%=@tHn84}9^QBmVLIfwOKD(J4vfahmRPbuHz`7t^0nd;VydgnFF?pt2chBkGVy4@#
zFP3hpxFF$bsW0m#71l5DuB$X>S~SF``5d-hTCR2UW@0CQoWiyv3xj%Ip3HDOD0(r3
z)7!}<cH1hA4bzT%`4(*PZjxJKr(3_APxl?R<kO)Z>n$}Wu!nfMOxzUYqRS~N?r$Pf
z&6y~C`Nr~_vWF@w<Mes2Ma`^emb|IaD!YBjCYA^5PAq8gSTeg}!J@-U{9BAWzIuI&
z?cDIu;Oi@9f36q4GRs^h)^TY?U6rZkk4b$1GNth3$HlYXIKAaq_W9Mfm5NKtH;Vho
zSQb59->X$CoPK2c!<a{JUI*=%Hr@PeK}@&7sp)$kY>!xb;ZBm^uFFA}oG&}fo>Uui
zpt;+tK`Z*#s_@0fpB$R?pW#a9>lbGiy}lVaXB#))#jf;g-*bZXz6G49Kfh7y%AM3Y
zE5S`}+;YXS$FJYKBAceRVpo1_xBe<8C!^zPR&tNOZItjaZckmRExq5oV)K*SB*QsL
z#zi-)rBi>L@Y$(&KyijjZD8kBfk2a|FLrDFcqHyD>1_P+Q}W}okOMm`zJ(aw(O21R
z+jqLXx7Kt;e30e@-A}rYl7ddo+oUw%a*yV8uaz%YA3Oah3Ovzb#FqEtt5RJ5UC(RY
zCHGV1oZC`1%Wgm4m@qqkuAKM=#ZJ8|jt6Cp|E9&uEq&sC)^qQ_+@sl{MTz2U2~F{y
znp#gH+rMmn7ytRpQ|Zhf-?p=T_`1)evd^*X=9kNbZ9h78ibZ5G*|+T47y7|;N71Vb
zryo6!nSUbE)H`qQ)EO3LsqC6NVwc|Vdcwc&@<A!<Z`T&?JY<|JrD1n-kMbGuF3!GN
zxvzs_R-IvS`S@1-pQz{w@$?T%cPH%hc@b$kr*Ouxx9?sm`RFt`f4rD%^0{fjbAf07
z79O6Y@N<px<OqXl>5l~rldpeSxz6=)R%vYZjg$Xg&p-a{Kf~<rb-zAsj$K-|<Jv?Q
PS3wb%KtTv4{{JQbp7Oib

literal 0
HcmV?d00001

diff --git a/pict/file_h_chg_cur.jpg b/pict/file_h_chg_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0f987ce883e1a3c8714efb32b5eaf8452c551064
GIT binary patch
literal 1409
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3{lLCf(%T8jLd?J
z|Bo=VF)%Q)GBPqC0Y+vPRyHPfMn(o^Mid!FCT3PP76ArEW)NUuhU#KsWM&a$Wn)kj
zG87h3QWkX#bYlOISU6FTfr*KciH(7o6KXgk6N4bLqL86uV4^Tfp_0gl#)%6LK6Gkg
z{eO#rhnbOqNsw8P!JgsE>2JlUoA1opD&aZ5taRV6=m!Q*rnk;oRnE((!5p$kQ!D)C
zdg<<K>C#)cugsd;c7kzTk?Uf^<Lf5gD(%cTY4hrs#HW_U_D{GJg>9El;NPL)8R&8)
z<?CI)#rtNxyyo?U&Hrb1XsY^*qX|pXs~5geTCQJS?{+diZ1cx$vt%pEC-3l!*&BJQ
z=g9JOcaBX{+_ay(P|ln9PUEK5g(>@{Tu4sxSe#_ew=s54RAlM5xY@GXlbWnmH<z%?
z%B_;_SRE+;wnXB_MTXbXE$#9KN0uBZ%BjA?zHrluzLR;uDi<_$Svf9D30i$=*T%1(
zn4^9F@boKv6?E4>a<W}s`U+FxB7xE?Q%*HZo-;+Dd#a#!WAJ;|D}U|0*RK5`@ku{W
zN7r21_w1%Rk!z~1xuG((?Ti=XG(%k#LVYKP`S9+}W>OIsO^W(Z_(IM_EjrHm<g|OC
zLWSbX{xh`JAH7~vKVxahV>{-z!P#25pJ&hKNo5cYRm#2QpPYN`q{D%gUxmD~&p$tO
z;)vvhF!q-E2=BulGc>oYnRj^JoloAOtDh&_S2~vF&1-X7D0w&kgnoX7**UWd{8qnq
zT~&X7XRN${o3+>EJJLUVxHfH6h&?e=&wl2U_sN^&JHnjXODy?!a(VN4BpDr3YdJB8
zDK{oa_kzpi{_krIQ;+r-u$Qhk$e0-(mi2Va(zy-k9sfMD+WdUlC!B3te=pB(!;*r<
z#{?^6IsPvC&SM=ScKLSvzODZ0qS~@t%?sE&ZU0@@D%`f9cn<&TJ%`+Mnfdn|<SaX#
z`p){y$-WO9q8kIQ90)iQE1KxvalI;Nu4(?NV=_;IT^2t5v%gYK?Uu+V`zcB3uVuch
z4;N1rh+BC4$JLe~8HVVV3V!L;Qem%OKYD8^@KIH2eXQ5-8QZ#kdhUPaZ>aDv`}N`X
zomEHvGo;0>y{VGlAyKf-Q(&QUd{5?=BAajbANd(9Q`0rjQdlSS{;K(nnIBd<?>cpF
zzq#LEA0tb4KYPASAwABTHgzU!8>h<@>E7Z!`e?e^t#zJh#(U0Aj(Bjm#ATJL`=|d5
zrOY>u@0j!_q?b9f=Ic&7vsLSAmrWNw^6vPA_;s7s_9h3c+Yq(Ab(3-L4wr;wOEu43
zQuYWbZn*qn_G_MbC%9HgSF*kTGD}HXZB<_G_mvkDjl~}4Oe>do(0fhW>oxxhRhENS
zzA(vJSuFOg;)(laG`)EC<g2P{3T9+(Kl55>qVDgl3s<+!D_O2K^Y)qE7puN%-JUAq
z^r-XNl=V;7*>8OOP1<eQd#f2?EmxCo>dsbZein7#eYWo$)-OA5>OV@_z34xKaLk$;
z(UQxAGc(sLl5#QW$P~DwxWw6`Z6dFdon5@Vzn;~FyeX!VdZG8%tw>#3!{7Aj$)Eb}
jr&n#x%WuE4HoU*Qef8SR)8VyW%wvlttG~9G|NkZcb2l)5

literal 0
HcmV?d00001

diff --git a/pict/file_h_chg_link.jpg b/pict/file_h_chg_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8dab273e0c039b89bd1c208f1f0890337d4913ec
GIT binary patch
literal 1148
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY40g<nf(%T8jLd?J
z|Bo=VFfcGNF*7nC0TxDPCRTPfMkqkYFfuW-u(Am-FfoBture@1q?ni)Sy&ka*%XBg
zm4uZ=9Rm|Z*b65*2{JG;Gc&O=aza!wFfcL*GARl%I|dpi77DW{eQ2Dx@ZdwICXxTQ
z7<iZ&8JGl_1sUuaUe0`1+<N%Q)GmX~^*UF7ee7S*7Fn>ovOnN~a)RvRj7c-@zg&Op
z(Z{8Rr7Y#D({D_3;Le(Hq?pfkiqov_f=R_`8?J9rjr`BB!H~uC%Up)K1qa<83$C1e
ze2%ZXRoLv+G7ZcBMT_oT@%Ko+oB7^%?Hh$<@4b&#_qcy{UG2`Gwmp`s3nDg~wuh!f
z<-U3tcBSKLrHNv$@+*T)GjA-}H#@`d#3YFw-fgd<XB=6&-h18k=&TmAQ)d^bEIr@2
zNv&M)&$(uqZUNq)2b0&Iv6womXLr20<CV*Xyqk7=s<KRZW8luJEPcN1*Ts*Yn66EK
z5%SKxU`b`Yu!`a1SqnS@IZQWZ8Zr62o6w~9c9HjnZNJ}I?LR;9*3BBOa^)T2>`IT{
zEI8AVvP#a@nBn$>uU-zzl9V_%+D<e!7F<!7Qk}bM`_W449qW9Xp6}Fi?>buZROV^c
z$xTx&H8#g?`Q1`&pD=AxG|Tt-Hhv%f{WX}Q-r?kSS*Wt<ueh?Ln@hvH$xr6g&-_$g
zc$<Gkg!A$#*8Hj38mTQ|vyLn@Qe)JMREbS+dA$Aex*eMy9aCZ4`FMqn*O|wfW>cfG
z|FF+J{8LSD%BH(^&Si7<8&Aqo>6==0NRN%R-ed1!e(%JX>f-O$BPt_i8JQTeHOQ%a
z{#H7<FO)en;y;7UGc${=e2Oy{iG7@L=5D##*>Z-)WHmk?HlCx4H7386{q=U+J*oXy
zdwiaBCMA^o+4rh!X-4OTKU2-^XBJ;N^CU8(+0<|Uv9n4W4sf0bU+_5R+SY3|f7jmL
z(Y|F#`Fz<dyEJX*D$n{WbDi3G=GV!6m7J&fSKqYn$<%!cnU_wwIxY39GxTo@-?#nS
zWI;7GEr$~=8<wx{DSdJLNn&T?&NFfQ*6w^46fl!*PF3EljYldyA7}@JOC(E%>$)pF
z+MX`0vuW1Z_a<|$v*>5^J~Eg8^`F7&#3#c$p7SLpI%?T%Ev+s}%dOPir`?-&aq_w6
z=ew`1je8n3Rrr|Lt4n4P(@u&`o1VXr#h{x1`swf2C7(6+B;I)t_kPixgqYdkKG)C0
VP08rED7Z-3#jT@PP)h0lO#n~?yYB!1

literal 0
HcmV?d00001

diff --git a/pict/file_h_cre_cur.jpg b/pict/file_h_cre_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0df3fc9a0e82d51b3fe13e458784b6fe6a05471a
GIT binary patch
literal 1389
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?a;nf(%T8jLd?J
z|Bo>AFfcH(GBPqC0Y+vPRyHPfMg}HkR0$?VW>yw90R~297Dgr(Rz^;UCMHH^7C|9a
zHU>puLnRSW$G}7*r^1N~lbn+$yQr}XGB7eTv9Pc)F+)@{Ffs@-2{9`g2C_INDhU@h
zPTXkZ^dU%Dg!TU|1|DWc1|~sfK?Zw<FK51eZaw^D)=>%1`O`}G{Yrjd@ML=HtX1W_
zj2g@#i!`;uAD)-a&eiPNAb4e3w9pR5JnbFU*H&vWoYQG8m=!MC%=xwLfelAXu7Jne
zNfHZHgIl(3XH2W-shyyAq`g#Q+uoR@mQ80ICDsXTyVE-9l$o1Gms5MGXwcr^&Ko=4
zde*a=9uIkt6ZLxnzmlXydw<57qJ(|7HmP1d<);|c{mgIbk59Za_v*yE1xKWpO#WtD
zE%U&1!YP-w$4z}^{QEAuIILRH(vdRNZ=Q{ETG0vNC(Q=NnoW1Ud~^&t_xLEUo@k_x
zYS5NdmH+1CzmEBv`XZ!Uc}1+{wpYEobS-B!@lE37PF0<v>MqD3D(JN@MJ43t2kGke
zSG8Q$6R&7*yV`bm*WXZ)3DP-rkBy=@mh0cl-9723>di}n8|=OrF`bKe@Fr~1%cM(J
zkInYqd2W9df7hbG%+JsEJ^pj9y)S#xxfha#zH2pFy1G<47OlK0Dt<6{UYTRp1=dT2
zA!|hLgq?4^UsSE8E&6^#@x)|f)wX%5orZVY3wq}*n4L4bz;E?)*Hv}*UYrx&qNwcI
zX>+ii)v;%>l0$ib+1u>m+qDf(9P$MMH|2TMMirTCPBS{L)^b<;Xk@{a(<?eAMSp#|
zO+RXDu+*-~o}hC=lM`;Nss7LKY47EW8~T&)OrDZ&RP;$$X?I`ZPQgQl?ujSfOel+t
z&fUQ~_2;#HvdPuC|9mtLzS60D{c4q2>T)@+-}=k)s@d4(*RaX13DcY|Q?2&o`QlxZ
zPB6H3U*gX{Td28efl>(jm!}4IqFT<JS!E+3WBOCw?5U!+!Jmuv*1orkcJUcY&p2kR
zpLFzG$4TFvO_2hNJcZvaoU~}^TlIj@RnuP|>3ei1Z?dF`3g6DDYIk}Zlm!;QwPGvS
z{(RGpJI4KqmsG+cl9YEmlUB~SQ+UwqsoAR=d(R)b`tkMgjl23Ym#R&k^UCg&dd8Ip
ziBIO7$hKCV>D%V?GI06kIi0*S*6vqQVsXw>&phy_>w?izM|-*Xd@lJ;Gx{EiOg`|q
zi$~@8a?@RhUjJN^wz%=Q*^e`)9yA$hP1I;<PTY61_2^ZBR!`ROmvQ0AWvrj|SE|~q
z{bG1A=IN*6PZ28%3}@WbeUiE*C)RXRnzil0K;^=#uELJ%KfPOT{_g$Sj%S;5b2}za
zZOg7b`&wOIbZ4@)j{&3XnlsvS`W`VUEELiT70nF&@t=X;ATM`u#ms1n7uyshbl2}m
z`n&mVZE)P(^zy4Qb9dX77h7-FTA8=xRJtI?gO&m(3q=`$J`Q&lRq552k53X&@4g!S
zY}Y-@l^Ur+{>$H3zFPC;+xqg|-nu{TmU|U4?~_~}djHkFv;X)v-Tf=?UHYHl_WI)Q
Qe=GApg&tdP?)3jA0D(U%Gynhq

literal 0
HcmV?d00001

diff --git a/pict/file_h_cre_link.jpg b/pict/file_h_cre_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3861f661ef4ae1cb86f947ee51cf0107434f26d0
GIT binary patch
literal 1103
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4A#tyf(%T8jLd?J
z|Bo<qGB7YPvN9k87A8h!RyKA<Mh0d^Mn)tVMkZz!RyF|!Mixe9W(H1}E+$5hFoU3w
zqLQ$oV_;&TlZdF;#3B=RaX|(~W+rAf7Iv5+j0}QILd=SREQXGWg^j`!H!2x@IOr7A
zlq~Z976T76BLkBlvmk>#!^`P6&+6Jv4s{bszioAYuJ!|iC(~Q!UbSg!n9cBRw$h|!
z|JK&zt~FVvb->*yvRY^dWA3Yh;x%C*jB~<x4`s%L@u<J&Jy0RYaZ6$1V--Uu-^-qv
zc}!>iZ2aU{reeLUTl?rS4R7rZWzj=nw<m0hbUSfW&?Dey&Z^m8eS<d^-kS7h%5|Bm
z2TpAKt{~eHdBo~lck^V{Z&xSk&0X?HTqN$v%l+#Ea?ZX?`e`)lu=Ohc6CYnaXI#zg
zG2u=@;IV_>Z)J3dh6+sNnOySn<t4Lp-G+G`X>6C)h^4o8aZP<&v2eL!=#)cwv)}G2
z|GhQ;+0JjL53G3SZm{H8beGwSEl;lqluYo5*3?<3WzpfVqAU8lqSEs1j>~t{O@0u(
zQ|8d=*P^8heOH}avH7-6->TK`C*&);rFrYxoEA#n%|D@^e}&p@wL8Lht1p)OU*9F%
z@|MHnQj)(w{G<cN0w*e1FEP54Z+zPBP?3UpK;W7?6Mk)Zl9_fUwa=Gxmwwl#hbyNC
z3aUJQf9+QFx3wY1*82-~t$C<v#@luI{=c<n?RuwF?LBGMdq-yFXQkaShl`Y3iW1wE
zH#t5`t@!wa?bPq``xmd7Ub}zi&>Xo%$NTEEmD3{gA8g)sBQ1SG!1c$Bepf?-^(?;5
zo;<JbmA3+;nB@|A`EsS;PzRSg><`x{uGq>sb7n}nfkpbeaI>e1-UdHT8d~$7)-BLF
zb-U|W>J!uAMMlAu2Hr{{o=SBgMj;{3E|s#zUfE~0q*Uy2$&8Z=6^d_#%q}uy=y8hI
zJdk(Vw(8QhsmE7dQVEMlQr>#T%<bZi$4$AXa<4wv=RdjYSJkU;rh#uwmRu^{w)n}S
zvR*$nS&=t}b0(hlX>)oQxO{V^khEcRor?=c+Z})5#?RscMz;(6r!QX}D1Bj>@(x#(
zcNUM@go<C@n)RPS`^29ZyAL-183g|nPgl2}{^a@dzjLZ<cb)&ecK5$iyNos8JpA$J
adeHS5yCyDDc5&<I6_ipkamncZe-i*gcc>Hq

literal 0
HcmV?d00001

diff --git a/pict/file_h_del_cur.jpg b/pict/file_h_del_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..38a713b9ab044ac68e3479d4a1acbeef7d355cf5
GIT binary patch
literal 941
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY42H~%f(%T8jLd?J
z|Bo;<GcYi)Gcq6pMkZz!R(3W<1}0`k6d6V)7FK390R~29CRQdE7Ivs6W=19!K~@Gu
zAz?N{5ywO&_QFOL(TPTjoRgbX1sNEbnVFecp-LGT7#ReagqT?r4IKj$CpK<WGGhII
zi-Cukk%38&S&+e=;bPvuM>p1%AG&c;?xEfjflZFgY$BaiF0LWj*Av$-3e}uvQ(~y9
zapeKu(`kFwHAIJMvD-ZSyf%3k*IS8zF89{;lfLvk(fCwx=kVK|>+`!qwL4CWJ(y}T
z{qvg{yM<)0yr}8!KdW$*@41jC&pL+<>XI^FrIhFOy6wzfDz@5hM$4LW)=jn|EeCI`
z-f@CO<KR+mm9^oEMKgMnQrDjT__EiBN73ME*#4@iLN7HYyenLILf9-#d!|&xr=+QC
z!{6Gj4$WE}7`i%2*IqLHfdtp$O%dOZOk5S1*%MkQ#-j7CcK?j%+Os=8S(o<aZBV_P
zd?;yK0K*DL!6QW%`qtWpyzG_my0fOkD`Y}^QfQHing{=)C-45<_-tu--1fuN%g^sG
ziA#5ES2DlcGVuy?GN)#r@QJ-KyF?AM?xk*s{30mG(!9R)R9NcnqE}DE;*$BEAIl5)
zvHL&6k<=qX4lfHLg3FWpnyu&QZp?~ZuDs&N%jbP=Pj_-Q+i$h;ZVwimpwPJaOBC<A
za0O4n_mgr{#D2(%J<XP6D`s4yJx7^0VwY#gpR;+D%e#_}KYw!UPEYLPtHmd`$5e^j
z*Hc&DeWYVgo)qh~pFDFO-Ie<BR=YJ;LE@^pcxZ9aOMjcV(`U9h3om-u-S2rd@Rsel
zKJTumohnKZ>(<5UI;SyNFJIEt>Gh+c@-f#t!K?*YT~`>(ZY-E3A<)L6*vOfDXZ@nB
zpN=g0qY|mH_xQW4pAS#13*tSrX7}IzZT@@8?yfC*Z}#o=-<gTG*Z$M{J7w~J2G>9F
L%LT8h{=W$T)*Vr!

literal 0
HcmV?d00001

diff --git a/pict/file_h_del_link.jpg b/pict/file_h_del_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..253db16e8c571653a3bf19303e99d324defedf21
GIT binary patch
literal 694
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3^L4&f(%T8jLd?J
z|Bo=#FfcGNGoS!g7B+T924+S^Mn)uYCT12^Mm7NkMrLLvRwj0s6f+|e3xgo55SyW}
zv52T5yJMn~vWjY`m>>fa6C*P-3*2l*CI&%fMMELSK$gVDi5r!Sg#X`S;9+KDU=m~&
zWUyzrxar=bgpV^1Jvb?^sIMZh$&r~&q_fJ!H6;7`gzGo;rhQ%C@6S84GJ^TamDk$>
zc(YXw-mkVR)2Vb!UCbru@nP$yxQTOG<rg1&CO_@j-u+^$;wJ8iY25MA{PR~^$&l`y
zR&tMSfA%nRK6zx4v-SiX&SUPjZXM4T2d;~L>ALH7t8!xL9l^H}7S<BSmP@4vKgj3F
z-#JtEc;CTwVJv%cDty9DF^F;~S@cB<Uf+H-PxPYOu^Udtg$nnMoOxnU<giyYSoiI;
zPZMQ|@3Y3+)m6Erl}HpR*I9VVI++<vn(@%4`{?O~L0gkQ8#ae82v{(o^v9$e-Mytd
z9!TUq=2zXeDd5}g{|p{yI#e1jJ=n19-EmpAa+{cqS#iM=uO$`yywc~BBP0HI$Cte6
zGTKZW((#$~pJq4z`Oi@MF#hTO{yXg9!T#~fFaMs}{Byb1(;wfbJ-fQ4IABVv00_?i
Ge-i*T<ka*4

literal 0
HcmV?d00001

diff --git a/pict/file_h_gid_cur.jpg b/pict/file_h_gid_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e775b344bdb256afb445770a8a9314b1a48a64f6
GIT binary patch
literal 953
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY42H~%f(%T8jLd?J
z|Bo;<GcYi+GBPqC04oC{6Eiyt8zTb~Gl~RAoQ0K5fPs;Pk(r5=k%JkciHVV!g;kJ2
zkxfY0Fi}Z_-7&CnqR}E{XVK(l6+w_<7A8hkh*AayMg~D9W)?+5N1?z(rHKoJghl?}
zV&GwBWMC3x7G$tzxU9ePs;+5wsGHF8+gA5$wO>EpsroQoYwlqOABLxflS0nz$&I))
z<L!d}Ns(o$39LH<{3lerI<$8BOoh8^F0Sd}J6^h6C^7xp9CjCuP%BQ+8nf6h{~4y`
zxy@p~-%@ws@GY_HXKGAtSf-irhMPPz`8xCZ>4@GL;*N^@bSGyve_8chYQuvF?wa_+
z?SbOQYa=rZVmcme(A79m<WN5QrAmO?w!>YXbEjL^?z-OGq`qcq_}#0;QC>x|b25sg
z_|6<v=+)iZ7%Le3R$^U9sH>=JaqIENI)9iMZ&|DMS4=AP(K9_7Eu7(WUT;NZXt=@d
z-OHQGCR&P!CG81}@0Tl4U(C6U&uG(>NX3xi)un$<?$W=$Fm~&y9mm{PHhy#brSqw$
zrBiAbw{+*9$$Fw%cey9cYds~gg{96VT`q0wG9Rm$u-0jvN6bZQId*=!dhC_s^tf#0
z<XsIdC-{HXPAw^^SH515t*0VWxV7lSbB-IfrY)%(=A`X)yP-MjOXm;uzNNWSPF+l|
zo$Y3$WH_U<TUWaOYQ)DKSD7yCOcfK&77cFQd+$i13nv42-`-!lTFvhouHInWUTJqp
zZ{bAm1N@vni|5R{r{em!;Nqn96NEc&J6b$?X*zG3bZ+pDy^(jOFSYr)Ti<At#9UE{
z9e@2+$hx1rcxR*6I#141+Cgy>-M1$m`tW7PiW%oGzkI$<bcgG1hi_f481`=4pf;^V
zbs=Yl)9l(azl`VWdg&i>oig{k{K>1|U!LBs$@Y+E`@jC%>fhyV-+G>3dHe12zq2#1
Y-~FfeZ_3pF3?J*ezr3<qvj6{00GJ9_MgRZ+

literal 0
HcmV?d00001

diff --git a/pict/file_h_gid_link.jpg b/pict/file_h_gid_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..38833628098e304ee60396383c984734bf865f40
GIT binary patch
literal 725
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3^L4&f(%T8jLd?J
z|Bo=#GcYhQGcq6pHYQefW<~~P22^oo7DgskHUS1kW+ql9R#uoECPro!K~@GKVG%Y(
zLq{c1G4{lRM#?7Qf((o-3@iwB42%qdOw5XgjzWQnO2RA?7X~FMi~PUEz{AYQz$C~l
z$Y9TKS^v(f(`h@lW*JPid-J;LW&ZZ#Mc#+bhMMv+YA}Z^^$gnaacjk;8Fw4{g(AyT
z6Iizf_)oC-bZFb@H52k)o8(Sxyzy?!BOk4Q%NZ{+iTbp3?cJpxlm1ifNn%6I7xxl_
zXRD=tcDKtEPfISyx^ubZ@^$0wrz3i2h&egeM5|qDe;T^h;P8V8?vnlNd|Snj+eBLC
zCFgFBI=JofmFp{BzPz;abJ<cuwJT3rD>r;v9d58U?#&0km%<Yr)3lF@{`mOpP?f>#
zgvZ*Nu9HOFjZ5QCS}po<KX&V>9mm`=8=pCT2|i^cq>}V%nz_hNr5J6kdyOakou0gj
zWt5*Nd3@%!EhpQ;MHi+nD&##HucTWyqh$RO$=qw3j4ao(s5#V6-}E$P<DdS#2iNsf
zWD2(yJt=O<<M&OJ%u$zImz*PVwy5))-;cA~g0)>|f69?~(QzzEO=pXI*7Tq6w|rNf
neW_Nx^6{VBwf_4Q-v8Tse)IA-FH#P7P8MwBIM9;d^#3LRCnfAd

literal 0
HcmV?d00001

diff --git a/pict/file_h_meta_cur.jpg b/pict/file_h_meta_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..62d64d95d7831aaea0fad1291bb29737c1ea4f14
GIT binary patch
literal 1080
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY40g<nf(%T8jLd?J
z|Bo<qFfcGNGcqzD05dBC3mZElBf2;PGb0l#3!4A~BQrA-D<eBAR0|U$GmD@QD+8ON
zp^~tOV_>3@lZqJo!h_1jqJj*J%uLMeOzcpl42%qdOhU|x!Yqc4fr*VuB85g17jAS4
zDq{VAi-Cukk%38&S&+e=;pOptW*_neZn1sjD?C;+?PfrTP_CfYqI#~itQEx%*GoS3
z*EfC}E!niHeBr@A&0E!;6dOd((v@R8kgfIkOXjpWr5+B|%T{Qua_~HSJy=)gKxcm0
z5$=sDpThQiy}4~={ocN<qJrV4lcvVS+wTtjxUSCVhp6SmM}o8O{LVaaRCCW3<u0~f
z>Bovob7k~fL?)~(`lYtu#_X-Ce+6SImK|8bAbpAJn3Q*KeaiQBGnZ|isTNq|BRZ$!
zOu9_aVi$HFwx{hy%BM7@MhShn>p%VLwKxA6W@sMHdf2xj<jB&GDI1NHg_WmXeA2Mv
zV$q68p%ztod)}Uqn5OL@?sDnsboG1l`^?qSYo2_*@x)_NvO`C8y~?utJ}=fy)DQ^u
zI-Glmb;aeVU9~Za87_~WT(J~AU3Ae%rNnFQAK!V$lgyW?i}J>$YfB4Uv;A5+QT<+r
zOVM5H^Gkj1D8G8XtT#th!^{14@Y{pmw4O{*Vf*H9811YQoowDYbK6N(TQR4Db4~AL
zpBH{-nw-1nXl^5m=qslXuj-Q3vl?Sk)SKIx7Pg0n^=|g${Ss3ApP{#0FPpph_QeH9
zjwdg4U^nvH<)QJ-eM1k|U(L8>M?DWJy$o7zRk(L=ilU~^B+qH`tM~oWQcZJVU{3rT
zy@x0E`h=T02hVmKxue_Az3z_M?S6L?wY#BAcGGoSRh}QM$et0~qHkl^y{y5fdfQs1
zJjo+xh4~GQUYUHHV&5q9?PvVe^tIVhRpD)W)#v6-FP-{GYNuYA^!&1%X_Cj@<s^6?
z-L&-f>Bk{GtUOm<Jeb6PXsMsshi|X>zOIPZ=PWPKj=OO%yS?=7qXW|_(i)Q*wTgsR
zXI*8xDizZj>auO>wKA923wKWz&Q;~gaGE8stVKU)>%;R-g8SB;pLN%G=Tz$ezA4c!
zbFEgNn)f#_Rx|mnKa+d%fe+T5Pa|)>`JQF=UGs8j?$U}+m;I94SN>X9|NkZcbsmm^

literal 0
HcmV?d00001

diff --git a/pict/file_h_meta_link.jpg b/pict/file_h_meta_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d691cfe2731222df8d204212276ac7cae98276a9
GIT binary patch
literal 911
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hg<Lnc6K&SPA)D^P99Xi$jr>l
z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAP0j8gE}*#AOn*iBeNjm|04`t
z3=B-njEoFOfSr|%gN2h3L!5<)nU#%QfPs;Pk(r5wl@+Q5#Aah>U=$MOP%=^$6;yOG
z77t1iaZwdyU}R=uW@X`qDr8_{U}g~#RuW-l6f|-QN@_9|RV-XsG-=T$W#{1H|F;-;
zm>C(E1epaH>>2L5o&E83Ut(_4d8LFW=@a+8J7=1ErBQU1(56p<|87k^lJ()|9;*-i
zS`(+7{bzb7&F$^F)Z^@T__Q`e6or<qouk9wanC%pZqnpOC!5v%#R3`P&sbeD)pX$$
ze)wyvc}XP$udJLp7gMrZ`pw|`vo_rKP5rag=cQtX)Ajck?^Noa{@Z_h)t*)HuZkb4
z>RgUZS~B~|o2*wRmvxIo6VDi@Yot622|9D_Dqr`vhDA&ERCWCdUNLRH(k@-mxL5jH
zudT20G}!a~%-@|)y1y0dNtw0cV*K>xm5vri#8Y?Xeh}@Gz3H()aKEYWqO^A$qDAtu
zWl?Ec<xCVZK8Cm!RI_bda@e?}r+Q`G`z^1ZhAq5vS8jTA%w+B_x{OopBJ(3UF7-d;
z2tI3VAA5Y+V#$NNuPV1Zc>VESne}@4_M&w<q93$AsWH7^H`QDocErp%S!S`vyhCm>
zXQuFMdbMq~@T<k&pH3_}zu@XBQNF7khbFGR;wdua<KHSjzh#zfb2%llq+0UW`2J>H
zTQqkum)+FRecx_Q+Qh0a`sha2+Nzl$YeHu4-fdqK!YL%SKF_6K>Oae>Q^tHQ1xCV`
z0xc?kRJ`w9=ic*r6VHi`IfwtOT0eiS;|;wT3>?Aj&!W1v&AIk_`|*#{)I3_wo_#G8
z*mIZXZIANl#+3|5KY1vx&)xOvPHNcc`?(X=)!S}u_;BR>n{D-JYiIwB{%d!1!PV2z
Y<saYq-%VO}aUsWrmJBBo#rpp@0SMMb$N&HU

literal 0
HcmV?d00001

diff --git a/pict/file_h_mod_cur.jpg b/pict/file_h_mod_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f08924e959bceefca05ed73511f9af94e2dd61b0
GIT binary patch
literal 1364
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?a;nf(%T8jLd?J
z|Bo>AGcYi+GBPqC04oC{6Ehn-3nL=~Gb4%&6EiC#8;bw~BQrBIBO5adH$)o~BQuL2
zD;tBNkcgpUppubrqA0tQaj;ln<HUtQNy^SDDXwaQ42;Z->?};o5G@Q0j0}QI%!-DA
zi9*6Gj!I4<jS~+BDYO2+#lXYN$iO7XEXZKb@bdVa<byNX6!Hb`%cQT&oyzK{c2Q)N
z`peJ->+bH(K2~-4_MMN>(#>J>R=%}7W?8!H-r5OIwD$K;V!d+K!sOC){deM1>)xz>
z==){9RAG<jr=7|HLT=nwrL~T!y42-FA5njJG{n;=YSP6mmnK~lJS-F_weI%1MHxN<
zJl=DryF9L5X*fB#NO`|%_ZstLH<w6#mbMOQ*P9|Ixtinq+IkKq3q4o8Xz^%OvB8n3
z!l<I}3^HCJT)`UA?`CUeFYXWiI{jkIojyg+H=9M1%hwx3eHN~()ajqQOR?|iEmN=M
zWjids@^}8y+$rOfZuG}@+pWUWR~T|X2B(|~)=*RO;##ySF2zYycK792nX2|<@vi2|
z9j=Q`v^=TX8Yk4&(5HN0g_G0XIiY4z--E*nUu4e~J$bgZ`(~kJ&+V>|jE0vDpCW1|
z$_2Wtx-k9psrl*OUl-Ls<28%hC-JFmnJRy`YUf0WnKC=wCow&Cy&0&oD)-K=&s!Ce
zBGxj*My|RtUHz=xoRsNvo;|PIuH-UVipBZ(JFncI>8>T64o$0Kc(-$iE%wd&__Lr@
zQ8;_@ij?rvK@*KsY80El)cxd>i_G3`q%Bk&R@9ciLqm8@gUg!()t!Rv0T0)`nsWbe
zSoH@rA@kmN{_;zG2N@bC%?oWxov9F~=6rnC2H|a`TemXG_pI|Sd1CfRaJA}N?ws!I
zqaHi+Z{A%h=WCV2v$foM<EHbc{N^lq!nV<0{h-mD#`IIIeeTDn>I%JmEV}&h>dCQF
z7QS6P@48rv<b$O_QCCZro?OnxmR5V<PEN{PORopllq%+5=B%H&ZhQBQ9f$KgQ*UgT
zs<`Ly*_O0h`eh4VuUL_=Z#w(#$E#L<c59SKoHa$`mS^Pa?U!p#{+=x4cI&6n-CKVR
zF4=T2yxLq;IbC^Gsixw-W7j7YtjhXTvn#=Dy#)8ti}#)dOw|-F4{kE6_~&8CyYAJF
z<f4a1w(QNbF5aYYA<k0amF<sG6{es^wo8ANhP^SFxZ}vlyGvV7MWsA=`Et^whY_{U
z?zY%x)XZwP@>%}et?Q!ZM&UaXuNX^s?~#t;x@eQR>gj3eLrxc@pPO0)XWZJBIpLgI
z#<a@L^1$Uj3;(hdA7Ax*o$S}OnRjEizNmdw6?-jxMQO^;8!122gbthCnRP?xZO+Q-
z^6IRK4GU+@l@W6MvNE{Ny5cq8R*i6d&hmt?y@pBG>hh2MbN_s9@BV3Zw&7R*$kfLC
zXP7qiTKRh0D(RgOJy}z{T@cW3>bkqTly?8wC!gK7=3Oe^RmV%+=jLQSTc2uY)ijI!
kKSRgM{m)A7{b%^~?|$&{Z`E_`V@=Dy)~n~dbNzo40PBAx@&Et;

literal 0
HcmV?d00001

diff --git a/pict/file_h_mod_link.jpg b/pict/file_h_mod_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a6e7aabfe996bb10897e621c3354b58efa16e47d
GIT binary patch
literal 1100
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY40g<nf(%T8jLd?J
z|Bo;<GcYi+GBPqC0Y)YkR(57KMn(o^Mid!FCT3O^HUS1kW-wrd>SAJKW?^7u6I2v3
z6c%w*Vh>C-Ds(b-4i*z+U}R=wXJKN78P3Qc$i%E@7?>y|%;MNM(Md_<U{KQkTMRtR
zj0{YI%z_N|443;YjyD_fINVd*XK{YgZ7r@Q-$j~P>OWS!(B2-q`mx=XZ{KahlMAvg
zU)5c1eq3*R^wmu=t>GU(IqaIboNZRn)4#26;~(qR&C2)uxLo4M{On1lj4BCB-A--n
z43wWO_L1{PVW^PLv?W_|O_uCZvPkk$UiEg@RbS2~#?InN6D{t&Jd<+cPRIL`Nw0Zt
zT%0K8eNb@`+r=_hBc}_czb{;zp_3HzWQm`}I=?iDZa;0mxChLg%N7L9bh=-1(`!lL
ztGZ1eLh{@N=6s9n+PM4r4BhI^{Wa6v@7?Q2-dQRe9P(v_OjY}pADTO5oZOB6_-?yZ
zc=`%M?#JMiQ^6W)N?u%xR>eJW5|!N>w50Hrd}IYk-G<K#f6PmtaKHWV&L^Mb?&q&p
z(LdgszRd4bZ0gPB$1PQ#TkO1_dt#!>u||Q9zbDPEyLmBIDL~<>cjLB)Os}lM{rgY1
zXmZSsnd_{y=c}f$l6z`|y+GW<!>4u2p1CIZWt|H+`<<1kcml`V8T^Gx2A^b1?*{w+
zo4Wjdqrt>IS#Q2qgx*jPF!DdO!Dq8F_mLA7pTn5S&TZSaK>6d;lX-L6?l_sI>~^}X
zbn9b~Ui6nQOXYm6a(K4Z%)N0l{i(WNP!V&){K*MB{Twzwbvmy6_{g-*vX5PtKVCh#
z?o`0r#dFu`au^@<4vH;}3VL$6nc3KWg1NM$x?j)^)2{QvKaPd})xGwynq4CIq|R<J
zp(W-sDmV1qcD;K=wp5fy{9{3_-PgHw1s9ZgjKf-`J+;rr?z1>Ef2W~JZojbZ-SwM!
zl}|MAtu_~*S!A_*(j@5@w?6qvEzR|x?!$KVHDk#x>pQ0=Emg{URS@pp|0H=r)VtMf
z=6WjL-q#*)w^rh7`goE(@crj26F9v)zUp7wbhmAixx`HCEgN=5`^=HGH409C5Pof+
z!PFFsjeXglFFm?DH6~s}((|GI0eA6lWe1~g=e{;R(Ya3b&*pDttGj|Ooc39l^+l<p
OOG%?+5t!=!e-i*`&Yy4q

literal 0
HcmV?d00001

diff --git a/pict/file_h_nam_cur.jpg b/pict/file_h_nam_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..19c3d43d6307aec2b3699edeec4a9e931e684b72
GIT binary patch
literal 1097
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3_i?^f(%T8jLd?J
z|Bo;<FfcGNGcqzD0TyOfb~Z*v24+T7aVBO~7B&F}MrLMaCRS!vs17DZW)=oPRz)E;
zLt)22B@uQbC(*=(%El^!3`|UnjO;ATP=yQ(jDk$eLW+itfsINmi4&bf79M2%e~W>K
znUR4>kXewyp5b=(q1o-mEkDJ((-uFycl@NfIGZ1vYm=zBW29@)2EA4Drn-b&4BJ&y
zF@5o>dfg+dr>#qFOzeLep?Sk2a^p0f<V_mdf;Uxq-oJ}aQj%J}V(p^RCEK`HTOHYY
zBDLg7-!y+I<HK@6HznWk7bs~r^$V!}^|<?8D`VHK<%=$^GAou2njum><zt(`)i-<8
zCT{1P96ag5+Y-BF*Pbrq?<!p$VPt!??$GP?hHuisxvh*RFZN9f5ep4G{&)vp-xHVE
z>8v4lS7nABd>naCXO`GcksO^(%7$|ay?O;?4P;OA7b&08m>w<kt33Mc-`9En8O}tN
z<y)+NsvB@KUd&rq$<W9$uV01rSohK+lU^=wx<2=$dpOSpKToY>Rt6EqF4rIJ6U`e>
zr7T#K^t0>qi7BbU%vmXtY0D-q$x)RSdwOftcBZwfE5BTu{O&mS;ut^E#>3TXx2V<R
zo-dY(?)$hrGKs}T%~J5XiuL|FN7ra^>2J@Xj>`vVs;={X>RPiWWbb;TH~$%AE1Qp&
zO?qN%-cd7s`kADilA9#%d3POQX4H($xM8_iVd6!FoU5VRXBfo>oe2B1bX|?e>Lq7&
z^J6dmN_bgz`O(B+<wtel;&KK`hpU2piZmtd3;2(S&+B_4(0_N&yw4eVRw`a?+}Bp^
zxs!KmcITq#c|X61KHL;2<7?jY@YC|ccaO@j9`<Dyj0}(IdufxKQy^EF#9{u*@K%_}
zMXQo^=5xc1HdRfJ&t3XD?(T|LmnWQ4%b8KxIX!Uuwt#;u#pmzVhn<(c_wB>JsW0|@
zvo%(Wzf!fA=Z&Sk&O;sJ-X}K>Oz%$h-ah@<N(nB>l{XKn$S?J}_4e|)4WE;im78oY
zSId4J&G%S%#<8alwp+{mIMMa|(t{sbrB1F_MQx^S`jos?Cem5M(u2`~l|h6dfYCv2
z>HFnT472}M+r8cD_d<9}!`syRx!b<RFWn#Ic%;z2<?Zet{kgZ^>DS*X`}SRD`u*FN
UOV?hTueN{6SH@Q}<p19U0Iy)0kpKVy

literal 0
HcmV?d00001

diff --git a/pict/file_h_nam_link.jpg b/pict/file_h_nam_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..76c9de71e733b887e1b59b6a37c53e08cb10ed3b
GIT binary patch
literal 834
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3`We1f(%T8jLd?J
z|Bo<~GcYnTFf$+n7FITPMvy2YBa$!^GYcytn*ak76C(>F3lmHWBS@S<P>4;@P)V3Q
z(8y6)L=dEgnT3fNrk#<AL6F%nP)N~nB1>Z9!h=dq|8FtyFf%eR2{H>Z*fYGn^&|4m
ztYgA&{MOH0KYg}*>JkgLiADxSQ>XGMOuNZH$#w~ojqutz^A;}*sJ}K@=xK22trWw*
zt68f#z0I~=;wf{{T&X)v;PX%O2Mk5FXSX-LUXjBmu{KiLi;rVxcFM=qwT5r=ME5KG
z=?plrD9v&I4)^^^HuBcl@@(ruFIUF2UYV44`I-V>+UZLj?#fP2-yGSK>VM04cSY(y
z_jPL$PLu>c@;AK~-hV2&C_wV#wTHVIlG>s^sjQG-@cQKB_FM3Az>8CvtzJBQlh*ot
zGwD34_1E=A@`0yDAq_{rGv_N^?Ki1d7r5=|(QFxsb!Sg}RC(9C?sE0ZGt7UJ7k+WC
zTxKAp?)F;TZu|S4eQU2*UD<HZX`ZkQ%ch9w^KBY~rB2HKyu0Ume36)R-tmu%epgJq
z`R=s*@p~T%Eg5n(c3-JGefpVUZ0|##{M4gKLM&TSJ0Dc9PHb6qQhHMIEcWClInw#Z
zmKHy7)hz3|Zx#OHpu39P1E0|TRn@UERTox!WfwZ$$Vu6MVe-|;W$RT{nxEb~e^#PW
zH7rS%f8D13a>+cGs|%!L^B;L0IuKeuH+s>P-To|F^OB{-b&NzGt4v)wDe-9i-dn4d
u#LWI`t?}hg?z;Fb2j?9w`uup!ts@*#Avd<JHFBFM<&r751WXD4zX<>f#UF_P

literal 0
HcmV?d00001

diff --git a/pict/file_h_siz_cur.jpg b/pict/file_h_siz_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..17b4fadaa92f3c5446bede9d16079305d0d9c400
GIT binary patch
literal 1007
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY45rMCf(%T8jLd?J
z|Bo;<GcYi+GBO|mRt9DkHg+aP1}0`k6bU9~7FI?!0R~29CRS!<7G|g(W=19!K~@Gu
zAz?N{B@xF$_P|6Vr$$jRK?X)<W+ql9cBncAMg~D9MImNGmcYb`!Xl213lADO1u3)s
zzs11A%*enb$SlZU&u~d!ULi7fdr{;~xzbZlWpYe*e0#BU(n3jlR;`U1cSBBUhyF@F
zo_y<6;LaoNMyKN<9duVs=bu%W8NhC-=g`N*U+uHJ;z-7Kvr?P%+ttFwo7Va5h|Jx@
zbf$LIjFe8k*V{hxsXVkfyZ1mqZ`370Ro1AhwIz$ztx{Syb@?{S$4~yGURb<SPSJl$
z?3(Sd#}Djqn<kJ}<gU$iO;!8On$TsQuiM)0g)=HRJv<@Rv9C#reIkc)tnU@UnW5{H
z^nLy_c>UHhKmJ)M**BDVS7s>Z_H!~na;F@#2rX_4*stERxM<^>QroB}%WVGD7`1e0
zI~lRN{8RATT$g$5$(biY%lJFyJ#ga4>95!pD|A=!)U_w=z869zR!{o=JJ~yb1_xtx
zkzv8=l;-)%AGO`K*nh%cO7OaCAB&`C?D)N4=O!NUp3P!abCk6^o`fs3t-bOqZS83r
zPn#dTN;%?t<-H>{T8?^D)m#X#sXjgb(9BFfs|R=EOS(&T`K8Rz_^B@`dh~YIYl#cF
zZ>3|do7#2HQ~R{>yWYNO6Ew9{-g;fjkMnkYu&ug5M_A|c+SIKpB_38T)iIj$B2_i!
zKLc-*l*Ysp*S;-_Kc|^~Mqj9B-D|%+AwM1+S{SwV`^t-nY`Vv8>VB7a<9JPD$^xs6
z8rL_hym6$~N-)}|$|m|v8sBSUwJS3%E(R{UZ+Ts4qR#hhhjn6=mpV<~Z{K^~B-B*P
zD0D^NrOs<p*1zqkJ)U2v<+=21R$@0xqMiFA?S$w@zOEhD74BH+eG)yf&T+-BS0Pz{
z_kB55-#+QL)T-39qamt|oC!`50`v2yFW(+E$3xE}(&%mI`E>%z9B2P?K2<mW^`EuZ
d@-C+rSMPRPe>?v9^6TqV|Mq@2-}UPMO#pxfaM%C<

literal 0
HcmV?d00001

diff --git a/pict/file_h_siz_link.jpg b/pict/file_h_siz_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..27527d69a2d58581d11f25c57d1bc702cf13730d
GIT binary patch
literal 749
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4D!s3f(%T8jLd?J
z|Bo<KGB7YPGcq6pHYOHUc18wf22^n-W=0lPHUS1k77%2H>0oALVqs-t5L6Tr4lGn+
zH#8CvWME`wW@2H7sbFAa5M)vmVm3^i7$nT%7}&V*ppnS`TMRtRj0{YI%z_N|3@^py
z6N0YYo-}vj^T<edX<j|slAx0TJ@Xe$jhJn|?T*^-^~?5@*<A|iJ*Q-@v+L6-#@x^y
zmCJOs7@n(6P;O}cTsr0bGiCQDAHG$be_Snm^26PeKQEo$c7ogR%c{glD%LBv8yuOV
zK6874h;rDL7Ei~pt?~OqLf>xE`Wm};YybJl(_*-+CVu8R64TU{l6<l=Rm>%0<t?9v
z8TkpbI(MxUT^Ev-d)_KCX@-tt=|qDPkDJTP)zTcb5<Uvw5NMKCz7rOuTGFl^eMr`3
z!Ci^fhyMKCy8rewCWg4%5<3D;vfIa(&W`N<+sNr^b!$%~?~IM#9g9;W^d-}DzFN42
z3!Yf#$Qyn0chTC%bAu{BO1a$7ud<uADUh>k!k3>Br@wxS`J+2kvu}sl`Yqj=nU<3h
z7C+gO5-xu1>N~>)w?9h9TsO59pBw!(`BiMKu0l|V=cTD@?pdqPNm_KvPB}BAD)`WZ
zjb{!@9$Q~CGf&%N#q1Ve=Fqtl*M|46U!|45R_A6?Q75OZyQ#(1I6);9fq7rghr6{X
LI|(l2{(lnyIy>&K

literal 0
HcmV?d00001

diff --git a/pict/file_h_uid_cur.jpg b/pict/file_h_uid_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fa1d27ea3187815a95bf7cbdf5203a6098d46cb2
GIT binary patch
literal 923
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY42H~%f(%T8jLd?J
z|Bo=#GB7Z*GBO|oW)@a9b|yv!CT2zy31%i1Rz@}f21aHkR%RAvm>e@B6N?}#gQAcy
zo1qB1V_>4FlCp}CAOj;aGcz;7XhsG>CLv}PMMKBHM&ZQ5i5rzz|KDQZVP<4t5@Z%+
zuxGf&crrKb$)t+MGXEJicgs#Xb2MwQfJ@o5RrZUnW>2#T+^ooG$C<iGO)D?NCtmGi
zrAwQE#e0>Xn{+qM-0~#cvtz2Z@k{@@ZXc_NV7|8t>W;d^b^1K4>~Hhx;yiu-_|}s}
z2Ii3hs(n(c=PtBg=)P@gS!n1oRUPhzZEdkK_J<zqm;Di?W779&P2pmXw5@XCJL?%2
z|7SRxc{TjDltctmVA1OP`@Q;XHf{Q_?IdHyiH|E6Np=U$><MwdXtniBxN6kC?vSrb
zYyK$b2X0F3K9pGAvoupeV1;;gyylilsc?;LQL;6yb~iNq8T>e&3Oa?`t-fQETO8Bp
zb20m4_lG&^DNaF4I_-}9Rq-+sUcr7bTxXu`(+k~4m!4?5suF$o)cYcaF4G$_$5!#q
zn)7U-?7XVNv}d6^!x--=@P~Q#u4MbJs+{}ipPRoZ_wn<OA2D*VyO>_N%<!PM)oAaL
zTXLH$qpqjS`|;*|<mbw)H^&z}XnC=8+S;^U<9@+2w@eRRDPYLch~7~sW^h4cop8On
zK~I+c<0#!)!|b0o4|YtOwKO$i1=~aSPnU~5jUL2Ryxo&2cd7MXcH4q^VZR0Y9Q#$%
zT70Iyy0w1M!<jq7mj6_DNxHeb<a}?X(#^8jUyC14J72ZdT2f=>%Gw!E-LBS&3f8Xf
z@%~ZNutI9_6<yK1qbABsf{h#pS{7_y{p)pnkC*<T&b)xwSN~33f6g+03fn`sn7ZyN
n^P6S6e_h`4uI%f(P?NW>&xfrFnlVK?+520N|A#I5|8D{S-(^QQ

literal 0
HcmV?d00001

diff --git a/pict/file_h_uid_link.jpg b/pict/file_h_uid_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..29bab9c18fab59b73c9f4d91010c91cc552aba61
GIT binary patch
literal 685
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4ARVuf(%T8jLd?J
z|Bo;<GB7YPGcq6pHf9!fRz{F8iZ}}+6EiED00Sd46AKG7Crk%3BNK}tD}y2%yP=S<
zsAHf=Vq;KJQLsvgm>>fa6C)EVGb>CfBNKxlv!alpW1uigVqxRNg&Uhh{@-HYVP<4t
z5@Z%+uxGf&xH32G%A}IVGXI{7S*y<My6UFT@h)tYebd$KX*Pj}4l;jITb^QZH|DvT
z-m}b3mo@{7_bNX(>292PsYrXt5wEE;KP;cmy38z}^XT0S{RgLdPNjNOA6}etl;!Ey
zk8g`&dU-FoNG7+fdS0adMB`Uxcxq@=(%A<oY+H0M9sR4q^ZNLd(pUVCKdj%)>AQ&c
z*7a4n(%sr2(Yk#5oaX0<s5hvy6m=}ro*(*^UpnTx@??{!-v+;|>;!sldt^WGf0S_Q
z;CIF<*V}scvtGDfy7a_3Ym)A}r{y~tT&2FS8?I_jH=c7vdGq<{JWoDt-1dQAl%eX%
z*+PT$MJZ-y4R@T}nsod7%a07L%!{O6Wi}MJ9hw>UsHFXzyLQx@$>)WBZuq`?_dbm;
y69m8Iu3Y?|L4p6as&#n!`qSU*))fC|SR8-r-^F=%5)WPaaF8RR#lWfl|4jh#quA&G

literal 0
HcmV?d00001

diff --git a/pict/file_h_wr_cur.jpg b/pict/file_h_wr_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bd9d380ed717fe727c1f550d0058f1c2ea5631b4
GIT binary patch
literal 1336
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY43W%?f(%T8jLd?J
z|Bo>AGcYi+GBPqC0cI9fHg-lPMg}HkR0$?#7FI?!0R|>UW@aW978Z7hCPpS^K^9g9
zAvQ%}Lq`$zz(gY_r66U|#)%6L8mp8DGB7eTv9L11R5LI#2r>yVD>@3Z7zP$9i8M}3
zT<8?E@!-d#B4yV9w-|Vs85x)anFSf_8Lsl{9@g{L?kmrDx8d5$%Bpp{-IH9?A_XS9
z%P-4vZ~S<@`@&?Gr%DHNuF3Ry+1<ahPP_1U;h#3nCzGY8?2Ohn3$ebHmgcb3Zt1JG
ztsi9leLc#G*BmyG)!P#Jb7gc~_|bRI1ftS(^3)V2ii8{N7Fe|8ZJ7FkD?u9zl9FmC
za~^p%(dKqrv-7;;%>Nl;<dXK!kNvpr@1}1WSNaY1svAFi_gX5w@U61Is-{;=p0*4O
zcKuS%Z|f)ZdVJ>ISj?wt(xg#bCghdv;=Lkr7uUSTJq;JizO!EjE8x8J?8DmJ{F0sA
z$+=~Zv?GsPoHEVHgHt-J?<z|`rpb~gh6TF=o-GkL(D6CO?1Yl^oc|1opRH!+rU&^<
zdon}aQglzd%=NHqo!X1unN>H;SRrbX{G&Yh?Y~`j=l^V)W3kHcF4v5y^4Z0#PnU>K
zd%Nr2Q!$U(hgKb0ynN#IxjUJKj%F~u^mUslC9t`^v_h}iw!Ux2L1D?=y&Gj353dRr
zx9L=A$<y9BIXjp6vuwtj?FJ1>mC5o?R^Qu};#^`YBvGGd6!D*-@afJ7rw^~i=WBLs
z4Hji{d!_Mk0?P`;0PRg7C21co$K36VO#gSd@r7)WS;zdhq4!kZ#v2~-Jfd>qSiVl-
zne_d~5AFD|eA}*;?TJTEE%LN+FAsTl{bz8Petzz$4cx*9z8gwDocJa1(3xiYCrc}y
zZ>!{v_RpX6pMgK`)5E_J=O@3szxcK%k9DtqS<fj~ZO0Ys-ZPp@xr;6DU+;2ZldGOZ
zVOZ)zvx~obj8?X9lPEdzP4t=tQ}@Q=J1p*B^KO0*{_$%6q>{`PSHq7tYnuGNyCK!*
z!5;N#2@4J5KK@*nHc9i*yOYH|28UA1QYWdpM1E(;{IN9OHug?l?wN;X52x(+pVW4D
zC(nM?$Lw#z4G-NY__5}sS=je&<$Id>RVHrOzH{4(>e=bKzMGiJ7ufo8e3p9hecO|?
zKbcDEGb}}K+?<fNV{N~7YGG~ftV{O-c@Mv>h}}0)B}c{g%5QIt^`|3uXK(QlO-npf
zWXb#4*|B|(WYLx{N9`RvKYopWbn|)CwRxd0*M~okUV1nAN89?QbC)N7Iw#CxanHBM
zdryq&?#i0XbXUHoFO@dLFWGAK_T|TGvabX7#R<K861I0^)1IVai936H%5S{9_UM}b
zGS^SaM+|Ho<(b#)p7xaK5>H6yvxyuRS~8qW6r}`uIow*5oy1+UFCTXjy8rgg?`^OA
zo_XGyP!;fg*{wRQAHmO;_|14!pYrzfZ}(+y%lYdsm3{lJp}l|m<x<VZ%Xh|K`M1J<
JtCaZvn*gK>AjALw

literal 0
HcmV?d00001

diff --git a/pict/file_h_wr_link.jpg b/pict/file_h_wr_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..709726d663f642f0a364aaea76b3c3fe44b7e3c5
GIT binary patch
literal 1014
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3^vS+f(%T8jLd?J
z|Bo=VGcYi+Ff$+nCRR3fMrIa9Mh0d^Mn)tVMkZz!RyF|!CMHH^W@ctqs2o_BL6A*R
zh~3ap*eFP(aiWrwa)}@VBQqmA6AK&6bVde2CT2xL$3P)rmcogRN<kut3pXD8=#*5X
z{QnjM4>KbJlOVGogFVAme%-@*-r9ZT8E+F;FFn2L^({M2(U~bue&_7ZymMdp_4?5_
zo{I`5ChVP?c;ck_^-tlV8;=+MY2$n{S$fK*Eh{%Ie4jaUCexH((^tuU|03(}n^94G
zEwO`d^<J@>%WLDpkG?&luyV%Yq$Ey3*EI1Ykv#vbjkau?rgAl17QPwbr!KnWbDk96
zaoaxje>-fC{b#6KemnHb>5aZ8o(WB!`QdwMukns=6FWj3vzR<>85r#5-CDjZwkyxw
zV6(WvqhJrEc5^3Bzu!txt+N;0`NI2#t-U{>Zqu9KBFok*JNIaZt<NkH?aj_pT5U1Q
zXwnH!M&;aZWp@NOTs2$r#IRs_z}d1_U8lBxTF-huef{G#37tK+dpF879$uB-J<ny5
zlXcg3qq6N8@`cwIA9`|#q4Qx*{if$@eNME!sM3|Fmr2?9&wbjdL*ng$m7ivGtxCF)
zlItpC#4x)_lxerx<HhFd)&@^gb)Em0w|zmW;1ZYr3|)O6^+i9+xXf|#=}CJkQ!M%Z
z@xz#!;A>ks^Ba#&b(vJrUmo(a{O`8wu6enZ*$f-a<&6b<XUMb8(KuoJck+6fkMo??
z`pc{Su`Qp@|1;Un|M7nJwJHYRWzV19Y&3D(Z{F1K8JsIFnQfc>r%KzYQz|C5YO+4(
zTKS1>p$1>uWDV_^b{%I3%!&NTDEK$_?)=;N*JJ)YdGqp0Y1WTBr+xQZZ|zw)N4(|J
z84)$@J$2c}o+2M>HbowjNHp4QbW&)M&ff#F`=_jZzwVy9+MKhKvo}nC{AA;DKWF|$
zZv01Mj&nP=AN85+wf9zeC7Yb5a$?-s+`~85Jl*zog7CeDuhxR^Oog9ao;dsdl8!kC
j53KB!WP6>p+w{@8BN-hR1s5s1xOMajN-3GR{=W$T5f63l

literal 0
HcmV?d00001

diff --git a/pict/hashdb_h_alert.jpg b/pict/hashdb_h_alert.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..55301aacd7eadcded069585668d40a3474c405dc
GIT binary patch
literal 2419
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
F1OTo=1pWX3

literal 0
HcmV?d00001

diff --git a/pict/hashdb_h_ig.jpg b/pict/hashdb_h_ig.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..edf80bbadc96f8b137c461a99b05dbf7beda2f34
GIT binary patch
literal 2640
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

literal 0
HcmV?d00001

diff --git a/pict/hashdb_h_nsrl.jpg b/pict/hashdb_h_nsrl.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b333af90c19ac2f680246ead9725025d5702aba7
GIT binary patch
literal 1147
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY4ED^7f(%T8jLd?J
z|Bo<qFfcGNF*6_m7FK39MkaPf2tblxWMXDv6<}asVPR%tV&{a)fJ6m_SlJkaMGPI4
zj6~TL#R3bRf|QNL6B`#6Ih&}eaR@RnF)=YQGO<IoFfcF*G6^v&8agVm6fQJ!N)lH7
ze~W>KnUR4>kXewyo?**(=bf4nCCBowC8R$o+pthkl%-`6i*Un_DIcF6KXG}v`OR&I
z#rD5U-w?KE<pKVgi>{p8<W=dW!e?^iP~eoK678L3kLs4s)A5-3yh8J>&MVo9D^I7@
z7s?1Ny?DVu)>XuCDbq6!5nJhP9W3n9ad&r{+UP6!2EGfuck!~zI%(0bw(MOKSz=6z
znjbY@H4roi^4Xx`WAI4E-Z$#eArHClMH`>pTD#SKYxwG&OFE0MxL(R^nDBrp*sG|;
za<9c|r=yWOCMufry<S&6ck1rK=yPkoUo|ked~Q?cnpsT_9aDTf9NYwW_gPH4_;S|H
zMrFHu<qXp&iJE#GiDWgsIdcYU%*`_a9WyLE8IF}_9kS${_NGwtg#E<^X8)}XP70<|
z8XW319^ZUxUC$J;_Pf!|)!#n07J4xyZJk`WXc2$r#}7$QojN@h74~qb{jqSrDN}N}
zbd&lkml|Q6TSqEyMN9Tx`WqGWYRa=^As25owRFtzGmsFuqxibL!&xY2TjceL55hhz
zkJ$2B#OT)CLt*bjUoW{}D&W70XYmm>B`&?7-y0fzq@ATaV{KM<NL|i-wKRY4^i?Lm
z9?z2M6cwJE)(~japsL`Nxjp|_?A6k1A^nPBw)=LJr<R4E^}Or$aPfrjZG8_OE|1;#
zh-oD^$GO-=5x;8h_)h;<9D4YT-ih6cmA9sdeK)Q;8@icw>gqL%Jl8D{IHtp(#vpr<
z$M)RrD8&lSxn;AfZk3wl$6bE4_O8itVbjko=h&27rW~8`?1qer;PHvCH@z*(^31*$
zHj!`t!bypjvp*%;{n>N(-x|&7w-vP3UaG3P8}EO4kMY-{ltT&AYR>UxI9Y$xHa?yp
z{A<3W{u?V6w)n}5TMkRqO*g6g6Cd((g5I`$Ghg#Q?dx9KxcucVpBvSICmwx$9DdF=
z$Z@i~c4>PQFMnji>ms94gAR8y|IV{~IjK)&&WId-ulaS_t+(t^4=+A{@@iYp&fpr~
zjV(KL7I!wNnP1Xu%hx|Er}1L3{C4So`=_6o!=oAJa>@Q>tg-v_Kl7&hPoAo|uP&Zt
R)7i7TEY5D8Y83qcCIE*}w4DF|

literal 0
HcmV?d00001

diff --git a/pict/int_b_calc.jpg b/pict/int_b_calc.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..db33eca6ba0396288096a5e37e5b3e872402cb17
GIT binary patch
literal 1824
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

literal 0
HcmV?d00001

diff --git a/pict/int_b_valid.jpg b/pict/int_b_valid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..aee869b6e65f18e68ede4ce08d69eafd8548e593
GIT binary patch
literal 1660
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwP#=ywH$jZoo1XvlFm|57^85tRv8Brua;;aG;jLeLz>`csT><~RnjLa+yf<hv!
zY>I}9go9I5Cr)w<R7x~TQW0e@Y+Sfex!FXJfsu)oiIs_kl@+3gfssjYp-_@Cv#_F}
zBa292Vd6%mpbw1`4?ev3(a0(J|1Aa{W<~}kL1sY)dxq~8l_d@d@l&>UOuCqNTTrmB
z^nrEYT91`i&T7n@`onpH1dGcb&6soVg%@6$#Vjtr$nMIj%9b}hF?AikgXSgNl-TiC
z@Y_<GgPRNse<{E9s%%bKbUINme3JIJSP<uV^xu=0(wC-Y)h?dutnTDBJ3N*-^;}@n
zwv|<1|4z$~dJ%44D9OLl=Vh*GiRz<QGV{C_%7`wUk<&A^rJT)SOId{5_4^`QbMEfj
zR9>+1n2e?S!jem_ddc=D<-4A2lk0iomalw?;kMf0>091Q>0a6WaeJxwjv^gVF-4Qf
zGnZ7ocHQR0KI`d$v?d2t#g<TEZ`VMP?LvB|_B~sE>-|Nq3-?3JpFFR02~9}ZahO%*
z;))Xw8MOPv?=tL7eH7oMnl|^;nuIysdXp5FYDZ_hn8atY=DdEt;?j-BVrv@=<0o<o
zX@%ZixniYA_QE$#8&_WC_K(fjP#Ix!T~B<%y4Bu_Eh@U#V)y25wVpLUd%vrQ`Blyu
zaHwtk%$<WL{E`-balbX?Guz2T8FQgSDZxLK)W0pC=JY~Q?sH+AcY^kpiAoylPpvuk
zN^3>n-z^r)6`o}r=-8H;v`8sjZTGaLu2x$j#TG3LoGBTc-1$1f<x;D5SML@1s2N=$
zNsCL_uT2zLan$V<|5_!@K(M$=&|*>P6?R)Xmiil>HE~P%wma;Wf-e6I?{w?4k^Ahw
zA7_>eGIQM`R}fY5Z|=*u$=2JJP5&#X>7W1LSuA_#>6g#k&6oXWD7byi_w|%4tutkb
z=Gr>$lLdbz-p!N<-Z$~|G~UIF({8`oZ*{f0m-X_kevaaHj$gl~-n_DEMSXIyVtQ0+
zRI%yhr^|O9v~x>(TpW}W=)$>fN5ZOGQ}=sGMNPX}D!=IY)~}!1IrN>Pm#^qp>AzBV
z(#u%asoIbAz1+@Sa`T>&dbne<Amj1{N7dqgpGqz1xSa9!W_W$!vKP)lGb~RZ6kl~@
zRmNWXYc>MMXV%?$eez~l;FKjh7Fne+J5TqmycASy;3OXU%`&CMW?jS<nJb%4-!{8C
z^WKZCr{3?a_+3+1!x48sFi`lyt9zF}8RvZWNS9pZE4utfUeqgtKO4JjUNhZ@PFinj
z*|f^~jsMi5<ptLa-)2u=YV+4O-1XGjQ2*k2?Mpu2*&g-m=cXs=GY(IjX{)AFGI?4{
zaLO&QMjzRn`%a?LCrgj`c7A!kePQ)9YhUSDZLgA&`h~MH_R6gGsrbX6434gfkJcCw
z=B8yHP@5^})f1Ap;MXOksfN2}xa5R-9=RDP6zm()?sI(pOyvXJCsIYu>^tJR`lZsU
zRlk(}^qNNWCMkUm^`E)fnEmvhv(swKZ~s|yJ8s#&J9e8-zTKYO(`A1-zt*DLo_AV(
z)aSXI3tw+P(JrO_TkOZb*KLb=FR9y3mb2gWaGCTH<C}($f3K5D+~qt-g!J;ibl-pS
zynb^z->uDNR#$&~)B4Y#CZqXh|D@10Vj?@sE5&qw@7FfF{qb&GcgEuOAM>2QXL~J<
H{C^VwPBXgt

literal 0
HcmV?d00001

diff --git a/pict/int_h_data.jpg b/pict/int_h_data.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cf69f3704e4de9f5ba945e4958b33a99463d0271
GIT binary patch
literal 2058
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

literal 0
HcmV?d00001

diff --git a/pict/int_h_img.jpg b/pict/int_h_img.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a22cf45eee60064970f62bbb0512f933eedb798c
GIT binary patch
literal 2005
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

literal 0
HcmV?d00001

diff --git a/pict/int_h_str.jpg b/pict/int_h_str.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f8b3e8e75183f672994acad1851bcfe21059d957
GIT binary patch
literal 1553
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3~kJef(%T8jLd?J
z|Bo=VGB7YPF*7nC0cI9fMmBaPMhHNXU}R!uVHIFtWMO1xVrFAyg-9_mGPAG>G6=CL
zvKuN1I|e2i1&K6HOi~uz__0VuOpt+ziIJI^8LAi*9D+>DiiVDXi9&_KER6@1jGX@8
zV&GwBWMC3x7G$tzc)ja~yK~6Xy@%I5zE-F?yIJqnyW*5DRWEcG?tIC$O1o{zA|<=f
zKU=TMsi#^inYlLK?Xz+DTwb`WaQov0+K02QFS?~Y^XAqoK}>fyZ2S7U_1Zl4WBZys
zKUU8?pt`5Wbzj@>Q+o2tZg;qDTz2w0H|HAxCe_%~hr1qZs!ZQyyQ}g-=05khby5qu
zv>(h2{qSm4=kkqpEt6{2B_DlcZM)Je$LMJkV?^gP(Z<3+#+Y9L+trL8uUS)8lNTwi
zJ>}z#tvb;sHl(iF87*XUNdLBdppmrq*J_i9H+S3?xc+A_e-u+On|pP{hnPxpv&+ld
zMe5dePC9;EDqME$CLzA!I=Q>%pHqwZf6Totl(2{8);!~lBB4d~%a1=?zBRMsipMRv
z=wp@4DNl9hRKAe6*z`!S&#JQdnfy_cZPwu>DhqeN>)|@*t=wnonVX#~Ibp)9@C}y_
z_3rEupZP#v^w7`JT@Ug$YbtrXusylXY>CH?wHqE6EMAZnd)iTQv$F0Ag++Nv>-SrH
z%lNQQs;<fVNBNh_Iw{wVPP@HL;D}#HVEmm7UqMHo@D=Y|Po>A)l?n>tJ#PJQ%jPiN
ztw$n^E(Ba{zvH00^udn!q}QQG)0QeK1@HJHm>s*>`$RV5WVbmJ`qb_R25WGB6|;J1
z_43WVB$ml5D#NAsr^YSa)NjN7+$}~(@jrv&&-RbL-a%LIGF^{gTwtkQru?D3(#KM~
zSa-+Qo`@3@D^)A3blwK5hVfoter0)g;;&unH^=Rfi?ec$<v3C{sdn#l^=(aIMV0P+
zJqKj0tJOqBQ=bZFyS>U&x#2!<|Mj)!Cao%boTO;Gqg~QE^7K42=66iKyS6;!%6C*V
zunrB@=xV(zbuI1hslQA&F3(%}q_^yHPixP$`X{;}%8`==q$4+6lnIr$6cnD95PPJf
z%kFJySX`cc>K);oIb}}iC9~RAeMwrkEKj;=_us(WZS1E!KmRFQ^LYNTs{K1s{Bk`{
z{J74)dUfx<dVy_aA}3nB+@5f9bUf~PzW%M{B*pK^pRZYKNA7>gma|Dmp>SR9nUtc^
zJl?r0ndcOJ%PF2J{`O;It_aJ=&5Ja?oU^GhJ*l2`{dnpwR_)1dhn99u6S_2Y*Y5CB
zeUDU?TVo#VxKy>?R`Q5mTXu`;x%*|iTx?A*$Ck34zvcb%^UuBA4gu>Ph$yOC>S$;)
z^Ks8rp7fTb_*v+`)9d1uR)!Yda<cV#ye{_psh1PCZdf6(s?Sqt>&29_fzG-UB`msT
z=sXULKQ469)?NAcWv{R4X-h(voDA!0Y1?*cn#Y^z<|o5#o@iKaTl9EQh1&AtTb|7A
z`X(5CYDGr%>9b33o%&s|S!$icdgVMTwY5iiPiWnk-?sXAcJiv&lU7sA_jE0*FY9|J
zdn+u=-m7P8N&#2G%$BuFt}l6z5`JR!&ftS~RxiCwJvxi82v^1~7o5-6my+ic_~zxw
zr`8vjt1n#L*QNejM?+!Tvc@MWuD7oTP2Dutq{c(n+Pc!}@U%PIy7_MHe;cLxWW$0r
zB83+V3uX2!Xm2r!`D5BYF=W+_w~Dg$amJ1dco{O79i$j8ur-)4LOINw+hq-V*0=As
YEn$3mXP@+jncpAZTwuI_m+}8i077+s_W%F@

literal 0
HcmV?d00001

diff --git a/pict/int_h_tl.jpg b/pict/int_h_tl.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d1afeed84e02ea11d23704a72ee1c23213c89cb5
GIT binary patch
literal 1124
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3^B}%f(%T8jLd?J
z|Bo;<FfcGNF*7nC0aiv9CN_3vMhHNXU}R!uVHIFtWMO1sVqj%vh3H~pWM*L%WKa}h
zGh}xROjHssR2H3R<P;<#F37;d#Kg$V%nCPyQIN@ySuwFu$T4uDk(017%l}&pJj{#?
zOoGgU4E7AKcl~g8_Ig`)vG-bvpXA@Vhc65)w5Ls6yroc-hhbBn^x7ZFk9JpH&&vFC
z*k!WS`HV2H%#&fJWhSP*oBIDVsOFq7l$mgbfyGCrRMh*EnsKjO+lI@vEd9yf*6mih
zsU^7~<*n$J>VGQwcmJelWYp9=beUMZ#<t8WxoO6Uw|~=2UKYr2O5M3ZGSWDCV(nW4
zjh1z@>N}K#^!255%d!$YHrOtIJ)I{yf1{&0Z-4{q6{XPFiGsqVq1X1a{_Rvgb^2Df
z^Ayobx2F`$4O8vTo|<{_#%%kEYUaL4SF=?$Prln5q;=j?tjF|EBtyg}9c7kRA9H2@
zGsI>8-T8Ud)|<yAg{sfIxgxN7aisU0%LZy1JdrB#$z89Ca#`!NJRiHd-Ek1VQ7yeF
z>}(a!?-PY-1~GDp*8_aK&xwkMW^N9eFmbExUEeE;b3-+EPB_uw=Inh!)V08)`{SY4
zW~*1Xaql|8%eeUW7LUErHB4P@zGh9DyH@=x`{r`J{@JgK5|eKo@~aYjcH7llrah{G
zdDo=HA5W+FTPv;GzWm#t_Ga&G&Bgy2mfSA0QVGws`deD^;?1J<k~-ZCLNjikSL=Vc
zukiErlIu<WyqiR4F59y1&E12yi-NareYyE*gx;T^n8m^#55F=z;?Vqbam&?Yt`mHF
z3vcZDn`>$nQ>Hd2b;ct8OLK!3GS=BB=rrbZObP$>DtGDZg54)v|1-pv+ikzTu6lR4
z&^66dZ;a#nr_D1lyL!~cFzmo(?lrkrv$YO=;hZ%;eahM1_-)IaPp^p-<-QQ!skDph
zm7Ghcz;uq?%glbfUK;E-S4HxBRouyIS(+<uJ+)u%JD;yKrYXo=(ZarXVrTi^t<RQm
z|N2{6dNXqScQ%8fY=gb?@5xN8F>(0)QE+k5P94FoY@OU)6Q=VYTfP6hy>F`8%Q*Et
z%v(ymv!bmg)-AkPXCVHl@IuB+rxI6@>x~?GKYwN)-?Y}wSMk`+h6`*BCX5Ss8Cj2a
reL60aKVRa4@B)R3kA4=9dpACoVk%)=plI>5u;+RGbt$G2_Ww5l7DS<-

literal 0
HcmV?d00001

diff --git a/pict/int_h_unalloc.jpg b/pict/int_h_unalloc.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ce7fa58139f09bb12d104c9715a5232e7653aa1e
GIT binary patch
literal 2398
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
Y?q$%sQ+mv3?!TQc7pQ{_mH&Se0IO*t{{R30

literal 0
HcmV?d00001

diff --git a/pict/logo.jpg b/pict/logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0d9c29c3826757ccb30110bebf418ddc79121a3c
GIT binary patch
literal 39208
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_dat_cur.jpg b/pict/main_t_dat_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..02bf5442e84a7dec1a0f90f16c75a33c9490666a
GIT binary patch
literal 2140
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
X_T@dg`r9V=@8SEtr=r$e|9=wz&+MzJ

literal 0
HcmV?d00001

diff --git a/pict/main_t_dat_link.jpg b/pict/main_t_dat_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e40990093dfef4c2c9591bc360abf67f1a7a91d0
GIT binary patch
literal 1821
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_fil_cur.jpg b/pict/main_t_fil_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..91a4a83e20501b946b05609807e09d7e5908d2be
GIT binary patch
literal 2312
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
QWH*RDK98$e`~Tkr0P$@Kp8x;=

literal 0
HcmV?d00001

diff --git a/pict/main_t_fil_link.jpg b/pict/main_t_fil_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..82b814c7d6cca4dfbc31853f308104f9506c733c
GIT binary patch
literal 2002
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
LoX9kE{{Nc*#u$ir

literal 0
HcmV?d00001

diff --git a/pict/main_t_fil_org.jpg b/pict/main_t_fil_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..150bdb49620d650abb431975e7a90b6de2d89f4c
GIT binary patch
literal 1416
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?<Brf(%T8jLd?J
z|Bo=VGcYnRGcqzVGQa^7GYcyt8#^Od0xk;j2op04n*akN6Eh13D+?1dM2?A(nL&_6
zQAjvAaN)&Cmsr`v3>^~-l^TsiL?=2GDH{tiFflSSvoJBktzZ-kWD*flVpcSCWJwfm
zJa{qb|1Aa{W<~}kL1sY)dxpQ)`X=?xDy;nIE@Lu_>sCkiOS!s#*}1WP=j<ePqE_Xr
zxeEUYvW(wRqQ@*%{E8`Pr%!rmNT};1m01xhO+41+A6%yV!-U^xp{k2xUe>A(d&#pl
zK~YJ?T#wr==Q3xP9?9T7=2|KiACboTdizZwuUD?zFK%dfl}{83`rei(?-*)t{`CFE
zz8h?!E0#EQYG%%HOU&LIHb?AVt;|t9bK@;S&RG>Vm#G`9vwReOaqUaydj5R}H{W+L
zX0wP(cInVsbf@n?eDCIq%Osm+IzPun3GZ(*ie7EXvfXvV8P%$@KWzU_Wtp0CWum_R
z?Qbu?wIv+?VVgbU!Y=b!Vs~VfOD2aHbJXoASNc4qkLm0}{}30~e?f}BU1~X=BpG&V
z-{-#cwfkw#eA})h+rmdGx87zuG+k~jX%!R|zh!B;e%i&$$B#V}{Ie?O;J;)^lS}97
z^;4(4pS^CvtX*jeeY#g&BbOW%dlM@4$?Ug2YrNTg@m7|1SFE1iel%HFdgY@Hx_8|V
z*{o8RUnPD;Z;^SSi|@*FU;Z;}65-q?)c<nX#yeGpiCe`&uR4~w*fV_o5S<h`w@YtY
zs#;7&)=YNBYpbF+2E9<&safHFR*6^i<l%*iIWtx!%rYsOyU<kZ%A^m1JnPPeA1Y8v
zwS4E=_Da&&v~au70#12HP2I1v7Dnycw29@;<v(JItLN;=l+9#~&J>V2BF)48Xr=0=
zD~%D|O9e`&9o<!w_i2yPj%93ju5@_??@u~g^T2E8*Lg<_I1UEBUbX5(&uj($3A>i3
zPkFLS)k1jH)W1?cvs-TN@|RMWdb_Kl{95pwtGiVfsfs)a7Kjf&vr;N$YK&`SL?_#+
z$YZxHu4miF|CTZRlT#V@Wy*40;Z3F&{;mAD;`;L2%m2)+Kbp3)#r;x>8E4mt$*)Cf
zeWsqfcT{$}`<!ndJ{&EXesWhw*<HEf+lLSHDyzLxyj@axKA)e*q-XYu_S}olZTHw1
zTr$dA1XX|7gC@#V?)w#eFi{Sdo&MEmbC8PHR)N3WeS7~id`XCvk&Hb&DR%dw!0oq7
z+?(fFou4er{%5gDX5}(g7KR1^CI$x%Mg|2aQ{LwEoNwMuR}P=Lcw6$FwQ~PyoujXO
z<|c2G?&#C%iCc2=nswq1cTqR}pp@6L8}2A~Ef!yCRN8kVPw;49_m!De$8*d%9<6|C
qX(<dz`l{x)@iy-vi&chIlhq^Mwmp;ymDuY!c}>~j0<sMJe-i-iJS|oL

literal 0
HcmV?d00001

diff --git a/pict/main_t_ftype_cur.jpg b/pict/main_t_ftype_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c72918d7f8ec4f6cdc160c79efc6720535976adc
GIT binary patch
literal 2081
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_ftype_link.jpg b/pict/main_t_ftype_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9161ec5fdc1ea495905da6173620490adf293c13
GIT binary patch
literal 1764
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_ftype_org.jpg b/pict/main_t_ftype_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..801c1b075a92baeae0b4e1c39f1cd43d09c7ddc2
GIT binary patch
literal 1340
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?<Brf(%T8jLd?J
z|Bo<qFfcMQFf%eTGQa^dBNHnN8#^Nez=atY7@3$^*aW~72Ma4JR0|^$GlL+DqL6T~
z;l)XdF0rzSB~DZlaSSYMG+yWwq%2w_$iT$F#>mRR#0)cwQ8186h*?BQ(a=$tC9$ya
zVAB6v3_Q$?3`~N|f(-Tyf3NjT>YY`x=a+Mzj*rSM20OveU!N_TdgWX4VWGBFvmcyt
z_|Gs=F8rHZYeV&}nkjEOW;b8*T0ZmQ<*i+>9h4Fx8hp++9Z<@XTK=rNNv*HgX;Iq2
z9B!{U84K;Q7@P~%Km9B2TdK6Ybc@!@NlS!M>fH1m&Uai?xn3`-DY#{+ET_0<=Z^5t
zmV)K;E||T@40*NBlaq0(^rg#XPWQK%`|3~JD%U#s%!`mot2=xef|{BfJ?u}&%2(t`
zUSpp1>Cu9TEg?CaU(QK4N1mu(eR}<!f2%)Fz3=mUQBd21Yem}cUVaMRr1VbmOMkil
zq`4D$5583SJf%<J?2>)~2D>EXU+oKJdfW_Ct1ni?8SY&t`1!`M#rxzGh41{0l2UB%
zJubkY@K^cdymh|Dm%F968vB>}&X{lUSa|80>Qy;MejZY~R%y9t_KGFCW*b66nv)tf
zXb9)Hl^nfzbXMrX{-oDFyJDi=ozOkBmW$o1M=~St$t{DUUN_1XupPSadTC}rlxqv)
zg83X1MT155yI5wJyz(eCzQomaThr&vGZp>14Q`uC-~OF<YU;LKugrtCOfiW$Vk{Qt
z(-J&aOJs}R#$D;FZWL&UL}{rkV49@s5%A;Jg0lg)e1&|K`F01yRVZ%VU8^C^b4gV{
zq^ouDbAjz!rieFtB}A<%JgW99<khwL(cun3%lNu4%SVW<Tm9qD+<dU#uK0;<e7AD5
z@N<stNUnXU9+$OL5BRKMQchcO?6$?F)!*b_B+k$8*S;q-<=^B@R#ATo|IA&mcf)@M
z^$XW88Aks+a>Ybf%}c%_JoN5)GpoC@edW0qpWAMkC-FS<cG^nC+a;CfbJg3#dS@+Z
zhe|}5WlfUZ?mp++rHaIio2xv^?#dP4_I%j7m?p|^?wj-UMMTi)zSG~<hSfE=hAgsQ
zw0L#(uMc|5+1}o<<lgkt%j&m$a*NGRcAo@^4i<(60VW0q4n_tA2=n;6-ww+~c3&y}
zBYpC^%ul%)Ni&YVvgv*Dx?PbcSYogH#65Eho+x%Di?8@(K6#x?i=j`_S2?#&rH3c9
zY4*e|K5@@)N0Go$!|p4U(kHL;IY}%ttm;>;w0d~LS>%|0;FEmy7)uVaj5L<m>stNc
Qw*Hg31y3T9X8ykk09nWso&W#<

literal 0
HcmV?d00001

diff --git a/pict/main_t_img_cur.jpg b/pict/main_t_img_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5de656e4a65246e1acc8983fa96cc3ff01b100f4
GIT binary patch
literal 2353
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
V^|`!9SAW~&{sVbp+Un5%Hvv3P7U%!~

literal 0
HcmV?d00001

diff --git a/pict/main_t_img_link.jpg b/pict/main_t_img_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..51c1654dfb95cffed252a2ecfdb1937713f13c62
GIT binary patch
literal 2044
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_img_org.jpg b/pict/main_t_img_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bdc0d2935524e5896b803c1a4bc4c788dc86f2d3
GIT binary patch
literal 1487
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?<Brf(%T8jLd?J
z|Bo<qF)%VPF*7nUAOIs1GYcylJ0k=j#2FZwnON8a7?>EDnAllaIiY$OnV1;_g;*3X
zE)ouAWiwQobV<xHFtKoA<3b~+AZ23_(T##2Eo@9oOw2ID7zG2F6or(SSwsvS6NNt<
zY+RW1{}uxeGb00&AhRHYJ;U#H{+g59^)~x0@|20uyu@J7_4D`lwOf;_&Az3~{MqKm
zF)ysuB}4C8;0^7Q<)+G)^W|a$<&92yID|MIbxzpyh~f89*R!rQ74k1r%+tKxcS~`9
zFZi2z*LmGDg_)LZUMk0xj&=T;p&=jae%7PA-;PTz_q0=+nvCv`sF%t4h09CD*St`9
zwv*-bwuD6{-b*$$-2b%r*@_7}&hGe@+&{1A`NU*{88`nkFicWv+~?XL67!_wN3Z6A
zlmGT>{|)#XH1~<$>V=wTEsJNXz3dQINVH-<wZ2sF<E$^ye`TgIs!4n>Yq)z`e%stD
zemk}2owAx1;ug4If=I8(JB4ptu4jJMEa_+o61*kOx&2c2teNqW>ot7Uf?Uiy-H$Nv
zUkUuwSJzTxJ|RE1duP{usrOqK)&8(}W%Kcs%Dwq!69rk0vve>h{8@c+f7!B`FK^wh
z3^uiF+2}iQp2l78U7~>nCiCZ3zB?-YcG)`LS!|qqiOc#@JHHpYNekHCQSn?LcX2`g
z)byz**QE+v_3GKZEzl@ok%OFjO>Ti>a%1(ff447dcj)C5SL;`PNWB+h>^YrZGRAw^
zH*TdzW_#PWt+C;3Gi>?i*t+=42_>WG9iIdQj;s-F*!o3u@B5gi>7Gjsf14NcZThq_
zAz-Dpo~YC5<(oZ~4(-m$ZPqT>=XFwN=Csqws}9Qu>8yErwe#Q&2Dx7|c4&Fs{H`V!
zHM?oGNn+!Uq_cv7#nlaL`umo4*(_dr+|E9=r=sZRj7N8uOg?jM((AjOYl|2Ar*B#p
zBdIQOf9c<;9?yI>r+T{erg<uA9bnjT*ywxjmufBN4(-gHKa8A>m&L_wJ|wA<sdva#
z_9my@@84M~JDOr9XP)JFdgIZVm1&2$7RKK-G%o9A)zHtCyA?4jxmfh`pV>S2rB3M*
zQ*-d$!Wd<insz(qakTkg{x9a~zkdHt`Vn>gXS{3X)W5}_a=G93f2xxC7sT`abN7Zf
zrDloWF8$tIX>+@Lw~fqu-zPsVS4=-0`PA&qT^C#P$&Y;>#p@dNoxS3Gxzf($p6aK|
z8UrBVy7=X}xIW1<lWu?7o$<S2)moRD?!I;Ux9=pzo|CcO&13dGYU^+LW{&S~<Ze9>
z4B%pP&|qa)Ai~rDVKU0kezVX|bNY(+f26(FZN5^KoVB?6N)7MQ>%LBAtIYShAGj4;
caz%MS1l_)`*jUduyKd=qU)SDM^Z(xj04Z8yM*si-

literal 0
HcmV?d00001

diff --git a/pict/main_t_met_cur.jpg b/pict/main_t_met_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..64016bdeca984d722a58c4321800da4a43b1907b
GIT binary patch
literal 2151
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_met_link.jpg b/pict/main_t_met_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cfe4494153ffe652e09299998e4cab5dd2aadb87
GIT binary patch
literal 1832
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?<Brf(%T8jLd?J
z|Bo>AGcYnRvNAFt0aivPW)?PfMn(o^Mn+^AkT@%w00RRH3o|<t3mY>;5+uwZ$jT-p
z9IR+~and3YF{Mk1jT6}&0}Gvkj29LuiwZI@F)}l;F)^|*L+xQ?5)@(%R8ll_6lM`g
zENq;((J1I(66^n43_Q$?3`~N|f(-Ty-@|ex7u{K{7ZB*&a$xZm2KI;Y_BI#09+f2@
z4p!Ke`$H*!|0~DSy2J|`_}=d8taMVoBRhHK!oTM?ug-m~Co%t`gW<`LGyXb3A_orT
zw%wEeY<Bmy@^a-lGQshuC(a3pt>b<vU!2pmRB&mg`Py5T?{_tvb#I!T7_9PWR#VU_
zRe8@tfx?x_>eA8Keu{3oVarb3|7O6zaZR&<jkDpq?zfhwe->?j@^8{#NwdQtd5epp
zU$45W60<clJVi8WnX9njR3CNYWemoKPSJ-nKA#NTv5$3k_JiJ?>wmHCdfFU*Hb&>!
zGOekTcy6tD>B=h9c!j}NXvV)ueY&?7`&g<@G+XJqdST>2_fPTp@!PJ}yqlQB?)zBA
z_O*EKm8^#XHb)kfOjG1xNZ@VWrL5=a)Vq#<a*Ru&q;&f3+#&;2hxao@o7zt+9}E?6
zInMdZ(NRXpZsJXg^;M-y*X?)t_SoyHm}=!Mt!<H)LdCdDb6aHeLN6L+b{=y%mSED|
zQSM*kecI$@_Ua#E?jfF2A190OgmkD1%-~?);NVGpJMGQXceh_mpQ8AV?__7Hl!oIh
zSN;wLhQCgVKb<#p^c*ox?Y`I*FR_2?roELSUuD0%^qPHow~`Zwj)jN<0|)<0nVC;_
zE-QI-?5)q{UAZgb*CYpfN4%SzCH|VLJMxi9{gzNwanX4z!aPE>{Fxr4ajDh4o00na
z*wL9R4!pBs*lydX$se*^GyhA%RB<WS=#P3nkNUgyc76P1SiyS9JL*D0nikiW(pAfA
zW~cLT6-|BgEKr86h<k}KbM6=ZQ>v9S-p}6sGun@T`Bjdu&vQa8!<|>u=g2Mf*v@74
zi&ysYtF<C^&NF9Tu{L3FbQQ6x;K)hJ>}0SDJTI^67IZ)4(aZBQ7avxec5jJq)}?*Z
zckz~9nvilc%e!UrqF`4aE^ZNrBY_Gc=WkExEAC5v^p&Og)9q#U>Rj!4zPqQ3fByYJ
zTgOswr(R6oyzlw3anHACUzt^27iBna#m5yp9GTloZmTRkQk*ErXmTu=cjD>C{!%Ru
zHG^K2)Jm@N@OyIUiQ|=(=6~H*#_YJg*=cIX%HRtNgKslWnQEjlGchoIwMLApumGP0
zmuKILdy)mm44cbU-qqN<1U@=(yJYc`)J<<*UFDpbc4y_5ly6O|lHT=cboxx<^Kn$_
zn9|2?V93)KoX04fdz)YRRLh-ou`4_6*B?0ElxcFENi%=@b?(!8ceY$gIXa2cOl!K-
zX^9!)u|i!Li}LQ=Y@gVp_2{mF{t;!@XUUPOX1D+Ce?Bw(@!6wp^V1jB?hD#??MANu
z&H`57mRsLd1KPExOp?*mlW=ial;o9=ySd-~)HHLm2S4oW-F_@Il`<)rdpXzXZ}Pll
z+cq=rn(Q*spsPVyw?UA1TASHTUiI4ce{B)pettUoVaoDf{wbN+Z?8YO)xF#QtCjd$
zf$F~xjoBVgNlEy5sA%`hvwe9o9q*;n*K9Ye-8gsIy)#>!kKKH&dnP_dS8m|gt|xC#
z`6R<r7#LZ1d3O2_hR#42dnK23`aho}>iNl77V#MUSt|8iUYV=(6?;v9NCy*x0|z66
z0t-Wf0E8L*y=H+Ym)4!)e|?KS_I#H$IlAKPjxSc-$D~^gvyAg>`4)X_d*~C@bGzSp
o#h%0+!D5Te9$$E+FOergTZO@9kB<JePW{t;OuBQKuK)j=06X&SN&o-=

literal 0
HcmV?d00001

diff --git a/pict/main_t_met_org.jpg b/pict/main_t_met_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e5c014064d8e9c2bc1ced606167c1fa897eaecfa
GIT binary patch
literal 1399
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?<Brf(%T8jLd?J
z|Bo<qGB7eQF*7nUAOJHfBNGc7J0l|lsyG896Eh2&0ElAdVqs;4>R@DIW)Nf%5)M{0
zyf|smB@tFOvBbiON`Z||LB@^?i<CtL8JHNEnOPYaVLBKX1p}Fwg_J}T4IPD95(^tA
zZcO@ri-Cukk%38&S&+e=;rCiuRcVu#m0#LrB4&7=Vz3i@{{C$4>XkS9c_vA%%D*_J
z@sCT<{tYi8*v0*u<^~F$k()eoUis-b@1q<(GgPci8Z|3_x`yAGS-mf8@h7S0F&mEs
zeBfQWT|Hrqs`12$=UKmNO!yZz$8rC!KkMJ6Uln++c(lY^=2)kzg6gI)wFaH1@`A!=
zT`QiH+T3fK>$^1Ptlzmq0e2VWbk6ByQ~Y~UZ2QxR{%2RnYk5gAW=!3pDHftWE78HR
z_GI_IwBGZ^3wYZ(GR%CM{%)E-$KO=&SnYxX&*tn{>Mic7Idv(wk?>h#zATw^r#QX&
zoK}m}XM|s{*i|F)s-u{FN#}D-8OPb4ataK!F3!K&7mAAa#GSgn>B^p@KWisH-{_}&
zT~5jG`Kt>Td2Dhl8W`D6SsLHnxvb>Tu`kOqj|L~HUo)KSt5X<qqw{M^ug=n}Mpjqv
zLfxgu!;dH>+|F2atGMDxPiVXM$-gD05ATRv$@n!>Z)(fRo!wcgMq4vnG7CDdEd7`8
zs#Is!Rr9Y4wR5kCGis<Tv^=TgtP{DiuPt-S{TD93v_wO)ZUuYlYOqOdRW6&^WF&3(
zaz@*nli5)n#aCXgt-2bj{FdQC%9^!ilP16OojB*{x_2|Z#ogvl5*H14ygo!_;qsVV
z9kba9Q@VqLuGFYc3goMv7BDG(=Pb3uoK<r#U3z(9+u6wmQw5b~YMehNc3YP9UE;bY
zUdy!?En6b);o)G)>f-6;F~NV!nLkM;J3QtF7S|t4bPNjinf5Ad_O-v;8rd#LPW>#n
zbhE6_rs!*d7r~*Tt7@`|YhS9zWi8bMKARW?Ze|;9JCzywLH<STJh^{idsH=l`m1Cv
z{q_7)F86KuCtpmz^o0E@H03$%IjQ}e_}$ez&-Q&!Pujih#m9Nq{NAK5xjng5;O#D(
z^sSS3^C}M<TX1u&<>?C>mQI(QerapU--gbxMe-L5v$KD_(^>ZH?ChP~MnAkvzu6rV
ze15|6QNs}j0VW0q4n_tA7KR2elUY9e6w8#Q_ZH88aLaGT`NGQ*tMse-nKP{tcerVF
z-&=g(mfws#!LCK$S9~y=yiB?!X~o`GHoQw-wmqb+!WnyCX~(zg?0fRE?NPF*|Nol+
D-4-YD

literal 0
HcmV?d00001

diff --git a/pict/main_t_srch_cur.jpg b/pict/main_t_srch_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9b99415c84b83ea6f473c103c520fa01cee888ae
GIT binary patch
literal 2497
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

literal 0
HcmV?d00001

diff --git a/pict/main_t_srch_link.jpg b/pict/main_t_srch_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8087c4a48bb9a39e1b063f4bca601a0657ad0645
GIT binary patch
literal 2184
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
Q;(y8AF&DbAs{a2?0L+QKk^lez

literal 0
HcmV?d00001

diff --git a/pict/menu_b_add.jpg b/pict/menu_b_add.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9a50a3c0b18105b65b81bd13c62faf37aa0b9288
GIT binary patch
literal 2208
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hg<Lnc6K&SPA)D^P99Xi$jr>l
z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAP0jO!*XUuK?Wv4MrJ|A|3?^R
zGcYnRF|sl;AOH&+6C*P#I|nBtBLfpNBeE1D3ll3FGrIr-0}C@73kxeVR3jr3GYbPN
zo8U!Zkx=%DLcvoM4Ht1Z1~x8KN^}w}oMdd`DlW*t$i&RX%FM*Z3^9?Bfk}{=CGet9
z2&<@~;pD|4j){dz!i^IbZZvW__)t0M|1Aa{X0Reb2788IbCs5Q{N3QA=I6TFIJ#w~
z&JhcSo4JcKMC>MhE_!B=RM`-nDY9<n(Fps#CAa@6oR@I^KG(UUcm4ti=C@KOcb&EN
zVY;>1v*XFe1ItXV{0%=^`zh$_E!WOwpO-6tt#A9O>32!TM=IUd|7wl-NzX0a!fZ1y
z2Y-#{{S=g|bmZW&k}H4157$hY?Xl4ybFQg<=!g5NYL|3EtIn;x&AWHmvZ=ipyS?gW
zPMWIhtIk*Gs^XaH(Ug?um-uH&z|s%=JrPT<{F&Jlvh3*b2|on?PM>nua?-4r9}Hq4
zd&9ShE;ZC!t66&U?90qeY^C~hmuZQz3M%#lYcMU>Xms$fQ<CQh$*NDvoNBnlrb=b6
z<zy+j8v?Z<)4sCZ+#RcSR{oT%WyGBo+dXfkTb})->9wGv|4T>NiYTRs2X<T&mu>hU
z@aNj=o7e7~o-VeTJ!l)B7elgn!HZ5AhMM*%&lx{<q^<68U8_>f)b5j9AyJn-A#173
zPnNqzSvMbtHn^&5$b|SDU{3fnW0`=wz$Tl!Yd5y>v4~E%G|R<-%Z=4=nfj}J%C%FL
zXNsvoIMQ#H+;Z(~^vUe}wZ84QrrE@#gkY(py44T&o$_50F+=3ojQOj6<ZqgsDW+@m
z<-mW2v;Ljy+kWesO-$<AvTSxiw2;HuvmcDIr0%f^v)@w5_Oa<YddoW}<haq5*=Gc@
z_zVSOou<z}ag@=3;g)>FM*r2`bL7}RWvGcYthkctKjqoH+(IUM?YVAcH!Z8f+6!0=
zIaq}{{w$t*bv4JVm+9@I7haYu{S@`B<3r@sL+adKD_z*Xa$Gv1+nL<H=(M2S!ipB3
zkVG>zrCO(t9Ighlg~38fGkiNc<_GL?67*3!a>Rc{oFd0E;iM$>EBXR0!JHc_mRFiB
zF8%(#ROQpkS!*=rPQ9JzRI183Nq2ci$mdTomVCcrCST#<oh@=mb7J6zV_W<JnTy&(
zmt}>_%GE4R`uW*HLg>)3YHQ9%wH|*gU0!9aRKIeTp~vX<5f^vC?}AT1t(a}U>G#dI
zzZTz--7;lM?vB~K(Wm9ks9a`SwRxJHt5wCU9lf(Rlzer5+Gi%>z-JZ}%<x0*_N=zm
z&MS>#zRPd7?Gt3vJ942mMw;VS|B;A2nJZRl&Uu-TH0?p{f;!G8yEZj{dmH6ZyGeC(
zDF0SVmj4Vz{<?FF{xe*h>+|wSqqzS)tAdm7N>xQ`vz^w=owM-lkD@6KIud(>*PN(Z
z_+-<@LorbW4F41uI9izNR>+^z+Ovvt?egDl4tkBh7Tpg@NIu`R(fr%%T_X2ByfuxC
zc>CGDAjnEReda|`<>UUU>SxbQs(E?NP-u?M%qdEmS|O)awKC5-uW#}3-pjPheknVb
zInOuQ<6zyK!2U%>$<cs~+jd{E+QxI~cNk~*>lNDn+F0JceeZ%bEB-#d+k2|i%e$;T
ze|4D7EYGs8h@b49&u15PZ4SMZ5|Gw;KCyvo!VLErckUZr&5oMWd1cZP_L-X{JdHV&
z8~ZPRt#!XVw=sI*;#nup&xmeZQZJah$3j079L0T6+PN(^W^{h#KB6dcD96X;SL-8z
zF1(54sBHOLX#u~@O#<A{Gn*84u+CQ5`;0+vt5?nJo4-~sOBBnwEGiQHtwH2~UA@QF
zr4~Cs&#~n6`#W`R-1N7>Clmkq%{stzf0k(DWz9H^k{<iVfqHob|1QYya1UI)t@Qv`
zGxH0V!n%eJKLuj?n*O@B%nEyyzrx_~uZhPW91Y)O_Mc(BO^H(t!`Uka9~pFt&M#i5
z{&Iyv^~PgQZy5)!XMVjT)9$jAzE5*+?fI;wAKP0!XTII_b>7qP$+BTFGufqn&%5gV
z@L^C|b>3cctvxedZF+LT;`*I$tK#{&CL7-_eYrFA$??$XYL3VDJ>MGiqatMHyxZ%2
zPpwz8TC>xL&-A<Ps_BOhEjjb;ZdG1rrQy}olM@Qp?|d7wPfk=VecS8HMXOKtt=98t
z?yUq_ZpSN!5R6KZ$v#&ds^8x1KJ)FaFLzdbN?vt(vcluI;#(_gY@}??=U!h1cjaf0
zD<52ZhT_UOAXl>WqquSp*p()gD6V`Ca^=CrsIIgGxf0nyP*;BVkn!1ed)(})aXzJy
zMMOJt(TY=Xf!k6oOIF$`HY{X*rNqYZWxD%v=Kl;{P41gz><>?|54b90|Jdu={PL~$
zH)d@#=G6bVu5o7fq{9~0hLt;iR=Usd&42ndcYemJm#pkvA65FdGj|F0C?2!FJ^fdV
dYvq+cFViaQ%LNYb7#vd)__ybwoW1t{n*aigvH}1A

literal 0
HcmV?d00001

diff --git a/pict/menu_b_analyze.jpg b/pict/menu_b_analyze.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ab8cad740061be354bf0a27cae798a6e5ec391ef
GIT binary patch
literal 2758
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_back.jpg b/pict/menu_b_back.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d42433316343b73e8ca5aa4ee1b72df7e3ab1e19
GIT binary patch
literal 2410
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
WKRuFQY?C<RB%g2L-hZ_I|4jg6g!z5|

literal 0
HcmV?d00001

diff --git a/pict/menu_b_cancel.jpg b/pict/menu_b_cancel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1e0de235f772b19076b3f91d97df469dc27bf0bb
GIT binary patch
literal 1632
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwP#K6eF#Kg>i1ejTwSQy#Z85tRv85xnp85o(ESy%-a7+9Fu*ce!tIU#Z&Q3gR)
zp+&(WDQt>{6DJ9)ItD6<7A{OmY}^>6Y}~BEF37;h#L5D~FpC(O1Q#YTD=P{Kix>v7
zI5tk)c<@7F;X@^(p#QfRc$gU(m;{*x8SELpo0U9kaag@e+Reac<v9lidy5aUg=;-l
zUO648CVEr6Q9yyAZbDyr^^qU4nh9yQA57n(H1|-2Tkby2YA4x)hm3PSc;6Cu$0s;D
zzbWoQdqF|Z?HZwPE!NE~i|@>SpP&1AtK%atou40OtXcV1z_?vIV(Lbv%!ZzBJ2goL
zw`+M;PeN_fr^d6&9m$-^UVR}urFgny*f~jWtBbFTw?#?^Z&KH4)n{gOad2>96VJ1p
z(6?fr;u`0OuH4xrZ#P{&8ECvM(LW?-*@sXMLBnOL6GP@slx%3XSZ}>}d)DzwtUGRV
z9Oay{?&74Pv{hPn`aCA=uwpYxSQyASVTG#T3<3MuQ$lSIt#adLJkr)3`+3vd1rHBL
zt+hN{HtDR+<Q6`cWk&ppU5QL*++vbm7d_GuU3dMPqQw0W&i8X?tmG?swdL_dORhHU
z78dS|oYsZR1v7dUg*`q0v;3mlv0n@G!Qs(U-MWK_ph}zlVEPutJ2Gl))}~BuE(?D!
zuzzUJY2DCTb#j~bloNr!d=eNn{wzB4JuuX%|J#MDHmq75B1?UqO=w_nSN*Q{)YWRu
zCS6zONqce>4?4V-aJif`=h^He@ijhfS0$I-XnoDmyUN&iBlk5y>5w##xRTk5vt~#1
zBV2NWm*mYVO<nhW*?TVIkXH|yRaf?BE?SkbhI7RNozMwZi$dN;=}u<sk+IjiZ62|0
z+U@Ci8~Y#n$mgDTQl#SX`YP|wsM}k`dNVbHWUkcYTnKdcShY!GWrmE-_8yn{o@_2!
z>4wXUJGUM>zG(G!=XiOCXLmwk6-thpvAy%pvAcPCbIzx>s&4Z$j+-8Y1iKq>S?93E
zI)rdB2&+Fbym@=edhd=6C8A=QUt&!RU+<GnT;iE^|8wqx#k<bhnjcwl>DUA}lkmP!
z%}}Gvy}s9cPc(F%H4-@aQ|F^b%Ol<2uLH7vl)YG0GgYZ&_ia0^`5blLv1h&3<jF3N
zT)y?@*%kfM5~pTu*pZ?&=g^|$M?L{F9Tk{5&OFyw_?4_}KI8bJwMUEGFV>1|ertI)
z<TlgZV>j-&-@NLjC8AoqPAu!G_`12ltieotw^ya8UFq#&+0@x1%vZRmy1S;gXunI}
zgz`nN*LZ!{pSA4%#+O^TzD9o7@q4TKn+J3I8D^f+v)Q&b>feRl*+zUd&*gHj8E&}s
z_P&O!j=TPp#{5~i9dR3byx#_b7#linEjGC=us2a~t6Sza#i~QfSv{9?oW8cWT~!WS
zaM7q^ro%%)p`cqU{Y2$$J;W6F8wG^t+~2^E^lf5jXsuw~vFQ=LNlHIM{daEqtp4~v
zLt4;};`#5UOMKP;c=*qG_1i_qB}3}B-TGB5^w((mbGhOjS+-^06xW^n$5UIk>W!P!
z62B@n+qzY646Z89>+FwTwVTJ(BYjcw^;hc-^9D)2nDO=3>J5iO+UTw*W&SPQ`rxzw
z{K6}a&OG?>?yrAb`#1BN{n@|is?M~Kd)9WGyu0l+3+Er7Ql)!yv;S9{_D}D9FW#&F
Ge-i)^V4lSQ

literal 0
HcmV?d00001

diff --git a/pict/menu_b_ccls.jpg b/pict/menu_b_ccls.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..879bcd53726cc6576bf795afe1c6833401373bbf
GIT binary patch
literal 1933
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
b*OM2^TKrxUdwwGS+aJHRt?umE`u`>Xb6-Ps

literal 0
HcmV?d00001

diff --git a/pict/menu_b_close.jpg b/pict/menu_b_close.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ebed7dd19b09858c175852c608d8dcaa91c64ffd
GIT binary patch
literal 2495
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
BG0Fe{

literal 0
HcmV?d00001

diff --git a/pict/menu_b_cnew.jpg b/pict/menu_b_cnew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f4fbf24758bef9998596578ee224b2aed0f9706c
GIT binary patch
literal 1768
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_copen.jpg b/pict/menu_b_copen.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4df3f4771bf4fc551bae6e2934db4bd4cd8ee28d
GIT binary patch
literal 1913
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
XxxTb}=O@K~@%@`NuRVP_{{Kw?7B@t2

literal 0
HcmV?d00001

diff --git a/pict/menu_b_fs.jpg b/pict/menu_b_fs.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..32bcd63ceedf6b8005cc8deaafcb423e9cc9bf07
GIT binary patch
literal 1924
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_hashdb.jpg b/pict/menu_b_hashdb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ffd2a995d08009e54a563bcbe782d6505aa7ffa8
GIT binary patch
literal 2257
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
N)bE}%wk!RA696hW$xZ+O

literal 0
HcmV?d00001

diff --git a/pict/menu_b_hcls.jpg b/pict/menu_b_hcls.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6ef9ec634ab402ed689051374a6f6121ce25de60
GIT binary patch
literal 1921
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
Q7r$P0^SY-`*Z;o>0PqA({Qv*}

literal 0
HcmV?d00001

diff --git a/pict/menu_b_help.jpg b/pict/menu_b_help.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6a0d06591a801fbc9f0377b36d66c0938125353d
GIT binary patch
literal 1484
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwP#K6eF#LURZfB>v)Ow25d?2L>IsNxKaOw25-0t^f+%<Rle%xvrsEg(?_5mrH=
zMZqbmY>E>n845cFDkT;+CW*2y+-T&a+^izVz{tqX!pOt|)xyBQD7cVGD2Z8FQJ6)<
z&@u2s<3^>zi3cAVIR*W{#lXYN$iO7XEXZKb@O!pZv6DjRUEaqMx>{v77??lzGigsa
z)Em5t+t-}yP4|Tk0S0>wcaxYSU#x--%+8+_FVI!ac~dy|llLQmcf1qL?yKxm<a>Zy
zV3OA6Ga4o3CCB=Mh1P}_@Jhz`ec)OozQ&;a%NIuJ<mmEgCZYbXdbLHjxS3zM_I~!q
zYf~RC+_kIu&?Zxl=K)K#RI^+el{He`4oy4U!5%Rq@5qKTor@zsD<-&vNvfaw5!A47
z^6FqePO)E$!Z|oZwl_@gP29!$m?8SJK+~O_|C0Vp@#NnnTgvC^xNM2*Dm|&qo{qa_
z_3_PeHMp7ED%`>FrOWX|mp;d;$XumLGsCr)w0I95W|iKZr=-d{!B9kX;VbdZ3>Vjv
z5usf@oSEVWFM|Cm`c8P0+U+OPk0{=eR?6MyS>q&o5R1TUhzd0}Yg4AfN&&wcn14EN
zbGqSVn{r$9REox5H3Nnzb%7a{zM)PNKh9iL!4)c?={56gLIZ=l>W^uuu2yRf+z1T#
zvR;~_B*6L@ugOIJwApFmd%Rs%sex!I)j*Tm274b|)aqPzv-Le&XNa%a8T|?quSJ>L
z5~~j`3e~v3b57xX<?5p+F8J#lTf(Qsy}eLpmB;Ti)hAapPb_`y`*&{g_VzmIOzE06
zRuXZWMZ9|agLcRK-MeCO+&Wz^>s{Sm{i3y=uI2BKo|@bj!syeW7b-l}n)~|0oc#Rh
zOb2<+v<5xW>o{xYs<cr!v}5(R4L$xHMI}FSy*j+4+H2mjJyE`{x3Wn=W6jKSGgVJC
zHni`|zoz{1we)(edyic0I#w@M`euBiFVwTHwRy(Yr+1E88LMVIcJ-Ya%HC}wt`mFL
zW5t?@XE^14@~Db>f0?m3r#PbT>ddK1GdHZN2>E8(cc*ZpYTDB6ZG~Ck;#nU};^yA&
zYHlp~c&OD?!Kle;nYfTcr;1afhb&jblP5)CuNIdi)l`~pPfgS@_T9{V&meONk>O~%
zIv``Fi_e0Rj!ezmkan*A{Xwi9%x{#Kif6xJkl4E<G&DXXe&Ny^LK1@Fr&iVaO`lYE
z|F2o(hp*c|Y+h3}{oBp&^Zcbtcbr)KZ+7*|8Jj=dO#j$#r8}!XPVTVj#QzKn`|htg
zEZDYOcwT$&{?Imwtb+5-$L_B>%wuYizVLDW)x<WbImQ=0Zhy7mFt4BFi;CM{BNE$|
z^L(+%{k6v6aBy3doY~(niNuwMZTY3^R`VEKc}PWrW~%>kegCQY{+lm{uj#TKUvpo+
vG2*w*rTFRZyq2nJ<>$TMm~emhr_F2k%X@rDoaAfY`NVy<mCw!d|8D{SD6K^e

literal 0
HcmV?d00001

diff --git a/pict/menu_b_hnew.jpg b/pict/menu_b_hnew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8cf2e8c5ab3ed2176e60049c7f46871968647629
GIT binary patch
literal 1745
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
UNl$(X{MjGhnl3$k+W!AH0gRH;lmGw#

literal 0
HcmV?d00001

diff --git a/pict/menu_b_ifnew.jpg b/pict/menu_b_ifnew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ec8355f99bf052a53827ac0f6e2763d5b1d16d72
GIT binary patch
literal 3564
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_inew.jpg b/pict/menu_b_inew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8f990e32d8fd0872762f97fe119da665ab44383e
GIT binary patch
literal 1831
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
O`MvX4`nmo8Zvp^tVImp;

literal 0
HcmV?d00001

diff --git a/pict/menu_b_int.jpg b/pict/menu_b_int.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5fc0af25213a370f00e24004df8ca07d75d56b0b
GIT binary patch
literal 2108
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_menu.jpg b/pict/menu_b_menu.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..124a7e098032178d7696048a7a798b9d11a29c06
GIT binary patch
literal 1846
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_next.jpg b/pict/menu_b_next.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c1f2c254ff6ec2b1e6644fd7264e4e4ad77ca42e
GIT binary patch
literal 2327
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J7=7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o6C5xzF)=Z-FoOtI77$=%V+8{?Hg<Lnc6K&SPA)D^P99Xi$jr>l
z%EHRY#>UCZ&B@Kn&&S8d$IlN|1f_T&Jg^WZ@&5pWAP0jO!*XUuK?Wv4MrJ|A|3?_+
zFfcMOvM@6;AOH&!GaEZ2D+ebdBLfpNBeE1D6ALRFGrIr-0}C@73o{2JD?}S36Eh0~
zE1Td&A>mN=iNPXM3>R@IItC^-E>v<7on&m{DkjLl$ixiN%fbxR!oVcR%o2DpgjH10
zP-yaE5y!;B#)%u1jGTlQ9t=``n8fz~76T76BS@JbgFVBqxk^ht{%-J5^K)Ho96e>G
z&KV1ao4JcKMC>MhE_!BAXmdb!OINthtxf!oSDO82=rBGf@b}!pBW~v>NHD*ZI=S<#
zwGY#+&6*u|R-Ra9a^=tUV|F_=t6nM{Ik~Ll%Af0pW2P+k6jSpxUbg(%KB*^5F1dD2
z_IbJT=lZstnkEyIQZ8F%)nz|i=jE#sv31{*cl%D{vh0gBy|eN%ms_-1LE5C}>m3Vy
zLr*yd1T*?9-%!xd+x$V|+``qhnYt4WJu-jy_nOTw%^(J21*K)zta~?C*Lw=>UZd8d
zGNo#+9an2$sM{gFHzy1v73?>9J9GS~c780nY+b3#WwmI|ioWx*v%jyL?W`AVahKtC
zc!8+f^#qsaGrVSh<yf*SbKR2_E2nMbT9js#C9_OVX$A{}gH6(`iU0UEC#V-~o2!5N
z-m3o$%Wl14SpR8K%x0OBO>?s%T%Iz`IJ({Fv;$9|z|Zz$%E4vt*sHrTFa6p3>hsBO
zw@%-Yo&9~&G`-6L%v%fIbZP_|7P2m}YEaB{yU)+jmNq9zH@V{ztLNzm9v<6Qw@l@3
z?1)r*`^>2HddyQ_7U7DSeZ@0!G`#`>TwGjo7&s=+oS+o(qDn+EXLI`A@}DBdX3U@U
z<HPk-?UzbNPAoGy^5^>D*eSC-HX3R68rqwFxSpyuNyn!v*~kBEjp<F#CEdbGGcF5%
zj^`~4%2Yaf+~0@)*Oec$eq?XD>?x+P+ADKA>qZrxJNF)|EnNE`(V%vbTgl-at9EPV
zcJmbLdhR*Mw&1a$=oQVv9})}H7^IzFON#v5vh(1BT3?n!7sPnoLVo&X-n%ZK{A%}=
z^xVnQw`P<xI14lcYV;qnymM<q=elWSxv_lVUh%5yGy0B3#wZnRSvAF>E>S9?b)!zf
zhtM?jGx`FZU46nyU{*_T%Z-_xpSh1Hiaaz^OR72ak;B!(w{ymPgFQ}ye!@u~_1Ego
zT>X9RwA0?1UZq<D^_Q;RR=n%z<mI}89;q2qJa)45UG)(?7R-^rAnkO!t~UJ7zD%W-
zbH?$9VosPRTGuul%qotuoP3x$TEa^G@~tiEEB-UMS8r&$b8g$?%Ud0U|E^v2jQ5V!
zEy>@97(7Jtc35kDa(_2fkA<hGldtiNS<;ah=ZxvOlj|=BSryEUU{2fO{K=%YPN3T1
ze&UZji_)DwA9Xglcys>pzx~4hpx2sOtGt-&_0Mj%?dABF?Pa?#CCKd9G;NpNMZ#>k
zx0@a;67{a^V%216Q!}}&dBpjn#e{mz<>xh{T~s<3t{0YhyMIcK>V?}HTi$jUsEKvF
z^Ev%o^6Ar-J^{PCALLJIr-xU2nyuTGJMGfxT8oVn&dBc1a=Iq$KIOB~sk>7}CPXc_
zD*1GR^Dct`yY5b5=7)zYf|({1WEN|dd`(+=)%6hjQ^w~VE)(^CGd9<py!m=-^|>WA
zCzS#w^X~o^JOAycAHOtjOKvpf)ep_%>8^Pp>GqN5>7#6~zYczWr&8W!o!yndd)r6C
zzF^ncR)!5NEF3C=+&=O<_k50d7IQP`zNg8lhTEDOGcv7D$6R3S`@8IEmKXcRcR9}r
zkH5E0e#NO$Ei&IHZmz%rt+}7(UAIp6_wKj3b8@Qp)_lKv5iiq<TCW-PoVsy>YgvY7
zL?DwmpM0A9^m&zYzY8rf3VAN!%{z1JA-#s4WIm1CTceuwjqV$spT-j7UB=sdNKC&N
zoRa#2wDS+;_#FA!`beOwV79QKU1CLx(j2uTXZ&ZxDRM05+-NNPOuWNM6G@Rs>HRG^
zj#lS59Q1paaWp*;y{Y=%fH6B{`N_TWSM5p@Ogn2B=(<0EX$Jf8my(ge-SaIE7fgBI
zbn@)WdQqEc@+&V#FoZvAO(;1P-X*Kd|Luymn8CjZ@;lrEXK!mgz}3wBz@=ipLs?aa
zp1WdQ(ji~%irJ5NEb4>Ieo3sUUby{F<>N)dci8e4ws$ZlPpg&XwAXcHKHF!mcX4KK
zg}kk@=cgGLt4jDxzuT^we$-ma$KUt*>Q|u^hG$bxUa+`+=i91yzEhKhFPFYt8T#P3
z>2!66$MMCtR@OjNE?XMjEORYpE^}|~`K+ZM-mEmVHIJJ$HIAn^vIuJC;Y~}9e7Red
zh1bY9kdgk$?wv1peYvvgL-MTC(`A`^E5T-Fd_*zxx$Uayhc_-pHFFNgnaBE3oC!A5
zTFS=X_d3Fv17_qYt)8V%rPG3^driJ4$t7U7NFkx$v!t@X{$_y3r{wlGPx;RnyYs(X
zn(aUP*89e+6Ej<;|G4gO=IDz}=lIUVM0|KC<CI;m&z<wzJ={aXI=oY*&O%PZ&7keZ
j-`o2SJ<>jxe&5^p;GaFt4H5;%lmvd4AF{3u|9=wzId9-@

literal 0
HcmV?d00001

diff --git a/pict/menu_b_note.jpg b/pict/menu_b_note.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eeea7bb1012d71b132c88b9d0fd09f8622cc4068
GIT binary patch
literal 1871
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

literal 0
HcmV?d00001

diff --git a/pict/menu_b_ok.jpg b/pict/menu_b_ok.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e682233fb41bf3932041dbbbfcb97a2ea281ad1f
GIT binary patch
literal 1355
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwPz`)4B#LURZfB>v)j7-cd?2L>IsNxJv%q)zo0t^f+%&crI%$!giAjJ$Ktb&Vz
zQ&bfv3QZDbGjt48N)lyHENoo3(MY*jMUa7!iItg|k%Jkkg@KVtaG_9=GPAIVq9Kc8
zU}9n8#)C>mA0|Hhe~W>KnUR4>kXewyp5gawt70dG(7XJCJz`U>a~K%E_A}n<&2shi
zxzu?hJSDcpp@H#3OIrDid2LfJ2<LwAJ|)PPcz2@NeU?27`4Vn|MFgJl5*C=WJN{Sa
z?JZedC7ZVu{9CiCwqW_?+p?#Qx?SX3c*<cz>lPhGgVue4i#^{}g<h0?8`>B>t7F4g
z3-ezqZ}tT(UD4RHAari8<xVR$%@c1H9!UvPJh05?D8HOSr*5Xi@>dgovbcTuKJONP
zUD?~p-_NEjk~|UIr)g0ZvNlJHb=pMJ{fTG9-ZJ%_w`g0pct*!M5BJ|z*OaF(v;_M@
zq?q$f=e8fJPdSR&PR!14iVJ8r$iXcz3#ww4#G5PJJe|((82B&AZ0=srQgw2h_LLKW
z-)0<O3jES(e5z}eKz%RY${U&?4okJtO`8}PB~9;a)zVz;Ix$O2Qv28;X%XI!F5Vi!
z#=aZ5_gM>ibuPQndY_{!#MkVI-Vc|cMVZ?a%MU3{6$VKQimaHG+Y$SrW2wvK9H;j!
zu37=}P1awi{<QqglvRb<XIA${D?Qzny{LKGtIf<Jdzc=aT$XZ0^Q|;*?!t$!ckY^%
zf62}A%IeVC7aM<w=*_<MG{ob`@{qb2;o5!|YC{}WOj{rSb82LFxT?--1BU>nQU?$9
zfCF|P{g0WMpSzsoxcb*7jt%dYYCpEET2&tO`^&$%A#WG$e7p2i=<eE%+fFMPCu#0d
zms501Ib{>$IpZ4RkJ@|HH3gMXYpyh3tT%l(zv!>7x%m>SDsf4W7bTTqN%U)R*n*2j
z9Wxzn%5+}29IAL|@%5EVM;KoyF%{2#!yqwllGdvA8^vElt~!z}D86e|t-tq4yZOIz
zHlIFr|Ipcuud?4B{%kW}y3FFl;y>HFZyTl`PMtre^4!fGUvHmik5d0;diisB@{GKR
zcfR>#{#?D`a7kOWn#rH5HxhR_+fJ6M%X(vQS8?9SUVGCriM$EtQ;yA_wVTJ>BYjh{
z|Jm3!=_STD4VOP#cbNB*<eM3nKZhr_z2u>yK{xHE6xORp|F+S4+i9G9ZT<5D-9HUp
p`k(%*8Z>FDxqth@gpVJ7MQ*!q&+#SNRn|WEMBUrWkZk+^Hv!jWA>jZ3

literal 0
HcmV?d00001

diff --git a/pict/menu_b_ref.jpg b/pict/menu_b_ref.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a7a4329df9430703aad90c5cabcc77823a6b2326
GIT binary patch
literal 1672
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwP#=ywH$jZoo1XvlFm|57^85tRv8Brua;;aG;3@pqnoJ=e%><~R5Q3gR)p<od<
zMZ<|olNJf5s5%BFDyy&;CW(qQF5GBj+$=80z{tc3f-KAsT?~v&f(wO`logo`1BF>c
z9F;yK7EavQc<`aqN28$sw-|Vs85x)anFSf_8NQp9JZo`Sy-V87z-Q$-2L`*353CE<
zdaS&1cE!xrGS>?(91QYPlxN<3R3)pq!7%ro_aQ-lgLxfCx9`;Fa6Tg|*qvV#C(u5_
zN?GjQlRb+31|@E~drww4$tAp)<5>6Q$z#D&N0NgA7n_Q>-oEm(Z%W?8iPBoPBTddY
zFnL$|lxfQ^s!rNB(PPH%I)S<W85X2ebI!S%Rg|zQCDI_UB-mitN{1(=lRG4IMGhz$
z^km=p&oI5V`_jFPxOG)0GgfJ=4qdLc(ap{0oq%S8`yH0cO?i3xU(0WLF5Girr_Afg
z*Gs}WuDpD;%W_vrp6dmprpi+%1b8j~D2W%om>9N8-qE>oq08odexWC$mIg0h@!~nl
ziN<h;Q=CUqSeY7^sm<$jEH@Wa_Fni!#C(>Bw{6PS>9H(XTb_z%F{Nt?9%8d{h*cBi
zVw>rpx~w4f?2&)#esf8m<voAL#BwX&?#z9h8}Iu+Z(v<Nb$PwR`7-S%*0JJ#_DWSA
zxsPt&ncku_FVPlH*!2WgPx{bebMT^$;ms97MymV=80?qWY!Xl8_&PZ!Tyw(WUC9ib
z?zeQ#z0z6{_;-t`AEVbIR?T3`B?=6JC-*&F8R)lmn(K-cA?u|%G6Kww37RbQdNeyu
zJjcgX%g}c{_clS16-UkX=-qG$S}bzw!|p^uub$xSLvLGLwJK)X-F()6%XHGBpSPnH
zcTHZdvRLrD@8WIUt20i@FR2s=^*O|p`OAIF-f!0fcPVX~a!qQ{oH*l`afbcOS~soM
z-8WwwlI;-c<)G@PY?Ub+>@`7fanZ6AG1gPNngTW_7d*ZCTHxNx?(JUt@4man_chMS
zLGSRYUaQO#Gf&TC2s^uV)!!7Jv*P+fu}jTgOwU`CaHn&|s+z5$-0BK#FHcEr$?hrN
zeZ|dmZN$st!ER-*)`f;xPN}<@R@9st(_pcDbyVzCzrGp4mkW50p4j1-6359J%f@uu
ze-)EegM;$I>bH9nc3ocdd!hXD59yEXr>{S8@8nLmz3yvu_BwT}-XgQFXhFxWWnY9m
zPdCe~7FpoqA7~_1|LpqeOWOPI8lG*klPW6zF;VA6mEPJvf?M9S&xx#MX5(7y<2n1<
zgI?FF<Vlm)U3KXQ%U%?6hq2Z9)TL?VrRPk_E4S=gy|t@grG@^g0<F2bFE`ck&FY=_
zddsh4E;U;{-#Th}Wwm;)UK-iu%kqZj4x@lar^LZ4Hv4znUMRDB?q!*~M=mNK?%Q=d
z*zJv_=<0RtE0aLcSUJ&ZWnfosMeK%-rEZ#AAC?_bnkupEdh2bDt`M*SCCy-|t!$lB
zTu!ldbWEC^wZtN%>Z?LTgDs1LUvUisoBo!rRjW^mf5_Z*BwJ9tYgL`^^ci;ZubhgT
z_56?OGF#t&b8MeazFnH!(`Em1+x9}CKbxk1?zg-v-5<Np#dJ~q#{B+wJCh9VDiz-}
zeEfS|MB*-I+sShFyPmd5FEJh*LPk&iGk9$MY<2(5)ziy#&b6<Nmv>tKDRHU&@=sn%
kn-0xhp1x3Vd-|=Y^w+Cw#V)$de^tr<>e^Jd&Hrx#0B0$v8~^|S

literal 0
HcmV?d00001

diff --git a/pict/menu_b_rem.jpg b/pict/menu_b_rem.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0a6f73498d1ad3ba02768b161fdda1a745dfe29c
GIT binary patch
literal 1681
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uxKXJBMtVrFDyKmZn2MkY39c1A`9RB;AICKhH^0R~29W(E!x7FJe>7A8h!76w69
zp+&;MA}OkDiiQ&>IR+}RCl)5Dh&C?VsN5{bz{teP%)-db!VJ;D$iO7HFo{`NQApS@
zkVRyoW8=oeLM5XQ2Os{w#lXW1l4cfUuxI!^$EL&~A%4m(7tg}HZ!WGsuQ$Bz&FGAp
znWcR*zQvB=fRg%4uQTrrYQ-idTI~2e@!QhiJHdzM#MGYn9W?Jz!E$l=BD*Wgcg)c|
zdi+lRR?T<nT!n?-mEU?*cOKe#?(y&5+dFvX_@wNZw8U@D&An1K8hNLU*rp0xcb#bT
zD{uOTwPN$0Z`t9*ytC=qv$h#J$#&1nVxB#jxX<Fb;tW$gJKv=ZuhU+v+}0u#xb@eO
zQ1@q3Dt9O@NxmI_h~e@t%{SlIXV~<vw$!Qac-?V2iho0t-`X|INgq}BPoEobx8l|1
z4{JB>Jv1fuaFe9ItNLS}8E4-vF<5p>I#($^Be}Zc$Itbx;WtVc8yka<h<N<{cym+o
zoEblTiZ9MK%shU3!a;@|;f|~-sxGRVZfYHSdLVJ@eJ(Te9dVbdH*Ztem2+-3m-g8%
z$!(w4nmMU#6Ae*ybqW2nBKP?Y7nAv$q;q9Gq90dJ-~OrN(c_dOb9$q*HqOa>E35tD
zWrk+dx9GTq-|yUi!}0e@cfyyZ+2D}Vn)hg)$fL*a+;2_!F5C(UY1<<Y{q*df)UNa|
zv<U9%-zlFJe8*38p^UlEkrT_Gbj*J=?^bhy*7w;xM$wG%OF9Kz>q65i168!_kF_mc
zWH}|lCE94yBBe0zch()+q0?L!v`(BU8GP`_*L8xiW}@@7%s$j+CC&CK4BX!Q+GE+J
zIU%_ZeqGYsvRqWU!fs1fuI5p<d;DvaW_vxbKE5^Wx!r>YM!fs}#KdS6-I{78)7baH
z;#*fk?{vS@3sX0R{b!IrnXPM)5#w>8W6gJ+o#)vj^sMS{pL^;Pa-!w%O`V15%HG9h
zK{wQ&IrQ*xn?LHjkaNr3#Kc3SCO>s;&*$8CY>JB$1sX5RD2wUu`%%)jDlB~C=gK{4
z+~R){A5E6Ecw#$A)1b@s>h!>s+=mt`Ejzu0tE2hJ)UcmrH=bLUz37`@FLiv?<isb8
z92%Sd-TL11GqQ8DY?`0DZePcfPv$Mj_IfsNcRIPa2D9x*WSf|qz3AT3eWlA9*xh#f
zJ#b!ss`;_a@vmGj-<_=AWo(?9V(_-?n9WD^z8hwr`E0(lmc*vMzpZzc&CsliYw6O`
zAF73N(Yad~-aap>+iUmt>JOR6E84m?)hCsg`EOc&>eM!&>hro*oTtU+_E}rZ_$-p+
zaPDoa3&%hEz>1}%`7<-OGi0`IYrelS)Xw^Jsr-p`uiu`@w76lE<acZilaLT+kzC8`
zOD0p+wH`D(p?3OV;g5f%-Dh@O7jWKQ^YYW~$ZZcy1!C(#akRBhdmHXpgGK9}yC+<7
zLOqXsSkW~xXR6;!*?pdJEV0cR%Tj+R>Be19nS4Y3(96=sH4I->>OyADkvsq0Z2RGJ
z{~0dbGkq2RxczgSfA49TtQG$mdN2K|=&qX`{rmcycT&^W-A|HwGyhlAmw(w|i+O{B
z=XEakf3`KVZKYb3+FbitSC>gGnfYQ?$-nHd8CjFk7iC`lxi%_smFEB{TRZ!oviINF
z`M)Z&eq5b-@ax@wb*I*UOI&t;``@s&1u>dAU&_Q{ZRMx#$^ZCiz3XnX%)j9i{>45n
JDPRBpCIG4F<VFAh

literal 0
HcmV?d00001

diff --git a/pict/menu_b_seq.jpg b/pict/menu_b_seq.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d903d25a19d24bd2b2718e4fea2d0ba775c31593
GIT binary patch
literal 2451
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
FHv#7fFcbg)

literal 0
HcmV?d00001

diff --git a/pict/menu_b_tl.jpg b/pict/menu_b_tl.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..212be616c47567848cfbdabfbcc6990b05874173
GIT binary patch
literal 2545
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
VovqTH<ZZk9M15GHNqYSMn*clld|3bh

literal 0
HcmV?d00001

diff --git a/pict/menu_h_cdet.jpg b/pict/menu_h_cdet.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b9bcfa77e405814fabfb2ade971b6ed41d024d0f
GIT binary patch
literal 1537
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY43n7|1sRwG8JPtc
z{~uv!U|?WmWn^SP0*oxIZ0yWTj1Yh<!NknMD!{<V!pO|b%*4tHkz!(GW?>a%5Mom_
zWOq~&4irf&oEW6M@Su^Xm>>faNS28iq7oDqf=tYchC+^kg~ExAN<}RHZ!z#NGcqs<
zG7B=;Gh8qI(AT&?JLdQak(!7_?o;&7Y@Qdb5bDG~%lq_gB}pH(s?_k<!bfEvq$NWt
z^>k)yY@K%HT8MGF)OJ>N!$1B~YGuv6ntg9dLt;v<Zj%U_l``q5+P_)4YqC0prSr}u
ztUTJ`{il!PX{bYO;nw1HS-mS?1g=+nHYd1mvU7Q+9CN=~RPN>Plhl1ra85e@xF_qf
z?AlF2#gorl#AJQbiQCm?pfaghXkS9uiHqhM3zb&o9bdNUXl93yuD$ic>%l?1zDF`I
zT?zRoCgZHT_|8<}i^fYgMrvkw3YI^W5S=s4T_$VNt!u}O6&0_nPh8$AT`Zwrd?5BZ
z_uFf$8+V;q(y1P2|CG-<-!3)#%;{xYnogap+jnvP_UeZsr*>$xBsq0nU-a$L4V@|P
z_OZ-6eOk`cF*MGTnPcXQ53Bxlu6(gSQEC0uJq2AWV!Ajcl?1B0ii*Eju{YS?^*5*L
zoTo9R8`hYsZ&5C4+Um8se}}t3NS*%ODTaSb=f`fnoHY0Oy^!$J?R+`QZcI+dx}(-x
z;5RE-Nj}u~<cd|drZ6q~wCG{GO6aM)XkH7S9gn>yinB{MhQFHmYF5;`-A!8M6L+X^
zhpw7g&D+hW+jel5=7#;5(|<JmW7&1-aN07KX<~CTpB=r{6O(a~gC~?DRD9E-<+a5P
zRTtPAOc)m!<rQtRI6qBm=bj(yPd#4Eu=<H->ZZ!X9ZRy>7FenX-S1g`wO;k>qdyyW
ztv&Hwr{K@pBkOb?xh@rdd$?-K%s0mil@If_%-3GGOF{X5*5ixeG55Gt*ERVZdfS(H
za>>m~zIA&&v!68YsfwP&xHV0+(4vpgU1w$OF^{RnU#_p(lP!{e{w90O<Ovtf?d?DH
zut@arW*zOtJrg&qj=adt<>AY`gmvSw(+d}s|N8Fh6}a^1%IiC{x0!7--f>rWlSC3v
z#-9bUY0q?&GMC>H^!;pirq!si<y7v$vSY<-S1q~!dLwUf!zVqPFJGJgeO<lV{i>I7
zW6XvS2FH-&x0vi^o-1CjmldU^SUK5a{h6mGbF$Bw7q5#evT<Lvc*E@lhu<&Sxr0AX
zl3mnx<-A?D7H?CTUQ{X(b>1)YiTp1sk4r*rZL^Ava_(gwlde5Jqr!EAy8y?w)jMC!
zza6#eVVr*11?4^QwXTtle&#i;3wjP%O?okRRj`WFPXU)D-6`4cRP0}_eYSLV!M-O-
zH%s|;{JDB0bjH~w=Gv-4U1l0`4@`NM8P1z)dTi~lwNLhXo!40PMCRSITc`RMcE&n2
z#~xeK)6g^V$uWb<n+ms<@8oo42w#+Y-OJQva@F1wcJoh7o*MCE*H!1o(<a~J7Bg7+
z(N5`xlvb6Zc;FvVQ!zWO*AF}|ABlP0UHD7dB3xKZXYsaaKg`zbsm!?&;3>i|nR{z(
z$-kbk&Axh#MoaB3ty<X~u=GjK-#yFkPr5F@eQ~&om7mlkj$LafTIi*kO)T^K@p|1#
zbD@2g*?t~+a(42ORdTagwNpjH_IYS@bzEZ=WM$dam1wP>ckAa*p(l@nJ!V~F$Y6Gm
zVt}MRUWV@Nnsd@^?QJqxK_X0icUNwgF1#$eae+8U5r=izvOBrQeaenC#DetI|Gx<U
DV8(I`

literal 0
HcmV?d00001

diff --git a/pict/menu_h_cnew.jpg b/pict/menu_h_cnew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9488016824ea0d4f837dbf2e670dc77a1f833bf9
GIT binary patch
literal 2960
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
E0LQ~5uK)l5

literal 0
HcmV?d00001

diff --git a/pict/menu_h_hdet.jpg b/pict/menu_h_hdet.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..55d96bb1cee2a6b6bdd3eca8b9d45eb1489522e6
GIT binary patch
literal 1506
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY43n7|1sRwG8JPtc
z{~uv!Wng4rVrFDyWPk%^Hbxd!CUy=+2!M+-FfcMRv9bs-FtRW*Gc&O;b1;MDm>8K^
zSOpn`*c1)f9fbpxj6@O(l^dOclA4Ssi<*gZ2r@8%lrST#U=(CxRx}KBEEEz>Y-HK^
z{}uxeGb00&AhRHYJ;Seedz2j)SOo9vEwPJ@Jvt}#)BLo<lO!qxY$vh>hD<o=%Pao$
zi|Dm(>C&<X9{Zn}UMc&sHE3q-@%Ql>A9<&+G8(vqhKuxY3bX!Ru`5`5Q+}gL*+1t8
zU%qk1rk4xp+?ze4@W>s@xBKPYzb1P<+8i`ta?<;mAH6Kjcy8O;E7<ALD$#o+z97_i
zhd|L1i?4pOrXJ7EX_>X|r+lL+Z|AyrCyz<x%KX)b7I{hBv2=amxqH*s>v6L`sLY!@
zr%?K4E7!bRCO;i+?aA4Yk<#1Au~N_0TuN={HtSGtCqL8uQyzqWikws0WnJyfp>TVX
z{q+r}4>Y`3$XQy!eO=Z)DxA4=rl*i+#-5eObmcd6{W!U7e%PfGbJ;Gg-(I<m{Z%=~
zGA-sQrxtyCeLLue&f+y6RHpyC_Hox2IaikH7hJC>h5k@d3l0Bt<x6~{qRslpss2Az
z_&@W_>;9nf#{T3BiMqY*&rL30JJB6=a~<cOhxNYV`>)LW^Yzr?>kpPp)_=M1#<8_i
zb+@fi<CKY5vVX;kCaqZw%Y$xpPCd40ahBt&dGD4z6Y^U%?aqx9FQ(txJ4D(SEz+tn
z*%}*TP$c)sohj{V*4%w9cRuR2T(r^Xs6Vv)i(*x><@LJRM-EIn#>U2!;NjrWrP4hm
zB<@uAn#Q>d7kC*i$g6&0wY>eazx%M{rPl$gpQhz7i_K&Gc~y|7<)V4+@w{EXK1LaC
z-?yZCmdx@_YxnazB-h?ud&oNB*~85>@?sNN1Vzlu?%h2V5%YRY`KP5@y!~3z+PQW=
zyc5)Qt9|a_kSE909M7^pntaaRU0lJ}qRAs;<?UyO%D-NZ)Xp|}@r7gkwX62WSFcoy
zzO(z7?jhy1M}Pl%x}n41?xZ}kgOZ%T_0^uL`uzy>KOALUY0ed15c8+p@N}H+8JX!^
z(jONuUdr~#M1M19SK(EjqniYO)oyszG3&TiclZy%j1MgqZ+~3tyqdriW%R=0*%f#D
zeU(Bnd0+fyo&K`@*{QCJMW^&kpPlnJdih=X*hDsIon1V3zqFeeR@pD$OXmD|ZQk}A
zPbI(Q!c)BTQcvbr+S<4`wXN=raMTu`WhNB-Zo?-AGqtAFt5=Q%U;gM@?)oq^eD@}n
zdzMdZ%63hgqqmdWZ^M<qJXhtZ@dlH&Eoum2-K2bLzud2#nQ3?QcXDj<Uf*Q@i%DQf
z+9a*Qt3tBPZ-37(dYD+1dw2W#r)z@imfzXywOncalR4Ke-JTS9@UGB=L+TRKjF_z4
zHPrO2KAAXAat~kd?Puv$sYRjrwI@m?pXz*ySNw79EBnpR&ZNl)_Jt(=XV_+_VDr~f
zf4S{tsfUk0E}fpJ-p}><pXTwJN}*lP5?yAU-o$&1v;Aa%=OM*c3Z7T(W$oRhqb^PG
zS?)WZZ`v&1Sl8FW(oUx7UAF_*-<vs8FG}4^Q)*rDyS%?Ed-EpeMg8_^e<|hu<ixUu
zKP&F1Yu-3B`=g*i&klz!-^V}2m+iT&8+mj0ItNe^;{_))2q~evJG{*7@w)0{hja%M
XW`~4rZ)0!V?%Vmcml2vC|K9`vAXIEL

literal 0
HcmV?d00001

diff --git a/pict/menu_h_hnew.jpg b/pict/menu_h_hnew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a0293ccd5c62ecc4c48d6238adcb2c631f2e25a9
GIT binary patch
literal 1856
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
WGGs72NHJVsYcOG4fXS)<e-i-Y9TWZl

literal 0
HcmV?d00001

diff --git a/pict/menu_h_idet.jpg b/pict/menu_h_idet.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..dff892fa72ddb121eaf8c230ad3fc93109c6dfa3
GIT binary patch
literal 1553
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY43n7|1sRwG8JPtc
z{~uxKU|?WkVrFDyKmb-o7A9skb`C}eKu9n!GBLBV2rw|RFfuc-GO;qVg5{VPnORr`
z8HCsj*%ciFm4p+G3MVdf5(#Qjo~$A&W+uqM#KgqN#KI0%3?di>nGBf~9RoKCIk6Nr
zF1)CeB>evt0}nGJ1Ct=LAcH-_*Si(&4i{uv!%HoCZk6Xg*%xXMJ>zNp$%M6AcYd3!
z(zGCt-*2AfhwIrHn+hj+e7ip>;Idni@0w=|-6wh6=Cg@rIWxJ4EB$PsRrcJBdt9mc
zCp0r>roN8sJ(T6#aa!%uTc?7Fp^V1ArwSI#3hTSU_FLQP)rmacjZ>~z^s2?weil1u
zFQn>nB{cUCQ&--D53`pRWW8H-s&JvQS>utPW?gwoZr9mXbj%Gj-JP}Rlu$_A>u)!O
z|1)?p|4qF5PyCIi?q|O2(4!R(i#X5jS7Ml)*>Q;F(c)7bS{)C!%=q~A%JsE34{0ZH
z#y(lS-l6Js|GmqO#$u;xZY1e23OzKRoVR1;&+J9t-acIBDR-k>xH;^E$LIHo$0{0R
z1qv^UhTRcSQ2FX4dP;BSTC)n*Nt?>!x4oYFpJAh;qwBG!r2?S^T`RiwargYp`p>}q
zO{FKRa=FNkwB)O06Q6C4<9Kpi()Q5>A)!T+mS5cTXY1_jO{Y$#Z04VE$#;eJjLA`T
zD_qW|ZQDKT*0q4sMU{M4&n;f;XVvWE7keztqg76~Ti-tErY++Joz-WXCJDB$Sa$T(
ztG#8h1}f+NGfXLbXDgv{_l6<kbn$GLj|*0=Ds_<GvGIA!m8G&98t1AjFWlSvXI3?v
z`sUxA?JQS{pLonu+V6VlO6e(P*%Y=06UGI0Ns}3O-rds9_)#^>-8_DdyGA_Ywj}p2
zvP-{bU!Jk&-!k4g_xfk;bh+`#G$^_AbboM&^Zf5#c{Qy%lMh?;=yuf?eLXj8ZRF#t
zC(`53FO2%mKGlECy5>K>>TG2mH>x!B&HohCTJU2f*Lybsv&X+SKVD}w>w3t2-XEf$
zv^MYGuy5I;u<(yEvxR#icFWH=!Wh2)1c&ZMjoCh{dw+Wt_h>ye-RiHMSv8#@S$z8D
z<g-yx;tL|K*d2K=QB5`ZtSz7VA-4;b8ZGW@FBsNuKm7GttkRw{AFp^!-zpyRwI*xf
z?mCw{X*1NP`ATo~dYBu2Cq#5g@5JAm+J9wNuex2ZuSoDt`P*a5$|inS<eDACr+8dY
z)HOg^NQTe&+t2LwZGoF7?Gf4Ce&?U=i5;!I>~fOfX4iWEGf0`ZE%f3MoK$@>Hg}7Q
z-2T3GYt7a!{V*Ztak6uDUvXn|dWp%q!wc7UeA(PKjlpl*jl5LWfQx27#TV6<-mAGf
zW%>L@zT4BzJubVuXrI+~sf{zmlzqJC+zIXT^Z2GTiK#(Lv-D8a<Cu&!+cfo^!!@QW
zTGt=1*vqUmea<48jB~TSbcI}VThve7`4r^S@b2~0OWmK#Dpo73n&sLqA{Tx*XQ66p
z?%bN)QW7UVoDl1nX;@}|N@IRe-$U0gzh0Ml{fpL1{KRS#ca2x~c<vjWGm8)Rdh4iI
zZ#bVQxr?bqK_yQ0;pM2ku~R3#|HgdpK~bJ;acN{}_=!1dX2xA!tMYxd%uH6+qe4IK
zx<~(KkenvY(s}vv;fSl=p(fX_7;aBpw?_Te{YG=K62>2%`&{{?4sg14>^qw4B5=iA
zf2Z(gSKs72S5@|K^@m+Q5pV&V`gj>Km>r}TE(lncExVI@yv-`v!LPxDrMg_-_lD1}
d$EQI&#s$i^cUI*cO1~}_#Z<z$fS2+AO#s3ceNF%X

literal 0
HcmV?d00001

diff --git a/pict/menu_h_inew.jpg b/pict/menu_h_inew.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1671f20cc442b7d4298de592b52262ba5bd13839
GIT binary patch
literal 1808
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
bE^U4IFLQx4im=_OlBM-mvwywd|9=wz%Weyt

literal 0
HcmV?d00001

diff --git a/pict/menu_t_cg_cur.jpg b/pict/menu_t_cg_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4ace65321d056d8e3adc9e976c57627de4d29d79
GIT binary patch
literal 3648
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

literal 0
HcmV?d00001

diff --git a/pict/menu_t_cg_link.jpg b/pict/menu_t_cg_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4f758b5cdd58d519f0ef017a70f068c6b6018f39
GIT binary patch
literal 3340
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
bT+nt<ZM9~|buqD-l2N!@+R&yr^Z%OwiDKR~

literal 0
HcmV?d00001

diff --git a/pict/menu_t_cg_org.jpg b/pict/menu_t_cg_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..152db199670b79cb3b70a533c27f0d74a1973628
GIT binary patch
literal 19559
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
F1OVx@H4Oj&

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hg_cur.jpg b/pict/menu_t_hg_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..72cb1fbacd8a0a8f1f76c66ee66ae857d9f0e470
GIT binary patch
literal 3573
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHv3@4Zw1sRwG8JPtc
z{~uwP&%nsQ$jZpbfB>wFOw4TTEF6rC49tuuGK|bDOss4I42(=HOzf;|ENskReT+=Z
z41z4ILTrkLi9y0*>=Q34EeduFd}t&hTG;5Myl~?rlMs%BMaB|>3`~qHjLb~TY^<yh
z`xu!7g_uQH6b&7PSpyT53L7ULylC`c;YKIrq#|Pz(f_v?c$gU(m;{*x8SEKeZ+s}m
z!N{P%!q6bV#NdFFnYwIQ+0qNQlRdBbEwFv2suZ+ROLyBdmU)4tb$5;A4{6VfaM@>(
z72KTpWzVViU1f_R*IAg&_dc`kN3KhDAMf%@pSAZ%2TDDL$hTc_+wtI5t-jIjhg$^)
zQekpgUt{vOXU%UWs{cHav!3zeMXA@WTOX>`Jr++swfx5U$<qBrCpN4B1&imc>xY+@
zCO-?D@{RFhmvPFL%T1=bL0vs(Dt)iqnYi%FbGy5nO@Et5XU|Mrw(0G`5Ruo3+FS*y
z#{+vSrfsw|G2ys*>an|wqH6rg@LwX2PCU6)$1V4Y^`>l6vI?7o+4BtF%$1XVJZM>c
z*d{{N<lS-aZrS?awO8d<f7SgES^j#O`}UZu3`x=Lt`~)7U0-|U)QZ%pDkmNDm?kd1
zt$A2}+tW$@i`F0Uo+$G2&XiTJ*108XZk@I7k=z!$4X3#>xuaLtod4z=bWG;ripKX>
zMcrGco;y|R?r)O2`=D&j>#)Fem8ViK-&v6zbh>||d!*ZAzkO{1G4b5bJQX#+t#IA^
z?M?UEr0cheb_&)DpV+te$(PXWF1xr7Wy^X-ha9{2qSRCB%9NTToY_-K|1->-G<8kp
zw~3qOo6Uat+|H`k);6}1UA%4E<@LL?CPbBTB&^UEPWP~5R$OOvnq``|^`@()xyPDQ
z&ez7C3pu^}skiQ``-wqQH0JKL42WCd#V536*}RA}_buL;y*n*#7}gq3nX~`0|CvRW
zM&4_JmY=!v$@jkH9f`I1rja+dhF-FoHoIu<qt~Gf3v_neP|EZ;!hWXYOvaRyCy$Sd
z?X`@V|4Hw-rv052k)Bs-wua7qRTS-AaBpQmOsT5o!$c0RFFM+ula6)zZ&Hi#TvNCF
z+k{QawQJ_h?knAVA?<WpSdC5I_OxqnCA=JSmM&TAePq!>9nGA%@hydNHcNY-{JSyf
zld7t`&dE8&wTm?)W%kDInD2Dy!tJh9i!0piTs6jWH+m#gr-dEgX{oko)yXuipuftc
zx(i+Pw#hj0G%Z>3h&g8Y&!c%JC070m&%N07bMopLq9P{ZUCTH%`8GPd?wE1SP%X*)
z^lc-(clMo5Pmcab-}U;M&)V#)OS@J@cNBfP-4}3KX{vWk+q8f!D;E?lbqb!c)m`A*
z&y%|>{@NSGRjew16?FGn&hps!Z&!lvMC{aEy4Tw|*khaQ3U7y%i4&d)EM-|T)8Btn
zx{K=DpF(Ss{d=ofPjtV$vUlF*l;xYIx@9`||J^ogMWEG9Cs%h#R|OU0Zt+)F*GEoS
z@OQt`$#kzv`xRdwyWM-LY5i-BnX4Y`^pkgpNc|x6$Z1Q%mZp`G)yguDvzKPY%nf|9
zy3%PY?{8822kPR5sXpD$icd6E%>E(nzN*rRVTzfhWUa%$`902)bid5_t?-{gq2B+P
z(ii_lr&}$SI%Z46>5CkgcK%0C%}lLX1x_7@C3w}($J)O<7kzf;^%eSYvsc(~Uw*YD
zSbx`n;Jkf5wLXZnGPigf-+S_@znD(h&;BPp79TZFh5nei=BL@+>Gn6wa?A3JO}e*O
zw?2=FKIMGQZ2z^*mW|471@p=$cbDw5pV1>ybg_o}SK@q~Sd$H*Ph%eY2j}d)9J=R$
z(%kF8(MOb-W)(6zx-=?yG6h|h`D}6NiKoA`pKcw?!xI}<r`~B^a+=3<;_LO1O?@wu
z7w>!~T(*(Bn!E6Kk->^>zdM)@^=dj?DN*Uz`!rvvCnn`e#_Q)#!WMqHdbRZBC)=OK
zrfKY(zjk%&J==BWb#`=@cw(f(wqTDNexep~6-iu&7O#qXYq4n0kHs%N&v8qCbie<>
zs^#uU^}?Oc6zYFzYpsi8xs?^Pw3=y(`~>xT$!hw)CjVzBe-Ul}GyLYS*~e;6pHH)y
zU9rhv!|ktEPUp7H<$UBVWSFDHRIMy7t-pMt=a1Bz$|X^jtj#OF&31FlS58~Cy3J?*
zZK1nb*^<jkkLnn`3KKar+qo%E)xzgU&vRqBb#XdNr(bP~R64Wq)Rf$MZ{sI>-qvq1
zpIyvb8+z~cG>w<Dp8o1yox1eO6+u-+j!A||C8rWH{CE3U%2b>?p(=59-<A)Z$0x4Z
zx3*&Cifd2(7TtIgcIVG3so;`DtIb!fo?Pl0D(bN=h-*f)je$YS2@jnUNz-;**_<?I
zp4P6QTftko=BP}XelK_DdaE1$p_|z9OOH!!`nzrA^}D=QuV(3+e9m;bov9tC@Myza
zsmE%1CVzQmTz|Lwi|#zvn$$<FRadY0ET8qOxM<rAt+{K~IK8|VoHlFee5QB@qsM0V
zlpkH0dARY&$$qV(kobc0(~NorcSr0xd3k%(w%gG=c4f=`stPe%WpzZoYmaV2OtfaM
zvfw4Jr4pY$7>AykYqjsiF3X1(Lmu5#+Y_l9SvFTZ=5hIkE2bgK!_${9T~RdGgNtic
zw~zjR22anRn8(+jIR#DkaErD6Vw5<^d(A9!xkX{-v#VM!-#W9upsKfP%Qdd*#km5H
zg93B3+djE$)MQoA;W&M?`DnM&thF{`Ps_bbQg4P`jW`}v*KHTOYF)W^a8|L_)%8r8
zb8|m9a(fA>eCa=Jn|%A>oU~arRgXMf|2<^==jHkJLqN)Ij{gkFSN$|Swyl~HC+cnd
z<=LZ|ClB>c7dR5ezUO?1ZRM-5z16jcj=uWOV7&WyN3K#+aA<96%WD2JURzIj80Jg<
zXP7Aaw6$RW<CDhU9RGo`an<$3r@lnCExUEsIyI|Cz^o=|&&<anrF_<tjdi__mCX38
za@Y5y$dUDxeOV_Lwk_q`albLBAk*h-ogn|pD^V^%@A-pPvwCZJexJDDAA3k)u+yQX
zH>W&{sy)ozwpr%1?~cTRYsoV+xAW*pohjBed)Rt7vM+Vn9fKX&hG(|iZWHHCvz#`&
z;LyW0$Bi!MNyM1Wcovn5MeA~-pmP;Ge?RQVHYirryw+4Fup`@O55)LXwv?q(6Wou9
z^QMKvZL$N|G-J-bD<O4vm9>J-@9-0~iV%8r^X=x_vde;2W%0b4BXn^&$9MO@5UsOQ
zy%)XlN($d|JTz5AS$}o-<!r+vH|tohOpZU7bh6xd(Tyh)85Fn@++MtCG?ftCWv!rP
zpj=Ys5CRfuSaG2D;!VcDM(M?yn3nC6H{WyY@6xRwUg-X)Tg}$==!%-7vQOJe_lv*t
z`OL1aTP7D)&XRssQmivXt6tw?cj?tBk29aFP0{qc-0G>NIq{G3m6Jz$7JEr-{Jdo8
z^;I^K(k9(+mu}Yzm=bOlayE!z0-ssIir%*1{>e{2{<RD~_(pTK8%ti_i4)}z2P|eX
zcTZsj3vu;u+?Aamis9as0Sp&RI0O_}7^Q3f-LjZj$M<B>zhbe|JLifWSLr~sGiA=)
zck_G2n;LsSe$zdtLOYhje#_%@TPD?8{Ho7+q8*eb7bhQN5_@sWGrN^fxnmc;+P3=E
z>Y4>@nm5B#HC;0PEWS1^V@c(NM`!n~>Ud}=y&~M3_te7Itz2h$qfeD;IZCuC8@a!<
zZ#hzNXP(vRn_q2L1nyeA_vxOOiD!5UHME4bHvaBeedtmBo5{;RUzL-~v-!Ah#jYhE
z6khc_L2@JqliBaTTMCW-$R3{A)-E|w-N*aHDseg2J%?SlDSh$V({6AvxAjH#iDF){
z8*y!<aeM2HH)rk%*4!>^d924~wPeVT-Z^h=ZMH63Eg>g)?EAY|E|ZkpoYdJI3w11R
zL@2pxG4!1{_4C|T-55*dsA`ps?uD+Y%U0fEza6HcyI(+l;=kZ2S#gi%WU2<Qcgx;+
z<?YVai9QoPswVKbhn#;X7xQfOg?BcUa{Ce&-Ij^#+xo<^tvg5GInH@T#<oLWOiANb
z<W29&YHN~anei-WWuA_%k&zB+&q3lpLkQy}hC^Sx6sK?fbi^pI2BmXh|NkZcE;CVH

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hg_link.jpg b/pict/menu_t_hg_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..97f79c8f3e9711cab83fd9f94c45c1f01d743016
GIT binary patch
literal 3260
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
P2opShWnf@n|9=wz@58iV

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hg_org.jpg b/pict/menu_t_hg_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..37f4b110451a7a88bc2f464f6aaa79aa2714a2b2
GIT binary patch
literal 2418
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
SCMqrI0`9sU6a@1BZvp_{Dl5$Z

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hm_cur.jpg b/pict/menu_t_hm_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..67a9ee4699f6a9990705b25459aafca434c20e85
GIT binary patch
literal 3736
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHv3@4Zw1sRwG8JPtc
z{~uwP&A`aO$jZoo1X!7vS=iVa85tRvK?FjEk%^gwl}&(wk(r5^g@c8anS~i72@+;t
z6%=Aq3=(5EOq_U8X_0WSV_>0C<3nW;(S=TvHkyQR94smoWME=sW?^7q=3oNrV_;xp
z5@Z%pG!$ZS3>0QfEL8f?IC0^|gGNplm6M8$|KDQZVP<4t5@Z%+uxEI^^`R6Oqk{%3
z!vYbeh5($**j~w-dTqC*{XK0NYR-DOEDZ{Y&OO5;7g$;^yMzB_<heIW`O>B~UvllP
z&y4-r7vgJpd~xQtJ*VC;3vsi6h<-WMaa^u<`K`~|`(_48JifT)cU)@uWi4fyDzo|7
zXV(2nbxH1byZp9t>V2OTJ%ulB)vh<%{c@^cpRKh2)@R|hMvG`+<mtS_4I6(|Ecj!f
z@}FU?o7V^absg8Ebk}QI{OQfjdo}O4?dd%0DPe6%4FOzCe%JQ<S+ABa>XZ1&`16|h
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
CxU2~P

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hm_link.jpg b/pict/menu_t_hm_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4e17433ea435378aeb2828ad57d7922fd714a995
GIT binary patch
literal 3361
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

literal 0
HcmV?d00001

diff --git a/pict/menu_t_hm_org.jpg b/pict/menu_t_hm_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5fb204ae57489b7bd2e863b671f7c5cf5bb4d913
GIT binary patch
literal 2462
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

literal 0
HcmV?d00001

diff --git a/pict/sanit_b_norm.jpg b/pict/sanit_b_norm.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2a86e0e6ae06c8077435a206fc313c4bc98f3cec
GIT binary patch
literal 1448
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?<Brf(%T8jLd?J
z|Bo<CU|?imW?*JyKmcYIRz@avHbzDUW=2M22}ULsW>z)<1_l-uW>$74R#u1}MkZz!
z20<ZKVG%aPMZqbmhK`97CyBBzR0=FSXyjC+Y}_m+$iT?V$i~LR#0=5Gz{nuTq_|Kh
ziCI|L&@oYoMI^AX@Zm)xr~kJYc$gU(m;{*x8SELphviBxy0cm@Akewxz~U_o?1${?
zDlc}dx;cH)E60-CJB1qRJ=}ty=`t%C=l)Rr(&D~jmgemIgZfJp->G%|{2hN{R?zd6
zdQrI>Prn!2nKoO)LE%K%naO`2Dso=FX}j@W@tg!T_skH%PL<-A=zSg+*XJy*GF~DX
z?N}<ECeJA?E~?Dw7r9E6w@u^7x!|64o99h+l$h}9)34*6+w+>+#o08rmoTNB*4U(~
zw3P3n&!Gfn2LD|e#%Z2RYI8+qxIfW5`RcCTx@g|d%FlUJGQC#x8Fnc!g*>sZX!*T}
zujKHzStY&}e_Ac|uZ7C&$a0OId)k57%3+z0-vkLYriBh^0Rp$TX}|GoOgic}A@D!L
z<;?r}x~EMp-|jP+_)IB6$uv+QsHFdn(A&42*C*fI75~uW(Yc3H-`uX_tW^~GF7jeo
z?tYei6WWnOq%&1Y!*P}?zW@W{XO8BlY7LPR9Z9FwZ(3P#^zXXk&kqJ)F~2?8YDadH
zh(Mc33j=fhQ%U2ecO0XP5<ar%8T;;N{oJRw>#pXk+#~vPWc8+;HG3p}j&Hixr{X^u
zFaIsMD!ws9*Sy%?^WBU+0#7Wvy%=VmTF9j)=<z60rj2)@-1@x|hXns!Oq&o{n<?ba
zd@|*wuK4OT88`E$TRVxj^Rzv3H%nUAkhtP&K}6r|nZXY_POus>ORzc17XR6^@?OW(
z>scG0o_-o6Da_+hYE&<iWv+djhoN_-@}0cx%!@iq%BJo$?^xy{a42S(r{`Qn!xbtG
zzMB+&?o5!n_qOAi?A%lH<4P8X{MGWUGrp>AvU%A?qw=!+ym0YwC!HID?5k8}m_&+9
zIJ8h%l8JFLQx4}p!{X<u%vw8?6jvWwfBe%bo6Jj7S6$3rVtRLvX<S@u-mJCSRe5@g
zHo5wmvP;Bkun1rGa*gLT(C|;-D08>0v@|j(_OR8yxPNNm<QZ~PC)Zs`Tx`0TSGwks
z=hmE;U41k6ZQ>3+<r2K~k)O;qhJqTWDF#Q5%&+KhzIAe1O0jIOWBpNHVP^xEqtjR1
z(7&F3=<(gPcIP-RHmDVK_e8B){m04VvclW9b1HXkXo-5WzSih6qw*1>>);r%*tPf4
z%w>0+ejdE^GQfJLiKj5f3MQi)i~?R;j81B^%f@U=o48o|rKbNmt5_@lt0jf2%jaIL
zdpLQ4;q&m1i%M(lBkn(W`JZ8(*?RNCSN}7}Sbd1BwV!pj$J$~|+`NC>!OK5KZ@76h
zDgVJ%t9sMjymP|TXf9aheanzpSo-gzY42|AF_ByU{a47DZ&B0h_GhR6mXJTrG@mQ8
S-+$XX(MR9!J+Hd@|0V#q-ZJ(8

literal 0
HcmV?d00001

diff --git a/pict/sanit_b_san.jpg b/pict/sanit_b_san.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..601b8d67c04ef93b1649be0b0bc2451cd64e9e9e
GIT binary patch
literal 1558
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY3?<Brf(%T8jLd?J
z|Bo<CW?*1sWn^SP0!+*-tZa<zjEoG-j3_dUOf1Z-Yyu37%uLK|%<N3;5KW9s%q$G7
zf<kPHi-bi|R2`Lq4HF9|I!#gzTzJr^s98mnU66s1iJ6_58K#4Qk%382h*{Clabc3M
zvJ#6(VB*BahlLvtUNmwF`hSaohZ&@RS&+e=;d?}(;$~TWy9tlGC0gb#V1BoLer?*8
zsBOWEMIKI-J~*ZEuhOP@A2UP*&mR90{H?3s&@5DM>2)z)n;D(6PWPRf_b`n|V~yrd
zeqCjwCTR!tQ*)QhZQ32U>ea;7L!a_Os+sdWH@;pidUt1+Px^zMd7L57@&u;~=Bj#X
zc}+d)6%-USsnAnt*;02SiDNIKdK0v&zM9Q*2~%Ac;&OD#f{shvy=-@b_IBo0JPov{
zW-Y#7;xXljcJB6@YGErb7s?jS40?FHbi!1d+v`kP6?7gnEm*{H#_vq+R^2s^Gctb!
zWNt|kNy)w|u$?($_wA5}7A%~GC)K|kHjS#9|MWhq%i6Ep-Pdo)vasHLyHbUfA?3J4
zlOg-hJ(;%tAKo`j+I~gVe%+Rsa_%6#ZO>voSUrlIIRjXd3|SrCvP*GI<vm+|Feu`F
zz#P9#m%L}6SoD}NxcI})fX}M;6f9Cs&Nj=bF<5c8Mp?7{!6Y+-j<A|L^{)0A>*A8O
zowD5VudD8&zoA*Mzop<2nJAC%4U9j#n(wL|2$gZO*pc=r?eP8ZPrH<RPt8-DC*h=(
zw2mjmNn{NNL++0-uXnE$)`~=mHHllUxVNaT^qBUVr7~CY1MRI`RkaoWGdML|J-fS3
zOeBl#M&Z#l<~mMO4r(&!S?|1cYwd!bmuqX62Hg01@=J$yZ&b?RW!e(g=KW__xI1~z
z&Bux-!cL!Qlk60GY~x$Rqp~pOX7s_MYue9+uqb++GS2;5mVaU9IyKb=cNB%&4?W%-
z#NzbjREgY*YX4)G#4~!lHXYjMK3($1`h^_6I}@`im$Zw?$*}HlvMKlxx@VW;v&B9#
z5w81oRI43+s43=ZUVOpo&h8a6N-tLAIh)P+wz}zVD&MX%oG&LW_?No;lj5G>+5Bb_
zKQ7LFDmVF0Labn(5*L4d(4D-fEiZn&eVzUH?CzAn{E69#v$HNuWB=(Z9<r$A5trys
z;b#YGvdyO+yJ*;R?S9eg4QXl;Iu#dhO`mjW+R0goozrgXq=lDoOyuPEo_5M9IyX<#
zHHPi)j#_tq#;8B53M=^=ORq_@zuTE(cTo3K&0XUa)7P)N)p=TZvyxwt^jRmNwT)8?
zl1whIsIY5~u`3aL5>*x|c_&z;S-ny4;JtmPe8tcB?4OkMcuA@3p}Q+})qP!s^tY=&
zb=`Mjvb03+o-HElS<<V;K27D>XR7-ybIaDtGfX#3W4nLRalt2!X`idUrNyUii_Z0L
z7ino(d8lkfW1ITpI7372ghcOWi>o?+UeZd{>@3&lHChzI@^AxJQ|L^eNh>PeeY$fl
zcyjOW#5Q}YmzuZwcfAzct!K3IJD<P8<HxgKp6tuN{o~rd=lQ?mXML`=z5lX&@2U0M
zzeaCuZx8dn{QTl9>-x~$ezKA3c0Ctw|5|&i;MGaXFKK=EujXBD5A!^~*re>=>asaj
zoBV1e7jOR>z2)K6NyRVD%I;rvcRAmh$@ASZ-u?}HYf+jq=a;d2{;TbohgYi*Vd%2`
zR|?sMd;gv>xO+Q1?MQC_^*1YnPqt3_YxnB;hXT8KZ1H6=TVH-Ty|iL)ak5$V|C<0<
CUWRP|

literal 0
HcmV?d00001

diff --git a/pict/sanitized.jpg b/pict/sanitized.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bec0da750b1534fe54a516f8d0e25c13481879aa
GIT binary patch
literal 18357
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
aJ7v$!*!N;7v~z?K2xx@>O}O>{Zvp_YP3K_%

literal 0
HcmV?d00001

diff --git a/pict/srch_b_lorig.jpg b/pict/srch_b_lorig.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..01354eec4e47d6e7396dddbdce76a355eb908cf0
GIT binary patch
literal 1963
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
UW&aM>>|eiV^SY<c^#9)k0HpC^&;S4c

literal 0
HcmV?d00001

diff --git a/pict/srch_b_lun.jpg b/pict/srch_b_lun.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8a2d2b720e6ecd7a8e1ff14d8e2ad1cb15328b3d
GIT binary patch
literal 2180
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
KZ@XU7|C<0n_Qi7m

literal 0
HcmV?d00001

diff --git a/pict/srch_b_str.jpg b/pict/srch_b_str.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9d9371452a5001e11945c3cfc67f0fa209d8eb93
GIT binary patch
literal 2111
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

literal 0
HcmV?d00001

diff --git a/pict/srch_b_un.jpg b/pict/srch_b_un.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e1a4b4d2da8b8d38d84f163fd8d406711676cca9
GIT binary patch
literal 2445
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cGY49l4r1sRwG8JPtc
z{~uwP!oa}9#LUQm1X!6^7@67F85tRv8Brt{nV4Bv1sE8anVFc`nOIm^!J3#DnOOu`
z*%*Wr7YQ3W1}cf9s2Z^+7B-4bT$rS6ywRyyMNE)^k(r5wm5G%VY9J$nAd?WY;=&|l
zL&rd2mc+t|8<mViJ~SSD==8Da|1Aa{W<~}kL1sY)dxq~8WiJ{I?AI(8RCV2TQBeGN
z9LqX4#Z#|Zmq$<i;e0@X#pU0W>n3{+o-FC+?n-~Jrmehgqi%U*qvUnvJ#V5zmfv=d
zj9n({c3WY^s*2Z3jyZRB{Aaij$yFua^it+@VcD;{o)?-gTl9F`d98W5WcAj~tA2Wx
ztre{JaNT0B@jpMiZofNKt!s*7Y@Vt(?7V#{YQCrP;y2o}U;EBB&$}BZa^<_)d7s%g
zHTnbAO?`Jk*ojk`+44ZRbk`D&mrMmg4!@>UlwA(_GwIw7&A05SL2=2Qhj*}Ui#^1W
z-M!`Iq0(oLkM7>wx=F=!{nOQMUrrPX-8;p*qv@Q8^f`m$DJ*I0rahkYaIx<uBZ**j
z&awpx3qw7_TTRuT9*~=9z9~>{VQSBzW8Xa0W!SENx7c_n`q0`7R(@g^L+p;Oy583I
zQ9$^Kx5759ysWL0-|?weaviN)b~a@%=eBr<%;R!>EBd+<ymx$C^*!slx<#SPT$f~_
znaiA$LZ*29NtH15T-A10BE)Nbc>m<4`rVQLTs9ndeE4eg7J;3jozh*e_KQl*aWd$y
zu8vcBq;ct5+v>a9{ZCA@kg-^vq1#%ymFHrU+aX_ra3`%5rJ-A*G#AuHXW#dAe=@D?
zpta-8&>c^A?A_!XxGs31(}e#FVv>_y>q>rHKEc=3d-LwF)|V%2lKkH+xZUx{>F8zs
zqq%xp&R(mLu3rD2p>?Of(Mfr!%D|(ddUjGyU!L|P`EPK}Q|{zC{r$EvtBib^wX4nq
zCC<r7>n45U&RG3C&i2-dPn>1!tZElRmOPh83BS{?_A)Q=+f>(Ub0!>+m{hiqQ%Fm1
zonDOMk<<?XiGpVoHrH6FtO?qA`&hty&xr6F?gFp3r`^4JH%{d8&cb<+K=-pt?ev^7
zQ8^~TUT3OH^0wb<k0zBZVwg0w#5|38#<Xva9P<(ll-nK!%oO=EQTVUv^rtJ$nBqPc
zws|LLKUH!GjOUG#3!WsZ{@6^pNoJRUlJ3mFKta=!b#9BeUTtRYP)td43wiLUUN+&i
z7uUx%-g2i6Uv7FbcUH}EzQ<bGx|^$VXQc33ERlXxD!NolU#dU<>H4(4zrz_sT@vnR
zsz2KCFstxM#n<q4JFdCv+h^-@duxi>be!FrrhY4Eite@tYd*!TGQO6)(rv<|Egv3w
zIiJ|3TlVT`pRKLc#%D`z&YbG|>(ykR-`P`azU)+YPw+pX>N7W8WIIn&)0@8Cd7BLy
z<}j@_XAiXzn!D?oT<!*j8W%SEVEgS~R@GF_i}@?8z0dr+kY7UNp0GzfCyEXz+>WUf
z{Isn#%FKM>ltTB`LnS+|^39W4V$;oZKVuHZkx%vWxGrrjS~WAiGh=sj`u)ZBok#a?
zuiCNOa`o&>N*v1m7aeCRy?Y+K@XK-^U(K6q&c5()>25PQI<sGI-YeIYOm)+X=DHqL
z*!tb@^{MD2^DOUR9-|lCCZ21(3a=`%d{$JDxbW?Jwq&J#+N|Etst>7!Dc9aMYi-ZC
z$-4NR$(ltsbN+r3`JEil+m_<q_u6mMOWE)%(n(Gpo=3&@x2@%#_B_QYXi29%Q=OM;
zUQ#K;54|w{Tfes~d*d71ep$(X_noDCg&dS8%$d1m(F!Rc%^4C(tGcx6X1$s|pD|SR
zLkIua9c$WqmCjkM+}>Gx+`9DFMfFR&-Z_@!Jdf=-AW_84!yq)-p*AE^>k=c!au%h_
zpK@$c_;1UwuRqOdJG;lZP^)m`nQwPfH{If64p%s~e(m|~JC00?&OO0#_~b>ojf!1c
z9^V!&s<ofCD*xt`rCPIg7#{d|kaczg!?~lDMQM4FrzNeDUSH0-@pZ$ZUq5EAdeSyu
z+&pio{kFxvshe*t+W+N0L*|Q9U+%10RjK-E%}=FsC)2!+Cf~htN-9_KwO7|t{$yKu
zzmHNMb3&?`)?DAdY1bw5wObtKnpDZu$E{j+<)g{&MJK!CH)fvyHCx-V<IMKkk9dyO
z83?NiSs6Wcne=VF%SrPqS^G3&^(qZ^Fne!1^7UD*kXgF$p*3QA4)dQa;+%ND;f%Dk
z8As33F8feVri2wXdG0SYxB{cZf>&wG&OWGpD5o+kw@u~L;{NUH&$G<!p7cO+hx(<$
zqq|cp*1js8rmb|w^ZqXemA<4&Da_V_87}J<NvAqJ_FDdUUEvcBr$QkcSDT7@u4gBW
zSdQOS*!o!fcUfx5ZrjwN$8x^sd{(?&Gds&YY+e-OgdMEP6@TNO{58F7uXbl`$F=(&
zGOGU>#FEY&>0Ca4(Ta1T6Zfap9jW*e@o7oyoH_SAo^-r=Qr4BfQkXHn`t}8z6;t1T
zxY|EG$7|I|CS7ltf*%@hd}qz83E#ZCpyS4>$(@Jel-E7XnKD<;wtA8c$6mHTpVJ>)
zV&g8TOuisL>CzjP1ja`mKUW*u%KQI2t9kc!{G~aiuj1cszqV(-^se8Tf&XsrKK)Ab
zugUVy*XQb;Tl)I=Cuu3;e<F4EcZ*(`m8LAOcgy(kpP}^hvU6)D4^4KK@4t(?f6vYT
zX>D2Y>cX4i)nDJNwm+Gp`FH=8tLt4~dN1F;(DnZILvyn4-(2rz64-ugPv`e+QQPeQ
FHv!o7PjUbN

literal 0
HcmV?d00001

diff --git a/pict/tab_close.jpg b/pict/tab_close.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0a63dd24ba231299168472dea3524db52727b4f1
GIT binary patch
literal 1357
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?|Hsf(%T8jLd?J
z|Bo>AGcYhSFf%eTzyS*@8v`RV6FVaV6N)$k6Eg!N3oDxd0|P5F6AKG78#_b~qaYJA
z3xg1=Fq@*Gqll7`GJ9g-#lVS+E;$D;JlHhJ*i}rBfsuuQg_VVo6{3TIkwK7&S<x_1
z$T3lgMWnFNN%+IWg%^#Q{@-HYVP<4t5@Z%+uxI$))A^&vO!nsGE4K}A<it%?y|h)6
zVTX%L6>H_o*lva=YcH%Yo~p}#ckh1n?UfNVb82$7Dhd|$J4Cn@hj=bz^gX8{Bgo*f
zlJShj5*3Rh6Ayk2lXkk-HIJ>HdxH0>hA)|!iAN27Y*==e#j4*pdxP6m^;Pb@snd&+
zXDAwk@OhTV7nr&HS@lt1(*%_#7ZO(VT3xzh(zt?A!N$dEx>m~al;j;pHVJY}Iw#&S
z@9`VS$#JdX#=TY1Y<ip8Z;CRgyc4oBo8GarboG=qjA#5`Ea>4E*d)IrnqO6OhsB$7
zMmg8tu_e1rI($y+3fC2nT(5AJB`z5{bDLCVoZxpYZ1GIzu6-=EJR`a?`tnreQ}*%Z
zJ|Efs`Mj_%*!Ig@@BGQPS3NoU&Zc|n^9wj#QdlyB-C(CeJ=czM`PfBKqIQcljJ*5r
z$UV{(Ox)ktEc@*!=ky67PkI8qxV{=)&Jf>|Ajc5EC@;10P><iIN;CUI3Oc8=<{vqD
z@5YYV^F^*HZasEB)yU}PiDkvUJ5C2*Q<$0=wKzEQqv)L<VV#jaJu0a^$pU98RJ-2r
zNgD-SD@%Jhwehxfl$#t6TiKgw@x^9mmQ<bWNz+l(yz2Di!xhn*%F8yZ7Hj%=%ss63
zM?&$JnnQQ$QQpQIzfVh>%gS-<I~{Rm|N8Lke6gC8rN=^MD>4|}e!JEyFm5Y5UrAVb
zseq@#q?=6qyH;E@oN!S3?X+8Wen(1tGqN~XBAM;@QhUDawMe@>qeD?%2fPpeb9|ue
z{l0qE8`h=2Woj>8ba~|5T78FY-u{=bC;n&fEh^_-d$!a}_Wskr)I!6jdsl7U(aJyT
zAOqv?1DV@hPp{b;l_bgdpTV5}`@DZo{zds+xvv(*!j>dwE-Is9CoG$C(mNws+NCnK
zbkD0J!Yk*j(J|ZgP&L9WoOg>>OuM>@$RWvKFCiiA9*0#q?t+QMm&{(h+>pB?i9zZ0
zgIZS4f1ayuZLT!Bpc8hhB__6_F3bPv$}O5tPCHD`*nX$1^~FT-xSD?@GQs!RAFWO)
zSzETQBwWf%WqUzN!og!UJ3HA09=UGWV8231E`Du<|J&D7o|&z*-F9h1Wth9x0n__t
zf$;(JCUpE{`LnF1?)<(rk9OIf{GCuH|9ZY@t<#Rz>=Uj8`u=Cwva~RIALpF!pAS7>
zE;B)<?MdN3lan)-giGBPYQ1`=e&dhHUl+V`yPDNJ=gsMf_YLJ9Nt<4|I6Y`bR;ikU
z`y>C&YtNQtn%_4#Sa|7ra6I$2hd)DJ1u@wR)y@@aFK6xC*s!7Lc1V+6i*xWwM$uQ>
j^xi4SJAYJv9lX+Qb;ye6-`(Q2-#pYT9%U6h>HkdtatH~P

literal 0
HcmV?d00001

diff --git a/pict/tab_help.jpg b/pict/tab_help.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..632e27006b00f6a18c51e5b20f31ed9dede5de0a
GIT binary patch
literal 1253
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL3?|Hsf(%T8jLd?J
z|Bo>AFfcGNGcqzD01GPvGaEZ2BLg!dBeDb&GYbPFE1LiVBQp~V3nLdBGei#)BQuL2
zD}#_Qo1&qkNO0lAi%Ld|E-8z#2PQ6Tnj~uM>?+8>$jr>d%EAn@hLJ&#Nl}PdiN(+{
zFj1s%qLJ{zhfYoZZ!z#NGcqs<G7B=;GrZSPiTLQWw$s8hNYy2D)yLQUb58CM<oZ()
zt10_1Blc2t`gZ*{P7-%Qi`eEhTC7?0Y;E?OP)#59J30F&Z?az#n-zEcF7K4}F|%i?
zb|>6=x^|!Q<+C%+PHB<(8Lg~x_SMJ3oU@sj@5oJcV#&TK$zT7ba><RuyKgViKDVSS
zbS00J#iwN{86utmeRGPI%dl)pkx8nZ?xIxLT6(`KSK7FDYsF57ZM$BqG!eR=+N9{Z
zXvN|dt(7r6#(wn@lV6DYS@fwWEs9$!F5zr+@3GJ$tFE=4eGacvIuBnpSg}rga)B#H
zQkO;JgK6bGS=Y5v&-?7POt4w}^?OO2!v4)xDZk$~DOh-@$cTzoEfby<swihME#}qt
zP0I0h&(=PAqNh7W=j@@}YihP4zb8z}TU(tTRp_ofw<265`EF#}jk)3W?2F5tb=ZQ7
zG){{b{Z6jWvbnMC#;d@6%d*}JZFUb$+$wsk{@ky98ILBa8ZRvPoOC09;|`T;#~z;R
zRL`|)uwQa1wz+(Ebiv}AjItYICKay!&hgG#MMTz1`oQhXz;jJ@%XJvecRu<2({-O(
z_kN$3%Nt$qncaJFclWWgB|DGn?iFG-dc5n6XJE>1ch^lhlS7xYwIn&MTpseU^>AUo
zm?g*T&OC*dpu?6Ygd}sn?YqD6t+&u^-S<0QNA>M{eSX5^KC6#uMmkLlQ{$R6X0#XX
zuuLrsNjjX%w0wuJZT;8Rm-cVx+!1y6>NM&7r!L0k8a~~-D(!*L??_QW@pIj6&$_1v
zJvx;n$@t}tz2y5R_I$!w`IGe;1Fg=o$+)KqdKN^=9N}HDQcK-RX;IO!jWWhwK}=J<
z-mW+@d;ZtY$|qZXZd<pd<-xSXKQB1_cD!x0*FGlh(#h|Cs~l#YW!ChQ(;XJ(t_XSb
z`t(!9ABAhVD~(<Vy%qc2cWJ)bl;v?Xe|GR?zIT7Nb(2-np4I2NmUFr+Gdjt4KTrF*
z^_;r}Q?<i=Jq0HF2v5$ODcsJNd0tj)??ENOZiD=~m)|Uw1Xk)9oi_i^5X|*#-9KT=
z_xGospDx!hXSzY*--44fmn8R@t#o?z&Yt<6ydQIr+0m=MvBw`&AAWi4%I2h3?Oks#
z8{b{cn|5yRv5Drfemg&{-}>~}l|CntqI!*9n8L=5rE%K3yShKwKK$}HD>f%KXw~_5
StNrKxC^!&$RVsSZ|C<1i*6qOn

literal 0
HcmV?d00001

diff --git a/pict/tl_t_data_cur.jpg b/pict/tl_t_data_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d9d9b10638a30653b203b5f99107d915ca007465
GIT binary patch
literal 2906
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
bp|IJ#NG@v8#*cNOS86go1zdf%|Nl(@B@r<X

literal 0
HcmV?d00001

diff --git a/pict/tl_t_data_link.jpg b/pict/tl_t_data_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fe8333bf274b8acf0ad68cea2502698ad53dabcf
GIT binary patch
literal 2580
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

literal 0
HcmV?d00001

diff --git a/pict/tl_t_notes_link.jpg b/pict/tl_t_notes_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fe01d8c05554a886039c72e519a95283e67279e8
GIT binary patch
literal 2216
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

literal 0
HcmV?d00001

diff --git a/pict/tl_t_notes_org.jpg b/pict/tl_t_notes_org.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..03c643b84cc6f49571ff4f2219c4107ce28e2c45
GIT binary patch
literal 1715
zcmex=<NpH&0WUXCHwH!~28I-d6b6R>Zx{q!N|UoI85kK@7#J9A7#RM)W8ia4$xljU
zNIAg3z`*$bHbV;o8w(2yD+?PdD;p;pD;p;_2OAp)HxCyVHy0O=01p@l@bK{q@bmEq
z3yX*d3(H7LOUuZ^0V6v*J1-Bfgn)pAl&GMn6kLK>#{UBhf*cHL4C|N~1sRwG8JPtc
z{~uxKVqj!oW@Kb!KmaCYRu)EfMzA<Sl!1YfiJ65}07Nl!F>^4oLgW~km>C3FgoJ|?
z4KGewbV-DjP0TTHVq)RKjY>vAqRLK9o19Gr8JHMZn3$MBMnZK71~M^=2q`JD7&;0k
zE<E_r=>IJS9%e=cCP8LF2788IZz|lH7%n`WqO(Wj^Yb5<QiP0rj#y9nX|h>n?$TEx
zDY-2k6*pOa&3L-|PP}{Q4t|SWH6pJ%mOacrQdsgs^Qyod`OfG$r+T+b=jN(tUUIUV
zsM%=gr(Ce<>r=tMYZ)qirYPu|<@ze{uQr%Jv+cpPLgjCFwq2dMIoo7e=ix%$bf@GQ
z7iKG{ZVLZayFX;lo=4>z*A?EIEy!%OTcWU~f2XHM$fnbWlnbW5Hhb{lb6=cv>gg?0
z>=v}0@G#aoqqxIw_2)n8zwP2Hq9%toTiMNyn`qsVZ81a1a=VTtW6Jz0C3AsmCAR*i
zPfyLAz0||!)X5Vzi96)iyr{Zvw4g%hLgoSEo14~8@q19Wr)JSPz4@$Gi=<oY1&>~S
zusp=MpiV{Xt#XrBs@-oT>EsV?p}wc$Hr)Jnv)7<n=8i<#!J|d-tc6#KIheP6s`~hE
z<C?jK2Jy}EE7t#E+f;IdkLPQ4EVJUS#-y7nl1+Ak2jAYgY+aj^yJ*X`U=1G&+vGOC
zbv)m@mL2h5qf(d*rPFPzX4K8}bY97~%sb<}(dDUzJliaNo^Z_OU76*%GS*41&P$Rh
zbcW;)6)%NLHUAluI0BnaKlOH9uv{c9?CJ!OmAB4jCEsW9{TKdMJ5=dXOmyC|t5)qy
zx}1?(S^<`|n;KJV>;Czzns)22<&xCQ;Asx$Sgsm`q$Pey&#rko)!wHiWW%a-;luH&
z*Cl6&i5LmZPn?$_w(UJ%T|!s1Iq#(@3YvVZvvzx)R*l-Kzw6>zrs&W15B6+3`m|`0
z0P_mQNjlFrIDSuU^epHri}qL=&9^Nymr>RASR+e?%95G~vHOko-@JHw+Om65a|3v%
zG)#J!vo7K1_J{AAG$(p}$S4fC(fPI8bGn$tsvMVJhup;+?<IQN@(gZP-=^dlaof1E
zT=2}!$z97GgMF9W3Or#nXXfMOmwfN5R8Mm=+4to7U)TBvrjwW12A_CvLM}Q?Odv>C
z+hB{$^5-JuEBiOqYcKLue<dq4X>qe!^u+tQE0%Xwf9lzvy(+p%yQZt{v_HcmzLFW;
zo6HtY&T7{<74LUpWw6&>hd)7U<_jdtX}pL#djF8^cK4odo5~Z9%$>cWJ@?{c+ck4<
z6iS;1^4(s1tUA(q!y~i2MY1q8Id@&G^ZF&<ro21cadTHk*<Cr~TPN?f3vMnIc)QCc
zee2}ie9CFB6mOSQoX=J-lW{wH#d+I{kMpkiy|L(}$auk5Rr%9feZ5K#{#fZ0&!Bje
z{mq@M%Pf~oq?UW+Zv3k$Z*l8RuZFwr-8q}?slGp@{%zON3T4w*+y67<`{}04+Eky|
zGtd2$@73;RlUFv%Im^VR98+y!Xb@mxaNuBMP+&o2vL)aDCh>jsAD+NJv)BJI3Vr|i
z(esa&Pcj>B>De!__1(w5JB3f@Y~SnNxMi-P-_ggSuI~dM<f{8va~ut<zEUCWd71B!
zVMyFpIkrnBhd1<uii1@eyip#+3N5bfD?Gj}<o@TU8)o(^+skXLpK0oK&i?TKn*dia
Bz*hhO

literal 0
HcmV?d00001

diff --git a/pict/tl_t_tl_cur.jpg b/pict/tl_t_tl_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ed69d8bb2511b86e499b460d817bbddf9844a8d4
GIT binary patch
literal 2844
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
aI>jdC1us`=%f7$0qd!+$NwdHB|4jgEbQ<RX

literal 0
HcmV?d00001

diff --git a/pict/tl_t_tl_link.jpg b/pict/tl_t_tl_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1da8edd58df6f0a30a0377d819670d82303ab23f
GIT binary patch
literal 2518
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
BgeCw0

literal 0
HcmV?d00001

diff --git a/pict/tl_t_view_cur.jpg b/pict/tl_t_view_cur.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b621d7d857b3e437f9b7da200f40138522aef2c4
GIT binary patch
literal 2681
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

literal 0
HcmV?d00001

diff --git a/pict/tl_t_view_link.jpg b/pict/tl_t_view_link.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..94016071364e8948b80a50593f21f3e89fbd822e
GIT binary patch
literal 2351
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
JyXXJE2>?`oJ~#jX

literal 0
HcmV?d00001

diff --git a/xcode/autopsy.xcodeproj/project.pbxproj b/xcode/autopsy.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..f04caa4f2f
--- /dev/null
+++ b/xcode/autopsy.xcodeproj/project.pbxproj
@@ -0,0 +1,138 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXFileReference section */
+		02B041C40E9070E400E46A87 /* .perltidyrc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .perltidyrc; sourceTree = "<group>"; };
+		02B041C50E9070E400E46A87 /* Appsort.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Appsort.pm; sourceTree = "<group>"; };
+		02B041C60E9070E400E46A87 /* Appview.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Appview.pm; sourceTree = "<group>"; };
+		02B041C70E9070E400E46A87 /* Args.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Args.pm; sourceTree = "<group>"; };
+		02B041C80E9070E400E46A87 /* Caseman.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Caseman.pm; sourceTree = "<group>"; };
+		02B041C90E9070E400E46A87 /* Data.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Data.pm; sourceTree = "<group>"; };
+		02B041CA0E9070E400E46A87 /* define.pl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = define.pl; sourceTree = "<group>"; };
+		02B041CB0E9070E400E46A87 /* Exec.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Exec.pm; sourceTree = "<group>"; };
+		02B041CC0E9070E400E46A87 /* File.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = File.pm; sourceTree = "<group>"; };
+		02B041CD0E9070E400E46A87 /* Filesystem.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Filesystem.pm; sourceTree = "<group>"; };
+		02B041CE0E9070E400E46A87 /* Frame.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Frame.pm; sourceTree = "<group>"; };
+		02B041CF0E9070E400E46A87 /* Fs.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Fs.pm; sourceTree = "<group>"; };
+		02B041D00E9070E400E46A87 /* Hash.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Hash.pm; sourceTree = "<group>"; };
+		02B041D10E9070E400E46A87 /* Kwsrch.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Kwsrch.pm; sourceTree = "<group>"; };
+		02B041D20E9070E400E46A87 /* Main.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Main.pm; sourceTree = "<group>"; };
+		02B041D30E9070E400E46A87 /* Meta.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Meta.pm; sourceTree = "<group>"; };
+		02B041D40E9070E400E46A87 /* Notes.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Notes.pm; sourceTree = "<group>"; };
+		02B041D50E9070E400E46A87 /* Print.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Print.pm; sourceTree = "<group>"; };
+		02B041D60E9070E400E46A87 /* search.pl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = search.pl; sourceTree = "<group>"; };
+		02B041D70E9070E400E46A87 /* Timeline.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Timeline.pm; sourceTree = "<group>"; };
+		02B041D80E9070E400E46A87 /* Vs.pm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.perl; path = Vs.pm; sourceTree = "<group>"; };
+		02B041DA0E90710300E46A87 /* .perltidyrc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .perltidyrc; sourceTree = "<group>"; };
+		02B041DB0E90710300E46A87 /* autopsy.base */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = autopsy.base; sourceTree = "<group>"; };
+		02B041DD0E90710400E46A87 /* make-live-cd.base */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "make-live-cd.base"; sourceTree = "<group>"; };
+		02EF3BBF0860F668001CA8B0 /* global.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = global.css; path = ../global.css; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		02670C57079A2F7E00BA95F3 = {
+			isa = PBXGroup;
+			children = (
+				02B041D90E90710300E46A87 /* base */,
+				02B041C30E9070E400E46A87 /* lib */,
+				02EF3BBF0860F668001CA8B0 /* global.css */,
+			);
+			sourceTree = "<group>";
+		};
+		02B041C30E9070E400E46A87 /* lib */ = {
+			isa = PBXGroup;
+			children = (
+				02B041C40E9070E400E46A87 /* .perltidyrc */,
+				02B041C50E9070E400E46A87 /* Appsort.pm */,
+				02B041C60E9070E400E46A87 /* Appview.pm */,
+				02B041C70E9070E400E46A87 /* Args.pm */,
+				02B041C80E9070E400E46A87 /* Caseman.pm */,
+				02B041C90E9070E400E46A87 /* Data.pm */,
+				02B041CA0E9070E400E46A87 /* define.pl */,
+				02B041CB0E9070E400E46A87 /* Exec.pm */,
+				02B041CC0E9070E400E46A87 /* File.pm */,
+				02B041CD0E9070E400E46A87 /* Filesystem.pm */,
+				02B041CE0E9070E400E46A87 /* Frame.pm */,
+				02B041CF0E9070E400E46A87 /* Fs.pm */,
+				02B041D00E9070E400E46A87 /* Hash.pm */,
+				02B041D10E9070E400E46A87 /* Kwsrch.pm */,
+				02B041D20E9070E400E46A87 /* Main.pm */,
+				02B041D30E9070E400E46A87 /* Meta.pm */,
+				02B041D40E9070E400E46A87 /* Notes.pm */,
+				02B041D50E9070E400E46A87 /* Print.pm */,
+				02B041D60E9070E400E46A87 /* search.pl */,
+				02B041D70E9070E400E46A87 /* Timeline.pm */,
+				02B041D80E9070E400E46A87 /* Vs.pm */,
+			);
+			name = lib;
+			path = ../lib;
+			sourceTree = SOURCE_ROOT;
+		};
+		02B041D90E90710300E46A87 /* base */ = {
+			isa = PBXGroup;
+			children = (
+				02B041DA0E90710300E46A87 /* .perltidyrc */,
+				02B041DB0E90710300E46A87 /* autopsy.base */,
+				02B041DD0E90710400E46A87 /* make-live-cd.base */,
+			);
+			name = base;
+			path = ../base;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		02670C5B079A2F7E00BA95F3 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 027355510E7C4D6D002BD6DB /* Build configuration list for PBXProject "autopsy" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 02670C57079A2F7E00BA95F3;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		027355520E7C4D6D002BD6DB /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Development;
+		};
+		027355530E7C4D6D002BD6DB /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Deployment;
+		};
+		027355540E7C4D6D002BD6DB /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Default;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		027355510E7C4D6D002BD6DB /* Build configuration list for PBXProject "autopsy" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				027355520E7C4D6D002BD6DB /* Development */,
+				027355530E7C4D6D002BD6DB /* Deployment */,
+				027355540E7C4D6D002BD6DB /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 02670C5B079A2F7E00BA95F3 /* Project object */;
+}
-- 
GitLab