From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- lib/tv/AUTHORS | 5 + lib/tv/Makefile | 35 + lib/tv/doc/html/.gitignore | 0 lib/tv/doc/man3/.gitignore | 0 lib/tv/doc/pdf/.gitignore | 0 lib/tv/doc/src/Makefile | 221 ++ lib/tv/doc/src/book.xml | 48 + lib/tv/doc/src/fascicules.xml | 19 + lib/tv/doc/src/info_window.gif | Bin 0 -> 6315 bytes lib/tv/doc/src/info_window.ps | 814 ++++++++ lib/tv/doc/src/make.dep | 32 + lib/tv/doc/src/note.gif | Bin 0 -> 1539 bytes lib/tv/doc/src/notes.xml | 182 ++ lib/tv/doc/src/part.xml | 40 + lib/tv/doc/src/part_notes.xml | 40 + lib/tv/doc/src/ref_man.xml | 40 + lib/tv/doc/src/set_poll_int.gif | Bin 0 -> 2789 bytes lib/tv/doc/src/set_poll_int.ps | 483 +++++ lib/tv/doc/src/table_visualizer_chapter.xml | 652 ++++++ lib/tv/doc/src/tv.gif | Bin 0 -> 17015 bytes lib/tv/doc/src/tv.xml | 66 + lib/tv/doc/src/tv_create_table.gif | Bin 0 -> 6211 bytes lib/tv/doc/src/tv_create_table.ps | 1120 ++++++++++ lib/tv/doc/src/tv_record_editor_mnesia.gif | Bin 0 -> 4982 bytes lib/tv/doc/src/tv_record_editor_mnesia.ps | 897 ++++++++ lib/tv/doc/src/tv_row_marked.gif | Bin 0 -> 12354 bytes lib/tv/doc/src/tv_row_marked.ps | 1611 +++++++++++++++ lib/tv/doc/src/tv_row_marked_popup.gif | Bin 0 -> 13216 bytes lib/tv/doc/src/tv_row_marked_popup.ps | 1324 ++++++++++++ lib/tv/doc/src/tv_search_result.gif | Bin 0 -> 23525 bytes lib/tv/doc/src/tv_search_result.ps | 2739 +++++++++++++++++++++++++ lib/tv/doc/src/tv_search_window.gif | Bin 0 -> 5054 bytes lib/tv/doc/src/tv_search_window.ps | 975 +++++++++ lib/tv/doc/src/tv_start.gif | Bin 0 -> 8089 bytes lib/tv/doc/src/tv_start.ps | 828 ++++++++ lib/tv/doc/src/tv_start_mnesia.gif | Bin 0 -> 8080 bytes lib/tv/doc/src/tv_start_mnesia.ps | 835 ++++++++ lib/tv/doc/src/tv_start_other_node.gif | Bin 0 -> 17327 bytes lib/tv/doc/src/tv_start_other_node.ps | 2316 +++++++++++++++++++++ lib/tv/doc/src/tv_start_pid_sorted.gif | Bin 0 -> 13775 bytes lib/tv/doc/src/tv_start_pid_sorted.ps | 1853 +++++++++++++++++ lib/tv/doc/src/tv_start_system.gif | Bin 0 -> 12372 bytes lib/tv/doc/src/tv_start_system.ps | 1330 ++++++++++++ lib/tv/doc/src/tv_start_system_unreadable.gif | Bin 0 -> 13890 bytes lib/tv/doc/src/tv_start_system_unreadable.ps | 1377 +++++++++++++ lib/tv/doc/src/tv_table_browser.gif | Bin 0 -> 15457 bytes lib/tv/doc/src/tv_table_browser.ps | 2024 ++++++++++++++++++ lib/tv/doc/src/tv_table_browser_updated.gif | Bin 0 -> 15857 bytes lib/tv/doc/src/tv_table_browser_updated.ps | 2124 +++++++++++++++++++ lib/tv/doc/src/tv_table_loaded.gif | Bin 0 -> 15322 bytes lib/tv/doc/src/tv_table_loaded.ps | 1430 +++++++++++++ lib/tv/doc/src/tv_table_sorted.gif | Bin 0 -> 15797 bytes lib/tv/doc/src/tv_table_sorted.ps | 1502 ++++++++++++++ lib/tv/doc/src/warning.gif | Bin 0 -> 1498 bytes lib/tv/ebin/.gitignore | 0 lib/tv/info | 2 + lib/tv/priv/Makefile | 72 + lib/tv/priv/arrow_left.xbm | 5 + lib/tv/priv/arrow_right.xbm | 5 + lib/tv/priv/edit1.xbm | 12 + lib/tv/priv/erlang.gif | Bin 0 -> 1297 bytes lib/tv/priv/help.xbm | 8 + lib/tv/priv/info.xbm | 8 + lib/tv/priv/key.xbm | 6 + lib/tv/priv/more.xbm | 8 + lib/tv/priv/no_sort.xbm | 8 + lib/tv/priv/open.xbm | 8 + lib/tv/priv/poll.xbm | 8 + lib/tv/priv/search.xbm | 8 + lib/tv/priv/sort.xbm | 8 + lib/tv/priv/sort_reverse.xbm | 8 + lib/tv/priv/tv.gif | Bin 0 -> 179 bytes lib/tv/priv/tv.tool | 23 + lib/tv/src/Makefile | 135 ++ lib/tv/src/tv.app.src | 56 + lib/tv/src/tv.appup.src | 18 + lib/tv/src/tv.erl | 38 + lib/tv/src/tv_comm_func.erl | 77 + lib/tv/src/tv_db.erl | 1267 ++++++++++++ lib/tv/src/tv_db_int_def.hrl | 80 + lib/tv/src/tv_db_search.erl | 485 +++++ lib/tv/src/tv_db_sort.erl | 141 ++ lib/tv/src/tv_ets_rpc.erl | 140 ++ lib/tv/src/tv_etsread.erl | 767 +++++++ lib/tv/src/tv_info.erl | 876 ++++++++ lib/tv/src/tv_int_def.hrl | 56 + lib/tv/src/tv_int_msg.hrl | 504 +++++ lib/tv/src/tv_io_lib.erl | 222 ++ lib/tv/src/tv_io_lib_format.erl | 389 ++++ lib/tv/src/tv_io_lib_pretty.erl | 171 ++ lib/tv/src/tv_ip.erl | 236 +++ lib/tv/src/tv_main.erl | 1807 ++++++++++++++++ lib/tv/src/tv_main.hrl | 286 +++ lib/tv/src/tv_mnesia_rpc.erl | 104 + lib/tv/src/tv_new_table.erl | 656 ++++++ lib/tv/src/tv_nodewin.erl | 403 ++++ lib/tv/src/tv_pb.erl | 685 +++++++ lib/tv/src/tv_pb_funcs.erl | 1050 ++++++++++ lib/tv/src/tv_pb_int_def.hrl | 99 + lib/tv/src/tv_pc.erl | 794 +++++++ lib/tv/src/tv_pc_graph_ctrl.erl | 120 ++ lib/tv/src/tv_pc_int_def.hrl | 62 + lib/tv/src/tv_pc_menu_handling.erl | 485 +++++ lib/tv/src/tv_pd.erl | 1122 ++++++++++ lib/tv/src/tv_pd_display.erl | 1059 ++++++++++ lib/tv/src/tv_pd_frames.erl | 480 +++++ lib/tv/src/tv_pd_int_def.hrl | 139 ++ lib/tv/src/tv_pd_int_msg.hrl | 433 ++++ lib/tv/src/tv_pd_scale.erl | 303 +++ lib/tv/src/tv_pg.erl | 429 ++++ lib/tv/src/tv_pg_gridfcns.erl | 1939 +++++++++++++++++ lib/tv/src/tv_pg_int_def.hrl | 92 + lib/tv/src/tv_poll_dialog.erl | 357 ++++ lib/tv/src/tv_pw.erl | 327 +++ lib/tv/src/tv_pw_int_def.hrl | 55 + lib/tv/src/tv_pw_window.erl | 273 +++ lib/tv/src/tv_rec_edit.erl | 744 +++++++ lib/tv/src/tv_table_owner.erl | 122 ++ lib/tv/src/tv_utils.erl | 176 ++ lib/tv/vsn.mk | 20 + 120 files changed, 47438 insertions(+) create mode 100644 lib/tv/AUTHORS create mode 100644 lib/tv/Makefile create mode 100644 lib/tv/doc/html/.gitignore create mode 100644 lib/tv/doc/man3/.gitignore create mode 100644 lib/tv/doc/pdf/.gitignore create mode 100644 lib/tv/doc/src/Makefile create mode 100644 lib/tv/doc/src/book.xml create mode 100644 lib/tv/doc/src/fascicules.xml create mode 100644 lib/tv/doc/src/info_window.gif create mode 100644 lib/tv/doc/src/info_window.ps create mode 100644 lib/tv/doc/src/make.dep create mode 100644 lib/tv/doc/src/note.gif create mode 100644 lib/tv/doc/src/notes.xml create mode 100644 lib/tv/doc/src/part.xml create mode 100644 lib/tv/doc/src/part_notes.xml create mode 100644 lib/tv/doc/src/ref_man.xml create mode 100644 lib/tv/doc/src/set_poll_int.gif create mode 100644 lib/tv/doc/src/set_poll_int.ps create mode 100644 lib/tv/doc/src/table_visualizer_chapter.xml create mode 100644 lib/tv/doc/src/tv.gif create mode 100644 lib/tv/doc/src/tv.xml create mode 100644 lib/tv/doc/src/tv_create_table.gif create mode 100644 lib/tv/doc/src/tv_create_table.ps create mode 100644 lib/tv/doc/src/tv_record_editor_mnesia.gif create mode 100644 lib/tv/doc/src/tv_record_editor_mnesia.ps create mode 100644 lib/tv/doc/src/tv_row_marked.gif create mode 100644 lib/tv/doc/src/tv_row_marked.ps create mode 100644 lib/tv/doc/src/tv_row_marked_popup.gif create mode 100644 lib/tv/doc/src/tv_row_marked_popup.ps create mode 100644 lib/tv/doc/src/tv_search_result.gif create mode 100644 lib/tv/doc/src/tv_search_result.ps create mode 100644 lib/tv/doc/src/tv_search_window.gif create mode 100644 lib/tv/doc/src/tv_search_window.ps create mode 100644 lib/tv/doc/src/tv_start.gif create mode 100644 lib/tv/doc/src/tv_start.ps create mode 100644 lib/tv/doc/src/tv_start_mnesia.gif create mode 100644 lib/tv/doc/src/tv_start_mnesia.ps create mode 100644 lib/tv/doc/src/tv_start_other_node.gif create mode 100644 lib/tv/doc/src/tv_start_other_node.ps create mode 100644 lib/tv/doc/src/tv_start_pid_sorted.gif create mode 100644 lib/tv/doc/src/tv_start_pid_sorted.ps create mode 100644 lib/tv/doc/src/tv_start_system.gif create mode 100644 lib/tv/doc/src/tv_start_system.ps create mode 100644 lib/tv/doc/src/tv_start_system_unreadable.gif create mode 100644 lib/tv/doc/src/tv_start_system_unreadable.ps create mode 100644 lib/tv/doc/src/tv_table_browser.gif create mode 100644 lib/tv/doc/src/tv_table_browser.ps create mode 100644 lib/tv/doc/src/tv_table_browser_updated.gif create mode 100644 lib/tv/doc/src/tv_table_browser_updated.ps create mode 100644 lib/tv/doc/src/tv_table_loaded.gif create mode 100644 lib/tv/doc/src/tv_table_loaded.ps create mode 100644 lib/tv/doc/src/tv_table_sorted.gif create mode 100644 lib/tv/doc/src/tv_table_sorted.ps create mode 100644 lib/tv/doc/src/warning.gif create mode 100644 lib/tv/ebin/.gitignore create mode 100644 lib/tv/info create mode 100644 lib/tv/priv/Makefile create mode 100644 lib/tv/priv/arrow_left.xbm create mode 100644 lib/tv/priv/arrow_right.xbm create mode 100644 lib/tv/priv/edit1.xbm create mode 100644 lib/tv/priv/erlang.gif create mode 100644 lib/tv/priv/help.xbm create mode 100644 lib/tv/priv/info.xbm create mode 100644 lib/tv/priv/key.xbm create mode 100644 lib/tv/priv/more.xbm create mode 100644 lib/tv/priv/no_sort.xbm create mode 100644 lib/tv/priv/open.xbm create mode 100644 lib/tv/priv/poll.xbm create mode 100644 lib/tv/priv/search.xbm create mode 100644 lib/tv/priv/sort.xbm create mode 100644 lib/tv/priv/sort_reverse.xbm create mode 100644 lib/tv/priv/tv.gif create mode 100644 lib/tv/priv/tv.tool create mode 100644 lib/tv/src/Makefile create mode 100644 lib/tv/src/tv.app.src create mode 100644 lib/tv/src/tv.appup.src create mode 100644 lib/tv/src/tv.erl create mode 100644 lib/tv/src/tv_comm_func.erl create mode 100644 lib/tv/src/tv_db.erl create mode 100644 lib/tv/src/tv_db_int_def.hrl create mode 100644 lib/tv/src/tv_db_search.erl create mode 100644 lib/tv/src/tv_db_sort.erl create mode 100644 lib/tv/src/tv_ets_rpc.erl create mode 100644 lib/tv/src/tv_etsread.erl create mode 100644 lib/tv/src/tv_info.erl create mode 100644 lib/tv/src/tv_int_def.hrl create mode 100644 lib/tv/src/tv_int_msg.hrl create mode 100644 lib/tv/src/tv_io_lib.erl create mode 100644 lib/tv/src/tv_io_lib_format.erl create mode 100644 lib/tv/src/tv_io_lib_pretty.erl create mode 100644 lib/tv/src/tv_ip.erl create mode 100644 lib/tv/src/tv_main.erl create mode 100644 lib/tv/src/tv_main.hrl create mode 100644 lib/tv/src/tv_mnesia_rpc.erl create mode 100644 lib/tv/src/tv_new_table.erl create mode 100644 lib/tv/src/tv_nodewin.erl create mode 100644 lib/tv/src/tv_pb.erl create mode 100644 lib/tv/src/tv_pb_funcs.erl create mode 100644 lib/tv/src/tv_pb_int_def.hrl create mode 100644 lib/tv/src/tv_pc.erl create mode 100644 lib/tv/src/tv_pc_graph_ctrl.erl create mode 100644 lib/tv/src/tv_pc_int_def.hrl create mode 100644 lib/tv/src/tv_pc_menu_handling.erl create mode 100644 lib/tv/src/tv_pd.erl create mode 100644 lib/tv/src/tv_pd_display.erl create mode 100644 lib/tv/src/tv_pd_frames.erl create mode 100644 lib/tv/src/tv_pd_int_def.hrl create mode 100644 lib/tv/src/tv_pd_int_msg.hrl create mode 100644 lib/tv/src/tv_pd_scale.erl create mode 100644 lib/tv/src/tv_pg.erl create mode 100644 lib/tv/src/tv_pg_gridfcns.erl create mode 100644 lib/tv/src/tv_pg_int_def.hrl create mode 100644 lib/tv/src/tv_poll_dialog.erl create mode 100644 lib/tv/src/tv_pw.erl create mode 100644 lib/tv/src/tv_pw_int_def.hrl create mode 100644 lib/tv/src/tv_pw_window.erl create mode 100644 lib/tv/src/tv_rec_edit.erl create mode 100644 lib/tv/src/tv_table_owner.erl create mode 100644 lib/tv/src/tv_utils.erl create mode 100644 lib/tv/vsn.mk (limited to 'lib/tv') diff --git a/lib/tv/AUTHORS b/lib/tv/AUTHORS new file mode 100644 index 0000000000..7736a75b2f --- /dev/null +++ b/lib/tv/AUTHORS @@ -0,0 +1,5 @@ +Original Authors and Contributors: + +Fredrik Gustafson + + diff --git a/lib/tv/Makefile b/lib/tv/Makefile new file mode 100644 index 0000000000..1c6d4b54f6 --- /dev/null +++ b/lib/tv/Makefile @@ -0,0 +1,35 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Common Macros +# ---------------------------------------------------- + +SUB_DIRECTORIES = src priv doc/src + +include vsn.mk +VSN = $(TV_VSN) + +SPECIAL_TARGETS = + +# ---------------------------------------------------- +# Default Subdir Targets +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_subdir.mk diff --git a/lib/tv/doc/html/.gitignore b/lib/tv/doc/html/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tv/doc/man3/.gitignore b/lib/tv/doc/man3/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tv/doc/pdf/.gitignore b/lib/tv/doc/pdf/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tv/doc/src/Makefile b/lib/tv/doc/src/Makefile new file mode 100644 index 0000000000..f30e0307a9 --- /dev/null +++ b/lib/tv/doc/src/Makefile @@ -0,0 +1,221 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../../vsn.mk +VSN=$(TV_VSN) +APPLICATION=tv + +# ---------------------------------------------------- +# Include dependency +# ---------------------------------------------------- + +ifndef DOCSUPPORT +include make.dep +endif + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) + +# ---------------------------------------------------- +# Target Specs +# ---------------------------------------------------- +XML_APPLICATION_FILES = ref_man.xml +XML_REF3_FILES = tv.xml + +XML_PART_FILES = \ + part.xml \ + part_notes.xml + +XML_CHAPTER_FILES = \ + table_visualizer_chapter.xml \ + notes.xml + +BOOK_FILES = book.xml + +XML_FILES = \ + $(BOOK_FILES) $(XML_CHAPTER_FILES) \ + $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) + +GIF_FILES = tv_start.gif \ + tv_start_mnesia.gif \ + tv_start_system.gif \ + tv_start_system_unreadable.gif \ + tv_start_pid_sorted.gif \ + tv_start_other_node.gif \ + tv_table_browser.gif \ + tv_table_browser_updated.gif \ + set_poll_int.gif \ + tv_record_editor_mnesia.gif \ + tv_search_window.gif \ + tv_search_result.gif \ + tv_row_marked.gif \ + tv_row_marked_popup.gif \ + info_window.gif \ + tv_create_table.gif + +# ---------------------------------------------------- + +HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ + $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) + +INFO_FILE = ../../info +EXTRA_FILES = \ + $(DEFAULT_GIF_FILES) \ + $(DEFAULT_HTML_FILES) \ + $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \ + $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html) + +MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) + +ifdef DOCSUPPORT + +HTML_REF_MAN_FILE = $(HTMLDIR)/index.html + +TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf + +else + +TEX_FILES_BOOK = \ + $(BOOK_FILES:%.xml=%.tex) +TEX_FILES_REF_MAN = $(XML_REF3_FILES:%.xml=%.tex) \ + $(XML_APPLICATION_FILES:%.xml=%.tex) +TEX_FILES_USERS_GUIDE = \ + $(XML_CHAPTER_FILES:%.xml=%.tex) + +TOP_PDF_FILE = tv-$(VSN).pdf +TOP_PS_FILE = tv-$(VSN).ps + +$(TOP_PDF_FILE): book.dvi ../../vsn.mk + $(DVI2PS) $(DVIPS_FLAGS) -f $< | $(DISTILL) $(DISTILL_FLAGS) > $@ + +$(TOP_PS_FILE): book.dvi ../../vsn.mk + $(DVI2PS) $(DVIPS_FLAGS) -f $< > $@ + +endif + +# ---------------------------------------------------- +# FLAGS +# ---------------------------------------------------- +XML_FLAGS += +DVIPS_FLAGS += + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- +$(HTMLDIR)/%.gif: %.gif + $(INSTALL_DATA) $< $@ + +ifdef DOCSUPPORT + +docs: pdf html man + +$(TOP_PDF_FILE): $(XML_FILES) + +pdf: $(TOP_PDF_FILE) + +html: gifs $(HTML_REF_MAN_FILE) + + +clean clean_docs: + rm -rf $(HTMLDIR)/* + rm -f $(MAN3DIR)/* + rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) + rm -f errs core *~ + +else + +ifeq ($(DOCTYPE),pdf) +docs: pdf +else +ifeq ($(DOCTYPE),ps) +docs: ps +else +docs: html gifs man +endif +endif + +pdf: $(TOP_PDF_FILE) + +ps: $(TOP_PS_FILE) + +html: $(HTML_FILES) gifs + +clean clean_docs clean_tex: + rm -f $(TEX_FILES_USERS_GUIDE) $(TEX_FILES_REF_MAN) $(TEX_FILES_BOOK) + rm -f $(HTML_FILES) $(MAN3_FILES) + rm -f $(TOP_PDF_FILE) $(TOP_PS_FILE) + rm -f errs core *~ $(LATEX_CLEAN) +endif + +man: $(MAN3_FILES) + +gifs: $(GIF_FILES:%=$(HTMLDIR)/%) + +debug opt: + + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +ifdef DOCSUPPORT + +release_docs_spec: docs + $(INSTALL_DIR) $(RELSYSDIR)/doc/pdf + $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELSYSDIR)/doc/pdf + $(INSTALL_DIR) $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(HTMLDIR)/* \ + $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR) + $(INSTALL_DIR) $(RELEASE_PATH)/man/man3 + $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3 + +else + +ifeq ($(DOCTYPE),pdf) +release_docs_spec: pdf + $(INSTALL_DIR) $(RELEASE_PATH)/pdf + $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELEASE_PATH)/pdf +else +ifeq ($(DOCTYPE),ps) +release_docs_spec: ps + $(INSTALL_DIR) $(RELEASE_PATH)/ps + $(INSTALL_DATA) $(TOP_PS_FILE) $(RELEASE_PATH)/ps +else +release_docs_spec: docs + $(INSTALL_DIR) $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(GIF_FILES) $(EXTRA_FILES) $(HTML_FILES) \ + $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR) + $(INSTALL_DIR) $(RELEASE_PATH)/man/man3 + $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3 +endif +endif + +endif + +release_spec: + diff --git a/lib/tv/doc/src/book.xml b/lib/tv/doc/src/book.xml new file mode 100644 index 0000000000..d16165ab8f --- /dev/null +++ b/lib/tv/doc/src/book.xml @@ -0,0 +1,48 @@ + + + + +
+ + 19972009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + Table Visualizer (TV) + + + + 2.0.3 +
+ + + Table Visualizer (TV) + + + + + + + + + + + + + +
+ + diff --git a/lib/tv/doc/src/fascicules.xml b/lib/tv/doc/src/fascicules.xml new file mode 100644 index 0000000000..101e745722 --- /dev/null +++ b/lib/tv/doc/src/fascicules.xml @@ -0,0 +1,19 @@ + + + + + + User's Guide + + + Reference Manual + + + Release Notes + + + Off-Print + + + + diff --git a/lib/tv/doc/src/info_window.gif b/lib/tv/doc/src/info_window.gif new file mode 100644 index 0000000000..7913fc4230 Binary files /dev/null and b/lib/tv/doc/src/info_window.gif differ diff --git a/lib/tv/doc/src/info_window.ps b/lib/tv/doc/src/info_window.ps new file mode 100644 index 0000000000..b459523d0f --- /dev/null +++ b/lib/tv/doc/src/info_window.ps @@ -0,0 +1,814 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./info_window.tmp.eps) +%%CreationDate: (Tue Jun 12 16:12:33 2001) +%%BoundingBox: 0 60 377 354 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 60 377 354 +userdict begin +%%BeginData: +DisplayImage +0 60 +377.000000 294.000000 +12 +590 460 +1 +0 +0 +8 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +828282 +000a01ff01ff0137000b0208040001ff01ff013700000208040000000208040002ff02ff +0237000002080400000002080400020000ff00ff00340400020000000208040000000202 +04060200000004ff04ff0434020000000405020204000000020204000209000d02ff02ff +022b00000202040000000202040002080000020d040002ea010102060101021d01020229 +010102e700000202040000000202040002080000020d040002d801070209010102060101 +020e0101020b0101022601000203010102e700000202040000000202040002080000020d +040002db0101020c010102060101020e0101020b01010225010102ed0000020204000000 +0202040002080000020204060203040002db010102040103020301010200010102030101 +020201030207010102020101020001010202010402010103020201010200010102010101 +020001010201010102030103020101040201010102020103020301010200010102d70000 +02020400000004030208000002020400030400000203040002db01010203010102010101 +020201020200010102020101020101010201010102060101020201020200010102020101 +020201010201010102010101020001010201010202000102020001010201010102010101 +02010101020301010201010102010101020201020200010102d6000004030101020b0000 +02030400030200000204040002db01010207010102020101020101010202010102010101 +020101010206010102020101020101010202010102020101020101010201010202030101 +020101010201010102050101020101010203010102010101020101010202010102010101 +02d90103020b000002030400030200000204040002db0101020401040202010102010101 +020201010201010502060101020201010201010102020101020201010201010102010101 +020401010201010102010101020201040201010102030101020101010201010102020101 +0201010102d90103020b000002040400030000000205040002db01010203010102010101 +02020101020101010202010102010101020a010102020101020101010202010102020101 +020101010201010102040101020101010201010102010101020101010201010102030101 +0201010102010101020201010201010102d90103020b0000020404000300000002050400 +02db01010203010102010101020201010201010102020101020101010202010002060101 +020201010201010102020101020201010201010102010101020401010201010102010101 +020101010201010102010101020301010201010102010101020201010201010102d90103 +020b0000020500000206040002db01010204010202000101020101040203010102020103 +020701010202010102010101020201010203010302020101020401010201010102010101 +0202010202000101020101020201010102020103020301010201010102d90103020b0000 +020d040002ff02ff022d0103020b0000020d040002ff02ff022d0103020b0000020d0400 +02ff02ff022d0103020c040d02ff02ff022e010302ff02ff0249010302ff02ff02490103 +020200ff00ff00420400020201030202000004ff04ff04420202010302ff02ff02490103 +020200ff00ff004302020103020200ff00ff00420700020201030202000105ff05ff053f +0701020201030202000105ff05ff053f0701020201030202000105ff05ff053f07010202 +01030202000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202 +0001050b0604050406000503060205ff05ff052107010202010302020001050b0600050f +060005ff05ff052107010202010302020001050b060005060602050506000503060205ff +05ff051a07010202010302020001050b06000508060005050600050206000502060005ff +05ff051907010202010302020001050b06030505060005050600050206000502060005ff +05ff051907010202010302020001050b060005080600050506000502060405ff05ff0519 +07010202010302020001050b060005080600050506000502060005ff05ff051d07010202 +010302020001050b06000508060005050600050206000502060005ff05ff051907010202 +010302020001050b060005080600050506000503060205ff05ff051a0701020201030202 +000105ff05ff053f07010202010302020001050a060605ff05ff052d0701020201030202 +0001050a060605ff05ff052d0701020201030202000105ff05ff053f0701020201030202 +000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202000107ff +07ff0741020201030202000007ff07ff074202020103020205ff05ff0543020201030202 +05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 +05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 +05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 +05ff05ff0543020201030202050400770501007705010077050100770558020201030202 +050400760700050100760700050100760700050100760700055802020103020205040001 +057307010501000105730701050100010573070105010001057307010558020201030202 +050400010573070105010001057307010501000105730701050100010573070105580202 +010302020504000105730701050100010573070105010001057307010501000105730701 +055802020103020205040001057307010501000105730701050100010573070105010001 +057307010558020201030202050400010573070105010001057307010501000105730701 +050100010573070105580202010302020504000105730701050100010573070105010001 +057307010501000105730701055802020103020205040001057307010501000105730701 +050100010573070105010001057307010558020201030202050400010573070105010001 +057307010501000105730701050100010573070105580202010302020504000105730701 +050100010573070105010001057307010501000105730701055802020103020205040001 +057307010501000105730701050100010573070105010001057307010558020201030202 +05040001051d010405080100050601020510010405050100051f07010501000105080102 +0514010005110102050b010005050100050601000520070105010001052c010205050100 +053c070105010001052101020504010005480701055802020103020205040001051f0100 +050a0100050801000512010005070100051f070105010001050801000501010005250100 +05020100050a0100050501000528070105010001052b0100050201000542070105010001 +05200100050201000503010005480701055802020103020205040001051f010005040102 +05020100050001010505010005030102050b01000504010105000100051f070105010001 +050801000501010005030102050301020503010205030102050901000506010205020104 +05010104050201020502010005000101050301010500010005020102050b070105010001 +052b0100050601020502010405020102052e070105010001052001000505010405020102 +050201000500010105030102050301010500010005020102052407010558020201030202 +05040001051f010005030100050201000501010105010100050401000502010005020100 +050a01000503010005010101051f07010501000105080100050101000502010005020100 +050101000502010005040100050201000502010005090100050401000502010005030100 +0505010005060100050201010501010005010100050101010501010005020100050a0701 +05010001052c010005070100050601000501010005020100052d07010501000105210100 +050601000503010005020100050101010501010005010100050201000501010005010101 +050101000502010005230701055802020103020205040001051f01000507010005010100 +05020100050401000502010005020100050a01000503010005020100051f070105010001 +0508010305060100050101000508010005020100050e0101050201000502010005030100 +05050100050601000502010005020100050101000502010005010100050e070105010001 +052d010105050100050501000502010005020100052d0701050100010522010105040100 +050301000502010005010100050901000501010005020100050101000502010005230701 +055802020103020205040001051f01000504010305010100050201000504010005020104 +050a01000503010005020100051f07010501000105080100050201000502010305020102 +050501000502010005100100050101040503010005050100050601000502010005020100 +050101000502010005020102050b070105010001052f0100050401000504010005030104 +052d07010501000105240100050301000503010005020100050101000506010305010100 +050201000501010405230701055802020103020205040001051f01000503010005020100 +05010100050201000504010005020100050e01000503010005020100051f070105010001 +05080100050201000501010005020100050501000504010005020100050c010005020100 +050101000507010005050100050601000502010005020100050101000502010005050100 +050a070105010001052b0100050201000504010005030100050401000531070105010001 +052001000502010005030100050301000502010005010100050501000502010005010100 +050201000501010005270701055802020103020205040001051f01000503010005020100 +0501010105010100050401000502010005020100050a01000503010005010101051f0701 +050100010508010005020100050101000502010005010100050201000504010005020100 +050201000508010005020100050101000502010005030100050501000506010005020100 +0502010005010100050101010501010005020100050a070105010001052b010005020100 +05040100050201000505010005020100052d070105010001052001000502010005030100 +050301000502010005010100050501000502010005010100050101010501010005020100 +05230701055802020103020205040001051f010005040103050101000500010105050100 +05030102050901040502010105000100051f070105010001050801030503010305020102 +0505010005030102050a0102050301020505010105040101050401000502010005020100 +050201010500010005020102050b070105010001052c0102050501000502010405020102 +052e07010501000105210102050501010502010205020100050601030502010105000100 +050201020524070105580202010302020504000105730701050100010560010005110701 +05010001057307010501000105470100052a070105580202010302020504000105730701 +05010001055c010005020100051107010501000105730701050100010543010005020100 +052a07010558020201030202050400010573070105010001055d01020512070105010001 +057307010501000105440102052b07010558020201030202050400010573070105010001 +057307010501000105730701050100010573070105580202010302020504000105730701 +050100010573070105010001057307010501000105730701055802020103020205040001 +057307010501000105730701050100010573070105010001057307010558020201030202 +050400010573070105010001057307010501000105730701050100010573070105580202 +010302020504000105730701050100010573070105010001057307010501000105730701 +055802020103020205040001057307010501000105730701050100010573070105010001 +05730701055802020103020205040001057400ff00c20504020201030202050400010574 +00ff00c1070005040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105d101ff0158050a0701 +05040202010302020504000105d1010000ff00560100050a070105040202010302020504 +000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 +0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 +010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 +010000ff00560100050a0701050402020103020205040001050a01040508010005060102 +05100104059701000010010000ff00440100050a0701050402020103020205040001050c +0100050a01000508010005120100059901000010010000ff00440100050a070105040202 +0103020205040001050c01000504010205020100050001010505010005030102050b0100 +050301000502010005010100050001010503010205040101057c01000008010200020104 +0002010200ff003c0100050a0701050402020103020205040001050c0100050301000502 +01000501010105010100050401000502010005020100050a010005030100050201000501 +010105010100050101000502010005030101057c01000007010000020100000301000003 +01000002010000ff003b0100050a0701050402020103020205040001050c010005070100 +0501010005020100050401000502010005020100050a0100050401000501010005010100 +050201000501010005020100058201000007010000020100000301000003010000ff003f +0100050a0701050402020103020205040001050c01000504010305010100050201000504 +010005020104050a01000504010005010100050101000502010005010104058201000007 +0104000301000004010200ff003c0100050a0701050402020103020205040001050c0100 +050301000502010005010100050201000504010005020100050e01000505010005000100 +0501010005020100050101000586010000070100000701000007010000ff003b0100050a +0701050402020103020205040001050c0100050301000502010005010101050101000504 +01000502010005020100050a010005050101050201010501010005010100050201000503 +0101057c0100000701000002010000030100000301000002010000ff003b0100050a0701 +050402020103020205040001050c01000504010305010100050001010505010005030102 +050b01000506010005020100050001010503010205040101057c01000008010200050101 +0002010200ff003c0100050a0701050402020103020205040001053e010005020100058d +010000ff00560100050a0701050402020103020205040001053b01000500010005030100 +058d010000ff00560100050a0701050402020103020205040001053c010005040100058d +010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a +070105040202010302020504000105d1010000ff00560100050a07010504020201030202 +0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff +00560100050a070105040202010302020504000105d101ff0158050a0701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105d101ff0158050a070105040202010302020504000105d10100 +00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 +05040202010302020504000105d1010000ff00560100050a070105040202010302020504 +000105d1010000ff00560100050a070105040202010302020504000105d10100000a0101 +00a2010100a40100050a070105040202010302020504000105d101000009010000700100 +002a01000008010000a30100050a0701050402020103020205040001050a010405080100 +050601020510010405050100059001000009010000040102001901000006010000190100 +000a0100000601020013010000040101000a010200040100000c01010002010000070100 +00a30100050a0701050402020103020205040001050c0100050a01000508010005120100 +050701000590010000090100000601000019010000210100000a01000008010000120100 +0004010000010100000801000002010000020101000b0100000101000002010000060100 +00a30100050a0701050402020103020205040001050c0100050401020502010005000101 +0505010005030102050b0100050401010500010005030101058a01000009010000060100 +000301020003010200030102000201040002010200030102000201000000010100090104 +0002010200020100000001010005010000030102000a01000005010000010100000c0100 +0001010000000100000b010000010100000301000005010000a30100050a070105040202 +0103020205040001050c0100050301000502010005010101050101000504010005020100 +05020100050a0100050301000501010105030101058a0100000901000006010000020100 +000201000001010000020100000101000002010000030100000601000002010000020100 +0001010100010100000a0100000301000002010000010101000101000004010000020100 +00020100000801000006010000010100000c010000030100000b01000001010000040100 +0004010000a30100050a0701050402020103020205040001050c01000507010005010100 +05020100050401000502010005020100050a010005030100050201000590010000070101 +000701000002010000020100000101000009010000030100000601000002010000020100 +0001010000020100000a0100000701000001010000020100000401000002010000020100 +000701000007010000010100000a010100040100000b0100000101000005010000040101 +00a10100050a0701050402020103020205040001050c0100050401030501010005020100 +0504010005020104050a0100050301000502010005900100000901000006010000020100 +000201000001010000060103000301000006010000020100000201000001010000020100 +000a01000004010300010100000201000004010000020104000801000006010000010100 +000c010000030100000b010000010100000401000004010000a30100050a070105040202 +0103020205040001050c0100050301000502010005010100050201000504010005020100 +050e01000503010005020100059001000009010000060100000201000002010000010100 +0005010000020100000301000006010000020100000201000001010000020100000a0100 +000301000002010000010100000201000004010000020100000d01000005010000010100 +000c010000030100000b010000010100000301000005010000a30100050a070105040202 +0103020205040001050c0100050301000502010005010101050101000504010005020100 +05020100050a0100050301000501010105030101058a0100000901000006010000020100 +000201000001010000020100000101000002010000030100000601000002010000020100 +0001010000020100000a0100000301000002010000010101000101000004010000020100 +000201000003010100040100000401000001010000030101000201000002010000030100 +000501010003010000010100000201000006010000a30100050a07010504020201030202 +05040001050c010005040103050101000500010105050100050301020509010405020101 +0500010005030101058a0100000901000006010000030102000301020003010300040101 +00040100000301020002010000020100000b010100020103000101000000010100050100 +000301020004010100050100000401010004010100030102000201040003010100040101 +000201000007010000a30100050a070105040202010302020504000105d1010000090100 +003a01050027010000060100002a01000008010000a30100050a07010504020201030202 +0504000105d10100000a010100640101003b010100a40100050a07010504020201030202 +0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff +00560100050a070105040202010302020504000105d1010000ff00560100050a07010504 +0202010302020504000105d1010000ff00560100050a0701050402020103020205040001 +05d1010000ff00560100050a070105040202010302020504000105d101ff0158050a0701 +05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff +0535070105040202010302020504000105ff05ff05350701050402020103020205040001 +05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202 +0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202 +010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701 +05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff +0535070105040202010302020504000105ff05ff05350701050402020103020205040001 +05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202 +0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202 +010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701 +05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff +0535070105040202010302020504000105d101ff0158050a070105040202010302020504 +000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 +0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 +010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 +010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a +0701050402020103020205040001050a0104050801000506010205100100050201000597 +010000080102001901000006010000190100000a01000006010200f60100050a07010504 +02020103020205040001050c0100050a010005080100051001010501010005970100000a +01000019010000210100000a01000008010000f60100050a070105040202010302020504 +0001050c0100050401020502010005000101050501000503010205090101050101000502 +010205020101050001000503010205040101057c0100000a010000030102000301020003 +010200020104000201020003010200020100000001010009010400020102000201000000 +0101000501000003010200ef0100050a0701050402020103020205040001050c01000503 +010005020100050101010501010005040100050201000502010005080100050001000500 +01000501010005020100050101000500010005000100050101000502010005030101057c +0100000a0100000201000002010000010100000201000001010000020100000301000006 +010000020100000201000001010100010100000a01000003010000020100000101010001 +010000040100000201000002010000ee0100050a0701050402020103020205040001050c +010005070100050101000502010005040100050201000502010005080100050001000500 +010005050100050101000500010005000100050101000502010005820100000a01000002 +010000020100000101000009010000030100000601000002010000020100000101000002 +0100000a010000070100000101000002010000040100000201000002010000ee0100050a +0701050402020103020205040001050c0100050401030501010005020100050401000502 +01040508010005010101050201030501010005000100050001000501010405820100000a +010000020100000201000001010000060103000301000006010000020100000201000001 +010000020100000a0100000401030001010000020100000401000002010400ee0100050a +0701050402020103020205040001050c0100050301000502010005010100050201000504 +010005020100050c01000501010105010100050201000501010005000100050001000501 +010005860100000a01000002010000020100000101000005010000020100000301000006 +010000020100000201000001010000020100000a01000003010000020100000101000002 +0100000401000002010000f20100050a0701050402020103020205040001050c01000503 +010005020100050101010501010005040100050201000502010005080100050201000501 +010005020100050101000500010005000100050101000502010005030101057c0100000a +010000020100000201000001010000020100000101000002010000030100000601000002 +0100000201000001010000020100000a0100000301000002010000010101000101000004 +0100000201000002010000ee0100050a0701050402020103020205040001050c01000504 +010305010100050001010505010005030102050901000502010005020103050101000500 +0100050001000502010205040101057c0100000a01000003010200030102000301030004 +010100040100000301020002010000020100000b01010002010300010100000001010005 +01000003010200ef0100050a070105040202010302020504000105d10100003e010500ff +00110100050a070105040202010302020504000105d1010000ff00560100050a07010504 +0202010302020504000105d1010000ff00560100050a0701050402020103020205040001 +05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100 +050a070105040202010302020504000105d1010000ff00560100050a0701050402020103 +02020504000105d1010000ff00560100050a070105040202010302020504000105d101ff +0158050a070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105d101ff0158050a070105040202 +010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 +010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a +070105040202010302020504000105d1010000ff00560100050a07010504020201030202 +0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff +00560100050a0701050402020103020205040001050a0104050801000506010205100100 +05020100051d010305130100050b0100051c0100053501000009010000ff004b0100050a +0701050402020103020205040001050c0100050a0100050801000510010105010100051d +010005020100051f0100051c0100053501000009010000ff004b0100050a070105040202 +0103020205040001050c0100050401020502010005000101050501000503010205090101 +050101000502010205020101050001000503010205090100050201000502010205030101 +050001000502010205030102050201040502010205020100050001010503010205030101 +0500010005030101052f0100000701040001010000000101000201000002010000020102 +00ff00350100050a0701050402020103020205040001050c010005030100050201000501 +010105010100050401000502010005020100050801000500010005000100050101000502 +010005010100050001000500010005010100050201000508010005020100050101000502 +010005010100050101010504010005020100050201000503010005030100050201000501 +0101050101000501010005020100050101000501010105030101052f0100000901000003 +0101000101000001010000020100000101000002010000ff00340100050a070105040202 +0103020205040001050c0100050701000501010005020100050401000502010005020100 +050801000500010005000100050501000501010005000100050001000501010005020100 +050801030502010005020100050101000502010005040100050201000507010005030100 +050201000501010005050100050201000501010005020100053501000009010000030100 +0005010000020100000101000002010000ff00340100050a070105040202010302020504 +0001050c0100050401030501010005020100050401000502010405080100050101010502 +010305010100050001000500010005010104050801000501010005020104050101000502 +010005040100050301020504010005030104050101000505010405010100050201000535 +0100000901000003010000050100000201000001010400ff00340100050a070105040202 +0103020205040001050c0100050301000502010005010100050201000504010005020100 +050c010005010101050101000502010005010100050001000500010005010100050c0100 +050201000501010005050100050201000504010005060100050301000503010005050100 +050501000505010005020100053501000009010000030100000501000002010000010100 +00ff00380100050a0701050402020103020205040001050c010005030100050201000501 +010105010100050401000502010005020100050801000502010005010100050201000501 +010005000100050001000501010005020100050801000502010005010100050201000501 +010005010101050401000502010005020100050301000503010005020100050101000505 +010005020100050101000501010105030101052f01000009010000030100000501000001 +0101000101000002010000ff00340100050a0701050402020103020205040001050c0100 +050401030501010005000101050501000503010205090100050201000502010305010100 +050001000500010005020102050901000502010005020102050301010500010005040100 +0503010205050101050201020502010005060102050301010500010005030101052f0100 +000a01010001010000060101000001000002010200ff00350100050a0701050402020103 +020205040001056901000566010000ff00560100050a0701050402020103020205040001 +05650100050201000566010000ff00560100050a07010504020201030202050400010566 +01020567010000ff00560100050a070105040202010302020504000105d1010000ff0056 +0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 +010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 +010000ff00560100050a070105040202010302020504000105d101ff0158050a07010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105d101ff0158050a0701050402020103020205040001 +05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100 +050a070105040202010302020504000105d1010000ff00560100050a0701050402020103 +02020504000105d1010000ff00560100050a070105040202010302020504000105d10100 +00ff00560100050a070105040202010302020504000105d10100000b0100002a010000ff +001d0100050a0701050402020103020205040001050a0103053401020513010005190100 +0503010005130104050801000506010205280100000a010000040101000a010200040100 +000c01010002010000ff001c0100050a0701050402020103020205040001050a01000502 +01000532010005020100052d01000503010005150100050a010005080100052801000009 +01000004010000010100000801000002010000020101000b0100000101000002010000ff +001b0100050a0701050402020103020205040001050a0100050201000501010005000101 +050301020503010205030102050301020503010205090100050201000501010005020100 +050101000500010105030102050201000500010105030101050001000508010405010100 +0500010105030102050b0100050401020502010005000101050501000503010205040101 +051a0100000801000005010000010100000c01000001010000000100000b010000010100 +0003010000ff001a0100050a0701050402020103020205040001050a0100050201000501 +010105010100050101000502010005010100050201000501010005020100050101000502 +010005010100050201000508010005020100050101000502010005010101050101000504 +010005020101050101000501010005010101050a01000503010105010100050101000502 +0100050a0100050301000502010005010101050101000504010005020100050201000503 +0101051a0100000701000006010000010100000c010000030100000b0100000101000004 +010000ff00190100050a0701050402020103020205040001050a01030502010005050100 +050201000501010005050100050201000501010005050100050c01000502010005010100 +050001000500010005010100050201000504010005020100050201000501010005020100 +050a010005030100050201000501010005020100050a0100050701000501010005020100 +05040100050201000502010005200100000601000007010000010100000a010100040100 +000b0100000101000005010000ff00180100050a0701050402020103020205040001050a +010005050100050501000502010005010100050501040502010205030102050901000502 +010005010100050001000500010005010100050201000504010005020100050201000501 +010005020100050a0100050301000502010005010104050a010005040103050101000502 +0100050401000502010405200100000701000006010000010100000c010000030100000b +0100000101000004010000ff00190100050a0701050402020103020205040001050a0100 +050501000505010005020100050101000505010005090100050501000508010005020100 +050101000500010005000100050101000502010005040100050201000502010005010100 +05020100050a0100050301000502010005010100050e0100050301000502010005010100 +05020100050401000502010005240100000801000005010000010100000c010000030100 +000b0100000101000003010000ff001a0100050a0701050402020103020205040001050a +010005050100050501000502010005010100050201000501010005020100050101000502 +010005010100050201000508010005020100050101000500010005000100050101000502 +01000504010005020100050201000501010005010101050a010005030100050201000501 +010005020100050a01000503010005020100050101010501010005040100050201000502 +010005030101051a01000009010000040100000101000003010100020100000201000003 +01000005010100030100000101000002010000ff001b0100050a07010504020201030202 +05040001050a0100050501000506010205030102050301020503010205030102050a0102 +050301000500010005020100050201000504010005020100050201000502010105000100 +050b0101050101000502010005020102050b010005040103050101000500010105050100 +0503010205040101051a0100000a01000004010100040101000301020002010400030101 +000401010002010000ff001c0100050a0701050402020103020205040001056901000566 +0100000b0100002a010000ff001d0100050a070105040202010302020504000105650100 +050201000566010000ff00560100050a0701050402020103020205040001056601020567 +010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a +070105040202010302020504000105d1010000ff00560100050a07010504020201030202 +0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff +00560100050a070105040202010302020504000105d101ff0158050a0701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105d101ff0158050a070105040202010302020504000105d10100 +00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 +05040202010302020504000105d1010000ff00560100050a070105040202010302020504 +000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 +0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 +0103020205040001050a0100050201000527010105090102051301000517010305590100 +00ff00560100050a0701050402020103020205040001050a01010501010005260100050a +010005020100052b0100050201000558010000ff00560100050a07010504020201030202 +05040001050a01010501010005020102050201010500010005030102050a010205040100 +050a01000502010005010100050201000501010005000101050301020502010005000101 +050301010500010005080100050201000501010005000101050301020503010205030102 +0503010205030102050401010528010000ff00560100050a070105040202010302020504 +0001050a0100050001000500010005010100050201000501010005000100050001000501 +010005020100050801000502010005010104050801000502010005010100050201000501 +010105010100050401000502010105010100050101000501010105080100050201000501 +010105010100050101000502010005010100050201000501010005020100050101000502 +01000501010005020100050301010528010000ff00560100050a07010504020201030202 +05040001050a010005000100050001000505010005010100050001000500010005010100 +05020100050801000502010005030100050a010005020100050101000500010005000100 +050101000502010005040100050201000502010005010100050201000508010305020100 +050501000502010005010100050501000502010005010100050501000532010000ff0056 +0100050a0701050402020103020205040001050a01000501010105020103050101000500 +01000500010005010104050801000502010005030100050a010005020100050101000500 +010005000100050101000502010005040100050201000502010005010100050201000508 +010005050100050501000502010005010100050501040502010205030102052f010000ff +00560100050a0701050402020103020205040001050a0100050101010501010005020100 +05010100050001000500010005010100050c01000502010005030100050a010005020100 +050101000500010005000100050101000502010005040100050201000502010005010100 +050201000508010005050100050501000502010005010100050501000509010005050100 +052e010000ff00560100050a0701050402020103020205040001050a0100050201000501 +010005020100050101000500010005000100050101000502010005080100050201000503 +0100050a0100050201000501010005000100050001000501010005020100050401000502 +010005020100050101000501010105080100050501000505010005020100050101000502 +0100050101000502010005010100050201000501010005020100050301010528010000ff +00560100050a0701050402020103020205040001050a0100050201000502010305010100 +050001000500010005020102050a010205040100050b0102050301000500010005020100 +050201000504010005020100050201000502010105000100050801000505010005060102 +05030102050301020503010205030102050401010528010000ff00560100050a07010504 +02020103020205040001056901000566010000ff00560100050a07010504020201030202 +0504000105650100050201000566010000ff00560100050a070105040202010302020504 +0001056601020567010000ff00560100050a070105040202010302020504000105d10100 +00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 +05040202010302020504000105d1010000ff00560100050a070105040202010302020504 +000105d1010000ff00560100050a070105040202010302020504000105d101ff0158050a +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000105ff05ff0535070105040202010302020504000105ff +05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 +000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 +02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 +0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 +070105040202010302020504000107ff07ff073705040202010100040504000007ff07ff +0738050400050202040005ff05ff054300000202040000000202040005ff05ff05430000 +0202040000000202040005ff05ff054300000202040000000202040005ff05ff05430000 +0202040000000202040005ff05ff0543000002020400000002020400000502ff02ff0237 +00060202040000000208040002ff02ff023700000208040000000208040002ff02ff0237 +00000208040000000208040001ff01ff01370000020804000000040901ff01ff01370000 +0409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 60 377 354 +%%EOF diff --git a/lib/tv/doc/src/make.dep b/lib/tv/doc/src/make.dep new file mode 100644 index 0000000000..8437e320c6 --- /dev/null +++ b/lib/tv/doc/src/make.dep @@ -0,0 +1,32 @@ +# ---------------------------------------------------- +# >>>> Do not edit this file <<<< +# This file was automaticly generated by +# /home/otp/bin/docdepend +# ---------------------------------------------------- + + +# ---------------------------------------------------- +# TeX files that the DVI file depend on +# ---------------------------------------------------- + +book.dvi: book.tex part.tex ref_man.tex table_visualizer_chapter.tex \ + tv.tex + +# ---------------------------------------------------- +# Source inlined when transforming from source to LaTeX +# ---------------------------------------------------- + +book.tex: ref_man.xml + +# ---------------------------------------------------- +# Pictures that the DVI file depend on +# ---------------------------------------------------- + +book.dvi: info_window.ps set_poll_int.ps tv_create_table.ps \ + tv_record_editor_mnesia.ps tv_row_marked.ps \ + tv_row_marked_popup.ps tv_search_result.ps \ + tv_search_window.ps tv_start.ps tv_start_mnesia.ps \ + tv_start_other_node.ps tv_start_pid_sorted.ps \ + tv_start_system.ps tv_start_system_unreadable.ps \ + tv_table_browser.ps tv_table_browser_updated.ps + diff --git a/lib/tv/doc/src/note.gif b/lib/tv/doc/src/note.gif new file mode 100644 index 0000000000..6fffe30419 Binary files /dev/null and b/lib/tv/doc/src/note.gif differ diff --git a/lib/tv/doc/src/notes.xml b/lib/tv/doc/src/notes.xml new file mode 100644 index 0000000000..62fab2f0f1 --- /dev/null +++ b/lib/tv/doc/src/notes.xml @@ -0,0 +1,182 @@ + + + + +
+ + 20042009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + TV Release Notes + otp_appnotes + nil + nil + nil + notes.xml +
+

This document describes the changes made to the TV application.

+ +
TV 2.1.4.4 + +
Improvements and New Features + + +

+ The documentation is now built with open source tools + (xsltproc and fop) that exists on most platforms. One + visible change is that the frames are removed.

+

+ Own Id: OTP-8201

+
+
+
+ +
+ +
TV 2.1.4.3 + +
Improvements and New Features + + +

+ Updated the application with new tags for automatic updates + of copyright notices. +

+

+ Own Id: OTP-7851 +

+
+
+
+ +
+ +
TV 2.1.4.2 + +
Improvements and New Features + + +

+ Minor updates.

+

+ Own Id: OTP-7261

+
+
+
+ +
+ +
+ TV 2.1.4.1 + +
+ Improvements and New Features + + +

Minor Makefile changes.

+

Own Id: OTP-6689

+
+ +

Obsolete guard tests (such as list()) have been replaced + with the modern guard tests (such as is_list()).

+

Own Id: OTP-6728

+
+
+
+
+ +
+ TV 2.1.4 + +
+ Improvements and New Features + + +

Removed some dead code from + tv_pg_gridfcns:mark_cell_and_notify/4 + and tv_nodewin:handle_error/1.

+

Own Id: OTP-6455

+
+
+
+
+ +
+ TV 2.1.3 + +
+ Fixed Bugs and Malfunctions + + +

A compiler warning has been fixed.

+

Own Id: OTP-6016

+
+
+
+ +
+ Improvements and New Features + + +

Notification windows are now centered over a parent + window.

+

Own Id: OTP-6014 Aux Id: OTP-5987

+
+
+
+
+ +
+ TV 2.1.2 + +
+ Fixed Bugs and Malfunctions + + +

Some dead code reported by Dialyzer was eliminated.

+

A + bug in 'dbg' when tracing to wrap trace files has been + corrected. It failed to delete any already existing wrap + trace files with the same names when starting a new wrap + trace.

+

Own Id: OTP-5329

+
+ +

The graphic applications now search for HTML + documentation in the correct place.

+

Own Id: OTP-5381

+
+
+
+
+ +
+ TV 2.1.1 + +
+ Fixed Bugs and Malfunctions + + +

TV no longer crashes on Mac OS X. (Thanks to Sean Hinde.)

+

Own Id: OTP-5219

+
+
+
+
+
+ + diff --git a/lib/tv/doc/src/part.xml b/lib/tv/doc/src/part.xml new file mode 100644 index 0000000000..e6c94fa0b8 --- /dev/null +++ b/lib/tv/doc/src/part.xml @@ -0,0 +1,40 @@ + + + + +
+ + 19972009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + TV User's Guide + Fredrik Gustafson + + 1997-06-04 + 1.0.1 + part.xml +
+ +

The Table Visualizer application, TV, enables the user + to examine ETS and Mnesia tables. Once a certain table has been + opened in the tool, the content may be viewed in various levels + of detail.

+
+ +
+ + diff --git a/lib/tv/doc/src/part_notes.xml b/lib/tv/doc/src/part_notes.xml new file mode 100644 index 0000000000..7a5b359592 --- /dev/null +++ b/lib/tv/doc/src/part_notes.xml @@ -0,0 +1,40 @@ + + + + +
+ + 20042009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + TV Release Notes + + + 2004-09-07 + 1.0 + part_notes.sgml +
+ +

The Table Visualizer application, TV, enables the user + to examine ETS and Mnesia tables. Once a certain table has been + opened in the tool, the content may be viewed in various levels + of detail.

+
+ +
+ + diff --git a/lib/tv/doc/src/ref_man.xml b/lib/tv/doc/src/ref_man.xml new file mode 100644 index 0000000000..56e0798cf1 --- /dev/null +++ b/lib/tv/doc/src/ref_man.xml @@ -0,0 +1,40 @@ + + + + +
+ + 19972009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + TV Reference Manual + Fredrik Gustafson + + 1997-06-04 + 1.0.1 + application.sgml +
+ +

The TV application enables the user + to examine ETS and Mnesia tables. Once a certain table has been + opened in the tool, the content may be viewed in various levels + of detail.

+
+ +
+ + diff --git a/lib/tv/doc/src/set_poll_int.gif b/lib/tv/doc/src/set_poll_int.gif new file mode 100644 index 0000000000..c09c84322f Binary files /dev/null and b/lib/tv/doc/src/set_poll_int.gif differ diff --git a/lib/tv/doc/src/set_poll_int.ps b/lib/tv/doc/src/set_poll_int.ps new file mode 100644 index 0000000000..cceb30486f --- /dev/null +++ b/lib/tv/doc/src/set_poll_int.ps @@ -0,0 +1,483 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./set_poll_int.tmp.eps) +%%CreationDate: (Tue Jun 12 16:08:39 2001) +%%BoundingBox: 0 17 200 154 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 17 200 154 +userdict begin +%%BeginData: +DisplayImage +0 17 +200.000000 137.000000 +12 +315 215 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +828282 +aa2455 +c3c3c3 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff0124000b0208040001ff012400000208040000000208040002ff022400000208 +0400000002080400020000ff0021040002000000020804000000020204060200000004ff +0421020000000405020204000000020204000209000d02ff021800000202040000000202 +040002080000020d04000281010102020101023701010254000002020400000002020400 +02080000020d040002580103020b010002070104020a01010202010102060101020b0100 +02210101025400000202040000000202040002080000020d040002570101020101010209 +01010207010102010101020901010202010102060101020a010102210101025400000202 +040000000202040002080000020204060203040002570101020601030201010402050101 +020101010201010302030101020201010206010102020101020001010201010402010103 +020201010200010102000101020101010202010302030101025400000202040000000403 +020800000202040003040000020304000257010202040101020101010201010102070101 +020101010200010102010101020201010202010102060101020201020200010102010101 +020201010201010102010101020001010200010102010101020101010201010102020101 +0254000004030101020b0000020304000302000002040400025801030202010102010101 +020101010207010102010100020101010201010102020101020201010206010102020101 +020101010201010102020101020101010201010202020101020101010205010102020101 +02570103020b0000020304000302000002040400025a0102020101050201010102070103 +020201010201010102020101020201010206010102020101020101010201010102020105 +020101010204010102000100020301040202010102570103020b00000204040003000000 +02050400025b010102010101020501010207010102040101020101010202010102020101 +020601010202010102010101020101010202010102050101020401010200010002020101 +020101010202010102570103020b00000204040003000000020504000257010102010101 +020101010202010002010101020701010204010102010101020201010202010102060101 +020201010201010102010101020201010202010002010101020501010203010102010101 +0202010102570103020b0000020500000206040002580103020301030203010202050101 +020501030203010102020101020601010202010102010101020201020201010302020101 +0205010102040102020001010201010102570103020b0000020d040002ff021a0103020b +0000020d040002ff021a0103020b0000020d040002ff021a0103020c040d02ff021b0103 +02ff0236010302ff02360103020200ff002f0400020201030202000004ff042f02020103 +02ff02360103020205ff053002020103020205ff053002020103020205ff053002020103 +020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 +02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 +05e5003b050e02020103020205e5003a0600050e02020103020205e5000105370601050e +02020103020205e5000105370601050e02020103020205e5000105370601050e02020103 +020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5 +000105370601050e02020103020205e5000105370601050e020201030202051b000105c7 +000105150102050201000502010005160601050e020201030202051a0003050b01000503 +0100051e010205090103050a010205030102050501000568000105140100050201000501 +01000501010005170601050e02020103020205190005050a010005030100052001000509 +010005020100050b010005050100056f0001051401000502010005010100050001000518 +0601050e0202010302020518000205010002050901010501010105020102050201000500 +010105020100050201000502010205050100050901000502010005020102050501000505 +010005030102050201000500010105030101050001000559000105140100050201000501 +010105190601050e02020103020205170002050300020508010105010101050101000502 +010005010101050101000501010005020100050101000502010005040100050901000502 +010005010100050201000504010005050100050501000502010105010100050101000501 +0101055900010514010005020100050101000500010005180601050e0202010302020516 +000205050002050701000500010105000100050501000501010005020100050101000502 +010005050100050401000509010305020100050201000504010005050100050501000502 +010005020100050101000502010005590001051401000502010005010100050101000517 +0601050e0202010302020515060205070602050601000500010105000100050201030501 +010005020100050101000502010005020103050401000509010005050100050201000504 +010005050100050501000502010005020100050101000502010005590001051401000502 +0100050101000501010005170601050e0202010302020516060205050602050701000503 +010005010100050201000501010005020100050101000502010005010100050201000504 +010005090100050501000502010005040100050501000505010005020100050201000501 +010005020100055900010514010005020100050101000502010005160601050e02020103 +020205170602050306020508010005030100050101000502010005010100050201000501 +010005010101050101000502010005040100050901000505010005020100050401000505 +010005050100050201000502010005010100050101010559000105150102050201000502 +010005160601050e02020103020205180602050106020509010005030100050201030501 +010005020100050201010500010005020103050401000509010005060102050501000505 +010005050100050201000502010005020101050001000559000105370601050e02020103 +020205190605056a01000559000105370601050e020201030202051a0603056701000502 +01000559000105370601050e020201030202051b060105690102055a000105370601050e +02020103020205e5000105370601050e02020103020205e5000105370601050e02020103 +020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5 +000105370601050e02020103020205e5000105370601050e02020103020205e500010639 +050e02020103020205e50000063a050e02020103020205ff053002020103020205ff0530 +02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 +05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 +0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff +053002020103020205ff053002020103020205ff053002020103020205ff053002020103 +020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 +02020103020205e5003b050e02020103020205e5003a0600050e02020103020205e50001 +05370601050e02020103020205e5000105370601050e02020103020205e5000105370601 +050e02020103020205e5000105370601050e02020103020205e5000105370601050e0202 +0103020205e5000105370601050e02020103020205e5000105370601050e020201030202 +051a060105c8000105070102051f010205090601050e02020103020205190603050e0100 +050c0100051a01000506010005100103050a010205030102050501000554000105060100 +050201000520010005090601050e02020103020205180605050d0100050c0100051a0100 +0518010005020100050b010005050100055b000105060100050201000502010205020100 +0500010105030102050301020505010005090601050e0202010302020517060207010602 +050b01000500010005020100050201000501010405020102050201010500010005030102 +050201040502010205030102050901000502010005020102050501000505010005030102 +050201000500010105030101050001000545000105060100050501000502010005010101 +05010100050101000502010005010100050201000504010005090601050e020201030202 +0516060207030602050a0100050001000502010005020100050301000503010005020100 +050101000500010005000100050101000502010005030100050601000502010005020100 +050801000502010005010100050201000504010005050100050501000502010105010100 +050101000501010105450001050601000509010005010100050201000501010005050100 +050201000504010005090601050e02020103020205150602070506020509010005000100 +050201000502010005030100050301000502010005010100050001000500010005050100 +050301000506010005020100050c01030502010005020100050401000505010005050100 +050201000502010005010100050201000545000105060100050601030501010005020100 +05010100050501040504010005090601050e020201030202051400020707000205070100 +050201000501010005020100050301000503010005020100050101000500010005000100 +05020103050301000506010005020100050c010005050100050201000504010005050100 +050501000502010005020100050101000502010005450001050601000502010005010100 +05020100050101000502010005010100050501000508010005090601050e020201030202 +051500020705000205080104050101000502010005030100050301000502010005010100 +05000100050001000501010005020100050301000506010005020100050c010005050100 +050201000504010005050100050501000502010005020100050101000502010005450001 +050601000502010005010100050201000501010005020100050101000502010005010100 +050201000504010005090601050e02020103020205160002070300020509010005020100 +050101000501010105030100050301000502010005010100050001000500010005010100 +050201000503010005060100050201000502010005080100050501000502010005040100 +050501000505010005020100050201000501010005010101054500010507010205030103 +050101000502010005020102050301020505010005090601050e02020103020205170002 +07010002050a010005020100050201010500010005040101050201020502010005000100 +050001000502010305040101050401000503010205090100050601020505010005050100 +05050100050201000502010005020101050001000545000105370601050e020201030202 +05180005057f01000545000105370601050e02020103020205190003057c010005020100 +0545000105370601050e020201030202051a0001057e01020546000105370601050e0202 +0103020205e5000105370601050e02020103020205e5000105370601050e020201030202 +05e5000105370601050e02020103020205e5000105370601050e02020103020205e50001 +05370601050e02020103020205e5000105370601050e02020103020205e500010639050e +02020103020205e50000063a050e02020103020205ff053002020103020205ff05300202 +0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff +053002020103020205ff053002020103020205ff053002020103020205ff053002020103 +020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 +02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 +05ff053002020103020205ff053002020103020205ff0530020201030202057601000534 +0100058202020103020205110103050a01020503010205090104050a010005200102050b +0100052a0100050a010005810202010302020511010005020100050b010005050100050b +0100050c010005220100050b0100052a0100050a01000581020201030202051101000502 +0100050201020505010005050100050b0100050301000500010105020104050201020502 +01000500010105020100050201000502010205050100050a010005050102050301020503 +010205030102050201000500010105030101050001000502010205050100050401010579 +020201030202051101000502010005010100050201000504010005050100050b01000503 +010105010100050301000503010005020100050101010501010005010100050201000501 +01000502010005040100050a010005040100050201000501010005020100050101000502 +010005010100050201000501010105010100050101000501010105010100050201000504 +01000504010105790202010302020511010305020100050201000504010005050100050b +010005030100050201000503010005030100050201000501010005050100050201000505 +010005040100050a01000504010005050100050201000501010005050100050201000501 +010005020100050101000502010005010100050801000580020201030202051101000505 +0100050201000504010005050100050b0100050301000502010005030100050301040501 +010005060100050001000503010305040100050a01000505010205020104050101000505 +010005020100050101000502010005010100050201000502010205050100058002020103 +02020511010005050100050201000504010005050100050b010005030100050201000503 +010005030100050501000506010005000100050201000502010005040100050a01000508 +010005010100050501000505010005020100050101000502010005010100050201000505 +01000504010005800202010302020511010005050100050201000504010005050100050b +010005030100050201000503010005030100050201000501010005070100050301000502 +010005040100050b01000503010005020100050101000502010005010100050201000501 +010005020100050101000502010005010100050101010501010005020100050301000505 +010105790202010302020511010005060102050501000505010005090104050101000502 +0100050401010502010205020100050701000504010305040100050b0100050401020503 +010205030102050301020502010005020100050201010500010005020102050401000505 +010105790202010302020576010005340100058202020103020205ff0530020201030202 +05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 +0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff +053002020103020205ff053002020103020205ff053002020103020205ff053002020103 +020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 +02020103020205ff053002020103020205ff0530020201030202056f0100050401020504 +010105b0020201030202056e01010503010005020100050201000501010005af02020103 +0202056d01000500010005070100050201000501010005af020201030202056f01000507 +0100050201000501010005af020201030202056f010005060100050301000501010005af +020201030202056f010005050100050401000501010005af020201030202056f01000504 +0100050501000501010005af020201030202056f010005030100050601000501010005af +020201030202056d0104050101040503010105b002020103020205ff0530020201030202 +05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 +01030202050d06ff0614050d020201030202050d06ff06130000050d020201030202050d +06010856001d089b0001050d020201030202050d06010856001c0600089b0001050d0202 +01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d +060108560001050b06000000050b0601089b0001050d020201030202050d060108560001 +050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000 +050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b +0001050d020201030202050d060108560001050b06000000050b0601089b0001050d0202 +01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d +060108560001050b06000000050b0601089b0001050d020201030202050d060108560001 +050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000 +050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b +0001050d020201030202050d060108560001060c0000060d089b0001050d020201030202 +050d060108560000061c089b0001050d020201030202050d060100ff0012050d02020103 +0202050d060000ff0013050d02020103020205ff053002020103020205ff053002020103 +020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 +02020103020205ff053002020103020205ff053002020101000405ff0530000502020400 +05ff053000000202040000000202040005ff053000000202040000000202040005ff0530 +00000202040000000202040005ff053000000202040000000202040005ff053000000202 +0400000002020400000502ff022400060202040000000208040002ff0224000002080400 +00000208040002ff022400000208040000000208040001ff012400000208040000000409 +01ff012400000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 17 200 154 +%%EOF diff --git a/lib/tv/doc/src/table_visualizer_chapter.xml b/lib/tv/doc/src/table_visualizer_chapter.xml new file mode 100644 index 0000000000..12efbe643c --- /dev/null +++ b/lib/tv/doc/src/table_visualizer_chapter.xml @@ -0,0 +1,652 @@ + + + + +
+ + 19972009 + Ericsson AB. All Rights Reserved. + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + + + The Table Visualizer + EPK/TK Fredrik Gustafson + + + EPK/TK (Fredrik Gustafson) + + 1998-01-19 + C + table_visualizer.xml +
+

The TV, TV, is a tool that enables the user to examine + ETS and Mnesia tables on any (connected) node in the currently running Erlang + system. Once a certain table has been opened in the tool, the content may be + viewed in various levels of detail. The content may also be edited, as well as + sorted, using any element as key. It is also possible to search for a specified object or + element. The table may be polled anytime, either regularly, at specified + intervals, or manually. New and deleted objects, as well as those altered, are + marked with characteristic colours.

+

Information about the table itself (permissions, storage type, and so on) may + also be obtained. +

+ +
+ Terminology and Background +

To avoid confusion, we have to distinguish between the actual table, i.e., + the data stored in ETS or Mnesia, and the image of the table, i.e., the + data shown in the TV. The image of the table is simply a copy + of the actual table, and can be manipulated in a number of ways, for example + sorted. It follows that these manipulations in no way affects the actual table!

+

The expression poll the table is used for the operation of scanning through the + content of the actual table (in order to keep the image of the table consistent with the + actual table).

+

The ETS and Mnesia modules provides the user with the ability to store vast quantities + of data in, the data organized as dynamic, unordered tables. The ETS + facility stores tuples, while Mnesia stores records. + Each tuple consists of one or more elements; each record consists of one or + more fields. It should be noted that, since records are implemented as tuples, + with the record name as the first element, the first field of a record becomes the second + element in the corresponding tuple! +

+ + In the following, all table objects are mainly referred to as tuples, regardless of the + table type.

+

For further information about ETS and Mnesia, please see the manual pages and Mnesia User's Guide.

+
+ +
+ Starting the TV +

The TV tool is started by giving the command

+
+      tv:start().
+    
+

The window that appears, is hereafter referred to as the TV main window. It consists of:

+ + +

a menubar.

+
+ +

a grid, i.e., a multicolumnar array, where tables existing on + the current node is shown. Each square in the grid is called a cell.

+
+
+ + The TV Main Window at startup. + +

For each table, the following information is shown, in order: +

+ + +

the table name. If the table is accessible through this name, as is the + case with Mnesia tables and named ETS tables, the table name is shown in + black, otherwise in medium grey.

+
+ +

the table identifier, if there is one; since Mnesia tables are accessed + solely through the table name, this cell will in those cases be blank.

+
+ +

the process identifier (PID) of the process owning the table.

+
+ +

the name of the process owning the table, provided the process + is registered.

+
+ +

the table size, i.e., the number of objects currently stored in + the table.

+
+
+
+ +
+ Changing View +

The TV will by default show currently existing ETS tables, + but the user may easily switch to a Mnesia table view, by choosing the + Mnesia Tables option in the View menu: +

+ + The TV Main Window, showing Mnesia tables. + +

Normally, system tables (i.e., tables used by system applications) and unreadable + tables are not shown. The menu option System Tables, in the Options + menu, makes the system tables visible: +

+ + The TV Main Window, showing readable user and system tables. + +

Still unreadable tables are hidden, but the menu option Unreadable Tables, + also in the Options menu, makes even those tables visible. It shall be noted + that rows containing unreadable tables are shaded, using a grey colour: +

+ + The TV Main Window, showing both readable and unreadable user and system tables. + +

Once a table view has been opened, the user may choose how to view it: it may be sorted + by the table names, by the table identifiers, by the process identifiers of the owner + processes, or by the names of the owning processes. These sorting options are found in the + Options menu. +

+ + The TV Main Window, tables sorted by owner PID. + +
+ +
+ Changing the Current Node +

By default, the Table Vizualizer will show tables residing on the node + it was started from. However, the user may easily view tables on other nodes. + By choosing the Nodes option, in the File menu, a window showing + all connected nodes will appear. Clicking on any of the nodes in the list will cause + the main window to immediately show the tables residing on the specified node: +

+ + The Connected Nodes window, and the TV Main Window, showing tables on the selected node. + +
+ +
+ Opening a Table in the Table Browser +

Whenever a table shall be opened, the first step is to choose the corresponding + Table Name or Table ID cell. Secondly, the Open Table + menu item, in the File menu, has to be chosen. (Or, one may directly + double-click on a Table Name or Table Id cell.)

+

If the table selected table is readable, a window will appear after a short delay. This new + window is hereafter denoted the Table Browser window. Should the table be + unreadable, the Table Information window will appear instead (see further description + below). +

+ +
+ The Table Browser Window +

The Table Browser window consists of:

+ + +

a menubar.

+
+ +

a toolbar with buttons providing shortcuts to the menubar options. If the + cursor rests on any button, a so-called toolbar tip, explaining the button, + will appear.

+ + (In the picture below, the cursor has lingered on the Open Table + button for a while.)

+
+ +

a content and edit field, showing the content of a specified row or cell. + Through this field the row, or cell, may also be edited (see below for a detailed + description).

+
+ +

a grid, i.e., a multicolumnar array, where the content of the + opened table will be shown. (As above, each square in the grid is called a cell.

+
+
+ + The Table Browser Window. + +

The successful appearance of the Table Browser window means that an image of + the selected table has been created in the TV. It is this image + that is shown in the Table Browser. +

+ +
+ How Table Data Is Presented +

Each object in the table is presented on a row of its own in the grid. + Each element in the object is presented in a cell of its own.

+ + The colours on the vertical buttons to the left of the grid show the status + of the object on that very row: a bright red colour indicates that the object just + has been inserted (when the table is opened, all objects are regarded as being + just inserted), while a bright green colour indicates that the object has been + changed. The colour fades away, shade by shade, every time the actual table is polled, + until the normal background colour is encountered.

+ + When an object has been deleted, the colour of the corresponding + vertical button turns to black. The next time the table is polled, the + object will be removed from the grid.

+ + The Table Browser Window, with new, changed, and deleted objects. + +

Normally, new objects are placed at the end of the grid, while all other objects + maintain their positions between successive polls. However, when sorting mode has + been ordered, all objects, even new ones, are placed at the correct position + according to the sorting ordered (see also below).

+

Immediately above the horizontal buttons, one or more keys may + appear. These keys indicates which elements that are used as indices in the + ETS/Mnesia table, i.e., which fields that are used by ETS/Mnesia as search keys when + looking up data.

+

The grid columns may be resized, by clicking and dragging on the small black resize areas between any two horizontal buttons.

+

The rows are enumerated, as a help when navigating through the table. Note: it shall + not be assumed that these numbers correspond to the placement of the objects in the + actual table! The row numbers, as presented in the TV, are + only temporary, and only valid within the TV! +

+ + The number on the vertical scrollbar corresponds to the number the + uppermost row has (or will have).

+

The number shown on the horizontal scrollbar relates to the leftmost column shown.

+
+ +
+ How to Poll the Table +

The table is polled whenever the Poll Table option in the Options + menu is chosen (or the Poll Table toolbar button is pressed).

+ + The user may also choose to let the TV poll the table at regular + intervals. This is done via the Set Poll Interval... option in the + Options menu, which causes the Set Poll Interval window to appear.

+

In the Set Poll Interval window the user selects whether manual or automatic + polling shall be used, and, in the automatic polling case, the poll interval.

+ + The Set Poll Interval Window. + +

It shall be noted that, in the case of a large table (or a slow computer/operating + system), a short poll interval may cause the TV to be flooded, i.e., the + data resulting from one poll has not been fully treated and presented when the data from + the next poll arrives. The user is therefore kindly requested to use the automatic + polling facility with care!

+
+ +
+ How to Edit Objects in the Table +

Provided that the table is writable for other processes than the owning process, + the user may insert, change and delete objects.

+

To delete an object, the corresponding row, or a single cell in the + corresponding row, has to be chosen, by clicking either on the vertical button + to the left of the row, or on a cell. Thereafter the Delete Object + option in the Edit Menu + is chosen. (Should the user regret the delete operation, the row may once again + be selected, whereupon the Return button simply is pressed.)

+

To insert an object, the user may use the Record Editor, or simply + enter the object in the content and edit field, and then press the Return + button.

+ + The Record Editor is started via the Edit Object option in the + Edit menu, or via the Edit Object toolbar button. The editor that + appears looks different depending on the kind of table: for Mnesia tables, + a writable field is shown for each record entry, as well as the name of the entry. + For ETS tables, only a writable field is shown; this is due to the fact that the + size of the tuples inserted in ETS tables may vary, whereas the size of the records + inserted in a Mnesia table (more or less) is fixed. + One may select the next field in the record editor by pressing + the 'Tab' (or 'Arrow Down') button, and select the previous field by pressing + 'Shift'+'Tab' (or 'Arrow Up').

+ + When the editing is finished, the OK button may be clicked, or + 'Return' pressed. The TV will then try to insert the new object. +

+ + The Record Editor (shown for a Mnesia table). + +

To change an already existing object, the corresponding row, or a single cell + in the corresponding row, has to be selected first (see below). Then one may edit the + whole object (or the selected field in the object), either using the record editor + or the content and edit field, whereupon 'Return' may be pressed (or the 'OK' button + clicked). +

+

It shall be noted that it is hard to edit objects containing + process identifiers, references, binaries and ports, + since it is only a textual representation of these terms that is shown on the screen. + It is in the general case impossible for the TV to correctly + convert this textual representation back to the original term. As a courtesy to + the user, an attempt to do this will nevertheless be done if the edited field + consists of a single process identifier; however, this conversion will only be + correct provided + that the process identifier originates from the current Erlang session. (On + the other hand, why on earth should any user want to store old process identifiers?) +

+

It shall also be noted that it may be more or less confusing to edit the table, + depending on whether the table type is set, bag, or + duplicate_bag, i.e., depending on whether or not objects having the + same key (or even duplicate objects) are allowed. Please study the ETS or Mnesia + manual pages, should confusion arise! +

+
+ +
+ How to Search For Objects +

One may search for an object, by choosing the Search Object + option in the Options menu (or by pressing the Search Object + toolbar button). In the Search Object window that appears, any valid + Erlang term or regular expression may be entered, whereupon all objects + containing (or consisting of) this term, or matching the regular expression, + will be shown.

+ + The Search Object Window. + +

In the search result list, by clicking on any object, the Table Browser will + immediately scroll to the corresponding row in the table shown. This enables + the user to in a very powerful way quickly find the objects he's interested in.

+ + The Search Object Window interworking with the Table Browser. + +
+ +
+ How to Mark Table Data +

One may mark a row or a column by clicking on the buttons to the left and above + the grid, respectively. A single cell is marked by clicking on it. Even empty + rows and columns may be marked; an empty cell cannot be marked - on the contrary, + by clicking on an empty cell, all marks are removed.

+

Marks are indicated by a cyan blue colour.

+ + The TV Main Window: a row has been marked. + +

When a row or a cell has been marked, the content will be shown in the content field, + together with an indication of the row (and column when applicable) the marked area + corresponds to. Should the object be very big, only a fraction of it may be shown in + this field. By clicking on the down-arrow button to the right of the content and + edit field, a pop-up content field will be shown, where the whole marked object + may be viewed. The content of this pop-up field may be marked and copied to + other windows; however, this field cannot be edited.

+ + The Table Browser: the pop-up content field. + +

It shall be noted that the user may choose whether lists shall be shown as + strings or lists; this is done via the View menu. +

+

A marked column may be subject to sorting, see below. When sorting is ordered, + marks are removed at each polling of the table (because of the difficulties to + keep track of a certain object, or element, in this case).

+
+ +
+ How to Sort Table Data +

The image of the table may be sorted in rising or falling order, using any element as + sorting key. The element desired is chosen by marking the corresponding column, and + then choose (either via the Options menu, or via the toolbar buttons) any + of the sorting options available, i.e., sorting in ascending or descending order. + The colour of the column button will then change to gold, to indicate that this + column is the basis for the sorting currently chosen.

+

Should no column have been marked, when sorting is ordered, the first element in each + object (i.e, tuple) will be used as sorting key if the table is an ETS table; the + second element (i.e., the first field in the record) will be used if the table is a + Mnesia table.

+

Even columns with no elements in them may be subject to sorting. In this case the + whole object is used as the sorting key.

+

When sorting is ordered, new elements will be inserted according to the current + sorting mode. When the sorting is interrupted (via the No Sorting option), + the current image of the table keep the current order, but new elements will from + now on once again be inserted at the end of the image of the table.

+
+ +
+ How to Obtain Table Information +

Information about the actual table is obtained via the File menu (or via the + Table Info toolbar button). The information is printed in a separate window, + with similar pieces of information grouped together on "flap cards" of their own. + By clicking on a flap, the information on the corresponding card is made visible.

+ + The Table Information Window, showing information about a Mnesia table. + +

The Table Information window may also be opened from the TV Main + Window, by selecting a table and then choose the Table Info option + in the File menu (or by double-clicking on the Table Size + field.

+

Note: The Table Information window will automatically be opened if the user tries + to open an unreadable table, since this is the only information available in this + case.

+
+
+ +
+ The Table Browser Menus +

The Table Browser offers the following menus:

+

+ +
+ The File Menu + + Table Info + +

Opens the Table Information window, which shows the available information + about the current table.

+
+ Close + +

Closes the Table Browser window.

+
+
+
+ +
+ The Edit Menu + + Edit Object... + +

Opens the Record Editor. If an object is marked, it will be shown in + the Record Editor.

+
+ Delete Object + +

Deletes a marked object.

+
+
+
+ +
+ The View Menu + + Lists As Lists + +

Causes lists in the table to be shown as lists.

+
+ Lists As Strings + +

Causes lists in the table to be shown as strings.

+
+
+
+ +
+ The Options Menu + + Poll Table + +

An explicit order to poll the table, i.e., to scan the content.

+
+ Poll Interval... + +

Choose between manual and automatic polling. In the case of automatic + polling, the user gets the opportunity to choose the polling interval.

+
+ Search Object + +

Enables search for objects containing (or consisting of) a specified + Erlang term, or matching a regular pattern. The search result may be used + for quick navigation in the table.

+
+ Sort Ascending Order + +

Shows the table content sorted in ascending (i.e., rising) order. + New objects will be shown with correct placement as long the as the sorting + is going on.

+ + Please note that it is only the image of the table that is affected, + not the table itself!

+
+ Sort Descending Order + +

Shows the table content sorted in descending (i.e., falling) order. + New objects will be shown with correct placement as long the as the + sorting is going on.

+
+ No Sorting + +

Sorting mode is left. New objects will be shown last in the + table. However, older objects will remain in the position they had when + the sorting mode was left, i.e., their placement will not reflect their + actual placement in the ETS/Mnesia table.

+
+
+
+ +
+ The Help Menu + + Help + +

Shows the help (about TV usage) that is available. + (The help will be shown in the Netscape Internet browser, if available.)

+
+ OTP Documentation + +

Shows the Documentation about all OTP components that is available + in the local installation of OTP.

+
+
+
+
+
+ +
+ Tracing the Owner Process +

The process owning the table may easily be traced, by selecting either + the Owner Pid or the Owner Name field, and then choosing + the Trace Process option in the File menu.

+ + (It is also possible to double-click on any of these fields.)

+
+ +
+ Creating a New Table +

A new table may easily be created using the New Table window. + Currently only ETS tables may be created. Since ETS tables + dies together with the parent process, a special process, registered + as tv_table_owner, will be the owner of tables created this way. + This process will not be affected by any termination of the TV, + i.e., the ETS tables created will live on until they are explicitly killed. +

+ + The New Table Window, enabling easy creation of ETS tables. + +

Note: the tv_table_owner is local to each node, meaning + that the creation of a table on a new node also will start such a process + on that node. This way only the tables on a specific node dies, should that + specific node crash.

+
+ +
+ The TV Main Window Menus +

The Main Window offers the following menus:

+

+ +
+ The File Menu + + Open Table + +

Open a selected table in a new Table Browser.

+
+ New Table + +

Open the New Table window, enabling easy creation of ETS tables.

+
+ Table Info + +

Opens the Table Information window, showing the available + information about a selected table.

+
+ Nodes... + +

Open the Connected Nodes window, enabling the user to view + tables residing on remote nodes.

+
+ Trace Process + Opens a trace window, where the process owning a selected table can + be traced. + Exit + +

Terminates the TV.

+
+
+
+ +
+ The View Menu + + ETS Tables + +

Shows ETS tables on the current node.

+
+ Mnesia tables + +

Shows Mnesia tables on the current node.

+
+
+
+ +
+ The Options Menu + + Refresh + +

An explicit order to once again check the current node for existing + tables, and list them.

+
+ Unreadable Tables + +

Option to choose whether or not unreadable tables shall be shown.

+
+ System Tables + +

Option to choose whether or not system tables shall be shown.

+
+ Sort by Name + +

Shows the tables sorted by their names.

+
+ Sort by Id + +

Shows the tables sorted by their table identifiers.

+
+ Sort by Owner PID + +

Shows the tables sorted by the process identifiers of the owning + processes.

+
+ Sort by Owner Name + +

Shows the tables sorted by the registered names of the owning processes.

+
+ Error Messages in Haiku + +

Option to choose whether or not error messages shall be shown + in the Japanes poetry style called Haiku.

+
+
+
+ +
+ The Help Menu + + Help + +

Shows the help (about TV usage) that is available. + (The help will be shown in the Netscape Internet browser, if available.)

+
+ OTP Documentation + +

Shows the Documentation about all OTP components that is available + in the local installation of OTP.

+
+
+
+
+
+ + diff --git a/lib/tv/doc/src/tv.gif b/lib/tv/doc/src/tv.gif new file mode 100644 index 0000000000..d78cf7d8ed Binary files /dev/null and b/lib/tv/doc/src/tv.gif differ diff --git a/lib/tv/doc/src/tv.xml b/lib/tv/doc/src/tv.xml new file mode 100644 index 0000000000..76edcac71b --- /dev/null +++ b/lib/tv/doc/src/tv.xml @@ -0,0 +1,66 @@ + + + + +
+ + 1997 + 2007 + Ericsson AB, All Rights Reserved + + + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + The Initial Developer of the Original Code is Ericsson AB. + + + tv + Fredrik Gustafson + + + + + 1997-11-17 + 1.0 + table_visualizer.sgml +
+ tv + TV graphically examines ETS and Mnesia tables. + +

TV enables the user to examine ETS and Mnesia tables. Once + a certain table has been opened in the tool, the content may be viewed at + various levels of detail. The content viewed may also be sorted, using any + element as key. The table may be polled anytime; either regularly at + specified intervals, or manually. New and deleted objects, as well as those + altered, are marked with characteristic colors.

+
+ + + start() -> Pid + Start TV. + + Pid = pid() + + +

start/0 starts the TV.

+
+
+
+ +
+ See Also +

For a complete description of the TV, please + see the TV User's Guide.

+
+
+ + diff --git a/lib/tv/doc/src/tv_create_table.gif b/lib/tv/doc/src/tv_create_table.gif new file mode 100644 index 0000000000..7fae7f30cf Binary files /dev/null and b/lib/tv/doc/src/tv_create_table.gif differ diff --git a/lib/tv/doc/src/tv_create_table.ps b/lib/tv/doc/src/tv_create_table.ps new file mode 100644 index 0000000000..0a3b24bcf5 --- /dev/null +++ b/lib/tv/doc/src/tv_create_table.ps @@ -0,0 +1,1120 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_create_table.tmp.eps) +%%CreationDate: (Tue Jun 12 16:14:11 2001) +%%BoundingBox: 0 114 250 471 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 114 250 471 +userdict begin +%%BeginData: +DisplayImage +0 114 +250.000000 357.000000 +12 +410 585 +1 +0 +0 +8 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +aa2455 +999999 +000a01ff0183000b0208040001ff018300000208040000000208040002ff028300000208 +0400000002080400020000ff0080040002000000020804000000020204060200000004ff +0480020000000405020204000000020204000209000d02ff027700000202040000000202 +040002080000020d0400025e010302110103028d01010206010102640000020204000000 +0202040002080000020d0400025e01010202010702000101020301010201010102100103 +02180100020f010202020100021901050200010702010103020601070209010102060101 +026400000202040000000202040002080000020d0400025e010102050101020301010203 +010102010101020f01010201010102160101020f01020202010002190101020701010203 +01010201010102080101020c010102060101026400000202040000000202040002080000 +0202040602030400025e010102050101020301010203010102010101020e010102050101 +020001010201010302030103020101040201010302070100020001010201010002020103 +0202010102050101020501010207010102030101020c0101020401030203010102000101 +0203010102020103025d0000020204000000040302080000020204000304000002030400 +025e010102050101020401010202010002020101020e0101020501010200010102000101 +020101010201010102010101020101010202010102010101020601000200010102010100 +0201010102010101020101010201010102010101020501010207010102030102020b0101 +02030101020101010202010202000101020201010201010102010101025c000004030101 +020b0000020304000302000002040400025e010102050101020401010201010102020101 +020e01010205010202020101020101010205010102010101020201010201010102060100 +020001020200010002010101020101010202010102000101020001010206010402040101 +0204010302090101020701010202010102010101020201010201010102010101025f0103 +020b0000020304000302000002040400025e010102050101020501010200010002030101 +020e01010205010102030105020201040201010102020105020601000201010102000100 +020101050202010102000101020001010206010102070101020601020208010102040104 +02020101020101010202010102010105025f0103020b0000020404000300000002050400 +025e0101020501010205010302030101020e010102050101020301010205010102010101 +0201010102020101020a0100020201020201010102060107020601010207010102070101 +0208010102030101020101010202010102010101020201010201010102630103020b0000 +020404000300000002050400025e0101020501010206010102040101020f010102020100 +020001010203010102020100020101010201010102010101020201010202010002060100 +020201020201010102020100020301010201010102070101020701010203010102010101 +0208010102030101020101010202010102010101020201010201010102020100025f0103 +020b00000205000002060400025e01010205010102060101020401010210010302010101 +020401030203010202000101020101020201010302070100020301010202010302040101 +020101010207010502030101020401030209010102040102020001010201010402030101 +0202010302600103020b0000020d0400025e01030211010302ff02000103020b0000020d +040002ff02790103020b0000020d040002ff02790103020c040d02ff027a010302ff0295 +010302ff02950103020200ff008e0400020201030202000004ff048e0202010302ff0295 +010302020500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000020201030202000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c0100050002020103020205000000056f07ff070e050d +01000202010302020000057007ff070d0000050c0100050002020103020205000000056f +070100ff000c050d010002020103020200000570070100ff000c050c0100050002020103 +020205000000056f070100ff000c050d010002020103020200000570070100ff000c050c +0100050002020103020205000000056f070100ff000c050d010002020103020200000570 +070100040100002001000030010000b2050c0100050002020103020205000000050a0100 +05020100050c0100055107010004010000130100000a0100000001000018010200130100 +00b2050d01000202010302020000050b010105010100050c01000551070100030100001f +010000020100001901000012010000b3050c0100050002020103020205000000050a0101 +050101000502010205030101050001000502010205040101054407010002010000040101 +000001000003010200030102000201000000010100020100000001020001010100000100 +000301020002010000000101000501000003010200020100000201000002010000b4050d +01000202010302020000050b010005000100050001000501010005020100050101000501 +010105010100050201000503010105440701000801000000010000000100000101000002 +010000040100000201010001010000010100000001000000010000010100000001000000 +010000010100000201000001010100010100000401000002010000020100000101000002 +010000b8050c0100050002020103020205000000050a0100050001000500010005010100 +0502010005010100050201000501010005020100054a0701000801000000010000000100 +000501000004010000020100000201000001010000000100000001000001010000000100 +000001000005010000010100000801000002010000020100000201000001010000b8050d +01000202010302020000050b010005010101050101000502010005010100050201000501 +0104054a0701000801000000010000000100000201030004010000020100000201000001 +010000000102000101000000010000000100000201030001010000080100000201040002 +01000001010000b8050c0100050002020103020205000000050a01000501010105010100 +05020100050101000502010005010100054e070100080100000001000000010000010100 +000201000004010000020100000201000001010000050100000001000000010000010100 +00020100000101000008010000020100000701000000010000b8050d0100020201030202 +0000050b0100050201000501010005020100050101000501010105010100050201000503 +010105440701000801000000010000000100000101000002010000040100000201000002 +010000020100000101000001010000000100000001000001010000020100000101000008 +010000020100000201000003010100b9050c0100050002020103020205000000050a0100 +050201000502010205030101050001000502010205040101054407010008010000000100 +000001000002010300040100000201000002010000030101000201000000010000000100 +000201030001010000080100000301020005010000b9050d010002020103020200000570 +07010051010000b9050c0100050002020103020205000000056f0701004e010000000100 +00ba050d0100020201030202000005700701004f010000bb050c01000500020201030202 +05000000056f070100ff000c050d010002020103020200000570070100ff000c050c0100 +050002020103020205000000056f070100ff000c050d0100020201030202000005700701 +00ff000c050c0100050002020103020205000000056f070100ff000c050d010002020103 +020200000570070000ff000d050c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +056d01ff0112050b01000202010302020000056e01ff0112050a01000500020201030202 +05000000056d010107ff070e0101050b01000202010302020000056e010107ff070d0000 +0101050a0100050002020103020205000000056d0101070100ff000c0101050b01000202 +010302020000056e0101070100ff000c0101050a0100050002020103020205000000056d +0101070100ff000c0101050b01000202010302020000056e010107010000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +00d20101050a0100050002020103020205000000056d010107010337010100d20101050b +01000202010302020000056e0101070100000336010100d20101050a0100050002020103 +020205000000050a0104050801000506010205490101070103180100030a010003060102 +0307010100d20101050b01000202010302020000050d0100050a01000508010005490101 +0701000003170100030a0100030801000307010100d20101050a01000500020201030202 +05000000050c010005040102050201000500010105050100050301020509010005000101 +050301020502010105000100050301020504010105180101070103010101030001000302 +0100030201000308010403020102030201000300010103050100030301020300010100d2 +0101050b01000202010302020000050d0100050301000502010005010101050101000504 +010005020100050201000508010105010100050101000502010005010100050001000500 +010005010100050201000503010105180101070100000300010003000100030001000301 +010003020100030a01000303010003020100030101010301010003040100030201000302 +010200d20101050a0100050002020103020205000000050c010005070100050101000502 +010005040100050201000502010005080100050201000505010005010100050001000500 +01000501010005020100051e010107010301010003000100030001000302010003010100 +030a010003070100030101000302010003040100030201000302010200d20101050b0100 +0202010302020000050d0100050401030501010005020100050401000502010405080100 +050201000502010305010100050001000500010005010104051e01010701000003000100 +03000100030001000302010003010100030a010003040103030101000302010003040100 +0302010600d20101050a0100050002020103020205000000050c01000503010005020100 +05010100050201000504010005020100050c010005020100050101000502010005010100 +050001000500010005010100052201010701030101000300010003000100030301000300 +0100030a01000303010003020100030101000302010003040100030201000303010100d2 +0101050b01000202010302020000050d0100050301000502010005010101050101000504 +010005020100050201000508010005020100050101000502010005010100050001000500 +010005010100050201000503010105180101070100000300010003000100030001000303 +0101030b01000303010003020100030101010301010003040100030201000302010200d2 +0101050a0100050002020103020205000000050c01000504010305010100050001010505 +010005030102050901000502010005020103050101000500010005000100050201020504 +010105180101070103010100030001000300010003040100030c01010302010303010100 +0300010103050100030301020300010100d20101050b01000202010302020000056e0101 +07010000030a0100030101050322010100d20101050a0100050002020103020205000000 +056d010107010308010003000100032b010100d20101050b01000202010302020000056e +01010701000003080100032c010100d20101050a0100050002020103020205000000056d +010107010300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +03000100030001000300010000d20101050b01000202010302020000056e0101070100ff +000c0101050a0100050002020103020205000000056d0101070100ff000c0101050b0100 +0202010302020000056e0101070100ff000c0101050a0100050002020103020205000000 +056d0101070100ff000c0101050b01000202010302020000056e0101070000ff000d0101 +050a0100050002020103020205000000056d01ff0112050b01000202010302020000056e +01ff0112050a010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c01000500020201030202050000000570000005000000050000000500000005000000 +0508010005020100051a0100050a0100050a01000506010205c601000202010302020000 +0570000005000000050000000500000005000000050001000507010105010100051a0100 +050a0100050a01000508010005c501000500020201030202050000000570000005060100 +050801010501010005020102050201010500010005030102050301010500010005080104 +050201020502010005000101050501000503010205bf0100020201030202000005700000 +050801000507010005000100050001000501010005020100050101000500010005000100 +05010100050201000501010005010101050a010005030100050201000501010105010100 +05040100050201000502010005bd01000500020201030202050000000570000005060100 +050801000500010005000100050501000501010005000100050001000501010005020100 +0501010005020100050a0100050701000501010005020100050401000502010005020100 +05be01000202010302020000057000000508010005070100050101010502010305010100 +0500010005000100050101040501010005020100050a0100050401030501010005020100 +050401000502010405bd0100050002020103020205000000057000000506010005080100 +050101010501010005020100050101000500010005000100050101000505010005020100 +050a010005030100050201000501010005020100050401000502010005c2010002020103 +020200000570000005080100050701000502010005010100050201000501010005000100 +0500010005010100050201000501010005010101050a0100050301000502010005010101 +0501010005040100050201000502010005bd010005000202010302020500000005700000 +050601000508010005020100050201030501010005000100050001000502010205030101 +05000100050b0101050201030501010005000101050501000503010205bf010002020103 +0202000005700000050001000500010005000100050001000500010005ff051001000500 +02020103020205000000057001000500010005000100050001000500010005ff05120100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100020201030202000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050002020103 +020205000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000202010302020000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +0000050000000500000005000000050000000500000005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c0100050002020103020205000000050a010405ff +057c01000202010302020000050d010005ff057d0100050002020103020205000000050c +010005030100050201000501010005000101050301020504010105ff0561010002020103 +02020000050d010005030100050201000501010105010100050101000502010005030101 +05ff05600100050002020103020205000000050c01000504010005010100050101000502 +0100050101000502010005ff056701000202010302020000050d01000504010005010100 +05010100050201000501010405ff05660100050002020103020205000000050c01000505 +01000500010005010100050201000501010005ff056b01000202010302020000050d0100 +05050101050201010501010005010100050201000503010105ff05600100050002020103 +020205000000050c0100050601000502010005000101050301020504010105ff05610100 +0202010302020000051501000502010005ff057101000500020201030202050000000511 +0100050001000503010005ff057201000202010302020000051301000504010005ff0571 +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005440100 +0567000005670000057401000500020201030202050000000542010005000100051d0100 +0546000005000000050d0100055600000500000005110100051001020505010005120100 +05110100051f01000202010302020000054201000500010005000100051c010005450000 +0500000005000000050c0100055500000500000005000000051001000512010005190100 +05110100051e01000500020201030202050000000540010005000100060105000100050c +01020503010205020104054200000500000005020000050b010005000101050301020503 +010105000100054200000500000005020000050c01010500010005010100050201000501 +010005000101050501000503010205030102050301020502010405020102050901000500 +0101050301020503010105000100050d0100020201030202000005400100050001000603 +05000100050a010005020100050101000502010005030100054300000500000005040000 +050a01010501010005010100050201000501010005010101054100000500000005040000 +050a01000501010105010100050201000501010105010100050401000505010005020100 +050201000501010005020100050301000503010005020100050801010501010005010100 +050201000501010005010101050c0100050002020103020205000000053e010005000100 +060505000100050901000505010005020100050301000542000005000000050600000509 +010005020100050501000501010005020100054000000500000005060000050901000502 +010005010100050201000501010005020100050401000505010005020100050901000503 +010005030100050201000508010005020100050501000501010005020100050d01000202 +010302020000053e00000500000006070500000005090102050201040503010005410100 +05000100050801000508010005020100050201030501010005020100053f010005000100 +050801000508010005020100050101000502010005010100050201000504010005050100 +050201000506010305030100050301040508010005020100050201030501010005020100 +050c0100050002020103020205000000053e000005000000060505000000050d01000501 +010005070100054201000500010005060100050901000502010005010100050201000501 +010005020100054001000500010005060100050901000502010005010100050201000501 +01000502010005040100050501000502010005050100050201000503010005030100050c +01000502010005010100050201000501010005020100050d010002020103020200000540 +000005000000060305000000050a01000502010005010100050201000503010005430100 +0500010005040100050a0101050101000501010005020100050101000501010105410100 +0500010005040100050a0100050101010501010005010101050101010501010005040100 +050501000502010005020100050101000502010005030100050301000502010005080101 +0501010005010100050201000501010005010101050c0100050002020103020205000000 +0540000005000000060105000000050c0102050301020505010105420100050001000502 +0100050b010005000101050301030502010105000100054201000500010005020100050c +010105000100050201010500010005010100050001010505010005050100050301020503 +010305040101050201020509010005000101050301030502010105000100050d01000202 +010302020000054200000500000005000000056301000500010005000100051e01000543 +01000500010005000100051a0100052e010505130100050c010005000202010302020500 +000005420000050000000565010005000100051b0100050201000544010005000100051b +01000544010005020100050d010002020103020200000544000005670100051d01020546 +0100051c010005450102050d010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +0000050a010305120100051301000506010005ff054c01000202010302020000050b0100 +05020100051101000513010005ff05530100050002020103020205000000050a01000502 +010005010100050001010503010205020104050201020503010205020104050201020503 +010205020100050001010504010105ff053701000202010302020000050b010005020100 +050101010501010005010100050201000503010005030100050201000501010005020100 +0503010005060100050201000502010005010101050101000503010105ff053601000500 +02020103020205000000050a010305020100050501000502010005030100050301000502 +01000501010005070100050601000502010005020100050101000502010005ff053d0100 +0202010302020000050b0100050501000505010005020100050301000503010405010100 +05070100050601000502010005020100050101000502010005ff053c0100050002020103 +020205000000050a01000505010005050100050201000503010005030100050501000507 +0100050601000502010005020100050101000502010005ff053d01000202010302020000 +050b01000505010005050100050201000503010005030100050201000501010005020100 +0503010005060100050201000502010005010100050201000503010105ff053601000500 +02020103020205000000050a010005050100050601020505010105020102050301020505 +0101050401000503010205020100050201000503010105ff053701000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005440100 +0567000005670000057401000500020201030202050000000542010005000100051b0100 +050601020505010005370000050000000524010005130100050e0100051a000005000000 +051e010005120100054001000202010302020000054201000500010005000100051a0100 +05080100053d000005000000050000000523010005130100050e01000519000005000000 +0500000005310100053f0100050002020103020205000000054001000500010006010500 +0100050b0100050001010502010005020100050101000500010105050100050301020503 +0102052e00000500000005020000050b0100050001010502010005000101050301020502 +010405020102050301020502010405020102050301010500010005180000050000000502 +0000050b0100050001010502010005000101050301020502010005020100050201020502 +0104050201020538010002020103020200000540010005000100060305000100050a0101 +050101000501010005020100050101010501010005040100050501000502010005020100 +052c00000500000005040000050a01010501010005010101050101000501010005020100 +050301000503010005020100050101000502010005030100050301000502010005010100 +05010101051700000500000005040000050a010105010100050101010501010005040100 +050201000502010005010100050201000503010005030100050201000536010005000202 +0103020205000000053e0100050001000605050001000509010005020100050101000502 +01000501010005020100050401000505010005020100052f000005000000050600000509 +010005020100050101000505010005020100050301000503010005020100050101000507 +010005030100050201000501010005020100051600000500000005060000050901000502 +010005010100050801000502010005020100050501000503010005030100050201000537 +01000202010302020000053e000005000000060705000000050801000502010005010100 +050201000501010005020100050401000505010005020100052e01000500010005080100 +050801000502010005010100050501000502010005030100050301040501010005070100 +050301040501010005020100051501000500010005080100050801000502010005010100 +050801000503010005000100050301030503010005030104053601000500020201030202 +05000000053e000005000000060505000000050901000502010005010100050201000501 +010005020100050401000505010005020100052f01000500010005060100050901000502 +010005010100050501000502010005030100050301000505010005070100050301000505 +010005020100051601000500010005060100050901000502010005010100050801000503 +01000500010005020100050201000503010005030100053b010002020103020200000540 +000005000000060305000000050a01010501010005010100050101010501010105010100 +05040100050501000502010005020100052c01000500010005040100050a010105010100 +050101000505010005020100050301000503010005020100050101000502010005030100 +05030100050201000501010005010101051701000500010005040100050a010105010100 +050101000508010005040100050301000502010005030100050301000502010005360100 +0500020201030202050000000540000005000000060105000000050b0100050001010503 +0101050001000501010005000101050501000505010005030102052e0100050001000502 +0100050b0100050001010502010005060102050501010502010205030102050501010502 +01020503010105000100051801000500010005020100050b010005000101050201000508 +010005040100050401030504010105020102053801000202010302020000054200000500 +000005000000050c0100055501000500010005000100050c010005550100050001000500 +0100050c0100056401000500020201030202050000000542000005000000050d01000556 +010005000100050d01000556010005000100050d01000565010002020103020200000544 +0000050e010005570100050e010005570100050e01000564010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +02020103020205000000056f072d05ee010002020103020200000570072c000005ed0100 +050002020103020205000000056f0701002b05ee0100020201030202000005700701002b +05ed0100050002020103020205000000056f0701002b05ee010002020103020200000570 +0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202 +000005700701002b05ed0100050002020103020205000000050a010005020100052e0100 +05040100050601000521070100030100002605ee01000202010302020000050b01000501 +0100053501000529070100020101002605ed0100050002020103020205000000050a0100 +050001000504010205020100050201000508010005000101050301020503010205030102 +050201040502010205030102050201000500010105040101050c07010001010000000100 +002605ee01000202010302020000050b0101050401000502010005010100050201000508 +010105010100050101000502010005010100050201000504010005040100050601000502 +010005020100050101010501010005030101050c070100030100002605ed010005000202 +0103020205000000050a0100050001000503010005020100050201000501010005080100 +050201000501010005020100050101000508010005040100050601000502010005020100 +05010100050201000512070100030100002605ee01000202010302020000050b01000501 +010005020104050201000501010005080100050201000501010005020100050201020505 +010005040100050601000502010005020100050101000502010005120701000301000026 +05ed0100050002020103020205000000050a010005010100050201000507010005000100 +050801000502010005010100050201000505010005040100050401000506010005020100 +0502010005010100050201000512070100030100002605ee01000202010302020000050b +010005020100050101000502010005030101050901010501010005010100050201000501 +010005020100050401000504010005060100050201000502010005010100050201000503 +0101050c070100030100002605ed0100050002020103020205000000050a010005020100 +050201020505010005090100050001010503010205030102050501000505010105040100 +05030102050201000502010005030101050c070100010104002405ee0100020201030202 +0000051c01000509010005470701002b05ed010005000202010302020500000005180100 +05000100050a010005470701002b05ee01000202010302020000051a0100050b01000547 +0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202 +000005700701002b05ed0100050002020103020205000000056f0701002b05ee01000202 +01030202000005700701002b05ed0100050002020103020205000000056f0701002b05ee +0100020201030202000005700700002c05ed010005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +050002020103020205000000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000202010302020000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500020201030202 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000002020103020200000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000202010302020500000005ff058c +0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 +01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 +000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff +058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 +05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 +010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 +0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 +05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c +0100020201030202000005ff058c01000500020201030202050000000557010005000100 +05000100050001000500010005090102051e010005fe0100020201030202000005570100 +05000100050001000500010005000100050000000507010005020100051d010005fd0100 +050002020103020205000000055701000606000005080100050201000501010005000101 +050301020502010005000101050901000500010105020100050001010503010205020100 +050201000502010205030102050201000500010105d10100020201030202000005570100 +050006060500000005070100050201000501010105010100050101000502010005010101 +050101000508010105010100050101010501010005010100050201000501010005020100 +05010100050201000501010005020100050101010501010005cf01000500020201030202 +050000000557010006060000050801000502010005010100050201000501010005020100 +050101000502010005080100050201000501010005050100050201000501010005000100 +050001000501010005050100050201000501010005d40100020201030202000005570100 +050006060500000005070100050201000501010005020100050101040501010005020100 +050801000502010005010100050501000502010005010100050001000500010005020102 +050201040501010005d30100050002020103020205000000055701000606000005080100 +050201000501010005020100050101000505010005020100050801000502010005010100 +050501000502010005010100050001000500010005050100050101000505010005d40100 +020201030202000005570100050006060500000005070100050201000501010105010100 +050101000502010005010100050201000508010105010100050101000505010005020100 +050101000500010005000100050101000502010005010100050201000501010005d30100 +050002020103020205000000055701000606000005090102050201000500010105030102 +050201000502010005080100050001010502010005060102050301000500010005030102 +050301020502010005d40100020201030202000005570100050000000500000005000000 +0500000005000000050e010005ff05190100050002020103020205000000055700000500 +0000050000000500000005000000050f010005ff051a0100020201030202000005710100 +05ff0519010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +020200000556000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000052800000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005460100050002020103020205000000055400000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005280000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000548010002020103 +020200000556000005600100052800000560010005460100050002020103020205000000 +055400000560010005280000056001000548010002020103020200000556000005600100 +052800000560010005460100050002020103020205000000055400000560010005280000 +056001000548010002020103020200000556000005600100052800000560010005460100 +050002020103020205000000055400000560010005280000056001000548010002020103 +020200000556000005600100052800000560010005460100050002020103020205000000 +05540000052a01020502010005020100052a010005280000051c0102051f0102051d0100 +0548010002020103020200000556000005280100050201000501010005010100052c0100 +05280000051a01000502010005200100051e010005460100050002020103020205000000 +0554000005290100050201000501010005000100052c010005280000051b010005020100 +050201020502010005000101050301020503010205050100051d01000548010002020103 +0202000005560000052801000502010005010101052e010005280000051a010005050100 +0502010005010101050101000501010005020100050101000502010005040100051e0100 +054601000500020201030202050000000554000005290100050201000501010005000100 +052c010005280000051b0100050901000501010005020100050101000505010005020100 +05040100051d010005480100020201030202000005560000052801000502010005010100 +05010100052c010005280000051a01000506010305010100050201000501010005050104 +05040100051e010005460100050002020103020205000000055400000529010005020100 +0501010005010100052b010005280000051b010005020100050101000502010005010100 +05020100050101000505010005080100051d010005480100020201030202000005560000 +05280100050201000501010005020100052b010005280000051a01000502010005010100 +0502010005010100050201000501010005020100050101000502010005040100051e0100 +0546010005000202010302020500000005540000052a01020502010005020100052a0100 +05280000051c0102050301030501010005020100050201020503010205050100051d0100 +054801000202010302020000055600000560010005280000056001000546010005000202 +010302020500000005540000056001000528000005600100054801000202010302020000 +055600000560010005280000056001000546010005000202010302020500000005540000 +056001000528000005600100054801000202010302020000055600000560010005280000 +056001000546010005000202010302020500000005540000056001000528000005600100 +054801000202010302020000055600000560010005280000056001000546010005000202 +010302020500000005540000056001000528000005600100054801000202010302020000 +055600000560010005280000056001000546010005000202010302020500000005540000 +056001000528000005600100054801000202010302020000055600000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005280000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000546010005000202 +010302020500000005540000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000528000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001000500010005480100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff +058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 +020201030202000005ff058c010005000202010302020500000005ff058c010002020103 +0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 +05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c +010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 +0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 +02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 +000005ff058c010002020101000505ff058c010005000005020204000500000005ff058c +0100000002020400000002020400000005ff058c01000500000002020400000002020400 +0500000005ff058c01000000020204000000020204000000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500000002020400 +000002020400050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100000002020400000002020400000502ff028300060202 +040000000208040002ff028300000208040000000208040002ff02830000020804000000 +0208040001ff01830000020804000000040901ff018300000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 114 250 471 +%%EOF diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.gif b/lib/tv/doc/src/tv_record_editor_mnesia.gif new file mode 100644 index 0000000000..fbbdcab515 Binary files /dev/null and b/lib/tv/doc/src/tv_record_editor_mnesia.gif differ diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.ps b/lib/tv/doc/src/tv_record_editor_mnesia.ps new file mode 100644 index 0000000000..b4d19f963f --- /dev/null +++ b/lib/tv/doc/src/tv_record_editor_mnesia.ps @@ -0,0 +1,897 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_record_editor_mnesia.tmp.eps) +%%CreationDate: (Tue Jun 12 16:09:57 2001) +%%BoundingBox: 0 41 300 330 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 41 300 330 +userdict begin +%%BeginData: +DisplayImage +0 41 +300.000000 289.000000 +12 +385 371 +1 +0 +0 +8 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +999999 +000a01ff016a000b0208040001ff016a00000208040000000208040002ff026a00000208 +0400000002080400020000ff0067040002000000020804000000020204060200000004ff +0467020000000405020204000000020204000209000d02ff025e00000202040000000202 +040002080000020d04000242010302110103023701010211010102020101022301010231 +01010206010102090101023e00000202040000000202040002080000020d040002420101 +02020107020001010203010102010101020e010402230101020601050204010102020101 +02020100021f01010201010002130100020c0100020b01010206010102090101023e0000 +0202040000000202040002080000020d0400024201010205010102030101020301010201 +0101020e0101020101010222010102060101020801010206010102200100020001010212 +0101020b0101020b010102060101020a0100023e00000202040000000202040002080000 +02020406020304000242010102050101020301010203010102010101020e010102010101 +020201030203010302020103020201010200010102010104020601010205010402020101 +0200010402010103020201010200010102000101020c0100020001040201010302030104 +0200010402080104020101030203010102000101020301010202010302020100023f0000 +020204000000040302080000020204000304000002030400024201010205010102040101 +0202010002020101020e0101020101000202010102010101020101010201010102000101 +020101010201010102000101020001010201010102060101020401010201010102020101 +020101010202010102010101020101010200010102000101020f01010202010102010101 +0201010102050101020b0101020201010201010102020102020001010202010102010101 +020101010242000004030101020b00000203040003020000020404000242010102050101 +020401010201010102020101020e01030203010102010101020101010204010102010101 +020101020202010102010101020601040201010102010101020201010201010102020101 +02010101020101020214010102020101020101010201010202040101020b010102060101 +020201010201010102020101020101010201010102450103020b00000203040003020000 +020404000242010102050101020501010200010002030101020e01010200010102020105 +020101010204010102010101020101010203010102010101020601010204010102010101 +020201010201010102020101020101010201010102150101020201050202010302020101 +020b0101020301040202010102010101020201010201010502450103020b000002040400 +030000000205040002420101020501010205010302030101020e01010200010102020101 +020501010204010102010101020101010203010102010101020601010204010102010101 +020201010201010102020101020101010201010102150101020201010208010202010101 +020b010102020101020101010202010102010101020201010201010102490103020b0000 +02040400030000000205040002420101020501010206010102040101020e010102010101 +020101010202010002010101020201000200010102010101020101010203010102000102 +020601010204010102000102020201010201010102020101020101010201010102030101 +020f010102020101020201000205010102010101020b0101020201010201010102020101 +0201010102020101020101010202010002450103020b0000020500000206040002420101 +020501010206010102040101020e01010201010202010103020301030202010302020101 +020401010200010102060105020101010200010102020101020201020201010302020101 +0203010102100102020101030202010402030102020a0102020101020200010102010104 +020301010202010302460103020b0000020d040002420103021101030293010602680103 +020b0000020d040002ff02600103020b0000020d040002ff02600103020c040d02ff0261 +010302ff027c010302ff027c0103020200ff00750400020201030202000004ff04750202 +010302ff027c010302020500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000202010302020000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050001000202010302020500000005ff057201000500020201030202000005ff05740100 +0202010302020500000005ff057201000500020201030202000005ff0574010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff057401000202010302020500000005ff0572010005000202 +01030202000005ff057401000202010302020500000005ff057201000500020201030202 +000005ff057401000202010302020500000005ff057201000500020201030202000005ff +057401000202010302020500000005ff057201000500020201030202000005ff05740100 +02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116 +050d010002020103020205000000054e010107ff07120101050c01000500020201030202 +0000054f010107ff071100000101050d010002020103020205000000054e0101070100ff +00100101050c010005000202010302020000054f0101070100ff00100101050d01000202 +0103020205000000054e0101070100ff00100101050c010005000202010302020000054f +010107010000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +00000300000003000000030000000300000003000000030000d00101050d010002020103 +020205000000054e01010701034000cf0101050c010005000202010302020000054f0101 +07010000033e010000cf0101050d010002020103020205000000054e0101070103130100 +030b01010304010003140100030100cf0101050c010005000202010302020000054f0101 +0701000003120100030a0100031c01000300010000cf0101050d01000202010302020500 +0000050f0100050001010503010205020101050001000503010205250101070103010100 +030201000301010003000101030301010300010003020102030401000304010203020100 +03000101030301020303010103000100030100cf0101050c010005000202010302020000 +051001010501010005010100050201000501010005000100050001000501010005020100 +052401010701000003000100030201000301010103010100030101000301010103010100 +030201000301010403040100030201010301010003010100030201000301010003010101 +0300010000cf0101050d010002020103020205000000050f010005020100050501000501 +010005000100050001000501010005020100052401010701030101000302010003010100 +030201000301010003020100030101000302010003030100030601000302010003020100 +03010100030201000301010003020100030100cf0101050c010005000202010302020000 +051001000502010005020103050101000500010005000100050101040524010107010000 +030001000302010003010100030201000301010003020100030101040303010003060100 +03020100030201000301010403010100030201000300010000cf0101050d010002020103 +020205000000050f01000502010005010100050201000501010005000100050001000501 +010005280101070103010100030201000301010003020100030101000302010003010100 +03070100030601000302010003020100030101000305010003020100030100cf0101050c +010005000202010302020000051001000502010005010100050201000501010005000100 +050001000501010005020100052401010701000003000100030101010301010003020100 +030101000301010103010100030201000303010003060100030201000302010003010100 +0302010003010100030101010300010000cf0101050d010002020103020205000000050f +010005020100050201030501010005000100050001000502010205250101070103020101 +030001000301010003020100030201010300010003020102030401000306010003020100 +03020100030201020303010103000100030100cf0101050c010005000202010302020000 +054f010107010000033e010000cf0101050d010002020103020205000000054e01010701 +034000cf0101050c010005000202010302020000054f010107010000033e010000cf0101 +050d010002020103020205000000054e0101070103000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +03000100030000cf0101050c010005000202010302020000054f0101070100ff00100101 +050d010002020103020205000000054e0101070100ff00100101050c0100050002020103 +02020000054f0101070100ff00100101050d010002020103020205000000054e01010701 +00ff00100101050c010005000202010302020000054f0101070000ff00110101050d0100 +02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116 +050d01000202010302020500000005ff057201000500020201030202000005ff05740100 +0202010302020500000005ff057201000500020201030202000005ff0574010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff0574010002020103020205000000055007ff0712050e0100 +05000202010302020000055107ff07110000050f01000202010302020500000005500701 +00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202 +050000000550070100ff0010050e0100050002020103020200000551070100ff0010050f +0100020201030202050000000550070100ff0010050e0100050002020103020200000551 +070100ff0010050f010002020103020205000000051a010005050100052d070100130100 +000b0101000401000014010000d1050e010005000202010302020000051b010005050100 +052d070100130100000a0100001c010000d1050f01000202010302020500000005100102 +050301010500010005020101050001000501010005000101050301020503010205030102 +051207010001010000020100000101000000010100030101000001000002010200040100 +00040102000201000000010100030102000301010000010000d1050e0100050002020103 +020200000510010005020100050101000501010105010100050101010501010105010100 +050101000502010005010100050201000501010005020100051107010001010000020100 +000101010001010000010100000101010001010000020100000101040004010000020101 +000101000001010000020100000101000001010100d1050f010002020103020205000000 +051301000501010005020100050101000502010005010100050501000502010005010100 +050501000515070100010100000201000001010000020100000101000002010000010100 +000201000003010000060100000201000002010000010100000201000001010000020100 +00d1050e0100050002020103020200000511010305010100050201000501010005020100 +050101000505010405020102050301020512070100010100000201000001010000020100 +000101000002010000010104000301000006010000020100000201000001010400010100 +0002010000d1050f010002020103020205000000050f0100050201000501010005020100 +050101000502010005010100050501000509010005050100051107010001010000020100 +000101000002010000010100000201000001010000070100000601000002010000020100 +00010100000501000002010000d1050e0100050002020103020200000510010005020100 +050101000501010105010100050101010501010005050100050201000501010005020100 +050101000502010005110701000101000001010100010100000201000001010000010101 +000101000002010000030100000601000002010000020100000101000002010000010100 +0001010100d1050f01000202010302020500000005100103050201010500010005020101 +050001000501010005060102050301020503010205120701000201010000010000010100 +000201000002010100000100000201020004010000060100000201000002010000020102 +000301010000010000d1050e0100050002020103020200000551070100ff0010050f0100 +020201030202050000000550070100ff0010050e01000500020201030202000005510701 +00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 +020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e +0100050002020103020200000551070100ff0010050f0100020201030202050000000550 +070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff057401000202010302020500000005ff0572010005000202 +01030202000005ff057401000202010302020500000005ff057201000500020201030202 +000005ff057401000202010302020500000005ff057201000500020201030202000005ff +0574010002020103020205000000055007ff0712050e0100050002020103020200000551 +07ff07110000050f0100020201030202050000000550070100ff0010050e010005000202 +0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010 +050e0100050002020103020200000551070100ff0010050f010002020103020205000000 +0550070100ff0010050e0100050002020103020200000551070100ff0010050f01000202 +010302020500000005190100052201000511070100130100000b01010004010000140100 +00d1050e010005000202010302020000053e01000511070100130100000a0100001c0100 +00d1050f010002020103020205000000050f0104050201020502010005000101050a0102 +05030102050301010500010005020102050b070100010100000201000001010000000101 +000301010000010000020102000401000004010200020100000001010003010200030101 +0000010000d1050e01000500020201030202000005140100050401000502010105010100 +0508010005020100050101000502010005010100050101010501010005020100050a0701 +000101000002010000010101000101000001010000010101000101000002010000010104 +0004010000020101000101000001010000020100000101000001010100d1050f01000202 +010302020500000005120100050501000502010005020100050801000505010005020100 +05010100050201000501010005020100050a070100010100000201000001010000020100 +000101000002010000010100000201000003010000060100000201000002010000010100 +00020100000101000002010000d1050e0100050002020103020200000512010005060100 +0502010005020100050801000505010005020100050101000502010005010104050a0701 +000101000002010000010100000201000001010000020100000101040003010000060100 +000201000002010000010104000101000002010000d1050f010002020103020205000000 +051001000507010005020100050201000508010005050100050201000501010005020100 +05010100050e070100010100000201000001010000020100000101000002010000010100 +0007010000060100000201000002010000010100000501000002010000d1050e01000500 +020201030202000005100100050801000502010105010100050801000502010005010100 +0502010005010100050101010501010005020100050a0701000101000001010100010100 +000201000001010000010101000101000002010000030100000601000002010000020100 +0001010000020100000101000001010100d1050f010002020103020205000000050f0104 +050401000502010005000101050a010205030102050301010500010005020102050b0701 +000201010000010000010100000201000002010100000100000201020004010000060100 +000201000002010000020102000301010000010000d1050e010005000202010302020000 +051e0100050401050526070100ff0010050f010002020103020205000000051d01000531 +070100ff0010050e010005000202010302020000051e01000531070100ff0010050f0100 +020201030202050000000550070100ff0010050e01000500020201030202000005510701 +00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 +020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e +0100050002020103020200000551070000ff0011050f01000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff057401000202010302020500000005ff0572010005000202 +01030202000005ff057401000202010302020500000005ff057201000500020201030202 +000005ff057401000202010302020500000005ff057201000500020201030202000005ff +057401000202010302020500000005ff057201000500020201030202000005ff05740100 +0202010302020500000005ff057201000500020201030202000005ff0574010002020103 +020205000000055007ff0712050e010005000202010302020000055107ff07110000050f +0100020201030202050000000550070100ff0010050e0100050002020103020200000551 +070100ff0010050f0100020201030202050000000550070100ff0010050e010005000202 +0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010 +050e0100050002020103020200000551070100ff0010050f010002020103020205000000 +05180100050c01000528070100130100000b0101000401000014010000d1050e01000500 +020201030202000005190100050c01000528070100130100000a0100001c010000d1050f +010002020103020205000000051001020502010405020102050201040502010205200701 +000101000002010000010100000001010003010100000100000201020004010000040102 +000201000000010100030102000301010000010000d1050e010005000202010302020000 +0510010005020100050301000503010005020100050301000503010005020100051f0701 +000101000002010000010101000101000001010000010101000101000002010000010104 +0004010000020101000101000001010000020100000101000001010100d1050f01000202 +0103020205000000050f01000507010005070100050301000503010005020100051f0701 +000101000002010000010100000201000001010000020100000101000002010000030100 +0006010000020100000201000001010000020100000101000002010000d1050e01000500 +02020103020200000511010205040100050401030503010005030104051f070100010100 +000201000001010000020100000101000002010000010104000301000006010000020100 +0002010000010104000101000002010000d1050f01000202010302020500000005130100 +050301000503010005020100050301000503010005230701000101000002010000010100 +000201000001010000020100000101000007010000060100000201000002010000010100 +000501000002010000d1050e010005000202010302020000051001000502010005030100 +0503010005020100050301000503010005020100051f0701000101000001010100010100 +000201000001010000010101000101000002010000030100000601000002010000020100 +0001010000020100000101000001010100d1050f01000202010302020500000005100102 +050501010502010305040101050201020520070100020101000001000001010000020100 +000201010000010000020102000401000006010000020100000201000002010200030101 +0000010000d1050e0100050002020103020200000551070100ff0010050f010002020103 +0202050000000550070100ff0010050e0100050002020103020200000551070100ff0010 +050f0100020201030202050000000550070100ff0010050e010005000202010302020000 +0551070100ff0010050f0100020201030202050000000550070100ff0010050e01000500 +02020103020200000551070100ff0010050f0100020201030202050000000550070100ff +0010050e0100050002020103020200000551070000ff0011050f01000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff057401000202010302020500000005ff0572010005000202 +01030202000005ff057401000202010302020500000005ff057201000500020201030202 +000005ff057401000202010302020500000005ff057201000500020201030202000005ff +057401000202010302020500000005ff057201000500020201030202000005ff05740100 +02020103020205000000055007ff0712050e010005000202010302020000055107ff0711 +0000050f0100020201030202050000000550070100ff0010050e01000500020201030202 +00000551070100ff0010050f0100020201030202050000000550070100ff0010050e0100 +050002020103020200000551070100ff0010050f01000202010302020500000005500701 +00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202 +05000000052d01000521070100130100000b0101000401000014010000d1050e01000500 +0202010302020000052e01000521070100130100000a0100001c010000d1050f01000202 +010302020500000005100102050301020502010005020100050101000500010105020104 +050101000500010105020100050201000511070100010100000201000001010000000101 +000301010000010000020102000401000004010200020100000001010003010200030101 +0000010000d1050e01000500020201030202000005100100050201000501010005020100 +050101000502010005010101050101000503010005030101050101000501010005020100 +051107010001010000020100000101010001010000010100000101010001010000020100 +000101040004010000020101000101000001010000020100000101000001010100d1050f +010002020103020205000000050f01000505010005020100050101000502010005010100 +050201000503010005030100050601000501010005110701000101000002010000010100 +000201000001010000020100000101000002010000030100000601000002010000020100 +0001010000020100000101000002010000d1050e01000500020201030202000005100100 +050501000502010005010100050201000501010005020100050301000503010005060100 +050101000511070100010100000201000001010000020100000101000002010000010104 +0003010000060100000201000002010000010104000101000002010000d1050f01000202 +0103020205000000050f0100050501000502010005010100050201000501010005020100 +050301000503010005070100050001000511070100010100000201000001010000020100 +000101000002010000010100000701000006010000020100000201000001010000050100 +0002010000d1050e01000500020201030202000005100100050201000501010005020100 +050101000501010105010100050201000503010005030100050701010512070100010100 +000101010001010000020100000101000001010100010100000201000003010000060100 +00020100000201000001010000020100000101000001010100d1050f0100020201030202 +050000000510010205030102050301010500010005010100050201000504010105010100 +050801000512070100020101000001000001010000020100000201010000010000020102 +0004010000060100000201000002010000020102000301010000010000d1050e01000500 +0202010302020000053d01000512070100ff0010050f0100020201030202050000000539 +0100050001000513070100ff0010050e010005000202010302020000053b010005140701 +00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 +020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e +0100050002020103020200000551070100ff0010050f0100020201030202050000000550 +070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005ff057401000202010302020500000005ff05720100 +0500020201030202000005ff057401000202010302020500000005ff0572010005000202 +01030202000005ff057401000202010302020500000005ff057201000500020201030202 +000005ff057401000202010302020500000005ff057201000500020201030202000005ff +057401000202010302020500000005ff057201000500020201030202000005ff05740100 +0202010302020500000005ff057201000500020201030202000005ff0574010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff052f000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050b01000500020201030202000005ff052f00000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000500000005000100050b0100 +0202010302020500000005ff052f000005340100050b01000500020201030202000005ff +052f000005360100050b01000202010302020500000005ff052f0000052a060005080100 +050b01000500020201030202000005ff052f0000050906000502060005110600050a0600 +05080100050b01000202010302020500000005ff052f0000050806010501060005110600 +050b060005060100050b01000500020201030202000005ff052f00000509060105010600 +05020602050206000502060005010604050a060005060100050b01000202010302020500 +000005ff052f000005080600050006000500060005010600050206000501060005020600 +05030600050d060005040100050b01000500020201030202000005ff052f000005090600 +05000600050006000501060005020600050206000500060005040600050e060005040100 +050b01000202010302020500000005ff052f000005080600050106010501060405030600 +05050600050d060005040100050b01000500020201030202000005ff052f000005090600 +0501060105010600050606000500060005040600050c060005060100050b010002020103 +02020500000005ff052f0000050806000502060005010600050206000501060005020600 +05030600050b060005060100050b01000500020201030202000005ff052f000005090600 +05020600050206020502060005020600050406010508060005080100050b010002020103 +02020500000005ff052f0000052a060005080100050b01000500020201030202000005ff +052f000005360100050b01000202010302020500000005ff052f000005340100050b0100 +0500020201030202000005ff052f000005360100050b01000202010302020500000005ff +052f000005340100050b01000500020201030202000005ff052f000005360100050b0100 +0202010302020500000005ff052f00000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001000500010005000100050b01000500020201030202000005ff052f0000 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050b01000202010302020500000005ff057201000500020201030202000005ff +057401000202010302020500000005ff057201000500020201030202000005ff05740100 +0202010302020500000005ff057201000500020201030202000005ff0574010002020103 +02020500000005ff057201000500020201030202000005ff057401000202010302020500 +000005ff057201000500020201030202000005ff057401000202010302020500000005ff +057201000500020201030202000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100020201030202050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500020201030202050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500020201030202000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +0000050001000202010302020500000005ff057201000500020201030202000005ff0574 +01000202010302020500000005ff057201000500020201030202000005ff057401000202 +010302020500000005ff057201000500020201030202000005ff05740100020201030202 +0500000005ff057201000500020201030202000005ff0574010002020103020205000000 +05ff057201000500020201030202000005ff057401000202010302020500000005ff0572 +01000500020201030202000005ff057401000202010302020500000005ff057201000500 +020201030202000005ff057401000202010302020500000005ff05720100050002020103 +0202000005ff057401000202010302020500000005ff0572010005000202010302020000 +05ff057401000202010302020500000005ff057201000500020201030202000005ff0574 +01000202010302020500000005ff057201000500020201030202000005ff057401000202 +010302020500000005ff0572010005000202010302020000052e00000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000517000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005170000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0528010002020103020205000000052c0000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000051700000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000517000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005280100050002020103 +02020000052e0000054c010005170000054c010005170000054c01000528010002020103 +020205000000052c0000054c010005170000054c010005170000054c0100052801000500 +0202010302020000052e0000054c010005170000054c010005170000054c010005280100 +02020103020205000000052c0000054c010005170000054c010005170000054c01000528 +010005000202010302020000052e0000054c010005170000054c010005170000054c0100 +0528010002020103020205000000052c0000054c010005170000054c010005170000054c +01000528010005000202010302020000052e0000054c010005170000054c010005170000 +054c01000528010002020103020205000000052c000005110104051f0100051401000517 +000005120102051f01020513010005170000051401030519010005180100052801000500 +0202010302020000052e0000051201000521010005150100051700000510010005020100 +052001000514010005170000051301000502010005180100051901000528010002020103 +020205000000052c00000513010005030100050001010503010205030102050201000500 +010105020104051201000517000005110100050201000502010205020100050001010503 +010205030102050501000513010005170000051401000502010005020102050301020503 +010205020104051601000528010005000202010302020000052e00000512010005030101 +050101000501010005020100050101000502010005010101050101000503010005150100 +051700000510010005050100050201000501010105010100050101000502010005010100 +050201000504010005140100051700000513010005020100050101000502010005010100 +05020100050101000502010005030100051901000528010002020103020205000000052c +000005130100050301000502010005010100050501000502010005010100050701000514 +010005170000051101000509010005010100050201000501010005050100050201000504 +010005130100051700000514010305020100050201000501010005050100050201000503 +0100051801000528010005000202010302020000052e0000051201000503010005020100 +050201020502010405010100050701000515010005170000051001000506010305010100 +050201000501010005050104050401000514010005170000051301000501010005020104 +050201020502010405030100051901000528010002020103020205000000052c00000513 +010005030100050201000505010005010100050501000507010005140100051700000511 +010005020100050101000502010005010100050201000501010005050100050801000513 +010005170000051401000502010005010100050901000501010005070100051801000528 +010005000202010302020000052e00000512010005030100050201000501010005020100 +050101000502010005010100050701000515010005170000051001000502010005010100 +050201000501010005020100050101000502010005010100050201000504010005140100 +051700000513010005020100050101000502010005010100050201000501010005020100 +05030100051901000528010002020103020205000000052c000005110104050101000502 +010005020102050301020502010005080101051201000517000005120102050301030501 +010005020100050201020503010205050100051301000517000005140100050201000502 +0102050301020503010205050101051601000528010005000202010302020000052e0000 +054c010005170000054c010005170000054c01000528010002020103020205000000052c +0000054c010005170000054c010005170000054c01000528010005000202010302020000 +052e0000054c010005170000054c010005170000054c0100052801000202010302020500 +0000052c0000054c010005170000054c010005170000054c010005280100050002020103 +02020000052e0000054c010005170000054c010005170000054c01000528010002020103 +020205000000052c0000054c010005170000054c010005170000054c0100052801000500 +0202010302020000052e0000054c010005170000054c010005170000054c010005280100 +02020103020205000000052c0000054c010005170000054c010005170000054c01000528 +010005000202010302020000052e0000054c010005170000054c010005170000054c0100 +0528010002020103020205000000052c0000054c010005170000054c010005170000054c +01000528010005000202010302020000052e000005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005170000 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100051700000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000528010002020103 +020205000000052c00000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000517000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005170000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100052801000500020201030202000005ff0574 +01000202010302020500000005ff057201000500020201030202000005ff057401000202 +010302020500000005ff057201000500020201030202000005ff05740100020201030202 +0500000005ff057201000500020201030202000005ff0574010002020103020205000000 +05ff057201000500020201030202000005ff057401000202010302020500000005ff0572 +01000500020201030202000005ff057401000202010302020500000005ff057201000500 +020201030202000005ff057401000202010302020500000005ff05720100050002020103 +0202000005ff057401000202010100040500000005ff0572010005000005020204000000 +05ff057401000000020204000000020204000500000005ff057201000500000002020400 +000002020400000005ff0574010000000202040000000202040005000000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050000000202040000000202040000000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010000000202040000000202 +0400000502ff026a00060202040000000208040002ff026a000002080400000002080400 +02ff026a00000208040000000208040001ff016a0000020804000000040901ff016a0000 +0409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 41 300 330 +%%EOF diff --git a/lib/tv/doc/src/tv_row_marked.gif b/lib/tv/doc/src/tv_row_marked.gif new file mode 100644 index 0000000000..bc80eb34f1 Binary files /dev/null and b/lib/tv/doc/src/tv_row_marked.gif differ diff --git a/lib/tv/doc/src/tv_row_marked.ps b/lib/tv/doc/src/tv_row_marked.ps new file mode 100644 index 0000000000..99631c5046 --- /dev/null +++ b/lib/tv/doc/src/tv_row_marked.ps @@ -0,0 +1,1611 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_row_marked.tmp.eps) +%%CreationDate: (Tue Jun 12 16:11:48 2001) +%%BoundingBox: 0 61 377 359 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 61 377 359 +userdict begin +%%BeginData: +DisplayImage +0 61 +377.000000 298.000000 +12 +719 569 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +00ff00 +ff0000 +990000 +7f7f7f +999999 +ff7f7f +c8ffff +009900 +7fff7f +000a01ff01ff01b8000b0208040001ff01ff01b800000208040000000208040002ff02ff +02b8000002080400000002080400020000ff00ff00b50400020000000208040000000202 +04060200000004ff04ff04b5020000000405020204000000020204000209000d02ff02ff +02ac00000202040000000202040002080000020d04000274010302110103023201020258 +0102020c010102010101021e010102290101020601010208010102310101022a01010230 +0101028200000202040000000202040002080000020d0400027401010202010702000101 +0203010102010101020e01050200010702010103020d0101020401010204010302030103 +020e010302060103020301030203010302060103020b0101020a01010202010102190100 +02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 +020c0104021e0101028200000202040000000202040002080000020d0400027401010205 +0101020301010203010102010101020e0101020701010203010102010101020c01010202 +010302030101020101010201010102010101020801010201010102010101020401010201 +01010201010102010101020101010201010102040101020101010201010102060101020a +0101020201010218010102210101020b01010206010102090101021b010202020100020d +01010238010102020101021d010102820000020204000000020204000208000002020406 +020304000274010102050101020301010203010102010101020e01010207010102030101 +020501010209010102030101020701010201010102010101020601020202010102010101 +020801010201010102010101020101010201010102040101020101010202010202030101 +020a01010203010102020103020301030202010302010104020101010202010302030101 +02000101020a0104020101030203010102000101020301010202010302030101021a0100 +020001010201010002020103020301040202010302020101020901010200010102010101 +020301030203010102020101020001010202010102010103020201010200010102010101 +020301030202010102000101020101010202010302020101020201010271000002020400 +000004030208000002020400030400000203040002740101020501010204010102020100 +02020101020e0101020701010203010202040101020a0100020301010207010102010101 +020101010205010102040101020101010208010102010101020101010201010102010101 +02040101020101010204010102020100020b010102030101020101010201010102010101 +020101010200010102010101020101010203010102010101020101010202010202000101 +020a01010202010102010101020201020200010102020101020101010201010102020101 +021a01000200010102010100020101010201010102010101020101010201010102010101 +020101010209010202000102020001010201010102010101020201010202010202000101 +020101010200010102000101020201020200010202000101020101010201010102010101 +0200010102010101020101010201010102010101020201010271000004030101020b0000 +0203040003020000020404000274010102050101020401010201010102020101020e0104 +0204010102040103020d0101020401010205010202020101020101010204010102050101 +020101010207010102020101020101010202010402040101020101010205010102020101 +020901010203010102010101020101010201010102080101020101010203010102010101 +020101010202010102010101020a01010206010102020101020101010202010102010101 +0201010102020101021a0100020001020200010002010101020101010201010102010101 +0201010102010101020d0101020101010201010102050101020201010202010102010101 +020101010200010102000101020201010201010102010101020501010201010202030101 +0201010102010101020101010202010002750103020b0000020304000302000002040400 +0274010102050101020501010200010002030101020e01010207010102060102020e0100 +020301010207010102010101020101010205010102040101020101010206010102030101 +020101010205010102040101020101010204010102020100020b01010203010102010101 +020101010201010102050104020101010203010102010101020101010202010102010101 +020a0101020301040202010102010101020201010201010502020101021a010002010101 +020001000201010102010101020101010201010102010105020d01010201010102010101 +020201040202010102020101020101010201010102000101020001010202010102010101 +0201010102020104020101010204010102010105020201010200010102750103020b0000 +02040400030000000205040002740101020501010205010302030101020e010102070101 +02070101020d010102030101020701010201010102010101020601020202010102010101 +0205010102040101020101010205010102040101020101010202010202030101020a0101 +020301010201010102010101020101010204010102010101020101010203010102010101 +020101010202010102010101020a01010202010102010101020201010201010102020101 +0201010102060101021a0100020201020201010102010101020101010201010102010101 +021101010201010102010101020101010201010102020101020201010201010102010101 +020101010200010102010101020101010201010102010101020101010201010102040101 +02010101020601010200010002760103020b000002040400030000000205040002740101 +020501010206010102040101020e01010207010102030101020101010201010102080101 +020401010203010102010101020101010201010102010101020401010201010102010101 +020101010200010502010101020101010201010102010101020101010200010102010101 +0201010102060101020a0101020201010201010102010101020101010202010002000101 +02010101020101010203010102010101020101010202010102010101020a010102020101 +02010101020201010201010102020101020101010202010002010101021b010002020102 +020101010201010102010101020001020201010102020100020101010209010102010101 +020101010201010102010101020201010202010102010101020201010207010102010101 +020101010201010102010101020101010204010102010101020201000203010202760103 +020b0000020500000206040002740101020501010206010102040101020e010502030101 +020401030202010102080101020401010204010302030103020201010209010302020101 +0200010502020103020301030202010102010103020b0101020a01010202010102020103 +0203010302020102020001010201010202010101020201030203010102010101020b0102 +020101020200010102010104020301010202010302020101021b01000203010102020103 +020301010200010102020103020201010209010102010101020101010202010202000101 +020101010202010102010101020301050202010102010101020101010202010202000101 +0200010102040101020201030204010102770103020b0000020d04000274010302110103 +0232010202190100023d0102020c01010237010602230101029e010102780103020b0000 +020d040002dd010002ff0254010102780103020b0000020d040002ff02ff02ae0103020c +040d02ff02ff02af010302ff02ff02ca010302ff02ff02ca0103020200ff00ff00c30400 +020201030202000004ff04ff04c30202010302ff02ff02ca010302020500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500020201030202000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500010002020103020205000000 +05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000 +05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000 +05ff05ff05c0010005000202010302020000050c06040504060005030602051f06040505 +0600050406000504060005190600050206000504060005270602050b06000506060005ff +05df060005020600050906020514010002020103020205000000050b0600050f0600051f +060005090600050a06000519060005020600052c060005020600050a060005ff05e70600 +05020600050b06000513010005000202010302020000050c060005060602050506000503 +060205180600050606010500060005020602050206040517060005020600050206020503 +060205020600050206000517060005020600050106000500060105020604050206020503 +060205020600050006010503060205ff05ca060005020600050206020505060005020600 +05000601050d010002020103020205000000050b06000508060005050600050206000502 +06000517060005050600050106010504060005040600051a060005000600050506000502 +060005020600050106000502060005170600050206000501060105010600050306000506 +060005020600050206000501060105010600050106000502060005ff05c9060005020600 +0501060005020600050406000502060105010600050b010005000202010302020000050c +060305050600050506000502060005020600051706030502060005020600050406000504 +0600051a0600050006000505060005020600050206000501060005000600050006000517 +060005020600050106000502060005030600050606000502060005020600050106000502 +06000501060005ff05cd06040501060005020600050406000502060005020600050c0100 +02020103020205000000050b060005080600050506000502060405170600050506000502 +06000504060005040600051a060005000600050506000502060405010600050006000500 +060005170600050206000501060005020600050306000506060005020600050206000501 +0600050206000502060205ff05ca06000502060005010604050406000502060005020600 +050b010005000202010302020000050c0600050806000505060005020600051b06000505 +0600050206000504060005040600051b0600050606000502060005050600050006000500 +060005170600050206000501060005020600050306000506060005020600050206000501 +0600050206000505060005ff05c906000502060005010600050806000502060005020600 +050c010002020103020205000000050b0600050806000505060005020600050206000517 +060005050600050106010504060005040600051b06000506060005020600050206000501 +060005000600050006000517060005020600050106010501060005030600050606000502 +0600050206000501060005020600050106000502060005ff05c906000502060005010600 +05020600050406000502060105010600050b010005000202010302020000050c06000508 +060005050600050306020518060405020601050006000504060005050601051906000506 +060005030602050306000500060005190602050206000500060105050601050406000503 +060205020600050206000502060205ff05ca060005020600050206020505060005020600 +05000601050d01000202010302020500000005a8060005ff05ff05050600050f01000500 +0202010302020000050b0606052a0606052a0606052a06060500060005ff05ef0606050e +06000510010002020103020205000000050a0606052a0606052a0606052a060605000600 +05ff05ef0606050e0600050f01000500020201030202000005ff05ff05c2010002020103 +02020500000005ff05ff05c001000500020201030202000005ff05ff05c2010002020103 +020205000000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000202010302020000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4 +02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4 +02020103020205ff05ff05c402020103020205ff05ff05c4020201030202053600000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000051a00000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050100000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050100000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000051a00000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000051a00000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000051a00000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +00000500000005ff057c0202010302020535000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500010005180000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000100000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500010000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050001000518000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500010005180000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000100 +051800000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500010005ff057b0202010302020536000005140100051a +00000514010005010000051401000501000005140100051a000005140100051a00000514 +0100051a00000514010005ff057c02020103020205350000051601000518000005160100 +000005160100000005160100051800000516010005180000051601000518000005160100 +05ff057b0202010302020536000005140100051a00000514010005010000051401000501 +000005140100051a000005140100051a000005140100051a00000514010005ff057c0202 +010302020535000005050602050306020506010005180000051601000000051601000000 +0516010005180000051601000518000005160100051800000516010005ff057b02020103 +020205360000050406020503060205050100051a00000514010005010000051401000501 +000005140100051a00000506060405080100051a00000508060105090100051a00000508 +06030507010005ff057c0202010302020535000005040604050106040505010005180000 +051006000504010000000510060005040100000005040600051001000518000005050608 +0507010005180000050806030509010005180000050706070506010005ff057b02020103 +0202053600000503060005010601050106000501060105040100051a0000050f06000503 +010005010000050f0600050301000501000005030600050f0100051a00000503060a0505 +0100051a00000507060305080100051a000005050603050106030504010005ff057c0202 +01030202053500000503060d0504010005180000050d0600050106000504010000000504 +0600050a06000504010000000504060005010600050d0100051800000504060305020603 +050601000518000005090601050a01000518000005060602050306020505010005ff057b +020201030202053600000501060005000603050006020500060405020100051a0000050c +060005010600050301000501000005030600050a06000503010005010000050306000501 +0600050c0100051a0000050206030504060305040100051a000005140100051a00000505 +0602050306020504010005ff057c02020103020205350000050206000500060305000602 +050006040503010005180000050a06000501060005010600050401000000050406000504 +060005040600050401000000050406000501060005010600050a01000518000005030602 +050306070503010005180000050706040509010005180000050706010502060205060100 +05ff057b020201030202053600000501060005000603050006020500060405020100051a +000005090600050106000501060005030100050100000503060005040600050406000503 +01000501000005030600050106000501060005090100051a000005020602050406050503 +0100051a00000507060305080100051a0000050a06020506010005ff057c020201030202 +053500000502060005000603050006020500060405030100051800000507060005010600 +050106000501060005040100000005040600050406000501060005010600050401000000 +050406000501060005010600050106000507010005180000050306020505060305050100 +05180000050906020509010005180000050a06020508010005ff057b0202010302020536 +000005010600050006070500060405020100051a00000506060005010600050106000501 +060005030100050100000503060005040600050106000501060005030100050100000503 +060005010600050106000501060005060100051a0000050206030505060105050100051a +00000508060205080100051a0000050806020508010005ff057c02020103020205350000 +050206000500060405010600050006040503010005180000050406000501060005010600 +050106000501060005040100000005040600050106000501060005010600050106000504 +010000000504060005010600050106000501060005010600050401000518000005040603 +050d010005180000050906020509010005180000050906020509010005ff057b02020103 +020205360000050106060501060605020100051a00000503060005010600050106000501 +060005010600050301000501000005030600050106000501060005010600050106000503 +010005010000050306000501060005010600050106000501060005030100051a00000503 +060905060100051a00000508060205080100051a00000514010005ff057c020201030202 +053500000502060005000602050506000500060205030100051800000504060005010600 +050106000501060005010600050401000000050406000501060005010600050106000501 +060005040100000005040600050106000501060005010600050106000504010005180000 +050506070508010005180000050806040508010005180000050906020509010005ff057b +020201030202053600000501060005000602050506000500060205020100051a00000503 +060005010600050106000501060005010600050301000501000005030600050106000501 +060005010600050106000503010005010000050306000501060005010600050106000501 +060005030100051a00000506060405080100051a00000506060605060100051a00000508 +06020508010005ff057c0202010302020535000005020604050506040503010005180000 +051601000000051601000000051601000518000005160100051800000516010005180000 +0516010005ff057b0202010302020536000005140100051a000005140100050100000514 +01000501000005140100051a000005140100051a000005140100051a00000514010005ff +057c02020103020205350000051601000518000005160100000005160100000005160100 +05180000051601000518000005160100051800000516010005ff057b0202010302020536 +000005140100051a00000514010005010000051401000501000005140100051a00000514 +0100051a000005140100051a00000514010005ff057c0202010302020535000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005180000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010000000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000518000005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005180000 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100051800000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000500010005ff057b02020103 +020205360100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100051a0100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005010100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005010100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100051a0100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100051a0100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100051a0100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005ff057c02020103020205ff05ff05c4020201030202 +05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 +05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 +05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 +05ff05ff05c4020201030202050301ff01ff01bc0503020201030202050301ff01ff01a8 +050000000500000005000000050000000500000005000000050000000500000005000000 +050001000503020201030202050301ff01ff01a800000500000005000000050000000500 +000005000000050000000500000005000000050001010503020201030202050301020bff +0bff0ba2010205000000050e0100050001000503020201030202050301020bff0bff0ba1 +000001020000051001010503020201030202050301020b0100ff00ff00a0010205000000 +050e0100050001000503020201030202050301020b0100040101007101010002010100ff +00ff002001020000051001010503020201030202050301020b0100030100007501000001 +010100ff00ff0020010205000000050e0100050001000503020201030202050301020b01 +000301000003010000160100001001000006010200100100000c0100001c010000010101 +00ff00ff002001020000051001010503020201030202050301020b010003010000030100 +002801000008010000100100000c0100001c01000001010100ff00ff0020010205000000 +050e0100050001000503020201030202050301020b010003010000030100000101000003 +010200020100000001010003010200020100000001010009010000000101000501000003 +010200030102000201000001010000030102000201000000010100030102000201000000 +01010003010100000100000301000001010100ff00ff0020010200000502010a05020101 +0503020201030202050301020b0100030100000301000000010000030100000201000001 +010100010100000401000002010100010100000801010001010000040100000201000002 +010000010100000201000001010000000100000301000002010000010101000101000001 +01000002010000010101000101000001010000010101000301000001010100ff00ff0020 +0102050000000502010805020100050001000503020201030202050301020b0100010101 +000401010008010000010100000801000002010000020100000801000002010000040100 +000601000001010000050101000401000002010000010100000201000001010000020100 +0001010000050100000201000004010300ff00ff00200102000005040106050401010503 +020201030202050301020b01000301000003010100050103000101000008010000020100 +000201000008010000020100000401000003010300010100000501010004010400010100 +0002010000010104000101000005010000020100000301000001010100ff00ff00200102 +050000000504010405040100050001000503020201030202050301020b01000301000003 +010000000100000301000002010000010100000801000002010000020100000801000002 +010000040100000201000002010000010100000501000000010000030100000501000002 +010000010100000501000005010000020100000301000001010100ff00ff002001020000 +05060102050601010503020201030202050301020b010003010000030100000101000002 +010000020100000101000008010000020100000201000003010100020101000101000004 +010000020100000201000001010000020100000101000001010000020100000201000001 +0101000101000001010000020100000101000005010000010101000301000001010100ff +00ff00200102050000000506010005060100050001000503020201030202050301020b01 +000301000003010000020100000201030001010000080100000201000002010000030101 +000201000000010100050100000301030002010200020100000201000002010200020100 +0000010100030102000201000006010100000100000301000001010100ff00ff00200102 +0000051001010503020201030202050301020b0100030100002901000045010000030100 +0001010100ff00ff0020010205000000050e010005000100050302020103020205030102 +0b0100040101002501010042010000020100000101010002010100ff00ff002001020000 +051001010503020201030202050301020b01007201020007010100ff00ff002001020500 +0000050e0100050001000503020201030202050301020b0100ff00ff00a0010200000510 +01010503020201030202050301020b0100ff00ff00a0010205000000050e010005000100 +0503020201030202050301020b0000ff00ff00a101020000051001010503020201030202 +050301ff01ff01a805000000050001000500010005000100050001000500010005000100 +0500010005000100050001000503020201030202050301ff01ff01a80000050001000500 +010005000100050001000500010005000100050001000500010005000101050302020103 +0202050301ff01ff01bc05030202010302020503010005ff05ff05a80100050001000500 +010005000100050001000500010005000100050001000500010005000100050302020103 +02020503010005ff05ff05a7010005000100050001000500010005000100050001000500 +0100050001000500010005000000010005030202010302020503010005010bff0bff0ba3 +0502010003060100030600000500010005030202010302020503010005010bff0bff0ba2 +000005010100050003050000050003060500000001000503020201030202050301000501 +0b0100ff00ff00a105020100030505000100050003050000050001000503020201030202 +0503010005010b0100ff00ff00a105010100050003040500000005000100030505000000 +010005030202010302020503010005010b0100ff00ff00a1050201000304000005020100 +030400000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +03030000050201000500030405000000010005030202010302020503010005010b0100ff +00ff00a10502010003030500000005020100050003030000050001000503020201030202 +0503010005010b0100ff00ff00a105010100050003020500000005040100030305000000 +010005030202010302020503010005010b0100ff00ff00a1050201000302000005060100 +030200000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +03010000050601000500030205000000010005030202010302020503010005010b0100ff +00ff00a10502010003010500000005060100050003010000050001000503020201030202 +0503010005010b0100ff00ff00a105010100050003000500000005080100030105000000 +010005030202010302020503010005010b0100ff00ff00a10502010003000000050a0100 +030000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +000005000100050001000500010005000100050001000500010005000300050000000100 +05030202010302020503010005010b0100ff00ff00a10502010005000100050001000500 +010005000100050001000500010005000100050000000500010005030202010302020503 +010005010b0100ff00ff00a1050101000500030e05000000010005030202010302020503 +010005010b01000301010071010100ff00ff002705020100050000000500000005000000 +050000000500000005000000050000000500000005000100050302020103020205030100 +05010b01000201000075010000ff00ff0026050101000500000005000000050000000500 +000005000000050000000500000005000100050000000100050302020103020205030100 +05010b01000201000003010000160100001001000006010200100100000c0100001c0100 +00ff00ff00260502010005000000050a0100050000000500010005030202010302020503 +010005010b010002010000030100002801000008010000100100000c0100001c010000ff +00ff00260501010005000000050c01000500000001000503020201030202050301000501 +0b0100020100000301000001010000030102000201000000010100030102000201000000 +010100090100000001010005010000030102000301020002010000010100000301020002 +01000000010100030102000201000000010100030101000001000003010000ff00ff0026 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +000201000003010000000100000301000002010000010101000101000004010000020101 +000101000008010100010100000401000002010000020100000101000002010000010100 +000001000003010000020100000101010001010000010100000201000001010100010100 +00010100000101010003010000ff00ff00260501010005000000050c0100050000000100 +05030202010302020503010005010b010000010100040101000801000001010000080100 +000201000002010000080100000201000004010000060100000101000005010100040100 +000201000001010000020100000101000002010000010100000501000002010000040101 +00ff00ff00240502010005000000050a0100050000000500010005030202010302020503 +010005010b01000201000003010100050103000101000008010000020100000201000008 +010000020100000401000003010300010100000501010004010400010100000201000001 +01040001010000050100000201000003010000ff00ff00260501010005000000050c0100 +05000000010005030202010302020503010005010b010002010000030100000001000003 +010000020100000101000008010000020100000201000008010000020100000401000002 +010000020100000101000005010000000100000301000005010000020100000101000005 +010000050100000201000003010000ff00ff00260502010005000000050a010005000000 +0500010005030202010302020503010005010b0100020100000301000001010000020100 +000201000001010000080100000201000002010000030101000201010001010000040100 +000201000002010000010100000201000001010000010100000201000002010000010101 +0001010000010100000201000001010000050100000101010003010000ff00ff00260501 +010005000000050c010005000000010005030202010302020503010005010b0100020100 +000301000002010000020103000101000008010000020100000201000003010100020100 +000001010005010000030103000201020002010000020100000201020002010000000101 +000301020002010000060101000001000003010000ff00ff00260502010005000000050a +0100050000000500010005030202010302020503010005010b0100020100002901000045 +01000003010000ff00ff00260501010005000000050c0100050000000100050302020103 +02020503010005010b01000301010025010100420100000201000001010100ff00ff0027 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +0071010200ff00ff002c0501010005000000050c01000500000001000503020201030202 +0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 +0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 +010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 +050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 +010005000000050a0100050000000500010005030202010302020503010005010b0100ff +00ff00a10501010005000000050c01000500000001000503020201030202050301000501 +0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 +0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 +010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 +010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 +05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 +050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 +010005000000050c010005000000010005030202010302020503010005010b0100ff00ff +00a10502010005000000050a010005000000050001000503020201030202050301000501 +0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 +010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 +010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 +05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 +00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 +050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 +05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff +00a10501010005000000050c010005000000010005030202010302020503010005010b01 +00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 +010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 +02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 +0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a +0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 +05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 +05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 +02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 +0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 +0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c +010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 +0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 +0501010005000000050c010005000000010005030202010302020503010005010b0100ff +00ff00a10502010005000000050a01000500000005000100050302020103020205030100 +05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 +0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 +0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 +010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 +050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 +010005000000050a0100050000000500010005030202010302020503010005010b0100ff +00ff00a10501010005000000050c01000500000001000503020201030202050301000501 +0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 +0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 +010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 +010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 +05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 +050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 +010005000000050c010005000000010005030202010302020503010005010b0100ff00ff +00a10502010005000000050a010005000000050001000503020201030202050301000501 +0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 +010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 +010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 +05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 +00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 +050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 +05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff +00a10501010005000000050c010005000000010005030202010302020503010005010b01 +00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 +010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 +02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 +0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a +0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 +05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 +05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 +02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 +0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 +0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c +010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 +0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 +0501010005000000050c010005000000010005030202010302020503010005010b0100ff +00ff00a10502010005000000050a01000500000005000100050302020103020205030100 +05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 +0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 +0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 +010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 +050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 +010005000000050a0100050000000500010005030202010302020503010005010b0100ff +00ff00a10501010005000000050c01000500000001000503020201030202050301000501 +0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 +0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 +010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 +010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 +05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 +050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 +010005000000050c010005000000010005030202010302020503010005010b0100ff00ff +00a10502010005000000050a010005000000050001000503020201030202050301000501 +0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 +010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 +010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 +05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 +00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 +050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 +05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff +00a10501010005000000050c010005000000010005030202010302020503010005010b01 +00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 +010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 +02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 +0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a +0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 +05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 +05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 +02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 +0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 +0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c +010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 +0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 +0501010005000000050c010005000000010005030202010302020503010005010b0100ff +00ff00a10502010005000000050a01000500000005000100050302020103020205030100 +05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 +0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 +0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 +010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 +050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 +0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 +010005000000050a0100050000000500010005030202010302020503010005010b0100ff +00ff00a10501010005000000050c01000500000001000503020201030202050301000501 +0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 +0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 +010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 +010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 +05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 +050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 +010005000000050c010005000000010005030202010302020503010005010b0100ff00ff +00a10502010005000000050a010005000000050001000503020201030202050301000501 +0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 +010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 +010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 +05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 +00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 +050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 +05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff +00a10501010005000000050c010005000000010005030202010302020503010005010b01 +00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 +010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 +02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 +0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a +0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 +05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 +0502010005000000050a0100050000000500010005030202010302020503010005010b01 +00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 +05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 +02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 +0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 +0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c +010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 +0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 +0501010005000000050c010005000000010005030202010302020503010005010b0100ff +00ff00a10502010005000000050a01000500000005000100050302020103020205030100 +05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 +0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 +0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 +010005030202010302020503010005010b0100ff00ff00a1050201000500000005000100 +050001000500010005000100050001000500010005000000050001000503020201030202 +0503010005010b0100ff00ff00a105010100050000000500010005000100050001000500 +010005000100050001000500010005000000010005030202010302020503010005010b01 +00ff00ff00a105020100030e00000500010005030202010302020503010005010b0100ff +00ff00a10501010005000000050000000500000005000000050000000500000005000000 +0500000005000000010005030202010302020503010005010b0100ff00ff00a105020100 +030000000500000005000000050000000500000005000000050000000500000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000300050000000508 +01000500030005000000010005030202010302020503010005010b0100ff00ff00a10502 +010003010500000005080100030000000500010005030202010302020503010005010b01 +00ff00ff00a1050101000500030100000508010003010500000001000503020201030202 +0503010005010b0100ff00ff00a105020100030200000506010005000301000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000302050000000504 +01000500030205000000010005030202010302020503010005010b0100ff00ff00a10502 +010003030500000005040100030200000500010005030202010302020503010005010b01 +00ff00ff00a1050101000500030300000504010003030500000001000503020201030202 +0503010005010b0100ff00ff00a105020100030400000502010005000303000005000100 +05030202010302020503010005010b0100ff00ff00a10501010005000304050000000500 +01000500030405000000010005030202010302020503010005010b0100ff00ff00a10502 +010003050500010005000100030400000500010005030202010302020503010005010b01 +00ff00ff00a1050101000500030500000500010003050500000001000503020201030202 +0503010005010b0100ff00ff00a105020100030601000500030500000500010005030202 +010302020503010005010b0000ff00ff00a2050101000500030605000306050000000100 +05030202010302020503010005ff05ff05a8010005000000050000000500000005000000 +050000000500000005000000050000000500010005030202010302020503010005ff05ff +05a701000500000005000000050000000500000005000000050000000500000005000000 +0500000001000503020201030202050301ff01ff01bc0503020201030202050301000f01 +0717010007190e01000a0100000201000002010000050100000101000007010000060100 +000201000002010000010100002901000008010000000100000201000002010000050100 +000101000002010000050100000301000003010000020100000101000002010000250100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +01030202050301000f010717010007190e01000a01000002010000020100000101000002 +010000010100000201000003010000060100000201000002010000010100000201000025 +010000090100000301000002010000010100000201000001010000020100000101000002 +010000030100000301000002010000010100000201000025010000630100006301000063 +0100003e010005140100030e0000052401000503020201030202050301000f0107320e01 +000a01000003010200030102000301020004010000060100000201000002010000020102 +002601000009010000040103000201020003010300020102000501010002010300010100 +0002010000250100006301000063010000630100003e0100051301000500030e05000000 +052301000503020201030202050301000f0107320e01000a010000570100006301000063 +01000063010000630100003e010005140100030e00000524010005030202010302020503 +01000f0107320e0100070100000101000057010000630100006301000063010000630100 +003e0100051301000500030e05000000052301000503020201030202050301000f010732 +0e01000801010058010000630100006301000063010000630100003e010005140100030e +0000052401000503020201030202050301000f0107320e01006301000063010000630100 +0063010000630100003e0100051301000500030e05000000052301000503020201030202 +050301000f0107320e010063010000630100006301000063010000630100003e01000514 +0100030e0000052401000503020201030202050301000f010e3400630100006301000063 +01000063010000630100003e0100051301000500030e0500000005230100050302020103 +0202050301000f000e3501ff01ff013805140100030e0000052401000503020201030202 +050301000c360d6301000d6301000d6301000d6301000d6301000d3e0100051301000500 +030e05000000052301000503020201030202050301000c3509000d6301000d6301000d63 +01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503 +01000c01083209010d6301000d6301000d6301000d6301000d6301000d3e010005130100 +0500030e05000000052301000503020201030202050301000c01083209010d6301000d63 +01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103 +0202050301000c0108160102081809010d6301000d6301000d6301000d6301000d630100 +0d3e0100051301000500030e05000000052301000503020201030202050301000c010815 +010008020100081709010d0701000d1601000d4201000d0701000d0601020d1001000d0c +01000d3001000d6301000d6301000d6301000d3e010005140100030e0000052401000503 +020201030202050301000c010815010008020100081709010d0701000d5a01000d070100 +0d0801000d1001000d0c01000d3001000d6301000d6301000d6301000d3e010005130100 +0500030e05000000052301000503020201030202050301000c0108150100080201000817 +09010d0701000d0101000d0301020d0201000d0001010d0301020d0201000d0001010d3b +01000d0701000d0001010d0501000d0301020d0301020d0201000d0101000d0301020d02 +01000d0001010d0301020d0201000d0001010d0301010d0001000d1701000d6301000d63 +01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01 +08160102081809010d0701000d0001000d0301000d0201000d0101010d0101000d040100 +0d0201010d0101000d3a01000d0701010d0101000d0401000d0201000d0201000d010100 +0d0201000d0101000d0001000d0301000d0201000d0101010d0101000d0101000d020100 +0d0101010d0101000d0101000d0101010d1701000d6301000d6301000d6301000d3e0100 +051301000500030e05000000052301000503020201030202050301000c01081501000802 +0100081709010d0701010d0801000d0101000d0801000d0201000d0201000d3a01000d07 +01000d0201000d0401000d0601000d0101000d0501010d0401000d0201000d0101000d02 +01000d0101000d0201000d0101000d0501000d0201000d1701000d6301000d6301000d63 +01000d3e010005140100030e0000052401000503020201030202050301000c0108150100 +08020100081709010d0701010d0501030d0101000d0801000d0201000d0201000d3a0100 +0d0701000d0201000d0401000d0301030d0101000d0501010d0401040d0101000d020100 +0d0101040d0101000d0501000d0201000d1701000d6301000d6301000d6301000d3e0100 +051301000500030e05000000052301000503020201030202050301000c01081501000802 +0100081709010d0701000d0001000d0301000d0201000d0101000d0801000d0201000d02 +01000d3a01000d0701000d0201000d0401000d0201000d0201000d0101000d0501000d00 +01000d0301000d0501000d0201000d0101000d0501000d0501000d0201000d1701000d63 +01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503 +01000c0108160102081809010d0701000d0101000d0201000d0201000d0101000d080100 +0d0201000d0201000d3a01000d0701010d0101000d0401000d0201000d0201000d010100 +0d0201000d0101000d0101000d0201000d0201000d0101010d0101000d0101000d020100 +0d0101000d0501000d0101010d1701000d6301000d6301000d6301000d3e010005130100 +0500030e05000000052301000503020201030202050301000c01083209010d0701000d02 +01000d0201030d0101000d0801000d0201000d0201000d3a01000d0701000d0001010d05 +01000d0301030d0201020d0201000d0201000d0201020d0201000d0001010d0301020d02 +01000d0601010d0001000d1701000d6301000d6301000d6301000d3e010005140100030e +0000052401000503020201030202050301000c01083209010d6301000d4a01000d170100 +0d6301000d6301000d6301000d3e0100051301000500030e050000000523010005030202 +01030202050301000c01083209010d6301000d4601000d0201000d1701000d6301000d63 +01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01 +083209010d6301000d4701020d1801000d6301000d6301000d6301000d3e010005130100 +0500030e05000000052301000503020201030202050301000c01083209010d6301000d63 +01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103 +0202050301000c01083209010d6301000d6301000d6301000d6301000d6301000d3e0100 +051301000500030e05000000052301000503020201030202050301000c0109340d630100 +0d6301000d6301000d6301000d6301000d3e010005140100030e00000524010005030202 +01030202050301000c00093501ff01ff0138051301000500030e05000000052301000503 +020201030202050301000a360063010000630100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000a3501000063010000630100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +01030202050301000a0101340063010000630100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000a0101340063010000630100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +01030202050301000a0101160002011a0063010000630100006301000063010000630100 +003e010005140100030e0000052401000503020201030202050301000a01011500000102 +0000011900070100000e01000014010000340100002b0102003401000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0a010115000001020000011900070100000e0100004a0100002d01000034010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0a0101150000010200000119000701000001010000030102000201040002010200020100 +000001010003010200020100000001010003010200260100000701000002010000010100 +00000101000201000000010100030102000301020005010000030102002d010000630100 +0063010000630100003e0100051301000500030e05000000052301000503020201030202 +050301000a01011500000102000001190007010000000100000301000002010000030100 +000301000002010000010101000101000004010000020101000101000001010000020100 +002501000007010000020100000101010001010000010101000101000001010000020100 +0001010000020100000401000002010000020100002c0100006301000063010000630100 +003e010005140100030e0000052401000503020201030202050301000a01011600030119 +000701010008010000030100000701000001010000080100000201000002010000050100 +002501000007010000020100000101000002010000010100000201000001010000090100 +0004010000060100002c0100006301000063010000630100003e0100051301000500030e +05000000052301000503020201030202050301000a010119000001190007010100050103 +000301000004010300010100000801000002010000020100000201030025010000070100 +000201000001010000020100000101000002010000020102000301030004010000030103 +002c0100006301000063010000630100003e010005140100030e00000524010005030202 +01030202050301000a0101180000011a0007010000000100000301000002010000030100 +000301000002010000010100000801000002010000020100000101000002010000250100 +000701000002010000010100000201000001010000020100000501000001010000020100 +000401000002010000020100002c0100006301000063010000630100003e010005130100 +0500030e05000000052301000503020201030202050301000a0101150002011b00070100 +000101000002010000020100000301000003010000020100000101000008010000020100 +000201000001010000020100002501000007010000010101000101010001010000010101 +0001010000010100000201000001010000020100000401000002010000020100002c0100 +006301000063010000630100003e010005140100030e0000052401000503020201030202 +050301000a01013400070100000201000002010300040101000201030001010000080100 +000201000002010000020103002501000008010100000100000101000000010100020100 +0000010100030102000301030004010000030103002c0100006301000063010000630100 +003e0100051301000500030e05000000052301000503020201030202050301000a010134 +00630100000e010000050100004c0100006301000063010000630100003e010005140100 +030e0000052401000503020201030202050301000a01013400630100000e010000050100 +004c0100006301000063010000630100003e0100051301000500030e0500000005230100 +0503020201030202050301000a01013400630100000e010000050100004c010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0a0101340063010000630100006301000063010000630100003e0100051301000500030e +05000000052301000503020201030202050301000a010134006301000063010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0a0101340063010000630100006301000063010000630100003e0100051301000500030e +05000000052301000503020201030202050301000a0001ff01ff016e05140100030e0000 +052401000503020201030202050301000c36006301000063010000630100006301000063 +0100003e0100051301000500030e05000000052301000503020201030202050301000c35 +09000063010000630100006301000063010000630100003e010005140100030e00000524 +01000503020201030202050301000c010832090100630100006301000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0c01083209010063010000630100006301000063010000630100003e010005140100030e +0000052401000503020201030202050301000c0108130100080401020815090100630100 +00630100006301000063010000630100003e0100051301000500030e0500000005230100 +0503020201030202050301000c0108110102080301000802010008140901006301000032 +0102002d0100006301000063010000630100003e010005140100030e0000052401000503 +020201030202050301000c01081301000803010008020100081409010063010000340100 +002d0100006301000063010000630100003e0100051301000500030e0500000005230100 +0503020201030202050301000c0108130100080301000802010008140901000701010000 +010000030102000301010000010000010100000001010002010000020100000201020034 +010000070100000001010003010200020100000001010002010000000101000201010000 +01000003010200050100000201010000010000260100006301000063010000630100003e +010005140100030e0000052401000503020201030202050301000c010813010008030100 +080201000814090100070100000001000000010000010100000201000001010000010101 +000101010001010000010100000201000001010000020100003301000007010100010100 +000101000002010000010101000101000001010100010100000101000000010000000100 +000101000002010000040100000201000000010000000100002501000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0c0108130100080301000802010008140901000701000000010000000100000501000001 +010000020100000101000002010000010100000201000001010000370100000701000002 +010000010100000201000001010000050100000501000000010000000100000501000004 +010000020100000001000000010000250100006301000063010000630100003e01000514 +0100030e0000052401000503020201030202050301000c01081301000803010008020100 +081409010007010000000100000001000002010300010100000201000001010000020100 +000101000002010000020102003401000007010000020100000101000002010000010100 +000501000005010000000100000001000002010300040100000201000000010000000100 +00250100006301000063010000630100003e0100051301000500030e0500000005230100 +0503020201030202050301000c0108130100080301000802010008140901000701000000 +010000000100000101000002010000010100000201000001010000020100000101000002 +010000050100003301000007010000020100000101000002010000010100000501000005 +010000000100000001000001010000020100000401000002010000000100000001000025 +0100006301000063010000630100003e010005140100030e000005240100050302020103 +0202050301000c0108110104080201020815090100070100000001000000010000010100 +000201000001010000010101000101000002010000010100000101010001010000020100 +003301000007010000020100000101000002010000010100000501000005010000000100 +000001000001010000020100000401000002010000000100000001000025010000630100 +0063010000630100003e0100051301000500030e05000000052301000503020201030202 +050301000c01083209010007010000000100000001000002010300020101000001000001 +010000020100000201010000010000020102003401000007010000020100000201020002 +010000050100000501000000010000000100000201030004010000020100000001000000 +010000250100006301000063010000630100003e010005140100030e0000052401000503 +020201030202050301000c01083209010019010000480100006301000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0c010832090100150100000201000048010000630100006301000063010000630100003e +010005140100030e0000052401000503020201030202050301000c010832090100160102 +0049010000630100006301000063010000630100003e0100051301000500030e05000000 +052301000503020201030202050301000c01083209010063010000630100006301000063 +010000630100003e010005140100030e0000052401000503020201030202050301000c01 +083209010063010000630100006301000063010000630100003e0100051301000500030e +05000000052301000503020201030202050301000c010934006301000063010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0c00093501ff01ff0138051301000500030e050000000523010005030202010302020503 +01000c360063010000630100006301000063010000630100003e010005140100030e0000 +052401000503020201030202050301000c35090000630100006301000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0c01083209010063010000630100006301000063010000630100003e010005140100030e +0000052401000503020201030202050301000c0108320901006301000063010000630100 +0063010000630100003e0100051301000500030e05000000052301000503020201030202 +050301000c01081301000805010008160901006301000063010000630100006301000063 +0100003e010005140100030e0000052401000503020201030202050301000c0108110102 +0803010208160901001601020005010000420100002b0102003401000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +0c010813010008050100081609010018010000490100002d010000340100006301000063 +010000630100003e010005140100030e0000052401000503020201030202050301000c01 +081301000805010008160901000701010000010000030102000501000003010200020100 +00000101003b010000070100000201000001010000000101000201000000010100030102 +000301020005010000030102002d0100006301000063010000630100003e010005130100 +0500030e05000000052301000503020201030202050301000c0108130100080501000816 +090100070100000001000000010000010100000201000004010000050100000201010001 +0100003a0100000701000002010000010101000101000001010100010100000101000002 +01000001010000020100000401000002010000020100002c010000630100006301000063 +0100003e010005140100030e0000052401000503020201030202050301000c0108130100 +080501000816090100070100000001000000010000050100000401000005010000020100 +00020100003a010000070100000201000001010000020100000101000002010000010100 +000901000004010000060100002c0100006301000063010000630100003e010005130100 +0500030e05000000052301000503020201030202050301000c0108130100080501000816 +09010007010000000100000001000002010300040100000501000002010000020100003a +010000070100000201000001010000020100000101000002010000020102000301030004 +010000030103002c0100006301000063010000630100003e010005140100030e00000524 +01000503020201030202050301000c010813010008050100081609010007010000000100 +00000100000101000002010000040100000501000002010000020100003a010000070100 +000201000001010000020100000101000002010000050100000101000002010000040100 +0002010000020100002c0100006301000063010000630100003e0100051301000500030e +05000000052301000503020201030202050301000c010811010408010104081409010007 +01000000010000000100000101000002010000040100000501000002010000020100003a +010000070100000101010001010100010100000101010001010000010100000201000001 +010000020100000401000002010000020100002c0100006301000063010000630100003e +010005140100030e0000052401000503020201030202050301000c010832090100070100 +00000100000001000002010300040100000501000002010000020100003a010000080101 +000001000001010000000101000201000000010100030102000301030004010000030103 +002c0100006301000063010000630100003e0100051301000500030e0500000005230100 +0503020201030202050301000c010832090100630100000e010000050100004c01000063 +01000063010000630100003e010005140100030e00000524010005030202010302020503 +01000c010832090100630100000e010000050100004c0100006301000063010000630100 +003e0100051301000500030e05000000052301000503020201030202050301000c010832 +090100630100000e010000050100004c0100006301000063010000630100003e01000514 +0100030e0000052401000503020201030202050301000c01083209010063010000630100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +01030202050301000c01083209010063010000630100006301000063010000630100003e +010005140100030e0000052401000503020201030202050301000c010934006301000063 +0100006301000063010000630100003e0100051301000500030e05000000052301000503 +020201030202050301000c00093501ff01ff013805140100030e00000524010005030202 +010302020503010005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000063010000630100006301000063010000630100003e01000513 +01000500030e050000000523010005030202010302020503010000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050001000063010000630100 +006301000063010000630100003e010005140100030e0000052401000503020201030202 +05030100050000000532010005000063010000630100006301000063010000630100003e +0100051301000500030e0500000005230100050302020103020205030100000005340100 +0063010000630100006301000063010000630100003e010005140100030e000005240100 +050302020103020205030100050000000513010005040102051501000500006301000063 +0100006301000063010000630100003e0100051301000500030e05000000052301000503 +02020103020205030100000005120102050301000502010005150100001f010000420100 +001201000017010200340100006301000063010000630100003e010005140100030e0000 +052401000503020201030202050301000500000005130100050301000502010005140100 +050000630100001201000019010000340100006301000063010000630100003e01000513 +01000500030e050000000523010005030202010302020503010000000514010005030100 +050201000515010000070101000001000003010200020100000001010003010200030102 +003b01000008010200030101000001000002010200020100000001010002010000000101 +0005010000030102000201000000010100260100006301000063010000630100003e0100 +05140100030e000005240100050302020103020205030100050000000513010005060100 +051501000500000701000000010000000100000101000002010000010101000101000004 +01000002010000020100003a010000070100000201000001010000010101000101000002 +010000010101000101000001010100010100000401000002010000020100000101010001 +010000250100006301000063010000630100003e0100051301000500030e050000000523 +010005030202010302020503010000000514010005050100051701000007010000000100 +0000010000050100000101000008010000060100003a0100000701000002010000010100 +000201000001010000020100000101000002010000010100000201000004010000060100 +000101000002010000250100006301000063010000630100003e010005140100030e0000 +052401000503020201030202050301000500000005130100050401000517010005000007 +0100000001000000010000020103000101000008010000030103003a0100000701000002 +010000010100000201000001010400010100000201000001010000020100000401000003 +0103000101000002010000250100006301000063010000630100003e0100051301000500 +030e05000000052301000503020201030202050301000000051401000503010005020100 +051501000007010000000100000001000001010000020100000101000008010000020100 +00020100003a010000070100000201000001010000020100000101000005010000020100 +000101000002010000040100000201000002010000010100000201000025010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +050000000511010405010104051401000500000701000000010000000100000101000002 +010000010100000801000002010000020100003a01000007010000020100000101000001 +010100010100000201000001010000020100000101010001010000040100000201000002 +0100000101000002010000250100006301000063010000630100003e0100051301000500 +030e05000000052301000503020201030202050301000000053401000007010000000100 +0000010000020103000101000008010000030103003a0100000801020003010100000100 +000201020002010000020100000101000000010100050100000301030001010000020100 +00250100006301000063010000630100003e010005140100030e00000524010005030202 +0103020205030100050000000532010005000063010000230100003e0100006301000063 +010000630100003e0100051301000500030e050000000523010005030202010302020503 +01000000053401000063010000230100003e0100006301000063010000630100003e0100 +05140100030e000005240100050302020103020205030100050000000532010005000063 +010000230100003e0100006301000063010000630100003e0100051301000500030e0500 +000005230100050302020103020205030100000005340100006301000063010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +050000000532010005000063010000630100006301000063010000630100003e01000513 +01000500030e050000000523010005030202010302020503010000000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000063010000630100 +006301000063010000630100003e010005140100030e0000052401000503020201030202 +050301000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001ff01ff0138051301000500030e05000000052301000503020201030202 +050301000c360063010000630100006301000063010000630100003e010005140100030e +0000052401000503020201030202050301000c3509000063010000630100006301000063 +010000630100003e0100051301000500030e050000000523010005030202010302020503 +01000c01083209010063010000630100006301000063010000630100003e010005140100 +030e0000052401000503020201030202050301000c010832090100630100006301000063 +01000063010000630100003e0100051301000500030e0500000005230100050302020103 +0202050301000c0108130100080401020815090100630100006301000063010000630100 +00630100003e010005140100030e0000052401000503020201030202050301000c010811 +010208030100080201000814090100170100004a01000007010000300102002601000063 +01000063010000630100003e0100051301000500030e0500000005230100050302020103 +0202050301000c0108130100080701000814090100170100004a01000007010000320100 +00260100006301000063010000630100003e010005140100030e00000524010005030202 +01030202050301000c010813010008070100081409010007010100000100000301020002 +010400020102004201000007010000000101000201000000010100030102000201010000 +010000020101000001000003010200020100000001010005010000030102000201000000 +010100180100006301000063010000630100003e0100051301000500030e050000000523 +01000503020201030202050301000c010813010008050101081509010007010000000100 +000001000001010000020100000301000003010000020100004101000007010100010100 +000101010001010000010100000201000001010000000100000001000001010000000100 +000001000001010000020100000101010001010000040100000201000002010000010101 +0001010000170100006301000063010000630100003e010005140100030e000005240100 +0503020201030202050301000c0108130100080701000814090100070100000001000000 +010000050100000301000003010000450100000701000002010000010100000501000002 +010000010100000001000000010000010100000001000000010000050100000101000002 +01000004010000060100000101000002010000170100006301000063010000630100003e +0100051301000500030e05000000052301000503020201030202050301000c0108130100 +080701000814090100070100000001000000010000020103000301000004010200420100 +000701000002010000010100000501000002010000010100000001000000010000010100 +000001000000010000020103000101000002010000040100000301030001010000020100 +00170100006301000063010000630100003e010005140100030e00000524010005030202 +01030202050301000c010813010008030100080201000814090100070100000001000000 +010000010100000201000003010000070100004101000007010000020100000101000005 +010000020100000101000000010000000100000101000000010000000100000101000002 +010000010100000201000004010000020100000201000001010000020100001701000063 +01000063010000630100003e0100051301000500030e0500000005230100050302020103 +0202050301000c0108110104080201020815090100070100000001000000010000010100 +000201000003010000030100000201000041010000070101000101000001010000050100 +000201000001010000000100000001000001010000000100000001000001010000020100 +000101010001010000040100000201000002010000010100000201000017010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0c0108320901000701000000010000000100000201030004010100020102004201000007 +010000000101000201000006010200020100000001000000010000010100000001000000 +010000020103000101000000010100050100000301030001010000020100001701000063 +01000063010000630100003e0100051301000500030e0500000005230100050302020103 +0202050301000c0108320901006301000031010000300100006301000063010000630100 +003e010005140100030e0000052401000503020201030202050301000c01083209010063 +01000031010000300100006301000063010000630100003e0100051301000500030e0500 +0000052301000503020201030202050301000c0108320901006301000031010000300100 +006301000063010000630100003e010005140100030e0000052401000503020201030202 +050301000c01083209010063010000630100006301000063010000630100003e01000513 +01000500030e05000000052301000503020201030202050301000c010832090100630100 +00630100006301000063010000630100003e010005140100030e00000524010005030202 +01030202050301000c0109340063010000630100006301000063010000630100003e0100 +051301000500030e05000000052301000503020201030202050301000c00093501ff01ff +013805140100030e0000052401000503020201030202050301000c360063010000630100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +01030202050301000c3509000063010000630100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000c0108320901006301000063 +0100006301000063010000630100003e0100051301000500030e05000000052301000503 +020201030202050301000c01083209010063010000630100006301000063010000630100 +003e010005140100030e0000052401000503020201030202050301000c01081301000806 +0100081509010063010000630100006301000063010000630100003e0100051301000500 +030e05000000052301000503020201030202050301000c01081101020805010108150901 +0011010000500100001e01000018010000290100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000c0108130100080401000800 +01000815090100630100001e01000018010000290100006301000063010000630100003e +0100051301000500030e05000000052301000503020201030202050301000c0108130100 +080401000800010008150901000701000000010100030102000201000000010100030102 +004201000008010100000100000101000002010000020102000201040002010200020100 +000201000002010200020100000001010003010200020100000001010003010100000100 +00100100006301000063010000630100003e010005140100030e00000524010005030202 +01030202050301000c010813010008030100080101000815090100070101000101000004 +010000020101000101000001010000020100004101000007010000010101000101000002 +010000010100000201000003010000030100000201000001010000020100000101000002 +010000010101000101000001010000020100000101010001010000010100000101010010 +0100006301000063010000630100003e0100051301000500030e05000000052301000503 +020201030202050301000c01081301000802010008020100081509010007010000020100 +000401000002010000020100000501000041010000070100000201000001010000020100 +000101000007010000070100000101000002010000010100000501000002010000010100 +0002010000010100000501000002010000100100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000c0108130100080201050814 +090100070100000201000004010000020100000201000002010300410100000701000002 +010000010100000201000002010200040100000401030002010000000100000301020002 +010000020100000101040001010000050100000201000010010000630100006301000063 +0100003e0100051301000500030e05000000052301000503020201030202050301000c01 +081301000806010008150901000701000002010000040100000201000002010000010100 +000201000041010000070100000201000001010000020100000501000003010000030100 +000201000002010000000100000601000001010000020100000101000005010000050100 +0002010000100100006301000063010000630100003e010005140100030e000005240100 +0503020201030202050301000c0108110104080301020814090100070100000201000004 +010000020100000201000001010000020100004101000007010000010101000101000001 +010100010100000201000003010000030100000201000003010000030100000201000001 +010100010100000101000002010000010100000501000001010100100100006301000063 +010000630100003e0100051301000500030e050000000523010005030202010302020503 +01000c010832090100070100000201000004010000020100000201000002010300410100 +000801010000010000020101000001000002010200050101000201030003010000040102 +000201000000010100030102000201000006010100000100001001000063010000630100 +00630100003e010005140100030e0000052401000503020201030202050301000c010832 +090100630100000b01000044010000100100006301000063010000630100003e01000513 +01000500030e05000000052301000503020201030202050301000c010832090100630100 +0007010000020100004001000002010000100100006301000063010000630100003e0100 +05140100030e0000052401000503020201030202050301000c0108320901006301000008 +01020042010200110100006301000063010000630100003e0100051301000500030e0500 +0000052301000503020201030202050301000c0108320901006301000063010000630100 +0063010000630100003e010005140100030e000005240100050302020103020205030100 +0c01083209010063010000630100006301000063010000630100003e0100051301000500 +030e05000000052301000503020201030202050301000c01093400630100006301000063 +01000063010000630100003e010005140100030e00000524010005030202010302020503 +01000c00093501ff01ff0138051301000500030e05000000052301000503020201030202 +050301000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000063010000630100006301000063010000630100003e010005140100030e +000005240100050302020103020205030100000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500010000630100006301000063010000630100 +00630100003e0100051301000500030e0500000005230100050302020103020205030100 +050000000532010005000063010000630100006301000063010000630100003e01000514 +0100030e0000052401000503020201030202050301000000053401000063010000630100 +006301000063010000630100003e0100051301000500030e050000000523010005030202 +010302020503010005000000051301000503010405140100050000630100006301000063 +01000063010000630100003e010005140100030e00000524010005030202010302020503 +01000000051201020503010005190100000f010200030102004901000007010000230100 +000b010200030102001f0100006301000063010000630100003e0100051301000500030e +050000000523010005030202010302020503010005000000051301000503010005180100 +05000011010000050100004901000007010000230100000d010000050100001f01000063 +01000063010000630100003e010005140100030e00000524010005030202010302020503 +010000000514010005030100051901000008010200050100000501000003010200420100 +000701000000010100030102000201000000010100020100000001010003010200020104 +00010100000201000004010000050100001f0100006301000063010000630100003e0100 +051301000500000005000000050000000500000005000000050000000500000005000000 +05000000052301000503020201030202050301ff01ff0170051400000500000005000000 +050000000500000005000000050000000500000005000000052401000503020201030202 +0503010005ff05ff05ba010005030202010302020503010005ff05ff05ba010005030202 +010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100 +05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff +05ba010005030202010302020503010005ff05ff05ba0100050302020103020205030100 +05ff05ff05ba01000503020201030202050301000549010005ff05ff056f010005030202 +01030202050301000548010105ff05ff056f010005030202010302020503010005470100 +0500010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100 +0503020201030202050301000549010005ff05ff056f0100050302020103020205030100 +0549010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100 +0503020201030202050301000549010005ff05ff056f0100050302020103020205030100 +0547010405ff05ff056d010005030202010302020503010005ff05ff05ba010005030202 +010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100 +05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff +05ba01000503020201030202050301000538010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +054a01000503020201030202050301000537010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +054b01000503020201030202050301000538010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000003ff03ff031505000000054a01000503020201030202050301000537 +010005000000050000000500000005000000050000000500000005000000050000000500 +0000050000000500000005000000050000000500000005000000050003ff03ff03150000 +054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff +031505000000054a01000503020201030202050301000537010005000000050c0100050c +0100050003ff03ff03150000054b01000503020201030202050301000538010005000000 +050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537 +010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202 +050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503 +020201030202050301000537010005000000050c0100050c0100050003ff03ff03150000 +054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff +031505000000054a01000503020201030202050301000537010005000000050c0100050c +0100050003ff03ff03150000054b01000503020201030202050301000538010005000000 +050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537 +010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202 +050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503 +020201030202050301000537010005000000050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050003ff03ff03150000054b01000503020201030202050301000538010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010003ff03ff031505000000054a01000503 +020201030202050301000537010005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000054b01000503 +020201030202050301000538000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000054a01000503 +0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba +010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff +05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 +010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 +02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 +0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba +010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff +05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 +010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 +02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 +0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba +010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff +05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 +010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 +02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 +0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba +010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff +05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 +010005ff05ff05ba010005030202010100040503010005ff05ff05ba0100050300050202 +0400050301ff01ff01bc050300000202040000000202040005ff05ff05c4000002020400 +00000202040005ff05ff05c400000202040000000202040005ff05ff05c4000002020400 +00000202040005ff05ff05c4000002020400000002020400000502ff02ff02b800060202 +040000000208040002ff02ff02b800000208040000000208040002ff02ff02b800000208 +040000000208040001ff01ff01b80000020804000000040901ff01ff01b800000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 61 377 359 +%%EOF diff --git a/lib/tv/doc/src/tv_row_marked_popup.gif b/lib/tv/doc/src/tv_row_marked_popup.gif new file mode 100644 index 0000000000..9b3bc87959 Binary files /dev/null and b/lib/tv/doc/src/tv_row_marked_popup.gif differ diff --git a/lib/tv/doc/src/tv_row_marked_popup.ps b/lib/tv/doc/src/tv_row_marked_popup.ps new file mode 100644 index 0000000000..7a909110d9 --- /dev/null +++ b/lib/tv/doc/src/tv_row_marked_popup.ps @@ -0,0 +1,1324 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_row_marked_popup.tmp.eps) +%%CreationDate: (Tue Jun 12 16:12:10 2001) +%%BoundingBox: 0 64 377 377 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 64 377 377 +userdict begin +%%BeginData: +DisplayImage +0 64 +377.000000 313.000000 +12 +760 630 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +ff0000 +d9d9d9 +b22222 +828282 +00ff00 +009100 +90ee90 +c3c3c3 +999999 +757575 +c8ffff +000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff +02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 +04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff +02d500000202040000000202040002080000020d040002a501010206010102150101021e +0101022901010206010102430101022a010102260101023201010233010102ae00000202 +040000000202040002080000020d04000277010502000107020101030206010702090101 +02060101021501010219010002030101021c0100020b010102060101022e010202020100 +020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 +00000202040002080000020d04000277010102070101020301010201010102080101020c +010102060101021501010218010102210101020b010102060101022e010202020100020d +01010238010102020101024801010215010102cc00000202040000000202040002080000 +0202040602030400027701010207010102030101020c0101020401030203010102000101 +020301010202010302020101020901010202010302030103020201030201010402010101 +020201030203010102000101020a01040201010302030101020001010203010102020103 +022701000200010102010100020201030203010402020103020201010209010102000101 +020101010203010302030101020201010200010102020101020101030202010402020101 +020101010202010102020101020001010203010102000101020301030203010402020104 +020501040202010102010101020501030201010402000101020101010204010302020101 +020001010201010102020103020201040202010402020103020301010200010102060104 +020201030274000002020400000004030208000002020400030400000203040002770101 +0207010102030102020b0101020301010201010102020102020001010202010102010101 +020101010201010102090101020101010201010102010101020101010200010102010101 +020101010203010102010101020101010202010202000101020a01010202010102010101 +020201020200010102020101020101010201010102260100020001010201010002010101 +020101010201010102010101020101010201010102010101020901020200010202000101 +020101010201010102020101020201020200010102010101020001010200010102010101 +020101010202010102010101020201010202010202000101020201020200010102010101 +020101010201010102050101020801010201010102020101020101010204010102010101 +020101010202010102010101020301010201010102010101020001010201010102010101 +020101010200010102050101020501010201010102020102020001010204010102050101 +020101010273000004030101020b00000203040003020000020404000277010402040101 +0204010302090101020701010202010102010101020201010201010102010101020d0101 +020101010201010102010101020801010201010102030101020101010201010102020101 +02010101020a010102060101020201010201010102020101020101010201010102260100 +0200010202000100020101010201010102010101020101010201010102010101020d0101 +020101010201010102050101020201010202010102010101020101010200010102000101 +020101010201010102020101020101010202010102020101020101010202010102010101 +020101010201010102010102020401020207010102010101020201010201010102040101 +020101010201010102030101020001000204010102010101020101020203010102010101 +020401020204010202040101020101010202010102010101020401020204010102010101 +02760103020b000002030400030200000204040002770101020701010206010202080101 +0204010402020101020101010202010102010105020d0101020101010201010102010101 +02050104020101010203010102010101020101010202010102010101020a010102030104 +020201010201010102020101020101050226010002010101020001000201010102010101 +020101010201010102010105020d01010201010102010101020201040202010102020101 +020101010201010102000101020001010201010102010101020201010201010102020101 +020201010201010102020101020101010201010502020103020301030205010102010101 +020201010201010102040105020101010204010102050105020101010204010102010101 +020501030203010302020101020101010202010102010101020501030202010502760103 +020b00000204040003000000020504000277010102070101020701010208010102030101 +020101010202010102010101020201010201010102110101020101010201010102010101 +0204010102010101020101010203010102010101020101010202010102010101020a0101 +020201010201010102020101020101010202010102010101022a01000202010202010101 +020101010201010102010101020101010211010102010101020101010201010102010101 +020201010202010102010101020101010201010102000101020001010200010202020101 +020101010202010102020101020101010202010102010101020101010208010202040102 +020401010201010102020101020101010204010102050101020301000200010102040101 +020501010204010102010101020701020204010202010101020101010202010102010101 +0207010202010101027a0103020b00000204040003000000020504000277010102070101 +020301010201010102080101020301010201010102020101020101010202010102010101 +020201000201010102090101020101010201010102010101020201000200010102010101 +020101010203010102010101020101010202010102010101020a01010202010102010101 +020201010201010102020101020101010202010002260100020201020201010102010101 +020101010200010202010101020201000201010102090101020101010201010102010101 +020101010202010102020101020101010202010102070101020001010202010102000102 +020201010202010102010101020201010201010102010101020201000205010102050101 +020101010200010102000102020201010200010202010101020001010202010002010101 +020201010201010102000101020001010202010002010101020401010201010102020100 +020401010205010102010101020101010202010102010101020101010204010102010101 +0202010002760103020b0000020500000206040002770105020301010204010302090101 +020401020200010102010104020301010202010302020101020901010202010302030103 +02020102020001010201010202010101020201030203010102010101020b010202010102 +020001010201010402030101020201030227010002030101020201030203010102000101 +020201030202010102090101020101010201010102020102020001010201010102020101 +020101010203010502050101020301010200010102020101020201010201010102020101 +020101010202010302020104020201040202010102010101020001010203010102000101 +020101010201010302030102020001010201010102000101020101030202010102040101 +020201030201010402020104020301030203010102010101020101010200010402030103 +02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d +040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff +02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 +0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 +00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff +06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 +020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 +061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa +07000602070006090702061308010202010302020001060b0700060f0700062107000614 +0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b +0700061308010202010302020001060b0700060607020605070006030702061a07000604 +070206030702060507000603070206180700060207000601070006000701060207040602 +070206030702060207000600070106030702061807000602070006020702060307020602 +07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 +0202010302020001060b0700060807000605070006020700060207000619070006030700 +060207000601070006020700060407000602070006020700061707000602070006010701 +060107000603070006060700060207000602070006010701060107000601070006020700 +0618070006000700060507000602070006020700060107000602070006ff06eb07000602 +07000601070006020700060407000602070106010700060b08010202010302020001060b +070306050700060507000602070006020700061907000603070006020700060107000602 +07000604070006020700061b070006020700060107000602070006030700060607000602 +070006020700060107000602070006010700061c07000600070006050700060207000602 +070006010700060007000600070006ff06eb070406010700060207000604070006020700 +06020700060b08010202010302020001060b070006080700060507000602070406190700 +060307000602070006010700060207000604070006030702061807000602070006010700 +060207000603070006060700060207000602070006010700060207000602070206190700 +06000700060507000602070406010700060007000600070006ff06eb0700060207000601 +0704060407000602070006020700060b08010202010302020001060b0700060807000605 +070006020700061d07000603070006020700060107000602070006040700060607000617 +070006020700060107000602070006030700060607000602070006020700060107000602 +07000605070006190700060607000602070006050700060007000600070006ff06eb0700 +0602070006010700060807000602070006020700060b08010202010302020001060b0700 +060807000605070006020700060207000619070006030700060207000601070006020700 +060407000602070006020700061707000602070006010701060107000603070006060700 +060207000602070006010700060207000601070006020700061907000606070006020700 +0602070006010700060007000600070006ff06eb07000602070006010700060207000604 +07000602070106010700060b08010202010302020001060b070006080700060507000603 +0702061a0700060407020603070206050700060307020619070206020700060007010605 +07010604070006030702060207000602070006020702061a070006060700060307020603 +07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 +0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 +062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 +0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 +020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 +0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff +08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 +0016061600160616004406160016061600160616001606ff06be02020103020206030015 +080006160015080006160015080000150800001508000616001508000616001508000616 +0015080006ff06be02020103020206030001061208010616000106120801061600010612 +080100010612080100010612080106160001061208010616000106120801061600010612 +080106ff06be020201030202060300010612080106160001061208010616000106120801 +000106120801000106120801061600010612080106160001061208010616000106120801 +06ff06be0202010302020603000106120801061600010603070206030702060408010616 +000106120801000106120801000106120801061600010612080106160001061208010616 +00010612080106ff06be0202010302020603000106080702060608010616000106030702 +060307020604080106160001061208010001061208010001061208010616000106050704 +0607080106160001060707010608080106160001060707030606080106ff06be02020103 +020206030001060b0701060408010616000106020704060107040603080106160001060e +0700060208010001060e070006020801000106020700060e080106160001060307080605 +080106160001060607030607080106160001060507070604080106ff06be020201030202 +06030001060d070006000700060108010616000106020700060107010601070006010701 +0603080106160001060e0700060208010001060e070006020801000106020700060e0801 +061600010602070a06040801061600010606070306070801061600010604070306010703 +0603080106ff06be02020103020206030001060207020608070106010801061600010601 +070d0602080106160001060b07000601070006020801000106020700060a070006020801 +00010602070006010700060b080106160001060207030602070306040801061600010607 +0701060808010616000106040702060307020603080106ff06be02020103020206030001 +060107080602070206010801061600010600070006000703060007020600070406010801 +06160001060b07000601070006020801000106020700060a070006020801000106020700 +06010700060b080106160001060107030604070306030801061600010612080106160001 +06040702060307020603080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106080700060107000601 +070006020801000106020700060407000604070006020801000106020700060107000601 +070006080801061600010601070206030707060108010616000106050704060708010616 +000106050701060207020604080106ff06be020201030202060300010601070906060801 +061600010600070006000703060007020600070406010801061600010608070006010700 +060107000602080100010602070006040700060407000602080100010602070006010700 +060107000608080106160001060107020604070506020801061600010606070306070801 +06160001060907020605080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106050700060107000601 +070006010700060208010001060207000604070006010700060107000602080100010602 +070006010700060107000601070006050801061600010601070206050703060308010616 +0001060707020607080106160001060807020606080106ff06be02020103020206030001 +0601070d0602080106160001060007000600070706000704060108010616000106050700 +060107000601070006010700060208010001060207000604070006010700060107000602 +080100010602070006010700060107000601070006050801061600010601070306050701 +0604080106160001060707020607080106160001060707020607080106ff06be02020103 +020206030001060107030607070006030801061600010600070006000704060107000600 +070406010801061600010602070006010700060107000601070006010700060208010001 +060207000601070006010700060107000601070006020801000106020700060107000601 +07000601070006010700060208010616000106020703060b080106160001060707020607 +080106160001060707020607080106ff06be020201030202060300010601070206070700 +060408010616000106000706060107060601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106020709 +06050801061600010607070206070801061600010612080106ff06be0202010302020603 +000106010701060707000605080106160001060007000600070206050700060007020601 +080106160001060207000601070006010700060107000601070006020801000106020700 +060107000601070006010700060107000602080100010602070006010700060107000601 +070006010700060208010616000106030707060608010616000106060704060608010616 +0001060707020607080106ff06be02020103020206030001060107090606080106160001 +060007000600070206050700060007020601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106050704 +0607080106160001060507060605080106160001060707020607080106ff06be02020103 +020206030001061208010616000106000704060507040601080106160001061208010001 +0612080100010612080106160001061208010616000106120801061600010612080106ff +06be02020103020206030001061208010616000106120801061600010612080100010612 +080100010612080106160001061208010616000106120801061600010612080106ff06be +020201030202060300010612080106160001061208010616000106120801000106120801 +00010612080106160001061208010616000106120801061600010612080106ff06be0202 +010302020603000108140616000108140616000108140001081400010814061600010814 +06160001081406160001081406ff06be0202010302020603000008150616000008150616 +00000815000008150000081506160000081506160000081506160000081506ff06be0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 +06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 +00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 +060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 +0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 +0100003401010071010100ff00ff002401000001060e0801010006030202010302020603 +0100003301000075010000ff00ff002301000001060e0801010006030202010302020603 +010000070103000401000005010100190100000301000016010000100100000601020010 +0100000c0100001c010000ff00ff002301000001060e0801010006030202010302020603 +010000070100000201000002010100040100000101000018010000030100002801000008 +010000100100000c0100001c010000ff00ff002301000001060e08010100060302020103 +020206030100000701000002010000010100000001000004010000010100000301010012 +010000030100000101000003010200020100000001010003010200020100000001010009 +010000000101000501000003010200030102000201000001010000030102000201000000 +010100030102000201000000010100030101000001000003010000ff00ff002301000001 +0601010a0601080101000603020201030202060301000007010000020100000301000004 +010000010100000301010012010000030100000001000003010000020100000101010001 +010000040100000201010001010000080101000101000004010000020100000201000001 +010000020100000101000000010000030100000201000001010100010100000101000002 +0100000101010001010000010100000101010003010000ff00ff00230100000106020108 +060208010100060302020103020206030100000701030004010000040100000101000016 +010100040101000801000001010000080100000201000002010000080100000201000004 +010000060100000101000005010100040100000201000001010000020100000101000002 +01000001010000050100000201000004010100ff00ff0021010000010603010606030801 +010006030202010302020603010000070100000101000004010000040100000101000018 +010000030101000501030001010000080100000201000002010000080100000201000004 +010000030103000101000005010100040104000101000002010000010104000101000005 +0100000201000003010000ff00ff00230100000106040104060408010100060302020103 +020206030100000701000002010000030100000401000001010000180100000301000000 +010000030100000201000001010000080100000201000002010000080100000201000004 +010000020100000201000001010000050100000001000003010000050100000201000001 +01000005010000050100000201000003010000ff00ff0023010000010605010206050801 +010006030202010302020603010000070100000201000003010000040100000101000003 +010100120100000301000001010000020100000201000001010000080100000201000002 +010000030101000201010001010000040100000201000002010000010100000201000001 +010000010100000201000002010000010101000101000001010000020100000101000005 +0100000101010003010000ff00ff00230100000106060100060608010100060302020103 +020206030100000701000002010000010104000301010004010100120100000301000002 +010000020103000101000008010000020100000201000003010100020100000001010005 +010000030103000201020002010000020100000201020002010000000101000301020002 +010000060101000001000003010000ff00ff002301000001060e08010100060302020103 +0202060301000033010000290100004501000003010000ff00ff002301000001060e0801 +0100060302020103020206030100003401010025010100420100000201000001010100ff +00ff002401000001060e0801010006030202010302020603010000a2010200ff00ff0029 +01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 +010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 +02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff +00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 +01000603020201030202060301ff01ff01e50603020201030202060301ff01ff01d10617 +0202010302020603010006ff06ff06bc0812010006170202010302020603010006ff06ff +06bc08110000010006170202010302020603010006010dff0dff0db8060108010c060800 +0c060001010006170202010302020603010006010dff0dff0db70000060108010c050000 +08000c060001010006170202010302020603010006010d0100ff00ff00b6060108010c05 +000008010c050001010006170202010302020603010006010d0100ff00ff00b606010801 +0c04000108010c050001010006170202010302020603010006010d0100ff00ff00b60601 +08010c040001060008010c040001010006170202010302020603010006010d0100ff00ff +00b6060108010c030001060108010c040001011406030202010302020603010006010d01 +00ff00ff00b6060108010c030001060208010c0300010100061201000603020201030202 +0603010006010d0100ff00ff00b6060108010c020001060308010c030001010006120100 +06030202010302020603010006010d0100ff00ff00b6060108010c020001060408010c02 +000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c01 +0001060508010c02000101000612010006030202010302020603010006010d0100ff00ff +00b6060108010c010001060608010c010001010006120100060302020103020206030100 +06010d0100ff00ff00b6060108010c000001060708010c01000101000612010006030202 +010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100 +0612010006030202010302020603010006010d0100ff00ff00b6060108010001080b0c00 +000101000612010006030202010302020603010006010d0100ff00ff00b6060108010000 +080d000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0c0e000101000612010006030202010302020603010006010d01000301010071010100ff +00ff003c06010801001001000612010006030202010302020603010006010d0100000c01 +01000c7501000c010e0000ff00ff003806010801000d0800000101000612010006030202 +010302020603010006010d0100000c0101000c0301000c1601000c1001000c0601020c10 +01000c0c01000c1c01000c010e0000ff00ff0038060108010001060a0801000101000612 +010006030202010302020603010006010d0100000c0101000c0301000c2801000c080100 +0c1001000c0c01000c1c01000c010e0000ff00ff0038060108010001060a080100010100 +0612010006030202010302020603010006010d0100000c0101000c0301000c0101000c03 +01020c0201000c0001010c0301020c0201000c0001010c0901000c0001010c0501000c03 +01020c0301020c0201000c0101000c0301020c0201000c0001010c0301020c0201000c00 +01010c0301010c0001000c0301000c010e0000ff00ff0038060108010001060a08010001 +01000612010006030202010302020603010006010d0100000c0101000c0301000c000100 +0c0301000c0201000c0101010c0101000c0401000c0201010c0101000c0801010c010100 +0c0401000c0201000c0201000c0101000c0201000c0101000c0001000c0301000c020100 +0c0101010c0101000c0101000c0201000c0101010c0101000c0101000c0101010c030100 +0c010e0000ff00ff0038060108010001060a080100010100061201000603020201030202 +0603010006010d01000001010c0401010c0801000c0101000c0801000c0201000c020100 +0c0801000c0201000c0401000c0601000c0101000c0501010c0401000c0201000c010100 +0c0201000c0101000c0201000c0101000c0501000c0201000c0401010e0000ff00ff0038 +060108010001060a0801000101000612010006030202010302020603010006010d010000 +0c0101000c0301010c0501030c0101000c0801000c0201000c0201000c0801000c020100 +0c0401000c0301030c0101000c0501010c0401040c0101000c0201000c0101040c010100 +0c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a080100010100 +0612010006030202010302020603010006010d0100000c0101000c0301000c0001000c03 +01000c0201000c0101000c0801000c0201000c0201000c0801000c0201000c0401000c02 +01000c0201000c0101000c0501000c0001000c0301000c0501000c0201000c0101000c05 +01000c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a08010001 +01000612010006030202010302020603010006010d0100000c0101000c0301000c010100 +0c0201000c0201000c0101000c0801000c0201000c0201000c0301010c0201010c010100 +0c0401000c0201000c0201000c0101000c0201000c0101000c0101000c0201000c020100 +0c0101010c0101000c0101000c0201000c0101000c0501000c0101010c0301000c010e00 +00ff00ff0038060108010001060a08010001010006120100060302020103020206030100 +06010d0100000c0101000c0301000c0201000c0201030c0101000c0801000c0201000c02 +01000c0301010c0201000c0001010c0501000c0301030c0201020c0201000c0201000c02 +01020c0201000c0001010c0301020c0201000c0601010c0001000c0301000c010e0000ff +00ff0038060108010001060a080100010100061201000603020201030202060301000601 +0d0100000c0101000c2901000c4501000c0301000c010e0000ff00ff0038060108010001 +060a0801000101000612010006030202010302020603010006010d0100000c0201010c25 +01010c4201000c0201000c0101010c020e0000ff00ff0038060108010001060a08010001 +01000612010006030202010302020603010006010d0100000e7001020e0800ff00ff0038 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 +0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 +01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a +0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 +0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 +060108010001060a0801000101000612010006030202010302020603010006010d0100ff +00ff00b6060108010001060a080100010100061201000603020201030202060301000601 +0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 +010006010d0100ff00ff00b6060108010001080c00010100061201000603020201030202 +0603010006010d0100ff00ff00b6060108010000080d0001010006120100060302020103 +02020603010006010d0100ff00ff00b6060108010c0e0001010006120100060302020103 +02020603010006010d0100ff00ff00b60601080100100100061201000603020201030202 +0603010006010d0100ff00ff00b6060108010c00000c0800000101000612010006030202 +010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100 +0612010006030202010302020603010006010d0100ff00ff00b6060108010c0100010607 +08010c00000101000612010006030202010302020603010006010d0100ff00ff00b60601 +08010c010001060608010c01000101000612010006030202010302020603010006010d01 +00ff00ff00b6060108010c020001060508010c0100010100061201000603020201030202 +0603010006010d0100ff00ff00b6060108010c020001060408010c020001010006120100 +06030202010302020603010006010d0100ff00ff00b6060108010c030001060308010c02 +000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c03 +0001060208010c03000101000612010006030202010302020603010006010d0100ff00ff +00b6060108010c040001060108010c030001010006120100060302020103020206030100 +06010d0100ff00ff00b6060108010c040001060008010c04000101000612010006030202 +010302020603010006010d0100ff00ff00b6060108010c05000008020c04000101000612 +010006030202010302020603010006010d0100ff00ff00b6060108010c05000008010c05 +000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c06 +08010c05000101000612010006030202010302020603010006010d0000ff00ff00b70601 +08010c0608000c06000101000612010006030202010302020603010006ff06ff06bc0801 +001001000612010006030202010302020603010006ff06ff06bc08000011010006120100 +0603020201030202060301ff01ff01d1061201000603020201030202060301000b010932 +0a0100630100006301000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000b010916010209180a010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000b01091501000902010009170a010063010000170100002001020026 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000b01091501000902010009170a01006301000017010000220100 +002601000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000b01091501000902010009170a01000e0100000001010003 +0102000201000000010100420100000f0102000201040001010000020100000101000000 +010100030102000201000000010100050100000301020002010000000101001801000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000b010916010209180a01000e010100010100000101000002010000010101 +0001010000410100000e0100000201000003010000030100000201000001010100010100 +000101000002010000010101000101000004010000020100000201000001010100010100 +001701000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000b01091501000902010009170a01000e0100000201000001 +0100000201000001010000450100000e0100000701000003010000020100000101000005 +010000020100000101000002010000040100000601000001010000020100001701000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000b01091501000902010009170a01000e0100000201000001010400010100 +00450100000f010200040100000301000002010000010100000501040001010000020100 +000401000003010300010100000201000017010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000b01091501000902 +010009170a01000e01000002010000010100000501000045010000120100000301000003 +010000020100000101000005010000050100000201000004010000020100000201000001 +010000020100001701000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000b010916010209180a01000e010100010100 +00010100000201000001010000450100000e010000020100000301000003010000010101 +000101000005010000020100000101010001010000040100000201000002010000010100 +00020100001701000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000b0109320a01000e010000000101000301020002 +010000450100000f01020005010100020101000001000001010000060102000201000000 +010100050100000301030001010000020100001701000063010000630100006301000063 +010000020100061308010c0e0001062301000603020201030202060301000b0109320a01 +000e01000053010000310100003001000063010000630100006301000063010000020100 +061308010c0e0001062301000603020201030202060301000b0109320a01000e01000053 +010000310100003001000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000b0109320a01000e01000053010000310100 +003001000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000b0109320a01006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000b01 +09320a010063010000630100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000b010a34006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000b000a3501ff01ff0161061308010c0e00010623010006030202010302020603 +0100009a0100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100003508000063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061601020618080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106150100060201000617080100260100003b01000019010000170102002d01000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000001061501000602010006170801006301000019010000190100002d0100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000001061501000602010006170801000e010100000100000301020002 +010000000101000301020003010200340100000f01020003010100000100000201020002 +010000000101000201000000010100050100000301020002010000000101001f01000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000001061501000602010006170801000e0100000001000000010000010100 +00020100000101010001010000040100000201000002010000330100000e010000020100 +000101000001010100010100000201000001010100010100000101010001010000040100 +00020100000201000001010100010100001e010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061601030617 +0801000e010000000100000001000005010000010100000801000006010000330100000e +010000020100000101000002010000010100000201000001010000020100000101000002 +010000040100000601000001010000020100001e01000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106190100 +06170801000e010000000100000001000002010300010100000801000003010300330100 +000e01000002010000010100000201000001010400010100000201000001010000020100 +00040100000301030001010000020100001e010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061801000618 +0801000e0100000001000000010000010100000201000001010000080100000201000002 +010000330100000e01000002010000010100000201000001010000050100000201000001 +0100000201000004010000020100000201000001010000020100001e0100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010615010206190801000e01000000010000000100000101000002010000010100 +00080100000201000002010000330100000e010000020100000101000001010100010100 +000201000001010000020100000101010001010000040100000201000002010000010100 +00020100001e01000063010000630100006301000063010000020100061308010c0e0001 +06230100060302020103020206030100000106320801000e010000000100000001000002 +010300010100000801000003010300330100000f01020003010100000100000201020002 +010000020100000101000000010100050100000301030001010000020100001e01000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +02020603010000010632080100630100002a010000370100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100002a01000037010000630100006301000063010000630100000201000613 +08010c0e00010623010006030202010302020603010000010632080100630100002a0100 +003701000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010834006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603 +010005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000f6301000f6301000f6301000f6301000f6301000f6301000f02010006130801 +0c0e00010623010006030202010302020603010000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050001000f6301000f6301000f6301000f63 +01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 +0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100 +0f020100061308010c0e0001062301000603020201030202060301000000053401000f63 +01000f6301000f6301000f6301000f6301000f6301000f020100061308010c0e00010623 +01000603020201030202060301000500000005130100050401020515010005000f630100 +0f6301000f6301000f6301000f6301000f6301000f020100061308010c0e000106230100 +0603020201030202060301000000051201020503010005020100051501000f0e01000f16 +01000f3b01000f0e01000f0601020f1001000f0c01000f2901000f6301000f6301000f63 +01000f6301000f020100061308010c0e0001062301000603020201030202060301000500 +00000513010005030100050201000514010005000f0e01000f5301000f0e01000f080100 +0f1001000f0c01000f2901000f6301000f6301000f6301000f6301000f02010006130801 +0c0e00010623010006030202010302020603010000000514010005030100050201000515 +01000f0e01000f0101000f0301020f0201000f0001010f0301020f0201000f0001010f34 +01000f0e01000f0001010f0501000f0301020f0301020f0201000f0101000f0301020f02 +01000f0001010f0301020f0201000f0001010f0301010f0001000f1001000f6301000f63 +01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 +0100050000000513010005030100050201000514010005000f0e01000f0001000f030100 +0f0201000f0101010f0101000f0401000f0201010f0101000f3301000f0e01010f010100 +0f0401000f0201000f0201000f0101000f0201000f0101000f0001000f0301000f020100 +0f0101010f0101000f0101000f0201000f0101010f0101000f0101000f0101010f100100 +0f6301000f6301000f6301000f6301000f020100061308010c0e00010623010006030202 +01030202060301000000051401000503010005020100051501000f0e01010f0801000f01 +01000f0801000f0201000f0201000f3301000f0e01000f0201000f0401000f0601000f01 +01000f0501010f0401000f0201000f0101000f0201000f0101000f0201000f0101000f05 +01000f0201000f1001000f6301000f6301000f6301000f6301000f020100061308010c0e +000106230100060302020103020206030100050000000513010005030100050201000514 +010005000f0e01010f0501030f0101000f0801000f0201000f0201000f3301000f0e0100 +0f0201000f0401000f0301030f0101000f0501010f0401040f0101000f0201000f010104 +0f0101000f0501000f0201000f1001000f6301000f6301000f6301000f6301000f020100 +061308010c0e000106230100060302020103020206030100000005140100050301000502 +0100051501000f0e01000f0001000f0301000f0201000f0101000f0801000f0201000f02 +01000f3301000f0e01000f0201000f0401000f0201000f0201000f0101000f0501000f00 +01000f0301000f0501000f0201000f0101000f0501000f0501000f0201000f1001000f63 +01000f6301000f6301000f6301000f020100061308010c0e000106230100060302020103 +0202060301000500000005110104050201020515010005000f0e01000f0101000f020100 +0f0201000f0101000f0801000f0201000f0201000f3301000f0e01010f0101000f040100 +0f0201000f0201000f0101000f0201000f0101000f0101000f0201000f0201000f010101 +0f0101000f0101000f0201000f0101000f0501000f0101010f1001000f6301000f630100 +0f6301000f6301000f020100061308010c0e000106230100060302020103020206030100 +0000053401000f0e01000f0201000f0201030f0101000f0801000f0201000f0201000f33 +01000f0e01000f0001010f0501000f0301030f0201020f0201000f0201000f0201020f02 +01000f0001010f0301020f0201000f0601010f0001000f1001000f6301000f6301000f63 +01000f6301000f020100061308010c0e0001062301000603020201030202060301000500 +00000532010005000f6301000f5101000f1001000f6301000f6301000f6301000f630100 +0f020100061308010c0e0001062301000603020201030202060301000000053401000f63 +01000f4d01000f0201000f1001000f6301000f6301000f6301000f6301000f0201000613 +08010c0e000106230100060302020103020206030100050000000532010005000f630100 +0f4e01020f1101000f6301000f6301000f6301000f6301000f020100061308010c0e0001 +062301000603020201030202060301000000053401000f6301000f6301000f6301000f63 +01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 +0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100 +0f020100061308010c0e0001062301000603020201030202060301000000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100050001000f6301000f63 +01000f6301000f6301000f6301000f6301000f020100061308010c0e0001062301000603 +020201030202060301000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050001ff01ff0161061308010c0e000106230100060302020103 +020206030100050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500010000630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000000534 +010000630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100050000000513010005050100051601000500 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000000051201020503010205170100001e01000043 +0100000e01000006010200100100000c0100002901000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100050000000513 +010005050100051601000500001e010000430100000e01000008010000100100000c0100 +002901000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000000051401000505010005170100000e0101000001000003 +01020002010400020102003b0100000e0100000001010005010000030102000301020002 +010000010100000301020002010000000101000301020002010000000101000301010000 +0100001001000063010000630100006301000063010000020100061308010c0e00010623 +0100060302020103020206030100050000000513010005050100051601000500000e0100 +00000100000001000001010000020100000301000003010000020100003a0100000e0101 +000101000004010000020100000201000001010000020100000101000000010000030100 +000201000001010100010100000101000002010000010101000101000001010000010101 +001001000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000000051401000505010005170100000e0100000001000000 +0100000501000003010000030100003e0100000e01000002010000040100000601000001 +010000050101000401000002010000010100000201000001010000020100000101000005 +010000020100001001000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100050000000513010005050100051601000500 +000e01000000010000000100000201030003010000040102003b0100000e010000020100 +000401000003010300010100000501010004010400010100000201000001010400010100 +000501000002010000100100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000000051401000505010005170100000e +0100000001000000010000010100000201000003010000070100003a0100000e01000002 +010000040100000201000002010000010100000501000000010000030100000501000002 +010000010100000501000005010000020100001001000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100050000000511 +010405010104051401000500000e01000000010000000100000101000002010000030100 +0003010000020100003a0100000e01010001010000040100000201000002010000010100 +000201000001010000010100000201000002010000010101000101000001010000020100 +000101000005010000010101001001000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000005340100000e01000000 +010000000100000201030004010100020102003b0100000e010000000101000501000003 +010300020102000201000002010000020102000201000000010100030102000201000006 +010100000100001001000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100050000000532010005000063010000510100 +001001000063010000630100006301000063010000020100061308010c0e000106230100 +06030202010302020603010000000534010000630100004d010000020100001001000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000500000005320100050000630100004e0102001101000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000005340100006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000500000005320100050000630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010000630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001ff01ff +0161061308010c0e000106230100060302020103020206030100009a0100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100003508000063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000604010206150801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061101020603 +010006020100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006030100 +060201000614080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060301000602 +010006140801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000606010006150801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000605010006160801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061301000604010006170801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000603010006020100061408010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010611010406010104061408010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010834006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603 +0100009a0100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100003508000063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061301000604010206150801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061101020603010006020100061408010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006070100061408010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010613 +010006070100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006050101 +061508010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010613010006070100061408010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006070100061408010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010613010006030100060201000614080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106110104060201020615080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106320801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000108340063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000000083501ff01ff0161061308010c0e000106230100060302020103 +020206030100009a01000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000035080000630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006060100061508010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010611010206050101061508010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006040100060001000615080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106130100060401000600010006150801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000603010006010100061508010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010613 +010006020100060201000615080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106130100 +060201050614080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060601000615 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106110104060301020614080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000108340063010000630100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e +000106230100060302020103020206030100009a01000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000035 +080000630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006030104 +061408010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010611010206030100061808010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006030100061808010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010613010006030100061808010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006030103061508010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010613 +010006070100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006070100 +061408010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010613010006020100060301000614 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106110104060101030615080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000108340063010000630100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e +000106230100060302020103020206030100009a01000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000035 +080000630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006050102 +061408010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010611010206040100061708010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006030100061808010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010613010006030100061808010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006030103061508010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010613 +010006030100060201000614080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106130100 +060301000602010006140801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000603 +010006020100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010611010406020102 +061508010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106320801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010834006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff +0161061308010c0e000106230100060302020103020206030100009a0100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100003508000063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000603010406140801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061101020603 +010006020100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006060100 +061508010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010613010006060100061508010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006060100061508010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010613010006060100061508010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006050100061608010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010613 +010006050100061608010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010611010406030100 +061608010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106320801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010834006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff +0161061308010c0e000106230100060302020103020206030100009a0100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100003508000063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000604010206150801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061101020603 +010006020100061408010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006030100 +060201000614080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060301000602 +010006140801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000604010206150801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000603010006020100061408010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006030100060201000614080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106130100060301000602010006140801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061101040602010206150801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001083400630100 +006301000063010000630100006301000063010000020100061308010010062301000603 +020201030202060301ff01ff019906130800001106230100060302020103020206030100 +06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff +06e301000603020201030202060301000649010006ff06ff069801000603020201030202 +060301000648010106ff06ff069801000603020201030202060301000647010006000100 +06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202 +01030202060301000649010006ff06ff0698010006030202010302020603010006490100 +06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202 +01030202060301000649010006ff06ff0698010006030202010302020603010006470104 +06ff06ff0696010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +060302020103020206030100063708ff08ff0860064a0100060302020103020206030100 +063708ff08ff085f0000064a010006030202010302020603010006370801001d0cff0cff +0c3e0001064a010006030202010302020603010006370801001c08000cff0cff0c3e0001 +064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff +0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801 +0cff0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000 +060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b +08000000060b08010cff0cff0c3e0001064a010006030202010302020603010006370801 +0001060b08000000060b08010cff0cff0c3e0001064a0100060302020103020206030100 +063708010001060b08000000060b08010cff0cff0c3e0001064a01000603020201030202 +06030100063708010001060b08000000060b08010cff0cff0c3e0001064a010006030202 +0103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a0100 +060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001 +064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff +0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801 +0cff0cff0c3e0001064a0100060302020103020206030100063708010001080c0000080d +0cff0cff0c3e0001064a0100060302020103020206030100063708010000081c0cff0cff +0c3e0001064a01000603020201030202060301000637080100ff00ff005e064a01000603 +020201030202060301000637080000ff00ff005f064a0100060302020103020206030100 +06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff +06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 +06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff +06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 +06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff +06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 +06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 +0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 +010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 +06030202010100040603010006ff06ff06e301000603000502020400060301ff01ff01e5 +060300000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff +06ed00000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff +06ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff +02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff +01ff01e10000020804000000040901ff01ff01e100000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 64 377 377 +%%EOF diff --git a/lib/tv/doc/src/tv_search_result.gif b/lib/tv/doc/src/tv_search_result.gif new file mode 100644 index 0000000000..3e615b4875 Binary files /dev/null and b/lib/tv/doc/src/tv_search_result.gif differ diff --git a/lib/tv/doc/src/tv_search_result.ps b/lib/tv/doc/src/tv_search_result.ps new file mode 100644 index 0000000000..14d0331a8f --- /dev/null +++ b/lib/tv/doc/src/tv_search_result.ps @@ -0,0 +1,2739 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_search_result.tmp.eps) +%%CreationDate: (Tue Jun 12 16:10:46 2001) +%%BoundingBox: 0 34 400 249 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 34 400 249 +userdict begin +%%BeginData: +DisplayImage +0 34 +400.000000 215.000000 +12 +1051 565 +1 +0 +0 +32 +ffffff +000000 +d8d8d8 +4ac1df +c2c2c2 +6b6b6b +d9d9d9 +b22222 +00ff00 +ff0000 +aa2455 +990000 +7f7f7f +999999 +ff7f7f +009900 +7fff7f +ffd700 +998100 +ffff7f +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +03ba01010000010100000100000001000000010000000100000001000000010000000100 +000101000002010103ff03ff03ff03ff0300010200000100000001000000010000000100 +000001000000010000000100000101000002010103f5000a01ff01ff0137000a03be0101 +000101000000010000000100000001000000010000000100000101000002010103f60000 +0208050001ff01ff013700000208050003bf010100010100000001000000010000000100 +00000100000101000002010103f700000208050002ff02ff023700000208050003c00101 +00010100000001000000010000000100000101000002010103f800000208050002ff02ff +023700000208050003c10101000101000000010000000100000101000002010103f90000 +0202050602ff02ff0237000005050202050003c201010001010000000100000101000002 +010103fa0000020205000209000d02ff02ff022b00000202050003c30101000101000001 +01000002010103fb00000202050002080000020d05000234010302110103023201020258 +0102020c010102010101021e010102290101020601010208010102310101022a01010230 +0101024100000202050003c40101000201000002010103fc00000202050002080000020d +05000234010102020107020001010203010102010101020e01050200010702010103020d +0101020401010204010302030103020e010302060103020301030203010302060103020b +0101020a0101020201010219010002030101021c0100020b01010206010102090101021b +010202020100020d0101022a0101020c0104021e0101024100000202050003c501010000 +01000002010103fd00000202050002080000020d05000234010102050101020301010203 +010102010101020e0101020701010203010102010101020c010102020103020301010201 +010102010101020101010208010102010101020101010204010102010101020101010201 +0101020101010201010102040101020101010201010102060101020a0101020201010218 +010102210101020b01010206010102090101021b010202020100020d0101023801010202 +0101021d0101024100000202050003c601010002010103fe000002020500020800000202 +0506020305000234010102050101020301010203010102010101020e0101020701010203 +010102050101020901010203010102070101020101010201010102060102020201010201 +010102080101020101010201010102010101020101010204010102010101020201020203 +0101020a0101020301010202010302030103020201030201010402010101020201030203 +010102000101020a0104020101030203010102000101020301010202010302030101021a +010002000101020101000202010302030104020201030202010102090101020001010201 +010102030103020301010202010102000101020201010201010302020101020001010201 +010102030103020201010200010102010101020201030202010102020101023000000202 +050003c701000001010103ff000005030208000002020500040400000203050002340101 +02050101020401010202010002020101020e0101020701010203010202040101020a0100 +020301010207010102010101020101010205010102040101020101010208010102010101 +02010101020101010201010102040101020101010204010102020100020b010102030101 +020101010201010102010101020101010200010102010101020101010203010102010101 +020101010202010202000101020a01010202010102010101020201020200010102020101 +020101010201010102020101021a01000200010102010100020101010201010102010101 +020101010201010102010101020101010209010202000102020001010201010102010101 +020201010202010202000101020101010200010102000101020201020200010202000101 +020101010201010102010101020001010201010102010101020101010201010102020101 +02300000050303c7010303ff03000101020b000002030500040200000204050002340101 +02050101020401010201010102020101020e01040204010102040103020d010102040101 +020501020202010102010101020401010205010102010101020701010202010102010101 +020201040204010102010101020501010202010102090101020301010201010102010101 +0201010102080101020101010203010102010101020101010202010102010101020a0101 +02060101020201010201010102020101020101010201010102020101021a010002000102 +02000100020101010201010102010101020101010201010102010101020d010102010101 +020101010205010102020101020201010201010102010101020001010200010102020101 +020101010201010102050101020101020203010102010101020101010201010102020100 +0234010103c8010103ff03010101020b0000020305000402000002040500023401010205 +0101020501010200010002030101020e01010207010102060102020e0100020301010207 +010102010101020101010205010102040101020101010206010102030101020101010205 +010102040101020101010204010102020100020b01010203010102010101020101010201 +010102050104020101010203010102010101020101010202010102010101020a01010203 +01040202010102010101020201010201010502020101021a010002010101020001000201 +010102010101020101010201010102010105020d01010201010102010101020201040202 +010102020101020101010201010102000101020001010202010102010101020101010202 +010402010101020401010201010502020101020001010234010103ff03cc0101020b0000 +02040500040000000205050002340101020501010205010302030101020e010102070101 +02070101020d010102030101020701010201010102010101020601020202010102010101 +0205010102040101020101010205010102040101020101010202010202030101020a0101 +020301010201010102010101020101010204010102010101020101010203010102010101 +020101010202010102010101020a01010202010102010101020201010201010102020101 +0201010102060101021a0100020201020201010102010101020101010201010102010101 +021101010201010102010101020101010201010102020101020201010201010102010101 +020101010200010102010101020101010201010102010101020101010201010102040101 +0201010102060101020001000235010103ff03cc0101020b000002040500040000000205 +050002340101020501010206010102040101020e01010207010102030101020101010201 +010102080101020401010203010102010101020101010201010102010101020401010201 +010102010101020101010200010502010101020101010201010102010101020101010200 +0101020101010201010102060101020a0101020201010201010102010101020101010202 +01000200010102010101020101010203010102010101020101010202010102010101020a +01010202010102010101020201010201010102020101020101010202010002010101021b +010002020102020101010201010102010101020001020201010102020100020101010209 +010102010101020101010201010102010101020201010202010102010101020201010207 +010102010101020101010201010102010101020101010204010102010101020201000203 +01020235010103ff03cc0101020b00000205000002060500023401010205010102060101 +02040101020e010502030101020401030202010102080101020401010204010302030103 +0202010102090103020201010200010502020103020301030202010102010103020b0101 +020a01010202010102020103020301030202010202000101020101020201010102020103 +0203010102010101020b0102020101020200010102010104020301010202010302020101 +021b01000203010102020103020301010200010102020103020201010209010102010101 +020101010202010202000101020101010202010102010101020301050202010102010101 +020101010202010202000101020001010204010102020103020401010236010103ff03cc +0101020b0000020d050002340103021101030232010202190100023d0102020c01010237 +010602230101029e01010237010103ff03cc0101020b0000020d0500029d010002ff0254 +01010237010103ae0100030801000305010103ff030a0101020b0000020d050002ff02ff +022d010103ae0100030801000306010003ff030a0101020c050d02ff02ff022e010103ae +0100030801000306010003ff030a010102ff02ff0249010103ac01040301010303000103 +0303010003030102030201030307010203010100030001010307010003e2010102ff02ff +0249010103ae010003020100030201000300010003020100030201000302010003020100 +03000100030a01000302010003000101030101000306010003e2010102ff02ff02490101 +03ae01000302010003020100030001000302010003020100030201040301010203070100 +0302010003000100030201000306010003e2010102ff02ff0249010103ae010003020100 +030101010300010003020100030201000302010003080100030601000302010003000100 +030201000306010003e2010102ff02ff0249010103af0101030101010300010003000103 +0302010203020102030101030308010203010100030201000306010003e2010102020600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +0000060000000202010103ff03cc01010202000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000600000006000000060000000600000006000202010103ff03cc0101 +02020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff06400100 +06000202010103ff03cc010102020600000006ff06ff064001000202010103ff03cc0101 +0202000006ff06ff0640010006000202010103ff03cc010102020600000006ff06ff0640 +01000202010103ff03cc010102020000060c07040604070006030702061f070406050700 +060407000604070006190700060207000604070006270702060b07000606070006ff065e +070006020700060907020613010006000202010103ff03cc0101020206000000060b0700 +060f0700061f070006090700060a07000619070006020700062c070006020700060a0700 +06ff0666070006020700060b0700061401000202010103ff03cc010102020000060c0700 +060607020605070006030702061807000606070106000700060207020602070406170700 +060207000602070206030702060207000602070006170700060207000601070006000701 +06020704060207020603070206020700060007010603070206ff06490700060207000602 +0702060507000602070006000701060c010006000202010103ff03cc0101020206000000 +060b07000608070006050700060207000602070006170700060507000601070106040700 +06040700061a070006000700060507000602070006020700060107000602070006170700 +060207000601070106010700060307000606070006020700060207000601070106010700 +060107000602070006ff0648070006020700060107000602070006040700060207010601 +0700060c01000202010103ff03cc010102020000060c0703060507000605070006020700 +060207000617070306020700060207000604070006040700061a07000600070006050700 +060207000602070006010700060007000600070006170700060207000601070006020700 +0603070006060700060207000602070006010700060207000601070006ff064c07040601 +070006020700060407000602070006020700060b010006000202010103ff03cc01010202 +06000000060b070006080700060507000602070406170700060507000602070006040700 +06040700061a070006000700060507000602070406010700060007000600070006170700 +060207000601070006020700060307000606070006020700060207000601070006020700 +0602070206ff064907000602070006010704060407000602070006020700060c01000202 +010103ff03cc010102020000060c0700060807000605070006020700061b070006050700 +060207000604070006040700061b07000606070006020700060507000600070006000700 +061707000602070006010700060207000603070006060700060207000602070006010700 +060207000605070006ff064807000602070006010700060807000602070006020700060b +010006000202010103ff03cc0101020206000000060b0700060807000605070006020700 +060207000617070006050700060107010604070006040700061b07000606070006020700 +060207000601070006000700060007000617070006020700060107010601070006030700 +0606070006020700060207000601070006020700060107000602070006ff064807000602 +07000601070006020700060407000602070106010700060c01000202010103ff03cc0101 +02020000060c070006080700060507000603070206180704060207010600070006040700 +060507010619070006060700060307020603070006000700061907020602070006000701 +06050701060407000603070206020700060207000602070206ff06490700060207000602 +0702060507000602070006000701060c010006000202010103ff03cc0101020206000000 +06a8070006ff06840700061001000202010103ff03cc010102020000060b0706062a0706 +062a0706062a07060600070006ff066e0706060e0700060f010006000202010103ff03cc +0101020206000000060a0706062a0706062a0706062a07060600070006ff066e0706060e +0700061001000202010103ff03cc01010202000006ff06ff0640010006000202010103ff +03cc010102020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff +0640010006000202010103ff03cc01010202060000000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +01000600010006000100060001000600010006000100060001000202010103ff03cc0101 +020200000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000202010103ff03cc0101020206ff06ff06430202010103ff03cc +0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc +0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc +0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc +0101020206ff06ff06430202010103ff03cc010102020636000006000000060000000600 +00000600000006000000060000000600000006000000060000000600000006000000061a +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000601000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000601000006000000060000000600 +00000600000006000000060000000600000006000000060000000600000006000000061a +000006000000060000000600000006000000060000000600000006000000060000000600 +00000600000006000000061a000006000000060000000600000006000000060000000600 +00000600000006000000060000000600000006000000061a000006000000060000000600 +0000060000000600000006000000060000000600000006000000060000000600000006fb +0202010103ff03cc01010202063500000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060001000618000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600010000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060001000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000100 +061800000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060001000618000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600010006180000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000600010006fa0202010103ff03cc010102020636000006140100061a +00000614010006010000061401000601000006140100061a000006140100061a00000614 +0100061a00000614010006fb0202010103ff03cc01010202063500000616010006180000 +061601000000061601000000061601000618000006160100061800000616010006180000 +0616010006fa0202010103ff03cc010102020636000006140100061a0000061401000601 +0000061401000601000006140100061a000006140100061a000006140100061a00000614 +010006fb0202010103ff03cc010102020635000006050702060307020606010006180000 +061601000000061601000000061601000618000006160100061800000616010006180000 +0616010006fa0202010103ff03cc0101020206360000060407020603070206050100061a +00000614010006010000061401000601000006140100061a00000606070406080100061a +00000608070106090100061a0000060807030607010006fb0202010103ff03cc01010202 +063500000604070406010704060501000618000006100700060401000000061007000604 +010000000604070006100100061800000605070806070100061800000608070306090100 +06180000060707070606010006fa0202010103ff03cc0101020206360000060307000601 +0701060107000601070106040100061a0000060f07000603010006010000060f07000603 +01000601000006030700060f0100061a00000603070a06050100061a0000060707030608 +0100061a000006050703060107030604010006fb0202010103ff03cc0101020206350000 +0603070d0604010006180000060d07000601070006040100000006040700060a07000604 +010000000604070006010700060d01000618000006040703060207030606010006180000 +06090701060a01000618000006060702060307020605010006fa0202010103ff03cc0101 +0202063600000601070006000703060007020600070406020100061a0000060c07000601 +0700060301000601000006030700060a070006030100060100000603070006010700060c +0100061a0000060207030604070306040100061a000006140100061a0000060507020603 +07020604010006fb0202010103ff03cc0101020206350000060207000600070306000702 +060007040603010006180000060a07000601070006010700060401000000060407000604 +070006040700060401000000060407000601070006010700060a01000618000006030702 +060307070603010006180000060707040609010006180000060707010602070206060100 +06fa0202010103ff03cc0101020206360000060107000600070306000702060007040602 +0100061a0000060907000601070006010700060301000601000006030700060407000604 +0700060301000601000006030700060107000601070006090100061a0000060207020604 +070506030100061a00000607070306080100061a0000060a07020606010006fb02020101 +03ff03cc0101020206350000060207000600070306000702060007040603010006180000 +060707000601070006010700060107000604010000000604070006040700060107000601 +070006040100000006040700060107000601070006010700060701000618000006030702 +060507030605010006180000060907020609010006180000060a07020608010006fa0202 +010103ff03cc010102020636000006010700060007070600070406020100061a00000606 +070006010700060107000601070006030100060100000603070006040700060107000601 +070006030100060100000603070006010700060107000601070006060100061a00000602 +07030605070106050100061a00000608070206080100061a0000060807020608010006fb +0202010103ff03cc01010202063500000602070006000704060107000600070406030100 +061800000604070006010700060107000601070006010700060401000000060407000601 +070006010700060107000601070006040100000006040700060107000601070006010700 +06010700060401000618000006040703060d010006180000060907020609010006180000 +060907020609010006fa0202010103ff03cc010102020636000006010706060107060602 +0100061a0000060307000601070006010700060107000601070006030100060100000603 +070006010700060107000601070006010700060301000601000006030700060107000601 +0700060107000601070006030100061a00000603070906060100061a0000060807020608 +0100061a00000614010006fb0202010103ff03cc01010202063500000602070006000702 +060507000600070206030100061800000604070006010700060107000601070006010700 +060401000000060407000601070006010700060107000601070006040100000006040700 +060107000601070006010700060107000604010006180000060507070608010006180000 +060807040608010006180000060907020609010006fa0202010103ff03cc010102020636 +00000601070006000702060507000600070206020100061a000006030700060107000601 +070006010700060107000603010006010000060307000601070006010700060107000601 +07000603010006010000060307000601070006010700060107000601070006030100061a +00000606070406080100061a00000606070606060100061a0000060807020608010006fb +0202010103ff03cc01010202063500000602070406050704060301000618000006160100 +000006160100000006160100061800000616010006180000061601000618000006160100 +06fa0202010103ff03cc010102020636000006140100061a000006140100060100000614 +01000601000006140100061a000006140100061a000006140100061a00000614010006fb +0202010103ff03cc01010202063500000616010006180000061601000000061601000000 +0616010006180000061601000618000006160100061800000616010006fa0202010103ff +03cc010102020636000006140100061a0000061401000601000006140100060100000614 +0100061a000006140100061a000006140100061a00000614010006fb0202010103ff03cc +010102020635000006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006180000060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +000006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010000000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000618000006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006180000060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100061800000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +0600010006fa0202010103ff03cc01010202063601000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100061a01000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060101000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060101000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100061a01000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100061a01000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100061a01000600010006000100060001000600 +01000600010006000100060001000600010006000100060001000600010006fb02020101 +03ff03cc0101020206ff06ff06430202010103ff03cc0101020206ff06ff064302020101 +0303000a01ff01b0000a03010101020206ff06ff064302020101030300000208050001ff +01b000000208050003010101020206ff06ff064302020101030300000208050002ff02b0 +00000208050003010101020206ff06ff064302020101030300000208050002ff02b00000 +0208050003010101020206ff06ff064302020101030300000202050602ff02b000000505 +0202050003010101020206ff06ff06430202010103030000020205000209000d02ff02a4 +00000202050003010101020206ff06ff064302020101030300000202050002080000020d +0500029001030211010302330101021501010206010102a1000002020500030101010202 +06ff06ff064302020101030300000202050002080000020d050002900101020201070200 +01010203010102010101020e010302200101020c0103020401010206010102110100028e +00000202050003010101020206ff06ff064302020101030300000202050002080000020d +05000290010102050101020301010203010102010101020d010102010101021f0101020b +0101020101010203010102190101028e00000202050003010101020206ff06ff06430202 +010103030000020205000208000002020506020305000290010102050101020301010203 +010102010101020d01010206010302030103020201010200010102010103020201010200 +01010207010102030101020201010200010102030101020201030203010302000104028c +000002020500030101010202060301ff01ff013b06030202010103030000050302080000 +0202050004040000020305000290010102050101020401010202010002020101020d0102 +020401010201010102010101020101010201010102000101020001010201010102010102 +020001010206010102030101020201020200010102020101020101010201010102010101 +0201010102000101028e000005030301010102020603010006ff06ff0625010006000000 +060000000600000006000000060000000600000006000000060000000600000006000100 +06030202010103030101020b000002030500040200000204050002900101020501010204 +01010201010102020101020e010302020101020101010205010102010102020201010205 +010102010101020601010203010102020101020101010202010102010101020101010201 +010102040101029101010301010102020603010006ff06ff062501000000060000000600 +000006000000060000000600000006000000060000000600000006000101060302020101 +03030101020b000002030500040200000204050002900101020501010205010102000100 +020301010210010202010105020201040201010102030101020501010201010102060101 +020301010202010102010101020201010201010502010101020401010291010103010101 +02020603010006010dff0dff0d210601010006000000060e010006000100060302020101 +03030101020b000002040500040000000205050002900101020501010205010302030101 +021101010201010102050101020101010201010102030101020501010201010102060101 +020301010202010102010101020201010201010102050101020401010291010103010101 +02020603010006010dff0dff0d2000000601010000000610010106030202010103030101 +020b000002040500040000000205050002900101020501010206010102040101020d0101 +020101010201010102020100020101010201010102010101020301010202010002010101 +020101010207010102010101020301010201010102020101020101010202010002010101 +0202010002000101029101010301010102020603010006010d0100ff00ff001f06010100 +06000000060e01000600010006030202010103030101020b000002050000020605000290 +0101020501010206010102040101020e0103020301030203010202000101020001010204 +01030202010102010101020801030204010402030101020201030203010302020102028f +01010301010102020603010006010d0100ff00ff001f0601010000000610010106030202 +010103030101020b0000020d050002900103021101030254010102a40101030101010202 +0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101 +03030101020b0000020d050002fd010202a501010301010102020603010006010d0100ff +00ff001f0601010000000610010106030202010103030101020b0000020d050002ff02a6 +01010301010102020603010006010d0100ff00ff001f0601010006000000060e01000600 +010006030202010103030101020c050d02ff02a701010301010102020603010006010d01 +00ff00ff001f0601010000000602010a060201010603020201010303010102ff02c20101 +0301010102020603010006010d0100ff00ff001f06010100060000000602010806020100 +060001000603020201010303010102ff02c201010301010102020603010006010d0100ff +00ff001f06010100000006040106060401010603020201010303010102ff02c201010301 +010102020603010006010d0100ff00ff001f060101000600000006040104060401000600 +01000603020201010303010102ff02c201010301010102020603010006010d0100ff00ff +001f06010100000006060102060601010603020201010303010102ff02c2010103010101 +02020603010006010d0100ff00ff001f0601010006000000060601000606010006000100 +06030202010103030101020206ff06bc020201010301010102020603010006010d0100ff +00ff001f0601010000000610010106030202010103030101020206ff06bc020201010301 +010102020603010006010d0100ff00ff001f0601010006000000060e0100060001000603 +0202010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff +001f0601010000000610010106030202010103030101020206ff06bc0202010103010101 +02020603010006010d0100ff00ff001f0601010006000000060e01000600010006030202 +010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff001f +0601010000000610010106030202010103030101020206ff06bc02020101030101010202 +0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101 +03030101020206ff06bc020201010301010102020603010006010d0000ff00ff00200601 +010000000610010106030202010103030101020206ff06bc020201010301010102020603 +010006ff06ff062501000600000006000100060001000600010006000100060001000600 +010006000100060001000600010006030202010103030101020206ff06bc020201010301 +010102020603010006ff06ff062501000000060001000600010006000100060001000600 +01000600010006000100060001000600010106030202010103030101020206ff06bc0202 +0101030101010202060301ff01ff013b0603020201010303010102020608000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006080202010103010101020206ff06ff +064302020101030301010202060700000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600010006070202010103010101020206ff06ff064302020101030301010202 +0608000006ff06a8010006080202010103010101020206ff06ff06430202010103030101 +02020607000006ff06aa010006070202010103010101020206ff06ff0643020201010303 +010102020608000006ff06a8010006080202010103010101020206ff06ff064302020101 +0303010102020607000006ff06aa010006070202010103010101020206ff06ff06430202 +01010303010102020608000006ff06a8010006080202010103010101020206ff06ff0643 +020201010303010102020607000006ff06aa010006070202010103010101020206ff06ff +0643020201010303010102020608000006ff06a8010006080202010103010101020206ff +06ff0643020201010303010102020607000006ff06aa0100060702020101030101010202 +06ff06ff0643020201010303010102020608000006ff06a8010006080202010103010101 +020206ff06ff0643020201010303010102020607000006ff06aa01000607020201010301 +0101020206ff06ff0643020201010303010102020608000006ff06a80100060802020101 +03010101020206ff06ff0643020201010303010102020607000006ff0649000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000611010006070202010103010101020206ff06ff0643020201010303 +010102020608000006ff0647000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006110100060802020101 +03010101020206ff06ff0643020201010303010102020607000006ff06490000064c0100 +0611010006070202010103010101020206ff06ff06430202010103030101020206080000 +06ff06470000064c01000611010006080202010103010101020206ff06ff064302020101 +03030101020206070000060d0102061e0100060f010106ff06060000064c010006110100 +06070202010103010101020206ff06ff06430202010103030101020206080000060b0100 +06020100061d0100060e010006ff06070000064c01000611010006080202010103010101 +020206ff06ff06430202010103030101020206070000060c010006060102060301020602 +010006000101060301020602010006000101060b01000604010206020100060001010604 +010106f20000064c01000611010006070202010103010101020206ff06ff064302020101 +03030101020206080000060c010006040100060201000601010006020100060101010601 +010006010100060201000601010106010100060801040601010006020100060101010601 +01000603010106f10000064c010006110100060802020101030101010202060301ff01ff +013b06030202010103030101020206070000060e01010602010006020100060501000601 +0100060501000605010006020100060a010006030100060201000601010006fc0000064c +0100061101000607020201010301010102020603010006ff06ed0100064a010006030202 +010103030101020206080000060f01000601010406020103060101000605010006050100 +06020100060a010006030100060201000601010006fb000006120102061e010006160100 +06110100060802020101030101010202060301000663010506ff06830100064a01000603 +0202010103030101020206070000060c0100060201000601010006050100060201000601 +0100060501000605010006020100060a010006030100060201000601010006fc00000610 +010006020100061d01000617010006110100060702020101030101010202060301000662 +010706ff06820100064a010006030202010103030101020206080000060b010006020100 +060101000602010006010100060201000601010006050100060201000601010006020100 +060a01000603010006020100060101000607010106f10000061101000606010206030102 +060201000600010106030102060201000600010106130100061101000608020201010301 +0101020206030100066101020603010206ff06810100064a010006030202010103030101 +020206070000060d0102060301020603010306010100060601020602010006020100060a +010006040102060201000607010106f20000061101000604010006020100060101000602 +010006010101060101000601010006020100060101010601010006130100061101000607 +0202010103010101020206030100066101010605010106ff06810100064a010006030202 +01010303010102020608000006ff06470000061301010602010006020100060501000601 +010006050100060501000602010006120100061101000608020201010301010102020603 +0100066101020603010206ff06810100064a010006030202010103030101020206070000 +06ff06490000061401000601010406020103060101000605010006050100060201000613 +010006110100060702020101030101010202060301000662010706ff06820100064a0100 +0603020201010303010102020608000006ff064700000611010006020100060101000605 +010006020100060101000605010006050100060201000612010006110100060802020101 +030101010202060301000663010506ff06830100064a0100060302020101030301010202 +0607000006ff064900000610010006020100060101000602010006010100060201000601 +010006050100060201000601010006020100061301000611010006070202010103010101 +0202060301000665010106ff06850100064a010006030202010103030101020206080000 +06ff06470000061201020603010206030103060101000606010206020100060201000612 +010006110100060802020101030101010202060301000665010106ff06850100064a0100 +0603020201010303010102020607000006ff06490000064c010006110100060702020101 +030101010202060301000665010106ff06850100064a0100060302020101030301010202 +0608000006ff06470000064c010006110100060802020101030101010202060301000665 +010106ff06850100064a01000603020201010303010102020607000006ff06490000064c +010006110100060702020101030101010202060301000665010106ff06850100064a0100 +0603020201010303010102020608000006ff06470000064c010006110100060802020101 +030101010202060301000665010106ff06850100064a0100060302020101030301010202 +06070000060b0dff0d2806140000064c0100061101000607020201010301010102020603 +0100066101010600010206ff06850100064a010006030202010103030101020206080000 +060a0dff0d27000006130000064c01000611010006080202010103010101020206030100 +066101010600010206ff06850100064a010006030202010103030101020206070000060b +0d0100ff002606140000064c010006110100060702020101030101010202060301000661 +010506ff06850100064a010006030202010103030101020206080000060a0d0100ff0026 +06130000064c010006110100060802020101030101010202060301000661010506ff0685 +0100064a010006030202010103030101020206070000060b0d0100ff002606140000064c +01000611010006070202010103010101020206030100066101020600010106ff06850100 +064a010006030202010103030101020206080000060a0d0100ff002606130000064c0100 +061101000608020201010301010102020603010006ff06ed0100064a0100060302020101 +03030101020206070000060b0d0100ff0026061400000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000611 +0100060702020101030101010202060301ff01ef064a0100060302020101030301010202 +06080000060a0d0100ff0026061300000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000611010006080202 +010103010101020206030100063513610c04060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +0000060000000600000006000000060000000600000006000000060000000c0406000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000c040600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000c04060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000001000614010006000100060001000600 +010006000100060001000600010006000100060001000624010006030202010103030101 +020206070000060b0d01001f010000ff0005067501000607020201010301010102020603 +01000635136012000c030100000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +0000060000000600000006000000060000000600000006000c0301000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000c03010000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +00000600000006000000060000000600000006000c030100000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060001000613010006000100060001000600 +010006000100060001000600010006000100060001000600000006230100060302020101 +03030101020206080000060a0d01001d0100000001000000010000ff0003067401000608 +020201010301010102020603010006351301115d12010c01010206000000065c01000c01 +010206000000065c01000c01010206000000065c01000c01010206000000061f01000614 +0100040e00000624010006030202010103030101020206070000060b0d01000101000002 +01000002010200030102000301020003010200ff00040675010006070202010103010101 +02020603010006351301112c0100112f12010c0101020000062b0102062d010006000c01 +01020000062b0102062d010006000c0101020000062d0100062d010006000c0101020000 +06200100061301000600040e060000000623010006030202010103030101020206080000 +060a0d010001010000020100000101000002010000010100000201000001010000020100 +0002010200ff0004067401000608020201010301010102020603010006351301112a0102 +112f12010c010102060000000629010006020100062d01000c0101020600000006290100 +06020100062d01000c01010206000000062b0101062e01000c01010206000000061f0100 +06140100040e00000624010006030202010103030101020206070000060b0d0100010100 +0002010000050100000101000009010000010100000001000000010000ff000306750100 +0607020201010301010102020603010006351301112c0100112f12010c0101020000062a +010006020100062c010006000c0101020000062e0100062c010006000c0101020000062b +010006000100062d010006000c010102000006200100061301000600040e060000000623 +010006030202010103030101020206080000060a0d010002010000000100000301030002 +0102000301030003010000ff000506740100060802020101030101010202060301000635 +1301112c0100112f12010c010102060000000629010006020100062d01000c0101020600 +0000062d0100062d01000c01010206000000062a010006000100062e01000c0101020600 +0000061f010006140100040e00000624010006030202010103030101020206070000060b +0d010002010000000100000201000002010000050100000101000002010000ff000a0675 +01000607020201010301010102020603010006351301112c0100112f12010c0101020000 +062d0100062d010006000c0101020000062c0101062d010006000c0101020000062a0100 +06010100062d010006000c010102000006200100061301000600040e0600000006230100 +06030202010103030101020206080000060a0d0100030100000301000002010000010100 +00020100000101000002010000ff000a0674010006080202010103010101020206030100 +06351301112c0100112f12010c01010206000000062b0100062f01000c01010206000000 +062d0100062d01000c010102060000000628010006020100062e01000c01010206000000 +061f010006140100040e00000624010006030202010103030101020206070000060b0d01 +0003010000040103000201020003010300ff000a06750100060702020101030101010202 +0603010006351301112c0100112f12010c0101020000062b0100062f010006000c010102 +0000062e0100062c010006000c010102000006290105062c010006000c01010200000620 +0100061301000600040e060000000623010006030202010103030101020206080000060a +0d0100ff0026067401000608020201010301010102020603010006351301112c0100112f +12010c010102060000000629010006020100062d01000c01010206000000062901000602 +0100062d01000c01010206000000062c0100062e01000c01010206000000061f01000614 +0100040e00000624010006030202010103030101020206070000060b0d0100ff00260614 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006110100060702020101030101010202060301000635 +1301112a0104112d12010c0101020000062a0104062c010006000c0101020000062b0102 +062d010006000c0101020000062c0102062c010006000c01010200000620010006130100 +0600040e060000000623010006030202010103030101020206080000060a0d0100ff0026 +061300000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000611010006080202010103010101020206030100 +06351301115d12010c01010206000000065c01000c01010206000000065c01000c010102 +06000000065c01000c01010206000000061f010006140100040e00000624010006030202 +010103030101020206070000060b0d0100ff002606140000064c01000611010006070202 +01010301010102020603010006351301115d12010c0101020000065c010006000c010102 +0000065c010006000c0101020000065c010006000c010102000006200100061301000600 +040e060000000623010006030202010103030101020206080000060a0d0100ff00260613 +0000064c0100061101000608020201010301010102020603010006351301115d12010c01 +010206000000065c01000c01010206000000065c01000c01010206000000065c01000c01 +010206000000061f010006140100040e0000062401000603020201010303010102020607 +0000060b0d0100ff002606140000064c0100061101000607020201010301010102020603 +010006351301115d12010c0101020000065c010006000c0101020000065c010006000c01 +01020000065c010006000c010102000006200100061301000600040e0600000006230100 +06030202010103030101020206080000060a0d0100ff002606130000064c010006110100 +0608020201010301010102020603010006351301115d12010c01010206000000065c0100 +0c01010206000000065c01000c01010206000000065c01000c01010206000000061f0100 +06140100040e00000624010006030202010103030101020206070000060b0d0100ff0026 +06140000064c0100061101000607020201010301010102020603010006351301115d1201 +0c0101020000065c010006000c0101020000065c010006000c0101020000065c01000600 +0c010102000006200100061301000600040e060000000623010006030202010103030101 +020206080000060a0d0000ff002706130000064c01000611010006080202010103010101 +02020603010006351301125f0c0101020600000006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000c01010206000000 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +06000100060001000c010102060000000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +0600010006000100060001000600010006000100060001000c0101020600000006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +06000100060001000600010006000100060001000600010106140100040e000006240100 +0603020201010303010102020607000006ff06490000064c010006110100060702020101 +030101010202060301000635130012600c00010300000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +01000600010006000100060001000600010006000100060001000600010006000c000103 +000006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0100060001000600010006000c0001030000060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000c00010300000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100061301000600 +040e06000000062301000603020201010303010102020608000006ff0647000006120102 +061f01020613010006110100060802020101030101010202060301001036006301000063 +010000630100006301000022010006140100040e00000624010006030202010103030101 +02020607000006ff06490000061001000602010006200100061401000611010006070202 +01010301010102020603010010350f000063010000630100006301000063010000220100 +061301000600040e06000000062301000603020201010303010102020608000006ff0647 +000006110100060201000602010206020100060001010603010206030102060501000613 +01000611010006080202010103010101020206030100100108320f010063010000630100 +00630100006301000022010006140100040e000006240100060302020101030301010202 +0607000006ff064900000610010006050100060201000601010106010100060101000602 +010006010100060201000604010006140100061101000607020201010301010102020603 +0100100108320f010063010000630100006301000063010000220100061301000600040e +06000000062301000603020201010303010102020608000006ff06470000061101000609 +010006010100060201000601010006050100060201000604010006130100061101000608 +020201010301010102020603010010010815010408170f01006301000063010000630100 +006301000022010006140100040e00000624010006030202010103030101020206070000 +06ff06490000061001000606010306010100060201000601010006050104060401000614 +010006110100060702020101030101010202060301001001081501000802010008170f01 +000a0100001a01010004010000340100002c010000350100006301000063010000220100 +061301000600040e06000000062301000603020201010303010102020608000006ff0647 +000006110100060201000601010006020100060101000602010006010100060501000608 +010006130100061101000608020201010301010102020603010010010818010008180f01 +00250100003c0100002c01000035010000630100006301000022010006140100040e0000 +062401000603020201010303010102020607000006ff0649000006100100060201000601 +010006020100060101000602010006010100060201000601010006020100060401000614 +0100061101000607020201010301010102020603010010010818010008180f0100080102 +000301020003010200030102000401000004010200020100000001010003010200260100 +000701000002010000020102000301020003010200030102000201040002010200020100 +0000010100260100006301000063010000220100061301000600040e0600000006230100 +0603020201010303010102020608000006ff064700000612010206030103060101000602 +010006020102060301020605010006130100061101000608020201010301010102020603 +010010010818010008180f01000a01000002010000020100000101000002010000010100 +000201000001010400040100000201010001010000010100000201000025010000070100 +000201000001010000020100000101000002010000010100000201000001010000020100 +000301000003010000020100000101010001010000250100006301000063010000220100 +06140100040e0000062401000603020201010303010102020607000006ff06490000064c +0100061101000607020201010301010102020603010010010818010008180f01000a0100 +000201000002010000010100000501000002010000030100000601000002010000020100 +000101000002010000250100000701000002010000050100000101000009010000010100 +000701000007010000010100000201000025010000630100006301000022010006130100 +0600040e06000000062301000603020201010303010102020608000006ff06470000064c +0100061101000608020201010301010102020603010010010817010008190f01000a0100 +000201000002010000020102000201040003010000060100000201000002010000010104 +002501000008010000000100000301030002010200030103000201020004010000040103 +00010100000201000025010000630100006301000022010006140100040e000006240100 +0603020201010303010102020607000006ff06490000064c010006110100060702020101 +0301010102020603010010010817010008190f01000a0100000201000002010000050100 +000101000007010000060100000201000002010000010100002901000008010000000100 +000201000002010000050100000101000002010000050100000301000003010000020100 +000101000002010000250100006301000063010000220100061301000600040e06000000 +062301000603020201010303010102020608000006ff06470000064c0100061101000608 +020201010301010102020603010010010817010008190f01000a01000002010000020100 +000101000002010000010100000201000003010000060100000201000002010000010100 +000201000025010000090100000301000002010000010100000201000001010000020100 +000101000002010000030100000301000002010000010100000201000025010000630100 +006301000022010006140100040e00000624010006030202010103030101020206070000 +06ff06490000064c01000611010006070202010103010101020206030100100108320f01 +000a01000003010200030102000301020004010000060100000201000002010000020102 +002601000009010000040103000201020003010300020102000501010002010300010100 +0002010000250100006301000063010000220100061301000600040e0600000006230100 +0603020201010303010102020608000006ff06470000064c010006110100060802020101 +03010101020206030100100108320f01000a010000570100006301000063010000630100 +0022010006140100040e0000062401000603020201010303010102020607000006ff0649 +0000064c01000611010006070202010103010101020206030100100108320f0100070100 +000101000057010000630100006301000063010000220100061301000600040e06000000 +062301000603020201010303010102020608000006ff06470000064c0100061101000608 +0202010103010101020206030100100108320f0100080101005801000063010000630100 +006301000022010006140100040e00000624010006030202010103030101020206070000 +062200000663010006c00000064c01000611010006070202010103010101020206030100 +100108320f010063010000630100006301000063010000220100061301000600040e0600 +00000623010006030202010103030101020206080000062000000600000006230100063c +010006000100063e0102064b0100062f0000064c01000611010006080202010103010101 +020206030100100108320f01006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070000062000000600000006000000 +06220100063b01000600010006000100063f0100067d0000060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +061101000607020201010301010102020603010010010f34006301000063010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06080000061e00000602000006000000060b010206030102060901040602010206020100 +0600010106020101060001000624010006000a01010006000100060b0102060301020609 +010006000101060301020603010106000100060101000602010006040100060301020602 +010006000101060a01020602010006020100060101000600010106020100060001010603 +010206030102060301020603010206030102060201000600010106210000060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100061101000608020201010301010102020603010010000f3501ff01b70614 +0100040e00000624010006030202010103030101020206070000061e0000060400000600 +000006090100060201000601010006020100060a01000603010006020100060101010601 +01000601010006000100060001000622010006000a030100060001000609010006020100 +060101000602010006080101060101000601010006020100060101000601010106010100 +060201000604010006020100060201000601010106010100060801000602010006010100 +060201000601010106010100060101010601010006010100060201000601010006020100 +060101000602010006040100060201000602010006010101060101000682010006070202 +0101030101010202060301000e3600630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206080000061c00000606 +000006000000060c010006010100060e0100060301000602010006010100060501000600 +0100060001000621010006000a05010006000100060c010006010100060c010006050100 +0602010006010100060201000601010006020100060401000606010006010100060c0100 +060201000602010006000100060201000602010006010100060501000602010006010100 +060501000608010006020100060201000601010006020100068101000608020201010301 +01010202060301000e350b00006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070000061c01000608010006000100 +0608010306020102060b0100060301040601010006050100060001000600010006200000 +06000a070000060000000608010306020102060901000605010406010100060201000601 +010006020100060401000603010306010100060c01040603010006030100060201000601 +010006050104060201020603010206050100060201000602010006010100060201000682 +0100060702020101030101010202060301000e0109320b01006301000063010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06080000061c01000606010006000100060801000602010006050100060a010006030100 +060501000605010006000100060001000621000006000a05000006000000060801000602 +010006050100060801000605010006050100060201000601010006020100060401000602 +01000602010006010100060c010006060100060001000602010006020100060101000605 +010006090100060501000604010006020100060201000601010006020100068101000608 +02020101030101010202060301000e0109320b0100630100006301000063010000630100 +0022010006140100040e00000624010006030202010103030101020206070000061e0100 +060401000600010006090100060201000601010006020100060a01000603010006020100 +060101000605010006000100060001000622000006000a03000006000000060901000602 +010006010100060201000608010006050100060201000601010006010101060101000601 +010106040100060201000602010006010100060c01000602010006010100060201000601 +010106010100060101000605010006020100060101000602010006010100060201000604 +010006020100060201000601010006020100068201000607020201010301010102020603 +01000e010916010209180b01006301000063010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206080000061e010006020100 +06000100060b010306020102060c01010602010206020100060501000600010006000100 +0623000006000a01000006000000060b0103060201020609010006060102060301010600 +01000602010106000100060401000603010306010100060d010206020100060201000601 +010006000101060201000606010206030102060301020605010006030102060201000602 +010006810100060802020101030101010202060301000e01091501000902010009170b01 +000701000016010000420100000701000006010200100100000c01000030010000630100 +006301000022010006140100040e00000624010006030202010103030101020206070000 +062001000600010006000100065f00000600000006000000063201000632010006b70100 +060702020101030101010202060301000e01091501000902010009170b0100070100005a +0100000701000008010000100100000c0100003001000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206080000062001000600 +01000661000006000000062f0100060201000632010006b6010006080202010103010101 +0202060301000e01091501000902010009170b0100070100000101000003010200020100 +00000101000301020002010000000101003b010000070100000001010005010000030102 +000301020002010000010100000301020002010000000101000301020002010000000101 +00030101000001000017010000630100006301000022010006140100040e000006240100 +060302020101030301010202060700000622010006630000063101020633010006b70100 +060702020101030101010202060301000e010916010209180b0100070100000001000003 +0100000201000001010100010100000401000002010100010100003a0100000701010001 +010000040100000201000002010000010100000201000001010000000100000301000002 +010000010101000101000001010000020100000101010001010000010100000101010017 +0100006301000063010000220100061301000600040e0600000006230100060302020101 +0303010102020608000006ff06a80100060802020101030101010202060301000e010915 +01000902010009170b01000701010008010000010100000801000002010000020100003a +010000070100000201000004010000060100000101000005010100040100000201000001 +010000020100000101000002010000010100000501000002010000170100006301000063 +01000022010006140100040e0000062401000603020201010303010102020607000006ff +06aa0100060702020101030101010202060301000e01091501000902010009170b010007 +01010005010300010100000801000002010000020100003a010000070100000201000004 +010000030103000101000005010100040104000101000002010000010104000101000005 +01000002010000170100006301000063010000220100061301000600040e060000000623 +01000603020201010303010102020608000006ff06a80100060802020101030101010202 +060301000e01091501000902010009170b01000701000000010000030100000201000001 +0100000801000002010000020100003a0100000701000002010000040100000201000002 +010000010100000501000000010000030100000501000002010000010100000501000005 +0100000201000017010000630100006301000022010006140100040e0000062401000603 +020201010303010102020607000006ff06aa010006070202010103010101020206030100 +0e010916010209180b010007010000010100000201000002010000010100000801000002 +010000020100003a01000007010100010100000401000002010000020100000101000002 +010000010100000101000002010000020100000101010001010000010100000201000001 +0100000501000001010100170100006301000063010000220100061301000600040e0600 +0000062301000603020201010303010102020608000006ff06a801000608020201010301 +01010202060301000e0109320b0100070100000201000002010300010100000801000002 +010000020100003a01000007010000000101000501000003010300020102000201000002 +010000020102000201000000010100030102000201000006010100000100001701000063 +0100006301000022010006140100040e0000062401000603020201010303010102020607 +000006ff06aa0100060702020101030101010202060301000e0109320b0100630100004a +010000170100006301000063010000220100061301000600040e06000000062301000603 +020201010303010102020608000006ff06a8010006080202010103010101020206030100 +0e0109320b01006301000046010000020100001701000063010000630100002201000614 +0100040e0000062401000603020201010303010102020607000006ff06aa010006070202 +0101030101010202060301000e0109320b01006301000047010200180100006301000063 +010000220100061301000600040e06000000062301000603020201010303010102020608 +000006ff06a80100060802020101030101010202060301000e0109320b01006301000063 +010000630100006301000022010006140100040e00000624010006030202010103030101 +02020607000006ff06aa0100060702020101030101010202060301000e0109320b010063 +010000630100006301000063010000220100061301000600040e06000000062301000603 +020201010303010102020608000006ff06a8010006080202010103010101020206030100 +0e010b34006301000063010000630100006301000022010006140100040e000006240100 +060302020101030301010202060700000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +0600010006000100060702020101030101010202060301000e000b3501ff01b706130100 +0600040e0600000006230100060302020101030301010202060801000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +06000100060001000600010006000100060802020101030101010202060301000c360063 +01000063010000630100006301000022010006140100040e000006240100060302020101 +03030101020206ff06bc02020101030101010202060301000c3501000063010000630100 +006301000063010000220100061301000600040e06000000062301000603020201010303 +0101020206ff06bc02020101030101010202060301000c01013400630100006301000063 +0100006301000022010006140100040e00000624010006030202010103030101020206ff +06bc02020101030101010202060301000c01013400630100006301000063010000630100 +00220100061301000600040e060000000623010006030202010103030101020206ff06bc +02020101030101010202060301000c0101160002011a0063010000630100006301000063 +01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 +0101030101010202060301000c010115000001020000011900070100000e010000140100 +00340100002b010200340100006301000063010000220100061301000600040e06000000 +0623010006030202010103030101020206ff06bc02020101030101010202060301000c01 +0115000001020000011900070100000e0100004a0100002d010000340100006301000063 +01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 +0101030101010202060301000c0101150000010200000119000701000001010000030102 +000201040002010200020100000001010003010200020100000001010003010200260100 +000701000002010000010100000001010002010000000101000301020003010200050100 +00030102002d0100006301000063010000220100061301000600040e0600000006230100 +06030202010103030101020206ff06bc02020101030101010202060301000c0101150000 +010200000119000701000000010000030100000201000003010000030100000201000001 +010100010100000401000002010100010100000101000002010000250100000701000002 +010000010101000101000001010100010100000101000002010000010100000201000004 +01000002010000020100002c010000630100006301000022010006140100040e00000624 +010006030202010103030101020206ff06bc02020101030101010202060301000c010116 +000301190007010100080100000301000007010000010100000801000002010000020100 +000501000025010000070100000201000001010000020100000101000002010000010100 +000901000004010000060100002c0100006301000063010000220100061301000600040e +060000000623010006030202010103030101020206ff06bc020201010301010102020603 +01000c010119000001190007010100050103000301000004010300010100000801000002 +010000020100000201030025010000070100000201000001010000020100000101000002 +010000020102000301030004010000030103002c01000063010000630100002201000614 +0100040e00000624010006030202010103030101020206ff06a101000600010006000100 +060001000600010006000100060001000600010006000100060902020101030101010202 +060301000c0101180000011a000701000000010000030100000201000003010000030100 +000201000001010000080100000201000002010000010100000201000025010000070100 +000201000001010000020100000101000002010000050100000101000002010000040100 +0002010000020100002c0100006301000063010000220100061301000600040e06000000 +0623010006030202010103030101020206ff06a001000600010006000100060001000600 +010006000100060001000600010006000100060000000608020201010301010102020603 +01000c0101150002011b0007010000010100000201000002010000030100000301000002 +010000010100000801000002010000020100000101000002010000250100000701000001 +010100010101000101000001010100010100000101000002010000010100000201000004 +01000002010000020100002c010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070dff0d9606020100060601000606000006090202 +0101030101010202060301000c0101340007010000020100000201030004010100020103 +000101000008010000020100000201000002010300250100000801010000010000010100 +00000101000201000000010100030102000301030004010000030103002c010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06070dff0d95000006010100060600000608000006080202010103010101020206030100 +0c01013400630100000e010000050100004c010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070d0100ff00940602010006060100 +06060000060902020101030101010202060301000c01013400630100000e010000050100 +004c0100006301000063010000220100061301000600040e060000000623010006030202 +010103030101020206070d0100580101006a010100cc0601010006060000060001000606 +0000060802020101030101010202060301000c01013400630100000e010000050100004c +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d0100570100006e010000cb0602010006040000060201000604000006090202 +0101030101010202060301000c0101340063010000630100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d01000f0103 +00180102002701000020010200050100002e01000013010000cb06010100060400000602 +010006060000060802020101030101010202060301000c01013400630100006301000063 +0100006301000022010006140100040e0000062401000603020201010303010102020607 +0d01000f01000002010000160100000201000026010000220100003501000013010000cb +06020100060400000602010006040000060902020101030101010202060301000c010134 +0063010000630100006301000063010000220100061301000600040e0600000006230100 +06030202010103030101020206070d01000f010000020100000201020002010000020100 +000c01000003010100200100000401020002010000000101000201000000010100030102 +000501000003010200090100000201000002010200030102000301020003010200020104 +0002010200020100000001010004010000cb060101000604000006040100060400000608 +02020101030101010202060301000c0001ff01ed06140100040e00000624010006030202 +010103030101020206070d01000f01000002010000010100000201000001010000020100 +000c01000003010100200100000301000002010000010101000101000001010100010100 +000101000002010000040100000501000009010000020100000101000002010000010100 +000201000001010000020100000101000002010000030100000301000002010000010101 +000101000003010000cb0602010006020000060601000602000006090202010103010101 +0202060301000e360063010000630100006301000063010000220100061301000600040e +060000000623010006030202010103030101020206070d01000f01030002010000020100 +000101000000010000000100000b01000025010100080100000101000002010000010100 +000201000001010000020100000401000005010000090100000201000005010000010100 +0009010000010100000701000007010000010100000201000004010100c9060101000602 +00000606010006040000060802020101030101010202060301000e350b00006301000063 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d01000f0100000101000002010000020100000101000000010000000100000a +010000280100000401030001010000020100000101000002010000010104000401000005 +0100000a0100000001000003010300020102000301030002010200040100000401030001 +0100000201000003010000cb060201000602000006060100060200000609020201010301 +01010202060301000e0109320b0100630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206070d01000f01000002 +010000010100000201000001010000000100000001000009010000290100000301000002 +010000010100000201000001010000020100000101000008010000050100000a01000000 +010000020100000201000005010000010100000201000005010000030100000301000002 +010000010100000201000003010000cb0601010006020000060801000602000006080202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +010006140100040e00000624010006030202010103030101020206070d01000f01000002 +010000010100000201000001010000000100000001000008010000070101002001000003 +010000020100000101000002010000010100000201000001010000020100000401000005 +010000040101000401000003010000020100000101000002010000010100000201000001 +01000002010000030100000301000002010000010100000201000003010000cb06020100 +06000000060a010006000000060902020101030101010202060301000e01091301000904 +010209150b010063010000630100006301000063010000220100061301000600040e0600 +00000623010006030202010103030101020206070d01000f010000020100000201020003 +010000000100000901040003010100200100000401030001010000020100000101000002 +010000020102000501000005010000040101000401000004010300020102000301030002 +0102000501010002010300010100000201000003010000cb060101000600000006000100 +060001000600010006000100060001000600010006020000060802020101030101010202 +060301000e0109110102090301000902010009140b010063010000320102002d01000063 +0100006301000022010006140100040e0000062401000603020201010303010102020607 +0d010057010000300100003c010000cb0602010006000100060001000600010006000100 +06000100060001000600010006000000060902020101030101010202060301000e010913 +0100090301000902010009140b010063010000340100002d010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206070d010058 +0101002c0101003b010100cc060101000610000006080202010103010101020206030100 +0e0109130100090301000902010009140b01000701010000010000030102000301010000 +010000010100000001010002010000020100000201020034010000070100000001010003 +010200020100000001010002010000000101000201010000010000030102000501000002 +0101000001000026010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206070d0100ff0094060201000600000006000000060000000600 +000006000000060000000600000006000000060902020101030101010202060301000e01 +09130100090301000902010009140b010007010000000100000001000001010000020100 +000101000001010100010101000101000001010000020100000101000002010000330100 +000701010001010000010100000201000001010100010100000101010001010000010100 +000001000000010000010100000201000004010000020100000001000000010000250100 +006301000063010000220100061301000600000006000000060000000600000006000000 +060000000600000006000000060000000623010006030202010103030101020206070d01 +00ff00940601010006000000060000000600000006000000060000000600000006000000 +0600010006000000060802020101030101010202060301000e0109130100090301000902 +010009140b01000701000000010000000100000501000001010000020100000101000002 +010000010100000201000001010000370100000701000002010000010100000201000001 +010000050100000501000000010000000100000501000004010000020100000001000000 +010000250100006301000063010000220100061401000600000006000000060000000600 +000006000000060000000600000006000000062401000603020201010303010102020607 +0d0100ff00940602010006000000060a0100060000000609020201010301010102020603 +01000e0109130100090301000902010009140b0100070100000001000000010000020103 +000101000002010000010100000201000001010000020100000201020034010000070100 +000201000001010000020100000101000005010000050100000001000000010000020103 +000401000002010000000100000001000025010000630100006301000022010006130100 +06000000060c0100060000000623010006030202010103030101020206070d0100ff0094 +0601010006000000060c010006000000060802020101030101010202060301000e010913 +0100090301000902010009140b0100070100000001000000010000010100000201000001 +010000020100000101000002010000010100000201000005010000330100000701000002 +010000010100000201000001010000050100000501000000010000000100000101000002 +010000040100000201000000010000000100002501000063010000630100002201000614 +010006000000060a0100060000000624010006030202010103030101020206070d010058 +01010063010100d30602010006000000060a010006000000060902020101030101010202 +060301000e01091101040902010209150b01000701000000010000000100000101000002 +010000010100000101010001010000020100000101000001010100010100000201000033 +010000070100000201000001010000020100000101000005010000050100000001000000 +010000010100000201000004010000020100000001000000010000250100006301000063 +0100002201000613010006000000060c0100060000000623010006030202010103030101 +020206070d01005701000067010000d20601010006000000060c01000600000006080202 +0101030101010202060301000e0109320b01000701000000010000000100000201030002 +010100000100000101000002010000020101000001000002010200340100000701000002 +010000020102000201000005010000050100000001000000010000020103000401000002 +01000000010000000100002501000063010000630100002201000614010006000000060a +0100060000000624010006030202010103030101020206070d01000f0103001801020027 +0100000d010000130100002e01000013010000d20602010006000000060a010006000000 +060902020101030101010202060301000e0109320b010019010000480100006301000063 +010000630100002201000613010006000000060c01000600000006230100060302020101 +03030101020206070d01000f010000020100001601000002010000260100005201000013 +010000d20601010006000000060c01000600000006080202010103010101020206030100 +0e0109320b01001501000002010000480100006301000063010000630100002201000614 +010006000000060a0100060000000624010006030202010103030101020206070d01000f +010000020100000201020002010000020100000c01000003010100200100000401020003 +010200030102000301020003010200090100000201000002010200030102000301020003 +0102000201040002010200020100000001010004010000d20602010006000000060a0100 +06000000060902020101030101010202060301000e0109320b0100160102004901000063 +01000063010000630100002201000613010006000000060c010006000000062301000603 +0202010103030101020206070d01000f0100000201000001010000020100000101000002 +0100000c0100000301010020010000030100000201000004010000020100000201000001 +010000020100000401000009010000020100000101000002010000010100000201000001 +010000020100000101000002010000030100000301000002010000010101000101000003 +010000d20601010006000000060c01000600000006080202010103010101020206030100 +0e0109320b0100630100006301000063010000630100002201000614010006000000060a +0100060000000624010006030202010103030101020206070d01000f0103000201000002 +0100000101000000010000000100000a0101002501010004010000080100000201000005 +010000080100000901000002010000050100000101000009010000010100000701000007 +010000010100000201000004010100d00602010006000000060a01000600000006090202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +01000613010006000000060c010006000000062301000603020201010303010102020607 +0d01000f0100000101000002010000020100000101000000010000000100000c01000026 +01000003010000080100000201000005010000080100000a010000000100000301030002 +01020003010300020102000401000004010300010100000201000003010000d206010100 +06000000060c010006000000060802020101030101010202060301000e010b3400630100 +006301000063010000630100002201000614010006000000060a01000600000006240100 +06030202010103030101020206070d01000f010000020100000101000002010000010100 +0000010000000100000c0100002601000003010000080100000201000005010000080100 +000a01000000010000020100000201000005010000010100000201000005010000030100 +000301000002010000010100000201000003010000d20602010006000000060a01000600 +0000060902020101030101010202060301000e000b3501ff01b7060c0104060101000600 +0000060c0100060000000623010006030202010103030101020206070d01000f01000002 +010000010100000201000001010000000100000001000008010000020100000301010020 +010000030100000201000004010000020100000201000001010000020100000401000004 +010100040100000301000002010000010100000201000001010000020100000101000002 +010000030100000301000002010000010100000201000003010000d20601010006000000 +060c010006000000060802020101030101010202060301000e3600630100006301000063 +01000063010000220100060c0100060201000602010006000000060a0100060000000624 +010006030202010103030101020206070d01000f01000002010000020102000301000000 +0100000a0102000401010020010000040102000501000003010200030102000501000004 +010100040100000401030002010200030103000201020005010100020103000101000002 +01000003010000d20602010006000000060a010006000000060902020101030101010202 +060301000e350b0000630100006301000063010000630100002201000610010006010100 +060000000600010006000100060001000600010006000100060001000600010006000000 +0623010006030202010103030101020206070d010057010000290100003c010000d20601 +010006000000060c010006000000060802020101030101010202060301000e0109320b01 +0063010000630100006301000063010000220100060f0100060301000600000006000000 +060000000600000006000000060000000600000006000000062401000603020201010303 +0101020206070d010058010100250101003b010100d30602010006000000060a01000600 +0000060902020101030101010202060301000e0109320b01006301000063010000630100 +0063010000220100060f01000602010006000000060c0100060000000623010006030202 +010103030101020206070d0100ff00940601010006000000060c01000600000006080202 +0101030101010202060301000e01091301000905010009160b0100630100006301000063 +01000063010000220100060f01000603010006000000060a010006000000062401000603 +0202010103030101020206070d0100ff00940602010006000000060a0100060000000609 +02020101030101010202060301000e01091101020903010209160b010016010200050100 +00420100002b010200340100006301000063010000220100060e01000603010006000000 +060c0100060000000623010006030202010103030101020206070d0100ff009406010100 +06000000060c010006000000060802020101030101010202060301000e01091301000905 +010009160b010018010000490100002d010000340100006301000063010000220100060e +01000604010006000000060a010006000000062401000603020201010303010102020607 +0d0100ff00940602010006000000060a0100060000000609020201010301010102020603 +01000e01091301000905010009160b010007010100000100000301020005010000030102 +0002010000000101003b0100000701000002010000010100000001010002010000000101 +00030102000301020005010000030102002d0100006301000063010000220100060e0100 +0603010006000000060c0100060000000623010006030202010103030101020206070d01 +005801010055010100e10601010006000000060c01000600000006080202010103010101 +0202060301000e01091301000905010009160b0100070100000001000000010000010100 +0002010000040100000501000002010100010100003a0100000701000002010000010101 +000101000001010100010100000101000002010000010100000201000004010000020100 +00020100002c01000063010000630100002201000614010006000000060a010006000000 +0624010006030202010103030101020206070d01005701000059010000e0060201000600 +0000060a010006000000060902020101030101010202060301000e010913010009050100 +09160b010007010000000100000001000005010000040100000501000002010000020100 +003a01000007010000020100000101000002010000010100000201000001010000090100 +0004010000060100002c01000063010000630100002201000613010006000000060c0100 +060000000623010006030202010103030101020206070d01000f0103001b010000260100 +004401000013010000e00601010006000000060c01000600000006080202010103010101 +0202060301000e01091301000905010009160b0100070100000001000000010000020103 +00040100000501000002010000020100003a010000070100000201000001010000020100 +000101000002010000020102000301030004010000030103002c01000063010000630100 +002201000614010006000000060a01000600000006240100060302020101030301010202 +06070d01000f0100000201000019010100260100004401000013010000e0060201000600 +0000060a010006000000060902020101030101010202060301000e010913010009050100 +09160b010007010000000100000001000001010000020100000401000005010000020100 +00020100003a010000070100000201000001010000020100000101000002010000050100 +0001010000020100000401000002010000020100002c0100006301000063010000220100 +0613010006000000060c0100060000000623010006030202010103030101020206070d01 +000f010000020100000201020002010000020100000a0100000001000003010100200100 +000401020002010000020100000201020009010000020100000201020003010200030102 +00030102000201040002010200020100000001010004010000e00601010006000000060c +010006000000060802020101030101010202060301000e01091101040901010409140b01 +000701000000010000000100000101000002010000040100000501000002010000020100 +003a01000007010000010101000101010001010000010101000101000001010000020100 +0001010000020100000401000002010000020100002c0100006301000063010000220100 +0614010006000000060a0100060000000624010006030202010103030101020206070d01 +000f01000002010000010100000201000001010000020100000901000001010000030101 +002001000003010000020100000101000002010000010100000201000008010000020100 +000101000002010000010100000201000001010000020100000101000002010000030100 +000301000002010000010101000101000003010000e00602010006000000060a01000600 +0000060902020101030101010202060301000e0109320b01000701000000010000000100 +0002010300040100000501000002010000020100003a0100000801010000010000010100 +00000101000201000000010100030102000301030004010000030103002c010000630100 +00630100002201000613010006000000060c010006000000062301000603020201010303 +0101020206070d01000f0103000201000002010000010100000001000000010000080100 +000201000024010100040100000201000001010000020100000501000008010000020100 +000501000001010000090100000101000007010000070100000101000002010000040101 +00de0601010006000000060c010006000000060802020101030101010202060301000e01 +09320b0100630100000e010000050100004c010000630100006301000022010006140100 +06000000060a0100060000000624010006030202010103030101020206070d01000f0100 +000101000002010000020100000101000000010000000100000801000002010000260100 +000301040002010000000100000301030009010000000100000301030002010200030103 +00020102000401000004010300010100000201000003010000e00602010006000000060a +010006000000060902020101030101010202060301000e0109320b0100630100000e0100 +00050100004c010000630100006301000022010006130100060000000600010006000100 +060001000600010006000100060001000600010006000000062301000603020201010303 +0101020206070d01000f0100000201000001010000020100000101000000010000000100 +000801050025010000030100000601000000010000020100000201000009010000000100 +000201000002010000050100000101000002010000050100000301000003010000020100 +00010100000201000003010000e00601010006000000060c010006000000060802020101 +030101010202060301000e0109320b0100630100000e010000050100004c010000630100 +006301000022010006140100060001000600010006000100060001000600010006000100 +06000100060000000624010006030202010103030101020206070d01000f010000020100 +0001010000020100000101000000010000000100000c0100000301010020010000030100 +000201000003010000030100000201000003010100040100000301000002010000010100 +000201000001010000020100000101000002010000030100000301000002010000010100 +000201000003010000e00602010006000000060a01000600000006090202010103010101 +0202060301000e0109320b01006301000063010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206070d01000f010000020100 +000201020003010000000100000d01000003010100200100000401020004010000040103 +000301010004010000040103000201020003010300020102000501010002010300010100 +000201000003010000e00601010006000000060c01000600000006080202010103010101 +0202060301000e0109320b01006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070d0100570100001b0100003c0100 +00e00602010006000000060a010006000000060902020101030101010202060301000e01 +0b340063010000630100006301000063010000220100061301000600040e060000000623 +010006030202010103030101020206070d010058010100170101003b010100e106010100 +06000000060c010006000000060802020101030101010202060301000e000b3501ff01b7 +06140100040e00000624010006030202010103030101020206070d0100ff009406020100 +06000000060a010006000000060902020101030101010202060301000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600006301000063 +0100006301000063010000220100061301000600040e0600000006230100060302020101 +03030101020206070d0100ff00940601010006000000060c010006000000060802020101 +030101010202060301000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000100006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070d0100ff00940602010006000000 +060a01000600000006090202010103010101020206030100060000000632010006000063 +010000630100006301000063010000220100061301000600040e06000000062301000603 +0202010103030101020206070d0100000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000020601010006000000 +060c01000600000006080202010103010101020206030100000006340100006301000063 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d01045801010478010104bc00010602010006000000060a0100060000000609 +020201010301010102020603010006000000061301000604010206150100060000630100 +00630100006301000063010000220100061301000600040e060000000623010006030202 +010103030101020206070d01000004560100047c010004ba010000010601010006000000 +060c01000600000006080202010103010101020206030100000006120102060301000602 +010006150100001f01000042010000120100001701020034010000630100006301000022 +010006140100040e00000624010006030202010103030101020206070d01040f01030417 +01040426010004060100041a010104040100043c01000413010004bb0001060201000600 +0000060a0100060000000609020201010301010102020603010006000000061301000603 +010006020100061401000600006301000012010000190100003401000063010000630100 +00220100061301000600040e060000000623010006030202010103030101020206070d01 +0000040e01000402010004160100040201000426010004210100044401000413010004ba +010000010601010006000000060c01000600000006080202010103010101020206030100 +000006140100060301000602010006150100000701010000010000030102000201000000 +01010003010200030102003b010000080102000301010000010000020102000201000000 +010100020100000001010005010000030102000201000000010100260100006301000063 +01000022010006140100040e00000624010006030202010103030101020206070d01040f +010004020100040201020402010004020100040c01000403010104200100040401020403 +010204030102040301020404010004040102040201000400010104030102040901000402 +010004020102040301020403010204030102040201040402010204020100040001010404 +010004bb00010602010006000000060a0100060000000609020201010301010102020603 +010006000000061301000606010006150100060000070100000001000000010000010100 +000201000001010100010100000401000002010000020100003a01000007010000020100 +000101000001010100010100000201000001010100010100000101010001010000040100 +000201000002010000010101000101000025010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206070d010000040e01000402 +010004010100040201000401010004020100040b01000404010104200100040601000402 +010004020100040101000402010004010100040201000401010404040100040201010401 +010004010100040201000408010004020100040101000402010004010100040201000401 +010004020100040101000402010004030100040301000402010004010101040101000403 +010004ba010000010601010006000000060c010006000000060802020101030101010202 +060301000000061401000605010006170100000701000000010000000100000501000001 +01000008010000060100003a010000070100000201000001010000020100000101000002 +010000010100000201000001010000020100000401000006010000010100000201000025 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d01040f01030402010004020100040101000400010004000100040b01000425 +010104070100040201000402010004010100040501000402010004030100040601000402 +010004020100040101000402010004080100040201000405010004010100040901000401 +0100040701000407010004010100040201000404010104b900010602010006000000060a +010006000000060902020101030101010202060301000600000006130100060401000617 +0100060000070100000001000000010000020103000101000008010000030103003a0100 +000701000002010000010100000201000001010400010100000201000001010000020100 +000401000003010300010100000201000025010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206070d010000040e01000401 +01000402010004020100040101000400010004000100040b010004270100040601000402 +010004020100040201020402010404030100040601000402010004020100040101040409 +010004000100040301030402010204030103040201020404010004040103040101000402 +01000403010004ba010000010601010006000000060c0100060000000608020201010301 +010102020603010000000614010006030100060201000615010000070100000001000000 +0100000101000002010000010100000801000002010000020100003a0100000701000002 +010000010100000201000001010000050100000201000001010000020100000401000002 +01000002010000010100000201000025010000630100006301000022010006140100040e +00000624010006030202010103030101020206070d01040f010004020100040101000402 +0100040101000400010004000100040a0100042801000406010004020100040201000405 +0100040101000407010004060100040201000402010004010100040d0100040001000402 +010004020100040501000401010004020100040501000403010004030100040201000401 +0100040201000403010004bb00010602010006000000060a010006000000060902020101 +030101010202060301000600000006110104060101040614010006000007010000000100 +00000100000101000002010000010100000801000002010000020100003a010000070100 +000201000001010000010101000101000002010000010100000201000001010100010100 +000401000002010000020100000101000002010000250100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d010000040e +0100040201000401010004020100040101000400010004000100040a0100040501010420 +010004060100040201000402010004010100040201000401010004020100040301000406 +010004020100040201000401010004020100040301010404010004030100040201000401 +010004020100040101000402010004010100040201000403010004030100040201000401 +0100040201000403010004ba010000010601010006000000060c01000600000006080202 +010103010101020206030100000006340100000701000000010000000100000201030001 +01000008010000030103003a010000080102000301010000010000020102000201000002 +010000010100000001010005010000030103000101000002010000250100006301000063 +01000022010006140100040e00000624010006030202010103030101020206070d01040f +010004020100040201020403010004000100040b01000405010104200100040601000403 +010204030102040301020404010004060100040201000402010004020102040401010404 +010004040103040201020403010304020102040501010402010304010100040201000403 +010004bb00010602010006000000060a0100060000000609020201010301010102020603 +0100060000000632010006000063010000230100003e0100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100000456 +01000406010004360100043c010004ba010000010601010006000000060c010006000000 +060802020101030101010202060301000000063401000063010000230100003e01000063 +0100006301000022010006140100040e0000062401000603020201010303010102020607 +0d0104580101040101000401010004340101043b010104bc00010602010006000000060a +010006000000060902020101030101010202060301000600000006320100060000630100 +00230100003e0100006301000063010000220100061301000600040e0600000006230100 +06030202010103030101020206070d010000045c010104ff043101000001060101000600 +0000060c0100060000000608020201010301010102020603010000000634010000630100 +0063010000630100006301000022010006140100040e0000062401000603020201010303 +0101020206070d0104ff049200010602010006000000060a010006000000060902020101 +030101010202060301000600000006320100060000630100006301000063010000630100 +00220100061301000600040e060000000623010006030202010103030101020206070d01 +000004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010000010601010006000000060c01000600000006080202 +010103010101020206030100000006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010000630100006301000063010000630100002201000614 +0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 +0000060a0100060000000609020201010301010102020603010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0100060001000600010006000100060001000600010006000100060001ff01b706130100 +0600040e060000000623010006030202010103030101020206070d010058010100710101 +00c50601010006000000060c010006000000060802020101030101010202060301000e36 +006301000063010000630100006301000022010006140100040e00000624010006030202 +010103030101020206070d01005701000075010000c40602010006000000060a01000600 +0000060902020101030101010202060301000e350b000063010000630100006301000063 +010000220100061301000600040e06000000062301000603020201010303010102020607 +0d01000f0103001901000004010200200100000d01000009010000170100002d01000013 +010000c40601010006000000060c01000600000006080202010103010101020206030100 +0e0109320b01006301000063010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d01000f01000002010000170101000301000002 +0100001f01000018010000170100002d01000013010000c40602010006000000060a0100 +06000000060902020101030101010202060301000e0109320b0100630100006301000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +020206070d01000f01000002010000020102000201000002010000080100000001000003 +010000020100000301010019010000030100000001010003010200030102000201000000 +010100030102000201000000010100030101000001000008010000020100000201020003 +01020003010200030102000201040002010200020100000001010004010000c406010100 +06000000060c010006000000060802020101030101010202060301000e01091301000904 +010209150b01006301000063010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d01000f01000002010000010100000201000001 +010000020100000a01000003010000020100000301010019010000030101000101000004 +010000020100000201000001010100010100000101000002010000010101000101000001 +010000010101000801000002010000010100000201000001010000020100000101000002 +0100000101000002010000030100000301000002010000010101000101000003010000c4 +0602010006000000060a010006000000060902020101030101010202060301000e010911 +0102090301000902010009140b0100170100004a01000007010000300102002601000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +020206070d01000f01030002010000020100000101000000010000000100000a01000004 +0102001e0101000401000008010000020100000501000002010000050100000101000005 +010000020100000801000002010000050100000101000009010000010100000701000007 +010000010100000201000004010100c20601010006000000060c01000600000006080202 +0101030101010202060301000e01091301000907010009140b0100170100004a01000007 +0100003201000026010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206070d01000f0100000101000002010000020100000101000000 +010000000100000a01000003010000020100001f01000003010000080100000201000005 +010000020100000201030001010000050100000201000009010000000100000301030002 +01020003010300020102000401000004010300010100000201000003010000c406020100 +06000000060a010006000000060902020101030101010202060301000e01091301000907 +010009140b01000701010000010000030102000201040002010200420100000701000000 +010100020100000001010003010200020101000001000002010100000100000301020002 +010000000101000501000003010200020100000001010018010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206070d01000f +0100000201000001010000020100000101000000010000000100000a0100000301000002 +0100001f0100000301000008010000020100000501000002010000010100000201000001 +010000050100000201000009010000000100000201000002010000050100000101000002 +01000005010000030100000301000002010000010100000201000003010000c406010100 +06000000060c010006000000060802020101030101010202060301000e01091301000905 +010109150b01000701000000010000000100000101000002010000030100000301000002 +010000410100000701010001010000010101000101000001010000020100000101000000 +010000000100000101000000010000000100000101000002010000010101000101000004 +010000020100000201000001010100010100001701000063010000630100002201000614 +0100040e00000624010006030202010103030101020206070d01000f0100000201000001 +010000020100000101000000010000000100000a01000003010000020100000301010019 +010000030100000801000002010000020100000101000002010000010100000201000001 +010000050100000101010003010100040100000301000002010000010100000201000001 +010000020100000101000002010000030100000301000002010000010100000201000003 +010000c40602010006000000060a01000600000006090202010103010101020206030100 +0e01091301000907010009140b0100070100000001000000010000050100000301000003 +010000450100000701000002010000010100000501000002010000010100000001000000 +010000010100000001000000010000050100000101000002010000040100000601000001 +01000002010000170100006301000063010000220100061301000600040e060000000623 +010006030202010103030101020206070d01000f01000002010000020102000301000000 +010000090104000201020004010100190100000301000008010000030102000201000002 +010000020103000101000006010100000100000301010004010000040103000201020003 +010300020102000501010002010300010100000201000003010000c40601010006000000 +060c010006000000060802020101030101010202060301000e0109130100090701000914 +0b0100070100000001000000010000020103000301000004010200420100000701000002 +010000010100000501000002010000010100000001000000010000010100000001000000 +010000020103000101000002010000040100000301030001010000020100001701000063 +0100006301000022010006140100040e0000062401000603020201010303010102020607 +0d010057010000370100003c010000c40602010006000000060a01000600000006090202 +0101030101010202060301000e0109130100090301000902010009140b01000701000000 +010000000100000101000002010000030100000701000041010000070100000201000001 +010000050100000201000001010000000100000001000001010000000100000001000001 +010000020100000101000002010000040100000201000002010000010100000201000017 +0100006301000063010000220100061301000600040e0600000006230100060302020101 +03030101020206070d010058010100330101003b010100c50601010006000000060c0100 +06000000060802020101030101010202060301000e01091101040902010209150b010007 +010000000100000001000001010000020100000301000003010000020100004101000007 +010100010100000101000005010000020100000101000000010000000100000101000000 +010000000100000101000002010000010101000101000004010000020100000201000001 +0100000201000017010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206070d0100ff00940602010006000000060a0100060000000609 +02020101030101010202060301000e0109320b0100070100000001000000010000020103 +000401010002010200420100000701000000010100020100000601020002010000000100 +000001000001010000000100000001000002010300010100000001010005010000030103 +000101000002010000170100006301000063010000220100061301000600040e06000000 +0623010006030202010103030101020206070d0100ff00940601010006000000060c0100 +06000000060802020101030101010202060301000e0109320b0100630100003101000030 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d0100ff00940602010006000000060a01000600000006090202010103010101 +0202060301000e0109320b01006301000031010000300100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +0601010006000000060c010006000000060802020101030101010202060301000e010932 +0b0100630100003101000030010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d01005801010071010100c50602010006000000 +060a010006000000060902020101030101010202060301000e0109320b01006301000063 +0100006301000063010000220100061301000600040e0600000006230100060302020101 +03030101020206070d01005701000075010000c40601010006000000060c010006000000 +060802020101030101010202060301000e0109320b010063010000630100006301000063 +01000022010006140100040e00000624010006030202010103030101020206070d01000f +0103001801020004010100200100006001000013010000c40602010006000000060a0100 +06000000060902020101030101010202060301000e010b34006301000063010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06070d01000f01000002010000160100000201000002010000010100001f010000600100 +0013010000c40601010006000000060c0100060000000608020201010301010102020603 +01000e000b3501ff01b706140100040e0000062401000603020201010303010102020607 +0d01000f010000020100000201020002010000020100000c010000020100000101000003 +010100190100000401020002010000020100000201020003010200020100000001010002 +010000000101000301020009010000020100000201020003010200030102000301020002 +01040002010200020100000001010004010000c40602010006000000060a010006000000 +060902020101030101010202060301000e36006301000063010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206070d01000f +01000002010000010100000201000001010000020100000c010000020100000101000003 +010100190100000301000002010000010100000201000001010000020100000101000002 +010000010101000101000001010100010100000101000002010000080100000201000001 +010000020100000101000002010000010100000201000001010000020100000301000003 +01000002010000010101000101000003010000c40601010006000000060c010006000000 +060802020101030101010202060301000e350b0000630100006301000063010000630100 +0022010006140100040e00000624010006030202010103030101020206070d01000f0103 +0002010000020100000101000000010000000100000b01000003010000010100001d0101 +000401000005010000020100000101000009010000010100000201000001010000020100 +000101000002010000080100000201000005010000010100000901000001010000070100 +0007010000010100000201000004010100c20602010006000000060a0100060000000609 +02020101030101010202060301000e0109320b0100630100006301000063010000630100 +00220100061301000600040e060000000623010006030202010103030101020206070d01 +000f0100000101000002010000020100000101000000010000000100000a010000040100 +00010100001f010000040102000201000002010000020102000301030001010000020100 +000101000002010000010104000901000000010000030103000201020003010300020102 +000401000004010300010100000201000003010000c40601010006000000060c01000600 +0000060802020101030101010202060301000e0109320b01006301000063010000630100 +006301000022010006140100040e00000624010006030202010103030101020206070d01 +000f01000002010000010100000201000001010000000100000001000009010000050100 +00010100001f010000070100000101000002010000050100000101000002010000010100 +00020100000101000002010000010100000d010000000100000201000002010000050100 +000101000002010000050100000301000003010000020100000101000002010000030100 +00c40602010006000000060a010006000000060902020101030101010202060301000e01 +091301000906010009150b01006301000063010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206070d01000f010000020100 +000101000002010000010100000001000000010000080100000601000001010000030101 +001901000003010000020100000101000001010100010100000201000001010000020100 +000101000002010000010100000201000001010000020100000301010004010000030100 +000201000001010000020100000101000002010000010100000201000003010000030100 +0002010000010100000201000003010000c40601010006000000060c0100060000000608 +02020101030101010202060301000e01091101020905010109150b010011010000500100 +001e0100001801000029010000630100006301000022010006140100040e000006240100 +06030202010103030101020206070d01000f010000020100000201020003010000000100 +000901040003010100040101001901000004010200030101000001000002010200030103 +000101000002010000010100000201000002010200040101000401000004010300020102 +0003010300020102000501010002010300010100000201000003010000c4060201000600 +0000060a010006000000060902020101030101010202060301000e010913010009040100 +0900010009150b0100630100001e01000018010000290100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100570100 +00370100003c010000c40601010006000000060c01000600000006080202010103010101 +0202060301000e0109130100090401000900010009150b01000701000000010100030102 +000201000000010100030102004201000008010100000100000101000002010000020102 +000201040002010200020100000201000002010200020100000001010003010200020100 +0000010100030101000001000010010000630100006301000022010006140100040e0000 +0624010006030202010103030101020206070d010058010100330101003b010100c50602 +010006000000060a010006000000060902020101030101010202060301000e0109130100 +090301000901010009150b01000701010001010000040100000201010001010000010100 +000201000041010000070100000101010001010000020100000101000002010000030100 +000301000002010000010100000201000001010000020100000101010001010000010100 +000201000001010100010100000101000001010100100100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +0601010006000000060c010006000000060802020101030101010202060301000e010913 +0100090201000902010009150b0100070100000201000004010000020100000201000005 +010000410100000701000002010000010100000201000001010000070100000701000001 +010000020100000101000005010000020100000101000002010000010100000501000002 +01000010010000630100006301000022010006140100040e000006240100060302020101 +03030101020206070d0100ff00940602010006000000060a010006000000060902020101 +030101010202060301000e01091301000902010509140b01000701000002010000040100 +000201000002010000020103004101000007010000020100000101000002010000020102 +000401000004010300020100000001000003010200020100000201000001010400010100 +000501000002010000100100006301000063010000220100061301000600040e06000000 +0623010006030202010103030101020206070d0100ff00940601010006000000060c0100 +06000000060802020101030101010202060301000e01091301000906010009150b010007 +010000020100000401000002010000020100000101000002010000410100000701000002 +010000010100000201000005010000030100000301000002010000020100000001000006 +010000010100000201000001010000050100000501000002010000100100006301000063 +01000022010006140100040e00000624010006030202010103030101020206070d0100ff +00940602010006000000060a010006000000060902020101030101010202060301000e01 +091101040903010209140b01000701000002010000040100000201000002010000010100 +000201000041010000070100000101010001010000010101000101000002010000030100 +000301000002010000030100000301000002010000010101000101000001010000020100 +00010100000501000001010100100100006301000063010000220100061301000600040e +060000000623010006030202010103030101020206070d0100ff00940601010006000000 +060c010006000000060802020101030101010202060301000e0109320b01000701000002 +010000040100000201000002010000020103004101000008010100000100000201010000 +010000020102000501010002010300030100000401020002010000000101000301020002 +010000060101000001000010010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d0100ff00940602010006000000060a01000600 +0000060902020101030101010202060301000e0109320b0100630100000b010000440100 +00100100006301000063010000220100061301000600040e060000000623010006030202 +010103030101020206070d0100ff00940601010006000000060c01000600000006080202 +0101030101010202060301000e0109320b01006301000007010000020100004001000002 +01000010010000630100006301000022010006140100040e000006240100060302020101 +03030101020206070d0100ff00940602010006000000060a010006000000060902020101 +030101010202060301000e0109320b010063010000080102004201020011010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06070d0100ff00940601010006000000060c010006000000060802020101030101010202 +060301000e0109320b01006301000063010000630100006301000022010006140100040e +00000624010006030202010103030101020206070d0100ff00940602010006000000060a +010006000000060902020101030101010202060301000e0109320b010063010000630100 +006301000063010000220100061301000600040e06000000062301000603020201010303 +0101020206070d0100ff00940601010006000000060c0100060000000608020201010301 +01010202060301000e010b34006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206070d0100ff00940602010006000000 +060a010006000000060902020101030101010202060301000e000b3501ff01b706130100 +0600040e060000000623010006030202010103030101020206070d0100ff009406010100 +06000000060c010006000000060802020101030101010202060301000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600006301000063 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206070d0100ff00940602010006000000060a01000600000006090202010103010101 +020206030100000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060001000063010000630100006301000063010000220100061301000600040e +060000000623010006030202010103030101020206070d0100ff00940601010006000000 +060c01000600000006080202010103010101020206030100060000000632010006000063 +01000063010000630100006301000022010006140100040e000006240100060302020101 +03030101020206070d0100ff00940602010006000000060a010006000000060902020101 +030101010202060301000000063401000063010000630100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +0601010006000000060c0100060000000608020201010301010102020603010006000000 +061301000603010406140100060000630100006301000063010000630100002201000614 +0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 +0000060a0100060000000609020201010301010102020603010000000612010206030100 +06190100000f010200030102004901000007010000230100000b010200030102001f0100 +006301000063010000220100061301000600040e06000000062301000603020201010303 +0101020206070d0100ff00940601010006000000060c0100060000000608020201010301 +010102020603010006000000061301000603010006180100060000110100000501000049 +01000007010000230100000d010000050100001f01000063010000630100002201000614 +0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 +0000060a0100060000000609020201010301010102020603010000000614010006030100 +061901000008010200050100000501000003010200420100000701000000010100030102 +000201000000010100020100000001010003010200020104000101000002010000040100 +00050100001f0100006301000063010000220100061301000600040e0600000006230100 +06030202010103030101020206070d0100ff009406010100060000000600010006000100 +060001000600010006000100060001000600010006000000060802020101030101010202 +060301000600000006130100060301030615010006000007010000020100000401000005 +010000020100000201000041010000070101000101000001010000020100000101010001 +010000010101000101000001010000020100000301000003010000020100000401000005 +0100001f010000630100006301000022010006140100040e000006240100060302020101 +03030101020206070d0100ff009406020100060001000600010006000100060001000600 +010006000100060001000600000006090202010103010101020206030100000006140100 +060701000615010000070100000201000004010000050100000201000002010000410100 +000701000002010000010100000201000001010000050100000201000001010000070100 +00030100000201000004010000050100001f010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206070d0100ff009406010100 +061000000608020201010301010102020603010006000000061301000607010006140100 +060000070100000201000004010000050100000201040041010000070100000201000001 +010000020100000101000005010000020100000201020004010000030100000201000004 +010000050100001f010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206070d0100ff0094060201000600000006000000060000000600 +000006000000060000000600000006000000060902020101030101010202060301000000 +061401000602010006030100061501000007010000020100000401000005010000020100 +004501000007010000020100000101000002010000010100000501000002010000050100 +0003010000030100000201000004010000050100001f0100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +060101000602000006000000060000000600000006000000060000000600010006000000 +060802020101030101010202060301000600000006110104060101030615010006000007 +010000020100000401000005010000020100000201000041010000070100000201000001 +010000020100000101000005010000020100000101000002010000030100000301000001 +01010004010000050100001f010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d0100ff00940602010006000000060a01000600 +000006090202010103010101020206030100000006340100000801020005010000050100 +000301020042010000070100000201000002010200020100000501000002010000020102 +0005010100020101000001000004010000050100001f0100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +060101000602000006080100060200000608020201010301010102020603010006000000 +063201000600006301000063010000630100006301000022010006140100040e00000624 +010006030202010103030101020206070d0100ff00940602010006020000060601000602 +000006090202010103010101020206030100000006340100006301000063010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06070d0100ff009406010100060400000606010006020000060802020101030101010202 +060301000600000006320100060000630100006301000063010000630100002201000614 +0100040e00000624010006030202010103030101020206070d0100ff0094060201000602 +000006060100060200000609020201010301010102020603010000000634010000630100 +00630100006301000063010000220100061301000600040e060000000623010006030202 +010103030101020206070d0100ff00940601010006040000060401000604000006080202 +010103010101020206030100060000000632010006000063010000630100006301000063 +01000022010006140100040e00000624010006030202010103030101020206070d0100ff +009406020100060400000602010006040000060902020101030101010202060301000000 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +0063010000630100006301000063010000220100061301000600040e0600000006230100 +06030202010103030101020206070d0100ff009406010100060600000602010006040000 +060802020101030101010202060301000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +06000100060001000600010006000100060001ff01b706140100040e0000062401000603 +0202010103030101020206070d0100ff0094060201000604000006020100060400000609 +02020101030101010202060301000e360063010000630100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206070d0100ff0094 +06010100060600000600010006060000060802020101030101010202060301000e350b00 +006301000063010000630100006301000022010006140100040e00000624010006030202 +010103030101020206070d0100ff00940602010006060100060600000609020201010301 +01010202060301000e0109320b0100630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206070d0100ff00940601 +01000608010006060000060802020101030101010202060301000e0109320b0100630100 +0063010000630100006301000022010006140100040e0000062401000603020201010303 +0101020206070d0000ff0095060201000606010006060000060902020101030101010202 +060301000e01091301000905010209140b01006301000063010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206ff06a00100 +060000000600000006000000060000000600000006000000060000000600000006000000 +060802020101030101010202060301000e01091101020904010009170b0100170100000d +010000020100003701000008010200050100000301020005010000090100000d01020026 +010000630100006301000022010006140100040e00000624010006030202010103030101 +020206ff06a1000006000000060000000600000006000000060000000600000006000000 +06000000060902020101030101010202060301000e01091301000903010009180b010017 +01000011010000370100000a0100000c010000100100000f010000260100006301000063 +010000220100061301000600040e06000000062301000603020201010303010102020606 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000618 +02020101030101010202060301000e01091301000903010009180b010007010000000101 +0003010200020104000101000000010100030102000201000001010000340100000a0100 +000301020005010000030102000301020002010000000101000301020005010000020101 +000001000003010200020100000001010011010000630100006301000022010006140100 +040e00000624010006030202010103030101020206050100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000000061702020101030101010202 +060301000e01091301000903010309150b01000701010001010000010100000201000003 +0100000301010001010000040100000201000000010000350100000a0100000501000005 +010000050100000201000002010000010101000101000001010000020100000401000002 +010000000100000001000001010000020100000101010001010000100100006301000063 +010000220100061301000600040e06000000062301000603020201010303010102020606 +010006100000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006020000060c0000061802020101030101010202060301000e010913010009030100 +0902010009140b0100070100000201000005010000030100000301000008010000020101 +00360100000a010000050100000501000005010000020100000201000001010000020100 +000101000002010000040100000201000000010000000100000101000002010000010100 +000201000010010000630100006301000022010006140100040e00000624010006030202 +010103030101020206050100060c00000600010006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +0600000006000000060000000600000006000000060001000600000006000000060c0000 +061702020101030101010202060301000e0109130100090301000902010009140b010007 +010000020100000201030003010000030100000801000002010100360100000a01000005 +010000050100000501000002010400010100000201000001010000020100000401000002 +010000000100000001000001010400010100000201000010010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206060100060a +0000060001000602000006ff067601000602000006000000060000000608000006180202 +0101030101010202060301000e0109130100090301000902010009140b01000701000002 +01000001010000020100000301000003010000080100000201000000010000350100000a +010000050100000501000005010000020100000501000002010000010100000201000004 +010000020100000001000000010000010100000501000002010000100100006301000063 +01000022010006140100040e000006240100060302020101030301010202060501000608 +000006000000060201000600000006ff0678010006000000060200000600000006080000 +061702020101030101010202060301000e01091101040902010209150b01000701010001 +01000001010000020100000301000003010000080100000201000001010000340100000a +010000050100000501000005010000020100000201000001010000020100000101000002 +010000040100000201000000010000000100000101000002010000010100000201000010 +0100006301000063010000220100061301000600040e0600000006230100060302020101 +030301010202060601000606000006000000060201000602000006ff0676010006020000 +060400000600000006040000061802020101030101010202060301000e0109320b010007 +01000000010100030103000401010001010000080100000201000002010000330100000a +010000050100000501000005010000030102000201000002010000020102000501000002 +010000000100000001000002010200020100000201000010010000630100006301000022 +010006140100040e00000624010006030202010103030101020206050100060400000600 +0000060601000600000006ff067801000600000006060000060000000604000006170202 +0101030101010202060301000e0109320b0100070100005a0100001f0100004201000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +0202060601000602000006000000060601000602000006ff067601000602000006080000 +0600000006000000061802020101030101010202060301000e0109320b0100070100005a +0100001c0100000101000042010000630100006301000022010006140100040e00000624 +0100060302020101030301010202060501000600010006000100060a01000600000006ff +0678010006000000060a0100060001000600000006170202010103010101020206030100 +0e0109320b0100070100005a0100001d0101004301000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206060100060201000600 +0100060601000602000006ff067601000602000006080100060001000600000006180202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +010006140100040e00000624010006030202010103030101020206050100060401000600 +0100060601000600000006ff067801000600000006060100060001000604000006170202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +0100061301000600040e0600000006230100060302020101030301010202060601000606 +010006000100060201000602000006ff0676010006020000060401000600010006040000 +061802020101030101010202060301000e010b3400630100006301000063010000630100 +0022010006140100040e0000062401000603020201010303010102020605010006080100 +06000100060201000600000006ff06780100060000000602010006000100060800000617 +02020101030101010202060301000e000b3501ff01b7061301000600040e060000000623 +010006030202010103030101020206060100060a0100060001000602000006ff06760100 +060200000600010006000100060800000618020201010301010102020603010010360063 +01000063010000630100006301000022010006140100040e000006240100060302020101 +03030101020206050100060c010006000100060000000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600000006000100060c00000617 +020201010301010102020603010010350f00006301000063010000630100006301000022 +0100061301000600040e0600000006230100060302020101030301010202060601000610 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000602 +0100060c000006180202010103010101020206030100100108320f010063010000630100 +00630100006301000022010006140100040e000006240100060302020101030301010202 +060501000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +0600000006170202010103010101020206030100100108320f0100630100006301000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +020206060000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +0000061802020101030101010202060301001001081301000803010408140f0100630100 +0063010000630100006301000022010006140100040e0000062401000603020201010303 +0101020206ff06bc02020101030101010202060301001001081101020803010008020100 +08140f01006301000010010000200102002d010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 +0202060301001001081301000806010008150f01006301000010010000220100002d0100 +00630100006301000022010006140100040e000006240100060302020101030301010202 +06ff06bc02020101030101010202060301001001081301000806010008150f0100070100 +000001010003010200020100000001010049010000080102000201040001010000020100 +000101000000010100030102000201000000010100050100000301020002010000000101 +001f0100006301000063010000220100061301000600040e060000000623010006030202 +010103030101020206ff06bc020201010301010102020603010010010813010008060100 +08150f010007010100010100000101000002010000010101000101000048010000070100 +000201000003010000030100000201000001010100010100000101000002010000010101 +000101000004010000020100000201000001010100010100001e01000063010000630100 +0022010006140100040e00000624010006030202010103030101020206ff06bc02020101 +030101010202060301001001081301000806010008150f01000701000002010000010100 +0002010000010100004c0100000701000007010000030100000201000001010000050100 +00020100000101000002010000040100000601000001010000020100001e010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06ff06bc02020101030101010202060301001001081301000805010008160f0100070100 +000201000001010400010100004c01000008010200040100000301000002010000010100 +00050104000101000002010000040100000301030001010000020100001e010000630100 +006301000022010006140100040e00000624010006030202010103030101020206ff06bc +02020101030101010202060301001001081301000805010008160f010007010000020100 +0001010000050100004c0100000b01000003010000030100000201000001010000050100 +00050100000201000004010000020100000201000001010000020100001e010000630100 +0063010000220100061301000600040e0600000006230100060302020101030301010202 +06ff06bc02020101030101010202060301001001081101040803010008160f0100070101 +00010100000101000002010000010100004c010000070100000201000003010000030100 +000101010001010000050100000201000001010100010100000401000002010000020100 +0001010000020100001e010000630100006301000022010006140100040e000006240100 +06030202010103030101020206ff06bc0202010103010101020206030100100108320f01 +00070100000001010003010200020100004c010000080102000501010002010100000100 +0001010000060102000201000000010100050100000301030001010000020100001e0100 +006301000063010000220100061301000600040e06000000062301000603020201010303 +0101020206ff06bc0202010103010101020206030100100108320f0100070100005a0100 +002a01000037010000630100006301000022010006140100040e00000624010006030202 +010103030101020206ff06bc0202010103010101020206030100100108320f0100070100 +005a0100002a010000370100006301000063010000220100061301000600040e06000000 +0623010006030202010103030101020206ff06bc02020101030101010202060301001001 +08320f0100070100005a0100002a01000037010000630100006301000022010006140100 +040e00000624010006030202010103030101020206ff06bc020201010301010102020603 +0100100108320f010063010000630100006301000063010000220100061301000600040e +060000000623010006030202010103030101020206ff06bc020201010301010102020603 +0100100108320f01006301000063010000630100006301000022010006140100040e0000 +0624010006030202010103030101020206ff06bc02020101030101010202060301001001 +0f340063010000630100006301000063010000220100061301000600040e060000000623 +010006030202010103030101020206ff06bc020201010301010102020603010010000f35 +01ff01b706140100040e00000624010006030202010103030101020206ff06bc02020101 +030101010202060301000e36006301000063010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 +0202060301000e350b00006301000063010000630100006301000022010006140100040e +00000624010006030202010103030101020206ff06bc0202010103010101020206030100 +0e0109320b010063010000630100006301000063010000220100061301000600040e0600 +00000623010006030202010103030101020206410100060a010006ff066d020201010301 +01010202060301000e0109320b0100630100006301000063010000630100002201000614 +0100040e0000062401000603020201010303010102020607010206100100060801000612 +010006050100060c0100060d0101061a010006ff06400202010103010101020206030100 +0e01091301000904010209150b0100630100006301000063010000630100002201000613 +01000600040e06000000062301000603020201010303010102020606010006020100060f +0100061c010006050100060c0100060c0100061c010006ff064002020101030101010202 +060301000e0109110102090301000902010009140b01001101000009010000170100002c +0100002c01000035010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206060100060d0102060201000600010106030102060301020603 +010206020104060201000605010206050100060b01000604010206020100060201000601 +010006000101060301010600010006ff064002020101030101010202060301000e010913 +0100090301000902010009140b01001c010000170100002c0100002c0100003501000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +020206060100060c01000602010006010101060101000604010006020100060201000601 +010006020100060301000604010006040100060201000604010006090104060101000602 +010006010100060201000601010106010100060101000601010106ff0640020201010301 +01010202060301000e0109130100090301000902010009140b0100070100000001010003 +01020003010200020100000001010003010200020100000001010003010100000100002c +010000070100000201000002010200030102000301020003010200020104000201020002 +0100000001010026010000630100006301000022010006140100040e0000062401000603 +020201010303010102020606010306090100060201000601010006020100060401000602 +0100060201000601010006070100060401000604010006080100060b0100060301000602 +010006010100060201000601010006020100060101000602010006ff0640020201010301 +01010202060301000e01091301000904010209150b010007010100010100000401000002 +010000020100000101010001010000010100000201000001010100010100000101000001 +0101002c0100000701000002010000010100000201000001010000020100000101000002 +010000010100000201000003010000030100000201000001010100010100002501000063 +01000063010000220100061301000600040e060000000623010006030202010103030101 +020206060100060201000608010006020100060101000602010006040100060201040601 +010006070100060401000605010206050100060b01000603010006020100060101000602 +01000601010006020100060101000602010006ff06400202010103010101020206030100 +0e0109130100090301000902010009140b01000701000008010000020100000501000002 +010000050100000101000005010000020100002c01000007010000020100000501000001 +010000090100000101000007010000070100000101000002010000250100006301000063 +01000022010006140100040e000006240100060302020101030301010202060601000602 +010006080100060201000601010006020100060401000602010006050100060701000604 +01000608010006040100060b010006030100060201000601010006020100060101000602 +0100060101000602010006ff064002020101030101010202060301000e01091301000903 +01000902010009140b010007010000080100000201000005010000020100000201030001 +01000005010000020100002c010000080100000001000003010300020102000301030002 +010200040100000401030001010000020100002501000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206060100060201000608 +010006020100060101010601010006040100060201000602010006010100060201000603 +010006050100060301000602010006030100060c01000603010006020100060101000601 +01010601010006020100060101000601010106ff06400202010103010101020206030100 +0e0109130100090301000902010009140b01000701000008010000020100000501000002 +01000001010000020100000101000005010000020100002c010000080100000001000002 +010000020100000501000001010000020100000501000003010000030100000201000001 +0100000201000025010000630100006301000022010006140100040e0000062401000603 +0202010103030101020206070102060a0102060201000600010106050100060301020603 +010206050101060301000604010206040100060c01000604010206030101060001000601 +010006020100060201010600010006ff064002020101030101010202060301000e010911 +01040902010209150b010007010000080100000201000002010000010100000201000001 +010000020100000101000005010000010101002c01000009010000030100000201000001 +010000020100000101000002010000010100000201000003010000030100000201000001 +01000002010000250100006301000063010000220100061301000600040e060000000623 +010006030202010103030101020206250100061a0100060a010006ff066d020201010301 +01010202060301000e0109320b0100070100000801000003010200020100000201000002 +0103000101000006010100000100002c0100000901000004010300020102000301030002 +010200050101000201030001010000020100002501000063010000630100002201000614 +0100040e000006240100060302020101030301010202062201000601010006ff06950202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +0100061301000600040e06000000062301000603020201010303010102020623010106ff +069602020101030101010202060301000e0109320b010063010000630100006301000063 +01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +0100061301000600040e060000000623010006030202010103030101020206ff06bc0202 +0101030101010202060301000e0109320b01006301000063010000630100006301000022 +010006140100040e00000624010006030202010103030101020206ff06bc020201010301 +01010202060301000e0109320b0100630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103030101020206ff06bc020201010301 +01010202060301000e010b34006301000063010000630100006301000022010006140100 +040e00000624010006030202010103030101020206ff06bc020201010301010102020603 +01000e000b3501ff01b7061301000600040e060000000623010006030202010103030101 +020206ff06bc020201010301010102020603010010360063010000630100006301000063 +01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 +01010301010102020603010010350f000063010000630100006301000063010000220100 +061301000600040e060000000623010006030202010103030101020206ff06bc02020101 +03010101020206030100100108320f010063010000630100006301000063010000220100 +06140100040e00000624010006030202010103030101020206ff06bc0202010103010101 +020206030100100108320f01006301000063010000630100006301000022010006130100 +0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 +0202060301001001081301000804010208150f0100630100006301000063010000630100 +0022010006140100040e0000062401000603020201010303000406ff06bc000403010101 +020206030100100108110102080301000802010008140f01001001000006010000490100 +000e0100001c0100000b010200030102001f010000630100006301000022010006130100 +0600040e0600000006230100060302020101030300000202050006ff06bc000002020500 +03010101020206030100100108130100080301000802010008140f010010010000510100 +000e0100001c0100000d010000050100001f010000630100006301000022010006140100 +040e000006240100060302020101030300000202050006ff06bc00000202050003010101 +020206030100100108130100080301000802010008140f01000801020002010400020102 +000201000000010100030102003b01000008010200020100000101000003010200020100 +00000101000301020002010400010100000201000004010000050100001f010000630100 +0063010000220100061301000600040e0600000006230100060302020101030300000202 +050006ff06bc000002020500030101010202060301001001081301000803010008020100 +08140f010007010000020100000301000006010000020101000101000001010000020100 +003a01000007010000020100000101000000010000030100000201000001010100010100 +00010100000201000003010000030100000201000004010000050100001f010000630100 +006301000022010006140100040e000006240100060302020101030300000202050006ff +06bc000002020500030101010202060301001001081301000804010308140f0100070100 +0007010000060100000201000002010000050100003a0100000701000005010100080100 +0001010000020100000101000007010000030100000201000004010000050100001f0100 +006301000063010000220100061301000600040e06000000062301000603020201010303 +00000202050006ff06bc0000020205000301010102020603010010010813010008070100 +08140f01000801020004010000060100000201000002010000020103003a010000080102 +000201010005010300010100000201000002010200040100000301000002010000040100 +00050100001f010000630100006301000022010006140100040e00000624010006030202 +01010303000002020500000502ff02b00006020205000301010102020603010010010813 +01000806010008150f01000b010000030100000601000002010000020100000101000002 +0100003a0100000b01000001010000000100000301000002010000010100000201000005 +01000003010000030100000201000004010000050100001f010000630100006301000022 +0100061301000600040e0600000006230100060302020101030300000208050002ff02b0 +000002080500030101010202060301001001081101040801010208160f01000701000002 +0100000301000006010000020100000201000001010000020100003a0100000701000002 +010000010100000101000002010000020100000101000002010000010100000201000003 +010000030100000101010004010000050100001f01000063010000630100002201000614 +0100040e000006240100060302020101030300000208050002ff02b00000020805000301 +0101020206030100100108320f0100080102000501010004010000020100000201000002 +0103003a0100000801020002010000020100000201030001010000020100000201020005 +010100020101000001000004010000050100001f01000063010000630100002201000613 +01000600040e0600000006230100060302020101030300000208050001ff01b000000208 +050003010101020206030100100108320f01006301000063010000630100006301000022 +010006140100040e00000624010006030202010103030000050901ff01b0000005090301 +0101020206030100100108320f0100630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103ff03cc010102020603010010010832 +0f01006301000063010000630100006301000022010006140100040e0000062401000603 +0202010103ff03cc0101020206030100100108320f010063010000630100006301000063 +010000220100061301000600040e060000000623010006030202010103ff03cc01010202 +06030100100108320f01006301000063010000630100006301000022010006140100040e +00000624010006030202010103ff03cc010102020603010010010f340063010000630100 +006301000063010000220100061301000600040e060000000623010006030202010103ff +03cc010102020603010010000f3501ff01b706140100040e000006240100060302020101 +03ff03cc01010202060301000e3600630100006301000063010000630100002201000613 +01000600040e060000000623010006030202010103ff03cc01010202060301000e350b00 +006301000063010000630100006301000022010006140100040e00000624010006030202 +010103ff03cc01010202060301000e0109320b0100630100006301000063010000630100 +00220100061301000600040e060000000623010006030202010103ff03cc010102020603 +01000e0109320b01006301000063010000630100006301000022010006140100040e0000 +0624010006030202010103ff03cc01010202060301000e01091201020903010209150b01 +0063010000630100006301000063010000220100061301000600040e0600000006230100 +06030202010103ff03cc01010202060301000e0109110100090201000901010009020100 +09140b0100630100002c01000035010000630100006301000022010006140100040e0000 +0624010006030202010103ff03cc01010202060301000e01091101000902010009010100 +0902010009140b0100630100002c01000035010000630100006301000022010006130100 +0600040e060000000623010006030202010103ff03cc01010202060301000e0109110100 +09020100090101000902010009140b010008010200020100000201000002010200030102 +0002010000000101000201000000010100030102002d0100000701000002010000020102 +000301020003010200030102000201040002010200020100000001010026010000630100 +006301000022010006140100040e00000624010006030202010103ff03cc010102020603 +01000e0109140100090201000902010009140b0100070100000201000001010000020100 +000101000002010000010100000201000001010100010100000101010001010000010100 +00020100002c010000070100000201000001010000020100000101000002010000010100 +000201000001010000020100000301000003010000020100000101010001010000250100 +006301000063010000220100061301000600040e060000000623010006030202010103ff +03cc01010202060301000e0109130100090301000902010009140b010007010000050100 +000201000001010000090100000101000002010000010100000201000001010000020100 +002c01000007010000020100000501000001010000090100000101000007010000070100 +00010100000201000025010000630100006301000022010006140100040e000006240100 +06030202010103ff03cc01010202060301000e0109120100090401000902010009140b01 +000801020002010000020100000201020003010300010100000201000001010000020100 +00010104002c010000080100000001000003010300020102000301030002010200040100 +00040103000101000002010000250100006301000063010000220100061301000600040e +060000000623010006030202010103ff03cc01010202060301000e010911010009020100 +090101000902010009140b01000b01000001010000020100000501000001010000020100 +000101000002010000010100000201000001010000300100000801000000010000020100 +000201000005010000010100000201000005010000030100000301000002010000010100 +000201000025010000630100006301000022010006140100040e00000624010006030202 +010103ff03cc01010202060301000e01091101040902010209150b010007010000020100 +000101000001010100010100000201000001010000020100000101000002010000010100 +000201000001010000020100002c01000009010000030100000201000001010000020100 +000101000002010000010100000201000003010000030100000201000001010000020100 +00250100006301000063010000220100061301000600040e060000000623010006030202 +010103ff03cc01010202060301000e0109320b0100080102000301010000010000020102 +000301030001010000020100000101000002010000020102002d01000009010000040103 +000201020003010300020102000501010002010300010100000201000025010000630100 +006301000022010006140100040e00000624010006030202010103ff03cc010102020603 +01000e0109320b010063010000630100006301000063010000220100061301000600040e +060000000623010006030202010103ff03cc01010202060301000e0109320b0100630100 +0063010000630100006301000022010006140100040e00000624010006030202010103ff +03cc01010202060301000e0109320b010063010000630100006301000063010000220100 +061301000600040e060000000623010006030202010103ff03cc01010202060301000e01 +09320b01006301000063010000630100006301000022010006140100040e000006240100 +06030202010103ff03cc01010202060301000e0109320b01006301000063010000630100 +0063010000220100061301000600040e060000000623010006030202010103ff03cc0101 +0202060301000e010b34006301000063010000630100006301000022010006140100040e +00000624010006030202010103ff03cc01010202060301000e000b3501ff01b706130100 +0600040e060000000623010006030202010103ff03cc0101020206030100060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000630100 +006301000063010000630100002201000614010006000000060000000600000006000000 +060000000600000006000000060000000624010006030202010103ff03cc010102020603 +01ff01ef0613010006000000060000000600000006000000060000000600000006000000 +06000000060000000623010006030202010103ff03cc010102020603010006ff06ff0639 +010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff +03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 +06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 +0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 +02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff +0639010006030202010103ff03cc01010202060301000649010006ff06ee010006030202 +010103ff03cc01010202060301000648010106ff06ee010006030202010103ff03cc0101 +020206030100064701000600010006ff06ee010006030202010103ff03cc010102020603 +01000649010006ff06ee010006030202010103ff03cc01010202060301000649010006ff +06ee010006030202010103ff03cc01010202060301000649010006ff06ee010006030202 +010103ff03cc01010202060301000649010006ff06ee010006030202010103ff03cc0101 +0202060301000649010006ff06ee010006030202010103ff03cc01010202060301000647 +010406ff06ec010006030202010103ff03cc010102020603010006ff06ff063901000603 +0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 +02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff +0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101 +03ff03cc0101020206030100063801000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100064b010006030202010103ff +03cc01010202060301000637010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0100060001000600010006000100060001000600010006000000064a0100060302020101 +03ff03cc0101020206030100063801000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +0600000004ff04940000064b010006030202010103ff03cc010102020603010006370100 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060004ff049406000000064a +010006030202010103ff03cc01010202060301000638010006000000060c0000060c0100 +04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000 +060c0100060c0100060004ff049406000000064a010006030202010103ff03cc01010202 +060301000638010006000000060c0000060c010004ff04940000064b0100060302020101 +03ff03cc01010202060301000637010006000000060c0100060c0100060004ff04940600 +0000064a010006030202010103ff03cc01010202060301000638010006000000060c0000 +060c010004ff04940000064b010006030202010103ff03cc010102020603010006370100 +06000000060c0100060c0100060004ff049406000000064a010006030202010103ff03cc +01010202060301000638010006000000060c0000060c010004ff04940000064b01000603 +0202010103ff03cc01010202060301000637010006000000060c0100060c0100060004ff +049406000000064a010006030202010103ff03cc01010202060301000638010006000000 +060c0000060c010004ff04940000064b010006030202010103ff03cc0101020206030100 +0637010006000000060c0100060c0100060004ff049406000000064a0100060302020101 +03ff03cc01010202060301000638010006000000060c0000060c010004ff04940000064b +010006030202010103ff03cc010102020603010006370100060000000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060004ff049406000000064a010006030202010103ff03cc +010102020603010006380100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +0600000006000000064a010006030202010103ff03cc0101020206030100063800000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000064b010006030202010103ff03cc010102020603010006ff06ff06390100 +06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc +010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff +06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202 +010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202 +0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639 +010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff +03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 +06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 +0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 +02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff +0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101 +03ff03cc010102020603010006ff06ff0639010006030202010103ff03cc010102020603 +010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff06390100 +06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc +010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff +06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202 +010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202 +0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639 +010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff +03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 +06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 +0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 +02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff +0639010006030202010103ff03cc00040603010006ff06ff063901000603000403ff03cc +000002020500060301ff01ff013b060300000202050003ff03cc00000202050006ff06ff +064300000202050003ff03cc00000202050006ff06ff064300000202050003ff03cc0000 +0202050006ff06ff064300000202050003ff03cc00000202050006ff06ff064300000202 +050003ff03cc000002020500000502ff02ff023700060202050003ff03cc000002080500 +02ff02ff023700000208050003ff03cc00000208050002ff02ff023700000208050003ff +03cc00000208050001ff01ff013700000208050003ff03cc0000050901ff01ff01370000 +050903ff03ff03ff03ff03ff03ff03ff03ff0337 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 34 400 249 +%%EOF diff --git a/lib/tv/doc/src/tv_search_window.gif b/lib/tv/doc/src/tv_search_window.gif new file mode 100644 index 0000000000..d6e72dda2f Binary files /dev/null and b/lib/tv/doc/src/tv_search_window.gif differ diff --git a/lib/tv/doc/src/tv_search_window.ps b/lib/tv/doc/src/tv_search_window.ps new file mode 100644 index 0000000000..a6dd2ef9fc --- /dev/null +++ b/lib/tv/doc/src/tv_search_window.ps @@ -0,0 +1,975 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_search_window.eps) +%%CreationDate: (Mon Mar 19 17:15:21 2001) +%%BoundingBox: 0 0 228 183 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 228 183 +userdict begin +%%BeginData: +DisplayImage +0 0 +228.000000 183.000000 +12 +455 365 +1 +0 +0 +8 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +aa2455 +999999 +000a01ff01b0000b0208040001ff01b000000208040000000208040002ff02b000000208 +0400000002080400020000ff00ad040002000000020804000000020204060200000004ff +04ad020000000405020204000000020204000209000d02ff02a400000202040000000202 +040002080000020d0400029001030211010302330101021501010206010102a100000202 +040000000202040002080000020d04000290010102020107020001010203010102010101 +020e010302200101020c0103020401010206010102110100028e00000202040000000202 +040002080000020d04000290010102050101020301010203010102010101020d01010201 +0101021f0101020b0101020101010203010102190101028e000002020400000002020400 +0208000002020406020304000290010102050101020301010203010102010101020d0101 +020601030203010302020101020001010201010302020101020001010207010102030101 +020201010200010102030101020201030203010302000104028c00000202040000000403 +020800000202040003040000020304000290010102050101020401010202010002020101 +020d01020204010102010101020101010201010102010101020001010200010102010101 +020101020200010102060101020301010202010202000101020201010201010102010101 +020101010201010102000101028e000004030101020b0000020304000302000002040400 +0290010102050101020401010201010102020101020e0103020201010201010102050101 +020101020202010102050101020101010206010102030101020201010201010102020101 +0201010102010101020101010204010102910103020b0000020304000302000002040400 +029001010205010102050101020001000203010102100102020101050202010402010101 +020301010205010102010101020601010203010102020101020101010202010102010105 +020101010204010102910103020b00000204040003000000020504000290010102050101 +020501030203010102110101020101010205010102010101020101010203010102050101 +020101010206010102030101020201010201010102020101020101010205010102040101 +02910103020b000002040400030000000205040002900101020501010206010102040101 +020d01010201010102010101020201000201010102010101020101010203010102020100 +020101010201010102070101020101010203010102010101020201010201010102020100 +02010101020201000200010102910103020b000002050000020604000290010102050101 +0206010102040101020e0103020301030203010202000101020001010204010302020101 +02010101020801030204010402030101020201030203010302020102028f0103020b0000 +020d040002900103021101030254010102a40103020b0000020d040002fd010202a50103 +020b0000020d040002ff02a60103020c040d02ff02a7010302ff02c2010302ff02c20103 +020200ff00bb0400020201030202000004ff04bb0202010302ff02c20103020205ff05bc +02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 +05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 +0103020205ff05bc02020103020205ff05bc020201030202050800000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000508020201030202050700000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500010005070202010302020508000005ff05a8 +010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 +010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 +010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 +010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 +010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 +010005080202010302020507000005ff0549000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005110100 +05070202010302020508000005ff05470000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000051101000508 +0202010302020507000005ff05490000054c010005110100050702020103020205080000 +05ff05470000054c010005110100050802020103020205070000050d0102051e0100050f +010105ff05060000054c010005110100050702020103020205080000050b010005020100 +051d0100050e010005ff05070000054c010005110100050802020103020205070000050c +010005060102050301020502010005000101050301020502010005000101050b01000504 +010205020100050001010504010105f20000054c01000511010005070202010302020508 +0000050c0100050401000502010005010100050201000501010105010100050101000502 +0100050101010501010005080104050101000502010005010101050101000503010105f1 +0000054c010005110100050802020103020205070000050e010105020100050201000505 +010005010100050501000505010005020100050a010005030100050201000501010005fc +0000054c010005110100050702020103020205080000050f010005010104050201030501 +0100050501000505010005020100050a010005030100050201000501010005fb00000512 +0102051e01000516010005110100050802020103020205070000050c0100050201000501 +0100050501000502010005010100050501000505010005020100050a0100050301000502 +01000501010005fc00000510010005020100051d01000517010005110100050702020103 +020205080000050b01000502010005010100050201000501010005020100050101000505 +0100050201000501010005020100050a01000503010005020100050101000507010105f1 +000005110100050601020503010205020100050001010503010205020100050001010513 +010005110100050802020103020205070000050d01020503010205030103050101000506 +01020502010005020100050a010005040102050201000507010105f20000051101000504 +010005020100050101000502010005010101050101000501010005020100050101010501 +0100051301000511010005070202010302020508000005ff054700000513010105020100 +050201000505010005010100050501000505010005020100051201000511010005080202 +010302020507000005ff0549000005140100050101040502010305010100050501000505 +010005020100051301000511010005070202010302020508000005ff0547000005110100 +050201000501010005050100050201000501010005050100050501000502010005120100 +0511010005080202010302020507000005ff054900000510010005020100050101000502 +010005010100050201000501010005050100050201000501010005020100051301000511 +010005070202010302020508000005ff0547000005120102050301020503010305010100 +050601020502010005020100051201000511010005080202010302020507000005ff0549 +0000054c01000511010005070202010302020508000005ff05470000054c010005110100 +050802020103020205070000050901ff012c05120000054c010005110100050702020103 +020205080000050801ff012c05110000054c010005110100050802020103020205070000 +0509010107ff0728010105120000054c0100051101000507020201030202050800000508 +010107ff07270000010105110000054c0100051101000508020201030202050700000509 +0101070100ff0026010105120000054c0100051101000507020201030202050800000508 +0101070100ff0026010105110000054c0100051101000508020201030202050700000509 +0101070100ff0026010105120000054c0100051101000507020201030202050800000508 +010107010000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000000300000003000000030000000300 +000003000000030000000300000003000000030000a0010105110000054c010005110100 +05080202010302020507000005090101070103840101009f010105120000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100051101000507020201030202050800000508010107010000030401000377 +010003040101009f01010511000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005110100050802020103 +0202050700000509010107010304010003030102031e0100034001000310010003030101 +009f01010573010005070202010302020508000005080101070100000302010003030100 +03020100031d01000353010003020101009f010105720100050802020103020205070000 +050901010701030201000304010003060102030301020302010003000101030301020302 +010003000101030a01020302010003020100030101000300010103020100030001010303 +01020303010203030102030301020303010203020100030001010304010003010101009f +010105730100050702020103020205080000050801010701000003000100030601000304 +010003020100030101000302010003010101030101000301010003020100030101010301 +010003080100030201000301010003020100030101010301010003010101030101000301 +010003020100030101000302010003010100030201000304010003020100030201000301 +0101030101000304010003000101009f0101057201000508020201030202050700000509 +010107010300010003080101030201000302010003050100030101000305010003050100 +030201000308010003020100030201000300010003020100030201000301010003050100 +030201000301010003050100030801000302010003020100030101000302010003050102 +009f01010573010005070202010302020508000005080101070100000300010003090100 +030101040302010303010100030501000305010003020100030801040303010003030100 +030201000301010003050104030201020303010203050100030201000302010003010100 +030201000304010003000101009f01010572010005080202010302020507000005090101 +070103020100030401000302010003010100030501000302010003010100030501000305 +010003020100030801000306010003000100030201000302010003010100030501000309 +01000305010003040100030201000302010003010100030201000303010003010101009f +010105730100050702020103020205080000050801010701000003020100030301000302 +010003010100030201000301010003020100030101000305010003020100030101000302 +010003080100030201000301010003020100030101010301010003010100030501000302 +010003010100030201000301010003020100030401000302010003020100030101000302 +01000302010003020101009f010105720100050802020103020205070000050901010701 +030401000303010203030102030301030301010003060102030201000302010003090102 +030201000302010003010100030001010302010003060102030301020303010203050100 +0303010203020100030201000301010003030101009f0101057301000507020201030202 +05080000050801010701000003040100034001000335010003040101009f010105720100 +05080202010302020507000005090101070103470100033b0101009f0101051200000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000511010005070202010302020508000005080101070100000346 +0100033b0101009f01010511000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005110100050802020103 +020205070000050901010701030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300010003000100 +030001000300010003000100030001000300010003000100030001000300009f01010512 +0000054c01000511010005070202010302020508000005080101070100ff002601010511 +0000054c01000511010005080202010302020507000005090101070100ff002601010512 +0000054c01000511010005070202010302020508000005080101070100ff002601010511 +0000054c01000511010005080202010302020507000005090101070100ff002601010512 +0000054c01000511010005070202010302020508000005080101070000ff002701010511 +0000054c010005110100050802020103020205070000050901ff012c05120000054c0100 +05110100050702020103020205080000050801ff012c0511000005120102051f01020513 +01000511010005080202010302020507000005ff05490000051001000502010005200100 +051401000511010005070202010302020508000005ff0547000005110100050201000502 +010205020100050001010503010205030102050501000513010005110100050802020103 +02020507000005ff05490000051001000505010005020100050101010501010005010100 +050201000501010005020100050401000514010005110100050702020103020205080000 +05ff05470000051101000509010005010100050201000501010005050100050201000504 +0100051301000511010005080202010302020507000005ff054900000510010005060103 +050101000502010005010100050501040504010005140100051101000507020201030202 +0508000005ff054700000511010005020100050101000502010005010100050201000501 +01000505010005080100051301000511010005080202010302020507000005ff05490000 +051001000502010005010100050201000501010005020100050101000502010005010100 +0502010005040100051401000511010005070202010302020508000005ff054700000512 +010205030103050101000502010005020102050301020505010005130100051101000508 +0202010302020507000005ff05490000054c010005110100050702020103020205080000 +05ff05470000054c01000511010005080202010302020507000005ff05490000054c0100 +0511010005070202010302020508000005ff05470000054c010005110100050802020103 +02020507000005ff05490000054c01000511010005070202010302020508000005ff0547 +0000054c01000511010005080202010302020507000005ff05490000054c010005110100 +05070202010302020508000005ff05470000054c01000511010005080202010302020507 +0000052201000563000005c00000054c0100051101000507020201030202050800000520 +01000500010005230100053c000005000000053e0102054b0100052f0000054c01000511 +010005080202010302020507000005200100050001000500010005220100053b00000500 +000005000000053f0100057d000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005110100050702020103 +020205080000051e010005000601010005000100050b0102050301020509010405020102 +05020100050001010502010105000100052400000502000005000000050b010205030102 +050901000500010105030102050301010500010005010100050201000504010005030102 +0502010005000101050a0102050201000502010005010100050001010502010005000101 +050301020503010205030102050301020503010205020100050001010521000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005110100050802020103020205070000051e01000500060301000500 +010005090100050201000501010005020100050a01000503010005020100050101010501 +010005010100050001000500010005220000050400000500000005090100050201000501 +010005020100050801010501010005010100050201000501010005010101050101000502 +010005040100050201000502010005010101050101000508010005020100050101000502 +010005010101050101000501010105010100050101000502010005010100050201000501 +010005020100050401000502010005020100050101010501010005820100050702020103 +020205080000051c010005000605010005000100050c010005010100050e010005030100 +0502010005010100050501000500010005000100052100000506000005000000050c0100 +05010100050c010005050100050201000501010005020100050101000502010005040100 +0506010005010100050c0100050201000502010005000100050201000502010005010100 +050501000502010005010100050501000508010005020100050201000501010005020100 +05810100050802020103020205070000051c000005000607000005000000050801030502 +0102050b0100050301040501010005050100050001000500010005200100050801000500 +010005080103050201020509010005050104050101000502010005010100050201000504 +01000503010305010100050c010405030100050301000502010005010100050501040502 +010205030102050501000502010005020100050101000502010005820100050702020103 +020205080000051c000005000605000005000000050801000502010005050100050a0100 +050301000505010005050100050001000500010005210100050601000500010005080100 +050201000505010005080100050501000505010005020100050101000502010005040100 +050201000502010005010100050c01000506010005000100050201000502010005010100 +050501000509010005050100050401000502010005020100050101000502010005810100 +050802020103020205070000051e00000500060300000500000005090100050201000501 +010005020100050a01000503010005020100050101000505010005000100050001000522 +010005040100050001000509010005020100050101000502010005080100050501000502 +01000501010005010101050101000501010105040100050201000502010005010100050c +010005020100050101000502010005010101050101000501010005050100050201000501 +010005020100050101000502010005040100050201000502010005010100050201000582 +0100050702020103020205080000051e000005000601000005000000050b010305020102 +050c01010502010205020100050501000500010005000100052301000502010005000100 +050b01030502010205090100050601020503010105000100050201010500010005040100 +0503010305010100050d0102050201000502010005010100050001010502010005060102 +050301020503010205050100050301020502010005020100058101000508020201030202 +05070000052000000500000005000000055f010005000100050001000532010005320100 +05b7010005070202010302020508000005200000050000000561010005000100052f0100 +050201000532010005b60100050802020103020205070000052200000563010005310102 +0533010005b7010005070202010302020508000005ff05a8010005080202010302020507 +000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 +000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 +000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 +000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 +000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050702020103 +020205080100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050802020103 +020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc +02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 +05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05a10100 +050001000500010005000100050001000500010005000100050001000500010005090202 +0103020205ff05a001000500010005000100050001000500010005000100050001000500 +010005000100050000000508020201030202050707ff0796050201000506010005060000 +0509020201030202050707ff079500000501010005060000050800000508020201030202 +0507070100ff009405020100050601000506000005090202010302020507070100ff0094 +0501010005060000050001000506000005080202010302020507070100ff009405020100 +05040000050201000504000005090202010302020507070100ff00940501010005040000 +050201000506000005080202010302020507070100ff0094050201000504000005020100 +0504000005090202010302020507070100ff009405010100050400000504010005040000 +05080202010302020507070100ff00940502010005020000050601000502000005090202 +010302020507070100ff0094050101000502000005060100050400000508020201030202 +0507070100ff009405020100050200000506010005020000050902020103020205070701 +00ff00940501010005020000050801000502000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +050000000500010005000100050001000500010005000100050001000502000005080202 +010302020507070100ff0094050201000500010005000100050001000500010005000100 +05000100050001000500000005090202010302020507070100ff00940501010005100000 +05080202010302020507070100ff00940502010005000000050000000500000005000000 +0500000005000000050000000500000005090202010302020507070100ff009405010100 +050000000500000005000000050000000500000005000000050000000500010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +0501010005000000050c01000500000005080202010302020507070100ff009405020100 +05000000050a01000500000005090202010302020507070100ff00940501010005000000 +050c01000500000005080202010302020507070100ff00940502010005000000050a0100 +0500000005090202010302020507070100ff00940501010005000000050c010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +0501010005000000050c01000500000005080202010302020507070100ff009405020100 +05000000050a01000500000005090202010302020507070100ff00940501010005000000 +050c01000500000005080202010302020507070100ff00940502010005000000050a0100 +0500000005090202010302020507070100ff00940501010005000000050c010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +0501010005000000050c01000500000005080202010302020507070100ff009405020100 +05000000050a01000500000005090202010302020507070100ff00940501010005000000 +050c01000500000005080202010302020507070100ff00940502010005000000050a0100 +0500000005090202010302020507070100ff00940501010005000000050c010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +0501010005000000050c01000500000005080202010302020507070100ff009405020100 +05000000050a01000500000005090202010302020507070100ff00940501010005000000 +050c01000500000005080202010302020507070100ff00940502010005000000050a0100 +0500000005090202010302020507070100ff00940501010005000000050c010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +0501010005000000050c01000500000005080202010302020507070100ff009405020100 +05000000050a01000500000005090202010302020507070100ff00940501010005000000 +050c01000500000005080202010302020507070100ff00940502010005000000050a0100 +0500000005090202010302020507070100ff00940501010005000000050c010005000000 +05080202010302020507070100ff00940502010005000000050a01000500000005090202 +010302020507070100ff00940501010005000000050c0100050000000508020201030202 +0507070100ff00940502010005000000050a010005000000050902020103020205070701 +00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 +0502010005000000050a01000500000005090202010302020507070100ff009405010100 +05000000050c01000500000005080202010302020507070100ff00940502010005000000 +050a01000500000005090202010302020507070100ff00940501010005000000050c0100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005000000050c01000500000005080202 +010302020507070100ff00940502010005000000050a0100050000000509020201030202 +0507070100ff00940501010005000000050c010005000000050802020103020205070701 +00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 +050101000500000005000100050001000500010005000100050001000500010005000100 +0500000005080202010302020507070100ff009405020100050001000500010005000100 +050001000500010005000100050001000500000005090202010302020507070100ff0094 +050101000510000005080202010302020507070100ff0094050201000500000005000000 +050000000500000005000000050000000500000005000000050902020103020205070701 +00ff00940501010005020000050000000500000005000000050000000500000005000100 +0500000005080202010302020507070100ff00940502010005000000050a010005000000 +05090202010302020507070100ff00940501010005020000050801000502000005080202 +010302020507070100ff0094050201000502000005060100050200000509020201030202 +0507070100ff009405010100050400000506010005020000050802020103020205070701 +00ff00940502010005020000050601000502000005090202010302020507070100ff0094 +0501010005040000050401000504000005080202010302020507070100ff009405020100 +05040000050201000504000005090202010302020507070100ff00940501010005060000 +050201000504000005080202010302020507070100ff0094050201000504000005020100 +0504000005090202010302020507070100ff009405010100050600000500010005060000 +05080202010302020507070100ff00940502010005060100050600000509020201030202 +0507070100ff009405010100050801000506000005080202010302020507070000ff0095 +050201000506010005060000050902020103020205ff05a0010005000000050000000500 +0000050000000500000005000000050000000500000005000000050802020103020205ff +05a100000500000005000000050000000500000005000000050000000500000005000000 +050902020103020205060100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005180202010302020505010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500000005170202010302020506010005100000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005020000 +050c0000051802020103020205050100050c000005000100050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050001000500000005000000 +050c0000051702020103020205060100050a0000050001000502000005ff057601000502 +000005000000050000000508000005180202010302020505010005080000050000000502 +01000500000005ff05780100050000000502000005000000050800000517020201030202 +050601000506000005000000050201000502000005ff0576010005020000050400000500 +0000050400000518020201030202050501000504000005000000050601000500000005ff +057801000500000005060000050000000504000005170202010302020506010005020000 +05000000050601000502000005ff05760100050200000508000005000000050000000518 +020201030202050501000500010005000100050a01000500000005ff0578010005000000 +050a01000500010005000000051702020103020205060100050201000500010005060100 +0502000005ff057601000502000005080100050001000500000005180202010302020505 +01000504010005000100050601000500000005ff05780100050000000506010005000100 +050400000517020201030202050601000506010005000100050201000502000005ff0576 +010005020000050401000500010005040000051802020103020205050100050801000500 +0100050201000500000005ff057801000500000005020100050001000508000005170202 +0103020205060100050a0100050001000502000005ff0576010005020000050001000500 +010005080000051802020103020205050100050c01000500010005000000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050000000500 +0100050c0000051702020103020205060100051001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050001000500010005020100050c000005180202010302020505 +010005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005170202010302020506000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +00000500000005000000051802020103020205ff05bc02020103020205ff05bc02020103 +020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc +02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 +05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 +0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff +05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103 +020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc +02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 +05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 +0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff +05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103 +020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc +02020101000405ff05bc00050202040005ff05bc00000202040000000202040005ff05bc +00000202040000000202040005ff05bc00000202040000000202040005ff05bc00000202 +040000000202040005ff05bc000002020400000002020400000502ff02b0000602020400 +00000208040002ff02b000000208040000000208040002ff02b000000208040000000208 +040001ff01b00000020804000000040901ff01b000000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 228 183 +%%EOF diff --git a/lib/tv/doc/src/tv_start.gif b/lib/tv/doc/src/tv_start.gif new file mode 100644 index 0000000000..7a8a0cf6ce Binary files /dev/null and b/lib/tv/doc/src/tv_start.gif differ diff --git a/lib/tv/doc/src/tv_start.ps b/lib/tv/doc/src/tv_start.ps new file mode 100644 index 0000000000..7dae8e4a5a --- /dev/null +++ b/lib/tv/doc/src/tv_start.ps @@ -0,0 +1,828 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_start.tmp.eps) +%%CreationDate: (Tue Jun 12 16:02:24 2001) +%%BoundingBox: 0 42 377 247 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 42 377 247 +userdict begin +%%BeginData: +DisplayImage +0 42 +377.000000 205.000000 +12 +755 410 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +828282 +aab6aa +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff +02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 +04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff +02d000000202040000000202040002080000020d040002f6010302110103023801010206 +0101024001010230010102ff020400000202040000000202040002080000020d040002f6 +010102020107020001010203010102010101020e0105020001070201010302070100020b +01010206010102400101020c0104021e010102ff02040000020204000000020204000208 +0000020d040002f6010102050101020301010203010102010101020e0101020701010203 +01010201010102050101020b010102060101024e010102020101021d010102ff02040000 +0202040000000202040002080000020204060203040002f6010102050101020301010203 +010102010101020e01010207010102030101020801040201010302030101020001010203 +010102020103020301040206010302030101020001010207010102000101020101010203 +010302030101020201010200010102020101020101030202010102000101020101010203 +010302020101020001010201010102020103020201010202010102f30000020204000000 +04030208000002020400030400000203040002f601010205010102040101020201000202 +0101020e0101020701010203010202080101020201010201010102020102020001010202 +010102010101020101010201010102090101020101010202010202000101020601020200 +010202000101020101010201010102020101020201020200010102010101020001010200 +010102020102020001020200010102010101020101010201010102000101020101010201 +010102010101020101010202010102f3000004030101020b000002030400030200000204 +040002f6010102050101020401010201010102020101020e010402040101020401030206 +010102060101020201010201010102020101020101010201010102010102020801010201 +010102020101020101010206010102010101020101010205010102020101020201010201 +010102010101020001010200010102020101020101010201010102050101020101020203 +01010201010102010101020101010202010002f70103020b000002030400030200000204 +040002f6010102050101020501010200010002030101020e010102070101020601020205 +010102030104020201010201010102020101020101050202010302060101020101010202 +010102010101020601010201010102010101020201040202010102020101020101010201 +010102000101020001010202010102010101020101010202010402010101020401010201 +0105020201010200010102f70103020b000002040400030000000205040002f601010205 +01010205010302030101020e010102070101020701010205010102020101020101010202 +010102010101020201010201010102080102020501010201010102020101020101010206 +010102010101020101010201010102010101020201010202010102010101020101010201 +010102000101020101010201010102010101020101010201010102010101020401010201 +0101020601010200010002f80103020b000002040400030000000205040002f601010205 +01010206010102040101020e010102070101020301010201010102050101020201010201 +010102020101020101010202010102010101020201000205010102050101020101010202 +010102010101020601010201010102010101020101010201010102020101020201010201 +010102020101020701010201010102010101020101010201010102010101020401010201 +0101020201000203010202f80103020b0000020500000206040002f60101020501010206 +010102040101020e01050203010102040103020701020201010202000101020101040203 +010102020103020201040207010302030101020101010206010102010101020101010202 +010202000101020101010202010102010101020301050202010102010101020101010202 +0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 +01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 +020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff +02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff +02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff +05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 +010302020001050b06040504060005030602051f0600050206000504060005270602050b +06000506060005ff05ff053506000502060005090602051307010202010302020001050b +0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 +0600050b0600051307010202010302020001050b06000506060205050600050306020518 +060005020600050206020503060205020600050206000517060005020600050106000500 +060105020604050206020503060205020600050006010503060205ff05ff052006000502 +060005020602050506000502060005000601050c07010202010302020001050b06000508 +060005050600050206000502060005180600050006000505060005020600050206000501 +060005020600051706000502060005010601050106000503060005060600050206000502 +06000501060105010600050106000502060005ff05ff051f060005020600050106000502 +0600050406000502060105010600050b07010202010302020001050b0603050506000505 +060005020600050206000518060005000600050506000502060005020600050106000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000501060005ff05ff052306040501060005020600050406000502 +060005020600050b07010202010302020001050b06000508060005050600050206040518 +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05ff052006000502060005010604050406000502060005020600050b0701020201030202 +0001050b0600050806000505060005020600051d06000506060005020600050506000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000505060005ff05ff051f06000502060005010600050806000502 +060005020600050b07010202010302020001050b06000508060005050600050206000502 +060005190600050606000502060005020600050106000500060005000600051706000502 +060005010601050106000503060005060600050206000502060005010600050206000501 +06000502060005ff05ff051f060005020600050106000502060005040600050206010501 +0600050b07010202010302020001050b0600050806000505060005030602051a06000506 +060005030602050306000500060005190602050206000500060105050601050406000503 +060205020600050206000502060205ff05ff052006000502060005020602050506000502 +060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 +010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f +07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e +0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 +0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 +05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 +01030202050e01060508010005060101050f010205010102059b01060508010005060101 +0510010505040101054d010205240104050d0101051e0102052401020501010205930106 +0508010005060101051101030535020201030202050e0100050101010500010005070101 +050601000511010105010100059d01000501010105000100050701010506010005130101 +05060100054d0101050001010524010105000101050c0100051e01010500010105240101 +050101000595010005010101050001000507010105060100051101010501010105340202 +010302020510010105030103050201030503010105030103050801020500010105010103 +05000101050001000500010005020103058b010105030103050201030503010105030103 +050a010105030104054c0101050101050500010305000102050201030501010105000102 +05070101050101010500010305030104051d010105010105050001030500010205020103 +050101010500010205070102050001010501010305000101050001000500010005020103 +058301010503010305020103050301010503010305090101050101000500010305020105 +050101030521020201030202051001010506010105000101050101010502010105020101 +0501010105070100050001000500010005050101050001050500010105010101058a0101 +050601010500010105010101050201010502010105010101050901010502010105010101 +054c01000502010105000101050201000500010205000101050001010501010105010102 +050001000507010105010101050201010502010105010101051d01000502010105000101 +050201000500010205000101050001010501010105010102050001000507010005000100 +050001000505010105000105050001010501010105820101050601010500010105010101 +050201010502010105010101050801020504010105020101050001010501010105010101 +052002020103020205100100050401040500010105010101050201010501010605070100 +0500010205020104050001010500010005000107058a0100050401040500010105010101 +0502010105010106050901010501010105020101054b0101050201000501010105000100 +05000100050001010501010805010101050a0103050401010501010105020101051c0101 +05020100050101010500010005000100050001010501010805010101050a010005000102 +050201040500010105000100050001070582010005040104050001010501010105020101 +05010106050901020503010105040101050101060520020201030202050f010105020101 +0501010105000101050201010501010105020101050b0101050001010501010105010101 +05010100050001000500010005000101058e010105020101050101010500010105020101 +0501010105020101050d01010502010105010101054c0101050101010501010205000100 +05010100050201000500010105050101050a0101050601010502010105010101051d0101 +05010101050101020500010005010100050201000500010105050101050a010105000101 +050101010501010105010100050001000500010005000101058601010502010105010101 +05000101050201010501010105020101050b010105010101050201010503010105030101 +0525020201030202050f0101050201010501010105000101050101010502010105020101 +050101010507010005010101050101010501010105000101050001000500010005000101 +05010101058a010105020101050101010500010105010101050201010502010105010101 +050901010502010105010101054c01010500010105020103050101010501010105000101 +0501010105010101050a0101050601010502010105010101051d01010500010105020103 +0501010105010101050001010501010105010101050a0100050101010501010105010101 +050001010500010005000100050001010501010105820101050201010501010105000101 +050101010502010105020101050101010507010105010101050201010502010205000101 +05000101050101010521020201030202050e01030502010a050101050501010305070102 +0500010105020107050001000500010105000103058a01030502010a0501010505010103 +0508010505010105054c0102050301010500010005000103050001020500010305010104 +050701030503010505010105051d01020503010105000100050001030500010205000103 +05010104050701020500010105020107050001000500010105000103058201030502010a +050101050501010305090103050101050500010505010103052202020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e8020201030202050201ff01ff01e205020202010302020503080000cb080001000081 +01010059010100c30101005801000711000005020202010302020503080000cb08000100 +000b0101004e0101002201010059010100c3010100580100070103060700030600010502 +0202010302020503080000cb08000100000a0100001c0100002a01000008010000210101 +000c0100002a0100001f010100c301010058010007010305000007000306000105020202 +0103020205030800001f0800000a080000060802009408000100000a0100000401020003 +0102000c010000040101000a010200030102000b0101000201000007010000210101000b +010000040101000a010200030102000b010100020100001e010100c30101000a0101004b +0100070103050000070103050001050202020103020205030800001f0800000a08000008 +0800009408000100000a010000030100000201000001010000020100000a010000040100 +000101000008010000020100000101000002010000090100000101000002010000060100 +00210101000a010000040100000101000008010000020100000101000002010000090100 +0001010000020100001d010100c301010009010000010100004a01000701030400010701 +030500010502020201030202050308000008080100000800000208000002080000080804 +0002080200020800000008010005080000030802008d08000100000a0100000701000005 +0100000901000005010000010100000c0100000501000009010000010100000301000005 +010000210101000901000005010000010100000c01000005010000090100000101000003 +0100001c010100c301010009010000010100004a01000701030400010500070103040001 +0502020201030202050308000008080000000800000008000001080000020800000a0800 +00030800000208000001080100010800000408000002080000020800008c08000100000a +01000007010000050100000801000006010000010100000c010000050100000901000001 +0100000401000004010000210101000801000006010000010100000c0100000501000009 +01000001010000040100001b010100c301010009010000010100004a0100070103030001 +050107010304000105020202010302020503080000080800000008000000080000020800 +00010800000a0800000708000001080000020800000408000002080000020800008c0800 +0100000801010007010000050100000801000007010000010100000a010100040101000a +0100000101000005010000040101001f0101000701000007010000010100000a01010004 +0101000a01000001010000050100001a010100c301010009010000010100004a01000701 +030300010502070103030001050202020103020205030800000808000000080000000800 +0002080000010800000a08000004080300010800000208000004080000020804008c0800 +0100000a01000005010000050100000a01000006010000010100000c0100000501000009 +010000010100000401000004010000210101000801000006010000010100000c01000005 +0100000901000001010000040100001b010100c301010009010000010100004a01000701 +030200010503070103030001050202020103020205030800000808000000080000000800 +0003080000000800000a0800000308000002080000010800000208000004080000020800 +009008000100000a01000004010000050100000c01000005010000010100000c01000005 +01000009010000010100000301000005010000210101000901000005010000010100000c +010000050100000901000001010000030100001c010100c301010009010000010100004a +010007010302000105040701030200010502020201030202050308000008080000000800 +0000080000030801000b0800000308000002080000010801000108000004080000020800 +00020800008c08000100000a010000030100000501000007010100040100000401000001 +010000030101000201000002010000010100000201000003010100030100000101000002 +01000006010000210101000a010000040100000101000003010100020100000201000001 +01000002010000030101000301000001010000020100001d010100c30101000901000001 +0100004a0100070103010001050507010302000105020202010302020503080000080800 +000008000000080000040800000c08010002080300010800000008010005080000030802 +008d08000100000a01000003010400010104000301010005010000040101000401010003 +0102000301020004010100040101000201000007010000210101000b0100000401010004 +01010003010200030102000401010004010100020100001e010100c30101000a0101004b +010007010301000105060701030100010502020201030202050308000012080000010805 +00af08000100000a01000014010000060100002a01000008010000210101000c0100002a +0100001f010100c301010058010007010300000105070701030100010502020201030202 +05030800000f08000000080000b808000100000b010100100101003b0101002201010059 +010100c30101005801000701030000010508070103000001050202020103020205030800 +0010080000b908000100008101010059010100c301010058010007010001070b03000001 +05020202010302020503080000cb08000100008101010059010100c30101005801000701 +0000070d000105020202010302020503080000cb08000100008101010059010100c30101 +005801000701030e000105020202010302020503080000cb080001000081010100590101 +00c30101005801000701001005020202010302020503080000cb08000100008101010059 +010100c30101005801000701000d070000010502020201030202050308cd01ff01ff0100 +07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 +01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a +070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503 +01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a070100010502020201030202050301ff01ff +01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 +020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +0202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a070100010502020201030202050301ff01ff01ce07010001 +050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202 +050301ff01ff01ce07010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a070100010502020201030202050301ff +01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001070c +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0000070d00010502020201030202050301ff01ff01ce0701030e00010502020201030202 +050301ff01ff01ce0701030e000105020202010302020503010000cb0101008101010059 +010100c30101005801000701030e000105020202010302020503010000cb010100810101 +0059010100c30101005801000701030e000105020202010302020503010000cb01010081 +01010059010100c30101005801000701030e000105020202010302020503010000cb0101 +008101010059010100c30101005801000701030e000105020202010302020503010000cb +0101008101010059010100c30101005801000701030e0001050202020103020205030100 +00cb0101008101010059010100c30101005801000701030e000105020202010302020503 +010000cb0101008101010059010100c30101005801000701030e00010502020201030202 +0503010000cb0101008101010059010100c30101005801000701030e0001050202020103 +02020503010000cb0101008101010059010100c30101005801000701030e000105020202 +010302020503010000cb0101008101010059010100c30101005801000701030e00010502 +0202010302020503010000cb0101008101010059010100c30101005801000701030e0001 +05020202010302020503010000cb0101008101010059010100c30101005801000701030e +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +030e000105020202010302020503010000cb0101008101010059010100c3010100580100 +0701030e000105020202010302020503010000cb0101008101010059010100c301010058 +01000701030e000105020202010302020503010000cb0101008101010059010100c30101 +005801000701030e000105020202010302020503010000cb0101008101010059010100c3 +0101005801000701030e000105020202010302020503010000cb01010081010100590101 +00c30101005801000701030e000105020202010302020503010000cb0101008101010059 +010100c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e +00010502020201030202050301ff01ff01ce0701001005020202010302020503010000cb +0101008101010059010100c301010058010007010300000c070000010502020201030202 +0503010000cb0101008101010059010100c3010100580100070103000001050807010300 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +03010001050707010300000105020202010302020503010000cb01010081010100590101 +00c3010100580100070103010001050607010301000105020202010302020503010000cb +0101008101010059010100c3010100580100070103020001050507010301000105020202 +010302020503010000cb0101008101010059010100c30101005801000701030200010504 +07010302000105020202010302020503010000cb0101008101010059010100c301010058 +0100070103030001050307010302000105020202010302020503010000cb010100810101 +0059010100c3010100580100070103030001050207010303000105020202010302020503 +010000cb0101008101010059010100c30101005801000701030400010501070103030001 +05020202010302020503010000cb0101008101010059010100c301010058010007010304 +0001050007010304000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010305000007020304000105020202010302020503010000cb01010081 +01010059010100c301010058010007010305000007010305000105020202010302020503 +010000cb0101008101010059010100c30101005801000701030607010305000105020202 +010302020503010000cb0101008101010059010100c30101005801000701030607000306 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +001005020202010302020503010000cb0101008101010059010100c30101005801000700 +00110502020201030202050207ff07ff07d30511020201030202050207ff07ff07d20000 +051102020103020205020701030d0000030000ff00ff00af03000001030c000105110202 +0103020205020701030b00010700030000ff00ff00ae070003000003030a000105110202 +01030202050207010309000207010300000105ff05ff05ab070103000005030800010511 +0202010302020502070103070003050007010300000105ff05ff05ab0701030000010501 +00030306000105110202010302020502070103050003050207010300000105ff05ff05ab +070103000001050300030304000105110202010302020502070103030003050407010300 +000105ff05ff05ab07010300000105050003030200010511020201030202050207010301 +0003050607010300000105ff05ff05ab0701030000010507000303000001051102020103 +020205020705050807010300000105ff05ff05ab07010300000105080703000105110202 +010302020502070103010703050607010300000105ff05ff05ab07010300000105070703 +0300000105110202010302020502070103030703050407010300000105ff05ff05ab0701 +030000010505070303020001051102020103020205020701030507030502070103000001 +05ff05ff05ab070103000001050307030304000105110202010302020502070103070703 +050007010300000105ff05ff05ab07010300000105010703030600010511020201030202 +05020701030907040300000105ff05ff05ab070103000001070303080001051102020103 +020205020701030b07020300000107ff07ff07ad030000010701030a0001051102020101 +000405020701030d07000300000007ff07ff07ae030000000700030c0001051100050202 +04000502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d2 +051100000202040000000202040005ff05ff05e800000202040000000202040005ff05ff +05e800000202040000000202040005ff05ff05e8000002020400000002020400000502ff +02ff02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff +02ff02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff +01dc00000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 42 377 247 +%%EOF diff --git a/lib/tv/doc/src/tv_start_mnesia.gif b/lib/tv/doc/src/tv_start_mnesia.gif new file mode 100644 index 0000000000..0ad04331cd Binary files /dev/null and b/lib/tv/doc/src/tv_start_mnesia.gif differ diff --git a/lib/tv/doc/src/tv_start_mnesia.ps b/lib/tv/doc/src/tv_start_mnesia.ps new file mode 100644 index 0000000000..a90185089d --- /dev/null +++ b/lib/tv/doc/src/tv_start_mnesia.ps @@ -0,0 +1,835 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_mnesia.eps) +%%CreationDate: (Mon Mar 19 17:15:23 2001) +%%BoundingBox: 0 0 377 205 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 377 205 +userdict begin +%%BeginData: +DisplayImage +0 0 +377.000000 205.000000 +12 +755 410 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +828282 +a3a3a3 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff +02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 +04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff +02d000000202040000000202040002080000020d040002ea01030211010302330101021b +010102060101024001010230010102f700000202040000000202040002080000020d0400 +02ea010102020107020001010203010102010101020e010202020102021b0101020e0100 +020b01010206010102400101020c0104021e010102f70000020204000000020204000208 +0000020d040002ea010102050101020301010203010102010101020e010202020102022b +0101020b010102060101024e010102020101021d010102f7000002020400000002020400 +02080000020204060203040002ea010102050101020301010203010102010101020e0102 +020201020202010102000101020301030203010402020101020201030205010402010103 +020301010200010102030101020201030203010402060103020301010200010102070101 +020001010201010102030103020301010202010102000101020201010201010302020101 +020001010201010102030103020201010200010102010101020201030202010102020101 +02e6000002020400000004030208000002020400030400000203040002ea010102050101 +020401010202010002020101020e01000200010102000100020001010202010202000101 +020101010201010102010101020601010201010102010101020501010202010102010101 +020201020200010102020101020101010201010102010101020901010201010102020102 +020001010206010202000102020001010201010102010101020201010202010202000101 +020101010200010102000101020201020200010202000101020101010201010102010101 +02000101020101010201010102010101020101010202010102e6000004030101020b0000 +02030400030200000204040002ea010102050101020401010201010102020101020e0100 +020001010200010002000101020201010201010102010101020101010201010202050101 +020501010205010102060101020201010201010102020101020101010201010102010102 +020801010201010102020101020101010206010102010101020101010205010102020101 +020201010201010102010101020001010200010102020101020101010201010102050101 +02010102020301010201010102010101020101010202010002ea0103020b000002030400 +030200000204040002ea010102050101020501010200010002030101020e010002000101 +020001000200010102020101020101010201010502020103020301010202010402050101 +020301040202010102010101020201010201010502020103020601010201010102020101 +020101010206010102010101020101010202010402020101020201010201010102010101 +020001010200010102020101020101010201010102020104020101010204010102010105 +020201010200010102ea0103020b000002040400030000000205040002ea010102050101 +0205010302030101020e0100020101010201010102020101020101010201010102080102 +020201010201010102010101020501010202010102010101020201010201010102020101 +020101010208010202050101020101010202010102010101020601010201010102010101 +020101010201010102020101020201010201010102010101020101010200010102010101 +020101010201010102010101020101010201010102040101020101010206010102000100 +02eb0103020b000002040400030000000205040002ea0101020501010206010102040101 +020e01000201010102010101020201010201010102010101020201000205010102020101 +020101010201010102050101020201010201010102020101020101010202010102010101 +020201000205010102050101020101010202010102010101020601010201010102010101 +020101010201010102020101020201010201010102020101020701010201010102010101 +0201010102010101020101010204010102010101020201000203010202eb0103020b0000 +020500000206040002ea0101020501010206010102040101020e01000205010102020101 +020101010202010302020104020301010202010202000101020501020201010202000101 +020101040203010102020103020201040207010302030101020101010206010102010101 +020101010202010202000101020101010202010102010101020301050202010102010101 +0201010102020102020001010200010102040101020201030204010102ec0103020b0000 +020d040002ea01030211010302dd010102ed0103020b0000020d040002ff02e2010102ed +0103020b0000020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee +010302ff02ff02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202 +010302ff02ff02ee0103020200ff00ff00e802020103020200ff00ff00e7070002020103 +0202000105ff05ff05e40701020201030202000105ff05ff05e407010202010302020001 +05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff +05e407010202010302020001050b06040504060005030602051f06000502060005040600 +05270602050b06000506060005ff05ff0535060005020600050906020513070102020103 +02020001050b0600050f0600051f060005020600052c060005020600050a060005ff05ff +053d060005020600050b0600051307010202010302020001050b06000506060205050600 +050306020518060005020600050206020503060205020600050206000517060005020600 +050106000500060105020604050206020503060205020600050006010503060205ff05ff +052006000502060005020602050506000502060005000601050c07010202010302020001 +050b06000508060005050600050206000502060005180600050006000505060005020600 +050206000501060005020600051706000502060005010601050106000503060005060600 +05020600050206000501060105010600050106000502060005ff05ff051f060005020600 +0501060005020600050406000502060105010600050b07010202010302020001050b0603 +050506000505060005020600050206000518060005000600050506000502060005020600 +050106000500060005000600051706000502060005010600050206000503060005060600 +050206000502060005010600050206000501060005ff05ff052306040501060005020600 +050406000502060005020600050b07010202010302020001050b06000508060005050600 +050206040518060005000600050506000502060405010600050006000500060005170600 +050206000501060005020600050306000506060005020600050206000501060005020600 +0502060205ff05ff052006000502060005010604050406000502060005020600050b0701 +0202010302020001050b0600050806000505060005020600051d06000506060005020600 +050506000500060005000600051706000502060005010600050206000503060005060600 +050206000502060005010600050206000505060005ff05ff051f06000502060005010600 +050806000502060005020600050b07010202010302020001050b06000508060005050600 +050206000502060005190600050606000502060005020600050106000500060005000600 +051706000502060005010601050106000503060005060600050206000502060005010600 +05020600050106000502060005ff05ff051f060005020600050106000502060005040600 +0502060105010600050b07010202010302020001050b0600050806000505060005030602 +051a06000506060005030602050306000500060005190602050206000500060105050601 +050406000503060205020600050206000502060205ff05ff052006000502060005020602 +050506000502060005000601050c070102020103020200010576060005ff05ff055b0600 +050f07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606 +050e0600050f07010202010302020001050a0606052a0606052a06060500060005ff05ff +05450606050e0600050f0701020201030202000105ff05ff05e407010202010302020001 +05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000107ff07ff +07e6020201030202000007ff07ff07e702020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e8020201030202051c +01020504010305c1080205040803051a0802057f01010505010205f00102050401030519 +0101052f020201030202050e01060508010005060101050f010205010102059b08060508 +0800050608010510080505040801054d010205240104050d0101051e0102052401020501 +0102059301060508010005060101051101030535020201030202050e0100050101010500 +010005070101050601000511010105010100059d08000501080105000800050708010506 +08000513080105060800054d0101050001010524010105000101050c0100051e01010500 +010105240101050101000595010005010101050001000507010105060100051101010501 +010105340202010302020510010105030103050201030503010105030103050801020500 +01010501010305000101050001000500010005020103058b080105030803050208030503 +080105030803050a080105030804054c0101050101050500010305000102050201030501 +01010500010205070101050101010500010305030104051d010105010105050001030500 +010205020103050101010500010205070102050001010501010305000101050001000500 +010005020103058301010503010305020103050301010503010305090101050101000500 +010305020105050101030521020201030202051001010506010105000101050101010502 +010105020101050101010507010005000100050001000505010105000105050001010501 +0101058a0801050608010500080105010801050208010502080105010801050908010502 +080105010801054c01000502010105000101050201000500010205000101050001010501 +010105010102050001000507010105010101050201010502010105010101051d01000502 +010105000101050201000500010205000101050001010501010105010102050001000507 +010005000100050001000505010105000105050001010501010105820101050601010500 +010105010101050201010502010105010101050801020504010105020101050001010501 +010105010101052002020103020205100100050401040500010105010101050201010501 +0106050701000500010205020104050001010500010005000107058a0800050408040500 +0801050108010502080105010806050908010501080105020801054b0101050201000501 +01010500010005000100050001010501010805010101050a010305040101050101010502 +0101051c010105020100050101010500010005000100050001010501010805010101050a +010005000102050201040500010105000100050001070582010005040104050001010501 +01010502010105010106050901020503010105040101050101060520020201030202050f +0101050201010501010105000101050201010501010105020101050b0101050001010501 +01010501010105010100050001000500010005000101058e080105020801050108010500 +0801050208010501080105020801050d08010502080105010801054c0101050101010501 +01020500010005010100050201000500010105050101050a010105060101050201010501 +0101051d010105010101050101020500010005010100050201000500010105050101050a +010105000101050101010501010105010100050001000500010005000101058601010502 +01010501010105000101050201010501010105020101050b010105010101050201010503 +0101050301010525020201030202050f0101050201010501010105000101050101010502 +010105020101050101010507010005010101050101010501010105000101050001000500 +01000500010105010101058a080105020801050108010500080105010801050208010502 +080105010801050908010502080105010801054c01010500010105020103050101010501 +0101050001010501010105010101050a0101050601010502010105010101051d01010500 +0101050201030501010105010101050001010501010105010101050a0100050101010501 +010105010101050001010500010005000100050001010501010105820101050201010501 +010105000101050101010502010105020101050101010507010105010101050201010502 +01020500010105000101050101010521020201030202050e01030502010a050101050501 +0103050701020500010105020107050001000500010105000103058a08030502080a0501 +0805050108030508080505010805054c0102050301010500010005000103050001020500 +010305010104050701030503010505010105051d01020503010105000100050001030500 +010205000103050101040507010205000101050201070500010005000101050001030582 +01030502010a050101050501010305090103050101050500010505010103052202020103 +020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 +020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 +020205ff05ff05e8020201030202050201ff01ff01e205020202010302020503010000cb +0101008101010059010100c30101005801000711000005020202010302020503010000cb +0101008101010059010100c3010100580100070103060700030600010502020201030202 +0503010000cb010100810101000c0100002a0100001f010100c301010058010007010305 +0000070003060001050202020103020205030100000a010000130100000c0100000a0100 +000601020086010100810101000b0100000401010009010400010104000a010100020100 +001e0101002701000028010000040100006a0101000a0101004b01000701030500000701 +03050001050202020103020205030100000a010000130100000c0100000a010000080100 +0086010100810101000a01000004010000010100000801000002010000010100000d0100 +0001010000020100001d010100570100006a01010009010000010100004a010007010304 +000107010305000105020202010302020503010000080104000201020003010200020104 +000801040002010200020100000001010005010000030102007f01010081010100090100 +0005010000010100000c010000010100000d01000001010000030100001c010100080101 +000001000002010000000101000301020003010200030102000301020009010100000100 +0003010200020100000001010003010200020104000201020002010000000101005b0101 +0009010000010100004a0100070103040001050007010304000105020202010302020503 +0100000a01000003010000020100000101000002010000030100000c0100000301000002 +01000001010100010100000401000002010000020100007e010100810101000801000006 +010000010100000b010000020103000a01000001010000040100001b0101000801000000 +010000000100000101010001010000010100000201000001010000020100000401000002 +010000020100000801000000010000000100000101000002010000010101000101000004 +01000004010000030100000201000001010100010100005a01010009010000010100004a +01000701030300010501070103040001050202020103020205030100000a010000030100 +000201000001010000070100000c01000007010000010100000201000004010000020100 +00020100007e010100810101000701000007010000010100000b01000006010000090100 +0001010000050100001a0101000801000000010000000100000101000002010000010100 +000201000001010000080100000601000008010000000100000001000001010000020100 +00010100000201000004010000040100000301000002010000010100005e010100090100 +00010100004a01000701030300010502070103030001050202020103020205030100000a +0100000301040002010200040100000c0100000401030001010000020100000401000002 +0104007e010100810101000801000006010000010100000b010000060100000901000001 +010000040100001b01010008010000000100000001000001010000020100000101040002 +010200050100000301030008010000000100000001000001010000020100000101000002 +01000004010000040100000301000002010000010100005e01010009010000010100004a +01000701030200010503070103030001050202020103020205030100000a010000030100 +0009010000030100000c0100000301000002010000010100000201000004010000020100 +0082010100810101000901000005010000010100000a0100000301000002010000090100 +0001010000030100001c0101000801000000010000000100000101000002010000010100 +000901000004010000020100000201000008010000000100000001000001010000020100 +00010100000201000004010000040100000301000002010000010100005e010100090100 +00010100004a01000701030200010504070103020001050202020103020205030100000a +01000003010000020100000101000002010000030100000c010000030100000201000001 +010100010100000401000002010000020100007e010100810101000a0100000401000001 +01000003010100040100000301000002010000030101000301000001010000020100001d +010100080100000001000000010000010100000201000001010000020100000101000002 +010000040100000201000002010000080100000001000000010000010100000201000001 +0100000201000004010000040100000301000002010000010100005e0101000901000001 +0100004a01000701030100010505070103020001050202020103020205030100000b0101 +000201020003010200050101000b01010002010300010100000001010005010000030102 +007f010100810101000b0100000401010004010100040100000401020004010100040101 +00020100001e010100080100000001000000010000010100000201000002010200030102 +000501000003010300080100000001000000010000020102000201000002010000040100 +000501010002010200020100005e0101000a0101004b0100070103010001050607010301 +00010502020201030202050301000023010500a1010100810101000c0100002a0100001f +010100310105008b01010058010007010300000105070701030100010502020201030202 +0503010000cb0101008101010059010100c3010100580100070103000001050807010300 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001070b0300000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010000070d000105020202010302020503010000cb01010081010100590101 +00c30101005801000701030e000105020202010302020503010000cb0101008101010059 +010100c30101005801000701001005020202010302020503010000cb0101008101010059 +010100c30101005801000701000d070000010502020201030202050301ff01ff01ce0701 +0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 +0202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +01ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 +00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +020201030202050301ff01ff01ce07010001050a070100010502020201030202050301ff +01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce +07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 +01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a +070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503 +01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a070100010502020201030202050301ff01ff +01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001070c0001 +05020202010302020503010000cb0101008101010059010100c301010058010007010000 +070d00010502020201030202050301ff01ff01ce0701030e000105020202010302020503 +01ff01ff01ce0701030e000105020202010302020503010000cb01010081010100590101 +00c30101005801000701030e000105020202010302020503010000cb0101008101010059 +010100c30101005801000701030e000105020202010302020503010000cb010100810101 +0059010100c30101005801000701030e000105020202010302020503010000cb01010081 +01010059010100c30101005801000701030e000105020202010302020503010000cb0101 +008101010059010100c30101005801000701030e000105020202010302020503010000cb +0101008101010059010100c30101005801000701030e0001050202020103020205030100 +00cb0101008101010059010100c30101005801000701030e000105020202010302020503 +010000cb0101008101010059010100c30101005801000701030e00010502020201030202 +0503010000cb0101008101010059010100c30101005801000701030e0001050202020103 +02020503010000cb0101008101010059010100c30101005801000701030e000105020202 +010302020503010000cb0101008101010059010100c30101005801000701030e00010502 +0202010302020503010000cb0101008101010059010100c30101005801000701030e0001 +05020202010302020503010000cb0101008101010059010100c30101005801000701030e +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +030e000105020202010302020503010000cb0101008101010059010100c3010100580100 +0701030e000105020202010302020503010000cb0101008101010059010100c301010058 +01000701030e000105020202010302020503010000cb0101008101010059010100c30101 +005801000701030e000105020202010302020503010000cb0101008101010059010100c3 +0101005801000701030e000105020202010302020503010000cb01010081010100590101 +00c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e0001 +0502020201030202050301ff01ff01ce0701001005020202010302020503010000cb0101 +008101010059010100c301010058010007010300000c0700000105020202010302020503 +010000cb0101008101010059010100c30101005801000701030000010508070103000001 +05020202010302020503010000cb0101008101010059010100c301010058010007010301 +0001050707010300000105020202010302020503010000cb0101008101010059010100c3 +010100580100070103010001050607010301000105020202010302020503010000cb0101 +008101010059010100c30101005801000701030200010505070103010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010302000105040701 +0302000105020202010302020503010000cb0101008101010059010100c3010100580100 +070103030001050307010302000105020202010302020503010000cb0101008101010059 +010100c30101005801000701030300010502070103030001050202020103020205030100 +00cb0101008101010059010100c301010058010007010304000105010701030300010502 +0202010302020503010000cb0101008101010059010100c3010100580100070103040001 +050007010304000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010305000007020304000105020202010302020503010000cb010100810101 +0059010100c3010100580100070103050000070103050001050202020103020205030100 +00cb0101008101010059010100c301010058010007010306070103050001050202020103 +02020503010000cb0101008101010059010100c301010058010007010306070003060001 +05020202010302020503010000cb0101008101010059010100c301010058010007010010 +05020202010302020503010000cb0101008101010059010100c301010058010007000011 +0502020201030202050207ff07ff07d30511020201030202050207ff07ff07d200000511 +02020103020205020701030d0000030000ff00ff00af03000001030c0001051102020103 +020205020701030b00010700030000ff00ff00ae070003000003030a0001051102020103 +0202050207010309000207010300000105ff05ff05ab0701030000050308000105110202 +010302020502070103070003050007010300000105ff05ff05ab07010300000105010003 +0306000105110202010302020502070103050003050207010300000105ff05ff05ab0701 +030000010503000303040001051102020103020205020701030300030504070103000001 +05ff05ff05ab070103000001050500030302000105110202010302020502070103010003 +050607010300000105ff05ff05ab07010300000105070003030000010511020201030202 +05020705050807010300000105ff05ff05ab070103000001050807030001051102020103 +02020502070103010703050607010300000105ff05ff05ab070103000001050707030300 +000105110202010302020502070103030703050407010300000105ff05ff05ab07010300 +0001050507030302000105110202010302020502070103050703050207010300000105ff +05ff05ab0701030000010503070303040001051102020103020205020701030707030500 +07010300000105ff05ff05ab070103000001050107030306000105110202010302020502 +0701030907040300000105ff05ff05ab0701030000010703030800010511020201030202 +05020701030b07020300000107ff07ff07ad030000010701030a00010511020201010004 +05020701030d07000300000007ff07ff07ae030000000700030c00010511000502020400 +0502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d20511 +00000202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e8 +00000202040000000202040005ff05ff05e8000002020400000002020400000502ff02ff +02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff02ff +02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff01dc +00000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 377 205 +%%EOF diff --git a/lib/tv/doc/src/tv_start_other_node.gif b/lib/tv/doc/src/tv_start_other_node.gif new file mode 100644 index 0000000000..897686e5ef Binary files /dev/null and b/lib/tv/doc/src/tv_start_other_node.gif differ diff --git a/lib/tv/doc/src/tv_start_other_node.ps b/lib/tv/doc/src/tv_start_other_node.ps new file mode 100644 index 0000000000..34477bed6c --- /dev/null +++ b/lib/tv/doc/src/tv_start_other_node.ps @@ -0,0 +1,2316 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (./tv_start_other_node.tmp.eps) +%%CreationDate: (Tue Jun 12 16:05:42 2001) +%%BoundingBox: 0 21 400 186 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 21 400 186 +userdict begin +%%BeginData: +DisplayImage +0 21 +400.000000 165.000000 +12 +1001 414 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +4ac1df +c2c2c2 +6b6b6b +d9d9d9 +b22222 +aab6aa +e7e7e7 +000000 +000000 +000000 +000000 +000000 +000000 +03ff03ff03ff03ff03ff03ff03ff03ff03c5000a01ff01ff01dc000a03f5000002080500 +01ff01ff01dc00000208050003f500000208050002ff02ff02dc00000208050003f50000 +0208050002ff02ff02dc00000208050003f500000202050602ff02ff02dc000005050202 +050003f50000020205000209000d02ff02ff02d000000202050003f50000020205000208 +0000020d050002e101030211010302380101020601010238010102310101022f010102ee +00000202050003f500000202050002080000020d050002e1010102020107020001010203 +010102010101020e0105020001070201010302070100020b010102060101023301000203 +010102310101020b0104021e010102ee00000202050003f500000202050002080000020d +050002e1010102050101020301010203010102010101020e010102070101020301010201 +010102050101020b010102060101023201010203010102310101020a010102020101021d +010102ee00000202050003f500000202050002080000020205060203050002e101010205 +0101020301010203010102010101020e0101020701010203010102080104020101030203 +010102000101020301010202010302030104020601030203010102000101020701030201 +01040201010102000101020301030202010102000101020a010102000101020301030203 +010402020103020201010201010302020101020001010201010102030103020201010200 +01010201010102020103020201010202010102dd00000202050003f50000050302080000 +02020500040400000203050002e1010102050101020401010202010002020101020e0101 +020701010203010202080101020201010201010102020102020001010202010102010101 +020101010201010102090101020101010202010202000101020501010201010102010101 +020301020200010102010101020101010201010102000101020a01020200010102010101 +020101010201010102010101020101010201010102010101020001010200010102020102 +020001020200010102010101020101010201010102000101020101010201010102010101 +020101010202010102dd0000050303f50101020b000002030500040200000204050002e1 +010102050101020401010201010102020101020e01040204010102040103020601010206 +010102020101020101010202010102010101020101010201010202080101020101010202 +010102010101020501010201010102010101020301010201010102010101020101010201 +0102020c0101020101010201010102010101020101010201010102010101020101010201 +010102000101020001010202010102010101020101010205010102010102020301010201 +010102010101020101010202010002e1010103f50101020b000002030500040200000204 +050002e1010102050101020501010200010002030101020e010102070101020601020205 +010102030104020201010201010102020101020101050202010302060101020101010202 +01010201010102050101020101010201010102030101020101010201010502010101020d +010102010101020101010201010102010101020101010201010502010101020001010200 +010102020101020101010201010102020104020101010204010102010105020201010200 +010102e1010103f50101020b000002040500040000000205050002e10101020501010205 +010302030101020e01010207010102070101020501010202010102010101020201010201 +010102020101020101010208010202050101020101010202010102010101020501010201 +01010201010102030101020101010201010102050101020d010102010101020101010201 +010102010101020101010201010102050101020101010200010102010101020101010201 +01010201010102010101020101010204010102010101020601010200010002e2010103f5 +0101020b000002040500040000000205050002e10101020501010206010102040101020e +010102070101020301010201010102050101020201010201010102020101020101010202 +010102010101020201000205010102050101020101010202010102010101020501010201 +0101020101010203010102010101020101010202010002010101020d0101020101010201 +010102010101020101010200010202010101020201000202010102070101020101010201 +01010201010102010101020101010204010102010101020201000203010202e2010103f5 +0101020b0000020500000206050002e10101020501010206010102040101020e01050203 +010102040103020701020201010202000101020101040203010102020103020201040207 +01030203010102010101020601030203010202010101020101010202010302020101020d +010102010101020201030203010102000101020201030204010502020101020101010201 +010102020102020001010200010102040101020201030204010102e3010103f50101020b +0000020d050002e1010302110103029201060255010102e4010103f50101020b0000020d +050002ff02eb010102e4010103f50101020b0000020d050002ff02ff02d2010103f50101 +020c050d02ff02ff02d3010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101 +03f5010102ff02ff02ee010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101 +03f501010202060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +00000600000006000000060000000600000006000202010103f501010202000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060001000202010103f5010102020600000006ff06ff06e40100060002020101 +03f501010202000006ff06ff06e601000202010103f5010102020600000006ff06ff06e4 +010006000202010103f501010202000006ff06ff06e601000202010103f5010102020600 +000006ff06ff06e4010006000202010103f5010102020000060c07040604070006030702 +061f0700060207000604070006270702060b07000606070006ff06ff0635070006020700 +06090702061401000202010103f50101020206000000060b0700060f0700061f07000602 +0700062c070006020700060a070006ff06ff063d070006020700060b0700061301000600 +0202010103f5010102020000060c07000606070206050700060307020618070006020700 +060207020603070206020700060207000617070006020700060107000600070106020704 +060207020603070206020700060007010603070206ff06ff062007000602070006020702 +060507000602070006000701060d01000202010103f50101020206000000060b07000608 +070006050700060207000602070006180700060007000605070006020700060207000601 +070006020700061707000602070006010701060107000603070006060700060207000602 +07000601070106010700060107000602070006ff06ff061f070006020700060107000602 +0700060407000602070106010700060b010006000202010103f5010102020000060c0703 +060507000605070006020700060207000618070006000700060507000602070006020700 +060107000600070006000700061707000602070006010700060207000603070006060700 +060207000602070006010700060207000601070006ff06ff062307040601070006020700 +060407000602070006020700060c01000202010103f50101020206000000060b07000608 +070006050700060207040618070006000700060507000602070406010700060007000600 +070006170700060207000601070006020700060307000606070006020700060207000601 +0700060207000602070206ff06ff06200700060207000601070406040700060207000602 +0700060b010006000202010103f5010102020000060c0700060807000605070006020700 +061d07000606070006020700060507000600070006000700061707000602070006010700 +060207000603070006060700060207000602070006010700060207000605070006ff06ff +061f07000602070006010700060807000602070006020700060c01000202010103f50101 +020206000000060b07000608070006050700060207000602070006190700060607000602 +070006020700060107000600070006000700061707000602070006010701060107000603 +07000606070006020700060207000601070006020700060107000602070006ff06ff061f +0700060207000601070006020700060407000602070106010700060b0100060002020101 +03f5010102020000060c0700060807000605070006030702061a07000606070006030702 +060307000600070006190702060207000600070106050701060407000603070206020700 +060207000602070206ff06ff062007000602070006020702060507000602070006000701 +060d01000202010103f501010202060000000676070006ff06ff065b0700060f01000600 +0202010103f5010102020000060b0706062a0706062a07060600070006ff06ff06450706 +060e0700061001000202010103f50101020206000000060a0706062a0706062a07060600 +070006ff06ff06450706060e0700060f010006000202010103f501010202000006ff06ff +06e601000202010103f5010102020600000006ff06ff06e4010006000202010103f50101 +0202000006ff06ff06e601000202010103f5010102020600000006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0202010103f5010102020000060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +0600010006000100060001000600010006000100060001000202010103f50101020206ff +06ff06e80202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e8 +0202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e802020101 +0303000a01d9000a03010101020206ff06ff06e802020101030300000208050001d90000 +0208050003010101020206ff06ff06e802020101030300000208050002d9000002080500 +03010101020206ff06ff06e802020101030300000208050002d900000208050003010101 +020206ff06ff06e802020101030300000202050602d90000050502020500030101010202 +06ff06ff06e80202010103030000020205000209000d02cd000002020500030101010202 +06ff06ff06e802020101030300000202050002080000020d0500021a0103021101030250 +0101021a0101022700000202050003010101020206ff06ff06e802020101030300000202 +050002080000020d0500021a01010202010702000101020301010201010102100103022b +0100020e0101021a0101022700000202050003010101020206ff06ff06e8020201010303 +00000202050002080000020d0500021a010102050101020301010203010102010101020f +01010201010102290101020e0101021a0101022700000202050003010101020206ff06ff +06e8020201010303000002020500020800000202050602030500021a0101020501010203 +01010203010102010101020e010102060103020301010200010102030101020001010203 +010302030103020001040201010302030104020601010200010102030103020301040202 +010302030104021700000202050003010101020206ff06ff06e802020101030300000503 +02080000020205000404000002030500021a010102050101020401010202010002020101 +020e01010205010102010101020201020200010102020102020001010201010102010101 +020101010201010102000101020201010201010102010101020101010206010202000101 +02010101020101010201010102010101020101010201010102010101021b000005030301 +0101020206ff06ff06e80202010103030101020b0000020305000402000002040500021a +010102050101020401010201010102020101020e01010205010102010101020201010201 +010102020101020101010201010102010101020101010204010102020101020101010201 +010102010101020601010201010102010101020101010201010102010101020101010201 +010102010102021d010103010101020206ff06ff06e80202010103030101020b00000203 +05000402000002040500021a010102050101020501010200010002030101020e01010205 +010102010101020201010201010102020101020101010201010502010101020401010202 +010502010101020101010206010102010101020101010201010102010101020101010201 +010502020103021b010103010101020206ff06ff06e80202010103030101020b00000204 +05000400000002050500021a0101020501010205010302030101020e0101020501010201 +010102020101020101010202010102010101020101010205010102040101020201010205 +010102010101020601010201010102010101020101010201010102010101020101010208 +0102021a010103010101020206ff06ff06e80202010103030101020b0000020405000400 +000002050500021a0101020501010206010102040101020f010102020100020001010201 +010102020101020101010202010102010101020101010202010002010101020201000200 +010102020101020201000201010102000102020601010201010102010101020101010201 +010102000102020101010202010002050101021a010103010101020206ff06ff06e80202 +010103030101020b00000205000002060500021a01010205010102060101020401010210 +010302020103020301010201010102020101020101010202010302030103020201020201 +010302030101020001010206010102010101020201030203010102000101020201030202 +0104021b010103010101020206ff06ff06e80202010103030101020b0000020d0500021a +010302110103029a010103010101020206ff06ff06e80202010103030101020b0000020d +050002cf010103010101020206ff06ff06e80202010103030101020b0000020d050002cf +010103010101020206ff06ff06e80202010103030101020c050d02d00101030101010202 +06ff06ff06e8020201010303010102eb010103010101020206ff06ff06e8020201010303 +010102eb010103010101020206ff06ff06e8020201010303010102eb0101030101010202 +06ff06ff06e8020201010303010102eb0101030101010202061c01020604010306c10102 +06040103061a0102067f01010605010206f001020604010306190101062f020201010303 +010102eb0101030101010202060e01060608010006060101060f010206010102069b0106 +06080100060601010610010506040101064d010206240104060d0101061e010206240102 +060101020693010606080100060601010611010306350202010103030101020206000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000600000006000000060000000600000002020101030101010202060e +0100060101010600010006070101060601000611010106010100069d0100060101010600 +010006070101060601000613010106060100064d0101060001010624010106000101060c +0100061e0101060001010624010106010100069501000601010106000100060701010606 +010006110101060101010634020201010303010102020000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060002020101030101010202061001010603010306020103 +060301010603010306080102060001010601010306000101060001000600010006020103 +068b010106030103060201030603010106030103060a010106030104064c010106010105 +060001030600010206020103060101010600010206070101060101010600010306030104 +061d01010601010506000103060001020602010306010101060001020607010206000101 +060101030600010106000100060001000602010306830101060301030602010306030101 +060301030609010106010100060001030602010506010103062102020101030301010202 +0600000006e2010002020101030101010202061001010606010106000101060101010602 +010106020101060101010607010006000100060001000605010106000105060001010601 +0101068a0101060601010600010106010101060201010602010106010101060901010602 +010106010101064c01000602010106000101060201000600010206000101060001010601 +010106010102060001000607010106010101060201010602010106010101061d01000602 +010106000101060201000600010206000101060001010601010106010102060001000607 +010006000100060001000605010106000105060001010601010106820101060601010600 +010106010101060201010602010106010101060801020604010106020101060001010601 +010106010101062002020101030301010202000006e20100060002020101030101010202 +061001000604010406000101060101010602010106010106060701000600010206020104 +060001010600010006000107068a01000604010406000101060101010602010106010106 +060901010601010106020101064b01010602010006010101060001000600010006000101 +0601010806010101060a0103060401010601010106020101061c01010602010006010101 +0600010006000100060001010601010806010101060a0100060001020602010406000101 +060001000600010706820100060401040600010106010101060201010601010606090102 +0603010106040101060101060620020201010303010102020600000006e2010002020101 +030101010202060f0101060201010601010106000101060201010601010106020101060b +010106000101060101010601010106010100060001000600010006000101068e01010602 +01010601010106000101060201010601010106020101060d01010602010106010101064c +010106010101060101020600010006010100060201000600010106050101060a01010606 +01010602010106010101061d010106010101060101020600010006010100060201000600 +010106050101060a01010600010106010101060101010601010006000100060001000600 +010106860101060201010601010106000101060201010601010106020101060b01010601 +0101060201010603010106030101062502020101030301010202000006e2010006000202 +0101030101010202060f0101060201010601010106000101060101010602010106020101 +060101010607010006010101060101010601010106000101060001000600010006000101 +06010101068a010106020101060101010600010106010101060201010602010106010101 +060901010602010106010101064c01010600010106020103060101010601010106000101 +0601010106010101060a0101060601010602010106010101061d01010600010106020103 +0601010106010101060001010601010106010101060a0100060101010601010106010101 +060001010600010006000100060001010601010106820101060201010601010106000101 +060101010602010106020101060101010607010106010101060201010602010206000101 +06000101060101010621020201010303010102020600000006e201000202010103010101 +0202060e01030602010a0601010506010103060701020600010106020107060001000600 +010106000103068a01030602010a06010105060101030608010506010105064c01020603 +01010600010006000103060001020600010306010104060701030603010506010105061d +010206030101060001000600010306000102060001030601010406070102060001010602 +0107060001000600010106000103068201030602010a0601010506010103060901030601 +010506000105060101030622020201010303010102020000060c07040604070006030702 +06c3010006000202010103010101020206ff06ff06e80202010103030101020206000000 +060b0700060f070006c401000202010103010101020206ff06ff06e80202010103030101 +02020000060c070006060702060507000603070206bc0100060002020101030101010202 +06ff06ff06e80202010103030101020206000000060b0700060807000605070006020700 +0602070006bc01000202010103010101020206ff06ff06e8020201010303010102020000 +060c07030605070006050700060207000602070006bb0100060002020101030101010202 +06ff06ff06e80202010103030101020206000000060b0700060807000605070006020704 +06bc01000202010103010101020206ff06ff06e8020201010303010102020000060c0700 +06080700060507000602070006bf010006000202010103010101020206ff06ff06e80202 +010103030101020206000000060b07000608070006050700060207000602070006bc0100 +02020101030101010202060201ff01ff01e20602020201010303010102020000060c0700 +06080700060507000603070206bc01000600020201010301010102020603010000cb0101 +008101010059010100c30101005801010600010006000100060001000600010006000100 +060001000600010006000100060000000602020201010303010102020600000006e20100 +020201010301010102020603010000cb0101008101010059010100c30101005801000600 +010004060100040600000603020201010303010102020000060b070606cf010006000202 +01010301010102020603010000cb010100810101000c0100002a0100001f010100c30101 +00580101060004050000060004060600000006020202010103030101020206000000060a +070606d001000202010103010101020206030100001f0100000a0100009e010100810101 +000b0100000301020003010200090104000a010100020100001e0101001e010200050100 +0012010000060100002e010000120102000301020031010100080104004a010006000100 +040506000100060004050000060302020101030301010202000006e20100060002020101 +03010101020206030100001f0100000a0100009e010100810101000a0100000301000002 +0100000101000002010000080100000d01000001010000020100001d0101002001000019 +0100003601000014010000050100003101010008010000020100004a0101060004040600 +0000060001000405060000000602020201010303010102020600000006e2010002020101 +03010101020206030100000901020003010200090104000201020002010000000101009b +010100810101000901000008010000010100000c0100000d01000001010000030100001c +010100090102000201000000010100020100000001010005010000030102000301020003 +01020002010400020102000301020002010000000101000a010200030102000201000000 +010100020104000101000000010100030102000501000005010000030102000201000000 +010100230101000c0100004a010006000100040400000602010004040000060302020101 +030301010202000006e20100060002020101030101010202060301000008010000020100 +0001010000020100000a010000030100000201000001010100010100009a010100810101 +000801000009010000010100000c0103000a01000001010000040100001b010100080100 +000201000001010100010100000101010001010000040100000501000002010000020100 +000101000002010000030100000601000002010000020100000101010001010000080100 +000201000001010000020100000101010001010000030100000301010001010000010100 +0002010000040100000501000002010000020100000101010001010000220101000b0100 +004b01010600040300000602010006000404060000000602020201010303010102020600 +000006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010002020101030101010202 +06030100000c010000010100000e0100000701000001010000020100009a010100810101 +000701000009010000020103000d0100000901000001010000050100001a0101000c0100 +000101000002010000010100000201000004010000050100000201000009010000030100 +000601000002010000020100000101000002010000080100000501000002010000010100 +000201000003010000030100000501000002010000040100000501000002010000020100 +0001010000260101000b0100004b01000600010004030600000006020100060004030000 +060302020101030301010202000006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0100060002020101030101010202060301000009010300010100000e0100000401030001 +010000020100009a01010081010100080100000701000003010000020100000c01000009 +01000001010000040100001b010100090103000101000002010000010100000201000004 +010000050100000201000006010300030100000601000002010000020100000101000002 +010000080100000501000002010000010100000201000003010000030100000501000002 +01000004010000050100000201040001010000260101000b0100004b0101060004020600 +00000604010004030600000006020202010103030101020206e502020101030101010202 +06030100000801000002010000010100000e010000030100000201000001010000020100 +009a01010081010100090100000501000004010000020100000801000002010000090100 +0001010000030100001c0101000801000002010000010100000201000001010000020100 +000401000005010000020100000501000002010000030100000601000002010000020100 +000101000002010000080100000501000002010000010100000201000003010000030100 +00050100000201000004010000050100000201000005010000260101000a0100004c0100 +0600010004020000060601000402000006030202010103030101020206e5020201010301 +010102020603010000080100000201000001010000020100000a01000003010000020100 +0001010100010100009a010100810101000a010000030100000501000002010000030101 +000201000002010000030101000301000001010000020100001d01010008010000020100 +000101010001010000010101000101000004010000050100000201000002010000010100 +000201000003010000060100000201000002010000010100000201000008010000020100 +000101000002010000010100000201000003010000030100000501000002010000040100 +0005010000020100000201000001010000260101000a0100004c01010600040100000606 +0100060004020600000006020202010103030101020206e5020201010301010102020603 +01000009010300020102000c0101000201030001010000000101009b010100810101000b +010000020104000201020004010100030102000401010004010100020100001e01010009 +010300010100000001010002010000000101000501000005010000030102000301030004 +010100040100000301020002010000020100000901020003010200020100000201000004 +010100010100000601020005010000050100000301020002010000260101000a0100004c +0100060001000401060000000606010006000401000006030202010103030101020206e5 +02020101030101010202060301000015010500af010100810101000c0100002a0100001f +0101000f010000050100003c010500680101005801010600040006000000060801000401 +0600000006020202010103030101020206e5020201010301010102020603010000cb0101 +0081010100590101000f01000005010000ab0101005801000600010004000000060a0100 +0400000006030202010103030101020206e5020201010301010102020603010000cb0101 +0081010100590101000f01000005010000ab010100580101060000000600010006000100 +060001000600010006000100060001000600040006000000060202020101030301010202 +06e5020201010301010102020603010000cb0101008101010059010100c3010100580100 +060001000600010006000100060001000600010006000100060001000600010006000000 +06030202010103030101020206e5020201010301010102020603010000cb010100810101 +0059010100c30101005801010600040e0600000006020202010103030101020206e50202 +01010301010102020603010000cb0101008101010059010100c301010058010006000100 +060000000600000006000000060000000600000006000000060000000600000006030202 +010103030101020206e5020201010301010102020603010000cb01010081010100590101 +00c301010058010106000000060000000600000006000000060000000600000006000000 +060001000600000006020202010103030101020206e502020101030101010202060301ff +01ff01ce0600010006000000060a01000600000006030202010103030101020206e50202 +0101030101010202060308cd01ff01ff010106000000060c010006000000060202020101 +03030101020206e5020201010301010102020603080009cb080001000981010109590101 +09c30101095801000600010006000000060a010006000000060302020101030301010202 +06e5020201010301010102020603080009cb08000100090b010109550101091b01010959 +010109c301010958010106000000060c01000600000006020202010103030101020206e5 +020201010301010102020603080009cb08000100090a0100091c01000931010009080100 +091a0101090c0100093101000918010109c30101095801000600010006000000060a0100 +0600000006030202010103030101020206e50202010103010101020206030800091a0800 +09af08000100090a01000905010009050101090c01000903010209030102090a01020902 +0104090a01010902010009070100091a0101090b01000903010209030102090a01020902 +0104090a01010902010009170101091a010009a70101090901020904010109030102093d +010106000000060c01000600000006020202010103030101020206cf0100060001000600 +010006000100060001000600010006000100060001000600010006040202010103010101 +020206030800091a080009af08000100090a0100090401010904010009010100090a0100 +090301000902010009010100090201000908010009020100090101000902010009090100 +090101000902010009060100091a0101090a010009030100090201000901010009020100 +0908010009020100090101000902010009090100090101000902010009160101091a0100 +09a70101090801000902010009020100090101000901010009020100093c010006000100 +06000000060a01000600000006030202010103030101020206ce01000600010006000100 +060001000600010006000100060001000600010006000100060000000603020201010301 +0101020206030800090908020903080209030801090008000902080209a908000100090a +010009030100090001000904010009010100090901000908010009010100091001000905 +010009090100090101000903010009050100091a01010909010009080100090101000910 +010009050100090901000901010009030100091501010909010209030102090301010900 +010009020102090a01020903010209020100090001010902010009020100090201020902 +01000900010109700101090c01000902010009010100090101000940010106000000060c +010006000000060202020101030301010202060500000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000602010004060100040600000604 +020201010301010102020603080009080800090208000901080009020800090108000901 +0801090108000902080009a808000100090a010009050100090401000901010009080100 +09090100090101000910010009040100090a0100090101000904010009040100091a0101 +0908010009090100090101000910010009040100090a0100090101000904010009140101 +090801000902010009010100090201000901010009010101090101000902010009080100 +090201000901010009020100090101010901010009010100090201000901010009020100 +0901010109010100096f0101090c01000902010009010100090101000940010006000100 +06000000060a010006000000060302020101030301010202060501000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000001000000010000000100 +000001000000010000000100000001000000010000000100000106010100060004050000 +060004060600000006030202010103010101020206030800090808000905080009020800 +0901080009020800090108000902080009a8080001000908010109060100090401000901 +0100090701000909010009020103090c010009050100090a010009010100090501000904 +010109180101090701000909010009020103090c010009050100090a0100090101000905 +010009130101090801000905010009020100090101000902010009010100090201000908 +010009050100090201000901010009050100090201000901010009020100090101000973 +0101090b0100090301000901010009010103093d010106000000060c0100060000000602 +0202010103030101020206050000010000c4060201000405060001000600040500000604 +020201010301010102020603080009080800090508000902080009010800090208000901 +080409a808000100090a0100090501000904010009010100090801000907010009030100 +09020100090a010009060100090a0100090101000904010009040100091a010109080100 +090701000903010009020100090a010009060100090a0100090101000904010009140101 +090801000905010009020100090101000902010009010104090901020902010409010100 +0906010009000100090201040901010009730101090a0100090401000901010009010100 +09020100093c01000600010006000000060a010006000000060302020101030301010202 +0605010000c5060101000600040406000000060001000405060000000603020201010301 +010102020603080009080800090508000902080009010800090208000901080009ac0800 +0100090a0100090501000904010009010100090901000905010009040100090201000909 +010009060100090b0100090101000903010009050100091a010109090100090501000904 +0100090201000909010009060100090b0100090101000903010009150101090801000905 +010009020100090101000902010009010100091001000901010009050100090601000900 +01000902010009050100097301010909010009050100090101000901010009020100093c +010106000000060c01000600000006020202010103030101020206050000010000260100 +009c06020100040400000602010004040000060402020101030101010202060308000908 +08000902080009010800090208000901080009010801090108000902080009a808000100 +090a01000905010009040100090101000903010109040100090301000905010009020100 +0903010109020100090701000905010109030100090101000902010009060100091a0101 +090a01000903010009050100090201000903010109020100090701000905010109030100 +090101000902010009160101090801000902010009010100090201000901010009010101 +090101000902010009080100090201000901010009020100090101000907010009030100 +0902010009010100097301010908010009060100090101000901010009020100093c0100 +0600010006000000060a01000600000006030202010103030101020206050100001a0100 +000a01000000010000180102007f06010100060004030000060201000600040406000000 +060302020101030101010202060308000909080209030802090308010900080009020802 +09a908000100090a01000903010409030101090401010905010009020104090201020904 +0101090201040903010009050101090401010902010009070100091a0101090b01000902 +010409020102090401010902010409030100090501010904010109020100091701010909 +010209030102090301010900010009020102090a01020903010209020100090701000904 +01020902010009730101090801040903010109030102093d010106000000060c01000600 +0000060202020101030301010202060500000100002401000002010000190100007f0602 +0100040306000000060201000600040300000604020201010301010102020603080009cb +08000100090a010009140100090601000931010009080100091a0101090c010009310100 +091801010923010509990101095801000600010006000000060a01000600000006030202 +010103030101020206050100000901010000010000030102000301020002010000000101 +000201000000010200010101000001000003010200020100000001010005010000030102 +000201000002010000700601010006000402060000000604010004030600000006030202 +01010301010102020603080009cb08000100090b01010910010109420101091b01010959 +010109c301010958010106000000060c0100060000000602020201010303010102020605 +000001000008010000000100000001000001010000020100000401000002010100010100 +000101000000010000000100000101000000010000000100000101000002010000010101 +000101000004010000020100000201000001010000020100007006020100040200000606 +0100040200000604020201010301010102020603080009cb080001000981010109590101 +09c30101095801000600010006000000060a010006000000060302020101030301010202 +060501000009010000000100000001000005010000040100000201000002010000010100 +000001000000010000010100000001000000010000050100000101000008010000020100 +000201000002010000010100007006010100060004010000060601000600040206000000 +0603020201010301010102020603080009cb08000100098101010959010109c301010958 +010106000000060c01000600000006020202010103030101020206050000010000080100 +000001000000010000020103000401000002010000020100000101000000010200010100 +000001000000010000020103000101000008010000020104000201000001010000700602 +0100040106000000060601000600040100000604020201010301010102020603080009cb +08000100098101010959010109c30101095801000600010006000000060a010006000000 +060302020101030301010202060501000009010000000100000001000001010000020100 +000401000002010000020100000101000005010000000100000001000001010000020100 +000101000008010000020100000701000000010000700601010006000400060000000608 +01000401060000000603020201010301010102020603080009cb08000100098101010959 +010109c301010958010106000000060c0100060000000602020201010303010102020605 +000001000008010000000100000001000001010000020100000401000002010000020100 +000201000001010000010100000001000000010000010100000201000001010000080100 +00020100000201000003010100710602010004000000060a010004000000060402020101 +0301010102020603080009cb08000100098101010959010109c301010958010006000100 +06000000060a010006000000060302020101030301010202060501000009010000000100 +000001000002010300040100000201000002010000030101000201000000010000000100 +000201030001010000080100000301020005010000710601010006000000060001000600 +010006000100060001000600010006000100060004000600000006030202010103010101 +0202060308cd01ff01ff010106000000060c010006000000060202020101030301010202 +060500000100005101000071060201000600010006000100060001000600010006000100 +060001000600010006000000060402020101030101010202060308cd01ff01ff01000600 +010006000000060a01000600000006030202010103030101020206050100004f01000000 +01000072060101000600040e060000000603020201010301010102020603080009cb0800 +0100098101010959010109c301010958010106000000060c010006000000060202020101 +030301010202060500000100004f01000073060201000600000006000000060000000600 +0000060000000600000006000000060000000604020201010301010102020603080009cb +08000100090b010109550101091b01010959010109c30101095801000600010006000000 +060a0100060000000603020201010303010102020605010000c506010100060000000600 +000006000000060000000600000006000000060000000600010006000000060302020101 +0301010102020603080009cb08000100090a0100091c01000931010009080100091a0101 +090c0100093101000918010109c301010958010106000000060c01000600000006020202 +010103030101020206050000010000c40602010006000000060a01000600000006040202 +010103010101020206030800091a080009af08000100090a01000905010009050100090d +01000903010209030102090a010209020104090a01010902010009070100091a0101090b +01000903010209030102090a010209020104090a01010902010009170101091a010009a7 +01010909010209030102094401000600010006000000060a010006000000060302020101 +030301010202060501000001040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000000400000004000000040000000400000004000000040000000400000004000000 +040000020601010006000000060c01000600000006030202010103010101020206030800 +091a080009af08000100090a01000904010109040101090c010009030100090201000901 +010009020100090801000902010009010100090201000909010009010100090201000906 +0100091a0101090a01000903010009020100090101000902010009080100090201000901 +01000902010009090100090101000902010009160101091a010009a70101090801000902 +010009010100090201000943010106000000060c01000600000006020202010103030101 +020206050000010004c200010602010006000000060a0100060000000604020201010301 +010102020603080009090802090308020903080109000800090208020909080009000801 +0903080209020801090008000903080209030802097f08000100090a0100090301000900 +01000903010009000100090b010009080100090101000910010009050100090901000901 +01000903010009050100091a010109090100090801000901010009100100090501000909 +01000901010009030100091501010909010209030102090301010900010009020102090a +010209030102090201000900010109020100090201000902010209020100090001010970 +0101090c010009050100094301000600010006000000060a010006000000060302020101 +030301010202060501000001044f0100046f010000010601010006000000060c01000600 +000006030202010103010101020206030800090808000902080009010800090208000901 +080009010801090108000902080009080801090108000901080009020800090108000900 +08000900080009010800090208000901080009020800097e08000100090a010009050100 +09050100090a010009090100090101000910010009040100090a01000901010009040100 +09040100091a01010908010009090100090101000910010009040100090a010009010100 +090401000914010109080100090201000901010009020100090101000901010109010100 +090201000908010009020100090101000902010009010101090101000901010009020100 +09010100090201000901010109010100096f0101090c0100090501000943010106000000 +060c0100060000000602020201010303010102020605000001000411010004030100042c +0100040901000400010004180102045300010602010006000000060a0100060000000604 +020201010301010102020603080009080800090508000902080009010800090208000901 +080009020800090808000902080009050800090108000900080009000800090108000902 +080009010800098208000100090801010906010009050100090901000909010009020103 +090c010009050100090a0100090101000905010009040101091801010907010009090100 +09020103090c010009050100090a01000901010009050100091301010908010009050100 +090201000901010009020100090101000902010009080100090501000902010009010100 +090501000902010009010100090201000901010009730101090a01010904010109440100 +0600010006000000060a0100060000000603020201010303010102020605010000010410 +010004030100042c01000408010004020100041901000452010000010601010006000000 +060c01000600000006030202010103010101020206030800090808000905080009020800 +090108000902080009010804090808000902080009020803090108000900080009000800 +0901080409020802097f08000100090a01000905010009050100090a0100090701000903 +010009020100090a010009060100090a0100090101000904010009040100091a01010908 +0100090701000903010009020100090a010009060100090a010009010100090401000914 +010109080100090501000902010009010100090201000901010409090102090201040901 +01000906010009000100090201040901010009730101090c010009050100094301010600 +0000060c0100060000000602020201010303010102020605000001000409010204020104 +040101000400010104030102040201000400010104090100040001010403010204030101 +040001000402010204020100040001020401010104000100040301020402010004000101 +04050100040301020402010004020100044400010602010006000000060a010006000000 +060402020101030101010202060308000908080009050800090208000901080009020800 +09010800090c080009020800090108000902080009010800090008000900080009010800 +09090800097e08000100090a01000905010009050100090b010009050100090401000902 +01000909010009060100090b0100090101000903010009050100091a0101090901000905 +010009040100090201000909010009060100090b01000901010009030100091501010908 +010009050100090201000901010009020100090101000910010009010100090501000906 +010009000100090201000905010009730101090c01000905010009430100060001000600 +0000060a0100060000000603020201010303010102020605010000010407010004020100 +040301000403010104010100040101000402010004010101040101000408010104010100 +040101000402010004010100040101010401010004020100040101000400010004000100 +040101000400010004000100040101000402010004010101040101000404010004020100 +0402010004010100040201000443010000010601010006000000060c0100060000000603 +020201010301010102020603080009080800090208000901080009020800090108000901 +080109010800090208000908080009020800090108000902080009010800090008000900 +080009010800090208000901080009020800097e08000100090a01000905010009050100 +090501010904010009030100090501000902010009030101090201000907010009050101 +09030100090101000902010009060100091a0101090a0100090301000905010009020100 +090301010902010009070100090501010903010009010100090201000916010109080100 +090201000901010009020100090101000901010109010100090201000908010009020100 +090101000902010009010100090701000903010009020100090101000973010109080100 +0902010009010100090201000943010106000000060c0100060000000602020201010303 +010102020605000001000408010004020100040301000403010004020100040101000402 +010004010100040c01000402010004010100040201000401010004020100040101000402 +010004010100040001000400010004010100040001000400010004050100040101000408 +010004020100040201000402010004010100044400010602010006000000060a01000600 +000006040202010103010101020206030800090908020903080209030801090008000902 +08020909080009020800090208030901080009000800090008000902080209030802097f +08000100090a010009030104090101040903010109050100090201040902010209040101 +090201040903010009050101090401010902010009070100091a0101090b010009020104 +090201020904010109020104090301000905010109040101090201000917010109090102 +09030102090301010900010009020102090a010209030102090201000907010009040102 +09020100097301010909010209030102094401000600010006000000060a010006000000 +060302020101030301010202060501000001040701000402010004030100040301000402 +01000401010404010100040c010004020100040101000402010004010100040201000401 +010404010100040001020401010004000100040001000402010304010100040801000402 +010404020100040101000443010000010601010006000000060c01000600000006030202 +0101030101010202060308000923080509a108000100090a010009140100090601000931 +010009080100091a0101090c010009310100091801010923010509990101095801010600 +0000060c0100060000000602020201010303010102020605000001000408010004020100 +0403010004030100040201000401010004050100040c0100040201000401010004020100 +040101000402010004010100040501000405010004000100040001000401010004020100 +0401010004080100040201000407010004000100044400010602010006000000060a0100 +060000000604020201010301010102020603080009cb08000100090b0101091001010942 +0101091b01010959010109c30101095801000600010006000000060a0100060000000603 +020201010303010102020605010000010407010004020100040301000403010004020100 +040101000402010004010100040c01000402010004010100040201000401010004010101 +040101000402010004020100040101000401010004000100040001000401010004020100 +04010100040801000402010004020100040301010444010000010601010006000000060c +0100060000000603020201010301010102020603080009cb080001000981010109590101 +09c301010958010106000000060c01000600000006020202010103030101020206050000 +0100040901020405010104010100040201000402010204020100040c0100040201000402 +010204030101040001000402010204040101040201000400010004000100040201030401 +0100040801000403010204050100044500010602010006000000060a0100060000000604 +020201010301010102020603080009cb08000100098101010959010109c3010109580100 +0600010006000000060a0100060000000603020201010303010102020605010000010429 +0105044a01000444010000010601010006000000060c0100060000000603020201010301 +010102020603080009cb08000100098101010959010109c301010958010106000000060c +010006000000060202020101030301010202060500000100047801000400010004460001 +0602010006000000060a0100060000000604020201010301010102020603080009cb0800 +0100098101010959010109c30101095801000600010006000000060a0100060000000603 +02020101030301010202060501000001047801000446010000010601010006000000060c +0100060000000603020201010301010102020603080009cb080001000981010109590101 +09c301010958010106000000060c01000600000006020202010103030101020206050000 +010004c200010602010006000000060a0100060000000604020201010301010102020603 +08cd01ff01ff01000600010006000000060a010006000000060302020101030301010202 +060501000001040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000400 +010004000100040001000400010004000100040001000400010004000100040001000001 +0601010006000000060c010006000000060302020101030101010202060308cd01ff01ff +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a0100060000000604020201010301010102020603080009cb08000100 +098101010959010109c30101095801000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +0301010102020603080009cb08000100090b0101094e0101092201010959010109c30101 +0958010106000000060c01000600000006020202010103030101020206050000010000c4 +0602010006000000060a0100060000000604020201010301010102020603080009cb0800 +0100090a010009150100093101000908010009210101090c0100093101000918010109c3 +0101095801000600010006000000060a0100060000000603020201010303010102020605 +010000c50601010006000000060c01000600000006030202010103010101020206030800 +091d08000908080009a208000100090a010009040102090c01000903010209030102090b +010009030104090a0101090201000907010009210101090b01000903010209030102090b +010009030104090a0101090201000917010109180100090a010009220102097701010909 +0102094b010106000000060c010006000000060202020101030301010202060500000100 +00c40602010006000000060a01000600000006040202010103010101020206030800091d +080009ac08000100090a01000903010009020100090a0100090301000902010009010100 +090201000909010109030100090201000909010009010100090201000906010009210101 +090a01000903010009020100090101000902010009090101090301000902010009090100 +09010100090201000916010109180100090a010009240100097701010908010009020100 +094a01000600010006000000060a01000600000006030202010103030101020206050100 +00c50601010006000000060c010006000000060302020101030101010202060308000909 +080209030802090308020902080009010800090308020903080209030802099408000100 +090a01000903010009020100090901000908010009010100090c01000900010009070100 +0909010009010100090301000905010009210101090901000908010009010100090c0100 +090001000907010009090100090101000903010009150101090801000900010109030102 +090201040908010009010100090301020902010009000101090201000900010109030102 +0905010009770101090c0100094a010106000000060c0100060000000602020201010303 +0101020206050000010000c40602010006000000060a0100060000000604020201010301 +010102020603080009080800090208000901080009020800090108000902080009010800 +090008000906080009020800090208000901080009020800099308000100090a01000903 +010009020100090801000909010009010100090e010009060100090a0100090101000904 +01000904010009210101090801000909010009010100090e010009060100090a01000901 +010009040100091401010908010109010100090101000902010009030100090a01000900 +010009030100090201000901010109010100090101010901010009010100090201000904 +010009770101090c0100094a01000600010006000000060a010006000000060302020101 +0303010102020605010000c50601010006000000060c0100060000000603020201010301 +010102020603080009080800090508000902080009010800090208000901080109070800 +090208000902080009010800099708000100090801010905010209080100090901000902 +0103090b010009060100090a0100090101000905010009040101091f0101090701000909 +010009020103090b010009060100090a0100090101000905010009130101090801000902 +0100090101000902010009030100090a0101090401000902010009010100090501000902 +010009010100090201000904010009770101090b0100094b010106000000060c01000600 +000006020202010103030101020206050000010000c40602010006000000060a01000600 +000006040202010103010101020206030800090808000905080009020800090108000902 +080009010801090708000902080409020802099408000100090a01000903010009020100 +09080100090701000903010009020100090a010009060100090a01000901010009040100 +090401000921010109080100090701000903010009020100090a010009060100090a0100 +09010100090401000914010109080100090201000901010409030100090a010109040104 +090101000905010009020100090101040904010009770101090a0100094c010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c0100060000000603020201010301010102020603080009080800090508000902 +080009010800090208000901080009000800090608000902080009090800099308000100 +090a0100090301000902010009090100090501000904010009020100090a010009050100 +090b01000901010009030100090501000921010109090100090501000904010009020100 +090a010009050100090b0100090101000903010009150101090801000902010009010100 +09070100090a010009000100090301000905010009050100090201000901010009080100 +0977010109090100094d010106000000060c010006000000060202020101030301010202 +06050000010000c40602010006000000060a010006000000060402020101030101010202 +060308000908080009020800090108000902080009010800090208000901080009010800 +0905080009020800090208000901080009020800099308000100090a0100090301000902 +010009030101090401000903010009050100090201000903010109040100090501000905 +01010903010009010100090201000906010009210101090a010009030100090501000902 +010009030101090401000905010009050101090301000901010009020100091601010908 +010009020100090101000902010009030100090a01000901010009020100090201000901 +010009050100090201000901010009020100090401000977010109080100094e01000600 +010006000000060a0100060000000603020201010303010102020605010000c506010100 +06000000060c010006000000060302020101030101010202060308000909080209030802 +090308020902080009020800090408000903080209030802099408000100090a01000904 +010209040101090501000902010409020102090401010902010409030100090501010904 +0101090201000907010009210101090b0100090201040902010209040101090201040903 +010009050101090401010902010009170101090801000902010009020102090501010908 +010009020100090201020902010009050100090201000902010209050100097701010908 +0104094a010106000000060c010006000000060202020101030301010202060500000100 +00c40602010006000000060a0100060000000604020201010301010102020603080009cb +08000100090a0100090d010009060100093101000908010009210101090c010009310100 +09180101091c010509a00101095801000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +0301010102020603080009cb08000100090b010109090101094201010922010109590101 +09c301010958010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060a01000600000006040202010103010101020206030800 +09cb08000100098101010959010109c30101095801000600010006000000060a01000600 +00000603020201010303010102020605010000c50601010006000000060c010006000000 +0603020201010301010102020603080009cb08000100098101010959010109c301010958 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a0100060000000604020201010301010102020603080009cb08000100 +098101010959010109c30101095801000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +0301010102020603080009cb08000100098101010959010109c301010958010106000000 +060c01000600000006020202010103030101020206050000010000c40602010006000000 +060a0100060000000604020201010301010102020603080009cb08000100098101010959 +010109c30101095801000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +060308cd01ff01ff010106000000060c0100060000000602020201010303010102020605 +0000010000c40602010006000000060a0100060000000604020201010301010102020603 +01ff01ff01ce0600010006000000060a0100060000000603020201010303010102020605 +010000c50601010006000000060c01000600000006030202010103010101020206030100 +00cb0101008101010059010100c301010058010106000000060c01000600000006020202 +010103030101020206050000010000c40602010006000000060a01000600000006040202 +01010301010102020603010000cb0101008101010059010100c301010058010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c0100060000000603020201010301010102020603010000cb010100810101000c +0100003101000018010100c301010058010106000000060c010006000000060202020101 +03030101020206050000010000c40602010006000000060a010006000000060402020101 +030101010202060301000010010200090100000d0102000a010200100100007b01010081 +0101000b01000003010200030102000b010000050100000c010100020100001701010010 +010200090100000d010200930101000a0101004b01000600010006000000060a01000600 +00000603020201010303010102020605010000c50601010006000000060c010006000000 +060302020101030101010202060301000012010000090100000f0100000c010000100100 +007b010100810101000a0100000301000002010000010100000201000009010100040101 +000b01000001010000020100001601010012010000090100000f01000093010100090100 +00010100004a010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060a01000600000006040202010103010101020206030100 +0009010100000100000401000003010200020100000001010003010200050100000c0100 +000301020003010200020100000101000003010200710101008101010009010000080100 +00010100000c0100000001000003010000000100000b0100000101000003010000150101 +000901010000010000040100000301020002010000000101000301020005010000090100 +0000010100030102000201010000010000030102000a0102000301020002010000000101 +0002010000020100000201020002010000000101003f01010009010000010100004a0100 +0600010006000000060a0100060000000603020201010303010102020605010000c50601 +010006000000060c01000600000006030202010103010101020206030100000801000001 +01010004010000020100000201000001010100010100000101000002010000040100000c +010000020100000201000001010000020100000101000000010000030100000201000070 +010100810101000801000009010000010100000e010000050100000b0100000101000004 +010000140101000801000001010100040100000201000002010000010101000101000001 +010000020100000401000009010100010100000101000002010000010100000001000000 +010000010100000201000008010000020100000101000002010000010101000101000001 +01000002010000010100000201000001010100010100003e01010009010000010100004a +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a01000600000006040202010103010101020206030100000801000002 +010000040100000201000002010000010100000201000005010000040100000c01000002 +010000020100000101000005010100040100007401010081010100070100000901000002 +0103000b010000050100000b010000010100000501000013010100080100000201000004 +010000020100000201000001010000020100000501000004010000090100000201000005 +010000010100000001000000010000010100000201000008010000050100000201000001 +01000005010000020100000101000002010000010100004201010009010000010100004a +01000600010006000000060a0100060000000603020201010303010102020605010000c5 +0601010006000000060c0100060000000603020201010301010102020603010000080100 +0002010000040100000201000002010000010100000201000002010300040100000c0100 +000201000002010000010100000501010005010200710101008101010008010000070100 +0003010000020100000a010000050100000b010000010100000401000014010100080100 +000201000004010000020100000201000001010000020100000201030004010000090100 +000201000002010300010100000001000000010000010104000901020002010400010100 +00060100000001000002010400010100004201010009010000010100004a010106000000 +060c01000600000006020202010103030101020206050000010000c40602010006000000 +060a01000600000006040202010103010101020206030100000801000002010000040100 +00020100000201000001010000020100000101000002010000040100000c010000020100 +000201000001010000050100000001000007010000700101008101010009010000050100 +0004010000020100000a010000050100000b010000010100000301000015010100080100 +000201000004010000020100000201000001010000020100000101000002010000040100 +000901000002010000010100000201000001010000000100000001000001010000100100 +000101000005010000060100000001000002010000050100004201010009010000010100 +004a01000600010006000000060a01000600000006030202010103030101020206050100 +00c50601010006000000060c010006000000060302020101030101010202060301000008 +010000010101000401000002010000020100000101010001010000010100000201000004 +0100000c0100000201000002010000010100000201000001010000010100000201000002 +01000070010100810101000a010000030100000501000002010000030101000401000005 +010000050101000301000001010000020100001601010008010000010101000401000002 +010000020100000101010001010000010100000201000004010000090100000201000001 +010000020100000101000000010000000100000101000002010000080100000201000001 +010000020100000101000007010000030100000201000001010000420101000901000001 +0100004a010106000000060c010006000000060202020101030301010202060500000100 +00c40602010006000000060a010006000000060402020101030101010202060301000009 +010100000100000401000003010200020100000001010003010300040100000c01000003 +0102000301020002010000020100000201020071010100810101000b0100000201040002 +010200040101000201040001010400030101000401010002010000170101000901010000 +010000040100000301020002010000000101000301030004010000090100000201000002 +010300010100000001000000010000020102000a01020003010200020100000701000004 +01020002010000420101000a0101004b01000600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000000060c01000600000006030202 +010103010101020206030100000c0100002301050093010100810101000c010000310100 +00180101000c010000230105001c0105006801010058010106000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +06040202010103010101020206030100000801000002010000bd01010081010100590101 +000801000002010000b50101005801000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +030101010202060301000009010200be010100810101005901010009010200b601010058 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a0100060000000604020201010301010102020603010000cb01010081 +01010059010100c30101005801000600010006000000060a010006000000060302020101 +0303010102020605010000c50601010006000000060c0100060000000603020201010301 +010102020603010000cb0101008101010059010100c301010058010106000000060c0100 +0600000006020202010103030101020206050000010000c40602010006000000060a0100 +060000000604020201010301010102020603010000cb0101008101010059010100c30101 +005801000600010006000000060a01000600000006030202010103030101020206050100 +00c50601010006000000060c0100060000000603020201010301010102020603010000cb +0101008101010059010100c301010058010106000000060c010006000000060202020101 +03030101020206050000010000c40602010006000000060a010006000000060402020101 +030101010202060301ff01ff01ce0600010006000000060a010006000000060302020101 +0303010102020605010000c50601010006000000060c0100060000000603020201010301 +01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202 +06050000010000c40602010006000000060a010006000000060402020101030101010202 +0603010000cb0101008101010059010100c30101005801000600010006000000060a0100 +060000000603020201010303010102020605010000c50601010006000000060c01000600 +00000603020201010301010102020603010000cb0101008101010059010100c301010058 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a0100060000000604020201010301010102020603010000cb01010081 +0101000c0100003101000018010100c30101005801000600010006000000060a01000600 +00000603020201010303010102020605010000c50601010006000000060c010006000000 +060302020101030101010202060301000010010200090100000d0102009b010100810101 +000b01000003010200030102000b010000050100000c0101000201000017010100100102 +00090100000d010200930101000a0101004b010106000000060c01000600000006020202 +010103030101020206050000010000c40602010006000000060a01000600000006040202 +0101030101010202060301000012010000090100000f0100009b010100810101000a0100 +000301000002010000010100000201000009010100040101000b01000001010000020100 +001601010012010000090100000f0100009301010009010000010100004a010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c0100060000000603020201010301010102020603010000090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +01010000010000030102000301020071010100810101000901000008010000010100000c +0100000001000003010000000100000b0100000101000003010000150101000901010000 +010000040100000301020002010000000101000301020005010000090100000001010003 +0102000201010000010000030102000a0102000301020002010000000101000201000002 +0100000201020002010000000101003f01010009010000010100004a010106000000060c +01000600000006020202010103030101020206050000010000c40602010006000000060a +010006000000060402020101030101010202060301000008010000010101000401000002 +010000020100000101010001010000010100000201000004010000090101000101000001 +010000020100000101000000010000000100000101000002010000010100000201000070 +010100810101000801000009010000010100000e010000050100000b0100000101000004 +010000140101000801000001010100040100000201000002010000010101000101000001 +010000020100000401000009010100010100000101000002010000010100000001000000 +010000010100000201000008010000020100000101000002010000010101000101000001 +01000002010000010100000201000001010100010100003e01010009010000010100004a +01000600010006000000060a0100060000000603020201010303010102020605010000c5 +0601010006000000060c0100060000000603020201010301010102020603010000080100 +000201000004010000020100000201000001010000020100000501000004010000090100 +000201000005010000010100000001000000010000010100000201000001010000740101 +00810101000701000009010000020103000b010000050100000b01000001010000050100 +001301010008010000020100000401000002010000020100000101000002010000050100 +000401000009010000020100000501000001010000000100000001000001010000020100 +000801000005010000020100000101000005010000020100000101000002010000010100 +004201010009010000010100004a010106000000060c0100060000000602020201010303 +0101020206050000010000c40602010006000000060a0100060000000604020201010301 +010102020603010000080100000201000004010000020100000201000001010000020100 +000201030004010000090100000201000002010300010100000001000000010000010104 +00020102007101010081010100080100000701000003010000020100000a010000050100 +000b01000001010000040100001401010008010000020100000401000002010000020100 +000101000002010000020103000401000009010000020100000201030001010000000100 +000001000001010400090102000201040001010000060100000001000002010400010100 +004201010009010000010100004a01000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +030101010202060301000008010000020100000401000002010000020100000101000002 +010000010100000201000004010000090100000201000001010000020100000101000000 +010000000100000101000009010000700101008101010009010000050100000401000002 +0100000a010000050100000b010000010100000301000015010100080100000201000004 +010000020100000201000001010000020100000101000002010000040100000901000002 +010000010100000201000001010000000100000001000001010000100100000101000005 +010000060100000001000002010000050100004201010009010000010100004a01010600 +0000060c01000600000006020202010103030101020206050000010000c4060201000600 +0000060a0100060000000604020201010301010102020603010000080100000101010004 +010000020100000201000001010100010100000101000002010000040100000901000002 +010000010100000201000001010000000100000001000001010000020100000101000002 +01000070010100810101000a010000030100000501000002010000030101000401000005 +010000050101000301000001010000020100001601010008010000010101000401000002 +010000020100000101010001010000010100000201000004010000090100000201000001 +010000020100000101000000010000000100000101000002010000080100000201000001 +010000020100000101000007010000030100000201000001010000420101000901000001 +0100004a01000600010006000000060a0100060000000603020201010303010102020605 +010000c50601010006000000060c01000600000006030202010103010101020206030100 +000901010000010000040100000301020002010000000101000301030004010000090100 +000201000002010300010100000001000000010000020102000301020071010100810101 +000b01000002010400020102000401010002010400010104000301010004010100020100 +001701010009010100000100000401000003010200020100000001010003010300040100 +00090100000201000002010300010100000001000000010000020102000a010200030102 +0002010000070100000401020002010000420101000a0101004b010106000000060c0100 +0600000006020202010103030101020206050000010000c40602010006000000060a0100 +0600000006040202010103010101020206030100000c0100002301050093010100810101 +000c01000031010000180101000c010000230105001c0105006801010058010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c01000600000006030202010103010101020206030100000801000002010000bd +01010081010100590101000801000002010000b501010058010106000000060c01000600 +000006020202010103030101020206050000010000c40602010006000000060a01000600 +0000060402020101030101010202060301000009010200be010100810101005901010009 +010200b60101005801000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +0603010000cb0101008101010059010100c301010058010106000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +0604020201010301010102020603010000cb0101008101010059010100c3010100580100 +0600010006000000060a0100060000000603020201010303010102020605010000c50601 +010006000000060c0100060000000603020201010301010102020603010000cb01010081 +01010059010100c301010058010106000000060c01000600000006020202010103030101 +020206050000010000c40602010006000000060a01000600000006040202010103010101 +02020603010000cb0101008101010059010100c30101005801000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +06000000060302020101030101010202060301ff01ff01cf06000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000 +0603020201010303010102020605010000c50601010006000000060c0100060000000603 +020201010301010102020603010000cb0101008101010059010100c30101005801010600 +0000060c01000600000006020202010103030101020206050000010000c4060201000600 +0000060a0100060000000604020201010301010102020603010000cb0101008101010059 +010100c30101005801000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +0603010000cb010100810101000c0100003101000018010100c301010058010106000000 +060c01000600000006020202010103030101020206050000010000c40602010006000000 +060a010006000000060402020101030101010202060301000010010200090100000d0102 +004301000056010100810101000b01000003010200030102000b010000050100000c0101 +00020100001701010010010200090100000d010200930101000a0101004b010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c010006000000060302020101030101010202060301000012010000090100000f +0100004301000056010100810101000a0100000301000002010000010100000201000009 +010100040101000b01000001010000020100001601010012010000090100000f01000093 +01010009010000010100004a010106000000060c01000600000006020202010103030101 +020206050000010000c40602010006000000060a01000600000006040202010103010101 +020206030100000901010000010000040100000301020002010000000101000301020005 +010000090100000001010003010200020101000001000003010200030102000a01020002 +010000020100000101040054010100810101000901000008010000010100000c01000000 +01000003010000000100000b010000010100000301000015010100090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +01010000010000030102000a010200030102000201000000010100020100000201000002 +01020002010000000101003f01010009010000010100004a01000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +060000000603020201010301010102020603010000080100000101010004010000020100 +000201000001010100010100000101000002010000040100000901010001010000010100 +000201000001010000000100000001000001010000020100000101000002010000080100 +000201000001010000020100000301000056010100810101000801000009010000010100 +000e010000050100000b0100000101000004010000140101000801000001010100040100 +000201000002010000010101000101000001010000020100000401000009010100010100 +000101000002010000010100000001000000010000010100000201000008010000020100 +000101000002010000010101000101000001010000020100000101000002010000010101 +00010100003e01010009010000010100004a010106000000060c01000600000006020202 +010103030101020206050000010000c40602010006000000060a01000600000006040202 +010103010101020206030100000801000002010000040100000201000002010000010100 +000201000005010000040100000901000002010000050100000101000000010000000100 +000101000002010000010100000c01000002010000020100000001000004010000560101 +00810101000701000009010000020103000b010000050100000b01000001010000050100 +001301010008010000020100000401000002010000020100000101000002010000050100 +000401000009010000020100000501000001010000000100000001000001010000020100 +000801000005010000020100000101000005010000020100000101000002010000010100 +004201010009010000010100004a01000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +030101010202060301000008010000020100000401000002010000020100000101000002 +010000020103000401000009010000020100000201030001010000000100000001000001 +010400020102000901040003010000050100005601010081010100080100000701000003 +010000020100000a010000050100000b0100000101000004010000140101000801000002 +010000040100000201000002010000010100000201000002010300040100000901000002 +010000020103000101000000010000000100000101040009010200020104000101000006 +0100000001000002010400010100004201010009010000010100004a010106000000060c +01000600000006020202010103030101020206050000010000c40602010006000000060a +010006000000060402020101030101010202060301000008010000020100000401000002 +010000020100000101000002010000010100000201000004010000090100000201000001 +010000020100000101000000010000000100000101000009010000080100000601000000 +010000040100005601010081010100090100000501000004010000020100000a01000005 +0100000b0100000101000003010000150101000801000002010000040100000201000002 +010000010100000201000001010000020100000401000009010000020100000101000002 +010000010100000001000000010000010100001001000001010000050100000601000000 +01000002010000050100004201010009010000010100004a01000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +060000000603020201010301010102020603010000080100000101010004010000020100 +000201000001010100010100000101000002010000040100000901000002010000010100 +000201000001010000000100000001000001010000020100000101000002010000080100 +000201000001010000020100000301000056010100810101000a01000003010000050100 +000201000003010100040100000501000005010100030100000101000002010000160101 +000801000001010100040100000201000002010000010101000101000001010000020100 +000401000009010000020100000101000002010000010100000001000000010000010100 +000201000008010000020100000101000002010000010100000701000003010000020100 +00010100004201010009010000010100004a010106000000060c01000600000006020202 +010103030101020206050000010000c40602010006000000060a01000600000006040202 +010103010101020206030100000901010000010000040100000301020002010000000101 +000301030004010000090100000201000002010300010100000001000000010000020102 +00030102000a01020002010000020100000401010054010100810101000b010000020104 +000201020004010100020104000101040003010100040101000201000017010100090101 +000001000004010000030102000201000000010100030103000401000009010000020100 +0002010300010100000001000000010000020102000a0102000301020002010000070100 +000401020002010000420101000a0101004b01000600010006000000060a010006000000 +0603020201010303010102020605010000c50601010006000000060c0100060000000603 +0202010103010101020206030100000c010000230105002301050069010100810101000c +01000031010000180101000c010000230105001c0105006801010058010106000000060c +01000600000006020202010103030101020206050000010000c40602010006000000060a +01000600000006040202010103010101020206030100000801000002010000bd01010081 +010100590101000801000002010000b50101005801000600010006000000060a01000600 +00000603020201010303010102020605010000c50601010006000000060c010006000000 +060302020101030101010202060301000009010200be0101008101010059010100090102 +00b601010058010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060a01000600000006040202010103010101020206030100 +00cb0101008101010059010100c30101005801000600010006000000060a010006000000 +0603020201010303010102020605010000c50601010006000000060c0100060000000603 +020201010301010102020603010000cb0101008101010059010100c30101005801010600 +0000060c01000600000006020202010103030101020206050000010000c4060201000600 +0000060a0100060000000604020201010301010102020603010000cb0101008101010059 +010100c30101005801000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +0603010000cb0101008101010059010100c301010058010106000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000 +0603020201010303010102020605010000c50601010006000000060c0100060000000603 +02020101030101010202060301ff01ff01cf06000000060c010006000000060202020101 +03030101020206050000010000c40602010006000000060a010006000000060402020101 +0301010102020603010000cb0101008101010059010100c3010100580100060001000600 +0000060a0100060000000603020201010303010102020605010000c50601010006000000 +060c0100060000000603020201010301010102020603010000cb01010081010100590101 +00c301010058010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060a01000600000006040202010103010101020206030100 +00cb010100810101000c0100003101000018010100c30101005801000600010006000000 +060a0100060000000603020201010303010102020605010000c50601010006000000060c +01000600000006030202010103010101020206030100000b010000120100001f01000089 +010100810101000b01000003010200030102000b010000040102000b0101000201000017 +0101000b010000120100000e010000010100008f0101000a0101004b010106000000060c +01000600000006020202010103030101020206050000010000c40602010006000000060a +01000600000006040202010103010101020206030100001f0100001f0100008901010081 +0101000a0100000301000002010000010100000201000009010100030100000201000009 +0100000101000002010000160101001f0100000e010000010100008f0101000901000001 +0100004a01000600010006000000060a0100060000000603020201010303010102020605 +010000c50601010006000000060c01000600000006030202010103010101020206030100 +000901020002010000000101000301020002010400090102000301020003010200020100 +0000010100030102007f010100810101000901000008010000010100000c010000000100 +000701000009010000010100000301000015010100090102000201000000010100030102 +0002010400090101000001000001010000000101008c01010009010000010100004a0101 +06000000060c01000600000006020202010103030101020206050000010000c406020100 +06000000060a01000600000006040202010103010101020206030100000b010000020101 +00010100000101000002010000030100000a010000020100000101000002010000010100 +0002010000010101000101000001010000020100007e0101008101010008010000090100 +00010100000e01000007010000090100000101000004010000140101000b010000020101 +00010100000101000002010000030100000a0100000101010001010100010100008b0101 +0009010000010100004a01000600010006000000060a0100060000000603020201010303 +010102020605010000c50601010006000000060c01000600000006030202010103010101 +020206030100000b01000002010000020100000101000002010000030100000a01000009 +01000001010000050100000201000001010000020100007e010100810101000701000009 +010000020103000b010000060100000a0100000101000005010000130101000b01000002 +010000020100000101000002010000030100000a0100000201000001010000020100008b +01010009010000010100004a010106000000060c01000600000006020202010103030101 +020206050000010000c40602010006000000060a01000600000006040202010103010101 +020206030100000b010000020100000201000001010400030100000a0100000601030001 +0100000501000002010000010104007e0101008101010008010000070100000301000002 +0100000a010000050100000b0100000101000004010000140101000b0100000201000002 +01000001010400030100000a0100000201000001010000020100008b0101000901000001 +0100004a01000600010006000000060a0100060000000603020201010303010102020605 +010000c50601010006000000060c01000600000006030202010103010101020206030100 +000b010000020100000201000001010000070100000a0100000501000002010000010100 +000501000002010000010100008201010081010100090100000501000004010000020100 +000a010000040100000c0100000101000003010000150101000b01000002010000020100 +0001010000070100000a0100000201000001010000020100008b01010009010000010100 +004a010106000000060c01000600000006020202010103030101020206050000010000c4 +0602010006000000060a01000600000006040202010103010101020206030100000b0100 +0002010000020100000101000002010000030100000a0100000201000001010000020100 +000101000002010000010100000201000001010000020100007e010100810101000a0100 +000301000005010000020100000301010004010000030100000701010003010000010100 +0002010000160101000b01000002010000020100000101000002010000030100000a0100 +000101010001010100010100008b01010009010000010100004a01000600010006000000 +060a0100060000000603020201010303010102020605010000c50601010006000000060c +01000600000006030202010103010101020206030100000b010000020100000201000002 +010200050101000901020003010300020102000201000002010000020102007f01010081 +0101000b0100000201040002010200040101000201040001010400030101000401010002 +010000170101000b01000002010000020100000201020005010100090101000001000001 +010000000101008c0101000a0101004b010106000000060c010006000000060202020101 +03030101020206050000010000c40602010006000000060a010006000000060402020101 +030101010202060301000023010500a1010100810101000c010000310100001801010023 +010500990101005801000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +0603010000cb0101008101010059010100c301010058010106000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +0604020201010301010102020603010000cb0101008101010059010100c3010100580100 +0600010006000000060a0100060000000603020201010303010102020605010000c50601 +010006000000060c0100060000000603020201010301010102020603010000cb01010081 +01010059010100c301010058010106000000060c01000600000006020202010103030101 +020206050000010000c40602010006000000060a01000600000006040202010103010101 +02020603010000cb0101008101010059010100c30101005801000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +060000000603020201010301010102020603010000cb0101008101010059010100c30101 +0058010106000000060c01000600000006020202010103030101020206050000010000c4 +0602010006000000060a0100060000000604020201010301010102020603010000cb0101 +008101010059010100c30101005801000600010006000000060a01000600000006030202 +01010303010102020605010000c50601010006000000060c010006000000060302020101 +030101010202060301ff01ff01cf06000000060c01000600000006020202010103030101 +020206050000010000c40602010006000000060a01000600000006040202010103010101 +0202060301ff01ff01ce0600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +0603010000cb0101008101010059010100c301010058010106000000060c010006000000 +06020202010103030101020206050000010000c40602010006000000060a010006000000 +0604020201010301010102020603010000cb0101008101010059010100c3010100580100 +0600010006000000060a0100060000000603020201010303010102020605010000c50601 +010006000000060c0100060000000603020201010301010102020603010000cb01010081 +0101000c0100003101000018010100c301010058010106000000060c0100060000000602 +0202010103030101020206050000010000c40602010006000000060a0100060000000604 +0202010103010101020206030100000b010000120100000e010000010100009701010081 +0101000b01000003010200030102000b010000040102000b01010002010000170101000b +010000120100000e010000010100008f0101000a01000004010200440100060001000600 +0000060a0100060000000603020201010303010102020605010000c50601010006000000 +060c01000600000006030202010103010101020206030100001f0100000e010000010100 +0097010100810101000a0100000301000002010000010100000201000009010100030100 +0002010000090100000101000002010000160101001f0100000e010000010100008f0101 +0009010100030100000201000043010106000000060c0100060000000602020201010303 +0101020206050000010000c40602010006000000060a0100060000000604020201010301 +010102020603010000090102000201000000010100030102000201040009010100000100 +00010100000001010094010100810101000901000008010000010100000c010000000100 +000701000009010000010100000301000015010100090102000201000000010100030102 +0002010400090101000001000001010000000101008c0101000801000000010000030100 +00020100004301000600010006000000060a010006000000060302020101030301010202 +0605010000c50601010006000000060c0100060000000603020201010301010102020603 +0100000b01000002010100010100000101000002010000030100000a0100000101010001 +0101000101000093010100810101000801000009010000010100000e0100000701000009 +0100000101000004010000140101000b0100000201010001010000010100000201000003 +0100000a0100000101010001010100010100008b0101000a010000030100000201000043 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a01000600000006040202010103010101020206030100000b01000002 +010000020100000101000002010000030100000a01000002010000010100000201000093 +010100810101000701000009010000020103000b010000060100000a0100000101000005 +010000130101000b01000002010000020100000101000002010000030100000a01000002 +01000001010000020100008b0101000a010000040103004301000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +0600000006030202010103010101020206030100000b0100000201000002010000010104 +00030100000a010000020100000101000002010000930101008101010008010000070100 +0003010000020100000a010000050100000b0100000101000004010000140101000b0100 +00020100000201000001010400030100000a0100000201000001010000020100008b0101 +000a0100000701000043010106000000060c010006000000060202020101030301010202 +06050000010000c40602010006000000060a010006000000060402020101030101010202 +06030100000b010000020100000201000001010000070100000a01000002010000010100 +00020100009301010081010100090100000501000004010000020100000a010000040100 +000c0100000101000003010000150101000b010000020100000201000001010000070100 +000a0100000201000001010000020100008b0101000a0100000701000043010006000100 +06000000060a0100060000000603020201010303010102020605010000c5060101000600 +0000060c01000600000006030202010103010101020206030100000b0100000201000002 +0100000101000002010000030100000a0100000101010001010100010100009301010081 +0101000a0100000301000005010000020100000301010004010000030100000701010003 +0100000101000002010000160101000b0100000201000002010000010100000201000003 +0100000a0100000101010001010100010100008b0101000a010000030100000201000043 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a01000600000006040202010103010101020206030100000b01000002 +010000020100000201020005010100090101000001000001010000000101009401010081 +0101000b0100000201040002010200040101000201040001010400030101000401010002 +010000170101000b01000002010000020100000201020005010100090101000001000001 +010000000101008c01010008010400020102004401000600010006000000060a01000600 +00000603020201010303010102020605010000c50601010006000000060c010006000000 +060302020101030101010202060301000023010500a1010100810101000c010000310100 +0018010100230105009901010058010106000000060c0100060000000602020201010303 +0101020206050000010000c40602010006000000060a0100060000000604020201010301 +010102020603010000cb0101008101010059010100c30101005801000600010006000000 +060a0100060000000603020201010303010102020605010000c50601010006000000060c +0100060000000603020201010301010102020603010000cb0101008101010059010100c3 +01010058010106000000060c010006000000060202020101030301010202060500000100 +00c40602010006000000060a0100060000000604020201010301010102020603010000cb +0101008101010059010100c30101005801000600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000000060c01000600000006030202 +01010301010102020603010000cb0101008101010059010100c301010058010106000000 +060c01000600000006020202010103030101020206050000010000c40602010006000000 +060a0100060000000604020201010301010102020603010000cb01010081010100590101 +00c30101005801000600010006000000060a010006000000060302020101030301010202 +0605010000c50601010006000000060c0100060000000603020201010301010102020603 +010000cb0101008101010059010100c301010058010106000000060c0100060000000602 +0202010103030101020206050000010000c40602010006000000060a0100060000000604 +02020101030101010202060301ff01ff01ce0600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000000060c01000600000006030202 +0101030101010202060301ff01ff01cf06000000060c0100060000000602020201010303 +0101020206050000010000c40602010006000000060a0100060000000604020201010301 +010102020603010000cb0101008101010059010100c30101005801000600010006000000 +060a0100060000000603020201010303010102020605010000c50601010006000000060c +0100060000000603020201010301010102020603010000cb0101008101010059010100c3 +01010058010106000000060c010006000000060202020101030301010202060500000100 +00c40602010006000000060a0100060000000604020201010301010102020603010000cb +010100810101000c0100003101000018010100c30101005801000600010006000000060a +0100060000000603020201010303010102020605010000c50601010006000000060c0100 +0600000006030202010103010101020206030100000b010000120100000a010000150100 +0087010100810101000b01000003010200030102000b010000040102000b010100020100 +00170101000b010000120100000e010000010100008f0101000c0100004a010106000000 +060c01000600000006020202010103030101020206050000010000c40602010006000000 +060a01000600000006040202010103010101020206030100001f0100000a010000150100 +0087010100810101000a0100000301000002010000010100000201000009010100030100 +0002010000090100000101000002010000160101001f0100000e010000010100008f0101 +000b0101004a01000600010006000000060a010006000000060302020101030301010202 +0605010000c50601010006000000060c0100060000000603020201010301010102020603 +010000090102000201000000010100030102000201040008010000000101000301020003 +01020002010400020102007f010100810101000901000008010000010100000c01000000 +010000070100000901000001010000030100001501010009010200020100000001010003 +01020002010400090101000001000001010000000101008c0101000a010000000100004a +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a01000600000006040202010103010101020206030100000b01000002 +010100010100000101000002010000030100000a01010001010000010100000201000001 +010000020100000301000003010000020100007e01010081010100080100000901000001 +0100000e01000007010000090100000101000004010000140101000b0100000201010001 +0100000101000002010000030100000a0100000101010001010100010100008b01010009 +010000010100004a01000600010006000000060a01000600000006030202010103030101 +02020605010000c50601010006000000060c010006000000060302020101030101010202 +06030100000b01000002010000020100000101000002010000030100000a010000020100 +000101000002010000010100000701000003010000820101008101010007010000090100 +00020103000b010000060100000a0100000101000005010000130101000b010000020100 +00020100000101000002010000030100000a0100000201000001010000020100008b0101 +0008010000020100004a010106000000060c010006000000060202020101030301010202 +06050000010000c40602010006000000060a010006000000060402020101030101010202 +06030100000b010000020100000201000001010400030100000a01000002010000010100 +00020100000201020004010000040102007f010100810101000801000007010000030100 +00020100000a010000050100000b0100000101000004010000140101000b010000020100 +000201000001010400030100000a0100000201000001010000020100008b010100080100 +00020100004a01000600010006000000060a010006000000060302020101030301010202 +0605010000c50601010006000000060c0100060000000603020201010301010102020603 +0100000b010000020100000201000001010000070100000a010000020100000101000002 +0100000501000003010000070100007e0101008101010009010000050100000401000002 +0100000a010000040100000c0100000101000003010000150101000b0100000201000002 +01000001010000070100000a0100000201000001010000020100008b0101000801050049 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000000060a01000600000006040202010103010101020206030100000b01000002 +010000020100000101000002010000030100000a01000002010000010100000201000001 +010000020100000301000003010000020100007e010100810101000a0100000301000005 +010000020100000301010004010000030100000701010003010000010100000201000016 +0101000b01000002010000020100000101000002010000030100000a0100000101010001 +010100010100008b0101000c0100004a01000600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000000060c01000600000006030202 +010103010101020206030100000b01000002010000020100000201020005010100080100 +0002010000020102000301020005010100020102007f010100810101000b010000020104 +0002010200040101000201040001010400030101000401010002010000170101000b0100 +0002010000020100000201020005010100090101000001000001010000000101008c0101 +000c0100004a010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060a01000600000006040202010103010101020206030100 +0023010500a1010100810101000c01000031010000180101002301050099010100580100 +0600010006000000060a0100060000000603020201010303010102020605010000c50601 +010006000000060001000600010006000100060001000600010006000100060001000600 +00000603020201010301010102020603010000cb0101008101010059010100c301010058 +010106000000060c01000600000006020202010103030101020206050000010000c40602 +010006000100060001000600010006000100060001000600010006000100060000000604 +020201010301010102020603010000cb0101008101010059010100c30101005801000600 +010006000000060a0100060000000603020201010303010102020605010000c506010100 +0600040e060000000603020201010301010102020603010000cb01010081010100590101 +00c301010058010106000000060c01000600000006020202010103030101020206050000 +010000c40602010006000000060000000600000006000000060000000600000006000000 +060000000604020201010301010102020603010000cb0101008101010059010100c30101 +005801000600010006000000060a01000600000006030202010103030101020206050100 +00c506010100060004000600000006000000060000000600000006000000060000000600 +0100060000000603020201010301010102020603010000cb0101008101010059010100c3 +01010058010106000000060c010006000000060202020101030301010202060500000100 +00c40602010004000000060a0100040000000604020201010301010102020603010000cb +0101008101010059010100c30101005801000600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000401000006080100060004000600 +0000060302020101030101010202060301ff01ff01cf06000000060c0100060000000602 +0202010103030101020206050000010000c4060201000401060000000606010006000401 +0000060402020101030101010202060301ff01ff01ce0600010006000000060a01000600 +00000603020201010303010102020605010000c506010100060004020600000006060100 +0401060000000603020201010301010102020603010000cb0101008101010059010100c3 +01010058010106000000060c010006000000060202020101030301010202060500000100 +00c4060201000402000006060100040200000604020201010301010102020603010000cb +0101008101010059010100c30101005801000600010006000000060a0100060000000603 +020201010303010102020605010000c50601010006000403000006040100060004020600 +00000603020201010301010102020603010000cb010100810101000c0100003101000018 +010100c301010058010106000000060c0100060000000602020201010303010102020605 +0000010000c4060201000403060000000602010006000403000006040202010103010101 +0202060301000028010000040100000b0100008e010100810101000b0100000301020003 +0102000b010000030104000a0101000201000017010100180100000a0100002201020077 +0101000a0100004c01000600010006000000060a01000600000006030202010103030101 +02020605010000c506010100060004040600000006020100040306000000060302020101 +030101010202060301000028010000110100008e010100810101000a0100000301000002 +010000010100000201000009010100030100000201000009010000010100000201000016 +010100180100000a0100002401000077010100090101004c010106000000060c01000600 +000006020202010103030101020206050000010000c40602010004040000060201000404 +00000604020201010301010102020603010000090102000201000002010000020102000a +010100000100000201020003010200020104008c01010081010100090100000801000001 +0100000c0100000001000007010000090100000101000003010000150101000801000000 +010100030102000201040008010000010100000301020002010000000101000201000000 +01010003010200050100007701010008010000000100004c01000600010006000000060a +0100060000000603020201010303010102020605010000c5060101000600040500000600 +010006000404060000000603020201010301010102020603010000080100000201000001 +010000020100000101000002010000080100000101010004010000020100000201000003 +0100008e010100810101000801000009010000010100000e010000060100000a01000001 +010000040100001401010008010100010100000101000002010000030100000a01000000 +010000030100000201000001010100010100000101010001010000010100000201000004 +010000770101000a0100004c010106000000060c01000600000006020202010103030101 +020206050000010000c40602010004050600010006000405000006040202010103010101 +02020603010000080100000601000001010000010100000c010000020100000401000002 +010000070100008e010100810101000701000009010000020103000b010000060100000a +01000001010000050100001301010008010000020100000101000002010000030100000a +010100040100000201000001010000050100000201000001010000020100000401000077 +0101000a0100004c01000600010006000000060a01000600000006030202010103030101 +02020605010000c506010100060004060600010004050600000006030202010103010101 +020206030100000901020003010000010100000201020009010000020100000401000003 +010200040100008e01010081010100080100000701000003010000020100000a01000006 +0100000a010000010100000401000014010100080100000201000001010400030100000a +010100040104000101000005010000020100000101040004010000770101000a0100004c +010106000000060c010006000000060202020101030301010202060500c6060201000406 +01000406000006040202010103010101020206030100000c010000030100000001000005 +01000008010000020100000401000006010000030100008e010100810101000901000005 +01000004010000020100000a010000050100000b01000001010000030100001501010008 +0100000201000001010000070100000a0100000001000003010000050100000501000002 +0100000101000008010000770101000a0100004c01000600010006000000060a01000600 +000006030202010103030101020206ce0100060000000600000006000000060000000600 +000006000000060000000600000006000000060302020101030101010202060301000008 +010000020100000301010002010000020100000801000001010100040100000201000002 +010000030100008e010100810101000a0100000301000005010000020100000301010004 +010000050100000501010003010000010100000201000016010100080100000201000001 +01000002010000030100000a010000010100000201000002010000010100000501000002 +010000010100000201000004010000770101000a0100004c010106000000060c01000600 +000006020202010103030101020206cf0000060000000600000006000000060000000600 +000006000000060000000600000006040202010103010101020206030100000901020005 +010000030102000a010100000100000401000003010200050101008c010100810101000b +010000020104000201020004010100020104000301000005010100040101000201000017 +010100080100000201000002010200050101000801000002010000020102000201000005 +01000002010000020102000501000077010100080104004a01000600010006000000060a +010006000000060302020101030301010202060401000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000613 +0202010103010101020206030100001201000008010500a8010100810101000c01000031 +010000180101001c010500a001010058010106000000060c010006000000060202020101 +030301010202060301000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600000006120202010103010101 +020206030100000f01000000010000b80101008101010059010100c30101005801000600 +010006000000060a01000600000006030202010103030101020206040100040d06000400 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600040006000000040c00000613020201010301 +01010202060301000010010000b90101008101010059010100c301010058010106000000 +060c010006000000060202020101030301010202060301000600040b0000060001000400 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +00000600000006000000060000000600010004000000060000000600040a060000000612 +020201010301010102020603010000cb0101008101010059010100c30101005801000600 +010006000000060a01000600000006030202010103030101020206040100040906000000 +06000100060004000600000006a601000600040006000000060000000600000004080000 +0613020201010301010102020603010000cb0101008101010059010100c3010100580101 +06000000060c010006000000060202020101030301010202060301000600040700000600 +0000060201000400000006a8010004000000060200000600000006000406060000000612 +020201010301010102020603010000cb0101008101010059010100c30101005801000600 +010006000000060a01000600000006030202010103030101020206040100040506000000 +0600000006020100060004000600000006a6010006000400060000000604000006000000 +040400000613020201010301010102020603010000cb0101008101010059010100c30101 +0058010106000000060c0100060000000602020201010303010102020603010006000403 +000006000000060601000400000006a80100040000000606000006000000060004020600 +0000061202020101030101010202060301ff01ff01ce0600010006000000060a01000600 +000006030202010103030101020206040100040106000000060000000606010006000400 +0600000006a6010006000400060000000608000006000000040000000613020201010301 +01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202 +060301000600010006000100060a01000400000006a8010004000000060a010006000100 +060000000612020201010301010102020603010000cb0101008101010059010100c30101 +005801000600010006000000060a01000600000006030202010103030101020206040100 +0401060001000600010006060100060004000600000006a6010006000400060000000608 +010006000100040000000613020201010301010102020603010000cb0101008101010059 +010100c301010058010106000000060c0100060000000602020201010303010102020603 +010006000403010006000100060601000400000006a80100040000000606010006000100 +06000402060000000612020201010301010102020603010000cb01010081010100590101 +00c30101005801000600010006000000060a010006000000060302020101030301010202 +060401000405060001000600010006020100060004000600000006a60100060004000600 +00000604010006000100040400000613020201010301010102020603010000cb01010081 +01010059010100c301010058010106000000060c01000600000006020202010103030101 +02020603010006000407010006000100060201000400000006a801000400000006020100 +0600010006000406060000000612020201010301010102020603010000cb010100810101 +0059010100c30101005801000600010006000000060a0100060000000603020201010303 +010102020604010004090600010006000100060004000600000006a60100060004000600 +00000600010006000100040800000613020201010301010102020603010000cb01010081 +01010059010100c301010058010106000000060c01000600000006020202010103030101 +0202060301000600040b0100060001000400000006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +04000000060001000600040a060000000612020201010301010102020603010000cb0101 +008101010059010100c30101005801000600010006000000060a01000600000006030202 +010103030101020206040100040d06000400060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +040006000100040c00000613020201010301010102020603010000cb0101008101010059 +010100c301010058010106000000060c0100060000000602020201010303000406030100 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +06000000060000000600000006000000061200040301010102020603010000cb01010081 +01010059010100c30101005801000600010006000000060a010006000000060302020101 +030300000202050006040000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000061300000202050003010101 +02020603010000cb0101008101010059010100c301010058010106000000060c01000600 +0000060202020101030300000202050006e50000020205000301010102020603010000cb +0101008101010059010100c30101005801000600010006000000060a0100060000000603 +02020101030300000202050006e50000020205000301010102020603010000cb01010081 +01010059010100c301010058010106000000060c01000600000006020202010103030000 +0202050006e50000020205000301010102020603010000cb0101008101010059010100c3 +0101005801000600010006000000060a0100060000000603020201010303000002020500 +06e50000020205000301010102020603010000cb0101008101010059010100c301010058 +010106000000060c0100060000000602020201010303000002020500000502d900060202 +05000301010102020603010000cb0101008101010059010100c301010058010006000100 +06000000060a010006000000060302020101030300000208050002d90000020805000301 +010102020603010000cb0101008101010059010100c301010058010106000000060c0100 +06000000060202020101030300000208050002d900000208050003010101020206030100 +00cb0101008101010059010100c30101005801000600010006000000060a010006000000 +060302020101030300000208050001d90000020805000301010102020603010000cb0101 +008101010059010100c30101005801010600000006000100060001000600010006000100 +0600010006000100060001000600000006020202010103030000050901d9000005090301 +010102020603010000cb0101008101010059010100c30101005801000600010006000100 +0600010006000100060001000600010006000100060001000600000006030202010103f5 +01010202060301ff01ff01cf0600040e0600000006020202010103f501010202060301ff +01ff01ce06000100040e000006030202010103f5010102020603010000cb010100810101 +0059010100c30101005801010600040e0600000006020202010103f50101020206030100 +00cb0101008101010059010100c301010058010006000100040e000006030202010103f5 +010102020603010000cb0101008101010059010100c30101005801010600040e06000000 +06020202010103f5010102020603010000cb0101008101010059010100c3010100580100 +06000100040e000006030202010103f5010102020603010000cb01010081010100590101 +00c30101005801010600040e0600000006020202010103f5010102020603010000cb0101 +008101010059010100c301010058010006000100040e000006030202010103f501010202 +0603010000cb0101008101010059010100c30101005801010600040e0600000006020202 +010103f5010102020603010000cb0101008101010059010100c301010058010006000100 +040e000006030202010103f5010102020603010000cb0101008101010059010100c30101 +005801010600040e0600000006020202010103f5010102020603010000cb010100810101 +0059010100c301010058010006000100040e000006030202010103f50101020206030100 +00cb0101008101010059010100c30101005801010600040e0600000006020202010103f5 +010102020603010000cb0101008101010059010100c301010058010006000100040e0000 +06030202010103f5010102020603010000cb0101008101010059010100c3010100580101 +0600040e0600000006020202010103f5010102020603010000cb01010081010100590101 +00c301010058010006000100040e000006030202010103f5010102020603010000cb0101 +008101010059010100c30101005801010600040e0600000006020202010103f501010202 +0603010000cb0101008101010059010100c301010058010006000100040e000006030202 +010103f5010102020603010000cb0101008101010059010100c30101005801010600040e +0600000006020202010103f5010102020603010000cb0101008101010059010100c30101 +0058010006000100040e000006030202010103f5010102020603010000cb010100810101 +0059010100c30101005801010600040e0600000006020202010103f501010202060301ff +01ff01ce06000100040e000006030202010103f501010202060301ff01ff01cf06000000 +060000000600000006000000060000000600000006000000060000000600000006020202 +010103f5010102020603010000cb0101008101010059010100c301010058010006000100 +040000000600000006000000060000000600000006000000060000000600000006030202 +010103f5010102020603010000cb0101008101010059010100c301010058010106000400 +0600000006080100060004000600000006020202010103f5010102020603010000cb0101 +008101010059010100c30101005801000600010004010600000006080100040000000603 +0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 +040100000608010004010600000006020202010103f5010102020603010000cb01010081 +01010059010100c301010058010006000100040200000606010006000401000006030202 +010103f5010102020603010000cb0101008101010059010100c301010058010106000402 +0600000006040100060004020600000006020202010103f5010102020603010000cb0101 +008101010059010100c30101005801000600010004030600000006040100040200000603 +0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 +040300000604010004030600000006020202010103f5010102020603010000cb01010081 +01010059010100c301010058010006000100040400000602010006000403000006030202 +010103f5010102020603010000cb0101008101010059010100c301010058010106000404 +0600000006000100060004040600000006020202010103f5010102020603010000cb0101 +008101010059010100c30101005801000600010004050600010006000100040400000603 +0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 +040500000600010004050600000006020202010103f5010102020603010000cb01010081 +01010059010100c3010100580100060001000406010006000405000006030202010103f5 +010102020603010000cb0101008101010059010100c30101005801010600040606000406 +0600000006020202010103f5010102020603010000cb0101008101010059010100c30101 +005801000600010006000000060000000600000006000000060000000600000006000000 +0600000006030202010103f5010102020603010000cb0101008101010059010100c30101 +005801010600000006000000060000000600000006000000060000000600000006000000 +0600000006020202010103f5010102020603010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +06000100060001000600010006000100060001000600010006110202010103f501010202 +060201000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006000100060001000600010006000100060001000600010006000100 +060001000600010006120202010103f50101020206030100040d06000400060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +0000040000000600040c0600000006110202010103f501010202060201000600040b0000 +060001000400000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060000000600000006000000060000000600000006000000 +060000000600000006000000060004000600000006000000040a000006120202010103f5 +010102020603010004090600000006000100060004000600000006ff06ff06ac01000400 +00000600000006000000060004080600000006110202010103f501010202060201000600 +0407000006000000060201000400000006ff06ff06ac0100060004000600000006020000 +060000000406000006120202010103f50101020206030100040506000000060000000602 +0100060004000600000006ff06ff06ac0100040000000604000006000000060004040600 +000006110202010103f50101020206020100060004030000060000000606010004000000 +06ff06ff06ac0100060004000600000006060000060000000402000006120202010103f5 +01010202060301000401060000000600000006060100060004000600000006ff06ff06ac +0100040000000608000006000000060004000600000006110202010103f5010102020602 +01000600010006000100060a01000400000006ff06ff06ac010006000400060000000608 +0100060001000600000006120202010103f5010102020603010004010600010006000100 +06060100060004000600000006ff06ff06ac010004000000060801000600010006000400 +0600000006110202010103f5010102020602010006000403010006000100060601000400 +000006ff06ff06ac01000600040006000000060601000600010004020000061202020101 +03f501010202060301000405060001000600010006020100060004000600000006ff06ff +06ac0100040000000604010006000100060004040600000006110202010103f501010202 +0602010006000407010006000100060201000400000006ff06ff06ac0100060004000600 +000006020100060001000406000006120202010103f50101020206030100040906000100 +06000100060004000600000006ff06ff06ac010004000000060001000600010006000408 +0600000006110202010103f501010202060201000600040b010006000100040000000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +0100060004000600000006000100040a000006120202010103f5000406030100040d0600 +040006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +010006000100060001000600010006000100060001000600010006000100060001000600 +01000600010006000100040000000600040c060000000611000403f50000020205000602 +010006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000061200000202050003f50000020205000603000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000060000000600 +000006000000060000000600000006000000060000000600000006000000061100000202 +050003f500000202050006ff06ff06e800000202050003f500000202050006ff06ff06e8 +00000202050003f500000202050006ff06ff06e800000202050003f50000020205000005 +02ff02ff02dc00060202050003f500000208050002ff02ff02dc00000208050003f50000 +0208050002ff02ff02dc00000208050003f500000208050001ff01ff01dc000002080500 +03f50000050901ff01ff01dc0000050903ff03ff03ff03ff03ff03ff03ff03d3 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 21 400 186 +%%EOF diff --git a/lib/tv/doc/src/tv_start_pid_sorted.gif b/lib/tv/doc/src/tv_start_pid_sorted.gif new file mode 100644 index 0000000000..390f98541f Binary files /dev/null and b/lib/tv/doc/src/tv_start_pid_sorted.gif differ diff --git a/lib/tv/doc/src/tv_start_pid_sorted.ps b/lib/tv/doc/src/tv_start_pid_sorted.ps new file mode 100644 index 0000000000..13ef2ed027 --- /dev/null +++ b/lib/tv/doc/src/tv_start_pid_sorted.ps @@ -0,0 +1,1853 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_pid_sorted.eps) +%%CreationDate: (Mon Mar 19 17:15:26 2001) +%%BoundingBox: 0 0 377 205 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 377 205 +userdict begin +%%BeginData: +DisplayImage +0 0 +377.000000 205.000000 +12 +755 410 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +aab6aa +e7e7e7 +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff +02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 +04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff +02d000000202040000000202040002080000020d040002f6010302110103023801010206 +0101024001010230010102ff020400000202040000000202040002080000020d040002f6 +010102020107020001010203010102010101020e0105020001070201010302070100020b +01010206010102400101020c0104021e010102ff02040000020204000000020204000208 +0000020d040002f6010102050101020301010203010102010101020e0101020701010203 +01010201010102050101020b010102060101024e010102020101021d010102ff02040000 +0202040000000202040002080000020204060203040002f6010102050101020301010203 +010102010101020e01010207010102030101020801040201010302030101020001010203 +010102020103020301040206010302030101020001010207010102000101020101010203 +010302030101020201010200010102020101020101030202010102000101020101010203 +010302020101020001010201010102020103020201010202010102f30000020204000000 +04030208000002020400030400000203040002f601010205010102040101020201000202 +0101020e0101020701010203010202080101020201010201010102020102020001010202 +010102010101020101010201010102090101020101010202010202000101020601020200 +010202000101020101010201010102020101020201020200010102010101020001010200 +010102020102020001020200010102010101020101010201010102000101020101010201 +010102010101020101010202010102f3000004030101020b000002030400030200000204 +040002f6010102050101020401010201010102020101020e010402040101020401030206 +010102060101020201010201010102020101020101010201010102010102020801010201 +010102020101020101010206010102010101020101010205010102020101020201010201 +010102010101020001010200010102020101020101010201010102050101020101020203 +01010201010102010101020101010202010002f70103020b000002030400030200000204 +040002f6010102050101020501010200010002030101020e010102070101020601020205 +010102030104020201010201010102020101020101050202010302060101020101010202 +010102010101020601010201010102010101020201040202010102020101020101010201 +010102000101020001010202010102010101020101010202010402010101020401010201 +0105020201010200010102f70103020b000002040400030000000205040002f601010205 +01010205010302030101020e010102070101020701010205010102020101020101010202 +010102010101020201010201010102080102020501010201010102020101020101010206 +010102010101020101010201010102010101020201010202010102010101020101010201 +010102000101020101010201010102010101020101010201010102010101020401010201 +0101020601010200010002f80103020b000002040400030000000205040002f601010205 +01010206010102040101020e010102070101020301010201010102050101020201010201 +010102020101020101010202010102010101020201000205010102050101020101010202 +010102010101020601010201010102010101020101010201010102020101020201010201 +010102020101020701010201010102010101020101010201010102010101020401010201 +0101020201000203010202f80103020b0000020500000206040002f60101020501010206 +010102040101020e01050203010102040103020701020201010202000101020101040203 +010102020103020201040207010302030101020101010206010102010101020101010202 +010202000101020101010202010102010101020301050202010102010101020101010202 +0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 +01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 +020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff +02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff +02ee01030202050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050002020103020200000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050001000202010302020500000005ff05ff05e401000500020201030202000005ff05ff +05e601000202010302020500000005ff05ff05e401000500020201030202000005ff05ff +05e601000202010302020500000005ff05ff05e4010005000202010302020000050c0604 +0504060005030602051f0600050206000504060005270602050b06000506060005ff05ff +0535060005020600050906020514010002020103020205000000050b0600050f0600051f +060005020600052c060005020600050a060005ff05ff053d060005020600050b06000513 +010005000202010302020000050c06000506060205050600050306020518060005020600 +050206020503060205020600050206000517060005020600050106000500060105020604 +050206020503060205020600050006010503060205ff05ff052006000502060005020602 +050506000502060005000601050d010002020103020205000000050b0600050806000505 +060005020600050206000518060005000600050506000502060005020600050106000502 +060005170600050206000501060105010600050306000506060005020600050206000501 +060105010600050106000502060005ff05ff051f06000502060005010600050206000504 +06000502060105010600050b010005000202010302020000050c06030505060005050600 +050206000502060005180600050006000505060005020600050206000501060005000600 +050006000517060005020600050106000502060005030600050606000502060005020600 +05010600050206000501060005ff05ff0523060405010600050206000504060005020600 +05020600050c010002020103020205000000050b06000508060005050600050206040518 +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05ff052006000502060005010604050406000502060005020600050b0100050002020103 +02020000050c0600050806000505060005020600051d0600050606000502060005050600 +050006000500060005170600050206000501060005020600050306000506060005020600 +0502060005010600050206000505060005ff05ff051f0600050206000501060005080600 +0502060005020600050c010002020103020205000000050b060005080600050506000502 +060005020600051906000506060005020600050206000501060005000600050006000517 +060005020600050106010501060005030600050606000502060005020600050106000502 +0600050106000502060005ff05ff051f0600050206000501060005020600050406000502 +060105010600050b010005000202010302020000050c0600050806000505060005030602 +051a06000506060005030602050306000500060005190602050206000500060105050601 +050406000503060205020600050206000502060205ff05ff052006000502060005020602 +050506000502060005000601050d0100020201030202050000000576060005ff05ff055b +0600050f010005000202010302020000050b0606052a0606052a06060500060005ff05ff +05450606050e06000510010002020103020205000000050a0606052a0606052a06060500 +060005ff05ff05450606050e0600050f01000500020201030202000005ff05ff05e60100 +0202010302020500000005ff05ff05e401000500020201030202000005ff05ff05e60100 +020201030202050000000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050002020103020200000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010002020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff +05ff05e802020103020205ff05ff05e8020201030202051c01020504010305c101020504 +0103051a0102057f01010505010205f001020504010305190101052f020201030202050e +01060508010005060101050f010205010102059b01060508010005060101051001050504 +0101054d010205240104050d0101051e0102052401020501010205930106050801000506 +0101051101030535020201030202050e0100050101010500010005070101050601000511 +010105010100059d0100050101010500010005070101050601000513010105060100054d +0101050001010524010105000101050c0100051e01010500010105240101050101000595 +010005010101050001000507010105060100051101010501010105340202010302020510 +010105030103050201030503010105030103050801020500010105010103050001010500 +01000500010005020103058b010105030103050201030503010105030103050a01010503 +0104054c0101050101050500010305000102050201030501010105000102050701010501 +01010500010305030104051d010105010105050001030500010205020103050101010500 +010205070102050001010501010305000101050001000500010005020103058301010503 +010305020103050301010503010305090101050101000500010305020105050101030521 +020201030202051001010506010105000101050101010502010105020101050101010507 +0100050001000500010005050101050001050500010105010101058a0101050601010500 +010105010101050201010502010105010101050901010502010105010101054c01000502 +010105000101050201000500010205000101050001010501010105010102050001000507 +010105010101050201010502010105010101051d01000502010105000101050201000500 +010205000101050001010501010105010102050001000507010005000100050001000505 +010105000105050001010501010105820101050601010500010105010101050201010502 +010105010101050801020504010105020101050001010501010105010101052002020103 +020205100100050401040500010105010101050201010501010605070100050001020502 +0104050001010500010005000107058a0100050401040500010105010101050201010501 +0106050901010501010105020101054b0101050201000501010105000100050001000500 +01010501010805010101050a0103050401010501010105020101051c0101050201000501 +01010500010005000100050001010501010805010101050a010005000102050201040500 +010105000100050001070582010005040104050001010501010105020101050101060509 +01020503010105040101050101060520020201030202050f010105020101050101010500 +0101050201010501010105020101050b0101050001010501010105010101050101000500 +01000500010005000101058e010105020101050101010500010105020101050101010502 +0101050d01010502010105010101054c0101050101010501010205000100050101000502 +01000500010105050101050a0101050601010502010105010101051d0101050101010501 +01020500010005010100050201000500010105050101050a010105000101050101010501 +010105010100050001000500010005000101058601010502010105010101050001010502 +01010501010105020101050b010105010101050201010503010105030101052502020103 +0202050f0101050201010501010105000101050101010502010105020101050101010507 +01000501010105010101050101010500010105000100050001000500010105010101058a +010105020101050101010500010105010101050201010502010105010101050901010502 +010105010101054c01010500010105020103050101010501010105000101050101010501 +0101050a0101050601010502010105010101051d01010500010105020103050101010501 +0101050001010501010105010101050a0100050101010501010105010101050001010500 +010005000100050001010501010105820101050201010501010105000101050101010502 +010105020101050101010507010105010101050201010502010205000101050001010501 +01010521020201030202050e01030502010a050101050501010305070102050001010502 +0107050001000500010105000103058a01030502010a0501010505010103050801050501 +0105054c0102050301010500010005000103050001020500010305010104050701030503 +010505010105051d01020503010105000100050001030500010205000103050101040507 +01020500010105020107050001000500010105000103058201030502010a050101050501 +010305090103050101050500010505010103052202020103020205ff05ff05e802020103 +020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 +020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 +0202050201ff01ff01e205020202010302020503010000cb0101008101010059010100c3 +010100580101050001000500010005000100050001000500010005000100050001000500 +01000500000005020202010302020503010000cb0101008101010059010100c301010058 +010005000100030601000306000005030202010302020503010000cb010100810101000c +0100002301000026010100c3010100580101050003050000050003060500000005020202 +0103020205030100001f0100000a0100009e010100810101000b01000004010100090104 +000a01010002010000250101001e0102000501000012010000060100002e010000120102 +0003010200310101000a0100000501010044010005000100030505000100050003050000 +050302020103020205030100001f0100000a0100009e010100810101000a010000040100 +0001010000080100000d0100000101000002010000240101002001000019010000360100 +001401000005010000310101000901010004010000010100004301010500030405000000 +050001000305050000000502020201030202050301000009010200030102000901040002 +01020002010000000101009b01010081010100090100000501000001010000080100000d +010000010100000301000023010100090102000201000000010100020100000001010005 +01000003010200030102000301020002010400020102000301020002010000000101000a +010200030102000201000000010100020104000101000000010100030102000501000005 +010000030102000201000000010100230101000801000000010000040100000101000043 +010005000100030400000502010003040000050302020103020205030100000801000002 +01000001010000020100000a010000030100000201000001010100010100009a01010081 +010100080100000601000001010000080103000a01000001010000040100002201010008 +010000020100000101010001010000010101000101000004010000050100000201000002 +010000010100000201000003010000060100000201000002010000010101000101000008 +010000020100000101000002010000010101000101000003010000030101000101000001 +01000002010000040100000501000002010000020100000101010001010000220101000a +010000040100000101000043010105000303000005020100050003040500000005020202 +0103020205030100000c010000010100000e0100000701000001010000020100009a0101 +00810101000701000007010000010100000c010000090100000101000005010000210101 +000c01000001010000020100000101000002010000040100000501000002010000090100 +000301000006010000020100000201000001010000020100000801000005010000020100 +000101000002010000030100000301000005010000020100000401000005010000020100 +000201000001010000260101000a01000004010000010100004301000500010003030500 +0000050201000500030300000503020201030202050301000009010300010100000e0100 +000401030001010000020100009a010100810101000801000006010000010100000c0100 +000901000001010000040100002201010009010300010100000201000001010000020100 +000401000005010000020100000601030003010000060100000201000002010000010100 +000201000008010000050100000201000001010000020100000301000003010000050100 +000201000004010000050100000201040001010000260101000a01000004010000010100 +004301010500030205000000050401000303050000000502020201030202050301000008 +01000002010000010100000e010000030100000201000001010000020100009a01010081 +010100090100000501000001010000080100000201000009010000010100000301000023 +010100080100000201000001010000020100000101000002010000040100000501000002 +010000050100000201000003010000060100000201000002010000010100000201000008 +010000050100000201000001010000020100000301000003010000050100000201000004 +010000050100000201000005010000260101000a01000004010000010100004301000500 +010003020000050601000302000005030202010302020503010000080100000201000001 +010000020100000a010000030100000201000001010100010100009a010100810101000a +010000040100000101000003010100020100000201000003010100030100000101000002 +010000240101000801000002010000010101000101000001010100010100000401000005 +010000020100000201000001010000020100000301000006010000020100000201000001 +010000020100000801000002010000010100000201000001010000020100000301000003 +01000005010000020100000401000005010000020100000201000001010000260101000a +010000040100000101000043010105000301000005060100050003020500000005020202 +01030202050301000009010300020102000c0101000201030001010000000101009b0101 +00810101000b010000040101000401010003010200040101000401010002010000250101 +000901030001010000000101000201000000010100050100000501000003010200030103 +000401010004010000030102000201000002010000090102000301020002010000020100 +000401010001010000060102000501000005010000030102000201000026010100080104 +000301010044010005000100030105000000050601000500030100000503020201030202 +050301000015010500af010100810101000c01000023010000260101000f010000050100 +003c01050068010100580101050003000500000005080100030105000000050202020103 +02020503010000cb01010081010100590101000f01000005010000ab0101005801000500 +010003000000050a01000300000005030202010302020503010000cb0101008101010059 +0101000f01000005010000ab010100580101050000000500010005000100050001000500 +01000500010005000100050003000500000005020202010302020503010000cb01010081 +01010059010100c301010058010005000100050001000500010005000100050001000500 +010005000100050001000500000005030202010302020503010000cb0101008101010059 +010100c30101005801010500030e0500000005020202010302020503010000cb01010081 +01010059010100c301010058010005000100050000000500000005000000050000000500 +000005000000050000000500000005030202010302020503010000cb0101008101010059 +010100c30101005801010500000005000000050000000500000005000000050000000500 +000005000100050000000502020201030202050301ff01ff01ce0500010005000000050a +0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502 +0202010302020503010000cb0101008101010059010100c3010100580100050001000500 +0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 +01010058010105000000050c01000500000005020202010302020503010000cb01010081 +0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500 +00000503020201030202050301000010010200090100000d0102000a010200100100007b +010100810101000b010000040101000b010000050100000c010100020100001e01010010 +010200090100000d010200930101000a0101004b010105000000050c0100050000000502 +020201030202050301000012010000090100000f0100000c010000100100007b01010081 +0101000a010000040100000101000009010100040101000b01000001010000020100001d +01010012010000090100000f0100009301010009010000010100004a0100050001000500 +0000050a0100050000000503020201030202050301000009010100000100000401000003 +010200020100000001010003010200050100000c01000003010200030102000201000001 +010000030102007101010081010100090100000501000001010000080100000001000003 +010000000100000b01000001010000030100001c01010009010100000100000401000003 +010200020100000001010003010200050100000901000000010100030102000201010000 +010000030102000a01020003010200020100000001010002010000020100000201020002 +010000000101003f01010009010000010100004a010105000000050c0100050000000502 +020201030202050301000008010000010101000401000002010000020100000101010001 +0100000101000002010000040100000c0100000201000002010000010100000201000001 +01000000010000030100000201000070010100810101000801000006010000010100000a +010000050100000b01000001010000040100001b01010008010000010101000401000002 +010000020100000101010001010000010100000201000004010000090101000101000001 +010000020100000101000000010000000100000101000002010000080100000201000001 +010000020100000101010001010000010100000201000001010000020100000101010001 +0100003e01010009010000010100004a01000500010005000000050a0100050000000503 +020201030202050301000008010000020100000401000002010000020100000101000002 +01000005010000040100000c010000020100000201000001010000050101000401000074 +010100810101000701000007010000010100000a010000050100000b0100000101000005 +0100001a0101000801000002010000040100000201000002010000010100000201000005 +010000040100000901000002010000050100000101000000010000000100000101000002 +010000080100000501000002010000010100000501000002010000010100000201000001 +0100004201010009010000010100004a010105000000050c010005000000050202020103 +020205030100000801000002010000040100000201000002010000010100000201000002 +010300040100000c01000002010000020100000101000005010100050102007101010081 +0101000801000006010000010100000a010000050100000b01000001010000040100001b +010100080100000201000004010000020100000201000001010000020100000201030004 +010000090100000201000002010300010100000001000000010000010104000901020002 +01040001010000060100000001000002010400010100004201010009010000010100004a +01000500010005000000050a010005000000050302020103020205030100000801000002 +01000004010000020100000201000001010000020100000101000002010000040100000c +010000020100000201000001010000050100000001000007010000700101008101010009 +01000005010000010100000a010000050100000b01000001010000030100001c01010008 +010000020100000401000002010000020100000101000002010000010100000201000004 +010000090100000201000001010000020100000101000000010000000100000101000010 +010000010100000501000006010000000100000201000005010000420101000901000001 +0100004a010105000000050c010005000000050202020103020205030100000801000001 +01010004010000020100000201000001010100010100000101000002010000040100000c +010000020100000201000001010000020100000101000001010000020100000201000070 +010100810101000a01000004010000010100000301010004010000050100000501010003 +01000001010000020100001d010100080100000101010004010000020100000201000001 +010100010100000101000002010000040100000901000002010000010100000201000001 +010000000100000001000001010000020100000801000002010000010100000201000001 +010000070100000301000002010000010100004201010009010000010100004a01000500 +010005000000050a01000500000005030202010302020503010000090101000001000004 +01000003010200020100000001010003010300040100000c010000030102000301020002 +010000020100000201020071010100810101000b01000004010100040101000201040001 +0104000301010004010100020100001e0101000901010000010000040100000301020002 +010000000101000301030004010000090100000201000002010300010100000001000000 +010000020102000a0102000301020002010000070100000401020002010000420101000a +0101004b010105000000050c010005000000050202020103020205030100000c01000023 +01050093010100810101000c0100002a0100001f0101000c010000230105001c01050068 +0101005801000500010005000000050a0100050000000503020201030202050301000008 +01000002010000bd01010081010100590101000801000002010000b50101005801010500 +0000050c0100050000000502020201030202050301000009010200be0101008101010059 +01010009010200b60101005801000500010005000000050a010005000000050302020103 +02020503010000cb0101008101010059010100c301010058010105000000050c01000500 +000005020202010302020503010000cb0101008101010059010100c30101005801000500 +010005000000050a01000500000005030202010302020503010000cb0101008101010059 +010100c301010058010105000000050c01000500000005020202010302020503010000cb +0101008101010059010100c30101005801000500010005000000050a0100050000000503 +020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503 +01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb +0101008101010059010100c301010058010105000000050c010005000000050202020103 +02020503010000cb0101008101010059010100c30101005801000500010005000000050a +01000500000005030202010302020503010000cb010100810101000c0100002a0100001f +010100c301010058010105000000050c0100050000000502020201030202050301000010 +010200090100000d0102009b010100810101000b010000040101000b010000050100000c +010100020100001e01010010010200090100000d010200930101000a0101004b01000500 +010005000000050a0100050000000503020201030202050301000012010000090100000f +0100009b010100810101000a010000040100000101000009010100040101000b01000001 +010000020100001d01010012010000090100000f0100009301010009010000010100004a +010105000000050c01000500000005020202010302020503010000090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +010100000100000301020003010200710101008101010009010000050100000101000008 +0100000001000003010000000100000b01000001010000030100001c0101000901010000 +010000040100000301020002010000000101000301020005010000090100000001010003 +0102000201010000010000030102000a0102000301020002010000000101000201000002 +0100000201020002010000000101003f01010009010000010100004a0100050001000500 +0000050a0100050000000503020201030202050301000008010000010101000401000002 +010000020100000101010001010000010100000201000004010000090101000101000001 +010000020100000101000000010000000100000101000002010000010100000201000070 +010100810101000801000006010000010100000a010000050100000b0100000101000004 +0100001b0101000801000001010100040100000201000002010000010101000101000001 +010000020100000401000009010100010100000101000002010000010100000001000000 +010000010100000201000008010000020100000101000002010000010101000101000001 +01000002010000010100000201000001010100010100003e01010009010000010100004a +010105000000050c01000500000005020202010302020503010000080100000201000004 +010000020100000201000001010000020100000501000004010000090100000201000005 +010000010100000001000000010000010100000201000001010000740101008101010007 +01000007010000010100000a010000050100000b01000001010000050100001a01010008 +010000020100000401000002010000020100000101000002010000050100000401000009 +010000020100000501000001010000000100000001000001010000020100000801000005 +010000020100000101000005010000020100000101000002010000010100004201010009 +010000010100004a01000500010005000000050a01000500000005030202010302020503 +010000080100000201000004010000020100000201000001010000020100000201030004 +010000090100000201000002010300010100000001000000010000010104000201020071 +010100810101000801000006010000010100000a010000050100000b0100000101000004 +0100001b0101000801000002010000040100000201000002010000010100000201000002 +010300040100000901000002010000020103000101000000010000000100000101040009 +010200020104000101000006010000000100000201040001010000420101000901000001 +0100004a010105000000050c010005000000050202020103020205030100000801000002 +010000040100000201000002010000010100000201000001010000020100000401000009 +010000020100000101000002010000010100000001000000010000010100000901000070 +010100810101000901000005010000010100000a010000050100000b0100000101000003 +0100001c0101000801000002010000040100000201000002010000010100000201000001 +010000020100000401000009010000020100000101000002010000010100000001000000 +010000010100001001000001010000050100000601000000010000020100000501000042 +01010009010000010100004a01000500010005000000050a010005000000050302020103 +020205030100000801000001010100040100000201000002010000010101000101000001 +010000020100000401000009010000020100000101000002010000010100000001000000 +0100000101000002010000010100000201000070010100810101000a0100000401000001 +010000030101000401000005010000050101000301000001010000020100001d01010008 +010000010101000401000002010000020100000101010001010000010100000201000004 +010000090100000201000001010000020100000101000000010000000100000101000002 +010000080100000201000001010000020100000101000007010000030100000201000001 +0100004201010009010000010100004a010105000000050c010005000000050202020103 +020205030100000901010000010000040100000301020002010000000101000301030004 +010000090100000201000002010300010100000001000000010000020102000301020071 +010100810101000b01000004010100040101000201040001010400030101000401010002 +0100001e0101000901010000010000040100000301020002010000000101000301030004 +010000090100000201000002010300010100000001000000010000020102000a01020003 +01020002010000070100000401020002010000420101000a0101004b0100050001000500 +0000050a010005000000050302020103020205030100000c010000230105009301010081 +0101000c0100002a0100001f0101000c010000230105001c010500680101005801010500 +0000050c010005000000050202020103020205030100000801000002010000bd01010081 +010100590101000801000002010000b50101005801000500010005000000050a01000500 +00000503020201030202050301000009010200be010100810101005901010009010200b6 +01010058010105000000050c01000500000005020202010302020503010000cb01010081 +01010059010100c30101005801000500010005000000050a010005000000050302020103 +02020503010000cb0101008101010059010100c301010058010105000000050c01000500 +000005020202010302020503010000cb0101008101010059010100c30101005801000500 +010005000000050a01000500000005030202010302020503010000cb0101008101010059 +010100c301010058010105000000050c0100050000000502020201030202050301ff01ff +01ce0500010005000000050a0100050000000503020201030202050301ff01ff01cf0500 +0000050c01000500000005020202010302020503010000cb0101008101010059010100c3 +0101005801000500010005000000050a01000500000005030202010302020503010000cb +0101008101010059010100c301010058010105000000050c010005000000050202020103 +02020503010000cb010100810101000c0100002a0100001f010100c30101005801000500 +010005000000050a0100050000000503020201030202050301000010010200090100000d +0102004301000056010100810101000b010000040101000b010000050100000c01010002 +0100001e01010010010200090100000d010200930101000a0101004b010105000000050c +0100050000000502020201030202050301000012010000090100000f0100004301000056 +010100810101000a010000040100000101000009010100040101000b0100000101000002 +0100001d01010012010000090100000f0100009301010009010000010100004a01000500 +010005000000050a01000500000005030202010302020503010000090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +0101000001000003010200030102000a0102000201000002010000010104005401010081 +010100090100000501000001010000080100000001000003010000000100000b01000001 +010000030100001c01010009010100000100000401000003010200020100000001010003 +010200050100000901000000010100030102000201010000010000030102000a01020003 +010200020100000001010002010000020100000201020002010000000101003f01010009 +010000010100004a010105000000050c0100050000000502020201030202050301000008 +010000010101000401000002010000020100000101010001010000010100000201000004 +010000090101000101000001010000020100000101000000010000000100000101000002 +010000010100000201000008010000020100000101000002010000030100005601010081 +0101000801000006010000010100000a010000050100000b01000001010000040100001b +010100080100000101010004010000020100000201000001010100010100000101000002 +010000040100000901010001010000010100000201000001010000000100000001000001 +010000020100000801000002010000010100000201000001010100010100000101000002 +010000010100000201000001010100010100003e01010009010000010100004a01000500 +010005000000050a01000500000005030202010302020503010000080100000201000004 +010000020100000201000001010000020100000501000004010000090100000201000005 +0100000101000000010000000100000101000002010000010100000c0100000201000002 +010000000100000401000056010100810101000701000007010000010100000a01000005 +0100000b01000001010000050100001a0101000801000002010000040100000201000002 +010000010100000201000005010000040100000901000002010000050100000101000000 +010000000100000101000002010000080100000501000002010000010100000501000002 +0100000101000002010000010100004201010009010000010100004a010105000000050c +010005000000050202020103020205030100000801000002010000040100000201000002 +010000010100000201000002010300040100000901000002010000020103000101000000 +010000000100000101040002010200090104000301000005010000560101008101010008 +01000006010000010100000a010000050100000b01000001010000040100001b01010008 +010000020100000401000002010000020100000101000002010000020103000401000009 +010000020100000201030001010000000100000001000001010400090102000201040001 +010000060100000001000002010400010100004201010009010000010100004a01000500 +010005000000050a01000500000005030202010302020503010000080100000201000004 +010000020100000201000001010000020100000101000002010000040100000901000002 +010000010100000201000001010000000100000001000001010000090100000801000006 +010000000100000401000056010100810101000901000005010000010100000a01000005 +0100000b01000001010000030100001c0101000801000002010000040100000201000002 +010000010100000201000001010000020100000401000009010000020100000101000002 +010000010100000001000000010000010100001001000001010000050100000601000000 +01000002010000050100004201010009010000010100004a010105000000050c01000500 +000005020202010302020503010000080100000101010004010000020100000201000001 +010100010100000101000002010000040100000901000002010000010100000201000001 +010000000100000001000001010000020100000101000002010000080100000201000001 +010000020100000301000056010100810101000a01000004010000010100000301010004 +01000005010000050101000301000001010000020100001d010100080100000101010004 +010000020100000201000001010100010100000101000002010000040100000901000002 +010000010100000201000001010000000100000001000001010000020100000801000002 +010000010100000201000001010000070100000301000002010000010100004201010009 +010000010100004a01000500010005000000050a01000500000005030202010302020503 +010000090101000001000004010000030102000201000000010100030103000401000009 +010000020100000201030001010000000100000001000002010200030102000a01020002 +010000020100000401010054010100810101000b01000004010100040101000201040001 +0104000301010004010100020100001e0101000901010000010000040100000301020002 +010000000101000301030004010000090100000201000002010300010100000001000000 +010000020102000a0102000301020002010000070100000401020002010000420101000a +0101004b010105000000050c010005000000050202020103020205030100000c01000023 +0105002301050069010100810101000c0100002a0100001f0101000c010000230105001c +010500680101005801000500010005000000050a01000500000005030202010302020503 +0100000801000002010000bd01010081010100590101000801000002010000b501010058 +010105000000050c0100050000000502020201030202050301000009010200be01010081 +0101005901010009010200b60101005801000500010005000000050a0100050000000503 +0202010302020503010000cb0101008101010059010100c301010058010105000000050c +01000500000005020202010302020503010000cb0101008101010059010100c301010058 +01000500010005000000050a01000500000005030202010302020503010000cb01010081 +01010059010100c301010058010105000000050c01000500000005020202010302020503 +010000cb0101008101010059010100c30101005801000500010005000000050a01000500 +00000503020201030202050301ff01ff01cf05000000050c010005000000050202020103 +0202050301ff01ff01ce0500010005000000050a01000500000005030202010302020503 +010000cb0101008101010059010100c301010058010105000000050c0100050000000502 +0202010302020503010000cb0101008101010059010100c3010100580100050001000500 +0000050a01000500000005030202010302020503010000cb010100810101000c0100002a +0100001f010100c301010058010105000000050c01000500000005020202010302020503 +0100000b010000120100001f01000089010100810101000b010000040101000b01000004 +0102000b010100020100001e0101000b010000120100000e010000010100008f0101000a +0101004b01000500010005000000050a010005000000050302020103020205030100001f +0100001f01000089010100810101000a0100000401000001010000090101000301000002 +0100000901000001010000020100001d0101001f0100000e010000010100008f01010009 +010000010100004a010105000000050c0100050000000502020201030202050301000009 +010200020100000001010003010200020104000901020003010200030102000201000000 +010100030102007f01010081010100090100000501000001010000080100000001000007 +0100000901000001010000030100001c0101000901020002010000000101000301020002 +010400090101000001000001010000000101008c01010009010000010100004a01000500 +010005000000050a010005000000050302020103020205030100000b0100000201010001 +0100000101000002010000030100000a0100000201000001010000020100000101000002 +010000010101000101000001010000020100007e01010081010100080100000601000001 +0100000a010000070100000901000001010000040100001b0101000b0100000201010001 +0100000101000002010000030100000a0100000101010001010100010100008b01010009 +010000010100004a010105000000050c010005000000050202020103020205030100000b +01000002010000020100000101000002010000030100000a010000090100000101000005 +0100000201000001010000020100007e010100810101000701000007010000010100000a +010000060100000a01000001010000050100001a0101000b010000020100000201000001 +01000002010000030100000a0100000201000001010000020100008b0101000901000001 +0100004a01000500010005000000050a010005000000050302020103020205030100000b +010000020100000201000001010400030100000a01000006010300010100000501000002 +010000010104007e010100810101000801000006010000010100000a010000050100000b +01000001010000040100001b0101000b010000020100000201000001010400030100000a +0100000201000001010000020100008b01010009010000010100004a010105000000050c +010005000000050202020103020205030100000b01000002010000020100000101000007 +0100000a0100000501000002010000010100000501000002010000010100008201010081 +0101000901000005010000010100000a010000040100000c01000001010000030100001c +0101000b010000020100000201000001010000070100000a010000020100000101000002 +0100008b01010009010000010100004a01000500010005000000050a0100050000000503 +02020103020205030100000b01000002010000020100000101000002010000030100000a +010000020100000101000002010000010100000201000001010000020100000101000002 +0100007e010100810101000a010000040100000101000003010100040100000301000007 +0101000301000001010000020100001d0101000b01000002010000020100000101000002 +010000030100000a0100000101010001010100010100008b01010009010000010100004a +010105000000050c010005000000050202020103020205030100000b0100000201000002 +01000002010200050101000901020003010300020102000201000002010000020102007f +010100810101000b01000004010100040101000201040001010400030101000401010002 +0100001e0101000b01000002010000020100000201020005010100090101000001000001 +010000000101008c0101000a0101004b01000500010005000000050a0100050000000503 +020201030202050301000023010500a1010100810101000c0100002a0100001f01010023 +0105009901010058010105000000050c01000500000005020202010302020503010000cb +0101008101010059010100c30101005801000500010005000000050a0100050000000503 +0202010302020503010000cb0101008101010059010100c301010058010105000000050c +01000500000005020202010302020503010000cb0101008101010059010100c301010058 +01000500010005000000050a01000500000005030202010302020503010000cb01010081 +01010059010100c301010058010105000000050c01000500000005020202010302020503 +010000cb0101008101010059010100c30101005801000500010005000000050a01000500 +000005030202010302020503010000cb0101008101010059010100c30101005801010500 +0000050c0100050000000502020201030202050301ff01ff01ce0500010005000000050a +0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502 +0202010302020503010000cb0101008101010059010100c3010100580100050001000500 +0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 +01010058010105000000050c01000500000005020202010302020503010000cb01010081 +0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500 +0000050302020103020205030100000b010000120100000e010000010100009701010081 +0101000b010000040101000b010000040102000b010100020100001e0101000b01000012 +0100000e010000010100008f0101000a0100000401020044010105000000050c01000500 +0000050202020103020205030100001f0100000e0100000101000097010100810101000a +01000004010000010100000901010003010000020100000901000001010000020100001d +0101001f0100000e010000010100008f0101000901010003010000020100004301000500 +010005000000050a01000500000005030202010302020503010000090102000201000000 +010100030102000201040009010100000100000101000000010100940101008101010009 +01000005010000010100000801000000010000070100000901000001010000030100001c +010100090102000201000000010100030102000201040009010100000100000101000000 +0101008c0101000801000000010000030100000201000043010105000000050c01000500 +0000050202020103020205030100000b0100000201010001010000010100000201000003 +0100000a0100000101010001010100010100009301010081010100080100000601000001 +0100000a010000070100000901000001010000040100001b0101000b0100000201010001 +0100000101000002010000030100000a0100000101010001010100010100008b0101000a +01000003010000020100004301000500010005000000050a010005000000050302020103 +020205030100000b01000002010000020100000101000002010000030100000a01000002 +010000010100000201000093010100810101000701000007010000010100000a01000006 +0100000a01000001010000050100001a0101000b01000002010000020100000101000002 +010000030100000a0100000201000001010000020100008b0101000a0100000401030043 +010105000000050c010005000000050202020103020205030100000b0100000201000002 +01000001010400030100000a010000020100000101000002010000930101008101010008 +01000006010000010100000a010000050100000b01000001010000040100001b0101000b +010000020100000201000001010400030100000a0100000201000001010000020100008b +0101000a010000070100004301000500010005000000050a010005000000050302020103 +020205030100000b010000020100000201000001010000070100000a0100000201000001 +0100000201000093010100810101000901000005010000010100000a010000040100000c +01000001010000030100001c0101000b010000020100000201000001010000070100000a +0100000201000001010000020100008b0101000a0100000701000043010105000000050c +010005000000050202020103020205030100000b01000002010000020100000101000002 +010000030100000a01000001010100010101000101000093010100810101000a01000004 +01000001010000030101000401000003010000070101000301000001010000020100001d +0101000b01000002010000020100000101000002010000030100000a0100000101010001 +010100010100008b0101000a01000003010000020100004301000500010005000000050a +010005000000050302020103020205030100000b01000002010000020100000201020005 +0101000901010000010000010100000001010094010100810101000b0100000401010004 +01010002010400010104000301010004010100020100001e0101000b0100000201000002 +0100000201020005010100090101000001000001010000000101008c0101000801040002 +01020044010105000000050c0100050000000502020201030202050301000023010500a1 +010100810101000c0100002a0100001f0101002301050099010100580100050001000500 +0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 +01010058010105000000050c01000500000005020202010302020503010000cb01010081 +01010059010100c30101005801000500010005000000050a010005000000050302020103 +02020503010000cb0101008101010059010100c301010058010105000000050c01000500 +000005020202010302020503010000cb0101008101010059010100c30101005801000500 +010005000000050a01000500000005030202010302020503010000cb0101008101010059 +010100c301010058010105000000050c01000500000005020202010302020503010000cb +0101008101010059010100c30101005801000500010005000000050a0100050000000503 +020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503 +01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb +0101008101010059010100c301010058010105000000050c010005000000050202020103 +02020503010000cb0101008101010059010100c30101005801000500010005000000050a +01000500000005030202010302020503010000cb010100810101000c0100002a0100001f +010100c301010058010105000000050c010005000000050202020103020205030100000b +010000120100000a0100001501000087010100810101000b010000040101000b01000004 +0102000b010100020100001e0101000b010000120100000e010000010100008f0101000c +0100004a01000500010005000000050a010005000000050302020103020205030100001f +0100000a0100001501000087010100810101000a01000004010000010100000901010003 +010000020100000901000001010000020100001d0101001f0100000e010000010100008f +0101000b0101004a010105000000050c0100050000000502020201030202050301000009 +010200020100000001010003010200020104000801000000010100030102000301020002 +010400020102007f01010081010100090100000501000001010000080100000001000007 +0100000901000001010000030100001c0101000901020002010000000101000301020002 +010400090101000001000001010000000101008c0101000a010000000100004a01000500 +010005000000050001000500010005000100050001000500010005000100050000000503 +02020103020205030100000b01000002010100010100000101000002010000030100000a +01010001010000010100000201000001010000020100000301000003010000020100007e +010100810101000801000006010000010100000a01000007010000090100000101000004 +0100001b0101000b01000002010100010100000101000002010000030100000a01000001 +01010001010100010100008b01010009010000010100004a010105000000050001000500 +010005000100050001000500010005000100050001000500000005020202010302020503 +0100000b01000002010000020100000101000002010000030100000a0100000201000001 +010000020100000101000007010000030100008201010081010100070100000701000001 +0100000a010000060100000a01000001010000050100001a0101000b0100000201000002 +0100000101000002010000030100000a0100000201000001010000020100008b01010008 +010000020100004a010005000100030e0000050302020103020205030100000b01000002 +0100000201000001010400030100000a0100000201000001010000020100000201020004 +010000040102007f010100810101000801000006010000010100000a010000050100000b +01000001010000040100001b0101000b010000020100000201000001010400030100000a +0100000201000001010000020100008b01010008010000020100004a01010500030e0500 +0000050202020103020205030100000b010000020100000201000001010000070100000a +0100000201000001010000020100000501000003010000070100007e0101008101010009 +01000005010000010100000a010000040100000c01000001010000030100001c0101000b +010000020100000201000001010000070100000a0100000201000001010000020100008b +0101000801050049010005000100030e0000050302020103020205030100000b01000002 +010000020100000101000002010000030100000a01000002010000010100000201000001 +010000020100000301000003010000020100007e010100810101000a0100000401000001 +010000030101000401000003010000070101000301000001010000020100001d0101000b +01000002010000020100000101000002010000030100000a010000010101000101010001 +0100008b0101000c0100004a01010500030e05000000050202020103020205030100000b +010000020100000201000002010200050101000801000002010000020102000301020005 +010100020102007f010100810101000b0100000401010004010100020104000101040003 +01010004010100020100001e0101000b0100000201000002010000020102000501010009 +0101000001000001010000000101008c0101000c0100004a010005000100030e00000503 +020201030202050301000023010500a1010100810101000c0100002a0100001f01010023 +010500990101005801010500030e0500000005020202010302020503010000cb01010081 +01010059010100c301010058010005000100030e000005030202010302020503010000cb +0101008101010059010100c30101005801010500030e0500000005020202010302020503 +010000cb0101008101010059010100c301010058010005000100030e0000050302020103 +02020503010000cb0101008101010059010100c30101005801010500030e050000000502 +0202010302020503010000cb0101008101010059010100c301010058010005000100030e +000005030202010302020503010000cb0101008101010059010100c30101005801010500 +030e050000000502020201030202050301ff01ff01ce05000100030e0000050302020103 +0202050307cd01ff01ff01010500030e0500000005020202010302020503070008cb0700 +0100088101010859010108c301010858010005000100030e000005030202010302020503 +070008cb07000100080b010108470101082901010859010108c30101085801010500030e +0500000005020202010302020503070008cb07000100080a010008150100082a01000808 +010008280101080c0100082a0100081f010108c301010858010005000100030e00000503 +02020103020205030700081d07000808070008a207000100080a010008040102080c0100 +08040101080b010008030104080a0101080201000807010008280101080b010008040101 +080b010008030104080a010108020100081e010108180100080a01000822010208770101 +080a0100084c01010500030e05000000050202020103020205030700081d070008ac0700 +0100080a01000803010008020100080a0100080401000801010008090101080301000802 +01000809010008010100080201000806010008280101080a010008040100080101000809 +01010803010008020100080901000801010008020100081d010108180100080a01000824 +01000877010108090101084c010005000100030e00000503020201030202050307000809 +070208030702080307020802070008010700080307020803070208030702089407000100 +080a01000803010008020100080901000805010008010100080801000800010008070100 +080901000801010008030100080501000828010108090100080501000801010008080100 +0800010008070100080901000801010008030100081c0101080801000800010108030102 +080201040808010008010100080301020802010008000101080201000800010108030102 +08050100087701010808010008000100084c01010500030e050000000502020201030202 +050307000808070008020700080107000802070008010700080207000801070008000700 +0806070008020700080207000801070008020700089307000100080a0100080301000802 +0100080801000806010008010100080a010008060100080a010008010100080401000804 +010008280101080801000806010008010100080a010008060100080a0100080101000804 +0100081b01010808010108010100080101000802010008030100080a0100080001000803 +010008020100080101010801010008010101080101000801010008020100080401000877 +0101080a0100084c010005000100030e0000050302020103020205030700080807000805 +070008020700080107000802070008010701080707000802070008020700080107000897 +070001000808010108050102080801000807010008010100080a010008060100080a0100 +08010100080501000804010108260101080701000807010008010100080a010008060100 +080a01000801010008050100081a01010808010008020100080101000802010008030100 +080a01010804010008020100080101000805010008020100080101000802010008040100 +08770101080a0100084c01010500030e0500000005020202010302020503070008080700 +080507000802070008010700080207000801070108070700080207040802070208940700 +0100080a01000803010008020100080801000806010008010100080a010008060100080a +010008010100080401000804010008280101080801000806010008010100080a01000806 +0100080a01000801010008040100081b010108080100080201000801010408030100080a +010108040104080101000805010008020100080101040804010008770101080a0100084c +010005000100030e00000503020201030202050307000808070008050700080207000801 +0700080207000801070008000700080607000802070008090700089307000100080a0100 +0803010008020100080901000805010008010100080a010008050100080b010008010100 +080301000805010008280101080901000805010008010100080a010008050100080b0100 +0801010008030100081c010108080100080201000801010008070100080a010008000100 +08030100080501000805010008020100080101000808010008770101080a0100084c0101 +0500030e0500000005020202010302020503070008080700080207000801070008020700 +080107000802070008010700080107000805070008020700080207000801070008020700 +089307000100080a01000803010008020100080301010804010008040100080101000803 +01010804010008050100080501010803010008010100080201000806010008280101080a +010008040100080101000803010108040100080501000805010108030100080101000802 +0100081d01010808010008020100080101000802010008030100080a0100080101000802 +01000802010008010100080501000802010008010100080201000804010008770101080a +0100084c010005000100030e000005030202010302020503070008090702080307020803 +07020802070008020700080407000803070208030702089407000100080a010008040102 +080401010805010008040101080401010802010408030100080501010804010108020100 +0807010008280101080b0100080401010804010108020104080301000805010108040101 +08020100081e010108080100080201000802010208050101080801000802010008020102 +08020100080501000802010008020102080501000877010108080104084a01010500030e +0500000005020202010302020503070008cb07000100080a0100080d010008060100082a +01000808010008280101080c0100082a0100081f0101081c010508a00101085801000500 +0100030e000005030202010302020503070008cb07000100080b010108090101083b0101 +082901010859010108c30101085801010500030e05000000050202020103020205030700 +08cb07000100088101010859010108c301010858010005000100030e0000050302020103 +02020503070008cb07000100088101010859010108c30101085801010500030e05000000 +05020202010302020503070008cb07000100088101010859010108c30101085801000500 +0100030e000005030202010302020503070008cb07000100088101010859010108c30101 +085801010500030e0500000005020202010302020503070008cb07000100088101010859 +010108c301010858010005000100030e00000503020201030202050307cd01ff01ff0101 +0500030e050000000502020201030202050301ff01ff01ce05000100030e000005030202 +010302020503010000cb0101008101010059010100c30101005801010500030e05000000 +05020202010302020503010000cb0101008101010059010100c301010058010005000100 +030e000005030202010302020503010000cb010100810101000c0100002a0100001f0101 +00c30101005801010500030e050000000502020201030202050301000028010000040100 +000b0100008e010100810101000b010000040101000b010000030104000a010100020100 +001e010100180100000a01000022010200770101000a0101004b010005000100030e0000 +0503020201030202050301000028010000110100008e010100810101000a010000040100 +00010100000901010003010000020100000901000001010000020100001d010100180100 +000a010000240100007701010009010000010100004a01010500030e0500000005020202 +010302020503010000090102000201000002010000020102000a01010000010000020102 +0003010200020104008c0101008101010009010000050100000101000008010000000100 +00070100000901000001010000030100001c010100080100000001010003010200020104 +000801000001010000030102000201000000010100020100000001010003010200050100 +007701010009010000010100004a010005000100030e0000050302020103020205030100 +000801000002010000010100000201000001010000020100000801000001010100040100 +000201000002010000030100008e010100810101000801000006010000010100000a0100 +00060100000a01000001010000040100001b010100080101000101000001010000020100 +00030100000a010000000100000301000002010000010101000101000001010100010100 +000101000002010000040100007701010009010000010100004a01010500030e05000000 +05020202010302020503010000080100000601000001010000010100000c010000020100 +000401000002010000070100008e010100810101000701000007010000010100000a0100 +00060100000a01000001010000050100001a010100080100000201000001010000020100 +00030100000a010100040100000201000001010000050100000201000001010000020100 +00040100007701010009010000010100004a010005000100030e00000503020201030202 +050301000009010200030100000101000002010200090100000201000004010000030102 +00040100008e010100810101000801000006010000010100000a010000060100000a0100 +0001010000040100001b010100080100000201000001010400030100000a010100040104 +0001010000050100000201000001010400040100007701010009010000010100004a0101 +0500030e05000000050202020103020205030100000c0100000301000000010000050100 +0008010000020100000401000006010000030100008e0101008101010009010000050100 +00010100000a010000050100000b01000001010000030100001c01010008010000020100 +0001010000070100000a0100000001000003010000050100000501000002010000010100 +00080100007701010009010000010100004a010005000100030e00000503020201030202 +050301000008010000020100000301010002010000020100000801000001010100040100 +000201000002010000030100008e010100810101000a0100000401000001010000030101 +000401000005010000050101000301000001010000020100001d01010008010000020100 +000101000002010000030100000a01000001010000020100000201000001010000050100 +00020100000101000002010000040100007701010009010000010100004a01010500030e +05000000050202020103020205030100000901020005010000030102000a010100000100 +000401000003010200050101008c010100810101000b0100000401010004010100020104 +00030100000501010004010100020100001e010100080100000201000002010200050101 +000801000002010000020102000201000005010000020100000201020005010000770101 +000a0101004b010005000100030e00000503020201030202050301000012010000080105 +00a8010100810101000c0100002a0100001f0101001c010500a00101005801010500030e +05000000050202020103020205030100000f01000000010000b801010081010100590101 +00c301010058010005000100030e00000503020201030202050301000010010000b90101 +008101010059010100c30101005801010500030e05000000050202020103020205030100 +00cb0101008101010059010100c301010058010005000100030e00000503020201030202 +0503010000cb0101008101010059010100c30101005801010500030e0500000005020202 +010302020503010000cb0101008101010059010100c301010058010005000100030e0000 +05030202010302020503010000cb0101008101010059010100c30101005801010500030e +050000000502020201030202050301ff01ff01ce05000100030e00000503020201030202 +050307cd01ff01ff01010500030e0500000005020202010302020503070008cb07000100 +088101010859010108c301010858010005000100030e0000050302020103020205030700 +08cb07000100080b0101084e0101082201010859010108c30101085801010500030e0500 +000005020202010302020503070008cb07000100080a0100081c0100082a010008080100 +08210101080c0100082a0100081f010108c301010858010005000100030e000005030202 +0103020205030700081a070008af07000100080a01000805010008050101080c01000804 +0101080a010208020104080a0101080201000807010008210101080b010008040101080a +010208020104080a010108020100081e0101081a010008a7010108090102080201040802 +0102083d01010500030e05000000050202020103020205030700081a070008af07000100 +080a0100080401010804010008010100080a010008040100080101000808010008020100 +08010100080201000809010008010100080201000806010008210101080a010008040100 +0801010008080100080201000801010008020100080901000801010008020100081d0101 +081a010008a701010808010008020100080101000805010008020100083c010005000100 +030e00000503020201030202050307000809070208030702080307010800070008020702 +08a907000100080a01000803010008000100080401000801010008090100080501000801 +0100080c0100080501000809010008010100080301000805010008210101080901000805 +010008010100080c010008050100080901000801010008030100081c0101080901020803 +0102080301010800010008020102080a0102080301020802010008000101080201000802 +010008020102080201000800010108700101080c01000801010008090100083c01010500 +030e05000000050202020103020205030700080807000802070008010700080207000801 +070008010701080107000802070008a807000100080a0100080501000804010008010100 +080801000806010008010100080c010008040100080a0100080101000804010008040100 +08210101080801000806010008010100080c010008040100080a01000801010008040100 +081b01010808010008020100080101000802010008010100080101010801010008020100 +080801000802010008010100080201000801010108010100080101000802010008010100 +080201000801010108010100086f0101080c01000801010308060100083c010005000100 +030e00000503020201030202050307000808070008050700080207000801070008020700 +080107000802070008a80700010008080101080601000804010008010100080701000807 +010008010100080b010008050100080a0100080101000805010008040101081f01010807 +01000807010008010100080b010008050100080a01000801010008050100081a01010808 +010008050100080201000801010008020100080101000802010008080100080501000802 +010008010100080501000802010008010100080201000801010008730101080b01000806 +010008040100083d01010500030e05000000050202020103020205030700080807000805 +07000802070008010700080207000801070408a807000100080a01000805010008040100 +08010100080801000806010008010100080a010008060100080a01000801010008040100 +0804010008210101080801000806010008010100080a010008060100080a010008010100 +08040100081b010108080100080501000802010008010100080201000801010408090102 +08020104080101000806010008000100080201040801010008730101080a010008070100 +08030100083e010005000100030e00000503020201030202050307000808070008050700 +0802070008010700080207000801070008ac07000100080a010008050100080401000801 +01000809010008050100080101000809010008060100080b010008010100080301000805 +0100082101010809010008050100080101000809010008060100080b0100080101000803 +0100081c0101080801000805010008020100080101000802010008010100081001000801 +010008050100080601000800010008020100080501000873010108090100080401000802 +010008020100083f01010500030e05000000050202020103020205030700080807000802 +070008010700080207000801070008010701080107000802070008a807000100080a0100 +080501000804010008010100080301010804010008040100080101000803010108020100 +08070100080501010803010008010100080201000806010008210101080a010008040100 +0801010008030101080201000807010008050101080301000801010008020100081d0101 +080801000802010008010100080201000801010008010101080101000802010008080100 +080201000801010008020100080101000807010008030100080201000801010008730101 +080801000805010008020100080101000840010005000100030e00000503020201030202 +05030700080907020803070208030701080007000802070208a907000100080a01000803 +010408030101080401010805010008040101080401010802010408030100080501010804 +0101080201000807010008210101080b0100080401010804010108020104080301000805 +01010804010108020100081e01010809010208030102080301010800010008020102080a +010208030102080201000807010008040102080201000873010108080104080201020802 +0104083c01010500030e0500000005020202010302020503070008cb07000100080a0100 +0814010008060100082a01000808010008210101080c0100082a0100081f010108230105 +089901010858010005000100030e000005030202010302020503070008cb07000100080b +010108100101083b0101082201010859010108c30101085801010500030e050000000502 +0202010302020503070008cb07000100088101010859010108c301010858010005000100 +030e000005030202010302020503070008cb07000100088101010859010108c301010858 +01010500030e0500000005020202010302020503070008cb070001000881010108590101 +08c301010858010005000100030e000005030202010302020503070008cb070001000881 +01010859010108c30101085801010500030e0500000005020202010302020503070008cb +07000100088101010859010108c301010858010005000100030e00000503020201030202 +050307cd01ff01ff01010500030e050000000502020201030202050307cd01ff01ff0100 +05000100030e000005030202010302020503070008cb07000100088101010859010108c3 +0101085801010500030e0500000005020202010302020503070008cb07000100080b0101 +084e0101082201010859010108c301010858010005000100030e00000503020201030202 +0503070008cb07000100080a0100081c0100082a01000808010008210101080c0100082a +0100081f010108c30101085801010500030e05000000050202020103020205030700081a +070008af07000100080a01000805010008050100080d010008040101080a010208020104 +080a0101080201000807010008210101080b010008040101080a010208020104080a0101 +08020100081e0101081a010008a7010108090102080301020844010005000100030e0000 +050302020103020205030700081a070008af07000100080a01000804010108040101080c +010008040100080101000808010008020100080101000802010008090100080101000802 +01000806010008210101080a010008040100080101000808010008020100080101000802 +0100080901000801010008020100081d0101081a010008a7010108080100080201000801 +010008020100084301010500030e05000000050202020103020205030700080907020803 +070208030701080007000802070208090700080007010803070208020701080007000803 +070208030702087f07000100080a010008030100080001000803010008000100080b0100 +0805010008010100080c0100080501000809010008010100080301000805010008210101 +080901000805010008010100080c010008050100080901000801010008030100081c0101 +0809010208030102080301010800010008020102080a0102080301020802010008000101 +080201000802010008020102080201000800010108700101080c01000805010008430100 +05000100030e000005030202010302020503070008080700080207000801070008020700 +080107000801070108010700080207000808070108010700080107000802070008010700 +080007000800070008010700080207000801070008020700087e07000100080a01000805 +010008050100080a01000806010008010100080c010008040100080a0100080101000804 +01000804010008210101080801000806010008010100080c010008040100080a01000801 +010008040100081b01010808010008020100080101000802010008010100080101010801 +010008020100080801000802010008010100080201000801010108010100080101000802 +010008010100080201000801010108010100086f0101080c010008050100084301010500 +030e05000000050202020103020205030700080807000805070008020700080107000802 +070008010700080207000808070008020700080507000801070008000700080007000801 +070008020700080107000882070001000808010108060100080501000809010008070100 +08010100080b010008050100080a0100080101000805010008040101081f010108070100 +0807010008010100080b010008050100080a01000801010008050100081a010108080100 +080501000802010008010100080201000801010008020100080801000805010008020100 +08010100080501000802010008010100080201000801010008730101080a010108040101 +0844010005000100030e0000050302020103020205030700080807000805070008020700 +080107000802070008010704080807000802070008020703080107000800070008000700 +0801070408020702087f07000100080a01000805010008050100080a0100080601000801 +0100080a010008060100080a010008010100080401000804010008210101080801000806 +010008010100080a010008060100080a01000801010008040100081b0101080801000805 +010008020100080101000802010008010104080901020802010408010100080601000800 +0100080201040801010008730101080c010008050100084301010500030e050000000502 +02020103020205030700080807000805070008020700080107000802070008010700080c +07000802070008010700080207000801070008000700080007000801070008090700087e +07000100080a01000805010008050100080b010008050100080101000809010008060100 +080b01000801010008030100080501000821010108090100080501000801010008090100 +08060100080b01000801010008030100081c010108080100080501000802010008010100 +080201000801010008100100080101000805010008060100080001000802010008050100 +08730101080c0100080501000843010005000100030e0000050302020103020205030700 +080807000802070008010700080207000801070008010701080107000802070008080700 +080207000801070008020700080107000800070008000700080107000802070008010700 +08020700087e07000100080a010008050100080501000805010108040100080401000801 +010008030101080201000807010008050101080301000801010008020100080601000821 +0101080a0100080401000801010008030101080201000807010008050101080301000801 +010008020100081d01010808010008020100080101000802010008010100080101010801 +010008020100080801000802010008010100080201000801010008070100080301000802 +0100080101000873010108080100080201000801010008020100084301010500030e0500 +000005020202010302020503070008090702080307020803070108000700080207020809 +070008020700080207030801070008000700080007000802070208030702087f07000100 +080a01000803010408010104080301010805010008040101080401010802010408030100 +0805010108040101080201000807010008210101080b0100080401010804010108020104 +08030100080501010804010108020100081e010108090102080301020803010108000100 +08020102080a010208030102080201000807010008040102080201000873010108090102 +080301020844010005000100030e00000503020201030202050307000823070508a10700 +0100080a01000814010008060100082a01000808010008210101080c0100082a0100081f +01010823010508990101085801010500030e0500000005020202010302020503070008cb +07000100080b010108100101083b0101082201010859010108c301010858010005000100 +030e000005030202010302020503070008cb07000100088101010859010108c301010858 +01010500030e0500000005020202010302020503070008cb070001000881010108590101 +08c301010858010005000100030e000005030202010302020503070008cb070001000881 +01010859010108c30101085801010500030e0500000005020202010302020503070008cb +07000100088101010859010108c301010858010005000100030e00000503020201030202 +0503070008cb07000100088101010859010108c30101085801010500030e050000000502 +020201030202050307cd01ff01ff010005000100030e00000503020201030202050301ff +01ff01cf0500030e0500000005020202010302020503010000cb01010081010100590101 +00c301010058010005000100030e000005030202010302020503010000cb010100810101 +0059010100c30101005801010500030e0500000005020202010302020503010000cb0101 +00810101000c0100002a0100001f010100c301010058010005000100030e000005030202 +0103020205030100003d0100000a0100000a010000060102006a010100810101000b0100 +00040101000a010200030102000b010100020100001e010100c30101000a0101004b0101 +0500030e05000000050202020103020205030100003d0100000a0100000a010000080100 +006a010100810101000a0100000401000001010000080100000201000001010000020100 +000901000001010000020100001d010100c301010009010000010100004a010005000100 +030e00000503020201030202050301000008010100000100000201000002010000080100 +000001010003010200020101000001000003010200030101000001000008010400020102 +000201000000010100050100000301020063010100810101000901000005010000010100 +000c010000050100000901000001010000030100001c010100c301010009010000010100 +004a01010500030e05000000050202020103020205030100000801000000010000000100 +000101000002010000080101000101000001010000020100000101000000010000000100 +00010100000201000001010000010101000a010000030100000201000001010100010100 +0004010000020100000201000062010100810101000801000006010000010100000c0100 +00050100000901000001010000040100001b010100c301010009010000010100004a0100 +05000100030e000005030202010302020503010000080100000001000000010000020100 +000101000008010000020100000501000001010000000100000001000001010000020100 +0001010000020100000a0100000701000001010000020100000401000002010000020100 +0062010100810101000701000007010000010100000a010100040101000a010000010100 +00050100001a010100c301010009010000010100004a01010500030e0500000005020202 +010302020503010000080100000001000000010000020100000101000008010000020100 +00020103000101000000010000000100000101040001010000020100000a010000040103 +000101000002010000040100000201040062010100810101000801000006010000010100 +000c010000050100000901000001010000040100001b010100c301010009010000010100 +004a010005000100030e0000050302020103020205030100000801000000010000000100 +000301000000010000080100000201000001010000020100000101000000010000000100 +000101000005010000020100000a01000003010000020100000101000002010000040100 +000201000066010100810101000901000005010000010100000c01000005010000090100 +0001010000030100001c010100c301010009010000010100004a01010500030e05000000 +050202020103020205030100000801000000010000000100000301010009010000020100 +000101000002010000010100000001000000010000010100000201000001010000010101 +000a01000003010000020100000101010001010000040100000201000002010000620101 +00810101000a010000040100000101000003010100020100000201000001010000020100 +00030101000301000001010000020100001d010100c301010009010000010100004a0100 +05000100030e000005030202010302020503010000080100000001000000010000040100 +000901000002010000020103000101000000010000000100000201020003010100000100 +000b010100020103000101000000010100050100000301020063010100810101000b0100 +00040101000401010003010200030102000401010004010100020100001e010100c30101 +000a0101004b01010500030e050000000502020201030202050301000012010000010105 +002301050085010100810101000c0100002a0100001f010100c301010058010005000100 +030e0000050302020103020205030100000f01000000010000b801010081010100590101 +00c30101005801010500030e050000000502020201030202050301000010010000b90101 +008101010059010100c301010058010005000100030e0000050302020103020205030100 +00cb0101008101010059010100c30101005801010500030e050000000502020201030202 +0503010000cb0101008101010059010100c301010058010005000100030e000005030202 +010302020503010000cb0101008101010059010100c30101005801010500030e05000000 +05020202010302020503010000cb0101008101010059010100c301010058010005000100 +030e00000503020201030202050301ff01ff01cf0500030e050000000502020201030202 +050307cd01ff01ff010005000100030e000005030202010302020503070000cb07000100 +008101010059010100c30101005801010500030e05000000050202020103020205030700 +00cb07000100000b0101004e0101002201010059010100c301010058010005000100030e +000005030202010302020503070000cb07000100000a0100001c0100002a010000080100 +00210101000c0100002a0100001f010100c30101005801010500030e0500000005020202 +0103020205030700001f0700000a070000060702009407000100000a0100000401020003 +0102000c010000040101000a010200030102000b0101000201000007010000210101000b +010000040101000a010200030102000b010100020100001e010100c30101000a0101004b +010005000100030e0000050302020103020205030700001f0700000a0700000807000094 +07000100000a010000030100000201000001010000020100000a01000004010000010100 +000801000002010000010100000201000009010000010100000201000006010000210101 +000a01000004010000010100000801000002010000010100000201000009010000010100 +00020100001d010100c301010009010000010100004a01010500030e0500000005020202 +010302020503070000080701000007000002070000020700000807040002070200020700 +000007010005070000030702008d07000100000a01000007010000050100000901000005 +010000010100000c01000005010000090100000101000003010000050100002101010009 +01000005010000010100000c010000050100000901000001010000030100001c010100c3 +01010009010000010100004a010005000100030e00000503020201030202050307000008 +070000000700000007000001070000020700000a07000003070000020700000107010001 +0700000407000002070000020700008c07000100000a0100000701000005010000080100 +0006010000010100000c0100000501000009010000010100000401000004010000210101 +000801000006010000010100000c010000050100000901000001010000040100001b0101 +00c301010009010000010100004a01010500030e05000000050202020103020205030700 +0008070000000700000007000002070000010700000a0700000707000001070000020700 +000407000002070000020700008c07000100000801010007010000050100000801000007 +010000010100000a010100040101000a0100000101000005010000040101001f01010007 +01000007010000010100000a010100040101000a01000001010000050100001a010100c3 +01010009010000010100004a010005000100030e00000503020201030202050307000008 +070000000700000007000002070000010700000a07000004070300010700000207000004 +070000020704008c07000100000a01000005010000050100000a01000006010000010100 +000c01000005010000090100000101000004010000040100002101010008010000060100 +00010100000c010000050100000901000001010000040100001b010100c3010100090100 +00010100004a01010500030e050000000502020201030202050307000008070000000700 +000007000003070000000700000a07000003070000020700000107000002070000040700 +00020700009007000100000a01000004010000050100000c01000005010000010100000c +010000050100000901000001010000030100000501000021010100090100000501000001 +0100000c010000050100000901000001010000030100001c010100c30101000901000001 +0100004a010005000100030e000005030202010302020503070000080700000007000000 +070000030701000b07000003070000020700000107010001070000040700000207000002 +0700008c07000100000a0100000301000005010000070101000401000004010000010100 +000301010002010000020100000101000002010000030101000301000001010000020100 +0006010000210101000a0100000401000001010000030101000201000002010000010100 +0002010000030101000301000001010000020100001d010100c301010009010000010100 +004a01010500030e05000000050202020103020205030700000807000000070000000700 +00040700000c07010002070300010700000007010005070000030702008d07000100000a +010000030104000101040003010100050100000401010004010100030102000301020004 +010100040101000201000007010000210101000b01000004010100040101000301020003 +0102000401010004010100020100001e010100c30101000a0101004b010005000100030e +0000050302020103020205030700001207000001070500af07000100000a010000140100 +00060100002a01000008010000210101000c0100002a0100001f010100c3010100580101 +0500030e05000000050202020103020205030700000f07000000070000b807000100000b +010100100101003b0101002201010059010100c301010058010005000100030e00000503 +020201030202050307000010070000b907000100008101010059010100c3010100580101 +0500030e0500000005020202010302020503070000cb07000100008101010059010100c3 +01010058010005000100030e000005030202010302020503070000cb0700010000810101 +0059010100c30101005801010500030e0500000005020202010302020503070000cb0700 +0100008101010059010100c301010058010005000100030e000005030202010302020503 +070000cb07000100008101010059010100c30101005801010500030e0500000005020202 +01030202050307cd01ff01ff010005000100030e00000503020201030202050307cd01ff +01ff01010500000005000000050000000500000005000000050000000500000005000000 +0500000005020202010302020503070000cb07000100008101010059010100c301010058 +010005000100030000000500000005000000050000000500000005000000050000000500 +000005030202010302020503070000cb07000100000b0101004e01010022010100590101 +00c301010058010105000300050000000508010005000300050000000502020201030202 +0503070000cb07000100000a0100001c0100002a01000008010000210101000c0100002a +0100001f010100c301010058010005000100030105000000050801000300000005030202 +010302020503070000cb07000100000a01000005010000040102000c010000040101000d +010000020102000b0101000201000007010000210101000b010000040101000d01000002 +0102000b010100020100001e0101002001010018010000150100006f0101000a01000005 +010100040101003d01010500030100000508010003010500000005020202010302020503 +070000cb07000100000a0100000401010003010000020100000a01000004010000010100 +000b010100010100000201000009010000010100000201000006010000210101000a0100 +0004010000010100000b01010001010000020100000901000001010000020100001d0101 +001f0100001a010000150100006f01010009010100040100000101000002010000010100 +003c01000500010003020000050601000500030100000503020201030202050307000009 +070100000700000207020009070000000701000307020002070100000700000307020003 +0702008d07000100000a0100000301000000010000070100000901000005010000010100 +000a01000000010000050100000901000001010000030100000501000021010100090100 +0005010000010100000a01000000010000050100000901000001010000030100001c0101 +000901010000010000020102000b01000003010000000101000301020002010000000101 +000201040002010200020100000001010003010100000100006f01010008010000000100 +00040100000101000002010000010100003c010105000302050000000504010005000302 +050000000502020201030202050307000008070000010701000107000002070000080701 +000107000001070000020700000107000000070000000700000107000002070000010700 +00020700008c07000100000a010000050100000701000008010000060100000101000009 +010000010100000501000009010000010100000401000004010000210101000801000006 +010000010100000901000001010000050100000901000001010000040100001b01010008 +010000010101000101000002010000080104000101010001010000010100000201000001 +01010001010000030100000301000002010000010101000101000001010000010101006f +0101000a010000040100000101000002010000010100003c010005000100030305000000 +0504010003020000050302020103020205030700000807000002070000010700000c0700 +000207000005070000010700000007000000070000010700000207000001070000900700 +010000080101000601000006010000080100000701000001010000080100000201000003 +0101000a0100000101000005010000040101001f01010007010000070100000101000008 +01000002010000030101000a01000001010000050100001a010100080100000201000001 +0100000e0100000301000005010000020100000101000002010000030100000301000002 +010000010100000201000001010000020100006f0101000a010000040100000101000002 +010000010100003c01010500030300000504010003030500000005020202010302020503 +070000080700000207000002070200090700000207000002070300010700000007000000 +07000001070400020702008d07000100000a01000005010000050100000a010000060100 +000101000008010000020100000501000009010000010100000401000004010000210101 +000801000006010000010100000801000002010000050100000901000001010000040100 +001b0101000801000002010000020102000b010000030100000501000002010000010100 +00020100000301000003010400010100000201000001010000020100006f0101000a0100 +00040100000101000002010000010100003c010005000100030400000502010005000303 +000005030202010302020503070000080700000207000005070000080700000207000001 +0700000207000001070000000700000007000001070000090700008c07000100000a0100 +0005010000040100000c0100000501000001010000080105000401000009010000010100 +000301000005010000210101000901000005010000010100000801050004010000090100 +0001010000030100001c0101000801000002010000050100000a01000003010000050100 +000201000001010000020100000301000003010000050100000201000001010000020100 +006f0101000a010000040100000101000002010000010100003c01010500030405000000 +050001000500030405000000050202020103020205030700000807000001070100010700 +000207000008070000020700000107000002070000010700000007000000070000010700 +000207000001070000020700008c07000100000a01000005010000030100000701010004 +010000040100000101000003010100060100000101000002010000030101000301000001 +0100000201000006010000210101000a0100000401000001010000030101000601000001 +01000002010000030101000301000001010000020100001d010100080100000101010001 +010000020100000a01000003010000050100000201000001010000020100000301000003 +01000002010000010100000201000001010000010101006f0101000a0100000401000001 +01000002010000010100003c010005000100030505000100050001000304000005030202 +010302020503070000090701000007000002070200090700000207000002070300010700 +00000700000007000002070200030702008d07000100000a010000030104000101040003 +010100050100000401010004010100060100000201020004010100040101000201000007 +010000210101000b01000004010100040101000601000002010200040101000401010002 +0100001e0101000901010000010000020102000b01000003010000060102000201000002 +0100000401010002010200020100000201000002010100000100006f0101000801040003 +010100040101003d01010500030500000500010003050500000005020202010302020503 +0700000c07000007070500af07000100000a01000014010000060100002a010000080100 +00210101000c0100002a0100001f0101000c01000007010500a701010058010005000100 +03060100050003050000050302020103020205030700000807000002070000bd07000100 +000b010100100101003b01010022010100590101000801000002010000b5010100580101 +0500030605000306050000000502020201030202050307000009070200be070001000081 +0101005901010009010200b6010100580100050001000500000005000000050000000500 +00000500000005000000050000000500000005030202010302020503070000cb07000100 +008101010059010100c30101005801010500000005000000050000000500000005000000 +050000000500000005000000050000000502020201030202050301000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005110202 +010302020502010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100051202020103020205030100030d05000300050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +0000030000000500030c050000000511020201030202050201000500030b000005000100 +030000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050003000500000005000000030a0000051202020103020205030100 +03090500000005000100050003000500000005ff05ff05ac010003000000050000000500 +000005000308050000000511020201030202050201000500030700000500000005020100 +0300000005ff05ff05ac0100050003000500000005020000050000000306000005120202 +01030202050301000305050000000500000005020100050003000500000005ff05ff05ac +010003000000050400000500000005000304050000000511020201030202050201000500 +0303000005000000050601000300000005ff05ff05ac0100050003000500000005060000 +050000000302000005120202010302020503010003010500000005000000050601000500 +03000500000005ff05ff05ac010003000000050800000500000005000300050000000511 +020201030202050201000500010005000100050a01000300000005ff05ff05ac01000500 +030005000000050801000500010005000000051202020103020205030100030105000100 +0500010005060100050003000500000005ff05ff05ac0100030000000508010005000100 +050003000500000005110202010302020502010005000303010005000100050601000300 +000005ff05ff05ac01000500030005000000050601000500010003020000051202020103 +0202050301000305050001000500010005020100050003000500000005ff05ff05ac0100 +030000000504010005000100050003040500000005110202010302020502010005000307 +010005000100050201000300000005ff05ff05ac01000500030005000000050201000500 +010003060000051202020103020205030100030905000100050001000500030005000000 +05ff05ff05ac010003000000050001000500010005000308050000000511020201030202 +050201000500030b01000500010003000000050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050001000500010005000100050003000500000005000100030a +0000051202020101000405030100030d0500030005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001000500010005000100050001000500010005000100030000000500030c +050000000511000502020400050201000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005120000020204000000020204000503 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000051100000202040000000202040005ff05ff05e800000202040000000202 +040005ff05ff05e800000202040000000202040005ff05ff05e800000202040000000202 +0400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000020804000000 +0208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000020804000000 +040901ff01ff01dc00000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 377 205 +%%EOF diff --git a/lib/tv/doc/src/tv_start_system.gif b/lib/tv/doc/src/tv_start_system.gif new file mode 100644 index 0000000000..3d9502b00c Binary files /dev/null and b/lib/tv/doc/src/tv_start_system.gif differ diff --git a/lib/tv/doc/src/tv_start_system.ps b/lib/tv/doc/src/tv_start_system.ps new file mode 100644 index 0000000000..5c115328c5 --- /dev/null +++ b/lib/tv/doc/src/tv_start_system.ps @@ -0,0 +1,1330 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system.eps) +%%CreationDate: (Mon Mar 19 17:15:27 2001) +%%BoundingBox: 0 0 377 205 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 377 205 +userdict begin +%%BeginData: +DisplayImage +0 0 +377.000000 205.000000 +12 +755 410 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +828282 +aab6aa +000000 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff +02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 +04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff +02d000000202040000000202040002080000020d040002f6010302110103023801010206 +0101024001010230010102ff020400000202040000000202040002080000020d040002f6 +010102020107020001010203010102010101020e0105020001070201010302070100020b +01010206010102400101020c0104021e010102ff02040000020204000000020204000208 +0000020d040002f6010102050101020301010203010102010101020e0101020701010203 +01010201010102050101020b010102060101024e010102020101021d010102ff02040000 +0202040000000202040002080000020204060203040002f6010102050101020301010203 +010102010101020e01010207010102030101020801040201010302030101020001010203 +010102020103020301040206010302030101020001010207010102000101020101010203 +010302030101020201010200010102020101020101030202010102000101020101010203 +010302020101020001010201010102020103020201010202010102f30000020204000000 +04030208000002020400030400000203040002f601010205010102040101020201000202 +0101020e0101020701010203010202080101020201010201010102020102020001010202 +010102010101020101010201010102090101020101010202010202000101020601020200 +010202000101020101010201010102020101020201020200010102010101020001010200 +010102020102020001020200010102010101020101010201010102000101020101010201 +010102010101020101010202010102f3000004030101020b000002030400030200000204 +040002f6010102050101020401010201010102020101020e010402040101020401030206 +010102060101020201010201010102020101020101010201010102010102020801010201 +010102020101020101010206010102010101020101010205010102020101020201010201 +010102010101020001010200010102020101020101010201010102050101020101020203 +01010201010102010101020101010202010002f70103020b000002030400030200000204 +040002f6010102050101020501010200010002030101020e010102070101020601020205 +010102030104020201010201010102020101020101050202010302060101020101010202 +010102010101020601010201010102010101020201040202010102020101020101010201 +010102000101020001010202010102010101020101010202010402010101020401010201 +0105020201010200010102f70103020b000002040400030000000205040002f601010205 +01010205010302030101020e010102070101020701010205010102020101020101010202 +010102010101020201010201010102080102020501010201010102020101020101010206 +010102010101020101010201010102010101020201010202010102010101020101010201 +010102000101020101010201010102010101020101010201010102010101020401010201 +0101020601010200010002f80103020b000002040400030000000205040002f601010205 +01010206010102040101020e010102070101020301010201010102050101020201010201 +010102020101020101010202010102010101020201000205010102050101020101010202 +010102010101020601010201010102010101020101010201010102020101020201010201 +010102020101020701010201010102010101020101010201010102010101020401010201 +0101020201000203010202f80103020b0000020500000206040002f60101020501010206 +010102040101020e01050203010102040103020701020201010202000101020101040203 +010102020103020201040207010302030101020101010206010102010101020101010202 +010202000101020101010202010102010101020301050202010102010101020101010202 +0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 +01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 +020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff +02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff +02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff +05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 +010302020001050b06040504060005030602051f0600050206000504060005270602050b +06000506060005ff05ff053506000502060005090602051307010202010302020001050b +0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 +0600050b0600051307010202010302020001050b06000506060205050600050306020518 +060005020600050206020503060205020600050206000517060005020600050106000500 +060105020604050206020503060205020600050006010503060205ff05ff052006000502 +060005020602050506000502060005000601050c07010202010302020001050b06000508 +060005050600050206000502060005180600050006000505060005020600050206000501 +060005020600051706000502060005010601050106000503060005060600050206000502 +06000501060105010600050106000502060005ff05ff051f060005020600050106000502 +0600050406000502060105010600050b07010202010302020001050b0603050506000505 +060005020600050206000518060005000600050506000502060005020600050106000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000501060005ff05ff052306040501060005020600050406000502 +060005020600050b07010202010302020001050b06000508060005050600050206040518 +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05ff052006000502060005010604050406000502060005020600050b0701020201030202 +0001050b0600050806000505060005020600051d06000506060005020600050506000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000505060005ff05ff051f06000502060005010600050806000502 +060005020600050b07010202010302020001050b06000508060005050600050206000502 +060005190600050606000502060005020600050106000500060005000600051706000502 +060005010601050106000503060005060600050206000502060005010600050206000501 +06000502060005ff05ff051f060005020600050106000502060005040600050206010501 +0600050b07010202010302020001050b0600050806000505060005030602051a06000506 +060005030602050306000500060005190602050206000500060105050601050406000503 +060205020600050206000502060205ff05ff052006000502060005020602050506000502 +060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 +010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f +07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e +0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 +0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 +05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 +01030202050e01060508010005060101050f010205010102059b01060508010005060101 +0510010505040101054d010205240104050d0101051e0102052401020501010205930106 +0508010005060101051101030535020201030202050e0100050101010500010005070101 +050601000511010105010100059d01000501010105000100050701010506010005130101 +05060100054d0101050001010524010105000101050c0100051e01010500010105240101 +050101000595010005010101050001000507010105060100051101010501010105340202 +010302020510010105030103050201030503010105030103050801020500010105010103 +05000101050001000500010005020103058b010105030103050201030503010105030103 +050a010105030104054c0101050101050500010305000102050201030501010105000102 +05070101050101010500010305030104051d010105010105050001030500010205020103 +050101010500010205070102050001010501010305000101050001000500010005020103 +058301010503010305020103050301010503010305090101050101000500010305020105 +050101030521020201030202051001010506010105000101050101010502010105020101 +0501010105070100050001000500010005050101050001050500010105010101058a0101 +050601010500010105010101050201010502010105010101050901010502010105010101 +054c01000502010105000101050201000500010205000101050001010501010105010102 +050001000507010105010101050201010502010105010101051d01000502010105000101 +050201000500010205000101050001010501010105010102050001000507010005000100 +050001000505010105000105050001010501010105820101050601010500010105010101 +050201010502010105010101050801020504010105020101050001010501010105010101 +052002020103020205100100050401040500010105010101050201010501010605070100 +0500010205020104050001010500010005000107058a0100050401040500010105010101 +0502010105010106050901010501010105020101054b0101050201000501010105000100 +05000100050001010501010805010101050a0103050401010501010105020101051c0101 +05020100050101010500010005000100050001010501010805010101050a010005000102 +050201040500010105000100050001070582010005040104050001010501010105020101 +05010106050901020503010105040101050101060520020201030202050f010105020101 +0501010105000101050201010501010105020101050b0101050001010501010105010101 +05010100050001000500010005000101058e010105020101050101010500010105020101 +0501010105020101050d01010502010105010101054c0101050101010501010205000100 +05010100050201000500010105050101050a0101050601010502010105010101051d0101 +05010101050101020500010005010100050201000500010105050101050a010105000101 +050101010501010105010100050001000500010005000101058601010502010105010101 +05000101050201010501010105020101050b010105010101050201010503010105030101 +0525020201030202050f0101050201010501010105000101050101010502010105020101 +050101010507010005010101050101010501010105000101050001000500010005000101 +05010101058a010105020101050101010500010105010101050201010502010105010101 +050901010502010105010101054c01010500010105020103050101010501010105000101 +0501010105010101050a0101050601010502010105010101051d01010500010105020103 +0501010105010101050001010501010105010101050a0100050101010501010105010101 +050001010500010005000100050001010501010105820101050201010501010105000101 +050101010502010105020101050101010507010105010101050201010502010205000101 +05000101050101010521020201030202050e01030502010a050101050501010305070102 +0500010105020107050001000500010105000103058a01030502010a0501010505010103 +0508010505010105054c0102050301010500010005000103050001020500010305010104 +050701030503010505010105051d01020503010105000100050001030500010205000103 +05010104050701020500010105020107050001000500010105000103058201030502010a +050101050501010305090103050101050500010505010103052202020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101 +0059010100c30101005801000711000005020202010302020503010000cb010100810101 +0059010100c30101005801000701030607000306000105020202010302020503010000cb +010100810101000c0100002301000026010100c301010058010007010305000007000306 +0001050202020103020205030100001f0100000a0100009e010100810101000b01000004 +010100090104000a01010002010000250101001e0102000501000012010000060100002e +010000120102000301020031010100080104004a01000701030500000701030500010502 +02020103020205030100001f0100000a0100009e010100810101000a0100000401000001 +010000080100000d01000001010000020100002401010020010000190100003601000014 +010000050100003101010008010000020100004a01000701030400010701030500010502 +02020103020205030100000901020003010200090104000201020002010000000101009b +01010081010100090100000501000001010000080100000d010000010100000301000023 +010100090102000201000000010100020100000001010005010000030102000301020003 +01020002010400020102000301020002010000000101000a010200030102000201000000 +010100020104000101000000010100030102000501000005010000030102000201000000 +010100230101000c0100004a010007010304000105000701030400010502020201030202 +0503010000080100000201000001010000020100000a0100000301000002010000010101 +00010100009a01010081010100080100000601000001010000080103000a010000010100 +000401000022010100080100000201000001010100010100000101010001010000040100 +000501000002010000020100000101000002010000030100000601000002010000020100 +000101010001010000080100000201000001010000020100000101010001010000030100 +000301010001010000010100000201000004010000050100000201000002010000010101 +0001010000220101000b0100004b01000701030300010501070103040001050202020103 +020205030100000c010000010100000e0100000701000001010000020100009a01010081 +0101000701000007010000010100000c010000090100000101000005010000210101000c +010000010100000201000001010000020100000401000005010000020100000901000003 +010000060100000201000002010000010100000201000008010000050100000201000001 +010000020100000301000003010000050100000201000004010000050100000201000002 +01000001010000260101000b0100004b0100070103030001050207010303000105020202 +01030202050301000009010300010100000e0100000401030001010000020100009a0101 +00810101000801000006010000010100000c010000090100000101000004010000220101 +000901030001010000020100000101000002010000040100000501000002010000060103 +000301000006010000020100000201000001010000020100000801000005010000020100 +000101000002010000030100000301000005010000020100000401000005010000020104 +0001010000260101000b0100004b01000701030200010503070103030001050202020103 +020205030100000801000002010000010100000e01000003010000020100000101000002 +0100009a0101008101010009010000050100000101000008010000020100000901000001 +010000030100002301010008010000020100000101000002010000010100000201000004 +010000050100000201000005010000020100000301000006010000020100000201000001 +010000020100000801000005010000020100000101000002010000030100000301000005 +0100000201000004010000050100000201000005010000260101000a0100004c01000701 +030200010504070103020001050202020103020205030100000801000002010000010100 +00020100000a010000030100000201000001010100010100009a010100810101000a0100 +000401000001010000030101000201000002010000030101000301000001010000020100 +002401010008010000020100000101010001010000010101000101000004010000050100 +000201000002010000010100000201000003010000060100000201000002010000010100 +000201000008010000020100000101000002010000010100000201000003010000030100 +0005010000020100000401000005010000020100000201000001010000260101000a0100 +004c01000701030100010505070103020001050202020103020205030100000901030002 +0102000c0101000201030001010000000101009b010100810101000b0100000401010004 +010100030102000401010004010100020100002501010009010300010100000001010002 +010000000101000501000005010000030102000301030004010100040100000301020002 +010000020100000901020003010200020100000201000004010100010100000601020005 +010000050100000301020002010000260101000a0100004c010007010301000105060701 +030100010502020201030202050301000015010500af010100810101000c010000230100 +00260101000f010000050100003c01050068010100580100070103000001050707010301 +000105020202010302020503010000cb01010081010100590101000f01000005010000ab +010100580100070103000001050807010300000105020202010302020503010000cb0101 +0081010100590101000f01000005010000ab01010058010007010001070b030000010502 +0202010302020503010000cb0101008101010059010100c301010058010007010000070d +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +030e000105020202010302020503010000cb0101008101010059010100c3010100580100 +0701001005020202010302020503010000cb0101008101010059010100c3010100580100 +0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502 +020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb010100810101000c0100002a0100001f010100c30101 +0058010007010001050a070100010502020201030202050301000010010200090100000d +0102000a010200100100007b010100810101000b010000040101000b010000050100000c +010100020100001e01010010010200090100000d010200930101000a0101004b01000701 +0001050a070100010502020201030202050301000012010000090100000f0100000c0100 +00100100007b010100810101000a010000040100000101000009010100040101000b0100 +0001010000020100001d01010012010000090100000f0100009301010009010000010100 +004a010007010001050a0701000105020202010302020503010000090101000001000004 +01000003010200020100000001010003010200050100000c010000030102000301020002 +010000010100000301020071010100810101000901000005010000010100000801000000 +01000003010000000100000b01000001010000030100001c010100090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +01010000010000030102000a010200030102000201000000010100020100000201000002 +01020002010000000101003f01010009010000010100004a010007010001050a07010001 +050202020103020205030100000801000001010100040100000201000002010000010101 +00010100000101000002010000040100000c010000020100000201000001010000020100 +000101000000010000030100000201000070010100810101000801000006010000010100 +000a010000050100000b01000001010000040100001b0101000801000001010100040100 +000201000002010000010101000101000001010000020100000401000009010100010100 +000101000002010000010100000001000000010000010100000201000008010000020100 +000101000002010000010101000101000001010000020100000101000002010000010101 +00010100003e01010009010000010100004a010007010001050a07010001050202020103 +020205030100000801000002010000040100000201000002010000010100000201000005 +010000040100000c01000002010000020100000101000005010100040100007401010081 +0101000701000007010000010100000a010000050100000b01000001010000050100001a +010100080100000201000004010000020100000201000001010000020100000501000004 +010000090100000201000005010000010100000001000000010000010100000201000008 +010000050100000201000001010000050100000201000001010000020100000101000042 +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000801000002010000040100000201000002010000010100000201000002010300040100 +000c01000002010000020100000101000005010100050102007101010081010100080100 +0006010000010100000a010000050100000b01000001010000040100001b010100080100 +000201000004010000020100000201000001010000020100000201030004010000090100 +000201000002010300010100000001000000010000010104000901020002010400010100 +00060100000001000002010400010100004201010009010000010100004a010007010001 +050a07010001050202020103020205030100000801000002010000040100000201000002 +01000001010000020100000101000002010000040100000c010000020100000201000001 +01000005010000000100000701000070010100810101000901000005010000010100000a +010000050100000b01000001010000030100001c01010008010000020100000401000002 +010000020100000101000002010000010100000201000004010000090100000201000001 +010000020100000101000000010000000100000101000010010000010100000501000006 +0100000001000002010000050100004201010009010000010100004a010007010001050a +070100010502020201030202050301000008010000010101000401000002010000020100 +0001010100010100000101000002010000040100000c0100000201000002010000010100 +00020100000101000001010000020100000201000070010100810101000a010000040100 +0001010000030101000401000005010000050101000301000001010000020100001d0101 +000801000001010100040100000201000002010000010101000101000001010000020100 +000401000009010000020100000101000002010000010100000001000000010000010100 +000201000008010000020100000101000002010000010100000701000003010000020100 +00010100004201010009010000010100004a010007010001050a07010001050202020103 +020205030100000901010000010000040100000301020002010000000101000301030004 +0100000c010000030102000301020002010000020100000201020071010100810101000b +010000040101000401010002010400010104000301010004010100020100001e01010009 +010100000100000401000003010200020100000001010003010300040100000901000002 +01000002010300010100000001000000010000020102000a010200030102000201000007 +0100000401020002010000420101000a0101004b010007010001050a0701000105020202 +0103020205030100000c0100002301050093010100810101000c0100002a0100001f0101 +000c010000230105001c0105006801010058010007010001050a07010001050202020103 +020205030100000801000002010000bd01010081010100590101000801000002010000b5 +01010058010007010001050a070100010502020201030202050301000009010200be0101 +00810101005901010009010200b601010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a070100010502020201030202050301ff01ff01ce0701 +0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb010100810101000c0100002a +0100001f010100c301010058010007010001050a07010001050202020103020205030100 +0010010200090100000d0102009b010100810101000b010000040101000b010000050100 +000c010100020100001e01010010010200090100000d010200930101000a0101004b0100 +07010001050a070100010502020201030202050301000012010000090100000f0100009b +010100810101000a010000040100000101000009010100040101000b0100000101000002 +0100001d01010012010000090100000f0100009301010009010000010100004a01000701 +0001050a0701000105020202010302020503010000090101000001000004010000030102 +000201000000010100030102000501000009010000000101000301020002010100000100 +000301020003010200710101008101010009010000050100000101000008010000000100 +0003010000000100000b01000001010000030100001c0101000901010000010000040100 +000301020002010000000101000301020005010000090100000001010003010200020101 +0000010000030102000a0102000301020002010000000101000201000002010000020102 +0002010000000101003f01010009010000010100004a010007010001050a070100010502 +020201030202050301000008010000010101000401000002010000020100000101010001 +010000010100000201000004010000090101000101000001010000020100000101000000 +010000000100000101000002010000010100000201000070010100810101000801000006 +010000010100000a010000050100000b01000001010000040100001b0101000801000001 +010100040100000201000002010000010101000101000001010000020100000401000009 +010100010100000101000002010000010100000001000000010000010100000201000008 +010000020100000101000002010000010101000101000001010000020100000101000002 +01000001010100010100003e01010009010000010100004a010007010001050a07010001 +050202020103020205030100000801000002010000040100000201000002010000010100 +000201000005010000040100000901000002010000050100000101000000010000000100 +0001010000020100000101000074010100810101000701000007010000010100000a0100 +00050100000b01000001010000050100001a010100080100000201000004010000020100 +000201000001010000020100000501000004010000090100000201000005010000010100 +000001000000010000010100000201000008010000050100000201000001010000050100 +00020100000101000002010000010100004201010009010000010100004a010007010001 +050a07010001050202020103020205030100000801000002010000040100000201000002 +010000010100000201000002010300040100000901000002010000020103000101000000 +01000000010000010104000201020071010100810101000801000006010000010100000a +010000050100000b01000001010000040100001b01010008010000020100000401000002 +010000020100000101000002010000020103000401000009010000020100000201030001 +010000000100000001000001010400090102000201040001010000060100000001000002 +010400010100004201010009010000010100004a010007010001050a0701000105020202 +010302020503010000080100000201000004010000020100000201000001010000020100 +000101000002010000040100000901000002010000010100000201000001010000000100 +0000010000010100000901000070010100810101000901000005010000010100000a0100 +00050100000b01000001010000030100001c010100080100000201000004010000020100 +000201000001010000020100000101000002010000040100000901000002010000010100 +000201000001010000000100000001000001010000100100000101000005010000060100 +000001000002010000050100004201010009010000010100004a010007010001050a0701 +000105020202010302020503010000080100000101010004010000020100000201000001 +010100010100000101000002010000040100000901000002010000010100000201000001 +01000000010000000100000101000002010000010100000201000070010100810101000a +010000040100000101000003010100040100000501000005010100030100000101000002 +0100001d0101000801000001010100040100000201000002010000010101000101000001 +010000020100000401000009010000020100000101000002010000010100000001000000 +010000010100000201000008010000020100000101000002010000010100000701000003 +01000002010000010100004201010009010000010100004a010007010001050a07010001 +050202020103020205030100000901010000010000040100000301020002010000000101 +000301030004010000090100000201000002010300010100000001000000010000020102 +000301020071010100810101000b01000004010100040101000201040001010400030101 +0004010100020100001e0101000901010000010000040100000301020002010000000101 +000301030004010000090100000201000002010300010100000001000000010000020102 +000a0102000301020002010000070100000401020002010000420101000a0101004b0100 +07010001050a07010001050202020103020205030100000c010000230105009301010081 +0101000c0100002a0100001f0101000c010000230105001c010500680101005801000701 +0001050a07010001050202020103020205030100000801000002010000bd010100810101 +00590101000801000002010000b501010058010007010001050a07010001050202020103 +0202050301000009010200be010100810101005901010009010200b60101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb0101008101010059010100c301010058010007010001050a0701000105020202 +01030202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff +01ce07010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701 +00010502020201030202050301000010010200090100000d010200430100005601010081 +0101000b010000040101000b010000050100000c010100020100001e0101001001020009 +0100000d010200930101000a0101004b010007010001050a070100010502020201030202 +050301000012010000090100000f0100004301000056010100810101000a010000040100 +000101000009010100040101000b01000001010000020100001d01010012010000090100 +000f0100009301010009010000010100004a010007010001050a07010001050202020103 +020205030100000901010000010000040100000301020002010000000101000301020005 +010000090100000001010003010200020101000001000003010200030102000a01020002 +010000020100000101040054010100810101000901000005010000010100000801000000 +01000003010000000100000b01000001010000030100001c010100090101000001000004 +010000030102000201000000010100030102000501000009010000000101000301020002 +01010000010000030102000a010200030102000201000000010100020100000201000002 +01020002010000000101003f01010009010000010100004a010007010001050a07010001 +050202020103020205030100000801000001010100040100000201000002010000010101 +000101000001010000020100000401000009010100010100000101000002010000010100 +000001000000010000010100000201000001010000020100000801000002010000010100 +00020100000301000056010100810101000801000006010000010100000a010000050100 +000b01000001010000040100001b01010008010000010101000401000002010000020100 +000101010001010000010100000201000004010000090101000101000001010000020100 +000101000000010000000100000101000002010000080100000201000001010000020100 +0001010100010100000101000002010000010100000201000001010100010100003e0101 +0009010000010100004a010007010001050a070100010502020201030202050301000008 +010000020100000401000002010000020100000101000002010000050100000401000009 +01000002010000050100000101000000010000000100000101000002010000010100000c +010000020100000201000000010000040100005601010081010100070100000701000001 +0100000a010000050100000b01000001010000050100001a010100080100000201000004 +010000020100000201000001010000020100000501000004010000090100000201000005 +010000010100000001000000010000010100000201000008010000050100000201000001 +01000005010000020100000101000002010000010100004201010009010000010100004a +010007010001050a07010001050202020103020205030100000801000002010000040100 +000201000002010000010100000201000002010300040100000901000002010000020103 +000101000000010000000100000101040002010200090104000301000005010000560101 +00810101000801000006010000010100000a010000050100000b01000001010000040100 +001b01010008010000020100000401000002010000020100000101000002010000020103 +000401000009010000020100000201030001010000000100000001000001010400090102 +000201040001010000060100000001000002010400010100004201010009010000010100 +004a010007010001050a0701000105020202010302020503010000080100000201000004 +010000020100000201000001010000020100000101000002010000040100000901000002 +010000010100000201000001010000000100000001000001010000090100000801000006 +010000000100000401000056010100810101000901000005010000010100000a01000005 +0100000b01000001010000030100001c0101000801000002010000040100000201000002 +010000010100000201000001010000020100000401000009010000020100000101000002 +010000010100000001000000010000010100001001000001010000050100000601000000 +01000002010000050100004201010009010000010100004a010007010001050a07010001 +050202020103020205030100000801000001010100040100000201000002010000010101 +000101000001010000020100000401000009010000020100000101000002010000010100 +000001000000010000010100000201000001010000020100000801000002010000010100 +00020100000301000056010100810101000a010000040100000101000003010100040100 +0005010000050101000301000001010000020100001d0101000801000001010100040100 +000201000002010000010101000101000001010000020100000401000009010000020100 +000101000002010000010100000001000000010000010100000201000008010000020100 +000101000002010000010100000701000003010000020100000101000042010100090100 +00010100004a010007010001050a07010001050202020103020205030100000901010000 +010000040100000301020002010000000101000301030004010000090100000201000002 +01030001010000000100000001000002010200030102000a010200020100000201000004 +01010054010100810101000b010000040101000401010002010400010104000301010004 +010100020100001e01010009010100000100000401000003010200020100000001010003 +01030004010000090100000201000002010300010100000001000000010000020102000a +0102000301020002010000070100000401020002010000420101000a0101004b01000701 +0001050a07010001050202020103020205030100000c0100002301050023010500690101 +00810101000c0100002a0100001f0101000c010000230105001c01050068010100580100 +07010001050a07010001050202020103020205030100000801000002010000bd01010081 +010100590101000801000002010000b501010058010007010001050a0701000105020202 +01030202050301000009010200be010100810101005901010009010200b6010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +020201030202050301ff01ff01ce07010001050a070100010502020201030202050308cd +01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008 +010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 +05020202010302020503080000cb08000100000a01000005010000040102000c01000004 +0101000d010000020102000b0101000201000007010000210101000b010000040101000d +010000020102000b010100020100001e0101002001010018010000150100006f01010008 +0104000301010044010007010001050a0701000105020202010302020503080000cb0800 +0100000a0100000401010003010000020100000a01000004010000010100000b01010001 +0100000201000009010000010100000201000006010000210101000a0100000401000001 +0100000b01010001010000020100000901000001010000020100001d0101001f0100001a +010000150100006f0101000801000002010000020100000101000043010007010001050a +070100010502020201030202050308000009080100000800000208020009080000000801 +0003080200020801000008000003080200030802008d08000100000a0100000301000000 +010000070100000901000005010000010100000a01000000010000050100000901000001 +0100000301000005010000210101000901000005010000010100000a0100000001000005 +0100000901000001010000030100001c0101000901010000010000020102000b01000003 +010000000101000301020002010000000101000201040002010200020100000001010003 +010100000100006f0101000c010000020100000101000043010007010001050a07010001 +050202020103020205030800000808000001080100010800000208000008080100010800 +000108000002080000010800000008000000080000010800000208000001080000020800 +008c08000100000a01000005010000070100000801000006010000010100000901000001 +010000050100000901000001010000040100000401000021010100080100000601000001 +0100000901000001010000050100000901000001010000040100001b0101000801000001 +010100010100000201000008010400010101000101000001010000020100000101010001 +010000030100000301000002010000010101000101000001010000010101006f0101000b +010000030100000101000043010007010001050a07010001050202020103020205030800 +000808000002080000010800000c08000002080000050800000108000000080000000800 +000108000002080000010800009008000100000801010006010000060100000801000007 +010000010100000801000002010000030101000a0100000101000005010000040101001f +0101000701000007010000010100000801000002010000030101000a0100000101000005 +0100001a0101000801000002010000010100000e01000003010000050100000201000001 +01000002010000030100000301000002010000010100000201000001010000020100006f +0101000b010000030100000101000043010007010001050a070100010502020201030202 +050308000008080000020800000208020009080000020800000208030001080000000800 +000008000001080400020802008d08000100000a01000005010000050100000a01000006 +010000010100000801000002010000050100000901000001010000040100000401000021 +010100080100000601000001010000080100000201000005010000090100000101000004 +0100001b0101000801000002010000020102000b01000003010000050100000201000001 +010000020100000301000003010400010100000201000001010000020100006f0101000b +010000030100000101000043010007010001050a07010001050202020103020205030800 +000808000002080000050800000808000002080000010800000208000001080000000800 +000008000001080000090800008c08000100000a01000005010000040100000c01000005 +010000010100000801050004010000090100000101000003010000050100002101010009 +010000050100000101000008010500040100000901000001010000030100001c01010008 +01000002010000050100000a010000030100000501000002010000010100000201000003 +01000003010000050100000201000001010000020100006f0101000a0100000401000001 +01000043010007010001050a070100010502020201030202050308000008080000010801 +000108000002080000080800000208000001080000020800000108000000080000000800 +00010800000208000001080000020800008c08000100000a010000050100000301000007 +010100040100000401000001010000030101000601000001010000020100000301010003 +010000010100000201000006010000210101000a01000004010000010100000301010006 +0100000101000002010000030101000301000001010000020100001d0101000801000001 +01010001010000020100000a010000030100000501000002010000010100000201000003 +0100000301000002010000010100000201000001010000010101006f0101000a01000004 +0100000101000043010007010001050a0701000105020202010302020503080000090801 +000008000002080200090800000208000002080300010800000008000000080000020802 +00030802008d08000100000a010000030104000101040003010100050100000401010004 +010100060100000201020004010100040101000201000007010000210101000b01000004 +0101000401010006010000020102000401010004010100020100001e0101000901010000 +010000020102000b01000003010000060102000201000002010000040101000201020002 +0100000201000002010100000100006f0101000a0100000501010044010007010001050a +07010001050202020103020205030800000c08000007080500af08000100000a01000014 +010000060100002a01000008010000210101000c0100002a0100001f0101000c01000007 +010500a701010058010007010001050a0701000105020202010302020503080000080800 +0002080000bd08000100000b010100100101003b01010022010100590101000801000002 +010000b501010058010007010001050a0701000105020202010302020503080000090802 +00be0800010000810101005901010009010200b601010058010007010001050a07010001 +05020202010302020503080000cb08000100008101010059010100c30101005801000701 +0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 +01010058010007010001050a0701000105020202010302020503080000cb080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +01030202050308cd01ff01ff010007010001050a070100010502020201030202050308cd +01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008 +010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 +05020202010302020503080000110800000308000010080000010800009e08000100000a +01000005010000040102000c010000040101000d010000050100000a0101000201000007 +010000210101000b010000040101000d010000050100000a010100020100001e010100c3 +0101000a0100000401020044010007010001050a07010001050202020103020205030800 +00110800000308000010080000010800009e08000100000a010000040101000301000002 +0100000a01000004010000010100000b0101000401010009010000010100000201000006 +010000210101000a01000004010000010100000b01010004010100090100000101000002 +0100001d010100c301010009010100030100000201000043010007010001050a07010001 +0502020201030202050308000009080100000800000108040001080000010800000a0801 +000008000001080000000801009b08000100000a01000003010000000100000701000009 +01000005010000010100000a010000000100000301000000010000090100000101000003 +01000005010000210101000901000005010000010100000a010000000100000301000000 +0100000901000001010000030100001c010100c301010008010000000100000301000002 +01000043010007010001050a070100010502020201030202050308000008080000010801 +000308000003080000000800000a0800000108010001080100010800009a08000100000a +010000050100000701000008010000060100000101000009010000010100000201000001 +010000090100000101000004010000040100002101010008010000060100000101000009 +0100000101000002010000010100000901000001010000040100001b010100c30101000a +010000030100000201000043010007010001050a07010001050202020103020205030800 +00080800000208000003080000030801000b0800000208000001080000020800009a0800 +010000080101000601000005010100080100000701000001010000080100000201000001 +01000002010000090100000101000005010000040101001f010100070100000701000001 +010000080100000201000001010000020100000901000001010000050100001a010100c3 +0101000a0100000401030043010007010001050a07010001050202020103020205030800 +00080800000208000003080000030801000b0800000208000001080000020800009a0800 +0100000a0100000501000007010000080100000601000001010000080100000201000001 +010000020100000901000001010000040100000401000021010100080100000601000001 +010000080100000201000001010000020100000901000001010000040100001b010100c3 +0101000a0100000701000043010007010001050a07010001050202020103020205030800 +0008080000020800000308000003080000000800000a0800000208000001080000020800 +009a08000100000a01000005010000070100000901000005010000010100000801050000 +010500080100000101000003010000050100002101010009010000050100000101000008 +010500000105000801000001010000030100001c010100c30101000a0100000701000043 +010007010001050a07010001050202020103020205030800000808000001080100030800 +000308000001080000090800000108010001080100010800009a08000100000a01000005 +010000030100000201000003010100040100000401000001010000030101000601000005 +0100000301010003010000010100000201000006010000210101000a0100000401000001 +010000030101000601000005010000030101000301000001010000020100001d010100c3 +0101000a010000030100000201000043010007010001050a070100010502020201030202 +050308000009080100000800000408010001080000020800000908010000080000010800 +00000801009b08000100000a010000030104000201020004010100050100000401010004 +010100060100000501000003010100040101000201000007010000210101000b01000004 +0101000401010006010000050100000301010004010100020100001e010100c301010008 +0104000201020044010007010001050a07010001050202020103020205030800000c0800 +000e080500a808000100000a01000014010000060100002a01000008010000210101000c +0100002a0100001f010100c301010058010007010001050a070100010502020201030202 +05030800000808000002080000bd08000100000b010100100101003b0101002201010059 +010100c301010058010007010001050a0701000105020202010302020503080000090802 +00be08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100008101010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a0701000105020202010302020503080000cb0800 +0100008101010059010100c301010058010007010001050a070100010502020201030202 +050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a0701000105020202010302020503080000cb0800 +0100000b0101004e0101002201010059010100c301010058010007010001050a07010001 +05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021 +0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 +010302020503080000110800000308000010080000010800009e08000100000a01000005 +010000070100000b010000040101000d010000050100000a010100020100000701000021 +0101000b010000040101000d010000050100000a010100020100001e010100c30101000c +0100000201020044010007010001050a0701000105020202010302020503080000110800 +000308000010080000010800009e08000100000a01000004010100060101000a01000004 +010000010100000b0101000401010009010000010100000201000006010000210101000a +01000004010000010100000b010100040101000901000001010000020100001d010100c3 +0101000b010100010100000201000043010007010001050a070100010502020201030202 +050308000009080100000800000108040001080000010800000a08010000080000010800 +00000801009b08000100000a010000030100000001000005010000000100000901000005 +010000010100000a01000000010000030100000001000009010000010100000301000005 +010000210101000901000005010000010100000a01000000010000030100000001000009 +01000001010000030100001c010100c30101000a01000000010000050100004301000701 +0001050a0701000105020202010302020503080000080800000108010003080000030800 +00000800000a0800000108010001080100010800009a08000100000a0100000501000004 +010000010100000801000006010000010100000901000001010000020100000101000009 +010000010100000401000004010000210101000801000006010000010100000901000001 +01000002010000010100000901000001010000040100001b010100c30101000901000001 +0100000501000043010007010001050a0701000105020202010302020503080000080800 +000208000003080000030801000b0800000208000001080000020800009a080001000008 +010100060100000301000002010000070100000701000001010000080100000201000001 +01000002010000090100000101000005010000040101001f010100070100000701000001 +010000080100000201000001010000020100000901000001010000050100001a010100c3 +01010008010000020100000301010044010007010001050a070100010502020201030202 +0503080000080800000208000003080000030801000b0800000208000001080000020800 +009a08000100000a01000005010000030100000201000008010000060100000101000008 +010000020100000101000002010000090100000101000004010000040100002101010008 +010000060100000101000008010000020100000101000002010000090100000101000004 +0100001b010100c301010008010000020100000501000043010007010001050a07010001 +0502020201030202050308000008080000020800000308000003080000000800000a0800 +000208000001080000020800009a08000100000a01000005010000030105000801000005 +010000010100000801050000010500080100000101000003010000050100002101010009 +010000050100000101000008010500000105000801000001010000030100001c010100c3 +010100080105000401000043010007010001050a07010001050202020103020205030800 +000808000001080100030800000308000001080000090800000108010001080100010800 +009a08000100000a01000005010000070100000301010004010000040100000101000003 +01010006010000050100000301010003010000010100000201000006010000210101000a +010000040100000101000003010100060100000501000003010100030100000101000002 +0100001d010100c30101000c010000010100000201000043010007010001050a07010001 +050202020103020205030800000908010000080000040801000108000002080000090801 +000008000001080000000801009b08000100000a01000003010400050100000301010005 +010000040101000401010006010000050100000301010004010100020100000701000021 +0101000b010000040101000401010006010000050100000301010004010100020100001e +010100c30101000c0100000201020044010007010001050a070100010502020201030202 +05030800000c0800000e080500a808000100000a01000014010000060100002a01000008 +010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 +050202020103020205030800000808000002080000bd08000100000b010100100101003b +0101002201010059010100c301010058010007010001050a070100010502020201030202 +050308000009080200be08000100008101010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a0701000105020202010302020503080000cb0800 +0100008101010059010100c301010058010007010001050a070100010502020201030202 +0503080000cb08000100008101010059010100c301010058010007010001050a07010001 +0502020201030202050308cd01ff01ff010007010001050a070100010502020201030202 +050308cd01ff01ff010007010001050a0701000105020202010302020503080000cb0800 +0100008101010059010100c301010058010007010001050a070100010502020201030202 +0503080000cb08000100000b0101004e0101002201010059010100c30101005801000701 +0001050a0701000105020202010302020503080000cb08000100000a0100001c0100002a +01000008010000210101000c0100002a0100001f010100c301010058010007010001050a +0701000105020202010302020503080000110800000308000010080000010800009e0800 +0100000a01000005010000030104000b010000040101000d010000050100000a01010002 +01000007010000210101000b010000040101000d010000050100000a010100020100001e +010100c3010100090102000301020044010007010001050a070100010502020201030202 +0503080000110800000308000010080000010800009e08000100000a0100000401010003 +0100000e01000004010000010100000b0101000401010009010000010100000201000006 +010000210101000a01000004010000010100000b01010004010100090100000101000002 +0100001d010100c30101000801000002010000010100000201000043010007010001050a +070100010502020201030202050308000009080100000800000108040001080000010800 +000a0801000008000001080000000801009b08000100000a010000030100000001000003 +0100000d01000005010000010100000a0100000001000003010000000100000901000001 +0100000301000005010000210101000901000005010000010100000a0100000001000003 +010000000100000901000001010000030100001c010100c30101000c0100000501000043 +010007010001050a07010001050202020103020205030800000808000001080100030800 +0003080000000800000a0800000108010001080100010800009a08000100000a01000005 +010000030103000901000006010000010100000901000001010000020100000101000009 +010000010100000401000004010000210101000801000006010000010100000901000001 +01000002010000010100000901000001010000040100001b010100c30101000c01000005 +01000043010007010001050a070100010502020201030202050308000008080000020800 +0003080000030801000b0800000208000001080000020800009a08000100000801010006 +010000070100000701000007010000010100000801000002010000010100000201000009 +0100000101000005010000040101001f0101000701000007010000010100000801000002 +01000001010000020100000901000001010000050100001a010100c30101000a01010004 +01010044010007010001050a070100010502020201030202050308000008080000020800 +0003080000030801000b0800000208000001080000020800009a08000100000a01000005 +010000070100000801000006010000010100000801000002010000010100000201000009 +010000010100000401000004010000210101000801000006010000010100000801000002 +01000001010000020100000901000001010000040100001b010100c30101000c01000005 +01000043010007010001050a070100010502020201030202050308000008080000020800 +000308000003080000000800000a0800000208000001080000020800009a08000100000a +010000050100000301000002010000090100000501000001010000080105000001050008 +010000010100000301000005010000210101000901000005010000010100000801050000 +0105000801000001010000030100001c010100c30101000c010000050100004301000701 +0001050a0701000105020202010302020503080000080800000108010003080000030800 +0001080000090800000108010001080100010800009a08000100000a0100000501000003 +010000020100000301010004010000040100000101000003010100060100000501000003 +01010003010000010100000201000006010000210101000a010000040100000101000003 +0101000601000005010000030101000301000001010000020100001d010100c301010008 +01000002010000010100000201000043010007010001050a070100010502020201030202 +050308000009080100000800000408010001080000020800000908010000080000010800 +00000801009b08000100000a010000030104000201020004010100050100000401010004 +010100060100000501000003010100040101000201000007010000210101000b01000004 +0101000401010006010000050100000301010004010100020100001e010100c301010009 +0102000301020044010007010001050a07010001050202020103020205030800000c0800 +000e080500a808000100000a01000014010000060100002a01000008010000210101000c +0100002a0100001f010100c301010058010007010001050a070100010502020201030202 +05030800000808000002080000bd08000100000b010100100101003b0101002201010059 +010100c301010058010007010001050a0701000105020202010302020503080000090802 +00be08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100008101010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a0701000105020202010302020503080000cb0800 +0100008101010059010100c301010058010007010001050a070100010502020201030202 +050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a0701000105020202010302020503080000cb0800 +0100000b0101004e0101002201010059010100c301010058010007010001050a07010001 +05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021 +0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 +010302020503080000110800000308000010080000010800009e08000100000a01000005 +010000040102000c010000040101000d010000050100000a010100020100000701000021 +0101000b010000040101000d010000050100000a010100020100001e010100c30101000a +0101004b010007010001050a070100010502020201030202050308000011080000030800 +0010080000010800009e08000100000a0100000401010003010000020100000a01000004 +010000010100000b0101000401010009010000010100000201000006010000210101000a +01000004010000010100000b010100040101000901000001010000020100001d010100c3 +01010009010000010100004a010007010001050a07010001050202020103020205030800 +0009080100000800000108040001080000010800000a0801000008000001080000000801 +009b08000100000a0100000301000000010000030100000d01000005010000010100000a +010000000100000301000000010000090100000101000003010000050100002101010009 +01000005010000010100000a010000000100000301000000010000090100000101000003 +0100001c010100c301010009010000010100004a010007010001050a0701000105020202 +01030202050308000008080000010801000308000003080000000800000a080000010801 +0001080100010800009a08000100000a01000005010000030100000c0100000601000001 +010000090100000101000002010000010100000901000001010000040100000401000021 +010100080100000601000001010000090100000101000002010000010100000901000001 +010000040100001b010100c301010009010000010100004a010007010001050a07010001 +05020202010302020503080000080800000208000003080000030801000b080000020800 +0001080000020800009a0800010000080101000601000003010300080100000701000001 +01000008010000020100000101000002010000090100000101000005010000040101001f +010100070100000701000001010000080100000201000001010000020100000901000001 +010000050100001a010100c301010009010000010100004a010007010001050a07010001 +05020202010302020503080000080800000208000003080000030801000b080000020800 +0001080000020800009a08000100000a0100000501000003010000020100000801000006 +010000010100000801000002010000010100000201000009010000010100000401000004 +010000210101000801000006010000010100000801000002010000010100000201000009 +01000001010000040100001b010100c301010009010000010100004a010007010001050a +070100010502020201030202050308000008080000020800000308000003080000000800 +000a0800000208000001080000020800009a08000100000a010000050100000301000002 +010000090100000501000001010000080105000001050008010000010100000301000005 +010000210101000901000005010000010100000801050000010500080100000101000003 +0100001c010100c301010009010000010100004a010007010001050a0701000105020202 +010302020503080000080800000108010003080000030800000108000009080000010801 +0001080100010800009a08000100000a0100000501000003010000020100000301010004 +010000040100000101000003010100060100000501000003010100030100000101000002 +01000006010000210101000a010000040100000101000003010100060100000501000003 +0101000301000001010000020100001d010100c301010009010000010100004a01000701 +0001050a0701000105020202010302020503080000090801000008000004080100010800 +0002080000090801000008000001080000000801009b08000100000a0100000301040002 +010200040101000501000004010100040101000601000005010000030101000401010002 +01000007010000210101000b010000040101000401010006010000050100000301010004 +010100020100001e010100c30101000a0101004b010007010001050a0701000105020202 +0103020205030800000c0800000e080500a808000100000a01000014010000060100002a +01000008010000210101000c0100002a0100001f010100c301010058010007010001050a +07010001050202020103020205030800000808000002080000bd08000100000b01010010 +0101003b0101002201010059010100c301010058010007010001050a0701000105020202 +01030202050308000009080200be08000100008101010059010100c30101005801000701 +0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 +01010058010007010001050a0701000105020202010302020503080000cb080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100008101010059010100c301010058010007010001050a +070100010502020201030202050308cd01ff01ff010007010001050a0701000105020202 +01030202050308cd01ff01ff010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100000b0101004e0101002201010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100000a0100001c +0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 +0001050a0701000105020202010302020503080000110800000308000010080000010800 +009e08000100000a01000005010000030104000b010000040101000d010000050100000a +0101000201000007010000210101000b010000040101000d010000050100000a01010002 +0100001e010100c3010100090102000401010044010007010001050a0701000105020202 +010302020503080000110800000308000010080000010800009e08000100000a01000004 +01010003010000020100000a01000004010000010100000b010100040101000901000001 +0100000201000006010000210101000a01000004010000010100000b0101000401010009 +01000001010000020100001d010100c30101000801000002010000020100000101000043 +010007010001050a07010001050202020103020205030800000908010000080000010804 +0001080000010800000a0801000008000001080000000801009b08000100000a01000003 +01000000010000070100000901000005010000010100000a010000000100000301000000 +01000009010000010100000301000005010000210101000901000005010000010100000a +0100000001000003010000000100000901000001010000030100001c010100c301010008 +01000002010000020100000101000043010007010001050a070100010502020201030202 +050308000008080000010801000308000003080000000800000a08000001080100010801 +00010800009a08000100000a010000050100000601000009010000060100000101000009 +010000010100000201000001010000090100000101000004010000040100002101010008 +010000060100000101000009010000010100000201000001010000090100000101000004 +0100001b010100c30101000801000002010000020100000101000043010007010001050a +0701000105020202010302020503080000080800000208000003080000030801000b0800 +000208000001080000020800009a08000100000801010006010000060100000801000007 +010000010100000801000002010000010100000201000009010000010100000501000004 +0101001f0101000701000007010000010100000801000002010000010100000201000009 +01000001010000050100001a010100c30101000901030002010000010100004301000701 +0001050a0701000105020202010302020503080000080800000208000003080000030801 +000b0800000208000001080000020800009a08000100000a010000050100000601000009 +010000060100000101000008010000020100000101000002010000090100000101000004 +010000040100002101010008010000060100000101000008010000020100000101000002 +0100000901000001010000040100001b010100c30101000c010000020100000101000043 +010007010001050a07010001050202020103020205030800000808000002080000030800 +0003080000000800000a0800000208000001080000020800009a08000100000a01000005 +010000050100000b01000005010000010100000801050000010500080100000101000003 +010000050100002101010009010000050100000101000008010500000105000801000001 +010000030100001c010100c30101000c010000020100000101000043010007010001050a +070100010502020201030202050308000008080000010801000308000003080000010800 +00090800000108010001080100010800009a08000100000a010000050100000501000005 +010100040100000401000001010000030101000601000005010000030101000301000001 +0100000201000006010000210101000a0100000401000001010000030101000601000005 +010000030101000301000001010000020100001d010100c3010100080100000201000002 +0100000101000043010007010001050a0701000105020202010302020503080000090801 +0000080000040801000108000002080000090801000008000001080000000801009b0800 +0100000a0100000301040003010000050101000501000004010100040101000601000005 +01000003010100040101000201000007010000210101000b010000040101000401010006 +010000050100000301010004010100020100001e010100c3010100090102000401010044 +010007010001050a07010001050202020103020205030800000c0800000e080500a80800 +0100000a01000014010000060100002a01000008010000210101000c0100002a0100001f +010100c301010058010007010001050a0701000105020202010302020503080000080800 +0002080000bd08000100000b010100100101003b0101002201010059010100c301010058 +010007010001050a070100010502020201030202050308000009080200be080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100008101010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff +010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100000b0101004e +0101002201010059010100c301010058010007010001050a070100010502020201030202 +0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a +0100001f010100c301010058010007010001050a07010001050202020103020205030800 +00110800000308000010080000010800009e08000100000a01000005010000040102000c +010000040101000d010000050100000a0101000201000007010000210101000b01000004 +0101000d010000050100000a010100020100001e010100c3010100090102000301020044 +010007010001050a07010001050202020103020205030800001108000003080000100800 +00010800009e08000100000a0100000401010003010000020100000a0100000401000001 +0100000b0101000401010009010000010100000201000006010000210101000a01000004 +010000010100000b010100040101000901000001010000020100001d010100c301010008 +01000002010000010100000201000043010007010001050a070100010502020201030202 +050308000009080100000800000108040001080000010800000a08010000080000010800 +00000801009b08000100000a010000030100000001000003010000020100000901000005 +010000010100000a01000000010000030100000001000009010000010100000301000005 +010000210101000901000005010000010100000a01000000010000030100000001000009 +01000001010000030100001c010100c3010100080100000901000043010007010001050a +070100010502020201030202050308000008080000010801000308000003080000000800 +000a0800000108010001080100010800009a08000100000a010000050100000301000002 +010000080100000601000001010000090100000101000002010000010100000901000001 +010000040100000401000021010100080100000601000001010000090100000101000002 +010000010100000901000001010000040100001b010100c3010100080100000901000043 +010007010001050a07010001050202020103020205030800000808000002080000030800 +00030801000b0800000208000001080000020800009a0800010000080101000601000004 +010200080100000701000001010000080100000201000001010000020100000901000001 +01000005010000040101001f010100070100000701000001010000080100000201000001 +010000020100000901000001010000050100001a010100c3010100080103000501000044 +010007010001050a07010001050202020103020205030800000808000002080000030800 +00030801000b0800000208000001080000020800009a08000100000a0100000501000003 +010000020100000801000006010000010100000801000002010000010100000201000009 +010000010100000401000004010000210101000801000006010000010100000801000002 +01000001010000020100000901000001010000040100001b010100c30101000801000002 +0100000301000045010007010001050a0701000105020202010302020503080000080800 +00020800000308000003080000000800000a0800000208000001080000020800009a0800 +0100000a0100000501000003010000020100000901000005010000010100000801050000 +010500080100000101000003010000050100002101010009010000050100000101000008 +010500000105000801000001010000030100001c010100c3010100080100000201000002 +01000046010007010001050a070100010502020201030202050308000008080000010801 +00030800000308000001080000090800000108010001080100010800009a08000100000a +010000050100000301000002010000030101000401000004010000010100000301010006 +010000050100000301010003010000010100000201000006010000210101000a01000004 +01000001010000030101000601000005010000030101000301000001010000020100001d +010100c301010008010000020100000101000047010007010001050a0701000105020202 +010302020503080000090801000008000004080100010800000208000009080100000800 +0001080000000801009b08000100000a0100000301040002010200040101000501000004 +01010004010100060100000501000003010100040101000201000007010000210101000b +010000040101000401010006010000050100000301010004010100020100001e010100c3 +010100090102000201040043010007010001050a07010001050202020103020205030800 +000c0800000e080500a808000100000a01000014010000060100002a0100000801000021 +0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 +0103020205030800000808000002080000bd08000100000b010100100101003b01010022 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +0009080200be08000100008101010059010100c301010058010007010001050a07010001 +05020202010302020503080000cb08000100008101010059010100c30101005801000701 +0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 +01010058010007010001050a0701000105020202010302020503080000cb080001000081 +01010059010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +01030202050308cd01ff01ff010007010001050a070100010502020201030202050301ff +01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001050a0701000105020202010302020503 +010000cb010100810101000c0100002a0100001f010100c301010058010007010001050a +07010001050202020103020205030100000b010000120100001f01000089010100810101 +000b010000040101000b010000040102000b010100020100001e0101000b010000120100 +000e010000010100008f0101000a0101004b010007010001050a07010001050202020103 +020205030100001f0100001f01000089010100810101000a010000040100000101000009 +01010003010000020100000901000001010000020100001d0101001f0100000e01000001 +0100008f01010009010000010100004a010007010001050a070100010502020201030202 +050301000009010200020100000001010003010200020104000901020003010200030102 +000201000000010100030102007f01010081010100090100000501000001010000080100 +0000010000070100000901000001010000030100001c0101000901020002010000000101 +000301020002010400090101000001000001010000000101008c01010009010000010100 +004a010007010001050a07010001050202020103020205030100000b0100000201010001 +0100000101000002010000030100000a0100000201000001010000020100000101000002 +010000010101000101000001010000020100007e01010081010100080100000601000001 +0100000a010000070100000901000001010000040100001b0101000b0100000201010001 +0100000101000002010000030100000a0100000101010001010100010100008b01010009 +010000010100004a010007010001050a07010001050202020103020205030100000b0100 +0002010000020100000101000002010000030100000a0100000901000001010000050100 +000201000001010000020100007e010100810101000701000007010000010100000a0100 +00060100000a01000001010000050100001a0101000b0100000201000002010000010100 +0002010000030100000a0100000201000001010000020100008b01010009010000010100 +004a010007010001050a07010001050202020103020205030100000b0100000201000002 +01000001010400030100000a01000006010300010100000501000002010000010104007e +010100810101000801000006010000010100000a010000050100000b0100000101000004 +0100001b0101000b010000020100000201000001010400030100000a0100000201000001 +010000020100008b01010009010000010100004a010007010001050a0701000105020202 +0103020205030100000b010000020100000201000001010000070100000a010000050100 +000201000001010000050100000201000001010000820101008101010009010000050100 +00010100000a010000040100000c01000001010000030100001c0101000b010000020100 +000201000001010000070100000a0100000201000001010000020100008b010100090100 +00010100004a010007010001050a07010001050202020103020205030100000b01000002 +010000020100000101000002010000030100000a01000002010000010100000201000001 +01000002010000010100000201000001010000020100007e010100810101000a01000004 +01000001010000030101000401000003010000070101000301000001010000020100001d +0101000b01000002010000020100000101000002010000030100000a0100000101010001 +010100010100008b01010009010000010100004a010007010001050a0701000105020202 +0103020205030100000b0100000201000002010000020102000501010009010200030103 +00020102000201000002010000020102007f010100810101000b01000004010100040101 +0002010400010104000301010004010100020100001e0101000b01000002010000020100 +000201020005010100090101000001000001010000000101008c0101000a0101004b0100 +07010001050a070100010502020201030202050301000023010500a1010100810101000c +0100002a0100001f010100230105009901010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a0701000105020202010302020503010000cb0101 +008101010059010100c301010058010007010001070c0001050202020103020205030100 +00cb0101008101010059010100c301010058010007010000070d00010502020201030202 +050301ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701030e0001 +05020202010302020503010000cb0101008101010059010100c30101005801000701030e +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +030e000105020202010302020503010000cb010100810101000c0100002a0100001f0101 +00c30101005801000701030e0001050202020103020205030100000b010000120100000e +0100000101000097010100810101000b010000040101000b010000040102000b01010002 +0100001e0101000b010000120100000e010000010100008f0101000a0100000401020044 +01000701030e0001050202020103020205030100001f0100000e01000001010000970101 +00810101000a010000040100000101000009010100030100000201000009010000010100 +00020100001d0101001f0100000e010000010100008f0101000901010003010000020100 +004301000701030e00010502020201030202050301000009010200020100000001010003 +010200020104000901010000010000010100000001010094010100810101000901000005 +010000010100000801000000010000070100000901000001010000030100001c01010009 +01020002010000000101000301020002010400090101000001000001010000000101008c +010100080100000001000003010000020100004301000701030e00010502020201030202 +05030100000b01000002010100010100000101000002010000030100000a010000010101 +00010101000101000093010100810101000801000006010000010100000a010000070100 +000901000001010000040100001b0101000b010000020101000101000001010000020100 +00030100000a0100000101010001010100010100008b0101000a01000003010000020100 +004301000701030e0001050202020103020205030100000b010000020100000201000001 +01000002010000030100000a010000020100000101000002010000930101008101010007 +01000007010000010100000a010000060100000a01000001010000050100001a0101000b +01000002010000020100000101000002010000030100000a010000020100000101000002 +0100008b0101000a010000040103004301000701030e0001050202020103020205030100 +000b010000020100000201000001010400030100000a0100000201000001010000020100 +0093010100810101000801000006010000010100000a010000050100000b010000010100 +00040100001b0101000b010000020100000201000001010400030100000a010000020100 +0001010000020100008b0101000a010000070100004301000701030e0001050202020103 +020205030100000b010000020100000201000001010000070100000a0100000201000001 +0100000201000093010100810101000901000005010000010100000a010000040100000c +01000001010000030100001c0101000b010000020100000201000001010000070100000a +0100000201000001010000020100008b0101000a010000070100004301000701030e0001 +050202020103020205030100000b01000002010000020100000101000002010000030100 +000a01000001010100010101000101000093010100810101000a01000004010000010100 +00030101000401000003010000070101000301000001010000020100001d0101000b0100 +0002010000020100000101000002010000030100000a0100000101010001010100010100 +008b0101000a01000003010000020100004301000701030e000105020202010302020503 +0100000b0100000201000002010000020102000501010009010100000100000101000000 +01010094010100810101000b010000040101000401010002010400010104000301010004 +010100020100001e0101000b010000020100000201000002010200050101000901010000 +01000001010000000101008c01010008010400020102004401000701030e000105020202 +01030202050301000023010500a1010100810101000c0100002a0100001f010100230105 +00990101005801000701030e000105020202010302020503010000cb0101008101010059 +010100c30101005801000701030e000105020202010302020503010000cb010100810101 +0059010100c30101005801000701030e000105020202010302020503010000cb01010081 +01010059010100c30101005801000701030e000105020202010302020503010000cb0101 +008101010059010100c30101005801000701030e000105020202010302020503010000cb +0101008101010059010100c30101005801000701030e0001050202020103020205030100 +00cb0101008101010059010100c30101005801000701030e000105020202010302020503 +01ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701001005020202 +010302020503010000cb0101008101010059010100c301010058010007010300000c0700 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +03000001050807010300000105020202010302020503010000cb010100810101000c0100 +002a0100001f010100c30101005801000701030100010507070103000001050202020103 +020205030100000b010000120100000a0100001501000087010100810101000b01000004 +0101000b010000040102000b010100020100001e0101000b010000120100000e01000001 +0100008f0101000c0100004a010007010301000105060701030100010502020201030202 +05030100001f0100000a0100001501000087010100810101000a01000004010000010100 +000901010003010000020100000901000001010000020100001d0101001f0100000e0100 +00010100008f0101000b0101004a01000701030200010505070103010001050202020103 +020205030100000901020002010000000101000301020002010400080100000001010003 +0102000301020002010400020102007f0101008101010009010000050100000101000008 +01000000010000070100000901000001010000030100001c010100090102000201000000 +0101000301020002010400090101000001000001010000000101008c0101000a01000000 +0100004a01000701030200010504070103020001050202020103020205030100000b0100 +0002010100010100000101000002010000030100000a0101000101000001010000020100 +0001010000020100000301000003010000020100007e0101008101010008010000060100 +00010100000a010000070100000901000001010000040100001b0101000b010000020101 +00010100000101000002010000030100000a0100000101010001010100010100008b0101 +0009010000010100004a0100070103030001050307010302000105020202010302020503 +0100000b01000002010000020100000101000002010000030100000a0100000201000001 +010000020100000101000007010000030100008201010081010100070100000701000001 +0100000a010000060100000a01000001010000050100001a0101000b0100000201000002 +0100000101000002010000030100000a0100000201000001010000020100008b01010008 +010000020100004a01000701030300010502070103030001050202020103020205030100 +000b010000020100000201000001010400030100000a0100000201000001010000020100 +000201020004010000040102007f010100810101000801000006010000010100000a0100 +00050100000b01000001010000040100001b0101000b0100000201000002010000010104 +00030100000a0100000201000001010000020100008b01010008010000020100004a0100 +0701030400010501070103030001050202020103020205030100000b0100000201000002 +01000001010000070100000a010000020100000101000002010000050100000301000007 +0100007e010100810101000901000005010000010100000a010000040100000c01000001 +010000030100001c0101000b010000020100000201000001010000070100000a01000002 +01000001010000020100008b010100080105004901000701030400010500070103040001 +050202020103020205030100000b01000002010000020100000101000002010000030100 +000a01000002010000010100000201000001010000020100000301000003010000020100 +007e010100810101000a0100000401000001010000030101000401000003010000070101 +000301000001010000020100001d0101000b010000020100000201000001010000020100 +00030100000a0100000101010001010100010100008b0101000c0100004a010007010305 +0000070203040001050202020103020205030100000b0100000201000002010000020102 +00050101000801000002010000020102000301020005010100020102007f010100810101 +000b010000040101000401010002010400010104000301010004010100020100001e0101 +000b01000002010000020100000201020005010100090101000001000001010000000101 +008c0101000c0100004a0100070103050000070103050001050202020103020205030100 +0023010500a1010100810101000c0100002a0100001f0101002301050099010100580100 +0701030607010305000105020202010302020503010000cb0101008101010059010100c3 +0101005801000701030607000306000105020202010302020503010000cb010100810101 +0059010100c30101005801000701001005020202010302020503010000cb010100810101 +0059010100c3010100580100070000110502020201030202050207ff07ff07d305110202 +01030202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff +00af03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae +070003000003030a00010511020201030202050207010309000207010300000105ff05ff +05ab07010300000503080001051102020103020205020701030700030500070103000001 +05ff05ff05ab070103000001050100030306000105110202010302020502070103050003 +050207010300000105ff05ff05ab07010300000105030003030400010511020201030202 +0502070103030003050407010300000105ff05ff05ab0701030000010505000303020001 +05110202010302020502070103010003050607010300000105ff05ff05ab070103000001 +0507000303000001051102020103020205020705050807010300000105ff05ff05ab0701 +0300000105080703000105110202010302020502070103010703050607010300000105ff +05ff05ab0701030000010507070303000001051102020103020205020701030307030504 +07010300000105ff05ff05ab070103000001050507030302000105110202010302020502 +070103050703050207010300000105ff05ff05ab07010300000105030703030400010511 +0202010302020502070103070703050007010300000105ff05ff05ab0701030000010501 +070303060001051102020103020205020701030907040300000105ff05ff05ab07010300 +0001070303080001051102020103020205020701030b07020300000107ff07ff07ad0300 +00010701030a0001051102020101000405020701030d07000300000007ff07ff07ae0300 +00000700030c000105110005020204000502070100ff00ff00d105110000020204000000 +020204000502070000ff00ff00d2051100000202040000000202040005ff05ff05e80000 +0202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e80000 +02020400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc +00000208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc +0000020804000000040901ff01ff01dc00000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 377 205 +%%EOF diff --git a/lib/tv/doc/src/tv_start_system_unreadable.gif b/lib/tv/doc/src/tv_start_system_unreadable.gif new file mode 100644 index 0000000000..38b69deb8e Binary files /dev/null and b/lib/tv/doc/src/tv_start_system_unreadable.gif differ diff --git a/lib/tv/doc/src/tv_start_system_unreadable.ps b/lib/tv/doc/src/tv_start_system_unreadable.ps new file mode 100644 index 0000000000..4486557837 --- /dev/null +++ b/lib/tv/doc/src/tv_start_system_unreadable.ps @@ -0,0 +1,1377 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system_unreadable.eps) +%%CreationDate: (Mon Mar 19 17:15:29 2001) +%%BoundingBox: 0 0 377 205 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 377 205 +userdict begin +%%BeginData: +DisplayImage +0 0 +377.000000 205.000000 +12 +755 410 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +828282 +aab6aa +e7e7e7 +000000 +000000 +000000 +000000 +000000 +000000 +000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff +02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 +04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff +02d000000202040000000202040002080000020d040002f6010302110103023801010206 +0101024001010230010102ff020400000202040000000202040002080000020d040002f6 +010102020107020001010203010102010101020e0105020001070201010302070100020b +01010206010102400101020c0104021e010102ff02040000020204000000020204000208 +0000020d040002f6010102050101020301010203010102010101020e0101020701010203 +01010201010102050101020b010102060101024e010102020101021d010102ff02040000 +0202040000000202040002080000020204060203040002f6010102050101020301010203 +010102010101020e01010207010102030101020801040201010302030101020001010203 +010102020103020301040206010302030101020001010207010102000101020101010203 +010302030101020201010200010102020101020101030202010102000101020101010203 +010302020101020001010201010102020103020201010202010102f30000020204000000 +04030208000002020400030400000203040002f601010205010102040101020201000202 +0101020e0101020701010203010202080101020201010201010102020102020001010202 +010102010101020101010201010102090101020101010202010202000101020601020200 +010202000101020101010201010102020101020201020200010102010101020001010200 +010102020102020001020200010102010101020101010201010102000101020101010201 +010102010101020101010202010102f3000004030101020b000002030400030200000204 +040002f6010102050101020401010201010102020101020e010402040101020401030206 +010102060101020201010201010102020101020101010201010102010102020801010201 +010102020101020101010206010102010101020101010205010102020101020201010201 +010102010101020001010200010102020101020101010201010102050101020101020203 +01010201010102010101020101010202010002f70103020b000002030400030200000204 +040002f6010102050101020501010200010002030101020e010102070101020601020205 +010102030104020201010201010102020101020101050202010302060101020101010202 +010102010101020601010201010102010101020201040202010102020101020101010201 +010102000101020001010202010102010101020101010202010402010101020401010201 +0105020201010200010102f70103020b000002040400030000000205040002f601010205 +01010205010302030101020e010102070101020701010205010102020101020101010202 +010102010101020201010201010102080102020501010201010102020101020101010206 +010102010101020101010201010102010101020201010202010102010101020101010201 +010102000101020101010201010102010101020101010201010102010101020401010201 +0101020601010200010002f80103020b000002040400030000000205040002f601010205 +01010206010102040101020e010102070101020301010201010102050101020201010201 +010102020101020101010202010102010101020201000205010102050101020101010202 +010102010101020601010201010102010101020101010201010102020101020201010201 +010102020101020701010201010102010101020101010201010102010101020401010201 +0101020201000203010202f80103020b0000020500000206040002f60101020501010206 +010102040101020e01050203010102040103020701020201010202000101020101040203 +010102020103020201040207010302030101020101010206010102010101020101010202 +010202000101020101010202010102010101020301050202010102010101020101010202 +0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 +01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 +020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff +02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff +02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff +05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 +010302020001050b06040504060005030602051f0600050206000504060005270602050b +06000506060005ff05ff053506000502060005090602051307010202010302020001050b +0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 +0600050b0600051307010202010302020001050b06000506060205050600050306020518 +060005020600050206020503060205020600050206000517060005020600050106000500 +060105020604050206020503060205020600050006010503060205ff05ff052006000502 +060005020602050506000502060005000601050c07010202010302020001050b06000508 +060005050600050206000502060005180600050006000505060005020600050206000501 +060005020600051706000502060005010601050106000503060005060600050206000502 +06000501060105010600050106000502060005ff05ff051f060005020600050106000502 +0600050406000502060105010600050b07010202010302020001050b0603050506000505 +060005020600050206000518060005000600050506000502060005020600050106000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000501060005ff05ff052306040501060005020600050406000502 +060005020600050b07010202010302020001050b06000508060005050600050206040518 +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05ff052006000502060005010604050406000502060005020600050b0701020201030202 +0001050b0600050806000505060005020600051d06000506060005020600050506000500 +060005000600051706000502060005010600050206000503060005060600050206000502 +060005010600050206000505060005ff05ff051f06000502060005010600050806000502 +060005020600050b07010202010302020001050b06000508060005050600050206000502 +060005190600050606000502060005020600050106000500060005000600051706000502 +060005010601050106000503060005060600050206000502060005010600050206000501 +06000502060005ff05ff051f060005020600050106000502060005040600050206010501 +0600050b07010202010302020001050b0600050806000505060005030602051a06000506 +060005030602050306000500060005190602050206000500060105050601050406000503 +060205020600050206000502060205ff05ff052006000502060005020602050506000502 +060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 +010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f +07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e +0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 +0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 +0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 +0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 +05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 +01030202050e01060508010005060101050f010205010102059b01060508010005060101 +0510010505040101054d010205240104050d0101051e0102052401020501010205930106 +0508010005060101051101030535020201030202050e0100050101010500010005070101 +050601000511010105010100059d01000501010105000100050701010506010005130101 +05060100054d0101050001010524010105000101050c0100051e01010500010105240101 +050101000595010005010101050001000507010105060100051101010501010105340202 +010302020510010105030103050201030503010105030103050801020500010105010103 +05000101050001000500010005020103058b010105030103050201030503010105030103 +050a010105030104054c0101050101050500010305000102050201030501010105000102 +05070101050101010500010305030104051d010105010105050001030500010205020103 +050101010500010205070102050001010501010305000101050001000500010005020103 +058301010503010305020103050301010503010305090101050101000500010305020105 +050101030521020201030202051001010506010105000101050101010502010105020101 +0501010105070100050001000500010005050101050001050500010105010101058a0101 +050601010500010105010101050201010502010105010101050901010502010105010101 +054c01000502010105000101050201000500010205000101050001010501010105010102 +050001000507010105010101050201010502010105010101051d01000502010105000101 +050201000500010205000101050001010501010105010102050001000507010005000100 +050001000505010105000105050001010501010105820101050601010500010105010101 +050201010502010105010101050801020504010105020101050001010501010105010101 +052002020103020205100100050401040500010105010101050201010501010605070100 +0500010205020104050001010500010005000107058a0100050401040500010105010101 +0502010105010106050901010501010105020101054b0101050201000501010105000100 +05000100050001010501010805010101050a0103050401010501010105020101051c0101 +05020100050101010500010005000100050001010501010805010101050a010005000102 +050201040500010105000100050001070582010005040104050001010501010105020101 +05010106050901020503010105040101050101060520020201030202050f010105020101 +0501010105000101050201010501010105020101050b0101050001010501010105010101 +05010100050001000500010005000101058e010105020101050101010500010105020101 +0501010105020101050d01010502010105010101054c0101050101010501010205000100 +05010100050201000500010105050101050a0101050601010502010105010101051d0101 +05010101050101020500010005010100050201000500010105050101050a010105000101 +050101010501010105010100050001000500010005000101058601010502010105010101 +05000101050201010501010105020101050b010105010101050201010503010105030101 +0525020201030202050f0101050201010501010105000101050101010502010105020101 +050101010507010005010101050101010501010105000101050001000500010005000101 +05010101058a010105020101050101010500010105010101050201010502010105010101 +050901010502010105010101054c01010500010105020103050101010501010105000101 +0501010105010101050a0101050601010502010105010101051d01010500010105020103 +0501010105010101050001010501010105010101050a0100050101010501010105010101 +050001010500010005000100050001010501010105820101050201010501010105000101 +050101010502010105020101050101010507010105010101050201010502010205000101 +05000101050101010521020201030202050e01030502010a050101050501010305070102 +0500010105020107050001000500010105000103058a01030502010a0501010505010103 +0508010505010105054c0102050301010500010005000103050001020500010305010104 +050701030503010505010105051d01020503010105000100050001030500010205000103 +05010104050701020500010105020107050001000500010105000103058201030502010a +050101050501010305090103050101050500010505010103052202020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff +05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101 +0059010100c30101005801000711000005020202010302020503010000cb010100810101 +0059010100c30101005801000701030607000306000105020202010302020503010000cb +010100810101000c0100002301000026010100c301010058010007010305000007000306 +0001050202020103020205030100001f0100000a0100009e010100810101000b01000004 +010100090104000a01010002010000250101001e0102000501000012010000060100002e +010000120102000301020031010100080104004a01000701030500000701030500010502 +02020103020205030100001f0100000a0100009e010100810101000a0100000401000001 +010000080100000d01000001010000020100002401010020010000190100003601000014 +010000050100003101010008010000020100004a01000701030400010701030500010502 +02020103020205030100000901020003010200090104000201020002010000000101009b +01010081010100090100000501000001010000080100000d010000010100000301000023 +010100090102000201000000010100020100000001010005010000030102000301020003 +01020002010400020102000301020002010000000101000a010200030102000201000000 +010100020104000101000000010100030102000501000005010000030102000201000000 +010100230101000c0100004a010007010304000105000701030400010502020201030202 +0503010000080100000201000001010000020100000a0100000301000002010000010101 +00010100009a01010081010100080100000601000001010000080103000a010000010100 +000401000022010100080100000201000001010100010100000101010001010000040100 +000501000002010000020100000101000002010000030100000601000002010000020100 +000101010001010000080100000201000001010000020100000101010001010000030100 +000301010001010000010100000201000004010000050100000201000002010000010101 +0001010000220101000b0100004b01000701030300010501070103040001050202020103 +020205030100000c010000010100000e0100000701000001010000020100009a01010081 +0101000701000007010000010100000c010000090100000101000005010000210101000c +010000010100000201000001010000020100000401000005010000020100000901000003 +010000060100000201000002010000010100000201000008010000050100000201000001 +010000020100000301000003010000050100000201000004010000050100000201000002 +01000001010000260101000b0100004b0100070103030001050207010303000105020202 +01030202050301000009010300010100000e0100000401030001010000020100009a0101 +00810101000801000006010000010100000c010000090100000101000004010000220101 +000901030001010000020100000101000002010000040100000501000002010000060103 +000301000006010000020100000201000001010000020100000801000005010000020100 +000101000002010000030100000301000005010000020100000401000005010000020104 +0001010000260101000b0100004b01000701030200010503070103030001050202020103 +020205030100000801000002010000010100000e01000003010000020100000101000002 +0100009a0101008101010009010000050100000101000008010000020100000901000001 +010000030100002301010008010000020100000101000002010000010100000201000004 +010000050100000201000005010000020100000301000006010000020100000201000001 +010000020100000801000005010000020100000101000002010000030100000301000005 +0100000201000004010000050100000201000005010000260101000a0100004c01000701 +030200010504070103020001050202020103020205030100000801000002010000010100 +00020100000a010000030100000201000001010100010100009a010100810101000a0100 +000401000001010000030101000201000002010000030101000301000001010000020100 +002401010008010000020100000101010001010000010101000101000004010000050100 +000201000002010000010100000201000003010000060100000201000002010000010100 +000201000008010000020100000101000002010000010100000201000003010000030100 +0005010000020100000401000005010000020100000201000001010000260101000a0100 +004c01000701030100010505070103020001050202020103020205030100000901030002 +0102000c0101000201030001010000000101009b010100810101000b0100000401010004 +010100030102000401010004010100020100002501010009010300010100000001010002 +010000000101000501000005010000030102000301030004010100040100000301020002 +010000020100000901020003010200020100000201000004010100010100000601020005 +010000050100000301020002010000260101000a0100004c010007010301000105060701 +030100010502020201030202050301000015010500af010100810101000c010000230100 +00260101000f010000050100003c01050068010100580100070103000001050707010301 +000105020202010302020503010000cb01010081010100590101000f01000005010000ab +010100580100070103000001050807010300000105020202010302020503010000cb0101 +0081010100590101000f01000005010000ab01010058010007010001070b030000010502 +0202010302020503010000cb0101008101010059010100c301010058010007010000070d +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +030e000105020202010302020503010000cb0101008101010059010100c3010100580100 +0701001005020202010302020503010000cb0101008101010059010100c3010100580100 +0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502 +020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503 +080009cb08000100098101010959010109c301010958010007010001050a070100010502 +0202010302020503080009cb08000100090b0101094e0101092201010959010109c30101 +0958010007010001050a0701000105020202010302020503080009cb08000100090a0100 +091c0100092a01000908010009210101090c0100092a0100091f010109c3010109580100 +07010001050a07010001050202020103020205030800091a080009af08000100090a0100 +0905010009050101090c010009040101090a010209020104090a01010902010009070100 +09210101090b010009040101090a010209020104090a010109020100091e0101091a0100 +09a70101090901020903010209020104093c010007010001050a07010001050202020103 +020205030800091a080009af08000100090a0100090401010904010009010100090a0100 +090401000901010009080100090201000901010009020100090901000901010009020100 +0906010009210101090a0100090401000901010009080100090201000901010009020100 +090901000901010009020100091d0101091a010009a70101090801000902010009010100 +090201000901010009020100093c010007010001050a0701000105020202010302020503 +0800090908020903080209030801090008000902080209a908000100090a010009030100 +090001000904010009010100090901000905010009010100090c01000905010009090100 +09010100090301000905010009210101090901000905010009010100090c010009050100 +090901000901010009030100091c01010909010209030102090301010900010009020102 +090a01020903010209020100090001010902010009020100090201020902010009000101 +09700101090c01000905010009050100093c010007010001050a07010001050202020103 +020205030800090808000902080009010800090208000901080009010801090108000902 +080009a808000100090a0100090501000904010009010100090801000906010009010100 +090c010009040100090a0100090101000904010009040100092101010908010009060100 +09010100090c010009040100090a01000901010009040100091b01010908010009020100 +090101000902010009010100090101010901010009020100090801000902010009010100 +090201000901010109010100090101000902010009010100090201000901010109010100 +096f0101090c01000905010009040100093d010007010001050a07010001050202020103 +0202050308000908080009050800090208000901080009020800090108000902080009a8 +0800010009080101090601000904010009010100090701000907010009010100090b0100 +09050100090a0100090101000905010009040101091f0101090701000907010009010100 +090b010009050100090a01000901010009050100091a0101090801000905010009020100 +090101000902010009010100090201000908010009050100090201000901010009050100 +0902010009010100090201000901010009730101090b01000905010009050100093d0100 +07010001050a070100010502020201030202050308000908080009050800090208000901 +0800090208000901080409a808000100090a010009050100090401000901010009080100 +0906010009010100090a010009060100090a010009010100090401000904010009210101 +090801000906010009010100090a010009060100090a01000901010009040100091b0101 +090801000905010009020100090101000902010009010104090901020902010409010100 +0906010009000100090201040901010009730101090a01000905010009060100093d0100 +07010001050a070100010502020201030202050308000908080009050800090208000901 +0800090208000901080009ac08000100090a010009050100090401000901010009090100 +09050100090101000909010009060100090b010009010100090301000905010009210101 +0909010009050100090101000909010009060100090b01000901010009030100091c0101 +090801000905010009020100090101000902010009010100091001000901010009050100 +0906010009000100090201000905010009730101090901000905010009060100093e0100 +07010001050a070100010502020201030202050308000908080009020800090108000902 +08000901080009010801090108000902080009a808000100090a01000905010009040100 +090101000903010109040100090401000901010009030101090201000907010009050101 +0903010009010100090201000906010009210101090a0100090401000901010009030101 +090201000907010009050101090301000901010009020100091d01010908010009020100 +090101000902010009010100090101010901010009020100090801000902010009010100 +090201000901010009070100090301000902010009010100097301010908010009050100 +09070100093e010007010001050a07010001050202020103020205030800090908020903 +080209030801090008000902080209a908000100090a0100090301040903010109040101 +090501000904010109040101090201040903010009050101090401010902010009070100 +09210101090b010009040101090401010902010409030100090501010904010109020100 +091e01010909010209030102090301010900010009020102090a01020903010209020100 +09070100090401020902010009730101090801040901010409030100093e010007010001 +050a0701000105020202010302020503080009cb08000100090a01000914010009060100 +092a01000908010009210101090c0100092a0100091f0101092301050999010109580100 +07010001050a0701000105020202010302020503080009cb08000100090b010109100101 +093b0101092201010959010109c301010958010007010001050a07010001050202020103 +02020503080009cb08000100098101010959010109c301010958010007010001050a0701 +000105020202010302020503080009cb08000100098101010959010109c3010109580100 +07010001050a0701000105020202010302020503080009cb080001000981010109590101 +09c301010958010007010001050a0701000105020202010302020503080009cb08000100 +098101010959010109c301010958010007010001050a0701000105020202010302020503 +080009cb08000100098101010959010109c301010958010007010001050a070100010502 +020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503 +08cd01ff01ff010007010001050a0701000105020202010302020503080009cb08000100 +098101010959010109c301010958010007010001050a0701000105020202010302020503 +080009cb08000100090b0101094e0101092201010959010109c301010958010007010001 +050a0701000105020202010302020503080009cb08000100090a0100091c0100092a0100 +0908010009210101090c0100092a0100091f010109c301010958010007010001050a0701 +0001050202020103020205030800091a080009af08000100090a01000905010009050100 +090d010009040101090a010209020104090a0101090201000907010009210101090b0100 +09040101090a010209020104090a010109020100091e0101091a010009a7010109090102 +090301020944010007010001050a07010001050202020103020205030800091a080009af +08000100090a01000904010109040101090c010009040100090101000908010009020100 +09010100090201000909010009010100090201000906010009210101090a010009040100 +0901010009080100090201000901010009020100090901000901010009020100091d0101 +091a010009a70101090801000902010009010100090201000943010007010001050a0701 +000105020202010302020503080009090802090308020903080109000800090208020909 +0800090008010903080209020801090008000903080209030802097f08000100090a0100 +09030100090001000903010009000100090b01000905010009010100090c010009050100 +0909010009010100090301000905010009210101090901000905010009010100090c0100 +09050100090901000901010009030100091c010109090102090301020903010109000100 +09020102090a010209030102090201000900010109020100090201000902010209020100 +0900010109700101090c0100090501000943010007010001050a07010001050202020103 +020205030800090808000902080009010800090208000901080009010801090108000902 +080009080801090108000901080009020800090108000900080009000800090108000902 +08000901080009020800097e08000100090a01000905010009050100090a010009060100 +09010100090c010009040100090a01000901010009040100090401000921010109080100 +0906010009010100090c010009040100090a01000901010009040100091b010109080100 +090201000901010009020100090101000901010109010100090201000908010009020100 +090101000902010009010101090101000901010009020100090101000902010009010101 +09010100096f0101090c0100090501000943010007010001050a07010001050202020103 +020205030800090808000905080009020800090108000902080009010800090208000908 +080009020800090508000901080009000800090008000901080009020800090108000982 +08000100090801010906010009050100090901000907010009010100090b010009050100 +090a0100090101000905010009040101091f0101090701000907010009010100090b0100 +09050100090a01000901010009050100091a010109080100090501000902010009010100 +090201000901010009020100090801000905010009020100090101000905010009020100 +09010100090201000901010009730101090a0101090401010944010007010001050a0701 +000105020202010302020503080009080800090508000902080009010800090208000901 +08040908080009020800090208030901080009000800090008000901080409020802097f +08000100090a01000905010009050100090a01000906010009010100090a010009060100 +090a010009010100090401000904010009210101090801000906010009010100090a0100 +09060100090a01000901010009040100091b010109080100090501000902010009010100 +090201000901010409090102090201040901010009060100090001000902010409010100 +09730101090c0100090501000943010007010001050a0701000105020202010302020503 +0800090808000905080009020800090108000902080009010800090c0800090208000901 +0800090208000901080009000800090008000901080009090800097e08000100090a0100 +0905010009050100090b010009050100090101000909010009060100090b010009010100 +0903010009050100092101010909010009050100090101000909010009060100090b0100 +0901010009030100091c0101090801000905010009020100090101000902010009010100 +0910010009010100090501000906010009000100090201000905010009730101090c0100 +090501000943010007010001050a07010001050202020103020205030800090808000902 +080009010800090208000901080009010801090108000902080009080800090208000901 +08000902080009010800090008000900080009010800090208000901080009020800097e +08000100090a010009050100090501000905010109040100090401000901010009030101 +0902010009070100090501010903010009010100090201000906010009210101090a0100 +090401000901010009030101090201000907010009050101090301000901010009020100 +091d01010908010009020100090101000902010009010100090101010901010009020100 +090801000902010009010100090201000901010009070100090301000902010009010100 +09730101090801000902010009010100090201000943010007010001050a070100010502 +020201030202050308000909080209030802090308010900080009020802090908000902 +0800090208030901080009000800090008000902080209030802097f08000100090a0100 +090301040901010409030101090501000904010109040101090201040903010009050101 +09040101090201000907010009210101090b010009040101090401010902010409030100 +090501010904010109020100091e01010909010209030102090301010900010009020102 +090a01020903010209020100090701000904010209020100097301010909010209030102 +0944010007010001050a070100010502020201030202050308000923080509a108000100 +090a01000914010009060100092a01000908010009210101090c0100092a0100091f0101 +09230105099901010958010007010001050a0701000105020202010302020503080009cb +08000100090b010109100101093b0101092201010959010109c301010958010007010001 +050a0701000105020202010302020503080009cb08000100098101010959010109c30101 +0958010007010001050a0701000105020202010302020503080009cb0800010009810101 +0959010109c301010958010007010001050a0701000105020202010302020503080009cb +08000100098101010959010109c301010958010007010001050a07010001050202020103 +02020503080009cb08000100098101010959010109c301010958010007010001050a0701 +000105020202010302020503080009cb08000100098101010959010109c3010109580100 +07010001050a070100010502020201030202050308cd01ff01ff010007010001050a0701 +00010502020201030202050308cd01ff01ff010007010001050a07010001050202020103 +02020503080009cb08000100098101010959010109c301010958010007010001050a0701 +000105020202010302020503080009cb08000100090b0101094701010929010109590101 +09c301010958010007010001050a0701000105020202010302020503080009cb08000100 +090a010009150100092a01000908010009280101090c0100092a0100091f010109c30101 +0958010007010001050a07010001050202020103020205030800091d08000908080009a2 +08000100090a010009040102090c010009040101090b010009030104090a010109020100 +0907010009280101090b010009040101090b010009030104090a010109020100091e0101 +09180100090a01000922010209770101090a0100094c010007010001050a070100010502 +02020103020205030800091d080009ac08000100090a01000903010009020100090a0100 +090401000901010009090101090301000902010009090100090101000902010009060100 +09280101090a010009040100090101000909010109030100090201000909010009010100 +09020100091d010109180100090a0100092401000977010109090101094c010007010001 +050a07010001050202020103020205030800090908020903080209030802090208000901 +0800090308020903080209030802099408000100090a0100090301000902010009090100 +090501000901010009080100090001000907010009090100090101000903010009050100 +092801010909010009050100090101000908010009000100090701000909010009010100 +09030100091c010109080100090001010903010209020104090801000901010009030102 +090201000900010109020100090001010903010209050100097701010908010009000100 +094c010007010001050a0701000105020202010302020503080009080800090208000901 +080009020800090108000902080009010800090008000906080009020800090208000901 +080009020800099308000100090a01000903010009020100090801000906010009010100 +090a010009060100090a0100090101000904010009040100092801010908010009060100 +09010100090a010009060100090a01000901010009040100091b01010908010109010100 +090101000902010009030100090a01000900010009030100090201000901010109010100 +090101010901010009010100090201000904010009770101090a0100094c010007010001 +050a07010001050202020103020205030800090808000905080009020800090108000902 +080009010801090708000902080009020800090108000997080001000908010109050102 +090801000907010009010100090a010009060100090a0100090101000905010009040101 +09260101090701000907010009010100090a010009060100090a01000901010009050100 +091a01010908010009020100090101000902010009030100090a01010904010009020100 +09010100090501000902010009010100090201000904010009770101090a0100094c0100 +07010001050a070100010502020201030202050308000908080009050800090208000901 +08000902080009010801090708000902080409020802099408000100090a010009030100 +09020100090801000906010009010100090a010009060100090a01000901010009040100 +0904010009280101090801000906010009010100090a010009060100090a010009010100 +09040100091b010109080100090201000901010409030100090a01010904010409010100 +0905010009020100090101040904010009770101090a0100094c010007010001050a0701 +000105020202010302020503080009080800090508000902080009010800090208000901 +080009000800090608000902080009090800099308000100090a01000903010009020100 +090901000905010009010100090a010009050100090b0100090101000903010009050100 +09280101090901000905010009010100090a010009050100090b01000901010009030100 +091c010109080100090201000901010009070100090a0100090001000903010009050100 +0905010009020100090101000908010009770101090a0100094c010007010001050a0701 +000105020202010302020503080009080800090208000901080009020800090108000902 +080009010800090108000905080009020800090208000901080009020800099308000100 +090a01000903010009020100090301010904010009040100090101000903010109040100 +09050100090501010903010009010100090201000906010009280101090a010009040100 +0901010009030101090401000905010009050101090301000901010009020100091d0101 +0908010009020100090101000902010009030100090a0100090101000902010009020100 +09010100090501000902010009010100090201000904010009770101090a0100094c0100 +07010001050a070100010502020201030202050308000909080209030802090308020902 +080009020800090408000903080209030802099408000100090a01000904010209040101 +090501000904010109040101090201040903010009050101090401010902010009070100 +09280101090b010009040101090401010902010409030100090501010904010109020100 +091e01010908010009020100090201020905010109080100090201000902010209020100 +090501000902010009020102090501000977010109080104094a010007010001050a0701 +000105020202010302020503080009cb08000100090a0100090d010009060100092a0100 +0908010009280101090c0100092a0100091f0101091c010509a001010958010007010001 +050a0701000105020202010302020503080009cb08000100090b010109090101093b0101 +092901010959010109c301010958010007010001050a0701000105020202010302020503 +080009cb08000100098101010959010109c301010958010007010001050a070100010502 +0202010302020503080009cb08000100098101010959010109c301010958010007010001 +050a0701000105020202010302020503080009cb08000100098101010959010109c30101 +0958010007010001050a0701000105020202010302020503080009cb0800010009810101 +0959010109c301010958010007010001050a0701000105020202010302020503080009cb +08000100098101010959010109c301010958010007010001050a07010001050202020103 +0202050308cd01ff01ff010007010001050a070100010502020201030202050301ff01ff +01ce07010001050a0701000105020202010302020503010000cb01010081010100590101 +00c301010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701 +00010502020201030202050301000010010200090100000d0102000a010200100100007b +010100810101000b010000040101000b010000050100000c010100020100001e01010010 +010200090100000d010200930101000a0101004b010007010001050a0701000105020202 +01030202050301000012010000090100000f0100000c010000100100007b010100810101 +000a010000040100000101000009010100040101000b01000001010000020100001d0101 +0012010000090100000f0100009301010009010000010100004a010007010001050a0701 +000105020202010302020503010000090101000001000004010000030102000201000000 +01010003010200050100000c010000030102000301020002010000010100000301020071 +01010081010100090100000501000001010000080100000001000003010000000100000b +01000001010000030100001c010100090101000001000004010000030102000201000000 +01010003010200050100000901000000010100030102000201010000010000030102000a +01020003010200020100000001010002010000020100000201020002010000000101003f +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000801000001010100040100000201000002010000010101000101000001010000020100 +00040100000c010000020100000201000001010000020100000101000000010000030100 +000201000070010100810101000801000006010000010100000a010000050100000b0100 +0001010000040100001b0101000801000001010100040100000201000002010000010101 +000101000001010000020100000401000009010100010100000101000002010000010100 +000001000000010000010100000201000008010000020100000101000002010000010101 +00010100000101000002010000010100000201000001010100010100003e010100090100 +00010100004a010007010001050a07010001050202020103020205030100000801000002 +010000040100000201000002010000010100000201000005010000040100000c01000002 +010000020100000101000005010100040100007401010081010100070100000701000001 +0100000a010000050100000b01000001010000050100001a010100080100000201000004 +010000020100000201000001010000020100000501000004010000090100000201000005 +010000010100000001000000010000010100000201000008010000050100000201000001 +01000005010000020100000101000002010000010100004201010009010000010100004a +010007010001050a07010001050202020103020205030100000801000002010000040100 +000201000002010000010100000201000002010300040100000c01000002010000020100 +0001010000050101000501020071010100810101000801000006010000010100000a0100 +00050100000b01000001010000040100001b010100080100000201000004010000020100 +000201000001010000020100000201030004010000090100000201000002010300010100 +000001000000010000010104000901020002010400010100000601000000010000020104 +00010100004201010009010000010100004a010007010001050a07010001050202020103 +020205030100000801000002010000040100000201000002010000010100000201000001 +01000002010000040100000c010000020100000201000001010000050100000001000007 +01000070010100810101000901000005010000010100000a010000050100000b01000001 +010000030100001c01010008010000020100000401000002010000020100000101000002 +010000010100000201000004010000090100000201000001010000020100000101000000 +010000000100000101000010010000010100000501000006010000000100000201000005 +0100004201010009010000010100004a010007010001050a070100010502020201030202 +050301000008010000010101000401000002010000020100000101010001010000010100 +0002010000040100000c0100000201000002010000010100000201000001010000010100 +00020100000201000070010100810101000a010000040100000101000003010100040100 +0005010000050101000301000001010000020100001d0101000801000001010100040100 +000201000002010000010101000101000001010000020100000401000009010000020100 +000101000002010000010100000001000000010000010100000201000008010000020100 +000101000002010000010100000701000003010000020100000101000042010100090100 +00010100004a010007010001050a07010001050202020103020205030100000901010000 +0100000401000003010200020100000001010003010300040100000c0100000301020003 +01020002010000020100000201020071010100810101000b010000040101000401010002 +010400010104000301010004010100020100001e01010009010100000100000401000003 +010200020100000001010003010300040100000901000002010000020103000101000000 +01000000010000020102000a010200030102000201000007010000040102000201000042 +0101000a0101004b010007010001050a07010001050202020103020205030100000c0100 +002301050093010100810101000c0100002a0100001f0101000c010000230105001c0105 +006801010058010007010001050a07010001050202020103020205030100000801000002 +010000bd01010081010100590101000801000002010000b501010058010007010001050a +070100010502020201030202050301000009010200be0101008101010059010100090102 +00b601010058010007010001050a0701000105020202010302020503010000cb01010081 +01010059010100c301010058010007010001050a07010001050202020103020205030100 +00cb0101008101010059010100c301010058010007010001050a07010001050202020103 +02020503010000cb0101008101010059010100c301010058010007010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 +01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb +0101008101010059010100c301010058010007010001050a070100010502020201030202 +0503010000cb0101008101010059010100c301010058010007010001050a070100010502 +0202010302020503010000cb010100810101000c0100002a0100001f010100c301010058 +010007010001050a070100010502020201030202050301000010010200090100000d0102 +009b010100810101000b010000040101000b010000050100000c010100020100001e0101 +0010010200090100000d010200930101000a0101004b010007010001050a070100010502 +020201030202050301000012010000090100000f0100009b010100810101000a01000004 +0100000101000009010100040101000b01000001010000020100001d0101001201000009 +0100000f0100009301010009010000010100004a010007010001050a0701000105020202 +010302020503010000090101000001000004010000030102000201000000010100030102 +000501000009010000000101000301020002010100000100000301020003010200710101 +0081010100090100000501000001010000080100000001000003010000000100000b0100 +0001010000030100001c0101000901010000010000040100000301020002010000000101 +0003010200050100000901000000010100030102000201010000010000030102000a0102 +0003010200020100000001010002010000020100000201020002010000000101003f0101 +0009010000010100004a010007010001050a070100010502020201030202050301000008 +010000010101000401000002010000020100000101010001010000010100000201000004 +010000090101000101000001010000020100000101000000010000000100000101000002 +010000010100000201000070010100810101000801000006010000010100000a01000005 +0100000b01000001010000040100001b0101000801000001010100040100000201000002 +010000010101000101000001010000020100000401000009010100010100000101000002 +010000010100000001000000010000010100000201000008010000020100000101000002 +01000001010100010100000101000002010000010100000201000001010100010100003e +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000801000002010000040100000201000002010000010100000201000005010000040100 +000901000002010000050100000101000000010000000100000101000002010000010100 +0074010100810101000701000007010000010100000a010000050100000b010000010100 +00050100001a010100080100000201000004010000020100000201000001010000020100 +000501000004010000090100000201000005010000010100000001000000010000010100 +000201000008010000050100000201000001010000050100000201000001010000020100 +00010100004201010009010000010100004a010007010001050a07010001050202020103 +020205030100000801000002010000040100000201000002010000010100000201000002 +010300040100000901000002010000020103000101000000010000000100000101040002 +01020071010100810101000801000006010000010100000a010000050100000b01000001 +010000040100001b01010008010000020100000401000002010000020100000101000002 +010000020103000401000009010000020100000201030001010000000100000001000001 +010400090102000201040001010000060100000001000002010400010100004201010009 +010000010100004a010007010001050a0701000105020202010302020503010000080100 +000201000004010000020100000201000001010000020100000101000002010000040100 +000901000002010000010100000201000001010000000100000001000001010000090100 +0070010100810101000901000005010000010100000a010000050100000b010000010100 +00030100001c010100080100000201000004010000020100000201000001010000020100 +000101000002010000040100000901000002010000010100000201000001010000000100 +000001000001010000100100000101000005010000060100000001000002010000050100 +004201010009010000010100004a010007010001050a0701000105020202010302020503 +010000080100000101010004010000020100000201000001010100010100000101000002 +010000040100000901000002010000010100000201000001010000000100000001000001 +01000002010000010100000201000070010100810101000a010000040100000101000003 +0101000401000005010000050101000301000001010000020100001d0101000801000001 +010100040100000201000002010000010101000101000001010000020100000401000009 +010000020100000101000002010000010100000001000000010000010100000201000008 +010000020100000101000002010000010100000701000003010000020100000101000042 +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000901010000010000040100000301020002010000000101000301030004010000090100 +000201000002010300010100000001000000010000020102000301020071010100810101 +000b010000040101000401010002010400010104000301010004010100020100001e0101 +000901010000010000040100000301020002010000000101000301030004010000090100 +000201000002010300010100000001000000010000020102000a01020003010200020100 +00070100000401020002010000420101000a0101004b010007010001050a070100010502 +02020103020205030100000c0100002301050093010100810101000c0100002a0100001f +0101000c010000230105001c0105006801010058010007010001050a0701000105020202 +0103020205030100000801000002010000bd010100810101005901010008010000020100 +00b501010058010007010001050a070100010502020201030202050301000009010200be +010100810101005901010009010200b601010058010007010001050a0701000105020202 +010302020503010000cb0101008101010059010100c301010058010007010001050a0701 +000105020202010302020503010000cb0101008101010059010100c30101005801000701 +0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 +0058010007010001050a0701000105020202010302020503010000cb0101008101010059 +010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce +07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 +05020202010302020503010000cb0101008101010059010100c301010058010007010001 +050a0701000105020202010302020503010000cb0101008101010059010100c301010058 +010007010001050a0701000105020202010302020503010000cb010100810101000c0100 +002a0100001f010100c301010058010007010001050a0701000105020202010302020503 +01000010010200090100000d0102004301000056010100810101000b010000040101000b +010000050100000c010100020100001e01010010010200090100000d010200930101000a +0101004b010007010001050a070100010502020201030202050301000012010000090100 +000f0100004301000056010100810101000a010000040100000101000009010100040101 +000b01000001010000020100001d01010012010000090100000f01000093010100090100 +00010100004a010007010001050a07010001050202020103020205030100000901010000 +010000040100000301020002010000000101000301020005010000090100000001010003 +010200020101000001000003010200030102000a01020002010000020100000101040054 +01010081010100090100000501000001010000080100000001000003010000000100000b +01000001010000030100001c010100090101000001000004010000030102000201000000 +01010003010200050100000901000000010100030102000201010000010000030102000a +01020003010200020100000001010002010000020100000201020002010000000101003f +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000801000001010100040100000201000002010000010101000101000001010000020100 +000401000009010100010100000101000002010000010100000001000000010000010100 +000201000001010000020100000801000002010000010100000201000003010000560101 +00810101000801000006010000010100000a010000050100000b01000001010000040100 +001b01010008010000010101000401000002010000020100000101010001010000010100 +000201000004010000090101000101000001010000020100000101000000010000000100 +000101000002010000080100000201000001010000020100000101010001010000010100 +0002010000010100000201000001010100010100003e01010009010000010100004a0100 +07010001050a070100010502020201030202050301000008010000020100000401000002 +010000020100000101000002010000050100000401000009010000020100000501000001 +01000000010000000100000101000002010000010100000c010000020100000201000000 +0100000401000056010100810101000701000007010000010100000a010000050100000b +01000001010000050100001a010100080100000201000004010000020100000201000001 +010000020100000501000004010000090100000201000005010000010100000001000000 +010000010100000201000008010000050100000201000001010000050100000201000001 +01000002010000010100004201010009010000010100004a010007010001050a07010001 +050202020103020205030100000801000002010000040100000201000002010000010100 +000201000002010300040100000901000002010000020103000101000000010000000100 +000101040002010200090104000301000005010000560101008101010008010000060100 +00010100000a010000050100000b01000001010000040100001b01010008010000020100 +000401000002010000020100000101000002010000020103000401000009010000020100 +000201030001010000000100000001000001010400090102000201040001010000060100 +000001000002010400010100004201010009010000010100004a010007010001050a0701 +000105020202010302020503010000080100000201000004010000020100000201000001 +010000020100000101000002010000040100000901000002010000010100000201000001 +010000000100000001000001010000090100000801000006010000000100000401000056 +010100810101000901000005010000010100000a010000050100000b0100000101000003 +0100001c0101000801000002010000040100000201000002010000010100000201000001 +010000020100000401000009010000020100000101000002010000010100000001000000 +010000010100001001000001010000050100000601000000010000020100000501000042 +01010009010000010100004a010007010001050a07010001050202020103020205030100 +000801000001010100040100000201000002010000010101000101000001010000020100 +000401000009010000020100000101000002010000010100000001000000010000010100 +000201000001010000020100000801000002010000010100000201000003010000560101 +00810101000a010000040100000101000003010100040100000501000005010100030100 +0001010000020100001d0101000801000001010100040100000201000002010000010101 +000101000001010000020100000401000009010000020100000101000002010000010100 +000001000000010000010100000201000008010000020100000101000002010000010100 +00070100000301000002010000010100004201010009010000010100004a010007010001 +050a07010001050202020103020205030100000901010000010000040100000301020002 +010000000101000301030004010000090100000201000002010300010100000001000000 +01000002010200030102000a01020002010000020100000401010054010100810101000b +010000040101000401010002010400010104000301010004010100020100001e01010009 +010100000100000401000003010200020100000001010003010300040100000901000002 +01000002010300010100000001000000010000020102000a010200030102000201000007 +0100000401020002010000420101000a0101004b010007010001050a0701000105020202 +0103020205030100000c010000230105002301050069010100810101000c0100002a0100 +001f0101000c010000230105001c0105006801010058010007010001050a070100010502 +02020103020205030100000801000002010000bd01010081010100590101000801000002 +010000b501010058010007010001050a0701000105020202010302020503010000090102 +00be010100810101005901010009010200b601010058010007010001050a070100010502 +0202010302020503010000cb0101008101010059010100c301010058010007010001050a +0701000105020202010302020503010000cb0101008101010059010100c3010100580100 +07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 +01010058010007010001050a0701000105020202010302020503010000cb010100810101 +0059010100c301010058010007010001050a070100010502020201030202050301ff01ff +01ce07010001050a070100010502020201030202050308cd01ff01ff010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100000b0101004e +0101002201010059010100c301010058010007010001050a070100010502020201030202 +0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a +0100001f010100c301010058010007010001050a07010001050202020103020205030800 +00cb08000100000a01000005010000040102000c010000040101000d010000020102000b +0101000201000007010000210101000b010000040101000d010000020102000b01010002 +0100001e0101002001010018010000150100006f01010009010200020104004301000701 +0001050a0701000105020202010302020503080000cb08000100000a0100000401010003 +010000020100000a01000004010000010100000b01010001010000020100000901000001 +0100000201000006010000210101000a01000004010000010100000b0101000101000002 +0100000901000001010000020100001d0101001f0100001a010000150100006f01010008 +010000020100000101000047010007010001050a07010001050202020103020205030800 +000908010000080000020802000908000000080100030802000208010000080000030802 +00030802008d08000100000a010000030100000001000007010000090100000501000001 +0100000a0100000001000005010000090100000101000003010000050100002101010009 +01000005010000010100000a01000000010000050100000901000001010000030100001c +0101000901010000010000020102000b0100000301000000010100030102000201000000 +0101000201040002010200020100000001010003010100000100006f0101000801000002 +0100000101000047010007010001050a0701000105020202010302020503080000080800 +000108010001080000020800000808010001080000010800000208000001080000000800 +0000080000010800000208000001080000020800008c08000100000a0100000501000007 +010000080100000601000001010000090100000101000005010000090100000101000004 +010000040100002101010008010000060100000101000009010000010100000501000009 +01000001010000040100001b010100080100000101010001010000020100000801040001 +010100010100000101000002010000010101000101000003010000030100000201000001 +0101000101000001010000010101006f0101000801000002010000010103004401000701 +0001050a07010001050202020103020205030800000808000002080000010800000c0800 +000208000005080000010800000008000000080000010800000208000001080000900800 +010000080101000601000006010000080100000701000001010000080100000201000003 +0101000a0100000101000005010000040101001f01010007010000070100000101000008 +01000002010000030101000a01000001010000050100001a010100080100000201000001 +0100000e0100000301000005010000020100000101000002010000030100000301000002 +010000010100000201000001010000020100006f01010009010200060100004301000701 +0001050a0701000105020202010302020503080000080800000208000002080200090800 +00020800000208030001080000000800000008000001080400020802008d08000100000a +01000005010000050100000a010000060100000101000008010000020100000501000009 +010000010100000401000004010000210101000801000006010000010100000801000002 +010000050100000901000001010000040100001b0101000801000002010000020102000b +010000030100000501000002010000010100000201000003010000030104000101000002 +01000001010000020100006f01010008010000020100000501000043010007010001050a +070100010502020201030202050308000008080000020800000508000008080000020800 +00010800000208000001080000000800000008000001080000090800008c08000100000a +01000005010000040100000c010000050100000101000008010500040100000901000001 +010000030100000501000021010100090100000501000001010000080105000401000009 +01000001010000030100001c0101000801000002010000050100000a0100000301000005 +010000020100000101000002010000030100000301000005010000020100000101000002 +0100006f0101000801000002010000010100000201000043010007010001050a07010001 +050202020103020205030800000808000001080100010800000208000008080000020800 +000108000002080000010800000008000000080000010800000208000001080000020800 +008c08000100000a01000005010000030100000701010004010000040100000101000003 +010100060100000101000002010000030101000301000001010000020100000601000021 +0101000a0100000401000001010000030101000601000001010000020100000301010003 +01000001010000020100001d010100080100000101010001010000020100000a01000003 +010000050100000201000001010000020100000301000003010000020100000101000002 +01000001010000010101006f010100080100000201000001010000020100004301000701 +0001050a0701000105020202010302020503080000090801000008000002080200090800 +00020800000208030001080000000800000008000002080200030802008d08000100000a +010000030104000101040003010100050100000401010004010100060100000201020004 +010100040101000201000007010000210101000b01000004010100040101000601000002 +0102000401010004010100020100001e0101000901010000010000020102000b01000003 +010000060102000201000002010000040101000201020002010000020100000201010000 +0100006f010100090102000301020044010007010001050a070100010502020201030202 +05030800000c08000007080500af08000100000a01000014010000060100002a01000008 +010000210101000c0100002a0100001f0101000c01000007010500a70101005801000701 +0001050a07010001050202020103020205030800000808000002080000bd08000100000b +010100100101003b01010022010100590101000801000002010000b50101005801000701 +0001050a070100010502020201030202050308000009080200be08000100008101010059 +01010009010200b601010058010007010001050a07010001050202020103020205030800 +00cb08000100008101010059010100c301010058010007010001050a0701000105020202 +010302020503080000cb08000100008101010059010100c301010058010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100008101010059 +010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff +010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a +0701000105020202010302020503080000cb08000100008101010059010100c301010058 +010007010001050a0701000105020202010302020503080000cb08000100000b0101004e +0101002201010059010100c301010058010007010001050a070100010502020201030202 +0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a +0100001f010100c301010058010007010001050a07010001050202020103020205030800 +00110800000308000010080000010800009e08000100000a01000005010000040102000c +010000040101000d010000050100000a0101000201000007010000210101000b01000004 +0101000d010000050100000a010100020100001e010100c30101000a0100000401020044 +010007010001050a07010001050202020103020205030800001108000003080000100800 +00010800009e08000100000a0100000401010003010000020100000a0100000401000001 +0100000b0101000401010009010000010100000201000006010000210101000a01000004 +010000010100000b010100040101000901000001010000020100001d010100c301010009 +010100030100000201000043010007010001050a07010001050202020103020205030800 +0009080100000800000108040001080000010800000a0801000008000001080000000801 +009b08000100000a0100000301000000010000070100000901000005010000010100000a +010000000100000301000000010000090100000101000003010000050100002101010009 +01000005010000010100000a010000000100000301000000010000090100000101000003 +0100001c010100c30101000801000000010000030100000201000043010007010001050a +070100010502020201030202050308000008080000010801000308000003080000000800 +000a0800000108010001080100010800009a08000100000a010000050100000701000008 +010000060100000101000009010000010100000201000001010000090100000101000004 +010000040100002101010008010000060100000101000009010000010100000201000001 +0100000901000001010000040100001b010100c30101000a010000030100000201000043 +010007010001050a07010001050202020103020205030800000808000002080000030800 +00030801000b0800000208000001080000020800009a0800010000080101000601000005 +010100080100000701000001010000080100000201000001010000020100000901000001 +01000005010000040101001f010100070100000701000001010000080100000201000001 +010000020100000901000001010000050100001a010100c30101000a0100000401030043 +010007010001050a07010001050202020103020205030800000808000002080000030800 +00030801000b0800000208000001080000020800009a08000100000a0100000501000007 +010000080100000601000001010000080100000201000001010000020100000901000001 +010000040100000401000021010100080100000601000001010000080100000201000001 +010000020100000901000001010000040100001b010100c30101000a0100000701000043 +010007010001050a07010001050202020103020205030800000808000002080000030800 +0003080000000800000a0800000208000001080000020800009a08000100000a01000005 +010000070100000901000005010000010100000801050000010500080100000101000003 +010000050100002101010009010000050100000101000008010500000105000801000001 +010000030100001c010100c30101000a0100000701000043010007010001050a07010001 +050202020103020205030800000808000001080100030800000308000001080000090800 +000108010001080100010800009a08000100000a01000005010000030100000201000003 +010100040100000401000001010000030101000601000005010000030101000301000001 +0100000201000006010000210101000a0100000401000001010000030101000601000005 +010000030101000301000001010000020100001d010100c30101000a0100000301000002 +01000043010007010001050a070100010502020201030202050308000009080100000800 +00040801000108000002080000090801000008000001080000000801009b08000100000a +010000030104000201020004010100050100000401010004010100060100000501000003 +010100040101000201000007010000210101000b01000004010100040101000601000005 +0100000301010004010100020100001e010100c301010008010400020102004401000701 +0001050a07010001050202020103020205030800000c0800000e080500a808000100000a +01000014010000060100002a01000008010000210101000c0100002a0100001f010100c3 +01010058010007010001050a070100010502020201030202050308000008080000020800 +00bd08000100000b010100100101003b0101002201010059010100c30101005801000701 +0001050a070100010502020201030202050308000009080200be08000100008101010059 +010100c301010058010007010001070c000105020202010302020503080000cb08000100 +008101010059010100c301010058010007010000070d0001050202020103020205030800 +00cb08000100008101010059010100c30101005801000701030e00010502020201030202 +0503080000cb08000100008101010059010100c30101005801000701030e000105020202 +010302020503080000cb08000100008101010059010100c30101005801000701030e0001 +0502020201030202050308cd01ff01ff01000701030e00010502020201030202050308cd +01ff01ff01000701030e000105020202010302020503080000cb08000100008101010059 +010100c30101005801000701030e000105020202010302020503080000cb08000100000b +0101004e0101002201010059010100c30101005801000701030e00010502020201030202 +0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a +0100001f010100c30101005801000701030e000105020202010302020503080000110800 +000308000010080000010800009e08000100000a01000005010000070100000b01000004 +0101000d010000050100000a0101000201000007010000210101000b010000040101000d +010000050100000a010100020100001e010100c301010008010400020102004401000701 +030e000105020202010302020503080000110800000308000010080000010800009e0800 +0100000a01000004010100060101000a01000004010000010100000b0101000401010009 +010000010100000201000006010000210101000a01000004010000010100000b01010004 +0101000901000001010000020100001d010100c301010008010000050100000201000043 +01000701030e000105020202010302020503080000090801000008000001080400010800 +00010800000a0801000008000001080000000801009b08000100000a0100000301000000 +01000005010000000100000901000005010000010100000a010000000100000301000000 +01000009010000010100000301000005010000210101000901000005010000010100000a +0100000001000003010000000100000901000001010000030100001c010100c301010008 +01000005010000020100004301000701030e000105020202010302020503080000080800 +00010801000308000003080000000800000a0800000108010001080100010800009a0800 +0100000a0100000501000004010000010100000801000006010000010100000901000001 +010000020100000101000009010000010100000401000004010000210101000801000006 +01000001010000090100000101000002010000010100000901000001010000040100001b +010100c30101000801030002010000020100004301000701030e00010502020201030202 +0503080000080800000208000003080000030801000b0800000208000001080000020800 +009a08000100000801010006010000030100000201000007010000070100000101000008 +010000020100000101000002010000090100000101000005010000040101001f01010007 +010000070100000101000008010000020100000101000002010000090100000101000005 +0100001a010100c30101000c010000020102004401000701030e00010502020201030202 +0503080000080800000208000003080000030801000b0800000208000001080000020800 +009a08000100000a01000005010000030100000201000008010000060100000101000008 +010000020100000101000002010000090100000101000004010000040100002101010008 +010000060100000101000008010000020100000101000002010000090100000101000004 +0100001b010100c30101000c01000001010000020100004301000701030e000105020202 +01030202050308000008080000020800000308000003080000000800000a080000020800 +0001080000020800009a08000100000a0100000501000003010500080100000501000001 +010000080105000001050008010000010100000301000005010000210101000901000005 +0100000101000008010500000105000801000001010000030100001c010100c301010008 +0100000201000001010000020100004301000701030e0001050202020103020205030800 +000808000001080100030800000308000001080000090800000108010001080100010800 +009a08000100000a01000005010000070100000301010004010000040100000101000003 +01010006010000050100000301010003010000010100000201000006010000210101000a +010000040100000101000003010100060100000501000003010100030100000101000002 +0100001d010100c3010100080100000201000001010000020100004301000701030e0001 +050202020103020205030800000908010000080000040801000108000002080000090801 +000008000001080000000801009b08000100000a01000003010400050100000301010005 +010000040101000401010006010000050100000301010004010100020100000701000021 +0101000b010000040101000401010006010000050100000301010004010100020100001e +010100c301010009010200030102004401000701030e0001050202020103020205030800 +000c0800000e080500a808000100000a01000014010000060100002a0100000801000021 +0101000c0100002a0100001f010100c30101005801000701030e00010502020201030202 +05030800000808000002080000bd08000100000b010100100101003b0101002201010059 +010100c30101005801000701030e00010502020201030202050308000009080200be0800 +0100008101010059010100c30101005801000701030e0001050202020103020205030800 +00cb08000100008101010059010100c30101005801000701030e00010502020201030202 +0503080000cb08000100008101010059010100c30101005801000701030e000105020202 +010302020503080000cb08000100008101010059010100c30101005801000701030e0001 +05020202010302020503080000cb08000100008101010059010100c30101005801000701 +030e00010502020201030202050308cd01ff01ff01000701030e00010502020201030202 +050308cd01ff01ff01000701030e000105020202010302020503080000cb080001000081 +01010059010100c30101005801000701030e000105020202010302020503080000cb0800 +0100000b0101004e0101002201010059010100c30101005801000701030e000105020202 +010302020503080000cb08000100000a0100001c0100002a01000008010000210101000c +0100002a0100001f010100c30101005801000701030e0001050202020103020205030800 +00110800000308000010080000010800009e08000100000a01000005010000030104000b +010000040101000d010000050100000a0101000201000007010000210101000b01000004 +0101000d010000050100000a010100020100001e010100c3010100090102000301020044 +01000701030e000105020202010302020503080000110800000308000010080000010800 +009e08000100000a01000004010100030100000e01000004010000010100000b01010004 +01010009010000010100000201000006010000210101000a01000004010000010100000b +010100040101000901000001010000020100001d010100c3010100080100000201000001 +010000020100004301000701030e00010502020201030202050308000009080100000800 +000108040001080000010800000a0801000008000001080000000801009b08000100000a +0100000301000000010000030100000d01000005010000010100000a0100000001000003 +010000000100000901000001010000030100000501000021010100090100000501000001 +0100000a0100000001000003010000000100000901000001010000030100001c010100c3 +0101000c010000050100004301000701030e000105020202010302020503080000080800 +00010801000308000003080000000800000a0800000108010001080100010800009a0800 +0100000a0100000501000003010300090100000601000001010000090100000101000002 +010000010100000901000001010000040100000401000021010100080100000601000001 +010000090100000101000002010000010100000901000001010000040100001b010100c3 +0101000c010000050100004301000701030e000105020202010302020503080000080800 +000208000003080000030801000b0800000208000001080000020800009a080001000008 +010100060100000701000007010000070100000101000008010000020100000101000002 +010000090100000101000005010000040101001f01010007010000070100000101000008 +0100000201000001010000020100000901000001010000050100001a010100c30101000a +010100040101004401000701030e00010502020201030202050308000008080000020800 +0003080000030801000b0800000208000001080000020800009a08000100000a01000005 +010000070100000801000006010000010100000801000002010000010100000201000009 +010000010100000401000004010000210101000801000006010000010100000801000002 +01000001010000020100000901000001010000040100001b010100c30101000c01000005 +0100004301000701030e0001050202020103020205030800000808000002080000030800 +0003080000000800000a0800000208000001080000020800009a08000100000a01000005 +010000030100000201000009010000050100000101000008010500000105000801000001 +010000030100000501000021010100090100000501000001010000080105000001050008 +01000001010000030100001c010100c30101000c010000050100004301000701030e0001 +050202020103020205030800000808000001080100030800000308000001080000090800 +000108010001080100010800009a08000100000a01000005010000030100000201000003 +010100040100000401000001010000030101000601000005010000030101000301000001 +0100000201000006010000210101000a0100000401000001010000030101000601000005 +010000030101000301000001010000020100001d010100c3010100080100000201000001 +010000020100004301000701030e00010502020201030202050308000009080100000800 +00040801000108000002080000090801000008000001080000000801009b08000100000a +010000030104000201020004010100050100000401010004010100060100000501000003 +010100040101000201000007010000210101000b01000004010100040101000601000005 +0100000301010004010100020100001e010100c301010009010200030102004401000701 +030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 +010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 +01000701030e0001050202020103020205030800000808000002080000bd08000100000b +010100100101003b0101002201010059010100c30101005801000701030e000105020202 +01030202050308000009080200be08000100008101010059010100c30101005801000701 +030e000105020202010302020503080000cb08000100008101010059010100c301010058 +01000701030e000105020202010302020503080000cb08000100008101010059010100c3 +0101005801000701030e000105020202010302020503080000cb08000100008101010059 +010100c30101005801000701030e000105020202010302020503080000cb080001000081 +01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff +01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202 +010302020503080000cb08000100008101010059010100c30101005801000701030e0001 +05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3 +0101005801000701030e000105020202010302020503080000cb08000100000a0100001c +0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 +030e000105020202010302020503080000110800000308000010080000010800009e0800 +0100000a01000005010000040102000c010000040101000d010000050100000a01010002 +01000007010000210101000b010000040101000d010000050100000a010100020100001e +010100c30101000a0101004b01000701030e000105020202010302020503080000110800 +000308000010080000010800009e08000100000a0100000401010003010000020100000a +01000004010000010100000b010100040101000901000001010000020100000601000021 +0101000a01000004010000010100000b010100040101000901000001010000020100001d +010100c301010009010000010100004a01000701030e0001050202020103020205030800 +0009080100000800000108040001080000010800000a0801000008000001080000000801 +009b08000100000a0100000301000000010000030100000d01000005010000010100000a +010000000100000301000000010000090100000101000003010000050100002101010009 +01000005010000010100000a010000000100000301000000010000090100000101000003 +0100001c010100c301010009010000010100004a01000701030e00010502020201030202 +050308000008080000010801000308000003080000000800000a08000001080100010801 +00010800009a08000100000a01000005010000030100000c010000060100000101000009 +010000010100000201000001010000090100000101000004010000040100002101010008 +010000060100000101000009010000010100000201000001010000090100000101000004 +0100001b010100c301010009010000010100004a01000701030e00010502020201030202 +0503080000080800000208000003080000030801000b0800000208000001080000020800 +009a08000100000801010006010000030103000801000007010000010100000801000002 +0100000101000002010000090100000101000005010000040101001f0101000701000007 +01000001010000080100000201000001010000020100000901000001010000050100001a +010100c301010009010000010100004a01000701030e0001050202020103020205030800 +00080800000208000003080000030801000b0800000208000001080000020800009a0800 +0100000a0100000501000003010000020100000801000006010000010100000801000002 +010000010100000201000009010000010100000401000004010000210101000801000006 +01000001010000080100000201000001010000020100000901000001010000040100001b +010100c301010009010000010100004a01000701030e0001050202020103020205030800 +0008080000020800000308000003080000000800000a0800000208000001080000020800 +009a08000100000a01000005010000030100000201000009010000050100000101000008 +010500000105000801000001010000030100000501000021010100090100000501000001 +01000008010500000105000801000001010000030100001c010100c30101000901000001 +0100004a01000701030e0001050202020103020205030800000808000001080100030800 +000308000001080000090800000108010001080100010800009a08000100000a01000005 +010000030100000201000003010100040100000401000001010000030101000601000005 +0100000301010003010000010100000201000006010000210101000a0100000401000001 +010000030101000601000005010000030101000301000001010000020100001d010100c3 +01010009010000010100004a01000701030e000105020202010302020503080000090801 +0000080000040801000108000002080000090801000008000001080000000801009b0800 +0100000a0100000301040002010200040101000501000004010100040101000601000005 +01000003010100040101000201000007010000210101000b010000040101000401010006 +010000050100000301010004010100020100001e010100c30101000a0101004b01000701 +030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 +010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 +01000701030e0001050202020103020205030800000808000002080000bd08000100000b +010100100101003b0101002201010059010100c30101005801000701030e000105020202 +01030202050308000009080200be08000100008101010059010100c30101005801000701 +030e000105020202010302020503080000cb08000100008101010059010100c301010058 +01000701030e000105020202010302020503080000cb08000100008101010059010100c3 +0101005801000701030e000105020202010302020503080000cb08000100008101010059 +010100c30101005801000701030e000105020202010302020503080000cb080001000081 +01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff +01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202 +010302020503080000cb08000100008101010059010100c30101005801000701030e0001 +05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3 +0101005801000701030e000105020202010302020503080000cb08000100000a0100001c +0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 +030e000105020202010302020503080000110800000308000010080000010800009e0800 +0100000a01000005010000030104000b010000040101000d010000050100000a01010002 +01000007010000210101000b010000040101000d010000050100000a010100020100001e +010100c30101000a01000003010400030101003d01000701030e00010502020201030202 +0503080000110800000308000010080000010800009e08000100000a0100000401010003 +010000020100000a01000004010000010100000b01010004010100090100000101000002 +01000006010000210101000a01000004010000010100000b010100040101000901000001 +010000020100001d010100c3010100090101000301000006010000010100003c01000701 +030e00010502020201030202050308000009080100000800000108040001080000010800 +000a0801000008000001080000000801009b08000100000a010000030100000001000007 +0100000901000005010000010100000a0100000001000003010000000100000901000001 +0100000301000005010000210101000901000005010000010100000a0100000001000003 +010000000100000901000001010000030100001c010100c3010100080100000001000003 +01000006010000010100003c01000701030e000105020202010302020503080000080800 +00010801000308000003080000000800000a0800000108010001080100010800009a0800 +0100000a0100000501000006010000090100000601000001010000090100000101000002 +010000010100000901000001010000040100000401000021010100080100000601000001 +010000090100000101000002010000010100000901000001010000040100001b010100c3 +0101000a0100000301030003010000010100003c01000701030e00010502020201030202 +0503080000080800000208000003080000030801000b0800000208000001080000020800 +009a08000100000801010006010000060100000801000007010000010100000801000002 +0100000101000002010000090100000101000005010000040101001f0101000701000007 +01000001010000080100000201000001010000020100000901000001010000050100001a +010100c30101000a0100000701000002010000010100003c01000701030e000105020202 +010302020503080000080800000208000003080000030801000b08000002080000010800 +00020800009a08000100000a010000050100000601000009010000060100000101000008 +010000020100000101000002010000090100000101000004010000040100002101010008 +010000060100000101000008010000020100000101000002010000090100000101000004 +0100001b010100c30101000a0100000701000002010000010100003c01000701030e0001 +0502020201030202050308000008080000020800000308000003080000000800000a0800 +000208000001080000020800009a08000100000a01000005010000050100000b01000005 +010000010100000801050000010500080100000101000003010000050100002101010009 +010000050100000101000008010500000105000801000001010000030100001c010100c3 +0101000a010000030100000201000002010000010100003c01000701030e000105020202 +010302020503080000080800000108010003080000030800000108000009080000010801 +0001080100010800009a08000100000a0100000501000005010000050101000401000004 +010000010100000301010006010000050100000301010003010000010100000201000006 +010000210101000a01000004010000010100000301010006010000050100000301010003 +01000001010000020100001d010100c30101000a01000003010000020100000201000001 +0100003c01000701030e0001050202020103020205030800000908010000080000040801 +000108000002080000090801000008000001080000000801009b08000100000a01000003 +010400030100000501010005010000040101000401010006010000050100000301010004 +0101000201000007010000210101000b0100000401010004010100060100000501000003 +01010004010100020100001e010100c30101000801040002010200040101003d01000701 +030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 +010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 +01000701030e0001050202020103020205030800000808000002080000bd08000100000b +010100100101003b0101002201010059010100c30101005801000701030e000105020202 +01030202050308000009080200be08000100008101010059010100c30101005801000701 +030e000105020202010302020503080000cb08000100008101010059010100c301010058 +01000701030e000105020202010302020503080000cb08000100008101010059010100c3 +0101005801000701030e000105020202010302020503080000cb08000100008101010059 +010100c30101005801000701030e000105020202010302020503080000cb080001000081 +01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff +01000701030e00010502020201030202050308cd01ff01ff010007010010050202020103 +02020503080000cb08000100008101010059010100c301010058010007010300000c0700 +000105020202010302020503080000cb08000100000b0101004e01010022010100590101 +00c3010100580100070103000001050807010300000105020202010302020503080000cb +08000100000a0100001c0100002a01000008010000210101000c0100002a0100001f0101 +00c301010058010007010301000105070701030000010502020201030202050308000011 +0800000308000010080000010800009e08000100000a01000005010000040102000c0100 +00040101000d010000050100000a0101000201000007010000210101000b010000040101 +000d010000050100000a010100020100001e010100c30101000801040001010400430100 +070103010001050607010301000105020202010302020503080000110800000308000010 +080000010800009e08000100000a0100000401010003010000020100000a010000040100 +00010100000b0101000401010009010000010100000201000006010000210101000a0100 +0004010000010100000b010100040101000901000001010000020100001d010100c30101 +000801000002010000010100000201000043010007010302000105050701030100010502 +020201030202050308000009080100000800000108040001080000010800000a08010000 +08000001080000000801009b08000100000a010000030100000001000003010000020100 +000901000005010000010100000a01000000010000030100000001000009010000010100 +000301000005010000210101000901000005010000010100000a01000000010000030100 +00000100000901000001010000030100001c010100c30101000c01000005010000430100 +070103020001050407010302000105020202010302020503080000080800000108010003 +08000003080000000800000a0800000108010001080100010800009a08000100000a0100 +000501000003010000020100000801000006010000010100000901000001010000020100 +000101000009010000010100000401000004010000210101000801000006010000010100 +00090100000101000002010000010100000901000001010000040100001b010100c30101 +000b01000005010000440100070103030001050307010302000105020202010302020503 +080000080800000208000003080000030801000b0800000208000001080000020800009a +080001000008010100060100000401020008010000070100000101000008010000020100 +000101000002010000090100000101000005010000040101001f01010007010000070100 +0001010000080100000201000001010000020100000901000001010000050100001a0101 +00c30101000b010000050100004401000701030300010502070103030001050202020103 +02020503080000080800000208000003080000030801000b080000020800000108000002 +0800009a08000100000a0100000501000003010000020100000801000006010000010100 +000801000002010000010100000201000009010000010100000401000004010000210101 +000801000006010000010100000801000002010000010100000201000009010000010100 +00040100001b010100c30101000b01000005010000440100070103040001050107010303 +00010502020201030202050308000008080000020800000308000003080000000800000a +0800000208000001080000020800009a08000100000a0100000501000003010000020100 +000901000005010000010100000801050000010500080100000101000003010000050100 +002101010009010000050100000101000008010500000105000801000001010000030100 +001c010100c30101000a0100000501000045010007010304000105000701030400010502 +020201030202050308000008080000010801000308000003080000010800000908000001 +08010001080100010800009a08000100000a010000050100000301000002010000030101 +000401000004010000010100000301010006010000050100000301010003010000010100 +000201000006010000210101000a01000004010000010100000301010006010000050100 +00030101000301000001010000020100001d010100c30101000a01000005010000450100 +070103050000070203040001050202020103020205030800000908010000080000040801 +000108000002080000090801000008000001080000000801009b08000100000a01000003 +010400020102000401010005010000040101000401010006010000050100000301010004 +0101000201000007010000210101000b0100000401010004010100060100000501000003 +01010004010100020100001e010100c30101000a01000005010000450100070103050000 +070103050001050202020103020205030800000c0800000e080500a808000100000a0100 +0014010000060100002a01000008010000210101000c0100002a0100001f010100c30101 +0058010007010306070103050001050202020103020205030800000808000002080000bd +08000100000b010100100101003b0101002201010059010100c301010058010007010306 +0700030600010502020201030202050308000009080200be080001000081010100590101 +00c30101005801000701001005020202010302020503080000cb08000100008101010059 +010100c3010100580100070000110502020201030202050207ff07ff07d3051102020103 +0202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff00af +03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae0700 +03000003030a00010511020201030202050207010309000207010300000105ff05ff05ab +0701030000050308000105110202010302020502070103070003050007010300000105ff +05ff05ab0701030000010501000303060001051102020103020205020701030500030502 +07010300000105ff05ff05ab070103000001050300030304000105110202010302020502 +070103030003050407010300000105ff05ff05ab07010300000105050003030200010511 +0202010302020502070103010003050607010300000105ff05ff05ab0701030000010507 +000303000001051102020103020205020705050807010300000105ff05ff05ab07010300 +000105080703000105110202010302020502070103010703050607010300000105ff05ff +05ab07010300000105070703030000010511020201030202050207010303070305040701 +0300000105ff05ff05ab0701030000010505070303020001051102020103020205020701 +03050703050207010300000105ff05ff05ab070103000001050307030304000105110202 +010302020502070103070703050007010300000105ff05ff05ab07010300000105010703 +03060001051102020103020205020701030907040300000105ff05ff05ab070103000001 +070303080001051102020103020205020701030b07020300000107ff07ff07ad03000001 +0701030a0001051102020101000405020701030d07000300000007ff07ff07ae03000000 +0700030c000105110005020204000502070100ff00ff00d1051100000202040000000202 +04000502070000ff00ff00d2051100000202040000000202040005ff05ff05e800000202 +040000000202040005ff05ff05e800000202040000000202040005ff05ff05e800000202 +0400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000 +0208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000 +020804000000040901ff01ff01dc00000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 377 205 +%%EOF diff --git a/lib/tv/doc/src/tv_table_browser.gif b/lib/tv/doc/src/tv_table_browser.gif new file mode 100644 index 0000000000..9c7cb042ff Binary files /dev/null and b/lib/tv/doc/src/tv_table_browser.gif differ diff --git a/lib/tv/doc/src/tv_table_browser.ps b/lib/tv/doc/src/tv_table_browser.ps new file mode 100644 index 0000000000..e2b195a2e5 --- /dev/null +++ b/lib/tv/doc/src/tv_table_browser.ps @@ -0,0 +1,2024 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser.eps) +%%CreationDate: (Mon Mar 19 17:15:30 2001) +%%BoundingBox: 0 0 380 315 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 380 315 +userdict begin +%%BeginData: +DisplayImage +0 0 +380.000000 315.000000 +12 +760 630 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +ff0000 +990000 +7f7f7f +999999 +ff7f7f +000000 +000000 +000000 +000000 +000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff +02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 +04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff +02d500000202040000000202040002080000020d04000289010302110103023201020258 +0102020c010102010101021e010102290101020601010208010102310101022a01010230 +0101029600000202040000000202040002080000020d0400028901010202010702000101 +0203010102010101020e01050200010702010103020d0101020401010204010302030103 +020e010302060103020301030203010302060103020b0101020a01010202010102190100 +02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 +020c0104021e0101029600000202040000000202040002080000020d0400028901010205 +0101020301010203010102010101020e0101020701010203010102010101020c01010202 +010302030101020101010201010102010101020801010201010102010101020401010201 +01010201010102010101020101010201010102040101020101010201010102060101020a +0101020201010218010102210101020b01010206010102090101021b010202020100020d +01010238010102020101021d010102960000020204000000020204000208000002020406 +020304000289010102050101020301010203010102010101020e01010207010102030101 +020501010209010102030101020701010201010102010101020601020202010102010101 +020801010201010102010101020101010201010102040101020101010202010202030101 +020a01010203010102020103020301030202010302010104020101010202010302030101 +02000101020a0104020101030203010102000101020301010202010302030101021a0100 +020001010201010002020103020301040202010302020101020901010200010102010101 +020301030203010102020101020001010202010102010103020201010200010102010101 +020301030202010102000101020101010202010302020101020201010285000002020400 +000004030208000002020400030400000203040002890101020501010204010102020100 +02020101020e0101020701010203010202040101020a0100020301010207010102010101 +020101010205010102040101020101010208010102010101020101010201010102010101 +02040101020101010204010102020100020b010102030101020101010201010102010101 +020101010200010102010101020101010203010102010101020101010202010202000101 +020a01010202010102010101020201020200010102020101020101010201010102020101 +021a01000200010102010100020101010201010102010101020101010201010102010101 +020101010209010202000102020001010201010102010101020201010202010202000101 +020101010200010102000101020201020200010202000101020101010201010102010101 +0200010102010101020101010201010102010101020201010285000004030101020b0000 +0203040003020000020404000289010102050101020401010201010102020101020e0104 +0204010102040103020d0101020401010205010202020101020101010204010102050101 +020101010207010102020101020101010202010402040101020101010205010102020101 +020901010203010102010101020101010201010102080101020101010203010102010101 +020101010202010102010101020a01010206010102020101020101010202010102010101 +0201010102020101021a0100020001020200010002010101020101010201010102010101 +0201010102010101020d0101020101010201010102050101020201010202010102010101 +020101010200010102000101020201010201010102010101020501010201010202030101 +0201010102010101020101010202010002890103020b0000020304000302000002040400 +0289010102050101020501010200010002030101020e01010207010102060102020e0100 +020301010207010102010101020101010205010102040101020101010206010102030101 +020101010205010102040101020101010204010102020100020b01010203010102010101 +020101010201010102050104020101010203010102010101020101010202010102010101 +020a0101020301040202010102010101020201010201010502020101021a010002010101 +020001000201010102010101020101010201010102010105020d01010201010102010101 +020201040202010102020101020101010201010102000101020001010202010102010101 +0201010102020104020101010204010102010105020201010200010102890103020b0000 +02040400030000000205040002890101020501010205010302030101020e010102070101 +02070101020d010102030101020701010201010102010101020601020202010102010101 +0205010102040101020101010205010102040101020101010202010202030101020a0101 +020301010201010102010101020101010204010102010101020101010203010102010101 +020101010202010102010101020a01010202010102010101020201010201010102020101 +0201010102060101021a0100020201020201010102010101020101010201010102010101 +021101010201010102010101020101010201010102020101020201010201010102010101 +020101010200010102010101020101010201010102010101020101010201010102040101 +020101010206010102000100028a0103020b000002040400030000000205040002890101 +020501010206010102040101020e01010207010102030101020101010201010102080101 +020401010203010102010101020101010201010102010101020401010201010102010101 +020101010200010502010101020101010201010102010101020101010200010102010101 +0201010102060101020a0101020201010201010102010101020101010202010002000101 +02010101020101010203010102010101020101010202010102010101020a010102020101 +02010101020201010201010102020101020101010202010002010101021b010002020102 +020101010201010102010101020001020201010102020100020101010209010102010101 +020101010201010102010101020201010202010102010101020201010207010102010101 +0201010102010101020101010201010102040101020101010202010002030102028a0103 +020b0000020500000206040002890101020501010206010102040101020e010502030101 +020401030202010102080101020401010204010302030103020201010209010302020101 +0200010502020103020301030202010102010103020b0101020a01010202010102020103 +0203010302020102020001010201010202010101020201030203010102010101020b0102 +020101020200010102010104020301010202010302020101021b01000203010102020103 +020301010200010102020103020201010209010102010101020101010202010202000101 +020101010202010102010101020301050202010102010101020101010202010202000101 +02000101020401010202010302040101028b0103020b0000020d04000289010302110103 +0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000 +020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c +040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400 +020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000202010302020000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000202010302020500000005ff05ff05ea01000202010302020000 +05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 +05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 +050c06040504060005030602051f06040505060005040600050406000519060005020600 +0504060005270602050b06000506060005ff05ff05080600050206000509060205130100 +050002020103020205000000050b0600050f0600051f060005090600050a060005190600 +05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100 +0202010302020000050c0600050606020505060005030602051806000506060105000600 +050206020502060405170600050206000502060205030602050206000502060005170600 +050206000501060005000601050206040502060205030602050206000500060105030602 +05ff05f306000502060005020602050506000502060005000601050c0100050002020103 +020205000000050b06000508060005050600050206000502060005170600050506000501 +06010504060005040600051a060005000600050506000502060005020600050106000502 +060005170600050206000501060105010600050306000506060005020600050206000501 +060105010600050106000502060005ff05f2060005020600050106000502060005040600 +0502060105010600050c01000202010302020000050c0603050506000505060005020600 +050206000517060305020600050206000504060005040600051a06000500060005050600 +050206000502060005010600050006000500060005170600050206000501060005020600 +0503060005060600050206000502060005010600050206000501060005ff05f606040501 +060005020600050406000502060005020600050b0100050002020103020205000000050b +06000508060005050600050206040517060005050600050206000504060005040600051a +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05f306000502060005010604050406000502060005020600050c01000202010302020000 +050c0600050806000505060005020600051b060005050600050206000504060005040600 +051b06000506060005020600050506000500060005000600051706000502060005010600 +050206000503060005060600050206000502060005010600050206000505060005ff05f2 +06000502060005010600050806000502060005020600050b010005000202010302020500 +0000050b0600050806000505060005020600050206000517060005050600050106010504 +060005040600051b06000506060005020600050206000501060005000600050006000517 +060005020600050106010501060005030600050606000502060005020600050106000502 +0600050106000502060005ff05f206000502060005010600050206000504060005020601 +05010600050c01000202010302020000050c060005080600050506000503060205180604 +050206010500060005040600050506010519060005060600050306020503060005000600 +051906020502060005000601050506010504060005030602050206000502060005020602 +05ff05f306000502060005020602050506000502060005000601050c0100050002020103 +02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a +0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103 +020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e +060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff +05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100020201030202000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +020201030202053600000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000051a00000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050100000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050100000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000051a00000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000051a00000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000051a00000500000005000000050000000500000005000000050000000500 +00000500000005000000050000000500000005ff05a50202010302020535000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500010005180000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000100000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050001000518000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500010005180000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000100051800000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000500010005ff05a402020103 +02020536000005140100051a00000514010005010000051401000501000005140100051a +000005140100051a000005140100051a00000514010005ff05a502020103020205350000 +051601000518000005160100000005160100000005160100051800000516010005180000 +05160100051800000516010005ff05a40202010302020536000005140100051a00000514 +010005010000051401000501000005140100051a000005140100051a000005140100051a +00000514010005ff05a50202010302020535000005050602050306020506010005180000 +051601000000051601000000051601000518000005160100051800000516010005180000 +0516010005ff05a402020103020205360000050406020503060205050100051a00000514 +010005010000051401000501000005140100051a00000506060405080100051a00000508 +060105090100051a0000050806030507010005ff05a50202010302020535000005040604 +050106040505010005180000051006000504010000000510060005040100000005040600 +051001000518000005050608050701000518000005080603050901000518000005070607 +0506010005ff05a402020103020205360000050306000501060105010600050106010504 +0100051a0000050f06000503010005010000050f0600050301000501000005030600050f +0100051a00000503060a05050100051a00000507060305080100051a0000050506030501 +06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600 +0501060005040100000005040600050a06000504010000000504060005010600050d0100 +051800000504060305020603050601000518000005090601050a01000518000005060602 +050306020505010005ff05a4020201030202053600000501060005000603050006020500 +060405020100051a0000050c060005010600050301000501000005030600050a06000503 +0100050100000503060005010600050c0100051a0000050206030504060305040100051a +000005140100051a000005050602050306020504010005ff05a502020103020205350000 +050206000500060305000602050006040503010005180000050a06000501060005010600 +050401000000050406000504060005040600050401000000050406000501060005010600 +050a01000518000005030602050306070503010005180000050706040509010005180000 +05070601050206020506010005ff05a40202010302020536000005010600050006030500 +06020500060405020100051a000005090600050106000501060005030100050100000503 +06000504060005040600050301000501000005030600050106000501060005090100051a +0000050206020504060505030100051a00000507060305080100051a0000050a06020506 +010005ff05a5020201030202053500000502060005000603050006020500060405030100 +051800000507060005010600050106000501060005040100000005040600050406000501 +060005010600050401000000050406000501060005010600050106000507010005180000 +05030602050506030505010005180000050906020509010005180000050a060205080100 +05ff05a40202010302020536000005010600050006070500060405020100051a00000506 +060005010600050106000501060005030100050100000503060005040600050106000501 +060005030100050100000503060005010600050106000501060005060100051a00000502 +06030505060105050100051a00000508060205080100051a0000050806020508010005ff +05a502020103020205350000050206000500060405010600050006040503010005180000 +050406000501060005010600050106000501060005040100000005040600050106000501 +060005010600050106000504010000000504060005010600050106000501060005010600 +050401000518000005040603050d01000518000005090602050901000518000005090602 +0509010005ff05a402020103020205360000050106060501060605020100051a00000503 +060005010600050106000501060005010600050301000501000005030600050106000501 +060005010600050106000503010005010000050306000501060005010600050106000501 +060005030100051a00000503060905060100051a00000508060205080100051a00000514 +010005ff05a5020201030202053500000502060005000602050506000500060205030100 +051800000504060005010600050106000501060005010600050401000000050406000501 +060005010600050106000501060005040100000005040600050106000501060005010600 +050106000504010005180000050506070508010005180000050806040508010005180000 +050906020509010005ff05a4020201030202053600000501060005000602050506000500 +060205020100051a00000503060005010600050106000501060005010600050301000501 +000005030600050106000501060005010600050106000503010005010000050306000501 +060005010600050106000501060005030100051a00000506060405080100051a00000506 +060605060100051a0000050806020508010005ff05a50202010302020535000005020604 +050506040503010005180000051601000000051601000000051601000518000005160100 +0518000005160100051800000516010005ff05a40202010302020536000005140100051a +00000514010005010000051401000501000005140100051a000005140100051a00000514 +0100051a00000514010005ff05a502020103020205350000051601000518000005160100 +000005160100000005160100051800000516010005180000051601000518000005160100 +05ff05a40202010302020536000005140100051a00000514010005010000051401000501 +000005140100051a000005140100051a000005140100051a00000514010005ff05a50202 +010302020535000005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005180000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000518000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005180000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100051800000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005ff05a402020103020205360100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100051a0100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005010100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005010100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100051a0100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100051a0100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100051a0100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005ff05a5020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202 +01030202050301ff01ff01d1050000000500000005000000050000000500000005000000 +050000000500000005000000050001000503020201030202050301ff01ff01d100000500 +000005000000050000000500000005000000050000000500000005000000050001010503 +020201030202050301020aff0aff0acb010205000000050e010005000100050302020103 +0202050301020aff0aff0aca000001020000051001010503020201030202050301020a01 +00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff +00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500 +0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510 +01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100 +0503020201030202050301020a0100ff00ff00c9010200000502010a0502010105030202 +01030202050301020a0100ff00ff00c90102050000000502010805020100050001000503 +020201030202050301020a0100ff00ff00c9010200000504010605040101050302020103 +0202050301020a0100ff00ff00c901020500000005040104050401000500010005030202 +01030202050301020a0100ff00ff00c90102000005060102050601010503020201030202 +050301020a0100ff00ff00c9010205000000050601000506010005000100050302020103 +0202050301020a0100ff00ff00c901020000051001010503020201030202050301020a01 +00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff +00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500 +0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510 +01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100 +0503020201030202050301020a0000ff00ff00ca01020000051001010503020201030202 +050301ff01ff01d105000000050001000500010005000100050001000500010005000100 +0500010005000100050001000503020201030202050301ff01ff01d10000050001000500 +010005000100050001000500010005000100050001000500010005000101050302020103 +0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a +01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 +0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561 +01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505 +010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff +05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a +01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 +0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565 +010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f +0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503 +020201030202050301000565010105ff05ff052f0100054a010005030202010302020503 +01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500 +010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff +05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a +01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103 +020205030100056101020500010105ff05ff052f0100054a010005030202010302020503 +010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503 +020201030202050301000536000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000009040500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000904050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000090405000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000009040500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000904050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000904050000000100050c0100 +050001000500010005000100050001000500010005000100050001000500010005000100 +052a01000503020201030202050301000535000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000903 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050009030100000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500090301000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000903010000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050009030100000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +05000000050009030100000005000100050d010005000100050001000500010005000100 +05000100050001000500010005000100052b010005030202010302020503010005360000 +055e01000901010205000000055c01000901010205000000055c01000901010205000000 +055c01000901010205000000055c01000901010205000000055c01000901010205000000 +0100050c0100050000000500000005000000050000000500000005000000050000000500 +000005000000052a010005030202010302020503010005350000052d0100052f01000500 +090101020000052b0102052d01000500090101020000052b0102052d0100050009010102 +0000052d0100052d01000500090101020000052a0104052c01000500090101020000052c +0102052c0100050009010102000005000100050d01000500000005000000050000000500 +000005000000050000000500000005000000052b01000503020201030202050301000536 +0000052a01020530010009010102050000000529010005020100052d0100090101020500 +00000529010005020100052d01000901010205000000052b0101052e0100090101020500 +000005290100053101000901010205000000052a01000530010009010102050000000100 +050c010005000000050c010005000000052a010005030202010302020503010005350000 +052d0100052f01000500090101020000052a010005020100052c01000500090101020000 +052e0100052c01000500090101020000052b010005000100052d01000500090101020000 +052a0100053001000500090101020000052a010005300100050009010102000005000100 +050d010005000000050a010005000000052b010005030202010302020503010005360000 +052c01000530010009010102050000000529010005020100052d01000901010205000000 +052d0100052d01000901010205000000052a010005000100052e01000901010205000000 +05290100053101000901010205000000052901000531010009010102050000000100050c +010005000000050c010005000000052a010005030202010302020503010005350000052d +0100052f01000500090101020000052d0100052d01000500090101020000052c0101052d +01000500090101020000052a010005010100052d01000500090101020000052a0103052d +01000500090101020000052a0103052d0100050009010102000005000100050d01000500 +0000050a010005000000052b010005030202010302020503010005360000052c01000530 +01000901010205000000052b0100052f01000901010205000000052d0100052d01000901 +0102050000000528010005020100052e01000901010205000000052d0100052d01000901 +0102050000000529010005020100052d010009010102050000000100050c010005000000 +050c010005000000052a010005030202010302020503010005350000052d0100052f0100 +0500090101020000052b0100052f01000500090101020000052e0100052c010005000901 +0102000005290105052c01000500090101020000052e0100052c01000500090101020000 +052a010005020100052c0100050009010102000005000100050d010005000000050a0100 +05000000052b010005030202010302020503010005360000052c01000530010009010102 +050000000529010005020100052d010009010102050000000529010005020100052d0100 +0901010205000000052c0100052e010009010102050000000528010005030100052d0100 +09010102050000000529010005020100052d010009010102050000000100050c01000500 +0000050c010005000000052a010005030202010302020503010005350000052b0104052d +01000500090101020000052a0104052c01000500090101020000052b0102052d01000500 +090101020000052c0102052c01000500090101020000052a0103052d0100050009010102 +0000052b0102052d0100050009010102000005000100050d010005000000050a01000500 +0000052b010005030202010302020503010005360000055e01000901010205000000055c +01000901010205000000055c01000901010205000000055c01000901010205000000055c +01000901010205000000055c010009010102050000000100050c010005000000050c0100 +05000000052a010005030202010302020503010005350000055e01000500090101020000 +055c01000500090101020000055c01000500090101020000055c01000500090101020000 +055c01000500090101020000055c0100050009010102000005000100050d010005000000 +050a010005000000052b010005030202010302020503010005360000055e010009010102 +05000000055c01000901010205000000055c01000901010205000000055c010009010102 +05000000055c01000901010205000000055c010009010102050000000100050701000503 +010005000000050c010005000000052a010005030202010302020503010005350000055e +01000500090101020000055c01000500090101020000055c01000500090101020000055c +01000500090101020000055c01000500090101020000055c010005000901010200000500 +0100050601010504010005000000050a010005000000052b010005030202010302020503 +010005360000055e01000901010205000000055c01000901010205000000055c01000901 +010205000000055c01000901010205000000055c01000901010205000000055c01000901 +010205000000010005050100050001000503010005000000050001000500010005000100 +0500010005000100050001000500010005000000052a0100050302020103020205030100 +05350000055e01000500090101020000055c01000500090101020000055c010005000901 +01020000055c01000500090101020000055c01000500090101020000055c010005000901 +010200000500010005070100050401000500000005000000050000000500000005000000 +050000000500000005000000052b01000503020201030202050301000536000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010009010102050000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100090101020500000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000901010205000000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010009010102050000000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +090101020500000005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000901010205000000010005070100050301000500 +0000050c010005000000052a010005030202010302020503010005350000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050009000103000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500090001030000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000900010300000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050009000103000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +090001030000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000900010300000500010005070100050401000500 +0000050a010005000000052b01000503020201030202050301000b360063010000630100 +0063010000630100006301000063010000020100050701000503010005000000050c0100 +05000000052a01000503020201030202050301000b350800006301000063010000630100 +00630100006301000063010000020100050701000504010005000000050a010005000000 +052b01000503020201030202050301000b01073208010063010000630100006301000063 +0100006301000063010000020100050501040501010005000000050c010005000000052a +01000503020201030202050301000b010732080100630100006301000063010000630100 +006301000063010000020100050d010005000000050a010005000000052b010005030202 +01030202050301000b010717010007190801006301000063010000630100006301000063 +01000063010000020100050c010005000000050c010005000000052a0100050302020103 +0202050301000b010715010207190801000f010200030102004901000007010000230100 +000b010200030102001f01000063010000630100006301000063010000020100050d0100 +05000000050a010005000000052b01000503020201030202050301000b01071701000719 +08010011010000050100004901000007010000230100000d010000050100001f01000063 +010000630100006301000063010000020100050c010005000000050c010005000000052a +01000503020201030202050301000b010717010007190801000801020005010000050100 +000301020042010000070100000001010003010200020100000001010002010000000101 +000301020002010400010100000201000004010000050100001f01000063010000630100 +006301000063010000020100050d010005000000050a010005000000052b010005030202 +01030202050301000b010717010007190801000701000002010000040100000501000002 +010000020100004101000007010100010100000101000002010000010101000101000001 +01010001010000010100000201000003010000030100000201000004010000050100001f +01000063010000630100006301000063010000020100050c010005000000050c01000500 +0000052a01000503020201030202050301000b0107170100071908010007010000020100 +000401000005010000020100000201000041010000070100000201000001010000020100 +000101000005010000020100000101000007010000030100000201000004010000050100 +001f01000063010000630100006301000063010000020100050d010005000000050a0100 +05000000052b01000503020201030202050301000b010717010007190801000701000002 +010000040100000501000002010400410100000701000002010000010100000201000001 +01000005010000020100000201020004010000030100000201000004010000050100001f +01000063010000630100006301000063010000020100050c010005000000050001000500 +0100050001000500010005000100050001000500010005000000052a0100050302020103 +0202050301000b0107170100071908010007010000020100000401000005010000020100 +004501000007010000020100000101000002010000010100000501000002010000050100 +0003010000030100000201000004010000050100001f0100006301000063010000630100 +0063010000020100050d0100050001000500010005000100050001000500010005000100 +0500010005000000052b01000503020201030202050301000b0107150104071708010007 +010000020100000401000005010000020100000201000041010000070100000201000001 +010000020100000101000005010000020100000101000002010000030100000301000001 +01010004010000050100001f01000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010732080100080102 +000501000005010000030102004201000007010000020100000201020002010000050100 +00020100000201020005010100020101000001000004010000050100001f010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +00630100006301000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b01073208010063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +0202050301000b0107320801006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0108340063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +01000b00083501ff01ff0161050c01000500030e05000000052a01000503020201030202 +050301000b3600630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000b35080000630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01073208010063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010732 +080100630100006301000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b01071601020718080100630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b01071501000702010007170801001f0100000301020003 +010200340100000f0102005001000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010715010007020100 +071708010026010000050100003401000011010000500100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 +010007020100071708010008010100000100000101000002010000010100000001010003 +0102000501000005010000030102002d0100000801020005010000020100000201000002 +010200030102000301020002010000000101002d01000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +071801000718080100070100000101010001010000020100000101010001010000040100 +00050100000501000002010000020100002c010000070100000201000004010000020100 +000201000001010000020100000101000002010000010100000201000001010100010100 +002c01000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107170100071908010007010000020100000101000002 +0100000101000002010000040100000501000005010000060100002c0100000701000008 +01000002010000020100000101000005010000050100000201000001010000020100002c +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b0107160100071a0801000701000002010000010100 +00020100000101000002010000040100000501000005010000030103002c010000080102 +0005010000020100000201000002010200030102000201040001010000020100002c0100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010715010007020100071708010007010000020100000101000002 +010000010100000201000004010000050100000501000002010000020100002c0100000b +01000004010000020100000201000005010000050100000101000005010000020100002c +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010715010407170801000701000001010100010100 +0001010100010100000201000004010000050100000501000002010000020100002c0100 +000701000002010000040100000201000001010100010100000201000001010000020100 +00010100000201000001010000020100002c010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01073208010008 +010100000100000201010000010000010100000201000004010000050100000501000003 +0103002c0100000801020005010000030101000001000002010200030102000301020002 +010000020100002c01000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b0107320801000b010000560100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107320801000701000002010000560100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01073208010008010200570100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010732080100630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0108340063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a01000503020201030202050301000b350800006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +00630100006301000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b01071601020718080100630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b010715010007020100071708010063010000070100005a0100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b0107190100071708010063010000070100005a0100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +0202050301000b0107190100071708010008010200020100000001010002010000000101 +000301020042010000070100000001010002010000000101000301020002010100000100 +000201010000010000030102003401000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107170101071808010007 +010000020100000101010001010000010101000101000001010000020100004101000007 +010100010100000101010001010000010100000201000001010000000100000001000001 +010000000100000001000001010000020100003301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +0719010007170801000b0100000101000002010000010100000201000005010000410100 +000701000002010000010100000501000002010000010100000001000000010000010100 +000001000000010000050100003301000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107190100071708010008 +010300010100000201000001010000020100000201030041010000070100000201000001 +010000050100000201000001010000000100000001000001010000000100000001000002 +0103003301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107150100070201000717080100070100 +000201000001010000020100000101000002010000010100000201000041010000070100 +000201000001010000050100000201000001010000000100000001000001010000000100 +000001000001010000020100003301000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107160102071808010007 +010000020100000101000002010000010100000201000001010000020100004101000007 +010100010100000101000005010000020100000101000000010000000100000101000000 +010000000100000101000002010000330100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +000801030001010000020100000101000002010000020103004101000007010000000101 +000201000006010200020100000001000000010000010100000001000000010000020103 +003301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107320801006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b010732080100630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010732080100630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010834006301000063 +01000063010000630100006301000063010000020100050d0100030e0000052b01000503 +020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100 +0503020201030202050301000b3600630100006301000063010000630100006301000063 +010000020100050d0100030e0000052b01000503020201030202050301000b3508000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107320801006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107180100 +0718080100630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b010717010107180801001001000006 +010000490100000e0100001c0100000b010200030102001f010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b010716010007000100071808010010010000510100000e0100001c0100000d0100 +00050100001f01000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b01071601000700010007180801000801020002 +010400020102000201000000010100030102003b01000008010200020100000101000003 +01020002010000000101000301020002010400010100000201000004010000050100001f +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010715010007010100071808010007010000020100 +000301000006010000020101000101000001010000020100003a01000007010000020100 +000101000000010000030100000201000001010100010100000101000002010000030100 +00030100000201000004010000050100001f010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01071401000702 +010007180801000701000007010000060100000201000002010000050100003a01000007 +010000050101000801000001010000020100000101000007010000030100000201000004 +010000050100001f01000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b01071401050717080100080102 +0004010000060100000201000002010000020103003a0100000801020002010100050103 +0001010000020100000201020004010000030100000201000004010000050100001f0100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010718010007180801000b01000003010000060100000201000002 +01000001010000020100003a0100000b0100000101000000010000030100000201000001 +010000020100000501000003010000030100000201000004010000050100001f01000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01071701020717080100070100000201000003010000060100 +00020100000201000001010000020100003a010000070100000201000001010000010100 +000201000002010000010100000201000001010000020100000301000003010000010101 +0004010000050100001f01000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b010732080100080102000501010004 +0100000201000002010000020103003a0100000801020002010000020100000201030001 +010000020100000201020005010100020101000001000004010000050100001f01000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01073208010063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010732 +080100630100006301000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b01073208010063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010732080100630100006301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +0732080100630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b010834006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +01030202050301000b00083501ff01ff0161050d0100030e0000052b0100050302020103 +0202050301000b3600630100006301000063010000630100006301000063010000020100 +050c01000500030e05000000052a01000503020201030202050301000b35080000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107320801006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b010732080100630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107150104071708010063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107150100071b080100070100000e0100 +0014010000340100002b0102003401000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107150100071b08010007 +0100000e0100004a0100002d010000340100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107150100 +071b08010007010000010100000301020002010400020102000201000000010100030102 +000201000000010100030102002601000007010000020100000101000000010100020100 +0000010100030102000301020005010000030102002d0100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 +010307180801000701000000010000030100000201000003010000030100000201000001 +010100010100000401000002010100010100000101000002010000250100000701000002 +010000010101000101000001010100010100000101000002010000010100000201000004 +01000002010000020100002c01000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010719010007170801 +000701010008010000030100000701000001010000080100000201000002010000050100 +002501000007010000020100000101000002010000010100000201000001010000090100 +0004010000060100002c01000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b010719010007170801000701010005 +010300030100000401030001010000080100000201000002010000020103002501000007 +010000020100000101000002010000010100000201000002010200030103000401000003 +0103002c01000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107140100070301000717080100070100 +000001000003010000020100000301000003010000020100000101000008010000020100 +000201000001010000020100002501000007010000020100000101000002010000010100 +00020100000501000001010000020100000401000002010000020100002c010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01071501030718080100070100000101000002010000020100000301000003 +010000020100000101000008010000020100000201000001010000020100002501000007 +010000010101000101010001010000010101000101000001010000020100000101000002 +0100000401000002010000020100002c0100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +000701000002010000020103000401010002010300010100000801000002010000020100 +000201030025010000080101000001000001010000000101000201000000010100030102 +000301030004010000030103002c01000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b010732080100630100000e +010000050100004c01000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b010732080100630100000e0100 +00050100004c01000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b010732080100630100000e010000050100004c +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010732080100630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010834006301000063 +01000063010000630100006301000063010000020100050d0100030e0000052b01000503 +020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100 +0503020201030202050301000b3600630100006301000063010000630100006301000063 +010000020100050d0100030e0000052b01000503020201030202050301000b3508000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107320801006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107170102 +0717080100630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b0107160100071a0801000a0100001a +01010004010000340100000f0102000c010000020100003e010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b0107150100071b080100250100003c01000011010000100100003e010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b0107150100071b080100080102000301020003010200030102000401000004 +010200020100000001010003010200260100000801020005010000020100000201000002 +01020002010000010100003b01000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010715010307180801 +000a01000002010000020100000101000002010000010100000201000001010400040100 +000201010001010000010100000201000025010000070100000201000004010000020100 +00020100000401000002010000000100003c010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01071501000702 +010007170801000a01000002010000020100000101000005010000020100000301000006 +01000002010000020100000101000002010000250100000b010000040100000201000002 +01000004010000020101003d01000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010715010007020100 +07170801000a010000020100000201000002010200020104000301000006010000020100 +000201000001010400250100000801030004010000030100000001000005010000020101 +003d01000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b01071501000702010007170801000a0100000201000002 +010000050100000101000007010000060100000201000002010000010100002901000007 +010000020100000401000003010000000100000501000002010000000100003c01000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b010716010207180801000a0100000201000002010000010100 +000201000001010000020100000301000006010000020100000201000001010000020100 +0025010000070100000201000004010000040100000601000002010000010100003b0100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b0107320801000a0100000301020003010200030102000401000006 +010000020100000201000002010200260100000801030004010000040100000601000002 +010000020100003a01000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b0107320801000a010000570100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107320801000701000001010000570100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01073208010008010100580100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010732080100630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0108340063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a01000503020201030202050301000b350800006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +00630100006301000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b01071501040717080100630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01071501000702010007170801000a010100130100000b0100 +000201000030010000250100000b01020003010200260100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010718 +0100071808010009010000150100000f01000030010000250100000d0100000501000026 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010718010007180801000901000003010000000101 +0003010200030101000001000001010000000101000301020002010000010100002d0100 +000701000000010100030102000201000000010100020100000001010002010400010100 +000201000004010000050100002601000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107180100071808010007 +010400010101000101000001010000020100000101000001010100010101000101000004 +01000002010000000100002e010000070101000101000001010000020100000101010001 +010000010101000101000003010000030100000201000004010000050100002601000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01071801000718080100090100000301000005010000020100 +0001010000020100000101000008010000020101002f0100000701000002010000010100 +000201000001010000050100000701000003010000020100000401000005010000260100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010717010007190801000901000003010000050104000101000002 +0100000101000008010000020101002f0100000701000002010000010100000201000001 +010000050100000701000003010000020100000401000005010000260100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +0202050301000b0107170100071908010009010000030100000501000005010000020100 +00010100000801000002010000000100002e010000070100000201000001010000020100 +000101000005010000070100000301000002010000040100000501000026010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01071701000719080100090100000301000005010000020100000101000001 +010100010100000801000002010000010100002d01000007010000020100000101000002 +010000010100000501000007010000030100000101010004010000050100002601000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01073208010009010000030100000601020003010100000100 +00010100000801000002010000020100002c010000070100000201000002010200020100 +000501000008010100020101000001000004010000050100002601000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010732080100630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107320801006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b010732080100630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010834006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000b00 +083501ff01ff0161050c01000500030e05000000052a0100050302020103020205030100 +0b3600630100006301000063010000630100006301000063010000020100050d0100030e +0000052b01000503020201030202050301000b3508000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +0202050301000b0107320801006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107160102071808010063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010715010007020100071708010063010000070100000f0100000b +01000006010000100100002201000063010000630100006301000063010000020100050c +01000500030e05000000052a01000503020201030202050301000b010715010007020100 +071708010063010000070100001c01000018010000220100006301000063010000630100 +0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 +010007020100071708010007010000000101000301020002010000000101004901000007 +010000010100000201000000010100030102000301020002010400020102000201000000 +010100030102000201000000010100030102000201000000010100030101000001000009 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010716010207180801000701010001010000010100 +000201000001010100010100004801000007010000000100000301010001010000040100 +000201000002010000030100000601000002010100010100000101000002010000010101 +000101000001010000020100000101010001010000010100000101010009010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01071501000702010007170801000701000002010000010100000201000001 +0100004c0100000701010004010000080100000201000007010000060100000201000002 +010000010100000201000001010000020100000101000002010000010100000501000002 +0100000901000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107150100070201000717080100070100 +000201000001010400010100004c01000007010100040100000801000003010200040100 +000601000002010000020100000101040001010000020100000101040001010000050100 +00020100000901000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000b01071501000702010007170801000701000002 +01000001010000050100004c010000070100000001000003010000080100000601000003 +010000060100000201000002010000010100000501000002010000010100000501000005 +010000020100000901000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000b01071601020718080100070101 +00010100000101000002010000010100004c010000070100000101000002010000080100 +000201000002010000030100000601000002010000020100000101000002010000010101 +000101000001010000020100000101000005010000010101000901000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b010732080100070100000001010003010200020100004c010000070100000201000001 +010000080100000301020005010100040100000201000002010000020102000201000000 +010100030102000201000006010100000100000901000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +0732080100070100005a0100005801000009010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01073208010007 +0100005a0100005401000002010000090100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +00070100005a010000550102000a01000063010000630100006301000063010000020100 +050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b010732080100630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b01083400630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a01000503020201030202050301000b00083501ff01ff0161050d +0100030e0000052b01000503020201030202050301000b36006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +01030202050301000b350800006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a01000503020201030202050301000b0107320801006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01071601020718080100630100006301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +071501000702010007170801001f01000042010000120100001701020034010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01071501000702010007170801006301000012010000190100003401000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01071501000702010007170801000701010000010000030102 +00020100000001010003010200030102003b010000080102000301010000010000020102 +000201000000010100020100000001010005010000030102000201000000010100260100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +01030202050301000b010715010007020100071708010007010000000100000001000001 +0100000201000001010100010100000401000002010000020100003a0100000701000002 +010000010100000101010001010000020100000101010001010000010101000101000004 +010000020100000201000001010100010100002501000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +071601030717080100070100000001000000010000050100000101000008010000060100 +003a01000007010000020100000101000002010000010100000201000001010000020100 +000101000002010000040100000601000001010000020100002501000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +0b0107190100071708010007010000000100000001000002010300010100000801000003 +0103003a0100000701000002010000010100000201000001010400010100000201000001 +010000020100000401000003010300010100000201000025010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +01000b010718010007180801000701000000010000000100000101000002010000010100 +000801000002010000020100003a01000007010000020100000101000002010000010100 +000501000002010000010100000201000004010000020100000201000001010000020100 +002501000063010000630100006301000063010000020100050d0100030e0000052b0100 +0503020201030202050301000b0107150102071908010007010000000100000001000001 +01000002010000010100000801000002010000020100003a010000070100000201000001 +010000010101000101000002010000010100000201000001010100010100000401000002 +010000020100000101000002010000250100006301000063010000630100006301000002 +0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 +00070100000001000000010000020103000101000008010000030103003a010000080102 +000301010000010000020102000201000002010000010100000001010005010000030103 +0001010000020100002501000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b01073208010063010000230100003e +01000063010000630100006301000063010000020100050c01000500030e05000000052a +01000503020201030202050301000b01073208010063010000230100003e010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000b01073208010063010000230100003e01000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000b01 +0732080100630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b01000503020201030202050301000b010732080100630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000b01083400630100006301000063010000630100006301000063 +010000020100050d0100030e0000052b01000503020201030202050301000b00083501ff +01ff0161050c01000500030e05000000052a010005030202010302020503010005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050001000063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +050000000532010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050c01000500030e05000000 +052a01000503020201030202050301000500000005130100050401020515010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000512010205030100050201000515010000630100 +006301000063010000630100006301000063010000020100050c01000500030e05000000 +052a01000503020201030202050301000500000005130100050301000502010005140100 +050000630100006301000063010000630100006301000063010000020100050d0100030e +0000052b0100050302020103020205030100000005140100050301000502010005150100 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a010005030202010302020503010005000000051301000503010005020100 +05140100050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000051401000503010005020100 +0515010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000513010005030100 +050201000514010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000514010005030100 +050201000515010000630100006301000063010000630100006301000063010000020100 +050c01000500030e05000000052a01000503020201030202050301000500000005110104 +050201020515010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050c01000500030e05000000 +052a01000503020201030202050301000500000005320100050000630100006301000063 +010000630100006301000063010000020100050d0100030e0000052b0100050302020103 +020205030100000005340100006301000063010000630100006301000063010000630100 +00020100050c01000500030e05000000052a010005030202010302020503010005000000 +05320100050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000053401000063010000630100 +0063010000630100006301000063010000020100050c01000500030e05000000052a0100 +050302020103020205030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001ff01ff0161050d0100 +030e0000052b010005030202010302020503010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500010000630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a0100050302020103020205030100000005340100006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000500000005130100050501000516010005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005120102050301020517010000630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +050000000513010005050100051601000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000514010005050100051701000063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b010005030202010302020503010005000000 +051301000505010005160100050000630100006301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000000 +051401000505010005170100006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000500000005130100 +050501000516010005000063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a0100050302020103020205030100000005140100 +050501000517010000630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b0100050302020103020205030100050000000511010405010104 +05140100050000630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005340100006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000000053401000063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010000630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b010005030202010302020503010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e +05000000052a010005030202010302020503010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000534010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005130100050401020515010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000512010205030100050201000515010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005130100050301000502010005140100050000630100006301000063 +010000630100006301000063010000020100050d0100030e0000052b0100050302020103 +020205030100000005140100050301000502010005150100006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +010302020503010005000000051301000506010005150100050000630100006301000063 +010000630100006301000063010000020100050d0100030e0000052b0100050302020103 +020205030100000005140100050501000517010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005130100050401000517010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000514010005030100050201000515010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005110104050101040514010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000534010000630100006301000063010000630100006301000063010000020100 +050c01000500030e05000000052a01000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100050d0100030e +0000052b0100050302020103020205030100000005340100006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +0534010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001ff01ff0161050d0100030e0000052b010005030202010302020503010005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a0100050302020103020205030100000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500010000630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +050000000532010005000063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a0100050302020103020205030100000005340100 +00630100006301000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000500000005130100050401020515010005000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a0100050302020103020205030100000005120102050301000502010005150100 +00630100006301000063010000630100006301000063010000020100050d0100030e0000 +052b01000503020201030202050301000500000005130100050701000514010005000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a0100050302020103020205030100000005140100050701000515010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000513010005050101051501000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000514010005070100051501000063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +010302020503010005000000051301000507010005140100050000630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000000051401000503010005020100051501000063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +010302020503010005000000051101040502010205150100050000630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000000053401000063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b010005030202010302020503010005000000 +05320100050000630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005340100006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001ff01ff0161050c01000500030e05000000052a01000503020201030202 +050301000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +05000000050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000100006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +0534010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000513010005060100 +05150100050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000051201020505010105160100 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a010005030202010302020503010005000000051301000504010005000100 +05150100050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000051401000504010005000100 +0516010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000513010005030100 +050101000515010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000514010005020100 +050201000516010000630100006301000063010000630100006301000063010000020100 +050c01000500030e05000000052a01000503020201030202050301000500000005130100 +050201050514010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000514010005060100 +0516010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000511010405030102 +05140100050000630100006301000063010000630100006301000063010000020100050d +0100030e0000052b01000503020201030202050301000000053401000063010000630100 +0063010000630100006301000063010000020100050c01000500030e05000000052a0100 +050302020103020205030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000534010000630100006301000063010000630100006301000063010000020100 +050c01000500030e05000000052a01000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100050d0100030e +0000052b0100050302020103020205030100000005340100006301000063010000630100 +00630100006301000063010000020100050c01000500030e05000000052a010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a010005030202010302020503010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001ff01ff0161050d0100030e0000 +052b01000503020201030202050301000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500010000630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b010005030202010302020503010005000000053201000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000534010000630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +050000000513010005030104051401000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000512010205030100051901000063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b010005030202010302020503010005000000 +051301000503010005180100050000630100006301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000000 +051401000503010005190100006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000500000005130100 +050301030515010005000063010000630100006301000063010000630100006301000002 +0100050c01000500030e05000000052a0100050302020103020205030100000005140100 +050701000515010000630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b0100050302020103020205030100050000000513010005070100 +05140100050000630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a010005030202010302020503010000000514010005020100 +050301000515010000630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b0100050302020103020205030100050000000511010405010103 +05150100050000630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005340100006301000063010000630100006301000063010000630100 +00020100050d0100030e0000052b01000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100050c01000500 +030e05000000052a01000503020201030202050301000000053401000063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010000630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b010005030202010302020503010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e +05000000052a010005030202010302020503010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000534010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005130100050501020514010005000063010000630100006301000063 +0100006301000063010000020100050d0100030e0000052b010005030202010302020503 +010000000512010205040100051801000063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +050000000513010005030100051801000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +051401000503010005190100006301000063010000630100006301000063010000630100 +00020100050c01000500030e05000000052a010005030202010302020503010005000000 +051301000503010305150100050000630100006301000063010000630100006301000063 +010000020100050d0100030e0000052b0100050302020103020205030100000005140100 +050301000502010005150100006301000063010000630100006301000063010000630100 +00020100050c01000500030e05000000052a010005030202010302020503010005000000 +051301000503010005020100051401000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +051401000503010005020100051501000063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +050000000511010405020102051501000500006301000063010000630100006301000063 +01000063010000020100050d0100030e0000052b01000503020201030202050301000000 +0534010000630100006301000063010000630100006301000063010000020100050c0100 +0500030e05000000052a0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000534010000630100006301000063010000630100 +006301000063010000020100050c01000500030e05000000052a01000503020201030202 +050301000500000005320100050000630100006301000063010000630100006301000063 +010000020100050d0100030e0000052b0100050302020103020205030100000005340100 +00630100006301000063010000630100006301000063010000020100050c01000500030e +05000000052a010005030202010302020503010005000000053201000500006301000063 +01000063010000630100006301000063010000020100050d0100030e0000052b01000503 +020201030202050301000000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100006301000063010000630100006301000063010000630100 +00020100050c01000500030e05000000052a010005030202010302020503010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000500010005000100050001ff +01ff0161050d0100030e0000052b01000503020201030202050301000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050001000063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b010005030202010302020503010005000000 +05320100050000630100006301000063010000630100006301000063010000020100050c +01000500030e05000000052a010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000513010005030104051401000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000512010205030100050201000515010000630100 +006301000063010000630100006301000063010000020100050d0100030e0000052b0100 +050302020103020205030100050000000513010005060100051501000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000514010005060100051601000063010000630100 +0063010000630100006301000063010000020100050d0100030e0000052b010005030202 +010302020503010005000000051301000506010005150100050000630100006301000063 +010000630100006301000063010000020100050c01000500030e05000000052a01000503 +020201030202050301000000051401000506010005160100006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000500000005130100050501000516010005000063010000630100006301000063 +0100006301000063010000020100050c01000500030e05000000052a0100050302020103 +020205030100000005140100050501000517010000630100006301000063010000630100 +006301000063010000020100050d0100030e0000052b0100050302020103020205030100 +050000000511010405030100051601000500006301000063010000630100006301000063 +01000063010000020100050c01000500030e05000000052a010005030202010302020503 +010000000534010000630100006301000063010000630100006301000063010000020100 +050d0100030e0000052b0100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100050c01000500030e0500 +0000052a0100050302020103020205030100000005340100006301000063010000630100 +00630100006301000063010000020100050d0100030e0000052b01000503020201030202 +050301000500000005320100050000630100006301000063010000630100006301000063 +010000020100050c01000500030e05000000052a01000503020201030202050301000000 +0534010000630100006301000063010000630100006301000063010000020100050d0100 +030e0000052b010005030202010302020503010005000000053201000500006301000063 +01000063010000630100006301000063010000020100050c01000500030e05000000052a +010005030202010302020503010000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000063010000630100006301000063010000630100 +0063010000020100050d0100030e0000052b010005030202010302020503010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000500010005000100050001ff +01ff0161050c01000500030e05000000052a010005030202010302020503010005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050001000063010000630100006301000063010000630100 +0063010000020100050c01000500030e05000000052a0100050302020103020205030100 +050000000532010005000063010000630100006301000063010000630100006301000002 +0100050d0100030e0000052b010005030202010302020503010000000534010000630100 +006301000063010000630100006301000063010000020100050c01000500030e05000000 +052a01000503020201030202050301000500000005130100050401020515010005000063 +0100006301000063010000630100006301000063010000020100050d0100030e0000052b +010005030202010302020503010000000512010205030100050201000515010000630100 +006301000063010000630100006301000063010000020100050c01000500000005000000 +05000000050000000500000005000000050000000500000005000000052a010005030202 +01030202050301ff01ff0199050d00000500000005000000050000000500000005000000 +050000000500000005000000052b010005030202010302020503010005ff05ff05e30100 +05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff +05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 +01030202050301000549010005ff05ff0598010005030202010302020503010005480101 +05ff05ff05980100050302020103020205030100054701000500010005ff05ff05980100 +0503020201030202050301000549010005ff05ff05980100050302020103020205030100 +0549010005ff05ff059801000503020201030202050301000549010005ff05ff05980100 +0503020201030202050301000549010005ff05ff05980100050302020103020205030100 +0549010005ff05ff059801000503020201030202050301000547010405ff05ff05960100 +05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff +05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +050301000538010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000500010005000100054b0100 +050302020103020205030100053701000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000000054a0100050302020103020205030100053801000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000003ff03ff033e0000054b01000503020201030202 +050301000537010005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000500000005000000050003ff +03ff033e05000000054a01000503020201030202050301000538010005000000050c0000 +050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000 +050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100 +0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202 +050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100 +0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000 +054b01000503020201030202050301000537010005000000050c0100050c0100050003ff +03ff033e05000000054a01000503020201030202050301000538010005000000050c0000 +050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000 +050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100 +0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202 +050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100 +0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000 +054b01000503020201030202050301000537010005000000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050003ff03ff033e05000000054a0100050302020103020205030100 +053801000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000500010003ff03ff033e0000 +054b01000503020201030202050301000537010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000054a01000503020201030202050301000538000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000054b0100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 +010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 +05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff +05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 +010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 +05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff +05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 +010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 +05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff +05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 +05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 +0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 +010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 +05030202010100040503010005ff05ff05e301000503000502020400050301ff01ff01e5 +050300000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff +05ed00000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff +05ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff +02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff +01ff01e10000020804000000040901ff01ff01e100000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 380 315 +%%EOF diff --git a/lib/tv/doc/src/tv_table_browser_updated.gif b/lib/tv/doc/src/tv_table_browser_updated.gif new file mode 100644 index 0000000000..547497487d Binary files /dev/null and b/lib/tv/doc/src/tv_table_browser_updated.gif differ diff --git a/lib/tv/doc/src/tv_table_browser_updated.ps b/lib/tv/doc/src/tv_table_browser_updated.ps new file mode 100644 index 0000000000..0a944565e8 --- /dev/null +++ b/lib/tv/doc/src/tv_table_browser_updated.ps @@ -0,0 +1,2124 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser_updated.eps) +%%CreationDate: (Mon Mar 19 17:15:32 2001) +%%BoundingBox: 0 0 380 315 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 380 315 +userdict begin +%%BeginData: +DisplayImage +0 0 +380.000000 315.000000 +12 +760 630 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +d9d9d9 +b22222 +00ff00 +ff0000 +990000 +7f7f7f +999999 +ff7f7f +009900 +7fff7f +000000 +000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff +02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 +04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff +02d500000202040000000202040002080000020d04000289010302110103023201020258 +0102020c010102010101021e010102290101020601010208010102310101022a01010230 +0101029600000202040000000202040002080000020d0400028901010202010702000101 +0203010102010101020e01050200010702010103020d0101020401010204010302030103 +020e010302060103020301030203010302060103020b0101020a01010202010102190100 +02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 +020c0104021e0101029600000202040000000202040002080000020d0400028901010205 +0101020301010203010102010101020e0101020701010203010102010101020c01010202 +010302030101020101010201010102010101020801010201010102010101020401010201 +01010201010102010101020101010201010102040101020101010201010102060101020a +0101020201010218010102210101020b01010206010102090101021b010202020100020d +01010238010102020101021d010102960000020204000000020204000208000002020406 +020304000289010102050101020301010203010102010101020e01010207010102030101 +020501010209010102030101020701010201010102010101020601020202010102010101 +020801010201010102010101020101010201010102040101020101010202010202030101 +020a01010203010102020103020301030202010302010104020101010202010302030101 +02000101020a0104020101030203010102000101020301010202010302030101021a0100 +020001010201010002020103020301040202010302020101020901010200010102010101 +020301030203010102020101020001010202010102010103020201010200010102010101 +020301030202010102000101020101010202010302020101020201010285000002020400 +000004030208000002020400030400000203040002890101020501010204010102020100 +02020101020e0101020701010203010202040101020a0100020301010207010102010101 +020101010205010102040101020101010208010102010101020101010201010102010101 +02040101020101010204010102020100020b010102030101020101010201010102010101 +020101010200010102010101020101010203010102010101020101010202010202000101 +020a01010202010102010101020201020200010102020101020101010201010102020101 +021a01000200010102010100020101010201010102010101020101010201010102010101 +020101010209010202000102020001010201010102010101020201010202010202000101 +020101010200010102000101020201020200010202000101020101010201010102010101 +0200010102010101020101010201010102010101020201010285000004030101020b0000 +0203040003020000020404000289010102050101020401010201010102020101020e0104 +0204010102040103020d0101020401010205010202020101020101010204010102050101 +020101010207010102020101020101010202010402040101020101010205010102020101 +020901010203010102010101020101010201010102080101020101010203010102010101 +020101010202010102010101020a01010206010102020101020101010202010102010101 +0201010102020101021a0100020001020200010002010101020101010201010102010101 +0201010102010101020d0101020101010201010102050101020201010202010102010101 +020101010200010102000101020201010201010102010101020501010201010202030101 +0201010102010101020101010202010002890103020b0000020304000302000002040400 +0289010102050101020501010200010002030101020e01010207010102060102020e0100 +020301010207010102010101020101010205010102040101020101010206010102030101 +020101010205010102040101020101010204010102020100020b01010203010102010101 +020101010201010102050104020101010203010102010101020101010202010102010101 +020a0101020301040202010102010101020201010201010502020101021a010002010101 +020001000201010102010101020101010201010102010105020d01010201010102010101 +020201040202010102020101020101010201010102000101020001010202010102010101 +0201010102020104020101010204010102010105020201010200010102890103020b0000 +02040400030000000205040002890101020501010205010302030101020e010102070101 +02070101020d010102030101020701010201010102010101020601020202010102010101 +0205010102040101020101010205010102040101020101010202010202030101020a0101 +020301010201010102010101020101010204010102010101020101010203010102010101 +020101010202010102010101020a01010202010102010101020201010201010102020101 +0201010102060101021a0100020201020201010102010101020101010201010102010101 +021101010201010102010101020101010201010102020101020201010201010102010101 +020101010200010102010101020101010201010102010101020101010201010102040101 +020101010206010102000100028a0103020b000002040400030000000205040002890101 +020501010206010102040101020e01010207010102030101020101010201010102080101 +020401010203010102010101020101010201010102010101020401010201010102010101 +020101010200010502010101020101010201010102010101020101010200010102010101 +0201010102060101020a0101020201010201010102010101020101010202010002000101 +02010101020101010203010102010101020101010202010102010101020a010102020101 +02010101020201010201010102020101020101010202010002010101021b010002020102 +020101010201010102010101020001020201010102020100020101010209010102010101 +020101010201010102010101020201010202010102010101020201010207010102010101 +0201010102010101020101010201010102040101020101010202010002030102028a0103 +020b0000020500000206040002890101020501010206010102040101020e010502030101 +020401030202010102080101020401010204010302030103020201010209010302020101 +0200010502020103020301030202010102010103020b0101020a01010202010102020103 +0203010302020102020001010201010202010101020201030203010102010101020b0102 +020101020200010102010104020301010202010302020101021b01000203010102020103 +020301010200010102020103020201010209010102010101020101010202010202000101 +020101010202010102010101020301050202010102010101020101010202010202000101 +02000101020401010202010302040101028b0103020b0000020d04000289010302110103 +0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000 +020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c +040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400 +020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000202010302020000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000202010302020500000005ff05ff05ea01000202010302020000 +05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 +05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 +050c06040504060005030602051f06040505060005040600050406000519060005020600 +0504060005270602050b06000506060005ff05ff05080600050206000509060205130100 +050002020103020205000000050b0600050f0600051f060005090600050a060005190600 +05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100 +0202010302020000050c0600050606020505060005030602051806000506060105000600 +050206020502060405170600050206000502060205030602050206000502060005170600 +050206000501060005000601050206040502060205030602050206000500060105030602 +05ff05f306000502060005020602050506000502060005000601050c0100050002020103 +020205000000050b06000508060005050600050206000502060005170600050506000501 +06010504060005040600051a060005000600050506000502060005020600050106000502 +060005170600050206000501060105010600050306000506060005020600050206000501 +060105010600050106000502060005ff05f2060005020600050106000502060005040600 +0502060105010600050c01000202010302020000050c0603050506000505060005020600 +050206000517060305020600050206000504060005040600051a06000500060005050600 +050206000502060005010600050006000500060005170600050206000501060005020600 +0503060005060600050206000502060005010600050206000501060005ff05f606040501 +060005020600050406000502060005020600050b0100050002020103020205000000050b +06000508060005050600050206040517060005050600050206000504060005040600051a +060005000600050506000502060405010600050006000500060005170600050206000501 +0600050206000503060005060600050206000502060005010600050206000502060205ff +05f306000502060005010604050406000502060005020600050c01000202010302020000 +050c0600050806000505060005020600051b060005050600050206000504060005040600 +051b06000506060005020600050506000500060005000600051706000502060005010600 +050206000503060005060600050206000502060005010600050206000505060005ff05f2 +06000502060005010600050806000502060005020600050b010005000202010302020500 +0000050b0600050806000505060005020600050206000517060005050600050106010504 +060005040600051b06000506060005020600050206000501060005000600050006000517 +060005020600050106010501060005030600050606000502060005020600050106000502 +0600050106000502060005ff05f206000502060005010600050206000504060005020601 +05010600050c01000202010302020000050c060005080600050506000503060205180604 +050206010500060005040600050506010519060005060600050306020503060005000600 +051906020502060005000601050506010504060005030602050206000502060005020602 +05ff05f306000502060005020602050506000502060005000601050c0100050002020103 +02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a +0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103 +020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e +060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff +05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100020201030202000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +020201030202053600000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000051a00000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050100000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050100000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000051a00000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000051a00000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000051a00000500000005000000050000000500000005000000050000000500 +00000500000005000000050000000500000005ff05a50202010302020535000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500010005180000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000100000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +010000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050001000518000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500010005180000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000100051800000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000500010005ff05a402020103 +02020536000005140100051a00000514010005010000051401000501000005140100051a +000005140100051a000005140100051a00000514010005ff05a502020103020205350000 +051601000518000005160100000005160100000005160100051800000516010005180000 +05160100051800000516010005ff05a40202010302020536000005140100051a00000514 +010005010000051401000501000005140100051a000005140100051a000005140100051a +00000514010005ff05a50202010302020535000005050602050306020506010005180000 +051601000000051601000000051601000518000005160100051800000516010005180000 +0516010005ff05a402020103020205360000050406020503060205050100051a00000514 +010005010000051401000501000005140100051a00000506060405080100051a00000508 +060105090100051a0000050806030507010005ff05a50202010302020535000005040604 +050106040505010005180000051006000504010000000510060005040100000005040600 +051001000518000005050608050701000518000005080603050901000518000005070607 +0506010005ff05a402020103020205360000050306000501060105010600050106010504 +0100051a0000050f06000503010005010000050f0600050301000501000005030600050f +0100051a00000503060a05050100051a00000507060305080100051a0000050506030501 +06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600 +0501060005040100000005040600050a06000504010000000504060005010600050d0100 +051800000504060305020603050601000518000005090601050a01000518000005060602 +050306020505010005ff05a4020201030202053600000501060005000603050006020500 +060405020100051a0000050c060005010600050301000501000005030600050a06000503 +0100050100000503060005010600050c0100051a0000050206030504060305040100051a +000005140100051a000005050602050306020504010005ff05a502020103020205350000 +050206000500060305000602050006040503010005180000050a06000501060005010600 +050401000000050406000504060005040600050401000000050406000501060005010600 +050a01000518000005030602050306070503010005180000050706040509010005180000 +05070601050206020506010005ff05a40202010302020536000005010600050006030500 +06020500060405020100051a000005090600050106000501060005030100050100000503 +06000504060005040600050301000501000005030600050106000501060005090100051a +0000050206020504060505030100051a00000507060305080100051a0000050a06020506 +010005ff05a5020201030202053500000502060005000603050006020500060405030100 +051800000507060005010600050106000501060005040100000005040600050406000501 +060005010600050401000000050406000501060005010600050106000507010005180000 +05030602050506030505010005180000050906020509010005180000050a060205080100 +05ff05a40202010302020536000005010600050006070500060405020100051a00000506 +060005010600050106000501060005030100050100000503060005040600050106000501 +060005030100050100000503060005010600050106000501060005060100051a00000502 +06030505060105050100051a00000508060205080100051a0000050806020508010005ff +05a502020103020205350000050206000500060405010600050006040503010005180000 +050406000501060005010600050106000501060005040100000005040600050106000501 +060005010600050106000504010000000504060005010600050106000501060005010600 +050401000518000005040603050d01000518000005090602050901000518000005090602 +0509010005ff05a402020103020205360000050106060501060605020100051a00000503 +060005010600050106000501060005010600050301000501000005030600050106000501 +060005010600050106000503010005010000050306000501060005010600050106000501 +060005030100051a00000503060905060100051a00000508060205080100051a00000514 +010005ff05a5020201030202053500000502060005000602050506000500060205030100 +051800000504060005010600050106000501060005010600050401000000050406000501 +060005010600050106000501060005040100000005040600050106000501060005010600 +050106000504010005180000050506070508010005180000050806040508010005180000 +050906020509010005ff05a4020201030202053600000501060005000602050506000500 +060205020100051a00000503060005010600050106000501060005010600050301000501 +000005030600050106000501060005010600050106000503010005010000050306000501 +060005010600050106000501060005030100051a00000506060405080100051a00000506 +060605060100051a0000050806020508010005ff05a50202010302020535000005020604 +050506040503010005180000051601000000051601000000051601000518000005160100 +0518000005160100051800000516010005ff05a40202010302020536000005140100051a +00000514010005010000051401000501000005140100051a000005140100051a00000514 +0100051a00000514010005ff05a502020103020205350000051601000518000005160100 +000005160100000005160100051800000516010005180000051601000518000005160100 +05ff05a40202010302020536000005140100051a00000514010005010000051401000501 +000005140100051a000005140100051a000005140100051a00000514010005ff05a50202 +010302020535000005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005180000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000518000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005180000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100051800000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005ff05a402020103020205360100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100051a0100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005010100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005010100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100051a0100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100051a0100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100051a0100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005ff05a5020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 +05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202 +01030202050301ff01ff01d1050000000500000005000000050000000500000005000000 +050000000500000005000000050001000503020201030202050301ff01ff01d100000500 +000005000000050000000500000005000000050000000500000005000000050001010503 +020201030202050301020bff0bff0bcb010205000000050e010005000100050302020103 +0202050301020bff0bff0bca000001020000051001010503020201030202050301020b01 +00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff +00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500 +0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510 +01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100 +0503020201030202050301020b0100ff00ff00c9010200000502010a0502010105030202 +01030202050301020b0100ff00ff00c90102050000000502010805020100050001000503 +020201030202050301020b0100ff00ff00c9010200000504010605040101050302020103 +0202050301020b0100ff00ff00c901020500000005040104050401000500010005030202 +01030202050301020b0100ff00ff00c90102000005060102050601010503020201030202 +050301020b0100ff00ff00c9010205000000050601000506010005000100050302020103 +0202050301020b0100ff00ff00c901020000051001010503020201030202050301020b01 +00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff +00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500 +0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510 +01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100 +0503020201030202050301020b0000ff00ff00ca01020000051001010503020201030202 +050301ff01ff01d105000000050001000500010005000100050001000500010005000100 +0500010005000100050001000503020201030202050301ff01ff01d10000050001000500 +010005000100050001000500010005000100050001000500010005000101050302020103 +0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed +020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a +01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 +0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561 +01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505 +010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff +05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a +01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 +0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565 +010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f +0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503 +020201030202050301000565010105ff05ff052f0100054a010005030202010302020503 +01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500 +010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff +05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a +01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103 +020205030100056101020500010105ff05ff052f0100054a010005030202010302020503 +010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503 +020201030202050301000536000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +00000500000005000000050000000500000005000000050000000a040500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000a04050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +0000050000000500000005000000050000000a0405000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +05000000050000000500000005000000050000000500000005000000050000000a040500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000a04050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000a0405000000010005140100 +050001000500010005000100050001000500010005000100050001000500010005240100 +050302020103020205030100053500000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000000050000000500000005000000050000000500000005000a0301000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000a03010000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +05000000050000000500000005000000050000000500000005000a030100000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +0500000005000a0301000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000a03010000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +05000a030100000005000100051301000500010005000100050001000500010005000100 +050001000500010005000100050000000523010005030202010302020503010005360000 +055e01000a01010205000000055c01000a01010205000000055c01000a01010205000000 +055c01000a01010205000000055c01000a01010205000000055c01000a01010205000000 +010005140100050000000500000005000000050000000500000005000000050000000500 +00000524010005030202010302020503010005350000052d0100052f010005000a010102 +0000052b0102052d010005000a0101020000052b0102052d010005000a0101020000052d +0100052d010005000a0101020000052a0104052c010005000a0101020000052c0102052c +010005000a01010200000500010005130100050000000500000005000000050000000500 +000005000000050000000500010005000000052301000503020201030202050301000536 +0000052a0102053001000a010102050000000529010005020100052d01000a0101020500 +00000529010005020100052d01000a01010205000000052b0101052e01000a0101020500 +000005290100053101000a01010205000000052a0100053001000a010102050000000100 +0514010005000000050a0100050000000524010005030202010302020503010005350000 +052d0100052f010005000a0101020000052a010005020100052c010005000a0101020000 +052e0100052c010005000a0101020000052b010005000100052d010005000a0101020000 +052a01000530010005000a0101020000052a01000530010005000a010102000005000100 +0513010005000000050c0100050000000523010005030202010302020503010005360000 +052c0100053001000a010102050000000529010005020100052d01000a01010205000000 +052d0100052d01000a01010205000000052a010005000100052e01000a01010205000000 +05290100053101000a0101020500000005290100053101000a0101020500000001000514 +010005000000050a0100050000000524010005030202010302020503010005350000052d +0100052f010005000a0101020000052d0100052d010005000a0101020000052c0101052d +010005000a0101020000052a010005010100052d010005000a0101020000052a0103052d +010005000a0101020000052a0103052d010005000a010102000005000100051301000500 +0000050c0100050000000523010005030202010302020503010005360000052c01000530 +01000a01010205000000052b0100052f01000a01010205000000052d0100052d01000a01 +0102050000000528010005020100052e01000a01010205000000052d0100052d01000a01 +0102050000000529010005020100052d01000a0101020500000001000514010005000000 +050a0100050000000524010005030202010302020503010005350000052d0100052f0100 +05000a0101020000052b0100052f010005000a0101020000052e0100052c010005000a01 +0102000005290105052c010005000a0101020000052e0100052c010005000a0101020000 +052a010005020100052c010005000a0101020000050001000513010005000000050c0100 +050000000523010005030202010302020503010005360000052c0100053001000a010102 +050000000529010005020100052d01000a010102050000000529010005020100052d0100 +0a01010205000000052c0100052e01000a010102050000000528010005030100052d0100 +0a010102050000000529010005020100052d01000a010102050000000100051401000500 +0000050a0100050000000524010005030202010302020503010005350000052b0104052d +010005000a0101020000052a0104052c010005000a0101020000052b0102052d01000500 +0a0101020000052c0102052c010005000a0101020000052a0103052d010005000a010102 +0000052b0102052d010005000a0101020000050001000513010005000000050c01000500 +00000523010005030202010302020503010005360000055e01000a01010205000000055c +01000a01010205000000055c01000a01010205000000055c01000a01010205000000055c +01000a01010205000000055c01000a0101020500000001000514010005000000050a0100 +050000000524010005030202010302020503010005350000055e010005000a0101020000 +055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000 +055c010005000a0101020000055c010005000a0101020000050001000513010005000000 +050c0100050000000523010005030202010302020503010005360000055e01000a010102 +05000000055c01000a01010205000000055c01000a01010205000000055c01000a010102 +05000000055c01000a01010205000000055c01000a010102050000000100050e01000504 +010005000000050a0100050000000524010005030202010302020503010005350000055e +010005000a0101020000055c010005000a0101020000055c010005000a0101020000055c +010005000a0101020000055c010005000a0101020000055c010005000a01010200000500 +0100050d01010503010005000000050c0100050000000523010005030202010302020503 +010005360000055e01000a01010205000000055c01000a01010205000000055c01000a01 +010205000000055c01000a01010205000000055c01000a01010205000000055c01000a01 +0102050000000100050c0100050001000504010005000000050001000500010005000100 +050001000500010005000100050000000524010005030202010302020503010005350000 +055e010005000a0101020000055c010005000a0101020000055c010005000a0101020000 +055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000 +05000100050e010005030100050000000500000005000000050000000500000005000000 +050000000500010005000000052301000503020201030202050301000536000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001000a010102050000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001000a0101020500000005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000a01010205000000050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001000500010005000100050001000a010102050000000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0a0101020500000005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000a010102050000000100050e0100050401000500 +0000050a0100050000000524010005030202010302020503010005350000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000a000103000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000a0001030000050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000a00010300000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050001000500010005000a000103000005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0a0001030000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000a000103000005000100050e0100050301000500 +0000050c0100050000000523010005030202010302020503010005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000063010000630100 +0063010000630100006301000063010000020100050e01000504010005000000050a0100 +050000000524010005030202010302020503010000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050001000063010000630100006301000063 +0100006301000063010000020100050e01000503010005000000050c0100050000000523 +010005030202010302020503010005000000053201000500006301000063010000630100 +00630100006301000063010000020100050c01040502010005000000050a010005000000 +052401000503020201030202050301000000053401000063010000630100006301000063 +01000063010000630100000201000513010005000000050c010005000000052301000503 +020201030202050301000500000005170100051901000500006301000063010000630100 +006301000063010000630100000201000514010005000000050a01000500000005240100 +050302020103020205030100000005160102051a0100000f010200030102004901000007 +010000230100000b010200030102001f0100006301000063010000630100006301000002 +01000513010005000000050c010005000000052301000503020201030202050301000500 +0000051701000519010005000011010000050100004901000007010000230100000d0100 +00050100001f010000630100006301000063010000630100000201000514010005000000 +050a01000500000005240100050302020103020205030100000005180100051a01000008 +010200050100000501000003010200420100000701000000010100030102000201000000 +01010002010000000101000301020002010400010100000201000004010000050100001f +010000630100006301000063010000630100000201000513010005000000050c01000500 +000005230100050302020103020205030100050000000517010005190100050000070100 +000201000004010000050100000201000002010000410100000701010001010000010100 +000201000001010100010100000101010001010000010100000201000003010000030100 +000201000004010000050100001f01000063010000630100006301000063010000020100 +0514010005000000050a0100050000000524010005030202010302020503010000000518 +0100051a0100000701000002010000040100000501000002010000020100004101000007 +010000020100000101000002010000010100000501000002010000010100000701000003 +0100000201000004010000050100001f0100006301000063010000630100006301000002 +01000513010005000000050c010005000000052301000503020201030202050301000500 +000005170100051901000500000701000002010000040100000501000002010400410100 +000701000002010000010100000201000001010000050100000201000002010200040100 +00030100000201000004010000050100001f010000630100006301000063010000630100 +000201000514010005000000050001000500010005000100050001000500010005000100 +0500000005240100050302020103020205030100000005180100051a0100000701000002 +010000040100000501000002010000450100000701000002010000010100000201000001 +01000005010000020100000501000003010000030100000201000004010000050100001f +010000630100006301000063010000630100000201000513010005000000050001000500 +010005000100050001000500010005000100050001000500000005230100050302020103 +020205030100050000000515010405170100050000070100000201000004010000050100 +000201000002010000410100000701000002010000010100000201000001010000050100 +0002010000010100000201000003010000030100000101010004010000050100001f0100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000534010000080102000501000005010000030102004201000007 +010000020100000201020002010000050100000201000002010200050101000201010000 +01000004010000050100001f010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000053201000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000053401000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000534 +010000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005320100050000630100 +00630100006301000063010000630100006301000002010005140100030e000005240100 +050302020103020205030100000005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01ff01ff016105140100030e000005240100050302020103020205030100050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000630100 +006301000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000100006301000063010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000500 +000005320100050000630100006301000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000000053401000063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010005000000051601020518010005000063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +0503020201030202050301000000051601000502010005180100001f0100000301020003 +010200340100000f01020050010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005150100050201000517 +010005000026010000050100003401000011010000500100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005160100050201000518010000080101000001000001010000020100000101000000 +010100030102000501000005010000030102002d01000008010200050100000201000002 +01000002010200030102000301020002010000000101002d010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000500 +000005180100051801000500000701000001010100010100000201000001010100010100 +0004010000050100000501000002010000020100002c0100000701000002010000040100 +000201000002010000010100000201000001010000020100000101000002010000010101 +00010100002c01000063010000630100006301000063010000020100051301000500030e +0500000005230100050302020103020205030100000005180100051a0100000701000002 +01000001010000020100000101000002010000040100000501000005010000060100002c +010000070100000801000002010000020100000101000005010000050100000201000001 +010000020100002c0100006301000063010000630100006301000002010005140100030e +0000052401000503020201030202050301000500000005160100051a0100050000070100 +000201000001010000020100000101000002010000040100000501000005010000030103 +002c01000008010200050100000201000002010000020102000301020002010400010100 +00020100002c01000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000516010005020100051801000007 +010000020100000101000002010000010100000201000004010000050100000501000002 +010000020100002c0100000b010000040100000201000002010000050100000501000001 +01000005010000020100002c010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005150104051701000500 +000701000001010100010100000101010001010000020100000401000005010000050100 +0002010000020100002c0100000701000002010000040100000201000001010100010100 +00020100000101000002010000010100000201000001010000020100002c010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000534010000080101000001000002010100000100000101000002 +010000040100000501000005010000030103002c01000008010200050100000301010000 +01000002010200030102000301020002010000020100002c010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000500 +0000053201000500000b0100005601000063010000630100006301000063010000630100 +00020100051301000500030e050000000523010005030202010302020503010000000534 +010000070100000201000056010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000053201000500 +000801020057010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005340100006301000063 +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005320100050000630100006301000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000500010005000100050001000500010005000100050001ff01ff0161051301000500 +030e05000000052301000503020201030202050301000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000100006301000063010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000053201000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000053401000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000516010205180100050000630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +00000516010005020100051801000063010000070100005a010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000000051901000517010005000063010000070100005a01000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0000051a0100051801000008010200020100000001010002010000000101000301020042 +010000070100000001010002010000000101000301020002010100000100000201010000 +010000030102003401000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005170101051801000500 +000701000002010000010101000101000001010100010100000101000002010000410100 +000701010001010000010101000101000001010000020100000101000000010000000100 +000101000000010000000100000101000002010000330100006301000063010000630100 +006301000002010005140100030e0000052401000503020201030202050301000000051a +010005180100000b01000001010000020100000101000002010000050100004101000007 +010000020100000101000005010000020100000101000000010000000100000101000000 +010000000100000501000033010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000051901000517 +010005000008010300010100000201000001010000020100000201030041010000070100 +000201000001010000050100000201000001010000000100000001000001010000000100 +000001000002010300330100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000516010005020100051801000007 +010000020100000101000002010000010100000201000001010000020100004101000007 +010000020100000101000005010000020100000101000000010000000100000101000000 +010000000100000101000002010000330100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000516 +010205180100050000070100000201000001010000020100000101000002010000010100 +000201000041010000070101000101000001010000050100000201000001010000000100 +000001000001010000000100000001000001010000020100003301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005340100000801030001010000020100000101000002010000020103004101000007 +010000000101000201000006010200020100000001000000010000010100000001000000 +010000020103003301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005320100050000630100 +00630100006301000063010000630100006301000002010005140100030e000005240100 +050302020103020205030100000005340100006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000000053201000500006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000053401000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000532010005000063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000063010000630100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001ff01ff +016105140100030e00000524010005030202010302020503010005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +050302020103020205030100000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500010000630100006301000063010000630100006301000063 +01000002010005140100030e000005240100050302020103020205030100050000000532 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005340100006301000063 +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005180100051801000500006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000518010105190100001001000006010000490100000e0100001c +0100000b010200030102001f010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005160100050001000518 +010005000010010000510100000e0100001c0100000d010000050100001f010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000517010005000100051901000008010200020104000201020002 +01000000010100030102003b010000080102000201000001010000030102000201000000 +0101000301020002010400010100000201000004010000050100001f0100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +010005000000051501000501010005180100050000070100000201000003010000060100 +00020101000101000001010000020100003a010000070100000201000001010000000100 +000301000002010000010101000101000001010000020100000301000003010000020100 +0004010000050100001f0100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005150100050201000519 +0100000701000007010000060100000201000002010000050100003a0100000701000005 +010100080100000101000002010000010100000701000003010000020100000401000005 +0100001f0100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010005000000051401050517010005000008010200040100 +00060100000201000002010000020103003a010000080102000201010005010300010100 +00020100000201020004010000030100000201000004010000050100001f010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000519010005190100000b01000003010000060100000201000002 +01000001010000020100003a0100000b0100000101000000010000030100000201000001 +010000020100000501000003010000030100000201000004010000050100001f01000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000517010205170100050000070100000201000003010000060100 +00020100000201000001010000020100003a010000070100000201000001010000010100 +000201000002010000010100000201000001010000020100000301000003010000010101 +0004010000050100001f0100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005340100000801020005 +010100040100000201000002010000020103003a01000008010200020100000201000002 +01030001010000020100000201020005010100020101000001000004010000050100001f +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005320100050000630100006301000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000000053401000063010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000053201000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000534010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001ff01ff0161051301000500030e0500 +0000052301000503020201030202050301000a3600630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0a3501000063010000630100006301000063010000630100006301000002010005130100 +0500030e05000000052301000503020201030202050301000a0101340063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000a010134006301000063010000630100006301000063010000630100 +00020100051301000500030e05000000052301000503020201030202050301000a010115 +000401190063010000630100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000a0101150000011d00070100000e0100 +0014010000340100002b0102003401000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000a0101150000011d +00070100000e0100004a0100002d01000034010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000a0101150000011d +000701000001010000030102000201040002010200020100000001010003010200020100 +000001010003010200260100000701000002010000010100000001010002010000000101 +00030102000301020005010000030102002d010000630100006301000063010000630100 +00020100051301000500030e05000000052301000503020201030202050301000a010115 +0003011a0007010000000100000301000002010000030100000301000002010000010101 +000101000004010000020101000101000001010000020100002501000007010000020100 +000101010001010000010101000101000001010000020100000101000002010000040100 +0002010000020100002c0100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000a010119000001190007010100080100 +000301000007010000010100000801000002010000020100000501000025010000070100 +000201000001010000020100000101000002010000010100000901000004010000060100 +002c01000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000a01011900000119000701010005010300030100 +000401030001010000080100000201000002010000020103002501000007010000020100 +0001010000020100000101000002010000020102000301030004010000030103002c0100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000a010114000001030000011900070100000001000003010000020100 +000301000003010000020100000101000008010000020100000201000001010000020100 +002501000007010000020100000101000002010000010100000201000005010000010100 +00020100000401000002010000020100002c010000630100006301000063010000630100 +00020100051301000500030e05000000052301000503020201030202050301000a010115 +0003011a0007010000010100000201000002010000030100000301000002010000010100 +000801000002010000020100000101000002010000250100000701000001010100010101 +000101000001010100010100000101000002010000010100000201000004010000020100 +00020100002c0100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000a01013400070100000201000002010300040101 +000201030001010000080100000201000002010000020103002501000008010100000100 +0001010000000101000201000000010100030102000301030004010000030103002c0100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +0503020201030202050301000a01013400630100000e010000050100004c010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000a01013400630100000e010000050100004c0100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +0a01013400630100000e010000050100004c010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000a01013400630100 +006301000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000a01013400630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0a0101340063010000630100006301000063010000630100006301000002010005130100 +0500030e05000000052301000503020201030202050301000a0001ff01ff019705140100 +030e00000524010005030202010302020503010005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500010000630100006301000063010000630100006301000063010000020100 +05140100030e000005240100050302020103020205030100050000000532010005000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100000005340100006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000500000005170102051701000500006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +0100000005170100051b0100000a0100001a01010004010000340100000f0102000c0100 +00020100003e0100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000500000005150100051b0100050000250100003c +01000011010000100100003e010000630100006301000063010000630100000201000513 +01000500030e0500000005230100050302020103020205030100000005160100051c0100 +000801020003010200030102000301020004010000040102000201000000010100030102 +0026010000080102000501000002010000020100000201020002010000010100003b0100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000500000005150103051801000500000a010000020100000201000001 +010000020100000101000002010000010104000401000002010100010100000101000002 +010000250100000701000002010000040100000201000002010000040100000201000000 +0100003c01000063010000630100006301000063010000020100051301000500030e0500 +0000052301000503020201030202050301000000051601000502010005180100000a0100 +000201000002010000010100000501000002010000030100000601000002010000020100 +000101000002010000250100000b01000004010000020100000201000004010000020101 +003d0100006301000063010000630100006301000002010005140100030e000005240100 +050302020103020205030100050000000515010005020100051701000500000a01000002 +010000020100000201020002010400030100000601000002010000020100000101040025 +0100000801030004010000030100000001000005010000020101003d0100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +0202050301000000051601000502010005180100000a0100000201000002010000050100 +000101000007010000060100000201000002010000010100002901000007010000020100 +000401000003010000000100000501000002010000000100003c01000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0500000005160102051801000500000a0100000201000002010000010100000201000001 +010000020100000301000006010000020100000201000001010000020100002501000007 +0100000201000004010000040100000601000002010000010100003b0100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100000005340100000a01000003010200030102000301020004010000060100 +000201000002010000020102002601000008010300040100000401000006010000020100 +00020100003a0100006301000063010000630100006301000002010005140100030e0000 +0524010005030202010302020503010005000000053201000500000a0100005701000063 +01000063010000630100006301000063010000020100051301000500030e050000000523 +010005030202010302020503010000000534010000070100000101000057010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010005000000053201000500000801010058010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100000005340100006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000500000005320100 +050000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000000050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +05000100050001ff01ff0161051301000500030e05000000052301000503020201030202 +050301000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000100006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000000 +053401000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100050000000515010405170100 +05000063010000630100006301000063010000630100006301000002010005140100030e +0000052401000503020201030202050301000000051601000502010005180100000a0101 +00130100000b0100000201000030010000250100000b0102000301020026010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010005000000051801000518010005000009010000150100000f01000030 +010000250100000d01000005010000260100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010000000519010005190100 +000901000003010000000101000301020003010100000100000101000000010100030102 +0002010000010100002d0100000701000000010100030102000201000000010100020100 +000001010002010400010100000201000004010000050100002601000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000500000005180100051801000500000701040001010100010100000101000002 +010000010100000101010001010100010100000401000002010000000100002e01000007 +010100010100000101000002010000010101000101000001010100010100000301000003 +010000020100000401000005010000260100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010000000519010005190100 +000901000003010000050100000201000001010000020100000101000008010000020101 +002f01000007010000020100000101000002010000010100000501000007010000030100 +000201000004010000050100002601000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000500000005170100 +051901000500000901000003010000050104000101000002010000010100000801000002 +0101002f0100000701000002010000010100000201000001010000050100000701000003 +010000020100000401000005010000260100006301000063010000630100006301000002 +010005140100030e000005240100050302020103020205030100000005180100051a0100 +000901000003010000050100000501000002010000010100000801000002010000000100 +002e01000007010000020100000101000002010000010100000501000007010000030100 +000201000004010000050100002601000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000500000005170100 +051901000500000901000003010000050100000201000001010000010101000101000008 +01000002010000010100002d010000070100000201000001010000020100000101000005 +010000070100000301000001010100040100000501000026010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000000 +053401000009010000030100000601020003010100000100000101000008010000020100 +00020100002c010000070100000201000002010200020100000501000008010100020101 +000001000004010000050100002601000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000500000005320100 +05000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100000005340100006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010005000000053201000500006301000063010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000000 +053401000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100050000000532010005000063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010000000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001ff01ff016105140100030e0000052401000503020201030202050301000e360063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +0000052301000503020201030202050301000e350d000063010000630100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +01000e0107320d0100630100006301000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000e0107320d010063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +01000503020201030202050301000e010716010207180d01006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +01030202050301000e01071501000702010007170d01006301000010010000200102002d +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000e01071501000702010007170d01006301000010010000220100 +002d01000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000e01071501000702010007170d01000701000000 +010100030102000201000000010100490100000801020002010400010100000201000001 +01000000010100030102000201000000010100050100000301020002010000000101001f +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000e010716010207180d0100070101000101000001010000020100 +000101010001010000480100000701000002010000030100000301000002010000010101 +000101000001010000020100000101010001010000040100000201000002010000010101 +00010100001e01000063010000630100006301000063010000020100051301000500030e +05000000052301000503020201030202050301000e01071501000702010007170d010007 +010000020100000101000002010000010100004c01000007010000070100000301000002 +010000010100000501000002010000010100000201000004010000060100000101000002 +0100001e0100006301000063010000630100006301000002010005140100030e00000524 +01000503020201030202050301000e01071501000702010007170d010007010000020100 +0001010400010100004c0100000801020004010000030100000201000001010000050104 +000101000002010000040100000301030001010000020100001e01000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000e01071501000702010007170d0100070100000201000001010000050100004c +0100000b0100000301000003010000020100000101000005010000050100000201000004 +010000020100000201000001010000020100001e01000063010000630100006301000063 +01000002010005140100030e0000052401000503020201030202050301000e0107160102 +07180d010007010100010100000101000002010000010100004c01000007010000020100 +000301000003010000010101000101000005010000020100000101010001010000040100 +00020100000201000001010000020100001e010000630100006301000063010000630100 +00020100051301000500030e05000000052301000503020201030202050301000e010732 +0d0100070100000001010003010200020100004c01000008010200050101000201010000 +01000001010000060102000201000000010100050100000301030001010000020100001e +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000e0107320d0100070100005a0100002a01000037010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +01030202050301000e0107320d0100070100005a0100002a010000370100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +01000e0107320d0100070100005a0100002a010000370100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +0e0107320d01006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000e0107320d010063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +0503020201030202050301000e010d340063010000630100006301000063010000630100 +006301000002010005140100030e0000052401000503020201030202050301000e000d35 +01ff01ff0161051301000500030e05000000052301000503020201030202050301000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000100006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000000053201000500006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000053401000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000516010205180100050000630100 +00630100006301000063010000630100006301000002010005140100030e000005240100 +0503020201030202050301000000051601000502010005180100001f0100004201000012 +010000170102003401000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005150100050201000517 +010005000063010000120100001901000034010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000051601000502 +01000518010000070101000001000003010200020100000001010003010200030102003b +010000080102000301010000010000020102000201000000010100020100000001010005 +010000030102000201000000010100260100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000515 +010005020100051701000500000701000000010000000100000101000002010000010101 +00010100000401000002010000020100003a010000070100000201000001010000010101 +000101000002010000010101000101000001010100010100000401000002010000020100 +000101010001010000250100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000517010305180100000701000000 +01000000010000050100000101000008010000060100003a010000070100000201000001 +010000020100000101000002010000010100000201000001010000020100000401000006 +010000010100000201000025010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000051901000517 +0100050000070100000001000000010000020103000101000008010000030103003a0100 +000701000002010000010100000201000001010400010100000201000001010000020100 +000401000003010300010100000201000025010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000051901000519 +010000070100000001000000010000010100000201000001010000080100000201000002 +0100003a0100000701000002010000010100000201000001010000050100000201000001 +010000020100000401000002010000020100000101000002010000250100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000515010205190100050000070100000001000000010000010100 +0002010000010100000801000002010000020100003a0100000701000002010000010100 +000101010001010000020100000101000002010000010101000101000004010000020100 +000201000001010000020100002501000063010000630100006301000063010000020100 +05140100030e000005240100050302020103020205030100000005340100000701000000 +01000000010000020103000101000008010000030103003a010000080102000301010000 +010000020102000201000002010000010100000001010005010000030103000101000002 +0100002501000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000532010005000063010000230100 +003e0100006301000063010000630100006301000002010005140100030e000005240100 +0503020201030202050301000000053401000063010000230100003e0100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000532010005000063010000230100003e01000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005340100006301000063010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000053201000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001ff01ff016105140100030e0000052401000503020201030202050301000c36 +00630100006301000063010000630100006301000063010000020100051301000500030e +05000000052301000503020201030202050301000c350900006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000c01083209010063010000630100006301000063010000630100006301000002 +0100051301000500030e05000000052301000503020201030202050301000c0108320901 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000c01081301000804010208150901006301000063 +01000063010000630100006301000063010000020100051301000500030e050000000523 +01000503020201030202050301000c010811010208030100080201000814090100070100 +0016010000420100000701000006010200100100000c0100003001000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0c010813010008030100080201000814090100070100005a010000070100000801000010 +0100000c0100003001000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000c01081301000803010008020100 +081409010007010000010100000301020002010000000101000301020002010000000101 +003b01000007010000000101000501000003010200030102000201000001010000030102 +000201000000010100030102000201000000010100030101000001000017010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000c01081301000803010008020100081409010007010000000100000301000002 +01000001010100010100000401000002010100010100003a010000070101000101000004 +010000020100000201000001010000020100000101000000010000030100000201000001 +010100010100000101000002010000010101000101000001010000010101001701000063 +010000630100006301000063010000020100051301000500030e05000000052301000503 +020201030202050301000c01081301000803010008020100081409010007010100080100 +00010100000801000002010000020100003a010000070100000201000004010000060100 +000101000005010100040100000201000001010000020100000101000002010000010100 +000501000002010000170100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000c010813010008030100080201000814 +0901000701010005010300010100000801000002010000020100003a0100000701000002 +010000040100000301030001010000050101000401040001010000020100000101040001 +010000050100000201000017010000630100006301000063010000630100000201000513 +01000500030e05000000052301000503020201030202050301000c010813010008030100 +080201000814090100070100000001000003010000020100000101000008010000020100 +00020100003a010000070100000201000004010000020100000201000001010000050100 +000001000003010000050100000201000001010000050100000501000002010000170100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000c010811010408020102081509010007010000010100000201000002 +010000010100000801000002010000020100003a01000007010100010100000401000002 +010000020100000101000002010000010100000101000002010000020100000101010001 +010000010100000201000001010000050100000101010017010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +01000c010832090100070100000201000002010300010100000801000002010000020100 +003a01000007010000000101000501000003010300020102000201000002010000020102 +000201000000010100030102000201000006010100000100001701000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +0c010832090100630100004a010000170100006301000063010000630100006301000002 +0100051301000500030e05000000052301000503020201030202050301000c0108320901 +006301000046010000020100001701000063010000630100006301000063010000020100 +05140100030e0000052401000503020201030202050301000c0108320901006301000047 +0102001801000063010000630100006301000063010000020100051301000500030e0500 +0000052301000503020201030202050301000c0108320901006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000c01083209010063010000630100006301000063010000630100006301000002 +0100051301000500030e05000000052301000503020201030202050301000c0109340063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +01000503020201030202050301000c00093501ff01ff0161051301000500030e05000000 +052301000503020201030202050301000c36006301000063010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000c35 +090000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000c01083209010063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000c010832090100630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000c01 +081301000805010008160901006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000c01081101020803 +01020816090100170100004a010000070100003001020026010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +01000c0108130100080501000816090100170100004a0100000701000032010000260100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +01030202050301000c010813010008050100081609010007010100000100000301020002 +010400020102004201000007010000000101000201000000010100030102000201010000 +010000020101000001000003010200020100000001010005010000030102000201000000 +0101001801000063010000630100006301000063010000020100051301000500030e0500 +0000052301000503020201030202050301000c0108130100080501000816090100070100 +000001000000010000010100000201000003010000030100000201000041010000070101 +000101000001010100010100000101000002010000010100000001000000010000010100 +000001000000010000010100000201000001010100010100000401000002010000020100 +000101010001010000170100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000c010813010008050100081609010007 +010000000100000001000005010000030100000301000045010000070100000201000001 +010000050100000201000001010000000100000001000001010000000100000001000005 +010000010100000201000004010000060100000101000002010000170100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +0202050301000c0108130100080501000816090100070100000001000000010000020103 +000301000004010200420100000701000002010000010100000501000002010000010100 +000001000000010000010100000001000000010000020103000101000002010000040100 +000301030001010000020100001701000063010000630100006301000063010000020100 +05140100030e0000052401000503020201030202050301000c0108130100080501000816 +090100070100000001000000010000010100000201000003010000070100004101000007 +010000020100000101000005010000020100000101000000010000000100000101000000 +010000000100000101000002010000010100000201000004010000020100000201000001 +010000020100001701000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000c01081101040801010408140901 +000701000000010000000100000101000002010000030100000301000002010000410100 +000701010001010000010100000501000002010000010100000001000000010000010100 +000001000000010000010100000201000001010100010100000401000002010000020100 +000101000002010000170100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000c010832090100070100000001000000 +010000020103000401010002010200420100000701000000010100020100000601020002 +010000000100000001000001010000000100000001000002010300010100000001010005 +010000030103000101000002010000170100006301000063010000630100006301000002 +0100051301000500030e05000000052301000503020201030202050301000c0108320901 +006301000031010000300100006301000063010000630100006301000002010005140100 +030e0000052401000503020201030202050301000c010832090100630100003101000030 +01000063010000630100006301000063010000020100051301000500030e050000000523 +01000503020201030202050301000c010832090100630100003101000030010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000c01083209010063010000630100006301000063010000630100006301000002 +0100051301000500030e05000000052301000503020201030202050301000c0108320901 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000c01093400630100006301000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000c00093501ff01ff016105140100030e00000524010005030202010302020503 +010005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005340100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005130100050401020515 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005120102050301000502 +010005150100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005130100050301000502 +010005140100050000630100006301000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000000051401000503 +010005020100051501000063010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000051301000506 +010005150100050000630100006301000063010000630100006301000063010000020100 +051301000500030e05000000052301000503020201030202050301000000051401000505 +010005170100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005130100050401000517 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005140100050301000502 +010005150100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005110104050101040514 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005340100006301000063 +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005320100050000630100006301000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000000053401000063010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000053201000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000534010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +01000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001ff01ff0161051301000500030e0500 +000005230100050302020103020205030100050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +010000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005320100050000630100 +00630100006301000063010000630100006301000002010005140100030e000005240100 +050302020103020205030100000005340100006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000000051301000504010205150100050000630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005120102050301000502010005150100006301000063010000630100006301000063 +01000063010000020100051301000500030e050000000523010005030202010302020503 +010005000000051301000507010005140100050000630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005140100050701000515010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +000005130100050501010515010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000514 +010005070100051501000063010000630100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000513 +010005070100051401000500006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000051401000503 +010005020100051501000063010000630100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000511 +010405020102051501000500006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000053401000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000532010005000063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000534010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +000005320100050000630100006301000063010000630100006301000063010000020100 +05140100030e000005240100050302020103020205030100000005340100006301000063 +01000063010000630100006301000063010000020100051301000500030e050000000523 +010005030202010302020503010005000000053201000500006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000000050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100006301000063010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100050001000500010005000100050001ff01ff01610514 +0100030e0000052401000503020201030202050301000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050001000063010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000053201000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000534010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000513010005060100051501000500006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000512010205050101051601000063010000630100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +010005000000051301000504010005000100051501000500006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000514010005040100050001000516010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000513010005030100050101000515010005000063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +050302020103020205030100000005140100050201000502010005160100006301000063 +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005130100050201050514010005000063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +050302020103020205030100000005140100050601000516010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000511010405030102051401000500006301000063010000630100 +00630100006301000063010000020100051301000500030e050000000523010005030202 +010302020503010000000534010000630100006301000063010000630100006301000063 +01000002010005140100030e000005240100050302020103020205030100050000000532 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005340100006301000063 +0100006301000063010000630100006301000002010005140100030e0000052401000503 +020201030202050301000500000005320100050000630100006301000063010000630100 +006301000063010000020100051301000500030e05000000052301000503020201030202 +050301000000053401000063010000630100006301000063010000630100006301000002 +010005140100030e00000524010005030202010302020503010005000000053201000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000063010000630100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001ff01ff0161051301000500030e050000000523010005030202010302020503 +010005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000063010000630100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050001000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000534 +010000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005130100050301040514 +010005000063010000630100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000512010205030100051901000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000513010005030100051801000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000051401000503010005190100006301000063 +01000063010000630100006301000063010000020100051301000500030e050000000523 +010005030202010302020503010005000000051301000503010305150100050000630100 +00630100006301000063010000630100006301000002010005140100030e000005240100 +050302020103020205030100000005140100050701000515010000630100006301000063 +010000630100006301000063010000020100051301000500030e05000000052301000503 +020201030202050301000500000005130100050701000514010005000063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000514010005020100050301000515010000630100006301000063 +010000630100006301000063010000020100051301000500030e05000000052301000503 +020201030202050301000500000005110104050101030515010005000063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000534010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +000005320100050000630100006301000063010000630100006301000063010000020100 +05140100030e000005240100050302020103020205030100000005340100006301000063 +01000063010000630100006301000063010000020100051301000500030e050000000523 +010005030202010302020503010005000000053201000500006301000063010000630100 +0063010000630100006301000002010005140100030e0000052401000503020201030202 +050301000000053401000063010000630100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000532 +010005000063010000630100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001ff01ff016105140100030e00000524010005030202010302020503 +010005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005340100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005130100050501020514 +010005000063010000630100006301000063010000630100006301000002010005130100 +0500030e0500000005230100050302020103020205030100000005120102050401000518 +01000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100050000000513010005030100051801000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000514010005030100051901000063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010005000000051301000503010305150100050000630100 +006301000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000000051401000503010005020100051501000063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010005000000051301000503010005020100051401000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000514010005030100050201000515 +01000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100050000000511010405020102051501000500 +00630100006301000063010000630100006301000063010000020100051301000500030e +050000000523010005030202010302020503010000000534010000630100006301000063 +01000063010000630100006301000002010005140100030e000005240100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005340100006301000063010000630100006301000063010000630100000201000514 +0100030e0000052401000503020201030202050301000500000005320100050000630100 +006301000063010000630100006301000063010000020100051301000500030e05000000 +052301000503020201030202050301000000053401000063010000630100006301000063 +010000630100006301000002010005140100030e00000524010005030202010302020503 +010005000000053201000500006301000063010000630100006301000063010000630100 +00020100051301000500030e050000000523010005030202010302020503010000000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000063 +010000630100006301000063010000630100006301000002010005140100030e00000524 +010005030202010302020503010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +0100050001000500010005000100050001ff01ff0161051301000500030e050000000523 +010005030202010302020503010005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050001000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050000000532010005000063010000630100 +006301000063010000630100006301000002010005140100030e00000524010005030202 +010302020503010000000534010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +000005130100050301040514010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000512 +010205030100050201000515010000630100006301000063010000630100006301000063 +010000020100051301000500030e05000000052301000503020201030202050301000500 +000005130100050601000515010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000514 +010005060100051601000063010000630100006301000063010000630100006301000002 +0100051301000500030e0500000005230100050302020103020205030100050000000513 +010005060100051501000500006301000063010000630100006301000063010000630100 +0002010005140100030e0000052401000503020201030202050301000000051401000506 +010005160100006301000063010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000051301000505 +010005160100050000630100006301000063010000630100006301000063010000020100 +05140100030e000005240100050302020103020205030100000005140100050501000517 +010000630100006301000063010000630100006301000063010000020100051301000500 +030e05000000052301000503020201030202050301000500000005110104050301000516 +010005000063010000630100006301000063010000630100006301000002010005140100 +030e00000524010005030202010302020503010000000534010000630100006301000063 +010000630100006301000063010000020100051301000500030e05000000052301000503 +020201030202050301000500000005320100050000630100006301000063010000630100 +00630100006301000002010005140100030e000005240100050302020103020205030100 +000005340100006301000063010000630100006301000063010000630100000201000513 +01000500030e050000000523010005030202010302020503010005000000053201000500 +0063010000630100006301000063010000630100006301000002010005140100030e0000 +052401000503020201030202050301000000053401000063010000630100006301000063 +0100006301000063010000020100051301000500030e0500000005230100050302020103 +020205030100050000000532010005000063010000630100006301000063010000630100 +006301000002010005140100030e00000524010005030202010302020503010000000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000063 +0100006301000063010000630100006301000063010000020100051301000500030e0500 +000005230100050302020103020205030100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001ff01ff016105140100030e00000524 +010005030202010302020503010005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +01000063010000630100006301000063010000630100006301000002010005140100030e +000005240100050302020103020205030100050000000532010005000063010000630100 +0063010000630100006301000063010000020100051301000500030e0500000005230100 +050302020103020205030100000005340100006301000063010000630100006301000063 +0100006301000002010005140100030e0000052401000503020201030202050301000500 +000005130100050401020515010005000063010000630100006301000063010000630100 +0063010000020100051301000500030e0500000005230100050302020103020205030100 +000005120102050301000502010005150100006301000063010000630100006301000063 +010000630100000201000514010005000000050000000500000005000000050000000500 +00000500000005000000052401000503020201030202050301ff01ff0199051301000500 +000005000000050000000500000005000000050000000500000005000000050000000523 +010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff +05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 +010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 +0202010302020503010005ff05ff05e301000503020201030202050301000549010005ff +05ff059801000503020201030202050301000548010105ff05ff05980100050302020103 +020205030100054701000500010005ff05ff059801000503020201030202050301000549 +010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503 +020201030202050301000549010005ff05ff059801000503020201030202050301000549 +010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503 +020201030202050301000547010405ff05ff0596010005030202010302020503010005ff +05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 +010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005380100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100054b01000503020201030202050301000537 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000000054a01000503 +020201030202050301000538010005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000003ff03ff033e0000054b010005030202010302020503010005370100050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050003ff03ff033e05000000054a01000503 +020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b +01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff +033e05000000054a01000503020201030202050301000538010005000000050c0000050c +010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c +0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538 +010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503 +01000537010005000000050c0100050c0100050003ff03ff033e05000000054a01000503 +020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b +01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff +033e05000000054a01000503020201030202050301000538010005000000050c0000050c +010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c +0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538 +010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503 +010005370100050000000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050003ff03ff +033e05000000054a01000503020201030202050301000538010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010003ff03ff033e0000054b010005030202010302020503 +010005370100050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +00000500000005000000050000000500000005000000050000000500000005000000054a +010005030202010302020503010005380000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000054b010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 +0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 +010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff +05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 +010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 +0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 +010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff +05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 +010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 +0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 +010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff +05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 +010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 +02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 +0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 +010005030202010302020503010005ff05ff05e3010005030202010100040503010005ff +05ff05e301000503000502020400050301ff01ff01e50503000002020400000002020400 +05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400 +05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400 +000502ff02ff02e100060202040000000208040002ff02ff02e100000208040000000208 +040002ff02ff02e100000208040000000208040001ff01ff01e100000208040000000409 +01ff01ff01e100000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 380 315 +%%EOF diff --git a/lib/tv/doc/src/tv_table_loaded.gif b/lib/tv/doc/src/tv_table_loaded.gif new file mode 100644 index 0000000000..1786426f4d Binary files /dev/null and b/lib/tv/doc/src/tv_table_loaded.gif differ diff --git a/lib/tv/doc/src/tv_table_loaded.ps b/lib/tv/doc/src/tv_table_loaded.ps new file mode 100644 index 0000000000..3f0cf9d707 --- /dev/null +++ b/lib/tv/doc/src/tv_table_loaded.ps @@ -0,0 +1,1430 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_loaded.eps) +%%CreationDate: (Mon Mar 19 17:15:33 2001) +%%BoundingBox: 0 0 532 441 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 532 441 +userdict begin +%%BeginData: +DisplayImage +0 0 +532.000000 441.000000 +12 +760 630 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +ff0000 +d9d9d9 +b22222 +828282 +ff9155 +c3c3c3 +7f7f7f +990000 +000000 +000000 +000000 +000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff +02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 +04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff +02d500000202040000000202040002080000020d040002a501010206010102150101021e +0101022901010206010102430101022a010102260101023201010233010102ae00000202 +040000000202040002080000020d04000277010502000107020101030206010702090101 +02060101021501010219010002030101021c0100020b010102060101022e010202020100 +020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 +00000202040002080000020d04000277010102070101020301010201010102080101020c +010102060101021501010218010102210101020b010102060101022e010202020100020d +01010238010102020101024801010215010102cc00000202040000000202040002080000 +0202040602030400027701010207010102030101020c0101020401030203010102000101 +020301010202010302020101020901010202010302030103020201030201010402010101 +020201030203010102000101020a01040201010302030101020001010203010102020103 +022701000200010102010100020201030203010402020103020201010209010102000101 +020101010203010302030101020201010200010102020101020101030202010402020101 +020101010202010102020101020001010203010102000101020301030203010402020104 +020501040202010102010101020501030201010402000101020101010204010302020101 +020001010201010102020103020201040202010402020103020301010200010102060104 +020201030274000002020400000004030208000002020400030400000203040002770101 +0207010102030102020b0101020301010201010102020102020001010202010102010101 +020101010201010102090101020101010201010102010101020101010200010102010101 +020101010203010102010101020101010202010202000101020a01010202010102010101 +020201020200010102020101020101010201010102260100020001010201010002010101 +020101010201010102010101020101010201010102010101020901020200010202000101 +020101010201010102020101020201020200010102010101020001010200010102010101 +020101010202010102010101020201010202010202000101020201020200010102010101 +020101010201010102050101020801010201010102020101020101010204010102010101 +020101010202010102010101020301010201010102010101020001010201010102010101 +020101010200010102050101020501010201010102020102020001010204010102050101 +020101010273000004030101020b00000203040003020000020404000277010402040101 +0204010302090101020701010202010102010101020201010201010102010101020d0101 +020101010201010102010101020801010201010102030101020101010201010102020101 +02010101020a010102060101020201010201010102020101020101010201010102260100 +0200010202000100020101010201010102010101020101010201010102010101020d0101 +020101010201010102050101020201010202010102010101020101010200010102000101 +020101010201010102020101020101010202010102020101020101010202010102010101 +020101010201010102010102020401020207010102010101020201010201010102040101 +020101010201010102030101020001000204010102010101020101020203010102010101 +020401020204010202040101020101010202010102010101020401020204010102010101 +02760103020b000002030400030200000204040002770101020701010206010202080101 +0204010402020101020101010202010102010105020d0101020101010201010102010101 +02050104020101010203010102010101020101010202010102010101020a010102030104 +020201010201010102020101020101050226010002010101020001000201010102010101 +020101010201010102010105020d01010201010102010101020201040202010102020101 +020101010201010102000101020001010201010102010101020201010201010102020101 +020201010201010102020101020101010201010502020103020301030205010102010101 +020201010201010102040105020101010204010102050105020101010204010102010101 +020501030203010302020101020101010202010102010101020501030202010502760103 +020b00000204040003000000020504000277010102070101020701010208010102030101 +020101010202010102010101020201010201010102110101020101010201010102010101 +0204010102010101020101010203010102010101020101010202010102010101020a0101 +020201010201010102020101020101010202010102010101022a01000202010202010101 +020101010201010102010101020101010211010102010101020101010201010102010101 +020201010202010102010101020101010201010102000101020001010200010202020101 +020101010202010102020101020101010202010102010101020101010208010202040102 +020401010201010102020101020101010204010102050101020301000200010102040101 +020501010204010102010101020701020204010202010101020101010202010102010101 +0207010202010101027a0103020b00000204040003000000020504000277010102070101 +020301010201010102080101020301010201010102020101020101010202010102010101 +020201000201010102090101020101010201010102010101020201000200010102010101 +020101010203010102010101020101010202010102010101020a01010202010102010101 +020201010201010102020101020101010202010002260100020201020201010102010101 +020101010200010202010101020201000201010102090101020101010201010102010101 +020101010202010102020101020101010202010102070101020001010202010102000102 +020201010202010102010101020201010201010102010101020201000205010102050101 +020101010200010102000102020201010200010202010101020001010202010002010101 +020201010201010102000101020001010202010002010101020401010201010102020100 +020401010205010102010101020101010202010102010101020101010204010102010101 +0202010002760103020b0000020500000206040002770105020301010204010302090101 +020401020200010102010104020301010202010302020101020901010202010302030103 +02020102020001010201010202010101020201030203010102010101020b010202010102 +020001010201010402030101020201030227010002030101020201030203010102000101 +020201030202010102090101020101010201010102020102020001010201010102020101 +020101010203010502050101020301010200010102020101020201010201010102020101 +020101010202010302020104020201040202010102010101020001010203010102000101 +020101010201010302030102020001010201010102000101020101030202010102040101 +020201030201010402020104020301030203010102010101020101010200010402030103 +02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d +040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff +02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 +0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 +00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff +06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 +020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 +061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa +07000602070006090702061308010202010302020001060b0700060f0700062107000614 +0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b +0700061308010202010302020001060b0700060607020605070006030702061a07000604 +070206030702060507000603070206180700060207000601070006000701060207040602 +070206030702060207000600070106030702061807000602070006020702060307020602 +07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 +0202010302020001060b0700060807000605070006020700060207000619070006030700 +060207000601070006020700060407000602070006020700061707000602070006010701 +060107000603070006060700060207000602070006010701060107000601070006020700 +0618070006000700060507000602070006020700060107000602070006ff06eb07000602 +07000601070006020700060407000602070106010700060b08010202010302020001060b +070306050700060507000602070006020700061907000603070006020700060107000602 +07000604070006020700061b070006020700060107000602070006030700060607000602 +070006020700060107000602070006010700061c07000600070006050700060207000602 +070006010700060007000600070006ff06eb070406010700060207000604070006020700 +06020700060b08010202010302020001060b070006080700060507000602070406190700 +060307000602070006010700060207000604070006030702061807000602070006010700 +060207000603070006060700060207000602070006010700060207000602070206190700 +06000700060507000602070406010700060007000600070006ff06eb0700060207000601 +0704060407000602070006020700060b08010202010302020001060b0700060807000605 +070006020700061d07000603070006020700060107000602070006040700060607000617 +070006020700060107000602070006030700060607000602070006020700060107000602 +07000605070006190700060607000602070006050700060007000600070006ff06eb0700 +0602070006010700060807000602070006020700060b08010202010302020001060b0700 +060807000605070006020700060207000619070006030700060207000601070006020700 +060407000602070006020700061707000602070006010701060107000603070006060700 +060207000602070006010700060207000601070006020700061907000606070006020700 +0602070006010700060007000600070006ff06eb07000602070006010700060207000604 +07000602070106010700060b08010202010302020001060b070006080700060507000603 +0702061a0700060407020603070206050700060307020619070206020700060007010605 +07010604070006030702060207000602070006020702061a070006060700060307020603 +07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 +0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 +062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 +0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 +020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 +0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff +08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 +0016061600160616004406160016061600160616001606ff06be02020103020206030015 +080006160015080006160015080000150800001508000616001508000616001508000616 +0015080006ff06be02020103020206030001061208010616000106120801061600010612 +080100010612080100010612080106160001061208010616000106120801061600010612 +080106ff06be020201030202060300010612080106160001061208010616000106120801 +000106120801000106120801061600010612080106160001061208010616000106120801 +06ff06be0202010302020603000106120801061600010603070206030702060408010616 +000106120801000106120801000106120801061600010612080106160001061208010616 +00010612080106ff06be0202010302020603000106080702060608010616000106030702 +060307020604080106160001061208010001061208010001061208010616000106050704 +0607080106160001060707010608080106160001060707030606080106ff06be02020103 +020206030001060b0701060408010616000106020704060107040603080106160001060e +0700060208010001060e070006020801000106020700060e080106160001060307080605 +080106160001060607030607080106160001060507070604080106ff06be020201030202 +06030001060d070006000700060108010616000106020700060107010601070006010701 +0603080106160001060e0700060208010001060e070006020801000106020700060e0801 +061600010602070a06040801061600010606070306070801061600010604070306010703 +0603080106ff06be02020103020206030001060207020608070106010801061600010601 +070d0602080106160001060b07000601070006020801000106020700060a070006020801 +00010602070006010700060b080106160001060207030602070306040801061600010607 +0701060808010616000106040702060307020603080106ff06be02020103020206030001 +060107080602070206010801061600010600070006000703060007020600070406010801 +06160001060b07000601070006020801000106020700060a070006020801000106020700 +06010700060b080106160001060107030604070306030801061600010612080106160001 +06040702060307020603080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106080700060107000601 +070006020801000106020700060407000604070006020801000106020700060107000601 +070006080801061600010601070206030707060108010616000106050704060708010616 +000106050701060207020604080106ff06be020201030202060300010601070906060801 +061600010600070006000703060007020600070406010801061600010608070006010700 +060107000602080100010602070006040700060407000602080100010602070006010700 +060107000608080106160001060107020604070506020801061600010606070306070801 +06160001060907020605080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106050700060107000601 +070006010700060208010001060207000604070006010700060107000602080100010602 +070006010700060107000601070006050801061600010601070206050703060308010616 +0001060707020607080106160001060807020606080106ff06be02020103020206030001 +0601070d0602080106160001060007000600070706000704060108010616000106050700 +060107000601070006010700060208010001060207000604070006010700060107000602 +080100010602070006010700060107000601070006050801061600010601070306050701 +0604080106160001060707020607080106160001060707020607080106ff06be02020103 +020206030001060107030607070006030801061600010600070006000704060107000600 +070406010801061600010602070006010700060107000601070006010700060208010001 +060207000601070006010700060107000601070006020801000106020700060107000601 +07000601070006010700060208010616000106020703060b080106160001060707020607 +080106160001060707020607080106ff06be020201030202060300010601070206070700 +060408010616000106000706060107060601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106020709 +06050801061600010607070206070801061600010612080106ff06be0202010302020603 +000106010701060707000605080106160001060007000600070206050700060007020601 +080106160001060207000601070006010700060107000601070006020801000106020700 +060107000601070006010700060107000602080100010602070006010700060107000601 +070006010700060208010616000106030707060608010616000106060704060608010616 +0001060707020607080106ff06be02020103020206030001060107090606080106160001 +060007000600070206050700060007020601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106050704 +0607080106160001060507060605080106160001060707020607080106ff06be02020103 +020206030001061208010616000106000704060507040601080106160001061208010001 +0612080100010612080106160001061208010616000106120801061600010612080106ff +06be02020103020206030001061208010616000106120801061600010612080100010612 +080100010612080106160001061208010616000106120801061600010612080106ff06be +020201030202060300010612080106160001061208010616000106120801000106120801 +00010612080106160001061208010616000106120801061600010612080106ff06be0202 +010302020603000108140616000108140616000108140001081400010814061600010814 +06160001081406160001081406ff06be0202010302020603000008150616000008150616 +00000815000008150000081506160000081506160000081506160000081506ff06be0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 +06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 +00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 +060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 +0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 +010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf +01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 +010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 +02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603 +010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff +00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf +010000010604010406040801010006030202010302020603010000ff00ff00cf01000001 +0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100 +06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603 +0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 +010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf +01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 +010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 +02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff +00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 +01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103 +020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 +020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 +020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff +06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a +01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103 +020206030100066101020603010206ff06ff062b0100064a010006030202010302020603 +0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661 +01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff +06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a +01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103 +0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665 +010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f +0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603 +020201030202060301000665010106ff06ff062f0100064a010006030202010302020603 +0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661 +01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff +06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a +0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603 +0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff +0199064a0100060302020103020206030100063500610b04005f0b04005f0b04005f0b04 +005f0b04005f0b0400010100060c0812062a010006030202010302020603010006350060 +08000b030100005e08000b030100005e08000b030100005e08000b030100005e08000b03 +0100005e08000b03010000010100060c08110000062a0100060302020103020206030100 +06350001065d08010b0101020001065b08010b0101020001065b08010b0101020001065b +08010b0101020001065b08010b0101020001065b08010b01010200010100060c08010010 +062a010006030202010302020603010006350001062c0100062f08010b0101020001062a +0102062d08010b0101020001062a0102062d08010b0101020001062c0100062d08010b01 +0102000106290104062c08010b0101020001062b0102062c08010b01010200010100060c +0801000d08000001062a010006030202010302020603010006350001062a0102062f0801 +0b01010200010629010006020100062c08010b01010200010629010006020100062c0801 +0b0101020001062b0101062d08010b010102000106290100063008010b0101020001062a +0100062f08010b01010200010100060c08010001060a08010001062a0100060302020103 +02020603010006350001062c0100062f08010b01010200010629010006020100062c0801 +0b0101020001062d0100062c08010b0101020001062a010006000100062d08010b010102 +000106290100063008010b010102000106290100063008010b01010200010100060c0801 +0001060a08010001062a010006030202010302020603010006350001062c0100062f0801 +0b01010200010629010006020100062c08010b0101020001062d0100062c08010b010102 +0001062a010006000100062d08010b010102000106290100063008010b01010200010629 +0100063008010b01010200010100060c08010001060a08010001062a0100060302020103 +02020603010006350001062c0100062f08010b0101020001062c0100062d08010b010102 +0001062b0101062d08010b01010200010629010006010100062d08010b01010200010629 +0103062d08010b010102000106290103062d08010b01010200010100060c08010001060a +08010001062a010006030202010302020603010006350001062c0100062f08010b010102 +0001062b0100062e08010b0101020001062d0100062c08010b0101020001062801000602 +0100062d08010b0101020001062d0100062c08010b01010200010629010006020100062c +08010b01010200010100060c08010001060a08010001062a010006030202010302020603 +010006350001062c0100062f08010b0101020001062a0100062f08010b0101020001062d +0100062c08010b010102000106280105062c08010b0101020001062d0100062c08010b01 +010200010629010006020100062c08010b01010200010100060c08010001060a08010001 +062a010006030202010302020603010006350001062c0100062f08010b01010200010629 +010006020100062c08010b01010200010629010006020100062c08010b0101020001062c +0100062d08010b01010200010628010006030100062c08010b0101020001062901000602 +0100062c08010b01010200010100060c08010001060a08010001062a0100060302020103 +02020603010006350001062a0104062d08010b010102000106290104062c08010b010102 +0001062a0102062d08010b0101020001062b0102062c08010b010102000106290103062d +08010b0101020001062a0102062d08010b01010200010100060c08010001060a08010001 +062a010006030202010302020603010006350001065d08010b0101020001065b08010b01 +01020001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b +08010b01010200010100060c08010001060a08010001062a010006030202010302020603 +010006350001065d08010b0101020001065b08010b0101020001065b08010b0101020001 +065b08010b0101020001065b08010b0101020001065b08010b01010200010100060c0801 +0001060a08010001062a010006030202010302020603010006350001065d08010b010102 +0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801 +0b0101020001065b08010b0101020001010006070100060308010001060a08010001062a +010006030202010302020603010006350001065d08010b0101020001065b08010b010102 +0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801 +0b0101020001010006060101060308010001060a08010001062a01000603020201030202 +0603010006350001065d08010b0101020001065b08010b0101020001065b08010b010102 +0001065b08010b0101020001065b08010b0101020001065b08010b010102000101000605 +010006000100060308010001080c0001062a010006030202010302020603010006350001 +065d08010b0101020001065b08010b0101020001065b08010b0101020001065b08010b01 +01020001065b08010b0101020001065b08010b010102000101000607010006030801000d +08000001062a010006030202010302020603010006350001085f0b0101020001085d0b01 +01020001085d0b0101020001085d0b0101020001085d0b0101020001085d0b0101020001 +010006070100060308010001060a08010001062a01000603020201030202060301000635 +000008600b0001030000085e0b0001030000085e0b0001030000085e0b0001030000085e +0b0001030000085e0b00010300000800010006070100060308010001060a08010001062a +010006030202010302020603010009360063010000630100006301000063010000630100 +006301000002010006070100060308010001060a08010001062a01000603020201030202 +0603010009350c0000630100006301000063010000630100006301000063010000020100 +06070100060308010001060a08010001062a010006030202010302020603010009010532 +0c0100630100006301000063010000630100006301000063010000020100060501040601 +08010001060a08010001062a0100060302020103020206030100090105320c0100630100 +006301000063010000630100006301000063010000020100060c08010001060a08010001 +062a010006030202010302020603010009010517010005190c0100630100006301000063 +010000630100006301000063010000020100060c08010001060a08010001062a01000603 +0202010302020603010009010515010205190c01001601020003010200420100000e0100 +00230100000b010200030102001801000063010000630100006301000063010000020100 +060c08010001060a08010001062a01000603020201030202060301000901051701000519 +0c01001801000005010000420100000e010000230100000d010000050100001801000063 +010000630100006301000063010000020100060c08010001060a08010001062a01000603 +0202010302020603010009010517010005190c01000f0102000501000005010000030102 +003b0100000e010000000101000301020002010000000101000201000000010100030102 +000201040001010000020100000401000005010000180100006301000063010000630100 +0063010000020100060c08010001060a08010001062a0100060302020103020206030100 +09010517010005190c01000e01000002010000040100000501000002010000020100003a +0100000e0101000101000001010000020100000101010001010000010101000101000001 +010000020100000301000003010000020100000401000005010000180100006301000063 +0100006301000063010000020100060c08010001060a08010001062a0100060302020103 +02020603010009010517010005190c01000e010000020100000401000005010000020100 +00020100003a0100000e0100000201000001010000020100000101000005010000020100 +000101000007010000030100000201000004010000050100001801000063010000630100 +006301000063010000020100060c08010001060a08010001062a01000603020201030202 +0603010009010517010005190c01000e010000020100000401000005010000020104003a +0100000e0100000201000001010000020100000101000005010000020100000201020004 +010000030100000201000004010000050100001801000063010000630100006301000063 +010000020100060c08010001080c0001062a010006030202010302020603010009010517 +010005190c01000e010000020100000401000005010000020100003e0100000e01000002 +010000010100000201000001010000050100000201000005010000030100000301000002 +01000004010000050100001801000063010000630100006301000063010000020100060c +08010000080d0001062a010006030202010302020603010009010515010405170c01000e +01000002010000040100000501000002010000020100003a0100000e0100000201000001 +010000020100000101000005010000020100000101000002010000030100000301000001 +01010004010000050100001801000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c01000f010200050100 +0005010000030102003b0100000e01000002010000020102000201000005010000020100 +000201020005010100020101000001000004010000050100001801000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +090105320c0100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +0103020206030100090105320c0100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a0100060302020103020206030100090105320c010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010009010c3400630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c0801 +0a0e0001062a010006030202010302020603010009360063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010009350c0000630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +0103020206030100090105320c0100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105160102 +05180c0100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a01000603020201030202060301000901051501000502010005170c010026 +01000003010200030102002d010000160102004901000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105150100 +0502010005170c01002d010000050100002d010000180100004901000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +0901051501000502010005170c01000f0101000001000001010000020100000101000000 +01010003010200050100000501000003010200260100000f010200050100000201000002 +010000020102000301020003010200020100000001010026010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +0518010005180c01000e0100000101010001010000020100000101010001010000040100 +0005010000050100000201000002010000250100000e0100000201000004010000020100 +000201000001010000020100000101000002010000010100000201000001010100010100 +002501000063010000630100006301000063010000020100060c08010a0e0001062a0100 +06030202010302020603010009010517010005190c01000e010000020100000101000002 +010000010100000201000004010000050100000501000006010000250100000e01000008 +010000020100000201000001010000050100000501000002010000010100000201000025 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +02020103020206030100090105160100051a0c01000e0100000201000001010000020100 +00010100000201000004010000050100000501000003010300250100000f010200050100 +000201000002010000020102000301020002010400010100000201000025010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000901051501000502010005170c01000e01000002010000010100000201000001 +010000020100000401000005010000050100000201000002010000250100001201000004 +010000020100000201000005010000050100000101000005010000020100002501000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +02020603010009010515010405170c01000e010000010101000101000001010100010100 +00020100000401000005010000050100000201000002010000250100000e010000020100 +000401000002010000010101000101000002010000010100000201000001010000020100 +0001010000020100002501000063010000630100006301000063010000020100060c0801 +0a0e0001062a0100060302020103020206030100090105320c01000f0101000001000002 +01010000010000010100000201000004010000050100000501000003010300250100000f +010200050100000301010000010000020102000301020003010200020100000201000025 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +02020103020206030100090105320c0100120100004f0100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +090105320c01000e010000020100004f0100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +000f010200500100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a0100060302020103020206030100090105320c0100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100090105320c01006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a010006030202010302020603010009010c3400630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +06030202010302020603010009000c3501ff01ff0161060c08010a0e0001062a01000603 +020201030202060301000936006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a010006030202010302020603010009350c0000630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105320c01006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +05320c0100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010009010516010205180c01006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +020201030202060301000901051501000502010005170c0100630100000e010000530100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010009010519010005170c0100630100000e010000530100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010009010519010005170c01000f01020002010000000101000201000000010100030102 +003b0100000e010000000101000201000000010100030102000201010000010000020101 +0000010000030102002d01000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010009010517010105180c01000e01000002 +0100000101010001010000010101000101000001010000020100003a0100000e01010001 +010000010101000101000001010000020100000101000000010000000100000101000000 +0100000001000001010000020100002c0100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010519010005170c01 +001201000001010000020100000101000002010000050100003a0100000e010000020100 +000101000005010000020100000101000000010000000100000101000000010000000100 +00050100002c01000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010519010005170c01000f0103000101000002 +0100000101000002010000020103003a0100000e01000002010000010100000501000002 +010000010100000001000000010000010100000001000000010000020103002c01000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +0202060301000901051501000502010005170c01000e0100000201000001010000020100 +00010100000201000001010000020100003a0100000e0100000201000001010000050100 +000201000001010000000100000001000001010000000100000001000001010000020100 +002c01000063010000630100006301000063010000020100060c08010a0e0001062a0100 +06030202010302020603010009010516010205180c01000e010000020100000101000002 +010000010100000201000001010000020100003a0100000e010100010100000101000005 +010000020100000101000000010000000100000101000000010000000100000101000002 +0100002c01000063010000630100006301000063010000020100060c08010a0e0001062a +0100060302020103020206030100090105320c01000f0103000101000002010000010100 +0002010000020103003a0100000e01000000010100020100000601020002010000000100 +0000010000010100000001000000010000020103002c0100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 +0c0100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105320c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105320c010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105320c01006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +0c3400630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001 +062a01000603020201030202060301000936006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000935 +0c0000630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105320c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105320c010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010517010105180c0100170100000601000042 +010000150100001c0100000b010200030102001801000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105160100 +0500010005180c0100170100004a010000150100001c0100000d01000005010000180100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +01030202060301000901051601000500010005180c01000f010200020104000201020002 +0100000001010003010200340100000f0102000201000001010000030102000201000000 +010100030102000201040001010000020100000401000005010000180100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +01000901051501000501010005180c01000e010000020100000301000006010000020101 +00010100000101000002010000330100000e010000020100000101000000010000030100 +000201000001010100010100000101000002010000030100000301000002010000040100 +00050100001801000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000901051401000502010005180c01000e01000007 +01000006010000020100000201000005010000330100000e010000050101000801000001 +010000020100000101000007010000030100000201000004010000050100001801000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +02020603010009010514010505170c01000f010200040100000601000002010000020100 +0002010300330100000f0102000201010005010300010100000201000002010200040100 +000301000002010000040100000501000018010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000901051801000518 +0c0100120100000301000006010000020100000201000001010000020100003301000012 +010000010100000001000003010000020100000101000002010000050100000301000003 +010000020100000401000005010000180100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010517010205170c01 +000e01000002010000030100000601000002010000020100000101000002010000330100 +000e01000002010000010100000101000002010000020100000101000002010000010100 +000201000003010000030100000101010004010000050100001801000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +090105320c01000f0102000501010004010000020100000201000002010300330100000f +010200020100000201000002010300010100000201000002010200050101000201010000 +01000004010000050100001801000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +0103020206030100090105320c0100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a0100060302020103020206030100090105320c010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +0100090105320c0100630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a010006030202010302020603010009010c340063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103 +020206030100093600630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a010006030202010302020603010009350c000063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +0103020206030100090105320c0100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010515010405170c0100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100090105150100051b0c01000e0100000e010000140100002d010000320102 +002d01000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105150100051b0c01000e0100000e0100004301000034 +0100002d01000063010000630100006301000063010000020100060c08010a0e0001062a +0100060302020103020206030100090105150100051b0c01000e01000001010000030102 +0002010400020102000201000000010100030102000201000000010100030102001f0100 +000e01000002010000010100000001010002010000000101000301020003010200050100 +00030102002601000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010515010305180c01000e0100000001000003 +010000020100000301000003010000020100000101010001010000040100000201010001 +01000001010000020100001e0100000e0100000201000001010100010100000101010001 +010000010100000201000001010000020100000401000002010000020100002501000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +02020603010009010519010005170c01000e010100080100000301000007010000010100 +00080100000201000002010000050100001e0100000e0100000201000001010000020100 +000101000002010000010100000901000004010000060100002501000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +09010519010005170c01000e010100050103000301000004010300010100000801000002 +01000002010000020103001e0100000e0100000201000001010000020100000101000002 +010000020102000301030004010000030103002501000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105140100 +0503010005170c01000e0100000001000003010000020100000301000003010000020100 +000101000008010000020100000201000001010000020100001e0100000e010000020100 +000101000002010000010100000201000005010000010100000201000004010000020100 +00020100002501000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010515010305180c01000e0100000101000002 +010000020100000301000003010000020100000101000008010000020100000201000001 +010000020100001e0100000e010000010101000101010001010000010101000101000001 +010000020100000101000002010000040100000201000002010000250100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +0100090105320c01000e0100000201000002010300040101000201030001010000080100 +000201000002010000020103001e0100000f010100000100000101000000010100020100 +000001010003010200030103000401000003010300250100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 +0c0100630100001501000005010000450100006301000063010000630100006301000002 +0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 +0015010000050100004501000063010000630100006301000063010000020100060c0801 +0a0e0001062a0100060302020103020206030100090105320c0100630100001501000005 +0100004501000063010000630100006301000063010000020100060c08010a0e0001062a +0100060302020103020206030100090105320c0100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +090105320c0100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a010006030202010302020603010009010c3400630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +02020603010009000c3501ff01ff0161060c08010a0e0001062a01000603020201030202 +06030100093600630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a010006030202010302020603010009350c0000630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100090105320c01006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a0100060302020103020206030100090105320c010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010009010517010205170c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105160100051a0c0100110100001a010100040100002d010000160102000c +010000020100003701000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105150100051b0c01002c010000350100 +0018010000100100003701000063010000630100006301000063010000020100060c0801 +0a0e0001062a0100060302020103020206030100090105150100051b0c01000f01020003 +010200030102000301020004010000040102000201000000010100030102001f0100000f +010200050100000201000002010000020102000201000001010000340100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010009010515010305180c01001101000002010000020100000101000002010000010100 +00020100000101040004010000020101000101000001010000020100001e0100000e0100 +000201000004010000020100000201000004010000020100000001000035010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000901051501000502010005170c01001101000002010000020100000101000005 +010000020100000301000006010000020100000201000001010000020100001e01000012 +010000040100000201000002010000040100000201010036010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +051501000502010005170c01001101000002010000020100000201020002010400030100 +00060100000201000002010000010104001e0100000f0103000401000003010000000100 +0005010000020101003601000063010000630100006301000063010000020100060c0801 +0a0e0001062a01000603020201030202060301000901051501000502010005170c010011 +010000020100000201000005010000010100000701000006010000020100000201000001 +010000220100000e01000002010000040100000301000000010000050100000201000000 +0100003501000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010009010516010205180c01001101000002010000020100 +000101000002010000010100000201000003010000060100000201000002010000010100 +00020100001e0100000e0100000201000004010000040100000601000002010000010100 +003401000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105320c01001101000003010200030102000301020004 +010000060100000201000002010000020102001f0100000f010300040100000401000006 +01000002010000020100003301000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c010011010000500100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105320c01000e01000001010000500100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100090105320c01000f01010051010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 +0c0100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105320c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +0603010009010c3400630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c +08010a0e0001062a01000603020201030202060301000936006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +0603010009350c0000630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100090105320c01006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +02020103020206030100090105320c010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010515 +010405170c0100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000901051501000502010005170c01 +0011010100130100000b01000002010000290100002c0100000b010200030102001f0100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010009010518010005180c010010010000150100000f010000290100002c +0100000d010000050100001f01000063010000630100006301000063010000020100060c +08010a0e0001062a010006030202010302020603010009010518010005180c0100100100 +000301000000010100030102000301010000010000010100000001010003010200020100 +0001010000260100000e0100000001010003010200020100000001010002010000000101 +0002010400010100000201000004010000050100001f0100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010518 +010005180c01000e01040001010100010100000101000002010000010100000101010001 +01010001010000040100000201000000010000270100000e010100010100000101000002 +010000010101000101000001010100010100000301000003010000020100000401000005 +0100001f01000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010009010518010005180c01001001000003010000050100 +00020100000101000002010000010100000801000002010100280100000e010000020100 +000101000002010000010100000501000007010000030100000201000004010000050100 +001f01000063010000630100006301000063010000020100060c08010a0e0001062a0100 +06030202010302020603010009010517010005190c010010010000030100000501040001 +01000002010000010100000801000002010100280100000e010000020100000101000002 +010000010100000501000007010000030100000201000004010000050100001f01000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +02020603010009010517010005190c010010010000030100000501000005010000020100 +0001010000080100000201000000010000270100000e0100000201000001010000020100 +00010100000501000007010000030100000201000004010000050100001f010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +0603010009010517010005190c0100100100000301000005010000020100000101000001 +01010001010000080100000201000001010000260100000e010000020100000101000002 +010000010100000501000007010000030100000101010004010000050100001f01000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100090105320c01001001000003010000060102000301010000010000010100 +00080100000201000002010000250100000e010000020100000201020002010000050100 +0008010100020101000001000004010000050100001f0100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 +0c0100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105320c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105320c010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100090105320c01006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +0c3400630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001 +062a01000603020201030202060301000936006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000935 +0c0000630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100090105320c01006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105320c010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010516010205180c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000901051501000502010005170c0100630100000e +0100000f0100000b01000006010000100100001b01000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105150100 +0502010005170c0100630100000e0100001c010000180100001b01000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +0901051501000502010005170c01000e0100000001010003010200020100000001010042 +0100000e0100000101000002010000000101000301020003010200020104000201020002 +010000000101000301020002010000000101000301020002010000000101000301010000 +0100000201000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010009010516010205180c01000e01010001010000010100 +00020100000101010001010000410100000e010000000100000301010001010000040100 +000201000002010000030100000601000002010100010100000101000002010000010101 +000101000001010000020100000101010001010000010100000101010002010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000901051501000502010005170c01000e01000002010000010100000201000001 +010000450100000e01010004010000080100000201000007010000060100000201000002 +010000010100000201000001010000020100000101000002010000010100000501000002 +0100000201000063010000630100006301000063010000020100060c08010a0e0001062a +01000603020201030202060301000901051501000502010005170c01000e010000020100 +000101040001010000450100000e01010004010000080100000301020004010000060100 +000201000002010000010104000101000002010000010104000101000005010000020100 +000201000063010000630100006301000063010000020100060c08010a0e0001062a0100 +0603020201030202060301000901051501000502010005170c01000e0100000201000001 +01000005010000450100000e010000000100000301000008010000060100000301000006 +010000020100000201000001010000050100000201000001010000050100000501000002 +0100000201000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010009010516010205180c01000e01010001010000010100 +000201000001010000450100000e01000001010000020100000801000002010000020100 +000301000006010000020100000201000001010000020100000101010001010000010100 +000201000001010000050100000101010002010000630100006301000063010000630100 +00020100060c08010a0e0001062a0100060302020103020206030100090105320c01000e +010000000101000301020002010000450100000e01000002010000010100000801000003 +010200050101000401000002010000020100000201020002010000000101000301020002 +01000006010100000100000201000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c01000e010000530100 +005f0100000201000063010000630100006301000063010000020100060c08010a0e0001 +062a0100060302020103020206030100090105320c01000e010000530100005b01000002 +0100000201000063010000630100006301000063010000020100060c08010a0e0001062a +0100060302020103020206030100090105320c01000e010000530100005c010200030100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +0103020206030100090105320c0100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009010c3400630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +09000c3501ff01ff0161060c08010a0e0001062a01000603020201030202060301000936 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a010006030202010302020603010009350c0000630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +090105320c0100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010009010516010205180c01006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 +051501000502010005170c0100260100003b01000019010000170102002d010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000901051501000502010005170c01006301000019010000190100002d01000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +0202060301000901051501000502010005170c01000e0101000001000003010200020100 +00000101000301020003010200340100000f010200030101000001000002010200020100 +00000101000201000000010100050100000301020002010000000101001f010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000901051501000502010005170c01000e01000000010000000100000101000002 +0100000101010001010000040100000201000002010000330100000e0100000201000001 +010000010101000101000002010000010101000101000001010100010100000401000002 +0100000201000001010100010100001e0100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010516010305170c01 +000e010000000100000001000005010000010100000801000006010000330100000e0100 +000201000001010000020100000101000002010000010100000201000001010000020100 +00040100000601000001010000020100001e010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000901051901000517 +0c01000e010000000100000001000002010300010100000801000003010300330100000e +010000020100000101000002010000010104000101000002010000010100000201000004 +0100000301030001010000020100001e0100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01 +000e01000000010000000100000101000002010000010100000801000002010000020100 +00330100000e010000020100000101000002010000010100000501000002010000010100 +000201000004010000020100000201000001010000020100001e01000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +09010515010205190c01000e010000000100000001000001010000020100000101000008 +0100000201000002010000330100000e0100000201000001010000010101000101000002 +010000010100000201000001010100010100000401000002010000020100000101000002 +0100001e01000063010000630100006301000063010000020100060c08010a0e0001062a +0100060302020103020206030100090105320c01000e0100000001000000010000020103 +00010100000801000003010300330100000f010200030101000001000002010200020100 +00020100000101000000010100050100000301030001010000020100001e010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +06030100090105320c0100630100002a0100003701000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 +00630100002a0100003701000063010000630100006301000063010000020100060c0801 +0a0e0001062a0100060302020103020206030100090105320c0100630100002a01000037 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +02020103020206030100090105320c010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 +0c0100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a010006030202010302020603010009010c340063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103020206030100 +009a0100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000035080000630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006040102061508010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010611010206030100060201000614080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +000106130100060301000602010006140801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +061301000603010006020100061408010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006030100060201000614080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106130100 +060301000602010006140801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 +010006020100061408010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006030100 +060201000614080100630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100000106110104060201020615 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +0632080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000108340063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a01000603020201030202060301000000083501ff01ff0161 +060c08010a0e0001062a0100060302020103020206030100009a01000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000035080000630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006050100061608010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010611010206030102 +0616080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006050100061608010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010613010006050100061608010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006050100061608010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010613010006050100061608010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006050100061608010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006050100 +0616080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010611010406010104061408010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +01000001083400630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 +0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +0035080000630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001061301000604 +01020615080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001061101020603010006020100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006030100060201000614 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000106130100060301000602010006140801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001061301000606010006150801006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +020201030202060301000001061301000605010006160801006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000001061301000604010006170801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +061301000603010006020100061408010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010611 +010406010104061408010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +0632080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010834006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000000 +083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100009a0100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100003508000063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000001061301000604010206150801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +061101020603010006020100061408010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006070100061408010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006070100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006050101061508010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010613010006070100061408010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006070100061408010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010613010006030100060201000614080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +000106110104060201020615080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000108340063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +01000000083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100 +009a0100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000035080000630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006060100061508010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010611010206050101061508010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006040100060001000615080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106130100 +060401000600010006150801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 +010006010100061508010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006020100 +060201000615080100630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100000106130100060201050614 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000106130100060601000615080100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106110104060301020614080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000108340063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100 +060302020103020206030100009a01000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000035080000630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +0632080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006030104061408010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010611010206030100061808010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006030100061808010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010613010006030100061808010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006030103061508010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006070100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006070100061408010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010613010006020100060301000614080100630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106110104060101030615080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000108340063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100 +060302020103020206030100009a01000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000035080000630100 +006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +0632080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006050102061408010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010611010206040100061708010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006030100061808010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010613010006030100061808010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006030103061508010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006030100 +060201000614080100630100006301000063010000630100006301000063010000020100 +060c08010a0e0001062a0100060302020103020206030100000106130100060301000602 +01000614080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001061301000603010006020100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010611010406020102061508010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +01000001083400630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 +0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +0035080000630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 +01040614080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001061101020603010006020100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006060100061508010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010613010006060100061508010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006060100061508010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +010000010613010006060100061508010063010000630100006301000063010000630100 +0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 +010006050100061608010063010000630100006301000063010000630100006301000002 +0100060c08010a0e0001062a010006030202010302020603010000010613010006050100 +0616080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010611010406030100061608010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 +01000001083400630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 +0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +0035080000630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001061301000604 +01020615080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001061101020603010006020100 +0614080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010613010006030100060201000614 +080100630100006301000063010000630100006301000063010000020100060c08010a0e +0001062a0100060302020103020206030100000106130100060301000602010006140801 +00630100006301000063010000630100006301000063010000020100060c08010a0e0001 +062a01000603020201030202060301000001061301000604010206150801006301000063 +01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 +020201030202060301000001061301000603010006020100061408010063010000630100 +0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 +010302020603010000010613010006030100060201000614080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106130100060301000602010006140801006301000063010000630100 +00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 +060301000001061101040602010206150801006301000063010000630100006301000063 +01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 +0632080100630100006301000063010000630100006301000063010000020100060c0801 +0a0e0001062a010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100060c08010a0e0001062a +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 +00010632080100630100006301000063010000630100006301000063010000020100060c +08010a0e0001062a01000603020201030202060301000001083400630100006301000063 +010000630100006301000063010000020100060c08010010062a01000603020201030202 +060301ff01ff0199060c08000011062a010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +020201030202060301000649010006ff06ff069801000603020201030202060301000648 +010106ff06ff06980100060302020103020206030100064701000600010006ff06ff0698 +01000603020201030202060301000649010006ff06ff0698010006030202010302020603 +01000649010006ff06ff069801000603020201030202060301000649010006ff06ff0698 +01000603020201030202060301000649010006ff06ff0698010006030202010302020603 +01000649010006ff06ff069801000603020201030202060301000647010406ff06ff0696 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +020206030100063708ff08ff0860064a0100060302020103020206030100063708ff08ff +085f0000064a010006030202010302020603010006370801001d0aff0aff0a3e0001064a +010006030202010302020603010006370801001c08000aff0aff0a3e0001064a01000603 +02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a +0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e +0001064a0100060302020103020206030100063708010001060b08000000060b08010aff +0aff0a3e0001064a0100060302020103020206030100063708010001060b08000000060b +08010aff0aff0a3e0001064a0100060302020103020206030100063708010001060b0800 +0000060b08010aff0aff0a3e0001064a0100060302020103020206030100063708010001 +060b08000000060b08010aff0aff0a3e0001064a01000603020201030202060301000637 +08010001060b08000000060b08010aff0aff0a3e0001064a010006030202010302020603 +0100063708010001060b08000000060b08010aff0aff0a3e0001064a0100060302020103 +020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a01000603 +02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a +0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e +0001064a0100060302020103020206030100063708010001080c0000080d0aff0aff0a3e +0001064a0100060302020103020206030100063708010000081c0aff0aff0a3e0001064a +01000603020201030202060301000637080100ff00ff005e064a01000603020201030202 +060301000637080000ff00ff005f064a010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020101 +00040603010006ff06ff06e301000603000502020400060301ff01ff01e5060300000202 +040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202 +040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202 +0400000002020400000502ff02ff02e100060202040000000208040002ff02ff02e10000 +0208040000000208040002ff02ff02e100000208040000000208040001ff01ff01e10000 +020804000000040901ff01ff01e100000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 532 441 +%%EOF diff --git a/lib/tv/doc/src/tv_table_sorted.gif b/lib/tv/doc/src/tv_table_sorted.gif new file mode 100644 index 0000000000..fd69e3cc58 Binary files /dev/null and b/lib/tv/doc/src/tv_table_sorted.gif differ diff --git a/lib/tv/doc/src/tv_table_sorted.ps b/lib/tv/doc/src/tv_table_sorted.ps new file mode 100644 index 0000000000..681b2f4d19 --- /dev/null +++ b/lib/tv/doc/src/tv_table_sorted.ps @@ -0,0 +1,1502 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_sorted.eps) +%%CreationDate: (Mon Mar 19 17:15:35 2001) +%%BoundingBox: 0 0 532 441 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 532 441 +userdict begin +%%BeginData: +DisplayImage +0 0 +532.000000 441.000000 +12 +760 630 +1 +0 +0 +16 +ffffff +000000 +d8d8d8 +c2c2c2 +6b6b6b +ff0000 +d9d9d9 +b22222 +828282 +00ff00 +ffda00 +ffff80 +c3c3c3 +7f7f7f +998300 +000000 +000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff +02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 +04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff +02d500000202040000000202040002080000020d040002a501010206010102150101021e +0101022901010206010102430101022a010102260101023201010233010102ae00000202 +040000000202040002080000020d04000277010502000107020101030206010702090101 +02060101021501010219010002030101021c0100020b010102060101022e010202020100 +020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 +00000202040002080000020d04000277010102070101020301010201010102080101020c +010102060101021501010218010102210101020b010102060101022e010202020100020d +01010238010102020101024801010215010102cc00000202040000000202040002080000 +0202040602030400027701010207010102030101020c0101020401030203010102000101 +020301010202010302020101020901010202010302030103020201030201010402010101 +020201030203010102000101020a01040201010302030101020001010203010102020103 +022701000200010102010100020201030203010402020103020201010209010102000101 +020101010203010302030101020201010200010102020101020101030202010402020101 +020101010202010102020101020001010203010102000101020301030203010402020104 +020501040202010102010101020501030201010402000101020101010204010302020101 +020001010201010102020103020201040202010402020103020301010200010102060104 +020201030274000002020400000004030208000002020400030400000203040002770101 +0207010102030102020b0101020301010201010102020102020001010202010102010101 +020101010201010102090101020101010201010102010101020101010200010102010101 +020101010203010102010101020101010202010202000101020a01010202010102010101 +020201020200010102020101020101010201010102260100020001010201010002010101 +020101010201010102010101020101010201010102010101020901020200010202000101 +020101010201010102020101020201020200010102010101020001010200010102010101 +020101010202010102010101020201010202010202000101020201020200010102010101 +020101010201010102050101020801010201010102020101020101010204010102010101 +020101010202010102010101020301010201010102010101020001010201010102010101 +020101010200010102050101020501010201010102020102020001010204010102050101 +020101010273000004030101020b00000203040003020000020404000277010402040101 +0204010302090101020701010202010102010101020201010201010102010101020d0101 +020101010201010102010101020801010201010102030101020101010201010102020101 +02010101020a010102060101020201010201010102020101020101010201010102260100 +0200010202000100020101010201010102010101020101010201010102010101020d0101 +020101010201010102050101020201010202010102010101020101010200010102000101 +020101010201010102020101020101010202010102020101020101010202010102010101 +020101010201010102010102020401020207010102010101020201010201010102040101 +020101010201010102030101020001000204010102010101020101020203010102010101 +020401020204010202040101020101010202010102010101020401020204010102010101 +02760103020b000002030400030200000204040002770101020701010206010202080101 +0204010402020101020101010202010102010105020d0101020101010201010102010101 +02050104020101010203010102010101020101010202010102010101020a010102030104 +020201010201010102020101020101050226010002010101020001000201010102010101 +020101010201010102010105020d01010201010102010101020201040202010102020101 +020101010201010102000101020001010201010102010101020201010201010102020101 +020201010201010102020101020101010201010502020103020301030205010102010101 +020201010201010102040105020101010204010102050105020101010204010102010101 +020501030203010302020101020101010202010102010101020501030202010502760103 +020b00000204040003000000020504000277010102070101020701010208010102030101 +020101010202010102010101020201010201010102110101020101010201010102010101 +0204010102010101020101010203010102010101020101010202010102010101020a0101 +020201010201010102020101020101010202010102010101022a01000202010202010101 +020101010201010102010101020101010211010102010101020101010201010102010101 +020201010202010102010101020101010201010102000101020001010200010202020101 +020101010202010102020101020101010202010102010101020101010208010202040102 +020401010201010102020101020101010204010102050101020301000200010102040101 +020501010204010102010101020701020204010202010101020101010202010102010101 +0207010202010101027a0103020b00000204040003000000020504000277010102070101 +020301010201010102080101020301010201010102020101020101010202010102010101 +020201000201010102090101020101010201010102010101020201000200010102010101 +020101010203010102010101020101010202010102010101020a01010202010102010101 +020201010201010102020101020101010202010002260100020201020201010102010101 +020101010200010202010101020201000201010102090101020101010201010102010101 +020101010202010102020101020101010202010102070101020001010202010102000102 +020201010202010102010101020201010201010102010101020201000205010102050101 +020101010200010102000102020201010200010202010101020001010202010002010101 +020201010201010102000101020001010202010002010101020401010201010102020100 +020401010205010102010101020101010202010102010101020101010204010102010101 +0202010002760103020b0000020500000206040002770105020301010204010302090101 +020401020200010102010104020301010202010302020101020901010202010302030103 +02020102020001010201010202010101020201030203010102010101020b010202010102 +020001010201010402030101020201030227010002030101020201030203010102000101 +020201030202010102090101020101010201010102020102020001010201010102020101 +020101010203010502050101020301010200010102020101020201010201010102020101 +020101010202010302020104020201040202010102010101020001010203010102000101 +020101010201010302030102020001010201010102000101020101030202010102040101 +020201030201010402020104020301030203010102010101020101010200010402030103 +02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d +040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff +02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 +0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 +00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff +06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 +020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 +061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa +07000602070006090702061308010202010302020001060b0700060f0700062107000614 +0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b +0700061308010202010302020001060b0700060607020605070006030702061a07000604 +070206030702060507000603070206180700060207000601070006000701060207040602 +070206030702060207000600070106030702061807000602070006020702060307020602 +07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 +0202010302020001060b0700060807000605070006020700060207000619070006030700 +060207000601070006020700060407000602070006020700061707000602070006010701 +060107000603070006060700060207000602070006010701060107000601070006020700 +0618070006000700060507000602070006020700060107000602070006ff06eb07000602 +07000601070006020700060407000602070106010700060b08010202010302020001060b +070306050700060507000602070006020700061907000603070006020700060107000602 +07000604070006020700061b070006020700060107000602070006030700060607000602 +070006020700060107000602070006010700061c07000600070006050700060207000602 +070006010700060007000600070006ff06eb070406010700060207000604070006020700 +06020700060b08010202010302020001060b070006080700060507000602070406190700 +060307000602070006010700060207000604070006030702061807000602070006010700 +060207000603070006060700060207000602070006010700060207000602070206190700 +06000700060507000602070406010700060007000600070006ff06eb0700060207000601 +0704060407000602070006020700060b08010202010302020001060b0700060807000605 +070006020700061d07000603070006020700060107000602070006040700060607000617 +070006020700060107000602070006030700060607000602070006020700060107000602 +07000605070006190700060607000602070006050700060007000600070006ff06eb0700 +0602070006010700060807000602070006020700060b08010202010302020001060b0700 +060807000605070006020700060207000619070006030700060207000601070006020700 +060407000602070006020700061707000602070006010701060107000603070006060700 +060207000602070006010700060207000601070006020700061907000606070006020700 +0602070006010700060007000600070006ff06eb07000602070006010700060207000604 +07000602070106010700060b08010202010302020001060b070006080700060507000603 +0702061a0700060407020603070206050700060307020619070206020700060007010605 +07010604070006030702060207000602070006020702061a070006060700060307020603 +07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 +0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 +062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 +0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 +020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 +0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff +08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff +06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 +0016061600160616004406160016061600160616001606ff06be02020103020206030015 +080006160015080006160015080000150800001508000616001508000616001508000616 +0015080006ff06be02020103020206030001061208010616000106120801061600010612 +080100010612080100010612080106160001061208010616000106120801061600010612 +080106ff06be020201030202060300010612080106160001061208010616000106120801 +000106120801000106120801061600010612080106160001061208010616000106120801 +06ff06be0202010302020603000106120801061600010603070206030702060408010616 +000106120801000106120801000106120801061600010612080106160001061208010616 +00010612080106ff06be0202010302020603000106080702060608010616000106030702 +060307020604080106160001061208010001061208010001061208010616000106050704 +0607080106160001060707010608080106160001060707030606080106ff06be02020103 +020206030001060b0701060408010616000106020704060107040603080106160001060e +0700060208010001060e070006020801000106020700060e080106160001060307080605 +080106160001060607030607080106160001060507070604080106ff06be020201030202 +06030001060d070006000700060108010616000106020700060107010601070006010701 +0603080106160001060e0700060208010001060e070006020801000106020700060e0801 +061600010602070a06040801061600010606070306070801061600010604070306010703 +0603080106ff06be02020103020206030001060207020608070106010801061600010601 +070d0602080106160001060b07000601070006020801000106020700060a070006020801 +00010602070006010700060b080106160001060207030602070306040801061600010607 +0701060808010616000106040702060307020603080106ff06be02020103020206030001 +060107080602070206010801061600010600070006000703060007020600070406010801 +06160001060b07000601070006020801000106020700060a070006020801000106020700 +06010700060b080106160001060107030604070306030801061600010612080106160001 +06040702060307020603080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106080700060107000601 +070006020801000106020700060407000604070006020801000106020700060107000601 +070006080801061600010601070206030707060108010616000106050704060708010616 +000106050701060207020604080106ff06be020201030202060300010601070906060801 +061600010600070006000703060007020600070406010801061600010608070006010700 +060107000602080100010602070006040700060407000602080100010602070006010700 +060107000608080106160001060107020604070506020801061600010606070306070801 +06160001060907020605080106ff06be0202010302020603000106010709060608010616 +000106000700060007030600070206000704060108010616000106050700060107000601 +070006010700060208010001060207000604070006010700060107000602080100010602 +070006010700060107000601070006050801061600010601070206050703060308010616 +0001060707020607080106160001060807020606080106ff06be02020103020206030001 +0601070d0602080106160001060007000600070706000704060108010616000106050700 +060107000601070006010700060208010001060207000604070006010700060107000602 +080100010602070006010700060107000601070006050801061600010601070306050701 +0604080106160001060707020607080106160001060707020607080106ff06be02020103 +020206030001060107030607070006030801061600010600070006000704060107000600 +070406010801061600010602070006010700060107000601070006010700060208010001 +060207000601070006010700060107000601070006020801000106020700060107000601 +07000601070006010700060208010616000106020703060b080106160001060707020607 +080106160001060707020607080106ff06be020201030202060300010601070206070700 +060408010616000106000706060107060601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106020709 +06050801061600010607070206070801061600010612080106ff06be0202010302020603 +000106010701060707000605080106160001060007000600070206050700060007020601 +080106160001060207000601070006010700060107000601070006020801000106020700 +060107000601070006010700060107000602080100010602070006010700060107000601 +070006010700060208010616000106030707060608010616000106060704060608010616 +0001060707020607080106ff06be02020103020206030001060107090606080106160001 +060007000600070206050700060007020601080106160001060207000601070006010700 +060107000601070006020801000106020700060107000601070006010700060107000602 +080100010602070006010700060107000601070006010700060208010616000106050704 +0607080106160001060507060605080106160001060707020607080106ff06be02020103 +020206030001061208010616000106000704060507040601080106160001061208010001 +0612080100010612080106160001061208010616000106120801061600010612080106ff +06be02020103020206030001061208010616000106120801061600010612080100010612 +080100010612080106160001061208010616000106120801061600010612080106ff06be +020201030202060300010612080106160001061208010616000106120801000106120801 +00010612080106160001061208010616000106120801061600010612080106ff06be0202 +010302020603000108140616000108140616000108140001081400010814061600010814 +06160001081406160001081406ff06be0202010302020603000008150616000008150616 +00000815000008150000081506160000081506160000081506160000081506ff06be0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 +0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 +06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 +00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 +060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 +0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 +010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf +01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 +010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 +02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603 +010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff +00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf +010000010604010406040801010006030202010302020603010000ff00ff00cf01000001 +0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100 +06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603 +0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 +010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf +01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 +010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 +02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff +00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 +01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103 +020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 +020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 +020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff +06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a +01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103 +020206030100066101020603010206ff06ff062b0100064a010006030202010302020603 +0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661 +01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff +06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a +01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103 +0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665 +010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f +0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603 +020201030202060301000665010106ff06ff062f0100064a010006030202010302020603 +0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661 +01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff +06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a +0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603 +0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff +0199064a010006030202010302020603010006350b610d04005f0d04005f0d04005f0d04 +005f0d04005f0d0400010100061308120623010006030202010302020603010006350b60 +0e000d030100005e08000d030100005e08000d030100005e08000d030100005e08000d03 +0100005e08000d0301000001010006130811000006230100060302020103020206030100 +06350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b +08010d0101020001065b08010d0101020001065b08010d01010200010100061308010010 +0623010006030202010302020603010006350b010a2c01000a2f0e010d0101020001062a +0102062d08010d0101020001062a0102062d08010d0101020001062c0100062d08010d01 +0102000106290104062c08010d0101020001062b0102062c08010d010102000101000613 +0801000d080000010623010006030202010302020603010006350b010a2a01020a2f0e01 +0d01010200010629010006020100062c08010d01010200010629010006020100062c0801 +0d0101020001062b0101062d08010d010102000106290100063008010d0101020001062a +0100062f08010d01010200010100061308010001060a0801000106230100060302020103 +02020603010006350b010a2c01000a2f0e010d01010200010629010006020100062c0801 +0d0101020001062d0100062c08010d0101020001062a010006000100062d08010d010102 +000106290100063008010d010102000106290100063008010d0101020001010006130801 +0001060a080100010623010006030202010302020603010006350b010a2c01000a2f0e01 +0d01010200010629010006020100062c08010d0101020001062d0100062c08010d010102 +0001062a010006000100062d08010d010102000106290100063008010d01010200010629 +0100063008010d01010200010100061308010001060a0801000106230100060302020103 +02020603010006350b010a2c01000a2f0e010d0101020001062c0100062d08010d010102 +0001062b0101062d08010d01010200010629010006010100062d08010d01010200010629 +0103062d08010d010102000106290103062d08010d01010200010100061308010001060a +080100010623010006030202010302020603010006350b010a2c01000a2f0e010d010102 +0001062b0100062e08010d0101020001062d0100062c08010d0101020001062801000602 +0100062d08010d0101020001062d0100062c08010d01010200010629010006020100062c +08010d01010200010100061308010001060a080100010623010006030202010302020603 +010006350b010a2c01000a2f0e010d0101020001062a0100062f08010d0101020001062d +0100062c08010d010102000106280105062c08010d0101020001062d0100062c08010d01 +010200010629010006020100062c08010d01010200010100061308010001060a08010001 +0623010006030202010302020603010006350b010a2c01000a2f0e010d01010200010629 +010006020100062c08010d01010200010629010006020100062c08010d0101020001062c +0100062d08010d01010200010628010006030100062c08010d0101020001062901000602 +0100062c08010d01010200010100061308010001060a0801000106230100060302020103 +02020603010006350b010a2a01040a2d0e010d010102000106290104062c08010d010102 +0001062a0102062d08010d0101020001062b0102062c08010d010102000106290103062d +08010d0101020001062a0102062d08010d01010200010100061308010001060a08010001 +0623010006030202010302020603010006350b010a5d0e010d0101020001065b08010d01 +01020001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b +08010d01010200010100061308010001060a080100010623010006030202010302020603 +010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001 +065b08010d0101020001065b08010d0101020001065b08010d0101020001010006130801 +0001060a080100010623010006030202010302020603010006350b010a5d0e010d010102 +0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801 +0d0101020001065b08010d01010200010100060e0100060308010001060a080100010623 +010006030202010302020603010006350b010a5d0e010d0101020001065b08010d010102 +0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801 +0d01010200010100060d0101060308010001060a08010001062301000603020201030202 +0603010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d010102 +0001065b08010d0101020001065b08010d0101020001065b08010d01010200010100060c +010006000100060308010001080c00010623010006030202010302020603010006350b01 +0a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b08010d01 +01020001065b08010d0101020001065b08010d01010200010100060e010006030801000d +080000010623010006030202010302020603010006350b010e5f0d0101020001085d0d01 +01020001085d0d0101020001085d0d0101020001085d0d0101020001085d0d0101020001 +0100060e0100060308010001060a08010001062301000603020201030202060301000635 +0b000e600d0001030000085e0d0001030000085e0d0001030000085e0d0001030000085e +0d0001030000085e0d000103000008000100060e0100060308010001060a080100010623 +0100060302020103020206030100009a0100006301000063010000630100006301000063 +010000020100060e0100060308010001060a080100010623010006030202010302020603 +01000035080000630100006301000063010000630100006301000063010000020100060e +0100060308010001060a0801000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100060c010406010801 +0001060a0801000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010001060a080100010623 +010006030202010302020603010000010617010006190801006301000063010000630100 +00630100006301000063010000020100061308010001060a080100010623010006030202 +01030202060301000001061501020619080100630100000e010000530100006301000063 +0100006301000063010000020100061308010001060a0801000106230100060302020103 +0202060301000001061701000619080100630100000e0100005301000063010000630100 +006301000063010000020100061308010001060a08010001062301000603020201030202 +0603010000010617010006190801000f0102000201000000010100020100000001010003 +0102003b0100000e01000000010100020100000001010003010200020101000001000002 +01010000010000030102002d010000630100006301000063010000630100000201000613 +08010001060a080100010623010006030202010302020603010000010617010006190801 +000e010000020100000101010001010000010101000101000001010000020100003a0100 +000e01010001010000010101000101000001010000020100000101000000010000000100 +0001010000000100000001000001010000020100002c0100006301000063010000630100 +0063010000020100061308010001060a0801000106230100060302020103020206030100 +00010617010006190801001201000001010000020100000101000002010000050100003a +0100000e0100000201000001010000050100000201000001010000000100000001000001 +0100000001000000010000050100002c0100006301000063010000630100006301000002 +0100061308010001060a0801000106230100060302020103020206030100000106170100 +06190801000f01030001010000020100000101000002010000020103003a0100000e0100 +000201000001010000050100000201000001010000000100000001000001010000000100 +0000010000020103002c0100006301000063010000630100006301000002010006130801 +0001080c00010623010006030202010302020603010000010617010006190801000e0100 +00020100000101000002010000010100000201000001010000020100003a0100000e0100 +000201000001010000050100000201000001010000000100000001000001010000000100 +000001000001010000020100002c01000063010000630100006301000063010000020100 +061308010000080d00010623010006030202010302020603010000010615010406170801 +000e010000020100000101000002010000010100000201000001010000020100003a0100 +000e01010001010000010100000501000002010000010100000001000000010000010100 +00000100000001000001010000020100002c010000630100006301000063010000630100 +00020100061308010c0e000106230100060302020103020206030100000106320801000f +01030001010000020100000101000002010000020103003a0100000e0100000001010002 +01000006010200020100000001000000010000010100000001000000010000020103002c +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000108340063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000000835 +01ff01ff0161061308010c0e000106230100060302020103020206030100009a01000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000035080000630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010616010206180801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061501000602 +0100061708010011010100130100000b01000002010000290100002c0100000b01020003 +0102001f01000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010615010006020100061708010010010000150100 +000f010000290100002c0100000d010000050100001f0100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010615 +010006020100061708010010010000030100000001010003010200030101000001000001 +01000000010100030102000201000001010000260100000e010000000101000301020002 +01000000010100020100000001010002010400010100000201000004010000050100001f +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +0202010302020603010000010618010006180801000e0104000101010001010000010100 +000201000001010000010101000101010001010000040100000201000000010000270100 +000e01010001010000010100000201000001010100010100000101010001010000030100 +00030100000201000004010000050100001f010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061701000619 +080100100100000301000005010000020100000101000002010000010100000801000002 +010100280100000e01000002010000010100000201000001010000050100000701000003 +0100000201000004010000050100001f0100006301000063010000630100006301000002 +0100061308010c0e000106230100060302020103020206030100000106160100061a0801 +001001000003010000050104000101000002010000010100000801000002010100280100 +000e01000002010000010100000201000001010000050100000701000003010000020100 +0004010000050100001f0100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010615010006020100061708010010 +010000030100000501000005010000020100000101000008010000020100000001000027 +0100000e0100000201000001010000020100000101000005010000070100000301000002 +01000004010000050100001f010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061501040617080100100100 +000301000005010000020100000101000001010100010100000801000002010000010100 +00260100000e010000020100000101000002010000010100000501000007010000030100 +000101010004010000050100001f01000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801001001000003 +01000006010200030101000001000001010000080100000201000002010000250100000e +010000020100000201020002010000050100000801010002010100000100000401000005 +0100001f01000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106320801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001083400630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0000083501ff01ff0161061308010c0e000106230100060302020103020206030100009a +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000350800006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106160102061808010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010615 +01000602010006170801002601000003010200030102002d010000160102004901000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +02020603010000010619010006170801002d010000050100002d01000018010000490100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010619010006170801000f01010000010000010100000201000001 +0100000001010003010200050100000501000003010200260100000f0102000501000002 +010000020100000201020003010200030102000201000000010100260100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010617010106180801000e01000001010100010100000201000001010100010100 +000401000005010000050100000201000002010000250100000e01000002010000040100 +000201000002010000010100000201000001010000020100000101000002010000010101 +00010100002501000063010000630100006301000063010000020100061308010c0e0001 +0623010006030202010302020603010000010619010006170801000e0100000201000001 +01000002010000010100000201000004010000050100000501000006010000250100000e +010000080100000201000002010000010100000501000005010000020100000101000002 +0100002501000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010619010006170801000e01000002010000010100 +0002010000010100000201000004010000050100000501000003010300250100000f0102 +000501000002010000020100000201020003010200020104000101000002010000250100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000001061501000602010006170801000e010000020100000101000002 +010000010100000201000004010000050100000501000002010000020100002501000012 +010000040100000201000002010000050100000501000001010000050100000201000025 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +0202010302020603010000010616010206180801000e0100000101010001010000010101 +0001010000020100000401000005010000050100000201000002010000250100000e0100 +000201000004010000020100000101010001010000020100000101000002010000010100 +000201000001010000020100002501000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801000f01010000 +010000020101000001000001010000020100000401000005010000050100000301030025 +0100000f0102000501000003010100000100000201020003010200030102000201000002 +0100002501000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100120100004f01000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +06030100000106320801000e010000020100004f01000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +06320801000f010200500100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010834 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000000083501ff01ff0161061308010c0e00010623 +0100060302020103020206030100009a0100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100003508000063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106320801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061801000618080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000001061701010618080100110100001a010100040100002d +010000160102000c01000002010000370100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010616010006000100 +06180801002c010000350100001801000010010000370100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010616 +01000600010006180801000f010200030102000301020003010200040100000401020002 +01000000010100030102001f0100000f0102000501000002010000020100000201020002 +010000010100003401000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106150100060101000618080100110100 +000201000002010000010100000201000001010000020100000101040004010000020101 +000101000001010000020100001e0100000e010000020100000401000002010000020100 +000401000002010000000100003501000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106140100060201000618 +080100110100000201000002010000010100000501000002010000030100000601000002 +0100000201000001010000020100001e0100001201000004010000020100000201000004 +010000020101003601000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106140105061708010011010000020100 +0002010000020102000201040003010000060100000201000002010000010104001e0100 +000f01030004010000030100000001000005010000020101003601000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106180100061808010011010000020100000201000005010000010100000701000006 +010000020100000201000001010000220100000e01000002010000040100000301000000 +010000050100000201000000010000350100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010617010206170801 +001101000002010000020100000101000002010000010100000201000003010000060100 +00020100000201000001010000020100001e0100000e0100000201000004010000040100 +000601000002010000010100003401000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801001101000003 +010200030102000301020004010000060100000201000002010000020102001f0100000f +010300040100000401000006010000020100000201000033010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010011010000500100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801000e01000001 +010000500100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801000f01010051010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001083400630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0000083501ff01ff0161061308010c0e0001062301000603020201030202060301000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000000050000000500000005000000050000000500 +000005000000050000000500000005000100006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000500 +000005320100050000630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000005340100006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000500000005150104051701000500006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +06030100000005160100051c0100000e010000160100003b0100000e0100000601020010 +0100000c0100002901000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000500000005150100051b01000500000e0100 +00530100000e01000008010000100100000c010000290100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000000516 +0100051c0100000e01000001010000030102000201000000010100030102000201000000 +010100340100000e01000000010100050100000301020003010200020100000101000003 +010200020100000001010003010200020100000001010003010100000100001001000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000500000005150103051801000500000e0100000001000003010000020100 +000101010001010000040100000201010001010000330100000e01010001010000040100 +000201000002010000010100000201000001010000000100000301000002010000010101 +000101000001010000020100000101010001010000010100000101010010010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000000051a010005180100000e0101000801000001010000080100000201000002 +010000330100000e01000002010000040100000601000001010000050101000401000002 +010000010100000201000001010000020100000101000005010000020100001001000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000500000005190100051701000500000e0101000501030001010000080100 +000201000002010000330100000e01000002010000040100000301030001010000050101 +000401040001010000020100000101040001010000050100000201000010010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000000051501000503010005180100000e01000000010000030100000201000001 +010000080100000201000002010000330100000e01000002010000040100000201000002 +010000010100000501000000010000030100000501000002010000010100000501000005 +010000020100001001000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000500000005150103051801000500000e0100 +0001010000020100000201000001010000080100000201000002010000330100000e0101 +000101000004010000020100000201000001010000020100000101000001010000020100 +000201000001010100010100000101000002010000010100000501000001010100100100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +0103020206030100000005340100000e0100000201000002010300010100000801000002 +01000002010000330100000e010000000101000501000003010300020102000201000002 +010000020102000201000000010100030102000201000006010100000100001001000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100050000000532010005000063010000510100001001000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +00000534010000630100004d010000020100001001000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100050000000532 +0100050000630100004e0102001101000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000005340100006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000500000005320100050000630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010000630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001000500010005000100050001000500 +010005000100050001000500010005000100050001ff01ff0161061308010c0e00010623 +01000603020201030202060301000d360063010000630100006301000063010000630100 +0063010000020100061308010c0e0001062301000603020201030202060301000d350100 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000d01013400630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0d0101340063010000630100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000d010117000201190063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000d0101160000011c000e0100000e010000140100002d010000320102 +002d01000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000d0101150000011d000e0100000e01000043010000340100 +002d01000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000d0101150000011d000e0100000101000003010200020104 +00020102000201000000010100030102000201000000010100030102001f0100000e0100 +000201000001010000000101000201000000010100030102000301020005010000030102 +002601000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000d0101150003011a000e0100000001000003010000020100 +000301000003010000020100000101010001010000040100000201010001010000010100 +00020100001e0100000e0100000201000001010100010100000101010001010000010100 +000201000001010000020100000401000002010000020100002501000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0d0101150000010200000119000e01010008010000030100000701000001010000080100 +000201000002010000050100001e0100000e010000020100000101000002010000010100 +000201000001010000090100000401000006010000250100006301000063010000630100 +0063010000020100061308010c0e0001062301000603020201030202060301000d010115 +0000010200000119000e0101000501030003010000040103000101000008010000020100 +0002010000020103001e0100000e01000002010000010100000201000001010000020100 +000201020003010300040100000301030025010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000d01011500000102 +00000119000e010000000100000301000002010000030100000301000002010000010100 +0008010000020100000201000001010000020100001e0100000e01000002010000010100 +000201000001010000020100000501000001010000020100000401000002010000020100 +002501000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000d0101160002011a000e0100000101000002010000020100 +000301000003010000020100000101000008010000020100000201000001010000020100 +001e0100000e010000010101000101010001010000010101000101000001010000020100 +000101000002010000040100000201000002010000250100006301000063010000630100 +0063010000020100061308010c0e0001062301000603020201030202060301000d010134 +000e01000002010000020103000401010002010300010100000801000002010000020100 +00020103001e0100000f0101000001000001010000000101000201000000010100030102 +000301030004010000030103002501000063010000630100006301000063010000020100 +061308010c0e0001062301000603020201030202060301000d0101340063010000150100 +00050100004501000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000d01013400630100001501000005010000450100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +01030202060301000d010134006301000015010000050100004501000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0d0101340063010000630100006301000063010000630100006301000002010006130801 +0c0e0001062301000603020201030202060301000d010134006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000d01013400630100006301000063010000630100006301000063010000020100 +061308010c0e0001062301000603020201030202060301000d0001ff01ff019706130801 +0c0e000106230100060302020103020206030100009a0100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +003508000063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061501040617 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106150100060201000617080100260100 +003b01000019010000170102002d01000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106180100061808010063 +01000019010000190100002d010000630100006301000063010000630100000201000613 +08010c0e00010623010006030202010302020603010000010618010006180801000e0101 +00000100000301020002010000000101000301020003010200340100000f010200030101 +000001000002010200020100000001010002010000000101000501000003010200020100 +00000101001f01000063010000630100006301000063010000020100061308010c0e0001 +0623010006030202010302020603010000010618010006180801000e0100000001000000 +01000001010000020100000101010001010000040100000201000002010000330100000e +010000020100000101000001010100010100000201000001010100010100000101010001 +01000004010000020100000201000001010100010100001e010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +0618010006180801000e0100000001000000010000050100000101000008010000060100 +00330100000e010000020100000101000002010000010100000201000001010000020100 +000101000002010000040100000601000001010000020100001e01000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +00010617010006190801000e010000000100000001000002010300010100000801000003 +010300330100000e01000002010000010100000201000001010400010100000201000001 +01000002010000040100000301030001010000020100001e010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +0617010006190801000e0100000001000000010000010100000201000001010000080100 +000201000002010000330100000e01000002010000010100000201000001010000050100 +0002010000010100000201000004010000020100000201000001010000020100001e0100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010617010006190801000e01000000010000000100000101000002 +01000001010000080100000201000002010000330100000e010000020100000101000001 +010100010100000201000001010000020100000101010001010000040100000201000002 +01000001010000020100001e010000630100006301000063010000630100000201000613 +08010c0e000106230100060302020103020206030100000106320801000e010000000100 +000001000002010300010100000801000003010300330100000f01020003010100000100 +000201020002010000020100000101000000010100050100000301030001010000020100 +001e01000063010000630100006301000063010000020100061308010c0e000106230100 +06030202010302020603010000010632080100630100002a010000370100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100002a01000037010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100002a0100003701000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010834006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 +010302020603010005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050000000500000005000000 +050000000500000005000000050000000500000005000000050001000063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010005000000053201000500006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000000 +053401000063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010005000000051601020518010005000063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +01000603020201030202060301000000051601000502010005180100001e010000430100 +000e01000006010200100100000c01000029010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000500000005150100 +05020100051701000500001e010000430100000e01000008010000100100000c01000029 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000000051601000502010005180100000e01010000010000030102 +0002010400020102003b0100000e01000000010100050100000301020003010200020100 +000101000003010200020100000001010003010200020100000001010003010100000100 +001001000063010000630100006301000063010000020100061308010c0e000106230100 +0603020201030202060301000500000005160102051801000500000e0100000001000000 +01000001010000020100000301000003010000020100003a0100000e0101000101000004 +010000020100000201000001010000020100000101000000010000030100000201000001 +010100010100000101000002010000010101000101000001010000010101001001000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000000051601000502010005180100000e0100000001000000010000050100 +0003010000030100003e0100000e01000002010000040100000601000001010000050101 +000401000002010000010100000201000001010000020100000101000005010000020100 +001001000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100050000000515010005020100051701000500000e01000000 +010000000100000201030003010000040102003b0100000e010000020100000401000003 +010300010100000501010004010400010100000201000001010400010100000501000002 +0100001001000063010000630100006301000063010000020100061308010c0e00010623 +01000603020201030202060301000000051601000502010005180100000e010000000100 +0000010000010100000201000003010000070100003a0100000e01000002010000040100 +000201000002010000010100000501000000010000030100000501000002010000010100 +000501000005010000020100001001000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100050000000516010205180100 +0500000e010000000100000001000001010000020100000301000003010000020100003a +0100000e0101000101000004010000020100000201000001010000020100000101000001 +010000020100000201000001010100010100000101000002010000010100000501000001 +0101001001000063010000630100006301000063010000020100061308010c0e00010623 +0100060302020103020206030100000005340100000e0100000001000000010000020103 +0004010100020102003b0100000e01000000010100050100000301030002010200020100 +000201000002010200020100000001010003010200020100000601010000010000100100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010005000000053201000500006301000051010000100100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000000534010000630100004d01000002010000100100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010005000000 +05320100050000630100004e010200110100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000000534010000630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100050000000532010005000063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +050001000500010005000100050001000500010005000100050001000500010005000100 +0500010005000100050001000500010005000100050001ff01ff0161061308010c0e0001 +06230100060302020103020206030100009a010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000350800 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106160102061808010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010615010006020100061708010016010200030102 +00420100000e010000230100000b01020003010200180100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010615 +01000602010006170801001801000005010000420100000e010000230100000d01000005 +0100001801000063010000630100006301000063010000020100061308010c0e00010623 +01000603020201030202060301000001061501000602010006170801000f010200050100 +0005010000030102003b0100000e01000000010100030102000201000000010100020100 +000001010003010200020104000101000002010000040100000501000018010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061501000602010006170801000e01000002010000040100000501000002 +010000020100003a0100000e010100010100000101000002010000010101000101000001 +010100010100000101000002010000030100000301000002010000040100000501000018 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +0202010302020603010000010616010306170801000e0100000201000004010000050100 +0002010000020100003a0100000e01000002010000010100000201000001010000050100 +000201000001010000070100000301000002010000040100000501000018010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +0603010000010619010006170801000e010000020100000401000005010000020104003a +0100000e0100000201000001010000020100000101000005010000020100000201020004 +010000030100000201000004010000050100001801000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106180100 +06180801000e010000020100000401000005010000020100003e0100000e010000020100 +000101000002010000010100000501000002010000050100000301000003010000020100 +000401000005010000180100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010615010206190801000e01000002 +010000040100000501000002010000020100003a0100000e010000020100000101000002 +010000010100000501000002010000010100000201000003010000030100000101010004 +010000050100001801000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801000f01020005010000050100 +00030102003b0100000e0100000201000002010200020100000501000002010000020102 +000501010002010100000100000401000005010000180100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +083400630100006301000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 +062301000603020201030202060301000900000009000000090000000900000009000000 +090000000900000009000000090000000900000009000000090000000900000009000000 +090000000900000009000000090000000900000009000000090000000900000009000000 +090000000900000009000000090000000900006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000000 +090000000900000009000000090000000900000009000000090000000900000009000000 +090000000900000009000000090000000900000009000000090000000900000009000000 +090000000900000009000000090000000900000009000000090000000900000009000100 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000900000009320100090000630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000009340100006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000900000009130100 +090401020915010009000063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000000912010209030100 +090201000915010000630100001701000020010200260100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010009000000 +091301000903010009020100091401000900006301000017010000220100002601000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000009140100090301000902010009150100000e01000000010100030102 +000201000000010100420100000f01020002010400010100000201000001010000000101 +000301020002010000000101000501000003010200020100000001010018010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +0603010009000000091301000903010009020100091401000900000e0101000101000001 +010000020100000101010001010000410100000e01000002010000030100000301000002 +010000010101000101000001010000020100000101010001010000040100000201000002 +010000010101000101000017010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000000091401000903010009020100 +09150100000e01000002010000010100000201000001010000450100000e010000070100 +000301000002010000010100000501000002010000010100000201000004010000060100 +000101000002010000170100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010009000000091301000903010009020100 +091401000900000e010000020100000101040001010000450100000f0102000401000003 +010000020100000101000005010400010100000201000004010000030103000101000002 +0100001701000063010000630100006301000063010000020100061308010c0e00010623 +0100060302020103020206030100000009140100090301000902010009150100000e0100 +000201000001010000050100004501000012010000030100000301000002010000010100 +000501000005010000020100000401000002010000020100000101000002010000170100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +0103020206030100090000000911010409020102091501000900000e0101000101000001 +0100000201000001010000450100000e0100000201000003010000030100000101010001 +010000050100000201000001010100010100000401000002010000020100000101000002 +0100001701000063010000630100006301000063010000020100061308010c0e00010623 +0100060302020103020206030100000009340100000e0100000001010003010200020100 +00450100000f010200050101000201010000010000010100000601020002010000000101 +000501000003010300010100000201000017010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000900000009320100 +0900000e0100005301000031010000300100006301000063010000630100006301000002 +0100061308010c0e000106230100060302020103020206030100000009340100000e0100 +005301000031010000300100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010009000000093201000900000e01000053 +010000310100003001000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000009340100006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000900000009320100090000630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000009000100 +090001000900010009000100090001000900010009000100090001000900010009000100 +090001000900010009000100090001000900010009000100090001000900010009000100 +090001000900010009000100090001000900010009000100090001000900010000630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100090001000900010009000100090001000900010009000100 +090001000900010009000100090001000900010009000100090001000900010009000100 +090001000900010009000100090001000900010009000100090001000900010009000100 +090001000900010009000100090001ff01ff0161061308010c0e00010623010006030202 +0103020206030100009a0100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100003508000063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000605010006160801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061101020603010206160801001701000006010000420100 +00150100001c0100000b0102000301020018010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000605 +01000616080100170100004a010000150100001c0100000d010000050100001801000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +0202060301000001061301000605010006160801000f0102000201040002010200020100 +000001010003010200340100000f01020002010000010100000301020002010000000101 +000301020002010400010100000201000004010000050100001801000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +0001061301000605010006160801000e0100000201000003010000060100000201010001 +0100000101000002010000330100000e0100000201000001010000000100000301000002 +010000010101000101000001010000020100000301000003010000020100000401000005 +0100001801000063010000630100006301000063010000020100061308010c0e00010623 +01000603020201030202060301000001061301000605010006160801000e010000070100 +0006010000020100000201000005010000330100000e0100000501010008010000010100 +000201000001010000070100000301000002010000040100000501000018010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000605010006160801000f01020004010000060100000201000002 +01000002010300330100000f010200020101000501030001010000020100000201020004 +010000030100000201000004010000050100001801000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106130100 +060501000616080100120100000301000006010000020100000201000001010000020100 +003301000012010000010100000001000003010000020100000101000002010000050100 +000301000003010000020100000401000005010000180100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010611 +01040601010406140801000e010000020100000301000006010000020100000201000001 +01000002010000330100000e010000020100000101000001010000020100000201000001 +010000020100000101000002010000030100000301000001010100040100000501000018 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +02020103020206030100000106320801000f010200050101000401000002010000020100 +0002010300330100000f0102000201000002010000020103000101000002010000020102 +000501010002010100000100000401000005010000180100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +083400630100006301000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 +06230100060302020103020206030100009a010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000350800 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060401020615 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106110102060301000602010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000603010006020100061408010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006030100060201000614080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106130100060601000615080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106130100060501000616080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106130100060401000617080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106130100 +060301000602010006140801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061101040601 +010406140801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001063208010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001083400630100006301000063010000630100006301000063 +010000020100061308010c0e0001062301000603020201030202060301000000083501ff +01ff0161061308010c0e000106230100060302020103020206030100009a010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000350800006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010632080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106130100060401020615080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106110102 +060301000602010006140801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000607 +010006140801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000607010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000605010106150801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061301000607010006140801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000607010006140801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000603010006020100061408010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010611 +010406020102061508010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +063208010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010632080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106320801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001063208010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010834006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000000 +083501ff01ff0161061308010c0e000106230100060302020103020206030100009a0100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100003508000063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000606010006150801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061101020605010106150801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000604 +010006000100061508010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010613010006040100 +060001000615080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060301000601 +010006150801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000602010006020100 +061508010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010613010006020105061408010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006060100061508010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010611010406030102061408010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010834006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 +0103020206030100009a0100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100003508000063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000603010406140801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061101020603010006180801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000603010006180801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000603010006180801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000603 +010306150801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000607010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000607010006140801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061301000602010006030100061408010063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010611010406010103061508010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010834006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 +0103020206030100009a0100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100003508000063010000630100 +0063010000630100006301000063010000020100061308010c0e00010623010006030202 +010302020603010000010632080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000605010206140801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061101020604010006170801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000603010006180801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000603010006180801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000603 +010306150801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000603010006020100 +061408010063010000630100006301000063010000630100006301000002010006130801 +0c0e00010623010006030202010302020603010000010613010006030100060201000614 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106130100060301000602010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061101040602010206150801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +083400630100006301000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 +06230100060302020103020206030100009a010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000350800 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060301040614 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106110102060301000602010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000606010006150801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001061301000606010006150801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000606010006150801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +061301000606010006150801006301000063010000630100006301000063010000630100 +00020100061308010c0e0001062301000603020201030202060301000001061301000605 +010006160801006301000063010000630100006301000063010000630100000201000613 +08010c0e0001062301000603020201030202060301000001061301000605010006160801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061101040603010006160801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106320801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001063208010063010000630100006301000063010000630100006301000002 +0100061308010c0e00010623010006030202010302020603010000010632080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106320801006301000063010000630100006301000063 +01000063010000020100061308010c0e0001062301000603020201030202060301000001 +083400630100006301000063010000630100006301000063010000020100061308010c0e +0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 +06230100060302020103020206030100009a010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000350800 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106130100060401020615 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000106110102060301000602010006140801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001061301000603010006020100061408010063 +0100006301000063010000630100006301000063010000020100061308010c0e00010623 +010006030202010302020603010000010613010006030100060201000614080100630100 +006301000063010000630100006301000063010000020100061308010c0e000106230100 +060302020103020206030100000106130100060401020615080100630100006301000063 +010000630100006301000063010000020100061308010c0e000106230100060302020103 +020206030100000106130100060301000602010006140801006301000063010000630100 +00630100006301000063010000020100061308010c0e0001062301000603020201030202 +060301000001061301000603010006020100061408010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010613010006030100060201000614080100630100006301000063010000630100 +006301000063010000020100061308010c0e000106230100060302020103020206030100 +000106110104060201020615080100630100006301000063010000630100006301000063 +010000020100061308010c0e000106230100060302020103020206030100000106320801 +00630100006301000063010000630100006301000063010000020100061308010c0e0001 +062301000603020201030202060301000001063208010063010000630100006301000063 +0100006301000063010000020100061308010c0e00010623010006030202010302020603 +010000010632080100630100006301000063010000630100006301000063010000020100 +061308010c0e000106230100060302020103020206030100000106320801006301000063 +01000063010000630100006301000063010000020100061308010c0e0001062301000603 +020201030202060301000001063208010063010000630100006301000063010000630100 +0063010000020100061308010c0e00010623010006030202010302020603010000010632 +080100630100006301000063010000630100006301000063010000020100061308010c0e +000106230100060302020103020206030100000108340063010000630100006301000063 +0100006301000063010000020100061308010010062301000603020201030202060301ff +01ff01990613080000110623010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +0202060301000649010006ff06ff069801000603020201030202060301000648010106ff +06ff06980100060302020103020206030100064701000600010006ff06ff069801000603 +020201030202060301000649010006ff06ff069801000603020201030202060301000649 +010006ff06ff069801000603020201030202060301000649010006ff06ff069801000603 +020201030202060301000649010006ff06ff069801000603020201030202060301000649 +010006ff06ff069801000603020201030202060301000647010406ff06ff069601000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +0100063708ff08ff0860064a0100060302020103020206030100063708ff08ff085f0000 +064a010006030202010302020603010006370801001d0cff0cff0c3e0001064a01000603 +0202010302020603010006370801001c08000cff0cff0c3e0001064a0100060302020103 +020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603 +02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a +0100060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e +0001064a0100060302020103020206030100063708010001060b08000000060b08010cff +0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000060b +08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b0800 +0000060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001 +060b08000000060b08010cff0cff0c3e0001064a01000603020201030202060301000637 +08010001060b08000000060b08010cff0cff0c3e0001064a010006030202010302020603 +0100063708010001060b08000000060b08010cff0cff0c3e0001064a0100060302020103 +020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603 +02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a +0100060302020103020206030100063708010001080c0000080d0cff0cff0c3e0001064a +0100060302020103020206030100063708010000081c0cff0cff0c3e0001064a01000603 +020201030202060301000637080100ff00ff005e064a0100060302020103020206030100 +0637080000ff00ff005f064a010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 +010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 +02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 +0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 +010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff +06ff06e3010006030202010302020603010006ff06ff06e3010006030202010100040603 +010006ff06ff06e301000603000502020400060301ff01ff01e506030000020204000000 +0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000 +0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000 +02020400000502ff02ff02e100060202040000000208040002ff02ff02e1000002080400 +00000208040002ff02ff02e100000208040000000208040001ff01ff01e1000002080400 +0000040901ff01ff01e100000409 +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 0 0 532 441 +%%EOF diff --git a/lib/tv/doc/src/warning.gif b/lib/tv/doc/src/warning.gif new file mode 100644 index 0000000000..96af52360e Binary files /dev/null and b/lib/tv/doc/src/warning.gif differ diff --git a/lib/tv/ebin/.gitignore b/lib/tv/ebin/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tv/info b/lib/tv/info new file mode 100644 index 0000000000..63e88b04b5 --- /dev/null +++ b/lib/tv/info @@ -0,0 +1,2 @@ +group: tools +short: An ETS and MNESIA graphical table visualizer diff --git a/lib/tv/priv/Makefile b/lib/tv/priv/Makefile new file mode 100644 index 0000000000..69e3e32c8a --- /dev/null +++ b/lib/tv/priv/Makefile @@ -0,0 +1,72 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +include ../vsn.mk +VSN = $(TV_VSN) + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN) + +# +# Macros +# +TOOLBAR_FILES = \ + arrow_left.xbm \ + arrow_right.xbm \ + edit1.xbm \ + erlang.gif \ + help.xbm \ + info.xbm \ + key.xbm \ + more.xbm \ + no_sort.xbm \ + open.xbm \ + poll.xbm \ + search.xbm \ + sort.xbm \ + sort_reverse.xbm \ + tv.gif \ + tv.tool + +# +# Rules +# + +debug opt: + +docs: + +clean: + + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +release_spec: opt + $(INSTALL_DIR) $(RELSYSDIR)/priv + $(INSTALL_DATA) $(TOOLBAR_FILES) $(RELSYSDIR)/priv + +release_docs_spec: + +FORCE: diff --git a/lib/tv/priv/arrow_left.xbm b/lib/tv/priv/arrow_left.xbm new file mode 100644 index 0000000000..58db123a00 --- /dev/null +++ b/lib/tv/priv/arrow_left.xbm @@ -0,0 +1,5 @@ +#define arrow_left_width 16 +#define arrow_left_height 8 +static unsigned char arrow_left_bits[] = { + 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00, 0xfe, 0xff, 0xfe, 0xff, 0x1c, 0x00, + 0x38, 0x00, 0x70, 0x00}; diff --git a/lib/tv/priv/arrow_right.xbm b/lib/tv/priv/arrow_right.xbm new file mode 100644 index 0000000000..7eca80303d --- /dev/null +++ b/lib/tv/priv/arrow_right.xbm @@ -0,0 +1,5 @@ +#define arrow_right_width 16 +#define arrow_right_height 8 +static unsigned char arrow_right_bits[] = { + 0x00, 0x1c, 0x00, 0x38, 0x00, 0x70, 0xfc, 0xff, 0xfc, 0xff, 0x00, 0x70, + 0x00, 0x38, 0x00, 0x1c}; diff --git a/lib/tv/priv/edit1.xbm b/lib/tv/priv/edit1.xbm new file mode 100644 index 0000000000..dc13f274c0 --- /dev/null +++ b/lib/tv/priv/edit1.xbm @@ -0,0 +1,12 @@ +#define edit1_width 25 +#define edit1_height 25 +static unsigned char edit1_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, + 0x00, 0x01, 0x14, 0x00, 0x70, 0xf9, 0x27, 0x00, 0xf8, 0x01, 0x3c, 0x00, + 0xf8, 0xf9, 0x27, 0x00, 0xf0, 0x03, 0x20, 0x00, 0xe0, 0xff, 0x27, 0x00, + 0xc0, 0x07, 0x20, 0x00, 0x80, 0xff, 0x27, 0x00, 0x00, 0x1f, 0x20, 0x00, + 0x00, 0xfd, 0x27, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xf9, 0x27, 0x00, + 0x00, 0x21, 0x21, 0x00, 0x00, 0xf9, 0x27, 0x00, 0x00, 0x01, 0x20, 0x00, + 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/erlang.gif b/lib/tv/priv/erlang.gif new file mode 100644 index 0000000000..8d06e98065 Binary files /dev/null and b/lib/tv/priv/erlang.gif differ diff --git a/lib/tv/priv/help.xbm b/lib/tv/priv/help.xbm new file mode 100644 index 0000000000..b2cbc541e4 --- /dev/null +++ b/lib/tv/priv/help.xbm @@ -0,0 +1,8 @@ +#define help_width 20 +#define help_height 20 +static unsigned char help_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x80, 0xe7, 0x01, + 0x80, 0xc3, 0x01, 0x80, 0xc3, 0x01, 0x00, 0xe3, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/info.xbm b/lib/tv/priv/info.xbm new file mode 100644 index 0000000000..d5157661c2 --- /dev/null +++ b/lib/tv/priv/info.xbm @@ -0,0 +1,8 @@ +#define info_width 20 +#define info_height 20 +static unsigned char info_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/key.xbm b/lib/tv/priv/key.xbm new file mode 100644 index 0000000000..222be32219 --- /dev/null +++ b/lib/tv/priv/key.xbm @@ -0,0 +1,6 @@ +#define key_width 10 +#define key_height 18 +static char key_bits[] = { + 0xfc,0x00,0xfe,0x01,0x87,0x03,0x03,0x03,0x87,0x03,0xfe,0x01,0xfc,0x00,0x30, + 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x3b,0x00,0x3b,0x00, + 0x3f,0x00,0x3f,0x00,0x37,0x00}; diff --git a/lib/tv/priv/more.xbm b/lib/tv/priv/more.xbm new file mode 100644 index 0000000000..38ef738768 --- /dev/null +++ b/lib/tv/priv/more.xbm @@ -0,0 +1,8 @@ +#define more_width 16 +#define more_height 26 +static unsigned char more_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, + 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x0f, 0x00, 0x07, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/no_sort.xbm b/lib/tv/priv/no_sort.xbm new file mode 100644 index 0000000000..90568dd828 --- /dev/null +++ b/lib/tv/priv/no_sort.xbm @@ -0,0 +1,8 @@ +#define no_sort_width 20 +#define no_sort_height 20 +static unsigned char no_sort_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x08, 0x02, 0x20, 0x08, 0x02, + 0x20, 0x48, 0x02, 0x20, 0x48, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, + 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/open.xbm b/lib/tv/priv/open.xbm new file mode 100644 index 0000000000..fe77d2c38b --- /dev/null +++ b/lib/tv/priv/open.xbm @@ -0,0 +1,8 @@ +#define open_width 20 +#define open_height 20 +static unsigned char open_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x05, + 0xe0, 0x00, 0x06, 0xf0, 0x1f, 0x07, 0xf0, 0x3f, 0x00, 0xf0, 0x3f, 0x00, + 0xf0, 0x3f, 0x00, 0xf0, 0xff, 0x03, 0xf0, 0x00, 0x01, 0x70, 0x80, 0x00, + 0x30, 0x40, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/poll.xbm b/lib/tv/priv/poll.xbm new file mode 100644 index 0000000000..6ec1dbeaf2 --- /dev/null +++ b/lib/tv/priv/poll.xbm @@ -0,0 +1,8 @@ +#define poll2_width 20 +#define poll2_height 20 +static unsigned char poll2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, + 0xe0, 0xf1, 0x00, 0xf0, 0xe0, 0x01, 0x70, 0xf8, 0x07, 0x70, 0xf0, 0x03, + 0x70, 0xe0, 0x01, 0xf0, 0xc0, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x7f, 0x00, + 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/search.xbm b/lib/tv/priv/search.xbm new file mode 100644 index 0000000000..3498e66b0d --- /dev/null +++ b/lib/tv/priv/search.xbm @@ -0,0 +1,8 @@ +#define search2_width 20 +#define search2_height 20 +static unsigned char search2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0xe1, 0x00, 0xc0, 0xe1, 0x00, 0xe0, 0xf3, 0x01, 0x20, 0x93, 0x01, + 0xf0, 0xff, 0x03, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, + 0xe8, 0xdd, 0x07, 0xe8, 0xdf, 0x07, 0xe8, 0xd3, 0x07, 0xf8, 0xf3, 0x07, + 0xe8, 0x40, 0x07, 0xe8, 0x40, 0x07, 0xf8, 0xc0, 0x07, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/sort.xbm b/lib/tv/priv/sort.xbm new file mode 100644 index 0000000000..576564b817 --- /dev/null +++ b/lib/tv/priv/sort.xbm @@ -0,0 +1,8 @@ +#define sort_width 20 +#define sort_height 20 +static unsigned char sort_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0x48, 0x02, 0x00, 0x48, 0x02, + 0x00, 0x49, 0x02, 0x00, 0x49, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, + 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/sort_reverse.xbm b/lib/tv/priv/sort_reverse.xbm new file mode 100644 index 0000000000..b58e6308f5 --- /dev/null +++ b/lib/tv/priv/sort_reverse.xbm @@ -0,0 +1,8 @@ +#define sort_reverse_width 20 +#define sort_reverse_height 20 +static unsigned char sort_reverse_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x20, 0x01, 0x00, 0x20, 0x01, 0x00, 0x20, 0x09, 0x00, 0x20, 0x09, 0x00, + 0x20, 0x49, 0x00, 0x20, 0x49, 0x00, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, + 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/tv.gif b/lib/tv/priv/tv.gif new file mode 100644 index 0000000000..44daac2912 Binary files /dev/null and b/lib/tv/priv/tv.gif differ diff --git a/lib/tv/priv/tv.tool b/lib/tv/priv/tv.tool new file mode 100644 index 0000000000..770424d283 --- /dev/null +++ b/lib/tv/priv/tv.tool @@ -0,0 +1,23 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +{version,"0.1"}. +{{tool,"Table Visualizer"}, + {start,{tv,start,[]}}, + {icon,"tv.gif"}, + {message,"The Table Visualizer"}, + {html,"../doc/html/index.html"}}. diff --git a/lib/tv/src/Makefile b/lib/tv/src/Makefile new file mode 100644 index 0000000000..457b9d38c4 --- /dev/null +++ b/lib/tv/src/Makefile @@ -0,0 +1,135 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../vsn.mk +VSN=$(TV_VSN) + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN) + +# ---------------------------------------------------- +# Common Macros +# ---------------------------------------------------- + +MODULES= \ + tv \ + tv_comm_func \ + tv_db \ + tv_db_search \ + tv_db_sort \ + tv_ets_rpc \ + tv_etsread \ + tv_info \ + tv_io_lib \ + tv_io_lib_format \ + tv_io_lib_pretty \ + tv_ip \ + tv_main \ + tv_mnesia_rpc \ + tv_new_table \ + tv_nodewin \ + tv_pb \ + tv_pb_funcs \ + tv_pc \ + tv_pc_graph_ctrl \ + tv_pc_menu_handling \ + tv_pd \ + tv_pd_display \ + tv_pd_frames \ + tv_pd_scale \ + tv_pg \ + tv_pg_gridfcns \ + tv_poll_dialog \ + tv_pw \ + tv_pw_window \ + tv_rec_edit \ + tv_table_owner \ + tv_utils + + + +HRL_FILES= \ + tv_db_int_def.hrl \ + tv_int_def.hrl \ + tv_int_msg.hrl \ + tv_main.hrl \ + tv_pb_int_def.hrl \ + tv_pc_int_def.hrl \ + tv_pd_int_def.hrl \ + tv_pd_int_msg.hrl \ + tv_pg_int_def.hrl \ + tv_pw_int_def.hrl + +ERL_FILES= $(MODULES:%=%.erl) + +TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) + +APP_FILE = tv.app +APP_SRC = $(APP_FILE).src +APP_TARGET = $(EBIN)/$(APP_FILE) + +APPUP_FILE = tv.appup +APPUP_SRC = $(APPUP_FILE).src +APPUP_TARGET = $(EBIN)/$(APPUP_FILE) +# ---------------------------------------------------- +# FLAGS +# ---------------------------------------------------- +ERL_COMPILE_FLAGS += +warn_obsolete_guard + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- + +debug opt: $(TARGET_FILES) + +clean: + rm -f $(TARGET_FILES) + rm -f errs core *~ + +$(APP_TARGET): $(APP_SRC) ../vsn.mk + sed -e 's;%VSN%;$(VSN);' $< > $@ + +$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk + sed -e 's;%VSN%;$(VSN);' $< > $@ + +docs: + +# ---------------------------------------------------- +# Special Targets +# ---------------------------------------------------- + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +release_spec: opt + $(INSTALL_DIR) $(RELSYSDIR)/src + $(INSTALL_DATA) $(HRL_FILES) $(ERL_FILES) $(RELSYSDIR)/src + $(INSTALL_DIR) $(RELSYSDIR)/ebin + $(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin + +release_docs_spec: + diff --git a/lib/tv/src/tv.app.src b/lib/tv/src/tv.app.src new file mode 100644 index 0000000000..e76c587868 --- /dev/null +++ b/lib/tv/src/tv.app.src @@ -0,0 +1,56 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +{application, tv, + [{description, "tv Table Visualizer"}, + {vsn, "%VSN%"}, + {modules, [tv, + tv_comm_func, + tv_db, + tv_db_search, + tv_db_sort, + tv_ets_rpc, + tv_etsread, + tv_info, + tv_io_lib, + tv_io_lib_format, + tv_io_lib_pretty, + tv_ip, + tv_main, + tv_mnesia_rpc, + tv_new_table, + tv_nodewin, + tv_pb, + tv_pb_funcs, + tv_pc, + tv_pc_graph_ctrl, + tv_pc_menu_handling, + tv_pd, + tv_pd_display, + tv_pd_frames, + tv_pd_scale, + tv_pg, + tv_pg_gridfcns, + tv_poll_dialog, + tv_pw, + tv_pw_window, + tv_rec_edit, + tv_table_owner, + tv_utils + ]}, + {registered,[tv_table_owner]}, + {applications, [kernel, stdlib, gs]}]}. diff --git a/lib/tv/src/tv.appup.src b/lib/tv/src/tv.appup.src new file mode 100644 index 0000000000..0d918b6081 --- /dev/null +++ b/lib/tv/src/tv.appup.src @@ -0,0 +1,18 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2001-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +{"%VSN%",[],[]}. diff --git a/lib/tv/src/tv.erl b/lib/tv/src/tv.erl new file mode 100644 index 0000000000..70bc945c63 --- /dev/null +++ b/lib/tv/src/tv.erl @@ -0,0 +1,38 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv). + +-export([start/0, + start_browser/6]). + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + +start() -> + tv_main:start(). + + +start_browser(Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) -> + spawn_link(tv_pc, pc, [self(), Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode]). + + + + + diff --git a/lib/tv/src/tv_comm_func.erl b/lib/tv/src/tv_comm_func.erl new file mode 100644 index 0000000000..d57960e303 --- /dev/null +++ b/lib/tv/src/tv_comm_func.erl @@ -0,0 +1,77 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_comm_func). + + + + +-export([max/2, + min/2 + ]). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +max(X, Y) when X > Y -> + X; +max(_X, Y) -> + Y. + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +min(X, Y) when X < Y -> + X; +min(_X, Y) -> + Y. + + + diff --git a/lib/tv/src/tv_db.erl b/lib/tv/src/tv_db.erl new file mode 100644 index 0000000000..201b4c0e6b --- /dev/null +++ b/lib/tv/src/tv_db.erl @@ -0,0 +1,1267 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Module handling the internal database in the table tool. +%%% +%%%********************************************************************* + +-module(tv_db). + + + +-export([dbs/2]). + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_db_int_def.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +dbs(Master, ErrMsgMode) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrMsgMode), + ProcVars = #process_variables{master_pid = Master}, + blocked(ProcVars). + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + +blocked(ProcVars) -> + receive + Msg -> + case Msg of + + #dbs_deblock{} -> + deblock(Msg, ProcVars, false); + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + blocked(ProcVars); + + {'EXIT', Pid, Reason} -> + MasterPid = ProcVars#process_variables.master_pid, + exit_signals({Pid, Reason}, MasterPid), + blocked(ProcVars); + + _Other -> + blocked(ProcVars) + end + end. + + + + + + + +deblock(Msg, ProcVars, SearchWinCreated) -> + #dbs_deblock{sender = Sender, + etsread_pid = EtsreadPid, + type = Type, + keypos = KeyPos, + sublist_length = SublistLength} = Msg, + + NewDbData = #db_data{subset_size = SublistLength, + subset_pos = 1, + key_no = KeyPos, + ets_type = Type + }, + NewProcVars = ProcVars#process_variables{db_data = NewDbData, + etsread_pid = EtsreadPid}, + Sender ! #dbs_deblock_cfm{sender = self()}, + deblocked_loop(NewProcVars, SearchWinCreated, [], undefined). + + + + + + + + +deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) -> + receive + Msg -> + case Msg of + + {gs,entry,keypress,_Data,['Return' | _T]} -> + NewSearchData = search_object(ProcVars, RegExp), + deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp); + + {gs,entry,keypress,_Data,['Tab' | _T]} -> + gs:config(entry, [{select, {0,1000}}]), + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); + + {gs,entry,keypress,_Data,_Args} -> + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); + + {gs,expr_term,click,_Data,_Args} -> + deblocked_loop(ProcVars, SearchWinCreated, SearchData, false); + + {gs,expr_regexp,click,_Data,_Args} -> + deblocked_loop(ProcVars, SearchWinCreated, SearchData, true); + + {gs,search,click,_Data,_Args} -> + NewSearchData = search_object(ProcVars, RegExp), + deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp); + + {gs,cancel,click,cancel,_Args} -> + tv_db_search:destroy_window(SearchWinCreated), + deblocked_loop(ProcVars, false, [], RegExp); + + {gs,listbox,click,_LbData,[Idx | _T]} when SearchData =/= [] -> + tv_db_search:mark_busy(SearchWinCreated), + {Row,_Obj} = lists:nth(Idx+1, SearchData), + DbData = ProcVars#process_variables.db_data, + %% Never allow 'subset_pos' to have zero as value! + %% No list can begin with the 0:th element!!! + %% Has to be at least 1! + NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1, + Row), + subset_size=?ITEMS_TO_DISPLAY}, + NewProcVars = ProcVars#process_variables{db_data=NewDbData}, + send_subset(NewProcVars, undefined, undefined), + tv_db_search:mark_nonbusy(SearchWinCreated), + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + {gs,win,configure,_Data,_Args} -> + tv_db_search:resize_window(SearchWinCreated), + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); + + {gs,win,destroy,_Data,_Args} -> + deblocked_loop(ProcVars, false, [], RegExp); + + + #dbs_new_data{data = NewData, keys = ListOfKeys, + time_to_read_table = ElapsedTimeEtsread} -> + tv_db_search:reset_window(SearchWinCreated), + T1 = time(), + NewProcVars = update_db(NewData, ListOfKeys, ProcVars), + T2 = time(), + ElapsedTimeDbs = compute_elapsed_seconds(T1, T2), + send_subset(NewProcVars, ElapsedTimeEtsread, ElapsedTimeDbs), + deblocked_loop(NewProcVars, SearchWinCreated, [], RegExp); + + #dbs_subset_req{subset_pos = Pos,subset_length = Length} -> + DbData = ProcVars#process_variables.db_data, + %% Never allow 'subset_pos' to have zero as value! + %% No list can begin with the 0:th element!!! + %% Has to be at least 1! + NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1, + Pos), + subset_size=Length}, + NewProcVars = ProcVars#process_variables{db_data = NewDbData}, + send_subset(NewProcVars, undefined, undefined), + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + #dbs_marked_row{row_no = RowNo} -> + DbData = ProcVars#process_variables.db_data, + NewDbData = DbData#db_data{requested_row = RowNo}, + NewProcVars = ProcVars#process_variables{db_data = NewDbData}, + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + #dbs_search_req{} -> + tv_db_search:create_window(SearchWinCreated), + deblocked_loop(ProcVars, true, SearchData, false); + + #dbs_sorting_mode{} -> + {NewProcVars, NewSearchData} = + update_sorting_mode(Msg, ProcVars, + SearchWinCreated, SearchData, RegExp), + deblocked_loop(NewProcVars, SearchWinCreated, NewSearchData, RegExp); + + #dbs_deblock{} -> + tv_db_search:reset_window(SearchWinCreated), + deblock(Msg, ProcVars, SearchWinCreated); + + #dbs_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} -> + {Success, NewProcVars} = update_object(Obj, OldObj, Color, ObjNo, ProcVars), + case Success of + true -> + tv_db_search:reset_window(SearchWinCreated), + send_subset(NewProcVars, undefined, undefined); + false -> + done + end, + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + #dbs_new_object{object=Obj} -> + {Success, NewProcVars} = new_object(Obj, ProcVars), + case Success of + true -> + tv_db_search:reset_window(SearchWinCreated), + send_subset(NewProcVars, undefined, undefined); + false -> + done + end, + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + #dbs_delete_object{object=Obj, color=Color, obj_no=ObjNo} -> + {Success, NewProcVars} = delete_object(Obj, Color, ObjNo, ProcVars), + case Success of + true -> + tv_db_search:reset_window(SearchWinCreated), + send_subset(NewProcVars, undefined, undefined); + false -> + done + end, + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + #pc_list_info{lists_as_strings=ListAsStr} -> + NewProcVars = ProcVars#process_variables{lists_as_strings=ListAsStr}, + deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); + + {'EXIT', Pid, Reason} -> + MasterPid = ProcVars#process_variables.master_pid, + exit_signals({Pid, Reason}, MasterPid), + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); + + _Other -> + %% io:format("Received message: ~w ~n", [_Other]), + deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) + end + end. + + + + + + + +search_object(ProcVars, RegExp) -> + DbData = ProcVars#process_variables.db_data, + DbList = dblist2list(DbData#db_data.db), + ListAsStr = ProcVars#process_variables.lists_as_strings, + case catch tv_db_search:get_input_and_search(DbList, RegExp, ListAsStr) of + {'EXIT', _Reason} -> + tv_db_search:reset_window(true), + []; + List -> + List + end. + + + + + + +update_sorting_mode(Msg, ProcVars, SearchWinCreated, OldSearchData, RegExp) -> + #dbs_sorting_mode{sorting = Sorting, + reverse = Reverse, + sort_key_no = SortKeyNo} = Msg, + + DbData = ProcVars#process_variables.db_data, + + #db_data{db = DbList, + sorting = OldSorting, + rev_sorting = OldReverse, + sort_key_no = OldSortKeyNo} = DbData, + + + NewDbList = sort_db_list(DbList, Sorting, OldSorting, Reverse, OldReverse, + SortKeyNo, OldSortKeyNo), + + NewDbData = DbData#db_data{db = NewDbList, + sorting = Sorting, + rev_sorting = Reverse, + sort_key_no = SortKeyNo + }, + + NewProcVars = ProcVars#process_variables{db_data = NewDbData}, + send_subset(NewProcVars, undefined, undefined), + + SearchData = + case Sorting of + false -> + OldSearchData; + OldSorting when Reverse =:= OldReverse, + SortKeyNo =:= OldSortKeyNo -> + []; + OldSorting when Reverse =:= OldReverse, + OldSortKeyNo =:= undefined-> + []; + _Other -> + ListAsStr = ProcVars#process_variables.lists_as_strings, + case catch tv_db_search:update_search(SearchWinCreated, + NewDbList, RegExp, + ListAsStr) of + {'EXIT', _Reason} -> + tv_db_search:reset_window(true), + []; + List -> + List + end + end, + + {NewProcVars, SearchData}. + + + + + + + + +sort_db_list(DbList, Sort, Sort, Rev, Rev, KeyNo, KeyNo) -> + % Already sorted! + DbList; +sort_db_list(DbList, false, _OldSort, _Rev, _OldRev, _KeyNo, _OldKeyNo) -> + % No sorting, i.e., the old list order suffices! + DbList; +sort_db_list(DbList, _Sort, _OldSort, Rev, _OldRev, KeyNo, _OldKeyNo) -> + tv_db_sort:mergesort(KeyNo, DbList, Rev). + + + + + + + +send_subset(ProcVars, EtsreadTime, DbsTime) -> + #process_variables{master_pid = MasterPid, + db_data = DbData, + list_of_keys = ListOfKeys} = ProcVars, + + #db_data{subset_size = SubsetSize, + subset_pos = SubsetPos, + requested_row = RowNo, + db_size = DbSize, + db = DbList, + max_elem_size = MaxElemSize} = DbData, + + + RowData = get_requested_row_data(RowNo, DbList), + + if + DbSize > 0 -> + Pos = ?COMM_FUNC_FILE:min(SubsetPos, DbSize), + % Requested_data may be shorter than requested, but that's OK, + % pd handles that correctly! + Subset = lists:sublist(DbList, Pos, SubsetSize), + MasterPid ! #dbs_subset{sender = self(), + data = Subset, + subset_pos = Pos, + db_length = DbSize, + list_of_keys = ListOfKeys, + max_elem_size = MaxElemSize, + requested_row = RowData, + required_time_etsread = EtsreadTime, + required_time_dbs = DbsTime + }; + true -> + MasterPid ! #dbs_subset{sender = self(), + data = [], + subset_pos = 1, + db_length = 0, + list_of_keys = ListOfKeys, + max_elem_size = MaxElemSize, + requested_row = RowData, + required_time_etsread = EtsreadTime, + required_time_dbs = DbsTime + } + end. + + + + + +get_requested_row_data(undefined, _DbList) -> + []; +get_requested_row_data(_RowNo, []) -> + []; +get_requested_row_data(RowNo, DbList) -> + case catch lists:nth(RowNo, DbList) of + {'EXIT', _Reason} -> + []; + RowData -> + [RowData] + end. + + + + +exit_signals(ExitInfo, MasterPid) -> + case ExitInfo of + {MasterPid, _Reason} -> + % When from master, just quit! + exit(normal); + _Other -> + done + end. + + + + +update_db(NewList, ListOfKeys, ProcVars) -> + DbData = ProcVars#process_variables.db_data, + #db_data{db = OldDbList, + max_elem_size = MaxElemSize, + deleted = DelList, + ets_type = EtsType, + sorting = Sorting, + rev_sorting = RevSorting, + sort_key_no = SortKeyNo, + key_no = KeyNo} = DbData, + + DbList = update_colors(OldDbList -- DelList), + OldList = dblist2list(DbList), + InsOrUpd = (NewList -- OldList), + DelOrUpd = (OldList -- NewList), + + {Inserted, Deleted, Updated} = group_difflists(basetype(EtsType), KeyNo, + InsOrUpd, + DelOrUpd), + DelMarked = mark_deleted(KeyNo, Deleted, DbList), + Replaced = replace_elements(KeyNo, Updated, DelMarked), + NewDbList = add_elements(KeyNo, Inserted, Replaced, Sorting, RevSorting, + SortKeyNo), + + NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, + ?COMM_FUNC_FILE:max(max_size(Replaced), + max_size(Inserted))), + + NewDbData = DbData#db_data{db = NewDbList, + db_size = length(NewDbList), + max_elem_size = NewMaxSize, + deleted = list2dblist(Deleted, ?BLACK) + }, + + ProcVars#process_variables{db_data = NewDbData, + list_of_keys = ListOfKeys + }. + + + + + + +update_object(Obj, OldObj, OldColor, ObjNo, ProcVars) -> + #process_variables{db_data = DbData, + etsread_pid = EtsreadPid} = ProcVars, + + #db_data{key_no = KeyNo} = DbData, + + %% Don't update if there are no changes! + case OldObj of + Obj when OldColor =/= ?BLACK -> %% Allow deleted objects to be inserted! + gs:window(dbwin, gs:start(), []), + case get(error_msg_mode) of + normal -> + tv_utils:notify(dbwin, "TV Notification", ["The object is unchanged!"]); + haiku -> + tv_utils:notify(dbwin, "TV Notification", + ["Stay the patient course,", + "Of little worth is your ire:", + "The object's unchanged." ]) + end, + gs:destroy(dbwin), + {false, ProcVars}; + _Other -> + %% Before we try to update the internal database, we have to check to see + %% whether the ETS/Mnesia update is allowed! + Result = + case OldColor of + ?BLACK -> + EtsreadPid ! #etsread_new_object{sender = self(), + object = Obj}, + receive + #etsread_new_object_cfm{success = Success} -> + Success + after + 60000 -> + exit(etsread_not_responding) + end; + _OtherColor -> + EtsreadPid ! #etsread_update_object{sender = self(), + key_no = KeyNo, + object = Obj, + old_object = OldObj}, + receive + #etsread_update_object_cfm{success = Success} -> + Success + after + 60000 -> + exit(etsread_not_responding) + end + end, + case Result of + false -> + gs:window(dbwin, gs:start(), [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(dbwin, "TV Notification", + ["Couldn't update table!"]); + haiku -> + tv_utils:notify(dbwin, "TV Notification", + ["Three things are certain:", + "Death, taxes, and lost updates.", + "Guess which has occurred."]) + end, + gs:destroy(dbwin), + {false, ProcVars}; + true -> + {true, update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars)} + end + end. + + + + + +update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars) -> + #process_variables{db_data = DbData} = ProcVars, + + #db_data{db = DbList, + ets_type = EtsType, %% 'bag', 'set', 'ordered_set' or + %% 'duplicate_bag' + max_elem_size = MaxElemSize, + sorting = Sorting, + rev_sorting = RevSorting, + sort_key_no = SortKeyNo, + key_no = KeyNo} = DbData, + + %% Replace the old element... + Key = element(KeyNo, Obj), + OldKey = element(KeyNo, OldObj), + %% If Key == OldKey, the old object shall only be replaced! + %% Otherwise the updated object shall be treated as a new + %% object when inserting it in the list! + %% In that latter case, we also have to check for duplicates! + + Fun = + case basetype(EtsType) of + set -> + case Key of + OldKey -> + fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key -> + {Replaced, [{Data,Color} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,?GREEN1} | AccDb]}; + ({_Data,_Color}, {Replaced,AccDb}) -> + {Replaced, AccDb} + end; + _NewKey -> + fun({Data,Color}, {Replaced,AccDb}) -> + ElemKey = element(KeyNo,Data), + case ElemKey of + OldKey when not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + OldKey when not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,?GREEN1} | AccDb]}; + OldKey -> + {Replaced, AccDb}; + Key -> + {Replaced, AccDb}; + _OtherKey -> + {Replaced, [{Data,Color} | AccDb]} + end + end + end; + + bag -> + case Key of + OldKey -> + fun({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj -> + {Replaced, AccDb}; + ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj -> + {Replaced, [{Data,Color} | AccDb]}; + %% Clauses when Data =:= OldObj. + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,Color} | AccDb]}; + ({_Data,_Color}, {Replaced,AccDb}) -> + {Replaced, AccDb} + end; + _NewKey -> + fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, + not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, + not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,?GREEN1} | AccDb]}; + ({Data,_Color}, {Replaced,AccDb}) when Data =:= OldObj -> + {Replaced, AccDb}; + ({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj -> + {Replaced, AccDb}; + ({Data,Color}, {Replaced,AccDb}) -> + {Replaced, [{Data,Color} | AccDb]} + end + end; + + duplicate_bag -> + %% Multiple identical objects allowed, meaning that we shall not + %% remove anything, just replace one element. + case Key of + OldKey -> + fun({Data,Color}, {Replaced,AccDb}) when Data =:= Obj -> + {Replaced, [{Data,Color} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj -> + {Replaced, [{Data,Color} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,Color} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) -> + {Replaced, [{Data,Color} | AccDb]} + end; + _NewKey -> + fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, + not Replaced, + OldColor =:= ?BLACK, + Color =:= ?BLACK -> + {true, [{Obj,?RED1} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, + not Replaced, + OldColor =/= ?BLACK, + Color =/= ?BLACK -> + {true, [{Obj,?GREEN1} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj -> + {Replaced, [{Data,Color} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when Data =:= Obj -> + {Replaced, [{Data,Color} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) -> + {Replaced, [{Data,Color} | AccDb]} + end + end + end, + + FilterFun = fun(Acc0, L) -> + lists:foldl(Fun, Acc0, L) + end, + + + {Repl, TmpList} = + case split(ObjNo, DbList) of + {L1, [{OldObj,OldColor} | T]} when OldColor =/= ?BLACK -> + {true, + lists:reverse(element(2, FilterFun({true,[]}, L1))) ++ + [{Obj,?GREEN1} | lists:reverse(element(2, FilterFun({true,[]},T)))]}; + {L1, [{OldObj,OldColor} | T]} -> + {true, + lists:reverse(element(2, FilterFun({true,[]}, L1))) ++ + [{Obj,?RED1} | lists:reverse(element(2, FilterFun({true,[]}, T)))]}; + {L1, L2} -> + {R1, NewL1} = FilterFun({false,[]}, L1), + {R2, NewL2} = FilterFun({false,[]}, L2), + {R1 or R2, lists:reverse(NewL1) ++ lists:reverse(NewL2)} + end, + + NewDbList = + case Repl of + true when not Sorting -> + TmpList; + true -> + tv_db_sort:mergesort(SortKeyNo, TmpList, RevSorting); + false -> + TmpList2 = + case Key of + OldKey -> + lists:reverse(element(2, FilterFun({false,[]}, TmpList))); + _OtherKey -> + lists:reverse(element(2, FilterFun({true,[]}, TmpList))) ++ + [{Obj,?RED1}] + end, + case Sorting of + false -> + TmpList2; + true -> + tv_db_sort:mergesort(SortKeyNo, TmpList2, RevSorting) + end + end, + NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])), + NewDbData = DbData#db_data{db = NewDbList, + db_size = length(NewDbList), + max_elem_size = NewMaxSize + }, + ProcVars#process_variables{db_data = NewDbData}. + + + + + +delete_object(_Obj, ?BLACK, _ObjNo, ProcVars) -> + %% Don't delete already deleted objects!!! + {false, ProcVars}; +delete_object(undefined, undefined, _ObjNo, ProcVars) -> + {false, ProcVars}; +delete_object(Obj, _ObjColor, ObjNo, ProcVars) -> + #process_variables{db_data = DbData, + etsread_pid = EtsreadPid} = ProcVars, + + #db_data{db = DbList, + deleted = OldDeleted} = DbData, + + %% Before we try to update the internal database, we have to check to see + %% whether the ETS/Mnesia update is allowed! + EtsreadPid ! #etsread_delete_object{sender = self(), + object = Obj}, + Result = + receive + #etsread_delete_object_cfm{success = Success} -> + Success + after + 60000 -> + exit(etsread_not_responding) + end, + + case Result of + false -> + gs:window(dbwin, gs:start(), [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(dbwin, "TV Notification", + ["Couldn't update table!"]); + haiku -> + tv_utils:notify(dbwin, "TV Notification", + ["Three things are certain:", + "Death, taxes, and lost updates.", + "Guess which has occurred."]) + end, + gs:destroy(dbwin), + {false, ProcVars}; + true -> + %% Replace the old element... + %% Have to beware of duplicate_bag tables, + %% i.e., the same object may occur more than + %% once, but we only want to remove it once! + {Repl, TmpList} = + case split(ObjNo, DbList) of + {L1, [{Obj,_Color} | T]} -> + {true, L1 ++ [{Obj,?BLACK} | T]}; + {L1, L2} -> + {false, L1 ++ L2} + end, + NewDbList = + case Repl of + true -> + TmpList; + false -> + Fun = fun({Data,TmpColor}, + {Removed,AccDb}) when Data =/= Obj -> + {Removed, [{Data,TmpColor} | AccDb]}; + ({_Data,TmpColor}, + {Removed,AccDb}) when not Removed, TmpColor =/= ?BLACK -> + {true, [{Obj,?BLACK} | AccDb]}; + ({Data,TmpColor}, + {Removed,AccDb}) -> + {Removed, [{Data,TmpColor} | AccDb]} + end, + lists:reverse(element(2, lists:foldl(Fun, {false,[]}, DbList))) + end, + NewDbData = DbData#db_data{db = NewDbList, + db_size = length(NewDbList), + deleted = [{Obj,?BLACK} | OldDeleted]}, + {true, ProcVars#process_variables{db_data = NewDbData}} + end. + + + + + +new_object(Obj, ProcVars) -> + #process_variables{db_data = DbData, + etsread_pid = EtsreadPid} = ProcVars, + + #db_data{db = DbList, + max_elem_size = MaxElemSize, + ets_type = EtsType, %% 'bag', 'set' or 'duplicate_bag' + sorting = Sorting, + rev_sorting = RevSorting, + sort_key_no = SortKeyNo, + key_no = KeyNo} = DbData, + + %% Before we try to update the internal database, we have to check to see + %% whether the ETS/Mnesia update is allowed! + EtsreadPid ! #etsread_new_object{sender = self(), + object = Obj}, + Result = + receive + #etsread_new_object_cfm{success = Success} -> + Success + after + 60000 -> + exit(etsread_not_responding) + end, + + case Result of + false -> + gs:window(dbwin, gs:start(), [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(dbwin, "TV Notification", + ["Couldn't update table!"]); + haiku -> + tv_utils:notify(dbwin, "TV Notification", + ["Three things are certain:", + "Death, taxes, and lost updates.", + "Guess which has occurred."]) + end, + gs:destroy(dbwin), + {false, ProcVars}; + true -> + Key = element(KeyNo, Obj), + NewDbList = insert_new_object(EtsType, Key, KeyNo, Obj, DbList, Sorting, + RevSorting, SortKeyNo), + NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])), + NewDbData = DbData#db_data{db = NewDbList, + db_size = length(NewDbList), + max_elem_size = NewMaxSize + }, + {true, ProcVars#process_variables{db_data = NewDbData}} + end. + + + + + +insert_new_object(EtsType,Key,KeyNo,Obj,DbList,Sorting,RevSorting,SortKeyNo) -> + %% Remove elements from the list that ought not to be there, + %% according to the table type! + + Fun = + case basetype(EtsType) of + set -> + fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key -> + {Replaced, [{Data,Color} | AccDb]}; + ({Data,Color}, {Replaced,AccDb}) when not Replaced, + Color =/= ?BLACK, + Data =/= Obj-> + {true, [{Obj,?GREEN1} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + Color =/= ?BLACK -> + {true, [{Obj,Color} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + Color =:= ?BLACK -> + {true, [{Obj, ?RED1} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when Replaced, + Color =:= ?BLACK -> + {false, AccDb}; + ({_Data,_Color}, {Replaced,AccDb}) -> + {Replaced, AccDb} + end; + bag -> + fun({Data,Color}, {Replaced,AccDb}) when Data =/= Obj -> + {Replaced, [{Data,Color} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + Color =/= ?BLACK -> + {true, [{Obj,Color} | AccDb]}; + ({_Data,Color}, {Replaced,AccDb}) when Replaced, + Color =/= ?BLACK -> + {true, AccDb}; + ({_Data,Color}, {Replaced,AccDb}) when Replaced, + Color =:= ?BLACK -> + {true, AccDb}; + ({_Data,Color}, {Replaced,AccDb}) when not Replaced, + Color =:= ?BLACK -> + {true, [{Obj, ?RED1} | AccDb]}; + ({_Data,_Color}, {Replaced,AccDb}) -> + {Replaced, AccDb} + end; + duplicate_bag -> + %% The fun is never called if the type is duplicate_bag, + %% because all we have to do with new elements is to insert + %% them (multiple identical objects allowed). + not_used + end, + + FilterFun = fun(Acc0, L) -> + lists:foldl(Fun, Acc0, L) + end, + + {_Replaced, TmpDbList} = + case EtsType of + duplicate_bag -> + {false, DbList}; + _OtherType -> + {R,L} = FilterFun({false,[]}, DbList), + {R, lists:reverse(L)} + end, + + case Sorting of + false -> + TmpDbList ++ [{Obj,?RED1}]; + true -> + %% The original list is already sorted! + %% Just merge the two lists together! + tv_db_sort:merge(SortKeyNo, TmpDbList, [{Obj,?RED1}], RevSorting) + end. + + + + + + +max_size([]) -> + 0; +max_size(L) -> + max_size(L, 0). + + + +max_size([], CurrMax) -> + CurrMax; +max_size([H | T], CurrMax) when is_tuple(H) -> + Size = size(H), + if + Size >= CurrMax -> + max_size(T, Size); + true -> + max_size(T, CurrMax) + end; +max_size([_H | T], CurrMax) -> + Size = 1, + if + Size >= CurrMax -> + max_size(T, Size); + true -> + max_size(T, CurrMax) + end. + + + + + +add_elements(_KeyNo, Inserted, List, false, _RevSorting, _SortKeyNo) -> + % Remember that the order of the original list has to be preserved! + List ++ list2dblist(Inserted, ?RED1); +add_elements(_KeyNo, Inserted, List, _Sorting, RevSorting, SortKeyNo) -> + % The original list is already sorted - sort the new elements, and + % just merge the two lists together! + SortedInsertedList = tv_db_sort:mergesort(SortKeyNo, + list2dblist(Inserted, ?RED1), + RevSorting), + tv_db_sort:merge(SortKeyNo, List, SortedInsertedList, RevSorting). + + + + + + %% We assume the list already has been sorted, i.e., since the order won't + %% be changed by marking an element deleted, we DON'T have to sort the list + %% once again! + +mark_deleted(_KeyNo, [], List) -> + List; +mark_deleted(KeyNo, [Data | T], List) -> + KeyValue = tv_db_sort:get_compare_value(KeyNo, Data), + NewList = mark_one_element_deleted(KeyNo, KeyValue, Data, List, []), + mark_deleted(KeyNo, T, NewList). + + + + + + + + +mark_one_element_deleted(_KeyNo, _KeyValue, _Data, [], Acc) -> + Acc; +mark_one_element_deleted(KeyNo, {tuple, KeyValue}, + Data, [{DataTuple, Color} | Tail], Acc) -> + OldKeyValue = tv_db_sort:get_compare_value(KeyNo, DataTuple), + % Remember that the order of the original list has to be preserved! + if + OldKeyValue =:= {tuple, KeyValue} -> + Acc ++ [{Data, ?BLACK}] ++ Tail; + true -> + mark_one_element_deleted(KeyNo, {tuple, KeyValue}, Data, Tail, + Acc ++ [{DataTuple, Color}]) + end; +mark_one_element_deleted(KeyNo, _KeyValue, Data, [{DataTuple, Color} | Tail], Acc) -> + if + Data =:= DataTuple -> + Acc ++ [{Data, ?BLACK}] ++ Tail; + true -> + mark_one_element_deleted(KeyNo, _KeyValue, Data, Tail, + Acc ++ [{DataTuple, Color}]) + end. + + + + + + + + %% We assume the list already has been sorted, i.e., since the order won't + %% be changed by marking an element updated, we DON'T have to sort the list + %% once again! + +replace_elements(_KeyNo, [], List) -> + List; +replace_elements(KeyNo, [Data | T], List) -> + KeyValue = tv_db_sort:get_compare_value(KeyNo, Data), + NewList = replace_one_element(KeyNo, KeyValue, Data, List, []), + replace_elements(KeyNo, T, NewList). + + + + + + + +replace_one_element(_KeyNo, _Key, _Data, [], Acc) -> + Acc; +replace_one_element(KeyNo, {tuple, Key1}, Data, [{DataTuple, Color} | Tail], Acc) -> + Key2 = tv_db_sort:get_compare_value(KeyNo, DataTuple), + % Remember that the order of the original list has to be preserved! + if + Key2 =:= {tuple, Key1} -> + Acc ++ [{Data, ?GREEN1}] ++ Tail; + true -> + replace_one_element(KeyNo, {tuple, Key1}, Data, Tail, + Acc ++ [{DataTuple, Color}]) + end; +replace_one_element(_KeyNo, _KeyValue, _Data, [{DataTuple, Color} | Tail], Acc) -> + % Can't replace an element with no key! + Acc ++ [{DataTuple, Color} | Tail]. + + + + + + + + +group_difflists(bag, _KeyNo, Inserted, Deleted) -> + %% Since the ETS table is of bag type, no element can be updated, i.e., + %% it can only be deleted and re-inserted, otherwise a new element will be added. + {Inserted, Deleted, []}; +group_difflists(duplicate_bag, _KeyNo, Inserted, Deleted) -> + %% Since the ETS table is of duplicate_bag type, no element can be updated, i.e., + %% it can only be deleted and re-inserted, otherwise a new element will be added. + {Inserted, Deleted, []}; +group_difflists(set, _KeyNo, [], Deleted) -> + %% Updated elements have to be present in both lists, i.e., if one list is empty, + %% the other contains no updated elements - they are either inserted or deleted! + {[], Deleted, []}; +group_difflists(set, _KeyNo, Inserted, []) -> + {Inserted, [], []}; +group_difflists(set, KeyNo, InsOrUpd, DelOrUpd) -> + match_difflists(KeyNo, InsOrUpd, DelOrUpd, [], []). + + + + + + +match_difflists(_KeyNo, [], Deleted, Inserted, Updated) -> + {Inserted, Deleted, Updated}; +match_difflists(KeyNo, [Data | T], DelOrUpd, InsAcc, UpdAcc) -> + % This function is only called in case of a 'set' ETS table. + % 'Set' type of ETS table means there are unique keys. If two elements in + % InsOrUpd and DelOrUpd have the same key, that element has been updated, + % and is added to the Updated list, and removed from the original two lists. + % After the two lists have been traversed in this way, the remaining elements + % in DelOrUpd forms the new Deleted list (analogous for InsOrUpd). + % If we want to improve the performance, we could check which list is the + % shortest, since the traversing time depends on this. + Key = element(KeyNo, Data), + case searchdelete(Key, KeyNo, DelOrUpd) of + {true, NewDelOrUpd} -> + match_difflists(KeyNo, T, NewDelOrUpd, InsAcc, [Data | UpdAcc]); + {false, SameDelOrUpd} -> + match_difflists(KeyNo, T, SameDelOrUpd, [Data | InsAcc], UpdAcc) + end. + + + + +searchdelete(_Key, _ElemNo, []) -> + {false, []}; +searchdelete(Key, ElemNo, List) -> + searchdelete(Key, ElemNo, List, []). + + + + + +searchdelete(_Key, _ElemNo, [], Acc) -> + {false, Acc}; +searchdelete(Key, ElemNo, [Tuple | Tail], Acc) -> + % We don't use standard libraries, 'cause we want to make an 'atomic' + % operation, i.e., we will not search the list two times... + case (element(ElemNo, Tuple) =:= Key) of + true -> + {true, Acc ++ Tail}; % Return the list without the matching element + _Other -> + searchdelete(Key, ElemNo, Tail, [Tuple | Acc]) + end. + + + + + + + +dblist2list([]) -> + []; +dblist2list([{Data, _Color} | T]) -> + [Data | dblist2list(T)]. + + + + + + + +list2dblist([], _Color) -> + []; +list2dblist([Data | T], Color) -> + [{Data, Color} | list2dblist(T, Color)]. + + + + + + + + +update_colors([]) -> + []; +update_colors([{Data, Color} | T]) -> + [{Data, new_color(Color)} | update_colors(T)]. + + + + + + + + +new_color(?GREEN1) -> + ?GREEN2; +new_color(?GREEN2) -> + ?GREEN3; +new_color(?GREEN3) -> + ?GREEN4; +new_color(?GREEN4) -> + ?GREEN5; +new_color(?GREEN5) -> + ?DEFAULT_BTN_COLOR; +new_color(?RED1) -> + ?RED2; +new_color(?RED2) -> + ?RED3; +new_color(?RED3) -> + ?RED4; +new_color(?RED4) -> + ?RED5; +new_color(?RED5) -> + ?DEFAULT_BTN_COLOR; +new_color(_Other) -> + ?DEFAULT_BTN_COLOR. % Default shall be gray. + + + + + + + + +compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) -> + ElapsedHours = get_time_diff(hours, H1, H2), + ElapsedMinutes = get_time_diff(minutes, M1, M2), + ElapsedSeconds = get_time_diff(seconds, S1, S2), + (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1. + + + + + + + +get_time_diff(_Type, T1, T2) when T1 =< T2 -> + T2 - T1; +get_time_diff(hours, T1, T2) -> + T2 + 24 - T1; +get_time_diff(minutes, T1, T2) -> + T2 + 60 - T1; +get_time_diff(seconds, T1, T2) -> + T2 + 60 - T1. + + + + +split(_N, []) -> + {[], []}; +split(0, List) -> + {[], List}; +split(N, List) -> + split2(0, N - 1, [], List). + + + +split2(Ctr, N, Acc, [H | T]) when Ctr < N -> + split2(Ctr + 1, N, [H | Acc], T); +split2(_Ctr, _N, Acc, []) -> + {lists:reverse(Acc), []}; +split2(_Ctr, _N, Acc, List) -> + {lists:reverse(Acc), List}. + +basetype(ordered_set) -> + set; +basetype(Any) -> + Any. diff --git a/lib/tv/src/tv_db_int_def.hrl b/lib/tv/src/tv_db_int_def.hrl new file mode 100644 index 0000000000..d2cb8adee5 --- /dev/null +++ b/lib/tv/src/tv_db_int_def.hrl @@ -0,0 +1,80 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Internal definitions for the database part of the table +%%% tool. +%%% +%%%********************************************************************* + +-define(WHITE, {255, 255, 255}). +-define(MEDIUM_GRAY, {170, 170, 170}). + + +-define(LIGHT_GREEN, { 0, 255, 0}). +-define(GREEN, { 50, 215, 50}). +-define(DARK_GREEN, { 50, 170, 50}). +-define(FOREST_GREEN, { 34, 139, 34}). +-define(DARK_FOREST_GREEN, { 15, 100, 15}). + + + +-define(RED, {255, 0, 0}). +-define(PINK, {255, 130, 170}). +-define(LIGHT_VIOLET, {220, 150, 225}). +-define(VIOLET, {160, 70, 180}). +-define(DARK_VIOLET, {100, 10, 130}). + + + + + + +-record(db_data, {db = [], % List containing all elements + db_size = 0, % Number of elements in 'db' + max_elem_size = 0, % Size of largest element in db. + hidden = [], % Elements (i.e., keys) not to be shown + deleted = [], % Elements just deleted + subset_size, % Size of the subset to be extracted and + % shown + subset_pos, % Position in list where subset starts + sorting = false, % Tells whether sorting is used ('true' + % or 'false') + requested_row = 0, + rev_sorting = false, % Tells whether the sorting (if any) is + % in reversed order or not ('true' or + % 'false') + sort_key_no, % Element in each tuple to use as sorting + % element + key_no, % Element in each tuple to use as key + % (this element is used when updating the + % dblist, i.e., inserting, deleting a.s.o) + ets_type % 'bag' or 'set' + }). + + +-record(process_variables, {master_pid, + etsread_pid, + db_data = #db_data{}, + list_of_keys = [], + lists_as_strings = true + }). + + + + diff --git a/lib/tv/src/tv_db_search.erl b/lib/tv/src/tv_db_search.erl new file mode 100644 index 0000000000..edd3c188e2 --- /dev/null +++ b/lib/tv/src/tv_db_search.erl @@ -0,0 +1,485 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Code for the search window. +%%% +%%%********************************************************************* +-module(tv_db_search). + + + +-export([create_window/1, + resize_window/1, + reset_window/1, + destroy_window/1, + mark_busy/1, + mark_nonbusy/1, + get_input_and_search/3, + update_search/4, + string_to_term/1 + ]). + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_db_int_def.hrl"). + + + + +-define(WIN_WIDTH, 445). +-define(SMALL_WIN_HEIGHT, 117). +-define(BIG_WIN_HEIGHT, 335). +-define(FRAME_WIDTH, 429). % 334 +-define(OLD_FRAME_WIDTH, 334). +-define(FRAME_HEIGHT, 105). +-define(FRAME_XPOS, (10-2)). +-define(FRAME_YPOS, 10). +-define(ENTRY_XPOS, 9). +-define(ENTRY_YPOS, 31). +-define(ENTRY_WIDTH, (?OLD_FRAME_WIDTH-10-2*?ENTRY_XPOS-5)). +-define(LISTBOX_WIDTH, ?WIN_WIDTH-2*?FRAME_XPOS+1). +-define(LISTBOX_HEIGHT, 162). +-define(LISTBOX_XPOS, ?FRAME_XPOS-2). +-define(LISTBOX_YPOS, ?SMALL_WIN_HEIGHT+8). +-define(BTN_WIDTH, 80). +-define(BTN_HEIGHT, 30). +-define(BTN_XPOS, ?OLD_FRAME_WIDTH-6). +-define(BG_COLOUR, {217,217,217}). + + + + + + +create_window(true) -> + gs:config(win, [raise]); +create_window(false) -> + gs:window(win, gs:start(), [{width,?WIN_WIDTH}, + {height,?SMALL_WIN_HEIGHT}, + {data,small}, + {bg,?BG_COLOUR}, + {title,"[TV] Search Object"}, + {destroy,true}, + {configure,true}, + {cursor,arrow} + ]), + + F = gs:frame(win, [{width,?FRAME_WIDTH}, + {height,?FRAME_HEIGHT}, + {x,?FRAME_XPOS}, + {y,?FRAME_YPOS}, + {bw,2}, + {bg,?BG_COLOUR} + ]), + + gs:label(F, [{width,80}, + {height,25}, + {x,?ENTRY_XPOS+2}, + {y,8}, + {align,w}, + {bg,?BG_COLOUR}, + {fg, {0,0,0}}, + {label, {text,"Search for:"}} + ]), + + gs:entry(entry, F, [{width,?ENTRY_WIDTH}, + {height,30}, + {x,?ENTRY_XPOS}, + {y,?ENTRY_YPOS}, + {insert, {0,""}}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {cursor,text}, + {justify,left}, + {keypress,true}, + {setfocus,true} + ]), + + Group = list_to_atom("expr" ++ pid_to_list(self())), + RadioWidth = round(?ENTRY_WIDTH / 2), + gs:radiobutton(expr_term, F, [{width,RadioWidth - 45}, + {height,25}, + {x,?ENTRY_XPOS}, + {y,?ENTRY_YPOS+40}, + {group,Group}, + {align, c}, + {label,{text,"as term"}}, + {select,true} + ]), + gs:radiobutton(expr_regexp, F, [{width,RadioWidth + 45}, + {height,25}, + {x,?ENTRY_XPOS+RadioWidth-20-26}, + {y,?ENTRY_YPOS+40}, + {group,Group}, + {align,c}, + {label,{text,"as regular expression"}} + ]), + + gs:button(search, F, [{width,?BTN_WIDTH}, + {height,?BTN_HEIGHT}, + {x,?BTN_XPOS}, + {y,11}, + {label, {text,"Search"}}, + {bg,?BG_COLOUR}, + {fg, {0,0,0}} + ]), + gs:button(cancel, F, [{width,?BTN_WIDTH}, + {height,?BTN_HEIGHT}, + {x,?BTN_XPOS}, + {y,?BTN_HEIGHT+11+10}, + {label, {text,"Cancel"}}, + {data,cancel}, + {bg,?BG_COLOUR}, + {fg, {0,0,0}} + ]), + expand_window(), + gs:config(entry, [{select, {0,1000}}]), + gs:config(win, [{map,true}]). + + + + +resize_window(false) -> + done; +resize_window(true) -> + gs:config(win, [{width,?WIN_WIDTH}, + {height,?BIG_WIN_HEIGHT} + ]). + + + + +reset_window(false) -> + done; +reset_window(true) -> + gs:config(listbox, [clear]), + gs:config(objects_found, [{label, {text,""}}]). + + + + +destroy_window(false) -> + done; +destroy_window(true) -> + gs:destroy(win). + + + +mark_busy(false) -> + done; +mark_busy(true) -> + gs:config(win, [{cursor,busy}]), + gs:config(entry, [{cursor,busy}]). + + + + +mark_nonbusy(false) -> + done; +mark_nonbusy(true) -> + gs:config(win, [{cursor,arrow}]), + gs:config(entry, [{cursor,text}]). + + + + +get_input_and_search(DbList, IsRegExp, ListAsStr) -> + get_input_and_search(DbList, IsRegExp, true, ListAsStr). + + + + +get_input_and_search(DbList, IsRegExp, Notify, ListAsStr) -> + Str = get_entry_text(), + StrConvRes = case IsRegExp of + true -> + string_to_regexp(Str); + false -> + string_to_term(Str) + end, + + case StrConvRes of + {ok, TermOrRE} -> + search(IsRegExp, TermOrRE, DbList, ListAsStr); + {error, {_Reason, Msg}} when Notify -> + gs:config(win, [beep]), + tv_utils:notify(win, "TV Notification", Msg); + {error, {_Reason, _Msg}} -> + done + end. + + + +update_search(false, _DbList, _IsRegExp, _ListAsStr) -> + done; +update_search(true, DbList, true, ListAsStr) -> + get_input_and_search(DbList, false, false, ListAsStr); +update_search(true, DbList, false, ListAsStr) -> + get_input_and_search(DbList, true, false, ListAsStr). + + + +get_entry_text() -> + gs:read(entry,text). + + + +string_to_regexp(Str) -> + case regexp:parse(Str) of + {ok, RegExp} -> + {ok, RegExp}; + _Error -> + case get(error_msg_mode) of + normal -> + {error, {not_a_regexp, "Please enter a regular expression!"}}; + haiku -> + {error, {not_a_regexp, ["Being incorrect", + "The regular expression", + "Must now be retyped."]}} + end + end. + + + +string_to_term(Str) -> + case catch erl_scan:string(Str ++ ". ") of + {ok, ScannedStr, _No} -> + case erl_parse:parse_term(ScannedStr) of + {ok, Term} -> + {ok, Term}; + _Other -> + %% May be a PID, have to check this, since erl_scan + %% currently cannot handle this case... :-( + case catch list_to_pid(Str) of + Pid when is_pid(Pid) -> + {ok, Pid}; + _Error -> + case get(error_msg_mode) of + normal -> + {error, {not_a_term, "Please enter a valid term!"}}; + haiku -> + {error, {not_a_term, ["Aborted effort.", + "Reflect, repent and retype:", + "Enter valid term."]}} + end + end + end; + _Error -> + case get(error_msg_mode) of + normal -> + {error, {not_a_term, "Please enter a valid term!"}}; + haiku -> + {error, {not_a_term, ["Aborted effort.", + "Reflect, repent and retype:", + "Enter valid term."]}} + end + end. + + + +search(IsRegExp, SearchValue, DbList, ListAsStr) -> + gs:config(cancel, [{label, {text,"Stop"}}]), + mark_busy(true), + reset_window(true), + SearchRes = traverse(SearchValue, DbList, 1, length(DbList), [], IsRegExp, ListAsStr), + gs:config(cancel, [{label, {text,"Cancel"}}]), + mark_nonbusy(true), + SearchRes. + + + + + +expand_window() -> + gs:listbox(listbox, win, [{width,?LISTBOX_WIDTH}, + {height,?LISTBOX_HEIGHT}, + {x,?LISTBOX_XPOS}, + {y,?LISTBOX_YPOS}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {scrollbg,?BG_COLOUR}, + {scrollfg,?BG_COLOUR}, + {hscroll,bottom}, + {vscroll,right}, + {click,true}, + {doubleclick,false}, + {selectmode,single} + ]), + gs:label(objects_found, win, [{width,?LISTBOX_WIDTH}, + {height,25}, + {x,?LISTBOX_XPOS}, + {y,?LISTBOX_YPOS+?LISTBOX_HEIGHT+13}, + {align,w}, + {bg,?BG_COLOUR}, + {fg, {0,0,0}} + ]), + gs:config(win, [{width,?WIN_WIDTH}, + {height,?BIG_WIN_HEIGHT} + ]). + + + + + + + +traverse(Pattern, [Object | T], Row, Length, Acc, IsRegExp, ListAsStr) -> + SearchRes = + case IsRegExp of + true -> + search_for_regexp(Pattern, Object, ListAsStr); + false -> + compare_terms(Pattern, Object) + end, + + NewAcc + = case SearchRes of + found -> + RowStr = integer_to_list(Row), + LengthStr = integer_to_list(Length), + ObjectStr = case ListAsStr of + true -> + lists:flatten(tv_io_lib:format("~p", [Object])); + false -> + lists:flatten(tv_io_lib:write(Object)) + end, + + gs:config(listbox, + [{add, + " Row " ++ RowStr ++ ":" ++ + lists:duplicate(length(LengthStr)-length(RowStr), " ") ++ + " " ++ ObjectStr} + ]), + gs:config(objects_found, + [{label, + {text,integer_to_list(length(Acc)+1) ++ + " object(s) found"}} + ]), + [{Row,Object} | Acc]; + not_found -> + Acc + end, + receive + {gs,cancel,click,_Data,_Args} -> + gs:config(objects_found, + [{label, + {text,integer_to_list(gs:read(listbox,size)) ++ + " object(s) found"}} + ]), + lists:reverse(NewAcc) + after + 0 -> + traverse(Pattern, T, Row+1, Length, NewAcc, IsRegExp, ListAsStr) + end; +traverse(_Pattern, [], _N, _Length, Acc, _IsRegExp, _ListAsStr) -> + gs:config(objects_found, + [{label, + {text,integer_to_list(gs:read(listbox,size)) ++ + " object(s) found"}} + ]), + lists:reverse(Acc). + + + + +search_for_regexp(Pattern, Elem, ListAsStr) -> + ListToSearch = + case ListAsStr of + true -> + lists:flatten(tv_io_lib:format("~p", [Elem])); + false -> + lists:flatten(tv_io_lib:write(Elem)) + end, + + case regexp:first_match(ListToSearch, Pattern) of + {match, _, _} -> + found; + _Other -> + not_found + %% The code below shall be used instead if it is desired to + %% compare each *element* in the tuples to the regular expression, + %% i.e., treat each element as a new line/string. + %% The difference is most easily explained through an example: + %% If we treat each tuple as a new line/string, the regular expression + %% "^{win" will match the string "{win, 1, 2, 3}", but not the string + %% "{1, {win,2}}". + %% If we treat each element as a new line/string, the RE "^{win" will match + %% both strings above. + + %% SearchList = tuple_to_list(Elem), + %% case lists:dropwhile( + %% fun(H) -> + %% nomatch == regexp:first_match(lists:flatten(io_lib:write(H)), + %% Pattern) + %% end, + %% SearchList) of + %% [] -> + %% not_found; + %% _AnyList -> + %% found + %% end + end. + + + + + +compare_terms(Term, Elem) when not is_tuple(Elem), not is_list(Elem), Term =/= Elem -> + not_found; +compare_terms(Term, Term) -> + %% Even the case Term = "{}" or "[]"!!! + found; +compare_terms(Term, Elem) when is_list(Elem) -> + traverse_list(Term, Elem); +compare_terms(Term, Elem) when is_tuple(Elem) -> + traverse_tuple(Term, Elem, 1, size(Elem)). + + + + + +traverse_tuple(Pattern, Tuple, N, Stop) when N =< Stop -> + Elem = element(N,Tuple), + case compare_terms(Pattern, Elem) of + found -> + found; + not_found -> + traverse_tuple(Pattern, Tuple, N+1, Stop) + end; +traverse_tuple(_Pattern, _Tuple, N, Stop) when N > Stop -> + not_found. + + + + + + +traverse_list(Pattern, [H | T]) -> + case compare_terms(Pattern, H) of + found -> + found; + not_found -> + traverse_list(Pattern, T) + end; +traverse_list(_Pattern, []) -> + not_found. + diff --git a/lib/tv/src/tv_db_sort.erl b/lib/tv/src/tv_db_sort.erl new file mode 100644 index 0000000000..3675c7b413 --- /dev/null +++ b/lib/tv/src/tv_db_sort.erl @@ -0,0 +1,141 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_db_sort). + + + +-export([mergesort/3, merge/4, get_compare_value/2]). + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + + +mergesort(_KeyNo, [X], _ReverseOrder) -> + [X]; +mergesort(_KeyNo, [], _ReverseOrder) -> + []; +mergesort(KeyNo, X, ReverseOrder) -> + split(KeyNo, X, [], [], ReverseOrder). + + + + + + + + + %% If we want reverse order when just merging two lists, + %% each of them has to be in reverse order first! + +merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) when not Reverse -> + K1 = get_compare_value(KeyNo, E1), + K2 = get_compare_value(KeyNo, E2), + case get_correct_order(K1, E1, K2, E2) of + {1, 2} -> + [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)]; + {2, 1} -> + [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)] + end; +merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) -> + K1 = get_compare_value(KeyNo, E1), + K2 = get_compare_value(KeyNo, E2), + case get_correct_order(K1, E1, K2, E2) of + {1, 2} -> + [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)]; + {2, 1} -> + [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)] + end; +merge(_KeyNo, [], L2, _Reverse) -> % L2 may be the empty list also! + L2; +merge(_KeyNo, L1, [], _Reverse) -> % L1 may be the empty list also! + L1. + + + + + + +get_compare_value(KeyNo, E) when is_tuple(E) -> + case catch element(KeyNo, E) of + {'EXIT', {badarg, {?MODULE, get_compare_value, [KeyNo, E]}}} -> + short_tuple; + V -> + {tuple, V} + end; +get_compare_value(_KeyNo, _E) -> + no_tuple. + + + + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + +split(KeyNo, [A,B|T], X, Y, Reverse) -> + split(KeyNo, T, [A|X], [B|Y], Reverse); +split(KeyNo, [H], X, Y, Reverse) -> + split(KeyNo, [], [H|X], Y, Reverse); +split(KeyNo, [], X, Y, Reverse) -> + merge(KeyNo, + mergesort(KeyNo, X, Reverse), + mergesort(KeyNo, Y, Reverse), + Reverse). + + + + + + +get_correct_order({tuple, V1}, _E1, {tuple, V2}, _E2) when V1 < V2 -> + {1, 2}; +get_correct_order({tuple, _V1}, _E1, {tuple, _V2}, _E2) -> + {2, 1}; +get_correct_order(short_tuple, _E1, {tuple, _V2}, _E2) -> + {1, 2}; +get_correct_order({tuple, _V1}, _E1, short_tuple, _E2) -> + {2, 1}; +get_correct_order(short_tuple, E1, short_tuple, E2) when E1 < E2 -> + {1, 2}; +get_correct_order(short_tuple, _E1, short_tuple, _E2) -> + {2, 1}; +get_correct_order(no_tuple, E1, no_tuple, E2) when E1 < E2 -> + {1, 2}; +get_correct_order(no_tuple, _E1, no_tuple, _E2) -> + {2, 1}; +get_correct_order(_Anything, _E1, no_tuple, _E2) -> % Tuples first, then other + {1, 2}; % terms in correct order! +get_correct_order(no_tuple, _E1, _Anything, _E2) -> + {2, 1}. diff --git a/lib/tv/src/tv_ets_rpc.erl b/lib/tv/src/tv_ets_rpc.erl new file mode 100644 index 0000000000..ec2fde30ac --- /dev/null +++ b/lib/tv/src/tv_ets_rpc.erl @@ -0,0 +1,140 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_ets_rpc). + + + +-export([all/2, + info/4, + new/4, + tab2list/3, + insert/4, + lookup/4, + delete/4 + ]). + + + + +all(_Node, true) -> + chk(catch ets:all()); +all(Node, false) -> + chk(catch rpc:block_call(Node, ets, all, [])). + + + + +info(_Node, true, TabId, What) -> + chk(catch ets:info(TabId, What)); +info(Node, false, TabId, What) -> + chk(catch rpc:block_call(Node, ets, info, [TabId, What])). + + + + +new(_Node, true, TabName, Options) -> + case catch ets:new(TabName, Options) of + {TabName, Pid} when is_pid(Pid) -> + {TabName,Pid}; + {TabNo, Pid} when is_pid(Pid) -> + {TabNo,Pid}; + OtherResult -> + chk(OtherResult) + end; +new(Node, false, TabName, Options) -> + case catch rpc:block_call(Node, ets, new, [TabName, Options]) of + {TabName, Pid} when is_pid(Pid) -> + {TabName,Pid}; + {TabNo, Pid} when is_pid(Pid) -> + {TabNo, Pid}; + OtherResult -> + chk(OtherResult) + end. + + + + +tab2list(_Node, true, TabId) -> + chk(catch ets:tab2list(TabId)); +tab2list(Node, false, TabId) -> + chk(catch rpc:call(Node, ets, tab2list, [TabId])). + + + + +insert(_Node, true, TabId, Object) -> + chk(catch ets:insert(TabId, Object)); +insert(Node, false, TabId, Object) -> + chk(catch rpc:call(Node, ets, insert, [TabId, Object])). + + + + +lookup(_Node, true, TabId, Key) -> + chk(catch ets:lookup(TabId, Key)); +lookup(Node, false, TabId, Key) -> + chk(catch rpc:call(Node, ets, lookup, [TabId, Key])). + + + + +delete(_Node, true, TabId, Key) -> + chk(catch ets:delete(TabId, Key)); +delete(Node, false, TabId, Key) -> + chk(catch rpc:call(Node, ets, delete, [TabId, Key])). + + + + +chk(Result) -> + case Result of + undefined -> + throw(no_table); + _Anything when is_list(Result) -> + Result; + _Anything when is_atom(Result) -> + Result; + _Anything when is_integer(Result) -> + Result; + _Anything when is_pid(Result) -> + Result; + + %% Messages received when node is down. + {badrpc, nodedown} -> + throw(nodedown); + {'EXIT', nodedown} -> + throw(nodedown); + {'EXIT', {{badarg, {gen, set_monitor_node, _Args}}, _Reason}} -> + throw(nodedown); + + %% Messages received when table doesn't exist. + {'EXIT', {badarg, {ets,local_info,_Args}}} -> + %% Due to inconsistencies in R2D and earlier versions: + %% ets:info/1 returned 'undefined' when table didn't + %% exist, while ets:info/2 returned the exit-signal + %% above. This was corrected in R3A - now both functions + %% return 'undefined' :-) + throw(no_table); + {badrpc, {'EXIT', {badarg,_Reason}}} -> + throw(no_table); + {'EXIT', {badarg,_Reason}} -> + throw(no_table); + Error when is_tuple(Error) -> + throw({unexpected_error,Error}) + end. + diff --git a/lib/tv/src/tv_etsread.erl b/lib/tv/src/tv_etsread.erl new file mode 100644 index 0000000000..d3240ef513 --- /dev/null +++ b/lib/tv/src/tv_etsread.erl @@ -0,0 +1,767 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Module containing the interface towards ETS tables, +%%% i.e., handling the polling and thereafter sending the +%%% result to the database part of the table tool. +%%% +%%%********************************************************************* + + +-module(tv_etsread). + + + +-export([etsread/2]). + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +etsread(MasterPid, ErrorMsgMode) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrorMsgMode), + blocked(MasterPid). + + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + +blocked(MasterPid) -> + receive + Msg -> + case Msg of + + #etsread_deblock{} -> + deblock(Msg, MasterPid); + + {'EXIT', Pid, Reason} -> + exit_signals({Pid, Reason}, MasterPid), + blocked(MasterPid); + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + blocked(MasterPid); + + _Other -> + %% io:format("Received signal ~p~n", [_Other]), + blocked(MasterPid) + end + end. + + + + + + + +deblock(Msg, MasterPid) -> + #etsread_deblock{dbs_pid = DbsPid, + table_type = KindOfTable, + node = Node, + local_node = LocalNode, + table_id = TableId, + poll_interval = PollInt} = Msg, + PollInterval = case PollInt of + infinity -> + PollInt; + _Other -> + PollInt * 1000 + end, + %% Get table info! + case catch get_table_info(Node, LocalNode, TableId, KindOfTable) of + nodedown -> + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + no_table -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + mnesia_not_started -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + {unexpected_error,_Reason} -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + {Type, Pos, Protection} -> + MasterPid ! #etsread_deblock_cfm{sender = self(), + type = Type, + keypos = Pos, + protection = Protection + }, + + timer:sleep(500), + case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of + nodedown -> + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + no_table -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + mnesia_not_started -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + {unexpected_error,_Reason} -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}, + blocked(MasterPid); + _ElapsedTime -> + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, + KindOfTable, PollInterval) + end + end. + + + + + + +get_table_info(Node, LocalNode, TableId, KindOfTable) -> + case KindOfTable of + ets -> + % Check whether table is 'bag' or 'set' type. + Type = tv_ets_rpc:info(Node, LocalNode, TableId, type), + % Get position for the key. + Pos = tv_ets_rpc:info(Node, LocalNode, TableId, keypos), + Protection = tv_ets_rpc:info(Node, LocalNode, TableId, protection), + {Type, Pos, Protection}; + mnesia -> + Type = tv_mnesia_rpc:table_info(Node, LocalNode, TableId, type), + Pos = 2, + %% All Mnesia tables are regarded as being public! + {Type, Pos, public} + end. + + + + + + +deblocked_loop(MasterPid,DbsPid,Node,LocalNode,TableId,KindOfTable,PollInterval) -> + receive + Msg -> + + case Msg of + + #etsread_poll_table{} -> + case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of + %% No automatic polling here! + nodedown -> + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = false}; + no_table -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}; + mnesia_not_started -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}; + {unexpected_error,_Reason} -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = false}; + _ElapsedTime -> + done + end, + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, + TableId, KindOfTable, PollInterval); + + + #etsread_set_poll_interval{interval = PollInt} -> + NewPollInterval = case PollInt of + infinity -> + PollInt; + _Other -> + PollInt * 1000 + end, + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, + TableId, KindOfTable, NewPollInterval); + + + #etsread_deblock{} -> + deblock(Msg, MasterPid); + + + #etsread_update_object{key_no=KeyNo, object=Obj, old_object=OldObj} -> + update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, + KeyNo, Obj, OldObj, MasterPid, PollInterval), + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, + PollInterval); + + + #etsread_new_object{object=Obj} -> + new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, + Obj, MasterPid, PollInterval), + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, + PollInterval); + + + #etsread_delete_object{object=Obj} -> + delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, + Obj, MasterPid, PollInterval), + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, + PollInterval); + + + #ip_dead_table{} -> + AutoPoll = case PollInterval of + infinity -> + false; + _Other -> + true + end, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}, + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, + KindOfTable, infinity); + + + #etsread_nodedown{} -> + AutoPoll = case PollInterval of + infinity -> + false; + _Other -> + true + end, + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = AutoPoll}, + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, + KindOfTable, infinity); + + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, + PollInterval); + + + {'EXIT', Pid, Reason} -> + exit_signals({Pid, Reason}, MasterPid), + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, + TableId, KindOfTable, PollInterval) + end + + after PollInterval -> + %% Automatic polling must be on, otherwise these + %% lines would never be executed! + NewPollInterval = + case catch read_table(Node,LocalNode,TableId,KindOfTable,DbsPid) of + nodedown -> + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = true}, + infinity; + no_table -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = true}, + infinity; + mnesia_not_started -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = true}, + infinity; + {unexpected_error,_Reason} -> + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = true}, + infinity; + ElapsedMilliseconds -> + if + (ElapsedMilliseconds * 1000) >= PollInterval -> + infinity; + true -> + PollInterval + end + end, + deblocked_loop(MasterPid, DbsPid, Node, LocalNode, + TableId, KindOfTable, NewPollInterval) + end. + + + + + +exit_signals(ExitInfo, MasterPid) -> + case ExitInfo of + {MasterPid, _Reason} -> + exit(normal); + _Other -> + done + end. + + + + +update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, Obj, OldObj, MasterPid, PollInterval) -> + AutoPoll = + case PollInterval of + infinity -> + false; + _Other -> + true + end, + case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of + bad_format -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = false}; + ok -> + %% Check that we are allowed to edit the table! + case catch update_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, + Obj, OldObj) of + + nodedown -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = AutoPoll}; + + no_table -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + mnesia_not_started -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + + {unexpected_error,_Reason} -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + ok -> + DbsPid ! #etsread_update_object_cfm{sender = self(), + success = true} + end + end. + + + + + +update_object2(ets, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) -> + %% We shall update a specific object! If the table is a 'set' table, + %% it is just to insert the altered object. However, if the table + %% is a 'bag', or a 'duplicate_bag', we first have to remove the + %% old object, and then insert the altered one. + %% But, we aren't finished with that... we also want to preserve + %% the time order, meaning we have to delete *ALL* objects having the + %% very same key, and then insert them again! (Actually we would have + %% to do this anyhow, due to limitations in the interface functions, + %% but this remark has to be noted!) + OldKey = element(KeyNo, OldObj), + InsertList = + case tv_ets_rpc:info(Node, LocalNode, Tab, type) of + set -> + %% Have to remove old object, because the key may be what's changed. + tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), + [Obj]; + ordered_set -> + %% Have to remove old object, because the key may be what's changed. + tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), + [Obj]; + _Other -> %% 'bag' or 'duplicate_bag' + OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, OldKey), + tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), + %% Have to beware of duplicate_bag tables, + %% i.e., the same object may occur more than + %% once, but we only want to replace it once! + {_Replaced, TmpList} = + lists:foldl( + fun(Data, {Replaced,Acc}) when Data =/= OldObj -> + {Replaced, [Data | Acc]}; + (_Data, {Replaced,Acc}) when not Replaced -> + {true, [Obj | Acc]}; + (Data, {Replaced,Acc}) -> + {Replaced, [Data | Acc]} + end, + {false, []}, + OldList), + lists:reverse(TmpList) + end, + lists:foreach(fun(H) -> + tv_ets_rpc:insert(Node, LocalNode, Tab, H) + end, + InsertList), + ok; +update_object2(mnesia, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) -> + OldKey = element(KeyNo, OldObj), + InsertList = + case tv_mnesia_rpc:table_info(Node, LocalNode, Tab, type) of + set -> + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + mnesia:delete(Tab,OldKey,write) + end), + [Obj]; + ordered_set -> + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + mnesia:delete(Tab,OldKey,write) + end), + [Obj]; + _Other -> %% 'bag' or 'duplicate_bag' + {atomic, OldList} = + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + mnesia:read(Tab,OldKey,read) + end), + %% We can't use mnesia:delete_object here, because + %% time order wouldn't be preserved then!!! + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + mnesia:delete(Tab,OldKey,write) + end), + ChangeFun = + fun(H) when H =:= OldObj -> + Obj; + (H) -> + H + end, + [ChangeFun(X) || X <- OldList] + end, + lists:foreach(fun(H) -> + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + %% This mnesia call shall not be distributed, + %% since the transaction sees to that it is + %% executed on the right node!!! + mnesia:write(Tab,H,write) + end) + end, + InsertList), + ok. + + + + + + +delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) -> + AutoPoll = + case PollInterval of + infinity -> + false; + _Other -> + true + end, + case catch delete_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of + + nodedown -> + DbsPid ! #etsread_delete_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = AutoPoll}; + + no_table -> + DbsPid ! #etsread_delete_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + mnesia_not_started -> + DbsPid ! #etsread_delete_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + {unexpected_error,_Reason} -> + DbsPid ! #etsread_delete_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + ok -> + DbsPid ! #etsread_delete_object_cfm{sender = self(), + success = true} + end. + + + + +delete_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) -> + KeyNo = tv_ets_rpc:info(Node, LocalNode, Tab, keypos), + Key = element(KeyNo, Obj), + InsertList = + case tv_ets_rpc:info(Node, LocalNode, Tab, type) of + set -> + %% Have to remove old object, because the key may be what's changed. + tv_ets_rpc:delete(Node, LocalNode, Tab, Key), + []; + ordered_set -> + %% Have to remove old object, because the key may be what's changed. + tv_ets_rpc:delete(Node, LocalNode, Tab, Key), + []; + _Other -> %% 'bag' or 'duplicate_bag' + OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, Key), + tv_ets_rpc:delete(Node, LocalNode, Tab, Key), + OldList -- [Obj] + end, + + lists:foreach(fun(H) -> + tv_ets_rpc:insert(Node, LocalNode, Tab, H) + end, + InsertList), + ok; +delete_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) -> + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + %% This mnesia call shall not be distributed, + %% since the transaction sees to that it is + %% executed on the right node!!! + mnesia:delete_object(Tab,Obj,write) + end), + ok. + + + + + +new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) -> + AutoPoll = + case PollInterval of + infinity -> + false; + _Other -> + true + end, + case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of + bad_format -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = false}; + ok -> + %% Check that we are allowed to edit the table! + case catch new_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of + + nodedown -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_nodedown{sender = self(), + automatic_polling = AutoPoll}; + + no_table -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + mnesia_not_started -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + {unexpected_error,_Reason} -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = false}, + MasterPid ! #pc_dead_table{sender = self(), + automatic_polling = AutoPoll}; + + ok -> + DbsPid ! #etsread_new_object_cfm{sender = self(), + success = true} + end + end. + + + + + +new_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) -> + tv_ets_rpc:insert(Node, LocalNode, Tab, Obj), + ok; +new_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) -> + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + %% This mnesia call shall not be distributed, + %% since the transaction sees to that it is + %% executed on the right node!!! + mnesia:write(Tab,Obj,write) + end), + ok. + + + + + +check_record_format(mnesia, Node, LocalNode, Tab, Obj) -> + Arity = tv_mnesia_rpc:table_info(Node, LocalNode, Tab, arity), + case size(Obj) of + Arity -> + ok; + _Other -> + gs:window(etsreadwin, gs:start(), []), + case get(error_msg_mode) of + normal -> + tv_utils:notify(etsreadwin, "TV Notification", + ["The record is not complete,", + "too few fields are specified!"]); + haiku -> + tv_utils:notify(etsreadwin, "TV Notification", + ["The attempt to change", + "The specified record size", + "Is simply ignored."]) + end, + gs:destroy(etsreadwin), + bad_format + end; +check_record_format(ets, _Node, _LocalNode, _Tab, _Obj) -> + ok. + + + + + + + +read_table(Node, LocalNode, Tab, KindOfTable, DbsPid) -> + T1 = time(), + + {TableContent, ListOfKeys} = + case KindOfTable of + ets -> + {tv_ets_rpc:tab2list(Node, LocalNode, Tab), + [tv_ets_rpc:info(Node, LocalNode, Tab, keypos)] + }; + mnesia -> + %% It may be tempting to use Mnesia event subscription, + %% but will this really save the day? The main drawback + %% is that we will then have to update the table copy we + %% store internally in two different ways: one for the + %% Mnesia tables, and one for the ETS tables. Also, if + %% the Mnesia tables are frequently updated, this will + %% cause TV to work all the time too (either updating the + %% table copy for each inserted/deleted object, or storing + %% these objects until polling is ordered). To make this + %% work smoothly requires a bit of work... + %% The second drawback is that it doesn't seem clear in all + %% circumstances how the subscription actually works - i.e., + %% if we only use subscriptions, can we actually be sure that + %% the *real* state of the table is the same as the one kept + %% in TV? For example, imagine the scenario that Mnesia is + %% stopped, all Mnesia directories are removed (from the UNIX + %% shell), and then Mnesia once again is started. The first + %% problem is that we have to check for start/stop of Mnesia, + %% the second is that we then have to rescan the actual table. + %% The logic for this may require som effort to write! + %% Also, what will happen if the table is killed/dies? + %% Will we get messages for each element in the table? + %% (I havent't checked this last issue, this is just som thoughts.) + %% And generally, there is always a risk that a message is lost, + %% which will result in TV showing an erroneous table content. + %% + %% All in all, using Mnesia subscriptions *may* be a sub-optimization. + %% The current solution works fine, is also easy to control, and is + %% mainly the same for both ETS and Mnesia tables. + %% My suggestion is that it is used until someone actually complains + %% about the polling time being too long for huge tables! :-) + %% (However, it shall be emphasized that it is this module that + %% actually polls the Mnesia/ETS tables, meaning that it is + %% mainly this module that has to be modified, should the usage of + %% subscriptions be desired. The other module that has to be modified + %% is the one maintaining the internal copy of the table.) + WildPattern = tv_mnesia_rpc:table_info(Node,LocalNode,Tab,wild_pattern), + {atomic, Content} = + tv_mnesia_rpc:transaction( + Node, + LocalNode, + fun() -> + %% This mnesia call shall not be distributed, + %% since the transaction sees to that it is + %% executed on the right node!!! + mnesia:match_object(Tab, WildPattern, read) + end), + {Content, [2 | tv_mnesia_rpc:table_info(Node, LocalNode,Tab, index)]} + end, + + T2 = time(), + + ElapsedTime = compute_elapsed_seconds(T1, T2), + + DbsPid ! #dbs_new_data{sender = self(), + data = TableContent, + keys = ListOfKeys, + time_to_read_table = ElapsedTime + }, + + ElapsedTime. + + + + + + + +compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) -> + ElapsedHours = get_time_diff(hours, H1, H2), + ElapsedMinutes = get_time_diff(minutes, M1, M2), + ElapsedSeconds = get_time_diff(seconds, S1, S2), + (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1. + + + + + +get_time_diff(_Type, T1, T2) when T1 =< T2 -> + T2 - T1; +get_time_diff(hours, T1, T2) -> + T2 + 24 - T1; +get_time_diff(minutes, T1, T2) -> + T2 + 60 - T1; +get_time_diff(seconds, T1, T2) -> + T2 + 60 - T1. diff --git a/lib/tv/src/tv_info.erl b/lib/tv/src/tv_info.erl new file mode 100644 index 0000000000..7bc31e35cd --- /dev/null +++ b/lib/tv/src/tv_info.erl @@ -0,0 +1,876 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_info). + + + +-export([info/6 + ]). + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). + + + + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). + + +-record(card_field_ids, {parent_pid, + window_id, + window_frame, + table_id, + table_type, + table_name, + named_table, + owner_pid, + owner_name, + bag_or_set, + arity, + attributes, + wild_pattern, + keypos, + index, + snmp, + protection, + size, + memory, + storage_type, + disc_copies, + where_to_read, + ram_copies, + disc_only_copies, + where_to_write, + checkpoints, + node + }). + + + +-define(WINDOW_WIDTH, 580). +-define(WINDOW_HEIGHT, 430). + + + +-define(MNESIA_INFO_ITEMS, [type, + arity, + attributes, + index, + size, + memory, + storage_type, + where_to_read, + disc_copies, + disc_only_copies, + ram_copies, + where_to_write, + checkpoints + ]). + + + + +info(Master, Node, LocalNode, TabId, TabType, ErrMsgMode) -> + process_flag(trap_exit,true), + WinId = create_window(), + {CardIds, MaskLabel} = init(Master, Node, LocalNode, TabId, TabType, WinId), + put(error_msg_mode, ErrMsgMode), + gs:config(WinId, [{map, true}]), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType). + + + + + + +create_window() -> + WinWidth = ?WINDOW_WIDTH, + WinHeight = ?WINDOW_HEIGHT, + Win = gs:window(win, gs:start(), [{width, WinWidth}, + {height, WinHeight}, + {bg, ?DEFAULT_BG_COLOR}, + {destroy, true}, + {configure, true}, + {keypress, true} + ]), + + MenubarId = gs:create(menubar, Win, [{bg, ?DEFAULT_BG_COLOR} + ]), + Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, % firebrick + {label, {text, " File "}}, + {underline, 1} + ]), + Obutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, % firebrick + {label, {text, " Options "}}, + {underline, 1} + ]), + + % Create the actual menu! + FMenu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}]), + OMenu = gs:create(menu, Obutt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}]), + gs:create(menuitem, FMenu, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, + {label, {text, " Close Ctrl-C "}}, + {data, close_menu}, + {underline, 1} + ]), + gs:create(menuitem, OMenu, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, + {label, {text, " Refresh Ctrl-R "}}, + {data, update}, + {underline, 1} + ]), + Win. + + + + + + + + +init(Master, Node, LocalNode, TabId, TabType, WinId) -> + WinWidth = ?WINDOW_WIDTH, + WinHeight = ?WINDOW_HEIGHT, + + WinFrame = gs:frame(WinId, [{width, WinWidth}, + {height, WinHeight}, + {x, 0}, + {y, 30}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, 0} + ]), + + TableIdFlap = create_flap(1, "Table Id", WinFrame), + BasicSettingsFlap = create_flap(2, "Basic Settings", WinFrame), + SizeFlap = create_flap(3, "Size", WinFrame), + StorageFlap = create_flap(4, "Storage", WinFrame), + + TableIdCard = create_card(WinFrame, TableIdFlap), + BasicSettingsCard = create_card(WinFrame, BasicSettingsFlap), + SizeCard = create_card(WinFrame, SizeFlap), + StorageCard = create_card(WinFrame, StorageFlap), + + + set_flap_label(TableIdFlap, "Table Id"), + set_flap_label(BasicSettingsFlap, "Basic Settings"), + set_flap_label(SizeFlap, "Size"), + set_flap_label(StorageFlap, "Storage"), + + + gs:config(TableIdCard, [raise]), + + CardIds = print_cards(TabType, TableIdCard, BasicSettingsCard, SizeCard, StorageCard), + + {_CardId, FirstMaskXpos} = gs:read(TableIdFlap, data), + Mask = gs:label(WinFrame, [{width, gs:read(TableIdFlap, width) - 2 * gs:read(TableIdFlap, bw) + 1}, + {height, gs:read(TableIdCard, bw)}, + {x, FirstMaskXpos}, + {y, gs:read(TableIdCard, y)}, + {bg, ?DEFAULT_BG_COLOR} + ]), + + update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, Master), + {CardIds#card_field_ids{parent_pid = Master, + window_id = WinId, + window_frame = WinFrame}, Mask}. + + + + + +check_node(OldNode, LocalNode) -> + HomeNode = node(), + case net_adm:ping(OldNode) of + pong -> + OldNode; + pang when LocalNode -> + %% The system has gone either distributed or undistributed. + %% No matter which, HomeNode tells the current correct node. + HomeNode; + pang -> + OldNode + end. + + + + + + +update_data_field(notext, {label, Id}) -> + gs:config(Id, [{label, {text, "" }}]); +update_data_field(notext, {listbox, Id}) -> + gs:config(Id, [{items, []}]); +update_data_field({Data}, {label, Id}) -> + gs:config(Id, [{label, {text, " " ++ lists:flatten(io_lib:write(Data))}}]); +update_data_field({Data}, {listbox, Id}) -> + gs:config(Id, [{items, lists:map(fun(E) -> " " ++ lists:flatten(io_lib:write(E)) + end, Data)}]). + + + + +print_info(mnesia, Node, LocalNode, TabId, CardIds) -> + update_data_field({mnesia}, + CardIds#card_field_ids.table_type), + update_data_field({TabId}, + CardIds#card_field_ids.table_name), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, type)}, + CardIds#card_field_ids.bag_or_set), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, arity) - 1}, + CardIds#card_field_ids.arity), + + AttributesList = tv_mnesia_rpc:table_info(Node, LocalNode, TabId, attributes), + update_data_field({AttributesList}, + CardIds#card_field_ids.attributes), + update_data_field({lists:map(fun(N) -> + lists:nth(N - 1, AttributesList) + end, + [2] ++ tv_mnesia_rpc:table_info(Node, + LocalNode, + TabId, + index) + ) + }, + CardIds#card_field_ids.index), + + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, size)}, + CardIds#card_field_ids.size), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, memory)}, + CardIds#card_field_ids.memory), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, storage_type)}, + CardIds#card_field_ids.storage_type), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_read)}, + CardIds#card_field_ids.where_to_read), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_copies)}, + CardIds#card_field_ids.disc_copies), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_only_copies)}, + CardIds#card_field_ids.disc_only_copies), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, ram_copies)}, + CardIds#card_field_ids.ram_copies), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_write)}, + CardIds#card_field_ids.where_to_write), + update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, checkpoints)}, + CardIds#card_field_ids.checkpoints), + {ok, TabId}; +print_info(ets, Node, LocalNode, TabId, CardIds) -> + update_data_field({ets}, + CardIds#card_field_ids.table_type), + update_data_field({TabId}, + CardIds#card_field_ids.table_id), + TabName = tv_ets_rpc:info(Node, LocalNode, TabId, name), + update_data_field({TabName}, + CardIds#card_field_ids.table_name), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, named_table)}, + CardIds#card_field_ids.named_table), + + OwnerPid = tv_ets_rpc:info(Node, LocalNode, TabId, owner), + OwnerNameSearchResult = lists:keysearch(registered_name, + 1, + rpc:block_call(Node, + erlang, + process_info, + [OwnerPid])), + OwnerName = case OwnerNameSearchResult of + false -> + notext; + {value, {registered_name, WantedName}} -> + {WantedName} + end, + update_data_field({OwnerPid}, + CardIds#card_field_ids.owner_pid), + update_data_field(OwnerName, + CardIds#card_field_ids.owner_name), + + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, keypos)}, + CardIds#card_field_ids.keypos), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, type)}, + CardIds#card_field_ids.bag_or_set), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, protection)}, + CardIds#card_field_ids.protection), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, size)}, + CardIds#card_field_ids.size), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, memory)}, + CardIds#card_field_ids.memory), + update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, node)}, + CardIds#card_field_ids.node), + {ok, TabName}. + + + + + + +print_cards(mnesia, Card1, Card2, Card3, Card4) -> + create_card_text(1, "Table Type:", Card1), + create_card_text(2, "Table Name:", Card1), + + create_card_text(1, "Table Type:", Card2), + create_card_text(2, "Number of Attributes:", Card2), +% create_card_text(3, "Attribute Names:", Card2), +% create_card_text(4, "Index Positions:", Card2), + + create_card_text(1, "Number of Elements Stored:", Card3), + create_card_text(2, "Number of Words Allocated:", Card3), + + create_card_text(1, "Local Storage Type:", Card4), + create_card_text(2, "Table Readable at Node:", Card4), +% create_card_text(3, "Disc Copy Nodes:", Card4), +% create_card_text(4, "Disc Copy Only Nodes:", Card4), +% create_card_text(5, "RAM Copy Nodes:", Card4), +% create_card_text(6, "Active Table Replica Nodes:", Card4), +% create_card_text(7, "Active Checkpoints:", Card4), + + {AttributesId, IndexId} = create_special_fields(mnesia, size_card, Card2), + + + {DiscCopiesId, DiscOnlyCopiesId, RamCopiesId, WhereToWriteId, CheckpointsId} = + create_special_fields(mnesia, storage_card, Card4), + + #card_field_ids{table_name = {label, create_card_data_field(2, Card1)}, + table_type = {label, create_card_data_field(1, Card1)}, + bag_or_set = {label, create_card_data_field(1, Card2)}, + arity = {label, create_card_data_field(2, Card2)}, + attributes = AttributesId, + index = IndexId, + size = {label, create_card_data_field(1, Card3)}, + memory = {label, create_card_data_field(2, Card3)}, + storage_type = {label, create_card_data_field(1, Card4)}, + where_to_read = {label, create_card_data_field(2, Card4)}, + disc_copies = DiscCopiesId, + disc_only_copies = DiscOnlyCopiesId, + ram_copies = RamCopiesId, + where_to_write = WhereToWriteId, + checkpoints = CheckpointsId + }; +print_cards(ets, Card1, Card2, Card3, Card4) -> + create_card_text(1, "Table Type:", Card1), + create_card_text(2, "Table Id:", Card1), + create_card_text(3, "Table Name:", Card1), + create_card_text(4, "Table Name Registered:", Card1), + create_card_text(5, "Process Owning the Table:", Card1), + create_card_text(6, "Name of Owning Process:", Card1), + + create_card_text(1, "Index Position:", Card2), + create_card_text(2, "Table Type:", Card2), + create_card_text(3, "Protection Mode:", Card2), + + create_card_text(1, "Number of Elements Stored:", Card3), + create_card_text(2, "Number of Words Allocated:", Card3), + + create_card_text(1, "Table Stored at Node:", Card4), + + #card_field_ids{table_id = {label, create_card_data_field(2, Card1)}, + table_type = {label, create_card_data_field(1, Card1)}, + table_name = {label, create_card_data_field(3, Card1)}, + named_table = {label, create_card_data_field(4, Card1)}, + owner_pid = {label, create_card_data_field(5, Card1)}, + owner_name = {label, create_card_data_field(6, Card1)}, + + keypos = {label, create_card_data_field(1, Card2)}, + bag_or_set = {label, create_card_data_field(2, Card2)}, + protection = {label, create_card_data_field(3, Card2)}, + + size = {label, create_card_data_field(1, Card3)}, + memory = {label, create_card_data_field(2, Card3)}, + + node = {label, create_card_data_field(1, Card4)} + }. + + + + + + +create_special_fields(mnesia, size_card, CardId) -> + LabelWidth = 195, + LabelHeight = 24, + ListboxWidth = 210, + ListboxHeight = 160, + VerticalSpacing = 20, + LXpos = 30, + RXpos = 330, + Ypos = 40 + (LabelHeight + VerticalSpacing) * 2 + 25, + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, LXpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Attribute Names:"}} + ]), + + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, RXpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Attributes Used as Indices:"}} + ]), + + AttributesId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, LXpos}, + {y, Ypos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + IndexId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, RXpos}, + {y, Ypos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + {{listbox, AttributesId}, + {listbox, IndexId} + }; +create_special_fields(mnesia, storage_card, CardId) -> + LabelWidth = 155, + LabelHeight = 24, + ListboxHeight = 80, + ListboxWidth = 170, + VerticalSpacing = 20, + LXpos = 10, + MXpos = 197, + RXpos = 385, + % Y-positions for upper and lower row. + UYpos = 40 + (LabelHeight + VerticalSpacing) * 2, + LYpos = UYpos + ListboxHeight + 37, + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, LXpos}, + {y, UYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Disc Copy Nodes:"}} + ]), + + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, MXpos}, + {y, UYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Disc Only Copy Nodes:"}} + ]), + + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, RXpos}, + {y, UYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "RAM Copy Nodes:"}} + ]), + + + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, LXpos}, + {y, LYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Table Replica Nodes:"}} + ]), + + gs:label(CardId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, MXpos}, + {y, LYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {label, {text, "Active Checkpoints:"}} + ]), + + + DiscCopiesId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, LXpos}, + {y, UYpos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + DiscCopiesOnlyId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, MXpos}, + {y, UYpos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + RamCopiesId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, RXpos}, + {y, UYpos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + + + WhereToWriteId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, LXpos}, + {y, LYpos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + CheckpointsId = gs:listbox(CardId, [{width, ListboxWidth}, + {height, ListboxHeight}, + {x, MXpos}, + {y, LYpos + LabelHeight - 3}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {hscroll, bottom}, + {vscroll, right}, + {selectmode, single}, + {click, true}, + {doubleclick, true}, + {data, listbox} + ]), + + {{listbox, DiscCopiesId}, + {listbox, DiscCopiesOnlyId}, + {listbox, RamCopiesId}, + {listbox, WhereToWriteId}, + {listbox, CheckpointsId} + }. + + + + + + + +create_card_data_field(N, ParentId) -> + Width = 345, + Height = 24, + VerticalSpacing = 20, + Xpos = 210, + Ypos = 40 + (Height + VerticalSpacing) * (N - 1), + + BgFrame = gs:frame(ParentId, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + {bg, {0, 0, 0}}, + {bw, 0} + ]), + gs:label(BgFrame, [{width, Width - 2}, + {height, Height - 2}, + {x, 1}, + {y, 1}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {align, w} + ]). + + + + + + +create_card_text(N, Text, ParentId) -> + LabelWidth = 205, + LabelHeight = 24, + VerticalSpacing = 20, + Xpos = 10, + Ypos = 40 + (LabelHeight + VerticalSpacing) * (N - 1), + gs:label(ParentId, [{width, LabelWidth}, + {height, LabelHeight}, + {x, Xpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, w}, + {label, {text, Text}} + ]). + + + + +create_card(ParentId, FlapId) -> + CardId = gs:frame(ParentId, [{width, 570}, + {height, 360}, + {x, 5}, + {y, 35}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, 2} + ]), + FlapXpos = gs:read(FlapId, data), + gs:config(FlapId, [{data, {CardId, FlapXpos}} + ]), + CardId. + + + + + +set_flap_label(ParentId, Text) -> + Bw = gs:read(ParentId, bw), % It is assumed that the parent is a frame! :-) + Width = gs:read(ParentId, width) - 2 * Bw - 2, + Height = gs:read(ParentId, height) - 2 * Bw - 6, + Xpos = 0, + Ypos = 0, + Data = gs:read(ParentId, data), + + gs:label(ParentId, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + % {fg, {178, 34, 34}}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {label, {text, Text}}, + {align, center}, + {buttonpress, true}, + {data, Data} + ]). + + + +create_flap(N, _Text, ParentId) -> + Width = 120, + Height = 40, + Spacing = 2, + FirstXpos = 5, + Xpos = FirstXpos + ((Width + Spacing) * (N - 1)), + Ypos = 5, + BorderWidth = 2, + + gs:frame(ParentId, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, BorderWidth}, + {cursor, hand}, + {buttonpress, true}, + {data, Xpos + BorderWidth} + ]). + + + +update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, MasterPid) -> + case catch print_info(TabType, Node, LocalNode, TabId, CardIds) of + {ok, TabName} -> + WinTitle = tv_pc_menu_handling:get_window_title(TabType,Node,TabId,TabName), + gs:config(win, [{title, "[TV] " ++ WinTitle}]), + done; + nodedown -> + nodedown; + no_table -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node", + lists:flatten(io_lib:write(Node)) ++ " no longer exists!"], + tv_utils:notify(win, "TV Notification", Msg); + haiku -> + Msg = ["Three things are certain:", + "Death, taxes, and lost tables.", + "Guess which has occurred."], + tv_utils:notify(win, "TV Notification", Msg) + end, + MasterPid ! #ip_dead_table{sender = self()}; + mnesia_not_started -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node", + lists:flatten(io_lib:write(Node)) ++ " no longer exists!"], + tv_utils:notify(win, "TV Notification", Msg); + haiku -> + Msg = ["A table that big?", + "It might be very useful.", + "But now it is gone."], + tv_utils:notify(win, "TV Notification", Msg) + end, + MasterPid ! #ip_dead_table{sender = self()}; + {unexpected_error,Reason} -> + io:format("Unexpected error: ~p~n", [Reason]); + _Other -> + io:format("Unexpected return value: ~p~n", [_Other]), + done + end. + + + + +loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) -> + receive + #info_update_table_info{sender = Sender} -> + NewNode = check_node(Node, LocalNode), + update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender), + loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); + + + #info_raise_window{sender = Sender} -> + gs:config(CardIds#card_field_ids.window_id, [raise]), + NewNode = check_node(Node, LocalNode), + chk(update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender)), + loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); + + + #info_quit{} -> + exit(normal); + + {gs, _FlapId, buttonpress, {CardId, Xpos}, [1 | _]} -> + gs:config(CardId, [raise + ]), + gs:config(MaskLabel, [raise, + {x, Xpos} + ]), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, _Id, buttonpress, {_CardId, _Xpos}, _Args} -> + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, _LblId, enter, _Data, _Args} -> + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, WinId, configure, _Data, _Args} -> + gs:config(WinId, [{width, ?WINDOW_WIDTH}, + {height, ?WINDOW_HEIGHT} + ]), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, ListboxId, click, listbox, _Args} -> + gs:config(ListboxId, [{selection, clear}]), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, ListboxId, doubleclick, listbox, _Args} -> + gs:config(ListboxId, [{selection, clear}]), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + {gs, _Id, click, update, _Args} -> + NewNode = check_node(Node, LocalNode), + chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, + CardIds#card_field_ids.parent_pid)), + loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); + + {gs, _Id, keypress, _, [r, _, 0, 1 | _]} -> + NewNode = check_node(Node, LocalNode), + chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, + CardIds#card_field_ids.parent_pid)), + loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); + + {gs, _Id, keypress, _, ['R', _, 1, 1 | _]} -> + NewNode = check_node(Node, LocalNode), + chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, + CardIds#card_field_ids.parent_pid)), + loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); + + {gs, _Id, click, close_menu, _Args} -> + exit(normal); + + {gs, _Id, keypress, _, [c, _, 0, 1 | _]} -> + exit(normal); + + {gs, _Id, keypress, _, ['C', _, 1, 1 | _]} -> + exit(normal); + + {gs, _Id, destroy, _Data, _Args} -> + exit(normal); + + {'EXIT', _Pid, _Reason} -> + exit(normal); + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); + + _Other -> + loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) + end. + + + + + + +chk(nodedown) -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(win, "TV Notification", + ["The node is down, and the", + "table cannot be reached."]); + haiku -> + ErrMsg1 = ["With searching comes loss", + "And the presence of absence:", + "Node is down."], + tv_utils:notify(win, "TV Notification", ErrMsg1) + end; +chk(_Other) -> + done. + diff --git a/lib/tv/src/tv_int_def.hrl b/lib/tv/src/tv_int_def.hrl new file mode 100644 index 0000000000..6d4263c51b --- /dev/null +++ b/lib/tv/src/tv_int_def.hrl @@ -0,0 +1,56 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Internal definitions for the table tool as a whole. +%%% +%%%********************************************************************* + +-define(COMM_FUNC_FILE, tv_comm_func). + +-define(ITEMS_TO_DISPLAY, 35). + + +-define(DEFAULT_BACKGROUND_COLOR, {255, 255, 255}). % white + + +% Colors used for marking updates. + +-define(BLACK, { 0, 0, 0}). + +-define(RED1, {255, 0, 0}). +-define(RED2, {255, 100, 100}). +-define(RED3, {255, 150, 150}). +-define(RED4, {255, 200, 200}). +-define(RED5, {235, 217, 217}). + + +-define(GREEN1, { 0, 255, 0}). +-define(GREEN2, {115, 255, 135}). +-define(GREEN3, {125, 225, 150}). +-define(GREEN4, {170, 225, 185}). +-define(GREEN5, {195, 219, 202}). + +-define(DEFAULT_BTN_COLOR, {217, 217, 217}). + + + + + + + diff --git a/lib/tv/src/tv_int_msg.hrl b/lib/tv/src/tv_int_msg.hrl new file mode 100644 index 0000000000..75ce8eca3b --- /dev/null +++ b/lib/tv/src/tv_int_msg.hrl @@ -0,0 +1,504 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: File containing all messages used internally +%%% between the various table tool components. +%%% +%%%********************************************************************* + + +%%%********************************************************************* +%%% MESSAGES OWNED BY PC +%%%********************************************************************* + + + +-record(pc_raise_window, {sender}). + + + +-record(pc_menu_msg, {sender, + data}). + + + +-record(pc_win_conf, {sender, + width, + height}). + + + +-record(pc_show_table_info, {sender}). + + + +-record(pc_poll_table, {sender}). + + + +-record(pc_select, {sender}). + + + +-record(pc_help, {sender}). + + + +-record(pc_set_sorting_mode, {sender, + sorting, % 'true' or 'false' + reverse, % 'true' or 'false', + sort_key_no = 1 + }). + + + +-record(pc_set_sorting_mode_cfm, {sender, + sort_key_no + }). + + + +-record(pc_marked_row, {sender, + row_no, + object, + color + }). + + + +-record(pc_data_req, {sender, + element, + nof_elements + }). + + + +-record(pc_resend_data, {sender}). + + + + +-record(pc_data, {sender, + scale_pos, % vertical scale + scale_range, % vertical scale + max_elem_size, + list_range, + elementlist, + marked_row, + list_of_keys, + color}). + + + + +-record(pc_list_info, {sender, + lists_as_strings}). + + + +-record(pc_dead_table, {sender, + automatic_polling}). + + + +-record(pc_nodedown, {sender, + automatic_polling}). + + + +-record(pc_search_req, {sender + }). + + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY PD +%%%********************************************************************* + + + +-record(pd_win_conf, {sender, + width, + height}). + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: sender: Pid of the sender of the message. +%% win: Id of window to create canvas and scale in. +%% win_width: width of the window to create the canvas in. +%% win_height: height of the window to create the canvas in. +%% scale: whether a scale shall be shown or not. +%% Possible values: true -- scale is shown. +%% false -- scale is not shown. +%%====================================================================== + +-record(pd_deblock, {sender, + win, + win_width, + win_height, + scale = false, + range}). + + + + +-record(pd_deblock_cfm, {sender}). + + + +-record(pd_new_table, {sender, + table_type, + table_name, + record_name, %% Only valid for Mnesia tables. + writable + }). + + + +-record(pd_get_sort_settings, {sender, + sorting, + reverse + }). + + + +-record(pd_no_sorting, {sender + }). + + + + +-record(pd_ignore, {sender + }). + + + + +-record(pd_updated_object, {sender, + object, + old_object, + old_color, %% Tells status of the object, if deleted or present. + obj_no + }). + + + +-record(pd_new_object, {sender, %% Used when no row is marked. + object %% Note: may still be an updated object! + }). + + + +-record(pd_delete_object, {sender, + object, + color + }). + + + +-record(pd_rec_edit, {sender, + attributes + }). + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY PW +%%%********************************************************************* + + + + +-record(pw_deblock, {sender, + win_title, + win_width, + win_height, + min_win_width, + min_win_height}). + + + +-record(pw_set_window_title, {sender, + win_title}). + + + +-record(pw_deblock_cfm, {sender, + win_id}). + + + + +%%====================================================================== +%% Message: pw_create_menu. +%% +%% Function: Order to pw to create a menu according to the content of the message. +%% +%% Data: menutitle: string containing the name of the menu, e.g., "File". +%% menulist: list of tuples having the following format: +%% {Text, Data}, where Text is the string that shall be +%% written in each menulist item, and Data is optional data, +%% presumably the name of a function that is to be called +%% when the corresponding menulist message is received. +%%====================================================================== + +-record(pw_create_menu, {sender, + menutitle, + title_acc_pos, + menulist}). + + + +-record(pw_create_menu_cfm, {sender}). + + + +-record(pw_select_menu, {sender, + menu, + old_menus}). + + + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY DBS +%%%********************************************************************* + + + +-record(dbs_deblock, {sender, + etsread_pid, + type, + keypos, + sublist_length}). + + + +-record(dbs_deblock_cfm, {sender}). + + + + +-record(dbs_new_data, {sender, + data, + keys, + time_to_read_table + }). + + + +-record(dbs_new_mnesia_data, {sender, + new_or_changed, + deleted, + keys + }). + + + +-record(dbs_subset, {sender, + data, + requested_row, + subset_pos, + db_length, + max_elem_size, + list_of_keys, + required_time_etsread, + required_time_dbs}). + + + + + +-record(dbs_subset_req, {sender, + subset_pos, + subset_length + }). + + + + +-record(dbs_sorting_mode, {sender, + sorting, % 'true' or 'false' + reverse, % 'true' or 'false' + sort_key_no + }). + + + +-record(dbs_marked_row, {sender, + row_no + }). + + + + +-record(dbs_search_req, {sender + }). + + + +-record(dbs_updated_object, {sender, + object, + old_object, + old_color, + obj_no + }). + + +-record(dbs_new_object, {sender, + object + }). + + +-record(dbs_delete_object, {sender, + object, + color, + obj_no + }). + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY ETSREAD +%%%********************************************************************* + + + +-record(etsread_update_object, {sender, + object, + old_object, + key_no + }). + +-record(etsread_update_object_cfm, {sender, + success + }). + + + +-record(etsread_new_object, {sender, + object + }). + + +-record(etsread_new_object_cfm, {sender, + success + }). + + + +-record(etsread_delete_object, {sender, + object, + key_no + }). + + +-record(etsread_delete_object_cfm, {sender, + success + }). + + + +-record(etsread_deblock, {sender, + dbs_pid, + node, + local_node, + table_id, + table_type, % One of 'ets' or 'mnesia' + poll_interval + }). + + + +-record(etsread_deblock_cfm, {sender, + type, + keypos, + protection + }). + + + +-record(etsread_set_poll_interval, {sender, + interval}). + + + +-record(etsread_poll_table, {sender}). + + + +-record(etsread_nodedown, {sender}). + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY IP +%%%********************************************************************* + + + + +-record(ip_dead_table, {sender}). + + +-record(ip_register_parent, {sender}). + + + +-record(ip_update, {sender, + nof_elements_to_mark, + text}). + + + +-record(ip_quit, {sender}). + + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY INFO +%%%********************************************************************* + + +-record(info_update_table_info, {sender}). + + + +-record(info_raise_window, {sender}). + + + +-record(info_restart, {sender, + node, + table_id, + table_type}). + + + +-record(info_quit, {sender}). + + diff --git a/lib/tv/src/tv_io_lib.erl b/lib/tv/src/tv_io_lib.erl new file mode 100644 index 0000000000..f693ff796d --- /dev/null +++ b/lib/tv/src/tv_io_lib.erl @@ -0,0 +1,222 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: This file contains io functions adapted to the +%%% TV requirements. +%%% +%%%********************************************************************* + +-module(tv_io_lib). + + +-export([format/2]). + +-export([write/1,write/2]). +-export([write_atom/1,write_string/2]). + +-export([char_list/1,deep_char_list/1,printable_list/1]). + + + +%% Interface calls to sub-modules. + +format(Format, Args) -> + tv_io_lib_format:fwrite(Format, Args). + + +%% write(Term) +%% write(Term, Depth) +%% write(Term, Depth, Pretty) +%% Return a (non-flattened) list of characters giving a printed +%% representation of the term. + +write(Term) -> write(Term, -1). + +write(_Term, 0) -> "..."; +write(Term, _D) when is_integer(Term) -> integer_to_list(Term); +write(Term, _D) when is_float(Term) -> tv_io_lib_format:fwrite_g(Term); +write(Atom, _D) when is_atom(Atom) -> write_atom(Atom); +write(Term, _D) when is_port(Term) -> "#Port"; +write(Term, _D) when is_pid(Term) -> pid_to_list(Term); +write(Term, _D) when is_reference(Term) -> "#Ref"; +write(Term, _D) when is_binary(Term) -> "#Bin"; +write(Term, _D) when is_bitstring(Term) -> "#Bitstr"; +write([], _D) -> "[]"; +write({}, _D) -> "{}"; +write([H|T], D) -> + if + D =:= 1 -> "[...]"; + true -> + [$[,[write(H, D-1)|write_tail(T, D-1)],$]] + end; +write(F, _D) when is_function(F) -> + {module,M} = erlang:fun_info(F, module), + ["#Fun<",atom_to_list(M),">"]; +write(T, D) when is_tuple(T) -> + if + D =:= 1 -> "{...}"; + true -> + [${, + [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)], + $}] + end. + +%% write_tail(List, Depth) +%% Test the terminating case first as this looks better with depth. + +write_tail([], _D) -> ""; +write_tail(_List, 1) -> "|..."; +write_tail([H|T], D) -> + [$,,write(H, D-1)|write_tail(T, D-1)]; +write_tail(Other, D) -> + [$|,write(Other, D-1)]. + +%% write_atom(Atom) -> [Char] +%% Generate the list of characters needed to print an atom. + +write_atom(Atom) -> + Chars = atom_to_list(Atom), + case quote_atom(Atom, Chars) of + true -> + write_string(Chars, $'); + false -> + Chars + end. + + +write_string(S, Q) -> + [Q|write_string1(S, Q)]. + +write_string1([], Q) -> + [Q]; +write_string1([C|Cs], Q) -> + write_char(C, Q, write_string1(Cs, Q)). + + +write_char(Q, Q, Tail) -> %Must check this first + [$\\,Q|Tail]; +write_char($\\, _, Tail) -> %In printable character range + [$\\,$\\|Tail]; +write_char(C, _, Tail) when C >= $ , C =< $~ -> + [C|Tail]; +write_char(C, _, Tail) when C >= 128+$ , C =< 255 -> + [C|Tail]; +write_char($\n, _Q, Tail) -> %\n = LF + [$\\,$n|Tail]; +write_char($\r, _, Tail) -> %\r = CR + [$\\,$r|Tail]; +write_char($\t, _, Tail) -> %\t = TAB + [$\\,$t|Tail]; +write_char($\v, _, Tail) -> %\v = VT + [$\\,$v|Tail]; +write_char($\b, _, Tail) -> %\b = BS + [$\\,$b|Tail]; +write_char($\f, _, Tail) -> %\f = FF + [$\\,$f|Tail]; +write_char($\e, _, Tail) -> %\e = ESC + [$\\,$e|Tail]; +write_char($\d, _, Tail) -> %\d = DEL + [$\\,$d|Tail]; +write_char(C, _, Tail) when C < $ -> + C1 = (C bsr 3) + $0, + C2 = (C band 7) + $0, + [$\\,$0,C1,C2|Tail]; +write_char(C, _, Tail) when C > $~ -> + C1 = (C bsr 6) + $0, + C2 = ((C bsr 3) band 7) + $0, + C3 = (C band 7) + $0, + [$\\,C1,C2,C3|Tail]. + +%% quote_atom(Atom, CharList) +%% Return 'true' if atom with chars in CharList needs to be quoted, else +%% return 'false'. + +quote_atom(Atom, Cs0) -> + case erl_scan:reserved_word(Atom) of + true -> true; + false -> + case Cs0 of + [C|Cs] when C >= $a, C =< $z -> + quote_atom(Cs); + _ -> true + end + end. + +quote_atom([C|Cs]) when C >= $a, C =< $z -> + quote_atom(Cs); +quote_atom([C|Cs]) when C >= $A, C =< $Z -> + quote_atom(Cs); +quote_atom([C|Cs]) when C >= $0, C =< $9 -> + quote_atom(Cs); +quote_atom([$_|Cs]) -> + quote_atom(Cs); +quote_atom([$@|Cs]) -> + quote_atom(Cs); +quote_atom([_|_]) -> + true; +quote_atom([]) -> + false. + +%% char_list(CharList) +%% deep_char_list(CharList) +%% Return true if CharList is a (possibly deep) list of characters, else +%% false. + +char_list([C|Cs]) when is_integer(C), C >= 0, C =< 255 -> + char_list(Cs); +char_list([]) -> true; +char_list(_Other) -> false. %Everything else is false + +deep_char_list(Cs) -> + deep_char_list(Cs, []). + +deep_char_list([C|Cs], More) when is_list(C) -> + deep_char_list(C, [Cs|More]); +deep_char_list([C|Cs], More) when is_integer(C), C >= 0, C =< 255 -> + deep_char_list(Cs, More); +deep_char_list([], [Cs|More]) -> + deep_char_list(Cs, More); +deep_char_list([], []) -> true; +deep_char_list(_Other, _More) -> %Everything else is false + false. + +%% printable_list([Char]) -> bool() +%% Return true if CharList is a list of printable characters, else +%% false. + +printable_list([C|Cs]) when is_integer(C), C >= $ , C =< 255 -> + printable_list(Cs); +printable_list([$\n|Cs]) -> + printable_list(Cs); +printable_list([$\r|Cs]) -> + printable_list(Cs); +printable_list([$\t|Cs]) -> + printable_list(Cs); +printable_list([$\v|Cs]) -> + printable_list(Cs); +printable_list([$\b|Cs]) -> + printable_list(Cs); +printable_list([$\f|Cs]) -> + printable_list(Cs); +printable_list([$\e|Cs]) -> + printable_list(Cs); +printable_list([]) -> true; +printable_list(_Other) -> false. %Everything else is false + + diff --git a/lib/tv/src/tv_io_lib_format.erl b/lib/tv/src/tv_io_lib_format.erl new file mode 100644 index 0000000000..5042fd3f9d --- /dev/null +++ b/lib/tv/src/tv_io_lib_format.erl @@ -0,0 +1,389 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_io_lib_format). + + +-export([fwrite/2,fwrite_g/1,indentation/2]). + + +%% fwrite(Format, ArgList) -> [Char]. +%% Format the arguments in ArgList after string Format. Just generate +%% an error if there is an error in the arguments. +%% +%% To do the printing command correctly we need to calculate the +%% current indentation for everything before it. This may be very +%% expensive, especially when it is not needed, so we first determine +%% if, and for how long, we need to calculate the indentations. We do +%% this by first collecting all the control sequences and +%% corresponding arguments, then counting the print sequences and +%% then building the output. This method has some drawbacks, it does +%% two passes over the format string and creates more temporary data, +%% and it also splits the handling of the control characters into two +%% parts. + +fwrite(Format, Args) when is_atom(Format) -> + fwrite(atom_to_list(Format), Args); +fwrite(Format, Args) -> + Cs = collect(Format, Args), + Pc = pcount(Cs), + build(Cs, Pc, 0). + +collect([$~|Fmt0], Args0) -> + {C,Fmt1,Args1} = collect_cseq(Fmt0, Args0), + [C|collect(Fmt1, Args1)]; +collect([C|Fmt], Args) -> + [C|collect(Fmt, Args)]; +collect([], []) -> []. + +collect_cseq(Fmt0, Args0) -> + {F,Ad,Fmt1,Args1} = field_width(Fmt0, Args0), + {P,Fmt2,Args2} = precision(Fmt1, Args1), + {Pad,Fmt3,Args3} = pad_char(Fmt2, Args2), + {C,As,Fmt4,Args4} = collect_cc(Fmt3, Args3), + {{C,As,F,Ad,P,Pad},Fmt4,Args4}. + +field_width([$-|Fmt0], Args0) -> + {F,Fmt,Args} = field_value(Fmt0, Args0), + field_width(-F, Fmt, Args); +field_width(Fmt0, Args0) -> + {F,Fmt,Args} = field_value(Fmt0, Args0), + field_width(F, Fmt, Args). + +field_width(F, Fmt, Args) when F < 0 -> + {-F,left,Fmt,Args}; +field_width(F, Fmt, Args) when F >= 0 -> + {F,right,Fmt,Args}. + +precision([$.|Fmt], Args) -> + field_value(Fmt, Args); +precision(Fmt, Args) -> + {none,Fmt,Args}. + +field_value([$*|Fmt], [A|Args]) when is_integer(A) -> + {A,Fmt,Args}; +field_value([C|Fmt], Args) when C >= $0, C =< $9 -> + field_value([C|Fmt], Args, 0); +field_value(Fmt, Args) -> + {none,Fmt,Args}. + +field_value([C|Fmt], Args, F) when C >= $0, C =< $9 -> + field_value(Fmt, Args, 10*F + (C - $0)); +field_value(Fmt, Args, F) -> %Default case + {F,Fmt,Args}. + +pad_char([$.,$*|Fmt], [Pad|Args]) -> {Pad,Fmt,Args}; +pad_char([$.,Pad|Fmt], Args) -> {Pad,Fmt,Args}; +pad_char(Fmt, Args) -> {$ ,Fmt,Args}. + +%% collect_cc([FormatChar], [Argument]) -> +%% {Control,[ControlArg],[FormatChar],[Arg]}. +%% Here we collect the argments for each control character. +%% Be explicit to cause failure early. + +collect_cc([$w|Fmt], [A|Args]) -> {$w,[A],Fmt,Args}; +collect_cc([$p|Fmt], [A|Args]) -> {$p,[A],Fmt,Args}; +collect_cc([$W|Fmt], [A,Depth|Args]) -> {$W,[A,Depth],Fmt,Args}; +collect_cc([$P|Fmt], [A,Depth|Args]) -> {$P,[A,Depth],Fmt,Args}; +collect_cc([$s|Fmt], [A|Args]) -> {$s,[A],Fmt,Args}; +collect_cc([$e|Fmt], [A|Args]) -> {$e,[A],Fmt,Args}; +collect_cc([$f|Fmt], [A|Args]) -> {$f,[A],Fmt,Args}; +collect_cc([$g|Fmt], [A|Args]) -> {$g,[A],Fmt,Args}; +collect_cc([$c|Fmt], [A|Args]) -> {$c,[A],Fmt,Args}; +collect_cc([$~|Fmt], Args) -> {$~,[],Fmt,Args}; +collect_cc([$n|Fmt], Args) -> {$n,[],Fmt,Args}; +collect_cc([$i|Fmt], [A|Args]) -> {$i,[A],Fmt,Args}. + +%% pcount([ControlC]) -> Count. +%% Count the number of print requests. + +pcount(Cs) -> pcount(Cs, 0). + +pcount([{$p,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1); +pcount([{$P,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1); +pcount([_|Cs], Acc) -> pcount(Cs, Acc); +pcount([], Acc) -> Acc. + +%% build([Control], Pc, Indentation) -> [Char]. +%% Interpret the control structures. Count the number of print +%% remaining and only calculate indentation when necessary. Must also +%% be smart when calculating indentation for characters in format. + +build([{C,As,F,Ad,P,Pad}|Cs], Pc0, I) -> + S = control(C, As, F, Ad, P, Pad, I), + Pc1 = decr_pc(C, Pc0), + if + Pc1 > 0 -> [S|build(Cs, Pc1, indentation(S, I))]; + true -> [S|build(Cs, Pc1, I)] + end; +build([$\n|Cs], Pc, _I) -> [$\n|build(Cs, Pc, 0)]; +build([$\t|Cs], Pc, I) -> [$\t|build(Cs, Pc, ((I + 8) div 8) * 8)]; +build([C|Cs], Pc, I) -> [C|build(Cs, Pc, I+1)]; +build([], _, _) -> []. + +decr_pc($p, Pc) -> Pc - 1; +decr_pc($P, Pc) -> Pc - 1; +decr_pc(_C, Pc) -> Pc. + +%% control(FormatChar, [Argument], FieldWidth, Adjust, Precision, PadChar, + +%% Indentation) -> +%% [Char] +%% This is the main dispatch function for the various formatting commands. +%% Field widths and precisions have already been calculated. + +control($w, [A], F, Adj, P, Pad, _I) -> + term(tv_io_lib:write(A, -1), F, Adj, P, Pad); +control($p, [A], F, Adj, P, Pad, I) -> + print(A, -1, F, Adj, P, Pad, I); +control($W, [A,Depth], F, Adj, P, Pad, _I) when is_integer(Depth) -> + term(tv_io_lib:write(A, Depth), F, Adj, P, Pad); +control($P, [A,Depth], F, Adj, P, Pad, I) when is_integer(Depth) -> + print(A, Depth, F, Adj, P, Pad, I); +control($s, [A], F, Adj, P, Pad, _I) when is_atom(A) -> + string(atom_to_list(A), F, Adj, P, Pad); +control($s, [L], F, Adj, P, Pad, _I) -> + true = tv_io_lib:deep_char_list(L), %Check if L a character list + string(L, F, Adj, P, Pad); +control($e, [A], F, Adj, P, Pad, _I) when is_float(A) -> + fwrite_e(A, F, Adj, P, Pad); +control($f, [A], F, Adj, P, Pad, _I) when is_float(A) -> + fwrite_f(A, F, Adj, P, Pad); +control($g, [A], F, Adj, P, Pad, _I) when is_float(A) -> + fwrite_g(A, F, Adj, P, Pad); +control($c, [A], F, Adj, P, Pad, _I) when is_integer(A) -> + char(A band 255, F, Adj, P, Pad); +control($~, [], F, Adj, P, Pad, _I) -> char($~, F, Adj, P, Pad); +control($n, [], F, Adj, P, Pad, _I) -> newline(F, Adj, P, Pad); +control($i, [_A], _F, _Adj, _P, _Pad, _I) -> []. + +%% indentation([Char], Indentation) -> Indentation. +%% Calculate the indentation of the end of a string given its start +%% indentation. We assume tabs at 8 cols. + +indentation([$\n|Cs], _I) -> indentation(Cs, 0); +indentation([$\t|Cs], I) -> indentation(Cs, ((I + 8) div 8) * 8); +indentation([C|Cs], I) when is_integer(C) -> + indentation(Cs, I+1); +indentation([C|Cs], I) -> + indentation(Cs, indentation(C, I)); +indentation([], I) -> I. + +%% term(TermList, Field, Adjust, Precision, PadChar) +%% Output the characters in a term. + +term(T, none, _Adj, none, _Pad) -> T; +term(T, none, Adj, P, Pad) -> term(T, P, Adj, P, Pad); +term(T, F, Adj, none, Pad) -> term(T, F, Adj, min(flat_length(T), F), Pad); +term(T, F, Adj, P, Pad) when F >= P -> + adjust_error(T, F, Adj, P, Pad). + +%% print(Term, Depth, Field, Adjust, Precision, PadChar, Indentation) +%% Print a term. + +print(T, D, none, Adj, P, Pad, I) -> print(T, D, 80, Adj, P, Pad, I); +print(T, D, F, Adj, none, Pad, I) -> print(T, D, F, Adj, I+1, Pad, I); +print(T, D, F, right, P, _Pad, _I) -> + tv_io_lib_pretty:pretty_print(T, P, F, D). + +%% fwrite_e(Float, Field, Adjust, Precision, PadChar) + +fwrite_e(Fl, none, Adj, none, Pad) -> %Default values + fwrite_e(Fl, none, Adj, 6, Pad); +fwrite_e(Fl, none, _Adj, P, _Pad) when P >= 2 -> + float_e(Fl, float_data(Fl), P); +fwrite_e(Fl, F, Adj, none, Pad) -> + fwrite_e(Fl, F, Adj, 6, Pad); +fwrite_e(Fl, F, Adj, P, Pad) when P >= 2 -> + adjust_error(float_e(Fl, float_data(Fl), P), F, Adj, F, Pad). + +float_e(Fl, Fd, P) when Fl < 0.0 -> %Negative numbers + [$-|float_e(-Fl, Fd, P)]; +float_e(_Fl, {Ds,E}, P) -> + case float_man(Ds, 1, P-1) of + {[$0|Fs],true} -> [[$1|Fs]|float_exp(E)]; + {Fs,false} -> [Fs|float_exp(E-1)] + end. + +%% float_man([Digit], Icount, Dcount) -> {[Chars],CarryFlag}. +%% Generate the characters in the mantissa from the digits with Icount +%% characters before the '.' and Dcount decimals. Handle carry and let +%% caller decide what to do at top. + +float_man(Ds, 0, Dc) -> + {Cs,C} = float_man(Ds, Dc), + {[$.|Cs],C}; +float_man([D|Ds], I, Dc) -> + case float_man(Ds, I-1, Dc) of + {Cs,true} when D =:= $9 -> {[$0|Cs],true}; + {Cs,true} -> {[D+1|Cs],false}; + {Cs,false} -> {[D|Cs],false} + end; +float_man([], I, Dc) -> %Pad with 0's + {string:chars($0, I, [$.|string:chars($0, Dc)]),false}. + +float_man([D|_Ds], 0) when D >= $5 -> {[],true}; +float_man([_|_], 0) -> {[],false}; +float_man([D|Ds], Dc) -> + case float_man(Ds, Dc-1) of + {Cs,true} when D =:= $9 -> {[$0|Cs],true}; + {Cs,true} -> {[D+1|Cs],false}; + {Cs,false} -> {[D|Cs],false} + end; +float_man([], Dc) -> {string:chars($0, Dc),false}. %Pad with 0's + +%% float_exp(Exponent) -> [Char]. +%% Generate the exponent of a floating point number. Alwayd include sign. + +float_exp(E) when E >= 0 -> + [$e,$+|integer_to_list(E)]; +float_exp(E) -> + [$e|integer_to_list(E)]. + +%% fwrite_f(FloatData, Field, Adjust, Precision, PadChar) + +fwrite_f(Fl, none, Adj, none, Pad) -> %Default values + fwrite_f(Fl, none, Adj, 6, Pad); +fwrite_f(Fl, none, _Adj, P, _Pad) when P >= 1 -> + float_f(Fl, float_data(Fl), P); +fwrite_f(Fl, F, Adj, none, Pad) -> + fwrite_f(Fl, F, Adj, 6, Pad); +fwrite_f(Fl, F, Adj, P, Pad) when P >= 1 -> + adjust_error(float_f(Fl, float_data(Fl), P), F, Adj, F, Pad). + +float_f(Fl, Fd, P) when Fl < 0.0 -> + [$-|float_f(-Fl, Fd, P)]; +float_f(Fl, {Ds,E}, P) when E =< 0 -> + float_f(Fl, {string:chars($0, -E+1, Ds),1}, P); %Prepend enough 0's +float_f(_Fl, {Ds,E}, P) -> + case float_man(Ds, E, P) of + {Fs,true} -> "1" ++ Fs; %Handle carry + {Fs,false} -> Fs + end. + +%% float_data([FloatChar]) -> {[Digit],Exponent} + +float_data(Fl) -> + float_data(float_to_list(Fl), []). + +float_data([$e|E], Ds) -> + {reverse(Ds),list_to_integer(E)+1}; +float_data([D|Cs], Ds) when D >= $0, D =< $9 -> + float_data(Cs, [D|Ds]); +float_data([_D|Cs], Ds) -> + float_data(Cs, Ds). + + +%% fwrite_g(Float, Field, Adjust, Precision, PadChar) +%% Use the f form if Float is > 0.1 and < 10^4, else the e form. +%% Precision always means the # of significant digits. + +fwrite_g(Fl) -> + fwrite_g(Fl, none, right, none, $\s). + +fwrite_g(Fl, F, Adj, none, Pad) -> + fwrite_g(Fl, F, Adj, 6, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 0.1 -> + fwrite_e(Fl, F, Adj, P, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1.0 -> + fwrite_f(Fl, F, Adj, P, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10.0 -> + fwrite_f(Fl, F, Adj, P-1, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 100.0 -> + fwrite_f(Fl, F, Adj, P-2, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1000.0 -> + fwrite_f(Fl, F, Adj, P-3, Pad); +fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10000.0 -> + fwrite_f(Fl, F, Adj, P-4, Pad); +fwrite_g(Fl, F, Adj, P, Pad) -> + fwrite_e(Fl, F, Adj, P, Pad). + +%% string(String, Field, Adjust, Precision, PadChar) + +string(S, none, _Adj, none, _Pad) -> S; +string(S, F, Adj, none, Pad) -> + string(S, F, Adj, min(flat_length(S), F), Pad); +string(S, none, _Adj, P, Pad) -> + string:left(flatten(S), P, Pad); +string(S, F, Adj, P, Pad) when F >= P -> + adjust(string:left(flatten(S), P, Pad), string:chars(Pad, F - P), Adj). + +%% char(Char, Field, Adjust, Precision, PadChar) -> [Char]. + +char(C, none, _Adj, none, _Pad) -> [C]; +char(C, F, _Adj, none, _Pad) -> string:chars(C, F); +char(C, none, _Adj, P, _Pad) -> string:chars(C, P); +char(C, F, Adj, P, Pad) when F >= P -> + adjust(string:chars(C, P), string:chars(Pad, F - P), Adj). + +%% newline(Field, Adjust, Precision, PadChar) -> [Char]. + +newline(none, _Adj, _P, _Pad) -> "\n"; +newline(F, right, _P, _Pad) -> string:chars($\n, F). + +%% adjust_error([Char], Field, Adjust, Max, PadChar) -> [Char]. +%% Adjust the characters within the field if length less than Max padding +%% with PadChar. + +adjust_error(Cs, F, Adj, M, Pad) -> + L = flat_length(Cs), + if + L > M -> + adjust(string:chars($*, M), string:chars(Pad, F - M), Adj); + true -> + adjust(Cs, string:chars(Pad, F - L), Adj) + end. + +adjust(Data, Pad, left) -> [Data,Pad]; +adjust(Data, Pad, right) -> [Pad,Data]. + +%% +%% Utilities +%% + +reverse(List) -> + reverse(List, []). + +reverse([H|T], Stack) -> + reverse(T, [H|Stack]); +reverse([], Stack) -> Stack. + +min(L, R) when L < R -> L; +min(_, R) -> R. + +%% flatten(List) +%% Flatten a list. + +flatten(List) -> flatten(List, []). + +flatten([H|T], Cont) when is_list(H) -> + flatten(H, [T|Cont]); +flatten([H|T], Cont) -> + [H|flatten(T, Cont)]; +flatten([], [H|Cont]) -> flatten(H, Cont); +flatten([], []) -> []. + +%% flat_length(List) +%% Calculate the length of a list of lists. + +flat_length(List) -> flat_length(List, 0). + +flat_length([H|T], L) when is_list(H) -> + flat_length(H, flat_length(T, L)); +flat_length([_|T], L) -> + flat_length(T, L + 1); +flat_length([], L) -> L. diff --git a/lib/tv/src/tv_io_lib_pretty.erl b/lib/tv/src/tv_io_lib_pretty.erl new file mode 100644 index 0000000000..c19277d006 --- /dev/null +++ b/lib/tv/src/tv_io_lib_pretty.erl @@ -0,0 +1,171 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_io_lib_pretty). + + + +-export([pretty_print/4]). + +%% pretty_print(Term, Column, LineLength, Depth) -> [Chars] +%% Depth = -1 gives unlimited print depth. Use tv_io_lib:write for atomic terms. + +pretty_print(_, _, _, 0) -> "..."; +pretty_print([], _, _, _) -> "[]"; +pretty_print({}, _, _, _) -> "{}"; +pretty_print(List, Col, Ll, D) when is_list(List) -> + case tv_io_lib:printable_list(List) of + true -> + tv_io_lib:write_string(List, $"); + false -> + Len = write_length(List, D, 0, Ll - Col), + if + D =:= 1 -> "[...]"; + Len + Col < Ll -> + write(List, D); + true -> + [$[, + [pretty_print(hd(List), Col + 1, Ll, D - 1)| + pretty_print_tail(tl(List), Col + 1, Ll, D - 1)], + $]] + end + end; +pretty_print(Fun, _Col, _Ll, _D) when is_function(Fun) -> + tv_io_lib:write(Fun); +pretty_print(Tuple, Col, Ll, D) when is_tuple(Tuple) -> + Len = write_length(Tuple, D, 0, Ll - Col), + if + D =:= 1 -> "{...}"; + Len + Col < Ll -> + write(Tuple, D); + is_atom(element(1, Tuple)), size(Tuple) > 1 -> + print_tag_tuple(Tuple, Col, Ll, D); + true -> + [${, + [pretty_print(element(1, Tuple), Col + 1, Ll, D - 1)| + pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 1, Ll, D - 1)], + $}] + end; +pretty_print(Term, _Col, _Ll, D) -> tv_io_lib:write(Term, D). + +%% print_tag_tuple(Tuple, Column, LineLength, Depth) -> [Char] +%% Print a tagged tuple by indenting the rest of the elements differently +%% to the tag. Start beside the tag if start column not too far to +%% the right. Tuple has size >= 2. + +print_tag_tuple(Tuple, Col, Ll, D) -> + Tag = tv_io_lib:write_atom(element(1, Tuple)), + Tlen = length(Tag), + Tcol = Col + Tlen + 2, + if + Tcol >= Ll div 2, Tlen > 2 -> + [${,Tag, + pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 4, Ll, D - 2), + $}]; + true -> + [${,Tag,$,, + [pretty_print(element(2, Tuple), Col + Tlen + 2, Ll, D - 2)| + pretty_print_tail(tl(tl(tuple_to_list(Tuple))), Tcol, Ll, D - 3)], + $}] + end. + +%% pretty_print_tail([Element], Column, LineLength, D) -> [Char] +%% Pretty print the elements of a list or tuple. + +pretty_print_tail([], _Col, _Ll, _D) -> ""; +pretty_print_tail(_Es, _Col, _Ll, 1) -> "|..."; +pretty_print_tail([E|Es], Col, Ll, D) -> + [$,,nl_indent(Col-1), + pretty_print(E, Col, Ll, D-1)| + pretty_print_tail(Es, Col, Ll, D-1)]; +pretty_print_tail(E, Col, Ll, D) -> + [$|,nl_indent(Col-1),pretty_print(E, Col, Ll, D-1)]. + +%% write(Term, Depth) -> [Char] +%% Write a term down to Depth on one line. Use tv_io_lib:write/2 for +%% atomic terms. + +write(_, 0) -> "..."; +write([], _) -> "[]"; +write({}, _) -> "{}"; +write(List, D) when is_list(List) -> + case tv_io_lib:printable_list(List) of + true -> + tv_io_lib:write_string(List, $"); + false -> + if + D =:= 1 -> "[...]"; + true -> + [$[, + [write(hd(List), D-1)|write_tail(tl(List), D-1)], + $]] + end + end; +write(Fun, _D) when is_function(Fun) -> tv_io_lib:write(Fun); %Must catch this first +write(T, D) when is_tuple(T) -> + if + D =:= 1 -> "{...}"; + true -> + [${, + [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)], + $}] + end; +write(Term, D) -> tv_io_lib:write(Term, D). + +write_tail([], _D) -> ""; +write_tail(_Es, 1) -> "|..."; +write_tail([E|Es], D) -> + [$,,write(E, D - 1)|write_tail(Es, D - 1)]; +write_tail(E, D) -> + [$|,write(E, D - 1)]. + +%% write_length(Term, Depth, Accumulator, MaxLength) -> integer() +%% Calculate the print length of a term, but exit when length becomes +%% greater than MaxLength. + +write_length(_T, _D, Acc, Max) when Acc > Max -> Acc; +write_length(_T, 0, Acc, _Max) -> Acc + 3; +write_length([], _, Acc, _) -> Acc + 2; +write_length({}, _, Acc, _) -> Acc + 2; +write_length(List, D, Acc, Max) when is_list(List) -> + case tv_io_lib:printable_list(List) of + true -> + Acc + length(tv_io_lib:write_string(List, $")); + false -> + write_length_list(List, D, Acc, Max) + end; +write_length(Fun, _D, Acc, _Max) when is_function(Fun) -> + Acc + length(tv_io_lib:write(Fun)); +write_length(Tuple, D, Acc, Max) when is_tuple(Tuple) -> + write_length_list(tuple_to_list(Tuple), D, Acc, Max); +write_length(Term, _D, Acc, _Max) -> + Acc + length(tv_io_lib:write(Term)). + +write_length_list(_, _, Acc, Max) when Acc > Max -> Acc; +write_length_list([], _, Acc, _) -> Acc + 1; %] +write_length_list(_Es, 1, Acc, _) -> Acc + 5; %|...] +write_length_list([E|Es], D, Acc, Max) -> + write_length_list(Es, + D - 1, + write_length(E, D - 1, Acc + 1, Max), + Max); +write_length_list(E, D, Acc, Max) -> + write_length(E, D - 1, Acc + 2, Max). %| ] + + + +nl_indent(_) -> "". diff --git a/lib/tv/src/tv_ip.erl b/lib/tv/src/tv_ip.erl new file mode 100644 index 0000000000..aeec4e8f6d --- /dev/null +++ b/lib/tv/src/tv_ip.erl @@ -0,0 +1,236 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_ip). + + + +-export([ip/1]). + + + +-include("tv_int_msg.hrl"). + + +-define(NOF_LABELS, 25). + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +ip(_Master) -> + W = gs:window(win, gs:start(), [{width, 302}, + {height, 38}, + {bg, ?DEFAULT_BG_COLOR}, + {title, "Launching..."} + ]), + C = gs:canvas(W, [{width, 40}, + {height, 35}, + {x, 0}, + {bg, {255, 255, 255}} + ]), + gs:create(image, C, [{load_gif, code:priv_dir(tv) ++ "/erlang.gif"}]), + gs:label(W, [{width, 252}, + {height, 12}, + {x, 47}, + {y, 23}, + {bg, {0, 0, 0}}, + {cursor, arrow} + ]), + + LabelList = create_labels(?NOF_LABELS, W, 48), + + L = gs:label(W, [{width, 250}, + {height, 18}, + {x, 47}, + {y, 0}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, w} + ]), + gs:config(win, [{map, true}]), + loop(1, LabelList, L). + + + + + + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_labels(0, _WinId, _Xpos) -> + []; +create_labels(N, WinId, Xpos) -> + Width = 10, + Xdiff = Width, + LabelId = gs:label(WinId, [{width, Width}, + {height, 10}, + {x, Xpos}, + {y, 24}, + {bg, {235, 235, 235}}, + {cursor, arrow} + ]), + + [LabelId | create_labels(N - 1, WinId, Xpos + Xdiff)]. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +loop(N, LabelList, L) -> + receive + Msg -> + case Msg of + + #ip_update{nof_elements_to_mark = X, text = Text} -> + update_window(LabelList, N, N + X, L, Text), + loop(N + X, LabelList, L); + + #ip_quit{} -> + update_labels(LabelList, N, ?NOF_LABELS), + receive + after 1000 -> + done + end, + done; + + _Other -> + loop(N, LabelList, L) + end + end. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_window(LabelList, N, Hi, LblId, Text) -> + gs:config(win, [raise]), + gs:config(LblId, [{label, {text, Text}}]), + update_labels(LabelList, N, Hi). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_labels(_LabelList, N, _Hi) when N > ?NOF_LABELS -> + done; +update_labels(_LabelList, N, Hi) when N >= Hi -> + done; +update_labels(LabelList, N, Hi) -> + LabelId = lists:nth(N, LabelList), + gs:config(LabelId, [{bg, {0, 0, 255}}]), + update_labels(LabelList, N + 1, Hi). + + + + + + + + + + + + diff --git a/lib/tv/src/tv_main.erl b/lib/tv/src/tv_main.erl new file mode 100644 index 0000000000..2f743c2397 --- /dev/null +++ b/lib/tv/src/tv_main.erl @@ -0,0 +1,1807 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_main). + + + +-export([start/0, + init/0 + ]). + + +-export([get_ets_tables/1, + get_mnesia_tables/1 + ]). + + + +-include("tv_main.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pd_int_msg.hrl"). +-include("tv_pd_int_def.hrl"). + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + +start() -> + spawn(?MODULE, init, []). + + + +init() -> + process_flag(trap_exit,true), + %% OK, so it's *BAD* to use the process dictionary... + %% So why have I used it? Because it is simple to remove the haiku-functionality, + %% if that is desired. Otherwise a lot of functions (the parameters) would have + %% to be changed. + put(error_msg_mode, ?ERROR_MSG_MODE), + KindOfTable = ets, + SysTabHidden = true, + UnreadHidden = true, + SortKey = ?NAME_COL, + CurrNode = node(), + Children = start_tv_nodewin(CurrNode), + {MarkedCell, TempGridLines, WinSize, ShortcutList} = create_window([]), + Tables = get_tables(CurrNode, KindOfTable, UnreadHidden, SysTabHidden,SortKey), + gs:config(grid, [{rows, {1, get_nof_rows(length(Tables), + gs:read(grid, height))}}]), + GridLines = update_gridlines(Tables, TempGridLines, 1), + gs:config(win, [{map, true}, {cursor,arrow}]), + %% To avoid unpleasant error/exit messages, we surround the loop with a catch. + catch loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, ShortcutList, + UnreadHidden, SysTabHidden, SortKey, Children). + + + +start_tv_nodewin(CurrNode) -> + NodewinPid = tv_nodewin:start(CurrNode, get(error_msg_mode)), + [{NodewinPid, tv_nodewin, CurrNode}]. + + + + + +get_ets_tables(SysTabHidden) -> + Tables = ets:all(), + get_ets_table_info(Tables, + hidden_tables(ets, SysTabHidden) ++ + current_mnesia_tables(SysTabHidden), + owners_to_hide(ets, SysTabHidden), + []). + + + +get_mnesia_tables(SysTabHidden) -> + Tables = mnesia:system_info(tables), + get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden), + owners_to_hide(mnesia, SysTabHidden), + []). + + + + + +owners_to_hide(ets, true) -> + ?SYSTEM_OWNERS; +owners_to_hide(ets, false) -> + []; +owners_to_hide(mnesia, true) -> + []; +owners_to_hide(mnesia, false) -> + []. + + + + +get_mnesia_table_info([], _OwnersToHide, Acc) -> + lists:keysort(?NAME_ELEM, Acc); +get_mnesia_table_info([TabId | Tail], OwnersToHide, Acc) -> + case catch get_mnesia_owner_size(TabId) of + {'EXIT', _Reason} -> + %% Ignore tables ceasing to exist. + %% Nodedown errors caught above! + get_mnesia_table_info(Tail, OwnersToHide, Acc); + {OwnerPid, OwnerName, Size} -> + case lists:member(OwnerName, OwnersToHide) of + true -> + get_mnesia_table_info(Tail, OwnersToHide, Acc); + false -> + Readable = not(lists:member(TabId, ?UNREADABLE_MNESIA_TABLES)), + get_mnesia_table_info(Tail, + OwnersToHide, + [{TabId, {notext}, {notext}, Readable, + OwnerPid, OwnerName, Size} | Acc]) + end + end. + + + + +get_mnesia_owner_size(TabId) -> + {OwnerPid, OwnerName} = + case catch mnesia:table_info(TabId, owner) of + Pid when is_pid(Pid) -> + case lists:keysearch(registered_name, 1, process_info(Pid)) of + false -> + {Pid, {notext}}; + {value, {registered_name, ProcName}} -> + {Pid, ProcName} + end; + _Other -> + {{notext}, {notext}} + end, + Size = mnesia:table_info(TabId, size), + {OwnerPid, OwnerName, Size}. + + + + + + + +hidden_tables(_Any, true) -> + ?SYSTEM_TABLES ++ ?MNESIA_TABLES; +hidden_tables(ets, _SysTabHidden) -> + ?MNESIA_TABLES; +hidden_tables(mnesia, _SysTabHidden) -> + []. + + + + +get_tables(Node, KindOfTable, UnreadHidden, SysTabHidden,SortKey) -> + LocalNode = (Node =:= node()), + Tables = + case catch get_table_list(Node,LocalNode,KindOfTable,SysTabHidden) of + Result when is_list(Result) -> + case UnreadHidden of + true -> + lists:filter(fun(H) -> + element(?READABLE_ELEM, H) + end, + Result); + _Other -> + Result + end; + Error -> + analyze_error(Error, Node, undefined), + [] + end, + case SortKey of + ?PROCNAME_ELEM -> + lists:keysort(SortKey, + lists:keysort(?PID_ELEM, Tables)); + _OtherCol -> + lists:keysort(SortKey, + lists:keysort(?NAME_ELEM, Tables)) + end. + + + + + +get_ets_table_info([], _TablesToHide, _OwnersToHide, Acc) -> + lists:keysort(?ID_ELEM, Acc); +get_ets_table_info([TabId | Tail], TablesToHide, OwnersToHide, Acc) -> + case catch get_ets_name_owner_protection(TabId) of + {'EXIT', _Reason} -> + %% Ignore tables ceasing to exist. + %% Nodedown errors caught above! + get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); + {Name, NamedTable, Id, Readable, OwnerPid, OwnerName, Size} -> + case lists:member(Name, TablesToHide) of + true -> + get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); + false -> + case lists:member(OwnerName, OwnersToHide) of + true -> + get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); + false -> + get_ets_table_info(Tail, TablesToHide, OwnersToHide, + [{Name,NamedTable,Id,Readable, + OwnerPid,OwnerName,Size} | Acc]) + end + end + end. + + + +get_ets_name_owner_protection(TabId) -> + Name = ets:info(TabId, name), + OwnerPid = ets:info(TabId, owner), + Readable = case ets:info(TabId, protection) of + private -> + false; + _Other -> + true + end, + Size = ets:info(TabId, size), + {NamedTable,Id} = case ets:info(TabId, named_table) of + true -> + {true,{notext}}; + false -> + {false, TabId} + end, + PName = case lists:keysearch(registered_name, 1, process_info(OwnerPid)) of + false -> + {notext}; + {value, {registered_name, ProcName}} -> + ProcName + end, + {Name, NamedTable, Id, Readable, OwnerPid, PName, Size}. + + + + + + +current_mnesia_tables(SysTabHidden) -> + case catch get_table_list(node(), true, mnesia, SysTabHidden) of + Result when is_list(Result) -> + lists:map(fun(H) -> + element(?NAME_ELEM, H) + end, + Result); + nodedown -> + handle_error(nodedown, node(), undefined), + []; + _Other -> + [] + end. + + + + +get_table_list(_Node, true, ets, SysTabHidden) -> + get_ets_tables(SysTabHidden); +get_table_list(Node, false, ets, SysTabHidden) -> + case rpc:block_call(Node, ?MODULE, get_ets_tables, [SysTabHidden]) of + {badrpc, Reason} -> + throw({badrpc,Reason}); + Result -> + Result + end; +get_table_list(_Node, true, mnesia, SysTabHidden) -> + get_mnesia_tables(SysTabHidden); +get_table_list(Node, false, mnesia, SysTabHidden) -> + case rpc:block_call(Node, ?MODULE, get_mnesia_tables, [SysTabHidden]) of + {badrpc,Reason} -> + throw({badrpc,Reason}); + Result -> + Result + end. + + + + +analyze_error(Cause, Node, Table) -> + case Cause of + {badrpc, {'EXIT', {badarg,_Reason}}} -> + done; %% Table has ceased to exist. + {'EXIT', {badarg, {ets,local_info,_Args}}} -> + done; + + {badrpc, nodedown} -> + handle_error(nodedown, Node, Table); + {'EXIT', nodedown} -> + handle_error(nodedown, Node, Table); + + {'EXIT', {aborted, {node_not_running,_ErrNode}}} -> + handle_error(mnesia_not_started, Node, Table); + {'EXIT', {'EXIT', {aborted, {node_not_running,_ErrNode}}}} -> + handle_error(mnesia_not_started, Node, Table); + {badrpc, {'EXIT', {aborted, {node_not_running,_ErrNode}}}} -> + handle_error(mnesia_not_started, Node, Table); + {'EXIT', {undef, {mnesia,_Fcn,_Args}}} -> + handle_error(mnesia_not_started, Node, Table); + + {'EXIT', Reason} -> + handle_error({unexpected_error,Reason}, Node, Table); + Error when is_tuple(Error) -> + handle_error({unexpected_error,Error}, Node, Table) + end. + + + +handle_error(mnesia_not_started, _Node, _Table) -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(win, "TV Notification", ["Mnesia not started!"]); + haiku -> + tv_utils:notify(win, "TV Notification", ["Mnesia is stopped.", + "We wish to reach all data", + "But we never will."]) + end; +handle_error(nodedown, _Node, _Table) -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(win, "TV Notification", ["The selected node is down!"]); + haiku -> + Msg = ["With searching comes loss", + "And the presence of absence:", + "Node is down."], + tv_utils:notify(win, "TV Notification", Msg) + end, + self() ! nodedown; +handle_error({unexpected_error,Cause}, _Node, _Table) -> + io:format("Unexpected error: ~p~n", [Cause]), + gs:config(win, [beep]). + + + + +loop(KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + receive + + {gs, Gridline, click, {grid,Readable}, [Col,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, Col, Row}, MarkedCell, Readable), + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Gridline, click, {grid,_Readable}, [_Col,_Row,"" | _]} -> + NewMarkedCell = unmark_cell(MarkedCell, Tables), + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, ?NAME_COL, Row}, undefined, Data), + {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables), + case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of + Children -> + {FinalMarkedCell, NewTables, NewGridLines} = + refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, ?ID_COL, Row}, undefined, Data), + {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables), + case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of + Children -> + {FinalMarkedCell, NewTables, NewGridLines} = + refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, ?INFO_COL, Row}, undefined, Data), + {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), + case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of + Children -> + {FinalMarkedCell, NewTables, NewGridLines} = + refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, ?PID_COL, Row}, undefined, Data), + OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), + NewChildren = start_pman(OwnerPid, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey, NewChildren); + + + {gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | _]} when Text =/= "" -> + unmark_cell(MarkedCell, Tables), + NewMarkedCell = mark_cell({Gridline, ?PROCNAME_COL, Row}, undefined, Data), + OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), + NewChildren = start_pman(OwnerPid, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey, NewChildren); + + +%% {gs, win, configure, _Data, [Width, Height | _]} when {Width,Height} /= WinSize -> + Msg0 = {gs, win, configure, _Data, [Width0, Height0 | _]} + when {Width0,Height0} =/= WinSize -> + {gs, win, configure, _, [Width,Height|_]} = flush_msgs(Msg0), + + NewSize = resize_window(Width, Height, length(Tables)), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,NewSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, update, _Args} -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), + update_tv_info(Children), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, open_table, _Args} -> + {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell), + Tables), + case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of + Children -> + {NewMarkedCell, NewTables, NewGridLines} = + refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {gs, _Id, click, new_table, _Args} -> + NewChildren = start_tv_new_table(CurrNode, Children), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren); + + + {gs, _Id, click, select_node, _Args} -> + show_tv_nodewin(Children), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, show_mnesia, _Args} when KindOfTable =:= ets -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + gs:config(label2, [{fg, ?DISABLED_COLOR}]), + gs:config(sort_table_id, [{enable, false}]), + NewSortKey = + case SortKey of + ?ID_ELEM -> + gs:config(sort_table_name, [{select,true}]), + ?NAME_ELEM; + _Other -> + SortKey + end, + {NewTables, NewGridLines} = + update_grid(mnesia, CurrNode, GridLines, UnreadHidden, SysTabHidden, NewSortKey), + gs:config(win, [{cursor,arrow}]), + loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,NewSortKey,Children); + + + {gs, _Id, click, show_ets, _Args} when KindOfTable =:= mnesia -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]), + gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]), + gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]), + {NewTables, NewGridLines} = + update_grid(ets, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey), + %% gs:config(show_unreadable, [{enable, true}, + %% {select, not(UnreadHidden)}]), + gs:config(sort_table_id, [{enable, true}]), + gs:config(win, [{cursor,arrow}]), + loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, show_system, _Args} when SysTabHidden -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} + = update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, false, SortKey), + gs:config(show_system, [{data, hide_system}]), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,false,SortKey,Children); + + + {gs, _Id, click, hide_system, _Args} when not SysTabHidden -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, true, SortKey), + gs:config(show_system, [{label, {text, " System Tables "}}, + {data, show_system}]), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,true,SortKey,Children); + + + {gs, _Id, click, show_unreadable, _Args} when UnreadHidden -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} + = update_grid(KindOfTable, CurrNode, GridLines, false, SysTabHidden, SortKey), + gs:config(show_unreadable, [{data, hide_unreadable}]), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + false,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, hide_unreadable, _Args} when not UnreadHidden -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable, CurrNode, GridLines, true, SysTabHidden, SortKey), + gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}}, + {data, show_unreadable}]), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + true,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, show_info, _Args} -> + {Table, _Name, _Readable} = get_table_id(KindOfTable, element(3,MarkedCell), + Tables), + case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of + Children -> + {NewMarkedCell, NewTables, NewGridLines} = + refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {gs, _Id, click, sort_table_name, _Args} when SortKey =/= ?NAME_ELEM -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?NAME_ELEM), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,?NAME_ELEM,Children); + + + {gs, _Id, click, sort_table_id, _Args} when SortKey =/= ?ID_ELEM -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?ID_ELEM), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,?ID_ELEM,Children); + + + {gs, _Id, click, sort_owner_name, _Args} when SortKey =/= ?PROCNAME_ELEM -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden, + ?PROCNAME_ELEM), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,?PROCNAME_ELEM,Children); + + + {gs, _Id, click, sort_owner_pid, _Args} when SortKey =/= ?PID_ELEM -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?PID_ELEM), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,?PID_ELEM,Children); + + + {gs, _Id, click, trace_process, _Args} -> + OwnerPid = element(?PID_ELEM, lists:nth(element(3,MarkedCell), Tables)), + NewChildren = start_pman(OwnerPid, Children), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren); + + + {gs, _Id, click, help_button, _Args} -> + HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), + tool_utils:open_help(win, HelpFile), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, otp_help_button, _Args} -> + IndexFile = filename:join([code:root_dir(), "doc", "index.html"]), + tool_utils:open_help(win, IndexFile), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, win, configure, _Data, _Args} -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, exit_button, _Args} -> + lists:foreach( + fun({Pid,pman,_OP}) -> + exit(Pid,kill); + (_) -> + done + end, + Children), + exit(normal); + + + {gs, _Id, click, show_haiku, _Args} -> + gs:config(win, [{cursor,busy}]), + gs:config(show_haiku, [{data, hide_haiku}]), + lists:foreach( + fun({Pid,tv_info,_Data}) -> + Pid ! {error_msg_mode,haiku}; + ({Pid,tv_browser,_Data}) -> + Pid ! {error_msg_mode,haiku}; + ({Pid,tv_nodewin,_Data}) -> + Pid ! {error_msg_mode,haiku}; + ({Pid,tv_new_table,_Data}) -> + Pid ! {error_msg_mode,haiku}; + (_Other) -> + done + end, + Children), + put(error_msg_mode, haiku), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, _Id, click, hide_haiku, _Args} -> + gs:config(win, [{cursor,busy}]), + gs:config(show_haiku, [{data, show_haiku}]), + lists:foreach( + fun({Pid,tv_info,_Data}) -> + Pid ! {error_msg_mode,normal}; + ({Pid,tv_browser,_Data}) -> + Pid ! {error_msg_mode,normal}; + ({Pid,tv_nodewin,_Data}) -> + Pid ! {error_msg_mode,normal}; + ({Pid,tv_new_table,_Data}) -> + Pid ! {error_msg_mode,normal}; + (_Other) -> + done + end, + Children), + put(error_msg_mode, normal), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {gs, win, destroy, _Data, _Args} -> + lists:foreach( + fun({Pid,pman,_OP}) -> + exit(Pid,kill); + (_) -> + done + end, + Children), + exit(normal); + + + {gs, win, keypress, _Data, [Key, _, _, 1 | _]} -> + case lists:keysearch(Key, 1, Shortcuts) of + {value, {Key, Value}} -> + handle_keypress(Value,KindOfTable,CurrNode,MarkedCell, + GridLines,WinSize,Tables, Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + false -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children) + end; + + + {gs, win, keypress, _Data, _Args} -> + loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + + {tv_new_node, _Sender, NewCurrNode} -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,NewCurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), + update_tv_info(Children), + update_tv_browser(Children), + NewChildren = + case replace_node_name(NewCurrNode, CurrNode) of + false -> + Children; + true -> + update_node_name(Children) + end, + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,NewCurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren); + + + {tv_start_infowin, Table, Node, LocalNode, TableType} -> + case start_tv_info(Table, Node, LocalNode, TableType, Children) of + Children -> + {NewMarkedCell, NewTables, NewGridLines} = + refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, + UnreadHidden,SysTabHidden,SortKey, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + {tv_update_infowin, Table, Node, _Type} -> + case get_tv_info_pid(Table, Node, Children) of + undefined -> + done; + Pid -> + Pid ! #info_update_table_info{sender=self()} + end, + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, + Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + + + {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, _Readable, false} -> + case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options, + NewTabWinPid) of + error -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, + Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + _TabId -> + case KindOfTable of + mnesia -> + done; + ets -> + self() ! {gs, tv_main, click, update, []} + end, + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) + end; + + + + {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, Readable, true} -> + case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options, + NewTabWinPid) of + error -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, + Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + TabId -> + case start_tv_browser(TabId,Node,Name,KindOfTableToCreate,Readable,Children) of + Children -> + {FinalMarkedCell, NewTables, NewGridLines} = + case KindOfTable of + mnesia -> + {MarkedCell, Tables, GridLines}; + ets -> + refresh_window(MarkedCell,Tables,KindOfTable, + CurrNode,GridLines,UnreadHidden, + SysTabHidden,SortKey, Children) + end, + loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize, + NewTables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + NewChildren -> + case KindOfTable of + mnesia -> + done; + ets -> + self() ! {gs, tv_main, click, update, []} + end, + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren) + end + end; + + + + {'EXIT', Pid, _Reason} -> + case lists:keysearch(Pid, 1, Children) of + false -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, + Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + {value, {Pid,Prog,_Data}} -> + NewChildren = + case Prog of + tv_nodewin -> + lists:keydelete(Pid, 1, Children) ++ start_tv_nodewin(CurrNode); + _Other -> + lists:keydelete(Pid, 1, Children) + end, + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, + Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + + _Other -> + loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children) + end. + + +flush_msgs(Msg0 = {gs, Win, Op, _, _}) -> + receive Msg = {gs, Win,Op,_,_} -> + flush_msgs(Msg) + after 100 -> + Msg0 + end. + +handle_keypress(open_table,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + NewChildren = + case MarkedCell of + {undefined,_,_} -> + case get(error_msg_mode) of + normal -> + gs:config(win, [beep]), + tv_utils:notify(win, "TV Notification", "No table selected!"); + haiku -> + Msg = ["Rather than a beep", + "Or a rude error message", + "These words: make a choice."], + tv_utils:notify(win, "TV Notification", Msg) + end, + Children; + _OtherCell -> + {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell), + Tables), + start_tv_browser(Table, CurrNode, Name, KindOfTable, Readable, Children) + end, + case NewChildren of + Children -> + {NewMarkedCell, NewTables, NewGridLines} = + refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden, + SysTabHidden, SortKey, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + _Other -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + +handle_keypress(update,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTabs, NewGrLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), + update_tv_info(Children), + gs:config(win, [{cursor,arrow}]), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGrLines,WinSize,NewTabs,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + +handle_keypress(show_mnesia,ets,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + gs:config(label2, [{fg, ?DISABLED_COLOR}]), + gs:config(label3, [{fg, ?DISABLED_COLOR}]), + gs:config(label4, [{fg, ?DISABLED_COLOR}]), + gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}}, + {data, show_unreadable}]), + %% gs:config(show_unreadable, [{enable, false}, + %% {select, false}]), + gs:config(sort_table_id, [{enable, false}]), + NewSortKey = + case SortKey of + ?ID_ELEM -> + gs:config(sort_table_name, [{select,true}]), + ?NAME_ELEM; + _Other -> + SortKey + end, + {NewTables, NewGridLines} = + update_grid(mnesia,CurrNode,GridLines,UnreadHidden,SysTabHidden,NewSortKey), + gs:config(win, [{cursor,arrow}]), + loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,NewSortKey,Children); + + + +handle_keypress(show_ets,mnesia,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]), + gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]), + gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]), + {NewTables, NewGridLines} = + update_grid(ets,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), + %% gs:config(show_unreadable, [{enable, true}, + %% {select, not(UnreadHidden)}]), + gs:config(sort_table_id, [{enable, true}]), + gs:config(win, [{cursor,arrow}]), + loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + +handle_keypress(trace_process,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + NewChildren = + case MarkedCell of + {_Id, ?PID_COL, Row} -> + OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), + start_pman(OwnerPid, Children); + {_Id, ?PROCNAME_COL, Row} -> + OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), + start_pman(OwnerPid, Children); + _Other -> + Children + end, + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey, NewChildren); + + +handle_keypress(select_node,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + show_tv_nodewin(Children), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + + +handle_keypress(show_info,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + NewChildren = + case MarkedCell of + {_Id, ?NAME_COL, Row} -> + {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), + start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); + {_Id, ?ID_COL, Row} -> + {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), + start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); + {_Id, ?INFO_COL, Row} -> + {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), + start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); + _OtherCell -> + Children + end, + case NewChildren of + Children -> + {NewMarkedCell, NewTables, NewGridLines} = + refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden, + SysTabHidden, SortKey, Children), + loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, + Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); + _Other -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,NewChildren) + end; + + +handle_keypress(help_button,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), + tool_utils:open_help(win, HelpFile), + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children); + +handle_keypress(exit_button,_KindOfTable,_CurrNode,_MarkedCell,_GridLines, + _WinSize,_Tables,_Shortcuts,_UnreadHidden,_SysTabHidden,_SortKey,Children) -> + lists:foreach( + fun({Pid,pman,_OP}) -> + exit(Pid,kill); + (_) -> + done + end, + Children), + exit(normal); + + +handle_keypress(_Any,KindOfTable,CurrNode,MarkedCell,GridLines, + WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> + loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, + UnreadHidden,SysTabHidden,SortKey,Children). + + + + +refresh_window(MarkedCell,Tables,KindOfTable, + CurrNode,GridLines,UnreadHidden,SysTabHidden, SortKey, Children) -> + gs:config(win, [{cursor,busy}]), + NewMarkedCell = unmark_cell(MarkedCell, Tables), + {NewTables, NewGridLines} = + update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden, + SortKey), + update_tv_info(Children), + gs:config(win, [{cursor,arrow}]), + {NewMarkedCell, NewTables, NewGridLines}. + + + + + +get_table_id(mnesia, Row, Tables) -> + TabTuple = lists:nth(Row, Tables), + Readable = element(?READABLE_ELEM, TabTuple), + Id = element(?NAME_ELEM, TabTuple), + {Id, Id, Readable}; +get_table_id(ets, Row, Tables) -> + TabTuple = lists:nth(Row, Tables), + Readable = element(?READABLE_ELEM, TabTuple), + Name = element(?NAME_ELEM, TabTuple), + case element(?NAMED_TABLE_ELEM, TabTuple) of + false -> + {element(?ID_ELEM, TabTuple), Name, Readable}; + _Other -> + {Name, Name, Readable} + end. + + + +replace_node_name('nonode@nohost', 'nonode@nohost') -> + %% Still undistributed... + false; +replace_node_name(_Node, _OldNode) when node() =:= 'nonode@nohost' -> + %% No longer distributed, but previously was! + true; +replace_node_name(_Node, 'nonode@nohost') -> + %% The system has been distributed! + true; +replace_node_name(_Node, _OldNode) -> + false. + + + +update_node_name(Children) when node() =:= 'nonode@nohost' -> + %% We have been distributed, but no longer are! + %% We change all node names stored to 'nonode@nohost'! + %% This works because we *will* receive exit signals + %% for those processes that have died on other nodes, + %% whereupon these processes will be removed from the + %% 'Children' list. + lists:map(fun({Pid, Prog, {Table,_Node}}) -> + {Pid, Prog, {Table,'nonode@nohost'}}; + (H) -> + H + end, + Children); +update_node_name(Children) -> + %% We have become distributed! + %% Change all occurrences of 'nonode@nohost' + %% to the new current node name! + HomeNode = node(), + lists:map(fun({Pid, Prog, {Table,'nonode@nohost'}}) -> + {Pid, Prog, {Table,HomeNode}}; + (H) -> + H + end, + Children). + + + + +show_tv_nodewin(Children) -> + {value, {Pid,tv_nodewin,_Node}} = lists:keysearch(tv_nodewin, 2, Children), + Pid ! show_window. + + + +update_tv_info(Children) -> + Sender = self(), + lists:foreach(fun({Pid,tv_info,{_Table,_Node}}) -> + Pid ! #info_update_table_info{sender=Sender}; + (_) -> + done + end, + Children). + + + +update_tv_browser(Children) -> + lists:foreach(fun({Pid,tv_browser,{_Table,_Node}}) -> + Pid ! check_node; + (_) -> + done + end, + Children). + + + +get_tv_info_pid(TabId,Node,Children) -> + TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info], + case lists:keysearch({TabId,Node}, 3, TvInfoChildren) of + {value, {Pid, tv_info, {_Table,Node}}} -> + Pid; + _Other -> + undefined + end. + + + +start_tv_browser(Tab,Node,_Name,KindOfTable,false,Children) -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(win, "TV Notification", + ["The selected table is unreadable!", + "Only table information may be viewed!"]); + haiku -> + Msg = ["Table protected.", + "The answers that you're seeking", + "will remain unknown."], + tv_utils:notify(win, "TV Notification", Msg) + end, + start_tv_info(Tab, Node, Node =:= node(), KindOfTable, Children); +start_tv_browser(Table,Node,Name,KindOfTable,_Readable,Children) -> + TvBrowserChildren = [X || X <- Children, element(2,X) =:= tv_browser], + case lists:keysearch({Table,Node}, 3, TvBrowserChildren) of + {value, {BPid,tv_browser,{Table,Node}}} -> + BPid ! raise, + Children; + _Other -> + %% Check that table still exists! + case table_still_there(KindOfTable, Node, Node =:= node(), Table, Name) of + true -> + LocalNode = (Node =:= node()), + NewBPid = tv:start_browser(Node, LocalNode, Table, KindOfTable, Name, + get(error_msg_mode)), + [{NewBPid, tv_browser, {Table,Node}} | Children]; + _TableDead -> + gs:config(win, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(win, "TV Notification", + ["The table no longer exists!"]); + haiku -> + Msg = ["A table that big?", + "It might be very useful.", + "But now it is gone."], + tv_utils:notify(win, "TV Notification", Msg) + end, + Children + end + end. + + + + + +table_still_there(ets, Node, LocalNode, Table, Name) -> + case catch tv_ets_rpc:all(Node, LocalNode) of + Tables when is_list(Tables) -> + case lists:member(Table, Tables) of + true -> + true; + false -> %% May be a named table... + lists:keymember(Name, 1, Tables) + end; + Error -> + analyze_error(Error, Node, Table), + false + end; +table_still_there(mnesia, Node, LocalNode, Table, Name) -> + case catch tv_mnesia_rpc:system_info(Node, LocalNode, tables) of + Tables when is_list(Tables) -> + lists:member(Name, Tables); + Error -> + analyze_error(Error, Node, Table), + false + end. + + + + + + +start_tv_info(Table, Node, LocalNode, KindOfTable, Children) -> + TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info], + case lists:keysearch({Table,Node}, 3, TvInfoChildren) of + {value, {Pid,tv_info,{Table,Node}}} -> + Pid ! #info_raise_window{sender = self()}, + Children; + _Other -> + %% May have started a browser but no info window! + %% Info window may have been started from that browser, but + %% don't bother with checking *that*. + Pid = spawn_link(tv_info, info, [self(), Node, LocalNode, Table, KindOfTable, + get(error_msg_mode)]), + [{Pid, tv_info, {Table,Node}} | Children] + end. + + + + + +start_tv_new_table(CurrNode, Children) -> + TvNewTableChild = [X || X <- Children, element(2,X) =:= tv_new_table], + case TvNewTableChild of + [{Pid,tv_new_table,undefined}] -> + Pid ! raise, + Children; + [] -> + Pid = tv_new_table:start(CurrNode, get(error_msg_mode)), + [{Pid, tv_new_table, undefined} | Children] + end. + + + + +create_table(mnesia, _Node, _LocalNode, _TabName, _Options, _NewTabWinPid) -> + error; +create_table(ets, Node, LocalNode, TabName, Options, NewTabWinPid) -> + case tv_table_owner:create(ets, Node, LocalNode, TabName, Options) of + {ok, TabId} -> + NewTabWinPid ! ok, + TabId; + error -> + NewTabWinPid ! error, + error + end. + + + + +start_pman(OwnerPid, Children) -> + Pid = pman_shell:start(OwnerPid), + [{Pid,pman,OwnerPid} | Children]. + + + + +update_grid(TableType, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey) -> + NewTables = get_tables(CurrNode, TableType, UnreadHidden, SysTabHidden,SortKey), + TabStr = case TableType of + mnesia -> + "Mnesia "; + ets -> + "ETS " + end, + NodeStr = atom_to_list(CurrNode), + gs:config(win, [{title, "[TV] " ++ TabStr ++ "tables on " ++ NodeStr}]), + gs:config(grid, [{rows, {1, get_nof_rows(length(NewTables), gs:read(grid,height))}}]), + NewGridLines = update_gridlines(NewTables, GridLines, 1), + {NewTables, NewGridLines}. + + + +unmark_cell({undefined, AnyCol, AnyRow}, _Tables) -> + {undefined, AnyCol, AnyRow}; +unmark_cell({Id, Col, Row}, Tables) -> + disable_menus(), + TabTuple = lists:nth(Row, Tables), + ReadableTable = element(?READABLE_ELEM, TabTuple), + NamedTable = element(?NAMED_TABLE_ELEM, TabTuple), + BgColor = + case ReadableTable of + false -> + ?UNREADABLE_BG_COLOR; + _Other1 -> + ?READABLE_BG_COLOR + end, + + FgColor = + case NamedTable of + false when Col =:= ?NAME_COL -> + ?UNNAMED_FG_COLOR; + _Other2 -> + ?NORMAL_FG_COLOR + end, + + gs:config(Id, [{bg, {Col, BgColor}}, + {fg, {Col, FgColor}}]), + {undefined, undefined, undefined}. + + + + +mark_cell({Id,Col,Row}, {Id,Col,Row}, _Readable) -> + {undefined, undefined, undefined}; +mark_cell({Id,Col,Row}, _Any, Readable) -> + case lists:member(Col, ?POSSIBLE_MARK_COLS) of + true -> + enable_menus(Col, Readable), + gs:config(Id, [{bg, {Col, ?GRID_MARK_COLOR}}, + {fg, {Col, ?NORMAL_FG_COLOR}}]), + {Id, Col,Row}; + false -> + {undefined, undefined, undefined} + end. + + +disable_menus() -> + disable_open_menu(), + disable_trace_menu(), + disable_info_menu(). + + +enable_menus(?ID_COL, true) -> + enable_open_menu(), + enable_info_menu(); +enable_menus(?ID_COL, {notext}) -> + enable_open_menu(), + enable_info_menu(); +enable_menus(?ID_COL, false) -> + enable_info_menu(); +enable_menus(?NAME_COL, true) -> + enable_open_menu(), + enable_info_menu(); +enable_menus(?NAME_COL, {notext}) -> + enable_open_menu(), + enable_info_menu(); +enable_menus(?NAME_COL, false) -> + enable_info_menu(); +enable_menus(?PID_COL, _Any) -> + enable_trace_menu(); +enable_menus(?PROCNAME_COL, _Any) -> + enable_trace_menu(); +enable_menus(?INFO_COL, _Any) -> + enable_info_menu(); +enable_menus(_Col, _Any) -> + done. + + + +resize_window(Width, Height, NofElems) -> + WinWidth = lists:max([Width, ?MIN_WIN_WIDTH]), + WinHeight = lists:max([Height, ?MIN_WIN_HEIGHT]), + gs:config(win, [{width, WinWidth}, + {height, WinHeight} + ]), + {BgWidth, BgHeight, FgWidth, FgHeight} = get_frame_coords(WinWidth, WinHeight), + {GridWidth, GridHeight} = get_grid_coords(FgWidth, FgHeight), + ColWidths = get_col_widths(?COL_WIDTHS, GridWidth), + resize_header_labels(ColWidths, + [label1,label2,label3,label4,label5], + ?GRID_XPOS), + gs:config(bgframe, [{width, BgWidth}, + {height, BgHeight} + ]), + gs:config(fgframe, [{width, FgWidth}, + {height, FgHeight} + ]), + gs:config(grid, [{width, GridWidth}, + {height, GridHeight}, + {columnwidths, ColWidths}, + {rows, {1, get_nof_rows(NofElems, GridHeight)}} + ]), + {WinWidth, WinHeight}. + + + + +create_window(Tables) -> + gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, + {height, ?WIN_HEIGHT}, + {bg, ?DEFAULT_BG_COLOR}, + {title, "[TV] ETS tables on " ++ + atom_to_list(node())}, + {destroy, true}, + {configure, true}, + {keypress, true} + ]), + + ShortcutList = create_menus(), + + disable_menus(), + + {BgFrameWidth, BgFrameHeight, FgFrameWidth, FgFrameHeight} = + get_frame_coords(?WIN_WIDTH, ?WIN_HEIGHT), + + {GridWidth, GridHeight} = get_grid_coords(FgFrameWidth, FgFrameHeight), + + ColWidths = get_col_widths(?COL_WIDTHS, GridWidth), + + gs:frame(bgframe, win, [{width, BgFrameWidth}, + {height, BgFrameHeight}, + {x, ?GRID_XPOS}, + {y, ?GRID_YPOS}, + {bg, {0,0,0}} + ]), + gs:frame(fgframe, bgframe, [{width, FgFrameWidth}, + {height, FgFrameHeight}, + {x, 0}, + {y, 1}, + {bg, ?DEFAULT_BG_COLOR} + ]), + + + create_header_labels(ColWidths, ?HEADER_LABELS), + gs:grid(grid, fgframe, [{width, GridWidth}, + {height, GridHeight}, + {x, 0}, + {y, -1}, + {hscroll,bottom}, + {vscroll,right}, + {rows, {1, get_nof_rows(length(Tables), GridHeight)}}, + {columnwidths, ColWidths}, + {fg, ?NORMAL_FG_COLOR}, + {bg, {255,255,255}}, + {font, ?FONT} + ]), + GridLines = update_gridlines(Tables, [], 1), + {{undefined,undefined,undefined}, GridLines, {?WIN_WIDTH,?WIN_HEIGHT}, ShortcutList}. + + + + +get_frame_coords(WinWidth, WinHeight) -> + BgWidth = WinWidth - 2 * ?GRID_XPOS, + BgHeight = WinHeight - ?GRID_YPOS - ?GRID_XPOS, + FgWidth = BgWidth, + FgHeight = BgHeight - 1, + {BgWidth, BgHeight, FgWidth, FgHeight}. + + + + +get_grid_coords(ParentWidth, ParentHeight) -> + {ParentWidth, ParentHeight + 1}. + + + +get_col_widths(Cols, GridWidth) -> + SbWidth = 25, %% OK, OK, don't bother about it, this constant makes it work... :-/ + FixColWidthSum = lists:sum(lists:map(fun(H) -> + lists:nth(H, Cols) + end, + ?FIX_WIDTH_COLS)), + AvailableWidth = GridWidth - FixColWidthSum - SbWidth, + OriginalWidth = ?WIN_WIDTH - 2 * ?GRID_XPOS - FixColWidthSum - SbWidth, + get_col_widths(1, Cols, AvailableWidth, OriginalWidth). + + + +get_col_widths(N, [H | T], AvailWidth, OrigWidth) -> + NewColWidth = + case lists:member(N, ?FIX_WIDTH_COLS) of + true -> + H; + _Other -> + round(H * (AvailWidth / OrigWidth) + 0.1) + end, + [NewColWidth | get_col_widths(N + 1, T, AvailWidth, OrigWidth)]; +get_col_widths(_N, [], _AvailWidth, _OrigWidth) -> + []. + + + +create_header_labels(ColWidths, Text) -> + create_header_labels(ColWidths, Text, 1, ?GRID_XPOS). + + + +create_header_labels([W | T], [{Name, Text} | TextT], N, Xpos) -> + Ypos = ?GRID_YPOS - 20, + gs:label(Name, win, [{width, W + 1 - 3}, + {height, 20}, + {x, Xpos + 1 + 3}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, ?NORMAL_FG_COLOR}, + {font, ?HEADER_FONT}, + {align, w}, + {label, {text, Text}} + ]), + create_header_labels(T, TextT, N + 1, Xpos + 1 + W); +create_header_labels([], [], _N, _Xpos) -> + done. + + + +resize_header_labels([W | T], [Name | NT], Xpos) -> + gs:config(Name, [{width, W + 1 - 3}, + {x, Xpos + 1 + 3} + ]), + resize_header_labels(T, NT, Xpos + 1 + W); +resize_header_labels([], [], _Xpos) -> + done. + + + +disable_open_menu() -> + gs:config(open_table, [{enable,false}]). + + +disable_info_menu() -> + gs:config(show_info, [{enable,false}]). + +disable_trace_menu() -> + gs:config(trace_process, [{enable,false}]). + + +enable_open_menu() -> + gs:config(open_table, [{enable,true}]). + + +enable_info_menu() -> + gs:config(show_info, [{enable,true}]). + + +enable_trace_menu() -> + gs:config(trace_process, [{enable,true}]). + + +create_menus() -> + gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]), + + HelpButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, % firebrick + {label, {text, " Help "}}, + {underline, 1}, + {side, right} + ]), + FileButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, % firebrick + {label, {text, " File "}}, + {underline, 1}, + {side, left} + ]), + ViewButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, % firebrick + {label, {text, " View "}}, + {underline, 1}, + {side, left} + ]), + OptionsButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, % firebrick + {label, {text, " Options "}}, + {underline, 1}, + {side, left} + ]), + + HelpMenu = gs:menu(HelpButt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, + {disabledfg,?DISABLED_COLOR} + ]), + FileMenu = gs:menu(FileButt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, + {disabledfg,?DISABLED_COLOR} + ]), + + OptionsMenu = gs:menu(OptionsButt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, + {disabledfg,?DISABLED_COLOR} + ]), + + ViewMenu = gs:menu(ViewButt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, + {disabledfg,?DISABLED_COLOR} + ]), + + ShortCutList = + create_menulist([{" Help ",normal,help_button,1,h}, + separator, + {" OTP Documentation ",normal,otp_help_button,1,no_char}], HelpMenu) ++ + create_menulist([{" Open Table ",normal,open_table,1,o}, + {" New Table... ",normal,new_table,1,no_char}, + {" Table Info ",normal,show_info,7,i}, + separator, + {" Nodes... ",normal,select_node,1,n}, + separator, + {" Trace Process ",normal,trace_process,1,t}, + separator, + {" Exit ",normal, exit_button,2,x}], FileMenu) ++ + [{c,exit_button}, {'C',exit_button}] ++ + create_menulist([{" Refresh ",normal,update,1,r}, + separator, + {" Unreadable Tables ",check,show_unreadable,1,no_char}, + separator, + {" System Tables ",check,show_system,1,no_char}, + separator, + {" Sort by Name ",radio,sort_table_name,9,no_char}, + {" Sort by Id ",radio,sort_table_id,9,no_char}, + {" Sort by Owner PID ",radio,sort_owner_pid,15,no_char}, + {" Sort by Owner Name ",radio,sort_owner_name,9,no_char}, + separator, + {" Error Messages in Haiku ",check,show_haiku,1,no_char} + ], + OptionsMenu) ++ + create_menulist([{" ETS Tables ",radio,show_ets,1,e}, + {" Mnesia Tables ",radio,show_mnesia,1,m}], ViewMenu), + gs:config(show_unreadable, [{select,false}]), + gs:config(show_system, [{select,false}]), + gs:config(show_haiku, [{select,false}]), + %% Due to a bug (or some other reason), only one of the radiobuttons belonging + %% to a specified group can be selected, even if different processes have created + %% the radiobuttons! This means that, if we have started more than one tv_main + %% process, selecting one radiobutton will affect the radiobuttons in the other + %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to + %% create unique group names (i.e., atoms). + %% (We need to group the radiobuttons, since otherwise all created by one process + %% belongs to the same group, which also is undesirable...) + SelfStr = pid_to_list(self()), + SortGroup = list_to_atom("sorting" ++ SelfStr), + TypeGroup = list_to_atom("table_type" ++ SelfStr), + gs:config(sort_table_name, [{group,SortGroup},{select,true}]), + gs:config(sort_table_id, [{group,SortGroup}]), + gs:config(sort_owner_pid, [{group,SortGroup}]), + gs:config(sort_owner_name, [{group,SortGroup}]), + gs:config(show_ets, [{group,TypeGroup}, {select,true}]), + gs:config(show_mnesia, [{group,TypeGroup}]), + ShortCutList. + + + + + +create_menulist(List, Menu) -> + MaxLength = get_length_of_longest_menu_text(List, 0), + create_menulist(List, Menu, MaxLength). + + + + +create_menulist([], _Menu, _MaxLength) -> + []; +create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) -> + ShortcutCapitalChar = + if + ShortcutChar =:= no_char -> + no_char; + true -> + CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)), + CapitalCharValue = CharAsciiValue - ($a - $A), + list_to_atom([CapitalCharValue]) + end, + + FinalText = if + ShortcutChar =:= no_char -> + Text; + true -> + Text ++ lists:duplicate(MaxLength - length(Text), " ") ++ + " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " " + end, + gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?FIREBRICK}, + {itemtype, Type}, + {label, {text, FinalText}}, + {underline, AccCharPos}, + {data, Data} + ]), + [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)]; +create_menulist([separator | Rest], Menu, MaxLength) -> + gs:menuitem(Menu, [{itemtype, separator}]), + create_menulist(Rest, Menu, MaxLength). + + + + + + + +get_length_of_longest_menu_text([], MaxLength) -> + MaxLength; +get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) -> + L = length(Text), + if + L > CurrMax -> + get_length_of_longest_menu_text(Rest, L); + true -> + get_length_of_longest_menu_text(Rest, CurrMax) + end; +get_length_of_longest_menu_text([separator | Rest], CurrMax) -> + get_length_of_longest_menu_text(Rest, CurrMax). + + + + + + +get_nof_rows(NofElems, GridHeight) -> + lists:max([NofElems, round((GridHeight - 20) / 21) + 1]). + + + +config_gridline(LineId, TabTuple) -> + Readable = element(?READABLE_ELEM, TabTuple), + NamedTable = element(?NAMED_TABLE_ELEM, TabTuple), + {FgColor, BgColor} = + case Readable of + true -> + {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR}; + false -> + {?UNREADABLE_FG_COLOR, ?UNREADABLE_BG_COLOR}; + {notext} -> + {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR} + end, + + NameFgColor = + case NamedTable of + false -> + ?UNNAMED_FG_COLOR; + _Other -> + ?NORMAL_FG_COLOR + end, + + gs:config(LineId, [{bg, BgColor}, + {fg, FgColor}, + {fg, {?NAME_COL, NameFgColor}}, + {click, true}, + {doubleclick, true}, + {data, {grid,Readable}} | + + lists:map( + fun({Elem,Col}) -> + case element(Elem, TabTuple) of + {notext} -> + {text, {Col, ""}}; + Other when Elem =:= ?NAME_ELEM -> + case NamedTable of + false -> + {text, {Col, " " ++ + lists:flatten( + io_lib:write( + Other)) ++ " "}}; + _AnyOther -> + {text, {Col, " " ++ lists:flatten( + io_lib:write( + Other))}} + end; + Other -> + {text, {Col, " " ++ lists:flatten( + io_lib:write( + Other))}} + end + end, + [{?NAME_ELEM, ?NAME_COL}, + {?ID_ELEM, ?ID_COL}, + {?PID_ELEM, ?PID_COL}, + {?PROCNAME_ELEM, ?PROCNAME_COL}, + {?INFO_ELEM, ?INFO_COL}] + ) + ]). + + + + + +update_gridlines([TabTuple | TT], [LineId | GT], CurrRow) -> + config_gridline(LineId, TabTuple), + [LineId | update_gridlines(TT, GT, CurrRow + 1)]; +update_gridlines([TabTuple | TT], [], CurrRow) -> + LineId = gs:gridline(grid, [{row, CurrRow}]), + config_gridline(LineId, TabTuple), + [LineId | update_gridlines(TT, [], CurrRow + 1)]; +update_gridlines([], [LineId | GT], _CurrRow) -> + gs:destroy(LineId), + update_gridlines([], GT, _CurrRow); +update_gridlines([], [], _CurrRow) -> + []. + + + + + + + + + diff --git a/lib/tv/src/tv_main.hrl b/lib/tv/src/tv_main.hrl new file mode 100644 index 0000000000..28329ca83c --- /dev/null +++ b/lib/tv/src/tv_main.hrl @@ -0,0 +1,286 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% + +-define(ERROR_MSG_MODE, normal). + +-define(WIN_WIDTH, 745). % 779 +-define(WIN_HEIGHT, 380). +-define(MIN_WIN_WIDTH, 524). +-define(MIN_WIN_HEIGHT, 150). + +-define(FONT, {screen, 12}). +-define(HEADER_FONT, {screen, [bold,italic], 12}). + +-define(GRID_XPOS, 3). +-define(GRID_YPOS, 68). + + +%% Unreadable tables are indicated by the background color. +%% Unnamed tables are indicated by the foreground color. + +-define(NORMAL_FG_COLOR, {0,0,0}). +-define(READABLE_BG_COLOR, {255,255,255}). +-define(UNREADABLE_FG_COLOR, ?NORMAL_FG_COLOR). +-define(UNREADABLE_BG_COLOR, {240,240,240}). +%-define(UNREADABLE_BG_COLOR, {255,250,230}). +%-define(UNREADABLE_BG_COLOR, {242,242,242}). +-define(UNNAMED_FG_COLOR, {175,175,175}). +%-define(UNNAMED_FG_COLOR, {140,35,35}). + + +-define(DISABLED_COLOR, {160,160,160}). + +-define(NAME_ELEM, 1). +-define(NAMED_TABLE_ELEM, 2). +-define(ID_ELEM, 3). +-define(READABLE_ELEM, 4). +-define(PID_ELEM, 5). +-define(PROCNAME_ELEM, 6). +-define(INFO_ELEM, 7). + +-define(NAME_COL, 1). +-define(ID_COL, 2). +-define(PID_COL, 3). +-define(PROCNAME_COL, 4). +-define(INFO_COL, 5). + +-define(POSSIBLE_MARK_COLS, [?NAME_COL, ?ID_COL, ?PID_COL, ?PROCNAME_COL, ?INFO_COL]). +-define(COL_WIDTHS, [205,131,91,197,90]). % [140,95,125,75,85,140,90]). +-define(FIX_WIDTH_COLS, [2,3,5]). + + +-define(HEADER_LABELS, [{label1, " Table Name"}, + % {label2, " Named Table"}, + {label2, " Table Id"}, + % {label4, " Readable"}, + {label3, " Owner Pid"}, + {label4, " Owner Name"}, + {label5, " Table Size"} + ]). + + + +%% TABLES_TO_HIDE shall contain both Mnesia and ETS tables that we want to hide. :-) + +-define(SYSTEM_TABLES, [ac_tab, + asn1, + cdv_dump_index_table, + cdv_menu_table, + cdv_decode_heap_table, + cell_id, + cell_pos, + clist, + cover_internal_data_table, + cover_collected_remote_data_table, + cover_binary_code_table, + code, + code_names, + cookies, + corba_policy, + corba_policy_associations, + dets, + dets_owners, + dets_registry, + disk_log_names, + disk_log_pids, + eprof, + erl_atom_cache, + erl_epmd_nodes, + etop_accum_tab, + etop_tr, + ets_coverage_data, + file_io_servers, + global, + global_locks, + global_names, + global_names_ext, + gs_mapping, + gs_names, + gstk_db, + gstk_grid_cellid, + gstk_grid_cellpos, + gstk_grid_id, + gvar, + httpd, + id, + ig, + ign_req_index, + ign_requests, + index, + inet_cache, + inet_db, + inet_hosts, + 'InitialReferences', + int_db, + interpreter_includedirs_macros, + ir_WstringDef, + lmcounter, + locks, + mnemosyne_tmp, + pg2_table, + queue, + snmp_agent_table, + snmp_local_db2, + snmp_mib_data, + snmp_note_store, + snmp_symbolic_ets, + sticky, + sys_dist, + tid_locks, + tkFun, + tkLink, + tkPriv, + ttb, + ttb_history_table, + udp_fds, + udp_pids + ]). + + +-define(MNESIA_TABLES, [alarm, + alarmTable, + evaLogDiscriminatorTable, + eva_snmp_map, + eventTable, + group, + imprec, + ir_AliasDef, + ir_ArrayDef, + ir_AttributeDef, + ir_ConstantDef, + ir_Contained, + ir_Container, + ir_EnumDef, + ir_ExceptionDef, + ir_IDLType, + ir_IRObject, + ir_InterfaceDef, + ir_ModuleDef, + ir_ORB, + ir_OperationDef, + ir_PrimitiveDef, + ir_Repository, + ir_SequenceDef, + ir_StringDef, + ir_StructDef, + ir_TypedefDef, + ir_UnionDef, + logTable, + logTransferTable, + mesh_meas, + mesh_type, + mnesia_clist, + mnesia_decision, + mnesia_transient_decision, + orber_CosNaming, + orber_objkeys, + schema, + user + ]). + + +-define(UNREADABLE_MNESIA_TABLES, [schema]). + + +-define(SYSTEM_OWNERS, [alarm_handler, + application_controller, + auth, + coast_server, + code_server, + cover_server_001, + dbg, + dets, + dets_sup, + disk_log_server, + disk_log_sup, + erl_epmd, + erl_prim_loader, + error_logger, + eva_log_sup, + eva_server, + eva_sup, + file_server, + file_server_2, + global_group, + global_group_check, + global_name_server, + gs_frontend, + heart, + help_main, + inet_db, + inet_gethost_native, + init, + int_db, + interpret, + jive_server, + kernel_safe_sup, + kernel_sup, + log_server, + mandel_server, + mesh_sup, + mesh_server, + mnesia_checkpoint_sup, + mnesia_dumper, + mnesia_event, + mnesia_fallback, + mnesia_init, + mnesia_kernel_sup, + mnesia_late_loader, + mnesia_locker, + mnesia_monitor, + mnesia_recover, + mnesia_snmp_sup, + mnesia_subscr, + mnesia_sup, + mnesia_tm, + net_kernel, + net_sup, + overload, + perfmon_sampler, + pxw_server, + release_handler, + %% rex, %% Otherwise we won't see tables we've created on other nodes! + rsh_starter, + sasl_safe_sup, + sasl_sup, + snmp_agent_sup, + snmp_local_db, + snmp_master_agent, + snmp_misc_sup, + snmp_note_store, + snmp_supervisor, + snmp_symbolic_store, + socket, + sounder, + ssl_socket, + take_over_monitor, + timer_server, + tk, + udp_server, + user, + winshell_controller, + xerl_copy, + xerl_monitor + ]). + + + + + + + diff --git a/lib/tv/src/tv_mnesia_rpc.erl b/lib/tv/src/tv_mnesia_rpc.erl new file mode 100644 index 0000000000..a2385714ec --- /dev/null +++ b/lib/tv/src/tv_mnesia_rpc.erl @@ -0,0 +1,104 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_mnesia_rpc). + + + +-export([system_info/3, + table_info/4, + transaction/3 + ]). + + + + + + +system_info(_Node, true, Key) -> + chk(catch mnesia:system_info(Key)); +system_info(Node, false, Key) -> + chk(catch rpc:block_call(Node, mnesia, system_info, [Key])). + + + + +table_info(_Node, true, Tab, Item) -> + chk(catch mnesia:table_info(Tab, Item)); +table_info(Node, false, Tab, Item) -> + chk(catch rpc:block_call(Node, mnesia, table_info, [Tab, Item])). + + + + +transaction(_Node, true, Fun) -> + chk(catch mnesia:transaction(Fun)); +transaction(Node, false, Fun) -> + chk(catch rpc:block_call(Node, mnesia, transaction, [Fun])). + + + + +chk(Result) -> + case Result of + _Anything when is_list(Result) -> + Result; + _Anything when is_atom(Result) -> + Result; + _Anything when is_integer(Result) -> + Result; + _Anything when is_pid(Result) -> + Result; + + {aborted, {bad_type, _Rec}} -> + throw(bad_format); + + {badrpc,nodedown} -> + throw(nodedown); + {'EXIT', nodedown} -> + throw(nodedown); + + {'EXIT', {aborted, {no_exists, _Table, _Arg}}} -> + throw(no_table); + + {'EXIT', {aborted, {node_not_running, _Node}}} -> + throw(mnesia_not_started); + {'EXIT', {{badarg, {gen, set_monitor_mode, _Data}}, _Info}} -> + throw(mnesia_not_started); + {'EXIT', {'EXIT', {aborted, {node_not_running,_Node}}}} -> + throw(mnesia_not_started); + {badrpc, {'EXIT', {aborted, {node_not_running,_Node}}}} -> + throw(mnesia_not_started); + {badrpc, {'EXIT', {aborted, {no_exists,_Table,_Args}}}} -> + throw(mnesia_not_started); + {badrpc, _Reason} -> + throw(mnesia_not_started); + {'EXIT', {undef, {mnesia,_Fcn,_Args}}} -> + throw(mnesia_not_started); + + {'EXIT', Reason} -> + throw({unexpected_error, Reason}); + + Other when is_tuple(Other) -> + %% For example wild_pattern requests return a tuple! + Other; + + Other -> + io:format("Unexpected return value: ~p~n", [Other]) + end. + + diff --git a/lib/tv/src/tv_new_table.erl b/lib/tv/src/tv_new_table.erl new file mode 100644 index 0000000000..3d62b0548b --- /dev/null +++ b/lib/tv/src/tv_new_table.erl @@ -0,0 +1,656 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd%k +-module(tv_new_table). + + + +-export([start/2, + init/3 + ]). + + + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). +-define(FONT, {screen, 12}). + +-define(WIN_WIDTH, 400). +-define(WIN_HEIGHT, 555). %% 510 + +-define(FRAME_WIDTH, 400). +-define(FRAME1_HEIGHT, 170). +-define(FRAME2_HEIGHT, 260). +-define(FRAME3_HEIGHT, 125). %% 80 +-define(BW, 2). + +-define(FRAME_X, 0). +-define(FRAME1_Y, 0). +-define(FRAME2_Y, 170). +-define(FRAME3_Y, 430). + + +-define(LBL_HEIGHT, 30). +-define(NODE_LBL_WIDTH, 45). +-define(NAME_LBL_WIDTH, 85). +-define(TYPE_LBL_WIDTH, 45). +-define(PROT_LBL_WIDTH, 85). +-define(KEYPOS_LBL_WIDTH, 95). + +-define(LBL_X, 10). +-define(NODE_LBL_Y, 20). +-define(NAME_LBL_Y, 80). +-define(TYPE_LBL_Y, 10). +-define(PROT_LBL_Y, 100). +-define(KEYPOS_LBL_Y, 200). + + +-define(ENTRY_HEIGHT, 30). +-define(NODE_ENTRY_WIDTH, 275). +-define(NAME_ENTRY_WIDTH, 275). +-define(KEYPOS_ENTRY_WIDTH, 50). + +-define(ENTRY_X1, 110). +-define(ENTRY_X2, 110). +-define(NODE_ENTRY_Y, 20). +-define(NAME_ENTRY_Y, 80). +-define(KEYPOS_ENTRY_Y, 200). + +-define(RBTN_HEIGHT, 30). +-define(RBTN_WIDTH1, 105). +-define(RBTN_WIDTH2, 115). + +-define(RBTN_X1, 60). +-define(RBTN_X2, 165). +-define(RBTN_X3, 270). +-define(RBTN_Y1, 40). +-define(RBTN_Y1PLUS, 70). +-define(RBTN_Y2, 130). + + +-define(CBTN_HEIGHT, 30). +-define(NAMED_TABLE_CBTN_WIDTH, 100). +-define(OPEN_BROWSER_CBTN_WIDTH, 105). + +-define(NAMED_TABLE_CBTN_X, 110). +-define(NAMED_TABLE_CBTN_Y, 120). + +-define(OPEN_BROWSER_CBTN_X, 85). %% 215 +-define(OPEN_BROWSER_CBTN_Y, 10). %% 200 + + +-define(BTN_WIDTH, 100). +-define(BTN_HEIGHT, 30). + +-define(BTN_X1, 85). +-define(BTN_X2, 225). +-define(BTN_Y, 65). %% 30 + + +-define(VLINE_LBL_WIDTH, (380 - 2 * ?BW)). +-define(VLINE_LBL_HEIGHT, 1). +-define(HLINE_LBL_WIDTH, 1). +-define(HLINE_LBL_HEIGHT, 70). + +-define(VLINE_LBL_X, (10 - ?BW)). +-define(VLINE_LBL_Y1, 85). +-define(VLINE_LBL_Y2, 180). +-define(HLINE_LBL_X, 188). +-define(HLINE_LBL_Y, 180). + + +-define(DEFAULT_NAME, my_table). +-define(DEFAULT_TYPE, set). +-define(DEFAULT_PROT, public). +-define(DEFAULT_KEYPOS, 1). + + + + +start(Node, ErrMsgMode) -> + spawn_link(?MODULE, init, [Node, ErrMsgMode, self()]). + + + + + +init(Node, ErrMsgMode, MPid) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrMsgMode), + create_window(Node), + loop(false, ?DEFAULT_TYPE, ?DEFAULT_PROT, true, MPid). + + + + + +loop(NamedTab, Type, Prot, OpenBrowser, MPid) -> + receive + + {gs, ok, click, _Data, _Args} -> + gs:config(win, [{cursor, busy}]), + case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of + ok -> + exit(normal); + error -> + gs:config(win, [{cursor, arrow}]), + loop(NamedTab, Type, Prot, OpenBrowser, MPid) + end; + + + {gs, cancel, click, _Data, _Args} -> + exit(normal); + + + {gs, set, click, _Data, _Args} -> + loop(NamedTab, set, Prot, OpenBrowser, MPid); + + + {gs, ordered_set, click, _Data, _Args} -> + loop(NamedTab, ordered_set, Prot, OpenBrowser, MPid); + + + {gs, bag, click, _Data, _Args} -> + loop(NamedTab, bag, Prot, OpenBrowser, MPid); + + + {gs, duplicate_bag, click, _Data, _Args} -> + loop(NamedTab, duplicate_bag, Prot, OpenBrowser, MPid); + + + {gs, public, click, _Data, _Args} -> + gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]), + loop(NamedTab, Type, public, OpenBrowser, MPid); + + + {gs, protected, click, _Data, _Args} -> + gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]), + loop(NamedTab, Type, protected, OpenBrowser, MPid); + + + {gs, private, click, _Data, _Args} -> + gs:config(open_browser, [{select, false}, {enable, false}]), + loop(NamedTab, Type, private, OpenBrowser, MPid); + + + {gs, named_table, click, Data, _Args} -> + gs:config(named_table, [{data, not(Data)}]), + loop(Data, Type, Prot, OpenBrowser, MPid); + + + {gs, open_browser, click, Data, _Args} -> + gs:config(open_browser, [{data, not(Data)}]), + loop(Data, Type, Prot, Data, MPid); + + + {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} -> + case get_entry_term(EntryId) of + {ok, _Term} -> + gs:config(next_entry(EntryId, forward), [{setfocus, true}, + {select, {0, 100000000}}]); + error -> + done + end, + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} -> + case get_entry_term(EntryId) of + {ok, _Term} -> + gs:config(next_entry(EntryId, backward), [{setfocus, true}, + {select, {0, 100000000}}]); + error -> + done + end, + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {gs, EntryId, keypress, _Data, ['Down' | _T]} -> + case get_entry_term(EntryId) of + {ok, _Term} -> + gs:config(next_entry(EntryId, forward), [{setfocus, true}, + {select, {0, 100000000}}]); + error -> + done + end, + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {gs, EntryId, keypress, _Data, ['Up' | _T]} -> + case get_entry_term(EntryId) of + {ok, _Term} -> + gs:config(next_entry(EntryId, backward), [{setfocus, true}, + {select, {0, 100000000}}]); + error -> + done + end, + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {gs, _EntryId, keypress, _Data, ['Return' | _T]} -> + gs:config(win, [{cursor, busy}]), + case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of + ok -> + exit(normal); + error -> + gs:config(win, [{cursor, arrow}]), + loop(NamedTab, Type, Prot, OpenBrowser, MPid) + end; + + + {gs, win, configure, _Data, _Args} -> + gs:config(win, [{width, ?WIN_WIDTH}, + {height, ?WIN_HEIGHT}]), + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {gs, win, destroy, _Data, _Args} -> + exit(normal); + + + raise -> + gs:config(win, [raise]), + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {error_msg_mode, ErrMsgMode} -> + put(error_msg_mode, ErrMsgMode), + loop(NamedTab, Type, Prot, OpenBrowser, MPid); + + + {'EXIT', _Pid, _Reason} -> + exit(normal); + + + _Other -> + loop(NamedTab, Type, Prot, OpenBrowser, MPid) + + end. + + + + +create_table(NamedTab, Type, Prot, OpenBrowser, MPid) -> + case get_entry_term(node_entry) of + error -> + error; + {ok, Node} -> + case get_entry_term(name_entry) of + error -> + error; + {ok, TabName} -> + case get_entry_term(keypos_entry) of + error -> + error; + {ok, KeyPos} -> + Options = + [Type, Prot, {keypos, KeyPos}] ++ + case NamedTab of + true -> + [named_table]; + false -> + [] + end, + {Readable, NewOpenBrowser} = + case Prot of + private -> + {false, false}; + _Other -> + {true, OpenBrowser} + end, + MPid ! {tv_new_table, self(), Node, TabName, Options, ets, + Readable, NewOpenBrowser}, + receive + ok -> + ok; + error -> + show_error_msg(), + error + after + 5000 -> + show_error_msg(), + error + end + end + end + end. + + + + + +show_error_msg() -> + Msg = + case get(error_msg_mode) of + normal -> + ["Couldn't create a table using", + "the specified settings!"]; + haiku -> + ["The table you want", + "Could maybe be created.", + "But I don't know how."] + end, + tv_utils:notify(win, "TV Notification", Msg). + + + + + + + +get_entry_term(Id) -> + EditedStr = gs:read(Id, text), + case tv_db_search:string_to_term(EditedStr) of + {ok, NewTerm} when Id =:= node_entry, is_atom(NewTerm) -> + {ok,NewTerm}; + {ok, NewTerm} when Id =:= name_entry, is_atom(NewTerm) -> + {ok,NewTerm}; + {ok, NewTerm} when Id =:= keypos_entry, is_integer(NewTerm), NewTerm > 0 -> + {ok,NewTerm}; + _Other -> + NewMsg = + case get(error_msg_mode) of + normal -> + case Id of + node_entry -> + ["Please enter a valid node name!"]; + name_entry -> + ["Please enter a valid table name!"]; + keypos_entry -> + ["Please enter a valid key position!"] + end; + haiku -> + E1 = "Aborted effort", + L = + case Id of + node_entry -> + ["Reflect, repent and retype:", + "Enter valid node."]; + name_entry -> + ["Reflect, repent and retype:", + "Enter valid name."]; + keypos_entry -> + ["Reflect, repent and retype", + "Key position, please."] + end, + [E1 | L] + end, + gs:config(Id, [beep, {select, {0, 100000000}}, {setfocus, true}]), + tv_utils:notify(win, "TV Notification", NewMsg), + error + end. + + + + + +next_entry(node_entry, forward) -> + name_entry; +next_entry(node_entry, backward) -> + keypos_entry; +next_entry(name_entry, forward) -> + keypos_entry; +next_entry(name_entry, backward) -> + node_entry; +next_entry(keypos_entry, forward) -> + node_entry; +next_entry(keypos_entry, backward) -> + name_entry. + + + + +create_window(Node) -> + gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, + {height, ?WIN_HEIGHT}, + {bg, ?DEFAULT_BG_COLOR}, + {title, "[TV] Create New ETS Table"}, + {configure, true}, + {destroy, true}, + {cursor, arrow} + ]), + + gs:frame(frame1, win, [{width, ?FRAME_WIDTH}, + {height, ?FRAME1_HEIGHT}, + {x, ?FRAME_X}, + {y, ?FRAME1_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, ?BW}]), + gs:frame(frame2, win, [{width, ?FRAME_WIDTH}, + {height, ?FRAME2_HEIGHT}, + {x, ?FRAME_X}, + {y, ?FRAME2_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, ?BW}]), + gs:frame(frame3, win, [{width, ?FRAME_WIDTH}, + {height, ?FRAME3_HEIGHT}, + {x, ?FRAME_X}, + {y, ?FRAME3_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {bw, ?BW}]), + + gs:label(frame1, [{width, ?NODE_LBL_WIDTH}, + {height, ?LBL_HEIGHT}, + {x, ?LBL_X}, + {y, ?NODE_LBL_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align, w}, + {font, ?FONT}, + {label, {text, "Node:"}} + ]), + gs:label(frame1, [{width, ?NAME_LBL_WIDTH}, + {height, ?LBL_HEIGHT}, + {x, ?LBL_X}, + {y, ?NAME_LBL_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align, w}, + {font, ?FONT}, + {label, {text, "Table name:"}} + ]), + gs:label(frame2, [{width, ?TYPE_LBL_WIDTH}, + {height, ?LBL_HEIGHT}, + {x, ?LBL_X}, + {y, ?TYPE_LBL_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align, w}, + {font, ?FONT}, + {label, {text, "Type:"}} + ]), + gs:label(frame2, [{width, ?PROT_LBL_WIDTH}, + {height, ?LBL_HEIGHT}, + {x, ?LBL_X}, + {y, ?PROT_LBL_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align, w}, + {font, ?FONT}, + {label, {text, "Protection:"}} + ]), + gs:label(frame2, [{width, ?KEYPOS_LBL_WIDTH}, + {height, ?LBL_HEIGHT}, + {x, ?LBL_X}, + {y, ?KEYPOS_LBL_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align, w}, + {font, ?FONT}, + {label, {text, "Key position:"}} + ]), + + gs:entry(node_entry, frame1, [{width, ?NODE_ENTRY_WIDTH}, + {height, ?ENTRY_HEIGHT}, + {x, ?ENTRY_X1}, + {y, ?NODE_ENTRY_Y}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {font, ?FONT}, + {enable, true}, + {text, "'" ++ atom_to_list(Node) ++ "'"}, + {keypress, true} + ]), + gs:entry(name_entry, frame1, [{width, ?NAME_ENTRY_WIDTH}, + {height, ?ENTRY_HEIGHT}, + {x, ?ENTRY_X1}, + {y, ?NAME_ENTRY_Y}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {font, ?FONT}, + {enable, true}, + {text, atom_to_list(?DEFAULT_NAME)}, + {keypress, true}, + {setfocus, true}, + {select, {0,100000000}} + ]), + gs:entry(keypos_entry, frame2, [{width, ?KEYPOS_ENTRY_WIDTH}, + {height, ?ENTRY_HEIGHT}, + {x, ?ENTRY_X2}, + {y, ?KEYPOS_ENTRY_Y}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {font, ?FONT}, + {enable, true}, + {keypress, true}, + {text, integer_to_list(?DEFAULT_KEYPOS)} + ]), + + gs:radiobutton(set, frame2, [{width, ?RBTN_WIDTH1}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X1}, + {y, ?RBTN_Y1}, + {align, w}, + {label, {text, "set"}}, + {group, type} + ]), + gs:radiobutton(ordered_set, frame2, [{width, ?RBTN_WIDTH1}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X2}, + {y, ?RBTN_Y1}, + {align, w}, + {label, {text, "ordered_set"}}, + {group, type} + ]), + gs:radiobutton(bag, frame2, [{width, ?RBTN_WIDTH1}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X1}, + {y, ?RBTN_Y1PLUS}, + {align, w}, + {label, {text, "bag"}}, + {group, type} + ]), + gs:radiobutton(duplicate_bag, frame2, [{width, ?RBTN_WIDTH2}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X2}, + {y, ?RBTN_Y1PLUS}, + {align, w}, + {label, {text, "duplicate_bag"}}, + {group, type} + ]), + + gs:radiobutton(public, frame2, [{width, ?RBTN_WIDTH1}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X1}, + {y, ?RBTN_Y2}, + {align, w}, + {label, {text, "public"}}, + {group, protection} + ]), + gs:radiobutton(protected, frame2, [{width, ?RBTN_WIDTH1}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X2}, + {y, ?RBTN_Y2}, + {align, w}, + {label, {text, "protected"}}, + {group, protection} + ]), + gs:radiobutton(private, frame2, [{width, ?RBTN_WIDTH2}, + {height, ?RBTN_HEIGHT}, + {x, ?RBTN_X3}, + {y, ?RBTN_Y2}, + {align, w}, + {label, {text, "private"}}, + {group, protection} + ]), + + gs:checkbutton(named_table, frame1, [{width, ?NAMED_TABLE_CBTN_WIDTH}, + {height, ?CBTN_HEIGHT}, + {x, ?NAMED_TABLE_CBTN_X}, + {y, ?NAMED_TABLE_CBTN_Y}, + {align, w}, + {label, {text, "Named table"}}, + {select, false}, + {data, true} + ]), + + gs:checkbutton(open_browser, frame3, [{width, ?OPEN_BROWSER_CBTN_WIDTH}, + {height, ?CBTN_HEIGHT}, + {x, ?OPEN_BROWSER_CBTN_X}, + {y, ?OPEN_BROWSER_CBTN_Y}, + {align, w}, + {label, {text, "Open browser"}}, + {select, true}, + {data, false} + ]), + +%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH}, +%% {height, ?VLINE_LBL_HEIGHT}, +%% {x, ?VLINE_LBL_X}, +%% {y, ?VLINE_LBL_Y1}, +%% {bg, {0,0,0}} +%% ]), +%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH}, +%% {height, ?VLINE_LBL_HEIGHT}, +%% {x, ?VLINE_LBL_X}, +%% {y, ?VLINE_LBL_Y2}, +%% {bg, {0,0,0}} +%% ]), +%% gs:label(frame2, [{width, ?HLINE_LBL_WIDTH}, +%% {height, ?HLINE_LBL_HEIGHT}, +%% {x, ?HLINE_LBL_X}, +%% {y, ?HLINE_LBL_Y}, +%% {bg, {0,0,0}} +%% ]), +%% + gs:button(ok, frame3, [{width, ?BTN_WIDTH}, + {height, ?BTN_HEIGHT}, + {x, ?BTN_X1}, + {y, ?BTN_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {label, {text, "OK"}} + ]), + gs:button(cancel, frame3, [{width, ?BTN_WIDTH}, + {height, ?BTN_HEIGHT}, + {x, ?BTN_X2}, + {y, ?BTN_Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {label, {text, "Cancel"}} + ]), + + gs:config(?DEFAULT_TYPE, [{select, true}]), + gs:config(?DEFAULT_PROT, [{select, true}]), + + gs:config(win, [{map, true}]). + + + + + + + diff --git a/lib/tv/src/tv_nodewin.erl b/lib/tv/src/tv_nodewin.erl new file mode 100644 index 0000000000..3999d201d8 --- /dev/null +++ b/lib/tv/src/tv_nodewin.erl @@ -0,0 +1,403 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_nodewin). + + + +-export([start/2, init/3]). + + +-include("tv_int_msg.hrl"). + + + +-define(WINDOW_WIDTH, 230). +-define(WINDOW_HEIGHT, 260). +-define(DEFAULT_BG_COLOR, {217,217,217}). +-define(POLL_INTERVAL, 5000). + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +start(CurrNode, ErrMsgMode) -> + spawn_link(?MODULE, init, [self(), CurrNode, ErrMsgMode]). + + + + + +init(Pid, CurrNode, ErrMsgMode) -> + process_flag(trap_exit, true), + net_kernel:monitor_nodes(true), + put(error_msg_mode, ErrMsgMode), + gs:start(), + NewCurrNode = update_node_listbox(CurrNode, false), + tell_master(NewCurrNode, CurrNode, Pid), + loop(Pid, NewCurrNode, node(), false). + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + +init_window(CurrNode, Pid) -> + create_window(), + NewCurrNode = update_node_listbox(CurrNode, true), + tell_master(NewCurrNode, CurrNode, Pid), + gs:config(win, [{map,true}]), + NewCurrNode. + + + + +handle_error(nodedown) -> + gs:window(errorwin, gs:start(), []), + gs:config(errorwin, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(errorwin, "TV Notification", ["The selected node is down!"]); + haiku -> + Msg = ["With searching comes loss", + "And the presence of absence:", + "Node is down."], + tv_utils:notify(errorwin, "TV Notification", Msg) + end, + gs:destroy(errorwin); +handle_error(distributed) -> + gs:window(errorwin, gs:start(), []), + gs:config(errorwin, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(errorwin, "TV Notification", + ["The system has become distributed!"]); + haiku -> + Msg = [], + tv_utils:notify(errorwin, "TV Notification", Msg) + end, + gs:destroy(errorwin); +handle_error(undistributed) -> + gs:window(errorwin, gs:start(), []), + gs:config(errorwin, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(errorwin, "TV Notification", + ["The system is no longer distributed!"]); + haiku -> + Msg = ["The system you see", + "Is not a distributed", + "system anymore."], + tv_utils:notify(errorwin, "TV Notification", Msg) + end, + gs:destroy(errorwin). + +get_node_lists(CurrNode) -> + NodeDataList = lists:sort([node() | nodes()]), + NodeTextList = lists:map(fun(Item) -> + " " ++ atom_to_list(Item) + end, + NodeDataList), + + %% It *may* be possible that CurrNode has disappeared! + %% If this is the case, use the node where TV resides + %% as new current node. + %% This also covers the case when our own node (or some + %% other node) suddenly goes distributed. + + NewCurrNode = case lists:member(CurrNode, NodeDataList) of + true -> + CurrNode; + false -> + node() + end, + + %% Now get the index that shall be marked in the node listbox. + %% Remember that the first item has number 0 (zero)! + NodeMarkIndex = get_node_mark_index(NewCurrNode, NodeDataList, 0), + + {NewCurrNode, NodeDataList, NodeTextList, NodeMarkIndex}. + + + + +%% We know that CurrNode is *somewhere* in the list, since we have checked. +%% If the original CurrNode wasn't there, then we are using node() instead, +%% which definitely is in the list. (node() may have gone distributed in the +%% meantime, but it *IS* in the list!) :-) + +get_node_mark_index(CurrNode, [H | T], Acc) when CurrNode =/= H -> + get_node_mark_index(CurrNode, T, Acc + 1); +get_node_mark_index(CurrNode, [CurrNode | _], Acc) -> + Acc. %% Acc tells the index of the current head. :-) + + + + + +check_selected_node('nonode@nohost', _OldNode, _WinCreated) when node() =:= 'nonode@nohost' -> + %% Not distributed, OK! + 'nonode@nohost'; +check_selected_node(_Node, _OldNode, WinCreated) when node() =:= 'nonode@nohost' -> + %% No longer distributed, but previously was! + handle_error(undistributed), + update_node_listbox('nonode@nohost', WinCreated); +check_selected_node(Node, _OldNode, _WinCreated) when Node =:= node() -> + %% We are distributed, but on + %% our own node! Since we + % still are running, the node + %% is up. + Node; +check_selected_node(Node, 'nonode@nohost', WinCreated) -> + %% The system has been distributed! + net_kernel:monitor_nodes(true), + handle_error(distributed), + update_node_listbox(Node, WinCreated); +check_selected_node(Node, _OldNode, WinCreated) -> + %% We are distributed, and a new node has been chosen! + %% We better check this node! + case net_adm:ping(Node) of + pong -> + Node; + _Other -> + handle_error(nodedown), + update_node_listbox(Node, WinCreated) + end. + + + +available_nodes() -> + lists:sort([node() | nodes()]). + + + +loop(Pid, CurrNode, HomeNode, WinCreated) -> + receive + + {nodedown, _Node} -> + flush_nodedown_messages(), + flush_nodeup_messages(), + case lists:member(CurrNode, available_nodes()) of + true -> + done; + false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' -> + handle_error(undistributed); + false -> + handle_error(nodedown) + end, + NewCurrNode = update_node_listbox(CurrNode, WinCreated), + tell_master(NewCurrNode, CurrNode, Pid), + loop(Pid, NewCurrNode, node(), WinCreated); + + + {nodeup, _Node} -> + flush_nodeup_messages(), + flush_nodedown_messages(), + case lists:member(CurrNode, available_nodes()) of + true -> + done; + false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' -> + handle_error(undistributed); + false when CurrNode =:= 'nonode@nohost' -> + net_kernel:monitor_nodes(true), + handle_error(distributed); + false -> + handle_error(nodedown) + end, + NewCurrNode = update_node_listbox(CurrNode, WinCreated), + tell_master(NewCurrNode, CurrNode, Pid), + loop(Pid, NewCurrNode, node(), WinCreated); + + + {gs, node_listbox, click, Data, [Idx, _Txt | _]} -> + NewCurrNode = check_selected_node(lists:nth(Idx + 1, Data), CurrNode, WinCreated), + tell_master(NewCurrNode, CurrNode, Pid), + loop(Pid, NewCurrNode, node(), WinCreated); + + + {gs, win, configure, _, _} -> + gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]), + loop(Pid, CurrNode, HomeNode, WinCreated); + + + show_window when WinCreated-> + gs:config(win, [raise]), + loop(Pid, CurrNode, HomeNode, WinCreated); + + show_window when not WinCreated -> + init_window(CurrNode, Pid), + loop(Pid, CurrNode, HomeNode, true); + + {gs, _Id, click, close_menu, _Args} -> + gs:destroy(win), + loop(Pid, CurrNode, HomeNode, false); + + + {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} -> + gs:destroy(win), + loop(Pid, CurrNode, HomeNode, false); + + + {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} -> + gs:destroy(win), + loop(Pid, CurrNode, HomeNode, false); + + + {gs, _Id, keypress, _Data, _Args} -> + loop(Pid, CurrNode, HomeNode, WinCreated); + + + {gs, _, destroy, _, _} -> + loop(Pid, CurrNode, HomeNode, false); + + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + loop(Pid, CurrNode, HomeNode, WinCreated); + + {'EXIT', Pid, _Reason} -> + net_kernel:monitor_nodes(false), + exit(normal); + + + {'EXIT', _OtherPid, _Reason} -> + loop(Pid, CurrNode, HomeNode, WinCreated); + + + _Other -> + io:format("Node window received message ~p ~n", [_Other]), + loop(Pid, CurrNode, HomeNode, WinCreated) + + after + 1000 -> + NewHomeNode = case node() of + HomeNode -> + HomeNode; + Other -> + self() ! {nodeup, Other} + end, + loop(Pid, CurrNode, NewHomeNode, WinCreated) + end. + + + + +tell_master(NewNode, NewNode, _Pid) -> + done; +tell_master(NewNode, _OldNode, Pid) -> + Pid ! {tv_new_node, self(), NewNode}. + + + + +flush_nodedown_messages() -> + receive + {nodedown,_Node} -> + flush_nodedown_messages() + after + 0 -> + done + end. + + + + +flush_nodeup_messages() -> + receive + {nodeup,_Node} -> + flush_nodeup_messages() + after + 0 -> + done + end. + + + + +update_node_listbox(Node, WinCreated) -> + {NewNode, NodeDataList, NodeTextList, MarkIndex} = get_node_lists(Node), + case WinCreated of + false -> + done; + true -> + catch gs:config(node_listbox, [{data, NodeDataList}, + {items, NodeTextList}, + {selection, MarkIndex} + ]) + end, + NewNode. + + + + + +create_window() -> + gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH}, + {height, ?WINDOW_HEIGHT}, + {bg, ?DEFAULT_BG_COLOR}, + {title, "[TV] Connected nodes"}, + {configure, true}, + {destroy, true}, + {cursor, arrow}, + {keypress, true} + ]), + gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR} + ]), + gs:menubutton(mbutt, menubar, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, % firebrick + {label, {text, " File "}}, + {underline, 1} + ]), + + % Create the actual menu! + gs:menu(menu, mbutt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}]), + gs:menuitem(menu, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, + {label, {text, " Close Ctrl-C "}}, + {data, close_menu}, + {underline, 1} + ]), + + Xpos = 4, + Ypos = 40, + gs:listbox(node_listbox, win, [{x, Xpos}, + {y, Ypos}, + {width, ?WINDOW_WIDTH - 2 * Xpos}, + {height, ?WINDOW_HEIGHT - Ypos - Xpos}, + {bg, {255,255,255}}, + {vscroll, right}, + {hscroll, true}, + {click, true} + ]). + + + + + + + + diff --git a/lib/tv/src/tv_pb.erl b/lib/tv/src/tv_pb.erl new file mode 100644 index 0000000000..34db8d0772 --- /dev/null +++ b/lib/tv/src/tv_pb.erl @@ -0,0 +1,685 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pb). + + + +-export([pb/1]). + + +-include("tv_int_def.hrl"). +-include("tv_pd_int_msg.hrl"). +-include("tv_pb_int_def.hrl"). + + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: pb. +%% +%% Return Value: None. +%% +%% Description: Process controlling the grid buttons on the display. +%% +%% Parameters: None. +%%====================================================================== + + +pb(ParentPid) -> + process_flag(trap_exit, true), + ProcVars = #process_variables{parent_pid = ParentPid}, + loop(ProcVars). + + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +%%====================================================================== +%% Function: loop. +%% +%% Return Value: None. +%% +%% Description: Eternal (well, almost) loop, receiving messages and +%% handling them. +%% +%% Parameters: +%%====================================================================== + + +loop(ProcVars) -> + receive + Msg -> + case Msg of + + #pb_update_vbtns{} -> + NewProcVars = update_vbtns(Msg, ProcVars), + loop(NewProcVars); + + #pb_key_info{} -> + NewProcVars = update_keys(Msg, ProcVars), + loop(NewProcVars); + + #pb_update_hbtns{} -> + NewProcVars = update_hbtns(Msg, ProcVars), + loop(NewProcVars); + + #pb_set_sort_col{} -> + NewProcVars = set_sort_col(Msg, ProcVars), + loop(NewProcVars); + + #pb_remove_marks{} -> + NewProcVars = remove_marks(ProcVars), + loop(NewProcVars); + + #pb_init_btns{} -> + NewProcVars = init_btns(Msg, ProcVars), + loop(NewProcVars); + + {gs, Id, Event, Data, Args} -> + NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), + loop(NewProcVars); + + + {'EXIT', Pid, Reason} -> + ParentPid = ProcVars#process_variables.parent_pid, + exit_signals({Pid, Reason}, ParentPid, ProcVars), + loop(ProcVars); + + _Other -> + loop(ProcVars) + end + end. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +exit_signals(ExitInfo, ParentPid, _ProcVars) -> + case ExitInfo of + {ParentPid, _Reason} -> + exit(normal); + _Other -> + done + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +gs_messages(Msg, ProcVars) -> + + case Msg of + + {Id, click, {hbtn, RealCol, VirtualCol}, _Args} -> + handle_col_marking(Id, RealCol, VirtualCol, ProcVars); + + {Id, buttonpress, {resbtn, RealCol, VirtualCol, Xpos}, [1 | _Tail]} -> + handle_col_resizing(Id, RealCol, VirtualCol, Xpos, ProcVars), + ProcVars; + + {_Id, click, {vbtn, RealRow, VirtualRow}, _Args} -> + handle_row_marking(RealRow, VirtualRow, ProcVars); + + _OtherMessage -> + ProcVars + + end. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +remove_marks(ProcVars) -> + #process_variables{col_mark_params = ColMarkP, + row_mark_params = RowMarkP} = ProcVars, + + #col_mark_params{col_btn_id = BtnId, + virtual_col_marked = VirtualCol, + virtual_sort_col = SortCol} = ColMarkP, + + case BtnId of + undefined -> + done; + _AnyId -> + case VirtualCol of + SortCol -> + gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}, + {fg, {0, 0, 0}} + ]); + _Other -> + gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]) + end + end, + + NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined, + real_row_marked = undefined + }, + NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined, + virtual_col_marked = undefined + }, + ProcVars#process_variables{col_mark_params = NewColMarkP, + row_mark_params = NewRowMarkP + }. + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +handle_col_marking(BtnId, RealCol, VirtualCol, ProcVars) -> + #process_variables{parent_pid = PdPid, + col_mark_params = ColMarkP, + row_mark_params = RowMarkP} = ProcVars, + + #col_mark_params{col_btn_id = OldBtnId, + virtual_col_marked = OldVirtualCol, + virtual_sort_col = SortCol} = ColMarkP, + + {ColMarked, NewColMarkP} = mark_col_btn(BtnId, OldBtnId, VirtualCol, + OldVirtualCol, RealCol, SortCol, + ColMarkP), + + PdPid ! #pb_col_marked{sender = self(), + col_marked = ColMarked, + real_col = RealCol, + virtual_col = VirtualCol + }, + + NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined, + real_row_marked = undefined + }, + ProcVars#process_variables{col_mark_params = NewColMarkP, + row_mark_params = NewRowMarkP + }. + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +handle_row_marking(RealRow, VirtualRow, ProcVars) -> + #process_variables{parent_pid = PdPid, + col_mark_params = ColMarkP, + row_mark_params = RowMarkP} = ProcVars, + + #col_mark_params{col_btn_id = OldBtnId, + virtual_col_marked = OldVirtualCol, + virtual_sort_col = SortCol} = ColMarkP, + + {_ColMarked, NewColMarkP} = mark_col_btn(OldBtnId, OldBtnId, OldVirtualCol, + OldVirtualCol, undefined, SortCol, + ColMarkP), + + #row_mark_params{virtual_row_marked = OldVirtualRow} = RowMarkP, + + % Check if row shall be marked or unmarked! + {RowMarked, NewRowMarkP} = check_marked_row(VirtualRow, OldVirtualRow, RealRow, + RowMarkP), + + PdPid ! #pb_row_marked{sender = self(), + row_marked = RowMarked, + real_row = RealRow, + virtual_row = VirtualRow + }, + + ProcVars#process_variables{row_mark_params = NewRowMarkP, + col_mark_params = NewColMarkP}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +%% Three cases: no button previously clicked, or same button clicked, +%% or some other button clicked. + +check_marked_row(NewVirtRow, undefined, RealRow, RowMarkP) -> + % No btn already pressed! + {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, + real_row_marked = RealRow}}; +check_marked_row(NewVirtRow, OldVirtRow, _RealRow, RowMarkP) when NewVirtRow =:= OldVirtRow -> + % The button previously pressed has been pressed again! + {false, RowMarkP#row_mark_params{virtual_row_marked = undefined, + real_row_marked = undefined}}; +check_marked_row(NewVirtRow, _OldVirtRow, RealRow, RowMarkP) -> + % A new btn has been pressed! + {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, + real_row_marked = RealRow}}. + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_sort_col(Msg, ProcVars) -> + #pb_set_sort_col{virtual_col = SortCol} = Msg, + tv_pb_funcs:set_new_sort_col(SortCol, ProcVars). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +%% Three cases: no button previously clicked, or same button clicked, +%% or some other button clicked. + +mark_col_btn(NewId, undefined, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> + % No btn already pressed! + gs:config(NewId, [{bg, ?COL_MARK_COLOR}, + {fg, {255, 255, 255}} + ]), + {true, ColMarkP#col_mark_params{col_btn_id = NewId, + virtual_col_marked = NewVirtCol}}; +mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol, NewVirtCol =:= SortCol -> + % The button previously pressed has been pressed again! + gs:config(NewId, [{bg, ?SORT_MARK_COLOR}, + {fg, {0, 0, 0}} + ]), + {false, ColMarkP#col_mark_params{col_btn_id = undefined, + virtual_col_marked = undefined}}; +mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, _SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol -> + % The button previously pressed has been pressed again! + gs:config(NewId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]), + {false, ColMarkP#col_mark_params{col_btn_id = undefined, + virtual_col_marked = undefined}}; +mark_col_btn(NewId, OldId, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> + % A new btn has been pressed! + gs:config(OldId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]), + gs:config(NewId, [{bg, ?COL_MARK_COLOR}, + {fg, {255, 255, 255}} + ]), + {true, ColMarkP#col_mark_params{col_btn_id = NewId, + virtual_col_marked = NewVirtCol}}. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +handle_col_resizing(RbtnId, RealCol, VirtualCol, Xpos, ProcVars) -> + gs:config(RbtnId, [{motion, true}]), + #process_variables{parent_pid = ParentPid, + grid_frame_id = GrFrId, + grid_frame_height = Height, + hbtn_height = HbtnH, + resbtn_width = RbtnW, + cols_shown = ColsShown} = ProcVars, + + LineId = gs:frame(GrFrId, [{width, 1}, + {height, Height - HbtnH}, + {x, Xpos}, + {y, HbtnH - 1}, + {bg, ?DEFAULT_BG_COLOR} + ]), + MinColWidth = RbtnW, + + OldColWidth = lists:nth(RealCol, ColsShown), + Xdiff = get_xdiff(RbtnId, 1, 0, LineId, Xpos, MinColWidth - OldColWidth), + + ParentPid ! #pb_new_colwidth{sender = self(), + real_col = RealCol, + virtual_col = VirtualCol, + xdiff = Xdiff}, + + gs:config(RbtnId, [{motion, false}]), + gs:destroy(LineId). + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) -> + receive + {gs, Id, motion, {resbtn, _RealCol, _VirtCol, _OldXpos}, [NewXdiff | _T]} -> + UsedXdiff = max(MinAllowedXdiff, NewXdiff), + gs:config(LineId, [{x, LineXpos + UsedXdiff}]), + get_xdiff(Id, Btn, UsedXdiff, LineId, LineXpos, MinAllowedXdiff); + {gs, Id, buttonrelease, _Data, [Btn | _T]} -> + LastXdiff; + {gs, Id, buttonrelease, _Data, _Args} -> + get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff); + {gs, Id, buttonpress, _Data, _Args} -> + get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) + end. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init_btns(Msg, ProcVars) -> + #pb_init_btns{parent_id = ParentId, + parent_width = Width, + parent_height = Height, + ypos = Ypos, + hbtn_height = HbtnH, + resbtn_width = RbtnW, + vbtn_width = VbtnW, + nof_rows = NofRows, + row_height = RowHeight, + first_col_shown = FirstColShown, + cols_shown = ColsShown} = Msg, + + NewProcVars = tv_pb_funcs:init_btns(ParentId, Ypos, HbtnH, VbtnW, RbtnW, + FirstColShown, ColsShown, NofRows, + RowHeight, ProcVars), + + gs:frame(ParentId, [{bg, {0, 0, 0}}, + {bw, 0}, + {width, 1300}, + {height, 1}, + {x, 0}, + {y, Ypos - 1} + ]), + NewProcVars#process_variables{grid_frame_width = Width, + grid_frame_height = Height + }. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_hbtns(Msg, ProcVars) -> + #pb_update_hbtns{parent_width = Width, + parent_height = Height, + first_col_shown = FirstColShown, + cols_shown = ColsShown} = Msg, + + NewProcVars = tv_pb_funcs:update_hbtns(FirstColShown, ColsShown, ProcVars), + + NewProcVars#process_variables{grid_frame_width = Width, + grid_frame_height = Height + }. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_vbtns(Msg, ProcVars) -> + #pb_update_vbtns{color_list = Colors, + first_row_shown = FirstRowShown, + nof_rows_shown = NofRowsShown, + blinking_enabled = BlinkEnabled} = Msg, + + tv_pb_funcs:update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, + ProcVars). + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_keys(Msg, ProcVars) -> + #pb_key_info{list_of_keys = KeyList} = Msg, + tv_pb_funcs:update_keys(KeyList, ProcVars). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +max(A, B) when A >= B -> + A; +max(_, B) -> + B. + + diff --git a/lib/tv/src/tv_pb_funcs.erl b/lib/tv/src/tv_pb_funcs.erl new file mode 100644 index 0000000000..87a4719bbd --- /dev/null +++ b/lib/tv/src/tv_pb_funcs.erl @@ -0,0 +1,1050 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pb_funcs). + + + +-export([init_btns/10, + update_hbtns/3, + update_vbtns/5, + update_keys/2, + set_new_sort_col/2]). + + +-include("tv_int_def.hrl"). +-include("tv_pb_int_def.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + + +init_btns(ParentId, Ypos, HbtnH, + VbtnW, ResbtnW, FirstColShown, ColsShown, NofRows, RowH, ProcVars) -> + + #process_variables{key_numbers = KeyNos, + key_ids = KeyIds} = ProcVars, + +% C = gs:canvas(ParentId, [{width, VbtnW - 1}, +% {height, HbtnH}, +% {x, 0}, +% {y, HbtnH + 1}, +% {bg, white} +% ]), +% gs:create(image, C, [{load_gif, "erlang.gif"}]), + + {HbtnsShown, ResBtnsShown} = update_hbtns(ColsShown, [], [], + FirstColShown, ParentId, Ypos, + HbtnH, ResbtnW, VbtnW), + + NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown, + FirstColShown + length(ColsShown) - 1, HbtnsShown, + ParentId, []), + + VbtnsShown = create_vbtns(ParentId, Ypos, NofRows, RowH, VbtnW, HbtnH), + ProcVars#process_variables{grid_frame_id = ParentId, + ypos = Ypos, + hbtn_height = HbtnH, + vbtn_width = VbtnW, + resbtn_width = ResbtnW, + first_col_shown = FirstColShown, + hbtns_shown = HbtnsShown, + resbtns_shown = ResBtnsShown, + vbtns_shown = VbtnsShown, + cols_shown = ColsShown, + key_ids = NewKeyIds + }. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_hbtns(FirstColShown, ColsShown, ProcVars) -> + #process_variables{grid_frame_id = ParentId, + first_col_shown = OldFirstColShown, + cols_shown = OldColsShown, + ypos = Ypos, + hbtn_height = HbtnH, + vbtn_width = VbtnW, + resbtn_width = ResbtnW, + hbtns_shown = HbtnsShown, + resbtns_shown = ResbtnsShown, + key_numbers = KeyNos, + key_ids = KeyIds, + col_mark_params = ColMarkP} = ProcVars, + + % Only if the grid has been scrolled horizontally need we move the + % col mark! + case FirstColShown of + OldFirstColShown -> + done; + _NewValue -> + #col_mark_params{col_btn_id = MarkedBtnId, + virtual_col_marked = ColMarked, + sort_btn_id = SortBtnId, + virtual_sort_col = SortCol} = ColMarkP, + unmark_marked_col(MarkedBtnId, ColMarked, SortCol), + unmark_sort_col(SortBtnId, ColMarked, SortCol) + end, + + {NewHbtns, NewResbtns, NewKeys} = + case {FirstColShown, ColsShown} of + {OldFirstColShown, OldColsShown} -> + {HbtnsShown, ResbtnsShown, KeyIds}; + _Other -> + {NewHbtnsShown, NewResbtnsShown} = update_hbtns(ColsShown, + HbtnsShown, + ResbtnsShown, + FirstColShown, + ParentId, + Ypos, + HbtnH, + ResbtnW, + VbtnW), + NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown, + FirstColShown + length(ColsShown) - 1, + NewHbtnsShown, ParentId, []), + {NewHbtnsShown, NewResbtnsShown, NewKeyIds} + end, + + % Now mark the marked column again! + NewColMarkP = mark_marked_col(NewHbtns, FirstColShown, ColMarkP), + + ProcVars#process_variables{first_col_shown = FirstColShown, + hbtns_shown = NewHbtns, + resbtns_shown = NewResbtns, + cols_shown = ColsShown, + key_ids = NewKeys, + col_mark_params = NewColMarkP + }. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, ProcVars) -> + #process_variables{vbtns_shown = Vbtns, + blink_color_list = BlinkList} = ProcVars, + + update_vbtns(1, NofRowsShown, FirstRowShown, Vbtns, Colors, BlinkEnabled, BlinkList), + NewProcVars = update_sort_btn_mark(ProcVars), + NewProcVars. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_new_sort_col(SortCol, ProcVars) -> + #process_variables{hbtns_shown = HbtnsShown, + col_mark_params = ColMarkP} = ProcVars, + + #col_mark_params{col_btn_id = MarkedColBtnId, + sort_btn_id = OldSortBtnId} = ColMarkP, + + % Set the new color of the sort btn, and remove the mark, if it is the same + % column! + + case MarkedColBtnId of + undefined -> + done; + _AnyId -> + gs:config(MarkedColBtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]) + end, + + SortBtnId = get_btn_id(SortCol, HbtnsShown), + case SortBtnId of + undefined -> + % The btn isn't visible, or no sorting shall be performed! + gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]); + _Other -> + % Unmark the old sort btn id! + gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]), + gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR}, + {fg, {0, 0, 0}} + ]) + end, + + NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined, + virtual_col_marked = undefined, + sort_btn_id = SortBtnId, + virtual_sort_col = SortCol + }, + ProcVars#process_variables{col_mark_params = NewColMarkP}. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_keys(KeyList, ProcVars) -> + #process_variables{key_numbers = OldKeyList, + key_ids = KeyIds, + first_col_shown = FirstColShown, + cols_shown = ColsShown, + hbtns_shown = HbtnsShown, + grid_frame_id = ParentId} = ProcVars, + + NewKeyIds = case KeyList of + OldKeyList -> + KeyIds; + NewKeyList -> + update_keys(NewKeyList, KeyIds, FirstColShown, + FirstColShown + length(ColsShown) - 1, + HbtnsShown, ParentId, []) + end, + + ProcVars#process_variables{key_numbers = KeyList, + key_ids = NewKeyIds + }. + + + + + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +unmark_sort_col(undefined, _ColMarked, _SortCol) -> + done; +unmark_sort_col(SortBtnId, _ColMarked, _SortCol) -> + gs:config(SortBtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}} + ]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_marked_col(HbtnsShown, _FirstColShown, ColMarkP) -> + #col_mark_params{virtual_col_marked = VirtualCol, + virtual_sort_col = SortCol} = ColMarkP, + + {NewMarkBtnId, NewSortBtnId} = + case VirtualCol of + SortCol -> + % Same btn! + BtnId = get_btn_id(VirtualCol, + HbtnsShown), + gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}, + {fg, {0, 0, 0}} + ]), + {BtnId, BtnId}; + _OtherCol -> + MarkBtnId = get_btn_id(VirtualCol, HbtnsShown), + case MarkBtnId of + undefined -> + done; + _Else -> + gs:config(MarkBtnId, [{bg, ?COL_MARK_COLOR}, + {fg, {255, 255, 255}} + ]) + end, + + SortBtnId = get_btn_id(SortCol, HbtnsShown), + case SortBtnId of + undefined -> + done; + _OtherId -> + gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR}, + {fg, {0, 0, 0}} + ]) + end, + + {MarkBtnId, SortBtnId} + end, + + ColMarkP#col_mark_params{col_btn_id = NewMarkBtnId, + sort_btn_id = NewSortBtnId}. + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +unmark_marked_col(undefined, _ColMarked, _SortCol) -> + done; +unmark_marked_col(BtnId, _ColMarked, _SortCol) -> + gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}} + ]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_sort_btn_mark(ProcVars) -> + #process_variables{hbtns_shown = HbtnsShown, + col_mark_params = ColMarkP} = ProcVars, + + #col_mark_params{col_btn_id = MarkedColBtnId, + virtual_col_marked = ColMarked, + sort_btn_id = OldSortBtnId, + virtual_sort_col = SortCol} = ColMarkP, + + {NewMarkedColBtnId, NewColMarked} = case ColMarked of + SortCol -> + {undefined, undefined}; + _Other -> + {MarkedColBtnId, ColMarked} + end, + + NewSortBtnId = set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown), + + NewColMarkP = ColMarkP#col_mark_params{col_btn_id = NewMarkedColBtnId, + virtual_col_marked = NewColMarked, + sort_btn_id = NewSortBtnId}, + + ProcVars#process_variables{col_mark_params = NewColMarkP}. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_btn_id(VirtualCol, HbtnsShown) -> + case lists:keysearch(VirtualCol, #hbtn.virtual_col, HbtnsShown) of + false -> + undefined; + {value, HbtnRec} -> + HbtnRec#hbtn.id + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_sort_btn_color(undefined, SortCol, HbtnsShown) -> + case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of + false -> + undefined; + {value, HbtnRec} -> + BtnId = HbtnRec#hbtn.id, + gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]), + BtnId + end; +set_sort_btn_color(BtnId, undefined, _HbtnsShown) -> + gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}]); +set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown) -> + case gs:read(OldSortBtnId, bg) of + SortCol -> + % Btn is already marked! + OldSortBtnId; + _OtherColor -> + % Unmark old btn, mark new btn, if visible. + gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}]), + case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of + false -> + undefined; + {value, HbtnRec} -> + BtnId = HbtnRec#hbtn.id, + gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]), + BtnId + end + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_vbtns(N, NofRowsShown, _VirtualRowNo, + _Vbtns, _Colors, _BlinkEnabled, _BlinkList) when N > NofRowsShown -> + done; +update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], [], _BlinkEnabled, _BlinkList) -> + done; +update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], _Colors, _BlinkEnabled, _BlinkList) -> + % Right now we don't bother with dynamically creating row buttons: + % we ought too know in advance the maximum number of rows that can + % be visible. + io:format("Configuration error: too few rows in grid.~n"), + done; +update_vbtns(N, NofRowsShown, + VirtualRowNo, [VbtnRec | VT], [], BlinkEnabled, BlinkList) -> + VbtnId = VbtnRec#vbtn.id, + gs:config(VbtnId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, ?BLACK}, + {label, {text, integer_to_list(VirtualRowNo)}}, + {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row + ]), + update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1,VT, [], BlinkEnabled, + BlinkList); +update_vbtns(N, NofRowsShown, + VirtualRowNo, [VbtnRec | VT], [Color | CT], true, BlinkList) -> + VbtnId = VbtnRec#vbtn.id, + {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo), + case lists:member(Color, BlinkList) of + true -> + gs:config(VbtnId, [{bg, Color}, + {fg, TextColor}, + {label, {text, Text}}, + {data, {vbtn, N, VirtualRowNo}}, % Real + virtual row + flash + ]); + false -> + gs:config(VbtnId, [{bg, Color}, + {fg, TextColor}, + {label, {text, Text}}, + {data, {vbtn, N, VirtualRowNo}} % Real + virtual row + ]) + end, + update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, true, BlinkList); +update_vbtns(N, NofRowsShown, + VirtualRowNo, [VbtnRec | VT], [Color | CT], false, BlinkList) -> + VbtnId = VbtnRec#vbtn.id, + {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo), + gs:config(VbtnId, [{bg, Color}, + {fg, TextColor}, + {label, {text, Text}}, + {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row + ]), + update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, false, BlinkList). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_vbtn_text_and_textcolor(?BLACK, N) -> + {integer_to_list(N), ?WHITE}; +get_vbtn_text_and_textcolor(?RED1, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?RED2, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?RED3, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?RED4, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?RED5, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?GREEN1, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?GREEN2, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?GREEN3, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?GREEN4, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(?GREEN5, N) -> + {integer_to_list(N), ?BLACK}; +get_vbtn_text_and_textcolor(_AnyOtherColor, N) -> + {integer_to_list(N), ?BLACK}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_vbtns(ParentId, Ypos, NofRows, RowHeight, VbtnW, HbtnH) -> + create_vbtns(1, NofRows, RowHeight, ParentId, VbtnW, Ypos + HbtnH, []). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_vbtns(N, NofRows, _RowHeight, _ParId, _VbtnW, _Ypos, VAcc) when N > NofRows -> + lists:reverse(VAcc); +create_vbtns(N, NofRows, RowHeight, ParId, VbtnW, Ypos, VAcc) -> + VHeight = RowHeight + 1, + VInfo = create_one_vbtn(ParId, VHeight, VbtnW, Ypos, N), + create_vbtns(N + 1, NofRows, RowHeight, ParId, VbtnW, Ypos + VHeight, + [VInfo | VAcc]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_one_vbtn(ParentId, Height, VbtnW, Ypos, N) -> + Id = gs:button(ParentId, [{width, VbtnW}, + {height, Height}, + {x, 0}, + {y, Ypos}, + {font, ?BTN_FONT}, + {bg, ?DEFAULT_BG_COLOR}, + {align, center}, + {label, {text,integer_to_list(N)}}, + {data, {vbtn, N, N}} % Real row + virtual row + ]), + #vbtn{virtual_row = N, + real_row = N, + id = Id, + height = Height, + ypos = Ypos}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_hbtns([], _HBtnsShown, + _ResBtns, _VirtualColNo, _FrId, _Ypos, _HbtnH, _ResBtnW, _VbtnW) -> + {[], []}; +update_hbtns(ColsShown, HBtns, + ResBtns, VirtualColNo, FrId, Ypos, HbtnH, ResBtnW, VbtnW) -> + update_hbtns(1, ColsShown, HBtns, ResBtns, HbtnH, ResBtnW, VbtnW, + VirtualColNo, FrId, 0, Ypos, [], []). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_hbtns(_N, [], + [], [], _HbtnH, _ResBtnW, _VbtnW, _ColNo, _FrId, _Xpos, _Ypos, HAcc, RAcc) -> + {lists:reverse(HAcc), lists:reverse(RAcc)}; + +update_hbtns(N, [], [HInfo | HT], [RInfo | RT], + HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> + % If too many buttons, i.e., if the ColsShown list + % has become empty. + gs:destroy(HInfo#hbtn.id), + gs:destroy(RInfo#resbtn.id), + update_hbtns(N, [], HT, RT, HbtnH, ResBtnW, VbtnW, ColNo, FrId, + Xpos, Ypos, HAcc, RAcc); + +update_hbtns(1, [ColW | T], [], [], + HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) -> + % The first button has to be bigger than the others. + {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 2, + HbtnH, VbtnW - 1, + Ypos, ResBtnW, 1, ColNo), + update_hbtns(2, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1, + FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, [HInfo | HAcc], + [RInfo | RAcc]); + +update_hbtns(N, [ColW | T], [], [], + HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> + {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 4, + HbtnH, Xpos, + Ypos, ResBtnW, N, ColNo), + update_hbtns(N + 1, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1, + FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [HInfo | HAcc], + [RInfo | RAcc]); + +update_hbtns(1, [ColW | T], [HInfo | HT], [RInfo | RT], + HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) -> + {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo, + ColW - 2, + VbtnW - 1, + 1, ColNo), + update_hbtns(2, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1, + FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, + [NewHInfo | HAcc], [NewRInfo | RAcc]); + +update_hbtns(N, [ColW | T], [HInfo | HT], [RInfo | RT], + HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> + {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo, + ColW - 4, + Xpos, N, + ColNo), + update_hbtns(N + 1, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1, + FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [NewHInfo | HAcc], + [NewRInfo | RAcc]). + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_one_hbtn_and_resbtn(ParId, HWidth, HHeight, HXpos, Ypos, RWidth, N, ColNo) -> + HId = gs:button(ParId, [{width, HWidth}, + {height, HHeight}, + {x, HXpos}, + {y, Ypos}, + {font, ?BTN_FONT}, + {bg, ?DEFAULT_BG_COLOR}, + {data, {hbtn, N, ColNo}}, + {label, {text, integer_to_list(ColNo)}} + ]), + RId = gs:button(ParId, [{width, RWidth}, + {height, HHeight}, + {x, HXpos + HWidth}, + {y, Ypos}, + {cursor, resize}, + {buttonpress, true}, + {buttonrelease, true}, + {data, {resbtn, N, ColNo, (HXpos + HWidth + RWidth div 2)}}, + {bg, ?BLACK} + ]), + HInfo = #hbtn{virtual_col = ColNo, + real_col = N, + id = HId, + width = HWidth, + xpos = HXpos}, + RInfo = #resbtn{virtual_col = ColNo, + real_col = N, + id = RId, + width = RWidth, + xpos = HXpos + HWidth}, + {HInfo, RInfo}. + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +config_one_hbtn_and_resbtn(HInfo, RInfo, HWidth, HXpos, N, ColNo) -> + gs:config(HInfo#hbtn.id, [{width, HWidth}, + {x, HXpos}, + {data, {hbtn, N, ColNo}}, + {label, {text, integer_to_list(ColNo)}} + ]), + gs:config(RInfo#resbtn.id, [{x, HXpos + HWidth}, + {data, {resbtn, N, ColNo, + (HXpos + HWidth + RInfo#resbtn.width div 2)}} + ]), + NewHInfo = HInfo#hbtn{virtual_col = ColNo, + width = HWidth, + xpos = HXpos}, + NewRInfo = RInfo#resbtn{virtual_col = ColNo, + xpos = HXpos + HWidth}, + {NewHInfo, NewRInfo}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_keys([], [], _FirstCol, _LastCol, _HBtns, _ParentId, KeyIdsAcc) -> + lists:reverse(KeyIdsAcc); + +update_keys([], [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> + gs:config(KeyId, [{x, 1200}]), + update_keys([], IdT, FirstCol, LastCol, HBtns, ParentId, + [KeyId | KeyIdsAcc]); + +update_keys([KeyNo | KT], [], FirstCol, LastCol, + HBtns,ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol -> + {_Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns), + NewKeyId = create_key(ParentId, Xpos, 1), + update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId, + [NewKeyId | KeyIdsAcc]); + +update_keys([_KeyNo | KT], [], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> + update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId, + KeyIdsAcc); + +update_keys([KeyNo | KT], [KeyId | IdT], FirstCol, LastCol, + HBtns, ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol -> + {Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns), + gs:config(KeyId, [{width, Width}, + {x, Xpos} + ]), + update_keys(KT, IdT, FirstCol, LastCol, HBtns, ParentId, + [KeyId | KeyIdsAcc]); + +update_keys([_KeyNo | KT], + [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> + update_keys(KT, [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, + KeyIdsAcc). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_keywidth_and_pos(VirtualCol, FirstCol, HBtns) -> + RealColNo = VirtualCol - FirstCol + 1, + HBtnR = lists:nth(RealColNo, HBtns), + #hbtn{width = Width, + xpos = Xpos} = HBtnR, + KeyWidth = 10, + % Compute the x position for the key! + KeyXpos = (Xpos + (Width div 2) - (KeyWidth div 2)), + {KeyWidth, KeyXpos}. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_key(ParentId, Xpos, Ypos) -> + PicDir = code:priv_dir(tv), + C = gs:canvas(ParentId, [{width, 10}, + {height, 18}, + {x, Xpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR} + ]), + gs:create(image, C, [{bitmap, PicDir ++ "/key.xbm"}]), + C. + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/tv/src/tv_pb_int_def.hrl b/lib/tv/src/tv_pb_int_def.hrl new file mode 100644 index 0000000000..0fe9df193a --- /dev/null +++ b/lib/tv/src/tv_pb_int_def.hrl @@ -0,0 +1,99 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% + +-define(WHITE, {255,255,255}). + +-define(DEFAULT_BG_COLOR, {217,217,217}). + +-define(COL_MARK_COLOR, {0, 0, 0}). +-define(SORT_MARK_COLOR, {255,215,0}). + +-define(BLINK_COLOR1, {255,0,0}). +-define(BLINK_COLOR2, {0,255,0}). +-define(BLINK_COLOR3, {0,0,0}). +-define(BTN_FONT, {courier,12}). + + + + +-record(col_mark_params, {col_btn_id, + virtual_col_marked, + sort_btn_id, + virtual_sort_col + }). + + + +-record(row_mark_params, {virtual_row_marked, + real_row_marked + }). + + + + +-record(process_variables, {parent_pid, + grid_frame_id, + grid_frame_width, + grid_frame_height, + ypos, + hbtn_height, + vbtn_width, + resbtn_width, + first_col_shown, + hbtns_shown = [], + vbtns_shown = [], + resbtns_shown = [], + cols_shown = [], + key_numbers = [], + key_ids = [], + blink_color_list = [?BLINK_COLOR1, + ?BLINK_COLOR2, + ?BLINK_COLOR3], + col_mark_params = #col_mark_params{}, + row_mark_params = #row_mark_params{} + }). + + + +-record(hbtn, {virtual_col, + real_col, + id, + width, + xpos + }). + + + +-record(resbtn, {virtual_col, + real_col, + id, + width, + xpos + }). + + + +-record(vbtn, {virtual_row, + real_row, + id, + height, + ypos + }). + + + diff --git a/lib/tv/src/tv_pc.erl b/lib/tv/src/tv_pc.erl new file mode 100644 index 0000000000..50214fe06a --- /dev/null +++ b/lib/tv/src/tv_pc.erl @@ -0,0 +1,794 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: pc part of the table tool, i.e., the process +%%% controlling all other processes, and managing +%%% the actions to take. +%%% +%%%********************************************************************* + + +-module(tv_pc). + + + +-export([pc/7, + send_data/2 + ]). + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pc_int_def.hrl"). + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + +%%====================================================================== +%% Function: pc. +%% +%% Return Value: None. +%% +%% Description: Process controlling the processes 'pd', 'pw', 'dbs' and 'etsread'. +%% After necessary initialisations, an eternal loop is +%% entered, where window created messages are received and +%% handled, as well as user input. +%% +%% Parameters: +%%====================================================================== + + +pc(Master, Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrMsgMode), + ProcVars = prepare_and_open_table(Node, LocalNode, TableId, KindOfTable, TableName, + false, #process_variables{parent_pid=Master}), + loop(ProcVars). + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +prepare_and_open_table(Node, LocalNode, TabId, TabType, TabName, Raise, ProcVars) -> + IpPid = spawn(tv_ip, ip, [self()]), + show_progress(IpPid, 5, "Initializing graphics..."), + + TmpProcVars = start_procs(IpPid, ProcVars), + + show_progress(IpPid, 5, "Loading table..."), + NewProcVars = ?MENU_FUNC_FILE:open_table(Node, LocalNode, TabId, TabType, TabName, + Raise, TmpProcVars), + + IpPid ! #ip_quit{sender = self()}, + % Now make window visible! + WinP = NewProcVars#process_variables.window_params, + gs:config(WinP#window_params.window_id, [{map, true}]), + NewProcVars. + + + + + +start_procs(IpPid, ProcVars) -> + ErrorMsgMode = get(error_msg_mode), + PwPid = spawn_link(tv_pw, pw, [self()]), + PdPid = spawn_link(tv_pd, pd, [self(), ErrorMsgMode]), + DbsPid = spawn_link(tv_db, dbs, [self(), ErrorMsgMode]), + EtsreadPid = spawn_link(tv_etsread, etsread, [self(), ErrorMsgMode]), + + show_progress(IpPid, 5, "Initializing graphics..."), + NewWinP = init_pw(PwPid, ProcVars), + + show_progress(IpPid, 5, "Initializing graphics..."), + init_pd(PdPid, NewWinP), + ProcVars#process_variables{pw_pid = PwPid, + pd_pid = PdPid, + dbs_pid = DbsPid, + etsread_pid = EtsreadPid, + current_node = node(), %% Will be replaced, when table opened. + local_node = true, + window_params = NewWinP + }. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +show_progress(IpPid, NofElements, Text) -> + IpPid ! #ip_update{sender = self(), + nof_elements_to_mark = NofElements, + text = Text + }. + + + + + + + +%%====================================================================== +%% Function: loop. +%% +%% Return Value: None. +%% +%% Description: Eternal (well, almost) loop, receiving messages and +%% handling them. +%% +%% Parameters: None. +%%====================================================================== + + +loop(ProcVars) -> + receive + Msg -> + case Msg of + + % Normal messages! + #dbs_subset{} -> + NewProcVars1 = send_data(Msg, ProcVars), + NewProcVars2 = check_time_to_poll_table(Msg, NewProcVars1), + loop(NewProcVars2); + + #pc_poll_table{} -> + TmpProcVars = check_node(ProcVars), + NewProcVars = ?MENU_FUNC_FILE:poll_table(TmpProcVars), + loop(NewProcVars); + + #pc_search_req{} -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_search_req{sender=self()}, + loop(ProcVars); + + #pc_set_sorting_mode{} -> + set_sorting_mode(Msg, ProcVars), + loop(ProcVars); + + + #pc_data_req{element = Pos, nof_elements = Length} -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_subset_req{sender = self(), + subset_pos = Pos, + subset_length = Length + }, + loop(ProcVars); + + + #pc_marked_row{row_no=RowNo, object=Obj, color=Color} -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_marked_row{sender = self(), + row_no = RowNo + }, + NewProcVars = ProcVars#process_variables{marked_row = RowNo, + marked_object = Obj, + marked_color = Color}, + loop(NewProcVars); + + + #pc_menu_msg{} -> + Fcn = Msg#pc_menu_msg.data, + NewProcVars = ?MENU_FUNC_FILE:Fcn(ProcVars), + loop(NewProcVars); + + + #pd_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_updated_object{sender = self(), + object = Obj, + old_object = OldObj, + old_color = Color, + obj_no = ObjNo}, + loop(ProcVars); + + + #pd_new_object{object=Obj} -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_new_object{sender = self(), + object = Obj}, + loop(ProcVars); + + + #pc_show_table_info{} -> + NewProcVars = ?MENU_FUNC_FILE:table_info(ProcVars), + loop(NewProcVars); + + #pc_win_conf{} -> + NewProcVars = ?GRAPH_FUNC_FILE:win_conf(Msg, ProcVars), + loop(NewProcVars); + + #pc_help{} -> + NewProcVars = ?MENU_FUNC_FILE:help_button(ProcVars), + loop(NewProcVars); + + #pc_dead_table{automatic_polling = AutoPoll} -> + WinP = ProcVars#process_variables.window_params, + WinId = WinP#window_params.window_id, + gs:config(WinId, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(WinId, "TV Notification", + ["The table no longer exists!"]); + haiku -> + ErrMsg1 = ["A table that big?", + "It might be very useful.", + "But now it is gone."], + tv_utils:notify(WinId, "TV Notification", ErrMsg1) + end, + NewProcVars = + case AutoPoll of + true -> + gs:config(WinId, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(WinId, "TV Notification", + ["The automatic polling is turned off!"]); + haiku -> + ErrMsg2 = ["Previously on", + "The polling is now idled.", + "That's the way it is."], + tv_utils:notify(WinId, "TV Notification", ErrMsg2) + end, + ProcVars#process_variables{poll_interval = infinity}; + false -> + ProcVars + end, + loop(NewProcVars); + + #pc_nodedown{automatic_polling = AutoPoll} -> + WinP = ProcVars#process_variables.window_params, + WinId = WinP#window_params.window_id, + gs:config(WinId, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(WinId, "TV Notification", + ["The node is down, and the", + "table cannot be reached."]); + haiku -> + ErrMsg1 = ["With searching comes loss", + "And the presence of absence:", + "Node is down."], + tv_utils:notify(WinId, "TV Notification", ErrMsg1) + end, + NewProcVars = + case AutoPoll of + true -> + gs:config(WinId, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(WinId, "TV Notification", + ["The automatic polling is turned off!"]); + haiku -> + ErrMsg = ["Previously on,", + "The polling is now idled.", + "That's the way it is."], + tv_utils:notify(WinId, "TV Notification", ErrMsg) + end, + ProcVars#process_variables{poll_interval = infinity}; + false -> + ProcVars + end, + loop(NewProcVars); + + + {pc_edit_object, _Sender} -> + NewProcVars = ?MENU_FUNC_FILE:insert_object(ProcVars), + loop(NewProcVars); + + + check_node -> + NewProcVars = check_node(ProcVars), + loop(NewProcVars); + + + raise -> + WinP = ProcVars#process_variables.window_params, + gs:config(WinP#window_params.window_id, [raise]), + loop(ProcVars); + + + {error_msg_mode, Mode} -> + ProcVars#process_variables.dbs_pid ! {error_msg_mode, Mode}, + ProcVars#process_variables.etsread_pid ! {error_msg_mode, Mode}, + ProcVars#process_variables.pd_pid ! {error_msg_mode, Mode}, + put(error_msg_mode, Mode), + loop(ProcVars); + + % Exit messages! + {'EXIT', Sender, Reason} -> + exit_signals({Sender, Reason}, ProcVars); + + + _Other -> + loop(ProcVars) + + end + end. + + + + + + +check_node(ProcVars) -> + #process_variables{pw_pid = PwPid, + current_node = OldCurrNode, + local_node = LocalNode, + table_id = TableId, + table_type = TableType, + table_name = TableName} = ProcVars, + + HomeNode = node(), + case net_adm:ping(OldCurrNode) of + pong -> + ProcVars; + pang when not LocalNode -> + ProcVars; + pang when LocalNode -> + %% XXX [siri] Will this ever happen? I thought local_node + %% indicated if current_node was the node where tv was + %% started. If so, we are pinging ourselves here, and + %% a pang can never happen?? + WinTitle = ?MENU_FUNC_FILE:get_window_title(TableType,HomeNode,TableId,TableName), + PwPid ! #pw_set_window_title{sender = self(), + win_title = WinTitle}, + ProcVars#process_variables{current_node = HomeNode} + end. + + + + + + + +send_data(Msg, ProcVars) -> + #process_variables{pd_pid = PdPid, + parent_pid = ParentPid, + table_id = Table, + table_type = Type, + current_node = Node} = ProcVars, + + ParentPid ! {tv_update_infowin, Table, Node, Type}, + + #dbs_subset{data = DbData, + subset_pos = ScalePos, + db_length = DbLength, + list_of_keys = ListOfKeys, + max_elem_size = MaxElemSize, + requested_row = ReqRowData} = Msg, + + Range = case ScalePos of + 0 -> + {0, 0}; + _Other -> + {1, DbLength} + end, + + PdPid ! #pc_data{sender = self(), + scale_pos = ScalePos, + scale_range = Range, + elementlist = DbData, + list_of_keys = ListOfKeys, + max_elem_size = MaxElemSize, + marked_row = ReqRowData + }, + + {MarkedObject, MarkedColor} = + case ReqRowData of + [] -> + {undefined, undefined}; + [Data] -> + Data + end, + ProcVars#process_variables{marked_object = MarkedObject, + marked_color = MarkedColor}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_sorting_mode(Msg, ProcVars) -> + #pc_set_sorting_mode{sorting = Sorting, + reverse = Reverse, + sort_key_no = SortKeyNo} = Msg, + + DbsPid = ProcVars#process_variables.dbs_pid, + PdPid = ProcVars#process_variables.pd_pid, + PwPid = ProcVars#process_variables.pw_pid, + TableType = ProcVars#process_variables.table_type, + + NewSortKeyNo = + case SortKeyNo of + undefined -> + if + TableType =:= mnesia -> + 2; + true -> + 1 + end; + _Other -> + SortKeyNo + end, + + Menu = + case Sorting of + true -> + case Reverse of + true -> + sort_falling_order; + false -> + sort_rising_order + end; + false -> + no_sorting + end, + + PwPid ! #pw_select_menu{sender = self(), + menu = Menu}, + + DbsPid ! #dbs_sorting_mode{sender = self(), + sorting = Sorting, + reverse = Reverse, + sort_key_no = NewSortKeyNo + }, + + PdPid ! #pc_set_sorting_mode_cfm{sender = self(), + sort_key_no = NewSortKeyNo + }. + + + + + + + +%%====================================================================== +%% Function: init_pw. +%% +%% Return Value: Tuple containing the Pid of the pw process, and the id of +%% the window created by the pw process. +%% +%% Description: Starts the pw process, and orders it to create a window. +%% (The size of the window may be given as option.) +%% +%% Parameters: None. +%%====================================================================== + + + +init_pw(PwPid, ProcVars) -> + #process_variables{window_params = WinP} = ProcVars, + + % Now deblock pw, and order it to create a window! + PwPid ! #pw_deblock{sender = self(), + win_title = ?APPLICATION_NAME, + win_width = ?DEFAULT_WINDOW_WIDTH, + win_height = ?DEFAULT_WINDOW_HEIGHT, + min_win_width = ?DEFAULT_MIN_WINDOW_WIDTH, + min_win_height = ?DEFAULT_MIN_WINDOW_HEIGHT + }, + + + receive + #pw_deblock_cfm{win_id = WindowId} -> + ?MENU_FUNC_FILE:create_menus(PwPid), + + % Store the window id as well as the size of it. + WinP#window_params{window_id = WindowId, + window_width = ?DEFAULT_WINDOW_WIDTH, + window_height = ?DEFAULT_WINDOW_HEIGHT + } + + + after 180000 -> % A timeout of 1000 ms is too short, at least the first + % time the system is started! + exit(error) + end. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init_pd(PdPid, WinP) -> + #window_params{window_id = WindowId, + window_width = WindowWidth, + window_height = WindowHeight} = WinP, + + % Now deblock pd, and order it to create a canvas and a scale! + PdPid ! #pd_deblock{sender = self(), + win = WindowId, + win_width = WindowWidth, + win_height = WindowHeight, + scale = true + }, + + receive + #pd_deblock_cfm{} -> + done + after 180000 -> + exit(error) + end. + + + + + + + + + + +%%====================================================================== +%% Function: exit_signals. +%% +%% Return Value: None. +%% +%% Description: Decides, given an error message, action to take, i.e., whether +%% operation shall procede, any process shall be restarted, or +%% the table tool terminated. +%% +%% Parameters: Exit_info: tuple containing sender of the error message, and the +%% reason. +%%====================================================================== + + +exit_signals(ExitInfo, ProcVars) -> + #process_variables{parent_pid = ParentPid, + pd_pid = PdPid, + pw_pid = PwPid, + dbs_pid = DbsPid, + etsread_pid = EtsreadPid, + table_id = TabId, + table_type = TabType, + table_name = TabName, + current_node = Node, + local_node = LocalNode + } = ProcVars, + + case ExitInfo of + {ParentPid, Reason} -> + exit(Reason); + + {PwPid, normal} -> + exit(normal); + + {PwPid, error} -> + io:format("Internal error... restarting. ~n"), + kill_procs(normal, [PdPid, EtsreadPid, DbsPid]), + NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, + get(error_msg_mode)), + loop(NewProcVars); + + {PdPid, _Reason} -> + io:format("Internal error... restarting. ~n"), + kill_procs(normal, [PwPid, EtsreadPid, DbsPid]), + NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, + get(error_msg_mode)), + loop(NewProcVars); + + {DbsPid, _Reason} -> + io:format("Internal error... restarting. ~n"), + kill_procs(normal, [PdPid, PwPid, EtsreadPid]), + NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, + get(error_msg_mode)), + loop(NewProcVars); + + {EtsreadPid, _Reason} -> + io:format("Internal error... restarting. ~n"), + kill_procs(normal, [PdPid, PwPid, DbsPid]), + NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, + get(error_msg_mode)), + loop(NewProcVars); + + {_Sender, _OtherReason} -> + loop(ProcVars) + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +kill_procs(_Status, []) -> + done; +kill_procs(Status, [Pid | Tail]) -> + exit(Pid, Status), + kill_procs(Status, Tail). + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +check_time_to_poll_table(Msg, ProcVars) -> + #dbs_subset{required_time_etsread = EtsreadTime, + required_time_dbs = DbsTime} = Msg, + + UserSetPollInterval = ProcVars#process_variables.poll_interval, + WinP = ProcVars#process_variables.window_params, + WinId = WinP#window_params.window_id, + + case too_short_pollinterval_chosen(UserSetPollInterval, EtsreadTime, DbsTime) of + true -> + EtsreadPid = ProcVars#process_variables.etsread_pid, + EtsreadPid ! #etsread_set_poll_interval{sender = self(), + interval = infinity}, + + TimeRequired = trunc(max_time_required(EtsreadTime, DbsTime) / 10 + 0.5) * 10 + 20, + + gs:config(WinId, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(WinId, "TV Notification", + ["The current poll interval is too short!"]), + Str = "to " ++ lists:flatten(io_lib:write(TimeRequired)) ++ " seconds!", + tv_utils:notify(WinId, "TV Notification", ["Setting the poll interval", Str]); + haiku -> + ErrMsg = ["Being way too short", + "The interval of polling", + "Is simply increased."], + tv_utils:notify(WinId, "TV Notification", ErrMsg) + end, + clear_message_buffer(), + EtsreadPid ! #etsread_set_poll_interval{sender = self(), + interval = TimeRequired}, + + ProcVars#process_variables{poll_interval = TimeRequired}; + false -> + ProcVars + end. + + + + + + +clear_message_buffer() -> + receive + #dbs_subset{} -> + clear_message_buffer() + after 100 -> + done + end. + + + + + +max_time_required(T1, T2) when is_number(T1), is_number(T2) -> + if + T1 > T2 -> + T1; + true -> + T2 + end; +max_time_required(T1, _T2) when is_number(T1) -> + T1; +max_time_required(_T1, T2) -> + T2. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +too_short_pollinterval_chosen(infinity, _EtsreadTime, _DbsTime) -> + false; +too_short_pollinterval_chosen(undefined, _EtsreadTime, _DbsTime) -> + false; +too_short_pollinterval_chosen(PollInt, EtsreadTime, _DbsTime) when EtsreadTime >= PollInt, is_number(EtsreadTime) -> + true; +too_short_pollinterval_chosen(PollInt, _EtsreadTime, DbsTime) when DbsTime >= PollInt, is_number(DbsTime) -> + true; +too_short_pollinterval_chosen(_PollInt, _EtsreadTime, _DbsTime) -> + false. diff --git a/lib/tv/src/tv_pc_graph_ctrl.erl b/lib/tv/src/tv_pc_graph_ctrl.erl new file mode 100644 index 0000000000..3fc3ded565 --- /dev/null +++ b/lib/tv/src/tv_pc_graph_ctrl.erl @@ -0,0 +1,120 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pc_graph_ctrl). + + + +-export([create_menu/4, win_conf/2]). + + +-include("tv_int_msg.hrl"). +-include("tv_pc_int_def.hrl"). + + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_menu(PwPid, MenuTitle, TitleAccPos, MenuList) -> + PwPid ! #pw_create_menu{sender = self(), + menutitle = MenuTitle, + title_acc_pos = TitleAccPos, + menulist = MenuList + }, + receive + #pw_create_menu_cfm{} -> + done + after 10000 -> + exit(error) + end. + + + + + + + + + +%%====================================================================== +%% Function: win_conf. +%% +%% Return Value: None. +%% +%% Description: Configures all objects in the window according to new coordinates. +%% +%% Parameters: +%%====================================================================== + + +win_conf(Msg, ProcVars) -> + #pc_win_conf{width = NewWidth, + height = NewHeight} = Msg, + + #process_variables{pd_pid = PdPid, + window_params = WinP} = ProcVars, + + #window_params{window_width = OldWindowWidth, + window_height = OldWindowHeight} = WinP, + + + case {NewWidth, NewHeight} of + {OldWindowWidth, OldWindowHeight} -> + ProcVars; + _Other -> + PdPid ! #pd_win_conf{sender = self(), + width = NewWidth, + height = NewHeight + }, + NewWinP = WinP#window_params{window_width = NewWidth, + window_height = NewHeight}, + + ProcVars#process_variables{window_params = NewWinP} + end. + + + + + + + + + + + + diff --git a/lib/tv/src/tv_pc_int_def.hrl b/lib/tv/src/tv_pc_int_def.hrl new file mode 100644 index 0000000000..22f8dcd5d8 --- /dev/null +++ b/lib/tv/src/tv_pc_int_def.hrl @@ -0,0 +1,62 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Include file for the pc parts of the table tool. +%%% +%%%********************************************************************* + + +-define(HEAD_FILE, pc). +-define(GRAPH_FUNC_FILE, tv_pc_graph_ctrl). +-define(MENU_FUNC_FILE, tv_pc_menu_handling). + + + +-define(APPLICATION_NAME, "Table Visualizer"). +-define(DEFAULT_WINDOW_WIDTH, 750). +-define(DEFAULT_WINDOW_HEIGHT, 600). +-define(DEFAULT_MIN_WINDOW_WIDTH, 300). +-define(DEFAULT_MIN_WINDOW_HEIGHT, 250). + + +-record(window_params, {window_id, + window_width, + window_height + }). + + + +-record(process_variables, {parent_pid, + pw_pid, + pd_pid, + dbs_pid, + etsread_pid, + current_node, + local_node, + table_id = undefined, + table_type = ets, + table_name, + table_protection, + marked_row, + marked_object, + marked_color, + lists_as_strings = true, + poll_interval = infinity, % seconds or 'infinity' + window_params = #window_params{} + }). diff --git a/lib/tv/src/tv_pc_menu_handling.erl b/lib/tv/src/tv_pc_menu_handling.erl new file mode 100644 index 0000000000..16195bf91f --- /dev/null +++ b/lib/tv/src/tv_pc_menu_handling.erl @@ -0,0 +1,485 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Part of pc handling the creation of menus, as well as +%%% treating the signals these menus results in, +%%% when chosen. +%%% +%%%********************************************************************* + + +-module(tv_pc_menu_handling). + + + +-export([create_menus/1, + exit_button/1, + insert_object/1, + delete_object/1, + search_object/1, + open_table/7, + set_poll_interval/1, + poll_table/1, + sort_rising_order/1, + sort_falling_order/1, + no_sorting/1, + lists_as_strings/1, + lists_as_lists/1, + table_info/1, + help_button/1, + otp_help_button/1, + get_window_title/4]). + + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pc_int_def.hrl"). + + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + +%% Shortcuts currently used, in alphabetical order: +%% +%% c -> "Exit" +%% d -> "Delete Object" +%% f -> "Sort Falling Order" +%% h -> "Help" +%% i -> "Table Info" +%% n -> "No Sorting" +%% o -> "Edit Object" +%% p -> "Poll Table" +%% r -> "Sort Rising Order" +%% s -> "Search Object" +%% v -> "Set Poll Interval" +%% x -> "Exit" + + +create_menus(PwPid) -> + %% Due to a bug (or some other reason), only one of the radiobuttons belonging + %% to a specified group can be selected, even if different processes have created + %% the radiobuttons! This means that, if we have started more than one tv_main + %% process, selecting one radiobutton will affect the radiobuttons in the other + %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to + %% create unique group names (i.e., atoms). + %% (We need to group the radiobuttons, since otherwise all created by one process + %% belongs to the same group, which also is undesirable...) + SelfStr = pid_to_list(self()), + SortGroup = list_to_atom("sorting" ++ SelfStr), + ListGroup = list_to_atom("lists" ++ SelfStr), + + % Order pw to create the 'File' menu. + ?GRAPH_FUNC_FILE:create_menu(PwPid, + " File ", + 1, + [{" Table Info ", normal, table_info, 7, i}, + separator, + {" Close ", normal, exit_button, 1, c} + ]), + ?GRAPH_FUNC_FILE:create_menu(PwPid, + " Edit ", + 1, + [{" Edit Object... ", normal, insert_object, 1, o}, + {" Delete Object ", normal, delete_object, 1, d} + ]), + ?GRAPH_FUNC_FILE:create_menu(PwPid, + " View ", + 1, + [{" Lists as Lists ",{radio,false,ListGroup},lists_as_lists,10,no_char}, + {" Lists as Strings ",{radio,true,ListGroup},lists_as_strings,10,no_char} + ]), + % Order pw to create the 'Options' menu. + ?GRAPH_FUNC_FILE:create_menu(PwPid, + " Options ", + 1, + [{" Poll Table ", normal, poll_table, 1, p}, + {" Poll Interval... ",normal,set_poll_interval,6,no_char}, + separator, + {" Search Object ", normal, search_object, 1, s}, + separator, + {" Sort Ascending Order ",{radio,false,SortGroup},sort_rising_order,6,no_char}, + {" Sort Descending Order ",{radio,false,SortGroup},sort_falling_order,6,no_char}, + {" No Sorting ",{radio,true,SortGroup},no_sorting,1,no_char} + ]). + + + + + +exit_button(_ProcVars) -> + exit(normal). + + + +help_button(ProcVars) -> + WinP = ProcVars#process_variables.window_params, + HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), + tool_utils:open_help(WinP#window_params.window_id, HelpFile), + ProcVars. + + + + +otp_help_button(ProcVars) -> + WinP = ProcVars#process_variables.window_params, + IndexFile = filename:join([code:root_dir(), "doc", "index.html"]), + + tool_utils:open_help(WinP#window_params.window_id, IndexFile), + ProcVars. + + + + +table_info(ProcVars) -> + #process_variables{table_id = TableId, + current_node = Node, + local_node = LocalNode, + table_type = Type, + parent_pid = ParentPid} = ProcVars, + + case TableId of + undefined -> + done; + _OtherValue -> + ParentPid ! {tv_start_infowin, TableId, Node, LocalNode, Type} + end, + ProcVars. + + + +sort_rising_order(ProcVars) -> + request_sort_settings(ProcVars#process_variables.pd_pid, true, false), + ProcVars. + + +sort_falling_order(ProcVars) -> + request_sort_settings(ProcVars#process_variables.pd_pid, true, true), + ProcVars. + + +no_sorting(ProcVars) -> + request_sort_settings(ProcVars#process_variables.pd_pid, false, false), + ProcVars. + + +set_poll_interval(ProcVars) -> + #process_variables{etsread_pid = EtsreadPid, + poll_interval = PollInterval} = ProcVars, + + case tv_poll_dialog:start(PollInterval) of + cancel -> + ProcVars; + NewPollInterval -> + EtsreadPid ! #etsread_set_poll_interval{sender = self(), + interval = NewPollInterval}, + ProcVars#process_variables{poll_interval = NewPollInterval} + end. + + + +poll_table(ProcVars) -> + EtsreadPid = ProcVars#process_variables.etsread_pid, + EtsreadPid ! #etsread_poll_table{sender = self()}, + ProcVars. + + +search_object(ProcVars) -> + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #dbs_search_req{sender=self()}, + ProcVars. + + + +lists_as_strings(ProcVars) -> + PdPid = ProcVars#process_variables.pd_pid, + PdPid ! #pc_list_info{sender=self(), lists_as_strings=true}, + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #pc_list_info{sender=self(), lists_as_strings=true}, + ProcVars#process_variables{lists_as_strings=true}. + + + + +lists_as_lists(ProcVars) -> + PdPid = ProcVars#process_variables.pd_pid, + PdPid ! #pc_list_info{sender=self(), lists_as_strings=false}, + DbsPid = ProcVars#process_variables.dbs_pid, + DbsPid ! #pc_list_info{sender=self(), lists_as_strings=false}, + ProcVars#process_variables{lists_as_strings=false}. + + + + + + +insert_object(ProcVars) -> + #process_variables{pd_pid = PdPid, + current_node = Node, + local_node = LocalNode, + table_type = TabType, + table_name = TabName, + table_protection = Protection, + window_params = WinP} = ProcVars, + + case Protection of + public -> + case TabType of + mnesia -> + case catch tv_mnesia_rpc:table_info(Node, LocalNode, TabName, attributes) of + nodedown -> + handle_error(nodedown); + no_table -> + handle_error(nodedown); + mnesia_not_started -> + handle_error(mnesia_not_started); + {unexpected_error,Reason} -> + handle_error({unexpected_error,Reason}); + AttrList -> + PdPid ! #pd_rec_edit{sender = self(), + attributes = AttrList + } + end; + ets -> + PdPid ! #pd_rec_edit{sender = self(), + attributes = [tuple] + } + end; + _OtherProtection -> + WinId = WinP#window_params.window_id, + gs:config(WinId, [beep]), + ErrMsg = + case get(error_msg_mode) of + normal -> + ["The table is protected and", + " cannot be edited."]; + haiku -> + ["The table you see", + "Is cunningly protected:", + "You can only watch."] + end, + tv_utils:notify(WinId, "TV Notification", ErrMsg) + end, + ProcVars. + + + + + + +delete_object(ProcVars) -> + #process_variables{dbs_pid = DbsPid, + table_protection = Protection, + marked_row = MarkedRow, + marked_object = MarkedObject, + marked_color = MarkedColor, + window_params = WinP} = ProcVars, + + case MarkedRow of + undefined -> + done; + _AnyRow -> + case Protection of + public -> + DbsPid ! #dbs_delete_object{sender = self(), + object = MarkedObject, + color = MarkedColor, + obj_no = MarkedRow}; + _OtherProtection -> + WinId = WinP#window_params.window_id, + gs:config(WinId, [beep]), + ErrMsg = + case get(error_msg_mode) of + normal -> + ["The table is protected and", + " cannot be edited."]; + haiku -> + ["The table you see", + "Is cunningly protected:", + "You can only watch."] + end, + tv_utils:notify(WinId, "TV Notification", ErrMsg) + end + end, + ProcVars. + + + + + + +open_table(CurrNode, LocalNode, TableId, TableType, TableName, Raise, ProcVars) -> + #process_variables{dbs_pid = DbsPid, + etsread_pid = EtsreadPid, + pw_pid = PwPid, + pd_pid = PdPid, + poll_interval = PollInterval, + window_params = WinP} = ProcVars, + + case Raise of + true -> + gs:config(WinP#window_params.window_id, [raise]); + false -> + done + end, + + {Type, KeyPos, Protection} = init_etsread(EtsreadPid, DbsPid, CurrNode, LocalNode, TableId, + TableType, PollInterval), + WinTitle = get_window_title(TableType, CurrNode, TableId, TableName), + PwPid ! #pw_set_window_title{sender = self(), + win_title = WinTitle}, + Writable = + case Protection of + public -> + true; + _Other -> + false + end, + RecordName = + case TableType of + mnesia -> + tv_mnesia_rpc:table_info(CurrNode, LocalNode, TableId, record_name); + ets -> + undefined + end, + PdPid ! #pd_new_table{sender = self(), + table_type = TableType, + table_name = TableName, + record_name = RecordName, + writable = Writable}, + init_dbs(DbsPid, Type, KeyPos, EtsreadPid), + ProcVars#process_variables{current_node = CurrNode, + local_node = LocalNode, + table_id = TableId, + table_type = TableType, + table_name = TableName, + table_protection = Protection}. + + + + + + +get_window_title(ets, Node, TableId, TableName) -> + NameStr = lists:flatten(io_lib:write(TableName)), + TableStr = case TableId of + {TableName, _Pid} -> + NameStr; + TableName -> + NameStr; + _Other -> + lists:flatten(io_lib:write(TableId)) ++ " (" ++ NameStr ++ ")" + end, + + WinTitleSuffix = " Node: " ++ atom_to_list(Node), + "ETS: " ++ TableStr ++ WinTitleSuffix; +get_window_title(mnesia, Node, _TableId, TableName) -> + TableNameStr = lists:flatten(io_lib:write(TableName)), + WinTitleSuffix = " Node: " ++ atom_to_list(Node), + "Mnesia: " ++ TableNameStr ++ WinTitleSuffix. + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + +init_etsread(EtsreadPid, DbsPid, Node, LocalNode, TableId, TableType, PollInterval) -> + EtsreadPid ! #etsread_deblock{sender = self(), + dbs_pid = DbsPid, + node = Node, + local_node = LocalNode, + table_id = TableId, + table_type = TableType, + poll_interval = PollInterval + }, + receive + #etsread_deblock_cfm{type=Type, keypos=KeyPos, protection=Protection} -> + {Type, KeyPos, Protection} + after 10000 -> + exit(error) + end. + + + + +init_dbs(DbsPid, Type, KeyPos, EtsreadPid) -> + DbsPid ! #dbs_deblock{sender = self(), + etsread_pid = EtsreadPid, + type = Type, + keypos = KeyPos, + sublist_length = ?ITEMS_TO_DISPLAY + }, + receive + #dbs_deblock_cfm{} -> + done + after 10000 -> + exit(error) + end. + + + + + + +request_sort_settings(PdPid, Sorting, Reverse) -> + PdPid ! #pd_get_sort_settings{sender = self(), + sorting = Sorting, + reverse = Reverse + }. + + + + + + +handle_error(mnesia_not_started) -> + gs:window(errorwin, gs:start(), []), + gs:config(errorwin, [beep]), + case get(error_msg_mode) of + normal -> + tv_utils:notify(errorwin, "TV Notification", ["Mnesia not started!"]); + haiku -> + tv_utils:notify(errorwin, "TV Notification", ["Mnesia is stopped.", + "We wish to reach all data", + "But we never will."]) + end, + gs:destroy(errorwin); +handle_error(nodedown) -> + done; %% Main process handles this! +handle_error({unexpected_error,Cause}) -> + gs:window(errorwin, gs:start(), []), + io:format("Unexpected error: ~p~n", [Cause]), + gs:config(errorwin, [beep]), + gs:destroy(errorwin). + + diff --git a/lib/tv/src/tv_pd.erl b/lib/tv/src/tv_pd.erl new file mode 100644 index 0000000000..ea14bf67b1 --- /dev/null +++ b/lib/tv/src/tv_pd.erl @@ -0,0 +1,1122 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Code for pd, i.e., the data displaying part of the table +%%% tool. +%%% +%%%********************************************************************* + + +-module(tv_pd). + + + +-export([pd/2]). + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pd_int_def.hrl"). +-include("tv_pd_int_msg.hrl"). + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: pd. +%% +%% Return Value: None. +%% +%% Description: Process controlling the display part of the window, +%% i.e., showing diagrams and handling the scale used for scrolling. +%% +%% Parameters: None. +%%====================================================================== + + +pd(Master, ErrMsgMode) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrMsgMode), + PgPid = spawn_link(tv_pg, pg, [self()]), + PbPid = spawn_link(tv_pb, pb, [self()]), + + ProcVars = #process_variables{master_pid = Master, + pg_pid = PgPid, + pb_pid = PbPid}, + blocked(ProcVars). + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +%%====================================================================== +%% Function: blocked. +%% +%% Return Value: None. +%% +%% Description: When started or explicitly blocked, pd enters this state, +%% where nothing is performed until the module explicitly is +%% deblocked. +%% +%% Parameters: +%%====================================================================== + + +blocked(ProcVars) -> + receive + Msg -> + case Msg of + + #pd_deblock{} -> + deblock(Msg, ProcVars); + + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + blocked(ProcVars); + + + _Other -> + blocked(ProcVars) + end + end. + + + + + + + + + +%%====================================================================== +%% Function: deblock. +%% +%% Return Value: None. +%% +%% Description: When deblocked, a canvas and scale shall be created according to +%% specification received in pd_deblock message. +%% +%% Parameters: Rec: received pd_deblock message. +%%====================================================================== + + + +deblock(Msg, ProcVars) -> + #pd_deblock{win = WindowId, + win_width = WindowWidth, + win_height = WindowHeight} = Msg, + + NewProcVars = ?DISP_FUNC_FILE:init_display(WindowId, WindowWidth, WindowHeight, + ProcVars), + receive + + #pg_ready{} -> + Sender = Msg#pd_deblock.sender, + Sender ! #pd_deblock_cfm{sender = self()}, + deblocked_loop(NewProcVars) + + end. + + + + + + + + +%%====================================================================== +%% Function: deblocked_loop. +%% +%% Return Value: None. +%% +%% Description: Eternal (well, almost) loop, receiving messages and +%% handling them. +%% +%% Parameters: Master: Pid to the 'pc' process. +%% Win: Id of the window created. +%%====================================================================== + + + +deblocked_loop(ProcVars) -> + receive + Msg -> + case Msg of + + {gs, Id, Event, Data, Args} -> + NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), + deblocked_loop(NewProcVars); + + _Other -> + NewProcVars = tv_messages(Msg, ProcVars), + deblocked_loop(NewProcVars) + end + end. + + + + + +tv_messages(Msg, ProcVars) -> + WinId = ProcVars#process_variables.window_id, + + case Msg of + #pg_cell_marked{} -> + mark_busy(WinId), + NewProcVars = handle_cell_marked(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pc_data{} -> + mark_busy(WinId), + NewProcVars = show_data(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pc_list_info{} -> + handle_list_info(Msg, ProcVars); + + #pb_col_marked{} -> + mark_busy(WinId), + NewProcVars = handle_col_marked(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pb_row_marked{} -> + mark_busy(WinId), + NewProcVars = handle_row_marked(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pb_new_colwidth{} -> + mark_busy(WinId), + NewProcVars = resize_column(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pd_get_sort_settings{sorting = Sorting, reverse = Reverse} -> + mark_busy(WinId), + NewProcVars = + case send_sort_info_signal(Sorting, Reverse, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(Sorting, TempNewProcVars) + end, + mark_nonbusy(WinId), + NewProcVars; + + #pd_new_table{table_type=TabType,table_name=TabName, + record_name=RecName,writable=Writable} -> + mark_busy(WinId), + ToolP = ProcVars#process_variables.toolbar_params, + ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), + mark_nonbusy(WinId), + ProcVars#process_variables{table_type = TabType, + table_name = TabName, + record_name = RecName, + writable = Writable}; + + #pd_win_conf{} -> + mark_busy(WinId), + NewProcVars = resize_window(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + #pd_rec_edit{} -> + mark_busy(WinId), + NewProcVars = open_rec_edit(Msg, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + + {updated_object, UpdObj} -> + get_updated_elem2(true, UpdObj, ProcVars), + ProcVars; + + {new_object, NewObj} -> + get_updated_elem2(true, NewObj, ProcVars), + ProcVars; + + {error_msg_mode, Mode} -> + put(error_msg_mode, Mode), + ProcVars; + + {'EXIT', Pid, Reason} -> + exit_signals({Pid, Reason}, ProcVars); + + _Other -> + ProcVars + end. + + + + + + +exit_signals(ExitInfo, ProcVars) -> + #process_variables{master_pid = MasterPid, + pg_pid = PgPid, + pb_pid = PbPid, + rec_pid = RecPid} = ProcVars, + + case ExitInfo of + {MasterPid, _Reason} -> + exit(normal); + {PgPid, _Reason} -> + exit(normal); + {PbPid, _Reason} -> + exit(normal); + {RecPid, _Reason} -> + ProcVars#process_variables{rec_pid = undefined}; + _Other -> + ProcVars + end. + + + + +open_rec_edit(Msg, ProcVars) -> + #pd_rec_edit{attributes = AttrList} = Msg, + + #process_variables{rec_pid = RecPid, + table_type = TabType, + table_name = TabName, + record_name = RecordName, + lists_as_strings = ListsAsStr, + mark_params = MarkP} = ProcVars, + + #mark_params{marked_object = MarkedObject} = MarkP, + + TabOrRecName = + case TabType of + mnesia -> + RecordName; + ets -> + TabName + end, + + case RecPid of + undefined -> + NewRecPid = + case MarkedObject of + undefined -> + tv_rec_edit:start(TabType, TabOrRecName, AttrList, ListsAsStr, + get(error_msg_mode)); + _Other -> + AttrVals = + case TabType of + mnesia -> + tl(tuple_to_list(MarkedObject)); + ets -> + [MarkedObject] + end, + tv_rec_edit:start(TabType, TabOrRecName, AttrList, AttrVals, ListsAsStr, + get(error_msg_mode)) + end, + ProcVars#process_variables{rec_pid = NewRecPid}; + _AnyPid -> + RecPid ! raise, + ProcVars + end. + + + + + + + +gs_messages(Msg, ProcVars) -> + + case Msg of + + {editentry, keypress, _Data, ['Tab' | _T]} -> + gs:config(editentry, [{select, {0,100000000}}]), + ProcVars; + + {editentry, keypress, _Data, ['Return' | _T]} -> + get_updated_elem(ProcVars), + ProcVars; + + {Id, enter, {toolbar, Btn, Str}, _} -> + gs:config(Id, [{motion, true}]), + NewProcVars = handle_toolbar_buttons(Id, Btn, Str, false, 0, 0, + ProcVars), + NewProcVars; + + + {_Id, buttonpress, _Data, [3 | _Rest]} -> + ProcVars; + + + {_Id, buttonpress, vscale, [MouseBtn | _Tail]} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = ?DISP_FUNC_FILE:scroll_vertically(MouseBtn, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + + % The order of messages from gs ought to be + % 1. 'buttonpress' + % 2. 'click' and + % 3. 'buttonrelease' + % However, quite often the 'click' message comes last, meaning we have + % to check for this. :-( + + {_Id, click, vscale, [NewScalePos | _Tail]} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = ?DISP_FUNC_FILE:perform_vertical_scroll(NewScalePos, + ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + + {_Id, buttonpress, hscale, [MouseBtn | _Tail]} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = ?DISP_FUNC_FILE:scroll_horizontally(MouseBtn, ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + + {_Id, click, hscale, [NewScalePos | _Tail]} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = ?DISP_FUNC_FILE:perform_horizontal_scroll(NewScalePos, + ProcVars), + mark_nonbusy(WinId), + NewProcVars; + + + {_Id, click, {toolbar, poll_table, _Str}, _Arg} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_poll_table{sender = self()}, + mark_nonbusy(WinId), + ProcVars; + + + {_Id, click, {toolbar, select_browser, _Str}, _Arg} -> + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_select{sender = self()}, + ProcVars; + + + {_Id, click, {toolbar, help_button, _Str}, _Arg} -> + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_help{sender = self()}, + ProcVars; + + + + {_Id, click, {toolbar, insert_object, _Str}, _Arg} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! {pc_edit_object, self()}, + mark_nonbusy(WinId), + ProcVars; + + + {_Id, click, {toolbar, search_object, _Str}, _Arg} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_search_req{sender = self()}, + mark_nonbusy(WinId), + ProcVars; + + + {_Id, click, {toolbar, sort_rising_order, _Str}, _Arg} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = case send_sort_info_signal(true, false, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(true, TempNewProcVars) + end, + mark_nonbusy(WinId), + NewProcVars; + + + {_Id, click, {toolbar, sort_falling_order, _Str}, _Arg} -> + WinId = ProcVars#process_variables.window_id, + mark_busy(WinId), + NewProcVars = case send_sort_info_signal(true, true, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(true, TempNewProcVars) + end, + mark_nonbusy(WinId), + NewProcVars; + + + {_Id, click, {toolbar, no_sorting, _Str}, _Arg} -> + NewProcVars = case send_sort_info_signal(false, false, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(false, TempNewProcVars) + end, + NewProcVars; + + + {Id, click, {toolbar, table_info, _Str}, _Arg} -> + ToolP = ProcVars#process_variables.toolbar_params, + F = ToolP#toolbar_params.pop_up_frame_id, + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_show_table_info{sender = self()}, + ProcVars; + + + {Id, click, {labelbtn, pop_up}, _Arg} -> + gs:config(Id, [{data, {labelbtn, pop_down}}]), + NewProcVars = ?DISP_FUNC_FILE:show_toolbar_editor(ProcVars), + NewProcVars; + + + {Id, click, {labelbtn, pop_down}, _Arg} -> + gs:config(Id, [{data, {labelbtn, pop_up}}]), + NewProcVars = ?DISP_FUNC_FILE:hide_toolbar_editor(ProcVars), + NewProcVars; + + + _OtherMessage -> + ProcVars + + end. + + + + + +get_updated_elem(ProcVars) -> + EditedStr = gs:read(editentry, text), + case tv_db_search:string_to_term(EditedStr) of + {error, {_Reason, Msg}} -> + gs:config(editentry, [beep]), + gs:window(pdwin, gs:start(), []), + tv_utils:notify(pdwin, "TV Notification", Msg), + gs:destroy(pdwin), + ProcVars; + {ok, NewTerm} -> + get_updated_elem2(false, NewTerm, ProcVars) + end. + + + + + +get_updated_elem2(FromRecEdit, NewTerm, ProcVars) -> + #process_variables{table_type = TableType, + record_name = RecordName, + mark_params = MarkP, + master_pid = PcPid} = ProcVars, + + #mark_params{marked_object = ObjToUpdate, + marked_color = ObjColor, + virtual_row_no = VirtualRow, + cell_col_no = VirtualCol} = MarkP, + + case ObjToUpdate of + undefined -> + case new_object_ok(TableType, RecordName, NewTerm) of + true -> + PcPid ! #pd_new_object{sender = self(), + object = NewTerm}, + ProcVars; + {false, Msg} -> + gs:window(pdwin, gs:start(), []), + tv_utils:notify(pdwin, "TV Notification", Msg), + gs:destroy(pdwin), + ProcVars + end; + _AnyObj -> + %% We need to know if the object has been deleted! + NewObj = + case VirtualCol of + undefined -> + NewTerm; + _AnyCol when FromRecEdit -> + NewTerm; + _AnyCol -> + if + is_tuple(ObjToUpdate) -> + erlang:setelement(VirtualCol, ObjToUpdate, NewTerm); + true -> + NewTerm + end + end, + %% Is the update OK? + case update_ok(TableType, ObjToUpdate, NewObj) of + true -> + PcPid ! #pd_updated_object{sender = self(), + object = NewObj, + old_object = ObjToUpdate, + old_color = ObjColor, + obj_no = VirtualRow}, + ProcVars; + false -> + gs:window(pdwin, gs:start(), []), + case get(error_msg_mode) of + normal -> + tv_utils:notify(pdwin, "TV Notification", + ["The record name cannot be changed!"]); + haiku -> + tv_utils:notify(pdwin, "TV Notification", + ["The attempt to change", + "The permanent record name", + "Is simply ignored."]) + end, + gs:destroy(pdwin), + ProcVars + end + end. + + + + +new_object_ok(ets, _RecordName, NewTerm) when is_tuple(NewTerm) -> + true; +new_object_ok(ets, _RecordName, _NewTerm) -> + Msg = case get(error_msg_mode) of + normal -> + ["Object is not a tuple!"]; + haiku -> + ["Yes, it is a term.", + "It is pretty, but it's not", + "A proper tuple."] + end, + {false, Msg}; +new_object_ok(mnesia, RecordName, NewTerm) when is_tuple(NewTerm) -> + NewRecName = element(1, NewTerm), + case NewRecName of + RecordName -> + true; + _OtherName -> + Msg = case get(error_msg_mode) of + normal -> + ["Erroneous record name!"]; + haiku -> + ["The attempt to use", + "An invalid record name", + "Is simply ignored."] + end, + {false, Msg} + end; +new_object_ok(mnesia, _RecordName, _NewTerm) -> + Msg = case get(error_msg_mode) of + normal -> + ["Object is not a record!"]; + haiku -> + ["Yes, it is a term.", + "It is pretty, but it's not", + "The proper record."] + end, + {false, Msg}. + + + + +update_ok(ets, _ObjectToUpdate, _NewObject) -> + true; +update_ok(mnesia, ObjectToUpdate, NewObject) -> + OldRecName = element(1, ObjectToUpdate), + NewRecName = element(1, NewObject), + case NewRecName of + OldRecName -> + true; + _Other -> + false + end. + + + + +handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars) -> + WinId = ProcVars#process_variables.window_id, + ToolP = ProcVars#process_variables.toolbar_params, + F = ToolP#toolbar_params.pop_up_frame_id, + + receive + + {gs, Id, motion, _Data, [NewX, NewY | _]} -> + handle_toolbar_buttons(Id, Btn, Str, LabelShown, NewX, NewY, + ProcVars); + + {gs, editentry, keypress, _Data, ['Tab' | _T]} -> + gs:config(editentry, [{select, {0,100000000}}]), + handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); + + {gs, editentry, keypress, _Data, ['Return' | _T]} -> + get_updated_elem(ProcVars), + handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); + + {gs, Id, leave, {toolbar, Btn, Str}, _Arg} -> + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + ProcVars; + + {gs, Id, click, {toolbar, poll_table, _Str}, _Arg} -> + mark_busy(WinId), + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_poll_table{sender = self()}, + mark_nonbusy(WinId), + ProcVars; + + {gs, Id, click, {toolbar, select_browser, _Str}, _Arg} -> + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_select{sender = self()}, + ProcVars; + + {gs, Id, click, {toolbar, help_button, _Str}, _Arg} -> + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_help{sender = self()}, + ProcVars; + + {gs, Id, click, {toolbar, insert_object, _Str}, _Arg} -> + mark_busy(WinId), + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! {pc_edit_object, self()}, + mark_nonbusy(WinId), + ProcVars; + + + {gs, Id, click, {toolbar, search_object, _Str}, _Arg} -> + mark_busy(WinId), + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_search_req{sender = self()}, + mark_nonbusy(WinId), + ProcVars; + + {gs, Id, click, {toolbar, sort_rising_order, _Str}, _Arg} -> + mark_busy(WinId), + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + NewProcVars = + case send_sort_info_signal(true, false, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(true, TempNewProcVars) + end, + mark_nonbusy(WinId), + NewProcVars; + + {gs, Id, click, {toolbar, sort_falling_order, _Str}, _Arg} -> + mark_busy(WinId), + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + NewProcVars = + case send_sort_info_signal(true, true, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(true, TempNewProcVars) + end, + mark_nonbusy(WinId), + NewProcVars; + + {gs, Id, click, {toolbar, no_sorting, _Str}, _Arg} -> + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + NewProcVars = + case send_sort_info_signal(false, false, ProcVars) of + ignore -> + ProcVars; + TempNewProcVars -> + set_sort_col(false, TempNewProcVars) + end, + NewProcVars; + + {gs, Id, click, {toolbar, table_info, _Str}, _Arg} -> + gs:config(F, [{y, -30}]), + gs:config(Id, [{motion, false}]), + PcPid = ProcVars#process_variables.master_pid, + PcPid ! #pc_show_table_info{sender = self()}, + ProcVars; + + {'EXIT', Pid, Reason} -> + exit_signals({Pid, Reason}, ProcVars), + handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); + + OtherMsg -> + NewProcVars = tv_messages(OtherMsg, ProcVars), + handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, NewProcVars) + + after 600 -> + case LabelShown of + false -> + FrameP = ProcVars#process_variables.frame_params, + L = ToolP#toolbar_params.pop_up_label_id, + + #frame_params{toolbar_frame_width = TWidth, + toolbar_frame_height = THeight} = FrameP, + + BtnHeight = gs:read(Id, height), + BtnXpos = gs:read(Id, x), + BtnYpos = gs:read(Id, y), + FrameHeight = gs:read(F, height), + FontUsed = gs:read(L, font), + {StringWidth, _H} = gs:read(L, {font_wh, {FontUsed, Str}}), + + Width = StringWidth + 6, + Xpos = BtnXpos + X, + LblXpos = if + Xpos + Width > TWidth -> + Xpos - Width; + true -> + Xpos + end, + % Ypos = BtnYpos + Y + 15, + Ypos = BtnYpos + BtnHeight + 6, + LblYpos = if + Ypos + FrameHeight > THeight -> + Ypos - FrameHeight - 25; + true -> + Ypos + end, + gs:config(L, [{width, Width - 2}, + {label, {text, Str}}]), + gs:config(F, [{width, Width}, + {x, LblXpos}, + {y, LblYpos} + ]); + true -> + done + end, + handle_toolbar_buttons(Id, Btn, Str, true, X, Y, ProcVars) + end. + + + + + + +set_sort_col(SortingOn, ProcVars) -> + #process_variables{pb_pid = PbPid, + mark_params = MarkP} = ProcVars, + + SortCol = case SortingOn of + true -> + MarkP#mark_params.col_no; + false -> + undefined + end, + PbPid ! #pb_set_sort_col{sender = self(), + virtual_col = SortCol + }, + remove_all_marks(SortCol, ProcVars). + + + + + +send_sort_info_signal(Sorting, Reverse, ProcVars) -> + #process_variables{master_pid = PcPid, + mark_params = MarkP} = ProcVars, + + SortColNo = MarkP#mark_params.col_no, + + PcPid ! #pc_set_sorting_mode{sender = self(), + sorting = Sorting, + reverse = Reverse, + sort_key_no = SortColNo + }, + receive + #pc_set_sorting_mode_cfm{sort_key_no = FinalSortColNo} -> + NewMarkP = MarkP#mark_params{col_no = FinalSortColNo}, + ProcVars#process_variables{mark_params = NewMarkP}; + + #pd_ignore{} -> + ignore + + end. + + + + + +show_data(Msg, ProcVars) -> + #pc_data{scale_pos = Pos, + scale_range = Range, + list_range = MaxValue, + elementlist = List, + list_of_keys = KeyList, + max_elem_size = MaxElemSize, + marked_row = MarkedRowData} = Msg, + + ?DISP_FUNC_FILE:display_data(Pos, Range, MaxValue, List, KeyList, MaxElemSize, + MarkedRowData, ProcVars). + + + + + + +handle_list_info(Msg, ProcVars) -> + ListAsStr = Msg#pc_list_info.lists_as_strings, + PgPid = ProcVars#process_variables.pg_pid, + PgPid ! #pg_list_info{sender = self(), + lists_as_strings = ListAsStr}, + ProcVars#process_variables{lists_as_strings = ListAsStr}. + + + + + +handle_col_marked(Msg, ProcVars) -> + #pb_col_marked{col_marked = ColMarked, + virtual_col = VirtualCol} = Msg, + + #process_variables{master_pid = MasterPid, + pg_pid = PgPid, + rec_pid = RecPid, + writable = Writable, + toolbar_params = ToolP, + mark_params = MarkP} = ProcVars, + SortCol = MarkP#mark_params.sort_col_no, + + PgPid ! #pg_remove_marks{sender = self()}, + + case ColMarked of + true -> + PgPid ! #pg_col_marked{sender = self(), + virtual_col = VirtualCol}; + false -> + done + end, + + MasterPid ! #pc_marked_row{sender = self(), + row_no = undefined, + object = undefined, + color = undefined + }, + + ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), + send_to_rec_edit(RecPid, insert_mode), + + NewMarkP = + if + ColMarked -> + MarkP#mark_params{col_no = VirtualCol}; + true -> + if + SortCol =:= undefined -> + MarkP; + true -> + MarkP#mark_params{col_no = SortCol} + end + end, + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + + +remove_all_marks(SortCol, ProcVars) -> + #process_variables{master_pid = MasterPid, + pb_pid = PbPid, + pg_pid = PgPid, + toolbar_params = ToolP} = ProcVars, + + PgPid ! #pg_remove_marks{sender = self()}, + PbPid ! #pb_remove_marks{sender = self()}, + MasterPid ! #pc_marked_row{sender = self(), + row_no = undefined, + object = undefined, + color = undefined + }, +%% ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), + ?DISP_FUNC_FILE:update_toolbar_editor(ToolP#toolbar_params.editor_id, notext), +%% send_to_rec_edit(RecPid, insert_mode), + ProcVars#process_variables{mark_params = #mark_params{sort_col_no = SortCol, + cell_col_no = undefined, + row_no = undefined, + virtual_row_no = undefined, + marked_object = undefined, + marked_color = undefined} + }. + + + + + + +handle_row_marked(Msg, ProcVars) -> + #pb_row_marked{row_marked = RowMarked, + virtual_row = VirtualRow, + real_row = RealRow} = Msg, + + #process_variables{master_pid = MasterPid, + rec_pid = RecPid, + pg_pid = PgPid, + data_list = DataList, + color_list = ColorList, + writable = Writable, + toolbar_params = ToolP, + mark_params = MarkP} = ProcVars, + + PgPid ! #pg_remove_marks{sender = self()}, + + case RowMarked of + true -> + PgPid ! #pg_row_marked{sender = self(), + virtual_row = VirtualRow}; + false -> + done + end, + + {DataElement, NewMarkP} = + if + RowMarked -> + {MarkedRowOrCol, RowObj} = + ?DISP_FUNC_FILE:get_data_element(row, DataList, RealRow, undefined), + + MarkedRowColor = + case MarkedRowOrCol of + notext -> + undefined; + _OtherObject -> + lists:nth(RealRow, ColorList) + end, + MasterPid ! #pc_marked_row{sender = self(), + row_no = VirtualRow, + object = RowObj, + color = MarkedRowColor + }, + send_to_rec_edit(RecPid, {update_mode,RowObj}), + {MarkedRowOrCol, MarkP#mark_params{virtual_row_no = VirtualRow, + row_no = RealRow, + cell_col_no = undefined, + col_no = undefined, + marked_object = RowObj, + marked_color = MarkedRowColor}}; + true -> + MasterPid ! #pc_marked_row{sender = self(), + row_no = undefined, + object = undefined, + color = undefined + }, + send_to_rec_edit(RecPid, insert_mode), + {notext, MarkP#mark_params{virtual_row_no = undefined, + row_no = undefined, + cell_col_no = undefined, + col_no = undefined, + marked_object = undefined, + marked_color = undefined}} + end, + + ?DISP_FUNC_FILE:update_toolbar_label(DataElement, ToolP, VirtualRow, + undefined, Writable), + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + +handle_cell_marked(Msg, ProcVars) -> + #pg_cell_marked{cell_marked = CellMarked, + virtual_col = VirtualCol, + real_row = RealRow, + virtual_row = VirtualRow} = Msg, + + % We are interested in the real row number, since we only have a sublist + % stored in pd. + ?DISP_FUNC_FILE:marked_cell(CellMarked, VirtualCol, RealRow, VirtualRow, + ProcVars). + + + + +resize_window(Msg, ProcVars) -> + #pd_win_conf{width = NewWindowWidth, + height = NewWindowHeight} = Msg, + + ?DISP_FUNC_FILE:resize_display(NewWindowWidth, NewWindowHeight, ProcVars). + + + + +resize_column(Msg, ProcVars) -> + #pb_new_colwidth{real_col = RealCol, + virtual_col = VirtualCol, + xdiff = Xdiff} = Msg, + + ?DISP_FUNC_FILE:resize_column(RealCol, VirtualCol, Xdiff, ProcVars). + + + + +mark_busy(Id) -> + gs:config(Id, [{cursor, busy}]). + + + + +mark_nonbusy(Id) -> + gs:config(Id, [{cursor, arrow}]). + + + + +send_to_rec_edit(undefined, _Msg) -> + done; +send_to_rec_edit(RecPid, Msg) -> + RecPid ! Msg. + diff --git a/lib/tv/src/tv_pd_display.erl b/lib/tv/src/tv_pd_display.erl new file mode 100644 index 0000000000..f5a30cb640 --- /dev/null +++ b/lib/tv/src/tv_pd_display.erl @@ -0,0 +1,1059 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Part of pd controlling the graphics. +%%% +%%%********************************************************************* + +-module(tv_pd_display). + + + + +-export([init_display/4, + display_data/8, + resize_display/3, + resize_column/4, + scroll_horizontally/2, + scroll_vertically/2, + perform_horizontal_scroll/2, + perform_vertical_scroll/2, + marked_cell/5, + update_toolbar_label/5, + update_toolbar_editor/2, + get_data_element/4, + hide_toolbar_editor/1, + show_toolbar_editor/1]). + + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pd_int_def.hrl"). +-include("tv_pd_int_msg.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + +%%====================================================================== +%% Function: init_display. +%% +%% Return Value: Id of the display (here:canvas) created. +%% +%% Description: Creates the canvas and the scale. +%% +%% Parameters: Id of the window the display shall be created in. +%%====================================================================== + + +init_display(WindowId, WindowWidth, WindowHeight, ProcVars) -> + % Get all necessary window parameters! + #process_variables{pg_pid = PgPid, + pb_pid = PbPid, + frame_params = FrameP, + scale_params = ScaleP, + toolbar_params = ToolP} = ProcVars, + + NewFrameP = tv_pd_frames:create_display_frames(WindowId, WindowWidth, + WindowHeight, FrameP), + + #frame_params{grid_frame_id = GridParentId, + grid_frame_width = GridParentWidth, + grid_frame_height = GridParentHeight} = NewFrameP, + + PgPid ! #pg_init_grid{sender = self(), + parent_id = GridParentId, + width = GridParentWidth, + height = GridParentHeight, + xpos = ?VBTN_WIDTH - 1, + ypos = ?KEY_MARK_AREA_HEIGHT + ?HBTN_HEIGHT - 1, + nof_rows = ?NOF_GRIDROWS, + row_height = ?ROW_HEIGHT + }, + + + receive + #pg_col_info{first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown} -> + + PbPid ! #pb_init_btns{sender = self(), + parent_id = GridParentId, + parent_width = GridParentWidth, + parent_height = GridParentHeight, + ypos = ?KEY_MARK_AREA_HEIGHT, + hbtn_height = ?HBTN_HEIGHT, + resbtn_width = ?RESBTN_WIDTH, + vbtn_width = ?VBTN_WIDTH, + nof_rows = ?NOF_GRIDROWS, + row_height = ?ROW_HEIGHT, + first_col_shown = FirstColShown, + cols_shown = ColsShown + }, + + NewScaleP = tv_pd_scale:init_scale(NewFrameP, ScaleP), + + NewToolP = init_toolbar(NewFrameP, ToolP), + + ProcVars#process_variables{window_id = WindowId, + window_width = WindowWidth, + window_height = WindowHeight, + first_col_shown = FirstColShown, + nof_rows_shown = NofRowsShown, + cols_shown = ColsShown, + frame_params = NewFrameP, + scale_params = NewScaleP, + toolbar_params = NewToolP + } + end. + + + + + +resize_display(NewWinW, NewWinH, ProcVars) -> + #process_variables{pg_pid = PgPid, + pb_pid = PbPid, + color_list = ColorList, + first_row_shown = FirstRowShown, + frame_params = FrameP, + scale_params = ScaleP, + toolbar_params = ToolP} = ProcVars, + + NewFrameP = tv_pd_frames:resize_display_frames(NewWinW, NewWinH, FrameP), + + #frame_params{grid_frame_width = GridParentWidth, + grid_frame_height = GridParentHeight} = NewFrameP, + + PgPid ! #pg_resize_grid{sender = self(), + width = GridParentWidth, + height = GridParentHeight + }, + + receive + #pg_col_info{first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown} -> + + PbPid ! #pb_update_hbtns{sender = self(), + parent_width = GridParentWidth, + parent_height = GridParentHeight, + first_col_shown = FirstColShown, + cols_shown = ColsShown + }, + + PbPid ! #pb_update_vbtns{sender = self(), + color_list = ColorList, + first_row_shown = FirstRowShown, + nof_rows_shown = NofRowsShown, + blinking_enabled = false + }, + + NewScaleP = tv_pd_scale:resize_scale(NewFrameP, ScaleP), + + NewToolP = resize_toolbar(NewFrameP, ToolP), + + ProcVars#process_variables{window_width = NewWinW, + window_height = NewWinH, + first_col_shown = FirstColShown, + nof_rows_shown = NofRowsShown, + cols_shown = ColsShown, + frame_params = NewFrameP, + scale_params = NewScaleP, + toolbar_params = NewToolP + } + end. + + + + + + + +resize_column(RealCol, VirtualCol, Xdiff, ProcVars) -> + #process_variables{pg_pid = PgPid, + pb_pid = PbPid, + frame_params = FrameP} = ProcVars, + + PgPid ! #pg_resize_grid_col{sender = self(), + real_col_no = RealCol, + virtual_col_no = VirtualCol, + xdiff = Xdiff + }, + + #frame_params{grid_frame_width = GridFrameWidth, + grid_frame_height = GridFrameHeight} = FrameP, + receive + #pg_col_info{first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown} -> + + PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth, + parent_height = GridFrameHeight, + first_col_shown = FirstColShown, + cols_shown = ColsShown + }, + + ProcVars#process_variables{first_col_shown = FirstColShown, + nof_rows_shown = NofRowsShown, + cols_shown = ColsShown + } + end. + + + + + + + + +display_data(Pos, Range, _MaxValue, List, KeyList, MaxElemSize, MarkedRowData,ProcVars) -> + #process_variables{master_pid = PcPid, + rec_pid = RecPid, + pg_pid = PgPid, + pb_pid = PbPid, + writable = Writable, + sorting_on = SortingOn, + nof_rows_shown = NofRowsShown, + scale_params = ScaleP, + toolbar_params = ToolP, + mark_params = MarkP} = ProcVars, + + {DataList, ColorList} = split_dblist(List, [], []), + + NewMarkP = update_marks(SortingOn, DataList, ColorList, MarkedRowData, Pos, NofRowsShown, + Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP), + + PgPid ! #pg_data{sender = self(), + data = DataList, + first_row_shown = Pos + }, + + PbPid ! #pb_update_vbtns{sender = self(), + color_list = ColorList, + first_row_shown = Pos, + nof_rows_shown = NofRowsShown, + blinking_enabled = false + }, + + PbPid ! #pb_key_info{sender = self(), + list_of_keys = KeyList + }, + + % May be new number of elements in the total list! + ?SCALE_FUNC_FILE:set_scale_range(vscale, Range, ScaleP), + % May be new vertical scale position required! + NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, Pos, ScaleP), + % May be new maximum size of elements! + ?SCALE_FUNC_FILE:set_scale_range(hscale, {1, MaxElemSize}, NewScaleP), + + ProcVars#process_variables{data_list = DataList, + color_list = ColorList, + first_row_shown = Pos, + initialising = false, + scale_params = NewScaleP, + mark_params = NewMarkP + }. + + + + + + + +scroll_vertically(MouseBtn, ProcVars) -> + #process_variables{scale_params = ScaleP} = ProcVars, + + OldScalePos = ScaleP#scale_params.vscale_pos, + NewScalePos = get_new_scalepos(MouseBtn, OldScalePos), + + case NewScalePos of + OldScalePos -> + ProcVars; + NewValue -> + perform_vertical_scroll(NewValue, ProcVars) + end. + + + + + + + +scroll_horizontally(MouseBtn, ProcVars) -> + #process_variables{scale_params = ScaleP} = ProcVars, + + OldScalePos = ScaleP#scale_params.hscale_pos, + NewScalePos = get_new_scalepos(MouseBtn, OldScalePos), + + case NewScalePos of + OldScalePos -> + ProcVars; + NewValue -> + perform_horizontal_scroll(NewValue, ProcVars) + end. + + + + + + + + +perform_vertical_scroll(NewScalePos, ProcVars) -> + #process_variables{master_pid = MasterPid, + initialising = Init, + scale_params = ScaleP} = ProcVars, + + %% To avoid erroneous scrollbar signals during creation of the display. + case Init of + true -> + done; + false -> + MasterPid ! #pc_data_req{sender = self(), + element = NewScalePos, + nof_elements = ?NOF_GRIDROWS} + end, + + % Since the order of click/buttonrelease messages isn't + % precise, set the scale to the returned pos (may otherwise + % differ one unit). + NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, + NewScalePos, + ScaleP), + + ProcVars#process_variables{scale_params = NewScaleP}. + + + + + + + +perform_horizontal_scroll(NewScalePos, ProcVars) -> + #process_variables{pg_pid = PgPid, + pb_pid = PbPid, + frame_params = FrameP, + scale_params = ScaleP} = ProcVars, + + % Since the order of click/buttonrelease messages isn't + % precise, set the scale to the returned pos (may otherwise + % differ one unit). + NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(hscale, + NewScalePos, + ScaleP), + + PgPid ! #pg_horizontal_scroll{sender = self(), + leftmost_virtual_col = NewScalePos + }, + + #frame_params{grid_frame_width = GridFrameWidth, + grid_frame_height = GridFrameHeight} = FrameP, + receive + #pg_col_info{first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown} -> + + PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth, + parent_height = GridFrameHeight, + first_col_shown = FirstColShown, + cols_shown = ColsShown + }, + + ProcVars#process_variables{first_col_shown = FirstColShown, + cols_shown = ColsShown, + nof_rows_shown = NofRowsShown, + scale_params = NewScaleP + } + end. + + + + + + + + +marked_cell(true, VirtualCol, RealRow, VirtualRow, ProcVars) -> + #process_variables{master_pid = MasterPid, + rec_pid = RecPid, + data_list = DataList, + color_list = ColorList, + writable = Writable, + mark_params = MarkP, + toolbar_params = ToolP} = ProcVars, + + {DataElement, MarkedRowObject} = get_data_element(cell, DataList, RealRow, VirtualCol), + update_toolbar_label(DataElement, ToolP, VirtualRow, VirtualCol, Writable), + send_to_rec_edit(RecPid, {update_mode,MarkedRowObject}), + + MarkedRowColor = lists:nth(RealRow, ColorList), + + MasterPid ! #pc_marked_row{sender = self(), + row_no = VirtualRow, + object = MarkedRowObject, + color = MarkedRowColor + }, + NewMarkP = MarkP#mark_params{cell_col_no = VirtualCol, + row_no = RealRow, + virtual_row_no = VirtualRow, + marked_object = MarkedRowObject, + marked_color = MarkedRowColor + }, + ProcVars#process_variables{mark_params = NewMarkP + }; +marked_cell(false, VirtualCol, _RealRow, VirtualRow, ProcVars) -> + #process_variables{master_pid = MasterPid, + rec_pid = RecPid, + pb_pid = PbPid, + writable = Writable, + mark_params = MarkP} = ProcVars, + + PbPid ! #pb_remove_marks{sender = self()}, + + case VirtualRow of + undefined -> + done; + _AnyRow -> + update_toolbar_label(notext, ProcVars#process_variables.toolbar_params, + VirtualRow, VirtualCol, Writable), + send_to_rec_edit(RecPid, insert_mode) + end, + MasterPid ! #pc_marked_row{sender = self(), + %% row_no = VirtualRow + row_no = undefined, + object = undefined, + color = undefined + }, + NewMarkP = MarkP#mark_params{cell_col_no = undefined, + row_no = undefined, + virtual_row_no = undefined, + marked_object = undefined, + marked_color = undefined + }, + ProcVars#process_variables{mark_params = NewMarkP + }. + + + + + + + + +update_toolbar_label(notext, ToolP, _VirtualRowNo, _VirtualColNo, Writable) -> + #toolbar_params{row_col_label_id = RowColLblId, + fg_label_id = FgLblId, + editor_id = EdId} = ToolP, + gs:config(RowColLblId, [{label, {text,""}}]), + gs:config(FgLblId, [{enable,true}]), + gs:config(FgLblId, [{delete, {0,1000000000}}]), + gs:config(FgLblId, [{insert, {0, ""}}]), + case Writable of + true -> + gs:config(FgLblId, [{cursor, text}, + {setfocus, true}]); + false -> + gs:config(FgLblId, [{enable, false}, + {cursor, arrow}, + {setfocus, false}]) + end, + update_toolbar_editor(EdId, notext); +update_toolbar_label({DataToShow}, ToolP, VirtualRowNo, VirtualColNo, Writable) -> + #toolbar_params{row_col_label_id = RowColLblId, + fg_label_id = FgLblId, + editor_id = EdId} = ToolP, + + case VirtualRowNo of + undefined -> + %% No row - nothing can possibly be marked! + case Writable of + true -> + gs:config(FgLblId, [{setfocus,true}, + {cursor, text}]); + false -> + gs:config(FgLblId, [{enable,false}, + {setfocus, false}, + {cursor, arrow}]) + end; + _AnyRow -> + RowStr = "R" ++ integer_to_list(VirtualRowNo), + ColStr = case VirtualColNo of + undefined -> + ""; + _AnyCol -> + " x C" ++ integer_to_list(VirtualColNo) + end, + DataStr = lists:flatten(tv_io_lib:format("~p", [DataToShow])), + gs:config(RowColLblId, [{label, {text,RowStr++ColStr}}]), + gs:config(FgLblId, [{enable,true}]), + gs:config(FgLblId, [{delete, {0,10000000}}]), + gs:config(FgLblId, [{insert, {0,DataStr}}]), + case Writable of + true -> + gs:config(FgLblId, [{setfocus,true}, + {cursor, text}]); + false -> + gs:config(FgLblId, [{enable,false}, + {setfocus, false}, + {cursor, arrow}]) + end, + update_toolbar_editor(EdId, {DataToShow}) + end. + + + + + + + + +get_data_element(row, DataList, RowNo, _VirtualCol) -> + if + length(DataList) < RowNo -> + {notext, undefined}; + true -> + RowObj = lists:nth(RowNo, DataList), + {{RowObj}, RowObj} + end; +get_data_element(cell, DataList, RowNo, ColNo) -> + %% It's the responsibility of pg to ensure that there is a data item + %% for the cell marked, meaning we don't *have* to check the length of + %% the data items. However, since we in the future may want to edit + %% even empty cells, we check it! + if + length(DataList) < RowNo -> + {notext, undefined}; + true -> + DataItem = lists:nth(RowNo, DataList), + if + is_tuple(DataItem) -> + if size(DataItem) < ColNo -> + {notext, DataItem}; + true -> + {{element(ColNo, DataItem)}, DataItem} + end; + true -> + {{DataItem}, DataItem} + end + end. + + + + + + + + +show_toolbar_editor(ProcVars) -> + #process_variables{frame_params = FrameP, + toolbar_params = ToolP} = ProcVars, + + #frame_params{toolbar_frame_height = THeight} = FrameP, + + #toolbar_params{editor_frame_id = EdFrameId} = ToolP, + + Xpos = 0, + Ypos = THeight - 8 - ?ROW_COL_LBL_HEIGHT + 1, + gs:config(EdFrameId, [{x, Xpos}, + {y, Ypos} + ]), + ProcVars. + + + + + + + + +hide_toolbar_editor(ProcVars) -> + #process_variables{toolbar_params = ToolP} = ProcVars, + + #toolbar_params{editor_frame_id = EdFrameId} = ToolP, + + Xpos = 0, + Ypos = (-1) * gs:read(EdFrameId, height) - 50, + gs:config(EdFrameId, [{x, Xpos}, + {y, Ypos} + ]), + ProcVars. + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +update_toolbar_editor(EdId, notext) -> + gs:config(EdId, [{enable, true}]), + gs:config(EdId, [clear]), + gs:config(EdId, [{enable, false}]); +update_toolbar_editor(EdId, {DataToShow}) -> + Str = io_lib:format("~n~p~n", [DataToShow]), + gs:config(EdId, [{enable, true}]), + gs:config(EdId, [clear]), + gs:config(EdId, [{overwrite, {insert, Str}}]), + gs:config(EdId, [{enable, false}]). + + + + + + +update_marks(true, _DataList, _ColorList, _MarkedRowData, + _Pos, _NofRowsShown, _Writable, _Range, PcPid, PgPid, RecPid, ToolP, MarkP) -> + PgPid ! #pg_remove_marks{sender = self()}, + %% Too much trouble trying to find the marked object again! + %% On the other hand, is the mark based on the row number + %% or the row content? Probably different strategies now, depending + %% on where in the code we are... :-( + %% update_toolbar_label(notext, ToolP, undefined, undefined, Writable), + update_toolbar_editor(ToolP#toolbar_params.editor_id, notext), + send_to_rec_edit(RecPid, insert_mode), + PcPid ! #pc_marked_row{sender = self(), + row_no = undefined, + object = undefined, + color = undefined + }, + MarkP#mark_params{cell_col_no = undefined, + row_no = undefined, + virtual_row_no = undefined, + marked_object = undefined, + marked_color = undefined + }; +update_marks(false, DataList, ColorList, MarkedRowData, + Pos, NofRowsShown, Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP) -> + #mark_params{cell_col_no = CellColNo, + virtual_row_no = VirtualRowNo} = MarkP, + + % Marked row data contains the color also! + {RowData, RowColors} = split_dblist(MarkedRowData, [], []), + + case VirtualRowNo of + undefined -> + MarkP; + _AnyRow -> + if + VirtualRowNo > element(2, Range) -> + %% Mark outside the existing list! Uh-uh, remove the mark immediately! 8-0 + update_marks(true, DataList, ColorList, MarkedRowData, Pos, NofRowsShown, + Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP); + true -> + {DataElement, RowObj} = choose_data_to_show(VirtualRowNo, CellColNo, RowData, + DataList, Pos), + {_, RowObjColor} = choose_data_to_show(VirtualRowNo, CellColNo, RowColors, + ColorList, Pos), + case DataElement of + notext -> + %% send_to_rec_edit(RecPid, insert_mode); + done; + _OtherElement -> + %% send_to_rec_edit(RecPid, {update_mode, RowObj}) + send_to_rec_edit(RecPid, {reset_info, RowObj}) + end, + + %% case RowObj of + %% OldMarkedObj -> + %% done; + %% _NewObj -> + %% update_toolbar_label(DataElement, ToolP, VirtualRowNo, + %% CellColNo, Writable) + %% end, + + %% update_toolbar_label(DataElement,ToolP,VirtualRowNo,CellColNo,Writable), + + update_toolbar_editor(ToolP#toolbar_params.editor_id, DataElement), + MarkP#mark_params{marked_object = RowObj, + marked_color = RowObjColor} + end + end. + + + + + +choose_data_to_show(VirtualRowNo, undefined, _RowData, DataList, Pos) when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) -> + get_data_element(row, DataList, VirtualRowNo - Pos + 1, undefined); +choose_data_to_show(_VirtualRowNo, undefined, RowData, _DataList, _Pos) -> + get_data_element(row, RowData, 1, undefined); +choose_data_to_show(VirtualRowNo, CellColNo, _RowData, DataList, Pos) + when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) -> + get_data_element(cell, DataList, VirtualRowNo - Pos + 1, CellColNo); +choose_data_to_show(_VirtualRowNo, CellColNo, RowData, _DataList, _Pos) -> + get_data_element(cell, RowData, 1, CellColNo). + + + + + + +get_new_scalepos(Btn, LastScalePos) -> + receive + {gs, _Id, click, _Data, [NewScalePos | _T]} -> + get_new_scalepos(Btn, NewScalePos); + + {gs, _Id, buttonrelease, _Data, [Btn | _T]} -> + LastScalePos; + + {gs, _Id, buttonrelease, _Data, _Args} -> + get_new_scalepos(Btn, LastScalePos); + + {gs, _Id, buttonpress, _Data, _Args} -> + get_new_scalepos(Btn, LastScalePos) + + end. + + + + + + + +split_dblist([], DataAcc, ColorAcc) -> + {lists:reverse(DataAcc), lists:reverse(ColorAcc)}; +split_dblist([{Data, Color} | Tail], DataAcc, ColorAcc) -> + split_dblist(Tail, [Data | DataAcc], [Color | ColorAcc]). + + + + + + + + +init_toolbar(FrameP, ToolP) -> + #frame_params{display_id = DispId, + toolbar_frame_id = TId, + toolbar_frame_width = TWidth, + toolbar_frame_height = THeight, + grid_frame_width = GWidth} = FrameP, + + NewToolP = init_toolbar_btns(TId, ToolP), + {RowColLblId, BgLabelId, FgLabelId, BtnId} = + init_toolbar_label(TId, TWidth, THeight, GWidth), + + PopUpFrame = gs:frame(TId, [{width, 80}, + {height, 20}, + {x, 0}, + {y, -30}, + {bg, {0, 0, 0}} + ]), + + PopUpLabel = gs:label(PopUpFrame, [{width, 78}, + {height, 18}, + {bg, {255,255,190}}, + {x,1}, + {y,1}, + {align, center}, + {label, {text,""}}, + {font,{screen,12}}]), + + {EditorFrameId, EditorId} = init_toolbar_editor(DispId, TWidth, THeight), + + NewToolP#toolbar_params{parent_id = TId, + row_col_label_id = RowColLblId, + bg_label_id = BgLabelId, + fg_label_id = FgLabelId, + label_btn_id = BtnId, + pop_up_frame_id = PopUpFrame, + pop_up_label_id = PopUpLabel, + editor_frame_id = EditorFrameId, + editor_id = EditorId + }. + + + + + + +init_toolbar_btns(TId, ToolP) -> + PicDir = code:priv_dir(tv), +% PicDir = "../priv", + % Toolbar btns are 25x25, the bitmaps are 20x20. + create_one_toolbar_btn(TId, 1, PicDir ++ "/edit1.xbm", + {toolbar, insert_object, "Edit Object"}), + create_one_toolbar_btn(TId, 3, PicDir ++ "/search.xbm", + {toolbar, search_object, "Search Object"}), + create_one_toolbar_btn(TId, 5, PicDir ++ "/sort.xbm", + {toolbar, sort_rising_order, "Sort Ascending"}), + create_one_toolbar_btn(TId, 6, PicDir ++ "/no_sort.xbm", + {toolbar, no_sorting,"No Sorting"}), + create_one_toolbar_btn(TId, 7, PicDir ++ "/sort_reverse.xbm", + {toolbar, sort_falling_order,"Sort Descending"}), + create_one_toolbar_btn(TId, 9, PicDir ++ "/poll.xbm", + {toolbar, poll_table,"Poll Table"}), + create_one_toolbar_btn(TId, 11, PicDir ++ "/info.xbm", + {toolbar, table_info,"Table Info"}), + create_one_toolbar_btn(TId, 13, PicDir ++ "/help.xbm", + {toolbar, help_button, "Help"}), + ToolP. + + + + + + + + +create_one_toolbar_btn(ParentId, N, Image, Data) -> + BtnWidth = 25, + BtnHeight = 25, + StartXpos = 0, + BtnXpos = StartXpos + ((N - 1) * BtnWidth), + BtnYpos = 2, + BgColor = ?DEFAULT_BG_COLOR, + FgColor = {178,34,34}, % Firebrick + + gs:button(ParentId, [{width, BtnWidth}, + {height, BtnHeight}, + {x, BtnXpos}, + {y, BtnYpos}, + {enter, true}, + {leave, true}, + {label, {image, Image}}, + {data, Data}, + {fg, FgColor}, + {bg, BgColor} + ]). + + + + + +resize_toolbar(FrameP, ToolP) -> + #frame_params{toolbar_frame_width = TWidth, + toolbar_frame_height = THeight, + grid_frame_width = GWidth} = FrameP, + + #toolbar_params{bg_label_id = BgId, + fg_label_id = FgId, + row_col_label_id = RowColId, + label_btn_id = BtnId, + editor_frame_id = FrId, + editor_id = EdId} = ToolP, + + resize_toolbar_label(BgId, FgId, RowColId, BtnId, TWidth, THeight, GWidth), + resize_toolbar_editor(FrId, EdId, TWidth, THeight), + ToolP. + + + + + + + + +init_toolbar_label(ParentId, ParentWidth, ParentHeight, GWidth) -> + {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth, + BtnHeight, BtnXpos, BtnYpos} = + get_toolbar_label_coords(ParentWidth, ParentHeight), + + BgId = gs:label(ParentId, [{width, BgWidth}, + {height, BgHeight}, + {x, BgXpos}, + {y, BgYpos}, + {bg, {0, 0, 0}}, + {fg, {0, 0, 0}} + ]), + + + RowColLblHeight = ?ROW_COL_LBL_HEIGHT, + RowColLblWidth = GWidth - ?VBTN_WIDTH, + RowColLblYpos = BgYpos + RowColLblHeight + 18, + + RowColLblId = gs:label(ParentId, [{width, RowColLblWidth}, + {height, RowColLblHeight}, + {x, ?VBTN_WIDTH}, + {y, RowColLblYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {178,34,34}}, + {align,center}, + {font,{screen,12}}, + {label, {text,""}} + ]), + + FgId = gs:entry(editentry, ParentId, [{width, FgWidth}, + {height, FgHeight}, + {x, FgXpos}, + {y, FgYpos}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {bw, 1}, + {font,{screen,12}}, + {justify, left}, + {cursor, arrow}, + {setfocus, false}, + {enable, false}, + {keypress,true} + ]), + + PicDir = code:priv_dir(tv), + BtnId = gs:button(ParentId, [{width, BtnWidth}, + {height, BtnHeight}, + {x, BtnXpos}, + {y, BtnYpos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {label, {image, PicDir ++ "/more.xbm"}}, + {data, {labelbtn, pop_up}} + ]), + + {RowColLblId, BgId, FgId, BtnId}. + + + + + + + +init_toolbar_editor(DispId, TWidth, THeight) -> + {BgWidth, BgHeight, BgXpos, BgYpos, Width, Height, Xpos, Ypos} = + get_toolbar_editor_coords(TWidth, THeight), + + EditorFrame = gs:frame(DispId, [{width, BgWidth}, + {height, BgHeight}, + {x, BgXpos}, + {y, BgYpos}, + {bg, {0, 0, 0}} + ]), + + Editor = gs:editor(EditorFrame, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + {vscroll, right}, + {wrap, word}, + {bg, {255, 255, 255}}, + {fg, {0, 0, 0}}, + {enable, false} + ]), + + {EditorFrame, Editor}. + + + + + + + +get_toolbar_editor_coords(TWidth, _THeight) -> + BgWidth = TWidth, + BgHeight = 200, + BgXpos = 0, + BgYpos = (-1) * BgHeight - 50, + FgWidth = BgWidth - 2, + FgHeight = BgHeight - 2, + FgXpos = 1, + FgYpos = 1, + + {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos}. + + + + + + +resize_toolbar_editor(FrId, EdId, TWidth, THeight) -> + {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos} = + get_toolbar_editor_coords(TWidth, THeight), + gs:config(FrId, [{width, BgWidth}, + {height, BgHeight} + ]), + + gs:config(EdId, [{width, FgWidth}, + {height, FgHeight} + ]). + + + + + + +resize_toolbar_label(BgId, FgId, RowColId, BtnId, ParentWidth, ParentHeight, GWidth) -> + {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos, _BtnWidth, + _BtnHeight, BtnXpos, BtnYpos} = + get_toolbar_label_coords(ParentWidth, ParentHeight), + + gs:config(RowColId, [{width, GWidth - ?VBTN_WIDTH}]), + + gs:config(BgId, [{width, BgWidth}, + {height, BgHeight} + ]), + + gs:config(BtnId, [{x, BtnXpos}, + {y, BtnYpos} + ]), + + gs:config(FgId, [{width, FgWidth}, + {height, FgHeight} + ]). + + + + + +get_toolbar_label_coords(ParentWidth, ParentHeight) -> + BtnWidth = 19, + BgWidth = ParentWidth, + BgHeight = 26, + BgXpos = 0, + BgYpos = ParentHeight - BgHeight - 8 - ?ROW_COL_LBL_HEIGHT + 2, + FgHeight = BgHeight - 2, + FgWidth = BgWidth - BtnWidth - 3, + FgXpos = BgXpos + 1, + FgYpos = BgYpos + 1, + BtnHeight = BgHeight - 2, + BtnXpos = FgWidth + 2, + BtnYpos = BgYpos + 1, + + {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth, + BtnHeight, BtnXpos, BtnYpos}. + + + + + + +send_to_rec_edit(undefined, _Msg) -> + done; +send_to_rec_edit(RecPid, Msg) -> + RecPid ! Msg. + + + + diff --git a/lib/tv/src/tv_pd_frames.erl b/lib/tv/src/tv_pd_frames.erl new file mode 100644 index 0000000000..4e091ac9f0 --- /dev/null +++ b/lib/tv/src/tv_pd_frames.erl @@ -0,0 +1,480 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pd_frames). + + + +-export([create_display_frames/4, resize_display_frames/3]). + + + + +-include("tv_int_def.hrl"). +-include("tv_pd_int_def.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_display_frames(WindowId, WindowWidth, WindowHeight, FrameP) -> + {DisplayId, DisplayWidth, DisplayHeight} = + create_frame(WindowId, + get_display_coords(WindowWidth, WindowHeight), + ?DEFAULT_BG_COLOR, + 0), + + {ToolbarId, ToolbarWidth, ToolbarHeight} = create_toolbar_frame(DisplayId, + DisplayWidth), + + {SheetFrameId, SheetBgFrameId, SheetFrameWidth, SheetFrameHeight} = + create_sheet_frames(DisplayId, + DisplayWidth, + DisplayHeight), + + {GridFrameId, GridBgFrameId, GridFrameWidth, GridFrameHeight} = + create_grid_frames(SheetFrameId, + SheetFrameWidth, + SheetFrameHeight), + + + FrameP#frame_params{display_id = DisplayId, + toolbar_frame_id = ToolbarId, + toolbar_frame_width = ToolbarWidth, + toolbar_frame_height = ToolbarHeight, + sheet_frame_id = SheetFrameId, + sheet_frame_width = SheetFrameWidth, + sheet_frame_height = SheetFrameHeight, + sheet_bgframe_id = SheetBgFrameId, + grid_frame_id = GridFrameId, + grid_frame_width = GridFrameWidth, + grid_frame_height = GridFrameHeight, + grid_bgframe_id = GridBgFrameId + }. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_display_frames(NewW, NewH, FrameP) -> + #frame_params{display_id = DispId, + toolbar_frame_id = ToolbarId, + sheet_frame_id = SheetFgId, + sheet_bgframe_id = SheetBgId, + grid_frame_id = GridFgId, + grid_bgframe_id = GridBgId} = FrameP, + + {NewDispW, NewDispH} = config_frame(DispId, get_display_coords(NewW, NewH)), + {NewToolW, NewToolH} = resize_toolbar(ToolbarId, NewDispW), + {NewSheetFgW, NewSheetFgH} = resize_sheet_frames(SheetFgId, SheetBgId, NewDispW, + NewDispH), + + {NewGridFgW, NewGridFgH} = resize_grid_frames(GridFgId, GridBgId, NewSheetFgW, + NewSheetFgH), + + FrameP#frame_params{toolbar_frame_width = NewToolW, + toolbar_frame_height = NewToolH, + sheet_frame_width = NewSheetFgW, + sheet_frame_height = NewSheetFgH, + grid_frame_width = NewGridFgW, + grid_frame_height = NewGridFgH + }. + + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +config_frame(Id, {Width, Height, Xpos, Ypos}) -> + gs:config(Id, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos} + ]), + {Width, Height}. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_frame(ParentId, {Width, Height, Xpos, Ypos}, Color, BorderWidth) -> + Id = gs:frame(ParentId, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + {bw, BorderWidth}, + {bg, Color} + ]), + {Id, Width, Height}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_grid_frames(SheetFrameId, SheetFrameWidth, SheetFrameHeight) -> + {BgId, _W, _H} = + create_frame(SheetFrameId, + get_grid_frame_coords(bg, SheetFrameWidth, SheetFrameHeight), + ?BLACK, + 0), + {FgId, FgWidth, FgHeight} = + create_frame(SheetFrameId, + get_grid_frame_coords(fg, SheetFrameWidth, SheetFrameHeight), + ?DEFAULT_BG_COLOR, + 0), + {FgId, BgId, FgWidth, FgHeight}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_sheet_frames(DispId, DispWidth, DispHeight) -> + {BgId, _W, _H} = create_frame(DispId, + get_sheet_frame_coords(bg, DispWidth, DispHeight), + ?BLACK, + 0), + {FgId, FgWidth, FgHeight} = + create_frame(DispId, + get_sheet_frame_coords(fg, DispWidth, DispHeight), + ?DEFAULT_BG_COLOR, + 0), + {FgId, BgId, FgWidth, FgHeight}. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_toolbar_frame(DispId, DispWidth) -> + create_frame(DispId, get_toolbar_coords(DispWidth), ?DEFAULT_BG_COLOR, 0). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_display_coords(WindowWidth, WindowHeight) -> + Xpos = 4, + {WindowWidth - 2 * Xpos, WindowHeight - ?MENUBAR_HEIGHT - Xpos, Xpos, ?MENUBAR_HEIGHT}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_grid_frame_coords(bg, FrameWidth, FrameHeight) -> + get_grid_frame_coords2(FrameWidth, FrameHeight, 0); +get_grid_frame_coords(fg, FrameWidth, FrameHeight) -> + get_grid_frame_coords2(FrameWidth, FrameHeight, 1). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_grid_frame_coords2(FrameWidth, FrameHeight, BorderWidth) -> + Xpos = 0, + Ypos = 0, + Width = FrameWidth - ?VSCALE_WIDTH - Xpos - BorderWidth, + Height = FrameHeight - ?HSCALE_HEIGHT - Ypos - BorderWidth, + {Width, Height, Xpos, Ypos}. + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_sheet_frame_coords(bg, FrameWidth, FrameHeight) -> + get_sheet_frame_coords2(FrameWidth, FrameHeight, 0); +get_sheet_frame_coords(fg, FrameWidth, FrameHeight) -> + get_sheet_frame_coords2(FrameWidth, FrameHeight, 1). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_sheet_frame_coords2(FrameWidth, FrameHeight, BorderWidth) -> + Xpos = BorderWidth, + Ypos = ?TOOLBAR_HEIGHT + BorderWidth, + Width = FrameWidth - 2 * BorderWidth, + Height = FrameHeight - Ypos - ?MISC_AREA_HEIGHT - BorderWidth, + {Width, Height, Xpos, Ypos}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_toolbar_coords(DispWidth) -> + Xpos = 0, + {DispWidth - 2 * Xpos, ?TOOLBAR_HEIGHT, Xpos, 0}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_grid_frames(FgId, BgId, ParentWidth, ParentHeight) -> + config_frame(BgId, get_grid_frame_coords(bg, ParentWidth, ParentHeight)), + config_frame(FgId, get_grid_frame_coords(fg, ParentWidth, ParentHeight)). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_sheet_frames(FgId, BgId, ParentWidth, ParentHeight) -> + config_frame(BgId, get_sheet_frame_coords(bg, ParentWidth, ParentHeight)), + config_frame(FgId, get_sheet_frame_coords(fg, ParentWidth, ParentHeight)). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_toolbar(Id, DispWidth) -> + config_frame(Id, get_toolbar_coords(DispWidth)). + + + diff --git a/lib/tv/src/tv_pd_int_def.hrl b/lib/tv/src/tv_pd_int_def.hrl new file mode 100644 index 0000000000..2c76bef892 --- /dev/null +++ b/lib/tv/src/tv_pd_int_def.hrl @@ -0,0 +1,139 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Internal definitions for the pd part of the table tool. +%%% +%%%********************************************************************* + +-define(SCALE_FUNC_FILE, tv_pd_scale). +-define(DISP_FUNC_FILE, tv_pd_display). + + +-define(SCALE_WIDTH, 75). +-define(VSCALE_WIDTH, 75). +-define(HSCALE_HEIGHT, 75). +-define(MENUBAR_HEIGHT, 30). +-define(TOOLBAR_HEIGHT, 84). %% 97 +-define(DISPLAY_HEIGHT, 849). +-define(MISC_AREA_HEIGHT, 0). +-define(GRID_HEIGHT, 849). +-define(NOF_GRIDROWS, 35). %% 29 +-define(NOF_GRIDCOLS, 10). +-define(DEFAULT_COLWIDTH, 100). +-define(ROW_HEIGHT, 20). %% 24 +-define(VBTN_WIDTH, 55). %% 18 +-define(HBTN_HEIGHT, 20). +-define(RESBTN_WIDTH, 5). +-define(DEFAULT_GRID_BGCOLOR, {255,255,255}). +-define(DEFAULT_GRID_FGCOLOR, {0,0,0}). +-define(GRID_MARK_COLOR, {0,255,255}). +-define(GRID_FONT, {courier,12}). + +-define(ROW_COL_LBL_WIDTH, 140). +-define(ROW_COL_LBL_HEIGHT, 14). + + + +-define(KEY_MARK_AREA_HEIGHT, 21). + + +-define(DEFAULT_BG_COLOR, {217,217,217}). +-define(DEFAULT_ROW_COLOR, {178,34,34}). % Firebrick! +-define(DEFAULT_GRID_COLOR, {0,0,0}). +-define(LIGHT_GRAY, {226,226,226}). +-define(DARK_VIOLET, {148,0,211}). +-define(FIREBRICK, {178,34,34}). +-define(ANTIQUE_WHITE, {255,255,235}). + + +-record(frame_params, {display_id, + toolbar_frame_id, + toolbar_frame_width, + toolbar_frame_height, + sheet_frame_id, + sheet_frame_width, + sheet_frame_height, + sheet_bgframe_id, + grid_frame_id, + grid_frame_width, + grid_frame_height, + grid_bgframe_id + }). + + + + +-record(scale_params, {vscale_id, + vscale_pos = 0, + hscale_id, + hscale_pos = 0 + }). + + + + +-record(mark_params, {cell_id, + cell_col_no, % Virtual number! + row_no, % Real number! + virtual_row_no, + col_no, % Virtual number! + sort_col_no, + marked_object, + marked_color + }). + + + +-record(toolbar_params, {parent_id, + row_col_label_id, + bg_label_id, + fg_label_id, + label_btn_id, + pop_up_frame_id, + pop_up_label_id, + editor_frame_id, + editor_id + }). + + +-record(process_variables, {master_pid, + pg_pid, + pb_pid, + rec_pid, + window_id, + window_width, + window_height, + initialising = true, + table_type, + table_name, + record_name, + writable = false, + lists_as_strings = true, + sorting_on = false, + first_col_shown = 1, + first_row_shown = 1, + nof_rows_shown, + cols_shown = [], + data_list = [], + color_list = [], + frame_params = #frame_params{}, + scale_params = #scale_params{}, + mark_params = #mark_params{}, + toolbar_params = #toolbar_params{} + }). diff --git a/lib/tv/src/tv_pd_int_msg.hrl b/lib/tv/src/tv_pd_int_msg.hrl new file mode 100644 index 0000000000..faf23a9376 --- /dev/null +++ b/lib/tv/src/tv_pd_int_msg.hrl @@ -0,0 +1,433 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% + + +%%%********************************************************************* +%%% MESSAGES OWNED BY PG +%%%********************************************************************* + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_init_grid, {sender, + parent_id, + width, + height, + xpos, + ypos, + nof_rows, + row_height + }). + + + +-record(pg_list_info, {sender, + lists_as_strings}). + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_col_info, {sender, + first_col_shown, + width_of_cols_shown, + nof_rows_shown + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_col_marked, {sender, + virtual_col + }). + + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_row_marked, {sender, + virtual_row + }). + + + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pg_data, {sender, + data, + first_row_shown + }). + + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pg_cell_marked, {sender, + cell_marked, % true or false + real_col, + real_row, + virtual_col, + virtual_row, + cell_text + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pg_resize_grid, {sender, + width, + height + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pg_resize_grid_col, {sender, + real_col_no, + virtual_col_no, + xdiff + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pg_horizontal_scroll, {sender, + leftmost_virtual_col + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_ready, {sender}). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_remove_marks, {sender}). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_mark_col, {sender, + virtual_col, + real_col + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pg_mark_row, {sender, + virtual_row, + real_row + }). + + + + + + +%%%********************************************************************* +%%% MESSAGES OWNED BY PB +%%%********************************************************************* + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + +-record(pb_init_btns, {sender, + parent_id, + parent_width, + parent_height, + ypos, + hbtn_height, + resbtn_width, + vbtn_width, + nof_rows, + row_height, + first_col_shown, + cols_shown + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_remove_marks, {sender}). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_update_hbtns, {sender, + parent_width, + parent_height, + first_col_shown, + cols_shown + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_update_vbtns, {sender, + color_list, + first_row_shown, + nof_rows_shown, + blinking_enabled + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_key_info, {sender, + list_of_keys + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_new_colwidth, {sender, + real_col, + virtual_col, + xdiff + }). + + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_col_marked, {sender, + col_marked, % 'true' or 'false' + real_col, + virtual_col + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_row_marked, {sender, + row_marked, % 'true' or 'false' + real_row, + virtual_row + }). + + + + +%%====================================================================== +%% Message: +%% +%% Function: +%% +%% Data: +%%====================================================================== + + +-record(pb_set_sort_col, {sender, + virtual_col + }). + + + + diff --git a/lib/tv/src/tv_pd_scale.erl b/lib/tv/src/tv_pd_scale.erl new file mode 100644 index 0000000000..c94e57f468 --- /dev/null +++ b/lib/tv/src/tv_pd_scale.erl @@ -0,0 +1,303 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Part of pd controlling the scale, i.e., the scrollbar +%%% imitation. +%%% +%%%********************************************************************* + + +-module(tv_pd_scale). + + + +-export([init_scale/2, + resize_scale/2, + set_scale_range/3, + set_scale_pos/3]). + + + +-include("tv_int_def.hrl"). +-include("tv_pd_int_def.hrl"). + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init_scale(FrameP, ScaleP) -> + #frame_params{sheet_frame_id = SheetFrameId, + sheet_frame_width = SheetFrameWidth, + sheet_frame_height = SheetFrameHeight, + grid_frame_width = GridFrameWidth, + grid_frame_height = GridFrameHeight} = FrameP, + + VScaleId = create_scale(vscale, SheetFrameId, SheetFrameWidth, GridFrameHeight), + HScaleId = create_scale(hscale, SheetFrameId, GridFrameWidth, SheetFrameHeight), + + ScaleP#scale_params{vscale_id = VScaleId, + vscale_pos = 0, + hscale_id = HScaleId, + hscale_pos = 0 + }. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_scale(FrameP, ScaleP) -> + #frame_params{sheet_frame_width = SheetFrameWidth, + sheet_frame_height = SheetFrameHeight, + grid_frame_width = GridFrameWidth, + grid_frame_height = GridFrameHeight} = FrameP, + + #scale_params{vscale_id = VScaleId, + hscale_id = HScaleId} = ScaleP, + + config_scale(vscale, VScaleId, SheetFrameWidth, GridFrameHeight), + config_scale(hscale, HScaleId, GridFrameWidth, SheetFrameHeight), + ScaleP. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_scale_range(vscale, Range, ScaleP) -> + {Lo, Hi} = Range, + NewRange = if + Lo > Hi -> + {Hi, Hi}; + true -> + Range + end, + VScaleId = ScaleP#scale_params.vscale_id, + gs:config(VScaleId, [{range, NewRange}]); +set_scale_range(hscale, Range, ScaleP) -> + {Lo, Hi} = Range, + NewRange = if + Lo > Hi -> + {Hi, Hi}; + true -> + Range + end, + HScaleId = ScaleP#scale_params.hscale_id, + gs:config(HScaleId, [{range, NewRange}]). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_scale_pos(_ScaleName, undefined, ScaleP) -> + ScaleP; +set_scale_pos(vscale, NewPos, ScaleP) -> + ScaleId = ScaleP#scale_params.vscale_id, + gs:config(ScaleId, [{pos, NewPos}]), + ScaleP#scale_params{vscale_pos = NewPos}; +set_scale_pos(hscale, NewPos, ScaleP) -> + ScaleId = ScaleP#scale_params.hscale_id, + gs:config(ScaleId, [{pos, NewPos}]), + ScaleP#scale_params{hscale_pos = NewPos}. + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +config_scale(ScaleName, ScaleId, FrameWidth, FrameHeight) -> + {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName, + FrameWidth, + FrameHeight), + gs:config(ScaleId, [{height, Height}, + {width, Width}, + {x, Xpos}, + {y, Ypos} + ]). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_scale(ScaleName, FrameId, FrameWidth, FrameHeight) -> + {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName, + FrameWidth, + FrameHeight), + {Orientation, Range} = case ScaleName of + vscale -> + {vertical, {1, 1}}; + hscale -> + {horizontal, {1, 1}} + end, + gs:scale(FrameId, [{data, ScaleName}, + {orient, Orientation}, + {buttonpress, true}, + {buttonrelease, true}, + {height, Height}, + {width, Width}, + {x, Xpos}, + {y, Ypos}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {range, Range} + ]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_scale_coords(hscale, FrameWidth, FrameHeight) -> + Height = ?HSCALE_HEIGHT, + Xpos = ?VBTN_WIDTH - 3, % Subtracting 3 makes it look better! + Ypos = FrameHeight - Height, + Width = FrameWidth - Xpos + 5, % Adding 5 for better look! + {Width, Height, Xpos, Ypos}; +get_scale_coords(vscale, FrameWidth, FrameHeight) -> + Width = ?VSCALE_WIDTH, + Xpos = (FrameWidth - Width), + Ypos = ?HBTN_HEIGHT - 3, % Subtracting 3 makes it look better! + Height = FrameHeight - Ypos + 5, % Adding 5 for better look! + {Width, Height, Xpos, Ypos}. + + + + + + + + + + + + + + + + + + + diff --git a/lib/tv/src/tv_pg.erl b/lib/tv/src/tv_pg.erl new file mode 100644 index 0000000000..ba8782392b --- /dev/null +++ b/lib/tv/src/tv_pg.erl @@ -0,0 +1,429 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pg). + + + +-export([pg/1]). + + +-include("tv_int_def.hrl"). +-include("tv_pg_int_def.hrl"). +-include("tv_pd_int_msg.hrl"). + + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: pg. +%% +%% Return Value: None. +%% +%% Description: Process controlling the grid part of the display. +%% +%% Parameters: None. +%%====================================================================== + + +pg(ParentPid) -> + process_flag(trap_exit, true), + ProcVars = #process_variables{parent_pid = ParentPid}, + loop(ProcVars). + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +%%====================================================================== +%% Function: loop. +%% +%% Return Value: None. +%% +%% Description: Eternal (well, almost) loop, receiving messages and +%% handling them. +%% +%% Parameters: +%%====================================================================== + + + +loop(ProcVars) -> + receive + Msg -> + case Msg of + + + #pg_data{} -> + GridId = mark_busy(ProcVars), + NewProcVars = update_grid_data(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_list_info{lists_as_strings=ListAsStr} -> + NewProcVars = tv_pg_gridfcns:handle_list_info(ListAsStr, ProcVars), + loop(NewProcVars); + + #pg_horizontal_scroll{} -> + GridId = mark_busy(ProcVars), + NewProcVars = scroll_grid_horizontally(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_remove_marks{} -> + GridId = mark_busy(ProcVars), + NewProcVars = tv_pg_gridfcns:remove_marks(ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_col_marked{} -> + GridId = mark_busy(ProcVars), + NewProcVars = mark_grid_col(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_row_marked{} -> + GridId = mark_busy(ProcVars), + NewProcVars = mark_grid_row(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_resize_grid_col{} -> + GridId = mark_busy(ProcVars), + NewProcVars = resize_grid_column(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_resize_grid{} -> + GridId = mark_busy(ProcVars), + NewProcVars = resize_grid(Msg, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + #pg_init_grid{} -> + GridId = mark_busy(ProcVars), + NewProcVars = init_grid(Msg, ProcVars), + mark_nonbusy(GridId), + PdPid = ProcVars#process_variables.parent_pid, + PdPid ! #pg_ready{sender = self()}, + loop(NewProcVars); + + {gs, Id, Event, Data, Args} -> + GridId = mark_busy(ProcVars), + NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), + mark_nonbusy(GridId), + loop(NewProcVars); + + + {'EXIT', Pid, Reason} -> + ParentPid = ProcVars#process_variables.parent_pid, + exit_signals({Pid, Reason}, ParentPid, ProcVars), + loop(ProcVars); + + _Other -> + loop(ProcVars) + end + end. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +exit_signals(ExitInfo, ParentPid, _ProcVars) -> + case ExitInfo of + {ParentPid, _Reason} -> + exit(normal); + _Other -> + done + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +gs_messages(Msg, ProcVars) -> + + case Msg of + + {Id, buttonpress, {gridcell, RealCol, RealRow, _FrameId}, [1 | _]} -> + NewProcVars = tv_pg_gridfcns:mark_cell_and_notify(Id, RealCol, + RealRow, ProcVars), + NewProcVars; + + + _OtherMessage -> + ProcVars + + end. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init_grid(Msg, ProcVars) -> + #pg_init_grid{parent_id = ParentId, + width = Width, + height = Height, + xpos = Xpos, + ypos = Ypos, + nof_rows = NofRows, + row_height = RowHeight} = Msg, + tv_pg_gridfcns:init_grid(ParentId, Width, Height, Xpos, Ypos, NofRows, + RowHeight, ProcVars). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_grid(Msg, ProcVars) -> + #pg_resize_grid{width = Width, + height = Height} = Msg, + tv_pg_gridfcns:resize_grid(Width, Height, ProcVars). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_grid_column(Msg, ProcVars) -> + #pg_resize_grid_col{real_col_no = RealCol, + virtual_col_no = VirtualCol, + xdiff = Xdiff} = Msg, + tv_pg_gridfcns:resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +scroll_grid_horizontally(Msg, ProcVars) -> + FirstColShown = ?COMM_FUNC_FILE:max(1, Msg#pg_horizontal_scroll.leftmost_virtual_col), + tv_pg_gridfcns:scroll_grid_horizontally(FirstColShown, ProcVars). + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_grid_data(Msg, ProcVars) -> + #pg_data{data = Data, + first_row_shown = FirstRowShown} = Msg, + tv_pg_gridfcns:update_grid_data(Data, FirstRowShown, ProcVars). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_grid_col(Msg, ProcVars) -> + #pg_col_marked{virtual_col = VirtualCol} = Msg, + tv_pg_gridfcns:mark_col(VirtualCol, ProcVars). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_grid_row(Msg, ProcVars) -> + #pg_row_marked{virtual_row = VirtualRow} = Msg, + tv_pg_gridfcns:mark_row(VirtualRow, ProcVars). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_busy(ProcVars) -> + GridP = ProcVars#process_variables.grid_params, + GridId = GridP#grid_params.fg_frame, + gs:config(GridId, [{cursor, busy}]), + GridId. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_nonbusy(GridId) -> + gs:config(GridId, [{cursor, arrow}]). + diff --git a/lib/tv/src/tv_pg_gridfcns.erl b/lib/tv/src/tv_pg_gridfcns.erl new file mode 100644 index 0000000000..809403fd96 --- /dev/null +++ b/lib/tv/src/tv_pg_gridfcns.erl @@ -0,0 +1,1939 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_pg_gridfcns). + + + + +-export([init_grid/8, + resize_grid/3, + resize_grid_column/4, + update_grid_data/3, + scroll_grid_horizontally/2, + mark_cell_and_notify/4, + remove_marks/1, + mark_col/2, + mark_row/2, + handle_list_info/2 + ]). + + + + + +-include("tv_pd_int_msg.hrl"). +-include("tv_pg_int_def.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init_grid(GridParentId, GridWidth, + GridHeight, GridXpos, GridYpos, NofRows, RowHeight, ProcVars) -> + + % Get the size and ID of the grid-parent frame, i.e., the + % grid-frame! Do not confuse the base-frames below with + % the grid-frame! + + #process_variables{parent_pid = ParentPid, + grid_params = GridP} = ProcVars, + + #grid_params{fg_color = GridFgColor, + nof_cols = NofCols, + col_width = DefaultColWidth, + first_col_shown = FirstColShown, + col_widths = ColWidths} = GridP, + + % Create the two frames the column frames are placed on! + % These two frames defines the size of the grid. + BgFrame = create_base_frame(GridParentId, GridWidth, GridHeight, + GridXpos, GridYpos, GridFgColor), + FgFrame = create_base_frame(BgFrame, GridWidth - 1, GridHeight - 1, + 0, 0, GridFgColor), + + % Compute the the colwidths necessary to cover the grid. + ColsShown = compute_cols_shown(FirstColShown, ColWidths, GridWidth, NofCols, + DefaultColWidth), + NofRowsShown = compute_rows_shown(GridHeight, RowHeight), + + % Tell parent about the width of columns shown! + ParentPid ! #pg_col_info{sender = self(), + first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown + }, + + NewNofCols = max(length(ColsShown), NofCols), + + % The GridColWidths list shall contain the current width of each frame. + NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown, + DefaultColWidth), + + % Create column frames, one for each column, and rows (labels) on each frame. + {FrameIdList, ColLabelList} = create_col_frames(NewNofCols, NofRows, RowHeight, + FgFrame, GridP, [], []), + + % Get lists of label-ID's for each row. (When we created the column frames, + % we got the id's of labels placed on each column, i.e., vertically. + % However, most often we want the id's for one row, i.e., label id's + % horisontally.) + RowIdList = get_row_ids(NofRows, ColLabelList, []), + + % Update the grid_params record with the new values! + NewGridP = GridP#grid_params{bg_frame = BgFrame, + fg_frame = FgFrame, + grid_width = GridWidth, + grid_height = GridHeight, + grid_xpos = GridXpos, + grid_ypos = GridYpos, + nof_cols = NewNofCols, + col_widths = NewColWidths, + cols_shown = ColsShown, + nof_rows = NofRows, + row_height = RowHeight, + nof_rows_shown = NofRowsShown, + col_frame_ids = FrameIdList, + col_ids = ColLabelList, + row_ids = RowIdList, + row_data_list = lists:duplicate(NofRows, notext) + }, + + ProcVars#process_variables{grid_parent_id = GridParentId, + grid_params = NewGridP}. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_grid(NewWidth, NewHeight, ProcVars) -> + #process_variables{parent_pid = ParentPid, + grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{bg_frame = BgFrame, + fg_frame = FgFrame, + nof_cols = NofCols, + nof_rows = NofRows, + col_width = DefaultColWidth, + first_col_shown = FirstColShown, + col_widths = ColWidths, + row_height = RowHeight, + col_frame_ids = ColFrameIds, + col_ids = ColIds, + row_ids = RowIds, + bg_color = BgColor, + fg_color = FgColor, + row_data_list = RowDataList, + lists_as_strings = ListAsStr} = GridP, + + gs:config(BgFrame, [{width, NewWidth}, + {height, NewHeight} + ]), + gs:config(FgFrame, [{width, NewWidth - 1}, + {height, NewHeight - 1} + ]), + + ColsShown = compute_cols_shown(FirstColShown, ColWidths, NewWidth, NofCols, + DefaultColWidth), + + NofRowsShown = compute_rows_shown(NewHeight, RowHeight), + + + % Tell parent about the width of columns shown! + ParentPid ! #pg_col_info{sender = self(), + first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown + }, + + NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown, + DefaultColWidth), + + NofColsShown = length(ColsShown), + {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = + check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, + RowIds, NofRows, RowHeight, FgColor, BgColor ), + + clear_fields(lists:nthtail(NofColsShown, NewColIds), + lists:nthtail(NofRowsShown, NewRowIds)), + + RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), + + refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr), + + NewGridP = GridP#grid_params{grid_width = NewWidth, + grid_height = NewHeight, + nof_cols = NewNofCols, + nof_rows_shown = NofRowsShown, + cols_shown = ColsShown, + col_widths = NewColWidths, + col_frame_ids = NewColFrameIds, + col_ids = NewColIds, + row_ids = NewRowIds + }, + + refresh_marks(NewGridP, MarkP), + + ProcVars#process_variables{grid_params = NewGridP}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars) -> + #process_variables{parent_pid = ParentPid, + grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{grid_width = GridWidth, + first_col_shown = FirstColShown, + nof_cols = NofCols, + col_widths = ColWidths, + col_frame_ids = ColFrameIds, + col_ids = ColIds, + col_width = DefaultColWidth, + row_ids = RowIds, + max_col_width = MaxColWidth, + min_col_width = MinColWidth, + nof_rows = NofRows, + nof_rows_shown = NofRowsShown, + row_height = RowHeight, + bg_color = BgColor, + fg_color = FgColor, + row_data_list = RowDataList, + lists_as_strings = ListAsStr} = GridP, + + % Get new width! + Width = min(MaxColWidth, max((lists:nth(VirtualCol, ColWidths) + Xdiff), + MinColWidth)), + + % Resize the column. + NewWidthOfCol = resize_one_column(RealCol, Width, ColFrameIds, MaxColWidth, + MinColWidth), + + % Update the ColWidths list. + TempColWidths = lists:sublist(ColWidths, VirtualCol - 1) ++ + [NewWidthOfCol | lists:nthtail(VirtualCol, ColWidths)], + + % Check the other columns, whether a new column has to be created. + ColsShown = compute_cols_shown(FirstColShown, TempColWidths, GridWidth, + NofCols, DefaultColWidth), + + % Get the final ColWidths list, after all updates! + NewColWidths = update_col_widths(ColsShown, TempColWidths, FirstColShown, + DefaultColWidth), + + % Tell parent about the width of columns shown! + ParentPid ! #pg_col_info{sender = self(), + first_col_shown = FirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown + }, + + % Get the new number of columns (may have changed). + NofColsShown = length(ColsShown), + {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = + check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, + RowIds, NofRows, RowHeight, FgColor, BgColor ), + + RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), + refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr), + + NewGridP = GridP#grid_params{nof_cols = NewNofCols, + cols_shown = ColsShown, + col_widths = NewColWidths, + col_frame_ids = NewColFrameIds, + col_ids = NewColIds, + row_ids = NewRowIds + }, + + refresh_marks(NewGridP, MarkP), + + ProcVars#process_variables{grid_params = NewGridP}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +handle_list_info(ListAsStr, ProcVars) -> + #process_variables{grid_params = GridP} = ProcVars, + + #grid_params{first_col_shown = FirstColShown, + cols_shown = ColsShown, + nof_rows_shown = NofRowsShown, + row_data_list = RowDataList, + row_ids = RowIds, + lists_as_strings = OldListAsStr} = GridP, + + case ListAsStr of + OldListAsStr -> + ProcVars; + _NewValue -> + NofColsShown = length(ColsShown), + RowsToUpdate = lists:sublist(RowIds, NofRowsShown), + refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, + RowDataList, ListAsStr), + NewGridP = GridP#grid_params{lists_as_strings = ListAsStr}, + ProcVars#process_variables{grid_params = NewGridP} + end. + + + + +update_grid_data(Data, FirstRowShown, ProcVars) -> + #process_variables{grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{first_col_shown = FirstColShown, + cols_shown = ColsShown, + nof_rows = NofRows, + nof_rows_shown = NofRowsShown, + row_ids = RowIds, + lists_as_strings = ListAsStr} = GridP, + + NofColsShown = length(ColsShown), + RowsToUpdate = lists:sublist(RowIds, NofRowsShown), + + NewMarkP = move_marks(FirstColShown, FirstRowShown, GridP, MarkP), + + update_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, Data, ListAsStr), + NewRowDataList = make_row_data_list(1, NofRows, Data), + + NewGridP = GridP#grid_params{first_row_shown = FirstRowShown, + row_data_list = NewRowDataList}, + + ProcVars#process_variables{grid_params = NewGridP, + mark_params = NewMarkP}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +scroll_grid_horizontally(NewFirstColShown, ProcVars) -> + #process_variables{parent_pid = ParentPid, + grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{grid_width = Width, + nof_cols = NofCols, + nof_rows = NofRows, + nof_rows_shown = NofRowsShown, + first_row_shown = FirstRowShown, + col_width = DefaultColWidth, + max_col_width = MaxColWidth, + min_col_width = MinColWidth, + col_widths = ColWidths, + row_height = RowHeight, + col_frame_ids = ColFrameIds, + col_ids = ColIds, + row_ids = RowIds, + bg_color = BgColor, + fg_color = FgColor, + row_data_list = RowDataList, + lists_as_strings = ListAsStr} = GridP, + + % Probably it is unnecessary to check whether any new columns shall be + % created or not, but what the heck, we don't want to crash... + ColsShown = compute_cols_shown(NewFirstColShown, ColWidths, Width, NofCols, + DefaultColWidth), + NofColsShown = length(ColsShown), + + ParentPid ! #pg_col_info{sender = self(), + first_col_shown = NewFirstColShown, + width_of_cols_shown = ColsShown, + nof_rows_shown = NofRowsShown + }, + + NewMarkP = move_marks(NewFirstColShown, FirstRowShown, GridP, MarkP), + + NewColWidths = update_col_widths(ColsShown, ColWidths, NewFirstColShown, + DefaultColWidth), + + {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = + check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, + RowIds, NofRows, RowHeight, FgColor, BgColor ), + + + RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), + resize_all_grid_columns(1, ColsShown, NewColFrameIds, MaxColWidth, MinColWidth), + + refresh_visible_rows(RowsToUpdate, NewFirstColShown, NofColsShown, RowDataList, ListAsStr), + + % Clear fields currently not visible. + clear_fields(lists:nthtail(NofColsShown, NewColIds), + lists:nthtail(NofRowsShown, NewRowIds)), + + + NewGridP = GridP#grid_params{nof_cols = NewNofCols, + cols_shown = ColsShown, + col_widths = NewColWidths, + col_frame_ids = NewColFrameIds, + col_ids = NewColIds, + row_ids = NewRowIds, + first_col_shown = NewFirstColShown + }, + + ProcVars#process_variables{grid_params = NewGridP, + mark_params = NewMarkP}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_row(VirtualRow, ProcVars) -> + #process_variables{grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{first_row_shown = FirstRowShown, + nof_rows_shown = NofRowsShown, + row_ids = RowIds} = GridP, + + mark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, RowIds, + ?GRID_MARK_COLOR), + + NewMarkP = MarkP#mark_params{cell_id = undefined, + virtual_col = undefined, + virtual_row = VirtualRow + }, + + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_col(VirtualCol, ProcVars) -> + #process_variables{grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{first_col_shown = FirstColShown, + cols_shown = ColsShown, + col_ids = ColIds} = GridP, + + NofColsShown = length(ColsShown), + mark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, ColIds, + ?GRID_MARK_COLOR), + + NewMarkP = MarkP#mark_params{cell_id = undefined, + virtual_col = VirtualCol, + virtual_row = undefined + }, + + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_cell_and_notify(CellId, RealCol, RealRow, ProcVars) -> + #process_variables{parent_pid = ParentPid, + grid_params = GridP, + mark_params = MarkP} = ProcVars, + + #grid_params{first_col_shown = FirstColShown, + first_row_shown = FirstRowShown} = GridP, + + OldCellId = MarkP#mark_params.cell_id, + + VirtualCol = FirstColShown + RealCol - 1, + VirtualRow = FirstRowShown + RealRow - 1, + + %% Right now, when the table tool only is passive, i.e., we cannot edit + %% the table content, we don't want to be able to mark empty cells. + + {text, CellText} = gs:read(CellId, label), + + CellMarked = case CellText of + "" -> false; + _AnyText when CellId=:=OldCellId -> false; + _AnyText -> true + end, + + remove_marks(ProcVars), + update_marked_cells(CellId, OldCellId, CellMarked), + + notify_about_cell_marked(ParentPid, CellMarked, RealCol, RealRow, + VirtualCol, VirtualRow, CellText), + + NewMarkP = case CellMarked of + true -> + MarkP#mark_params{cell_id = CellId, + virtual_col = VirtualCol, + virtual_row = VirtualRow + }; + false -> + MarkP#mark_params{cell_id = undefined, + virtual_col = 0, + virtual_row = undefined + } + end, + + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +remove_marks(ProcVars) -> + #process_variables{mark_params = MarkP, + grid_params = GridP} = ProcVars, + + #grid_params{first_col_shown = FirstColShown, + cols_shown = ColsShown, + col_ids = ColIds, + first_row_shown = FirstRowShown, + nof_rows_shown = NofRowsShown, + row_ids = RowIds} = GridP, + + + #mark_params{cell_id = CellId, + virtual_col = VirtualCol, + virtual_row = VirtualRow} = MarkP, + + case {VirtualCol, VirtualRow} of + {undefined, undefined} -> + update_marked_cells(CellId, CellId, false); + {_AnyCol, undefined} -> + NofColsShown = length(ColsShown), + unmark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, + ColIds); + {undefined, _AnyRow} -> + unmark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, + RowIds); + _Other -> + update_marked_cells(CellId, CellId, false) + end, + + NewMarkP = MarkP#mark_params{cell_id = undefined, + virtual_col = 0, + virtual_row = undefined + }, + ProcVars#process_variables{mark_params = NewMarkP}. + + + + + + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +move_marks(FirstCol, FirstRow, GridP, MarkP) -> + #grid_params{first_col_shown = OldFirstCol, + cols_shown = ColsShown, + first_row_shown = OldFirstRow, + nof_rows_shown = NofRowsShown, + col_ids = ColIds, + row_ids = RowIds} = GridP, + + #mark_params{virtual_col = VirtualCol, + virtual_row = VirtualRow} = MarkP, + + + case {VirtualCol, VirtualRow} of + {undefined, undefined} -> + NofColsShown = length(ColsShown), + move_marked_cell(FirstCol, FirstRow, NofColsShown, + NofRowsShown, RowIds, MarkP); + {_AnyCol, undefined} -> + NofColsShown = length(ColsShown), + OldLastCol = OldFirstCol + NofColsShown - 1, + LastCol = FirstCol + NofColsShown - 1, + move_marked_col(VirtualCol, OldFirstCol, OldLastCol, + FirstCol, LastCol, ColIds, MarkP); + {undefined, _AnyRow} -> + OldLastRow = OldFirstRow + NofRowsShown - 1, + LastRow = FirstRow + NofRowsShown - 1, + move_marked_row(VirtualRow, OldFirstRow, OldLastRow, + FirstRow, LastRow, RowIds, MarkP); + {_CellCol, _CellRow} -> + NofColsShown = length(ColsShown), + move_marked_cell(FirstCol, FirstRow, NofColsShown, + NofRowsShown, RowIds, MarkP) + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +refresh_marks(GridP, MarkP) -> + #grid_params{first_col_shown = FirstCol, + cols_shown = ColsShown, + first_row_shown = FirstRow, + nof_rows_shown = NofRowsShown, + col_ids = ColIds, + row_ids = RowIds} = GridP, + + #mark_params{virtual_col = VirtualCol, + virtual_row = VirtualRow} = MarkP, + + + case {VirtualCol, VirtualRow} of + {undefined, undefined} -> + NofColsShown = length(ColsShown), + move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown, + RowIds, MarkP); + {_AnyCol, undefined} -> + NofColsShown = length(ColsShown), + LastCol = FirstCol + NofColsShown - 1, + mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR); + {undefined, _AnyRow} -> + LastRow = FirstRow + NofRowsShown - 1, + mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR); + {_CellCol, _CellRow} -> + NofColsShown = length(ColsShown), + move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown, + RowIds, MarkP) + end. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +move_marked_col(VirtualCol, + OldFirstCol, OldLastCol, FirstCol, LastCol, ColIds, MarkP) -> + unmark_col(VirtualCol, OldFirstCol, OldLastCol, ColIds), + mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR), + MarkP#mark_params{cell_id = undefined}. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_col(VirtualCol, FirstCol, _LastCol, _ColIds, _Color) when VirtualCol < FirstCol -> + done; +mark_col(VirtualCol, _FirstCol, LastCol, _ColIds, _Color) when VirtualCol > LastCol -> + done; +mark_col(VirtualCol, FirstCol, _LastCol, ColIds, Color) -> + RealCol = VirtualCol - FirstCol + 1, + MarkedColIds = lists:nth(RealCol, ColIds), + mark_all_cells(MarkedColIds, Color). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +unmark_col(VirtualCol, FirstCol, LastCol, ColIds) -> + mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?DEFAULT_GRID_BGCOLOR). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_all_cells([], _Color) -> + done; +mark_all_cells([CellId | T], Color) -> + gs:config(CellId, [{bg, Color}]), + mark_all_cells(T, Color). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +mark_row(VirtualRow, FirstRow, _LastRow, _RowIds, _Color) when VirtualRow < FirstRow -> + done; +mark_row(VirtualRow, _FirstRow, LastRow, _RowIds, _Color) when VirtualRow > LastRow -> + done; +mark_row(VirtualRow, FirstRow, _LastRow, RowIds, Color) -> + RealRow = VirtualRow - FirstRow + 1, + MarkedRowIds = lists:nth(RealRow, RowIds), + mark_all_cells(MarkedRowIds, Color). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +unmark_row(VirtualRow, FirstRow, LastRow, RowIds) -> + mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?DEFAULT_GRID_BGCOLOR). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +move_marked_row(VirtualRow, + OldFirstRow, OldLastRow, FirstRow, LastRow, RowIds, MarkP) -> + unmark_row(VirtualRow, OldFirstRow, OldLastRow, RowIds), + mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR), + MarkP#mark_params{cell_id = undefined}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +move_marked_cell(FirstColShown, + FirstRowShown, NofColsShown, NofRowsShown, RowIds, MarkP) -> + #mark_params{cell_id = OldCellId, + virtual_col = VirtualCol, + virtual_row = VirtualRow} = MarkP, + + case OldCellId of + undefined -> + MarkP; + _OtherId -> + NewRealCol = VirtualCol - FirstColShown + 1, + NewRealRow = VirtualRow - FirstRowShown + 1, + update_marked_cells(undefined, OldCellId, false), + case check_if_new_mark_visible(NewRealCol, NewRealRow, + NofColsShown, NofRowsShown) of + false -> + MarkP; + true -> + NewCellId = lists:nth(NewRealCol, + lists:nth(NewRealRow, RowIds)), + update_marked_cells(NewCellId, undefined, true), + MarkP#mark_params{cell_id = NewCellId} + end + end. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +check_if_new_mark_visible(Col, _Row, NofCols, _NofRows) when Col > NofCols -> + false; +check_if_new_mark_visible(Col, _Row, _NofCols, _NofRows) when Col =< 0 -> + false; +check_if_new_mark_visible(_Col, Row, _NofCols, NofRows) when Row > NofRows -> + false; +check_if_new_mark_visible(_Col, Row, _NofCols, _NofRows) when Row =< 0 -> + false; +check_if_new_mark_visible(_Col, _Row, _NofCols, _NofRows) -> + true. + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_marked_cells(CellId, OldCellId, _MarkedCell) when CellId =:= OldCellId -> + gs:config(CellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]); +update_marked_cells(_CellId, undefined, false) -> + done; +update_marked_cells(CellId, undefined, true) -> + gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]); +update_marked_cells(CellId, OldCellId, true) -> + gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]), + gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]); +update_marked_cells(_CellId, OldCellId, false) -> + gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +notify_about_cell_marked(Pid, Marked, RealCol, RealRow, VirtCol, VirtRow, Text) -> + Pid ! #pg_cell_marked{sender = self(), + cell_marked = Marked, + real_col = RealCol, + real_row = RealRow, + virtual_col = VirtCol, + virtual_row = VirtRow, + cell_text = Text + }. + + + + + + + + +%%%--------------------------------------------------------------------- +%%% START of functions used to print data in the grid fields. +%%%--------------------------------------------------------------------- + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +refresh_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) -> + done; +refresh_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) -> + clear_cols_or_rows(RowIds); +refresh_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown, + [DataItemList | RemDataItemLists], ListAsStr) -> + NewDataItemList = get_data_sublist(DataItemList, FirstColShown, NofColsShown), + update_one_row(lists:sublist(OneRowIds, NofColsShown), NewDataItemList, ListAsStr), + refresh_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemDataItemLists, ListAsStr). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) -> + done; +update_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) -> + clear_cols_or_rows(RowIds); +update_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown, + [DataItem | RemData], ListAsStr) -> + % We convert the received item to a list! This way we know that + % '[notext]' shall be printed as 'notext', while 'notext' shall + % be printed as ''. + TempDataItemList = item_to_list(DataItem), + DataItemList = get_data_sublist(TempDataItemList, FirstColShown, + NofColsShown), + update_one_row(lists:sublist(OneRowIds, NofColsShown), DataItemList, ListAsStr), + update_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemData, ListAsStr). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_one_row(OneRowIds, [], _ListAsStr) -> + clear_one_col_or_row(OneRowIds); +update_one_row([], _DataItemList, _ListAsStr) -> + done; +update_one_row([LabelId | RemLabelIds], [notext | T], ListAsStr) -> + gs:config(LabelId, [{label, {text, ""}} + ]), + update_one_row(RemLabelIds, T, ListAsStr); +update_one_row([LabelId | RemLabelIds], [DataElem | T], ListAsStr) -> + Str = case ListAsStr of + true -> + tv_io_lib:format(" ~p", [DataElem]); + false -> + " " ++ lists:flatten(tv_io_lib:write(DataElem)) + end, + gs:config(LabelId, [{label, {text, Str}} + ]), + update_one_row(RemLabelIds, T, ListAsStr). + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +make_row_data_list(N, NofRows, []) when N > NofRows -> + []; +make_row_data_list(N, NofRows, []) -> + % If NofRows == N, we get the empty list here! + lists:duplicate(NofRows- N, notext); +make_row_data_list(N, NofRows, [_DataItem | _RemData]) when N > NofRows -> + []; +make_row_data_list(N, NofRows, [DataItem | RemData]) -> + % We convert the received item to a list! This way we know that + % '[notext]' shall be printed as 'notext', while 'notext' shall + % be printed as ''. + [item_to_list(DataItem) | make_row_data_list(N + 1, NofRows, RemData)]. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +item_to_list(Item) when is_tuple(Item) -> + tuple_to_list(Item); +item_to_list(Item) -> + [Item]. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_data_sublist(DataList, StartPos, Length) -> + case catch lists:sublist(DataList, StartPos, Length) of + {'EXIT', _Reason} -> + []; + Sublist -> + Sublist + end. + + + + + + + +%%%--------------------------------------------------------------------- +%%% END of functions used to print data in the grid fields. +%%%--------------------------------------------------------------------- + + + + + +%%%--------------------------------------------------------------------- +%%% START of functions used to resize the grid columns. +%%%--------------------------------------------------------------------- + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_all_grid_columns(_RealCol, [], _ColFrameIds, _MaxColWidth, _MinColWidth) -> + done; +resize_all_grid_columns(RealCol, [ColWidth | Tail], ColFrameIds, MaxColWidth, MinColWidth) -> + + resize_one_column(RealCol, ColWidth, ColFrameIds, MaxColWidth, MinColWidth), + resize_all_grid_columns(RealCol + 1, Tail, ColFrameIds, MaxColWidth, + MinColWidth). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +resize_one_column(RealCol, Width, ColFrameIds, MaxW, MinW) -> + NewWidthOfCol = min(MaxW, max(Width, MinW)), + case length(ColFrameIds) of + RealCol -> + done; + _Other -> + FrameId = lists:nth(RealCol + 1, ColFrameIds), + gs:config(FrameId, [{x, NewWidthOfCol + 1}]) + end, + NewWidthOfCol. + + + + +%%%--------------------------------------------------------------------- +%%% END of functions used to resize the grid columns. +%%%--------------------------------------------------------------------- + + + + + + +%%%--------------------------------------------------------------------- +%%% START of functions used to update the grid. +%%%--------------------------------------------------------------------- + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +clear_fields(ColIds, RowIds) -> + clear_cols_or_rows(ColIds), + clear_cols_or_rows(RowIds). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +clear_cols_or_rows([]) -> + done; +clear_cols_or_rows([IdList | RemIdLists]) -> + clear_one_col_or_row(IdList), + clear_cols_or_rows(RemIdLists). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +clear_one_col_or_row([]) -> + done; +clear_one_col_or_row([LabelId | RemLabelIds]) -> + gs:config(LabelId, [{label, {text, ""}} + ]), + clear_one_col_or_row(RemLabelIds). + + + + + +%%%--------------------------------------------------------------------- +%%% END of functions used to update the grid. +%%%--------------------------------------------------------------------- + + + + + + +%%%--------------------------------------------------------------------- +%%% START of functions used to compute the part of the grid that has to +%%% be updated, as well as deciding whether a new column has to be added. +%%% Old columns (i.e., columns not visible) are not removed, but they +%%% shall not be updated until they once again becomes visible. +%%%--------------------------------------------------------------------- + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +check_nof_cols(_ColsShown, NofNewCols, ColFrameIds, ColIds, RowIds, + _NofRows, _RowHeight, _FgColor, _BgColor) when NofNewCols =< 0 -> + {length(ColFrameIds), ColFrameIds, ColIds, RowIds}; +check_nof_cols(ColsShown, NofNewCols, ColFrameIds, ColIds, + RowIds, NofRows, RowHeight, FgColor, BgColor) -> + NewColNo = length(ColFrameIds) + 1, + % We don't care about the pathological case where no columns have been + % created. If the gridwidth, or the columnwidth, was set to =< 0 during + % initialisation, then no columns will have been created. The program + % will probably also have crashed. If any smart jackass has set invalid + % values on these important parameters, then he can only blame himself. + ParentId = lists:nth((NewColNo - 1), ColFrameIds), + ParentColWidth = lists:nth((NewColNo - 1), ColsShown), + Xpos = ParentColWidth + 1, + + {ColFrameId, LabelIds} = add_one_col_frame(ParentId, NewColNo, Xpos, FgColor, + BgColor, NofRows, RowHeight), + + NewColFrameIds = ColFrameIds ++ [ColFrameId], + NewColIds = ColIds ++ [LabelIds], + NewRowIds = update_row_ids(RowIds, LabelIds), + + check_nof_cols(ColsShown, NofNewCols - 1, NewColFrameIds, NewColIds, NewRowIds, + NofRows, RowHeight, FgColor, BgColor). + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_row_ids([], _LabelIds) -> + []; +update_row_ids([OneRowIds | RemainingRows], [NewElemId | RemainingElemIds]) -> + [OneRowIds ++ [NewElemId] | update_row_ids(RemainingRows, RemainingElemIds)]. + + + + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +update_col_widths(ColsShown, ColWidths, FirstColShown, DefaultColWidth) -> + % What we do here is that we first (if necessary) add default + % column widths to the ColWidth list until it reaches to where + % ColsShown starts (vitually seen). + % In the second step we take the appropriate elements from the + % ColsShown list and add them to the ColWidths list, until it is + % of sufficient length. + % Of course this may seem unnecessary - it would suffice to just + % add default widths to the ColWidths list until it is long enough, + % since the compute_cols_shown function right now just adds default + % width columns to the ColsShown list, when the ColWidths list is empty. + % However, this could change (maybe we some other time want the last + % column to carry all remaining width, instead of adding new columns). + % Besides, we don't like hidden dependencies between functions!!! + + NofColsShown = length(ColsShown), + NewColWidths = set_necessary_col_widths_length(FirstColShown, ColWidths, + DefaultColWidth), + % Now NofVirtualCols will always be equal to, or greater + % than, FirstColShown - 1. + + NofVirtualCols = length(NewColWidths), + NecessaryNofVirtualCols = FirstColShown + (NofColsShown - 1), + if + NecessaryNofVirtualCols > NofVirtualCols -> + TailNo = NofVirtualCols - FirstColShown + 1, % Always >= 0 !!! + NewColWidths ++ lists:nthtail(TailNo, ColsShown); + true -> + NewColWidths + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +set_necessary_col_widths_length(FirstColShown, ColWidths, DefaultColWidth) -> + % First check that (length(ColWidths) - FirstColShown) >= -1. + % If not, add elements so the relation holds true! + MissingDefaultWidthElems = FirstColShown - length(ColWidths), + if + MissingDefaultWidthElems > 1 -> + ColWidths ++ lists:duplicate(MissingDefaultWidthElems - 1, + DefaultColWidth); + true -> + ColWidths + end. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +compute_rows_shown(GridHeight, RowHeight) -> + (GridHeight div RowHeight) + 1. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +compute_cols_shown(FirstColShown, ColWidths, GridWidth, _NofCols, DefaultColWidth) -> + ColWidthsLength = length(ColWidths), + % Normally ColWidths shall be long enough, but just to make sure... + % (We could have chosen to update ColWidths here to, but right now + % we do it instead explicitly when resizeing the grid, changing the + % column size(s), and scrolling horizontally.) + UsedColWidths = if + ColWidthsLength < FirstColShown -> + []; + true -> + lists:nthtail(FirstColShown - 1, ColWidths) + end, + compute_cols_shown(UsedColWidths, GridWidth, DefaultColWidth). + + + + + + +compute_cols_shown(_ColWidths, RemainingWidth, _DefColW) when RemainingWidth =< 0 -> + []; +compute_cols_shown([], RemainingWidth, DefaultColWidth) -> + [DefaultColWidth | compute_cols_shown([], RemainingWidth - DefaultColWidth, + DefaultColWidth)]; +compute_cols_shown([VirtualColWidth | T], RemainingWidth, DefaultColWidth) -> + [VirtualColWidth | compute_cols_shown(T, RemainingWidth - VirtualColWidth, + DefaultColWidth)]. + + + + + +%%%--------------------------------------------------------------------- +%%% END of functions used to compute the part of the grid that has to +%%% be updated, as well as deciding whether a new column has to be added. +%%%--------------------------------------------------------------------- + + + + + + + +%%%--------------------------------------------------------------------- +%%% START of functions used to create the grid (baseframes, columns +%%% and rows), as well as sorting the ID's appropriately. +%%%--------------------------------------------------------------------- + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_base_frame(ParentId, Width, Height, Xpos, Ypos, BgColor) -> + gs:frame(ParentId, [{width, Width}, + {height, Height}, + {x, Xpos}, + {y, Ypos}, + {bg, BgColor} + ]). + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_col_frames(0, _NofRows, _RowHeight, _ParentId, _GridP, ColFrameAcc, LabelAcc) -> + {lists:reverse(ColFrameAcc), lists:reverse(LabelAcc)}; +create_col_frames(N, NofRows, RowHeight, ParentId, GridP, ColFrameAcc, LabelAcc) -> + % Yes, it *IS* inefficient to copy GridP for each loop. + % However, it is only done once, and for a limited number of times, + % and we avoid having a lot of parameters! + #grid_params{bg_color = BgColor, + fg_color = FgColor, + nof_cols = NofCols, + col_width = ColWidth} = GridP, + Xpos = if + N =:= NofCols -> + 0; + true -> + ColWidth + 1 + end, + + ColNo = NofCols - N + 1, + {ColFrameId, LabelIds} = add_one_col_frame(ParentId, ColNo, Xpos, FgColor, + BgColor, NofRows, RowHeight), + create_col_frames(N - 1, NofRows, RowHeight, ColFrameId, GridP, + [ColFrameId | ColFrameAcc], [LabelIds | LabelAcc]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +add_one_col_frame(ParentId, ColNo, Xpos, FgColor, BgColor, NofRows, RowHeight) -> + ColFrameId = create_one_col_frame(ParentId, Xpos, FgColor), + FirstRowYpos = 1, + FirstRowNo = 1, + LabelIds = create_rows_on_frame(ColFrameId, FirstRowNo, NofRows, RowHeight, + FirstRowYpos, FgColor, BgColor, ColNo, []), + {ColFrameId, LabelIds}. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_one_col_frame(ParentId, Xpos, BgColor) -> + ColFrameWidth = 1200, + ColFrameHeight = 900, + Ypos = 0, + gs:frame(ParentId, [{width, ColFrameWidth}, + {height, ColFrameHeight}, + {x, Xpos}, + {y, Ypos}, + {bg, BgColor} + ]). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +create_rows_on_frame(_FrameId, RowNo, NofRows, _H, _Y, _Fg, _Bg, _ColNo, Acc) when RowNo > NofRows -> + lists:reverse(Acc); +create_rows_on_frame(FrameId, RowNo, NofRows, H, Y, Fg, Bg, ColNo, RAcc) -> + Width = 1200, + R = gs:label(FrameId, [{width, Width}, + {height, H}, + {x, 1}, + {y, Y}, + {bg, Bg}, + {fg, Fg}, + {align, w}, + {buttonpress, true}, + {data, {gridcell, ColNo, RowNo, FrameId}} + ]), + NextRowNo = RowNo + 1, + NextY = Y + H +1, + create_rows_on_frame(FrameId, NextRowNo, NofRows, H, NextY, Fg, Bg, ColNo, + [R | RAcc]). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +get_row_ids(0, _Cols, RowAcc) -> + RowAcc; +get_row_ids(RowNo, Cols, RowAcc) -> + Row = extract_ids_for_one_row(RowNo, Cols), + get_row_ids(RowNo - 1, Cols, [Row | RowAcc]). + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +extract_ids_for_one_row(_N, []) -> + []; +extract_ids_for_one_row(N, [ColIds | Tail]) -> + [lists:nth(N, ColIds) | extract_ids_for_one_row(N, Tail)]. + + + +%%%--------------------------------------------------------------------- +%%% END of functions used to create the grid. +%%%--------------------------------------------------------------------- + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +max(A, B) when A > B -> + A; +max(_, B) -> + B. + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +min(A, B) when A < B -> + A; +min(_, B) -> + B. + diff --git a/lib/tv/src/tv_pg_int_def.hrl b/lib/tv/src/tv_pg_int_def.hrl new file mode 100644 index 0000000000..6f88053d47 --- /dev/null +++ b/lib/tv/src/tv_pg_int_def.hrl @@ -0,0 +1,92 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Internal definitions for the pd part of the table tool. +%%% +%%%********************************************************************* + + +-define(GRIDFUNCS, tv_pg_gridfcns). + + + +-define(DEFAULT_COLFRAME_HEIGHT, 870). +-define(DEFAULT_COLWIDTH, 100). +-define(DEFAULT_GRID_BGCOLOR, {255, 255, 255}). % white +-define(DEFAULT_GRID_FGCOLOR, {0, 0, 0}). % black +-define(GRID_MARK_COLOR, {200, 255, 255}). +-define(GRID_FONT, {courier, 12}). + + + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). +-define(DEFAULT_ROW_COLOR, {178, 34, 34}). % Firebrick! +-define(DEFAULT_GRID_COLOR, {0, 0, 0}). +-define(LIGHT_GRAY, {226, 226, 226}). +-define(DARK_VIOLET, {148, 0, 211}). +-define(FIREBRICK, {178, 34, 34}). +-define(ANTIQUE_WHITE, {255, 255, 235}). + + + + +-record(grid_params, {bg_frame, + fg_frame, + grid_width, + grid_height = ?DEFAULT_COLFRAME_HEIGHT, % Actual height, + % not the height + % shown! + grid_xpos, + grid_ypos, + bg_color = ?DEFAULT_GRID_BGCOLOR, + fg_color = ?DEFAULT_GRID_FGCOLOR, + nof_cols = 10, + nof_rows, + nof_rows_shown, + row_height, + col_width = ?DEFAULT_COLWIDTH, + first_col_shown = 1, + first_row_shown = 1, + max_col_width = 1200, + min_col_width = 5, + col_widths = [], + cols_shown = [], + col_frame_ids = [], + col_ids = [], + row_ids = [], + row_data_list = [], + current_max_value, + lists_as_strings = true + }). + + + +-record(mark_params, {cell_id, + virtual_col, + virtual_row + }). + + + + +-record(process_variables, {parent_pid, + grid_parent_id, + grid_params = #grid_params{}, + mark_params = #mark_params{} + }). diff --git a/lib/tv/src/tv_poll_dialog.erl b/lib/tv/src/tv_poll_dialog.erl new file mode 100644 index 0000000000..8d41251266 --- /dev/null +++ b/lib/tv/src/tv_poll_dialog.erl @@ -0,0 +1,357 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Code for the "set poll interval" dialog with the user. +%%% +%%%********************************************************************* + +-module(tv_poll_dialog). + + + +-export([start/1, init/2]). + + + +-include("tv_int_msg.hrl"). + + + +-define(WINDOW_WIDTH, 305). +-define(WINDOW_HEIGHT, 185). + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +start(Pos) -> + Pid = self(), + ProcPid = spawn_link(?MODULE, init, [Pid, Pos]), + receive_answer(ProcPid). + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +init(Pid, Pos) -> + process_flag(trap_exit, true), + {ScalePos, ScaleRange, Poll, Color} = case Pos of + infinity -> + {0, {20, 20}, false, {255, 255, 255}}; + _Other -> + {Pos, {20, 300}, true, {0, 0, 0}} + end, + S = gs:start(), + Win = gs:window(S, [{width, ?WINDOW_WIDTH}, + {height, ?WINDOW_HEIGHT}, + {bg, ?DEFAULT_BG_COLOR}, + {title, "[TV] Set Poll Interval"}, + {configure, true}, + {destroy, true} + ]), + + NoPollBtn = gs:radiobutton(Win, [{height, 30}, + {width, 143}, + {x, 10}, + {y, 10}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {value, no_poll}, + {label, {text, "Manual Polling"}}, + {select, not(Poll)} + ]), + + PollBtn = gs:radiobutton(Win, [{height, 30}, + {width, 163}, + {x, 10}, + {y, 60}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {value, poll}, + {label, {text, "Automatic Polling"}}, + {select, Poll} + ]), + + Lbl = gs:label(Win, [{label, {text, "Poll Interval (seconds):"}}, + {align, center}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, Color}, + {width, 183}, + {height, 30}, + {x, 10}, + {y, 100} + ]), + + Scale = gs:scale(Win, [{bg, ?DEFAULT_BG_COLOR}, + {fg, Color}, + {orient, horizontal}, + {range, ScaleRange}, + {pos, ScalePos}, + {width, 285}, + {height, 50}, + {x, 10}, + {y, 130} + ]), + + OkBtn = gs:button(Win, [{label, {text, "OK"}}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {width, 60}, + {height, 30}, + {x, 230}, + {y, 10} + ]), + + CancelBtn = gs:button(Win, [{label, {text, "Cancel"}}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0, 0, 0}}, + {align, center}, + {width, 60}, + {height, 30}, + {x, 230}, + {y, 60} + ]), + + gs:config(Win, {map, true}), + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos). + + + + + + + +%%%********************************************************************* +%%% INTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +receive_answer(ProcPid) -> + receive_answer(ProcPid, undefined, undefined, undefined, undefined). + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) -> + receive Msg -> + case Msg of + + {browser, ProcPid, cancel} -> + PcPid = self(), + PcPid ! DataReqMsg, + PcPid ! WinConfMsg, + PcPid ! MarkedRowMsg, + PcPid ! SubsetMsg, + cancel; + + {browser, ProcPid, {true, PollInterval}} -> + PcPid = self(), + PcPid ! DataReqMsg, + PcPid ! WinConfMsg, + PcPid ! MarkedRowMsg, + PcPid ! SubsetMsg, + PollInterval; + + {browser, ProcPid, {false, _Pollinterval}} -> + PcPid = self(), + PcPid ! DataReqMsg, + PcPid ! WinConfMsg, + PcPid ! MarkedRowMsg, + PcPid ! SubsetMsg, + infinity; + + #pc_data_req{} -> + receive_answer(ProcPid, Msg, WinConfMsg, MarkedRowMsg, SubsetMsg); + + #pc_win_conf{} -> + receive_answer(ProcPid, DataReqMsg, Msg, MarkedRowMsg, SubsetMsg); + + #pc_marked_row{} -> + receive_answer(ProcPid, DataReqMsg, WinConfMsg, Msg, SubsetMsg); + + #dbs_subset{} -> + receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, Msg); + + #pc_menu_msg{data = exit_button} -> + self() ! Msg, + cancel; + + #pc_set_sorting_mode{sender = Sender} -> + Sender ! #pd_ignore{sender = self()}, + ProcPid ! raise_and_beep, + receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg); + + {'EXIT', _Sender, _Reason} -> + self() ! Msg, + cancel; + + _Other -> + ProcPid ! raise_and_beep, + receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) + end + end. + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos) -> + receive + {gs, Scale, click, _, [NewPos | _]} -> + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, Poll, NewPos); + + {gs, NoPollBtn, click, _, _} -> + gs:config(Lbl, [{fg, {255, 255, 255}}]), + gs:config(Scale, [{fg, {255, 255, 255}}, {pos, 0}, {range, {20, 20}}]), + receive + {gs, Scale, click, _, _} -> + done + after 500 -> + done + end, + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, false, Pos); + + {gs, PollBtn, click, _, _} -> + gs:config(Lbl, [{fg, {0, 0, 0}}]), + gs:config(Scale, [{fg, {0, 0, 0}}, {pos, Pos}, {range, {20, 300}}]), + receive + {gs, Scale, click, _, _} -> + done + after 500 -> + done + end, + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, true, Pos); + + {gs, OkBtn, click, _, _} -> + Pid ! {browser, self(), {Poll, Pos}}; + + {gs, CancelBtn, click, _, _} -> + Pid ! {browser, self(), cancel}; + + {gs, _, destroy, _, _} -> + Pid ! {browser, self(), cancel}; + + + {gs, Win, configure, _, _} -> + gs:config(Win, [{width, ?WINDOW_WIDTH}, + {height, ?WINDOW_HEIGHT} + ]), + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, Poll, Pos); + + + raise_and_beep -> + gs:config(Win, [raise, + beep]), + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, Poll, Pos); + + + {'EXIT', _Sender, _Reason} -> + Pid ! {browser, self(), cancel}; + + + _Other -> + io:format("Poll dialog received message ~w ~n", [_Other]), + browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, + CancelBtn, Poll, Pos) + + end. + diff --git a/lib/tv/src/tv_pw.erl b/lib/tv/src/tv_pw.erl new file mode 100644 index 0000000000..8b3186e090 --- /dev/null +++ b/lib/tv/src/tv_pw.erl @@ -0,0 +1,327 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Code for pw, the window controlling part of the table tool. +%%% +%%%********************************************************************* + + +-module(tv_pw). + + + +-export([pw/1]). + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pw_int_def.hrl"). + + + + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: pw. +%% +%% Return Value: None. +%% +%% Description: Process controlling the graphical window, as well as the +%% menubuttons. +%% +%% Parameters: None. +%%====================================================================== + + + +pw(Master) -> + process_flag(trap_exit, true), + ProcVars = #process_variables{master_pid = Master}, + blocked(ProcVars). + + + + + + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + + + +%%====================================================================== +%% Function: blocked. +%% +%% Return Value: None. +%% +%% Description: When started or explicitly blocked, pw enters this state, +%% where nothing is performed until the module explicitly is +%% deblocked. +%% +%% Parameters: +%%====================================================================== + + +blocked(ProcVars) -> + receive + Msg -> + case Msg of + #pw_deblock{} -> + deblock(Msg, ProcVars); + _Other -> + blocked(ProcVars) + end + end. + + + + + + + + + +%%====================================================================== +%% Function: deblocked. +%% +%% Return Value: None. +%% +%% Description: When deblocked, a window shall be created according to +%% specification received in pw_deblock message. +%% +%% Parameters: Rec: received pw_deblock message. +%%====================================================================== + + + +deblock(Msg, ProcVars) -> + #process_variables{window_params = WinP, + menu_params = MenuP} = ProcVars, + + NewWinP = ?WIN_FUNC_FILE:create_window(Msg, WinP), + NewMenuP = ?WIN_FUNC_FILE:create_menubar(NewWinP, MenuP), + + Sender = Msg#pw_deblock.sender, + Sender ! #pw_deblock_cfm{sender = self(), + win_id = NewWinP#window_params.window_id + }, + + NewProcVars = ProcVars#process_variables{window_params = NewWinP, + menu_params = NewMenuP + }, + deblocked_loop(NewProcVars). + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +deblocked_loop(ProcVars) -> + receive + Msg -> + case Msg of + + {gs, Id, Event, Data, Args} -> + NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), + deblocked_loop(NewProcVars); + + % Messages from pc! + #pw_select_menu{menu=Menu} -> + gs:config(Menu, [{select,true}]), + deblocked_loop(ProcVars); + + #pw_create_menu{} -> + NewProcVars = ?WIN_FUNC_FILE:create_menu(Msg, ProcVars), + % Send confirmation... + Sender = Msg#pw_create_menu.sender, + Sender ! #pw_create_menu_cfm{sender = self()}, + deblocked_loop(NewProcVars); + + #pw_set_window_title{win_title = WinTitle} -> + WinP = ProcVars#process_variables.window_params, + gs:config(WinP#window_params.window_id, [{title, "[TV] " ++ WinTitle}]), + NewWinP = WinP#window_params{window_title = WinTitle}, + NewProcVars = ProcVars#process_variables{window_params = NewWinP}, + deblocked_loop(NewProcVars); + + #pw_deblock{} -> + deblock(Msg, ProcVars); + + % Exit signals! + {'EXIT', Pid, Reason} -> + MasterPid = ProcVars#process_variables.master_pid, + exit_signals({Pid, Reason}, MasterPid), + deblocked_loop(ProcVars); + + _Other -> + deblocked_loop(ProcVars) + + end + end. + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +exit_signals(Exit_info, MasterPid) -> + case Exit_info of + {MasterPid, _Reason} -> % When from master, just quit! + exit(normal); + _Other -> + done + end. + + + + + + + + + + +%%====================================================================== +%% Function: +%% +%% Return Value: +%% +%% Description: +%% +%% Parameters: +%%====================================================================== + + +gs_messages(Msg, ProcVars) -> + MasterPid = ProcVars#process_variables.master_pid, + case Msg of + + {_Id, click, Data, _Args} -> + MasterPid ! #pc_menu_msg{sender = self(), + data = Data}, + ProcVars; + + {_Win, keypress, _Data, [Key, _ , _, 1 | _T]} -> + MenuP = ProcVars#process_variables.menu_params, + ShortcutList = MenuP#menu_params.shortcuts, + send_shortcut_data(Key, ShortcutList, MasterPid), + ProcVars; + + Msg0 = {Win, configure, _, _} -> + {Win, configure, _, [W, H | _T]} = flush_msgs(Msg0), + WinP = ProcVars#process_variables.window_params, + #window_params{window_id = WindowId, + min_window_width = MinAllowedWidth, + min_window_height = MinAllowedHeight} = WinP, + FinalWidth = ?COMM_FUNC_FILE:max(W, MinAllowedWidth), + FinalHeight = ?COMM_FUNC_FILE:max(H, MinAllowedHeight), + ?WIN_FUNC_FILE:resize_window(WindowId, FinalWidth, FinalHeight), + MasterPid ! #pc_win_conf{sender = self(), + width = FinalWidth, + height = FinalHeight}, + NewWinP = WinP#window_params{window_width = FinalWidth, + window_height = FinalHeight + }, + ProcVars#process_variables{window_params = NewWinP}; + + {_Win, destroy, _Data, _Args} -> + exit(normal); + + _Other -> + ProcVars + end. + +flush_msgs(Msg0 = {Win, Op, _, _}) -> + receive {gs, Win,Op,D,P} -> + flush_msgs({Win,Op,D,P}) + after 200 -> + Msg0 + end. + +send_shortcut_data(_Key, [], _MasterPid) -> + done; +send_shortcut_data(Key, ShortcutList, MasterPid) -> + case lists:keysearch(Key, 1, ShortcutList) of + {value, {Key, Data}} -> + MasterPid ! #pc_menu_msg{sender = self(), + data = Data}; + false -> + done + end. + + + + + + + + + + + + + + + diff --git a/lib/tv/src/tv_pw_int_def.hrl b/lib/tv/src/tv_pw_int_def.hrl new file mode 100644 index 0000000000..fabfbc2762 --- /dev/null +++ b/lib/tv/src/tv_pw_int_def.hrl @@ -0,0 +1,55 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Internal definitions for the pw part of the table tool. +%%% +%%%********************************************************************* + +-define(WIN_FUNC_FILE, tv_pw_window). + + + +-define(DEFAULT_WINDOW_WIDTH, 1000). +-define(DEFAULT_WINDOW_HEIGHT, 800). +-define(DEFAULT_MIN_WINDOW_WIDTH, 50). +-define(DEFAULT_MIN_WINDOW_HEIGHT, 50). + + + +-record(window_params, {window_id, + window_title, + window_width, + window_height, + min_window_width, + min_window_height + }). + + +-record(menu_params, {menubar_id, + shortcuts + }). + + + + + +-record(process_variables, {master_pid, + window_params = #window_params{}, + menu_params = #menu_params{} + }). diff --git a/lib/tv/src/tv_pw_window.erl b/lib/tv/src/tv_pw_window.erl new file mode 100644 index 0000000000..9cb5c879c0 --- /dev/null +++ b/lib/tv/src/tv_pw_window.erl @@ -0,0 +1,273 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%%%********************************************************************* +%%% +%%% Description: Part of the pw component controlling the graphics. +%%% +%%%********************************************************************* + + +-module(tv_pw_window). + + + +-export([create_window/2, + resize_window/3, + create_menubar/2, + create_menu/2]). + + + + +-include("tv_int_def.hrl"). +-include("tv_int_msg.hrl"). +-include("tv_pw_int_def.hrl"). + + + +-define(DEFAULT_BG_COLOR, {217, 217, 217}). + + + + +%%%********************************************************************* +%%% EXTERNAL FUNCTIONS +%%%********************************************************************* + + + + +%%====================================================================== +%% Function: create_menu. +%% +%% Return Value: Identifier to the menu created. +%% +%% Description: Creates a menu in the window. +%% +%% Parameters: Win: ID of parent window. +%%====================================================================== + + +create_menu(Msg, ProcVars) -> + MenuP = ProcVars#process_variables.menu_params, + MenubarId = MenuP#menu_params.menubar_id, + ShortcutList = MenuP#menu_params.shortcuts, + + #pw_create_menu{menutitle = MenuTitle, + title_acc_pos = TitleAccPos, + menulist = MenuList} = Msg, + + % Create the menubutton! + Label = def_or_param(MenuTitle, "NoName"), + Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, % firebrick + % {font, {helvetica, bold, 14}}, + {label, {text, Label}}, + {underline, TitleAccPos} + ]), + + % Create the actual menu! + Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}} + ]), + + NewMenuP = MenuP#menu_params{shortcuts = ShortcutList ++ create_menulist(MenuList, Menu)}, + + ProcVars#process_variables{menu_params = NewMenuP}. + + + + + + + +create_menubar(WinP, MenuP) -> + WindowId = WinP#window_params.window_id, + MenubarId = gs:create(menubar, WindowId, [{bg, ?DEFAULT_BG_COLOR} + ]), + Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, % firebrick + % {font, {helvetica, bold, 14}}, + {label, {text, " Help "}}, + {underline, 1}, + {side, right} + ]), + + % Create the actual menu! + Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}} + ]), + MenuP#menu_params{menubar_id = MenubarId, + shortcuts = create_menulist([{" Help ", normal, help_button, 1, h}, + separator, + {" OTP Documentation ",normal,otp_help_button,1,no_char}], + Menu) ++ [{x,exit_button}, {'X',exit_button}] + }. + + + + + +create_window(Msg, WinP) -> + #pw_deblock{win_title = Title, + win_width = Width, + win_height = Height, + min_win_width = MinWidth} = Msg, + + + S = gs:start(), + WindowTitle = def_or_param(Title, "NoName"), + WindowMinWidth = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_WIDTH), + WindowMinHeight = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_HEIGHT), + WindowWidth = ?COMM_FUNC_FILE:max(def_or_param(Width, + ?DEFAULT_WINDOW_WIDTH), + WindowMinWidth), + WindowHeight = ?COMM_FUNC_FILE:max(def_or_param(Height, + ?DEFAULT_WINDOW_HEIGHT), + WindowMinHeight), + + + WindowId = gs:create(window, S, [{title, WindowTitle}, + {width, WindowWidth}, + {height, WindowHeight}, + {bg, ?DEFAULT_BG_COLOR}, + {configure, true}, + {destroy, true}, + {keypress, true}, + {cursor, arrow} + ]), + + WinP#window_params{window_id = WindowId, + window_title = WindowTitle, + window_width = WindowWidth, + window_height = WindowHeight, + min_window_width = WindowMinWidth, + min_window_height = WindowMinHeight + }. + + + + + + + +resize_window(WindowId, NewWidth, NewHeight) -> + gs:config(WindowId, [{width, NewWidth}, + {height, NewHeight} + ]). + + + + +%%%******************************************************************** +%%% INTERNAL FUNCTIONS +%%%******************************************************************** + + + +create_menulist([], _Menu) -> + []; +create_menulist(List, Menu) -> + MaxLength = get_length_of_longest_menu_text(List, 0), + create_menulist(List, Menu, MaxLength). + + + + +create_menulist([], _Menu, _MaxLength) -> + []; +create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) -> + ShortcutCapitalChar = + if + ShortcutChar =:= no_char -> + no_char; + true -> + CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)), + CapitalCharValue = CharAsciiValue - ($a - $A), + list_to_atom([CapitalCharValue]) + end, + + FinalText = if + ShortcutChar =:= no_char -> + Text; + true -> + Text ++ lists:duplicate(MaxLength - length(Text), " ") ++ + " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " " + end, + TypeAndSel = + case Type of + normal -> + [{itemtype, normal}]; + {radio, Selected, Group} -> + [{itemtype, radio}, + {select, Selected}, + {group, Group}]; + {check, Selected} -> + [{itemtype, check}, + {select, Selected}] + end, + gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR}, + {fg, {178, 34, 34}}, + {label, {text, FinalText}}, + {underline, AccCharPos}, + {data, Data} | + TypeAndSel + ]), + [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)]; +create_menulist([separator | Rest], Menu, MaxLength) -> + gs:create(menuitem, Menu, [{itemtype, separator} + ]), + create_menulist(Rest, Menu, MaxLength). + + + + + + + +get_length_of_longest_menu_text([], MaxLength) -> + MaxLength; +get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) -> + L = length(Text), + if + L > CurrMax -> + get_length_of_longest_menu_text(Rest, L); + true -> + get_length_of_longest_menu_text(Rest, CurrMax) + end; +get_length_of_longest_menu_text([separator | Rest], CurrMax) -> + get_length_of_longest_menu_text(Rest, CurrMax). + + + + + +def_or_param(undefined, DefaultValue) -> + DefaultValue; +def_or_param(Param, _Default) -> + Param. + + + + + + + + + + diff --git a/lib/tv/src/tv_rec_edit.erl b/lib/tv/src/tv_rec_edit.erl new file mode 100644 index 0000000000..e8f663073e --- /dev/null +++ b/lib/tv/src/tv_rec_edit.erl @@ -0,0 +1,744 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_rec_edit). + + + +-export([start/5, + start/6, + init/8 + ]). + + +-include("tv_int_def.hrl"). + + + +-define(DEFAULT_BG_COLOR, {217,217,217}). + +-define(WIN_WIDTH, 375). +-define(WIN_HEIGHT, 341). +-define(ETS_WIN_HEIGHT, 154). + +-define(FRAME_WIDTH, 375). +-define(FRAME_HEIGHT, 265). +-define(ETS_FRAME_HEIGHT, 74). + +-define(MAX_LABEL_WIDTH, 165). +-define(X0, 15). +-define(Y0, 20). +-define(LABEL_HEIGHT, 30). +-define(ENTRY_HEIGHT, 30). +-define(FONT, {screen,12}). +-define(NEXT_BTN_WIDTH, 57). +-define(NEXT_BTN_HEIGHT, 22). +-define(NEXT_BTN_FG, {178,34,34}). +-define(INSERT_BTN_WIDTH, 80). +-define(INSERT_BTN_HEIGHT, 30). +-define(INSERT_BTN_DIST_BETWEEN, 23). +-define(INSERT_BTN_DIST_FROM_BOTTOM, 23). + + + + + +start(TableType, TableName, AttributeList, ListsAsStr, ErrMsgMode) -> + AttributeValues = lists:duplicate(length(AttributeList), undefined), + spawn_link(?MODULE, init, [TableType, TableName, AttributeList, + AttributeValues, ListsAsStr, ErrMsgMode, self(), true]). + + + +start(TableType, TableName, AttributeList, AttributeValues, ListsAsStr, ErrMsgMode) -> + spawn_link(?MODULE, init, [TableType, TableName, AttributeList, + AttributeValues, ListsAsStr, ErrMsgMode, self(), false]). + + + + +init(TableType,TableName,AttributeList,AttributeValues,ListsAsStr,ErrMsgMode,MasterPid,Insert) -> + process_flag(trap_exit, true), + put(error_msg_mode, ErrMsgMode), + Frames = create_window(TableType, TableName, AttributeList, AttributeValues, + ListsAsStr, Insert), + loop(TableType, TableName, Frames, AttributeList, AttributeValues, MasterPid, ListsAsStr). + + + + + +loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr) -> + receive + + {gs, insert, click, Insert, _Args} -> + gs:config(win, [{cursor, busy}]), + case get_record(TabType, TabName, AttrList, AttrList, Frames) of + {ok, NewRec} -> + case Insert of + insert -> + MPid ! {new_object, NewRec}; + change -> + MPid ! {updated_object, NewRec} + end; + error -> + done + end, + gs:config(win, [{cursor, arrow}]), + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, cancel, click, _Data, _Args} -> + exit(normal); + + + {gs, reset, click, _Data, _Args} -> + gs:config(win, [{cursor, busy}]), + set_entry_values(TabType, AttrList, AttrVals, ListsAsStr), + gs:config(win, [{cursor, arrow}]), + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + + {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} -> + {_Term, {NextEntry, NextFrame}} = + check_entry_content(EntryId, AttrList, Frames, forward), + case NextEntry of + EntryId -> + gs:config(NextEntry, [{setfocus, true}]); + _OtherId -> + gs:config(NextFrame, [raise]), + gs:config(NextEntry, [{setfocus, true}, + {select, {0,100000000}}]) + end, + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, EntryId, keypress, _Data, ['Down' | _T]} -> + {_Term, {NextEntry, NextFrame}} = + check_entry_content(EntryId, AttrList, Frames, forward), + case NextEntry of + EntryId -> + gs:config(NextEntry, [{setfocus, true}]); + _OtherId -> + gs:config(NextFrame, [raise]), + gs:config(NextEntry, [{setfocus, true}, + {select, {0,100000000}}]) + end, + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} -> + {_Term, {NextEntry, NextFrame}} = + check_entry_content(EntryId, AttrList, Frames, backward), + gs:config(NextFrame, [raise]), + case NextEntry of + EntryId -> + gs:config(NextEntry, [{setfocus, true}]); + _OtherId -> + gs:config(NextFrame, [raise]), + gs:config(NextEntry, [{setfocus, true}, + {select, {0,100000000}}]) + end, + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, EntryId, keypress, _Data, ['Up' | _T]} -> + {_Term, {NextEntry, NextFrame}} = + check_entry_content(EntryId, AttrList, Frames, backward), + gs:config(NextFrame, [raise]), + case NextEntry of + EntryId -> + gs:config(NextEntry, [{setfocus, true}]); + _OtherId -> + gs:config(NextFrame, [raise]), + gs:config(NextEntry, [{setfocus, true}, + {select, {0,100000000}}]) + end, + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, Id, keypress, _Data, ['Return' | _T]} -> + OldCursor = gs:read(Id, cursor), + gs:config(Id, [{cursor, busy}]), + gs:config(win, [{cursor, busy}]), + Insert = gs:read(insert, data), + case get_record(TabType, TabName, AttrList, AttrList, Frames) of + {ok, NewRec} -> + case Insert of + insert -> + MPid ! {new_object, NewRec}; + change -> + MPid ! {updated_object, NewRec} + end; + error -> + done + end, + gs:config(win, [{cursor, arrow}]), + gs:config(Id, [{cursor, OldCursor}]), + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + + {gs, _Id, click, FrameNo, _Args} -> + gs:config(lists:nth(FrameNo, Frames), [raise]), + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, win, configure, _Data, [Width | _T]} -> + resize_window(TabType, lists:max([Width, ?WIN_WIDTH]), Frames, AttrList), + loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); + + + {gs, win, destroy, _Data, _Args} -> + exit(normal); + + + insert_mode -> + NewAttrVals = lists:duplicate(length(AttrList), undefined), + set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr), + loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); + + + {update_mode, Obj} -> + NewAttrVals = + case TabType of + mnesia -> + case Obj of + undefined -> + lists:duplicate(length(AttrList), undefined); + _AnyRec -> + tl(tuple_to_list(Obj)) + end; + ets -> + [Obj] + end, + set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr), + loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); + + + {reset_info, Obj} -> + %% Info to use, instead of old info, when reset button is pressed. + NewAttrVals = + case TabType of + mnesia -> + case Obj of + undefined -> + lists:duplicate(length(AttrList), undefined); + _AnyRec -> + tl(tuple_to_list(Obj)) + end; + ets -> + [Obj] + end, + loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); + + + raise -> + gs:config(win, [raise]), + loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr); + + + {'EXIT', _Pid, _Reason} -> + exit(normal); + + + _Other -> + loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr) + end. + + + + +resize_window(TabType, WinWidth, Frames, AttrList) -> + WinHeight = + case TabType of + mnesia -> + get_window_height(length(AttrList)); + ets -> + ?ETS_WIN_HEIGHT + end, + gs:config(win, [{width, WinWidth}, + {height, WinHeight} + ]), + FrameWidth = WinWidth, + LblL = lists:map(fun(H) -> + gs:config(H, [{width, FrameWidth}]), + {LblW, BId, NId} = gs:read(H, data), + XNext = get_next_btn_xpos(FrameWidth), + XBack = XNext - ?NEXT_BTN_WIDTH, + gs:config(BId, [{x, XBack}]), + gs:config(NId, [{x, XNext}]), + LblW + end, + Frames), + LblW = hd(LblL), + EntryW = get_entry_width(TabType, FrameWidth, LblW), + lists:foreach(fun(H) -> + gs:config(H, [{width, EntryW}]) + end, + AttrList), + gs:config(btnframe, [{width, FrameWidth}]), + {XInsert, XCancel, XReset} = get_insert_btn_coords(WinWidth), + gs:config(insert, [{x, XInsert}]), + gs:config(cancel, [{x, XCancel}]), + gs:config(reset, [{x, XReset}]). + + + + +check_entry_content(EntryId, AttributeList, Frames, Direction) -> + EditedStr = gs:read(EntryId, text), + case tv_db_search:string_to_term(EditedStr) of + {error, {_Reason, Msg}} -> + gs:config(EntryId, [beep]), + tv_utils:notify(gs:start(), "TV Notification", Msg), + {error, {EntryId, no_matter}}; + {ok, NewTerm} -> + {{ok,NewTerm}, get_next_entry_id(EntryId, AttributeList, Frames, Direction)} + end. + + + + +get_next_entry_id(EntryId, AttributeList, Frames, Direction) -> + OldPos = get_pos(EntryId, AttributeList), + MaxPos = length(AttributeList), + NewPos = case Direction of + forward when OldPos < MaxPos -> + OldPos + 1; + forward -> + 1; + backward when OldPos > 1 -> + OldPos - 1; + backward -> + MaxPos; + stationary -> + OldPos + end, + FramePos = get_next_frame_id(NewPos), + {lists:nth(NewPos, AttributeList), lists:nth(FramePos, Frames)}. + + + + +get_next_frame_id(Pos) -> + case Pos rem 5 of + 0 -> + Pos div 5; + _Other -> + (Pos div 5) + 1 + end. + + + + +get_record(TabType, TabName, AttrList, AttrList, Frames) -> + case get_record(AttrList, AttrList, Frames, []) of + {ok, RecList} -> + case TabType of + mnesia -> + NewRecList = [TabName | RecList], + {ok, list_to_tuple(NewRecList)}; + ets -> + {ok, hd(RecList)} %% Only one element, a tuple! + end; + error -> + error + end. + + + + +get_record([H | T], AttrList, Frames, Acc) -> + case check_entry_content(H, AttrList, Frames, forward) of + {{ok, NewTerm}, _PosTuple} -> + get_record(T, AttrList, Frames, [NewTerm | Acc]); + {error, _PosTuple} -> + {EntryId, FrameId} = get_next_entry_id(H, AttrList, Frames, stationary), + gs:config(FrameId, [raise]), + gs:config(EntryId, [{setfocus, true}]), + error + end; +get_record([], _AttrList, _Frames, Acc) -> + {ok, lists:reverse(Acc)}. + + + + + + +get_pos(Elem, L) -> + get_pos(Elem, L, 1). + + +get_pos(Elem, [Elem | _T], N) -> + N; +get_pos(Elem, [_H | T], N) -> + get_pos(Elem, T, N + 1). + + + + +create_window(mnesia, TableName, AttrList, AttrValues, ListsAsStr, Insert) -> + NofAttr = length(AttrList), + NofFrames = + case NofAttr rem 5 of + 0 -> + NofAttr div 5; + _Rem -> + (NofAttr div 5) + 1 + end, + + WinHeight = get_window_height(NofAttr), + FrameHeight = get_frame_height(NofAttr), + + Attr = get_longest_attribute_name(AttrList), + LabelWidth = lists:min([?MAX_LABEL_WIDTH, + element(1, gs:read(gs:start(), + {font_wh, {?FONT, atom_to_list(Attr)}}))]), + + gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, + {height, WinHeight}, + {title, "[TV] Record Editor: '" ++ + atom_to_list(TableName) ++ "'"}, + {bg, ?DEFAULT_BG_COLOR}, + {configure, true}, + {destroy, true}, + {cursor, arrow} + ]), + + create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight), + FrameList = create_frames(NofFrames, LabelWidth, AttrList, AttrValues, NofFrames, + ListsAsStr, FrameHeight), + gs:config(hd(FrameList), [raise]), + gs:config(hd(AttrList), [{setfocus, true}, + {select, {0,100000000}}]), + gs:config(win, [{map,true}]), + FrameList; +create_window(ets, TableName, [Attr], [AttrVal], ListsAsStr, Insert) -> + gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, + {height, ?ETS_WIN_HEIGHT}, + {title, "[TV] Tuple Editor, table '" ++ + atom_to_list(TableName) ++ "'"}, + {bg, ?DEFAULT_BG_COLOR}, + {configure, true}, + {destroy, true}, + {cursor, arrow} + ]), + + F = gs:frame(win, [{width, ?FRAME_WIDTH}, + {height, ?ETS_FRAME_HEIGHT}, + {x, 0}, + {y, 0}, + {bg, ?DEFAULT_BG_COLOR}, + {bw,2}, + {data, {0, undefined, undefined}} + ]), + + create_insert_and_cancel_btns(Insert, ?ETS_WIN_HEIGHT, ?ETS_FRAME_HEIGHT), + + EntryW = get_entry_width(ets, ?FRAME_WIDTH, 0), + EntryX = ?X0 - 2, + + EntryText = + case AttrVal of + undefined -> + ""; + _OtherVal -> + case ListsAsStr of + true -> + tv_io_lib:format("~p", [AttrVal]); + false -> + lists:flatten(io_lib:write(AttrVal)) + end + end, + gs:entry(Attr, F, [{width, EntryW}, + {height, ?LABEL_HEIGHT}, + {x, EntryX}, + {y, ?Y0}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {bw, 1}, + {font, ?FONT}, + {justify, left}, + {text, EntryText}, + {cursor, text}, + {setfocus, true}, + {enable, true}, + {keypress,true}, + {select, {0,100000000}} + ]), + gs:config(win, [{map,true}]), + [F]. + + + + +get_insert_btn_coords(WinWidth) -> + Middle = round(WinWidth / 2), + XInsert = Middle - round(1.5 * ?INSERT_BTN_WIDTH) - ?INSERT_BTN_DIST_BETWEEN, + XCancel = Middle - round(0.5 * ?INSERT_BTN_WIDTH), + XReset = Middle + round(0.5 * ?INSERT_BTN_WIDTH) + ?INSERT_BTN_DIST_BETWEEN, + {XInsert, XCancel, XReset}. + + + + +create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight) -> + LowerFrameHeight = WinHeight - FrameHeight, + Y = ?INSERT_BTN_DIST_FROM_BOTTOM, + {XInsert, XCancel, XReset} = get_insert_btn_coords(?WIN_WIDTH), + + {InsertBtnText, InsertBtnData} = + case Insert of + true -> + {"Insert", insert}; + false -> + {"Change", change} + end, + + gs:frame(btnframe, win, [{width, ?FRAME_WIDTH}, + {height, LowerFrameHeight}, + {x, 0}, + {y, FrameHeight}, + {bg, ?DEFAULT_BG_COLOR}, + {bw,2} + ]), + gs:button(insert, btnframe, [{width, ?INSERT_BTN_WIDTH}, + {height, ?INSERT_BTN_HEIGHT}, + {x, XInsert}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {font, ?FONT}, + {label, {text, InsertBtnText}}, + {align, center}, + {data, InsertBtnData} + ]), + gs:button(cancel, btnframe, [{width, ?INSERT_BTN_WIDTH}, + {height, ?INSERT_BTN_HEIGHT}, + {x, XCancel}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {font, ?FONT}, + {label, {text, "Cancel"}}, + {align, center} + ]), + gs:button(reset, btnframe, [{width, ?INSERT_BTN_WIDTH}, + {height, ?INSERT_BTN_HEIGHT}, + {x, XReset}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {font, ?FONT}, + {label, {text, "Reset"}}, + {align, center} + ]). + + + + + +create_frames(0, _LblW, _AttrList, _AttrValues, _NofFrames, _ListsAsStr, _FrameHeight) -> + []; +create_frames(N, LblW, AttrList, AttrValues, NofFrames, ListsAsStr, FrameHeight) -> + F = gs:frame(win, [{width, ?FRAME_WIDTH}, + {height, FrameHeight}, + {x, 0}, + {y, 0}, + {bg, ?DEFAULT_BG_COLOR}, + {bw,2} + ]), + {BId, NId} = create_back_and_next_btns(F, 5, N, NofFrames), + gs:config(F, [{data, {LblW, BId, NId}}]), + {RemAttrList, RemAttrValues} = + create_labels_and_entries(5, AttrList, AttrValues, LblW, F, ListsAsStr), + [F | create_frames(N - 1,LblW,RemAttrList,RemAttrValues,NofFrames,ListsAsStr,FrameHeight)]. + + + + + + +create_back_and_next_btns(FrameId, NofEntries, FrameNo, NofFrames) -> + Y = ?Y0 + NofEntries * (?LABEL_HEIGHT + 10) + 8, + XNext = get_next_btn_xpos(?FRAME_WIDTH), + XBack = XNext - ?NEXT_BTN_WIDTH, + DataNext = (NofFrames - FrameNo + 1) + 1, + DataBack = (NofFrames - FrameNo + 1) - 1, + BId = + if + DataBack =< 0 -> + undefined; + true -> + gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH}, + {height, ?NEXT_BTN_HEIGHT}, + {x, XBack}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, ?NEXT_BTN_FG}, + {font, ?FONT}, + {align, center}, + {label, {text, "< Back"}}, + %% {underline, 2}, + {data, DataBack} + ]) + end, + NId = + if + DataNext > NofFrames -> + undefined; + true -> + gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH}, + {height, ?NEXT_BTN_HEIGHT}, + {x, XNext}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, ?NEXT_BTN_FG}, + {font, ?FONT}, + {align, center}, + {label, {text, " Next >"}}, + %% {underline, 1}, + {data, DataNext} + ]) + end, + {BId, NId}. + + + + +get_next_btn_xpos(FrameWidth) -> + FrameWidth - ?X0 - ?NEXT_BTN_WIDTH. + + + +get_entry_width(TableType, FrameWidth, LblWidth) -> + HorizontalSpacing = + case TableType of + mnesia -> + 10; + ets -> + 0 + end, + FrameWidth - LblWidth - 2 * ?X0 - HorizontalSpacing. + + + +create_labels_and_entries(N, [H | T], [VH | VT], LblW, F, ListsAsStr) when N > 0 -> + Y = ?Y0 + (5 - N) * (?LABEL_HEIGHT + 10), + EntryW = get_entry_width(mnesia, ?FRAME_WIDTH, LblW), + EntryX = ?FRAME_WIDTH - EntryW - ?X0 - 2, + + EntryText = + case ListsAsStr of + true -> + tv_io_lib:format("~p", [VH]); + false -> + lists:flatten(io_lib:write(VH)) + end, + gs:label(F, [{width, LblW}, + {height, ?LABEL_HEIGHT}, + {x, ?X0}, + {y, Y}, + {bg, ?DEFAULT_BG_COLOR}, + {fg, {0,0,0}}, + {align,w}, + {font, ?FONT}, + {label, {text, atom_to_list(H)}} + ]), + gs:entry(H, F, [{width, EntryW}, + {height, ?LABEL_HEIGHT}, + {x, EntryX}, + {y, Y}, + {bg, {255,255,255}}, + {fg, {0,0,0}}, + {bw, 1}, + {font, ?FONT}, + {justify, left}, + {text, EntryText}, + {cursor, text}, + {setfocus, false}, + {enable, true}, + {keypress,true} + ]), + create_labels_and_entries(N - 1, T, VT, LblW, F, ListsAsStr); +create_labels_and_entries(0, RemAttrList, RemAttrValues, _LblW, _F, _ListsAsStr) -> + {RemAttrList, RemAttrValues}; +create_labels_and_entries(_N, [], [], _LblW, _F, _ListsAsStr) -> + {[], []}. + + + + +get_longest_attribute_name(AttrList) -> + get_longest_attribute_name(AttrList, 0, undefined). + + +get_longest_attribute_name([H | T], Max, Attr) -> + CurrLength = length(atom_to_list(H)), + if + CurrLength >= Max -> + get_longest_attribute_name(T, CurrLength, H); + true -> + get_longest_attribute_name(T, Max, Attr) + end; +get_longest_attribute_name([], _Max, Attr) -> + Attr. + + + + +get_window_height(N) -> + if + N >= 5 -> + ?WIN_HEIGHT; + true -> + ?WIN_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8) + end. + + + +get_frame_height(N) -> + if + N >= 5 -> + ?FRAME_HEIGHT; + true -> + ?FRAME_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8) + end. + + + + +set_entry_values(TabType, [H | T], [VH | VT], ListsAsStr) -> + EntryText = + case VH of + undefined when TabType =:= ets -> + ""; + _AnyValue -> + case ListsAsStr of + true -> + tv_io_lib:format("~p", [VH]); + false -> + lists:flatten(io_lib:write(VH)) + end + end, + gs:config(H, [{text, EntryText}]), + set_entry_values(TabType, T, VT, ListsAsStr); +set_entry_values(_TabType, [], [], _ListsAsStr) -> + done. diff --git a/lib/tv/src/tv_table_owner.erl b/lib/tv/src/tv_table_owner.erl new file mode 100644 index 0000000000..bccac6c236 --- /dev/null +++ b/lib/tv/src/tv_table_owner.erl @@ -0,0 +1,122 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_table_owner). + + + +-export([create/5 + ]). + + +-export([internal_create/3, + start/0, + init/0 + ]). + + + +-define(REGISTERED_NAME, tv_table_owner). + + + +create(mnesia, _Node, _LocalNode, _TableName, _Options) -> + error; +create(ets, _Node, true, TabName, Options) -> + case catch internal_create(ets, TabName, Options) of + {TabName, Pid} when is_pid(Pid) -> + {ok, {TabName,Pid}}; + {TabNo, Pid} when is_pid(Pid) -> + {ok, {TabNo,Pid}}; + _OtherResult -> + error + end; +create(ets, Node, false, TabName, Options) -> + case catch rpc:block_call(Node, ?MODULE, internal_create, [ets, TabName, Options]) of + {TabName, Pid} when is_pid(Pid) -> + {ok, {TabName,Pid}}; + {TabNo, Pid} when is_pid(Pid) -> + {ok, {TabNo,Pid}}; + _OtherResult -> + error + end. + + + + + +internal_create(ets, TabName, Options) -> + ?MODULE:start(), + ?REGISTERED_NAME ! {create, self(), ets, TabName, Options}, + receive + {?REGISTERED_NAME, Result} -> + Result + after + 5000 -> + error + end. + + + + + + +start() -> + case whereis(?REGISTERED_NAME) of + undefined -> + ServerPid = spawn(?MODULE, init, []), + case catch register(?REGISTERED_NAME, ServerPid) of + true -> + ok; + {'EXIT', _Reason} -> + exit(ServerPid, kill), + timer:sleep(500), + start() + end; + Pid when is_pid(Pid) -> + ok + end. + + + + + + + + +init() -> + %% Currently no initialisations! + loop(). + + + + + + +loop() -> + receive + + {create, Sender, ets, TabName, Options} -> + Sender ! {?REGISTERED_NAME, (catch ets:new(TabName, Options))}, + loop(); + + + _Other -> + loop() + + end. + diff --git a/lib/tv/src/tv_utils.erl b/lib/tv/src/tv_utils.erl new file mode 100644 index 0000000000..fd232bde69 --- /dev/null +++ b/lib/tv/src/tv_utils.erl @@ -0,0 +1,176 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +-module(tv_utils). + + + +-export([notify/3]). + + + + %% Minimum size of help windows +-define(wwin, 300). +-define(hwin, 180). + + %% Button sizes +-define(wbut, 60). +-define(hbut, 30). + +-define(pad, 10). + + +%---------------------------------------- +% notify(S,Strings) -> ok +% S = pid() GS +% Strings = string() | [string()] +% A notification window contains a message to the user. +% Will lock the GUI until the user confirms the message by +% pressing the 'Ok' button. +%---------------------------------------- +notify(S,Title,Strings) -> + W = required_width(Strings, ?wwin), + Htop = round(2 * ?hwin / 3), + Hbot = ?hwin - Htop, + + %% Open a new window + Win = gs:create(window,S,[{width, W}, + {height, ?hwin}, + {title, Title}, + {data, notifywin} + ]), + + %% Top frame containing a label + Top = gs:create(frame,Win,[{width, W}, + {height, Htop}, + {x, 0}, + {y, 0}, + {data, notifywin}, + {keypress, true} + ]), + + Lbl = gs:create(label,Top,[{width,W}, + {height, Htop - 2 * ?pad}, + {x, 0}, + {y, ?pad}, + {align, c}, + {justify, center}, + {data, notifywin}, + {keypress, true} + ]), + + gs:config(Lbl, {label, {text, insert_newlines(Strings)}}), + + %% Bottom frame containing an 'Ok' button + Bot = gs:create(frame,Win,[{width, W}, + {height, Hbot}, + {x, 0}, + {y, Htop} + ]), + gs:create(button,Bot,[{width, ?wbut}, + {height, ?hbut}, + {x, W / 2 - ?wbut/2}, + {y, Hbot / 2 - ?hbut / 2}, + {label, {text, "OK"}}, + {data, notifywin}, + {keypress, true}]), + + gs:config(Win, [{map,true}]), + + event_loop(Win,null). + + + + +insert_newlines([String|Rest]) when is_list(String), Rest=/=[]-> + String ++ "\n" ++ insert_newlines(Rest); +insert_newlines([Last]) -> + [Last]; +insert_newlines(Other) -> + Other. + + + + +event_loop(Win,Entry) -> + receive + + %% + %% Notify window + %% + + %% 'Ok' pressed in notify window + {gs,_Obj,_Event,notifywin,["OK"|_]} -> + gs:destroy(Win), + ok; + + %% 'Window manager destroy' received in notify window + {gs,_Obj,destroy,notifywin,_} -> + gs:destroy(Win), + ok; + + %% 'Return' pressed in notify or confirm window + {gs,_Obj,_Event,helpwin,['Return'|_]} -> + gs:destroy(Win), + ok; + + + %% + %% Common or partly common events + %% + + %% 'Window manager destroy' received in notify, + %% confirm,confirm_exit or request window + {gs,_Obj,destroy,_,_} -> + gs:destroy(Win), + cancel; + + %% Flush any other GS events + {gs,_Obj,_Event,_Data,_Arg} -> + event_loop(Win,Entry) + end. + + + + +%---------------------------------------- +% required_width(Strings,Min) -> Req +% Strings = string() | [string()] +% Min = Req = integer() +% Returns the minimum required width in pixels for a help window, +% which is the maximum of Min and the required width for Strings. +% NOTE: Font dependant really! +%---------------------------------------- +required_width([First|Rest],Min) when is_list(First) -> + Req = 7*length(First), % 7 pixels per character + if + Req>Min -> + required_width(Rest,Req); + true -> + required_width(Rest,Min) + end; +required_width([],Min) -> + Min; +required_width(String,Min) -> + Req = 7*length(String), + if + Req>Min -> + Req; + true -> + Min + end. + diff --git a/lib/tv/vsn.mk b/lib/tv/vsn.mk new file mode 100644 index 0000000000..be1981b755 --- /dev/null +++ b/lib/tv/vsn.mk @@ -0,0 +1,20 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# + +TV_VSN = 2.1.4.4 -- cgit v1.2.3