aboutsummaryrefslogtreecommitdiffstats
path: root/apps/windoze/CBuilder5
diff options
context:
space:
mode:
authordanglassey <danglassey>2002-08-14 09:57:17 +0000
committerdanglassey <danglassey>2002-08-14 09:57:17 +0000
commitc9458897ebbb739d8db83c80e06512d8a612f743 (patch)
treef8c5381045887e34388cc6b26cfccc254bf766dc /apps/windoze/CBuilder5
downloadsword-sf-cvs-c9458897ebbb739d8db83c80e06512d8a612f743.tar.gz
*** empty log message ***
Diffstat (limited to 'apps/windoze/CBuilder5')
-rw-r--r--apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp122
-rw-r--r--apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm161
-rw-r--r--apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.h39
-rw-r--r--apps/windoze/CBuilder5/BibleCS/DevOfTheDay.bmpbin0 -> 8718 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/DevOfTheDay.cpp37
-rw-r--r--apps/windoze/CBuilder5/BibleCS/DevOfTheDay.dfm383
-rw-r--r--apps/windoze/CBuilder5/BibleCS/DevOfTheDay.h33
-rw-r--r--apps/windoze/CBuilder5/BibleCS/FontSel.cpp151
-rw-r--r--apps/windoze/CBuilder5/BibleCS/FontSel.dfm196
-rw-r--r--apps/windoze/CBuilder5/BibleCS/FontSel.h61
-rw-r--r--apps/windoze/CBuilder5/BibleCS/Makefile16
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModInstForm.cpp14
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModInstForm.dfm83
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModInstForm.h27
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModVisFrm.cpp50
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModVisFrm.dfm71
-rw-r--r--apps/windoze/CBuilder5/BibleCS/ModVisFrm.h37
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PreviewForm.cpp328
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PreviewForm.dfm204
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PreviewForm.h54
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PrintFrm.cpp441
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PrintFrm.dfm565
-rw-r--r--apps/windoze/CBuilder5/BibleCS/PrintFrm.h117
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.cpp129
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.dfm219
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.h64
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp860
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RxRichEditX.h100
-rw-r--r--apps/windoze/CBuilder5/BibleCS/SplashPage.cpp16
-rw-r--r--apps/windoze/CBuilder5/BibleCS/SplashPage.dfm4962
-rw-r--r--apps/windoze/CBuilder5/BibleCS/SplashPage.h25
-rw-r--r--apps/windoze/CBuilder5/BibleCS/StudyProfessor.cpp16
-rw-r--r--apps/windoze/CBuilder5/BibleCS/StudyProfessor.dfm45
-rw-r--r--apps/windoze/CBuilder5/BibleCS/StudyProfessor.h25
-rw-r--r--apps/windoze/CBuilder5/BibleCS/Sword.BMPbin0 -> 157854 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TModuleFonts.cpp138
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TModuleFonts.dfm156
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TModuleFonts.h56
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dof82
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dpr14
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.resbin0 -> 876 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.dfm137
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.pas72
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Readme.txt33
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.hpp98
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.pas384
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.dcrbin0 -> 928 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.pas19
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.hpp54
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.pas482
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.dcrbin0 -> 1372 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.pas545
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.dfm12
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.hpp79
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.pas204
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms_Design.pas116
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.dcrbin0 -> 2260 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.hpp575
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.pas1234
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dof82
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dpk44
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.resbin0 -> 1440 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dof87
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dpk43
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.resbin0 -> 1444 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.hpp657
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.pas7042
-rw-r--r--apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.resbin0 -> 920 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/back.bmpbin0 -> 778 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/biblecsmgr.cpp130
-rw-r--r--apps/windoze/CBuilder5/BibleCS/biblecsmgr.h34
-rw-r--r--apps/windoze/CBuilder5/BibleCS/bookmark.bmpbin0 -> 758 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/bookmarkfrm.cpp221
-rw-r--r--apps/windoze/CBuilder5/BibleCS/bookmarkfrm.dfm80
-rw-r--r--apps/windoze/CBuilder5/BibleCS/bookmarkfrm.h48
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/InstallBtn.BMPbin0 -> 26456 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/RunBtn.BMPbin0 -> 26456 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.bpr113
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.cpp21
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.resbin0 -> 1896 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.cpp70
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.dfmbin0 -> 488359 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.h37
-rw-r--r--apps/windoze/CBuilder5/BibleCS/cdstartup/sword.bmpbin0 -> 145002 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/editentryfrm.cpp352
-rw-r--r--apps/windoze/CBuilder5/BibleCS/editentryfrm.dfm892
-rw-r--r--apps/windoze/CBuilder5/BibleCS/editentryfrm.h110
-rw-r--r--apps/windoze/CBuilder5/BibleCS/getsaved.conf8
-rw-r--r--apps/windoze/CBuilder5/BibleCS/layout.conf156
-rw-r--r--apps/windoze/CBuilder5/BibleCS/mainfrm.cpp2821
-rw-r--r--apps/windoze/CBuilder5/BibleCS/mainfrm.dfm738
-rw-r--r--apps/windoze/CBuilder5/BibleCS/mainfrm.h418
-rw-r--r--apps/windoze/CBuilder5/BibleCS/newbmfilefrm.cpp14
-rw-r--r--apps/windoze/CBuilder5/BibleCS/newbmfilefrm.dfm99
-rw-r--r--apps/windoze/CBuilder5/BibleCS/newbmfilefrm.h27
-rw-r--r--apps/windoze/CBuilder5/BibleCS/optionfrm.cpp644
-rw-r--r--apps/windoze/CBuilder5/BibleCS/optionfrm.dfm681
-rw-r--r--apps/windoze/CBuilder5/BibleCS/optionfrm.h146
-rw-r--r--apps/windoze/CBuilder5/BibleCS/options.conf48
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rtfhintfrm.cpp48
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rtfhintfrm.dfm26
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rtfhintfrm.h30
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rxlib/RXCCONST.R32bin0 -> 612 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rxlib/RXCOMBOS.R32bin0 -> 636 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rxlib/RXCONST.R32bin0 -> 856 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rxlib/RxRichEd.hpp628
-rw-r--r--apps/windoze/CBuilder5/BibleCS/rxlib/Rxcombos.hpp272
-rw-r--r--apps/windoze/CBuilder5/BibleCS/save.bmpbin0 -> 334 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/schemes.conf84
-rw-r--r--apps/windoze/CBuilder5/BibleCS/search.bmpbin0 -> 780 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/searchfrm.cpp414
-rw-r--r--apps/windoze/CBuilder5/BibleCS/searchfrm.dfm393
-rw-r--r--apps/windoze/CBuilder5/BibleCS/searchfrm.h107
-rw-r--r--apps/windoze/CBuilder5/BibleCS/splashfrm.cpp16
-rw-r--r--apps/windoze/CBuilder5/BibleCS/splashfrm.dfm13590
-rw-r--r--apps/windoze/CBuilder5/BibleCS/splashfrm.h26
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Default.sch20
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Light Blues.sch24
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Lighten Up.sch24
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Midnight.sch24
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Navy Blues.sch24
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/colors/Parchment.sch24
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de.conf180
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_back.bmpbin0 -> 536 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_search.bmpbin0 -> 604 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/hu.conf172
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/id.conf179
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl.conf178
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_back.bmpbin0 -> 798 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_search.bmpbin0 -> 798 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.bpr166
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.cpp160
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.h1
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.icobin0 -> 766 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.resbin0 -> 1980 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/swordlib.bpr203
-rw-r--r--apps/windoze/CBuilder5/BibleCS/swordlib.cpp121
-rw-r--r--apps/windoze/CBuilder5/BibleCS/swordprj.bpg32
-rw-r--r--apps/windoze/CBuilder5/BibleCS/versesel.cpp22
-rw-r--r--apps/windoze/CBuilder5/BibleCS/versesel.dfm64
-rw-r--r--apps/windoze/CBuilder5/BibleCS/versesel.h27
-rw-r--r--apps/windoze/CBuilder5/BibleCS/vrslstfrm.cpp49
-rw-r--r--apps/windoze/CBuilder5/BibleCS/vrslstfrm.dfm40
-rw-r--r--apps/windoze/CBuilder5/BibleCS/vrslstfrm.h29
-rw-r--r--apps/windoze/CBuilder5/BibleCS/wtbsa.conf20
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/FTPDownload.cpp29
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/FTPDownload.h16
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InfoFrm.cpp33
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InfoFrm.dfmbin0 -> 1132 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InfoFrm.h32
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpg31
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpr136
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InstallMgr.cpp36
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/InstallMgr.resbin0 -> 1852 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/MainFrm.cpp1110
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/MainFrm.dfm2224
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/MainFrm.h146
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.cpp160
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.dfmbin0 -> 3588 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.h52
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/StatusFrm.cpp273
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/StatusFrm.dfmbin0 -> 1093 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/StatusFrm.h89
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/UninstallFrm.cpp15
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/UninstallFrm.dfmbin0 -> 675 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/UninstallFrm.h26
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/arrow2r.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/arrow3u.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/back.bmpbin0 -> 798 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/bookshut.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/bulblk.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/bulbon.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/check.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/cipherfrm.cpp67
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/cipherfrm.dfmbin0 -> 1278 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/cipherfrm.h37
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/delete.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/filenew.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/floppy.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/globe.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/insert.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/installmgr.conf8
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/query.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/sword.bmpbin0 -> 8950 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/trash.bmpbin0 -> 376 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/undo.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/upgdlk.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/zlib.bpf25
-rw-r--r--apps/windoze/CBuilder5/InstallMgr/zlib.bpr126
-rw-r--r--apps/windoze/CBuilder5/prototype/AboutBoxfrm.cpp85
-rw-r--r--apps/windoze/CBuilder5/prototype/AboutBoxfrm.dfmbin0 -> 2778 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/AboutBoxfrm.h36
-rw-r--r--apps/windoze/CBuilder5/prototype/AppBar.cpp234
-rw-r--r--apps/windoze/CBuilder5/prototype/AppBar.dfmbin0 -> 10405 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/AppBar.h94
-rw-r--r--apps/windoze/CBuilder5/prototype/Bitmap1.bmpbin0 -> 5318 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/BookMarkPanel.cpp352
-rw-r--r--apps/windoze/CBuilder5/prototype/BookMarkPanel.h39
-rw-r--r--apps/windoze/CBuilder5/prototype/CommentPanel.cpp222
-rw-r--r--apps/windoze/CBuilder5/prototype/CommentPanel.h39
-rw-r--r--apps/windoze/CBuilder5/prototype/DeskTopNameForm.cpp15
-rw-r--r--apps/windoze/CBuilder5/prototype/DeskTopNameForm.dfmbin0 -> 868 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/DeskTopNameForm.h27
-rw-r--r--apps/windoze/CBuilder5/prototype/DockCanvas.cpp16
-rw-r--r--apps/windoze/CBuilder5/prototype/DockCanvas.dfm18
-rw-r--r--apps/windoze/CBuilder5/prototype/DockCanvas.h21
-rw-r--r--apps/windoze/CBuilder5/prototype/LDPanel.cpp174
-rw-r--r--apps/windoze/CBuilder5/prototype/LDPanel.h39
-rw-r--r--apps/windoze/CBuilder5/prototype/ModInstForm.cpp14
-rw-r--r--apps/windoze/CBuilder5/prototype/ModInstForm.dfmbin0 -> 1457 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/ModInstForm.h27
-rw-r--r--apps/windoze/CBuilder5/prototype/ModTabPanel.cpp114
-rw-r--r--apps/windoze/CBuilder5/prototype/ModTabPanel.h30
-rw-r--r--apps/windoze/CBuilder5/prototype/TextPanel.cpp183
-rw-r--r--apps/windoze/CBuilder5/prototype/TextPanel.h34
-rw-r--r--apps/windoze/CBuilder5/prototype/back.bmpbin0 -> 780 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/biblecsmgr.cpp88
-rw-r--r--apps/windoze/CBuilder5/prototype/biblecsmgr.h23
-rw-r--r--apps/windoze/CBuilder5/prototype/bookmark.bmpbin0 -> 758 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/bookmarkfrm.cpp222
-rw-r--r--apps/windoze/CBuilder5/prototype/bookmarkfrm.dfmbin0 -> 1627 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/bookmarkfrm.h48
-rw-r--r--apps/windoze/CBuilder5/prototype/bookmarks/personal.conf7
-rw-r--r--apps/windoze/CBuilder5/prototype/desktop.bmpbin0 -> 374 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/desktop2.bmpbin0 -> 246 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/editentryfrm.cpp332
-rw-r--r--apps/windoze/CBuilder5/prototype/editentryfrm.dfmbin0 -> 22859 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/editentryfrm.h108
-rw-r--r--apps/windoze/CBuilder5/prototype/mainfrm.cpp825
-rw-r--r--apps/windoze/CBuilder5/prototype/mainfrm.dfmbin0 -> 10684 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/mainfrm.h238
-rw-r--r--apps/windoze/CBuilder5/prototype/newbmfilefrm.cpp14
-rw-r--r--apps/windoze/CBuilder5/prototype/newbmfilefrm.dfmbin0 -> 1638 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/newbmfilefrm.h27
-rw-r--r--apps/windoze/CBuilder5/prototype/optionfrm.cpp20
-rw-r--r--apps/windoze/CBuilder5/prototype/optionfrm.dfmbin0 -> 2521 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/optionfrm.h39
-rw-r--r--apps/windoze/CBuilder5/prototype/options.conf15
-rw-r--r--apps/windoze/CBuilder5/prototype/search.bmpbin0 -> 780 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/searchfrm.cpp95
-rw-r--r--apps/windoze/CBuilder5/prototype/searchfrm.dfmbin0 -> 2304 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/searchfrm.h44
-rw-r--r--apps/windoze/CBuilder5/prototype/sword.bpr124
-rw-r--r--apps/windoze/CBuilder5/prototype/sword.cpp47
-rw-r--r--apps/windoze/CBuilder5/prototype/sword.resbin0 -> 876 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/swordlib.bpr168
-rw-r--r--apps/windoze/CBuilder5/prototype/swordlib.cpp61
-rw-r--r--apps/windoze/CBuilder5/prototype/swordprj.bpg23
-rw-r--r--apps/windoze/CBuilder5/prototype/versesel.cpp22
-rw-r--r--apps/windoze/CBuilder5/prototype/versesel.dfmbin0 -> 677 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/versesel.h27
-rw-r--r--apps/windoze/CBuilder5/prototype/vrslstfrm.cpp50
-rw-r--r--apps/windoze/CBuilder5/prototype/vrslstfrm.dfmbin0 -> 561 bytes
-rw-r--r--apps/windoze/CBuilder5/prototype/vrslstfrm.h29
254 files changed, 56601 insertions, 0 deletions
diff --git a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp
new file mode 100644
index 0000000..b76b9b1
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp
@@ -0,0 +1,122 @@
+//---------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "AboutBoxfrm.h"
+#include "mainfrm.h"
+//---------------------------------------------------------------------
+#pragma resource "*.dfm"
+TAboutBox *AboutBox;
+//---------------------------------------------------------------------
+__fastcall TAboutBox::TAboutBox(TComponent* AOwner) : TForm(AOwner) {
+}
+
+
+//---------------------------------------------------------------------
+void __fastcall TAboutBox::FormShow(TObject *Sender) {
+ int i;
+ static char *modtypes[] = {"Biblical Texts", "Commentaries", "Lexicons / Dictionaries", "Generic Books"};
+
+ string newtext, tmptext;
+ ModMap::iterator it;
+ SectionMap::iterator it2;
+ ConfigEntMap::iterator it3;
+ TMemoryStream *RTFStream = new TMemoryStream();
+
+ newtext = "{\\rtf1\\ansi{\\fonttbl{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}}{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;}";
+ newtext += "\\pard\\qc\\cf2\\nowidctlpar{\\fs30\\b Installed Modules } \\par \\pard \\nowidctlpar \\cf0 ";
+
+ for (i = 0; i < 4; i++) {
+ newtext += "\\par {\\fs28\\b ";
+ newtext += modtypes[i];
+ newtext += " }\\par \\par ";
+ for (it = Form1->mainmgr->Modules.begin(); it != Form1->mainmgr->Modules.end(); it++) {
+ if (!strcmp((*it).second->Type(), modtypes[i])) {
+ it2 = Form1->mainmgr->config->Sections.find((*it).second->Name());
+ if (it2 != Form1->mainmgr->config->Sections.end()) {
+ newtext = newtext + "{\\fs24\\cf1\\b " + (*it).second->Name() + " }\t";
+ newtext = newtext + "{\\fs24\\i " + (*it).second->Description() + " } \\par ";
+ it3 = (*it2).second.find("About");
+ if (it3 != (*it2).second.end())
+ newtext = newtext + "{\\fs20\\cf0 " + (*it3).second.c_str() + " }\\par \\par";
+ }
+ }
+ }
+ }
+ newtext += "{\\fs24 \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.length());
+ RTFStream->Position = 0;
+ ModulesAbout->Lines->LoadFromStream(RTFStream);
+
+ newtext = "{\\rtf1\\ansi{\\fonttbl{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}}{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;}";
+ newtext += "\\fs20 Thanx to God for His GREAT MERCY and LOVE: Never did anyone have so much, give it up so completely, to humble Himself and die such a death, all for such an ENEMY as me. -Philippians 2:6-8; Romans 5:6-10 \\par\\par ";
+ newtext += "For the latest updates and info, visit us on the net at: \\par ";
+ newtext += "http://www.crosswire.org \\par\\par ";
+ newtext += "Send us feedback, bug reports, or patches/additions: \\par ";
+ newtext += "sword-feedback@crosswire.org \\par ";
+ newtext += "sword-bugs@crosswire.org \\par ";
+ newtext += "sword-patches@crosswire.org (please include unified diffs if possible (diff -u)) \\par\\par ";
+ newtext += "To be on our mailing list: \\par ";
+ newtext += "sword-list-info@crosswire.org \\par\\par ";
+ newtext += "This software is provided free for the study of God and His Word. You DO NOT NEED TO license or pay for this software. Please: copy it freely and distribute it to athiests in Russia :), post it on your favorite FTP site, write your own modules and features for it, include it on your lastest freeware CDROM, incorporate all the cool utility classes into a product of your own, write a tract module for the program and sneak it onto all of your co-workers' computers and blame it on a virus, make fun of your pastor for spending $400 dollars on a similar package, give it to your pastor who can't figure out how to use his $400 dollar package :) \\par\\par ";
+ newtext += "OK, if you still feel the need, you can help our organization out at: \\par\\par ";
+ newtext += "CrossWire Software & Bible Society \\par ";
+ newtext += "P. O. Box 2528 \\par ";
+ newtext += "Tempe, AZ 85280-2528 \\par\\par ";
+ newtext += "... but I must warn you, your contributions will probably just go toward paying my way through college, or to give me a little more time to spend on the project :) \\par\\par ";
+ newtext += "\tMay the peace of GOD consume your heart, \\par ";
+ newtext += "\t\tThe SWORD Project Development Team \\par ";
+ newtext += "_________________________________________ \\par ";
+ newtext += "Thanks be to God for all the wonderful people who have contributed in so many ways to make this project possible. These are just a few (I could not possibly name them all) who have directly contributed an abundance of their time and talents: \\par\\par ";
+ newtext += "Chris Little (the module-making machine!); All the people at The Source in Scottsdale for testing and suggestions; ";
+ newtext += "The Bible Foundation: Jerry Kingery, Jerry Hastings; Geoffrey W. Hastings; ";
+ newtext += "William Dicks; Everyone on b-greek@franklin.oit.unc.edu; Michael Paul Johnson; ";
+ newtext += "Roland Nygren; Bayu Gunawan; Bill Kincaid; Mark Fuller; Larry Pierce; Franklin Bratcher; ";
+ newtext += "Gregory Hall; Luis Cortes; Steve Hiner; Kristof Petr; Paul Gear and OpenBible; Chris Bitmead (go Scheme!); ";
+ newtext += "Brook Humphrey; Torsten Uhlmann, Joachim Ansorg, Darwin Gregory, Martin Gruner and the BibleTime Team; ";
+ newtext += "Darren DeMeulenaere; Terry Biggs and the GnomeSword Team; Daniel Glassey; David Trotz Jr.; Karl-Heinz Troyer and BibleWorkshop";
+ newtext += "\\par\\par ";
+ newtext += "{\\i And the list goes on...} \\par \\par ";
+ newtext += "{\\fs24 \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.length());
+ RTFStream->Position = 0;
+ CreditAbout->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+}
+//---------------------------------------------------------------------------
+
+
+
+
+void __fastcall TAboutBox::ProgramIconMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ if ((Shift.Contains(ssCtrl)) && (!Shift.Contains(ssAlt)) && (Button == mbRight)) {
+ TMemoryStream *RTFStream = new TMemoryStream();
+ string newtext = "{\\rtf1\\ansi{\\fonttbl{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}}{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;}";
+ newtext += "\\fs20 mainmgr->config: \\par\\par ";
+
+ SectionMap::iterator section;
+ ConfigEntMap::iterator entry;
+
+ for (section = Form1->mainmgr->config->Sections.begin(); section != Form1->mainmgr->config->Sections.end(); section++) {
+ newtext += "["; newtext += section->first.c_str(); newtext += "] \\par ";
+ for (entry = (*section).second.begin(); entry != (*section).second.end(); entry++) {
+ newtext += entry->first.c_str(); newtext += "="; newtext += entry->second.c_str(); newtext += "\\par ";
+ }
+ newtext += "\\par ";
+ }
+
+
+ newtext += "{\\fs24 \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.length());
+ RTFStream->Position = 0;
+ CreditAbout->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+ }
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm
new file mode 100644
index 0000000..07cecd8
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm
@@ -0,0 +1,161 @@
+object AboutBox: TAboutBox
+ Left = 291
+ Top = 107
+ BorderStyle = bsDialog
+ Caption = 'About The SWORD Project'
+ ClientHeight = 448
+ ClientWidth = 417
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 417
+ Height = 407
+ Align = alClient
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ ParentColor = True
+ TabOrder = 0
+ object ProgramIcon: TImage
+ Left = 8
+ Top = 8
+ Width = 33
+ Height = 33
+ Picture.Data = {
+ 055449636F6E0000010001002020100000000000E80200001600000028000000
+ 2000000040000000010004000000000080020000000000000000000000000000
+ 0000000000000000000080000080000000808000800000008000800080800000
+ 80808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
+ FFFFFF0066666666666666666666666666666666688888888888888888088888
+ 8888888668888888888888888880888888888886688888888888888888808888
+ 8888888668888008888088008880800080008800688888088880880808808080
+ 8080880068888808888088080880800880888806688888008880080808880080
+ 8080880668888808080080800800080088008000688888080888888888888888
+ 8888880668888000088888888888888888888806688888888888888888880888
+ 8888888660088808880888877777777878888F86088088088808887888877788
+ 888888F60880800888078788888878878888888F680080808087878888887887
+ 8888888F6088808087878788888877788888888F088808808788778888887888
+ 8888888F08080888788878788887788888F888F6000000877787778777777778
+ 88FFFF8668888880888888888888888888888886688888880888888888888888
+ 8888888668008880808800088888888888888886688088808808080888888888
+ 8888888668808880080800888888888888888886688088800008080888888888
+ 8888888668808880880880088888888888888886088080808888888888888888
+ 8888888600000080888888888888888888888886688888808888888888888888
+ 8888888668888888088888888888888888888886666666660666666666666666
+ 6666666600000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000}
+ Stretch = True
+ OnMouseDown = ProgramIconMouseDown
+ IsControl = True
+ end
+ object ProductName: TLabel
+ Left = 52
+ Top = 8
+ Width = 285
+ Height = 17
+ AutoSize = False
+ Caption = 'The SWORD Project'
+ IsControl = True
+ end
+ object Version: TLabel
+ Left = 52
+ Top = 24
+ Width = 213
+ Height = 21
+ AutoSize = False
+ Caption = 'v1.5.4betaX'
+ IsControl = True
+ end
+ object Copyright: TLabel
+ Left = 8
+ Top = 48
+ Width = 398
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = '(c) 2002; GNU GPL Copyleft, CrossWire Bible Society'
+ WordWrap = True
+ IsControl = True
+ end
+ object CreditAbout: TRichEdit
+ Left = 8
+ Top = 245
+ Width = 401
+ Height = 155
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Color = clBtnFace
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ object ModulesAbout: TRichEdit
+ Left = 8
+ Top = 68
+ Width = 401
+ Height = 169
+ Anchors = [akLeft, akTop, akRight]
+ Color = clBtnFace
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 1
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 407
+ Width = 417
+ Height = 41
+ Align = alBottom
+ TabOrder = 1
+ object OKButton: TButton
+ Left = 318
+ Top = 8
+ Width = 93
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.h b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.h
new file mode 100644
index 0000000..77454c6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.h
@@ -0,0 +1,39 @@
+//----------------------------------------------------------------------------
+#ifndef AboutBoxfrmH
+#define AboutBoxfrmH
+//----------------------------------------------------------------------------
+#include <vcl\System.hpp>
+#include <vcl\Windows.hpp>
+#include <vcl\SysUtils.hpp>
+#include <vcl\Classes.hpp>
+#include <vcl\Graphics.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Buttons.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\ComCtrls.hpp>
+//----------------------------------------------------------------------------
+class TAboutBox : public TForm
+{
+__published:
+ TPanel *Panel1;
+ TImage *ProgramIcon;
+ TLabel *ProductName;
+ TLabel *Version;
+ TLabel *Copyright;
+ TRichEdit *CreditAbout;
+ TRichEdit *ModulesAbout;
+ TPanel *Panel2;
+ TButton *OKButton;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall ProgramIconMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y);
+private:
+public:
+ virtual __fastcall TAboutBox(TComponent* AOwner);
+};
+//----------------------------------------------------------------------------
+extern TAboutBox *AboutBox;
+//----------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.bmp b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.bmp
new file mode 100644
index 0000000..faf111b
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.cpp b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.cpp
new file mode 100644
index 0000000..d336056
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.cpp
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "DevOfTheDay.h"
+#include "mainfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TDevOfTheDay2 *DevOfTheDay2;
+//---------------------------------------------------------------------------
+__fastcall TDevOfTheDay2::TDevOfTheDay2(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TDevOfTheDay2::btnOKClick(TObject *Sender)
+{
+ DevOfTheDay2->Hide();
+ ConfigEntMap emap;
+ SWConfig * optionsconf;
+ optionsconf = dynamic_cast<TForm1*>(Application->MainForm)->optionsconf;
+ if(optionsconf)
+ {
+ emap = optionsconf->Sections["General"];
+ emap.erase("TipOfTheDay");
+ emap.insert(ConfigEntMap::value_type("TipOfTheDay", (DevOfTheDay2->ckShowTip->Checked) ? "Devotional" : ""));
+ optionsconf->Sections["General"] = emap;
+ optionsconf->Save();
+ }
+
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.dfm b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.dfm
new file mode 100644
index 0000000..9c3f8b9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.dfm
@@ -0,0 +1,383 @@
+object DevOfTheDay2: TDevOfTheDay2
+ Left = 405
+ Top = 100
+ Width = 427
+ Height = 368
+ BiDiMode = bdLeftToRight
+ Caption = 'Devotion for Today'
+ Color = clBtnFace
+ Constraints.MinHeight = 277
+ Constraints.MinWidth = 362
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ OldCreateOrder = False
+ ParentBiDiMode = False
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 69
+ Width = 419
+ Height = 231
+ Align = alClient
+ AutoSize = True
+ BevelOuter = bvNone
+ Caption = 'Panel1'
+ TabOrder = 0
+ object RichTip: TRichEdit
+ Left = 0
+ Top = 0
+ Width = 419
+ Height = 231
+ Align = alClient
+ BorderStyle = bsNone
+ PlainText = True
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ end
+ object Panel3: TPanel
+ Left = 0
+ Top = 300
+ Width = 419
+ Height = 41
+ Align = alBottom
+ TabOrder = 1
+ object ckShowTip: TCheckBox
+ Left = 8
+ Top = 12
+ Width = 152
+ Height = 17
+ Anchors = [akLeft, akBottom]
+ Caption = 'Show Devotional at Startup'
+ TabOrder = 0
+ end
+ object btnOK: TButton
+ Left = 338
+ Top = 9
+ Width = 73
+ Height = 24
+ Anchors = [akRight, akBottom]
+ Caption = '&Close'
+ TabOrder = 1
+ OnClick = btnOKClick
+ end
+ end
+ object Panel4: TPanel
+ Left = 0
+ Top = 0
+ Width = 419
+ Height = 69
+ Align = alTop
+ BevelOuter = bvNone
+ Caption = 'Panel4'
+ Color = clWindow
+ TabOrder = 2
+ object bmpDev: TImage
+ Left = 0
+ Top = 0
+ Width = 52
+ Height = 69
+ Align = alLeft
+ Enabled = False
+ Picture.Data = {
+ 07544269746D61700E220000424D0E2200000000000076000000280000005601
+ 0000320000000100040000000000982100000000000000000000100000000000
+ 0000000000000000800000800000008080008000000080008000808000008080
+ 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
+ FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00000000000000000000
+ 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFF01100000000000077000000000000110FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFF01077777777770000000777777777010FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF010777000000
+ 07700077000000777010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFF01000088877777000807777888000010FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0088888887770070088007788888
+ 8800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0088
+ 8888800077080888800088888800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFF00888800088777080888888800088800FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00800088888770880888
+ 8888FFF00000FFFFFFFFFFFFFFFFFF000FFFFFFF000FFFFFF00000FFFF00FFFF
+ FF0000F00FFFF00000FFFFFFFFFFFF00FFFFFFFF00000FFFFFFFFFF00000000F
+ F00FFFFF0FFFFFFF00000FFFFFFFFFF00000000FFFFFFF00FFFFF00FFF00FFF0
+ 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFF0080FF888887708808888888FFFFF000FFFFFFFFFFFFFFFFFF000FFFFFFF
+ 000FFFFF0000000FFF00FFFFF00000000FFF0000000FFFFFFFFFFF00FFFFFFF0
+ 000000FFFFFFFFF00000000FF00FFFF000FFFFF0000000FFFFFFFFF000000000
+ FFFFFF00FFFFF00FFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFF0080FF888887088808888888FFFFF000FFFF
+ FFFFFFFFFFFFF00F00FFFFF00F00FFF000FFF000FF00FFFF000FFF000FF00FFF
+ F00FFFFFFFFFFF00FFFFFF000FFF000FFFFFFFF00FFFFFFFF00FFFF000FFFF00
+ 0FFFF00FFFFFFFF00FFFFF000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0080FF888880
+ 888808888888FFFFF000FFFFFFFFFFFFFFFFF00F00FFFFF00F00FFF00FFFFF00
+ FF00FFFF00FFFFF00FFFFFFF000FFFFFFFFFFF00FFFFFF00FFFFF00FFFFFFFF0
+ 0FFFFFFFF00FFF00F00FFF00FFFFFFFFFFFFFFF00FFFFFF00FFFF0000FFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFF0080FF888808888808888888FFFFF000FFFFFFFFFFFFFFFFF00F
+ 00FFFFF00F00FFF00FFFFF00FF00FFFF00FFFFF00FFFFF0000FFFFFFFFFFFF00
+ FFFFFF00FFFFF00FFFFFFFF00FFFFFFFF00FFF00F00FFF000000000FFFFFFFF0
+ 0FFFFFF00FFF00F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0080FF8000F8888808888888FFFF
+ F000FFFFFFFFFFFFFFFFF00FF00FFF00FF00FFF00FFFFF00FF00FFFF00FFFFF0
+ 0FFF0000FFFFFFFFFFFFFF00FFFFFF00FFFFF00FFFFFFFF00FFFFFFFF00FF00F
+ FF00FF000000000FFFFFFFF00FFFFF00FFFF00FF00FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0080
+ FF80FFF8888808888888FFFFF000FFFFFFFFFFFFFFFFF00FF00FFF00FF00FFF0
+ 0FFFFF00FF00FFFF00FFFFF00FF000FFFFFFFFFFFFFFFF00FFFFFF00FFFFF00F
+ FFFFFFF00FFFFFFFF00FF00FFF00FF00FFFFF00FFFFFFFF00000000FFFF00FFF
+ 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFF0080FF80FFF8888808888888FFFFF000FFFFFFFFFFFF
+ FFFF00FFF00FFF00FFF00FF000FFF000FF000FFF000FFF000FF00FFFF00FFFFF
+ FFFFFF00FFFFFF000FFF000FFFFFFFF00FFFFFFFF00FF00FFF00FF000FFF00FF
+ FFFFFFF00000000FFFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00880F80FFF888880888
+ 8888FFFF0F00FFFFFFFFFFFFFFFF00FFF00FFF00FFF00FFF0000000FFF00000F
+ F00000000FF0000000FFFFFFFFFFFF00FFFFFFF0000000FFFFFFFFF00FFFFFFF
+ F00F00FFFFF00FF0000000FFFFFFFFF00FFFF000FF00FFFFF00FFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFF00880F80FFF8888808888888FFFF0F00FFFFFFFFFFFFFFFF00FFFF00F00F
+ FFF00FFFF00000FFFF00F00FFF0000F00FFF00000FFFFFFFFFFFFF00FFFFFFFF
+ 00000FFFFFFFFFF00FFFFFFFF00F00FFFFF00FFF00000FFFFFFFFFF00FFFFF00
+ FF00FFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFF00880F80FFF8888000088888FFFF0F00FFFF
+ FFFFFFFFFFFF00FFFF00F00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFF
+ FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFF00FFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00880F80FFF8
+ 880088008888FFFF0F00FFFFFFFFFFFFFFFF00FFFF00F00FFFF00FFFFFFFFFFF
+ FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFF0
+ 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF000FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFF00880F80FFF8880777708888FFFF0F00FFFFFFFFFFFFFFF00FFF
+ FFF000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFF000000
+ 0000FFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0
+ 0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFF0880F80FFF8880888808888FFFF
+ 0F0FFFFFFFFFFFFFFFF00FFFFFF000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFF0
+ 0FFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFF
+ FFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFF088
+ 0F80FFF8880777708888FFFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFFF0880F880FF8880BBBB08888FFFF0F0FFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFF0000F880FF880BBBBBB
+ 0888FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFFFFFF0F880FF80BBB00BBB088FFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0F880FF0BBBB00BBBB08FFF0FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0F880F0B
+ BBBBBBBBBBB00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFFFFFF00000F0BBBBB00BBBBBB0FFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00BBBBBB00BBBBBB0FFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFB
+ FBFB00BBBBBB00BBBBBB0FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFFFFF8887000BBBBBB00BBBBBB0F07888FFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFBFBFBF0BBBBBB00BB
+ BBBB0FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFFFFFFFFFFF0BBBBBB00BBBBBB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFF0FF0BBBBB00BBBBB0FF0FFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFF0
+ BBBBBBBBBB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFFFFFFFFFFFFFF00BBBBBB00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFB0FFFF000000FFFF0BFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF
+ FFFF7BFFFFFFFFFFFFFFB7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFF00FFFFFFFFFFFFFFB8FFFF0FFB0BFF0FFFFF8BFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF8BFFFFFFFF7FFF
+ FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF
+ FFFFFFFFFFFFFFFFFFFB7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF
+ FFFB8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00}
+ Transparent = True
+ end
+ object Label1: TLabel
+ Left = 52
+ Top = 0
+ Width = 367
+ Height = 69
+ Align = alClient
+ Caption = 'Words To Live By...'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -21
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ Layout = tlCenter
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.h b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.h
new file mode 100644
index 0000000..267330a
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/DevOfTheDay.h
@@ -0,0 +1,33 @@
+//---------------------------------------------------------------------------
+
+#ifndef DevOfTheDayH
+#define DevOfTheDayH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+#include <Graphics.hpp>
+//---------------------------------------------------------------------------
+class TDevOfTheDay2 : public TForm
+{
+__published: // IDE-managed Components
+ TRichEdit *RichTip;
+ TPanel *Panel1;
+ TPanel *Panel3;
+ TCheckBox *ckShowTip;
+ TButton *btnOK;
+ TPanel *Panel4;
+ TImage *bmpDev;
+ TLabel *Label1;
+ void __fastcall btnOKClick(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ __fastcall TDevOfTheDay2(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TDevOfTheDay2 *DevOfTheDay2;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/FontSel.cpp b/apps/windoze/CBuilder5/BibleCS/FontSel.cpp
new file mode 100644
index 0000000..21ba80f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/FontSel.cpp
@@ -0,0 +1,151 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "FontSel.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma link "RxCombos"
+#pragma link "RxCombos"
+#pragma link "RxCombos"
+#pragma link "RxCombos"
+#pragma resource "*.dfm"
+TFontSelFrm *FontSelFrm;
+//---------------------------------------------------------------------------
+__fastcall TFontSelFrm::TFontSelFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+ initialized = false;
+ // Put in the RXLib components
+ FontComboBox = new TFontComboBox(this);
+ FontComboBox->Parent = pnlFontComboBox;
+ FontComboBox->Align = alClient;
+ FontComboBox->Font->Height = -16;
+ FontComboBox->Font->Size = 12;
+ FontComboBox->ParentFont = true;
+ FontComboBox->UseFonts = true;
+ FontComboBox->ItemIndex = FontComboBox->Items->IndexOf("Arial");
+ FontComboBox->OnChange = FontComboBoxChange;
+
+ BGColorCmb = new TColorComboBox(this);
+ BGColorCmb->Parent = pnlBGColorCmb;
+ BGColorCmb->Align = alClient;
+ BGColorCmb->ColorValue = clWhite;
+ for(int count = 0; count < 15; count++)
+ BGColorCmb->ColorNames->Add("");
+ BGColorCmb->ColorNames->Add("More...");
+ BGColorCmb->OnChange = BGColorCmbChange;
+
+ FGColorCmb = new TColorComboBox(this);
+ FGColorCmb->Parent = pnlFGColorCmb;
+ FGColorCmb->Align = alClient;
+ FGColorCmb->ColorValue = clBlack;
+ for(int count = 0; count < 15; count++)
+ FGColorCmb->ColorNames->Add("");
+ FGColorCmb->ColorNames->Add("More...");
+ FGColorCmb->OnChange = FGColorCmbChange;
+
+ Font = new TFont;
+ SizeComboBox->ItemIndex = SizeComboBox->Items->IndexOf("10");
+ //BGColorDlg->Color = clWhite;
+ //BackColor = clWhite;
+ //FGColorDlg->Color = clBlack;
+ //Font->Color = clBlack;
+
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TFontSelFrm::FormShow(TObject *Sender)
+{
+ BGColorDlg->Color = BackColor;
+ BGColorCmb->ColorValue = BackColor;
+ FGColorDlg->Color = Font->Color;
+ FGColorCmb->ColorValue = Font->Color;
+ FontComboBox->ItemIndex = FontComboBox->Items->IndexOf(Font->Name);
+ SizeComboBox->ItemIndex = SizeComboBox->Items->IndexOf(Font->Size);
+
+ UpdatePreview();
+ initialized = true;
+}
+
+void TFontSelFrm::UpdatePreview()
+{
+ if(Font){
+ SampleText->Font->Color = Font->Color;
+ SampleText->Color = BackColor;
+ SampleText->Font->Size = Font->Size;
+ SampleText->Font->Name = Font->Name;
+ }
+}
+
+void __fastcall TFontSelFrm::ckShowFontClick(TObject *Sender)
+{
+ if(ckShowFont->Checked)
+ FontComboBox->UseFonts = true;
+ else
+ FontComboBox->UseFonts = false;
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::FontComboBoxChange(TObject *Sender)
+{
+ Font->Name = FontComboBox->Text;
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::SizeComboBoxChange(TObject *Sender)
+{
+ Font->Size = SizeComboBox->Text.ToInt();
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::BGColorCmbChange(TObject *Sender)
+{
+ if(initialized){
+ if(BGColorCmb->Items->Strings[BGColorCmb->ItemIndex] == "More..."){
+ BGColorDlg->Execute();
+ BGColorCmb->ColorValue = BGColorDlg->Color;
+ BackColor = BGColorDlg->Color;
+ }else{
+ BGColorDlg->Color = BGColorCmb->ColorValue;
+ BackColor = BGColorCmb->ColorValue;
+ }
+ }
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::FGColorCmbChange(TObject *Sender)
+{
+ if(initialized){
+ if(FGColorCmb->Items->Strings[FGColorCmb->ItemIndex] == "More..."){
+ FGColorDlg->Execute();
+ FGColorCmb->ColorValue = FGColorDlg->Color;
+ Font->Color = FGColorDlg->Color;
+ }else{
+ FGColorDlg->Color = FGColorCmb->ColorValue;
+ Font->Color = FGColorCmb->ColorValue;
+ }
+ }
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::OKBtnClick(TObject *Sender)
+{
+ ModalResult = mrOk;
+ initialized = false;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TFontSelFrm::CancelBtnClick(TObject *Sender)
+{
+ ModalResult = mrCancel;
+ initialized = false;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/FontSel.dfm b/apps/windoze/CBuilder5/BibleCS/FontSel.dfm
new file mode 100644
index 0000000..c00ef4e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/FontSel.dfm
@@ -0,0 +1,196 @@
+object FontSelFrm: TFontSelFrm
+ Left = 376
+ Top = 241
+ BorderIcons = []
+ BorderStyle = bsDialog
+ Caption = 'Font Selection'
+ ClientHeight = 412
+ ClientWidth = 363
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ Scaled = False
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 149
+ Width = 363
+ Height = 263
+ Align = alClient
+ TabOrder = 0
+ object GroupBox1: TGroupBox
+ Left = 1
+ Top = 1
+ Width = 361
+ Height = 261
+ Align = alClient
+ Caption = 'Sample Text'
+ TabOrder = 0
+ object SampleText: TPanel
+ Left = 2
+ Top = 15
+ Width = 357
+ Height = 244
+ Align = alClient
+ BevelOuter = bvNone
+ Caption = 'AaBbYyZz'
+ TabOrder = 0
+ end
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 0
+ Width = 363
+ Height = 149
+ Align = alTop
+ TabOrder = 1
+ object Label1: TLabel
+ Left = 8
+ Top = 6
+ Width = 21
+ Height = 13
+ Caption = '&Font'
+ end
+ object Label2: TLabel
+ Left = 186
+ Top = 6
+ Width = 20
+ Height = 13
+ Caption = '&Size'
+ end
+ object Label3: TLabel
+ Left = 8
+ Top = 71
+ Width = 58
+ Height = 13
+ Caption = 'Background'
+ end
+ object Label4: TLabel
+ Left = 153
+ Top = 71
+ Width = 54
+ Height = 13
+ Caption = 'Foreground'
+ end
+ object SizeComboBox: TComboBox
+ Left = 184
+ Top = 23
+ Width = 49
+ Height = 24
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -15
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ItemHeight = 16
+ ParentFont = False
+ TabOrder = 0
+ Text = 'SizeComboBox'
+ OnChange = SizeComboBoxChange
+ Items.Strings = (
+ '8'
+ '9'
+ '10'
+ '11'
+ '12'
+ '13'
+ '14'
+ '16'
+ '18'
+ '20'
+ '22'
+ '24'
+ '26'
+ '28'
+ '30'
+ '32'
+ '34'
+ '36'
+ '38'
+ '40'
+ '42')
+ end
+ object ckShowFont: TCheckBox
+ Left = 8
+ Top = 50
+ Width = 257
+ Height = 18
+ Caption = 'Show Font Faces'
+ Checked = True
+ State = cbChecked
+ TabOrder = 1
+ OnClick = ckShowFontClick
+ end
+ object pnlFontComboBox: TPanel
+ Left = 8
+ Top = 23
+ Width = 169
+ Height = 29
+ BevelOuter = bvNone
+ Caption = 'Font ComboBox'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -15
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object pnlBGColorCmb: TPanel
+ Left = 8
+ Top = 86
+ Width = 134
+ Height = 20
+ BevelOuter = bvNone
+ Caption = 'Color Combo'
+ TabOrder = 3
+ end
+ object pnlFGColorCmb: TPanel
+ Left = 151
+ Top = 86
+ Width = 134
+ Height = 20
+ BevelOuter = bvNone
+ Caption = 'Color Combo'
+ TabOrder = 4
+ end
+ object OKBtn: TBitBtn
+ Left = 280
+ Top = 7
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ TabOrder = 5
+ OnClick = OKBtnClick
+ Kind = bkOK
+ end
+ object CancelBtn: TBitBtn
+ Left = 280
+ Top = 35
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ TabOrder = 6
+ OnClick = CancelBtnClick
+ Kind = bkCancel
+ end
+ end
+ object FGColorDlg: TColorDialog
+ Ctl3D = True
+ Left = 312
+ Top = 72
+ end
+ object BGColorDlg: TColorDialog
+ Ctl3D = True
+ Left = 312
+ Top = 104
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/FontSel.h b/apps/windoze/CBuilder5/BibleCS/FontSel.h
new file mode 100644
index 0000000..65059f4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/FontSel.h
@@ -0,0 +1,61 @@
+//---------------------------------------------------------------------------
+
+#ifndef FontSelH
+#define FontSelH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <Dialogs.hpp>
+#include <ExtCtrls.hpp>
+//#include "D:\\Program Files\\Borland\\CBuilder5\\RX\\Units\\Rxcombos.hpp"
+#include "RxCombos.hpp"
+//---------------------------------------------------------------------------
+class TFontSelFrm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TLabel *Label1;
+ TLabel *Label2;
+ TLabel *Label3;
+ TLabel *Label4;
+ TComboBox *SizeComboBox;
+ TCheckBox *ckShowFont;
+ TPanel *pnlFontComboBox;
+ TPanel *pnlBGColorCmb;
+ TPanel *pnlFGColorCmb;
+ TBitBtn *OKBtn;
+ TBitBtn *CancelBtn;
+ TGroupBox *GroupBox1;
+ TPanel *SampleText;
+ TColorDialog *FGColorDlg;
+ TColorDialog *BGColorDlg;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall ckShowFontClick(TObject *Sender);
+ void __fastcall FontComboBoxChange(TObject *Sender);
+ void __fastcall SizeComboBoxChange(TObject *Sender);
+ void __fastcall BGColorCmbChange(TObject *Sender);
+ void __fastcall FGColorCmbChange(TObject *Sender);
+ void __fastcall OKBtnClick(TObject *Sender);
+ void __fastcall CancelBtnClick(TObject *Sender);
+public: // User declarations
+ TFont* Font;
+ int BackColor;
+public: // User declarations
+ __fastcall TFontSelFrm(TComponent* Owner);
+ TFontComboBox *FontComboBox;
+ TColorComboBox *BGColorCmb;
+ TColorComboBox *FGColorCmb;
+protected:
+ void UpdatePreview();
+private:
+ bool initialized; // Stupid variable to work around stupid combo box change called from FormShow()
+
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TFontSelFrm *FontSelFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/Makefile b/apps/windoze/CBuilder5/BibleCS/Makefile
new file mode 100644
index 0000000..6007442
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/Makefile
@@ -0,0 +1,16 @@
+
+root := ../../../..
+pre-targets :=
+include ${root}/Makefile.cfg
+
+
+s = $(c) $(cpp)
+d = $(c:%.c=%.d) $(cpp:%.cpp=%.d)
+o = $(c:%.c=%.o) $(cpp:%.cpp=%.o)
+
+${root}/lib/libsword.a: $(o)
+ $(AR) crs $@ $^
+
+ifneq ($(nodeps),yes)
+-include $(d)
+endif
diff --git a/apps/windoze/CBuilder5/BibleCS/ModInstForm.cpp b/apps/windoze/CBuilder5/BibleCS/ModInstForm.cpp
new file mode 100644
index 0000000..1763817
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModInstForm.cpp
@@ -0,0 +1,14 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "ModInstForm.h"
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TModInstFrm *ModInstFrm;
+//---------------------------------------------------------------------------
+__fastcall TModInstFrm::TModInstFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//--------------------------------------------------------------------------- \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/ModInstForm.dfm b/apps/windoze/CBuilder5/BibleCS/ModInstForm.dfm
new file mode 100644
index 0000000..d641522
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModInstForm.dfm
@@ -0,0 +1,83 @@
+object ModInstFrm: TModInstFrm
+ Left = 403
+ Top = 521
+ BorderIcons = []
+ BorderStyle = bsDialog
+ Caption = 'Found New Module...'
+ ClientHeight = 226
+ ClientWidth = 441
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object AboutText: TRichEdit
+ Left = 0
+ Top = 65
+ Width = 441
+ Height = 161
+ Align = alClient
+ Color = clBtnFace
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 441
+ Height = 65
+ Align = alTop
+ TabOrder = 1
+ object ModText: TLabel
+ Left = 8
+ Top = 8
+ Width = 421
+ Height = 29
+ AutoSize = False
+ end
+ object OkBtn: TButton
+ Left = 177
+ Top = 36
+ Width = 87
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ Cancel = True
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/ModInstForm.h b/apps/windoze/CBuilder5/BibleCS/ModInstForm.h
new file mode 100644
index 0000000..0410bfd
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModInstForm.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef ModInstFormH
+#define ModInstFormH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ComCtrls.hpp>
+#include <vcl\ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TModInstFrm : public TForm
+{
+__published: // IDE-managed Components
+ TRichEdit *AboutText;
+ TPanel *Panel1;
+ TButton *OkBtn;
+ TLabel *ModText;
+private: // User declarations
+public: // User declarations
+ __fastcall TModInstFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TModInstFrm *ModInstFrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/ModVisFrm.cpp b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.cpp
new file mode 100644
index 0000000..64f791e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.cpp
@@ -0,0 +1,50 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "ModVisFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TModVisForm *ModVisForm;
+//---------------------------------------------------------------------------
+__fastcall TModVisForm::TModVisForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ section = 0; // set this before calling Show...
+ mgr = 0; // set this before calling Show...
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TModVisForm::FormShow(TObject *Sender)
+{
+ ConfigEntMap::iterator it;
+ ModMap::iterator mit;
+ TListItem *item;
+ modList->Items->Clear();
+ for (it = section->begin(); it != section->end(); it++) {
+ mit = mgr->Modules.find(it->first);
+ SWModule *module = (mit != mgr->Modules.end()) ? mit->second : 0;
+ if (module) {
+ item = modList->Items->Add();
+ item->Caption = it->first.c_str();
+ item->SubItems->Add(module->Description());
+ item->Checked = (it->second == "true");
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TModVisForm::FormClose(TObject *Sender,
+ TCloseAction &Action)
+{
+ if (this->ModalResult == mrOk) {
+ for (int i = 0; i < modList->Items->Count; i++) {
+ string name = modList->Items->Item[i]->Caption.c_str();
+ (*section)[name] = (modList->Items->Item[i]->Checked) ? "true" : "false";
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/ModVisFrm.dfm b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.dfm
new file mode 100644
index 0000000..e23851b
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.dfm
@@ -0,0 +1,71 @@
+object ModVisForm: TModVisForm
+ Left = 351
+ Top = 99
+ Width = 464
+ Height = 313
+ Caption = 'Check Modules To Show As Tabs'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Scaled = False
+ OnClose = FormClose
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel2: TPanel
+ Left = 0
+ Top = 0
+ Width = 344
+ Height = 286
+ Align = alClient
+ TabOrder = 0
+ object modList: TListView
+ Left = 1
+ Top = 1
+ Width = 342
+ Height = 284
+ Align = alClient
+ Checkboxes = True
+ Columns = <
+ item
+ Caption = 'Module'
+ MinWidth = 100
+ Width = 100
+ end
+ item
+ AutoSize = True
+ Caption = 'Description'
+ end>
+ TabOrder = 0
+ ViewStyle = vsReport
+ end
+ end
+ object Panel1: TPanel
+ Left = 344
+ Top = 0
+ Width = 112
+ Height = 286
+ Align = alRight
+ TabOrder = 1
+ object OkBtn: TBitBtn
+ Left = 8
+ Top = 8
+ Width = 97
+ Height = 29
+ TabOrder = 0
+ Kind = bkOK
+ end
+ object CancelBtn: TBitBtn
+ Left = 8
+ Top = 40
+ Width = 97
+ Height = 29
+ TabOrder = 1
+ Kind = bkCancel
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/ModVisFrm.h b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.h
new file mode 100644
index 0000000..d3fa99d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/ModVisFrm.h
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------------
+
+#ifndef ModVisFrmH
+#define ModVisFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <CheckLst.hpp>
+#include <ExtCtrls.hpp>
+#include <swconfig.h>
+#include <swmgr.h>
+#include <ComCtrls.hpp>
+//---------------------------------------------------------------------------
+class TModVisForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel2;
+ TPanel *Panel1;
+ TBitBtn *OkBtn;
+ TBitBtn *CancelBtn;
+ TListView *modList;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+private: // User declarations
+public: // User declarations
+ ConfigEntMap *section;
+ SWMgr *mgr;
+
+ __fastcall TModVisForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TModVisForm *ModVisForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/PreviewForm.cpp b/apps/windoze/CBuilder5/BibleCS/PreviewForm.cpp
new file mode 100644
index 0000000..32e7b8a
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PreviewForm.cpp
@@ -0,0 +1,328 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "PreviewForm.h"
+//---------------------------------------------------------------------------
+// include this...
+#include <vcl\printers.hpp>
+//---------------------------------------------------------------------------
+// thanks to Scott Proper for finding several errors where the code
+// used 1400 instead of the correct 1440.
+//---------------------------------------------------------------------------
+// standard template library is used for to build a vector (or table) of
+// page offsets
+//
+/*
+typedef struct tagTPageOffset {
+ long int Start;
+ long int End;
+ RECT rendRect;
+ } TPageOffsets;
+*/
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TPreviewForm *PreviewForm;
+//---------------------------------------------------------------------------
+// custom panel onto which we can draw
+//
+class TPreviewPanel : public TPanel
+{
+public:
+ __fastcall virtual TPreviewPanel(Classes::TComponent* AOwner) :
+ TPanel(AOwner) { };
+ __fastcall virtual ~TPreviewPanel(void) { };
+ __fastcall virtual void Paint(void) {
+ TPanel::Paint();
+ PreviewForm->DrawRichEdit();
+ };
+ __property Canvas;
+
+};
+//---------------------------------------------------------------------------
+__fastcall TPreviewForm::TPreviewForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ PreviewPanel = new TPreviewPanel(this);
+ PreviewPanel->Parent = Panel1;
+ PreviewPanel->Color = clWhite;
+ this->WindowState = wsMaximized;
+ currPage = 0;
+}
+//---------------------------------------------------------------------------
+__fastcall TPreviewForm::~TPreviewForm(void)
+{
+ if (PreviewPanel) delete PreviewPanel;
+ FPageOffsets.erase(FPageOffsets.begin(), FPageOffsets.end());
+}
+//---------------------------------------------------------------------------
+// size the panel to dimensions that approximate the page scaled
+// to fit within the window.
+//
+void __fastcall TPreviewForm::FormResize(TObject *Sender)
+{
+ // get the printer dimensions.
+ int wPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALWIDTH);
+ int hPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALHEIGHT);
+
+ // get the client window dimensions.
+ int wClient = ClientWidth;
+ int hClient = ClientHeight;
+
+ // initially adjust width to match height
+ wClient = ::MulDiv(ClientHeight, wPage, hPage);
+
+ // if that doesn't fit, then do it the other way
+ if (wClient > ClientWidth) {
+ wClient = ClientWidth;
+ hClient = ::MulDiv(ClientWidth, hPage, wPage);
+ // center the page in the window
+ PreviewPanel->Top = (ClientHeight - hClient) >> 1; // divide by two
+ }
+ else // center the page in the window
+ PreviewPanel->Left = (ClientWidth - wClient) >> 1; // divide by two
+
+ // now set size of panel
+ PreviewPanel->Width = wClient;
+ PreviewPanel->Height = hClient;
+}
+//---------------------------------------------------------------------------
+// sample code to demonstrate implementing a print preview window. the code,
+// as written, uses hard-coded two-inch margins (as above) and displays only
+// the first page. the goal of the example is to demonstrate rendering a
+// a page of text, in this case the first page only, to a window. the
+// window can be resized by the user and will be rescaled to approximate
+// the printed page. to extend this into a useful class, you will need to
+// add code and buttons (or other means) to move between pages. refer to the
+// printing code in the main form for code that will, with a little insight
+// and effort, help you in this effort. in particular, the printing code
+// demonstrates how to build a table of offsets corresponding to the printed
+// pages.
+//
+// here's an obvious tip: there is a considerable amount of duplicated code,
+// between the printing function in the main form and the code in the
+// following routine, that the savy programmer will consolidate into useful
+// subroutines.
+//
+void TPreviewForm::DrawRichEdit(void)
+{
+ //-----------------------------------------------------------------------
+ // *** same as printing version ***
+ //-----------------------------------------------------------------------
+ float leftMargin = StrToFloat(PrintForm->editLeft->Text),
+ rightMargin = StrToFloat(PrintForm->editRight->Text),
+ topMargin = StrToFloat(PrintForm->editTop->Text),
+ bottomMargin = StrToFloat(PrintForm->editBottom->Text);
+
+
+ int wPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALWIDTH);
+ int hPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALHEIGHT);
+ int xPPI = ::GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
+ int yPPI = ::GetDeviceCaps(Printer()->Handle, LOGPIXELSY);
+ int wTwips = ::MulDiv(wPage, 1440, xPPI);
+ int hTwips = ::MulDiv(hPage, 1440, yPPI);
+
+ RECT pageRect;
+ pageRect.left = pageRect.top = 0;
+ pageRect.right = wTwips;
+ pageRect.bottom = hTwips;
+
+ RECT rendRect;
+ rendRect.left = rendRect.top = 0;
+ rendRect.right = pageRect.right - 1440 * (leftMargin + rightMargin);
+ rendRect.bottom = pageRect.bottom - 1440 * (topMargin + bottomMargin);
+ TPageOffsets po;
+ po.Start = 0;
+
+ //-----------------------------------------------------------------------
+ // differences from the printing version start here (although, even
+ // the following has considerable similarity).
+ //-----------------------------------------------------------------------
+
+ // we will need a few DCs before it is over. note also that this
+ // function is called inside of the TPreviewPanel Paint() handler.
+ HDC hdcDesktop = ::GetWindowDC(::GetDesktopWindow());
+ HDC hdcCanvas = dynamic_cast<TPreviewPanel*>(PreviewPanel)->Canvas->Handle;
+ HDC hdcPrinter = Printer()->Handle;
+
+ FPageOffsets.erase(FPageOffsets.begin(), FPageOffsets.end());
+
+ // initialize the formatting data.
+ TFormatRange fr;
+ fr.hdc = hdcDesktop;
+ fr.hdcTarget = hdcPrinter;
+ fr.chrg.cpMin = po.Start;
+ fr.chrg.cpMax = -1;
+
+ // get the size of the text in the control (use EM_GETTEXTLENEX for RE 2.0).
+ int lastOffset = ::SendMessage(rtfPrint->Handle,
+ WM_GETTEXTLENGTH, 0, 0);
+
+ // clear the formatting buffer.
+ ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE,
+ (WPARAM) 0, (LPARAM) 0);
+
+ // save the canvas DC and prepare to scale.
+ SaveDC(hdcCanvas);
+ ::SetMapMode(hdcCanvas, MM_TEXT); // set to device units
+ ::SetMapMode(hdcCanvas, MM_ANISOTROPIC); // inherits prior mapping mode
+ ::SetMapMode(hdcPrinter, MM_TEXT); // set to device units
+
+ // set window extent to width/height of printer in printer device units.
+ ::SetWindowExtEx(hdcCanvas, pageRect.right, pageRect.bottom, NULL);
+
+ // scale window extent to width/height of printer in desktop device units.
+ int xDesktopPPI = ::GetDeviceCaps(hdcDesktop, LOGPIXELSX);
+ int yDesktopPPI = ::GetDeviceCaps(hdcDesktop, LOGPIXELSY);
+ ::ScaleWindowExtEx(hdcCanvas, xDesktopPPI, 1440, yDesktopPPI, 1440, NULL);
+
+ // set viewport to width/height of PreviewPanel in device units.
+ ::SetViewportExtEx(hdcCanvas, PreviewPanel->ClientWidth,
+ PreviewPanel->ClientHeight, NULL);
+
+ // now, here is one that I really do not get: we have to reduce the
+ // horizontal range a little for the text (wrap) to exactly match.
+ // this may be due to two things: (1) the font scaling that Windows
+ // to make screen fonts appear about the same size at a distance as
+ // the printed fonts do close up or (2) the adjustment to the rendering
+ // rectangle that Rich Edit may or may not do to adjust for the non-
+ // printable portion of the printed page. although (1) strikes me as
+ // perhaps more likely, the latter is easier to do and seems to work
+ // in other projects. if you figure this one out, please, please
+ // let me know. anyway, we will assume that the vertical adjustment
+ // is also required. oh, and we are working in twips.
+ int xPrinterOffset = ::MulDiv(::GetDeviceCaps(hdcPrinter, PHYSICALOFFSETX),
+ 1440, xPPI);
+ int yPrinterOffset = ::MulDiv(::GetDeviceCaps(hdcPrinter, PHYSICALOFFSETY),
+ 1440, yPPI);
+ rendRect.left += xPrinterOffset >> 1;
+ rendRect.right -= xPrinterOffset - (xPrinterOffset >> 1);
+ rendRect.top += yPrinterOffset >> 1;
+ rendRect.bottom -= yPrinterOffset - (yPrinterOffset >> 1);
+
+ // adjust output origin for two inch margin.
+ int xOffset = ::MulDiv(PreviewPanel->ClientWidth * leftMargin, 1440, pageRect.right);
+ int yOffset = ::MulDiv(PreviewPanel->ClientHeight * topMargin, 1440, pageRect.bottom);
+ ::SetViewportOrgEx(hdcCanvas, xOffset, yOffset, NULL);
+
+ // loop through data to format and build page offset table.
+ do {
+ // set up remaining format data.
+ fr.rc = rendRect; // RE returns something useful here...
+ fr.rcPage = pageRect;
+ po.Start = fr.chrg.cpMin;
+
+ // format range with render set to false.
+ fr.chrg.cpMin = ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE,
+ (WPARAM) 0, (LPARAM) &fr);
+ // I don't know why I need to do this, but there is an apparent bug in the TRXRichEdit control
+ // and it doesn't handle the last page properly if there are more than 3 pages of text.
+ if(fr.chrg.cpMin == po.End)
+ fr.chrg.cpMin = lastOffset;
+ po.End = fr.chrg.cpMin - 1;
+ po.rendRect = fr.rc; // and where is this documented?
+ if(fr.chrg.cpMin < lastOffset)
+ FPageOffsets.push_back(po);
+ } while (fr.chrg.cpMin != -1 && fr.chrg.cpMin < lastOffset);
+
+ // at this point, FPageOffsets.size() is the page count which will
+ // always be at least one. pageCount is not used here since we
+ // display only the first page.
+ // int pageCount = FPageOffsets.size();
+
+
+ // set the rendering device to the scaled DC and the target to null.
+ fr.hdc = hdcCanvas;
+ fr.hdcTarget = 0;
+
+ // set up remaining format data.
+ fr.rc = FPageOffsets[currPage].rendRect; // documented where?
+ fr.rcPage = pageRect;
+ fr.chrg.cpMin = FPageOffsets[currPage].Start;
+ fr.chrg.cpMax = FPageOffsets[currPage].End;
+
+ // format range with render set to true.
+ fr.chrg.cpMin = ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE,
+ (WPARAM) 1, (LPARAM) &fr);
+
+ // clean up.
+ ::RestoreDC(hdcCanvas, -1);
+ ::ReleaseDC(::GetDesktopWindow(), hdcDesktop);
+ ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE,
+ (WPARAM) 0, (LPARAM) 0);
+ UpdatePageNums();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::FormShow(TObject *Sender)
+{
+ rtfPrint = PrintForm->rtfPrint;
+ //UpdatePageNums();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::btnFwdClick(TObject *Sender)
+{
+ if(currPage < (FPageOffsets.size() - 1)){
+ currPage++;
+ PreviewPanel->Repaint();
+ //UpdatePageNums();
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::btnBackClick(TObject *Sender)
+{
+
+ if(currPage > 0){
+ currPage--;
+ PreviewPanel->Repaint();
+ //UpdatePageNums();
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::btnEndClick(TObject *Sender)
+{
+ if(currPage != (FPageOffsets.size() - 1)){
+ currPage = (FPageOffsets.size() - 1);
+ PreviewPanel->Repaint();
+ //UpdatePageNums();
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::btnBeginClick(TObject *Sender)
+{
+ if(currPage != 0){
+ currPage = 0;
+ PreviewPanel->Repaint();
+ //UpdatePageNums();
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPreviewForm::btnCloseClick(TObject *Sender)
+{
+ ModalResult = mrCancel;
+}
+//---------------------------------------------------------------------------
+
+
+void TPreviewForm::UpdatePageNums()
+{
+ AnsiString strPages = "Page ";
+ strPages += IntToStr(currPage + 1);
+ strPages += " of ";
+ strPages += IntToStr(FPageOffsets.size());
+ editPages->Text = strPages;
+ Caption = (AnsiString)"Print Preview " + strPages;
+}
+
+void __fastcall TPreviewForm::btnPrintClick(TObject *Sender)
+{
+ ModalResult = mrOk;
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/PreviewForm.dfm b/apps/windoze/CBuilder5/BibleCS/PreviewForm.dfm
new file mode 100644
index 0000000..f2cce34
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PreviewForm.dfm
@@ -0,0 +1,204 @@
+object PreviewForm: TPreviewForm
+ Left = 420
+ Top = 179
+ Width = 454
+ Height = 550
+ HorzScrollBar.Visible = False
+ VertScrollBar.Visible = False
+ Caption = 'Print Preview'
+ Color = clBtnFace
+ Constraints.MinHeight = 550
+ Constraints.MinWidth = 454
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ Scaled = False
+ OnResize = FormResize
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object ToolBar1: TToolBar
+ Left = 0
+ Top = 0
+ Width = 446
+ Height = 26
+ AutoSize = True
+ ButtonHeight = 24
+ Caption = 'ToolBar1'
+ Flat = True
+ TabOrder = 0
+ object btnPrint: TBitBtn
+ Left = 0
+ Top = 0
+ Width = 75
+ Height = 24
+ Caption = 'Print'
+ TabOrder = 4
+ OnClick = btnPrintClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00666666666666
+ 6666666600006666666666666666666600006666666666666666666600006666
+ 0000000000066666000066608888888880806666000066000000000000080666
+ 0000660888888BBB880006660000660888888777880806660000660000000000
+ 0008806600006608888888888080806600006660000000000808006600006666
+ 0FFFFFFFF08080660000666660F00000F00006660000666660FFFFFFFF066666
+ 00006666660F00000F06666600006666660FFFFFFFF066660000666666600000
+ 0000666600006666666666666666666600006666666666666666666600006666
+ 66666666666666660000}
+ Margin = 3
+ end
+ object Splitter2: TSplitter
+ Left = 75
+ Top = 0
+ Width = 50
+ Height = 24
+ Cursor = crHSplit
+ end
+ object btnBegin: TBitBtn
+ Left = 125
+ Top = 0
+ Width = 24
+ Height = 24
+ TabOrder = 5
+ OnClick = btnBeginClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFF0FFFFF0FFFFFFFFFF
+ 0000FFF0FFFF00FFFFFFFFFF0000FFF0FFF0E0FFFFFFFFFF0000FFF0FF0EE000
+ 00000FFF0000FFF0F0EEEEEEEEEE0FFF0000FFF00FEEEEEEEEEE0FFF0000FFF0
+ FCF888F88F8E0FFF0000FFF0FFCF80CCCCCC0FFF0000FFF0FFFCF0FFFFFFFFFF
+ 0000FFF0FFFFC0FFFFFFFFFF0000FFF0FFFFF0FFFFFFFFFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ end
+ object btnBack: TBitBtn
+ Left = 149
+ Top = 0
+ Width = 24
+ Height = 24
+ TabOrder = 2
+ OnClick = btnBackClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0FFFFFFFFFFF
+ 0000FFFFFFF00FFFFFFFFFFF0000FFFFFF0E0FFFFFFFFFFF0000FFFFF0EE0000
+ 0000FFFF0000FFFF0EEEEEEEEEE0FFFF0000FFF0FEEEEEEEEEE0FFFF0000FFFF
+ CF888F88F8E0FFFF0000FFFFFCF80CCCCCC0FFFF0000FFFFFFCF0FFFFFFFFFFF
+ 0000FFFFFFFC0FFFFFFFFFFF0000FFFFFFFF0FFFFFFFFFFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ end
+ object editPages: TEdit
+ Left = 173
+ Top = 0
+ Width = 100
+ Height = 24
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -13
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ TabOrder = 3
+ end
+ object btnFwd: TBitBtn
+ Left = 273
+ Top = 0
+ Width = 24
+ Height = 24
+ TabOrder = 6
+ OnClick = btnFwdClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFF0FFFFFFFF
+ 0000FFFFFFFFFFF00FFFFFFF0000FFFFFFFFFFF0E0FFFFFF0000FFFF00000000
+ EE0FFFFF0000FFFF0EEEEEEEEEE0FFFF0000FFFF0EEEEEEEEEEF0FFF0000FFFF
+ 0E8F88F888FCFFFF0000FFFF0CCCCCC08FCFFFFF0000FFFFFFFFFFF0FCFFFFFF
+ 0000FFFFFFFFFFF0CFFFFFFF0000FFFFFFFFFFF0FFFFFFFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ end
+ object btnEnd: TBitBtn
+ Left = 297
+ Top = 0
+ Width = 24
+ Height = 24
+ TabOrder = 0
+ OnClick = btnEndClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0FFFFF0FFF
+ 0000FFFFFFFFFF00FFFF0FFF0000FFFFFFFFFF0E0FFF0FFF0000FFF00000000E
+ E0FF0FFF0000FFF0EEEEEEEEEE0F0FFF0000FFF0EEEEEEEEEEF00FFF0000FFF0
+ E8F88F888FCF0FFF0000FFF0CCCCCC08FCFF0FFF0000FFFFFFFFFF0FCFFF0FFF
+ 0000FFFFFFFFFF0CFFFF0FFF0000FFFFFFFFFF0FFFFF0FFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ end
+ object Splitter1: TSplitter
+ Left = 321
+ Top = 0
+ Width = 50
+ Height = 24
+ Cursor = crHSplit
+ end
+ object btnClose: TBitBtn
+ Left = 371
+ Top = 0
+ Width = 75
+ Height = 24
+ Caption = '&Close'
+ TabOrder = 1
+ OnClick = btnCloseClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ F0FFFFFFFFFF0FFF0000FFFF000FFFFFFFFFFFFF0000FFFF0000FFFFFFF0FFFF
+ 0000FFFFF000FFFFFF0FFFFF0000FFFFFF000FFFF00FFFFF0000FFFFFFF000FF
+ 00FFFFFF0000FFFFFFFF00000FFFFFFF0000FFFFFFFFF000FFFFFFFF0000FFFF
+ FFFF00000FFFFFFF0000FFFFFFF000FF00FFFFFF0000FFFFF0000FFFF00FFFFF
+ 0000FFFF0000FFFFFF00FFFF0000FFFF000FFFFFFFFF0FFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ Margin = 3
+ end
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 26
+ Width = 446
+ Height = 496
+ Align = alClient
+ BevelOuter = bvNone
+ Caption = 'Panel1'
+ TabOrder = 1
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/PreviewForm.h b/apps/windoze/CBuilder5/BibleCS/PreviewForm.h
new file mode 100644
index 0000000..d308b20
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PreviewForm.h
@@ -0,0 +1,54 @@
+//---------------------------------------------------------------------------
+#ifndef TestRichEditPnPPreviewFormH
+#define TestRichEditPnPPreviewFormH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+
+#include "PrintFrm.h"
+#include <ComCtrls.hpp>
+#include <ToolWin.hpp>
+#include <Buttons.hpp>
+#include <vector> // for stl
+//---------------------------------------------------------------------------
+class TPreviewForm : public TForm
+{
+__published: // IDE-managed Components;void __fastcall FormResize(TObject *Sender);;void __fastcall FormResize(TObject *Sender);
+ TToolBar *ToolBar1;
+ TBitBtn *btnEnd;
+ TBitBtn *btnClose;
+ TBitBtn *btnBack;
+ TEdit *editPages;
+ TBitBtn *btnPrint;
+ TBitBtn *btnBegin;
+ TBitBtn *btnFwd;
+ TPanel *Panel1;
+ TSplitter *Splitter1;
+ TSplitter *Splitter2;
+
+ void __fastcall FormResize(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall btnFwdClick(TObject *Sender);
+ void __fastcall btnBackClick(TObject *Sender);
+ void __fastcall btnEndClick(TObject *Sender);
+ void __fastcall btnBeginClick(TObject *Sender);
+ void __fastcall btnCloseClick(TObject *Sender);
+ void __fastcall btnPrintClick(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ __fastcall TPreviewForm(TComponent* Owner);
+ __fastcall ~TPreviewForm(void);
+ void DrawRichEdit(void);
+ TPanel* PreviewPanel;
+ TRxRichEdit* rtfPrint;
+ int currPage;
+ std::vector<TPageOffsets> FPageOffsets;
+ void UpdatePageNums();
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TPreviewForm *PreviewForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/PrintFrm.cpp b/apps/windoze/CBuilder5/BibleCS/PrintFrm.cpp
new file mode 100644
index 0000000..9d6b85f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PrintFrm.cpp
@@ -0,0 +1,441 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "PrintFrm.h"
+#include "mainfrm.h"
+#include <Printers.hpp>
+#include <Math.hpp>
+#include <localemgr.h>
+#include "PreviewForm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma link "RxCombos"
+#pragma resource "*.dfm"
+TPrintForm *PrintForm;
+
+//---------------------------------------------------------------------------
+__fastcall TPrintForm::TPrintForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ rtfPrint = new TRxRichEditX(this);
+ rtfPrint->Parent = this;
+ rtfPrint->Visible = false;
+ rtfPrint->Font->Name = "Arial";
+
+ // Put in the RXLib Font combobox component
+ cmbFont = new TFontComboBox(this);
+ cmbFont->Parent = pnlFontComboBox;
+ cmbFont->Align = alClient;
+ cmbFont->Font->Size = 12;
+ cmbFont->ParentFont = true;
+ cmbFont->UseFonts = true;
+ cmbFont->ItemIndex = cmbFont->Items->IndexOf("Arial");
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::FormShow(TObject *Sender)
+{
+
+ if(Form1->optionsconf->Sections["Printing"]["Notice"] != "1"){
+ Application->MessageBox("This release of The Sword Printer is preliminary and is not yet fully functional, therefore some of the features here have been disabled. Please be sure to take a look at the formatting options to be able to fully take control of how your page will look. Also be sure to use the \"Print Preview\" feature to preview how your page(s) will look on paper before printing. Enjoy! From, The Sword Project Development Team!", "The Sword Printer", MB_ICONINFORMATION | MB_OK);
+ Form1->optionsconf->Sections["Printing"]["Notice"] = "1";
+ Form1->optionsconf->Save();
+ }
+ ConfigEntMap::iterator eit;
+ AnsiString fontName;
+ BibleCSMGR *manager = Form1->mainmgr;
+ ModMap::iterator mods;
+ TPageControl* pc;
+
+ if ((Form1->ActiveControl == Form1->CommentaryPageControl) || (IsChild(Form1->CommentaryPageControl->Handle, Form1->ActiveControl->Handle))){
+ pc = Form1->CommentaryPageControl;
+ radComm->Checked = true;
+ staticRange->Caption = "Verse Range or List";
+ editStart->Text = Form1->DefaultVSKey->getText();
+ }
+ else if ((Form1->ActiveControl == Form1->LexDictPageControl) || (IsChild(Form1->LexDictPageControl->Handle, Form1->ActiveControl->Handle))){
+ pc = Form1->LexDictPageControl;
+ radLD->Checked = true;
+ staticRange->Caption = "Lookup Range";
+ editStart->Text = Form1->DictKeyEdit->Text;
+ }
+ else{
+ pc = Form1->TextPageControl;
+ radText->Checked = true;
+ staticRange->Caption = "Verse Range or List";
+ editStart->Text = Form1->DefaultVSKey->getText();
+ }
+ FillModuleCombo();
+
+ AnsiString temp;
+ for(int count = 0; count < cmbModule->Items->Count; count++){
+ temp = cmbModule->Items->Strings[count].SubString(2, cmbModule->Items->Strings[count].Pos("]") - 2);
+ if(temp == pc->ActivePage->Caption)
+ cmbModule->ItemIndex = count;
+ }
+ SetHint();
+ fontName = ((eit = Form1->optionsconf->Sections["PrintPrefs"].find("PrintFontName")) != Form1->optionsconf->Sections["PrintPrefs"].end())? (*eit).second.c_str() : "Times New Roman";
+ cmbFont->ItemIndex = cmbFont->Items->IndexOf(fontName);
+ PageControl1->ActivePage = shtSelection;
+
+ SetDefaultOps();
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::btnCloseClick(TObject *Sender)
+{
+ Close();
+}
+//---------------------------------------------------------------------------
+
+
+void TPrintForm::FillModuleCombo()
+{
+ TStringList *moduleNames = new TStringList;
+ BibleCSMGR *manager = Form1->mainmgr;
+ ModMap::iterator mods;
+ AnsiString modName;
+
+ for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
+ modName = "[" + (AnsiString)mods->second->Name() + "] " + (AnsiString)mods->second->Description();
+ if(!strncmp(mods->second->Type(), "Bibl", 4) && radText->Checked){
+ moduleNames->Add(modName);
+ }else if(!strncmp(mods->second->Type(), "Comm", 4) && radComm->Checked){
+ moduleNames->Add(modName);
+ }else if(!strncmp(mods->second->Type(), "Lexi", 4) && radLD->Checked){
+ moduleNames->Add(modName);
+ }
+ }
+ cmbModule->Items = moduleNames;
+ cmbModule->ItemIndex = 0;
+}
+
+void __fastcall TPrintForm::radTextClick(TObject *Sender)
+{
+ cmbModule->Enabled = true;
+ staticRange->Caption = _tr("Verse Range or List");
+ SetHint();
+ FillModuleCombo();
+ SetDefaultOps();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::radCommClick(TObject *Sender)
+{
+ staticRange->Caption = _tr("Verse Range or List");
+ SetHint();
+ FillModuleCombo();
+ SetDefaultOps();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::radLDClick(TObject *Sender)
+{
+ cmbModule->Enabled = true;
+ staticRange->Caption = _tr("Lookup Entry");
+ SetHint();
+ FillModuleCombo();
+ SetDefaultOps();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::spinLeftClick(TObject *Sender,
+ TUDBtnType Button)
+{
+ if(Button == Comctrls::btNext)
+ editLeft->Text = FloatToStr(StrToFloat(editLeft->Text) + .05);
+ else
+ editLeft->Text = FloatToStr(StrToFloat(editLeft->Text) - .05);
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::spinRightClick(TObject *Sender,
+ TUDBtnType Button)
+{
+ if(Button == Comctrls::btNext)
+ editRight->Text = FloatToStr(StrToFloat(editRight->Text) + .05);
+ else
+ editRight->Text = FloatToStr(StrToFloat(editRight->Text) - .05);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::spinBottomClick(TObject *Sender,
+ TUDBtnType Button)
+{
+ if(Button == Comctrls::btNext)
+ editBottom->Text = FloatToStr(StrToFloat(editBottom->Text) + .05);
+ else
+ editBottom->Text = FloatToStr(StrToFloat(editBottom->Text) - .05);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::spinTopClick(TObject *Sender,
+ TUDBtnType Button)
+{
+ if(Button == Comctrls::btNext)
+ editTop->Text = FloatToStr(StrToFloat(editTop->Text) + .05);
+ else
+ editTop->Text = FloatToStr(StrToFloat(editTop->Text) - .05);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::btnPrintClick(TObject *Sender)
+{
+ if(cmbModule->Text.data() != NULL && editStart->Text.data() != NULL){
+ PrepareRTF();
+ OnPrint(rtfPrint);
+ }
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::OnPrint(TRxRichEdit* rtfPrint)
+{
+/* TODO 2 -oDavid -cPrinting : Add Printing of Headers and Footers */
+ float leftMargin = StrToFloat(editLeft->Text),
+ rightMargin = StrToFloat(editRight->Text),
+ topMargin = StrToFloat(editTop->Text),
+ bottomMargin = StrToFloat(editBottom->Text);
+
+ // Sets the font we will use for the headers and footers
+ Printer()->Canvas->Font->Name = "Arial";
+ Printer()->Canvas->Font->Size = -8;
+ Printer()->Canvas->Font->Color = clBlack;
+
+ int wPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALWIDTH);
+ int hPage = ::GetDeviceCaps(Printer()->Handle, PHYSICALHEIGHT);
+
+ int xPPI = ::GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
+ int yPPI = ::GetDeviceCaps(Printer()->Handle, LOGPIXELSY);
+
+ int wTwips = ::MulDiv(wPage, 1440, xPPI);
+ int hTwips = ::MulDiv(hPage, 1440, yPPI);
+ /*
+ // Adjust for the headers and footers if needed
+ if(ckHeader->Checked){
+ int headerCoord = hTwips;
+ hTwips -= (Printer()->Canvas->Font->Height + (.25 * Printer()->Canvas->Font->Height));
+ }
+ if(ckFooter->Checked){
+ int footerCoord = hTwips;
+ hTwips -= (Printer()->Canvas->Font->Height + (.25 * Printer()->Canvas->Font->Height));
+ }
+ */
+
+ RECT pageRect;
+ pageRect.left = pageRect.top = 0;
+ pageRect.right = wTwips;
+ pageRect.bottom = hTwips;
+
+ RECT rendRect;
+ rendRect.left = rendRect.top = 0;
+ rendRect.right = pageRect.right - 1440 * (leftMargin + rightMargin);
+ rendRect.bottom = pageRect.bottom - 1440 * (topMargin + bottomMargin);
+
+ std::vector<TPageOffsets> FPageOffsets;
+
+ TPageOffsets po;
+ po.Start = 0;
+
+ TFormatRange fr;
+ fr.hdc = Printer()->Handle;
+ fr.hdcTarget = Printer()->Handle;
+ fr.chrg.cpMin = po.Start;
+ fr.chrg.cpMax = -1;
+
+ int lastOffset = ::SendMessage(rtfPrint->Handle, WM_GETTEXTLENGTH, 0, 0);
+
+ ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE, (WPARAM) 0, (LPARAM) 0);
+
+ ::SaveDC(fr.hdc);
+ ::SetMapMode(fr.hdc, MM_TEXT);
+ int xOffset = -::GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETX);
+ int yOffset = -::GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETY);
+ xOffset += ::MulDiv((leftMargin * 1440), xPPI, 1440);
+ yOffset += ::MulDiv((topMargin * 1440), yPPI, 1440);
+ ::SetViewportOrgEx(fr.hdc, xOffset, yOffset, NULL);
+
+ do {
+ fr.rc = rendRect;
+ fr.rcPage = pageRect;
+ po.Start = fr.chrg.cpMin;
+ fr.chrg.cpMin = ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE,(WPARAM) 0, (LPARAM) &fr);
+ // I don't know why I need to do this, but there is an apparent bug in the TRXRichEdit control
+ // and it doesn't handle the last page properly if there are more than 3 pages of text.
+ if(fr.chrg.cpMin == po.End)
+ fr.chrg.cpMin = lastOffset;
+ po.End = fr.chrg.cpMin - 1;
+ po.rendRect = fr.rc;
+ if(fr.chrg.cpMin < lastOffset)
+ FPageOffsets.push_back(po);
+ } while (fr.chrg.cpMin != -1 && fr.chrg.cpMin < lastOffset);
+
+ int pageCount = FPageOffsets.size();
+ ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE, (WPARAM) 0, (LPARAM) 0);
+ ::RestoreDC(fr.hdc, -1);
+
+ Printer()->BeginDoc();
+ fr.hdc = Printer()->Handle;
+ fr.hdcTarget = Printer()->Handle;
+ ::SaveDC(fr.hdc);
+ /*
+ if(ckHeader->Checked == true){
+ Printer()->Canvas->TextOut(100,100,"This is my test");
+ }
+ */
+
+ bool firstPage = true;
+ int currPage = 0;
+
+ do {
+ if (firstPage) firstPage = false;
+ else Printer()->NewPage();
+ ::SetViewportOrgEx(fr.hdc, xOffset, yOffset, NULL);
+ fr.rc = FPageOffsets[currPage].rendRect;
+ fr.rcPage = pageRect;
+ fr.chrg.cpMin = FPageOffsets[currPage].Start;
+ fr.chrg.cpMax = FPageOffsets[currPage].End;
+ fr.chrg.cpMin = ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE, (WPARAM) 1, (LPARAM) &fr);
+ } while (++currPage < pageCount);
+
+ ::RestoreDC(fr.hdc, -1);
+ Printer()->EndDoc();
+
+ ::SendMessage(rtfPrint->Handle, EM_FORMATRANGE, (WPARAM) 0, (LPARAM) 0);
+ FPageOffsets.erase(FPageOffsets.begin(), FPageOffsets.end());
+}
+
+void TPrintForm::SetHint()
+{
+ TStringList* strList = new TStringList;
+ if(radText->Checked || radComm->Checked){
+ strList->Add("Examples:");
+ strList->Add("John 1:1 Prints John chapter 1 verse 1");
+ strList->Add("John 1 Prints the entire first chapter of John");
+ strList->Add("John 1,2 Prints chapters 1 and 2 of John");
+ strList->Add("John 3:16;Rom 3:23 Prints John 3:16 and Romans 3:23");
+ }else{
+ strList->Add("Examples:");
+ /* TODO 2 -oDavid -cPrinting : Make printing ranges of dictionaries work */
+ // The ranges don't work yet.
+ //strList->Add("Aaron - David Prints dictionary entries from Aaron to David");
+ strList->Add("Jesus Prints dictionary entry for Jesus");
+ //strList->Add("0051 - 0054 Prints dictionary entry for range 0051 to 0054");
+ strList->Add("0051 Prints dictionary entry for 0051");
+ }
+ editStart->Hint = strList->Text;
+ delete strList;
+}
+
+void __fastcall TPrintForm::btnSetupClick(TObject *Sender)
+{
+ PrinterSetupDialog->Execute();
+}
+//---------------------------------------------------------------------------
+void __fastcall TPrintForm::BitBtn5Click(TObject *Sender)
+{
+ //To do
+}
+//---------------------------------------------------------------------------
+
+void TPrintForm::PrepareRTF()
+{
+ BibleCSMGR* manager = Form1->mainmgr;
+ RTF_FORMAT format;
+ AnsiString newtext = "";
+ AnsiString moduleName = cmbModule->Text.SubString(2,cmbModule->Text.Pos("]") - 2);
+ SWModule *module = manager->Modules[moduleName.c_str()];
+ ListKey lstKey;
+ StrKey testKey;
+
+ format.bkFontHeadSize = 2 * editHeading->Text.ToInt();
+ format.bodyFontSize = 2 * editBody->Text.ToInt();
+ format.vsNumFontSize = 2 * editNumbers->Text.ToInt();
+ format.chFontHeadSize = 2 * editHeading->Text.ToInt();
+ format.fontFace = cmbFont->Text;
+ format.paragraph = ckParagraph->Checked;
+ format.prBookHeadings = ckBookHead->Checked;
+ format.prChHeadings = ckChHead->Checked;
+ format.prPreFix = ckPrefix->Checked;
+ format.prPostFix = ckPostfix->Checked;
+ format.prVerseNum = ckVSNum->Checked;
+ format.superVSNum = ckSuperVS->Checked;
+
+ lstKey.Persist(1);
+ if(!radLD->Checked){
+ lstKey = VerseKey().ParseVerseList(editStart->Text.c_str(),*(Form1->DefaultVSKey), true);
+ module->SetKey(&lstKey);
+ rtfPrint->RenderModule(module, format);
+ module->SetKey(Form1->DefaultVSKey);
+ }
+ else{
+ testKey.setText(WideStringToUTF8(editStart->Text).c_str());
+ lstKey << testKey;
+ module->SetKey(&lstKey);
+ rtfPrint->RenderModule(module, format);
+ module->SetKey(Form1->DefaultStrKey);
+ }
+}
+
+void __fastcall TPrintForm::btnPreviewClick(TObject *Sender)
+{
+ if(cmbModule->Text.data() != NULL && editStart->Text.data() != NULL){
+ PrepareRTF();
+ PreviewForm->currPage = 0;
+ if(PreviewForm->ShowModal() == mrOk)
+ OnPrint(rtfPrint);
+ }
+}
+void __fastcall TPrintForm::ckHeaderClick(TObject *Sender)
+{
+ editHeader->Enabled = ckHeader->Checked;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::ckFooterClick(TObject *Sender)
+{
+ editFooter->Enabled = ckFooter->Checked;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TPrintForm::ckVSNumClick(TObject *Sender)
+{
+ ckSuperVS->Enabled = ckVSNum->Checked;
+}
+//---------------------------------------------------------------------------
+
+
+void TPrintForm::SetDefaultOps()
+{
+ if(radText->Checked){
+ ckBookHead->Checked = true;
+ ckChHead->Checked = true;
+ ckParagraph->Checked = true;
+ ckVSNum->Checked = true;
+ ckSuperVS->Checked = true;
+ ckPrefix->Checked = false;
+ ckPostfix->Checked = false;
+ }else if(radComm->Checked){
+ ckBookHead->Checked = false;
+ ckChHead->Checked = false;
+ ckParagraph->Checked = false;
+ ckVSNum->Checked = false;
+ ckSuperVS->Checked = false;
+ ckPrefix->Checked = false;
+ ckPostfix->Checked = true;
+ }else if(radLD->Checked){
+ ckBookHead->Checked = false;
+ ckChHead->Checked = false;
+ ckParagraph->Checked = false;
+ ckVSNum->Checked = false;
+ ckSuperVS->Checked = false;
+ ckPrefix->Checked = false;
+ ckPostfix->Checked = false;
+ }
+
+}
+
diff --git a/apps/windoze/CBuilder5/BibleCS/PrintFrm.dfm b/apps/windoze/CBuilder5/BibleCS/PrintFrm.dfm
new file mode 100644
index 0000000..2385ae1
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PrintFrm.dfm
@@ -0,0 +1,565 @@
+object PrintForm: TPrintForm
+ Left = 384
+ Top = 205
+ Width = 550
+ Height = 310
+ AutoSize = True
+ Caption = 'The Sword Printer'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ Scaled = False
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 450
+ Top = 0
+ Width = 92
+ Height = 283
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 0
+ object btnPrint: TBitBtn
+ Left = 6
+ Top = 21
+ Width = 80
+ Height = 25
+ Caption = '&Print'
+ TabOrder = 0
+ OnClick = btnPrintClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00666666666666
+ 6666666600006666666666666666666600006666666666666666666600006666
+ 0000000000066666000066608888888880806666000066000000000000080666
+ 0000660888888BBB880006660000660888888777880806660000660000000000
+ 0008806600006608888888888080806600006660000000000808006600006666
+ 0FFFFFFFF08080660000666660F00000F00006660000666660FFFFFFFF066666
+ 00006666660F00000F06666600006666660FFFFFFFF066660000666666600000
+ 0000666600006666666666666666666600006666666666666666666600006666
+ 66666666666666660000}
+ Margin = 2
+ end
+ object btnSetup: TBitBtn
+ Left = 7
+ Top = 90
+ Width = 80
+ Height = 25
+ Caption = 'Printer&s...'
+ TabOrder = 1
+ OnClick = btnSetupClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFF00FFFFF0000FFFF
+ FFFFFFFF4EC0FFFF0000FFFF00000004ECC0FFFF0000FFF08888884ECC80FFFF
+ 0000FF00000000ECC0080FFF0000FF08870078CC88000FFF0000FF0878E80777
+ 88080FFF0000FF07FE8E8000000880FF0000FF07EFE8E088808080FF0000FFF7
+ FEFE8000080800FF0000FFFF7FEF0FFFF08080FF0000FFFFF770F000F0000FFF
+ 0000FFFFF0FFFFFFFF0FFFFF0000FFFFFF0F00000F0FFFFF0000FFFFFF0FFFFF
+ FFF0FFFF0000FFFFFFF000000000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ Margin = 2
+ end
+ object btnPreview: TBitBtn
+ Left = 7
+ Top = 55
+ Width = 80
+ Height = 25
+ Caption = 'P&review...'
+ TabOrder = 2
+ OnClick = btnPreviewClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00666666666666
+ 6666666600006666666666666666666600006666666666666666600600006600
+ 00000000006607060000660FFFFFFFFFF06070660000660FFFFFFF0000070666
+ 0000660FFFFFF078870066660000660FFFFF0788E77066660000660FFFFF0888
+ 878066660000660FFFFF08E8878066660000660FFFFF07EE877066660000660F
+ FFFFF078870666660000660FFFFFFF00006666660000660FFFFFFFFFF0666666
+ 0000660FFFFFFF00006666660000660FFFFFFF7F066666660000660FFFFFFF70
+ 6666666600006600000000066666666600006666666666666666666600006666
+ 66666666666666660000}
+ Margin = 2
+ end
+ object btnClose: TBitBtn
+ Left = 7
+ Top = 125
+ Width = 80
+ Height = 25
+ Caption = '&Close'
+ TabOrder = 3
+ OnClick = btnCloseClick
+ Glyph.Data = {
+ 66010000424D6601000000000000760000002800000014000000140000000100
+ 040000000000F000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ F0FFFFFFFFFF0FFF0000FFFF000FFFFFFFFFFFFF0000FFFF0000FFFFFFF0FFFF
+ 0000FFFFF000FFFFFF0FFFFF0000FFFFFF000FFFF00FFFFF0000FFFFFFF000FF
+ 00FFFFFF0000FFFFFFFF00000FFFFFFF0000FFFFFFFFF000FFFFFFFF0000FFFF
+ FFFF00000FFFFFFF0000FFFFFFF000FF00FFFFFF0000FFFFF0000FFFF00FFFFF
+ 0000FFFF0000FFFFFF00FFFF0000FFFF000FFFFFFFFF0FFF0000FFFFFFFFFFFF
+ FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFFFFFFFFFFFFF0000}
+ Margin = 2
+ end
+ end
+ object PageControl1: TPageControl
+ Left = 0
+ Top = 0
+ Width = 450
+ Height = 283
+ ActivePage = shtSelection
+ Align = alClient
+ TabOrder = 1
+ object shtSelection: TTabSheet
+ Caption = 'Print Selection'
+ object GroupBox1: TGroupBox
+ Left = 10
+ Top = 14
+ Width = 420
+ Height = 123
+ Caption = 'Print Source'
+ TabOrder = 0
+ object lblModName: TLabel
+ Left = 9
+ Top = 75
+ Width = 66
+ Height = 13
+ Caption = 'Module Name'
+ end
+ object radText: TRadioButton
+ Left = 8
+ Top = 17
+ Width = 105
+ Height = 17
+ Caption = 'Bible Text'
+ Checked = True
+ TabOrder = 0
+ TabStop = True
+ OnClick = radTextClick
+ end
+ object radComm: TRadioButton
+ Left = 8
+ Top = 35
+ Width = 105
+ Height = 17
+ Caption = 'Commentary Text'
+ TabOrder = 1
+ OnClick = radCommClick
+ end
+ object radLD: TRadioButton
+ Left = 8
+ Top = 54
+ Width = 137
+ Height = 17
+ Caption = 'Lexicon/Dictionary Text'
+ TabOrder = 2
+ OnClick = radLDClick
+ end
+ object cmbModule: TComboBox
+ Left = 8
+ Top = 91
+ Width = 264
+ Height = 21
+ ItemHeight = 13
+ TabOrder = 3
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 10
+ Top = 152
+ Width = 420
+ Height = 71
+ Caption = 'Print Range'
+ TabOrder = 1
+ object staticRange: TLabel
+ Left = 8
+ Top = 16
+ Width = 46
+ Height = 13
+ Caption = 'Verse List'
+ end
+ object editStart: TEdit
+ Left = 8
+ Top = 31
+ Width = 264
+ Height = 21
+ Hint =
+ 'Examples:'#13#10'John 1:1 Prints John ' +
+ 'chapter 1 verse 1'#13#10'John 1 Pri' +
+ 'nts the entire first chapter of John'#13#10'John 1,2 ' +
+ ' Prints chapters 1 and 2 of John'#13#10'John 3:16;Rom 3:' +
+ '23 Prints John 3:16 and Romans 3:23'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ end
+ end
+ end
+ object shtSetup: TTabSheet
+ Caption = 'Page Setup'
+ ImageIndex = 1
+ object GroupBox4: TGroupBox
+ Left = 8
+ Top = 8
+ Width = 204
+ Height = 153
+ Caption = 'Margins (Inches)'
+ TabOrder = 0
+ object labelLeft: TLabel
+ Left = 15
+ Top = 38
+ Width = 21
+ Height = 13
+ Caption = 'Left:'
+ end
+ object labelBot: TLabel
+ Left = 122
+ Top = 91
+ Width = 36
+ Height = 13
+ Caption = 'Bottom:'
+ end
+ object labelRight: TLabel
+ Left = 123
+ Top = 40
+ Width = 28
+ Height = 13
+ Caption = 'Right:'
+ end
+ object labelTop: TLabel
+ Left = 15
+ Top = 88
+ Width = 22
+ Height = 13
+ Caption = 'Top:'
+ end
+ object editLeft: TEdit
+ Left = 15
+ Top = 53
+ Width = 44
+ Height = 21
+ TabOrder = 0
+ Text = '0.50'
+ end
+ object spinLeft: TUpDown
+ Left = 59
+ Top = 53
+ Width = 17
+ Height = 21
+ Min = 0
+ Position = 50
+ TabOrder = 1
+ Thousands = False
+ Wrap = False
+ OnClick = spinLeftClick
+ end
+ object editBottom: TEdit
+ Left = 122
+ Top = 105
+ Width = 44
+ Height = 21
+ TabOrder = 2
+ Text = '0.75'
+ end
+ object spinBottom: TUpDown
+ Left = 166
+ Top = 105
+ Width = 17
+ Height = 21
+ Min = 0
+ Position = 50
+ TabOrder = 3
+ Wrap = False
+ OnClick = spinBottomClick
+ end
+ object spinRight: TUpDown
+ Left = 166
+ Top = 55
+ Width = 17
+ Height = 21
+ Min = 0
+ Position = 50
+ TabOrder = 4
+ Wrap = False
+ OnClick = spinRightClick
+ end
+ object editRight: TEdit
+ Left = 122
+ Top = 55
+ Width = 44
+ Height = 21
+ TabOrder = 5
+ Text = '0.50'
+ end
+ object spinTop: TUpDown
+ Left = 59
+ Top = 103
+ Width = 17
+ Height = 21
+ Min = 0
+ Position = 50
+ TabOrder = 6
+ Wrap = False
+ OnClick = spinTopClick
+ end
+ object editTop: TEdit
+ Left = 15
+ Top = 103
+ Width = 44
+ Height = 21
+ TabOrder = 7
+ Text = '0.50'
+ end
+ end
+ object GroupBox5: TGroupBox
+ Left = 221
+ Top = 8
+ Width = 209
+ Height = 153
+ Caption = 'Header/Foooter'
+ TabOrder = 1
+ object labelHeader: TLabel
+ Left = 10
+ Top = 39
+ Width = 59
+ Height = 13
+ Caption = 'Header Text'
+ Enabled = False
+ end
+ object labelFooter: TLabel
+ Left = 10
+ Top = 104
+ Width = 54
+ Height = 13
+ Caption = 'Footer Text'
+ Enabled = False
+ end
+ object editHeader: TEdit
+ Left = 10
+ Top = 54
+ Width = 183
+ Height = 21
+ Enabled = False
+ TabOrder = 0
+ Text = '&d'
+ end
+ object editFooter: TEdit
+ Left = 10
+ Top = 120
+ Width = 183
+ Height = 21
+ Enabled = False
+ TabOrder = 1
+ Text = 'Page &p of &t'
+ end
+ object ckHeader: TCheckBox
+ Left = 10
+ Top = 19
+ Width = 97
+ Height = 17
+ Caption = 'Print Header'
+ Enabled = False
+ TabOrder = 2
+ OnClick = ckHeaderClick
+ end
+ object ckFooter: TCheckBox
+ Left = 10
+ Top = 84
+ Width = 97
+ Height = 17
+ Caption = 'Print Footer'
+ Enabled = False
+ TabOrder = 3
+ OnClick = ckFooterClick
+ end
+ end
+ end
+ object shtFormat: TTabSheet
+ Caption = 'Formatting Options'
+ ImageIndex = 2
+ object GroupBox3: TGroupBox
+ Left = 8
+ Top = 8
+ Width = 425
+ Height = 201
+ Caption = 'Font and Size'
+ TabOrder = 0
+ object Label10: TLabel
+ Left = 8
+ Top = 20
+ Width = 83
+ Height = 13
+ Caption = 'Chapter Heading:'
+ end
+ object Label11: TLabel
+ Left = 8
+ Top = 46
+ Width = 51
+ Height = 13
+ Caption = 'Body Text:'
+ end
+ object Label12: TLabel
+ Left = 8
+ Top = 73
+ Width = 75
+ Height = 13
+ Caption = 'Verse Numbers:'
+ end
+ object labelFont: TLabel
+ Left = 173
+ Top = 18
+ Width = 43
+ Height = 13
+ Caption = 'labelFont'
+ end
+ object UpDown5: TUpDown
+ Left = 147
+ Top = 16
+ Width = 16
+ Height = 21
+ Associate = editHeading
+ Min = 10
+ Max = 24
+ Position = 16
+ TabOrder = 0
+ Wrap = False
+ end
+ object editHeading: TEdit
+ Left = 103
+ Top = 16
+ Width = 44
+ Height = 21
+ TabOrder = 1
+ Text = '16'
+ end
+ object UpDown6: TUpDown
+ Left = 147
+ Top = 42
+ Width = 16
+ Height = 21
+ Associate = editBody
+ Min = 8
+ Max = 20
+ Position = 12
+ TabOrder = 2
+ Wrap = False
+ end
+ object editBody: TEdit
+ Left = 103
+ Top = 42
+ Width = 44
+ Height = 21
+ TabOrder = 3
+ Text = '12'
+ end
+ object UpDown7: TUpDown
+ Left = 147
+ Top = 69
+ Width = 16
+ Height = 21
+ Associate = editNumbers
+ Min = 6
+ Max = 20
+ Position = 10
+ TabOrder = 4
+ Wrap = False
+ end
+ object editNumbers: TEdit
+ Left = 103
+ Top = 69
+ Width = 44
+ Height = 21
+ TabOrder = 5
+ Text = '10'
+ end
+ object pnlFontComboBox: TPanel
+ Left = 173
+ Top = 34
+ Width = 148
+ Height = 29
+ BevelOuter = bvNone
+ Caption = 'Font ComboBox'
+ TabOrder = 6
+ end
+ object ckChHead: TCheckBox
+ Left = 8
+ Top = 125
+ Width = 105
+ Height = 17
+ Caption = 'Chapter Headings'
+ TabOrder = 7
+ end
+ object ckPrefix: TCheckBox
+ Left = 144
+ Top = 146
+ Width = 161
+ Height = 17
+ Caption = 'Prefixed (John 1:1 KJV)...'
+ TabOrder = 8
+ end
+ object ckParagraph: TCheckBox
+ Left = 8
+ Top = 146
+ Width = 113
+ Height = 17
+ Caption = 'Paragraph Format'
+ TabOrder = 9
+ end
+ object ckPostfix: TCheckBox
+ Left = 144
+ Top = 168
+ Width = 161
+ Height = 17
+ Caption = 'Postfixed ...(John 1:1 KJV)'
+ TabOrder = 10
+ end
+ object ckVSNum: TCheckBox
+ Left = 144
+ Top = 104
+ Width = 105
+ Height = 17
+ Caption = 'Verse Numbers'
+ TabOrder = 11
+ OnClick = ckVSNumClick
+ end
+ object ckSuperVS: TCheckBox
+ Left = 168
+ Top = 125
+ Width = 97
+ Height = 17
+ Caption = 'Superscripted'
+ Enabled = False
+ TabOrder = 12
+ end
+ object ckBookHead: TCheckBox
+ Left = 8
+ Top = 104
+ Width = 81
+ Height = 17
+ Caption = 'Book Name'
+ TabOrder = 13
+ end
+ end
+ end
+ end
+ object PrinterSetupDialog: TPrinterSetupDialog
+ Left = 496
+ Top = 160
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/PrintFrm.h b/apps/windoze/CBuilder5/BibleCS/PrintFrm.h
new file mode 100644
index 0000000..d358e9b
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/PrintFrm.h
@@ -0,0 +1,117 @@
+//---------------------------------------------------------------------------
+
+#ifndef PrintFrmH
+#define PrintFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+#include <Menus.hpp>
+#include "RxRichEditX.h"
+#include <Dialogs.hpp>
+#include "RxCombos.hpp"
+#include <swmodule.h>
+
+typedef struct tagTPageOffset {
+ long int Start;
+ long int End;
+ RECT rendRect;
+} TPageOffsets;
+
+//---------------------------------------------------------------------------
+class TPrintForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPageControl *PageControl1;
+ TTabSheet *shtSelection;
+ TTabSheet *shtSetup;
+ TBitBtn *btnPrint;
+ TBitBtn *btnSetup;
+ TBitBtn *btnPreview;
+ TBitBtn *btnClose;
+ TGroupBox *GroupBox1;
+ TRadioButton *radText;
+ TRadioButton *radComm;
+ TRadioButton *radLD;
+ TGroupBox *GroupBox2;
+ TEdit *editStart;
+ TLabel *staticRange;
+ TComboBox *cmbModule;
+ TLabel *lblModName;
+ TGroupBox *GroupBox3;
+ TGroupBox *GroupBox4;
+ TGroupBox *GroupBox5;
+ TLabel *labelLeft;
+ TLabel *labelBot;
+ TLabel *labelRight;
+ TLabel *labelTop;
+ TEdit *editLeft;
+ TUpDown *spinLeft;
+ TEdit *editBottom;
+ TUpDown *spinBottom;
+ TEdit *editTop;
+ TUpDown *spinTop;
+ TEdit *editRight;
+ TUpDown *spinRight;
+ TLabel *labelHeader;
+ TLabel *labelFooter;
+ TEdit *editHeader;
+ TEdit *editFooter;
+ TLabel *Label10;
+ TLabel *Label11;
+ TLabel *Label12;
+ TUpDown *UpDown5;
+ TEdit *editHeading;
+ TUpDown *UpDown6;
+ TEdit *editBody;
+ TUpDown *UpDown7;
+ TEdit *editNumbers;
+ TPrinterSetupDialog *PrinterSetupDialog;
+ TLabel *labelFont;
+ TPanel *pnlFontComboBox;
+ TCheckBox *ckChHead;
+ TCheckBox *ckPrefix;
+ TCheckBox *ckParagraph;
+ TCheckBox *ckPostfix;
+ TCheckBox *ckVSNum;
+ TCheckBox *ckSuperVS;
+ TTabSheet *shtFormat;
+ TCheckBox *ckBookHead;
+ TCheckBox *ckHeader;
+ TCheckBox *ckFooter;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall btnCloseClick(TObject *Sender);
+ void __fastcall radTextClick(TObject *Sender);
+ void __fastcall radCommClick(TObject *Sender);
+ void __fastcall radLDClick(TObject *Sender);
+ void __fastcall spinLeftClick(TObject *Sender, TUDBtnType Button);
+ void __fastcall spinRightClick(TObject *Sender, TUDBtnType Button);
+ void __fastcall spinBottomClick(TObject *Sender, TUDBtnType Button);
+ void __fastcall spinTopClick(TObject *Sender, TUDBtnType Button);
+ void __fastcall btnPrintClick(TObject *Sender);
+ void __fastcall OnPrint(TRxRichEdit* rtfPrint);
+ void __fastcall btnSetupClick(TObject *Sender);
+ void __fastcall BitBtn5Click(TObject *Sender);
+ void __fastcall btnPreviewClick(TObject *Sender);
+ void __fastcall ckHeaderClick(TObject *Sender);
+ void __fastcall ckFooterClick(TObject *Sender);
+ void __fastcall ckVSNumClick(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ TFontComboBox *cmbFont;
+ TRxRichEditX* rtfPrint;
+ __fastcall TPrintForm(TComponent* Owner);
+ void FillModuleCombo();
+ void SetHint();
+ void PrepareRTF();
+ void SetDefaultOps();
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TPrintForm *PrintForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.cpp b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.cpp
new file mode 100644
index 0000000..4b2c4f6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.cpp
@@ -0,0 +1,129 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "RangeMaintFrm.h"
+#include <versekey.h>
+#include <listkey.h>
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TRangeMaintForm *RangeMaintForm;
+
+//---------------------------------------------------------------------------
+__fastcall TRangeMaintForm::TRangeMaintForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::FormShow(TObject *Sender)
+{
+ ConfigEntMap::iterator loop, end;
+ config = new SWConfig("./options.conf");
+ ListBox1->Clear();
+ loop = config->Sections["CustomRanges"].begin();
+ end = config->Sections["CustomRanges"].end();
+ while (loop != end) {
+ TCustomRange *rs = new TCustomRange(loop->first.c_str(), loop->second.c_str());
+ ListBox1->Items->AddObject(rs->name.c_str(), rs);
+ loop++;
+ }
+ ListBox1->ItemIndex = 0;
+ if (ListBox1->ItemIndex) {
+ SpeedButton1Click(0);
+ }
+ else {
+ ListBox1Click(0);
+ Button1Click(0);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::FormClose(TObject *Sender,
+ TCloseAction &Action)
+{
+ delete config;
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::SpeedButton4Click(TObject *Sender)
+{
+ ModalResult = mrCancel;
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::ListBox1Click(TObject *Sender)
+{
+ if (ListBox1->ItemIndex >= 0) {
+ TCustomRange *rs = (TCustomRange *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+
+ NameEdit->Text = rs->name.c_str();
+ TextEdit->Text = rs->text.c_str();
+ }
+ else {
+ NameEdit->Text = "";
+ TextEdit->Text = "";
+ }
+ Button1Click(0);
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::NameEditChange(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ TCustomRange *rs = (TCustomRange *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+ rs->name = NameEdit->Text.c_str();
+ ListBox1->Items->Strings[ListBox1->ItemIndex] = rs->name.c_str();
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::TextEditChange(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ TCustomRange *rs = (TCustomRange *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+ rs->text = TextEdit->Text.c_str();
+ Button1Click(0);
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::SpeedButton2Click(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ int delItem = ListBox1->ItemIndex;
+ ListBox1->Items->Delete(delItem);
+ ListBox1->ItemIndex = (delItem < ListBox1->Items->Count) ? delItem : delItem - 1;
+ ListBox1Click(0);
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::SpeedButton1Click(TObject *Sender)
+{
+ TCustomRange *rs = new TCustomRange("[New Custom Range]", "");
+ ListBox1->ItemIndex = ListBox1->Items->AddObject(rs->name.c_str(), rs);
+
+ ListBox1Click(0);
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::SpeedButton3Click(TObject *Sender)
+{
+ TCustomRange *rs;
+ config->Sections["CustomRanges"].erase(config->Sections["CustomRanges"].begin(), config->Sections["CustomRanges"].end());
+ for (int i = 0; i < ListBox1->Items->Count; i++) {
+ rs = (TCustomRange *)ListBox1->Items->Objects[i];
+ config->Sections["CustomRanges"].insert(ConfigEntMap::value_type(rs->name.c_str(), rs->text.c_str()));
+ }
+ config->Save();
+ ModalResult = mrOk;
+}
+//---------------------------------------------------------------------------
+void __fastcall TRangeMaintForm::Button1Click(TObject *Sender)
+{
+ VerseKey key;
+ ListBox2->Clear();
+ ListKey verses = key.ParseVerseList(TextEdit->Text.c_str(), key, true);
+ for (int i = 0; i < verses.Count(); i++) {
+ VerseKey *element = SWDYNAMIC_CAST(VerseKey, verses.GetElement(i));
+ if (element) {
+ ListBox2->Items->Add((string(element->LowerBound()) + " - " + string(element->UpperBound())).c_str());
+ }
+ else ListBox2->Items->Add((const char *)*verses.GetElement(i));
+ }
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.dfm b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.dfm
new file mode 100644
index 0000000..f46a9eb
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.dfm
@@ -0,0 +1,219 @@
+object RangeMaintForm: TRangeMaintForm
+ Left = 351
+ Top = 101
+ Width = 475
+ Height = 319
+ Caption = 'Maintain Custom Ranges'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ Scaled = False
+ OnClose = FormClose
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel4: TPanel
+ Left = 0
+ Top = 255
+ Width = 467
+ Height = 37
+ Align = alBottom
+ TabOrder = 0
+ object SpeedButton3: TSpeedButton
+ Left = 301
+ Top = 6
+ Width = 75
+ Height = 25
+ Caption = '&Save'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 333333FFFFFFFFFFFFF33000077777770033377777777777773F000007888888
+ 00037F3337F3FF37F37F00000780088800037F3337F77F37F37F000007800888
+ 00037F3337F77FF7F37F00000788888800037F3337777777337F000000000000
+ 00037F3FFFFFFFFFFF7F00000000000000037F77777777777F7F000FFFFFFFFF
+ 00037F7F333333337F7F000FFFFFFFFF00037F7F333333337F7F000FFFFFFFFF
+ 00037F7F333333337F7F000FFFFFFFFF00037F7F333333337F7F000FFFFFFFFF
+ 00037F7F333333337F7F000FFFFFFFFF07037F7F33333333777F000FFFFFFFFF
+ 0003737FFFFFFFFF7F7330099999999900333777777777777733}
+ NumGlyphs = 2
+ OnClick = SpeedButton3Click
+ end
+ object SpeedButton4: TSpeedButton
+ Left = 383
+ Top = 6
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Cancel'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 3333333333FFFFF3333333333999993333333333F77777FFF333333999999999
+ 3333333777333777FF3333993333339993333377FF3333377FF3399993333339
+ 993337777FF3333377F3393999333333993337F777FF333337FF993399933333
+ 399377F3777FF333377F993339993333399377F33777FF33377F993333999333
+ 399377F333777FF3377F993333399933399377F3333777FF377F993333339993
+ 399377FF3333777FF7733993333339993933373FF3333777F7F3399933333399
+ 99333773FF3333777733339993333339933333773FFFFFF77333333999999999
+ 3333333777333777333333333999993333333333377777333333}
+ NumGlyphs = 2
+ OnClick = SpeedButton4Click
+ end
+ end
+ object Panel2: TPanel
+ Left = 185
+ Top = 0
+ Width = 282
+ Height = 255
+ Align = alClient
+ TabOrder = 1
+ object Panel5: TPanel
+ Left = 1
+ Top = 1
+ Width = 280
+ Height = 140
+ Align = alTop
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 4
+ Top = 12
+ Width = 63
+ Height = 13
+ Caption = 'Range Name'
+ end
+ object Label2: TLabel
+ Left = 4
+ Top = 62
+ Width = 56
+ Height = 13
+ Caption = 'Range Text'
+ end
+ object Label3: TLabel
+ Left = 4
+ Top = 120
+ Width = 70
+ Height = 13
+ Caption = 'eg. mat-jo;rev4'
+ end
+ object NameEdit: TEdit
+ Left = 4
+ Top = 32
+ Width = 270
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ OnChange = NameEditChange
+ end
+ object TextEdit: TEdit
+ Left = 4
+ Top = 82
+ Width = 270
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 1
+ OnChange = TextEditChange
+ end
+ end
+ object Panel6: TPanel
+ Left = 1
+ Top = 141
+ Width = 280
+ Height = 113
+ Align = alClient
+ TabOrder = 1
+ object ListBox2: TListBox
+ Left = 1
+ Top = 1
+ Width = 278
+ Height = 111
+ Align = alClient
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ end
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 185
+ Height = 255
+ Align = alLeft
+ TabOrder = 2
+ object Panel3: TPanel
+ Left = 1
+ Top = 224
+ Width = 183
+ Height = 30
+ Align = alBottom
+ TabOrder = 0
+ object SpeedButton1: TSpeedButton
+ Left = 4
+ Top = 4
+ Width = 85
+ Height = 22
+ Caption = '&Add'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0033333333B333
+ 333B33FF33337F3333F73BB3777BB7777BB3377FFFF77FFFF77333B000000000
+ 0B3333777777777777333330FFFFFFFF07333337F33333337F333330FFFFFFFF
+ 07333337F33333337F333330FFFFFFFF07333337F33333337F333330FFFFFFFF
+ 07333FF7F33333337FFFBBB0FFFFFFFF0BB37777F3333333777F3BB0FFFFFFFF
+ 0BBB3777F3333FFF77773330FFFF000003333337F333777773333330FFFF0FF0
+ 33333337F3337F37F3333330FFFF0F0B33333337F3337F77FF333330FFFF003B
+ B3333337FFFF77377FF333B000000333BB33337777777F3377FF3BB3333BB333
+ 3BB33773333773333773B333333B3333333B7333333733333337}
+ NumGlyphs = 2
+ OnClick = SpeedButton1Click
+ end
+ object SpeedButton2: TSpeedButton
+ Left = 92
+ Top = 4
+ Width = 85
+ Height = 22
+ Caption = '&Remove'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333000000000
+ 3333333777777777F3333330F777777033333337F3F3F3F7F3333330F0808070
+ 33333337F7F7F7F7F3333330F080707033333337F7F7F7F7F3333330F0808070
+ 33333337F7F7F7F7F3333330F080707033333337F7F7F7F7F3333330F0808070
+ 333333F7F7F7F7F7F3F33030F080707030333737F7F7F7F7F7333300F0808070
+ 03333377F7F7F7F773333330F080707033333337F7F7F7F7F333333070707070
+ 33333337F7F7F7F7FF3333000000000003333377777777777F33330F88877777
+ 0333337FFFFFFFFF7F3333000000000003333377777777777333333330777033
+ 3333333337FFF7F3333333333000003333333333377777333333}
+ NumGlyphs = 2
+ OnClick = SpeedButton2Click
+ end
+ end
+ object ListBox1: TListBox
+ Left = 1
+ Top = 1
+ Width = 183
+ Height = 223
+ Align = alClient
+ ItemHeight = 13
+ TabOrder = 1
+ OnClick = ListBox1Click
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.h b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.h
new file mode 100644
index 0000000..e279783
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/RangeMaintFrm.h
@@ -0,0 +1,64 @@
+//---------------------------------------------------------------------------
+
+#ifndef RangeMaintFrmH
+#define RangeMaintFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <ExtCtrls.hpp>
+#include <swconfig.h>
+//---------------------------------------------------------------------------
+class TRangeMaintForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel4;
+ TSpeedButton *SpeedButton3;
+ TSpeedButton *SpeedButton4;
+ TPanel *Panel2;
+ TPanel *Panel1;
+ TPanel *Panel3;
+ TSpeedButton *SpeedButton1;
+ TSpeedButton *SpeedButton2;
+ TListBox *ListBox1;
+ TPanel *Panel5;
+ TLabel *Label1;
+ TLabel *Label2;
+ TEdit *NameEdit;
+ TEdit *TextEdit;
+ TPanel *Panel6;
+ TListBox *ListBox2;
+ TLabel *Label3;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+ void __fastcall SpeedButton4Click(TObject *Sender);
+ void __fastcall ListBox1Click(TObject *Sender);
+ void __fastcall NameEditChange(TObject *Sender);
+ void __fastcall TextEditChange(TObject *Sender);
+ void __fastcall SpeedButton2Click(TObject *Sender);
+ void __fastcall SpeedButton1Click(TObject *Sender);
+ void __fastcall SpeedButton3Click(TObject *Sender);
+ void __fastcall Button1Click(TObject *Sender);
+private: // User declarations
+ SWConfig *config;
+public: // User declarations
+ __fastcall TRangeMaintForm(TComponent* Owner);
+};
+
+class TCustomRange : public TObject {
+public:
+ string name;
+ string text;
+ TCustomRange(const char *name, const char *text) {
+ this->name = name;
+ this->text = text;
+ }
+};
+
+
+//---------------------------------------------------------------------------
+extern PACKAGE TRangeMaintForm *RangeMaintForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp
new file mode 100644
index 0000000..52876ab
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp
@@ -0,0 +1,860 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "RxRichEditX.h"
+#include <clipbrd.hpp>
+#include <swdisprtf.h>
+#include <swdisprtfchap.h>
+#include "mainfrm.h"
+#include <localemgr.h>
+#include <unicodertf.h>
+
+char TRxRichEditX::platformID = 0;
+
+TRxRichEditX::TRxRichEditX(TWinControl *parent) : TRxRichEdit(parent)
+{
+ OSVERSIONINFO osvi;
+ memset(&osvi, 0, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ platformID = osvi.dwPlatformId;
+ type = "Default";
+}
+
+void TRxRichEditX::RenderModule(SWModule* module, RTF_FORMAT format)
+{
+ format_ops = format;
+
+ TMemoryStream* RTFStream = new TMemoryStream();
+ AnsiString rtfText = "{\\rtf1\\ansi{\\fonttbl{\\f0\\fdecor\\fprq2 ";
+ rtfText += format_ops.fontFace;
+ rtfText += ";}}{\\colortbl;\\red0\\green0\\blue0;}";
+ rtfText += "{\\fs8\\cf1\\par\\pard} ";
+
+ //if(!strcmp(module->Type(), "Biblical Texts"))
+ rtfText += GetFormattedBible(module);
+ /*
+ else if(!strcmp(module->Type(), "Commentaries"))
+ rtfText += GetFormattedComm(module);
+ else if(!strcmp(module->Type(), "Lexicons / Dictionaries"))
+ rtfText += GetFormattedLD(module);
+ else
+ rtfText += GetFormattedBook(module);
+ */
+ rtfText += "{ \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(rtfText.c_str(), rtfText.Length());
+ RTFStream->Position = 0;
+ Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+
+ // clear HTML link tags
+ while (true) {
+ int start, len, foundAt, endAt;
+
+ start = (SelLength) ? SelStart + SelLength : 0;
+ len = Text.Length() - start;
+ foundAt = this->SearchText("<a href=\"\">", start, len, TRichSearchTypes());
+ if (foundAt == -1)
+ break;
+
+ SelStart = foundAt;
+ SelLength = 11;
+ this->SelText = "";
+ endAt = this->SearchText("</a>", foundAt, len, TRichSearchTypes());
+ if (foundAt == -1)
+ break;
+ SelStart = endAt;
+ SelLength = 4;
+ this->SelText = "";
+ SelStart = foundAt;
+ SelLength = endAt - foundAt;
+ //this->SelAttributes->Link = true;
+ }
+ SelLength = 0;
+}
+
+AnsiString TRxRichEditX::GetFormattedBible(SWModule* module)
+{
+ AnsiString rtfText = "";
+ VerseKey key;
+ int lastChap, lastBook;
+ AnsiString bookName;
+
+ key = (VerseKey)module->Key();
+ lastChap = key.Chapter();
+ lastBook = key.Book();
+ bookName = (AnsiString)key.getText();
+ bookName = bookName.SubString(0,bookName.Pos(lastChap) - 2);
+
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, bookName);
+
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, lastChap);
+
+ for ((*module) = TOP; !module->Error(); (*module)++){
+ key = (VerseKey)module->Key();
+ if(key.Book() != lastBook){
+ rtfText += "\\par\\par";
+ bookName = (AnsiString)key.getText();
+ bookName = bookName.SubString(0,bookName.Pos(key.Chapter()) - 2);
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, bookName);
+ lastBook = key.Book();
+ lastChap = -1; // Reset the last Chapter since we could jump from Jude 1 to Revelation 1
+ }
+ if(key.Chapter() != lastChap){
+ rtfText += "\\par";
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, key.Chapter());
+ lastChap = key.Chapter();
+ }
+ rtfText += PrintEntry(module, key.Verse());
+ }
+
+ return rtfText;
+}
+/*
+AnsiString TRxRichEditX::GetFormattedComm(SWModule* module)
+{
+ AnsiString rtfText = "";
+ VerseKey key;
+ int lastChap;
+ AnsiString lastBook;
+
+ key = (VerseKey)module->Key();
+ lastChap = key.Chapter();
+ lastBook = (AnsiString)key.Book();
+
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, lastChap);
+
+ for ((*module) = TOP; !module->Error(); (*module)++){
+ key = (VerseKey)module->Key();
+ if((AnsiString)key.Book() == lastBook){
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+ lastBook = key.Book();
+ }
+ if(key.Chapter() != lastChap){
+ rtfText += "\\par\\par";
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, key.Chapter());
+ lastChap = key.Chapter();
+ }
+ rtfText += PrintEntry(module, key.Verse());
+ }
+
+ return rtfText;
+}
+
+AnsiString TRxRichEditX::GetFormattedLD(SWModule* module)
+{
+ AnsiString rtfText = "";
+ VerseKey key;
+ int lastChap;
+ AnsiString lastBook;
+
+ key = (VerseKey)module->Key();
+ lastChap = key.Chapter();
+ lastBook = (AnsiString)key.Book();
+
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, lastChap);
+
+ for ((*module) = TOP; !module->Error(); (*module)++){
+ key = (VerseKey)module->Key();
+ if((AnsiString)key.Book() == lastBook){
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+ lastBook = key.Book();
+ }
+ if(key.Chapter() != lastChap){
+ rtfText += "\\par\\par";
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, key.Chapter());
+ lastChap = key.Chapter();
+ }
+ rtfText += PrintEntry(module, key.Verse());
+ }
+
+ return rtfText;
+}
+
+AnsiString TRxRichEditX::GetFormattedBook(SWModule* module)
+{
+ AnsiString rtfText = "";
+ VerseKey key;
+ int lastChap;
+ AnsiString lastBook;
+
+ key = (VerseKey)module->Key();
+ lastChap = key.Chapter();
+ lastBook = (AnsiString)key.Book();
+
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, lastChap);
+
+ for ((*module) = TOP; !module->Error(); (*module)++){
+ key = (VerseKey)module->Key();
+ if((AnsiString)key.Book() == lastBook){
+ rtfText += "\\par\\par";
+ if(format_ops.prBookHeadings)
+ rtfText += BookHeading(module, lastBook);
+ lastBook = key.Book();
+ }
+ if(key.Chapter() != lastChap){
+ rtfText += "\\par\\par";
+ if(format_ops.prChHeadings)
+ rtfText += ChapterHeading(module, key.Chapter());
+ lastChap = key.Chapter();
+ }
+ rtfText += PrintEntry(module, key.Verse());
+ }
+
+ return rtfText;
+}
+*/
+AnsiString TRxRichEditX::PrintEntry(SWModule* module, int nVerse)
+{
+ AnsiString rtfText = "";
+ if (module->Direction() == DIRECTION_RTL) {
+ rtfText += "\\qr ";
+ }else
+ rtfText += "\\ql ";
+ if (module->Direction() == DIRECTION_RTL && (platformID == WINNT && (!strnicmp(module->Lang(), "he", 2) || !strnicmp(module->Lang(), "ar", 2)))) {
+ rtfText = rtfText + "\\rtlpar ";
+ }
+
+ if(!format_ops.paragraph)
+ rtfText += "\\par";
+ if(format_ops.prPreFix)
+ rtfText += PrintFix(module) + (AnsiString)" ";
+
+ if(format_ops.prVerseNum){
+ rtfText += (AnsiString)"{\\fs" + format_ops.vsNumFontSize;
+ if(format_ops.superVSNum)
+ rtfText += "\\super ";
+ else rtfText += " ";
+ rtfText += IntToStr(nVerse);
+ rtfText += " }";
+ }
+ rtfText += (AnsiString)"{\\fs" + format_ops.bodyFontSize + (AnsiString)" ";
+ rtfText += module->RenderText();
+ rtfText += " }";
+ if(format_ops.prPostFix)
+ rtfText += (AnsiString)" " + PrintFix(module);
+
+ return rtfText;
+}
+
+AnsiString TRxRichEditX::ChapterHeading(SWModule* module, int nChapter)
+{
+ AnsiString rtfText = "";
+ rtfText += (AnsiString)" \\qc{\\f1\\cf7\\fs" + format_ops.bkFontHeadSize + (AnsiString)"\\b ";
+ rtfText += _tr("Chapter");
+ rtfText += " ";
+ rtfText += IntToStr(nChapter);
+ rtfText += "\\par\\par}";
+ return rtfText;
+}
+
+AnsiString TRxRichEditX::BookHeading(SWModule* module, AnsiString name)
+{
+ AnsiString rtfText = "";
+ rtfText += (AnsiString)" \\qc{\\f1\\cf7\\fs" + format_ops.bkFontHeadSize + (AnsiString)"\\b\\ul ";
+ rtfText += name;
+ rtfText += "\\par\\par}";
+ return rtfText;
+}
+
+
+AnsiString TRxRichEditX::PrintFix(SWModule* module)
+{
+ AnsiString rtfText = "";
+ rtfText += (AnsiString)"{\\fs" + format_ops.vsNumFontSize;
+ rtfText += (AnsiString)"(" + (AnsiString)module->KeyText() + (AnsiString)" " + (AnsiString)module->Name() + (AnsiString)")}";
+ return rtfText;
+}
+
+
+int TRxRichEditX::paintTo(HDC hdc, TRect *size, int margin) {
+ TFormatRange Range;
+ int LastChar, MaxLen, LogX, LogY, OldMap;
+ TRect SaveRect;
+ TGetTextLengthEx TextLenEx;
+ bool calcBestSize = (size) ? IsRectEmpty(size): true;
+ TRect trySizeRect[] = {
+ TRect(0, 0, 200, 50),
+ TRect(0, 0, 200, 100),
+ TRect(0, 0, 250, 100),
+ TRect(0, 0, 300, 50),
+ TRect(0, 0, 300, 100),
+ TRect(0, 0, 350, 100),
+ TRect(0, 0, 400, 50),
+ TRect(0, 0, 400, 100),
+ TRect(0, 0, 400, 150),
+ TRect(0, 0, 400, 200),
+ TRect(0, 0, 500, 100),
+ TRect(0, 0, 500, 150),
+ TRect(0, 0, 500, 200),
+ TRect(0, 0, 500, 250),
+ TRect(0, 0, 550, 300),
+ TRect(0, 0, 550, 350),
+ TRect(0, 0, 0, 0)
+ };
+ int trySize = 0;
+ TRect *dispSize = size;
+
+ LogX = GetDeviceCaps(hdc, LOGPIXELSX);
+ LogY = GetDeviceCaps(hdc, LOGPIXELSY);
+
+ do {
+
+ if (calcBestSize) {
+ dispSize = &trySizeRect[trySize++];
+ if (IsRectEmpty(dispSize)) {
+ dispSize = &trySizeRect[trySize-2];
+ break;
+ }
+ }
+
+ memset(&Range, 0, sizeof(TFormatRange));
+ // with Printer, Range do begin
+ Range.hdc = hdc;
+ Range.hdcTarget = Range.hdc;
+// if (IsRectEmpty(&PageRect)) {
+// Range.rc.right = dispSize->Right * 1440 / LogX;
+// Range.rc.bottom = dispSize->Bottom * 1440 / LogY;
+// }
+// else {
+ Range.rc.left = (dispSize->Left + margin) * 1440 / LogX;
+ Range.rc.top = (dispSize->Top + margin) * 1440 / LogY;
+ Range.rc.right = dispSize->Right * 1440 / LogX;
+ Range.rc.bottom = (dispSize->Bottom)* 1440 / LogY;
+// }
+ Range.rcPage = Range.rc;
+ SaveRect = Range.rc;
+// Range.rcPage.top = Range.rcPage.top + (5 * 1440) / LogY;
+// Range.rcPage.bottom = Range.rcPage.bottom + (5 * 1440) / LogY;
+ LastChar = 0;
+ if (RichEditVersion >= 2) {
+ // with TextLenEx do begin
+ TextLenEx.flags = GTL_DEFAULT;
+ TextLenEx.codepage = CP_ACP;
+ MaxLen = Perform(EM_GETTEXTLENGTHEX, (WPARAM)&TextLenEx, 0);
+ }
+ else MaxLen = GetTextLen();
+ Range.chrg.cpMax = -1;
+ // { ensure printer DC is in text map mode }
+ OldMap = SetMapMode(hdc, MM_TEXT);
+ SendMessage(Handle, EM_FORMATRANGE, 0, 0); // { flush buffer }
+ try {
+ Range.rc = SaveRect;
+ Range.chrg.cpMin = LastChar;
+ LastChar = SendMessage(Handle, EM_FORMATRANGE, 1, Longint(&Range));
+// if ((LastChar < MaxLen) && (LastChar != -1)) ;//NewPage();
+ // } while ((LastChar >= MaxLen) || (LastChar = -1));
+ }
+ __finally {
+ SendMessage(Handle, EM_FORMATRANGE, 0, 0);// { flush buffer }
+ SetMapMode(hdc, OldMap); // { restore previous map mode }
+ }
+ LastChar = (LastChar < 0) ? 0: MaxLen - LastChar;
+ LastChar = (LastChar < 0) ? 0: LastChar;
+ } while (LastChar && calcBestSize);
+
+ if (calcBestSize && size)
+ *size = *dispSize;
+
+ return LastChar;
+}
+
+
+void TRxRichEditX::fillWithRTFString(SWModule *module, const char *text, const char *type) {
+
+ TMemoryStream *RTFStream = new TMemoryStream();
+ System::AnsiString newtext, tmptext;
+
+ this->module = module;
+ this->type = type;
+ recalcAppearance();
+
+ newtext = RTFHeader;
+ newtext += RTFHeadMargin;
+ newtext += "\\pard \\nowidctlpar \\cf7\\f0 ";
+
+ newtext += "{";
+
+ tmptext = "";
+ for (const char *loop = text; *loop; loop++) {
+ if (*loop == '\n') {
+ tmptext += "\\par ";
+ }
+ else tmptext += *loop;
+ }
+ newtext += RTFVersePre + tmptext + RTFVersePost;
+ newtext += "}";
+
+ newtext += RTFTrailer;
+
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ Lines->LoadFromStream(RTFStream);
+ Repaint();
+
+ delete RTFStream;
+}
+
+
+void TRxRichEditX::fillWithVerses(SWModule *module, ListKey *verses, bool heading, bool verseNum, const char *type, bool stripNewlines) {
+ string fontname;
+ TMemoryStream *RTFStream = new TMemoryStream();
+ System::AnsiString newtext, tmptext;
+
+ this->module = module;
+ this->type = type;
+ recalcAppearance();
+
+ newtext = RTFHeader;
+
+ newtext += RTFHeadMargin;
+// newtext += "\\pard\\nowidctlpar\\cf7\\f0 ";
+
+ if (module->Direction() == DIRECTION_RTL) {
+ newtext += "\\qr ";
+ }
+ if (module->Direction() == DIRECTION_RTL && (platformID == WINNT && (!strnicmp(module->Lang(), "he", 2) || !strnicmp(module->Lang(), "ar", 2)))) {
+ newtext += "\\rtlpar ";
+ }
+
+ verses->Persist(1);
+ SWKey *saveKey = (*module);
+ if (!saveKey->Persist())
+ saveKey = 0;
+ module->SetKey(verses);
+
+ SWKey *lastKey = 0;
+ bool first = true;
+ while (!module->Error() && newtext.Length() < 10000 ) {
+ SWKey *testKey = verses->GetElement();
+ VerseKey *element = SWDYNAMIC_CAST(VerseKey, testKey);
+ if (heading) {
+ if (element) {
+ if (lastKey != element) {
+ if (!first)
+ newtext += "\\par\\par ";
+ newtext += RTFHeadingPre;
+ newtext += ((string(element->LowerBound()) + " - " + string(element->UpperBound())).c_str());
+ newtext += ":";
+ newtext += RTFHeadingPost;
+ newtext += "\\par ";
+ }
+ }
+ else {
+ if (!first)
+ newtext += "\\par\\par ";
+ newtext += RTFHeadingPre;
+ newtext += module->KeyText();
+ newtext += ":";
+ newtext += RTFHeadingPost;
+ newtext += "\\par ";
+ }
+// newtext += RTFHeadingPost;
+ }
+ else { // hack to make searchlist entries fit in box better
+ newtext += "";
+ }
+ lastKey = element;
+ first = false;
+
+ newtext = newtext + "{";
+
+ tmptext = "";
+ for (const char *loop = (const char *)*module; *loop; loop++) {
+ if (stripNewlines) {
+ if (!strnicmp(loop, "\\par", 4)) {
+ loop += (loop[4] == 'd') ? 4 : 3;
+ continue;
+ }
+ }
+ if (*loop == '\n') {
+ if (!stripNewlines)
+ tmptext += "\\par ";
+ }
+ else tmptext += *loop;
+
+ }
+
+ if (tmptext.Length() > 3) { // make sure we have an entry
+ if (module->Direction() == DIRECTION_RTL && (SWDispRTFChap::platformID == WIN9X || (module->Lang() && strnicmp(module->Lang(), "he", 2) && strnicmp(module->Lang(), "ar", 2)))) {
+ newtext = newtext + RTFVersePre + tmptext + RTFVersePost;
+ if (verseNum)
+ newtext = newtext + RTFVerseMarkPre + IntToStr(VerseKey(module->KeyText()).Verse()) + RTFVerseMarkPost;
+ newtext = newtext + "\\par ";
+ }
+ else {
+ if (verseNum)
+ newtext = newtext + RTFVerseMarkPre + IntToStr(VerseKey(module->KeyText()).Verse()) + RTFVerseMarkPost;
+ newtext = newtext + RTFVersePre + tmptext + RTFVersePost;
+ }
+ }
+ newtext = newtext + "}";
+ (*module)++;
+ }
+
+ if (saveKey)
+ module->SetKey(saveKey);
+
+ newtext += RTFTrailer;
+
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ Lines->LoadFromStream(RTFStream);
+ Repaint();
+
+ delete RTFStream;
+}
+
+
+
+void TRxRichEditX::getDisplayPrefs(DISP_ATTRIBS *attribs, SWModule *module /*, const char *type*/) {
+
+
+ string keyBackColor = (string)getType().c_str() + "BackColor";
+ string backColor = Form1->optionsconf->Sections["Appearance"][keyBackColor];
+ // This portion of the code sets the default values (If needed) of the background
+ // for either typical windows or for popup windows
+ if (backColor == "") {
+ if (getType() == "Popup") {
+ attribs->backColor = 14680063;
+ }
+ else attribs->backColor = clWindow;
+ }
+ else attribs->backColor = StrToInt((AnsiString)backColor.c_str());
+
+ string keyFontColor = (string)getType().c_str() + "FontColor";
+ string fontColor = Form1->optionsconf->Sections["Appearance"][keyFontColor];
+ // This portion of the code sets the default values (If needed) of the background
+ // for either typical windows or for popup windows
+ if (backColor == "") {
+ attribs->fontColor = clBlack;
+ }
+ else attribs->fontColor = StrToInt((AnsiString)fontColor.c_str());
+
+ // If the module uses it's own font load that else we will try the config file else we will use the default
+ ConfigEntMap::const_iterator eit = module->getConfig().find("Font");
+ if (eit != module->getConfig().end())
+ attribs->fontName = (*eit).second.c_str();
+ else {
+ string keyFontName = (string)getType().c_str() + "FontName";
+ attribs->fontName = (AnsiString)Form1->optionsconf->Sections["Appearance"][keyFontName].c_str();
+ }
+ // If we still have no name we will set it to a default value
+ if (attribs->fontName == "")
+ attribs->fontName = "MS Sans Serif";
+
+ string keyFontSize = (string)getType().c_str() + "FontSize";
+ string fontSize = Form1->optionsconf->Sections["Appearance"][keyFontSize];
+ if (fontSize == "")
+ attribs->fontSize = 10;
+ else attribs->fontSize = StrToInt((AnsiString)fontSize.c_str());
+
+ string entryColor = Form1->optionsconf->Sections["Appearance"]["CurrentVSColor"];
+ if (entryColor == "")
+ attribs->entryKeyColor = clBlue;
+ else attribs->entryKeyColor = StrToInt((AnsiString)entryColor.c_str());
+
+ string morphColor = Form1->optionsconf->Sections["Appearance"]["MorphColor"];
+ if (morphColor == "")
+ attribs->morphColor = clBlue;
+ else attribs->morphColor = StrToInt((AnsiString)morphColor.c_str());
+
+ string strongColor = Form1->optionsconf->Sections["Appearance"]["StrongsColor"];
+ if (strongColor == "")
+ attribs->strongsColor = clBlue;
+ else attribs->strongsColor = StrToInt((AnsiString)strongColor.c_str());
+
+ string fieldColor = Form1->optionsconf->Sections["Appearance"]["FieldColor"];
+ if (fieldColor == "")
+ attribs->lookupFieldColor = clBlue;
+ else attribs->lookupFieldColor = StrToInt((AnsiString)fieldColor.c_str());
+
+ string autoVSColor = Form1->optionsconf->Sections["Appearance"]["AutoVSColor"];
+ if (autoVSColor == "")
+ attribs->markCurrentVerse = true;
+ else attribs->markCurrentVerse = (atoi(autoVSColor.c_str())) ? true : false;
+}
+
+
+void TRxRichEditX::recalcAppearance() {
+
+ char buf[4096];
+
+ getDisplayPrefs(&dispAttribs, module /*, type.c_str()*/);
+
+ Color = dispAttribs.backColor;
+ Font->Name = dispAttribs.fontName;
+ Font->Size = dispAttribs.fontSize;
+
+ RTFHeadMargin = "{\\cf1\\pard}";
+ RTFVerseMarkPost = "}";
+ RTFVersePost = " }";
+
+ buildRTFHeader();
+
+ // build headers with proportional font sizes to single user selected
+ // font size.
+ double fontBase = dispAttribs.fontSize;
+ fontBase /= 4.0;
+
+ sprintf(buf,
+ "{\\fs%d \\par }}",
+ (int)(fontBase * 8));
+ RTFTrailer = buf;
+
+ const char *chap = _tr("Chapter");
+ sprintf(buf,
+ "\\pard \\qc\\nowidctlpar{\\f1\\cf7\\fs%d\\b %s ",
+ (int)(fontBase * 10), chap);
+ RTFChapterMarkPre = buf;
+
+ sprintf(buf,
+ "\\par\\fs%d\\par}",
+ (int)(fontBase * 4));
+ RTFChapterMarkPost = buf;
+
+ sprintf(buf,
+ "{\\fs%d\\cf1\\b ",
+ (int)(fontBase * 7));
+ RTFHeadingPre = buf;
+ RTFHeadingPost = "}";
+ sprintf(buf,
+ "{\\fs%d\\cf1\\super ",
+ (int)(fontBase * 7));
+ RTFVerseMarkPre = buf;
+
+ sprintf(buf,
+ "{\\fs%d\\cf7 ",
+ (int)(fontBase * 8));
+ RTFVersePre = buf;
+}
+
+
+void TRxRichEditX::TColorToRGB(const TColor& color, int& red, int& green, int& blue) {
+ red = (color & 0xFF);
+ green = ((color >> 8) & 0xFF);
+ blue =((color >> 16) & 0xFF);
+}
+
+void TRxRichEditX::buildRTFHeader() {
+ char buf1[1024], buf2[1024];
+ SectionMap::iterator sit;
+ string value;
+ ConfigEntMap::iterator entry;
+ int CurrVSRed, CurrVSGreen, CurrVSBlue, BodyRed, BodyGreen, BodyBlue,
+ VSNumRed, VSNumGreen, VSNumBlue, MorphRed, MorphGreen, MorphBlue,
+ StrongsRed, StrongsGreen, StrongsBlue;
+ TColor CurrVSColor, VSNumColor, BodyColor, MorphColor, StrongsColor;
+
+ sprintf(buf1, "{\\rtf1\\ansi");
+ if (dispAttribs.fontName.Length()) {
+ // Font Table
+ // 0: Text Body
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}" , dispAttribs.fontName.c_str());
+ strcat(buf1, buf2);
+ // 1: Chapter Heading
+ sprintf(buf2, "{\\f1\\froman\\fcharset0\\fprq2 %s;}", dispAttribs.fontName.c_str());
+ strcat(buf1, buf2);
+ // 2: Unknown
+ sprintf(buf2, "{\\f2\\froman\\fcharset0\\fprq2 %s;}", dispAttribs.fontName.c_str());
+ strcat(buf1, buf2);
+ // 3: Unknown
+ sprintf(buf2, "{\\f3\\froman\\fcharset0\\fprq2 %s;}", dispAttribs.fontName.c_str());
+ strcat(buf1, buf2);
+ // 4: Unknown
+ sprintf(buf2, "{\\f4\\froman\\fcharset0\\fprq2 %s;}", dispAttribs.fontName.c_str());
+ strcat(buf1, buf2);
+ // 7, 8: Unknown
+ strcat(buf1, "{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ }
+ else {
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ strcat(buf1, buf2);
+ }
+
+ if ((sit = Form1->optionsconf->Sections.find("Appearance")) != Form1->optionsconf->Sections.end()) {
+ ConfigEntMap &section = (*sit).second;
+
+ CurrVSColor = TColor((((entry = section.find("CurrentVSColor")) != section.end()) ? atoi((*entry).second.c_str()) : 16711680));
+ TColorToRGB(CurrVSColor, CurrVSRed, CurrVSGreen, CurrVSBlue);
+
+ VSNumColor = TColor((((entry = section.find("VSNumberColor")) != section.end()) ? atoi((*entry).second.c_str()) : 0));
+ TColorToRGB(VSNumColor, VSNumRed, VSNumGreen, VSNumBlue);
+
+ StrongsColor = TColor((((entry = section.find("StrongsColor")) != section.end()) ? atoi((*entry).second.c_str()) : 16711935));
+ TColorToRGB(StrongsColor, StrongsRed, StrongsGreen, StrongsBlue);
+
+ MorphColor = TColor((((entry = section.find("MorphColor")) != section.end()) ? atoi((*entry).second.c_str()) : 60534));
+ TColorToRGB(MorphColor, MorphRed, MorphGreen, MorphBlue);
+
+ if (getType() == "Text") {
+ BodyColor = TColor((((entry = section.find("TextFontColor")) != section.end()) ? atoi((*entry).second.c_str()) : 0));
+ TColorToRGB(BodyColor, BodyRed, BodyGreen, BodyBlue);
+ }
+ else if (getType() == "Comment") {
+ BodyColor = TColor((((entry = section.find("CommentFontColor")) != section.end()) ? atoi((*entry).second.c_str()) : 0));
+ TColorToRGB(BodyColor, BodyRed, BodyGreen, BodyBlue);
+ }
+ else if (getType()== "LD") {
+ BodyColor = TColor((((entry = section.find("LDFontColor")) != section.end()) ? atoi((*entry).second.c_str()) : 0));
+ TColorToRGB(BodyColor, BodyRed, BodyGreen, BodyBlue);
+ }
+ else if (getType() == "Popup") {
+ BodyColor = TColor((((entry = section.find("PopupFontColor")) != section.end()) ? atoi((*entry).second.c_str()) : 0));
+ TColorToRGB(BodyColor, BodyRed, BodyGreen, BodyBlue);
+ }
+ else {
+ BodyRed = 0;
+ BodyGreen = 0;
+ BodyBlue = 0;
+ }
+
+ // Color Table:
+ // 1: Verse Number/ Verse info
+ sprintf(buf2, "{\\colortbl;\\red%d\\green%d\\blue%d;" , VSNumRed, VSNumGreen, VSNumBlue);
+ strcat(buf1, buf2);
+ // 2: Current Verse Color
+ sprintf(buf2, "\\red%d\\green%d\\blue%d;", CurrVSRed, CurrVSGreen, CurrVSBlue);
+ strcat(buf1, buf2);
+ // 3: Strong's Def
+ sprintf(buf2, "\\red%d\\green%d\\blue%d;", StrongsRed, StrongsGreen, StrongsBlue);
+ strcat(buf1, buf2);
+ // 4: Strongs' Tense (Morph)
+ sprintf(buf2, "\\red%d\\green%d\\blue%d;", MorphRed, MorphGreen, MorphBlue);
+ strcat(buf1, buf2);
+ // 5: Unknown
+ strcat(buf1, "\\red0\\green0\\blue255;");
+ // 6: Unknown
+ strcat(buf1, "\\red255\\green0\\blue0;");
+ // 7: Verse/Body Text Color
+ sprintf(buf2, "\\red%d\\green%d\\blue%d;}",BodyRed, BodyGreen, BodyBlue);
+ strcat(buf1, buf2);
+ }
+ else {
+ sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;\\red0\\green\\blue0;\\red0\\green\\blue0;\\red0\\green\\blue0;}");
+ strcat(buf1, buf2);
+ }
+ RTFHeader = buf1;
+}
+
+
+AnsiString TRxRichEditX::getType() {
+ AnsiString retVal;
+ if (!strcmp(type.c_str(), "Default")) {
+ if (!strcmp(module->Type(), "Biblical Texts"))
+ retVal = "Text";
+ if ((!strcmp(module->Type(), "Commentaries")) ||
+ (!strcmp(module->Type(), "Generic Books")))
+ retVal = "Comment";
+ if (!strcmp(module->Type(), "Lexicons / Dictionaries"))
+ retVal = "LD";
+ }
+ else retVal = type;
+
+ return retVal;
+}
+
+
+WideString __fastcall TRxRichEditX::GetText() {
+ int MaxLen;
+
+ if (RichEditVersion >= 2) {
+ TGetTextLengthEx TextLenEx;
+ // with TextLenEx do begin
+ TextLenEx.flags = GTL_DEFAULT;
+ TextLenEx.codepage = 1200;
+ MaxLen = Perform(EM_GETTEXTLENGTHEX, (WPARAM)&TextLenEx, 0);
+ }
+ else MaxLen = GetTextLen();
+ wchar_t *buf = new wchar_t [ MaxLen + 2 ];
+ GETTEXTEX params;
+ params.cb = (MaxLen + 1) * sizeof(wchar_t);
+ params.flags = GT_DEFAULT;
+ params.codepage = 1200; //CP_ACP;
+ params.lpDefaultChar = 0;
+ params.lpUsedDefChar = 0;
+
+ LONG lResult;
+ lResult = SendMessage(Handle, EM_GETTEXTEX, (WPARAM)&params, (LPARAM)buf);
+ WideString Result = buf;
+ delete [] buf;
+ return Result;
+}
+
+
+
+
+WideString __fastcall TRxRichEditX::GetTextRange(int StartPos, int EndPos) {
+
+ WideString Result = GetText();
+
+ Result = Result.SubString(StartPos+1, (EndPos - StartPos));
+ return Result;
+}
+
+
+WideString TRxRichEditX::Trim(WideString &src) {
+ WideString Result = src;
+ int length = Result.Length();
+ int start = 1;
+ while (length) {
+ if (Result[length] != ' ')
+ break;
+ Result.SetLength(--length);
+ }
+ while (start < length) {
+ if (Result[start] != ' ')
+ break;
+ start++;
+ }
+ if (start > 1)
+ Result = Result.SubString(start, length - start);
+ return Result;
+}
+
+
+WideString __fastcall TRxRichEditX::WordAtCursor(void) {
+
+ TCharRange Range;
+ WideString Result = "";
+
+ if (HandleAllocated()) {
+ Range.cpMax = SelStart;
+ if (!Range.cpMax)
+ Range.cpMin = 0;
+ else if (SendMessage(Handle, EM_FINDWORDBREAK, WB_ISDELIMITER, Range.cpMax))
+ Range.cpMin = SendMessage(Handle, EM_FINDWORDBREAK, WB_MOVEWORDLEFT, Range.cpMax);
+ else Range.cpMin = SendMessage(Handle, EM_FINDWORDBREAK, WB_LEFT, Range.cpMax);
+ while (SendMessage(Handle, EM_FINDWORDBREAK, WB_ISDELIMITER, Range.cpMin))
+ Range.cpMin++;
+ Range.cpMax = SendMessage(Handle, EM_FINDWORDBREAK, WB_RIGHTBREAK, Range.cpMax);
+ Result = Trim(GetTextRange(Range.cpMin, Range.cpMax));
+ }
+ return Result;
+}
+
diff --git a/apps/windoze/CBuilder5/BibleCS/RxRichEditX.h b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.h
new file mode 100644
index 0000000..9d117fb
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.h
@@ -0,0 +1,100 @@
+#ifndef TRxRichEditX_
+#define TRxRichEditX_
+
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <RxRichEdit.hpp>
+#include <ExtCtrls.hpp>
+#include <swmodule.h>
+#include <listkey.h>
+
+
+struct RTF_FORMAT {
+ AnsiString fontFace; // Font Name
+ int chFontHeadSize; // Chapter Name Heading Size
+ int bkFontHeadSize; // Book Name Heading Size
+ int bodyFontSize; // Body Font Size
+ int vsNumFontSize; // VerseNumbering or Pre/Post-Fix Size
+ bool prChHeadings; // Print Heading
+ bool prBookHeadings; // Print Book Name
+ bool prPreFix; // Print Verse Prefix (James 1:19 KJV)
+ bool prPostFix; // Print Verse Postfix
+ bool prVerseNum; // Print Verse Number
+ bool paragraph; // Print Bible Text as a paragraph rather than seperate lines
+ bool superVSNum; // Verse Numbers superscripted
+};
+
+struct DISP_ATTRIBS {
+ AnsiString fontName; // Font Name (Type Dependant)
+ int fontSize; // Font Size (Type Dependant)
+ bool markCurrentVerse; // whether or not to mark current verse
+ int backColor; // Background Color (Type Dependant)
+ int fontColor; // Foreground Color (Type Dependant)
+ int entryKeyColor; // Verse Number Color (Should be type dependant but isn't yet)
+ int currentVSColor; // Current Verse Color
+ int morphColor; // MorphTags Color
+ int strongsColor; // Strongs Tags Color
+ int lookupFieldColor; // Lookup Key Fields color
+};
+
+/*
+typedef struct {
+ TCharRange chrg;
+ PWideChar lpstrText;
+} TTextRangeW;
+
+*/
+class TRxRichEditX : public TRxRichEdit {
+private:
+ AnsiString GetFormattedBible(SWModule* module);
+ //AnsiString GetFormattedComm(SWModule* module);
+ //AnsiString GetFormattedLD(SWModule* module);
+ //AnsiString GetFormattedBook(SWModule* module);
+ AnsiString ChapterHeading(SWModule* module, int nChapter);
+ AnsiString BookHeading(SWModule* module, AnsiString name);
+ AnsiString PrintEntry(SWModule* module, int nVerse);
+ AnsiString PrintFix(SWModule* module);
+ RTF_FORMAT format_ops;
+ void buildRTFHeader();
+
+public:
+ static char platformID;
+ static void TColorToRGB(const TColor& color, int& red, int& green, int& blue);
+
+ AnsiString RTFHeader;
+ AnsiString RTFHeadMargin;
+ AnsiString RTFTrailer;
+
+ AnsiString RTFChapterMarkPre;
+ AnsiString RTFChapterMarkPost;
+
+ AnsiString RTFHeadingPre;
+ AnsiString RTFHeadingPost;
+
+ AnsiString RTFVerseMarkPre;
+ AnsiString RTFVerseMarkPost;
+
+ AnsiString RTFVersePre;
+ AnsiString RTFVersePost;
+ DISP_ATTRIBS dispAttribs;
+
+ TRxRichEditX(TWinControl *parent);
+ int paintTo(HDC, TRect *size, int margin = 4);
+ void fillWithVerses(SWModule *module, ListKey *verses, bool heading = true, bool verseNum = true, const char* type = "Default", bool stripNewlines = true);
+ void fillWithRTFString(SWModule *module, const char *text, const char *type = "Default");
+ void getDisplayPrefs(DISP_ATTRIBS *attribs, SWModule *module /*,const char *type = "Default"*/);
+ void drawTo(HDC dc) { PaintControls(dc, 0); }
+ void RenderModule(SWModule* module, RTF_FORMAT format);
+ SWModule *module;
+ AnsiString type;
+ void recalcAppearance();
+ AnsiString getType();
+ static WideString Trim(WideString &src);
+ WideString __fastcall GetText();
+ WideString __fastcall GetTextRange(int StartPos, int EndPos);
+ WideString __fastcall WordAtCursor(void);
+};
+
+#endif // TRxRichEditX_
diff --git a/apps/windoze/CBuilder5/BibleCS/SplashPage.cpp b/apps/windoze/CBuilder5/BibleCS/SplashPage.cpp
new file mode 100644
index 0000000..6da6cf3
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/SplashPage.cpp
@@ -0,0 +1,16 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "SplashPage.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TSplashPg *SplashPg;
+//---------------------------------------------------------------------------
+__fastcall TSplashPg::TSplashPg(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/SplashPage.dfm b/apps/windoze/CBuilder5/BibleCS/SplashPage.dfm
new file mode 100644
index 0000000..efb272c
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/SplashPage.dfm
@@ -0,0 +1,4962 @@
+object SplashPg: TSplashPg
+ Left = 429
+ Top = 337
+ BorderIcons = []
+ BorderStyle = bsNone
+ Caption = 'SplashPg'
+ ClientHeight = 150
+ ClientWidth = 350
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 16
+ object Image1: TImage
+ Left = 0
+ Top = 0
+ Width = 350
+ Height = 150
+ Align = alClient
+ Picture.Data = {
+ 07544269746D61709E680200424D9E6802000000000036000000280000005E01
+ 0000960000000100180000000000686802000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00FDE7E6FCE6E6FBE6E5FBE6E5FEE9E7FEE9E7FDE7E6F2DCDBF9E3E2FEE9E7FC
+ E6E5F7E1E0F4E0DEF7E1E0F7E1DFEBD5D4EAD4D2F2DCDBF0DAD9ECD8D7E3CECD
+ E4CECDE6D1D0E4CECDEBD5D4EBD5D4DAC5C4D7C2C1E9D1D0E9D2D1E2CBCBD8C2
+ C0E7D1D1E3CCCBECD5D4E9D2D1D8C1C0DFC7C6E6D0CEE6D0CFE9D1D0EAD4D2D9
+ C3C2DEC6C5DFC9C6EBD4D2EBD4D1E3CBCAEAD2D0E3CCCAE4CDCCE6CFCDE3CBCA
+ E6CFCEDFCAC7E4CECDECD5D5E2CBC9D9C2C1ECD4D4E9D1CFE3CBCADFC5C4DEC4
+ C4E9D0CEDFC6C5DAC1C1DFC5C4E1C9C7E2CAC9E0C6C5E1C7C6E2CAC7E1C7C6DC
+ C3C2D9BFBEE1C6C5E4CBC9EBD0CFF0D7D5E0C5C4EED2D2F5D9D7ECD0CEE6CBCA
+ EDD1D0F2D7D5F0D5D4EACDCCEED2D1F3D6D4EDD0CEEACCCBF0D4D1E3C5C3EED0
+ CFE7CAC7EED0CFEACECCEACECDEBCFCEE1C6C5E0C5C3E7CCCBEDD1D0E9CCCBEC
+ CECDEED1D0ECCECEE9CDCBEFD5D4EFD4D2EED0CFEBCECDEACBCAEED0CFEECFCD
+ EDCECCEBCCCCEFCFCEEDCDCCEACAC9EECECDEBCAC7EFCDCDEECDCBE4C2C1EECD
+ CBECCBC9EECECCEACAC6F0CECDF4D0CFF3D0CEEECCCAF0CECDF0CECDF0CDCCE7
+ C5C3E6C3C3EBC9C7EAC6C5E4C2C0DFBBBADFBAB9EDC9C7EECAC9EEC9C7EECAC7
+ EEC7C6EDC6C5F0CBC9F0CBC9EFCBCAEBC6C5EBC6C4EFCAC7F0CCC9F0CBCAEFC7
+ C5E7C0BEECC2C1E5BEBAE9C0BEE1BAB7E5BFBDEECAC6F2CAC7EAC1BEECC4C2EA
+ C2C0ECC6C4EFCBC9E2BEBBE9C3C1F2CBC9F3CBC9F4CBCAEFC7C4F0C9C6E9C3C1
+ F3CECBF4CDCBEFCAC7F4CFCDEFCECCE2C0BFE6C2C1E6C1BFE7C1C0E7C2C0EAC3
+ C1E7C0BFEEC6C5EBC3C1E6BFBDE4BDBAE9C1C0EDC6C4E2BDBBE9C3C2EDCAC7EB
+ C7C5EAC4C2EAC4C2E5C1BFE4C0BEEBC7C4EECAC9EBC5C3DEB8B6EDC7C5ECC7C5
+ E4C0BFEDC9C6EBC7C5E3C0BEE9C4C2E5C0BFE7C3C1EFCBC9EDCAC7E9C6C4EAC9
+ C6E9C9C6E7C5C4EFCDCBEBC7C5E6C4C2EFCBCAF7D4D2F2CFCDEBCAC7F8D8D6F7
+ D6D4F4D2D1EDCCCCE9C9C7E4C3C2E9C9C7E9C9C6E7C7C6F2D2D0F3D4D1F3D4D2
+ F2D1CFF3D4D1EDCECCECCDCCF2D5D2E6CAC7E2C4C2E9CCCBECCFCDF0D4D2ECCF
+ CDF3D6D4F5D8D8F0D5D4E5CBCAE4C9C9F0D5D5E2C6C5E5CCCAEDD2D2ECD1D0DF
+ C5C3E7CECCE7CDCDDAC1C0DFC5C4EFD8D6ECD4D4EDD6D5F2DAD9F0D9D8EDD6D5
+ EDD5D5E7D0CFEDD5D4EDD5D5E0C9C7EFD9D8EAD2D1DCC5C3E3CDCCEDD6D5EFDA
+ D8ECD6D4F2DBD9ECD6D6EAD2D2EBD4D4F4DEDCEED9D7F2DBDAF6E0DEF2DAD9F3
+ DBDAF2DBDAF0D9D9EED8D7F3DCDBEAD5D5E1CCCCEED9D9EED9D9ECD6D7EAD4D2
+ DFC9C7E6D0D0F8E1E0F2DCDBEFD9D8F3DEDCE4CFCEF0DBDAF7E2E1F2DCDBF2DE
+ DCE5D0CFF7E1E0F9E4E3F0DCDBF2DEDCEBD5D4F5DEDCFBE4E3F6E1DFF0DBDAF4
+ E0DFEFDAD9EAD6D5E2CECDF2DFDEEAD7D6EFDEDCF2E0DFEEDAD9E1CECDE5D1D0
+ E2CECDF2DFDEEBD8D7E1CDCDEDDBDAF2DFDFE0CDCC0000000000000000FDE7E5
+ FDE7E6F9E4E2E4CFCDF3DFDCFDE7E6FCE6E5F6E1DFF8E1E0FDE7E6F9E3E2F4E0
+ DFEFD9D8F5DFDEF3DEDBDBC6C5D7C1C0E9D4D2ECD7D6E9D4D2D7C2C1DCC7C6DA
+ C5C4D8C2C1E6D1D0ECD6D5E7D1D1E5CFCDE9D4D2EFD9D8E9D2D1ECD6D4ECD6D5
+ DFC9C6F0D9D8F0D9D8E9D1D0E0C9C7E5D0CEE1CAC9EAD2D1EDD6D5E5CFCDE0C9
+ C7E7D0D0ECD4D2ECD5D4E4CCCBEAD2D0D2BBBAE3CBCAE6CFCDEBD2D1EDD8D6E6
+ D1CFE2CBCAEDD7D6EAD4D2DEC6C5E7D0CFEAD1D1F2D9D8E1C9C7DBC3C1E6CECE
+ E4CCCADAC2C1E6CECDEDD5D4EED5D4EDD2D2EED5D4EDD4D4EDD2D2EAD0CFE1C7
+ C6E7CECEE4CBC9EED4D2EFD6D4DEC3C2EDD1D0F3D7D6EED2D1EFD5D2ECD0CEE7
+ CCCAE7CCCBE5CAC7E5CAC7F0D4D2EDD0CEECCFCDF0D4D1EACDCBEED1CFEACCCB
+ E3C5C4E0C2C1E1C4C2F2D6D5EFD4D4ECD1D0F0D5D5F2D5D5EDD0CFE9CBC9EDCF
+ CEECCDCDE6CAC9E3C6C5E9CDCCEACDCCDFC2C1DEC0BFE4C5C4E6C7C6EBCCCCEB
+ CCCBEFD0CEEECFCEEECDCDEFCFCDE4C3C2E7C7C5EECDCCEAC7C6EBC9C6EAC9C6
+ EDCBCAECCBCAEECDCBF2CFCDF0CECCECC9C7F0CDCCF3D0CEEFCDCBEBC9C7EAC6
+ C5EDCBC9EECBCBEECAC9E9C5C4E2BFBDEBC6C5ECC7C6EAC5C4EBC7C5EAC3C3E6
+ C0C0E7C0BEE9C3C2EBC5C4E7C3C1E7C2C1EEC9C7EFC9C7EFCAC7ECC4C2E9C0BE
+ E6BDBBECC3C1F2C7C5F3CAC7ECC7C5ECC9C6ECC5C2EDC3C2EFC7C4EDC5C3ECC5
+ C3F2CCCAE5C1BFE5BFBEEFC7C5F2C9C7EFC6C3ECC2C0E9C0BEE1BAB9ECC6C4EF
+ CAC7EEC6C5F4D0CEF0CFCDECCAC7E6C2C0F0CBC9F0CAC9ECC5C4ECC5C3E7C0BE
+ ECC4C2ECC4C2ECC4C2EBC3C1EAC3C0EBC5C3DFB9B8E7C4C2ECC9C6ECC7C5E4BF
+ BDE4C0BDDFB9B8DCB7B5D9B5B4E3BFBBEAC4C2E6C0BFEBC5C4E9C4C3E4C0BEED
+ C9C6E9C6C4E3BFBEE9C6C3EAC5C3ECC6C4F4CFCDF3D0CEF0CECCF0CFCDF4D0CF
+ F0CDCBF0CDCBECC9C6E5C2C0DEBBB9F4D2D0F2CFCDE4C2C0F4D4D1F5D5D4F5D5
+ D4F3D2D1F2D1CFEFCFCEEECECDEACBCAE4C5C4E9CAC9EDCDCBEACAC9E5C6C4EF
+ D0CEE3C4C3DCBEBDE6C9C7E5C7C5E1C4C3ECCFCEEACDCCF2D5D2DCC0BEF0D5D2
+ F3D7D7F4D7D7F3D7D7EFD4D2F2D7D6ECD0D0F2D6D6F3D8D6F3D9D8F0D7D6EED4
+ D2F2D8D7E7CECDEFD6D6F2D9D9E7D0D0E7CECEEDD4D4EFD8D8EDD5D4EDD5D5EB
+ D4D2EDD6D5EED8D8ECD6D5F2DAD9EDD8D6DFC9C7E3CECCEFDAD8F4DEDEEDD6D5
+ ECD5D4E3CCCBE2CBCADFC9C7E5D0CFEDD7D6F2DBDAF2DBDAEDD7D6ECD5D4EFD8
+ D8F2DBDAE7D1D0F2DBDAEED9D9EED9D9F3DEDEF3DFDEF0DBDAF3DEDCF4DFDEF7
+ E1E0F9E3E2F0DAD9F0DAD9EED8D7D9C4C3E9D2D1F6E0DFEFDAD8E9D2D1D4BFBE
+ E4CFCEECD7D6F0DCDBE7D1D1DEC7C6F6DEDCF6DFDEEDD9D8F3DFDEF8E4E3F0DB
+ DAE9D5D4E7D4D2F0DBDAECD8D7E5D2D1EDD9D9F4E1E0ECD9D8E7D5D4F3E0DFF7
+ E3E2F2DFDFE4D4D2F8E4E3F6E3E2EFDCDB0000000000000000D9C4C4DBC6C5D5
+ C1BFC6B3B1C6B2B0D1BDBAE0CBCADCC7C6D0B9B8E7D4D2DECAC7DAC4C3D0BBBA
+ E5CFCDEED8D8DFC9C7D2BEBDE3CDCCECD8D7ECD7D6E3CDCCECD6D5E9D5D2E5D0
+ CFE5D0CFEBD5D4E4CECDE9D2D1ECD6D5EBD5D2E4CDCCE7D0CFE2CCCBD4BEBDE7
+ D0CFECD5D4E2CCCBE9D1D0EFD9D7E5CFCDE9D1D0EAD2D1E2CBCAE4CDCBEBD4D2
+ EED7D6ECD5D4EED8D6F3DAD9ECD5D4F0D8D7E4CBCAEAD1D1EFD9D8EDD8D6EAD4
+ D1EED8D7ECD6D6E5CFCEE3CCCBE6D0CEF2D9D8E7D0CFE0C7C7E6CECDEAD0D0DB
+ C2C2E6CECDEBD2D0EDD2D2E7CFCDE7CFCDEDD2D2EED4D2E7CDCCE2C9C7EDD2D1
+ DCC1C0E2C6C5E2C7C5D8BFBDE0C5C3EFD4D2EDD1D0EED2D1F0D6D5F3D7D5F2D6
+ D5F2D6D5F0D4D1F4D8D6F3D6D4EED1CFF2D5D4F0D4D2F2D6D4EFD2D1ECCFCED7
+ BAB8D4B7B6EDD1D0F2D5D4F2D7D6F3D8D7F3D7D6F2D5D4F0D4D2EECECDEECFCE
+ ECCFCDEED1D0EFD4D2F2D6D5EDD1D0EED1D0EBCDCDE5C6C5EECECEEBCBCAEACA
+ C9E6C5C5EBCAC9ECCCCBD9B8B7D8B7B6E1BFBEEDCBC9ECC9C7EFCBCAF2CFCDEC
+ CBC9ECCBC9F2D0CEF4D0CFEFCCCAF2CFCDEECDCBEDCBCAEECDCCECCBCAECCAC7
+ EDC9C9EFCBCBEEC9C7E3BEBDEAC4C4ECC7C6ECC7C6ECC7C6ECC6C5E4BFBEDEB6
+ B5DAB4B2EAC5C3ECC6C5ECC5C4EEC7C6ECC6C5EDC6C4EFC7C5ECC3C1E9BEBDEF
+ C6C4F2C9C5F2C9C6EFC9C6EECBC9EFC9C7E6BEBBEFC5C4EEC4C3EFC7C5F4CECC
+ EDC7C6E6C0BEF0C7C6F4CAC7EDC2C1DAB1AED9B1AED9B3B2DAB4B3E0B8B6E7C1
+ BFF3CECCEFCECDEDCAC9E1BBB9ECC5C4EFCAC7EFCAC6EFC9C6EAC2C0EFC6C4EC
+ C3C1EFC6C4EFC6C5EFC9C6EEC6C5E3BEBDE7C4C2EEC9C9EECAC7EBC5C3ECC6C5
+ EBC6C4EDC9C6EDC7C5EBC5C2EDC7C5EAC4C3E3BFBDE5C3C1E5C3C0EAC6C5EBC7
+ C6E5C2C0ECC6C5EDC9C6E9C5C2F4CFCDF4D1CFF4D2D0F4D1CFF4D1CFF4CFCDEF
+ CCCAF3CFCDF4D1CFF2CFCDF8D6D4F6D4D1E5C4C2EECDCBF2D0CEF4D4D1F3D2D1
+ EFCFCDEECECCE9C9C6E2C2C1E2C3C2E1C2C1E9CAC7E9C9C7E5C6C4EECFCEEDCE
+ CCF2D4D1F4D5D4F2D4D1F2D6D4F2D5D4F5D8D6F7D9D7E0C2C0F4D6D5F5D9D7F4
+ D8D8F4D8D7F5D9D8F5DAD8F0D5D4EED4D2F2D7D6F5DAD9F3D8D7EFD6D5EAD1CF
+ E9D0CFEED5D5F0D7D7EFD8D7EAD1D2F3D9D9F0D8D7EDD4D4EED7D7EED8D7EDD6
+ D6E1CCCCE3CFCEEFDBD9F0DBDAEAD2D1E5CFCEF0DAD9F4DEDBF3DCDAF0DAD9EC
+ D5D4DEC7C6ECD5D5EDD7D6ECD6D5F3DBDAF3DCDAEAD4D1EAD2D1F2DCDAEED9D9
+ EBD5D6E6D1D1E3CFCFEAD5D5EDD9D8F0DBDBECD8D7F0DAD9F2DBDAF2DCDBF4DF
+ DEECD6D4ECD6D6EED8D7DBC5C4DFC9C7EED9D8EDD9D8ECD6D5E0CBCAE9D4D2F6
+ E0DFF8E2E1F2DBDAE5CECCFBE4E3F9E4E3E9D5D4F2DEDCF6E2E1F2DEDCF2DEDC
+ EEDAD9F8E4E3F7E2E1ECD9D8F5E2E1F6E3E2ECD9D8E0CDCCF7E3E2F9E5E4EFDB
+ DAF3E0DFF9E6E5F4E1E0EEDBDA0000000000000000F4DFDEF6E1DFECD6D5C6B2
+ B0C6B2B0D4C0BEF2DCDAEBD5D4D5C0BFF6E0DFE9D5D2E1CCCBDEC7C6EED8D8F5
+ DFDEE6D0CFDAC5C3DBC6C5EDD8D7EAD5D4E2CDCCE7D4D2E7D2D1E3CDCCDEC9C7
+ D6C1C0D7C1C0DFC7C6E3CDCCD8C2C1D7C0BFD7C0BFE0CAC9D9C2C1E6CFCEEBD5
+ D4E2CBCBECD6D5EDD6D5DFC7C6ECD5D4F0D9D8E6CFCEDEC6C5EED7D6EDD6D5DC
+ C5C4EAD1D0EBD4D2E6CFCEEFD7D6DEC6C4DFC7C6E4CDCCE7D1CFE9D2D1EDD7D7
+ ECD5D4E9D2D1E2CAC9E0CAC9EDD7D6EED7D5E5CECCE0C9C7D6BEBDD4BBBAD9C1
+ C0E6CDCCE3CAC7DAC2C1DAC0BFE7CECDE7CECDDBC1C0D5BBBBE5CBCAE2C6C5E5
+ CBCAECD1D0E5CBCAE7CDCBEACFCFE2C6C5DEC3C1E7CCCBEFD4D2EFD2D0E5CAC7
+ DBC0BFF3D6D5EED1D0EBCECCF0D2D1ECCFCFF2D5D4EED1D0EDCFCED5B7B6D4B7
+ B5E7CBCBEED2D1EDD2D1EED4D2EFD5D4EED4D2E9CBCAE5C7C6ECCDCCEECFCEEE
+ D0D0EED2D1F2D5D4EED2D1F0D4D2EFD2D1EDCECEEFD0CFECCDCCEACAC7EACAC9
+ E5C4C3E6C5C3D8B7B6D8B6B5DFBDBAEAC7C6EECCCBF0CDCBEECBC9F4D0CEF5D4
+ D1F5D1CFF5D2CFF3CECCF4CFCEF3CFCEEFCECDEFCDCDEECDCBEDCBC9EECBCAEF
+ CCCAEECBC9EAC4C3EBC6C5EDC9C6EAC5C4ECC7C5EDC7C6EAC3C2DEB5B4DAB4B2
+ E2BBB9ECC5C3EFCAC7F0CBC9F0CBC9F0CBC9F3CBC9EEC5C3E7BDBAEFC4C2F2C7
+ C5F2C9C6EAC2C1EDCAC9F0CBCAE6BEBBF3C9C6F4CAC7F3CAC7F4CCCAEAC3C1EA
+ C2C0F3CAC7F4CAC7EBC0BFDEB2B1E6BDBAE4BEBADEB7B5D9B3B1E2BBB9F5D0CE
+ F0CFCDEBC6C5E3BEBAEEC6C5EFC9C5EEC6C5EDC5C3ECC4C1EFC5C3EBC2C0EFC5
+ C4ECC4C2EFC7C4ECC6C5E2BEBBE9C4C2EDC9C6ECC7C5E9C2C1E4BEBDE5C0BEEB
+ C6C4EAC4C2E6C2C0EAC5C3EAC4C3E3C0BEDFBDBAE2BFBDE7C4C3EAC6C4E6C2C0
+ EBC5C3EBC5C3E6C2C0EFCCCAF4D1CFF4D0CFF4D0CEF3CFCDF2CECCECC9C6F2CE
+ CCE7C6C4E9C5C3F6D2D1EFCFCDD8B7B5E6C5C3E9C6C5EFCECDEECCCBEECECCEE
+ CECDEFCFCEEECFCEE9CAC9EECECDEDCDCDF2D2D0F0D1CFF2D2D0F3D5D2F2D4D1
+ F2D4D1EDCFCFEFD1D0E9CCCAF3D6D4F3D5D2DBBEBDEACCCAF3D7D5F0D6D4F0D6
+ D4EED2D1EDD1D0EDD2D1EFD5D2F2D7D6F5DBD9F5DBDAF3D8D7ECD1D2E7CECDE7
+ CECDF0D7D7EDD4D4EDD4D2F0D7D7EED7D7E7D1D1E7D2D4EDD8D8EBD6D6E7D4D4
+ E5D0D1F0DCDBF3DEDBEFD9D8E5CECEF4DEDBF4DCDCF3DBDAF3DBDAF4DEDCF3DB
+ DAF4DCDCECD5D5E9D0D0F3DBDAF4DEDEECD5D5E9D2D2ECD7D5EFDAD9EDDAD9E7
+ D5D4E7D5D4DECACAE5D1D2ECD8D8DEC9C7DBC7C6E6D0D0EDD8D7F4DFDCEDD8D7
+ F3DEDBF4DEDCDFC9C7D4BFBDEFD9D8F3DEDCEDD8D7EAD5D4E4CFCEF2DBDAF7E1
+ DFE7D0CFE3CDCBF0DBDAF5E0DFE7D4D2F2DFDEF8E3E2EFDBDAF2DEDCF3DFDEF8
+ E3E2F2DFDEEFDBDAF8E3E2F8E3E2EFDBDAE1CDCDF2DFDEF7E3E2E5D1D0F5E2E1
+ F8E4E3F4E1E0EFDCDB0000000000000000FEE9E7FDE7E5F9E5E4CAB5B4C6B2B0
+ DCC7C6F9E5E3F3DEDCDFCBC9E9D5D2E5D1D0E6D2D1E9D4D1F0DAD9E7D2D1D6C0
+ BFCBB6B5CCB7B6EAD5D4E7D2D1DCC7C6DAC5C4DFCAC9D8C3C2DFCBCAE5D0CFD7
+ C1C0E0CAC9E0CAC9E0C9C7DBC5C4D6C0BFE7D1D0E2CBCAEDD6D5EDD6D5D9C2C1
+ E6CFCEEAD2D1EBD4D1F2DAD9F3DBD9EAD4D1D8C1C0E5CECDE9D1CFDEC6C5D7C0
+ BFD4BEBBDCC4C2EED6D6E3CBCADCC5C3E0CAC9E4CDCCEDD7D6EFD9D8EED8D7ED
+ D7D5ECD5D4E7D1CFEED7D6F2D9D9EDD6D5EDD4D4DBC4C3D9C1C0E7CECEE7CECD
+ E3CBCAE7CDCDE6CDCCE7CDCCE5CCCBDAC0BFDABFBFE2C7C5E2C7C5E4CAC9EFD4
+ D2ECD0CEE9CDCCE4CAC9E4CAC7E4C7C5D7BABAD9BDBBE6CAC9E0C4C3E1C5C3EF
+ D2D0E1C4C2E3C6C4EBCECDE7CCCAF2D4D2EACDCBEBCDCCD7B9B8D5B8B7E6C9C9
+ EDD0CFE9CCCBECD0CFEED4D2F0D6D5EED1D0DFC1C1DEBFBEE2C3C3E2C3C3E7C9
+ C7E3C5C4DBC0BFE7CCCBF0D4D2EFD1D0EECECDE9C9C9E7C7C5ECCCCAEFCFCDF0
+ CFCDD8B7B6D8B6B5E6C3C2EDCAC7ECC9C6F0CBC9F5CFCDF4CECCEECAC7E5C2BF
+ E4C0BEE1BDBBEDCAC7EDCAC7E6C4C3EECDCCEBC9C7E3BFBFEAC6C4EECAC9ECC7
+ C6E6C2C0E7C2C1E7C3C1E6C1BFE9C2C1ECC5C4ECC5C3DEB5B4DBB4B2E9C1BFE9
+ C4C2ECC5C3E6BFBDE0B9B8E0B9B7EBC4C2EBC2C1E0B5B3EFC4C2EFC4C2EEC4C3
+ E6C0BEEAC7C5F0CBC9ECC3C1F0C6C4F0C6C4EAC2C0E4BDBAE2BBBAE0B8B6EDC3
+ C2F0C6C4EDC2C0ECC0BFEFC6C3EFC9C6E3BDB9D9B1B0DCB6B4F4D0CEF4D1CFEF
+ CAC7E4BEBAEAC3C0EBC3C1EAC2BFE9C0BEEDC4C3EBC2BFE0B7B5E9BFBDECC4C2
+ ECC4C3E7C1C0DEBAB7E7C3C1EAC5C4E6C2C0E5C0BFE4C0BDE2BEBBE0BAB8E0BB
+ B9E0BAB9E7C2C0E7C3C2DFBAB9E1BEBBDEBAB8DAB7B6DAB5B4D9B5B3DFB8B7E5
+ C0BEE1BDBADCB9B7E1C0BDE7C4C2E0BAB8EBC6C4EECAC7EFCCCAEECBC9E6C3C1
+ DEBAB8EFCCCBF3D0CED8B7B5DAB8B7E5C3C2EACAC7EECDCCF0CFCEEFCFCDEECF
+ CDEACAC7E2C3C1EDCDCDEBCCCBEDCFCEE7C9C7EDCECCF2D4D1E7CAC9E6C9C6E2
+ C4C3E4C6C4E7CAC9E6C7C6E7CAC7D6B8B6E2C4C3F2D5D4EFD2D1E2C6C5DFC4C2
+ E6CBCAEACECDEBD0CFF0D6D4F0D6D5EED5D4DFC4C4ECD1D0EDD2D1DEC4C4DFC6
+ C5DAC1C1E5CCCCE7D1D0E9D4D2E1CBCBE5CFCFEDD8D7EEDADAEEDADAECD8D8EF
+ DCDAF3DEDCEAD4D2DEC6C6E9D2D1E0C9C7E3CBCAEDD5D5EAD1D0EFD8D7EBD2D2
+ D8C1BFD4BDBBDCC5C4EDD8D7E0CACAE2CDCDE3CECDEDD9D9ECD9D9ECD8D9EBD7
+ D7E3CFD0E5D2D2EBD8D8E5D1D0EDD9D8F0DADAEED9D7E1CBCAD7C1C0E9D2D1F4
+ DEDCEFD9D8D9C3C1E5CFCEE6D0CFE6D0CFD5BFBEDAC5C4D9C3C1EED7D6F3DCDB
+ E7D2D1F0DBDAF2DEDCF3DFDEF6E1E0F6E2E1EAD6D5E6D2D1EDD9D9F0DCDBECD7
+ D6EFDBDAF7E3E2EFDCDBEFDBDAE5D2D2F9E5E4F3E0DFDAC6C5E7D5D4F0DFDEE7
+ D5D4EFDEDC0000000000000000F2DEDBF9E4E2F9E5E4CCB6B5C6B2B0E3CDCCFB
+ E5E4EAD4D2C7B4B3CDB7B6D0BABAD0BBBADFC9C7F5DFDEF4DFDED2BEBDC9B4B3
+ CAB5B4EDD8D7EED9D8D5C0C0CCB7B5CEB9B9D4BFBED5C0C0EAD5D4E6D0CFD5BF
+ BECDB7B6CFBAB9CEB8B7CEB8B7E6D0CFE2CCCBE9D2D0D5BFBECEB8B7D0B9B8CF
+ B9B8DAC4C4EDD8D7F0DAD8DBC5C4CEB7B6D2BDBBD9C2C1D0B9B8CDB6B5CFB7B6
+ E4CCCAE2CAC9CDB5B4CEB7B5DAC3C2E4CECDE9D2D1EDD7D6EDD7D7EDD5D4EDD6
+ D5EBD4D2EDD7D6EED7D6EED7D6EFD7D7EDD5D5E1C9C9E6CECCD4BBBAD0B8B6D4
+ BBBAD5BBBACFB5B5CFB5B5D5B9B9D5BAB8CFB5B4CFB5B4D1B7B5E7CCCBE0C5C3
+ D2B8B6D2B7B6D9BFBDDABFBDCFB3B2D1B4B3D5B8B7D4B8B6DCC1BFD6BAB8CFB3
+ B2D1B5B4DBBFBFE1C4C3D7BBBAD7B9B9E4C7C6D8BBBAD7B9B9D9BEBDDFC3C1D8
+ BBBBDBC0BFEDD1D0EFD5D4E9CFCED7BAB9D9BBBBEDCECEEDCDCCDBBDBDD8BAB9
+ D8BAB9D8BBBADFC2C1E9CBCAE6C9C6D8B8B7D8B7B6DAB9B9F0CFCEF0CFCED9B8
+ B6D8B5B4E0BEBDE6C2C1E1BDBAEBC6C3EFC9C6EAC4C2D8B4B1D5B2B13E343388
+ 7270DAB6B5E0BDBAEAC5C5EFCDCCEBCAC7EAC6C5ECC9C6E7C3C2DAB7B5DBB6B6
+ DFB9B7DEB8B6DCB7B6DCB7B5E7C0BFE9C1BFDFB7B5DBB3B2EAC1BFE9C1BFE0B9
+ B7DAB3B2DBB5B3DBB5B3DAB4B2E4BAB9EABFBDEEC3C0DCB2B0DBB1B0DBB5B3DB
+ B7B5E0B9B7EAC0BEE5BBB9EBC1BFDFB4B3DBB2B0DBB4B3DAB2B1DEB4B2F4C9C7
+ F0C5C3ECC1BEE3BAB7DBB5B3D9B2B0D9B1AEDCB6B4F4CFCCF4D0CEEECAC6E0B7
+ B6DBB3B2D9B2B0D9B1B0E2B8B6EFC5C3E1B7B5D9B0ADDCB3B2E9C0BEDFB8B6DA
+ B4B2DAB6B3DCB7B6D9B5B2DAB5B3DFB9B8E9C4C2DFB9B8D9B3B1D9B3B2E4BEBD
+ EAC3C3EAC4C3E7C4C2E0BDBBD8B4B3D7B4B1D7B3B1D7B2AED7B2B0E5C0BEDBB7
+ B5D4B1AED6B3B1DCB7B5D2ADABD2ADABD4B0ADEECAC7F0CDCBD6B2B0D1ADACDB
+ B9B8E7C5C4D4B1B0D4B2B1D8B6B4D9B7B6E7C6C4F3D2D0EACAC7D7B7B6D2B4B2
+ D2B4B2EACBCAECCDCBEED0CEE5C7C6F0D2D0F2D4D2E6C9C6D4B6B4D1B3B1D8BA
+ B8D7B9B8CEB0ADCEB0AED6B8B6E7CBC9E5C9C7D4B7B6D2B7B6D4B7B6D1B7B5D6
+ BBB9E5CCCBEED5D2E9CECED1B7B6D0B6B5DFC5C3EDD2D2DEC3C3D6BDBAD7BFBF
+ DBC3C4DBC5C4DBC5C5D7C2C3DBC6C7DECBCAE4D0D0E9D5D6E2CECEEAD5D6E9D4
+ D2D5BFBED2BDBDD5BFBED2BDBDD6C0BEEDD6D5EAD4D1ECD5D5D6C0BED1BBBBD2
+ BDBDD5BFBDD6C1C2DCC7C5E3CECDE4CFCDECD7D7EBD8D8ECD9D9E0CDCCD6C4C3
+ D8C5C4D9C7C6D9C6C6E4D0CFE9D4D2D1BBBACBB5B4CBB5B4D5BFBFF3DEDBF5DF
+ DEF4DEDEF7E2E0E9D4D2CEB8B8CDB7B6CFBAB9C9B3B2D1BAB9F5E0DFF8E3E2F4
+ E0DFF4E0DFF3DFDEF0DBDAD6C2C1CBB7B6CCB8B7CDB9B8CCB8B7D2C1BFEDD8D8
+ DCCAC9CAB7B6CDB9B8D7C4C3E5D1D0CEBAB9CBB8B7CEB9B9CCB8B7D9C6C5E7D5
+ D40000000000000000F3DEDCF9E5E3ECD7D6C6B2B0C6B2B0D9C3C1F6E0DFE2CC
+ CBC7B4B2DCC7C6F0DBDAEBD5D4D8C2C0F6E0DFF3DEDCCFB9B8C9B4B3CAB5B4E3
+ CDCBEDD7D6CEB9B8CCB7B5E5D0CEEAD5D4E5CFCEE7D1D0D7C0BFCDB7B5D4BEBD
+ E9D2D1D9C3C2CDB6B5D7C1C0DBC6C5D8C2C2CFBAB9D2BEBED8C2C1D0BAB9CFB9
+ B9EED8D7F0D9D9D0BAB9D0B9B9ECD6D6EFD8D8D2BEBDCFB9B8E0C9C9E6D0CFDF
+ C7C7CDB6B5D0BAB8E5CFCEECD4D4E7D1D0EDD7D6EDD6D5EDD5D4EDD7D5E6D0CE
+ ECD4D4ECD4D2E9D1D1EFD8D7EDD5D2E2CBC9D8C0BFCFB6B6D4BABAE7CECDDBC2
+ C2CFB5B5D0B6B5DCC3C2DFC4C3D0B6B5CFB5B4DFC4C3E3C7C7D5BAB9D1B6B4D6
+ BAB9DFC4C3D6BAB9CFB3B1DFC2C1EACDCBD5B8B6DABEBBE5C9C7D1B5B5DABEBE
+ E6CBCBDFC3C2D7BBB9DABEBDEBCECDDEC0BFD7BABADBBFBEE5C7C6DBBEBDD7BA
+ B9DCBFBEE9CDCCDCC1BFD7BDBBDEC2C1EED1D0E6C7C6D7B8B7E2C2C2DEBFBED8
+ BAB9D8BBBAE6C9C7EDCFCEDABDBBD8B8B7E0C0BEEDCCCBE9C6C4D8B6B4D6B4B2
+ ECC7C6F0CDCBDCB7B6DFB9B7F2CBC9DEB7B5D5AEADD9B5B2CFB1AE413837D8B4
+ B2D9B5B3E5C2C1EFCDCCEDCCCAEDCAC9EFCAC9E1BDBBDAB6B5E2BDBBEEC9C6E7
+ C1C0DCB6B5DFB7B6EAC3C2E9C0BFDEB5B4DBB2B1EFC5C4EDC5C4DAB4B3DBB4B2
+ EBC2C1E4BDBADBB4B2DBB1B0E7BDB9E6BAB8DBB0ACE3B8B6EEC5C4E3BEBBDBB5
+ B3E5BBB9EEC3C1E5BBB9D9B0ADE6BEBBF3CBC9E0B7B5D9B1ADF0C4C2EFC3C1DA
+ AEACD9B0ADD9B3B1E0B7B5EAC0BEEBC4C2F0CDCBF3CECCECC6C3E7BFBDE6BEBB
+ D9B2B0DAB2AEE7BDBAE7BDBBDBB1AEDEB3B1EAC0BEE6BFBDD9B3B1DBB6B4E0BA
+ B8E1BBBADAB6B4DAB6B4E3BFBEE9C4C2DAB5B3D9B3B1DFB7B6E7C2C0E9C3C1E9
+ C3C2E6C2C1DCB8B6D8B3B1DCB7B6E7C1C0E6C0BEDAB6B4DAB7B4D6B4B2D4B0AD
+ E5C0BEF2CDCBD5B1AED2AEABDEB9B7F0CCCAECC9C6D2ADABD2AEADE3C0BEDFBA
+ B9D2B1AED8B5B4E6C5C3E1C0BED9B7B6F0D0CFEBCBC9D4B4B2D2B3B2D2B4B2E0
+ C0BFECCDCCE4C6C5DFC1C0EED0CFEDCECDD2B5B4CFB1AED7B8B7F2D4D1E0C1BF
+ CEB0ADCEB0AEE1C2C0E5C7C5D6B8B6D0B4B4E2C6C5EFD4D2D7BEBBD1B7B6DBC1
+ C1F2D8D6ECD1D1D1B7B5D2B7B6E2C7C5E7CDCBD2B9B7D6BFBEDCC4C4D9C2C2D9
+ C3C3E5D0D0DAC5C5D6C3C3DBC7C7E5D1D0EDD9D8DEC9C7E9D4D2DBC4C4D2BDBD
+ DEC7C6F0DAD9DEC7C6D2BDBDE7D1D1F2DBD9EAD2D2D2BDBDE0C9C9E1CCCBDAC5
+ C3D5C0BED8C3C3E5D0CFE9D4D4EDD9D9EDDAD9E4D1D1D6C3C2D9C5C5E6D4D2ED
+ DAD9EAD7D7E6D2D2ECD8D7E6D0CFCBB5B4CDB7B6ECD6D6F8E1E0EED8D7F4DEDC
+ F2DCDBD1BDBBCBB6B4D1BDBBF4DEDCD2BBBACAB5B4D4BFBEF3DFDEF0DBDAF6E1
+ E0F3DFDED7C3C2CBB6B5CFBBBAF2DFDEE9D5D4CAB7B6CDB8B7F6E2E1E1CCCCCA
+ B7B6D4C1C1E7D5D4D4C1C1CAB7B6D0BDBBE5D2D1D4C2C1CAB7B6D4C1C1000000
+ 0000000000EDD8D6F3DFDCD1BDBDC7B4B2CCB6B5CEB8B7ECD6D5DAC4C2CAB5B4
+ D0BABAF4DFDEF7E1E0F7E1DFF7E1DFEFD9D8CDB7B5CEB8B7CAB5B4DBC5C4EAD5
+ D2D0BAB9CDB8B7D7C2C1DEC7C6E0CBCADFCAC7D0BAB9CCB7B5DAC5C4E0CAC9E0
+ CAC9CFB9B8D5BFBFD4BFBFD2BEBDD0BBBBE9D2D1E7D1D0D8C2C1CFB9B9E3CECC
+ ECD6D6CFB9B8D0BAB9E6CFCFEBD6D4D9C3C2CFB9B8EAD4D2ECD5D4E2CCCACFB9
+ B8D5BEBEE1CBCAE9D1D1E2CBC9E3CCCCE5CECDE5CFCDE6CFCEDAC3C3E9D1CFEA
+ D2D0E3CBCAECD4D1E7D0CEDBC4C3D1B9B9CFB6B6E7CFCEEED6D5EED5D4D0B7B6
+ D1B8B6E9CFCDE7CDCBD2B8B8D2B8B6EFD5D4EDD1D1DBC0C0D1B6B4DEC3C2ECCF
+ CFDEC1C0D2B6B4EBCFCDF3D6D5E4C7C5E5CAC9EFD2D1D6BBB9DAC0BEE0C5C3DA
+ BEBEDFC3C2E2C5C4EED2D0E0C3C2D7BBBAEBCDCDEDD0CFEACDCCD7BAB9DBBFBE
+ E9CBCADEC1C0D7BBBAE3C9C6EACDCCD8BBBAD8B9B8EECDCDE1C0BFE2C3C1D8B9
+ B8DCBFBEEFD1D0E2C2C1D8B8B7E9C7C6ECCCCAEDCBC9D7B5B2D6B3B1ECC7C6F3
+ CECCE9C4C2EBC5C3F6CFCDDEB7B5D5ADABE2BBB9F2CECC443A3A897372D9B3B2
+ E6C2C1EDCAC9E6C3C2E4C1C0EDC9C7E5C0BEDAB6B5E7C1C0ECC6C5EDC5C4DCB6
+ B5E3BDBBEDC5C3EBC2C1E0B7B5DBB2B1EDC4C2EEC5C3DAB3B2DFB6B4F0C7C6EB
+ C2C0C4A19EDAB1ADEBC0BDE4B7B5DBB0ADD4AEACF2C7C5EFC9C6DBB5B3E1B7B6
+ EABFBDDEB4B2D9B1ADF0C7C5F4CCCAEBC2BFDAB1AEDFB4B1DCB0ADD9ACAAE0B5
+ B3EEC5C3F5CCC9EFC5C3E2BBB8F2CDCBF2CDCAEDC5C3E9C0BEEEC4C2DCB4B2DB
+ B2B0E6BBB9E1B7B5E4B9B7EAC0BDECC1C0E5BDBAD9B3B1E3BEBBE6C1BFEAC5C3
+ DCB7B5DCB6B5E7C2C0E5C0BFDAB4B2D8B2B0E2BAB9E6C1BFE6C1BFE5C0BEE9C2
+ C1E0B9B7D7B2B0DAB4B2E9C1C0EBC5C4EAC5C3E4C1C0D7B4B2D5B1AEDAB6B3E6
+ C1BFD7B3B0D2ADABF0CBC9EFCAC9F5CFCDD2ADABD5B2B1F4D0CEECCAC7D4B2B0
+ DAB8B6EECCCBF0CFCDEFCECCF4D2D0EBCBC9D2B3B1D4B4B2D2B3B2D6B7B6F2D2
+ D1EBCDCBE5C6C5EED1CFE9CBC9D0B2B0CEB0ADE6C6C5F6D6D4F7D8D6CEB0ADD1
+ B3B2DEC0BEE1C2C1CEB1B0D2B5B5EFD5D2F0D6D5EACFCED2B9B8D9C0C0EED5D4
+ E4CACAD2B8B7DCC2C2EFD6D5ECD1D0D4BABADEC6C5E6D0CFDCC5C5DCC6C5EDD9
+ D8E4D0CFD6C3C2E0CBCBEAD5D5EED9D9E3CECDE7D2D1D2BDBBD2BDBDECD4D5EB
+ D4D2E5CECDD2BDBBDBC4C4EDD7D6DEC6C5D2BDBBF0DBD9EDD8D7EFDAD9D5BFBE
+ D5C1C0EAD5D5ECD8D8ECD8D9ECD8D8DECBCAD6C3C2DAC6C6E6D4D2ECD9D9EAD7
+ D6E7D4D4ECD8D7F0DCDBCBB5B4CFB7B7EED8D7F4DEDCE7D1D0E5D0CFF0DAD9CC
+ B6B5CBB6B5CEB8B7E4CDCCD5C0BECBB6B5CDB7B6EFDAD9E7D2D1F4E0DFF7E2E1
+ D4C0BFCBB6B5E2CDCCF9E5E4F8E3E2CFBBBACAB7B6F7E3E2F2DEDCCAB7B6E7D5
+ D4F4E1E1D0BDBBCCB8B7E2CECDEFDBDAECD9D8CAB7B6E5D4D200000000000000
+ 00ECD7D5DECAC9C6B4B2DFCAC7ECD7D5C9B5B4D9C3C2E5D1D0CEB9B7CFB9B8E5
+ CECDF3DEDBF7E1DFF4DFDCDCC6C5CCB6B4E3CDCCD2BDBAD2BBBAE7D1D1DCC6C5
+ CFBAB9D4BFBED8C3C2E0CBCAE4CECDD2BDBBCCB7B5E9D4D2EDD7D7E9D2D1D0BB
+ BBDEC9C7E1CCCBD1BDBBD8C3C3EAD5D4E4CFCDE2CCCBD1BBBAD5BFBFEBD4D2CF
+ B9B8D2BBBAEAD2D1E6D0CFD8C1C1CFB9B7EBD2D2ECD4D2E2CCCACFB9B8DEC7C5
+ E7D1D1ECD5D6E5CFCEEAD2D1EDD6D5EDD5D4E9D1D0E6CFCEF2D9D8EED7D6E4CD
+ CBEAD1D0E9D0CFD9C0C0D2BAB9CFB7B6E6CECCEED5D4EED6D5D0B8B6D1B8B6E5
+ CCCAE3C9C7D2B8B6D2B8B6EFD5D4EDD2D1E9CDCCD1B6B5E2C6C5EBCFCDEBCECD
+ D4B8B7DFC3C2EFD4D1EDD1CFEFD4D1EED4D1D6B9B8D6BAB9DCC0BEDABFBFEACE
+ CDDEC2C0E6CAC9D8BBBAD7BAB9EACECDEDCFCEECCFCED8BAB9DCBEBEEECFCFE0
+ C2C0D7BAB9EACDCDEACECDD8BAB9DBBDBBEFCECDE9C7C6EFCECDD9B9B7DABDBB
+ F0D4D1EACDCBD8B9B8EFCECDF2CFCEF3CFCDD8B5B3D6B3B2EECAC9F3CECCE5C0
+ BEEAC4C1F5CDCBDCB4B3D5ACABE5BEBDF2CDCB463C3C8A7473D7B3B1E5C1BFEF
+ CBC96052512B24242B24235A4C4BDBB6B5E0B9B8ECC5C4967D7D403534E3BDBA
+ EDC4C3EAC0BFDFB5B4DBB2B1EABFBDEEC4C2DBB3B1E1B9B7F3CAC7F0C6C58E74
+ 72584746E3B6B4E0B2B0DBB0AD2C2322B29290EFC7C5DBB5B3E0B6B4E9BDBADF
+ B3B1DAB0AD604F4E463A3AE2B8B6DAB0ADDCB0AD000000DBAEACE6BAB8E7BFBD
+ 141111907574DCB5B3907B791411115F4E4D947978796261130F0F584746C19C
+ 9AC19B992B23224336362B22228D7372DAB3B1E1BBB9E4BFBDCBA9A7130F0F3F
+ 3434EAC4C2EAC3C0130F0F705B59CCA9A6EBC4C2CDACA92B23237965635C4D4C
+ 897170D9B2B1E0BAB7EBC5C3EBC7C5EBC9C6DBB6B5D6B1B0E9C3C1EFCAC7DBB7
+ B4D2AEABF2CCCAEEC9C6F7D1CFD4B1B0D7B5B3F4D0CEF3CFCDD7B4B3D6B4B2E2
+ C1BFEBCAC7F0CFCEF4D4D1E5C4C2D6B5B4EDCCCBDABAB8D7B8B6F3D5D2F4D6D4
+ F3D5D4F3D5D4EECFCED1B2B1CFB0AEEDCECCF7D7D5F9DAD9CFB1AED7B8B6EDCE
+ CDE1C3C2CFB2B0D5B8B6EDD2D1EDD2D1EBD1D0D2B9B9DBC1C0ECD1D1E2C7C6D4
+ BABAE1C6C6EAD1D0EAD2D1D5BDBADEC6C5E3CDCDE9D4D5EBD7D7EDD8D9E1CECD
+ D5C1C0DEC9C9ECD6D5ECD7D7DBC6C5E7D0CFD2BDBBD2BDBBEDD6D5E0C9C7DEC7
+ C5D2BDBBDAC3C2EBD4D2DCC5C4D2BBBBECD5D5E6D0D0ECD7D7D5BFBED5C0BFDC
+ C9C7E3CFCEE7D5D5E7D5D5DAC7C7D6C3C2D6C4C3DECAC9E7D4D4DAC5C5D8C5C5
+ E7D5D5EFDBDBCFB9B8D1BAB9F3DEDBF7E1E0F0DAD9EAD4D2EFD9D8CBB5B4CBB6
+ B5E1CBCAF3DEDCEED9D8CBB6B5CDB7B6EFDAD9E4D0CEF0DCDBF5E1E0D0BDBBCB
+ B6B5DAC6C5F7E2E1F7E2E1CEB9B9CAB7B6D9C5C4DBC7C6CAB7B6D9C5C4EAD7D6
+ CDBAB9CCB8B7D9C5C4EFDBDAF2DFDECAB7B6E7D5D40000000000000000D1BEBD
+ C6B3B2C6B2B1E9D4D2E7D2D1C7B4B2C7B4B2D7C2C1CBB6B5CEB8B7D4BFBECDB7
+ B5E0CAC9E3CDCCC9B3B2CAB3B3EFD8D8D8C1C0CAB4B3E1CBCAD7C1C0CCB7B5DF
+ CAC7DCC6C5CEB8B7DFC7C6DFC9C6CCB7B5DAC5C4ECD7D7DFCAC9CFBBBADCC9C7
+ E6D1D1CFBBB9D5C0BFE7D1D0E6D0CFE2CDCCD1BBBAD4BEBEECD5D5D4BEBDD2BB
+ BAEAD1D1E4CDCDD1BAB9CFB8B7E3CCCBECD4D2D2BBBBCFB9B7D8C1C0E6D0CFEB
+ D5D5E0CBCBEAD4D2EDD6D6E9D2D1DBC4C3D8C0C0EDD4D5EDD4D4E4CCCBEAD1D0
+ ECD4D2E0C7C6D5BDBBCFB6B6D7BFBEEED7D5EED6D4CFB6B5D0B6B6EAD0CFE7CD
+ CCD0B5B4D0B5B5E5CBC9EACFCDE1C5C5D2B7B6D6BAB9E6CBCADCC1C0D2B7B6DC
+ BFBFDABEBDD5B9B9E2C5C4E1C5C3D5B9B8D8BBBBDABFBED7BAB9D8BDBBDABEBD
+ DBBFBED7BAB9D7BBBAD9BEBDDEC0BFDBBEBDD7B9B8DBBEBDEACBCAD9BABAD7BA
+ B8ECCFCEE9CCCBD8BDBBDBBEBDEECFCDEACAC9EECCCBD8B8B7D9B9B8EECFCDDF
+ C1C0D6B7B6E2C2C0F0CECDE7C4C3D6B3B2D6B2B1DFBBBAECC7C5E1BBB9DFB9B7
+ F0CAC7E0B8B6D5ADABD8B2AEE2BDBA937B7B3E3434D7B3B1DFB9B77B67661411
+ 11E6C2C1E3C0BF292222594949E1BAB9EDC6C5927979403534DFB7B5ECC3C1EB
+ C1BFDFB5B3DBB2B1ECC0BFEBC0BEDBB2B0DCB4B2EFC5C3E9BEBB403434000000
+ C79F9DE0B3B1DBAEAC0000002C2323E9BFBEDBB5B3EABFBDECBFBDDCB2B0DAB0
+ AD4438385E4D4C745F5DDAAEACE1B3B114100FA88684E2B7B5E1B8B6000000C0
+ 9A98A58786000000D1AEADECC2C0CCA6A52A22213F3332DBB0AD8E7271292120
+ 594746E3B7B5C6A19F000000A58786E0B9B7E4BEBB8E7574292221BF9C9A5F4F
+ 4EB19392282120D8B0AC937979ECC4C2B395935F4E4EEAC2C0E0B9B7130F0FD9
+ B2AEDBB5B4D9B4B3E0BDBAE0BDB9D7B2B0D6B0ADE9C3C1EEC7C7D8B4B2D5B0AD
+ E5C0BEEFCAC7F2CDCAD4B0AED4B1AEF4D0CEEFCCCAD4B1AEDCBAB8E0BEBBD5B4
+ B3E3C1BFECCAC9D2B2B0D6B5B3F3D2D1E2C2C1D4B5B4E4C6C4F3D5D2F3D5D2F3
+ D5D2F0D2D0D7B8B7D1B2B1DABBB9F0D0CFEED0CED1B2B1D5B7B5F7D8D6EACCCB
+ D1B5B4D2B7B6EACECDF0D6D5E2C7C6D4B9B9DFC5C4EFD5D5E2C9C9D6BEBED8C0
+ BFE1C9C7E0C9C9D7C1C0D7C2C2DBC5C6E7D4D4EAD6D6EAD4D5D8C3C2D5C0BFE2
+ CDCDEFDAD9EED8D8DFC9C7ECD5D4D7C0BFD2BBBBE6D0CEE6CFCEDBC4C3D2BBBA
+ DAC3C2EDD6D5D6C0BED2BDBDE7D2D0EAD4D2E0CBCAD5BFBED5BFBEE4CFCEEBD7
+ D6E9D5D5E6D2D2DAC6C5D6C3C2D6C4C3E0CDCDE6D2D1D5C2C1D6C3C3E7D5D5E3
+ D0CFD2BFBED4C0BEF3DEDEF4E0DFF0DBDAEBD6D4EED9D8D1BEBBCDB8B7D2BEBE
+ F4DFDEE1CCCBCDB9B7CFBBBAE7D4D2DAC6C5E7D4D2E9D6D5D1BEBDCDB9B8D7C3
+ C2F2DFDEEEDAD9CFBDBBCFBBBBE9D6D5DBC9C7CDB9B8DCCAC9F2DFDED7C4C3CE
+ BABAE2CECDEDDAD9D8C4C3CCB9B8EBD6D50000000000000000CFBAB8C6B3B1C6
+ B3B2F6E1DFF4E0DECFBAB9C7B4B2CFBAB9CBB6B5CAB6B4CFB9B8C9B4B3D9C3C1
+ D0BABAC9B3B2CEB8B6F6E0DEE2CBCACAB4B3D2BDBAD2BBBACAB4B3D4BFBECFB8
+ B7CBB5B3E0CAC9EBD4D2CDB7B6CEB8B7D8C2C1D0BBBACFBAB9D4BFBED8C3C2CF
+ BAB9D1BBBAE1CACAE0C9C9DAC5C4CFB9B8D1BBBAECD5D5E5CFCFD1BAB9D4BEBE
+ D6C0BFCFB8B8CFB8B7E6D0CEE5CFCDCFB9B8CFB8B8D5BEBEDFC9C9EAD4D5DCC6
+ C6E6D1D1EBD5D5ECD5D5DEC6C6E0CAC9EDD7D6E5CECEE4CCCBEDD4D4E7CFCDEE
+ D6D4E7D0CED2BAB8D0B7B7D6BEBED6BEBDCFB6B6D1B8B8EBD1D0D7BEBBD1B7B6
+ D1B7B7D6BBB9D8BEBBD4B8B8D2B8B7D4B8B6D8BDBBD4B8B7D2B7B5D6B9B9D6B9
+ B9D6B9B8E1C4C3DBBFBED5B9B8DCC0BFDEC1C0D6B9B8D5B9B8DABFBEF0D4D2ED
+ CFCED8BDBDD8BBBADABEBDD9BDBBD9BBBAE0C2C1E0C1C0D7B9B8D7B9B8EBCCCB
+ E7CAC7D8BBB9D9BDBADEC0BFDABBBADEBDBDD8B6B5D8B7B6E4C3C1DABAB8D6B7
+ B6DABBB8E9C9C6DEBBB8D6B4B2D8B5B3EAC5C4F2CCCBEFCAC9E9C2C0F3CCCAF2
+ CAC7D9B2B0D7B1AEDAB2B08972703E3434DAB6B4E3BDBB413736433939EAC5C4
+ E1BEBB8B7473000000DFB8B7E7BFBEC3A29F130F0FDCB4B2E2B8B6E1B6B5DCB3
+ B1DCB2B0EFC3C1EBBEBDDFB4B2DBB3B1E1B7B5DFB5B3000000896E6C433736E9
+ BAB88C6F6E000000725B5AA78886E0B9B7ECC1BFE1B5B3DBAEADDBAEAC453938
+ 987E7DC19C99DAAEACE0B2B04638388E716FDEB3B0DCB3B0000000DAB0ADDAB3
+ B1000000EEC6C4ECC1BFEABEBB715B5A3F3332DEB1AEEABDB9000000896C6BDC
+ B0ACE6BBB9443938403535DBB4B2C19F9D2922223F3433D8B1AEB0908D413534
+ 3E3332D8B0ACDEB6B4947A79EAC3C1EAC3C0EAC3C0745F5E000000D8B1B0DAB4
+ B2D7B4B1D9B5B3D9B4B2D6B1ADD6B0ADDBB5B3D9B4B3D5B0ADD5AEADD6B1B0D9
+ B4B2D8B5B3D5B1AED4B1AEDBB8B7E0BDBAD4B1AED7B5B3D8B6B4D4B1B0D5B4B3
+ D5B3B1D2B2B0D8B6B5EFCFCEDCBDBBD5B6B5D9BBB9ECCDCDE9CAC9EDCECDEECF
+ CEDEBFBDD5B6B4D4B5B3DBBBB9DBBBBAD2B3B2D6B8B6EDD1CFD7BBB9D4B8B7D6
+ BAB9E6CBCBE7CDCCD6BBB9D5BAB9DAC0BFE7CECDD9BFBED7BEBED7BFBFE4CCCC
+ E9D1D1E0CBCBD7C3C3D9C4C3E9D2D2E9D4D2DAC4C3D6C0C0D8C2C2E6CFCFEED7
+ D7E7D1D0DAC3C3EDD5D5E0C7C6D4BDBBD6BFBDD5BEBBD2BDBAD2BBBAD7C0BFDB
+ C4C3D2BBBBD4BDBDEDD7D6EED9D8D9C3C2D5BFBED6C0C0E5D1D1EBD7D6EAD5D5
+ EBD7D6E4D0D0DAC6C6D8C4C4DAC7C7DBCAC9D7C3C3DECBCBE5D2D2DBC9C9D4C0
+ BFD6C1C1F0DCDBF2DEDCF2DEDCF2DEDCF3DFDEF0DCDBCFBAB9CFBBBAD5C1C0CF
+ BBBBCFBDBBE3CFCEF2DEDCECD8D7EBD8D7F0DCDBE6D2D2D5C1C1D2BFBFDAC7C7
+ DAC7C6D4C1C0E6D4D2ECD9D9D2C1BFCEBABADBCAC9EEDBDAEDDAD9D5C3C2D5C3
+ C2D4C2C2CFBDBBCEB9B9F2DEDC0000000000000000DBC7C6D9C3C2E4CFCDF3DF
+ DEEED9D8EED9D9E1CCCBE1CCCBD6C1C0D9C3C2E3CDCCEBD4D2F7E1DFEFDAD9D1
+ BBBAE5D0CEEED7D6E3CCCBD7C1C0D6C0BFEDD7D6E6D0CFE5CFCEE0C9C7DCC5C4
+ EFD8D7F2DBD9DCC6C4D5BFBEE1CBCAE1CCCBD5C0BFDFCAC9DBC6C4CFB8B8D6C0
+ BFECD6D6E0CAC9E6D0CFCFB9B8D1BAB9EDD7D6EBD5D4DEC7C6DBC6C5DCC5C4DC
+ C5C4DCC4C3EDD6D5ECD4D4E1CAC9DCC5C5E1CACAEAD4D2EAD4D4DAC4C3E4CECE
+ E9D4D2E9D4D2E1CAC9E6CECDECD4D4DCC5C5EAD2D1EED6D6E7CECEEBD2D1EED5
+ D5E4CCCADBC2C2E1C7C7E9D0CEE2CAC9E4CCCBEDD2D2DEC3C3DBC1C1E0C6C5E5
+ CCCAE7CDCCDFC4C3D8BDBDE0C5C3E6CBCADEC1C1DABFBEDFC3C1DFC3C2E6CAC9
+ ECCFCFEBCECDE6CAC9ECCFCEEDD1D0E6C9C7DBBFBEE2C4C2F0D2D1EED4D1E9CD
+ CCDFC2C1DFC2C1E5C7C7ECCDCCECCECDEDCECDE1C3C2E5C5C5EDCDCCEBCCCBD8
+ BAB9DBBEBDE9CCCBE1C2C1EBCAC9D8B7B6D8B5B3EDCBC9EAC9C6E0C0BEEED0CE
+ EBCBC9E6C5C4E7C5C3EAC7C6EAC6C4EECAC7EECAC6E3BEBBF2CBC9F2CAC9E6BF
+ BDE1B9B7E1BAB8C6A5A32B2423ECC9C5EEC9C7443A39453A3AEFC9C7E3BFBEE2
+ BDBB000000937B79EBC3C2EAC1BF000000EAC0BFEBC1BFEBC0BEE9BEBBEDC2C0
+ F0C4C2EEC1BFEEC2C0EDC3C1ECC2C0B1908D000000C7A19E7C6463B592914538
+ 37423534E4B6B45E4D4CEFCAC7F0C6C4EBBEBBE2B4B2E5B9B79A7E7D604F4EE2
+ B7B5DEB2AEEABBB9634F4E634F4EEFC3C1EBC0BE433736937876E7C1BF2C2525
+ D4B0AEF4C9C5F3C7C4917472140F0FEABBB9EFC1BF0000008B6E6DE0B3B1EBC0
+ BD977D7B000000E2BAB9423736AD8E8D413635E6BEBAE7BEBA2921213F3333DA
+ B2B0E0B8B6947C7ACEABA9EBC3C0967C7B000000917675E2BAB8E7C2C0E7C4C1
+ EAC4C2E7C1BFE6C0BEE4BDBBEEC7C5EAC4C2DAB4B2E0BAB8E7C1BFEDC6C4E7C2
+ C1DCB8B7DFBAB8EDCAC7EFCBC9E9C3C2E4C1C0E3C0BEDFBEBBE2C0BEDEBBB9D8
+ B7B6E3C2C1E9C9C7E5C7C5DBBDBBEACCCAEFD0CEE9C9C7EDCCCCE6C7C6E7C7C6
+ EACAC9DABAB9DABBB9E6C7C5DFC1BFD9BBB9E6CAC9E2C5C4DCC0BFEDD2D1EED2
+ D2EDD1D0E9CDCDE0C5C3EACECDEDD4D2E9CFCEE0C7C7E3CBCBEAD1D2EAD4D4EC
+ D7D6DEC9C9DBC5C5E5CFCFE5CFCFDCC6C6DCC7C6E0C9C7EDD7D7EDD5D5E9D1D1
+ ECD2D2EDD5D4DFC6C6DBC3C2DAC2C2D6BFBED7BFBFDEC5C5E5CDCDE7D0D0E3CC
+ CBE6D0CFF0D9D9F0DBD9E7D4D1DEC9C7E2CDCDEDD9D8EDD9D9ECD7D7EDD9D9E4
+ CFCFE1CDCCE3CFCFE0CCCDE0CCCCDFCCCCE3D0D0DECCCCE4D1D1DAC7C6DCC9C7
+ EDD9D8ECD8D7E6D1D1E4D0CFEBD7D6F4E0DFEAD5D4D9C5C5E1CDCCDFCBC9E1CC
+ CCEBD6D5F2DEDCF2DFDEF0DEDCF4E1E0EEDAD9D9C6C5D7C4C3ECD8D7EEDBDAE6
+ D4D2DCCACAE7D4D4E5D2D1D2C0C0E9D6D5EDDAD9EBD8D7DBCAC9E4D1D0ECD8D7
+ EFDCDAEED9D8F4E0DF0000000000000000D2BFBEE4CECDE7D4D2E5D0CEEBD6D5
+ F0DCDBECD8D6D4C0BED5C1C0E4CDCCE4CECDF2DCDBF7E1E0F8E2E0EFDAD9F5DF
+ DEEAD4D2F4DEDCF3DEDCD9C2C1EBD4D2F2DBDAF0D9D7E6CFCEE1CBC9EDD7D5F2
+ DAD9E9D2D1E6D0D0EED9D8EFDAD9EED8D8ECD6D6E4CECDCFB9B8D1BDBBEDD8D7
+ E6D0D0E5CFCFCFB8B7D2BDBBEBD5D4EBD5D4EBD4D4E6D0D0E4CDCBE5CECDEAD1
+ D1ECD5D4E9D1D1ECD6D5EDD7D6ECD5D5EDD7D7E9D1D1DBC3C3DAC4C3E5D0D0E6
+ D0CFDBC5C4E4CDCDF0D8D8E2CBCBE7D0D0EAD2D1DEC6C5E2CAC9EBD2D0E2CAC7
+ EAD2D0EAD1D0EAD1D0E3CCCAE5CDCCEAD1CFE3CAC7E4CCCAE7CDCCEAD0CFEBD1
+ CFE9CDCDE3C7C5E7CCCBE9CDCCE2C5C4E3C9C6DCC1C0DABFBEDFC3C1E1C4C3E2
+ C5C4E7CBCAE2C5C5E5C7C6E3C6C5DEC0BFDEC1C0E9CBC9EACDCCECD0CEE5C9C7
+ EACDCCEED0CFEECFCEEED0CEEECFCEEDCECDEECECDEECDCDECCDCBD9B9B8DABA
+ BAE9CBCAECCFCDEDCECDD7B6B4DAB8B6E9C6C4EAC7C5E4C2C0EFCFCDE5C6C4E3
+ C2C1EECDCAEECCCAE6C2C0EAC4C1F0CBC9EBC5C2EFCAC7F3CBC7EFC7C5EFC9C6
+ EFC7C5F0C9C6000000EFCBC9EFCAC9967F7D141111F0CAC9EDC6C4F0CBC90000
+ 00977E7DB49595EEC5C3000000EEC4C2EABFBEE9BEBDE6BAB8ECC0BFEBBDBBE4
+ B6B4EBBEBBEEC3C0EFC5C37C6464151111EFC3C1EFC3C0463938151111977976
+ EDBEBDB797957E6968F3C7C5F3C3C1F2C3C1F3C6C39A7E7C2D2525F4C7C5E9BA
+ B7F2C2BF9A7B792D2424F5C9C6F3C7C4473A3A9A7F7EF4CDCA7F6B697C6564F3
+ C7C4F5C7C4CEA6A4000000EBBBB9EFBFBD453737604D4CEABDB9EABEBB977D7C
+ 000000EBC2C0443838CEAAA7000000EAC0BEEAC0BD8D7270433737E6BDBADEB6
+ B4EAC1BF7A6463CDA9A6000000604F4EE9C0BFE2BBBAEAC5C3EEC7C5E9C1C0EC
+ C3C1EFC9C6EFC9C5F4CDCBF6CFCDF4CDCBF6CFCCF4CDCBF5CFCCF3CECCEDC9C6
+ EBC7C5EECAC7F0CECCF2CFCDF2CFCDF4D1CFF4D1D0F0CECDF2D0CEF3D1CFF2D0
+ CFEDCDCCEECECCF3D2D0F3D4D2F3D4D2F3D2D1F3D2D0F2D2D0F2D2D0F7D6D4F4
+ D5D2EDCDCBF5D6D4F7D8D6F3D5D4EFD2D1EBCFCEEED2D1F2D5D4E6CBC9EACECD
+ EED2D2EED4D1ECD1D0EED5D4EDD5D4EBD2D1EFD8D7EBD5D5E7D2D0ECD6D6ECD6
+ D5EAD4D4EBD4D4EFD7D7EDD7D6ECD5D5EAD2D2EFD8D7EFD8D7EAD1D1EFD7D7F3
+ DADAF0D8D7F2D9D8F2D9D8E6CECEE9D1D0F3DADAF0D9D7EFD8D7F2DADAF0D9D9
+ F0D9D9F0D9D9F0DBD9EDD9D8EBD6D6EDDAD9EEDADAEDD9D9EDDAD9EAD6D5EAD7
+ D5EDDAD9EBD8D8EAD6D6E6D4D2E6D5D4E3D1D0EAD8D8EAD6D6E4D0CFEAD6D5E6
+ D2D1E3CFCEE0CBCBE9D5D5EED9D8E7D2D1E1CBCBEFDBDAF3DFDEECD8D8E9D4D2
+ F4E0DFF2DEDCECD9D8F6E2E1F2DFDED7C3C3E6D2D2F2DFDEEDDADAF0DEDCECD8
+ D7F0DCDCF3E0DFECD8D8F2DFDEEFDCDBE3D0CFDAC7C6F4E1E0F0DEDCE5D2D1E0
+ CDCBEBD6D50000000000000000DEC9C9F2DEDCF5E0DFECD7D6E9D5D2F2DEDCF6
+ E1DFE7D2D1D7C2C1D9C4C3DCC7C6EED8D8F2DEDCF4DFDEF4DFDCF8E1E0F2DCDA
+ F7E0DFF7E0DEDBC5C4DBC5C4F0DAD9F0D8D7E7D0D0D1BBB9EED7D5F2DAD9EED8
+ D7EAD2D1EFD9D9EFD9D9E7D2D1ECD5D5E7D2D1D1BDBBCFB8B7E4CFCEEAD2D2D1
+ BDBBCFB8B8D7C1C0EAD5D2EBD6D4EBD5D2EAD2D2E0C9C7DEC7C5E7D0CFE4CCCB
+ DEC6C6EBD4D4E9D1D1ECD4D5EBD4D4EAD2D2E3CCCCE0CAC9E7D1D0E6CFCED7C1
+ BFDAC3C2E7D0CFDBC4C2D6BFBEE1CACAD9C1C1E0C7C6E7CFCDE3CBCAE4CCCBE2
+ C9C6E7CECCE2CAC7E6CDCCE7CFCEE3CAC7E7CFCDE5CDCBE7CDCCEACFCEE6CCCB
+ E4C9C7E6CBCAE4C7C6E4C9C6EBCFCEE5C9C7E4C7C6E7CCCBE7CBC9EACDCCE9CD
+ CCE4C7C6EDD0CEEBCDCCEBCDCCEDCFCEEED0CFEED0CEEBCECEE4C7C6E5C9C7EC
+ CECDEBCDCCEECFCEEDCECDE9C9C9EBCCCBEACAC9E9C9C7DBBAB9D8B8B7DABBB9
+ E5C6C5D8BAB9D6B6B5DBBBB9EBC7C6E9C4C2E5C1BFEFCDCAEECDCBDFC0BEE7C5
+ C4F0CDCBEAC5C3E6C2C0ECC6C4EBC5C2EFC9C5F0C9C6ECC5C2EFC7C5ECC3C1EF
+ C5C4000000EEC6C5EDC7C6EAC4C2141111B59795EBC3C1D2AEAE000000CAA6A5
+ 7C6564D0ABA9141110907574AE8E8DE6BAB9E4B8B6ECC0BEE7B9B7E3B4B2E6B8
+ B6EEC1BFF0C4C2443736453838EFC1BFE2B6B3937473000000CEA4A3EDBEBBF0
+ C3C1463A3AF0C5C2F0C1BFF0C1BFF0C3C1EEC2BF000000F3C6C3EFC0BF7D6463
+ 9878762C2322B2908DE3B7B42B2222957978EAC2BFEBC2C05B4948CEA6A4F2C3
+ C1F0C2BF000000EDBEBAEBBAB8B48E8C141110E9BDBAE6BBB97B65642C2323E4
+ BAB7AB8B89433837000000E9BEBBEBC0BEAD8C8A141110EBC2BFE2B9B7E4BAB8
+ 443838957B792C2323ECC2C0AD8E8DC2A19EDFB9B7E9C2BFDFB6B5DBB4B2E5BE
+ BBE2BDB9ECC6C3F5CECBF0C9C6ECC5C3E6C0BEEAC4C2F2CBCAEECAC7E9C3C2EB
+ C7C5E9C5C3EDCAC9EBC9C6F0CDCCF4D1CEF2D0CEEFCFCEEFCFCDF2D2D0EFD0CE
+ EACAC9EFD0CEF4D2D0F2D2D0EECFCEEECFCDEECECDEFCFCDF3D4D1F2D2D0E9CA
+ C7F3D5D2F4D6D4EDD1CFE2C5C3D8BBBAE2C4C3E5C9C7DCC1C0DCC1C0E2C7C5E6
+ CBCAE0C7C6EBD2D1ECD4D2EDD6D6F0D9D8EED7D6EFD8D7EED8D7EDD7D6ECD6D4
+ EDD6D5EFD8D7EFD8D7EDD6D6ECD5D4F0D9D7EED6D6E7D0D0EFD7D6F3D9D8F3DA
+ D9F3DAD9F0D8D7E1C9C9E4CDCBE9D2D0D6BFBED7BFBFDFC9C7E4CDCDE6CFCFE5
+ CFCEE1CCCCDFCBCADCC7C7EAD5D5ECD7D6EDD9D9EDD9D9E7D4D4E6D4D2ECD8D7
+ EBD8D8E6D5D4E7D5D5E5D2D2DECBCBDECBCBD8C4C4DAC7C6E7D5D2EAD6D5E3D0
+ CFDFCBCAEDD9D8EFDBDAE5D0D0E2CDCDE7D4D2F2DEDCEDD9D8E5D1D0F2DEDCEF
+ DBDAE0CDCCF2DFDEE2CFCDD5C1C0E6D2D1F0DEDCE4D0CFCEBABADAC7C7F0DEDC
+ F0DCDBE6D4D2F2DFDEEAD7D6E1CDCCD2C1C0EFDAD9E5D0CECDB8B7CEB9B8EFDB
+ D90000000000000000E0CBCAEFDAD9EED8D7E5D0CEE1CDCBEFDAD9F3DFDCE6D2
+ D0E4CECDDEC9C7F0DAD9F4DFDEF2DEDCEFDAD9E6D0CFF0DAD8DBC6C4E4CECCF6
+ E0DFE5CFCDE0CAC9F2DCDAF2DBDAEED8D7CEB8B7E9D1D0EFD8D7E6CFCEE7D1D0
+ EDD6D7EAD4D2E7D2D0EAD4D1E4CECCD6C0BFD1BBBAD1BAB9D1BDBBCFB9B8D4BE
+ BDDAC5C4E6D0D0E6D0D0E0CAC9E7D1CFE6CFCEE5CFCDECD5D4E5CFCDDEC7C6E9
+ D1D1E3CCCCE7D1D0EDD4D4EDD5D4ECD4D4E0C9C7EBD4D2E6CFCFD7BFBEDBC4C4
+ E5CCCCDAC3C2E1CAC9E4CDCCDCC4C4E9D1D0E7D0CFE1C9C7E4CCCBE6CDCBE5CC
+ CBEAD0CFE7CECCECD1D0E6CDCBE6CDCBE4CCCAEACFCEEDD1D1EBD0CFEACECDEB
+ CFCDE7CDCBE7CCCBEBD0CEE5C9C7E1C5C3E1C4C3E6CAC9EBCECCEACCCBEDCECE
+ E9CCCAEECFCEEDCECDEFD1D0EFD1CFEFD1D0ECCDCDDEBFBEE2C4C3E9CBCAE5C6
+ C5E9CAC9E4C5C3E1C1C0EDCDCBEECECDEFCECDEDCBCAD7B5B3D7B5B4D8B6B5D6
+ B6B4DBBEBBE1C0BFE4C3C1E9C4C2E4BEBBEFCAC7EECBC9E5C3C1DCBAB7EBC9C5
+ EECAC7EBC5C3EAC4C3EAC3C0EFC9C6EFC7C5EEC6C4EFC6C4B394924539391411
+ 11443938463B3AECC7C6CDABA9453A39987F7D625251987F7DEEC4C3D4AEAD14
+ 1111B49492B49392000000B59492EFC2C0F0C4C2EFC1BFE9B9B6E5B4B2E7B9B6
+ EFC2C0000000957976F0C2BFE9BBB8947574000000EBB9B7EBBAB8E7B9B6B091
+ 8D7B6462EEBEBDEEBFBDD0A8A6927574151111987D7BEFC0BED1A6A4140F0FB6
+ 918E7E66645F4D4B151111EFC3C0EDC5C2F3CAC6ECBFBB7C63627E65647E6563
+ 140F0F967674ECBBB8E9B8B59679765F4C4B947976453A39D2ACA9EABFBBE7BD
+ BA443838141010ECC0BDEABEBAE6BAB8000000EBC1BEE1B7B6AB8C89423736EA
+ BFBD604E4E987E7C141111AB8E8DE9C2C0ECC4C2E5BBB9E4BBB9ECC4C3E4BEBA
+ EBC5C2EBC3C1EBC4C1EEC5C3E0B9B6DEB7B5E5C1C0E5C0BEDFBAB8DCB8B6DCB9
+ B8E6C3C1D9B6B5E1BFBEE9C6C4E7C6C5DFC0BEDFC0BEE5C5C4E2C3C2D9BAB9DC
+ BBBAE0C0BEDEBEBBDBBBBBDCBDBBE5C6C5DFBEBBE3C2C0E0C0BEDFBFBDE3C5C3
+ EACCCAF2D2D0E7CBCADABEBBEBCDCCECCFCEE4C7C6DCC0BFE3C9C7E7CECDE3CB
+ CAEDD6D5ECD4D4E5CFCDEDD5D5E5CDCDE6CECDECD5D4EAD2D2E7D0CFE5CDCCE9
+ D0CEE7CFCDE2CBC9E4CCCBEED6D4EFD6D5E9D1CFE9D1D0E6CDCDE5CCCCE5CDCC
+ EBD2D2DAC2C1E4CCCBEDD6D6DEC6C5DAC3C2E3CCCBE4CDCCE7D1D1E1CBCBE3CE
+ CDE1CCCCDCC7C7E4CECEE3CECEE1CDCCEAD6D5DFCACAE0CCCCE2CFCEE3D1D1E3
+ D0D1E3D0D1E5D2D2DECBCBD8C4C4D4C1C0D5C1C0E9D5D4EBD7D7DCCAC9E1CCCC
+ EEDAD9F0DCDBEED9D9E9D4D2E6D2D2E9D6D5EBD7D6DFCBC9EFDCDBF2DEDBEFDB
+ DAF3E0DFE7D4D2E6D2D2E1CDCCD5C2C1CFBBBACEBABAD8C5C5F0DEDCF0DCDBE4
+ D0D0EEDBDAE7D4D4E5D2D1DBC7C6DBC7C6CEB9B8CAB7B5CFBAB9F2DFDC000000
+ 0000000000F5DFDFF2DCDBF2DEDBEFDAD9E5D0CFF0DBDAEFDAD9EBD6D5E1CCCA
+ D4C0BFE3CDCCF2DEDBF4DFDEF3DFDEF2DEDBF7E1E0E4CDCCE7D2D1F5DFDEE9D4
+ D1E5CFCDE5CFCDF4DEDCEED7D6D6BFBEEBD5D2E6D0CED8C0BFDAC4C4E4CECEE3
+ CECDE0C9C7E0CAC9DCC5C5D5BFBED5BFBEDAC4C4D6C0BFDBC5C4E7D1D0E4CECD
+ E7D1D0E9D2D2E2CBCAEBD4D2E6CFCEE4CECEECD5D5E9D2D0E4CECEE9D2D1EDD7
+ D6EED8D7EED7D7EED7D7EED7D6E6CFCFEED7D6F0D9D8EED7D7EDD6D5EED6D5DB
+ C2C1EED5D4EAD1D0E1C7C6ECD2D1EAD1D0E7D0CEE6CDCCE3C9C6E4CAC9E9CDCC
+ E1C6C4E6CCCAE9CECCE4C9C6E4C9C7E7CECCEFD4D2EED2D1EBCFCDEBCFCEE7CC
+ CAE9CDCCEDCFCEE7CBC9EACDCCE2C5C3EBCCCBEBCCCBEFD0CFEED0CEE9C9C7EF
+ D0CEE4C4C3EDCDCBEFD0CFF2D1CFEDCDCCDBBDBBE1C2C0E7C9C7E7C9C7EFCFCE
+ EBCCCBE6C5C4EECDCCEECDCBEECCCAEDCAC7E3C0BEE0BBBADFBDBAE0BEBAEECC
+ CBEACAC9EDCCCBE9C5C3E4BEBBF0C9C6EFCAC7ECC7C5E5C2C0EBC7C5EECAC7EA
+ C4C3E5BFBEE7C1C0ECC5C3EAC3C1EAC2C1EFC6C4ECC3C2ECC3C2453A39957B79
+ EFC6C4E7C3C1E4BFBEEBC4C2EBC2C1EBC3C1E6BFBDE3BAB8F0C6C4EABFBDE1B5
+ B3EBBFBDEABFBBEDC0BEF0C3C1F3C4C2F3C3C0ECBDB9EBB8B5E6B6B4B7959300
+ 0000D0A7A5F3C4C1EDBEBB4537371510107B605FEFBEBBF2C2C0ECC2BF443938
+ EABAB7EFBFBDEFBEBDE4B6B3ECC0BEECBEBAE7B7B4E4B2AEE0ACA9F0BEBBF4C6
+ C3EEBFBDF3C3C0F2C6C3F3CCC7F3C9C5F0C1BFF0C1BFF3C3C0F3C2BF43363596
+ 7674EFBDB9F0BFBBF0C0BBEDC0BDECC1BEEFC4C2EFC3C1EBBFBBEBBFBDEBC0BE
+ E9BEBAECBFBBEBBFBBE5B9B7E9BFBBEBC1BEE2B9B7E1B6B4E0B5B3E3B7B5E9BF
+ BBEFC6C4EEC7C5E6BFBDEDC4C2EEC4C2E7BFBBEAC2BFEFC7C5F2CAC6F2C9C6F4
+ CCC9F3CBC9F6CDCBF2CAC6E2BDBAE5C0BEEDC9C6EAC5C4EBC7C5EBC7C5F0CDCC
+ EECBC9EECCCBECCAC9ECCBC9E9C7C6E6C5C4E4C5C3E1C0BFE2C2C1E7C7C6E7C7
+ C6EACBC9E5C5C4EACAC7F0D0CEEECDCCF5D5D1F4D4D1F6D6D4F3D4D0F7D7D5F5
+ D6D4F0D1D0E7CAC7EED0CFEBCDCCECCFCFE4C9C7ECD1D0EBD1D0E0C6C5EBD4D1
+ EAD2D0DEC5C3EDD4D2DAC2C0DAC1C0E7CECEDEC6C5DEC6C5DCC4C2E0C6C5E5CC
+ CBDFC5C3E1C6C5EED5D2EFD6D5EED4D4EED4D4EDD2D2EAD1CFEED5D4F2D9D8E0
+ C6C5EED7D5F2DAD9EDD5D5E6CFCEEBD2D2E3CCCCECD5D4E9D2D1EDD6D7E4CECE
+ DFCBCAECD8D7E9D4D4E9D4D4EBD7D6ECD7D7E9D5D6ECD9D8ECD9D8EBD7D8E9D6
+ D6EBD8D8E9D6D5DFCACAD7C3C2E1CCCBEFDCDAEFDBDAE4D0D0E4D0CFEED9D8F0
+ DCDBF2DEDCECD8D7EBD6D5EBD7D6F2DEDBE0CBCBE9D4D2F0DCDBF4E0DFF2DFDF
+ E6D2D1EBD7D6EBD7D5D8C4C3D4C0BFD7C3C3D9C6C5E5D2D1E2CFCED7C3C3E4D0
+ D0F0DCDBEAD7D5F2DFDCECD7D6D7C2C1CFBABAD1BEBBE7D5D200000000000000
+ 00F4DFDEECD6D5F0DBDAEFDAD9E9D5D2EFDBD9F4DFDEF0DBDAE4CDCCD2BFBDDC
+ C7C6E9D5D2EDD8D6F2DEDBECD7D5F7E1DFE1CBCAECD6D5F2DCDBDFC9C7E1CBCA
+ E0CBC9F0D9D8E6D0CFD9C2C1F2DBDAE2CBCAD4BDBBE1CBC9E6D0D0EAD4D2E9D2
+ D0EDD7D7E7D1D0D8C1C0DFC7C7EAD2D1E5CFCEEBD4D4EAD2D2E1CBC9EAD4D2EB
+ D6D4E0CAC9E6D0CFE4CDCCE0CAC7E6D0CFE7D1D1E1CBCBE3CCCCE6D0D0E9D1D1
+ E9D1D1EED6D6E9D1D0E7D0CFEED7D6EED8D7EBD2D4EDD5D4E6CDCCDEC4C4EFD7
+ D6EED6D5E2CAC9EAD1CFEAD1D0E5CDCBEAD1CFEAD0CFE5CBCAE9CECDE3C9C6E4
+ CAC7E9CDCBE9CDCCE5CBC9DBC0BEEDD0CFEDD1D0E4C9C6EACFCEE6CCCBEBCECD
+ ECD0CFEDCFCFEDCFCEEBCDCCF0D2D1ECCDCCF2D1D0EDCDCCE9CAC9E9C9C7DABA
+ B9E5C6C4E9CAC7F2D1CFF0D0CFE2C3C1DBBDBBE3C4C2E6C7C6EFCFCEEBCBCAE6
+ C6C4EACAC7E9C7C5ECCAC7EBC7C5ECC7C5EFCCCAEFCCCAEDCAC9EECCCAE7C6C5
+ EFCFCDECCAC7E2BFBDEDC6C3ECC5C2E0B9B7DBB7B5DFBDB9E9C5C2E4BFBDDEB8
+ B6DFB8B6E2BAB9E1B9B7E1B9B7EAC1BEE7BEBDE6BEBD9479795E4D4CEFC5C3ED
+ C5C3E5C0BEEBC5C3EEC6C4F0C7C4EFC7C4EAC1BFF3CAC7F3C7C4ECBFBDEFC3C0
+ EFC2C0EDBFBEF0C2C0F3C3C0F3C2C0F0BFBDF2C0BDEFBEBB7D6463151111F2C3
+ C0F4C4C1EDBFBA1510107E6362453636CFA4A2F2C2BFEFC4C17C6564B18C8AEF
+ BEBBF0C0BEE3B5B2D1A9A6EEC0BDF4C2BFF2BEBAE5B0ACF0BEBBEFC1BEE7B8B5
+ EEBFBBEDC2BFEEC7C4F0C4C1E7B7B5ECBBB9F0C0BEF4C2BF7D6260604B49EEBA
+ B7EAB8B5EBBAB7EABBB8E3B8B5EBBEBBE7BDB9DFB2B0E2B6B3E1B5B3DFB3B1E9
+ BAB7EBBFBBE6BAB7ECC1BFECC1BFEBC0BDE2B7B5E4B8B5E0B4B2E5BBB8EFC7C5
+ EEC6C3E7BFBDEBC1BFEDC3C1E0B6B3E0B7B5E2B9B7ECC3C1EFC5C2ECC3C1EAC0
+ BEF3CAC7EFC9C6E9C2BFEEC7C6F2CCCAEECAC9EDC7C6EFCBCAEECAC9EECCCBEF
+ CDCCF2D0CEECCBCAE9C7C6EBCAC9F0CECDEBCAC9E7C6C4EFCECDF0D0CEEFD0CF
+ EECDCCEECECCF4D4D1F3D1CFF3D2D0F3D4D2EFD0CEE6C6C4EFCFCDF3D2D0E5C6
+ C5E6C7C6EDCECDEDD1CFECD0CFE7CECCEFD7D5EDD5D4E5CDCCF0D8D6EDD4D2ED
+ D4D2F3D9D7ECD2D1ECD1D0EDD4D1E4CBCBE2C9C9EAD1CFEBD1D0E7CDCCE7CDCC
+ E5CCCAE9CECDEBD1D0EAD0CFE9D0CEECD2D1E6CCCCE9D0CEF2D8D7DCC3C2EDD4
+ D2EFD7D7E5CDCDECD2D4EDD6D5ECD2D4EED7D7EED8D8EDD7D7E5D0D0DEC9C9EE
+ D9D8EDD8D7ECD6D6E5D1D0E5D2D1E7D5D6ECD9D8ECD8D8EAD8D7EAD8D7ECD9D9
+ E6D4D4E3CFCEE7D5D2ECD8D8ECD8D8E9D5D4DBC7C6EBD7D6ECD7D7F0DBDBEFDB
+ DAF0DCDBF2DEDCF3DFDEF4E0DFEDD9D8E9D6D5EEDAD9F2DEDCF0DCDBDECBCAE1
+ CDCCEBD7D6E6D2D2E6D2D1F2DEDEE6D2D1EEDBDAECD8D8CFBDBBDCCAC9EBD6D4
+ E5D0CFF3E0DFEFDBD9F0DCDBE6D2D1DECAC9E6D2D10000000000000000FBE5E4
+ F0DBDAF0DBDAF4E0DFF2DEDBEDD7D6F2DEDBECD7D5EDD8D6ECD6D5EFDAD9E0CB
+ C9DCC6C5E0CAC9DEC7C6EFD9D7DBC6C5E6D0CFEED8D7EED8D8E6D0CFEDD7D6F3
+ DEDCE0C9C7E0CBC9F5DEDCF2DBD9EAD4D2E1CBCAEAD5D2EAD4D2EAD4D1F2DADA
+ EFD8D7E6CFCEE2CCCAE3CECCE0CAC9ECD5D4ECD5D6E6D0CFECD5D4ECD4D4DCC4
+ C4E6D0CEE7D0CFE0CAC7E1C9C9E4CECEDBC5C4DFC9C9DEC7C7E5CECDE2CACBE7
+ D0D0E2CBCBE6CECDEED7D6F0D8D8F0D8D8F0D8D7E5CCCBDBC3C2EED6D4F2D8D7
+ EAD0D0E7CFCDEED5D4ECD2D1E7CECDE4CCCBDCC3C1E7CDCCE0C5C4E2C6C5E9CD
+ CCE7CCCBE4C9C6DABFBEEFD4D1EED4D1E5CAC9EBCFCFE2C7C6EACFCDECD0CEE9
+ CDCBE4C6C5E6C9C6E5C7C6E7C9C7EBCCCBE9C9C7E9C9C7E6C7C5DCBDBBE3C3C1
+ E9C7C6EBCAC9EECECCE1C1C0E3C3C3E4C4C3E5C6C5EECECDE9C9C7ECCCCBE7C6
+ C5DFBDBAEAC7C5EDCAC7E6C3C1E1BEBBEAC6C4EFCBC9EECAC9E4C1BFEDCBCAED
+ CCCAE0BEBBEBC5C3E6C0BEE2BAB7E7C0BEEAC5C3ECCBC7ECC9C7E7C3C1E4BEBB
+ E5BEBBE5BBBAE1B9B6E7BFBDEAC0BEEAC0BECDA7A5433736EDC1BFEFC4C2E4BD
+ BBEDC7C5EFC7C5F0C6C4EFC5C4ECC3C1F3CAC6F3C7C4EEC1BFF2C3C1F2C2C0EE
+ BFBDEFBFBDF3C2C0F3C2BFEAB7B5F0BDBAECB9B6463837463938F2C3C0F4C4C1
+ C79D9B000000B8928EB48D8B614C4AF2BFBDF0C3C1EFC4C1453736F2C0BDF3C1
+ BFEDBDB98067657D6463F4C2BFF2BDBAE6B1ADEEBBB8E9BAB7E3B4B1E5B5B3EA
+ BFBBEBC3C1F0C3C1E9B9B6EDBDB9F0BFBBF0BEBA967472443534EAB6B3E0ADAA
+ E5B6B3E1B4B2E3B9B7E9BDB9EBBEBAE9BBB9E7BBB9EABDBAEABBB9E9BAB8EBBF
+ BBE6BAB7EABEBBEBC0BDEABFBBE6B9B6E9BDB9EBBFBDEEC5C2EFC7C5EEC5C3EE
+ C3C1F0C4C2F0C6C4F0C6C4F2C9C5F0C7C4F4CAC7F6CBCAF6CCCAF5CCC9F6CCCA
+ F4CBC9EDC5C4EBC5C2EDC7C5ECC6C5EDC7C7EAC4C3E0BDBAE9C6C5EECCCBF2D0
+ CEF0CFCDE9C7C6ECCACAEFCECCEBC9C7ECCCCAEFCFCDEFD0CEEECECDEBCCCAEB
+ CAC7F3D4D1F3D2D0F3D1CFF2D1CFEBCBC9D7B8B6DFBFBEE9C9C7DEC0BEE3C6C4
+ EDD0CFE9CECCEAD0CEE9D0CFEED6D5EBD2D0E6CECCF0D6D6E6CDCCEDD4D1F3D8
+ D7EDD4D1F2D8D6F3D8D7F0D7D6ECD2D2EFD5D2F2D7D6EED4D2EFD6D4EDD2D1EC
+ D1D0ECD1D0EFD6D5EBD1D0E9D0CEE1C6C6E7CFCEEDD5D2DAC0BFF0D8D7F0D8D7
+ E0C9C7E6CFCEF3DAD9F3D9D9F2DBDAEDD7D8EBD5D4E7D1D1E4CECFEAD5D5E4CF
+ CFEAD5D5E4D0D0E0CCCCE2CFCFE7D5D6EBD7D7E6D4D4E6D5D5E6D5D5E3D0CFE1
+ CCCBE0CBCBE9D5D4EAD6D6E1CCCBD9C4C3E3CECDE3CFCEECD8D7EAD6D5E1CCCB
+ EBD7D5ECD7D6ECD7D7DCC9C7E9D2D2EEDAD9EFDBD9F2DCDBDECBCAE9D6D5F2DF
+ DFF0DEDCEEDAD9F6E1E0F2DFDEF5E2E1F3E0DFD7C3C2F5E0DFF7E2E1F3DEDCF5
+ E0DFEFDBDAEED9D8EED8D7F0DCDAEBD6D50000000000000000FBE5E4ECD6D5EE
+ D8D7F4E0DFEED8D7F4DFDEF4E0DFF2DCDAECD7D5EAD4D2F0DAD9E4CDCCECD7D5
+ EED8D7EFD8D7F6E1DFEFD9D7F0DAD8F0DAD8ECD7D5E9D2D1F4DFDEF6E0DFEED7
+ D6EBD4D2F7E0DFF7E0DEF2DAD9F2DAD9F4DFDEEBD6D4DFC7C7F3DCDBF0D9D9EC
+ D6D5E3CDCCD1BDBBCFB8B7EAD1D1F0D9D8EAD2D2EFD9D7F0D8D8ECD4D4ECD5D5
+ EAD2D1DCC5C5EAD1D1E4CECEE1CACAE6D0D0E4CECEEAD2D2ECD4D4EDD7D6E6CE
+ CEE1CAC9EDD5D4EDD7D6F0D8D7EDD4D4D4BABAD2B9B7E6CCCCF0D6D5EDD2D2EE
+ D5D5EFD6D4EED5D4ECD2D2EAD0CFE3C9C7EAD0CFEACFCDE3C7C5E7CDCBEACECC
+ E6CCCADBC1BFEDD1CFEDD2D1E6CCCBE6CCCBDBC1C0E6CCCBEBD0CEE2C6C4E1C4
+ C2DEC2C0DFC1C0E7C9C7EDCECCEDCECDEFD0CFEECECDEACAC9EFCFCDF0D0CEEE
+ CDCCF3D1CFECCCCAEECDCCE9CAC7ECCCCBEECECCEACAC7EECECBE1C0BED4B2B1
+ D9B8B6EBC9C6E5C3C1D7B3B2DAB7B5EECAC7EFCBC9EAC6C3EECCC9EFCDCBEAC9
+ C6F0CCCAEFCAC6EEC5C2ECC3C1ECC6C3EFCAC7EECBCBE3C0BEDAB5B2DAB2B0DC
+ B4B2DAB3B0DCB3B1E9BFBDEEC3C1EFC3C15F4E4CEBC0BDECC1BFE0B5B3E0B9B7
+ E7C0BEE6BEBAE4B9B7E2B8B5EDC3C2ECC2BFEABEBAEEC0BDF3C3C1F5C4C1F6C5
+ C2F6C5C2F4C2BFEEBBB8F3BFBBEEB9B7000000987B79F3C3C0F4C3C090706E00
+ 0000F4C0BDEEB9B62C2222D4A7A5F2C3C1F2C6C37E63629C7B79F5C2BEF5C4C0
+ F6C7C3D2A7A5F5C1BEF5BFBBF3BAB8F3BFBBF0C1BEEAB9B6EFBFBDEDC2BFEEC4
+ C1F2C3C0EDBDB9EFBDBAF2BFBBF2BEBAD2A4A12C2222F2BDBAECBBB8F0C0BEEC
+ C0BEE9BFBBEABDBAEBBFBBEBC0BDE7BDB9E9BBB9E7B9B7E6B8B6E7BBB8E2B6B3
+ E6BAB8EBBFBBE6B8B6E4B7B5E3B6B4EEC3C1EEC6C3EFC5C3EFC3C2EEC2C1F0C6
+ C3F4CAC6F6CCCAF4CAC7ECC2C0F3C9C6F4CAC7F7CDCAF7CDCAF6CDCBF4CBCAF0
+ CAC7EEC6C5EEC9C6EAC5C3EECAC7EECAC9EECBC7F2CFCCF2CFCEF4D1CFF2CFCD
+ EDCCCAEDCBCAEFCDCCEECCCBEECDCCEFCFCEEBCBCAEECFCDEACAC7E1C0BEE3C2
+ C1EBCCCAEDCCCBF0D0CEE5C5C3D6B6B4D7B7B6D9BAB9D7BAB9D9BEBDE4CAC7E6
+ CDCBE2CAC9E2CAC9E6CECDE2C9C6E4CBCBECD2D1E0C6C4EDD1D1F2D7D6E9CECC
+ F0D6D6F3D8D6F2D7D5EDD4D1EFD5D4F3D8D6EDD2D1EFD5D4EFD5D4EFD6D4F2D8
+ D7F3D9D8F3D9D8EDD4D2EED5D4F3D9D8F3D8D7E7CECDF3D9D8F3DAD8ECD2D2E5
+ CCCCF0D8D7EED7D6F3DBDBF0DADAECD6D6E1CCCCE7D2D2ECD7D7EBD6D5EFDBDA
+ EDD8D8DFCCCCE3CFCFE9D5D6EAD7D7E7D4D5E7D5D5E9D6D5EAD6D5E0CBCADBC7
+ C5E5D1D0EFDBDAECD8D7E4CFCEEBD5D5EDD9D9EDD9D8ECD8D7EED9D8EFDBDAEC
+ D7D7F2DEDCECD8D8F4E0DFF4E0DFF4E0DFF2DEDCF0DEDCF2DFDEF4E0E0E9D6D4
+ E7D4D2F0DEDCE6D2D1F3E0E0EFDBDAD2BFBEF9E3E2FBE4E3F8E3E1F9E3E2F9E5
+ E4F7E2E1EFDBD9EFDBDAE6D2D10000000000000000EAD5D2D8C3C1ECD7D6EED8
+ D7E4CECCF2DEDBF2DCDBECD7D5DBC6C4E9D2D1F0DAD9E3CDCCE4CECCD8C2C1D9
+ C3C2EDD7D6EFD9D8F2DEDCF2DCDBF0DAD9E6D0CFF2DCDBF4DFDEE9D4D2E1CCCB
+ EFD9D8F2DBDAEED7D7ECD6D5F3DEDCEDD8D7E9D2D0F3DCDBF3DCDBEFD9D8DEC7
+ C6D1BBBBCFB9B8E3CBCBEFD9D7E4CECDE6D0CEECD5D4ECD6D5F0D8D8EDD7D5E5
+ CECDEED7D7E6D0D0E0CACADFC9C9E4CDCDE9D2D1ECD4D5E9D1D1E5CDCDE4CDCD
+ E5CDCDE4CCCCEED6D6EDD5D2D2BABAD2B8B8E0C6C4E7CECCE2CAC9E1C7C5DCC3
+ C3E4CBCAEDD2D2EBD1D0E3CAC9E7CECCE6CCCBE4C9C9E5CAC9E7CCCBE2C6C4DA
+ C0BFE3C7C6E7CCCBE1C5C5E6CACADFC3C2EBD0CEECCFCEE6CBCAEFD4D2EFD2D1
+ EBCDCCECCECCF0D1CFF3D4D1F3D1D0F0D0CFEECFCEEFCFCEEDCCCBEBCBC9EFCF
+ CDEAC9C7EECDCCE1C0BFE2C2C0E6C6C5E4C3C1E9C7C5DFBDBAD5B4B1DBB9B7EB
+ C9C6E7C4C3D7B4B2D8B4B2E4BFBEECC7C4E6C2C0EFCAC9EAC5C2E3C0BEF2CECC
+ F0CBC9E7C0BEE4BDB9EEC4C3EFCAC6EFCBC7E0BEBADBB6B4E0B8B6EAC0BEDEB5
+ B3D9B0ACDBB0AEECC1BEF0C5C2D2AAA8614E4E453838917472E7BEBBEDC5C4E9
+ BFBDE2B6B4E5B9B7EDC3C1F0C4C2EBBDBAE9B9B6E6B6B3E4B3B0EDBAB7F0BDBA
+ E9B5B3E1AEAAC69795403030000000403231C69C99B18B89140F0F0000009573
+ 71B28786140F0F463736D7ABA8BA99964738381511107E6362F2C0BBF4C3C1F3
+ C1BEF3BFBBF6C0BBF6BEBAF5C1BEF2C0BEEEBDB9F3C2BFF3C6C3EDC2BEE9B8B5
+ E2B1ADECB9B6F2BEBAD4A6A4967572000000E5B3B0EBB9B6EDBEBBECC0BEEEC1
+ BEE5B7B5EABDB9EBBEBBE1B4B1E3B5B3E1B3B0E3B6B3E7BBB9E5B9B6E7BAB8EA
+ BBB9E9BAB8E5B7B5DCB2AEE3BAB7E9BFBDEBBFBDE7BDB9EDC1BEEFC3C1F0C6C3
+ EABFBBE5B9B8ECC1BEEAC0BDDFB3B1E5BAB8F3C9C6E9C0BDEBC3C0ECC4C2EBC4
+ C3EBC5C3EEC7C6EAC6C4EAC5C3E9C5C3E2C0BEE4C1BFECC7C6E4C2C0E4C3C1E6
+ C4C3E4C1C0DFBDBAE4C4C2EDCDCBEDCDCCECCDCCEECDCCE5C6C4E2C2C0EDCBC9
+ E6C6C4EAC9C6EBCBC9DEBEBDE9CBC9EDCFCEDABFBED8BEBDDFC7C5E4CDCBE6CD
+ CBE7CECDEBD1D0E9CFCEEBD0CFEAD0CEE1C7C5EACFCDF0D6D4E5CBC9EED4D1F0
+ D5D4EFD4D1E5CAC7EDD1D0F0D6D5EACECDEDD2D1EED4D2E5CCCAEFD5D5F0D7D6
+ EFD6D5EED5D2EAD1CFF3D9D8F0D8D7E1C7C7EED6D5F0D7D7EBD1D0D8C0C0DAC2
+ C1DBC4C3F0D9D8F2DADAE4CECEDCC6C6EAD4D5ECD7D7EDD8D8EEDADAEED9D9E6
+ D4D4E4D1D0E7D4D4EAD7D7ECD8D8EAD7D6E9D5D5EAD6D5EBD6D5E6D2D1ECD8D7
+ EEDAD9EDD9D8E6D0CFE5D0CFE4D0CFEFDBDAEFDBDAF2DEDCF2DEDCEED9D8ECD8
+ D8E4CFCFE4D0D0E7D2D1F2DEDCF0DBDAE7D4D2E6D1D1F0DEDCE6D1D1E7D4D2ED
+ D9D8E5D1D0EDDAD9DFCAC9CDB8B7DAC5C3F2DEDBE6D1D0F2DEDBF2DEDCF3DFDE
+ F4DFDEEBD6D5E5D2D10000000000000000F2DCDBD2BFBDEFDBD9F5E0DFF5E0DF
+ F7E1E0F0DAD9D5C0BED4BFBEE5CFCDD2BEBDCCB6B4D2BEBBD0B9B9CDB8B7CEB9
+ B8D4BFBDF0DAD9F2DCDBDBC5C4D0BAB9E6D0CFEFD9D8D1BBBACEB9B8D8C1BFD8
+ C1BFD6C0BED0BAB8CFB9B8D2BEBDD9C3C2EAD4D1E2CCCCD7C2C0DCC6C6D4BDBD
+ CFB9B8DCC6C5E6D0CFD5BEBEDAC3C2ECD4D2E9D1D1EDD6D6D5BFBED6BFBFECD4
+ D5E9D2D1DCC6C6D9C2C2D9C2C2DEC6C6E7D2D0EDD8D7E6CFCFD9C2C2D6BFBEDA
+ C3C2EDD5D2EDD5D4D6BEBDD5BBBAE1C7C6EBD1D0E4CBCAE2C6C6E2C7C7EDD2D1
+ EDD2D1E7CDCCD7BDBDD7BEBDE7CDCDE7CDCCE6CBCAD8BBBAD6BBBADAC1C0DCC2
+ C1DABFBFD6BBBADEC3C1E6CBCAEBCFCEDABEBDD8BDBAEED2D0EDD0CED8BBBAD8
+ B9B8D9BAB9E1C1BFF0D1CFEBCCCBEACAC9E0C0BFD8B8B6D7B7B5DBBAB9E4C3C1
+ F0D0CEE0BFBED8B7B6D8B7B6D8B6B4E6C4C2DCBBB9D6B5B2DFBEBBE9C6C4ECCA
+ C6D6B3B2D6B3B1DEB9B7E2BDBADFB8B6DCB6B4D6B0ADD9B4B1EBC5C3E7C5C3DB
+ B7B5DBB5B4DEB4B2E2B9B7F0C9C5EEC9C6E6C3C1EAC4C1ECC4C1DEB4B1D9B0AC
+ DAB0ACE5B9B7EDC1BEEABDBAECBEBA90716FBF9594DBADABE9BFBBEFC5C3E4B8
+ B6DEB0ADE7B9B8F0C4C1E7B9B6DCAEABDBABA8DBAAA8DBA8A5D8A6A2E2ADABEB
+ B7B4E4B0ACDAA6A3DCA7A4E5B2AEF3C2BEF6C3C0E7B4B1EAB5B2DEA8A5DCA4A1
+ DCA4A2DFA8A5E4B2AEF0C4C1F0BDB9E0AAA7E2AEABE4B2B0E3B3B0DBA9A6DEA8
+ A5EFB7B4F5BDB8F2BDB9E0ADABE3B1ADEDBEB9E3B9B5E0B4B1E3B1ADDEABA9EA
+ B7B4F2BDBAF3BFBAF3BBB78A6866DAA7A4EBB9B6EBBBB8EEC1BFEFC1BEE9BAB7
+ EBBDB9EABEBAE3B5B2DFAEADDFB0ADDFB2B0DEB2AEDCB0ACE0B3B0E9BAB7ECBD
+ B9DCB0ADDAB0ADDBB3B1DBB1AEDEB1AEEBBFBBEDC2BFE6BBB8DCB2AED9ADAADA
+ B0ACF6CBC7F6CBC7DCB2AEDEB3B1E5BBB9E2B8B6DAB3B1DAB4B1E1BAB8E7C1C0
+ EBC5C3EECAC7EAC7C4EAC5C4DBB9B7D8B4B3D8B4B3DFBAB9EAC7C6EDCBCADCBB
+ B9D9B7B6DFBFBDE4C5C3E1C1C0E0C1BFE9C9C6E6C5C3E0BFBDDEBDBAE7C6C5EE
+ CDCCEFCFCDEECFCEF0D2D1EED1CFDAC0BFD8C0BEDEC6C4E9CFCEEBD2D1EDD2D0
+ EACFCDE7CECCDCC2C2DBC1BFDAC0BFDBBFBFE5CBCAE0C4C3EACECDEACFCDDFC3
+ C1D6BAB9DABFBDDCC1BFDFC3C2EDD2D1EFD5D4E0C6C4E6CBCBD6BBBAD6BBBAE0
+ C6C4DBC1C0EBD1D1E2CAC9D6BEBDDAC2C1DFC6C5D5BDBBD1BABAD7BFBFDFC7C7
+ ECD5D4E5CECED6C0C0D7C2C1E2CDCCE2CDCCD8C4C4DBC7C6E6D2D2DCC9C7DAC6
+ C6DCCAC9E5D2D2ECD8D8DBC7C6D9C4C4E0CBCAEBD6D5EEDAD9EBD7D6EFDBD9EF
+ DAD9D9C3C1D5C1BFD4C0BFE0CCCBE7D4D2E2CDCCD8C2C2D6C1C0D4BFBED1BEBD
+ D0BDBBDAC5C5F4E0DFF3DFDED7C2C2D4C0C0D9C5C5D6C3C2E4CFCFF3DFDEEFDB
+ DAF2DFDEE3CECDCDB7B6D1BDBBF0DBD9E0CBCAD7C2C1D2C0BEDFCCCAE5D1D0D2
+ C0BFD1BFBD0000000000000000FBE5E4E1CCCBF0DBD9F9E2E1F7E2E1EBD5D4CB
+ B5B4CDB7B5DFC9C7EED8D7C9B4B2CAB4B3ECD7D6EBD5D4CDB8B7CCB7B5D5C0BE
+ F0DBD9EFD9D8CDB5B4CDB6B5E6D0CFE0CAC7CCB6B5D9C3C1F2DBD9E5CFCDE4CD
+ CBD8C1BFCAB4B3CFB9B8E1CBCAD9C4C3D2BEBDD4BEBEE1CBCAD2BDBDCFB9B8D8
+ C1C1E6CFCFD4BDBDCFB8B8E0C7C7EAD2D1E4CDCCD1BBB9DBC3C3EDD7D5ECD4D5
+ D6C1C0D6C0BEDBC4C3D7C0BFD8C2C2E6CFCEE6D0D0D8C2C2D6C0BFD9C2C1E7D0
+ CFE6CECDD7BFBED5BBBAE1C9C7EAD0D0E5CBCAE7CDCCE3CAC9EDD1D1EDD2D1DC
+ C1C0D6BABAD6BAB9E7CDCCECD1CFECD1CFD5BAB9D5BABADEC3C2E3C7C6D6BBBA
+ D6BBB9DFC2C2DEC2C1DABEBDD7BAB8DCC0BFE5C9C6D7BAB8D4B7B6DABDBAD7B9
+ B8D4B5B4E3C3C2EFD0CEE1C1BFD5B5B3E0BFBDE4C3C1D7B6B5D8B7B5F3D0CEEB
+ CAC7D6B5B3D4B2B1E6C3C1EECCCAE1BFBDD6B4B3E1BFBDEFCDCBEFCDCAD6B2B0
+ D5B1AEE3BFBBEAC3C1D8B3B1D5ADAAD4AAA8E6BEBBEAC3C0DAB5B3D9B7B5DBB7
+ B4DBB4B2D9B1ADEAC0BEEFC7C4E5C0BEDAB6B3D9B4B1D9B1AEDBB1AEE2B7B4EA
+ BEBBE9BDB9EABDB9EABDB9DFAEACD8A8A6D8A8A6EDC0BDEDC3C1DBB1ADD9ABA8
+ ECBFBBF4C6C3DEB1AEDAABA8ECBAB7ECBAB6D8A6A3D7A4A1EBB8B4F3BEBAE3AD
+ AAD9A29EDCA5A2F2B9B7F9C5C2FBC6C2F9C4C1EBB6B3D8A29EDAA29EECB3B0E7
+ AEABE4B0ABF4C6C3E5B3AEDBA4A2E4ADAAEDB9B6E3B3B0DBA7A6DBA5A3E6ADAA
+ EDB3B0DEA9A6DBA9A6E0ACA9E2B1ADDBB1ADDFB1ADECB9B6E1ADABE3B0ACEEB8
+ B6F3BBB8E3ACA9D9A39FD9A5A3EAB8B5ECBEBAE6B8B5EDBDBAEEBFBBEEC0BDEA
+ BAB8DBABA8DCACA9E5B6B4DFB2AEDBAEACDBAEABE5B7B5EDBEBAE6B7B4D9AEAB
+ DBB3B0E3B8B5DBB0ACD8ABA8E2B5B3EEC2BFEFC3BFD6A9A5D5A7A4DBAEACF5C9
+ C6ECC0BDD8ADAAE5B9B8E0B5B3D8B0ACE2BAB7DAB4B3D9B2B1E4BEBAEBC6C4F3
+ CDCBF2CECBEECAC7E2BEBDD7B2B1D7B3B2E1BFBDEBC9C7E9C5C4D8B7B6DBBAB9
+ E9C7C5E0C1BFDABBBADFBEBDE0BEBBD8B6B4DCBAB8DFBEBBDCBAB9EECFCDEECF
+ CEDEC1BFD8BDBAD7BDBBD7BEBBDEC3C2EAD1D0E9CFCDECD1D0EBD0D0E7CDCBE0
+ C5C3D8BEBBDBBFBEDBC0BFDABEBDD6BAB8DABEBEE3C6C5EACECDD6BAB9D5B9B7
+ E7CBC9DEC2BFD4B9B7E0C5C4EFD6D4EACFCDDCC2C0D4BBB9D4BAB8DCC2C1DCC2
+ C1EBD0D0D5BBBAD5BBBAE6CDCCE3CBCAD2BAB9D2BAB9DBC5C4ECD6D4F2DAD9D2
+ BDBDD2BEBDDFC9C9DFCBC9DAC4C4D5C1C0DCC7C7ECD7D6D9C4C4D7C4C3DAC7C7
+ ECD8D8E7D4D2D5BFBED5C0BFE2CECCE6D2D1EEDAD9E6D2D1F2DCDBF3DCDBD6C1
+ BFD1BDBBD5C0BFECD8D7E5D0D0D0BBBAD2BEBDEAD6D4DFCAC9CEB9B9CEB9B9E0
+ CBCAF5E1E0EFDBDACEBABAD2BFBEE7D4D2D4C0BFCFBBBAECD7D6F0DCDCF0DCDB
+ CDB8B7CAB6B4E2CCCBF4DFDED7C2C1CFBBBADBC6C6E7D5D4D5C2C1CEBAB9CFBB
+ BA0000000000000000FDE7E5ECD6D5E5CFCEEFDAD9F0DBD9CDB8B7C9B4B2D2BF
+ BEE4CECCF6E0DFCDB7B6CCB7B5F0DBDAEFDAD8CEB9B7CCB7B5D8C2C1E9D4D2EB
+ D5D2CBB5B3CDB7B5EFD9D8E6D0CFCDB7B5E2CCCBF3DEDCEBD5D2EBD4D1E3CCCB
+ CBB5B3D1BAB9E7D0CFD8C2C1D5C0BFE7D2D1EAD6D4D2BDBBCFB9B8E5D0CEE9D1
+ D1D8C2C0D1BAB9D4BDBDE7D1D1E3CCCBD2BBBAE6CFCDECD5D4DBC4C4D6C0BFDF
+ C7C7E9D2D1E2CCCBD6C0BFDBC4C4EAD2D2E4CECDD6C0BFE0C9C6EED6D6EDD5D5
+ D7C0BED5BBBBE7CDCDEDD4D2E9CFCFE5CCCAE1C6C5E7CDCCE7CCCBD7BBBAD6BA
+ B9D6BAB9E1C5C4EBCFCFEBCFCED6BAB9D6BBBADCC1C0E3C9C6D8BEBDD7BBBADB
+ C1BFD7BBBAD7BAB9E9CCCBEBCECCE2C5C3D2B7B5D9BDBAE9CBCAE2C4C3D5B6B4
+ D6B8B6DFC0BED5B5B4D7B6B4E7C7C5E6C5C3DCBBB9D5B3B1E9C6C4E7C4C3D5B2
+ B1D6B4B2EBC7C5E9C6C4E1BEBDD5B1B0DAB7B5EDC9C7EDCBC7D5B2B0D8B4B2EC
+ C6C4F2CCCAE9C1C0D5ACAAD6ACAAEBC2BFE2BAB7D7B2B0DBB7B6E3C1BFE3BDBA
+ D9B2B0DAB0ADDEB4B1D9B2B0D9B4B2DBB7B4E3BBB9EBC0BEECBFBDECC1BEECC0
+ BDEFC0BEF2C2C0E7B7B5DAA9A7DAA9A6F0BFBBE3B5B3D9AEABDAADAAF0C0BDEC
+ BFBBD9ACA9E1B1AEF6C5C2F7C4C2DEAAA7D8A4A1F6C0BDF6C0BDE3ABA8D79F9C
+ E6ADA9EEB6B3EDB8B5ECB8B5F5BFBBE6B2ADD8A39EDEA4A1F5BAB6F6BBB8F4BD
+ B8F8C9C5E7B4B1DBA4A1E7B1ADF3BEBAEFBEBADBAAA6E5B0ACEFB5B2EFB5B2DE
+ A8A5DBA8A5E1ADA9E5B4B2DBB2B0DEAEAAE5B2AEE9B5B2E9B4B0EDB6B3F0B9B5
+ DEA5A2DAA4A1DAA6A3E3B3B0F0C2BFEDBEBAF0BFBBF0C1BDEABAB7DCACAADAA8
+ A6E9B7B5EDBEBBE9BBB8DAACA9D9ABA9EEBEBBF0BFBBDFB1AED9AEACE6BAB8EF
+ C3C0EEC0BDD8A9A6DBADAAF9CBC9F7C9C5D4A7A3D6A7A4E2B4B1F5C9C5D8ACAA
+ D9ADABF5CAC7E0B6B4D6ABAAF3CBC7EEC5C4D7B1AEDAB5B3ECC6C4EECBC9EBC7
+ C4EAC4C2EECAC7D7B3B2D7B4B2ECC9C7ECC9C7E6C4C3DABAB9E0C0BFEDCECDDF
+ C1BFDABAB9EBCBC9E5C2C0D7B5B3E0BEBDE4C3C1D9B9B8DFC1BFDBBFBDD7BBBA
+ D8BEBBDCC2C0E5CCCAE7CCCBE5CBCADEC3C2E7CDCCEBD0CFE7CDCCDABFBDD7BD
+ BBE2C5C5DCC1C0E6CAC9D6BAB8D7BDBAE7CCCBE9CDCBD4B9B6D7BAB9F2D6D2EF
+ D4D1D4B8B7D6BAB7F0D6D4E9CECDD7BDBBD5BAB9D5BBB9DCC2C1E6CDCBE1CAC7
+ D5BBBAD9C1C0F3DAD8F2D9D8D5BDBDD4BEBDE3CDCCE6D0CFE6CFCED1BBBBD5BF
+ BEEDD8D7EAD4D5D5C0C0D5C1C0E1CCCCECD8D8DECAC9D6C2C2DCC9C9ECD7D7E4
+ CFCFD5BFBED8C3C2E5D0D0E6D1D1EFDAD9E9D4D2F3DCDAF3DCDAD4BFBED1BDBA
+ DCC7C6F2DCDBE1CCCBCFB9B9E0CBCAF4DFDEEAD5D2CEBABACEB9B9DFCAC9F0DB
+ DAD5C0BFCEB9B9DCC9C7EFDBDADECBCACEB9B9D2BFBEE7D4D2E6D1D0CAB6B4CC
+ B7B5F6E0DFF5E0DFD0BDBACFBBBAEDDAD9DBC9C6E2CECDCEBABAD4C1C0000000
+ 0000000000F9E4E3EBD5D4DBC6C5F9E4E3F5E0DFCAB5B4C7B3B2D2BDBBDAC4C2
+ EAD4D2CEB9B7CEB9B7E4CFCDDAC4C3CEB9B8CDB8B7E7D1D1E3CDCBEBD5D2CBB5
+ B3CEB8B6E6CFCEEBD6D5D1BDBBD8C1C0E9D2D1E7D0D0F4DEDCF8E0DFCEB6B4CB
+ B3B2D6BFBED1BBB9E5CFCEEDD8D7EED9D8D4BFBECFBAB9ECD7D7EBD5D4E4CDCD
+ D5BEBED5BFBEDBC5C5DCC7C5D5BDBDE5CECEE9D1D1D6BFBED7C0C0E5CECEE7D2
+ D0ECD4D4D9C2C1D9C2C1E2CBCBE2CCCBD6C0BEE3CCCCEED7D6EAD1D1D8C0BFD5
+ BBBBEAD2D0EFD6D6EFD6D5EED4D4E9CECDE6CBCBE1C6C4D6BAB9D7BBBADAC0BE
+ D8BEBDE7CDCBEBCFCED7BBBBD8BDBBE7CDCCECD0D0DCC1C0D6BBB9DABFBED7BA
+ B9E2C5C4EED1CFE7CBC9DEBFBED4B6B4E9CAC9EFD2D0E4C6C4D6B9B7D6B8B6DB
+ BBB9D5B6B4D8B9B7EBCBC9E7C6C4E5C4C2D4B2B1E4C2C0EBC9C5D4B0ADD6B2B0
+ EDCAC9EBC9C5E3C0BED5B3B1DCBAB8EBC7C5EECAC9D5B2B0DAB7B5EFCBC9F2CC
+ CAEDC6C3D6ADAAD6AEABEBC2BFE0B6B4D7B1ADE2BDBAE5C0BEE7C4C3DAB5B3D9
+ B1AEDAB0ADD9B0ADE5BEBAEEC9C5E6C0BEE6BEBAEDC2C0EDC1BFEBBFBBEBBEBA
+ EFC1BFE5B5B2DAA9A6D8A7A5E1AEABDCABA8DEB1ADE1B4B1E9B8B5E6B5B2D9A9
+ A7DFB1ADF4C2C0F5C2BFDEAAA7D7A39EF9C2BFF5BFBBE5AEABDAA29FEFB6B3F7
+ BDB9F5BFBBF5C0BDEFB9B6F4BDB8DCA6A2DBA39FE7ABA8E7ABA8EDB4B1F4C3C0
+ EAB7B3DCA39FE9B1ADEFBAB7EDBAB7DCAAA7E7B1ADEFB5B1EFB4B1DFA9A6DBA8
+ A5EDB7B4F2C2BFE1B6B3E0ADAAE5B1ADECB7B4F2BBB7F2B8B5EFB7B3DBA49FDC
+ A6A3DEAAA7DEACA9F0C1BDF0BFBAF3C0BDF2C1BEE9B7B5DBA9A6DAA8A6ECBBB8
+ ECBDB9EDBDBADCADAADAAAA7EDBBB9F0C0BDDBB0ACD8ADAAE4B6B3EEBEBAEFC0
+ BDD7A8A5D8A9A7F7C7C4F5C5C2D5A6A3D6A6A3D9ABA8EFC1BFD7AAA8D7ACA9EF
+ C4C2DEB4B1D8AEABF0C7C5ECC5C3D7B2B0D9B4B2EBC5C3F2CBCAEEC7C6ECC7C5
+ ECC7C6D9B6B4D9B6B5EFCDCBEDCBCAEACAC7DABAB9E1C1C0EDCECCDEBFBDDAB9
+ B8EFCDCBEECBC9D9B6B4DFBEBDE7C7C6D8BAB8DBBFBED8BEBBD7BEBBE7CCCBEA
+ CECDE3C6C4E4CAC7EDD1CFE4C9C7E9CECCEACECEE7CECD7062620000005F5353
+ CDB4B4EFD4D1D6BAB9D7BAB9E9CDCBEBCECDD5B8B5E5CAC7F3D7D5F2D6D2D4B8
+ B7D5B9B7F3D7D5EFD4D1D6BAB9D7BBB9DCC1C0DBC1BFEED4D4E5CDCCD5BEBBE0
+ C7C6EFD8D7EED9D7D9C2C1D6BFC0E4CDCDE0C9C9D9C3C3D1BBBBD7C1C0EAD4D5
+ E6D1D0D4BFBED6C0C0E6D2D2EDD8D8ECD7D7D5BFBEE5D1D0EEDAD9EDD9D8D5BF
+ BEDBC5C5E7D4D2E6D2D1EBD6D4E9D2D1EED8D7F2DAD9D6C0BED0BBBAD9C4C3EE
+ D9D8D8C4C3CFB9B8E5D0CFF2DCDBEDD8D8D0BBBACEBAB9EAD6D5EFDAD9D2BEBE
+ CEB9B9E1CCCBF2DEDCE3CFCECEB9B9D0BDBBE6D1D1E6D0CFCAB6B4CEB9B8F0DB
+ DAECD7D6CEBAB9D1BEBBEEDAD9DCCAC7E1CECDCEBBBAD4C1C000000000000000
+ 00F9E4E3D7C1C0D0BBBAF4E0DEF0DBD9D2BDBAC7B2B0D7C2C0E0CAC9F0DBDACE
+ BABACEB9B9F0DCDBEFDAD9D1BEBBCEB9B8F0DCDBE4CECDF3DEDCCDB7B6D1BDBB
+ F0DBD9E4CFCED0BDBBE5D0CFF0DBDADCC7C6F0DAD9F0D9D8C9B3B2CEB7B5DEC7
+ C6D1BAB9E9D2D0EED9D8EBD5D4D4BFBFD0BAB9EAD4D2ECD6D6E5CFCFD5C0C0D5
+ C1C0E0CCCADCC6C5D6C0BFE7D2D1EAD2D2D5BEBED6C0BEE0CACAE7D1D0E6D0CF
+ D8C1C1D7C0C0DFC7C6DBC4C4D6C0BEDBC3C3EED6D5E5CECCD7BFBED5BBBBE6CE
+ CCEED5D4EFD7D5EFD6D5EAD0D0E5CBCBD7BDBAD5BAB9E5CBC9E6CBCAD7BBBAE7
+ CDCBEBCFCED6BAB9D6BAB9E9CDCBECD0CFD6BBB9D6BBBADFC3C1D7BBB9E0C3C2
+ EED1D0EDCFCDE6C7C6D4B6B4E2C4C2F4D6D4EACCCBD6B7B6D8BAB8EBCDCBD6B6
+ B5D7B8B6F4D4D1EFCECCDFBDBAD0ACABDFBBB8EECAC7D2B0ADD4B2B0EBC9C5E9
+ C5C4DFBBBAD6B4B3DFBBBAE2BFBEEAC5C4D5B2AED7B4B1ECC7C5EEC9C6E4BDB9
+ D5ACAAD6ADACEEC4C1E7BEBAD8B0ADE4BAB9EBC4C2EAC3C1DAB7B4DAB4B2E0B5
+ B4DBB0ACEDC2BFEFC5C3EDC7C4E1BAB7DBB3B0E5B9B6EDC0BDEBBEBAEFBFBDDE
+ AEABD9A9A6D9A7A5E4B1ADDCAAA7E1B0ACEABEBAF0C0BDEEBBB8D8A7A4DFAEAC
+ F2C1BDEEBAB7DBA7A4D8A39FF4BDB8F5BEBADEA6A3DAA39FE9AEAAF4B7B4F6BD
+ B8F7C2BEF4BEB9F4BBB8DAA39EDBA29DECB0ABE3A7A3E4AAA6ECB9B5E3B0ABDE
+ A39FE6ADAAEFB9B6E9B5B2DEAAA6EBB2AEF2B5B2EFB3B0E4AEABDCA7A4F0BAB6
+ F3C3C0E0B4B0E1ADAAEAB5B1E4ADAAECB5B2EDB3B0E0A5A2DBA29EE1AAA7E2B0
+ ACDBAAA7E2B1ADE5B3B0EEBDB9F0BEBBEEBBB8DEA8A6DAA7A5E4B3B1EBBAB7E5
+ B6B3DAA9A7DAA9A5F0BFBBF0C1BFDBB1ADD8AAA8E9B7B5EFBEBAF3C2BFD7A8A5
+ DAABA8F2C2BFF4C3C0D6A6A3D6A6A4E3B4B2F4C5C3D8ABA9D8ACA9EABFBDE4B9
+ B6EDC3C1ECC3C1E6C0BED8B2B0DAB6B4F0CBC7F3CBCAECC5C3ECC6C5EBC6C4DA
+ B6B5DAB7B6EECBC9E6C5C3E9C9C7DABABADFC0BEE9CAC9DEBDBBDAB8B7ECCAC9
+ F0CECCEFCFCEEACBC9E3C5C4D8BBBADCC1C0D9BFBDD8BEBBEED1CFF0D4D1ECCF
+ CEDBBFBDD9BDBADFC2C1E3C7C6E9CDCCE7CCCCDBBFBDA48D8D92817F796A69CF
+ B5B4D6B9B7D6BAB8DCC0BFDFC2C0D5B8B5DBC0BEECCFCDE7CBCAD4B8B7D6BAB8
+ F5D8D6E9CCCBD0B5B3EACDCCF3D7D6D6BDBAF2D7D6E9D1CFD5BBBBDFC6C5EED6
+ D6EED8D7D7C2C1D6BFBFEED9D7EED8D8EAD4D2D2BDBDDCC5C5F0DBD9F0DAD9D4
+ BEBDD4BEBDECD5D5F0DADAECD5D5D2BEBDE1CCCBEFDADAEBD5D5D5BFBED8C2C2
+ EBD6D6E7D2D1EFD9D9EBD5D2EED8D7EFD9D8D6C1BFD0BAB9DBC6C5F4DFDEE6D1
+ D1CFB9B8DAC5C4F4DFDEF4DFDECFBAB9CEB9B9E9D2D2E9D2D2D2BEBDCEB9B9DE
+ C9C7F2DEDCE9D6D4CEBAB9D1BEBDE0CCCBE2CDCCCCB7B5CDB8B6ECD7D6F0DEDC
+ D0BBBACFBBBAF3DFDEECD9D8DCCAC9CEBBBAD2C0BF0000000000000000F9E3E2
+ D1BDBBD2BFBDE6D2D0F0DBD9E6D1D0C7B3B1CCB7B6E6D2D0EFDBD9CEBAB9CEBA
+ B9F6E1E0F5E1E0CFBBBACEBAB9E7D4D2EAD7D5EBD7D6D0BEBDD2C0BEECD8D8D9
+ C6C5CFBDBBDCC9C7DFCBC9CFBABAD4C0BFD4BEBDCCB6B5D4BFBDEED8D7D0B9B8
+ CFB9B8E9D1D0EDD6D5E4CECDCFB8B8D9C2C1EAD4D2DCC7C7D5C1C1D9C5C4DCC7
+ C6D6C1C0D6C0BFE5CFCEE5CFCFD6BFBFD5BFBED9C2C2DEC6C5DFC7C5D6C0BFD6
+ C0BEE2CBCBDAC3C2D6BFBED7BFC0E2CBCADEC5C5D5BBBAD5BBBAE1C7C6E9CFCE
+ EFD6D5EFD6D5EED4D4DBC1C0D5BABAD5BAB9E9CDCDE9CDCDD7BBBADAC0BFDBC1
+ BFD6B9B8D6B9B8DCC0BFDBC0BED6B9B8D7BBBAE3C7C6D7B9B9D4B8B6DFC1C0E6
+ C9C6EBCDCBD4B6B5D7B8B7EECECDDBBDBAD2B5B3E9CAC9F8D9D7DBBDBAD4B4B3
+ DCBBB9E9C6C4D7B5B3D1ADABDCB9B7DAB7B5D4B1B0D4B1B0DBB8B5E5C2C0D8B5
+ B3D6B2B0E3BFBEE3BFBDE2BEBBD6B1AED8B3B1F2CCCAEFC9C6DEB7B4D5ADAAD6
+ ACACEFC6C4EFC5C3D9B1AEDCB4B2EAC1BEE3BAB8DAB4B2E4C1BEE6C0BDDCB2B0
+ E1B4B2ECC0BDE1B8B5DAB5B2DAB3B0E1B5B3EFC1BEF0C2BFEFC0BDDBABA9D9A8
+ A6DAA8A5F2BEBAE3B0ACD8A5A2DFB0ACF4C5C2F5C3C0DAA7A5D9A8A5EEBEB9ED
+ B9B6D9A4A1D9A49FEBB2AEEDB5B2DAA49FDAA39EE3A9A6EDB2AEF5BAB6F6C0BD
+ F6BFBAF2B9B6D9A29DDBA19DE6A9A5DC9E9BDC9F9BE7B4B0DCA8A5DCA19CE3A9
+ A5F2BAB7E7B4B1DEA9A6E4ABA8F0B4B0EDB1ADE0A9A5DCA7A4E7B2AEEABAB7DB
+ ADAAE1ACA8E6AEACDEA6A2E4ACA8E4A9A7DBA29DDBA29EE7B2ADDFABA8DAAAA7
+ DCAAA7EDB9B6F3C0BDF2BFBDEDB8B5E5B1ADD9A6A4DEACA8EEBEB9E0ADAAD9A6
+ A4D9A5A3EAB9B6E4B6B4D8AAA7D8A7A4F0BEBBF0BFBBE4B5B2D7A8A5DAAAA7F4
+ C3C0F0C0BDD5A5A2D6A6A3EFC1BEF8CAC7E1B4B2D7ABA8E0B5B2EABFBBF4CAC6
+ EEC5C3DBB5B3D8B1B0E4BDBBF3CCC9F0CAC7EDC7C5E4C0BFE2BEBBDAB6B6DAB8
+ B6E6C5C4E7C6C4E5C5C5DABBB9DEBEBBE7C7C5DFBDBBDAB8B7DCBBBAEDCDCCEE
+ CFCEE7CBC9DABFBED8BDBAEBCFCDE5C9C7D8BDBAE3C5C4EBCECCDFC2C0D7B9B7
+ D7B9B7E6C9C7E3C4C2EBCDCCEBCDCCDEC1C0D8BBB9DCBFBEE2C4C3403837D6B9
+ B7E0C1C0E0C2C0D7BAB8D5B7B5DFC1C0EED1D0E5C9C6D2B5B3D4B7B6F0D4D2D2
+ B6B4D0B5B4ECD0CEF2D6D5D0B6B4E0C5C4EDD2D2D6BDBDD8BFBFEBD2D2E1CACA
+ D5BFBDD5BFBDEED8D7EDD6D6DBC4C4D2BDBDD6BFBEEDD7D6EDD7D6DEC6C6D2BE
+ BBDAC4C2E1CBCBD6C0C0D4BEBDD6C0C0E4CECED6C2C0D5BFBED7C2C1ECD5D5EE
+ D9D8F3DCDAEED8D7EBD5D1E5CECDD2BBBACFB9B8D8C2C1F3DCDCEBD6D6D2BFBE
+ D4C0BFEDD9D9EAD5D5CFBBBACEBBBADCC7C6DFCAC9CEBAB9CEB9B9E2CECDF3DF
+ DEDFCCCBCEBAB9D2BFBEE9D6D4DCC6C5CBB6B4CCB7B7DCC9C7F2DFDED9C5C3CF
+ BBBADFCCCBE2CECDD1BEBECEBBBAD1BFBE0000000000000000EED9D7D4BFBEE3
+ CDCCDFCAC9DEC9C6DFCAC9E9D4D2CEB9B8D0BDBADBC7C6D1BEBDD4C0BEEFDBDA
+ E4D0CFD0BDBBD0BEBBD5C2C2D7C5C4D7C4C4D2C1C0D4C1C0E9D6D6E7D5D5D7C3
+ C2DAC6C6D8C4C4D9C5C4ECD9D8EAD6D6D2BEBDE7D2D1F3DBDAD0B8B8CEB7B6D2
+ BBBAE6CFCFEAD2D1D5BFBED4BFBDD5C0BFD8C3C2E0CBCAE4CFCFE4CFCFDAC5C4
+ D6C1C1E5D0CFE0CBC9D6BFBFD7C1C1E6D1D0EBD4D4EDD7D6DBC4C3D7C0C0E7D0
+ D0E7CFCED8C0C0DAC3C2E2CBCAD9C0BFD5BDBADAC1C0E4CBCAE2C9C7EAD1D0EE
+ D5D4E7CECCD7BDBDD5BBBAD9BFBFEACFCEEACFCFD9BFBEE1C5C4E6CBCAD7BABA
+ D8BBBAE5C9C6E4C7C6D9BDBAE2C4C3E7CBCAD7BBB9D2B6B5D5B7B6E2C4C3F3D4
+ D2DEBFBED5B7B5D7B8B7D2B3B2D2B4B3F6D5D2F3D2D0EECDCBD7B7B5D4B5B3DB
+ BAB8E7C7C4E9C7C5E3C1BFE6C4C2D7B5B3D6B3B1DCB8B7D8B6B3D7B3B2D8B4B2
+ E7C3C1DFBAB8D7B3B1D5B0AEDAB5B3EEC9C6EAC3C2D7B2B0D6B0ADD9B3B1ECC4
+ C3ECC3C1E5BEBBDBB3B1DBB3B1DAB2B0DFB7B4E7C0BEE9C3C0E3BBB8DCB1AEDB
+ ADABDBAEABDAB2AEDEB8B6EBC1BEEEC1BEF2C3C0F0C1BEE4B4B1DBABA8E1ADAB
+ F4C0BDE3AEABD8A39ED9A6A3E5B6B2F5C5C1EEBBB8DEAAA7DEACA9E3B2ADDBA6
+ A3DBA5A2E6ADAAE1A8A5E0A6A4DBA39FEFB5B2F0B4B1F6B9B6F4BDB8F6BFBAF7
+ BFBADFA6A2DEA39EDFA19CDC9D99E4A6A2EFB8B4E9B4B1DCA19CE1A6A2EFB7B3
+ E1ACA9DEA8A4E0A6A3E0A39FE1A39FDEA7A4DCA6A2E1AAA6ECBDB8E3B3AEE2AA
+ A6DFA8A4DFA6A2EBB2ADE7ABA7DCA19DDFA6A2F0B9B6ECB8B5DBA9A6E3AEABF2
+ BDBAF4C0BDF3BEBAF2BAB7F3BEB9EAB7B4DCAAA6E1ADAAE1ADAADBA6A3DCA9A6
+ E6B7B4DBADAAD8A7A4DAA8A4EBB8B6F0C0BEDBABA8D7A7A4E0AEABE9B8B5DFAE
+ ABD4A4A1D5A5A1DEAEABF2C2C0EFC2C0DCB0ADD9AEABE3B8B6ECC3C1DAB3B1D9
+ B3B0EAC1C0EDC5C3F3CBC9F0CBC7EEC7C5E1BDBADCB9B7DAB7B6DBB9B8DFBDBB
+ DFBFBDDEBEBBDABAB8DCBAB9E4C1C0E4C3C2DFBEBDDBBDBBE1C4C3EACECDDEC2
+ C1D9BDBBE2C5C3F0D4D1EFD1CFDEC0BEDBBEBDDBBDBBD9BAB9D9BAB9E4C5C4EE
+ CFCEE6C7C5EDCFCEEED1CFEED0CFE6C9C6DEBFBDDCBEBB413938615554EED0CF
+ DFC1C0D5B8B7D5B7B5E7CBC9EFD2D0D9BBB9D2B5B4D5B8B7DCC0BED2B7B5D2B8
+ B6DABFBED8BDBAD1B7B6DBC1C0E9CECEDCC3C2D8C0BFDAC3C1DBC4C4D7C1C1D7
+ C0C1EDD5D5DCC5C5D6C0BED5BEBED5BDBDD9C2C2E6D0CFEDD7D6D8C1C1D5BEBD
+ D9C3C3DBC4C3D5BFBEDAC4C2E4CECEE6D0CFD5BFBEDBC5C4E7D2D1F0DAD9F3DC
+ DBF3DCDAE3CBCAD5BEBDCFB7B6CFB8B8D2BFBDD9C5C5EBD6D6DECAC9D4C0BFD5
+ C2C0D5C1C0D2BFBFD6C2C1DFCACADAC6C5CEB9B9CFBBBBF0DCDBF4E0DFD2BFBE
+ CEBABAD8C5C4DFCCCBD4BEBDCCB7B5CDB9B8D2BFBEE0CDCCE5D1CFD7C4C2D0BD
+ BBD2BFBED1BFBDCEBBBBD8C4C30000000000000000ECD7D6EFD9D8F0DBD9EDD8
+ D6EDD7D6F8E2E0FBE6E5F2DEDCE2CDCCF2DFDEF2DFDEE9D6D5F2DFDEF0DCDBE5
+ D1D1E5D2D1E4D1D1DECBCBE3D1D1E5D4D2E0CDCEEEDCDBECD9D9E5D2D1EBD7D7
+ EFDCDBEFDCDBE9D5D5EAD6D7DAC6C5E7D2D2ECD7D6D6BFBEDAC4C3D5BFBED8C0
+ BFE0C9C7DBC5C4E3CECCE3CECDE2CDCCE9D2D2E6D1D0E9D2D2E6D1D1E3CECEE7
+ D2D1E4CECED6C0BFD8C3C2EAD4D1E5CECEEDD6D4D8C0C0D7C0BFECD4D4E9D1D0
+ EBD2D2E7CFCFEDD4D2E9CFCEE7CECCEDD4D1E9CECDE6CCCBEAD0CFEED4D2E7CC
+ CCDBC1C0E6CCCBE5CCCAE7CDCCE9CECDE2C7C7E4CAC9E5CAC9DCC1C0DEC1C1DF
+ C2C1DBBEBDE1C3C2EACCCCECCECEE1C2C0DEBFBED8BAB9EECFCEF3D5D2EBCCCB
+ E3C3C1F3D2D0DBBAB8D8B8B7ECCCCAE2C2C0E9C9C6D9BAB8DCBBBAF4D4D1EFCF
+ CDEBCCC9E2C1BFECCAC7EECBCADEBAB8E0BBB9E9C5C3E6C2C0ECC6C4E7C2C1ED
+ C7C4EEC7C4E5BFBDE4BEBBE9C2C1E5C0BEDEB8B6DBB6B4E2BDBAE0B8B6DCB4B1
+ E9C0BEE7BFBEE5BBBAE4B9B7E7BEBBE0B6B4E9C2C0E9C4C2E5BBB9E4B7B4E0B1
+ AEE2B4B2E2B8B5EAC3C0F0C5C2F0C2C0F0C0BEE4B5B2DEACA9E7B4B1F4BFBBE9
+ B4B1DCA6A3DAA4A2E7B4B1F4C4C1F4C1BEECB7B4F0BEB9F5C2C0F3BEB9F6BFBA
+ F4BAB6E9AEACEAAEABECB2AEF0B5B2EBAEABF4B5B2F4B8B5F5BEBAF7BFBAF2B7
+ B4EBB0ACEEAEAAEFAEAAEFB1ACE9B0ACF5C3BFE4A7A3E2A6A2F0B6B2F4BDB9EF
+ B8B4E7ABA8E1A29DE7A9A5EEB7B3EEB6B2E7B1ACE3B6B1EDBAB6EDB4B1E3AAA6
+ E4A9A6EDB2AEEFB3AEEDB0ACE9B0ACF2BAB7F3C0BDE4B1ACE9B3B0EAB6B2EEBA
+ B7EAB3B0EBB4B1F2BBB8EEB9B6ECB7B4EEB9B6F3BEB9F4BDB9F5C3BFF4C6C2E6
+ B6B3EFBDB8F4C0BDF5C3C0F5C4C1F3C1BEF0BFBDF5C3C0F3C1BFF3C1BEE6B6B3
+ DBACA9F0C0BDFBCBC7F7CAC6EBBEBBEABEBBF2C6C4EAC1BEDEB5B3EAC1BFEAC2
+ C0E4BDBAEDC6C4EFC9C6EDC7C5E3BFBEE5C2C1E7C5C4EAC7C6E1C0BEE0BEBDE0
+ BFBDE9C5C4EAC6C6EAC7C6ECCBCAEBCCCBE9CDCBEBD0CFECD1D0E7CCCAEACDCB
+ EDCECDEFD2D0EED0CEE4C6C4E7C9C6E3C4C2DBBDBBE0C1BFEACCCAE5C6C4E6C7
+ C5E4C5C3E5C7C5E3C3C2D9BBB9E2C2C0E7C9C7433A3A000000E6CAC7E1C3C1E6
+ C9C6E7CBC9ECCECCEFD2CFE5C9C6D9BDBBE3C6C4EED2D1E9CCCBE7CBCBE3C7C5
+ E3C7C5DCC1BFEACFCEE9D0CEE1C7C7E1CBCAE6CECDE7D0D0E7D0D0DEC6C6EED7
+ D6E7D0CFDBC4C4DBC5C4DBC5C4DEC7C5EAD2D1F3DBDBE6D1CFE2CBCBEAD4D2EC
+ D6D6ECD7D6EDD6D6ECD4D2F4DCDCEAD4D2ECD5D5EDD7D5F3DBD9F3DBDAF2DBD9
+ F0D9D8E6CFCEE6D0CFE0CBCBE3CFCEEAD6D6EFDADAEDDADAECD8D8EDD9D9EBD8
+ D7F0DCDCEFDCDBE5D1D1EBD8D8E7D4D4E9D6D5EFDCDBEDD9D8DBC9C7DECCCBF2
+ DFDFF4E1E0F0DCDAECD8D7ECD8D6E5D2D0E6D2D1EFDBDAF3E0DFE6D5D2E6D2D1
+ EEDAD9EBD8D7EFDBDA0000000000000000DAC5C3E6D1D0EAD5D2E0CBCAE0CAC9
+ E5CFCDF6E0DFF5E0DFE6D4D2F3DFDEF0DEDCE3D0CFF0DEDEECD9D8E5D2D2E6D5
+ D5E7D7D7DCCCCAE5D4D4ECDADAE4D2D2ECDADAE3D1D0DAC6C6DECACAE9D6D5E6
+ D5D4E1CECEDFCBCADFCACAE3D0CFE6D2D2DEC7C6ECD5D4EED7D6E6CFCFE4CDCC
+ E3CDCCE6CFCFE5CFCEDCC9C7E2CCCCE4CFCFE6D0CFE6D1D0E4CFCEE7D2D2E6D0
+ CFD7C1C1D6C0BFE6D1D0E3CCCCE0CAC7D4BDBBDFC7C5F2D9D8F0D9D8F2D9D9EF
+ D8D7EED6D5EED5D4EED6D4EFD5D4EFD5D2E7CDCDEED4D4EFD5D4EDD2D1EDD2D1
+ EFD5D4EDD2D1EAD1D0EBD1D0EBD0D0EBD0D0EBCFCFEACECDE5C9C7E7CACAE5C9
+ C7E3C4C4EACCCBEFD0D0F0D0CFF2D4D1EBCBC9F4D5D2F5D6D5F2D1CFF3D2D0F5
+ D5D4DBBBB9F0D1CFF3D4D1EECFCEE7C9C6DBBBBAEFCFCDF5D6D4EDCCCADFBFBE
+ EBCCC9F6D5D2F7D5D1F0CECDE7C4C2EEC9C7EECBC9F0CBC9EEC9C7EFCBC9F0CA
+ C9EEC9C6ECC6C3E9C2C0E4BFBEE5C0BFE7C1BFEAC4C1EAC2C0E3BBB9EBC3C1EB
+ C3C0EBC2BFEBC1BFEBC1BFEABFBBECC3C1EDC4C2EDC7C4EDC4C1EDC0BEEFBEBB
+ E6B8B5ECC2BFEFC6C3EEC3C0EEBFBBEFBFBBEBB9B6EFBBB8F3BEBBF4BEB9E4AD
+ AAD9A29EDCA7A3E2B1ACE2B1ADDFA9A6EAB4B1EDBAB7EDB9B5F5BEB9F2B7B4F3
+ B8B4EEB3B0F3B7B4F2B5B2E5A8A4E9AAA6F2B4B1F3BBB8F5BDB8EBB0ACE9AEAA
+ E7A8A5F4B2ADF2B0ABECB0ACF6C3BFE6AAA6E7AAA6F0B5B1EFB8B4F3BAB6E7AB
+ A7E6A7A3E6A6A2F0B8B4EFB6B2E7B2ACE4B7B3F0BAB6F0B6B2EEB4B0EEB3AEED
+ AEABECADAAF2B4B0ECB3AEEFB9B6F4C1BDEDB8B4F3BEB9F4BFBAF2BAB7ECB4B1
+ E6B0ABF2BDB9F2BBB8F4BFBAECB6B2F2BAB6F0BBB8EDBEBAE3B2AEE0ABA8EDB8
+ B4EDB9B6EAB9B6EAB7B4E4B2AEE9B6B3F0BDBAF5C2BFF6C4C1EDBDB9E4B5B2F5
+ C5C1F8C7C3F6C6C4E3B5B3ECC1BFF2C9C5E7BEBBDFB5B2F3C9C6F2C9C7ECC4C2
+ EDC5C4EFCAC7EBC5C4E5C1C0E4C3C1ECCBC9ECCAC9EAC7C6E7C3C2E7C3C2EDC9
+ C6EDCBCACCB1B0968281B49D9CEBCFCEEBCFCEEBCECDE9CDCCEECFCEEBCCCAF3
+ D4D1D2B8B6947F7E998584998583CAAEACEACAC7EDCCCBE6C7C5E4C4C4EACBC9
+ E7C9C7E0C2C0D5B6B5E0C0BFE0C0BF423A39000000EDCECCE7C9C7EFD0CFEBCD
+ CCE9CBC9EED0CEF0D4D2EDD0CEEDD0CEF0D5D4EFD4D1F0D5D4EFD4D2E3C7C5ED
+ D1D0F2D8D5E6CDCCE5CDCCEAD2D1E5CECCE9D1D1EDD6D5E5CDCDEED8D7EDD6D5
+ E7D1D0EDD6D5E9D2D1E0CACAE9D1D0F3DADAE5CECDE5CECDEBD4D4EAD4D1F4DC
+ DBEED7D7ECD4D4F3DBDAEDD7D5ECD5D2ECD2D1E5CECCDFC6C5DCC5C4EDD5D4EC
+ D5D5ECD5D5E6D1D1EAD6D5F0DBDBEFDBDAE9D5D5F0DEDCF2DFDCEDDADAF2DEDE
+ EEDBDBE3D0D0EDDADAEEDCDBEEDBDBE9D6D5F0DCDBE9D7D6DAC7C7F0DEDCF4E1
+ E0F4E0DEF4DFDEF2DFDEECD8D6F2E0DEF3E0DFF3DFDEF0DFDEF0DCDBECD9D8E5
+ D4D2E4D1D00000000000000000E1CCCBE0CBC9E0CBCAD1BDBAD2BFBEE1CCCAEE
+ D9D8F2DFDCE6D2D1F0DFDEE7D6D5DCCAC9F0DEDCEFDCDCE7D6D5E6D5D5ECDADA
+ E1CFCEE9D6D6EBD9D9E9D7D8EDDCDBEAD7D7EBD8D7E9D6D6EBD8D7EBD8D8EAD7
+ D6E9D5D4E4D0CFE9D5D5E7D4D4DAC6C6EAD5D2EED7D7E9D1CFE5CFCEE5CFCFEB
+ D5D4EAD5D2E6D0CFE4CFCDE6D1D0E6D0CFE9D4D1E4CECEEBD5D5EAD2D2DCC5C5
+ D6C0BFD8C3C2DBC5C4D7C0BFD5BEBDEBD4D2F2DAD9EED7D7EED7D6EFD9D7EED5
+ D4EDD2D2EBD1CFF0D6D5EFD5D4E7CDCCEFD4D2EDD2D0DEC2C2EACFCEEDD2D0EC
+ D1D0E7CDCCEBD0CFEBD0CFEBD0CFE6CCCBE6CBCAE7CBCAE5C7C6E7CBC9E2C4C3
+ ECCDCBF0D0CFEACAC7EACAC7E6C6C4F0D0CFF3D2D0E9CAC7EFD0CFF3D2D1E0C1
+ C0F2D1D0F3D4D2EECECDEACBC9D9B9B7DEBDBAE0C0BED4B4B2D5B5B3E5C4C3F0
+ CFCDF5D5D1E9C7C5E4C1BFECC9C5F4CFCCF2CCCBEAC4C2EAC4C2EEC7C6EEC7C6
+ EAC4C1E4BFBDE2BBB9E5BEBDE2BDBAE3BDBAE9C0BFDFB8B5EAC2BFEAC1BFE7BF
+ BDEBC1BFEBC0BEE9BDBAEBBFBDEBC0BEEBC3C0EBC4C2ECC1BFEDBEBBE4B3B1ED
+ BFBBEFC4C1EEC4C2EFC2BFF0C0BDEEBDB9EAB7B3F0BBB9F4BEBAF3BDB8E3ABA8
+ E5ABA8EEB8B5EAB9B5E3B0ABEAB3AEE3ADAAF0BEB9F3BBB8E9B0ABEDB3AEF3B7
+ B3F5B8B4F3B6B2EEB0ACE9A8A5F0B1ADEFB5B2F4BAB6F3B7B3F3B7B3EDAEAAF6
+ B2ADF4B2ADEFB3AEF6C5C1F2B4B1F0B1ACF5B9B4F6BEB9F6BDB8F5B6B2F3B0AB
+ F3B2AEF7C0BBF6BBB6EEB8B4E6BAB6F3BAB6F3B7B3EEB3AEF0B2AEEEB0ABEDAD
+ A9F0B4B0E3AAA6E9B4B0F2BDB8EDB5B2F0BAB6F3BDB9F4BAB6F4B9B6F2BAB7F2
+ BBB8F2BAB8EFB8B5EEB6B2F5BEBAF0BDB9EEBDBAE7B4B1E3ADAAEBB7B3EDB9B6
+ EEBAB7EFBAB8EEBAB7EEBBB8D2A5A27E63622D2323000000130F0F7B62609A7C
+ 7AECBDBAD8AAA6DBB1ACEBC0BEE3B8B5DFB4B2EDC2C0987F7D14101000000000
+ 0000605251B09593E6C4C3EDCAC9EECAC7EBC6C5EDC9C6EAC6C5D0B2B02C2525
+ 2B2525AD9997E9CDCCEBCECDECCFCEE9CCCAE9CCCBEBCCCB7867661412120000
+ 00423938988483988382947F7E6053527C6B6AF0D1CFEED0CEE9CBC9F2D2D0ED
+ CDCCDBBEBBD8B9B7E0C0BE3D3534000000E7C9C6EBCBCAEFD1CFE9CCCA7A6B69
+ 2C2625000000000000141212423A3A423A3A443D3C423B3B1311100000000000
+ 00B09D9CE7CFCEEED6D5EDD6D5EED6D5EED7D7E7D0CFEED8D7786C6C433C3C14
+ 1313453F3E433D3D2B2626443D3D8D7F7ECFB9B9EDD6D4E1CAC9ECD4D2E6CECE
+ E3CBCAEDD7D6AB9998423B3B1413120000000000005E54549A8C8BD5C1C1F6DF
+ DEF0DBDAEBD6D7F0DBDBE9D5D4DAC6C6EDDAD9F0DCDCECD8D7F2E0DFF0DCDCE4
+ D0D0DCCBCAE0CDCCDCCAC9D9C5C5E5D1D1E7D4D4D4C0BFD9C6C5F0DCDBEDD8D7
+ F3DFDEF0DCDBECD8D7EFDBD9EEDAD9EBD6D5ECD7D6EFDBDAE1CECDE0CECDEFDC
+ DA0000000000000000F3DFDCF7E1E0F9E4E2F2DCDBF0DCDAEED9D8F2DEDCF4DF
+ DEECDAD9F2DFDFECD8D8E4D1D0EDD9D9EDDBDAEBD9D9E7D8D7ECDADAE5D4D2E5
+ D4D2E1D0CFE6D5D4E6D5D4E4D1D1ECD9D9ECD9D8E2D0CFE6D5D4E7D5D5E7D5D4
+ E3D0D0E9D5D4E7D4D2DAC7C6DAC6C4E0CAC9DBC6C4DAC5C4E6D1D1ECD7D5ECD6
+ D5E6D1D1E5CFCFE6D0CFE7D2D0EBD4D5E7D1D0EBD5D5E9D2D1E6D0CFDFC9C7D7
+ C0C0D7C0BED7C0BFD9C2C1E6CECDEED7D7E5CECDEED7D7EFD8D8EED6D4EDD4D2
+ E4CBCAEED4D2ECD1D0E3C9C7EDD0D0E3C7C6DAC0BED9BEBDDFC4C4E6CCCBE1C5
+ C4E2C6C6E5CBCAE6CBCAE1C5C4E5CAC9E7CBC9E1C4C3E6C9C7E4C5C3EACCCAEB
+ CCCAE2C3C1DFBFBEE7C5C4F0CFCEEFCFCDE4C3C2EECDCCEFD0CFDABBB9E9CAC7
+ EECECDE9CAC7E4C3C2DBBBB9D7B7B5D5B5B3D4B4B2DFBFBDECCBC9F5D4D1F5D5
+ D2F4D2D0EDCBC9F2CECBEECAC9EDC7C6F2CCCAEFCAC7F0CBC7EEC7C6E9C3C1E9
+ C3C1E5BFBDE2BBBAE2BAB9E6BFBDE9C1BFDCB4B2E7BFBEE6BEBBE3BBB8E5BBBA
+ E4B9B7E1B4B2EABDB9E6BAB8EABEBBE9BFBBEBC4C1E9BDB9E1B1ADECB9B6EDBE
+ BAE7BDB9ECC1BEECBEB9F0BEBBF2BFBAEFBAB7F3BEBAF3BDB8EFB6B3F2B7B4F4
+ BAB7F4BFBBF4C2BEF6C0BBF5BEB9F6C0BBF6C0BBF0B7B3EFB5B1F3B6B2F4B7B3
+ F2B4B0ECADAAECACA8EBA9A5EFB3AEF3B9B5F3B6B3F2B5B2E9AAA6EEAAA6EDA9
+ A5E7A8A4F0BEB9E3A7A3EAA9A5F2B5B1F3BBB6EEB6B2EFB1ACEFACA8EBAAA6F4
+ BAB6F3B7B4EBB6B2E4B6B2EEB5B2ECB1ACE5A9A5EFB0ACEEADAAEDABA8EFB3AE
+ E6ADA9E7B4B0F2BAB7EBB2ADF2BAB6F5BDB8F5BAB6F5BBB8EDB6B3EBB5B1F0B8
+ B5EFB6B2F2B7B5F6C1BDF5C4C1F5C1BEEEB7B4EDB8B4F4C0BDF2BEBAF3BFBBF3
+ BFBAF4C0BBF4C0BDF2BDBAF4C2BE9C7D7B000000957674F5C4C2F8CAC6F3C6C3
+ E3B5B2E6B9B6F5C7C4F2C4C2E1B5B3EEC2BFF2C7C58D7372000000141111ECC7
+ C6E6C3C1E2BEBBE7C2C0E6C1BFDEB9B7E3BFBE907B7A000000433B3BE7CBC9EC
+ CECCECCDCCE9CBC9EACCCBE7C9C7CFB3B2443B3B000000463D3CD2B5B3E6C5C3
+ F3D1CFEFCECDEFCECCEECFCDD1B5B3443B3BCAAEADE1C2C1EACBC9EDCDCCE9CA
+ C7D7B7B5D2B2B13D3333000000EACAC7ECCDCBF2D2D1ECCECDEDD0CECFB6B400
+ 0000433C3BECD0CEECD0CEE4C9C7EFD4D2EDD1CEE4C9C7D1B9B8453D3D2B2625
+ E6CDCDEDD5D4ECD5D2EED6D6EBD2D2766A691413135E5554C7B2B2E3CCCBE9D2
+ D1E7D1D0EAD4D2B4A2A11412122C2828F0D9D9EDD7D6F3DBD9EBD2D1ECD4D4F3
+ DAD9EDD5D4F0D7D5DAC3C10000002C2727DEC6C5EDD7D6F0D9D9F2DAD9E5D0CF
+ E6D2D0F0DBDAE7D4D2DBC7C7EAD7D6EAD6D6ECD8D7F2DEDEF2DEDCEDDAD9ECD9
+ D9F2DFDEEFDCDCEDDAD9ECD7D7EBD7D6E6D1D1F0DCDBF3DFDEE3CECCEFD9D8EC
+ D8D7DCC9C6EDD9D9EEDAD9EDD8D8EFDBDAF2DEDCEDD9D8EFDEDCF4E1E0000000
+ 0000000000EFDAD9F5E0DFFBE5E4F6DFDEF5DFDEF0DBD9E9D4D2E4D1D0E5D4D2
+ EFDEDCEFDCDBEBD8D7E7D6D5E6D5D5E9D8D7E6D5D5EBD9D9EBD9D9E9D7D8E7D5
+ D5EBD9D8E2D0D0DBC9C9E7D5D4EAD7D7E5D2D2E2D0CFEAD6D7EBD8D7E9D6D5E9
+ D5D5EAD6D7E7D5D4EBD6D6ECD7D7E1CCCCE0CBCBE6D1CFEAD4D2EAD5D4E9D2D2
+ E7D1D1EAD4D4ECD4D5ECD5D5ECD6D6EDD6D5ECD5D4EDD6D4EED8D7EBD4D1EDD5
+ D4EAD4D1DFC7C6EED7D7F2DAD9EBD4D4F2DADAF2DAD8F2D9D8F2D9D8ECD2D0EF
+ D6D5EBD1CFE9CFCDF2D7D5EDD0D1EACFCEDEC3C2E5CACAEED2D1EBCECDE5CAC9
+ E7CCCBEED1D1E9CCCBEDCFCEEFD1D1EDCFCEEDCFCFEDCFCDF3D5D4F3D5D2EDCE
+ CCDEBDBBD7B7B6E9C7C6F0CFCEE9CAC9E9C7C6E5C5C4D9B9B8E6C7C6EFCFCEEF
+ D0CFEFCECDEBCCCAEBCBC9EDCBCAEECDCBF3D0CFEFCECCF2D0CEF4D1CFF2D1CE
+ EECECBEECCCBEECBC9ECC9C6EDC7C6EEC7C6F0CAC7EDC6C5EAC4C2ECC5C3E9C1
+ BFEAC2C0E7C0BFE7C0BEE7BFBBE2B9B7EAC1BEE7BFBDE2B9B8E6BEBBE4B9B7E3
+ B7B5EBBFBDEBBEBBECBDBAEBBEBBEDC1BFE9C1BEE4B7B4EAB8B5ECB8B6ECBAB8
+ F2C6C3EFC3C0EEBFBAEEBBB8ECB8B5EDB8B4EFB8B5E6AEACE2A8A5EDB2AEE5AC
+ A9E4B1ACEFBAB7EDB5B2EBB3B0F2BDB9ECB4B0EBAEAAF0B3AEF4B5B1F3B4B0F0
+ B1ADF3B2ADEEACA8F0B1ACF2B7B3F3B6B3F3B6B2EEB0ABF5B0ABF4ADA9EDABA7
+ F3BDB9EEB2ADEFACA8F0B2ADF0B7B3ECB2ACEFAEABF4AEA9E6A6A2F2B7B3F4B7
+ B3EFBBB7E7B7B2F0B4B0F0B4B0ECADA9ECABA7EEABA7EFADAAF3B5B1E7B0ABEA
+ B4B0F4BBB7EBB1ADF0B7B5F6BBB7F7BAB7F7BEB9F3BBB7F5BDB9F5BDB8E4AAA7
+ EEB7B3F5C3BFF4C0BBF5BFBAF4BEB9EEBAB6F4C0BBF5BFBBF3BEB9F4BFBBF4BF
+ BBF0BBB9EFBBB8F3C0BD9C7D7A000000927371F0C1BEF3C5C3EABDB9E0B3B0EA
+ BDB9F6C6C4F6C9C5E1B4B2F3C6C3F8CDCAF0C5C3000000453B3AEDC7C6E6C0BE
+ E0B9B7E9C2C0E6C1BFE0BBBA937E7D000000433B3AE6C9C7E3C4C2E7C9C6E4C4
+ C3E5C5C3E6C6C5E2C1C12C25250000007B6868EFCFCDEFCECDEAC7C6EFCECCEC
+ CCCAEBCBCAEECECCEDCCCBF2D1CF463D3CCCB0AEE9C9C7EBCCCAEECFCDDBBAB8
+ D6B6B4403737000000F2D1CFEDCECCF0D2CFE6C9C6E9CBCAE7CBC9000000443C
+ 3BF0D5D2EFD2D0EACECDF0D4D2E9CCCBDEC3C1E6CDCBE9CFCD131111DCC2C1E9
+ D0CFE7CECDEDD5D5443D3D000000988989EED7D7EAD2D2E6CECDEAD2D4EBD4D4
+ EED8D6EDD7D6CAB6B6000000F4DCDBF3DAD9F4DBDAECD5D5EFD8D6F0D8D6E9CF
+ CEE4CCCAF4DBDA0000003F3939D5BFBEDEC6C6E7D0CFF0DAD9E7D2D1E5D0D0EC
+ D8D8E6D2D1E5D1D0E7D5D2E2CFCEEAD7D7EAD7D7E6D2D1ECD8D8EFDCDCF2DFDE
+ F2DFDEF0DEDCF2DEDCEAD6D5DFCCCBEFDBDAF7E2E1F2DCDBF0DBDAEFDAD9F2DE
+ DCF4E0DFF4E0DFF2DFDEF3DFDEF4E0DFF2DEDBEDDAD9F3E0DF00000000000000
+ 00E5CFCDF0DBD9F9E2E1E6D1CFE6D2D0ECD8D7EDD9D9ECD8D9E1CECDECDAD9EC
+ D8D8ECD8D8EDDBDAE5D4D4EBD9D9EAD9D8ECDBDAECDADAE6D5D4ECD9D9EEDCDB
+ EAD7D8DFCBCBE3D0D0EAD7D7E5D2D2EAD7D7E9D5D5E2CFCFE2D0CFE2CECEE9D6
+ D5E5D1D1EAD6D6EBD7D6DFCACADFCACAE9D2D2EAD5D4EBD5D5EBD5D5E6D1D0EA
+ D5D2EAD4D2ECD5D5ECD7D6EDD6D6E7D1D0ECD5D4EED7D7F0D9D7F0D9D7EDD5D5
+ DEC6C5EED7D6ECD4D4DBC5C4EFD8D8F0D8D7EED5D5EFD7D6EDD5D2F4DAD9EFD6
+ D5EFD6D4F0D7D6EDD1D1EFD5D4E9CDCDEFD4D4F3D6D5EED1D0E5C9C7E2C5C4EC
+ CFCEE6CAC9E9CBC9E7CAC9DCBFBEDFC1C0E5C6C5EECFCEEDCECCEDCDCCE7C7C5
+ DFBFBEEDCDCBF0D0CFF2D1D0F2D1CFF0CFCEE1C1C0EBCBCAEFCECDEBCBC9E9C7
+ C5E0C0BEEECCCCEECDCBEECDCBEFCECCDBBAB8DFBEBAEBCAC7EBCAC7ECCAC7F2
+ D0CDECCBC9EDCAC7E5C1C0EAC5C3F0CBC9ECC5C3E5C0BEECC5C2E9C2BFE5BDBB
+ E3BAB9E0B7B5E3BAB8E4BAB8EBC1BEEBC1BEE9BFBBEBC2C0EAC0BEE7BDBAEBBE
+ BBE7BBB8EBBDB9EBBDBAECBEBBEBBFBBEAC1BEE7BAB6E9B5B3EBB7B3F0C0BDEE
+ C3C0E3B5B3E7B5B3E9B4B0F2BAB8F3BBB7F0B7B4E7AEAAEEB2AEEBAEAAE5ADAA
+ EFBDB8ECB4B1EDB4B0F2BAB7F2BAB6EFB4B1EDB0ACF4B5B1F3B3AEEFAEAAF2B1
+ ABF2AEAAF2ADAAEFB3AEEDB1ACEEB1ACECADA9F3AEA9F3AAA6F3ADA9F5BDB7F0
+ B4B0F0ACA8F4B4AEF5BAB6EBB0ABF2B0ABF0A9A5EDABA7F4B8B4F5B6B2F4C1BD
+ EEBAB5F3B5B0F2B3AEEDACA8EEABA6EFABA7EDACA8EFB3B0E4ADAAE9B2ADEFB5
+ B1E4ABA7EDB3B0F5B7B3F6BAB7F7BFBAF5BDB8F6BDB8F6BAB6ECB1ADF2BBB8F4
+ C0BDF4BBB8F4BAB7E9B3AEEDB8B5F0B9B6ECB6B3E9B2AEEEB8B5F3BDBAEFBAB8
+ E9B6B3EBB8B5977674000000907270F0C3C0F4C6C3EFC1BEE4B6B3E4B7B4EFC2
+ BFEEC1BEDAACAAE4B7B4F4C7C5ECC2BF000000453A39F0C7C5EAC0BEE5BEBBED
+ C7C5EECBC9B19896000000141212CCB1B0E6C9C5E5C5C3EDCCCBEDCBCAECCBCA
+ EBCBCA5D4F4F000000443B3BE9C7C5EECDCBEECCCBE7C5C3E9C7C5EBCAC7F3D1
+ CFF2D0CEF2D1D0EECECCD1B5B3141110DFBFBEEECDCCEECFCDE6C5C3E4C3C245
+ 3C3B000000EBCCCAE6C6C4EDCFCDE6C9C5E7CBC9EACDCB000000433B3BECD0CE
+ EFD2D0EBCFCDEDD1CFEED2D1EACFCDEED5D2ECD1D08C7D7CAB9998E7CECCE6CD
+ CC796C6C000000908181EDD5D4EDD6D5EED6D5EED7D6EED8D6E7D1D0EFD8D7EF
+ D8D7E3CCCB7B6D6D9A8A89F2D9D8F0D9D7EFD8D6EDD6D5EED6D5EDD5D2DBC3C1
+ EED8D6000000443D3DE0C9C7EFD9D8F4DEDCF5DFDCF2DBDBF0DCDBF3DFDEF2DE
+ DCF2DEDCF0DCDCE3D0D0ECD9D9F2DEDCF0DCDBEFDBDBE9D6D6EBD7D8EEDBDBF2
+ DEDCF4E0DFEFDBDAE5D1D1F0DEDCF6E1DFF5E0DFEFDAD9ECD7D6EBD7D5EBD7D6
+ F0DCDBF0DCDBF2DFDEF5E1DFF2DEDBEBD7D6F0DEDC0000000000000000F2DCDB
+ F3DEDCF8E2E1DEC9C6E0CAC9DFCBCAE6D2D2ECDAD9E4D2D1E6D4D2E3D0CFEBD8
+ D7EEDCDBE6D5D5E1CFCFE2D0D0EBD9D9EBD9D9EBD8D8ECDAD9EEDEDBEAD7D6E7
+ D5D5EBD8D7EAD7D7E6D4D4EBD9D8E0CCCBD4C0C0D1BEBED8C4C4E1CECEDCCACA
+ E7D4D4EBD7D6E4D0CFDECAC9E7D4D2E7D2D1E6D2D0E9D4D2E4CECEE9D4D2E6D0
+ CFE4CDCDE4CECEE7D1D0E2CCCBE3CDCCEBD4D2EBD2D2EDD6D5E6CDCDDBC2C2E7
+ CFCEE6CECDE0C7C6EDD5D2E9CFCFE4CBCAE9D0CFE7CDCCF2D9D8EFD6D4F0D8D7
+ F3DAD8EFD7D5F2D8D6EDD2D1F0D6D6F4D8D8F4D8D7F0D5D5EED1D0F0D5D2ECCD
+ CDEBCCCBD6B8B7D4B6B4D5B6B4D5B6B4E2C3C1F0D1D0F4D5D2EDCCCBE7C7C6EE
+ D0CFF2D1D0F2D1D0F0D0CFEFCFCEE6C5C4EFCDCBEFCECCEBC9C6E4C2C0DAB8B7
+ E9C7C5E5C4C2EDCBCAEFCECCECC9C7E6C4C3EDCAC9E9C6C5E7C4C3EFCCCBF2CE
+ CCF2CECDECCAC7F3CECCF2CDCBEFC9C7EDC6C5ECC5C3E9C1BFE9C0BEEDC4C2E5
+ BDBAE6BEBAEAC0BEECC1BFECC2BFEABFBDEBC0BDEAC0BEE9BEBBEBBFBDE7BAB8
+ E9BAB7E7B8B6EAB9B6EBBBB9EBBFBAECC2C0EBBDB9E6B3AEEAB3B1E1B0ACDBB0
+ ACDBACA9DCA9A6E3ACAAF2BAB7F2B9B6EFB6B2EEB3B0E7AAA7EAADA9F2BBB7F0
+ BBB7EFB5B1F2B7B4F0BAB6EFB6B2E5A8A4EBABA7EDABA8E9A7A3EAA7A3EEA9A5
+ EFA8A4E7A8A3E2A5A1E3A59FE3A49FEDA7A3E9A29CEFA8A4F0B6B1EBAEAAEEA8
+ A4F3B1ADF3B7B3E9ACA8E4A19DE09893E4A29DF0B4B0F5B6B2F5C3BFF0BAB5ED
+ AEA9EEAEAAE7A4A1EAA6A2F0AAA6F0B0AAF3B6B3E7B1ABE9AEAAF2B7B3EBB2AD
+ E9ADA9EDAEAAF0B6B2EEB5B1EEB4B0EFB4B0EFB1ADEAB2ADEEBBB8F0BAB7EFB5
+ B2E2ABA7DCA7A3E2ABA7EDB5B2E1AAA6DBA5A1E0AAA6F0BBB8F0BBB8EDB9B6ED
+ BAB7977675000000967976F5C6C3F6C7C4F4C5C2E4B7B4EBBEBBEFC3C0EFC3C1
+ DEB1ADDFB4B1EEC3C1EABEBB000000433736EFC4C3E4BBB9E9C2C0EFCCCAD2B6
+ B4141212141111BFA4A2D9B9B6DBBAB9DBB9B8E9C6C4EDCBC9EDCBCACFB2B000
+ 0000141111E9C7C5E9C9C7E9C9C6EECDCBEBCAC7EDCBCAE9C7C6EFCFCDE4C3C1
+ EBCBC9EDCCCAEBCBC92A2323796968EFD0CFF3D1CFEFCFCEEBCBC9453C3C0000
+ 00E7C9C7ECCDCCF2D2D1EED0CEEDCFCDF3D5D2000000443D3CEDD0CFF0D5D2ED
+ D0CFF0D4D2EDD1D1EAD0CEEFD5D4EED5D4EAD0CFE2C9C6E5CCCBC9B1B1000000
+ 594F4EDFC6C6E6CDCDE9D1D1E7CFCFEED6D5EED7D7E7D1CFEFD8D7F2D9D8E9D1
+ D0EBD4D1F0D9D8F4DBD9F4DBDAF3DBD9F2DAD8F9DFDEF4DBD9EAD2D1F6DFDE00
+ 0000453E3EDAC4C4E7D1D0ECD6D5F0DAD9EBD5D4E5D0D0F0DCDCEAD6D5DCCAC9
+ D9C5C4D1BFBEDCC9C9ECD9D9EFDBDBECD9D8E1CECDECDAD9EBD7D8E9D5D5F3DF
+ DFF3DFDEE7D4D2ECD7D6EFD9D8F3DEDCF0DBD9EED9D8ECD7D6F0DCDBEDD8D8DC
+ C9C7D9C5C4E9D5D4E6D1CFEAD6D5EDD8D80000000000000000F7E1E0F8E2E0FC
+ E5E4F7E0DFF9E4E2EDDAD9EBD7D6EFDCDBEFDCDBF2E0DFEEDBDAEFDEDCEFDEDC
+ ECDAD9EDDBDBE9D7D8ECDADAECDADAEDDBDAE9D7D8EEDCDBEEDBDBEAD7D6ECD9
+ D8EAD7D6EAD7D7EDDAD9E2CDCDD1BEBED1BFBEDAC7C7E7D5D5E7D5D5EAD6D5EC
+ D8D7E1CECDDECACAE9D5D2E6D2D1E7D2D1EAD5D4E9D2D2EAD4D4E6D1D0E5CFCF
+ E7D1D0EBD4D5E6D0CEDCC6C5E1CBCAE9D1CFEDD6D6EAD2D1E6CECCECD5D2EBD2
+ D2E1C7C6EFD7D6F0D7D6E9CFCFE2C9C6E6CCCBF3D9D7F3D8D7F2D8D6F4D9D9EF
+ D7D6F3D8D8E4CBCAE7CDCCF3D8D6F3D8D7F0D5D5F3D7D5F3D6D4E7C9C7EDCECC
+ D7B8B7D9B9B8EACAC9D8B9B8D2B2B1DEBFBDEDCDCCE0C1BFE2C3C1EECFCEF2D2
+ D1EFD1D0EFD0CFF0D0CFEDCBCAF2CFCEF3CFCEF2CECCEDCAC9E9C6C3F0CECCEF
+ CCCAF0CFCDF2D0CEF2CFCEF0CECBF2CECCECCAC6E9C5C3EAC5C3E4C1BEEBC7C6
+ E7C5C3F0CECBF0CDCBEFCCCAEEC9C6EDC6C5EBC4C2EDC5C2EDC4C2E1B7B5E1B7
+ B5E7BEBBEDC1BFECC0BEE4B8B5EBBFBBE7BAB8EBBFBDEDC1BEEBBFBDECBDBAE6
+ B7B5EBBAB8ECBAB8EBBAB8EDBFBDEEC5C1EABAB7ECB8B4E0AAA7DFAEABE1B6B3
+ DCADA9DCA8A4E1A9A6EBB3B0ECB3AEECB2ADE3A7A4E6A7A4F0B3B0EDB8B4EAB1
+ ACEBAEAAF2B8B4F4BAB6F0B3AEF2B2ADF5B3AEF3B0ACF3AEAAF3ADA9F3AAA6E7
+ A49FE2A5A1E3A49FEEADA8F5AEAAEFA49FF2A8A4F4B5B1F3B7B2F2AAA5F5B2AD
+ F4B6B2EEB1ACE19C98E09591E3A29CECAEA9F0B3AEF4C4C0F4B9B5F3B3ADEFAD
+ A9E7A39EEDA5A1F5B0AAF3B3AEF5BAB6EFB7B2F2B5B1F5B9B5ECB1ACE9A9A5F0
+ B3B0EFB5B2EAB0ABEDB2ADEFB2ADEDB2AEEEB9B5ECB6B2E9AEAAECB2ADDFA8A5
+ DCA5A1E2A9A6ECB4B0E1A9A6DCA6A3E0A9A6F2BDB9F0BDB9F2BEBAF4C1BF987A
+ 78000000997B79F4C4C1F5C5C2F3C3C0EDC0BDF3C5C3F4C6C4F5C9C6EBC0BEE2
+ B9B6F0C5C3EEC3C0000000443837EFC5C3E6C1BFE6C4C2EDCDCC2C2626000000
+ 8E7B79DAB9B7E7C5C2EBC9C5D9B6B4D7B5B3E0BDBBEAC6C45F51510000007362
+ 62E4C3C1EAC7C6EAC9C7EDCBCAE9C7C4EDCBC9E5C4C2EECCCAEAC7C6EECBCAEA
+ C9C6EACAC7736362141111E9C9C7EFCFCDF0D0CEEBCBC9453D3D000000ECCCCA
+ F0D1CFF4D6D4F0D1D0EFD1CFEECFCE000000443C3BEDCFCDF0D4D1EACDCBEED2
+ D1E9CECCEAD0CEEFD5D4EFD5D4EDD2D2E9CECDEDD4D1605555000000CAB3B3EA
+ D1D0E9D1CFE7CFCFE4CCCBE9D0D0EAD0D0E9D1D0EDD6D5EED7D5E5CCCCF2DAD9
+ F3DAD9EFD8D7EAD2D1F0D8D8EDD6D4F4DCDAEDD6D5E7D0CFF4DCDC0000004740
+ 40E5CFCDEED9D8F4DFDEF6E1E0EFDAD8E0CBCBEFDBDAE2CDCDDAC6C6D4C0BFD1
+ BFBED6C2C2DAC7C6EAD6D6E6D2D2DAC6C6EEDBDAEDDADAE3D0D0EFDADAE9D2D2
+ DFCAC9E5CFCEDFCAC9E3CDCBEFD9D8F0DCDAEDD7D7F3DFDEF0DCDBE6D2D1D7C3
+ C2E9D5D4EEDAD9E9D5D4EEDAD90000000000000000F9E4E2FCE6E5F9E3E2E0CA
+ C9F2DEDCEBD7D6E5D1D0F2DEDEF2DFDEE7D6D5D9C6C5E2D0CFECDBDAEDDCDBEC
+ DADAE6D5D5E9D7D7EDDCDAEDDCDADBCAC9E9D6D6EAD7D7E4D1D1E6D4D4E7D6D5
+ ECD9D9EDDAD9EDDAD9D2BFBFD2C0C0E2D0D0E7D5D5E3D0D0E3CFCEE6D2D2DFCB
+ CADFCBCAEAD5D4E4CFCEE3CECEDBC5C5DBC5C5E3CECDE5D0CFE5D0CEE9D2D1EC
+ D5D5E6D0CFDEC6C6D9C2C2E0C9C9E6CECDEDD4D4E3CCCBE6CECEE7CECEDBC4C3
+ EBD1D0E7CFCEDFC4C4E2C7C6E6CCCBEBD1CFE2C7C5E4CAC9E3C9C9E0C6C5E9CF
+ CDDEC4C2DAC1BFE9CFCEEBD0CEDCC1C0EBCFCEF2D5D4EDCFCDF6D7D5F3D5D2E9
+ CAC7F0D0CFDEBEBBD2B2B1D6B6B4EDCDCBE9C9C7E5C5C4E7C7C6EBCDCBEACCCA
+ EACAC9E2C1C1DBBAB8EBCBC9EDCAC9E9C6C4DBB8B7E3C0BEDFBBB9DFBAB8ECC9
+ C6EECAC9ECCAC7E9C6C3DFBAB9DCB9B7DBB8B6E3C0BED8B4B3D9B6B4D9B6B4EB
+ C7C4EBC7C4E9C5C3E0BDBAE6C1BFE3BDBAE7C0BEEAC2C0E4BAB8E3B9B7E6BBB9
+ EABEBAE1B5B3DBAEACE9BBB8E7BBB9EBBEBBE9BEBAEBBFBBEFC1BFEDBFBBEBBB
+ B8E7B6B4EBB7B5EBBAB7EABBB8EAC0BDEEBFBAEDB7B4ECB5B2EBB9B7E2B5B2DC
+ ABA8DEA8A4EDB5B2F0B7B3F2B5B2EEB2ADE7A8A4EDACA8EBB0ABE7B2ADE9ADA9
+ EBAEAAF3BBB7F4B7B3F0B0ABF3AEABF3AEAAF4ADA9EDA7A3F2A9A4ECA49FE2A4
+ 9FE5A4A1F4B0ABF4ADA9E99D98EBA19BEFADA9E9AEA9E79E9AEFABA6F2B4AEF2
+ B3AEE59E99E1948EE9A6A1F2B2ADEDB1ABECBFB9EAACA8EDACA7EEAAA5ECA59F
+ F6ACA8F7B1ABF3B4B0F0B7B3E7ABA8E9ABA7F4B8B4EFB1ACF0B0ABEFB3AEE9AD
+ A9EBAEAAF5B6B2F5B6B2EDB6B2E3AEAAE5AAA7EAAEAAEFB6B3E3ABA8DEA6A2E5
+ ABA8EDB4B0E5ACA9DEA7A4E0A9A6F2BDB8EFBAB7F0BEBAF3C1BE967875000000
+ 2C24234538374638382C23234437367E6664F3C7C5F5CAC6ECC2BFDEB2B0E7BA
+ B7F0C2C1000000453A39EDC9C6E4C2C0EACAC77968670000005F5150EECAC9EE
+ CBC9E6C3C0EECBC7D9B5B4D7B3B1DBB7B4EECBC92C2525000000E9C7C5EBC9C6
+ E7C5C3E9C6C5EAC7C5E0BEBDEDCAC7E2C0BFE2C0BFE6C5C4E9C7C6EECFCDEDCC
+ CA897574000000C9ACABEECDCBEECECDEBCCCA463D3C000000DEBFBBDABBB8E7
+ CAC7EACBC9ECCECCECCECB0000003E3736DEC0BFE4C6C4DFC1C1E2C6C5DAC0BF
+ D7BDBA726565E3C7C7E5CBCBE7CDCDECD1D02C2727141212ECD1D1EED5D4EAD1
+ CFE1C7C5D9C0C0E0C6C6E1C7C6E3CCCAE9D1CFDBC4C2DCC5C3EFD9D7F2DAD9E9
+ D1D0DFC6C5EAD1D0F7DFDBF4DCDBEAD1D0D9C2C1E4CDCC000000453E3EE3CCCB
+ F0DAD9F3DCDBEDD8D6E4CFCEE7D1CFF2DCDBF0DCDAEEDAD9DAC6C5D1BEBED8C4
+ C4E9D5D5F2DEDEECD8D8DECBCAE9D6D5EEDBDAEDDBD9EFDBDAE1CCCBE4CFCEE5
+ CFCEE3CDCBDEC7C6E4CFCDEBD5D4E6D1D0DCC9C7E5D0CFEEDAD9EEDAD9EBD7D5
+ DAC6C5D2BFBED2C0BF0000000000000000FBE5E4FCE6E5D4BFBDC9B4B3D0BBBA
+ CFBDBBD0BEBDE5D1D0E4D1D0D1BFBED1C0BFD4C2C1E4D2D2E9D8D8DBCBCBD4C2
+ C2D9C7C6EBD9D9DECBCBD4C1C0D5C2C2D7C5C4D2C0BFD1BFBFD4C0C0EBD7D7EC
+ D9D9ECD9D9D4C2C0D4C2C1E5D4D2E7D5D5DAC7C6D4C0BFD5C1C1D6C3C3D8C4C3
+ E2CDCDE4CECED9C5C4D6C1C0D6C1C0E0CACAE1CBCAE4CFCEEAD5D4E7D2D1DAC4
+ C3D6C0C0D8C1C1D7C0BFD7C0BEE5CECDEBD2D4EED7D6DCC5C5D6BEBDD7BFBDD6
+ BDBBD5BAB9DAC0BFECD1D0F2D8D6DCC1C0D6BBBAD7BFBEE2C7C7EAD0CFDCC2C2
+ D6BBBADCC1C1DAC1BFD7BDBDD5B9B7D7BAB8E6C9C6F8D9D8F3D5D2DCBEBDD8B9
+ B8D1B2B0D1B2B0DFBEBBF3D1D0EFCFCEE9CAC9E9C9C9E0C2C1D7B7B6D6B6B4D7
+ B8B6D8B7B6E9C7C5F0CECDDBB9B7D5B2B1D7B3B2D6B2B1D5B1B0DFB9B8EAC5C3
+ E5C0BFDAB6B5D6B2B0D6B3B1DBB7B5E9C4C2D8B4B2D6B2AED6B2B0ECC7C4EFCB
+ C9DAB6B4D9B5B3D9B5B4E7C2C0ECC5C3EEC5C4EBC2BFE7BEBADFB3B0D7ABA9D7
+ AAA7D7A9A7E2B4B2EBBDB9E2B4B2D9ACA9DCB0ACECBFBBE6B7B5DBABA9DCABA8
+ DFACA9DEAAA7DCABA7DFAEACEDC3C0EFBDB9EAB2ADE4ACA9DEACA9DEB0ACE1AD
+ A9F0B7B4F2B7B3F2B6B3F0B3AEE9A9A6E2A29DE09F9CE1A9A5E2A8A4E0A29DE6
+ ABA7F3B7B3F4B3AEEFACA8F0ABA7F0ABA6EDA5A1F3A8A4E79C97E3A19BE5A49F
+ F2AEA9F3ADA9E39893E29691E5A19BE5ACA7E69C98EEA8A3F2B3ADF3B3ADE79F
+ 9AE3948EEDABA6F4B3AEF3B7B2E3B3ADE2A39EE4A19CE39D99E49B96F5AAA5F7
+ B2ACECADA8E1A7A3E1A49EE5A9A4F4B6B3F3B1ACEEAEA9E3A6A3E0A49FE1A29E
+ F4B2AEF5B9B4E1ADA9DFA5A1DFA39EE3A9A6F2B7B4E9ADAADFA4A1E9ADAAF2B8
+ B4ECB3B0DEA6A3DEA7A4E4B0ABE1ADAAE1B0ABDBABA88B6C6A000000907170DB
+ ACA9DCADABDFB0ACC29A98403433141111D4AEACDBAEACD9ACA9D8AAA8F3C6C4
+ 0000004339388A75748A767471605F000000292222ECC7C5ECC7C5EBC5C4DEB8
+ B6DAB5B4D8B2B1D8B3B1E1BDBBEFCCCA0000002C2524EBC7C5DCB9B8D7B4B3D8
+ B5B3DBB9B7D8B5B4E3C0BED5B2B0D1B0ADD2B1AEDEBDBBEBCCCAD8B9B7867271
+ 000000917C7BEBCCCAEECECCEDCDCC443C3B000000D0B2B0D0B1B0D8BAB8E2C2
+ C1D6B8B7D0B2B10000003D3434CFB2B0D5B7B6E0C4C2DEC2C1D6BBBAA18C8B13
+ 1010D6BABAD4B9B8D9BFBFEAD0CF000000443D3DE7CECDE4CBCAD5BBB9D4BAB9
+ D2BAB9D6BFBEDBC3C2DAC2C2D2BBBAD1BBBAD9C2C1EDD5D5EDD7D6D1BAB9D0B8
+ B7D8C0BFF6DFDEF4DCDBD0BAB9CFB9B8D4BDBD0000003E3838DBC4C3E9D2D1D8
+ C1C0CFB9B8D2BBBAD1BBBAD1BDBBE0CBC9E7D2D1E3CFCFD1BEBED1BEBED6C3C2
+ DBC9C7D5C2C2D1BFBED1BFBFDBC7C7E6D1D1D6C1C0CDB8B7D1BBBACFBAB9CBB6
+ B4CBB6B4D2BDBAF3DEDCF0DBDACEBAB9CEBAB9D8C4C3EFDAD9DBC6C5CFBBBACF
+ BBBAD0BDBB0000000000000000D5C0BFD2BFBDC7B3B1D1BDBBF4E0DFE4D1D0CE
+ BBBBD2BFBFDBC9C7DAC6C6D1BFBED9C6C6E6D6D5E0CFCED5C4C4D5C3C2E0CECE
+ E9D8D8D5C2C2D5C2C2E2CFCFD8C5C4D1BFBECFBDBBD9C5C5DECBCBE7D4D4DAC7
+ C7D4C2C1D6C3C3DBCBC9E6D4D4DAC6C6D4C1C1E0CCCBE3D0CFE5D0D0E3CECEE6
+ D2D1D6C1C1D6C1C0DCC7C6E7D2D2E5D0CFE9D2D1EDD6D5DCC6C5D6C0BFD9C3C2
+ EAD4D4E0C9C7D6BFBFD9C1C0EAD2D2E9D1D1D6BEBED7BFBEEDD4D2EDD2D1D4BA
+ B8D5BAB9EFD4D4EFD6D4D7BDBBD6BDBAE9CECDE9CECDE4CACAD6BDBBDAC0BFE9
+ CECCD2B7B6D8BDBAEBCECCD1B4B3D2B6B5E5C9C7D1B4B4D1B3B1D1B2B1D2B3B2
+ D5B5B3E5C6C4E9C9C7E7C6C5DFC0BFDEBFBDD9BAB8D6B5B4E0BFBEEBCAC7E5C5
+ C3EAC9C6E9C7C5D5B3B1D6B4B2EECAC9E9C5C4D5B1AED6B1AEEFCAC9F0CBC9D9
+ B4B2D6B1AEDBB7B4EAC5C2EAC5C3D6B2B0D6B1AEDAB6B4E9C3C1ECC7C4D9B4B2
+ D9B4B2D9B5B3E6C2C0EBC5C3ECC4C3E9C0BFEAC0BEE6BAB8E3B7B5D7A9A7D8AB
+ A8EDC0BDEBBDB9E3B4B2D9ABA8E6B8B5F0C1BFDCAEACDBABA9E9B7B3EDB9B6DF
+ ABA7DBA7A4E5B2AEEDBDB9E1B5B2DEABA8DFA6A3DFA7A4E7B6B3EDBEBAEFBAB6
+ F2B7B3F2B5B2F3B5B1EEADAAE09E9AE19D99EBABA7F0B9B5E1A39FE0A29DEBB1
+ ACF5B6B1F3AEAAF4AEAAF6AEA9F2A8A4F4A9A4E49792E39B96E3A19CF3ADA9F4
+ ADA9E49692E59691F0A7A3F2BAB5ECA19BF0A8A3F0B0AAEEACA8E49995E4948E
+ E7A6A1F4B2ACF4B9B4E4B1ABE6A49EF3ACA8EBA39DE59A95EFA49EF2ADA8E5A7
+ A3E2A5A1E2A39DE4A7A3F0B0ABEEABA7E7A8A5E1A49FE1A39DE19F9BF2B2ADF4
+ BDB9EAB1ACE1A29EE1A5A2E7ADA9F0B5B1E7ABA7DFA39FEDB1ACF2B6B4EEB5B1
+ DEA6A3E1AAA7F4BEBAE4B1ACE0AEABDCABA78C6D6B0000008D6F6DDCACA9E6B6
+ B4EFC1BEE5B9B6DFB4B2463A39141110C09795D9ACA9D8AEABE9C2BF00000029
+ 22228972718D7675937D7B73605F3F34345A4B4AC4A3A1D8B2B0D8B2B0DAB3B1
+ DFB9B7E6C1C0EAC5C3EECBC9000000443A39E5C2C1D8B4B3D7B3B2E4C0BEECC9
+ C7DBB8B6EDCAC7DEBAB9D1B0AED5B3B1E6C6C4DEBEBBD4B4B387727200000094
+ 7F7EE9C9C6EACBC9EBCCCA433A3A000000D1B3B1D5B6B4ECCDCBDEC0BED0B2B0
+ D1B3B20000001412113D34333D3434443D3C453D3D3D3636131010000000E4CA
+ CAD5BAB9D4B9B8D9BFBF000000423B3BE4CAC9E2C9C7E0C6C5D4BAB9D2BBB9E3
+ CBCBD9C1C0DAC2C1D2BBBAD5BDBDE9D1D1E5CECED9C2C1D0B9B7D0B9B7D4BEBD
+ E5CFCEE9D1D0CFB9B8D2BBBAEAD4D10000003F3939DBC4C3E1CAC9CFB9B8DAC4
+ C3EDD7D6E4CECDD0BAB9D6C1BFEAD4D4EAD5D4D1BEBDD6C3C2ECD8D8E6D4D2DA
+ C6C5D1BFBED4C1C0EAD7D7E9D5D5CDB8B7D8C2C1EDD7D6E5CFCECCB6B5CBB6B4
+ F3DEDCF7E0DFEED8D7CEB8B7D4C0BFF2DEDBF0DEDBCFBBBAD2BEBDE7D4D2ECD7
+ D60000000000000000D2BEBBCAB5B4C7B4B2DAC5C4EAD6D5E9D5D4D0BEBDD2C1
+ C0DAC7C6D6C3C2D0BEBDE6D4D4E9D7D8E0CDCED5C3C4D6C4C4E4D1D1E7D6D6D5
+ C3C2DECBCBEDDADAE6D4D4D0BEBDCFBDBAEAD7D6EAD7D6EBD8D8D7C3C3D8C5C5
+ DAC7C7DECBCBE9D6D6E3CFCFD9C5C4E2CECDE2CDCDE5D1D1E6D2D1EAD4D4D5C1
+ C1D6C1BFE4CFCDE5D0CFE6D0D0E3CDCDECD5D5D9C3C2D6BFBFE5CECDEAD2D2E7
+ D1D0D7C0BFD6BFBEECD5D5E2CCCBD5BEBBE1C7C6EFD6D5F2D9D7D6BEBBD4BAB9
+ EBD0CFEFD5D4D7BEBDD6BDBAF2D7D6E0C5C4D8BEBDD5B9B8DEC2C1E1C6C4D5B8
+ B7DABDBBF6D8D7D6B9B7D1B4B3D6B8B6D1B3B2D8BBB9EECFCEE6C7C5E1C1C0EA
+ CAC9EECFCDEECDCDE3C3C2E1C1C0DBBBBAD6B5B3DCBBBAE6C5C3EBCAC7EECBCB
+ E7C4C3D5B3B1DFBDBAF0CECCF0CDCBD6B3B1D5B1AEEEC9C7F0CAC9DAB4B2D6B0
+ ADEEC9C6ECC6C4EECAC6D6B2B0D7B3B0EFC7C6EFCBC7ECC6C3D9B4B1DBB6B4DA
+ B5B2E2BDBAF0CBC9EFCAC7EDC6C4ECC3C1E5BAB7E4B7B4D7A9A7DCAEACEFC0BE
+ EBBBB8E2B3B0DAABA8EFBEBBF3C2BFDAACA8DFB1ACF3C2BFF0BFBAEBB7B4DBA7
+ A4EAB4B1E3AEABDFADAAE3B7B5E9B5B1E3A8A5EBB2ADEEBDB9EEBEB9F0B8B4EE
+ B2ADEFB3AEE3A5A1E09F9BE49F9CE7A29DEAACA8E3A9A5E1A19CE5A7A3F4B6B2
+ F2AEA9F4ADA8F4ABA7F2A8A3E69B96E49691E69894E49F9AEDA7A2F3ABA6E799
+ 94E79590EEA29CF2BBB6F2A59FF3A8A3ECA9A4E7A59FE59A95E69691E6A6A1F0
+ ACA8F3BBB6E9B2ABEAA6A1F7B1ABF5A9A5EEA19BF3A7A2F3B0AAE5A9A5E5A5A1
+ E4A49EE5A6A1F5B0ABF2B0ABE4A6A2E2A49FE4A29DE29E9BECB1ADF4BAB6F3B3
+ AEE1A39EE5A9A6E6A9A5EDAEAAE9AAA6E0A29DECB0ABF2B5B3EDB2AEDEA6A2EC
+ B4B1F6C0BBEAB7B4E2B0ACDCAAA690706D00000091726FDEADABE9BAB7F4C6C3
+ F0C4C1E5B7B4B793910000003F3232DCB3B0D9B4B2E6C5C30000003F3534D8B4
+ B1EFCBC9EEC9C6EAC4C2D9B4B28B7372130F0FBE9B9AE9C1BFEEC7C5E9C3C1E4
+ BFBEE3BEBDEAC5C2000000433938E9C3C1D9B6B4D6B3B1E0BDBAEDCAC9E3C1BF
+ F4D0CEEECCCBD6B3B1D5B5B3E1C0BED8B7B6DEBDBB41383800000095807FE3C3
+ C1E9CAC7EBCBC9423A39000000D1B2B0D8B9B8E2C4C2E3C4C3D1B3B0D6B7B600
+ 0000453D3CDABBB9D1B5B3EDCFCFEACDCBD4B8B6D5BAB8000000E5CBC9D8BEBD
+ D4B9B8D9BEBD000000433C3BE6CDCBE5CDCBE7D0CFD4BBB9D8C0BFEED6D5E4CC
+ CBDFC7C5D2BDBADAC3C2E6CFCEEDD4D5D8C1BFD0B9B7D6BFBDD5BEBDDFCAC7E6
+ D0CED4BBBBD5BEBDE6D0CF000000413B3BD9C2C0D5BFBECFB9B8E7D1D0E7D1D0
+ E6D0CFD1BBBAD1BDBBDCC6C6E6D1CFD0BAB9E5D0D0EFDBDBECD8D8EAD6D5D1BE
+ BDDAC6C5ECD9D7D9C4C3CDB6B5EDD7D6E7D1D0E6D0CFCCB7B6D0BAB9ECD6D5E3
+ CCCBD8C2C1CDB8B6E2CDCCF2DEDCEFDAD9CEBAB9E0CCCBE9D5D4F2DFDE000000
+ 0000000000E5D1CFCDB6B5C9B4B3D6C2C1F2DEDCF2DFDED1BFBED6C4C3EBD7D6
+ DECCCBD0BEBDE6D4D2EEDCDCE7D6D5D7C5C4D5C3C2ECDADAEBD9D8D4C1C1DBC9
+ C9EFDCDCEDD9D9D1BEBED0BDBDEBD7D7EAD6D6DFCBCBD4C1BFE1CECFE3D1D0D8
+ C5C4E3CFCFE1CCCCDAC7C6DAC6C5DCC7C7E2CECEE6D1D1E7D4D2D5C0C0D5BFBE
+ E7D1D1EAD5D4E7D2D2E5CECEEBD4D5DAC4C3D6BFBEE4CECCEDD6D4EDD7D6D7C0
+ BFD7C0BFE7D0D0E1CAC9D5BDBBDCC4C3EED7D5F2D9D8D6BEBBD4B9B9ECD2D0E9
+ CDCDD7BDBDD5BBBAF0D6D5E5CBCADBC1C0D5B9B8ECCFCFF2D6D5E5C9C7E7CCCA
+ F2D4D1D6B7B7D1B5B3D6B8B7D5B7B5F2D2D1F5D7D5F3D5D4EDCECCE6C9C6F0D1
+ CFEFD0CFEECECDEDCCCCE9C7C6D7B7B5DCBAB9E0BEBBEBC7C6EFCCCAE7C5C2D5
+ B2B0D8B5B3EECBCAEECCCAD7B5B2D5B3B0E7C3C0E5C0BEDBB6B3D6AEACEDC5C3
+ F0CAC7EEC9C5D6B0ADD7B1B0ECC5C2F0CBC7E0B8B6D9B4B2E6C0BEDEB6B5DBB4
+ B2EEC6C5EEC7C5EAC3C0EEC7C4E3B9B7E1B6B4D7AAA8DEB0ADECBEBAE6B7B4E0
+ B0ACDAA9A7F2C1BEF3C2BFDAAAA7DEADAAF4C3C0F3C1BDE9B6B2DCA7A4ECB6B3
+ E2AAA8DFA9A5EEBBB8EEC2BFE7B2AEECAEABE5ADA9EAB9B6F0BFBAEFB5B2EFB2
+ ADE3A5A1E09F9BE5A29DEEA8A4F2ACA8E6ACA8E2A49FE9A7A3F5B8B4F2B1ABF4
+ ACA8F4A9A5ECA19CE49792E69792F6A29CE69E98E59E98F2A8A3EB9C98E7938D
+ ED9B96EDB3ADF4A7A2F5A8A3ECA9A3E5A39DEB9D98EB9894E7A7A2E9A49EF2BD
+ B7E9ADA8E7A29CF4AAA5F3A39EF3A29CF5AAA5EEACA7E4A7A2F4B1ABECACA7E5
+ A19BF6AEAAF4B4AEE6A7A3E5A39EECA7A3E5A5A2E7B0ACF4B4B0F3B2ADE1A39E
+ E6A9A5F3B3AEF3B3AEE7A9A5DFA29DE5A8A5F0B6B2EBB1ADDEA6A3E6B2AEF6C2
+ BEF0BBB8E4B0ACDEA9A690706E000000967875DFB0ADE3B5B2ECBDBAEBBAB8E9
+ B8B4F5C4C1000000000000EAC6C3DFBDBAEDC9C50000003F3434D9B2AEF2C9C6
+ EFC6C4E4BDBAD9B2B0DBB4B2584847130F0FEBC4C2EEC7C5ECC5C3E0B9B6DEB7
+ B5EAC4C2433938423737E9C4C1D9B4B3D5B3B1D9B7B5DCBAB8D6B5B3E2C0BEEB
+ C9C6D4B2B1D4B2B1D9B8B6D7B7B5E9C7C5141111000000EACAC7E9C9C6EBCBC9
+ EDCCCA433B3A000000CFB0ADE3C3C2EFCECDECCDCBD0B1AED6B7B5000000443B
+ 3BDABDBBD1B5B4F0D4D1EDCFCFD2B6B5D7BBBAB49F9EEDD2D0DCC2C0D4BAB8DA
+ C0BF2B2626141212E4CCCAE5CDCCE4CBCBD4BBB9D7BFBEEDD6D4DFC7C5DAC3C1
+ D2BDBAE1CAC9EBD2D2EFD8D6D4BBBAE1CAC9E7D1D0D6BFBEE5CFCEECD7D5D7C0
+ BFD5BDBBEDD6D6000000443D3DDFC7C6E0C9C6CFB9B8EBD5D2EDD6D6E3CDCCD4
+ BDBBD6C0BFEAD4D2E5CFCDD0BAB9E2CCCBEFDADAECD6D6E6D1D0CFBAB9D5C0BF
+ EAD6D5D5BFBECDB6B4EDD7D6E6CFCEECD7D5CCB7B6CFB8B8EAD4D2E2CCCBDAC3
+ C2CCB6B5D2BFBEEED9D8F0DBDACEBAB9DBC6C5DCC9C7DECAC900000000000000
+ 00E0CBC9CAB5B4C9B4B3E0CCCBF6E3E2EFDCDBCEBABAD1C0BEF0DEDCDECBCAD0
+ BEBDDECCCCEEDCDCE4D2D2D4C1C1D2C0C0EDDBDAEDDBDBD2C0C0D4C1C1EAD6D7
+ E1CCCBD0BDBDD0BEBEE2CFCEDFCBCAD2C0BED4C1BFDBC9CAD9C7C6D6C4C3D6C3
+ C3D7C4C3D6C3C3E2CECDE0CBCCD8C3C3DCCAC9DCC9C7D5BFBDD5BFBDE4CFCDEC
+ D5D5E9D2D2E4CECDE7D2D1DAC4C3D5BFBDDBC3C3EDD5D4EAD2D2D7BFBFDAC3C2
+ EDD5D5E3CDCBD2BAB8DBC2C2F2D8D7F4D9D8D2B8B7D0B7B6E6CDCBE6CCCBD5BA
+ B8D5BBB9E0C5C5E1C6C5DEC4C3D5BAB8D9BEBEEBCFCDEFD2D2EBCECDE2C4C3D6
+ B8B7D6BAB8E2C4C3D7B9B7DABBB9E7CAC7DEBFBED4B6B4D4B6B4E0C2C1EED1CF
+ EECFCEEBCCCBDABAB8D4B4B2DCBBB9DCBBB9D6B4B2DEBBB9E1BEBBD5B1AED6B3
+ B1E9C5C2E7C3C2D5B2B1D6B3B1E2BFBDE5C2C0D8B4B2D6B0ADDFB7B6EBC3C2E0
+ B6B5D6AEABD7AEACE2BAB8E3BBB9D6B0ADD8B1AEE3BAB9DAB3B0D7B0ADE0B8B6
+ EBC2C0F2CAC6EFC6C5ECC4C1DCB3B0D8ACA9DBAEABF0C0BFEEBFBBDFAEACDAA9
+ A6E5B4B1F2C0BDDEABA8DBA9A7EEBDB8F3C1BEE0ADAADCA8A5E7B1ADE6B0ACE1
+ A9A5EDB5B2F2BEBAE6BBB7E2ACA8E1A39FE2A9A5EFC0BBF0BAB7EDB1ADE3A5A1
+ E2A39DE39F9BECA6A1EEA5A1E3A19BE2A8A4E7A6A1EDACA8EFB0ABF4ACA8F0A7
+ A2E49994E39590E79791F8A39DED9E99E49B96E99E98E79A95E7918BEF9A95E9
+ A9A4E79C97F2A29CE7A39DE6A29CF2A29BF29C97E6A69FE69E99EDBBB6E7A8A3
+ E9A29BEEA29CE79691E99692EDA59FE4A59FE4A49EF4B1ACECAAA5E49B96EBA6
+ A1EDABA7E5A49FE5A29CEBA7A3E5ACA8E4A6A1F0ADA9EEADAAE1A29EE2A29CED
+ ACA7F3B1ADE4A5A1E0A29DEBAEAAF3B7B3E2AAA6DFA8A4E4B1ADF4BEBAEBB4B1
+ E0A9A6DFAAA68D6D6B00000090726FDEB0ACE3B3B0E3B1AEDBAAA7E2B3B1E9BD
+ B9000000000000ECC9C5DEB9B7D9B3B10000003F3433D8B0ACE5BBB9EFC6C3E0
+ B6B4DAB1AEE0B7B58B7270000000907674EFC7C5E2BBB8D6B0ADD6B0ACEBC3C1
+ B19592000000F2CDCAD6B2B0D4AEACDCB9B7D8B5B4D4B2B1DAB8B7D9B7B6D4B3
+ B1D5B5B3DEBDBBD4B5B3877271000000433B3AE7C7C6EACACAEBCCCAEACBC943
+ 3B3A000000CFB0ADD5B5B3E9CAC7E7C7C6CFB0ADD0B1AE000000423A39D4B6B5
+ D2B6B4EED1D0ECCFCED1B5B4D5B9B8EDD1D0ECD0D1D6BBBAD4BAB8DAC1C07B6D
+ 6C000000CBB6B4E9D0CFDBC4C2D4BBBAD5BDBBE5CECDD7C0BED5BEBDD2BBBADA
+ C3C2EAD1D0D9C0BED2BBBAE7D1CFECD4D4D5BDBBDCC6C4ECD6D5D4BDBBD5BDBB
+ EBD2D10000003F3939DFC9C6D6BFBECFB9B8F2DBD9F0D9D8E3CCCCCFB9B8D1BD
+ BBEBD5D4DAC5C4D0BAB9D7C1C0EFDAD9EED9D9E2CCCCCFBAB9D5C0BFF2DEDCE6
+ CFCECDB6B4E5CFCEF2DAD9E7D1D0CCB7B5CEB8B7EAD4D2EDD7D7DAC4C2CBB6B4
+ D0BBBAE6D1CFDFCAC9CEB9B9D1BEBBEDD8D8EAD6D50000000000000000D0BABA
+ C7B2B0C9B4B4D9C6C5F3E0DFD2C1C0CEBABACEBBBADFCCCBD4C0C0CFBDBBD1BF
+ BED9C7C6D5C5C4D2C0C0D2C0C0DAC7C6EDDBDAD8C5C5D0BFBED8C4C4D7C4C3D0
+ BEBED1BEBEEBD6D7DAC7C6D1BFBED2C0BFEAD8D7E9D6D6D8C5C4D6C3C3DAC6C6
+ D6C2C3D9C5C5D8C3C3D6C3C3DFCACADECAC9D5BFBDD5BFBDE4CECEEAD5D2EAD2
+ D2E4CDCDEAD2D2EAD2D1D9C2C2D4BBBBD7BFBED6BFBED6BFBDE3CCCAE6CDCDD5
+ BDBBD0B7B6DCC3C2F3D9D8E3C9C7D0B7B6D0B7B6DEC3C1E3C7C5D2B9B7D4BAB9
+ D8BEBDE0C5C4E7CCCBDEC2C2D5BAB8DABFBFEED2D1E5C9C9D7BABAD6B9B9E7CA
+ C9F2D5D2E2C3C2DABDBBDABBBAD6B7B6D4B5B3D4B5B3DEBFBDEECFCEEED0CEEA
+ CCCBDBBDBBD4B5B3D7B7B5D6B6B4D5B4B2DEBAB9EFCCCADAB6B4D5B1AEDAB6B4
+ D8B3B1D5B1AED6B1AED7B4B2DAB6B4D6B1AED6B1AED6B1AED9B3B1D9B2AED6AE
+ ABD7AEACE1B7B5D8AEACD5ACA9E0B8B5E6BEBBDAB3B0D7B0ADE2B9B6E9C0BEF2
+ C9C5EAC0BEDFB5B2D8ADABD7ADAAD8ADAADCB0ACDEB0ACDAAAA7DAA9A6DEACA9
+ EDBBB8E6B3B1DCA9A6DEA9A7E0ACA9DCAAA7DCAAA6E6B2AEEAB3B0E3AAA7E4AA
+ A7E3AAA6E1ACAAE1B4B0E1AAA6E4A5A1EEB3AEEFC1BDF0B9B6EDAEAAE4A5A1E3
+ A19BE49E9AE49C98E39995E6A7A3F2B3ADF2ACA8EFB1ABF6B1ABECA19CE49691
+ E3948EE99691F7A29BF09B96E59C97E99D97E79A95E79089E9928BE7A49DE99D
+ 97E99892E7A19AE7A29CF29E99F09A95E9A69FE79F9AE9BDB7E7A39DE79D98E9
+ 9994E6948EE99893EBA39DE5A8A3E5A29CF6B2ACEFA9A4E59B96E7A59FE7A5A1
+ E6A29CEA9F9BEFB1ABE7AAA6E5A19CE9A7A2E6A7A2E19F9BE29E9AE3A19CE4A2
+ 9EE1A29DE0A29EEBAEAAF4B9B5DFA7A3DFA9A5EBB3B0F6BEB9EFB7B4DFA9A5DF
+ AAA78D6E6C0000008E706FDEACA9E0ACAADEAAA7DBACA9E1B6B4A78A89000000
+ 413736EAC3C0DEB6B4D9AEAC000000443837DAAEABDAB0ADDBB2B0D9B0ADDAB2
+ B0E6BDBB78636200000089706FD9B2B0D6B0ACD6AEABD6AEACF2CBC9F0CAC92D
+ 26267F6C6ADCB8B6D2AEACD8B6B4D8B5B3D4B1ADDFBEBDDCBAB9D4B2B1DAB8B7
+ EDCCCAD4B2B1120F0F000000AD9594EBCBC9EBCBC9EACAC9E0C2C03D35350000
+ 00D0B0ADCFB1ADDABAB8E6C7C5DCBDBACFB0AD0000003D3434D0B3B3D6B9B7E3
+ C6C4D5B9B8D0B4B3D2B6B5EDD1D1E3C7C6D2B9B7D2B9B9DFC6C4EDD2D2141212
+ 5E5554E4CCCBD5BDBBD4BBBAD4BBB9D7C0BED5BEBBD2BBBAD2BABAD1BAB8D7BF
+ BDD2BABAD4BBBBEDD4D5EBD4D2D4BDBBD6BFBEE5CECDD5BEBDD1B9B9D4BDBA00
+ 00003E3837D9C1C0CFB8B7CFB9B8F0DAD8EFD8D8D5BEBECFB9B8D0B9B9E1CAC9
+ D1BDBBD0BAB9D6C0BFECD6D6E2CDCCD1BDBBCFBAB9D0BAB9F2DBDAEED8D6D0BA
+ B9CEB7B6D0BBB9D0BAB9CCB7B5CEB9B7DBC5C5D6C1C0CCB7B6CBB6B4CAB6B4D5
+ C0BFE3CECDD9C4C2CDB8B7D2BEBDD5C0BF0000000000000000D7C1C0D0B9B8D0
+ BDBBDCCAC9E6D4D2D8C5C4D2C1BFD9C5C4E9D6D5DFCCCBD7C4C3DCC9C9E7D6D6
+ E1CFCED9C7C6D8C5C5E6D4D2F0DEDCE9D7D7E3CFCFE4D1D0DECBCAD6C3C2DCCA
+ CAECD9D9E9D5D4D9C6C5D9C5C5EAD6D7EAD8D7E4D1D1E5D2D1E5D1D1DECACAE1
+ CCCCE2CDCDDEC9C9E6D1D1E5D0CFD9C3C2E1CBCAECD4D5E9D2D2E7D1D0E3CCCC
+ EAD2D2E7D0CFE6CECDDEC5C4D9C1C1DCC5C4E1CAC7E0C7C6DAC2C1E1C9C7DCC3
+ C2E1C7C5E7CECCEACFCEDBC1C0DAC0BEE9CDCCF3D7D6EACFCDE6CCCBEED5D4ED
+ D2D1F3D7D7F4D9D8E6CBCBE3C6C6ECD0D0E4C7C7E1C5C3E7CBCAECCECDF2D2D2
+ EDCFCEE5C7C6E2C4C3DFC1C0DABDBBDFC0BFE1C2C0E7C6C4E7C7C5E3C3C2E4C4
+ C3E2C3C2E4C5C3DCBDBAE2C2C1ECCBC9F0CECDEBC7C5D9B5B3E9C3C1ECC6C4DF
+ B9B7E7C2C0E2BDBAE7C2C0EBC5C3E7C2C0E0BAB8ECC6C4F0C9C7E5BEBAEAC1BF
+ F3C9C5EABEBBEBC0BEF5C9C7F4CAC6E7BEBAE4BBB8F0C7C5F3CAC6F5CAC7EBC1
+ BEE3B8B6DBB1ADDFB4B2E0B6B3DFB4B1E2B6B3DEAEACDFADABEBB9B6EEBBB8F2
+ BEBAEBB7B4EBB6B3EFB9B6ECB7B3E7B3AEF4C1BDEEB8B5ECB4B1F2B6B4EEB4B0
+ EDB2ADEDB8B4EFC1BEF0B6B3EDAAA6F0B5B1F2C2BEF2B7B3EEACA8EBA7A2E7A2
+ 9CEDA59FEEA29DF3A9A5F4B8B4F2ADA8ECA8A3F5B4AEF5A9A4EC9D98E99893EB
+ 9792F59D97F49994F2A7A1EFA39CED9E99ED948DED928DEFA69FEFA69FED9A94
+ EAA29BEEA7A2F49E99F29A94EFAAA4EEA8A3F3C2BDEDA49EEDA19AEE9B95ED97
+ 92EF9F9AEEA9A4EDABA6F0AAA4F4B0AAF0A49EECA59FF2ACA8F0ABA6EBA29CF2
+ ADA8F4B8B4EDA9A4ECA7A4F4B2ADEFACA7EBA6A2F3ADAAF3ADA9EEABA7EDADA9
+ EAABA7F0B4B0F6BBB8EDB6B2E5ACA9F6BDB8F6BDB8F2B9B6E4ADAAE6B3B1997B
+ 79000000977674EAB5B2EFBBB9ECBEBAEAC2BFF2CECB2C2525000000B09290E4
+ BAB8E7BEBBE7BAB7000000453837EBBFBDE5BAB8E5BAB8E3BAB7EBC1BFEBC2C0
+ 141111000000DEB5B3E3BBB9ECC4C2DFB7B5EEC7C6F5CECCEBC5C2D6B5B32D26
+ 26D2B3B1E6C3C1EFCCCAEAC6C4E9C5C3EECBC9EAC7C5E0BFBDE9C6C5F0CFCD44
+ 3B3A000000726160EACAC9EBCBC9EBCBC9ECCBCAEBCBC9413838000000DCBDBB
+ E4C4C2E0C0BEEDCECCF3D2D0E2C2C1000000403837DABBBBEACDCBEDD1D0E5CA
+ C9D9BEBBE7CCCCF0D6D49887878D7D7DD9BFBEECD2D0EFD6D5988787000000CD
+ B8B6E1CAC7E1C9C6E5CDCCE6CECCDFC6C5D5BDBBD8BEBDE0C6C4948483736867
+ E9D1CFEDD7D5EDD6D5E3CCCBE4CCCCEED8D7EAD4D1D8C0C0E2CAC7000000463F
+ 3EE9D0D0DCC6C4E4CECCF3DBDAE7D1CFE3CDCCE3CDCCEED8D7EFD8D8E5CFCED8
+ C1C0E9D2D1EBD5D5E2CCCBDEC7C7D2BDBBD0BAB9EAD4D1EAD4D2E7D1D0E4CFCD
+ E0C9C7D7C1C0E4CDCCE7D2D1E5CFCED8C2C1D2BDBBDBC6C5E7D1D0E5D0CEF3DF
+ DCF8E2E1ECD6D5D5C0BFF2DEDB0000000000000000EED8D7EDD8D6E6D2D1F3E0
+ DFF2DFDEEDDADAE6D4D2ECD8D8F4E1E0F5E1E0F2DFDFF2DFDEF4E2E1F0DEDCF0
+ DCDCF2DEDCF2DEDCEFDCDBE2D0D0ECD8D7EEDBDBE6D2D2DECBCAE7D5D5E9D5D4
+ E5D1D0DCCAC7D5C2C1E3D0CFE6D2D2DAC7C7DAC7C7E9D5D5E9D5D4E5CFCFE2CE
+ CDE1CDCDE4D0CFE7D1D1DCC6C5ECD5D5EBD4D2E7D1D1E7D0CFDFC9C6DEC6C6E0
+ C9C7E5CDCCE6CECEDEC6C4E6CFCEECD2D1E7CDCDDFC5C4ECD2D1F0D7D6EED6D4
+ EED5D2F4D9D8F2D8D6E7CDCCEBD0CFF4D8D7F4D9D8F3D9D7F3D9D8EACFCEEDD2
+ D1EED4D2ECD0CFDCC2C1E0C5C4E1C5C4EACFCDEACECDE6CAC9E7CACAE6C9C7E0
+ C2C1E0C2C1E6C7C6E4C6C5E9C9C7E6C6C4EDCCCAE7C6C4E4C3C1E5C4C3EBCBC9
+ EBCAC9EBCAC9EECECDEECECCEFCECCEBCAC7E3C1BFF2CECCF3CECCF0CAC7EEC7
+ C5EAC2C0F2CAC7F3CCCAF2CCCAEEC6C4EEC7C5F3CDCAF3CBC7EFC7C4EFC4C2ED
+ C2C0F4C9C6F4C7C5F3C6C3EEC2C0ECC1BFEEC3C1EFC5C2F0C5C2EDC1BFE2B6B4
+ E9BDB9F3C7C5F0C4C2EDC2BFF0C6C3DFB3B0EBBDB8EEBDB9E5B2B0EAB6B3F2BD
+ B9F4BEB9F4BFBAEFB9B6EEB8B4F4BEBAEEB9B6EFB9B6F3BAB6F2B5B2F2B4B1F3
+ B4B0F3BAB6F4C4C0F3B7B3EBA6A2F0B4B1EEBDB7EFB3AEF2AEA9F0ABA6ECA49E
+ EEA29CF0A19BF0A9A4EDACA8EDA39DF5B2ACF5ACA6F6A7A2F5A29BF39E98F79F
+ 99F2948DF5A39CF4A69FF2A29CF39A94F39590F4A59EF6ACA6F49D97F0A69FF4
+ ACA6F49C96F29A94F2A9A4F3B0A9F4BFB7F4A8A2F4A39DF29B95EE9590ED9F99
+ EDABA6EFA9A4F2ABA5EFA6A1EC9E99EEA8A4F0AAA5F2A7A2F2A7A2F2B5B0F3B0
+ ABF3AAA5F4B0ABF4B0ABF4ADA8F4ADA8F6B1ABF5B1ACF4B2ADF5B5B1F3B5B1EF
+ B6B2F4BBB8F3B8B4F2B7B3F5BBB7F6BBB8F5BEB9EFBAB7F4C2BF9A7A76000000
+ 987472F0BEBAF4C7C4F3CDCAEFCAC7453A39000000997F7DEFC3C1E5B8B6EBBD
+ BAB5928E000000141110F2C4C2F0C5C3EFC4C2EFC5C2EEC3C245393800000098
+ 7F7DEFC7C4F0C9C6F3CBCAEFCAC7F4CECBF3CDCBEDC7C5F0CBC9D6B6B42C2625
+ CBACA9EDCAC7F2CDCCF0CDCBEBC7C5E2C0BEDFBDBACAAAA9443B3A0000006052
+ 52E4C2C0EBCAC7E9C7C5EAC9C6EAC9C6E9CAC72C2525000000E4C5C4E4C4C2DA
+ B9B8EBCBCAF2D2CFEACBCA000000453D3DEACDCCECCFCEEDD1D0EFD4D1EDD1D0
+ EDD1CFECD1D0988785968585EBD1CFEDD1D1E9CECCEFD6D5988787141312D1BA
+ B8EFD6D5EED5D4EED5D4EAD1D0D5BDBAE1C7C5EAD1D0443D3D2B2726ECD2D2B4
+ A1A1605656EDD6D4EBD2D2EED8D6EED7D6E4CECDE9D1CF000000443D3DE1C9C7
+ EDD6D5F0D8D8F3DBDAE5CFCE413B3ACFBAB9F3DEDCF3DBDBECD6D5E9D1D1EED7
+ D7EBD6D5D8C2C1E7D1D0E5CECDE0CAC9E5CECDECD6D5EDD7D6ECD6D4EBD5D4E6
+ D0CFEDD7D6EED9D8EDD7D6E7D2D1D5C0BFDFCBCAE6D0CFD4C0BFE3CECCF9E3E2
+ F4DFDED2BFBDF9E4E30000000000000000F8E2E0ECD7D6E6D1D0F4E0DFF5E2E1
+ F4E1E0ECD8D7EAD7D5F4E0DFF6E1E1F0DCDBF0DEDCF5E1E0F2DEDCF0DEDCF2DE
+ DCEFDEDBF0DEDCE6D4D4F2DEDCF2DEDCE6D4D4E4D0D0E7D5D4EDD9D9ECD9D8EA
+ D5D5E0CBCBE6D2D2EBD6D6E6D2D2DFCBCBE7D5D4EBD7D6E6D1D0E6D1D1E3CFCE
+ E9D4D4EAD4D5E0CAC9E7D1D0E6D0D0EAD2D1E9D1D1E7D0CFE3CBCBE7D0D0EDD5
+ D4EDD6D6E6CECEECD2D2EED5D4EAD0CEE7CDCDEDD4D2F3D9D7F4DAD8EACFCEF5
+ DBDAF5D9D9E9CECCEED4D1EDD1D0F3D7D6F5D9D8F0D6D5EBD0CEEBD0CEEDD1D0
+ EACECEE4C9C7E9CECDEED2D1EDD1D0EACECEEBCFCEECD0CFEFD2D1EDD1D0ECCF
+ CEEACDCDEDCFCEEECFCEEACAC7EFCFCEEFCECCE7C5C3EAC6C5EFCDCCEBCAC7ED
+ CCCBEECDCBEFCFCCF3D1CFF2D1CFEDCBCAF3D0CEF3CFCDEDC9C7EAC4C2E4BEBB
+ F2CBC7F3CBC9F2CAC9EDC4C2E5BDBBF0C9C5EFC6C4EBC3C1E3BAB7E4BAB8F0C6
+ C3F0C5C2ECC1BEEDC0BDEABBB9ECBFBDECBFBBEFC2C0EFC3C0EBC0BDE4B8B5F3
+ C5C2F2C4C1F2C5C2F2C6C3E5B9B7EDC1BDF2C3C0EAB8B5ECB7B5F3BEBAF3BDB9
+ F4BDB8EEB6B3EAB2ADECB4B0E6B0ABEBB5B1F0BAB6EFB6B2EEB2ADF2B3B0EFAE
+ AAF3B8B3F4C4C0F4B5B1F5ADA9F3B6B2F4BFBAF3B3ADF2ACA8F0A9A4EFA49EF2
+ A29CF09E9AEEACA7EBA5A1F2A9A4F5B2ABF7A8A2F5A29CF39D97F59C96F2948D
+ F59A94F5A6A1F4A39CF69D97F5938CF59F98F6B1A9F49A94F0A59DF4AAA4F096
+ 8EEE9791F2A9A3F4B4AEF4B9B2F0A39CF49F9AF39993F29892EFA49DEFADA7F0
+ A6A1F2ACA6F2A29CF0A59EF2A9A4F2A8A2F2A39DF0ADA8F0AEA9EEA39EEDA6A2
+ EDA7A3F0A7A3EEA6A2EEA7A3F4AEA9F0ACA8F2B0ABF5B5B2F4B8B4F0B6B2F4B7
+ B4F2B5B2F2B7B3F4BAB6F4BDB8F4BFBAF2BEB9D4A5A2463635000000604C4B96
+ 7B7A97807F7D6867141111443837D4ACAAF0C2C0EEC0BDEBBBB8987B79463938
+ 443736000000614F4E987C7B957A797A63621411112C2424B69695F0C7C6F3CB
+ C7EEC6C5EFC9C7EBC5C2F2CCCAEFCAC9EAC3C2F2CDCAF5CFCDF4CFCD63535260
+ 5251B59A99EECAC9E9C5C3C1A3A27362611411112C2525B49998EECCCBEBC7C6
+ EFCDCBE6C5C3E6C5C3E9C7C5947F7D000000000000443C3BCDB1B0E0C2C0E7C9
+ C7D0B6B55B4F4F0000002B25258E7D7B9381819382819482818D7D7C93828144
+ 3C3C141212938181EED4D2E9CFCDE2C7C6EACFCEEED5D2D0B8B75E5453615656
+ B09C9CEED5D4EED5D2C9B0AE766969141111000000000000AE9C9BE7D0CF1413
+ 12433D3D9181819485849485848E807F9081800000002C2928968787998A8998
+ 89899B8C8B6057571412117C706FF3DBDAF2DADAEDD7D7E2CCCBECD6D5EDD7D6
+ DBC4C4E6D0CFE9D1D0DEC7C5E0C9C7E7D1D0E5D0CFE7D0CFEFD9D8ECD6D5EDD7
+ D6EDD7D6ECD6D4E7D2D1E0CCCAEDD7D6EBD6D4D9C4C2E1CCCBF6E1E0F5E0DFD4
+ C0BEF2DCDB0000000000000000F9E4E3F9E3E2EED9D8EFDBDAF0DEDCE9D7D6DA
+ C7C6DAC5C5ECD8D8F0DEDCE6D2D1E5D1D0EEDAD9EDDBDAF0DEDCF2DFDEF2DEDE
+ F2DFDEEDDBDAF2DFDEF2DEDEEDDADAEBD8D7EDDAD9F0DCDBEEDBD9EAD6D5E6D2
+ D1E7D4D4ECD8D8EBD7D7E4D1D0EAD6D6EAD6D6E6D1D0E4D0CFDECAC9E6D1D2E6
+ D0D0E0CAC9E7D1D1E7D1D1E9D0D0EDD5D4EDD6D4EBD2D2E9D1D0EDD6D5EDD5D4
+ E3CAC9E7CFCDECD1D0E9D0CEECD2D1E9D0CFEFD6D6EFD6D5E5CBCAE9CFCDEDD2
+ D1EBD0CFEFD5D4E7CCCBF0D6D4F6DAD9F0D7D5F0D5D4F3D8D7F3D8D7F0D6D5EA
+ CECDEBCFCEEDD1D0EBD0D0E7CCCBECCFCFEDD0D0EDD1D1EED2D1EDD0CFE9CBCA
+ EBCDCCEECECDE2C2C1EBCCCBEACAC7DCBBBADEBDBAEBC9C6E4C1BFE6C5C3E7C6
+ C4EDCBCAF2CFCEEECCCAE7C6C4F0CFCDF2D0CEF0CDCCEAC6C4DFBAB9F2CCCAF2
+ CCCAEFC7C5EEC5C2EAC1BEF3C9C6EFC4C2EAC0BDE3BAB8DFB5B3EFC5C3EEC3C0
+ ECC0BEEDBFBBEBBBB9EDBEBAEBBBB9EBBDBAEBBEBAE3B5B3E3B6B4F0C3C0F0C2
+ C0EFC1BEEDC0BDE2B5B2E9BBB8F0C3C0E3B5B2E2B2AEE7B3B0ECB6B3EEB7B4E6
+ B0ABE5ACA9E7AEABE3AAA6EBB3AEF2B8B6EEB6B3EEB2AEF0B3AEECACA8ECAAA6
+ F0B4B1F6C4C0F5B4B0F3A9A5F4B7B3F5BEB8F5B1ABF5ACA7F2A6A1F2A39DF39F
+ 99ED9E99EDADA8F4A8A2F4ADA8F4A8A3F4A19AF39C96F69B95F59791F5948DF5
+ A79FF6A49DF79F99F59089F3968EF5B5ADF49791F4A59DF5AAA4F2958EF29993
+ F3A8A1F5B9B3F5B3ABEE9E97F39A94F2948DF29A95EFA7A1ECA59EEEA59EF0A5
+ 9EF2A19AEFA7A1F0A6A1EF9F99F2A6A1F2B4AEF0A59FF0A6A1F0A8A4EDA39DEF
+ A59FECA29DECA49EF2ACA9F0ACA8EFAEAAF3B5B2F0B5B1EBADA8F0B1ACEBADAA
+ EEB3AEF2B9B5F2BDB8EFB9B5CE9C99987270987574977B7998807F98807E967D
+ 7BB69693EFC2C0EEC1BEF2C2BFEDBDB9EBBAB7E6B6B3EDBEBBEDBFBBE7B8B5EC
+ BEBBF0C3C0987D7B967B79977B7AD2ACAAEFC4C3EBC2C0EBC3C1EDC5C3E2BBB8
+ E5BEBDDFB9B7E6C1BFE2BEBAD9B4B2DBB6B4EAC5C3EEC9C9EBC5C4E9C4C29881
+ 80615251433938413837746262B09695EAC6C5ECCAC7EBC7C5EDCAC9EECBCBEB
+ CAC7D1B4B2978382968181937F7E927F7D958181958281AC9695E7CBC9958381
+ 907E7D9684839583839583829381819886859785849381819482819886859685
+ 85C6ADADEACFCDEBD0CFDCC1C0E3C9C7E7CECCE3C9C9E2C9C6E9CFCE9483835D
+ 5252423C3B403939433C3C938281D0BAB9EDD2D2F2D8D7F0D7D66157567B6E6D
+ 9383839687869788879485859686859989899687859889899A8B8A9889889B8C
+ 8B93858390817F453F3EF2DBD9EED9D8EBD6D5D7C1C0E9D1D0EFD8D7ECD5D4EB
+ D5D4E3CCCBD8C3C1E5CECDF2DBD9F2DAD9E9D1D0F2DBD9EAD4D2EED8D7EED8D8
+ EBD6D5E7D1D0E6D1D0EDD7D6E9D4D2D9C4C3E4CFCDF6E1E0F3DEDCD1BEBBDEC9
+ C70000000000000000F3DEDCF6E1DFE7D4D1D6C1C0DBC6C5E4D0CFD9C6C5D2BF
+ BFE4D0CFE9D5D4E9D5D4DECBCAE3CFCEE3D0CFF0DEDCEEDBDAEBD9D8EFDCDBE6
+ D4D4F0DCDCF0DEDCEEDBDBEEDBDBEAD7D6F0DCDBF0DCDBECD8D8E7D5D4EAD6D5
+ EDD8D8ECD7D7EAD6D6EBD7D7ECD7D7EBD5D6E6D2D1E4CFCFEAD5D6E6D1D1E5CF
+ CEE9D2D2E7D1D1E5CFCEEAD2D2ECD4D4ECD4D2E6CDCDEDD4D4EBD2D0E0C6C5E5
+ CCCCE9CFCFE7CFCEECD1D0ECD2D0F0D7D6F6DBDAF3D8D7F2D7D6EFD5D4F3D7D5
+ F3D8D6E0C5C3EED2D1F3D7D6ECD0CEECD0CFF0D5D5F2D7D5EFD4D2E6CBCAE3C9
+ C7E9CECDEACFCEE7CDCCE9CECDEACFCEEACECEEDD0CFECCFCEE4C7C6E6C9C7EE
+ D0CFEACDCBEED0CFD1B6B5E2C2C1DEBDBBE7C6C4E6C4C2E7C3C1E4C1BFDCBAB8
+ E9C5C3EBC7C5DFBDBAEECBCAF2CDCBE9C6C5E3C1BFD8B6B4EAC7C4EFCBC9EBC4
+ C2EFC6C5EAC1BFF2C7C5EEC2C0EBC0BEEABFBDE4B9B7EEC3C0EFC3C1EDC1BFE9
+ BDB9E6B8B6E9B9B6EFBFBBEDBEBACCA39FAB8786E1B2AEF0C1BEEDBFBBEEC0BD
+ EFC0BDEBBBB8EFC0BDF4C5C2EEC1BDEEC2BEF2C1BEF3C0BBF3BDB8F3B9B6F2B7
+ B4ECB2ADEAAEAAEDB2AEEFB5B2EDB4B0EEB5B1F3B7B2F4B4B0F2B0ABF2ADA9F6
+ B8B4F6C4C0F3B0AAF6ABA7F6BDB7F6BBB6F6B0A9F4A8A3F3A59FF29F9AF09993
+ ECA39CF2ABA5F6A9A4F5B0A9F49F9AF49B96F59A93F4958EF58E88F39E98F4A1
+ 99F49C96F68D86F49189F3B7B1F29189F4A39BF6A9A3F09089EE9791EEA29AF0
+ BDB5F2A8A2EE9B95F0938CF08E87F09C96EFACA6EEA29AEEA59FF29D97F3A39D
+ F0A59FF3A29CF09D98F0B0AAF2A8A2F0A39DF0A8A2EFA49EED9F9AF0A59FEEA5
+ 9FEDA6A2EFAAA5ECA9A5EBACA8EFB1ACEFB0ABE9A9A5EFB2ADEBAEAAE7AEABE9
+ B4B0F2B6B4F3B6B2F2B6B2F2BDB9EEC4C1EBC5C3EDC5C2EFC4C1EEC1BEEFC1BE
+ EAB9B7EEBDBAF0BFBDF2C1BEF0C0BDECBBB8EABAB7EBBAB8E2B3B1E2B3B0ECBF
+ BDECC0BEE3B7B5E6BBB9EAC0BDEAC1BEE4BDBAE9C1BEECC4C2EAC3C1ECC5C3E9
+ C2C1EFCBC9EEC7C6E2BDBBE4BEBDE7C2BFF0CBC9EDC7C5EEC9C6F3CECBF2CDCB
+ E9C4C3E4BFBEE7C4C2E1BEBBE3C0BFE6C3C1DFBDBAE4C2C0EDCBCAE0BFBDE9C7
+ C5EECDCCEDCCCBDFC0BFE6C7C6E9CBCAEDCFCFE9CCCAECCFCEEFD2D0EED1D0F2
+ D5D4EDD0CFE7CBCAE4C6C5F0D4D2F0D4D1E5CACAECD0CEEED2D0EDD1D1E2C6C4
+ E7CCCAE6CCCAD6BBBAE0C5C4E4CBCADCC2C2E2C7C5EDD4D2EED5D4E9CFCDEDD1
+ D1E7CECDEED5D4E6CDCCEAD1CFE4CBCAECD1D0ECD2D1EED6D5EDD5D4EDD4D2ED
+ D5D4ECD4D5DFC6C6D8C0BFEAD1D0DFC7C5E1C9C7E7D0CFECD4D2F7DFDEF3DBD9
+ E5CECDEDD7D6ECD5D6EED8D8ECD7D6E0CAC9E6D0CEEED8D7ECD6D4EDD6D5E6D0
+ CFE4CDCCF2DBD9F4DEDCF0DAD9EDD7D5F3DEDBEFD9D8F0DAD9F4DFDEF2DEDBE3
+ CECCE0CBCAE9D5D2E3CECCE5D1D0D4C1BFE9D5D2F0DBDADAC4C3F2DEDC000000
+ 0000000000D8C2C1ECD7D6EFD9D8F0DBDAEED9D8F4E1DFE5D1D0DAC6C6EAD6D5
+ EEDAD9F0DCDBE9D6D4DECACAD8C5C4ECD9D8E5D1D1DCCAC9DCC9C9D5C1C1E2CE
+ CEEAD6D6E7D5D4EAD6D6EAD7D6EDD9D9F0DCDBEAD6D7E3CFCFE9D5D4EBD7D6EA
+ D6D4EBD8D7ECD8D8EDD9D8EDD9D8EAD5D6E7D2D2EAD5D6CDBABA948585948685
+ 9385859283839284839485859283838B7D7CEAD1D0E6CECDDBC2C2DAC2C1E1C7
+ C6E1C7C5E1C7C6E5CCCBECD1D0EFD6D5EFD5D2EAD0CEE5CBCAECD1CFEFD5D4E3
+ C7C7E6CBCBF0D5D2EBD0CEE7CCCBE5CAC9EED2D1EACFCDE7CDCCE0C4C4E4CAC9
+ E7CDCCE1C6C6E5CAC9E7CDCCE4C9C9E9CECDEDD1D0E9CBCAE4C7C6EACDCBE7CA
+ C79885852C2726EBCCCAE3C3C1EBC9C6EBC7C5EDC9C6EECBC9E7C4C1E9C5C3EC
+ C6C5DAB5B3E6C1BFEFCAC9E3BFBDE5BFBED9B4B2EECAC7F3CECCE7C3C0E6BFBD
+ E3BBB9EAC1BEE7BDBAE0B5B3E3B7B4E2B5B2E6B8B6EBBEBBEABBB9ECBFBBE7BA
+ B7EABBB8EFC0BDF0C0BD7B6260433534E2B1ADEEBDBAEFBFBAEDBDBAECBDB9E9
+ B8B5EEBFBBF4C4C1F3C3BFF2C2BFF4C4C0F2C3BFEDBAB6EFB7B4F2B7B4ECB2AD
+ EBB0ABEFB3AEF3B6B2F0B4B0ECB1ACF3B7B4F0B4AEE9A9A4E9A59FEFA9A4F4B3
+ AEEDBAB5F4AEAAF5A8A4F5BBB6F6B9B4F7ACA7F6A9A4F4A29CF29A95F09892F4
+ B2ACF6A7A2F4AAA4F5A69FF49B95F59892F5958EF69088F6968EF6A29AF69E97
+ F790889C5A569A76719A5A569B66629B6A669A5A569A635EF4A39BF6CBC3F6A5
+ 9DF49D96F4938BF3918AF4A49CF3ACA5F2A49DEFA29BF29A94F0A59EF2A39CF4
+ 9C97F3A9A3F3ABA5F3A19AF3A6A1F2A49DF2A29CEF9F9AF2A59FEFA59FF0A8A4
+ F0ADA9EEAEAAEFB1ABF3B0ACF3B1ADEFB1ABF0B4B0EBB1ACEBB3B0E9ACA8F3B3
+ B0F2B7B3EDBDB8EFCAC6F0C9C5ECC1BEEDC0BDEDBEBBECBAB7EEBDB9EBB8B5EB
+ B8B5E9B8B4EBBAB7EAB9B6EBBAB8E7B7B4EBB9B7E3B4B1E2B2B0F0C2C0ECC0BD
+ E0B5B3EAC0BDEDC3C1EBC2BFE3BAB8EAC2C0EDC5C2EDC5C3ECC5C3E2BBB9EFC9
+ C6EFCAC7EBC5C4F2CBCAEEC9C6F3CCCAEEC9C7F0CAC9F5CFCEF4CFCDE0BAB8DA
+ B6B4E0BDBADBB8B6E4C1BFE4C1BFDEBBBAE6C5C3E6C6C4D7B6B5E6C6C5EECFCE
+ EED0CEE6C7C6EBCDCBEACCCAEBCECDEACDCCEDD1CFE9CCCAE9CCCAF2D4D2ECCE
+ CCE6C9C7D6B9B8EACCCBE7CBCADCC0BFEDD0CFEED1D0EED2D0E2C5C4EDD0CFEA
+ CFCDDCC0C0E4CAC9E7CDCBE7CDCBE1C6C5ECD1D1EAD0CFE6CBCBE1C6C5DCC3C2
+ EAD0CFE7CCCCE5CCCBD7BEBDE1C9C6E6CCCCEFD7D7EDD4D2E5CDCBE7CFCEEED7
+ D6E9D1CFE4CDCCEFD7D6E7CFCEE4CCCBE9D0CFE7CFCEF2D9D8ECD5D2DAC3C2E2
+ CBCAEAD2D1F0D9D9F3DBDAEED7D7ECD4D2EAD1D0EAD2D1F0DAD8E6D0CFD9C3C1
+ EAD4D2F0D9D8ECD5D4F0D9D8F7E0DFF6DFDEF3DCDBF7E1E0F7E1E0F2DCDAECD6
+ D5E9D4D1DAC5C3D5C1BFD0BBBAE5CFCDF2DCDBE0CBCAFBE5E400000000000000
+ 00F4DFDEF5E0DFF3DEDCF4DFDEF0DBDAF6E1E0EDD7D7E1CCCBE5D1D0F0DCDBF2
+ DEDCF2DEDCE5D1D0E1CDCCEEDBDAEBD8D7EBD7D8EAD7D7E1CCCAE7D4D2ECD9D8
+ EAD6D7EAD6D7EAD6D7E9D5D5EFDADAEDD9D8DECAC9E0CBCBDCC9C7E5D1D00000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00002A2525433D3D403A391411110000000000003F3938756868CAB4B3DBC3C1
+ DBC3C2DFC5C4DBC2C2E2C7C5E9CFCDEDD1D1E4CBCAE2C6C5EACECEE9CECDE7CB
+ CAF0D6D5F0D6D4ECCFCEE7CCCAF0D5D2EDD1D0ECD1D0E7CECDE9CECDEBD0CFE6
+ CCCBEACECEECD0CEE7CACAECCECEEDD1CFEBCECCE5C7C6E4C7C5E0C3C25F5252
+ 000000CEB3B1E5C5C4EBCCCAEBC9C7EBC9C6EECCC9EDC9C6EBC6C4EBC5C3DCB6
+ B4ECC4C2F3CCCAEEC7C5EEC6C4DFB9B6F3CCC9F7CECCF5CECBECC4C2E9C2BFEA
+ C3C1DFB6B3D8ADABDCB2AEDEB1ADE7B9B7E7B8B6E9B8B6EDBFBBEABAB7ECBFBB
+ EFC1BFF0C2BF2C2323141010ECB8B6ECB9B5EFBBB8EDB9B6EBB9B5E3B2AEE9B7
+ B4ECBBB7E1AEACE0AEAAE5B4B1E3B3AEE2B3B0EAB7B3F2BBB7ECB3AEE6ABA8EE
+ B2ADF3B6B2EFB2ACECADAAEEB1ACEEB3ADECAEA9E5A49FEEA9A5F2AAA5EFADA9
+ F4C1BBF3ABA6F5A8A2F6BFB9F8B6B1F8AAA5F6A59EF59E98F49892F6A19BF7B1
+ AAF7A59EF7B0A8F59C96F3958EB76E69804A46482926150E0D00000000000047
+ 28252D21200000000000000000002D1A18472E2C000000000000150F0E472C2B
+ 9B5A56D6837CF5AAA3F4A69EF0A49CF09892F29E97F2A29BED9791F09C96F3B0
+ AAF29D97F3A39CF3A39DF39F99F29F9AF2A29CF2A69FEEA59FEEA9A4F0B1ABEE
+ ADA8EDA9A5F0ADA8D299957C5B59463534453432000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000004739384336357A6260B79695F3C7C5ECC2C0ED
+ C3C1F3CAC6F2C9C6EFC7C5EDC5C3EAC2BFEFC7C5EEC5C4DFB7B5EEC6C5E9C2C1
+ E6C1BFE9C2C0E4BEBDCBAAA8725E5D4339380000000000000000000000000000
+ 00000000453B3B96817FC1A4A2CAAEAD927D7D403737423A3A2C262500000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000002B2525453D3D60
+ 5655978787C6B0AEE4CBCAE4CBCAEDD4D4EAD1D0ECD2D1ECD2D1F0D9D7EED7D7
+ EAD2D0F4DBD9F2DAD9EFD8D6EFD8D7E6CFCDF4DBDAF2DAD9E3CCCAE5CECDEFD8
+ D7F0D9D8F2DAD8EBD4D2ECD6D4E4CDCCDEC6C5E9D1D0E1CBCAD2BDBAE0C9C7DF
+ C7C6DCC5C5E5CECCF2DBDAEED7D6E1CBC9F0DBDAF6E0DEEED8D7EDD8D6E7D1D0
+ DBC6C4DCC6C5D7C2C0E6D1D0EED8D7DCC6C5FCE6E50000000000000000E7D4D1
+ EDD8D6F0DAD8F0DAD8E6D1D0EBD6D5ECD6D5E7D4D1E4CFCEE9D4D2F3DFDEF3DF
+ DFEAD6D5E3CECDECD8D8E9D6D5E9D6D5EED9D9DEC9C7DFCBCAEBD7D7E7D5D4E7
+ D5D2E9D5D4E6D2D2ECD8D8ECD8D7ECD9D7E6D1D1E6D2D1E6D2D1000000000000
+ 0000000000000000000000000000000000000000002B2626423D3C3F3938403A
+ 3A423C3B3F39395E54539686859585855D5352000000000000433C3CCBB5B4E7
+ CECEE7CFCEEDD2D2EBD1D0EED5D2F2D7D5EDD1D1F0D7D5EFD4D1E7CDCBF0D5D4
+ F3D7D6F0D4D2EDD1D0EFD4D1EDD1CFEDD1D0EBCFCEECD1D0ECD0CFE9CECDEDD1
+ D0EDD1D0EDD0CFEDD0CFEDD0CEEACDCCEBCECDEACCCBE5C9C6443B3B00000079
+ 6868E0C0BFE7C7C5E7C7C5E5C2C0ECCAC6EECBC9EFCBC9F0CCCAECC9C5EDC7C5
+ F0CBC9EFC9C6F0C9C6DCB5B2F2C9C6F6CCCAF4CBC7EEC5C2EFC7C4EFC7C5EDC4
+ C2E6BFBDECC3C0E5BBB8EFC3C0EDBFBBE6B7B5E1B0ACE1B1ADEAB8B5E7B7B4CE
+ A5A2000000000000D1A6A4EEBBB8F0BBB9EFB9B6EEB8B6EBB7B3E5B3B0EAB7B4
+ DCABA8DEACA8E3B1ACDEABA7E1B0ABEEBDB8F5C4C0F4BFBAEDB3AEEDB0ACF4B5
+ B1F3B3AEF2B2ADF2B2ADF4B3AEF2B4B0F0B2ADF4B0ABF4ADA9F4AAA5F5B0ABF6
+ C3BDF5AAA5F5A7A2F7C3BEF7B1ABEF9F99EC9791EC928BF4928BF2A59EF4A39C
+ D5918B62403D150D0C150C0C482A289D56519D656081514E482B294827250000
+ 0000000000000000000000000048302D462E2C9C7C7680534F643C392D1A1900
+ 00002D21207F5450D68E89F49791F4A49DF49F99EF928AF2ADA7F29E98EF9C96
+ F2A19AF09B95F29B96EF9C97F0A29CF2A59FF0A9A4EFADA8F0ADA8EFA8A4EEAA
+ A5F2AEA9F2B3ADF3B8B4F3B3AEF2ADAAEDAEAAEEBAB6B49794987E7B7C636100
+ 0000000000967371926F6D2C2222000000000000000000140F0F755B598D6D6B
+ A88280E9B7B4F4C3C0F2C2BFE7B8B6F0C3C1F4C7C5F0C6C3EABFBDEAC0BEEFC6
+ C3EFC5C3EFC6C3EBC2C0E4BBB9F0C7C5EFC7C5E6C0BDEEC5C4EBC3C1ECC5C3CE
+ ACAB2C25240000005849488D7574635352000000000000000000453B3ACAABA9
+ F0CECDEECCCAE5C4C2EACAC7EACAC7E5C6C4EECECCEDCDCCEACAC9E7C9C7B19B
+ 999683822C2525000000443C3CEBCBCBF3D4D100000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000002C27271413122C27275E5352443D3D0000000000000000
+ 000000002C27265F5554D2BDBBF0D7D7EDD6D4EED7D5EDD5D5E7D0CFE7CFCEF4
+ DBD9F0D8D8F0D9D7F4DBDBF0D9D7F3DADAF2DADAEED8D7ECD6D5F3DBDAF4DCDA
+ F3DBDAECD5D4F0D9D8EFD8D7DFC9C6E6D0CFE5CFCDD8C2C0E4CECDDBC5C4E0CB
+ C9E5CFCDEFD8D7E5CFCDE0CBC9E6D0CFF7E1DFF4DFDEF6E0DEF8E2E0F7E1E0F6
+ E0DFEDD7D6F2DEDCEDD8D6E7D2D1F0DCDA0000000000000000EBD6D4F3DEDCF0
+ DAD9F6E1DFF5E0DEF6E0DFEBD5D2EAD4D2E7D2D1EED9D8E9D5D2E7D2D1E0CAC9
+ DAC5C4E3CFCED5C1C0D2BEBEDBC6C5D4BFBFD4C0BFD7C3C3D8C4C3DCCAC9DCC9
+ C9E2CDCCDECAC9DCC7C7E6D1D1E6D2D0EAD5D4B3A3A300000000000000000000
+ 00001311113F3939928383CAB7B6D6BFBFE2CAC9E2CAC7DAC3C2E3CCCBDBC4C2
+ D6BFBDC4AEAE796C6C2B2626706363CAB4B35D53520000000000005E5454ECD2
+ D1ECD2D0E7CECDEAD1CFEBD0CFECD1CFF2D8D6F0D6D4F0D5D4EED2D1EED2D1E9
+ CDCCE2C6C6E9CDCCE5CAC9E0C3C1DCC1BFE6CBCAE7CDCCE2C5C5EACDCCE6C9C7
+ E3C6C5E9CBCAE9CCCBE4C7C6E9CBCAEACCCBEACCCB0000000000002B2524DEBF
+ BDE9CAC7EBCAC7EECCCAF0CCCAECC9C5ECC9C6EECBC9E5C2C0E1BDBAE4BFBDE5
+ C0BDE3BDB9DAB3B0DEB5B2EEC5C3ECC2C0E1B7B5E5BBB8ECC2BFE6BBB9EAC0BE
+ EAC2BFE9C0BDEDC4C2E9BEBBE5B9B6DBAEABDFAEACEDBDB9EBB7B45F4A490000
+ 0000000091716FEBBAB7EEBDB8E9B6B2EEB8B6EBB4B1EDB6B2F2BAB7EBB6B2F3
+ BFBBF4C0BBE0ADA9DEA9A5E2ADAAF4C1BDF4C2BEECB8B4EEB6B2F0B3AEEFB1AC
+ EBAAA6EDACA8F3B0ACEEACA7EDADA8EFB1ABEBA6A2EEA6A1F4A6A1F5AEA9F5C2
+ BDF3A59EF6A69FF7C3BDF2A69FF4A199F39992F4948DB76D682D211F00000048
+ 3331BD746FB86C67643A37150C0B150D0C482D2C9D605B9D524DF9A199F9938A
+ F99D95F9A89FF9877F9C6C679A6A64473633000000150C0B643834BA7B746445
+ 41150F0E000000633F3DD78C86F4968EF09F98F4A59EF49B94F29F99F39A94F3
+ 9994F29A95F09C97EC9C97F2A7A2F2AEA9F0A9A5F3AAA5F2ABA6EFABA6F2B2AD
+ F3B5B1F2AEAAEFA8A4EDB3ADEBBEB9ECC2BFEABBB7ECBBB7E5B0AC0000000000
+ 00EDB3B0E7AEAB443534000000000000000000443534EDB9B6E0ADAADAA9A5DE
+ ADAAF2C3C0F4C4C1EBBEBAE3B6B4E5B9B6E4B8B6DCB3B1E5BAB8EDC3C0EEC3C2
+ EDC3C1E1B7B5DCB3B2EAC1BFEAC2C0E2BAB8E7C0BEE7C0BE967D7B1410105E4E
+ 4EECC6C4DFB8B74137360000000000000000007D6B6AEDCCCAE3C2C1EDCCCAE6
+ C5C3E1C0BEE5C3C2E4C3C1E2C2C1EBCCCAE2C3C1DEBFBEDBBDBBE4C6C5EBCCCB
+ 796867000000453C3CEDCECDEDCECC0000000000000000000000000000000000
+ 00000000151313473E3D7F6F6E9A8887B7A2A1EFD2D1EACFCDEED2D0EACFCDEB
+ D1CFCAB3B29483836056562C27270000002B2626796C6BB4A1A1605555141313
+ 0000000000000000002C2727B3A19FF0D8D7EED7D5E2CBCAD2BAB9E1C9C7D6BE
+ BBD8C0BFE0C9C7D5BEBDDBC4C3E2CBCBD7C0C0D0B9B8D9C1C0EFD7D6EAD2D0DE
+ C6C5E6D0CFECD6D4EAD2D1F0D9D8E0CAC7DAC5C4E4CDCCE4CECDD9C3C2E0CAC9
+ F0D9D8EDD7D5DCC6C5E7D1CFF6E0DFEED8D7ECD6D5EFDAD9F0DAD8F4DFDCECD6
+ D5ECD6D5E3CDCCEDD7D6F0DBD90000000000000000DAC5C3CEB9B8CAB6B4D7C1
+ C0F3DFDEF7E1E0D4BEBDD4BEBDE7D4D1EBD5D2D4BFBDD2BDBBECD6D5EFD9D8EE
+ D9D8D4BFBFD0BEBBD0BEBBD5C1C0DFCBCAD5C2C0CFBBBBD2BFBFD9C5C4DCC9C9
+ D2BFBED1BEBED5C1C0DAC4C3D6C2C08578760000000000002823239D8C8CD4BE
+ BDD7C0C0DEC6C6D7C1C0D1BAB9D6BEBDDBC3C3E1CAC7E9D1D0E7D0CFDBC4C3DE
+ C6C4D8C0BFD6BEBD6D6160131010B9A5A4BAA6A51411110000002A2524BDA6A5
+ D6BEBBD9C0C0D8BFBEDEC2C2EACECEEACFCEDBC0C0D6BABAD9BEBEE0C5C4DEC2
+ C1DBC0BFDABEBED8BBBBD9BEBDDEC3C2E7CCCBE5C9C9EACDCCE1C3C2DABEBDDC
+ C0BFDBBEBDDBBEBDE0C2C1E4C6C5B09997000000000000000000C1A6A4DEBDBB
+ DFBDBAE3C1BFDEB9B7D4B1ADD8B5B3DEBAB7D6B2B0D4B0ACD7B2AEE2BDBAE6C0
+ BED5AEACD7AEACECC4C1EFC5C3D6ACA9D7ADAAD9AEABD6AAA7D8ACAAEABFBBED
+ C1BFEFC3C0DCB3B1D8AEACD8AEACD9AEAAEDBFBBEFBEBA141010000000000000
+ 3F302FDEAAA7F0BDB9EDBDB8E7B5B2DFAAA7E6B0ACF2B8B5EDB3B0EEB5B2EDB6
+ B2DFA9A6DEA9A5E2ABA8F3BDB8F3BDB8F0BDB8EFBBB7F0B9B5E9ACA8E4A49FE6
+ A5A1EDAAA5E5A19CE6A19CEAA7A2E7A7A2E6A29CEBA19BF4A59FF3A9A3E9B6B0
+ EB9A94EE9F99EAB2ABED9B95D98C86482C2B000000603C39D28D878155522E1E
+ 1D0000002E1A19BB6660F57F76F49991F5938BF5786FF79289FB978EFB9B93FB
+ A89FF8827AF6AAA1F5B1A8F5ABA3F798909C56502D1A19000000623F3DD68D86
+ 7F4C47000000000000613B38D2948CF3958EF39E97F39791F2958EEE948DED96
+ 91EC9A94EA9D98EBA6A1EEA49EEEA39DF0A7A2E7A39DE6A7A2E9A6A1EEA6A1E7
+ A39EE4AEAAE4BFBAE3B8B3E5B5B1EEB8B4F2B8B4E6ABA72A1F1E000000EAB0AB
+ E1A9A541302F000000000000000000463736ECB8B5DCACA8DAAAA8DBACA8EBBD
+ B9F0C2BFE3B5B2E3B5B2DCB0ACD9ADABD9AEABDEB3B0F4C9C5F4C9C6E2B8B6DB
+ B3B1E5BBB9EBC2C0DEB4B2D9B1AEDAB2B08A7070000000957D7BEBC5C4CEADAC
+ 292222000000000000000000947E7DF3D0CEEDCBC9D7B5B4D7B6B5D8B7B6DBB9
+ B8E5C4C2E6C5C3E5C5C3E6C6C5D5B5B4D6B7B5E5C6C5E4C5C3ECCDCC96828100
+ 0000453D3CE2C3C1D2B4B30000000000000000000000001310106B5C5BB89E9D
+ DCBFBDD6B9B8DBBFBEE4C6C5E5CAC7D4B7B6D0B6B4E3C9C6E7CDCCDFC5C4D6BB
+ BADBC1C0EDD2D2DCC3C2D5BABA6E62602823230000005F5555CFB8B776696813
+ 1010000000000000000000292424BBA6A6D5BEBDD1B9B8D2BAB9CFB7B6D2BBB9
+ E1CAC9D2BDBAD0BAB9D2BDBDDEC7C6E5CFCDE7D0CFF2DAD9D7C0BFCCB5B4CDB5
+ B4E2CBCAEBD5D2EBD5D4D0BAB9D4BFBEEAD2D1E7D0CFCDB8B7CFB9B9D1BBB9CF
+ B9B8CBB5B4D4BEBBF0DBD9E1CCCACBB5B4CBB5B4D0BABAE7D1D0E6D2D1D9C3C2
+ D8C3C1CDB8B7C9B4B20000000000000000E0CCCACCB7B5CAB6B4D5C0BFF0DAD9
+ E6D1CFCBB6B4CEB9B7F2DEDCEAD5D2CDB8B6CDB8B7E0CBCAEDD9D9ECD9D8DBC7
+ C7D0BEBED0BEBEDECBC9ECD9D8DFCBCBD0BEBED1BFBFE2CECDE9D5D4D1BEBDD1
+ BFBEE2CECDECD7D7DAC5C5857676000000000000908281D0B9B8D5BEBBE7D0D0
+ ECD6D5D5BDBDD1BAB9D7C0BFDFC7C6E5CECCE7CFCFE5CECDD8C0BFD4BBBAD2BB
+ BADCC5C3D8BFBE9F8D8C272222BBA6A5E6CDCC413A3A000000131010C2ACAAE0
+ C6C5D5BBBAD7BEBDEAD0CFEACFCED7BBBAD4BAB8E1C5C4EDD2D0E5CBCADABFBE
+ DCC2C1E6CBC9DBC1C0DABFBFE4C9C7E6CACAE9CDCBDABEBDDBBEBDE3C6C5DEC1
+ C0D9BDBBDEBFBEE3C5C3756464423939141111000000584A4AD8B7B5E3C1C0E9
+ C6C5D5B2B0D2AEACE0BBB9F4CFCDDAB5B3CFAAA8E4BFBBF0CAC7D7B2AED1ABA8
+ E3BBB9F7CFCCE7BFBBD1A9A7DFB5B2EAC0BDD6AAA7D4A7A4E1B3B0EBBDB9DFB1
+ AED5A7A4DAADAADAAEABD8ACAAD9AEABB2918D0000003F3130000000140F0FE1
+ AAA6E9B2AEEAB3B1DEA8A5DBA9A6EBB7B3EFB9B6DFA6A2DEA39EDEA39EDFA4A1
+ E3AAA6EDB5B1F3B9B7EFB8B4F3BAB6EFB9B4ECB7B3E3B0ABE4AAA6EAA9A5EAA6
+ A2E39E99E59E99F2AAA5EBA5A1E5A39DEBA49DF6A8A3F4A29CE99D97EBB7B1EF
+ 9A94EB9C96956E6A0000002E1D1BD17A73B4625D2C1F1E0000002E211FBB6E69
+ F78A83F6837BF5766EF69B93F8958BF77A71F7847CF99D94FC988EF8A69DF77B
+ 71F7A9A1F8C1B8F7A197F69087F78179F8948CB9827B2D1D1C00000080504CD4
+ 857F462826000000150D0C9A625DF59891F5958DF3948DEC938CEC9690F2A39D
+ EDA59FEA9D97EA9C97F0A39EF2ACA6E6A7A1E69E99EC9E99EEACA8E3B5B1E4B9
+ B4E6B6B2E4AEABE2A9A4EEB1ADF0B3AEE2A6A241302E000000ECB1ACDCA39F40
+ 2F2E000000000000000000715756DBAAA7DBABA8DFAEABE1B1ADEABAB7F2C2BF
+ EEC0BDF0C1BEE4B6B3D8AAA8D9ACAAE3B6B4F2C6C3EDC2BFD9AEACDBB1ADECC2
+ BFE5BAB9D9B1ADDBB4B2CCA9A700000087706FEDC7C6F0CCCB43393900000000
+ 00000000006E5B5BD7B4B2EECCCAE5C2C0D4B0ADDCB9B8EAC7C5E9C5C4E4C2C0
+ EBCAC7EACAC9DFBFBDD4B4B3D4B4B3E0C1C0E5C6C5EECECC958181000000433B
+ 3AD4B4B3D0B1AE000000000000000000000000DEC0BED1B4B3D2B6B5E7CBCAE2
+ C5C4D1B5B3D7BAB9DFC3C2D6BAB8D0B4B3D7BDBBDEC4C2D6BDBBD6BBBAE1C6C5
+ E5CCCAD4B9B9D4B9B9DEC4C3E6CDCDA693922B26261412126E6261D1B9B77265
+ 65000000000000000000000000736867D8C0BFCEB6B5CEB6B5EBD4D1F0DAD9D5
+ BEBED0BBBADBC6C5ECD6D6EDD8D6ECD7D6F0DAD9E2CDCBCDB7B6CDB6B5E6D0CF
+ E9D1D0D0BAB9CDB7B6DFC9C6EAD2D1CFB8B8CDB7B6E9D4D2EAD4D2C9B3B1C9B3
+ B1E5CFCDF7E1E0D9C3C2C9B4B2D6C0BFECD6D5F5DFDEEFD9D8DFCAC9D7C2C1CA
+ B4B4C9B3B20000000000000000F7E2E0D2BFBDCCB7B5E9D5D2F4E0DFE6D2D1CC
+ B7B6DAC4C2F2DEDBD9C3C2CEB9B8D4C0BFD7C4C3E7D5D5E6D4D4E3D0D0D2BFBF
+ D0BEBEECD8D7EEDBDAEAD7D7D0BFBFD4C2C1EAD7D6ECD8D8D4C0C0D5C1C1EEDA
+ D9F0DADAECD8D7857676000000000000ECD5D5D0B9B8DCC5C4ECD5D4ECD6D5D6
+ C0BFD0B9B8E4CCCBE5CDCBE3CBCBE5CECDE4CCCBD5BDBBD2BBB9D5BDBBE2CAC9
+ E0C6C4D7BEBDB8A4A2131111CBB4B4E1C7C61210100000002B2626E9CFCDD5BB
+ B9D5BBB9F0D6D6F4D8D8D7BDBBD6BAB9ECD2D0EFD6D4E0C5C4D8BFBDEBD0CFEB
+ CFCEE9CDCCDABFBEDCC0C0E4C9C7E1C4C2D9BEBDE0C3C2E9CDCCE9CBCADABDBB
+ DABBBAE5C7C6443B3B947F7F5C4F4F00000013100FD8B8B7EDCBCBEFCBCAD7B4
+ B2D2AEABECC6C4F5D0CEECC5C3CFAAA7E0BAB7E4BEBAD4ACA9D6AEADEAC2C0F5
+ CDCBD4ACA9D2AAA7EEC5C2F4CBC7E6BBB9D2A8A5DCB1ADEABDB9D8AAA8D7A8A5
+ E7B9B6DFB1ADDCAEABD8AAA84235345E4C4AA58582000000000000CEA19DEBB5
+ B2E7AEABDCA5A2DCA5A2EEB8B4E5B0ACDEA7A4DEA6A3E4A9A6EFB2ADF4B4B1F3
+ B5B1F3B8B4F3BAB5F3B8B4EAB1ACE3ABA7E3ACA8EBB6B2EAB2ADECACA7E49E9A
+ E7A19BF4AAA6F5ABA6E69D98EAA49EF6AEA8F2A39DEA9690F3A39DF7C4BE452B
+ 29000000805D5AFBA199613A37000000150C0B9F6E6AFCA39AF99D95FB8E85F6
+ 827AF6766EF98C84FB968CF97F76F97A71F9A69CFC958BFBA79DF9786EFCAAA1
+ FBD7CDF99E95F88980F87B72FBA399F7A39AF5A299814A45000000472A27F69C
+ 9581534E000000000000643C39F7948DF4968EED948DED9C96F6AAA4F4A29BEC
+ 9C96E99B96F4ABA7F5B0AAE69993EA9D97F3B9B4EBC3BFE3B4AEF0BAB6EFB5B0
+ EFB1ACE09E9BE6A6A2EEB0ABDFA29D42302F000000EDB1ACDEA39F402F2E0000
+ 000000000000008A6967E1AEAAEFBDB9F4C3BFECBBB8F0C0BEF4C3C0F4C3C0EF
+ BFBBEDBEBAD8AAA7D9AAA8ECBFBDEABEBAE1B5B2D9ADABDCB3B0EEC3C2DBB3B2
+ D8B2B0E0B9B71410108D7674D7B4B2E0BDBA443A3A000000000000000000463C
+ 3BD9B6B4D5AEAEEDC9C7EBC6C4D4B1AED9B6B4DFBDB9E4C1BFEBC9C6E9C7C6E1
+ C1BFD7B6B5D4B4B3D4B5B3D7B7B6E9C9C7EECFCEE9CAC7000000443B3BD7B8B6
+ D0B1AE000000000000000000000000E1C4C3D2B7B5D8BBBAF0D5D4F2D6D5D4B9
+ B8D5BAB8F2D6D6F3D7D6E4CBCAD5BABAD4BAB9D6BBBAE7CDCCE5CCCBE6CDCCD5
+ BABAD5BBBADAC1C0DAC1C0DFC5C4EAD1CF796C6C0000003D3635D0BBB9CCB8B7
+ 131111000000000000000000453E3ECEB7B6CFB7B7EDD7D6EDD8D8D4BEBDCFB9
+ B9DEC7C6E0CAC9E5CFCFDAC5C4E7D1D0E5D0CFD1BDBBD0BAB9E9D2D1E1CAC9D1
+ BBBAE5CFCEEDD7D6E4CDCCCBB5B4D7C1C0F2DEDCF3DFDCCEB8B7C9B3B1E9D1D0
+ F4DFDED2BDBBC9B4B2E3CDCCF0DAD9F4DFDCE6D2D1DAC4C3E7D2D1CCB7B5C9B4
+ B20000000000000000F4DFDEDFCAC9CEB9B8F2DFDEF4E0DFDBC7C6D0BAB9EDD7
+ D7DFCBCACFBAB9D5C2C2EDD9D8E3D0CFE7D5D4EDDADAE9D7D7D4C1C1CFBBBBED
+ D9D8EEDBDBECDADAD0BFBFD5C2C1EBD8D7ECD8D8D4C1C1D5C2C3EAD6D6ECD8D8
+ E9D4D2857676000000453E3EE4CFCECFB9B8D8C1C0E7D0D0ECD6D5DAC3C1D0B9
+ B8E1C9C7E7CFCEE2C9C9E3CBCAE4CDCBD6BEBDD2BBB9D6BDBDE4CCCAE3CBCAD9
+ C0BFD2B9B87265642B2626E0C5C5B8A19F0000000000005E5252D6BAB9D1B7B5
+ EED2D1F3D7D6D7BDBAD7BDBAE9CECDEBD0CFDBC0C0DAC0BEEBCFCFEBCFCEE9CE
+ CCD9BFBEDCC1C0E7CCCBE0C3C3D9BFBDE1C4C2EACDCCE9CBCADABEBDDABDBAE3
+ C5C3000000CCB1B0B09796000000000000A48A89EECDCAF0CCCAE3BFBBD2ADAB
+ EDC7C5F7CFCDF3CDCACFA9A6D4ADABD4ADAAD6B0ACDCB6B3E3BBB9EBC3C0D0A9
+ A6D2AAA7EAC2BFF0C6C4E3B9B7D4ABA7DEB3B1E6BBB9D9ADAAD7ABA9EDC0BEEA
+ BBB8E7B8B5BE9391000000D1A7A5E3B4B1140F0F0000007B6361EEBEB9EDB9B6
+ E0A9A5DEA5A1EFB4B1E1A6A3DEA5A2ECB4B0EEB7B3F4B9B5F4B6B3EFB0ABF5B3
+ AEF3B2AEF0B3AEEAB0ABE3A9A5E3A9A5EFB5B1EAB3ADE9B4AEE5A8A3E6A19BEF
+ A6A1F0A6A1EA9D97E99C97F4AAA5EEA7A1EB9A95D98C87150F0E151110D07C76
+ D4958D2E211F000000150C0BDB756FFC9D95FC9E96FBAEA6FC9087F7837AF879
+ 70FD796FFD978DFD897FFC746AFDB7ADFE9287FDA99EFC7269FDA99EFDEDE3FC
+ 9B92FB8076FB837AFCB3A9F99E95F79289F69890BA726B150C0B150F0EDB817A
+ 9D605C000000000000472B29F0958DED9A94EEA19AF59F99F39F99EC9E98E9A2
+ 9CEFA59EF29E99E6A19BEBBEB8F0C4BFE6B2ACE3A8A3F0B0ABECA7A3EFABA7E0
+ 9D99E1A19CEBAAA5DF9D99443130000000F4B7B3E0A7A440302F000000000000
+ 000000997875F6C2BFF5C1BDF3BFBBECBAB6ECB9B7F0BEBBF3C1BEEFBFBBF2C1
+ BED9A9A6D9AAA7F2C3C1F2C5C2EEC2C1D9B1AEE5BDBAEFC7C5DBB5B4D9B4B244
+ 3A3A443A39E3BEBDD7B3B2736160000000000000000000141111D4B4B2EAC5C3
+ D4AEACDFB9B8ECC6C4D8B5B2D7B3B1D7B3B1D9B6B4E4C2C1E4C3C1DCBBB9D6B5
+ B3DAB9B7D7B8B6D5B5B3E0C0BFEED0CEDABAB8000000453C3CDEBFBDD2B3B200
+ 0000000000000000141212DEC1C0D2B6B5D5B8B8E1C5C3EED1D1D5BAB8D2B7B6
+ F0D6D6F3D7D7EFD5D4D5BBBAD4BAB9DCC2C1EED5D4EBD2D1EBD2D0DEC5C4D6BE
+ BDDCC4C4E7D0CFEAD1D0F0D7D7F2D9D7BAA6A5121010141212C1ADABD7C0BE3D
+ 3636000000000000000000121010B8A5A4EBD5D4ECD6D6D1BBBBCFB9B9E5CECE
+ E1CBCAE6D0CFE7D2D0EBD5D5E5CFCFD2BDBDCEB8B8D9C3C2D2BDBBE1CBCAEDD7
+ D6EDD7D6E0CAC7CBB5B4D0BBB9ECD6D5EFD8D7D4BEBBC9B3B1F2DCDBF3DEDBD0
+ BBBAC9B4B2E7D1D0F2DCDBF4DFDEE9D5D2F0DCDAF4E0DFD4C0BFC9B4B2000000
+ 0000000000F3DFDED8C4C3CEBAB9E6D2D1F0DCDBD0BDBBD5C2C1EDDAD9D5C3C2
+ D0BEBDD5C2C1EBD7D6E4D1D0DFCBCBECDAD9E3D0D0D0BFBDCFBBBAE0CCCAEAD6
+ D7E1CECED0BFBFD2C0C0DAC7C6E2CFCED2C0BFD4C1C1DAC7C7E5D2D1E3CFCF85
+ 78780000009A8B8BE1CAC9CFB8B7D7C0BFECD7D5EFD8D7D7C0C0D0B9B8D8C0BF
+ E0C7C7DBC3C3E1C9C9E4CDCBD8BFBFD2BAB8D5BDBBE4CCCAE3CBCAD7BEBDD2B9
+ B8D8BEBD2A2524A49090D1B6B5594E4D000000000000BAA2A1D0B4B3F0D4D0F0
+ D4D2D7BDBAD5B9B9DFC5C3DCC1C1DABFBFD9BFBEDEC2C2E5C9C7E3C9C6D8BDBB
+ DCC2C1E7CCCBDFC3C2D9BEBDE0C3C2E9CDCCE7CAC9DABEBBDABDBBAC96952B25
+ 25E9CAC9E9C9C7000000000000574949ECCAC7F0CCCAD9B5B3D0ABA9EAC4C2F4
+ CECBE9C2C0CFA9A6DFB6B3D7B1AED8B1AEEAC2C0EFC7C4ECC3C1D2AAA8D5ABA8
+ EAC1BFF0C6C4E5BDB9D5ABA8E4BAB8ECC2BFD8ADAAD8ACAAECC1BEEABDBAE4B6
+ B3574443292020E2B0ACDBA9A5140F0F000000413231E7B6B3E3B4B1DCADA9DC
+ AAA6EEB6B3E9ADAAE1A4A1EDB0ACEFB4B0F4B8B4E3AAA6E1A6A2F2B2ADF5B1AD
+ F4AEAAEDABA7E4A6A2E3A7A3EFB3AEF2B5B0EEB4AEE5ACA7E6ADA7F2AEA9F3A7
+ A2EFA29CE99A95EE9E99EB9D98D0928B150F0E150E0DDA8C86D2A69F150C0B00
+ 0000150E0EDA827BFB8C84FC8076FBB6ACFD9B93FD9E95FB857CFB7B71FE6D63
+ FE9B91FE9186FE6D63FFD0C5FF8B82FFABA1FF6D63FFA69BFEDED2FE988EFD79
+ 6FFC9287FDADA4FBA59BF9887FF89B92F7867ED89890150C0B150D0DD97A739C
+ 5853000000000000140E0DD08983ED968EF59E98F5A69EECA6A1EA9892F09A95
+ EDB1ABE6C1BAEAB8B3F0B6B1E5A59FE29C97EBA49EE9A49EE9A5A1E09C98E19E
+ 99E29F9ADF9E9A8E6865000000EDB4B0DEA6A240302E0000000000000000009A
+ 7875F6C1BEF6C1BDE1ACA8DAA6A3EBB8B5F2C0BDF4C2BFF5C2BFF3C2C0DBACA9
+ DBADABF5C7C4F3C7C4EEC5C2DAB3B1E5BFBDEFC9C6E0B9B7897170141111EEC9
+ C5E3BDBAA38686000000000000000000000000B49897F0CBC9EDC7C6D4ADADE4
+ BFBDF3CDCBDBB7B5DEB8B6E7C3C1DFBBB9E7C4C3E5C3C2D6B5B3D4B3B1EAC9C7
+ E5C5C3D4B4B2DABAB8F2D2D0F0D0CE000000463D3DDEBFBDD2B2B20000000000
+ 00000000453D3DE7CCCAD2B6B6D8BDBBEBCECDF0D4D4D4B9B8D4B9B7EACFCEF0
+ D7D5E2C6C6D6BBBAD6BDBADCC3C2EDD4D4EED4D4EDD4D2D8C0BFD5BEBDE3CBCA
+ E6CDCDE1C7C6EFD7D6F0D8D7D9C1C0D1B9B8453D3D131111BFAAA9D0BAB93F38
+ 38000000000000000000131010CFBABBECD6D6CFB9B8CFB9B8E1CACAEAD4D2EA
+ D4D4EDD8D7EDD7D6D9C4C2D0BABACFBAB9DBC5C5D1BDBBD1BDBBD8C1C0D8C1C0
+ D7C0BFCBB5B4CFB7B6E5CFCEE3CCCBCDB7B5C9B3B1F6DFDEF7E1DFCBB5B4C9B4
+ B2ECD6D4F6E0DFF6E0DFEED8D8F5E0DFEFDAD9CFB9B8C9B4B200000000000000
+ 00DAC6C5D0BDBBCEBBBAE1CECDE3D1D0D0BEBDD5C1C1F0DCDCD7C4C3D0BEBDDA
+ C7C6ECD9D8DBC7C9D4C0C0E0CCCBD7C4C4CEBBBBCFBBBAD4C0C0E1CDCDD8C4C4
+ D0BFBFD4C0C0DAC7C6E6D4D4D1BFBED2C1C0DFCCCBE7D5D4DAC7C78579790000
+ 00F2DBDBD5BFBECFB8B7CFB8B8ECD4D2ECD5D5D6BEBED0B9B8E0C9C7E3CACAE0
+ C7C7E4CCCBE5CCCBDFC5C5D4BBBAD2BAB8DAC1C0E1C6C6D5BBBBD2BAB9D9BFBE
+ 736666282222D1B6B5BEA6A5000000000000544949D0B4B3EACCCBECCECDD4B7
+ B6D4B8B5E3C6C5DEC2C1E0C4C3DABFBDDBC0BFE3C7C6DCC1C0D8BDBDE2C5C5E3
+ C7C6DBBEBED9BEBBE4C9C6E9CDCCE4C6C5DABEBBDABEBB5D50505D5151E5C6C5
+ AD9695000000000000000000DBB9B7E7C4C1D2ACAAD0ACA9DAB6B3E5C0BDD1AB
+ A8CFA9A7E6C0BBE6BFBBD1AAA8D6ADAAECC3C0EBC2C0DAB3B0D4AAA8DAB2AEEA
+ C0BED7ADABD8AEACEABFBDE5BAB8D7ABA9D8ACAAE7BBB9E3B7B4DAAEAB130F0F
+ A68280E0B0AC896A69000000000000000000DCA7A4DEA9A5DCA9A6DCAAA7ECBB
+ B7EEBBB7DFA7A4E3A8A5EBACA8E6A5A1DF9E9AE0A19CEFB2ADF0B4AEF2B0ABED
+ A8A4E7A19CE49F9AE7A6A2EFB1ABECADA8E6A7A2E6ABA5EFB6B1F3B4AEF3A7A2
+ EA9B95EB9994CE8581150E0D2D201FF8A59EDA8883150D0C000000150B0BD7A5
+ 9DF99F97FB9289FC847CFB837AFDA499FDAEA5FD897FFE7E73FF6E64FF958AFF
+ 968BFF6E63FFD6CBFF9286FFB6ABFF7A6EFFAA9FFFCEC2FF9489FF7369FFA69B
+ FE9E94FD958AFC9B91FC9188F9958BF79288D97F78150C0B472624F58B839D5E
+ 59000000000000452B29ED968EF3A59EF3A7A1EB928CEC9F99F3CAC3EABEB8E6
+ AEA9EBA9A4F3AAA5EFA6A1E49C98E7A29CE7A29CE6A19CE29C97EAA7A3E9A8A4
+ E0A59F8D6865000000E6ADA8DCA5A1402F2E000000000000000000E0A8A5EEB7
+ B3E2ABA8D9A39FD9A4A1E4B0ABEFBBB7F2C0BDF2C1BEEBBBB9DAAEABDAB0ACEB
+ C2BFEFC7C5E1B8B6DAB2B0DEB6B4EDC5C3C5A3A1130F0FC19D9BE0B9B6D9B3B0
+ 130F0F000000000000000000705D5BE1BDB9E1BDBADAB6B4D6B1AED8B3B0DAB5
+ B3D8B3B1D9B5B3E0BDBAD6B3B1E0BEBDDEBDBAD4B2B1D4B3B2F2D0CFEFCFCED2
+ B3B1D5B5B3F2D0CFF0CFCE000000463D3DD9BAB9D2B4B3000000000000000000
+ 423A3AEFD4D2D5B8B8D5B9B8E1C5C4DFC3C2D4B9B8D6BBB9DEC3C2D7BDBBD5BB
+ BADEC4C3DFC5C5D6BDBBD6BDBDDEC5C4EAD1D0D5BEBDD5BFBDDEC5C5D9C1C0D5
+ BDBDE7CFCDECD2D1D2BBBAD1B9B8E3CBCA433D3D141212B9A6A6D4BEBD403A3A
+ 0000000000000000002C2727DCC7C7D0BABACFB9B9E3CCCBEBD5D4EDD7D6EDD8
+ D6ECD6D6D4BEBECFBAB9D1BDBBEAD4D2D7C1C0CEB7B7D5C0BEE5D0CEEDD7D6CD
+ B7B5CDB7B5DAC5C4D2BBBACAB4B3CAB3B3E0CAC9E0C9C7C9B4B2C9B4B2DAC4C3
+ F2DBDAEBD5D4E4CECDEED8D7D7C1C0CAB4B4C9B4B20000000000000000D8C4C3
+ CFBBBAD0BEBDDBC9C7E1CECED4C0C0DAC6C5EFDBDBDAC7C6D2C0BFDBC9C7E7D2
+ D2DAC7C6D2BFBFD8C5C5E2CFCED9C5C5D4C0C0E0CCCAE1CCCDD6C3C3D5C3C2E5
+ D1D1E2CFCEE5D1D1D1BFBED1C0BEDAC9C7DCCACAD5C2C26D63632B2727E6D1D1
+ DBC4C4D1BAB9D4BDBBD8C0C0D9C3C1D5BEBDD6BEBDE3CAC9E0C9C7DFC6C4DFC7
+ C6E0C7C7DCC4C3E0C7C6D6BEBDD6BDBBDAC1C0D7BFBDD5BBBBD9BFBEC4ADAD00
+ 0000D1B7B6D9BEBD403838000000120F0FD2B6B5E4C7C6DFC3C1D4B7B5D4B6B5
+ DBBFBED9BBBAE6CAC9E7CCCADBBEBEDBC0BEDCBFBDDBBFBDE5C9C7DFC3C1DABE
+ BDDABEBDE4C7C6E9CCCBDEBFBFDBBDBADBBEBD2B2525AE9796E5C6C574646400
+ 00000000000000006F5D5CDFBBB8D6B2B0D4AEABDEB7B5ECC6C3DEB7B4D4ADAB
+ E2BBB9E4BDBAD5ACABD5ACA9DEB4B2EAC1BFE0B7B4DBB2B0D7ADABD7ADABD8AE
+ ABE1B7B4E0B4B2DBB1ADD7ACAADAAEABEBBFBDE7BBB8715A58282020E3B5B2EC
+ BFBA2A2120000000000000000000AD8582E4ADAADFA7A4E0A9A5F2BAB6F5BFBA
+ E5B1ACDEABA8DFA8A4E0A4A1E1A19CE5A29DF0ACA8E9A7A2ECABA7E7A8A4EBA8
+ A4EAA19CE69A96E79E9AE7A49EE7A6A1E9A8A3EDACA6F3B6B1F5BBB5ECA69FCE
+ 8681140D0D150E0DDA8C87DA958D150F0E000000150C0BD5ADA6F9847BFCD2CA
+ FD9990FD8B83FD7B70FEA59AFE958AFF9C92FF847AFF7C70FF7D71FFA297FF79
+ 6DFFC6BAFF998CFFC3B7FF897DFFB9ADFFBFB3FF9388FF867BFFC9BDFFAA9FFF
+ 867CFE9990FE7C72FCA89DF98A81F8867DBD625B000000814B47F9A19881524E
+ 000000000000452F2DEE9A93ED8D87EEB0A9F5CFCAF5C1BAEEADA8E99E99EC9F
+ 9AF2A6A1F2A8A3EEA49FEA9F9BE69E99EDA8A4F4B2ADF3B5B1EFB3ADEEB2AD8E
+ 6966000000EAAEAADFA5A140302F000000000000000000E0A8A4E0A7A4DEA6A3
+ DCA6A3E2ADA9E2B0ACE3B3B0EDBEBAE3B7B4DEB3B0DBB1ADDCB1AEE2B6B4E1B7
+ B4DCB2B0DAB0ACDBB1AEE7BFBB2C2423766160DEB5B4DEB6B43F343300000000
+ 0000000000282121DEB7B5EEC7C6EFCAC9ECC7C4D6B1AEDCB6B5E5C2BFE9C4C2
+ DBB7B5D8B5B4D8B6B4DFBDBBD8B7B5D5B4B2D9BAB8EFCFCDEDCCCAD2B3B1DBBA
+ B9EFCFCDE9CAC72B2524453D3CE5C6C5D6B9B7000000000000000000433C3BEF
+ D4D2DCC1C0D4B8B8D6BBB9D8BEBBE2C6C6ECD1D1E6CCCBD7BDBBD9BFBEEED5D5
+ ECD1D2D9C0BFD6BDBBDEC5C5EDD2D2D9C1C1D7BFBFD7BFBFD7C0BEDCC5C4E0C7
+ C6DBC3C3D4BDBAD1BAB9D5BEBDD8C2C12C2827141212D5BEBDD7C1C13F393A00
+ 0000000000000000423D3DD5BFBED5BFBFE7D1D0ECD6D5EAD2D2EFD9D8EED8D7
+ E2CBCBD4BFBFE0CBCAEFDAD9E3CECDCEB8B7D1BDBBECD6D5F2DAD9E3CECDD1BB
+ BAD0BBBAD5C0BFD2BDBBCEB9B7EBD5D4E9D2D1CCB7B5CBB4B3E2CCCBF4DFDEF0
+ D9D8E7D1D0F6DFDED8C2C0CAB6B4CAB4B30000000000000000D9C4C4D1BFBDD0
+ BFBDE6D4D4F0DEDCECD9D8DFCCCBE2CECED6C3C2D7C3C2D5C3C2E7D2D2E4D1D1
+ DAC7C6D9C6C5E0CCCBE6D2D2E3CFCEEBD6D7E5D1D1DAC9C7E3D0D0E2CFCEE3D0
+ CFE9D5D6D1BFBED4C1C1EBD6D6ECDAD9E1CDCD413C3B766C6CE3CECDD9C1C1DC
+ C6C5EFD7D7E0C9C7ECD5D5EAD2D0E6CECEE4CCCBE0C9C6DCC4C3E4CCCBE3CBCA
+ E0C7C6E6CDCCE1C9C7E4CBCAE4CBCBE4CCCBE0C6C5DBC1C0E0C5C4000000917F
+ 7FE3C9C7766868000000000000B19C9AEDD0CFEDD0CEE4C7C6E5C9C6EBCECCDB
+ BFBEE0C4C2E7CCCADEC1BFE1C3C3E7CBCAE3C5C5E6CBC9E4C7C6DEC1C0DEBFBE
+ E2C3C2EBCDCCE4C7C6DCBEBDE7C9C7000000EACBCAE7C6C62A24240000000000
+ 000000002A2323ECC9C6E9C5C3E5C0BEE4C0BEEBC5C3EAC5C2E7C2C0E3BDB9E0
+ B9B7E2BBB8DCB4B2EBC2C0ECC4C1DEB4B1E9BEBBEDC2C0ECC1BFEBC0BEECC2BF
+ E7BBB8E9BDB9E5B8B6EABEBAEDC0BEECBFBB141010927472E6B8B5B38E8C0000
+ 000000000000000000005F4A49ECB8B5F0BAB6F2B9B6F6BBB8F6BAB7F7BBB7EA
+ B0ABE5ADA9F2BAB6EFB9B5F4B8B4F4B4B0F2ACA7F2A9A5EBA59FEDA8A4F0AEAA
+ EEA8A4EDA29DEF9E99F2A59FF4ACA7F4B0A9F4B0AAF5B3ACECB1AA443230140E
+ 0DD98C87F89F982E1E1C0000000000009A5C57F58A82FBD1C7FD8078FDD4CAFE
+ 948AFE847AFF6E64FFB6ABFFB8ADFF9488FF8A7FFF766BFFB2A6FF9184FFB5A8
+ FF9F93FFD1C4FF9C90FFDFD1FFBFB2FF9286FFA89CFFBDB1FFA89CFFA99EFF8B
+ 81FFB7ACFE847AFC8A80FD7F75FD867E824A45000000DB8881F8968E2E1D1C00
+ 00000000007E514EF0CDC6F2C3BDF4B5AEF3A9A3ED9C96F0A19BF2A59EF0A49E
+ F2A49EECA19BEFA8A3EDABA6F2B3ADF4B5B1F0B4B0F0B4B0F4B6B298716E0000
+ 00F3B5B1E4A7A3453332000000000000000000EBB1ADEFB8B4EBB7B3ECB9B6F0
+ BFBBEBBBB9EBBEBAF6C7C4EDBFBBE4B7B4EDC0BDF3C4C2F4C6C3EFC2C0EABEBA
+ E3B8B5E9BEBA7B64632C2323EDC3C1EEC5C2967C7A0000000000000000000000
+ 00BD9B9ADAB4B2EAC3C1EEC7C6ECC6C5D7B2B0DCB7B5EDC9C6F0CCCAE7C3C1EC
+ CAC7ECCAC7EECDCBE4C3C2D8B6B5E5C5C3EFCECDE6C6C4D5B5B3DCBEBBEACAC7
+ EDCDCB403736433B3AE9CBC9E5C9C7000000000000000000453D3DF2D6D4E7CD
+ CCDAC0C0E5CBCBEFD5D2F0D6D5F0D7D6F2D7D6EACFCEE7CDCBEED5D5EFD6D5EF
+ D6D5EAD1D0EFD6D6EFD7D6E1C7C7E7D0CFE7CECEE2CAC9EBD2D1DEC5C4DBC4C3
+ E4CCCBDFC6C6E3CCCBDCC6C5C5B2B1141212413B3BDFC7C7C6B4B31412120000
+ 00000000000000887B7BD6C1C1DCC9C7E0CACAD8C2C2E3CECEDCC7C6E5D0CEEB
+ D6D5ECD6D6EAD4D2E7D2D0E7D1D0E5CFCEEAD2D1E9D2D1E4CECDDBC5C5D8C2C1
+ E7D1D0EDD7D6E6D1D0EAD4D2EBD5D4E9D4D2E3CDCCEFD8D8F6DFDEF4DFDCEED7
+ D7F8E2E1F0DBDAE6D0CFE3CCCC0000000000000000F2DFDED4C1C1D0BFBDEFDC
+ DBF0DFDEE6D4D2E7D6D4E9D6D6EBD7D7E7D5D4D8C5C4E7D4D2ECD9D8ECDAD8E6
+ D4D2DCC9C7E4D0D0E0CCCBE5D0D0EAD6D7EAD6D7EAD7D7DFCBCBE6D4D4E1CECE
+ D1C0BFD2C1C0E9D5D5EEDAD9ECD8D8443E3ED1C1BFF0DBDAECD5D5F2DAD9F3DA
+ DAE2CAC9F6DEDCF4DBDAEED6D6EBD2D1E3CACADFC6C5E5CECDE6CDCCE4CCCBE6
+ CECDE4CCCBE5CCCCE5CCCCE5CCCCE1C6C6DBC1C0E1C5C5000000928180E0C4C4
+ 8A7979000000000000796B6AEDD0CFEDD1CFECCFCDEBCECCEBCFCDDABEBDE7CB
+ C9ECCFCEEACDCBEBCECCEED0CFECCECCE7C9C7EBCDCCE7CBCAE5C7C6E4C6C5ED
+ CDCCEACCCBDFC0BE927E7D433B3AE9C9C7E0C0BF000000000000000000000000
+ 000000B49997EAC5C3E5C0BEE4BFBEE9C4C2E7C2C0E7C2C0EAC4C2EAC3C2EDC5
+ C3E7C0BDEFC6C4EFC6C4DAB3B0E9BFBBEDC2BFECC1BFEEC2C0EBBFBDE9BAB8EB
+ BEBBEBBEBAECBEBAEDBFBBB3908D141010E9B9B6DFB0AC2B2222000000000000
+ 0000000000002C2222EDBAB7F2BEB9EFBAB7F4BEB9F6BEB9F7BDB8F5B8B4F0B0
+ ABF4B6B2F2B5B1F4B8B4F4BBB7F3B9B4F0B1ACECA6A2EFA39EF0A59FEFA7A2ED
+ A7A2EFA7A2F2A29CF49D98F3A29BF5AAA5F3ACA67B565300000098726EF7AEA7
+ 64403D000000000000472D2BF5A49BF79289FC8A82FDD8CEFE8076FECDC2FF90
+ 85FF8379FF8E84FFA69AFFB6AAFF998DFF897DFFC7B9FFB3A5FFA598FFA799FF
+ E3D5FFB6A8FFFFFFFFC7B9FF9486FFD4C6FFC4B8FF9C91FFACA1FF9C92FF8E84
+ FF9085FE7B71FE8176FD8B82FDA299160D0C2E1B1AF69C94D98D860000000000
+ 00000000DAA7A2F6ACA6F6A29AF5A19AF2A19AF2A29BF3A29BED9D98EAA19CE6
+ A39DEBAAA5E7A8A3E9A9A4E4A6A2E7A9A4E7A9A4EFB1AB99706D000000F3B3AE
+ E7A9A5463433000000000000000000EEBAB6F2BEBAF0C0BDEEBEBAEEBEBAE6B7
+ B4E0AEABEDBDB9E2B2AEDCADAAE9B9B6EDBEBBEFC1BEEFC2BFECBFBBE6B8B6CD
+ A6A4141110CCA6A4E1B6B3D1AAA914111000000000000000000074605FD7B1AE
+ D7B1AEE3BDBBE6C1BFD7B2B1D5B0ADD9B4B2EAC5C3F0CCCAF0CCCAF3CFCCF2CE
+ CCF3D0CEEECDCBE4C2C1EDCCCBF4D2D0F3D4D1EECDCCEACAC7EFD0CEEFD1CF3F
+ 3736403838E1C3C1E2C5C4000000000000000000423B3AEFD4D2EDD0D0D8BEBD
+ E5CAC9EFD5D2EDD2D1EACECDEFD4D2EACFCEE7CDCCEED4D4EDD4D2EDD2D2E9CF
+ CEEFD6D5EFD6D6E5CCCCEDD5D4ECD2D2E9D0CFEDD5D4E9D0D0E7CECEECD4D4E6
+ CFCEEED8D7ECD4D4E6D0D0968787000000948685ECD6D5B4A4A3000000000000
+ 000000141212C9B6B6ECD7D7E9D4D4DBC7C6E3CECDE2CECCE3CECDE9D2D2E9D2
+ D2E5D0CFDFCAC7E2CCCCE1CCCBE9D4D2E9D1D0EAD4D2ECD6D5E4CECDECD6D5EB
+ D5D4E7D0CFE7D0CFEFD9D8F0DAD9E3CCCBE6D0CFF3DEDBE6D0CEDAC4C2F2DBDA
+ E6D0CFE4CECDE9D4D10000000000000000F0DEDCD6C3C3D2BFBFDCCBCBD9C6C6
+ D5C1C1ECD8D8F0DEDCF2DFDEEFDCDBE1CDCDE5D0D0ECD9D8EDDADAEEDADAE2CF
+ CEEFDBDBEFDBDAECD8D7ECDADAECDADAEAD8D8DFCCCCE0CECED5C2C3D2C1C1D2
+ C0C0DECBCAE9D5D5E4D0D0A99A9AEBD7D7EDD8D8D9C2C2DAC3C2E7D0CFD9C1C0
+ EDD6D5EFD7D6ECD4D1E6CFCDE2C9C7D5BEBDE0C9C6E0C7C6DCC5C3E3CAC9DBC3
+ C2D9C0BEE3CAC9E2C9C7DCC3C2D6BDBBDBC1C1000000938281E0C5C48D7D7C00
+ 0000000000433B3BEACDCBECCFCEEACDCBE7CBCAEACDCBDEC2C0E2C6C4EBCECD
+ ECCECCEACCCBEDCECDEBCDCCE7C9C7EBCDCBEACCCBE6C9C7E6C9C7EDCECDEBCC
+ CCE1C2C0413838947F7FEACBC98D79790000000000000000000000000000005F
+ 504FE9C3C0E2BDBAE3BEBBE5BFBDDEB8B6DFB8B6E9C2C0E5BEBBE4BDB9DEB6B3
+ EAC2C0ECC3C0D8B0ADDAB3B0E1B8B5E4BAB8E6BBB9E2B6B4E1B5B3EABEBBECBE
+ BBE6B9B6EABBB72B222279605EE6B5B2C1989500000000000000000000000000
+ 0000000000CC9E9CEBB5B3E0ABA7E1ACA9EDB8B5EFB9B5E5ADA9E1A6A2ECADA9
+ EDADA9EEAAA6E7A6A2E9A8A4EAACA8EAB2ADE6A9A4EEA8A3EE9F9BEA9994EA9A
+ 95EB9F99F2A7A1EE9B95EF948DCE837C00000060423FEFA7A1B7868100000000
+ 0000000000D7827BF6968DFBAAA1FC978DFD887EFFE1D6FF857BFFCABEFF9B90
+ FF887DFFE1D4FFD1C4FFAD9FFF9E91FFA799FFCBBBFFA293FFB1A2FFF6E7FFD8
+ C9FFFFFFFFCEBFFFA496FFF0E2FFCDBFFFC9BBFF988BFFBEB2FFA195FF8175FF
+ 7D72FE877DFEA499FD9187BF6F69000000BD7069F8968E655C59000000000000
+ 2E1E1DF69D97F59F99F7A19BF59D97F4A19AF4A7A1F2ABA6EFAAA5EAA6A1EAA8
+ A3E6A49FE3A19CE2A19BEBA8A4ECA9A4EFACA8D29995000000F3B3AEEDB1AC45
+ 3534000000000000000000E7B5B1EFBBB7EDB9B6E9B4B1EDB9B5EAB5B2EBB8B5
+ EEBDB8ECB9B7E4B3B1EDBDBAEFC0BEF0C1BEEFC1BFECBFBDEABDBA2C2322987C
+ 7BE7BDBAE1B6B44539380000000000000000002C2525F2CBC7DEB7B5D6B0ADDB
+ B6B4E6C1BFD5B0ADD8B3B1E9C4C2EDC7C5F2CDCBF4CFCDECC9C6ECCAC6F3D0CF
+ EFCECCE6C7C5E6C7C5F0D0CFF2D2D0F2D2D0EDCECEE7CAC7EDCECD423A3A443C
+ 3BEDCFCFEACECD000000000000000000413A39ECD0D0E6CBCAD7BDBADCC1C0E6
+ CBCADEC2C2D8BEBBDFC4C3E4CAC9DBC1C0DEC4C2E0C6C5EAD1D0E4CBCBEED6D5
+ EFD6D5ECD2D2EED6D5ECD2D2EDD5D4EFD8D7EED7D7EFD7D7EBD4D4E0C9C7ECD5
+ D4E7D1D1E1CBCAE6D1CF2B2727141212E7D1D1ECD6D5443E3E00000000000000
+ 00005F5656EDD8D7ECD6D6E7D4D1EAD5D4E3CECEE7D2D1E6D1D1E6D1D1E6D1D1
+ E6D2D1E9D4D2E3CFCEECD6D6ECD5D4EED7D7EFD8D7EFD9D7F0D9D8F0D9D8EFD9
+ D8E9D2D1E9D1D0E7D2D1D6C1C0D4BFBEE6D0CEDEC9C6DFC9C7E7D2D1D2BDBBE4
+ CECDE1CBCA0000000000000000E6D2D1DBC9C7DAC7C6D8C6C5D1BFBED4C0C0E7
+ D4D4ECD9D8EDDAD9EEDBDAEAD7D5E5D1D0E9D5D5ECDAD9ECD9D8E5D1D0EBD7D8
+ EAD6D6E4D0D0EAD7D7EBD9D9E6D6D6E1CFCEE6D4D4DECBCCD5C3C3D9C7C7E5D4
+ D2EBD8D8EAD6D6DECACAECD7D7ECD8D6E5CFCEDAC3C3EED8D6E4CCCCECD4D1EC
+ D4D2EAD1D0E5CDCCDAC2C1D2BAB9D7BFBEDFC5C4D9C0C0E4CCCADBC3C2DFC4C4
+ E5CCCCE7CDCCE6CCCCE3C9C7E1C6C6000000B09B99E2C6C59483820000000000
+ 00423B3BE4C9C7E7CBCAE3C6C4E7CCCAECCFCDEBCECCE5C7C6E6CAC9EACCCBE9
+ CBCBEDCECDECCDCCE7CAC7ECCDCBE7C7C6E7C7C6EDCDCCEECECDEDCECDEACBCA
+ 141111CFB3B1EECDCB413837000000000000000000000000000000000000E9C4
+ C2E9C2C1E9C3C2E9C3C1E5C1BEE4BEBBE9C2C0E9C2C0E7C1BEE5BDBAEEC4C1EE
+ C4C2E4BBB8E7BEBAEAC0BDDFB5B2E7BDBAEABFBDE0B5B2EABEBBEBBFBBE7BAB8
+ B18E8C141010EBBBB9E9B8B65D49470000000000000000002C22220000000000
+ 00987673F2BBB9E6B0ACE7B2ADEAB3AEF0B8B5EEB6B2EAB1ACE6ADAAECB2ADEE
+ B1ABF2B1ACEEAAA6EFA8A3EFA9A5E9A7A2F2B2ADF3B9B4F0ACA7EFA29CF29A95
+ F39C96F29F99F4A69F442C2A140C0BEE948DEFA29A2D201E0000000000006346
+ 43F6958CF8938AFD978DFDA69CFE9A90FF897FFFF3E7FF9C91FFC9BDFFA598FF
+ 8D80FFD5C6FFD9CBFFB4A6FF9889FFE0D0FFA898FFC9B8FFFFFDFFFFF5FFFFFF
+ FFCBBBFFD8C9FFE5D7FFB9ABFFC5B7FFEBDCFFA79AFF9084FF887DFF8E84FFA9
+ 9EFE8B82FD9287FDB0A62E1917483734F9DCD4DBA59D00000000000000000080
+ 504CF49892F79F98F5A59FF5ACA6F4ABA6F4ACA7F2ABA6F0A9A4EAA39EE49E99
+ E49D99E59F9AEDA8A3E9A39EEAA9A5EBADA9000000EFB8B4ECB7B34536350000
+ 00000000000000E4ACA8EDB6B3EDB6B2ECB5B2ECB7B4EBB6B2EDBAB7EEBBB8ED
+ BAB8EAB8B6EDBDBAEEBEBBEEC1BFEDC1BEEBBEBB5E4C4B433736EEC4C1EBC1BF
+ 937976000000000000000000000000D4B2AEF3CCC9EFC9C6DCB6B4DAB5B3DBB7
+ B5DEB8B6EDC7C4ECC6C4DEB9B6E2BEBBF0CDCBF0CDCBEECBC9EECCCBE7C7C5E5
+ C5C3E9CAC7EDCDCDEACDCBEDCECDEDCECEE9CBCAEACDCC403938433C3BEED2D1
+ EFD2D1000000000000000000443D3DEDD2D1E4C9C7DABEBEE7CCCBEACECDEACE
+ CDDBC1C0EBD0CEE5CBCADBC1BFE4CAC9E1C7C6EAD0CFE6CDCCEFD6D5EFD7D5EF
+ D6D5EED6D5E9D0CFEDD5D4EED7D5E7D0CFEAD1D0EAD2D0E9D1D0E7D1D0DCC5C4
+ DFC7C6EBD4D2CEB8B8000000766B6BECD5D5CDB8B80000000000000000000000
+ 00CFBABAECD7D6E6D1D0E6D1D0EAD4D2EBD5D5ECD7D7EDD8D8ECD7D6EAD6D5EA
+ D5D5E4D0D0E9D4D2E4CDCCEAD2D1EAD2D0EBD5D4EDD7D6ECD6D5EDD7D6E1CBCA
+ E5CFCDE5D0CED4BFBED4BFBED5C0BFD4BEBDE9D2D0F2DCDBD8C1C0CDB7B6D0B9
+ B80000000000000000F0DEDCDCC9C7ECDAD9EDDAD9E6D4D2ECD7D7EFDBDAEFDC
+ DBEDD9D8E9D6D5DECBCAE2CECDE2CDCDE9D5D4E9D6D5D9C5C5E9D6D5EBD8D8EA
+ D6D7EAD6D7EAD8D8E6D5D4E4D1D2E5D2D2E4D1D2E6D4D4E7D6D7E4D1D1EBD7D8
+ ECD9D9ECD9D9F3DEDEF3DEDCF0D9D9E2CBCAF3DBDAEED7D6F0D9D7F3DAD8F0D8
+ D7EED6D4EDD4D4E0C7C6DFC6C5E6CDCCE6CDCCE6CECDE1C7C6E1C7C6E2C9C6E5
+ CCCCE5CCCAE0C5C48B7C7B141111E0C5C4D6BDBA5A504F000000000000433C3B
+ EACECCEBCFCEEBCECCEBCECCEDD0CEEDCFCEECCFCEEACDCBEED1D0EFD1D0EFD1
+ CFECCDCCE9CBC9E7C9C7E3C4C2E3C4C3EDCDCBEECFCDEECFCDB49A9A2C2525EE
+ CECCEECBCA1412110000000000000000005E4F4E000000000000796564E7C2C1
+ E9C4C2E9C3C1E5BFBEE6C0BFE9C1C0EBC3C1E9C1BFE7C0BDE9BFBDEBC0BEE2B7
+ B5EAC0BDEDC1BEE4B8B6EBC0BDECC0BDE5B9B6E9BDB9EBBFBBEBBEBB4437365F
+ 4D4CECBEBACEA5A200000000000000000014100FEEBBB7000000000000453534
+ F2BAB7EDB5B1EEB5B1F2B7B3F0B6B2EEB4B1EDB3AEEEB4B1EDB2ADF0B4B0EFB3
+ AEEFB3AEF3B3ADF2AEA9EEA7A2F3A7A2F4A8A3F3ABA6F2B0AAF3B4ADF3A7A2F4
+ 9A95BA726D000000805653F99E97BD6F69000000000000000000DB9D96F8C3BA
+ FCA49BFD958BFE948AFFA297FFA99DFF988CFFFFFFFFBDB0FFC6B8FFB0A2FFCC
+ BDFFF2E2FFCFBFFFB8A8FFFFEEFFB19FFFFCE9FFFFFFFFFFFFFFFFFFFFCBB9FF
+ FFFFFFFFF4FFEEDFFFC1B2FFAEA1FFA799FF9689FF9D91FFBBB0FF9488FF9A90
+ FE9C92FD8A819F9E9C000000D88E87F9958C633D3A000000000000150D0DF5A3
+ 9CF5A9A3F5AAA4F5ABA5F3A8A2F3A7A2F2A59FF3A6A1F0A59EE79B96E79D99E6
+ A29DE7A8A3E4A8A4E5ADA9E6B0AB000000EBB2ADE5AAA6443332000000000000
+ 000000EAB0ABECB3AEECB3B0EBB3B0E2ACA9E0AAA8EAB6B3ECB9B7E5B3B1E2B1
+ AEE3B3B1E7B8B6EBBDBAEBBEBBB1918D141010CDA7A6EBC2C0CDA9A700000000
+ 000000000000000074605FECC4C2EFCAC6EFC7C6E5C0BEEAC5C3EBC7C4ECC9C5
+ F3CECCEECAC7EAC6C4E4C0BEEAC7C5F2CECCEECBC9E5C3C1E6C6C4E3C4C3E6C7
+ C6EBCCCBE5C7C5E6C9C7EECFCEEECFCEEACDCC3E3636413939EBCFCEECCFCE00
+ 0000000000000000443D3DEED2D1EACECDE6CBC9EFD4D1EFD2D1EED2D0DFC3C2
+ ECD0CFE4C7C7DEC2C0DCC0C0DBC2C0DAC0C0DCC2C2E9CFCDE1C7C5E3CAC9E9D0
+ CFDCC4C3E4CCCBEDD5D4ECD2D2E6CECDE1C7C7E6CFCEEDD6D6EAD2D1E9D1D1ED
+ D6D4EDD5D42B2727141313ECD6D6ECD6D5443E3D0000000000000000005F5656
+ EAD5D4DFCAC9DAC5C5DCC7C6E9D4D2EDD8D8EDD8D8EAD5D4E7D2D2E6D1D2E5D1
+ D0E9D4D2E4CFCEE5CFCEE6CFCEE4CECDE4CDCCDCC5C4E5CFCDE4CDCDE9D1D0E7
+ D1D0E3CDCCDEC7C6E4CFCDE1CBCAEBD4D1F3DEDCEDD7D6E1CBCAF7E1DF000000
+ 0000000000E9D6D5DAC6C6E5D2D1F4E1E0F2DFDFF0DEDCF0DEDCF4E0DFF3E0DF
+ E7D5D4D5C2C1E5D1D0EDD9D8EBD7D7E9D6D5E3D1D0E3D1D1EBD7D7ECDADAECDA
+ DAEBD9D9E7D7D7E9D6D7E4D2D2E3D1D0E6D5D5E5D2D2E0CECCE4D1D2DECACAE6
+ D2D2F3DCDCF4DFDEF0DAD9E4CECEF3DBDAF3DBD9F0D9D8F2D9D8EDD5D2E6CECD
+ EDD5D4E9D0CEE5CDCCE6CDCDE5CDCBE6CECDE7CECCE5CCCBE1C7C5E4CBCAE4CA
+ C9E2C7C62A24245B5150E3C9C7D6BBB92B2525000000000000443D3DEACFCDEC
+ D0CFEBCECCEBCECCEBCECCEDCFCEEFD2D0EACDCBECCECCEDCFCEEED0CEEBCDCB
+ EDCECEEFD0CFE5C6C4DCBEBDEBCCCAEDCDCBECCCCA7A69685E504FEBCAC7B499
+ 980000000000000000002B2423EAC5C4141111000000141111DFBAB8E9C3C2E9
+ C3C2E5BFBEE3BDBAE3BBBAE5BEBBE6BFBEE6BFBDE5BBBAE6BEBBE0B6B4EBC0BD
+ EDC1BEE1B5B2EBBEBBECBFBBE6B8B6E2B5B2E5B7B4CAA19D000000CCA29FEBBB
+ B85C49470000000000000000007A605FF0BDB8433534000000000000F2BAB7ED
+ B5B1F0B6B3F2B7B3EFB4B0EFB3AEEEB1ACF0B3AEF0B3AEF3B5B1F3B4B0F4B5B1
+ F3B3AEF2B2ACECACA7F2B0AAF3ACA7F3A7A1EE9E98F2A29BF3A8A2F4B1AA4833
+ 312E1E1CFB948CFB97902E1E1C0000000000002E1B1AFDABA2FCADA5FDBEB4FE
+ C1B6FF958AFF998EFFA99DFFC2B6FFAA9DFFFFFFFFECDCFFD6C6FFBAABFFFFFF
+ FFFFF8FFDAC7FFF9E6FFE4D0FFFFFFFFFFFFFFFFFFFFFFFFFFD1BFFFFFFFFFE4
+ D2FFDCCCFFECDCFFC6B7FFA697FFB0A3FFCABDFFA498FFB6AAFF8A80FFC9BEFE
+ EBE0FCB2A8160D0B814C47FB948BDB7E760000000000000000007E5652F3A49D
+ F5A49DF5A49DF4A29BF3A19BEF9E98F4A59FF4AAA5F3AEA9F3B5B0F2B8B3F0B4
+ B0E6AAA6E7AAA7EBADA8000000EEAEAAE4A5A1433230000000000000000000E6
+ ABA8E7AEAAEBB3B0EBB4B1E5B1ADE0ACA9EBB9B5ECBAB7E7B6B4E3B3B1E9BAB7
+ E5B7B5E9BBB9E5BAB71410108E7473E6BFBDE9C1BF2B23230000000000000000
+ 00413736DEB8B6E1BAB9E0BAB7E1BBB9E3BFBDEECAC7EECAC7EFCAC9F4CECCEE
+ CAC7EECAC7E4C1BFE2BFBDF0CDCBF2CECCEECCCBEBCBC9E6C9C6E2C2C1EDCECD
+ EDCDCDE9CAC7EACBCAF0D4D1F2D4D2433B3B423A3AEDD1D0EACDCC0000000000
+ 00000000443C3BEED2D0ECCFCEEBCDCCF0D4D2F0D5D2EED2D1E9CDCCEDD0CFE7
+ CCCBE5CACAE9CDCCE9CECDDEC4C3E4CAC9E9CECEE3CAC9E7CECCE9D0CFDEC4C4
+ E7CECCEED5D5EED6D5EAD2D2E5CECDE3CDCCECD4D4E2CAC9E0C7C7E5CDCBE5CD
+ CBAC9A990000008D7F7FECD4D4B3A2A1000000000000000000000000ECD5D5E9
+ D2D2E3CDCDDFCAC9DBC6C6E6D1D0E7D2D2E2CECDE5D0D0E3CFCFE5D1D0EBD6D6
+ EDD8D7F0DAD9F3DCDBF2DCDAF0DAD8E9D2D1ECD6D5E9D2D1EDD7D6EDD7D7ECD7
+ D6E9D4D2EDD7D6ECD6D5EAD5D2F8E2E0F7E0DFF6DFDEFCE5E400000000000000
+ 00F0DEDCE6D2D2F0DEDCF6E2E2F5E2E1F0DEDCF2DFDEF0DEDCF4E0E0D8C5C4CE
+ BBBAD8C3C3E9D5D4EFDBDAEEDAD9E4D1D1DCCACADFCCCCECD9D9ECDADAEBD9D9
+ E9D7D7EBD9D8EAD8D8EAD8D8EBD9D9DFCCCDD2C0C0D4C0C0D2BFBFD2BEBEE1CB
+ CCF2DBDAE9D1D0DCC5C4ECD5D4E0C9C9E6CFCEECD5D2D6BEBDCFB6B5D5BDBBEC
+ D1D0EAD1CFEAD0CFE7CFCEE6CDCCE7CECDE7CECDE7CDCDE7CFCDE9CECE786A69
+ 141211C6AEAEE2C6C5BBA5A4000000000000000000938180DFC3C2EACFCDECCF
+ CDEACCCCE9CCCBEBCECCE7CBC9D9BBB9D4B6B5D8BAB9EACDCBE7CAC9EDCFCEEE
+ D0CFE7C9C7E3C3C2E9C9C6E5C5C4DEBEBB292222AB9290E4C1C0736260000000
+ 000000000000897372E9C4C35E4F4E000000000000A78A89E4BFBDE5C1BFE5C0
+ BEE5BFBFE4BFBDE6C0BFE4BEBBE9C2BFEAC2C0EAC1BFE5BBB8EDC1C0ECC0BEDA
+ AEACE5B9B6EBBEBBE5B7B4E0B3B0E9B9B65F4B4A5F4B49EBB9B7ECBBB8141010
+ 000000000000141010F2BDB9F3BEBA977573000000000000B78D8AE6B1ACEDB6
+ B2F2B7B3EFB4B0EDB2ADEFB2ADF0B2ADF3B2ACF3B2ADEDABA7F4B1ABF4B1ABED
+ ABA6E7A5A1EBA8A3EEAAA5EDAAA5EAA69FEBA19BF3A29BD28581000000805653
+ F7B4ADBD7F7A0000000000000000009E625DFC867EFC8D84FEABA2FEB3A8FFD1
+ C6FFB9AEFFA99DFFB6A9FFE4D6FFC1B2FFFFFFFFFFFFFFEDDBFFC3B1FFFFFFFF
+ FFEBFFD4BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFF5E3FFB9A9FFC5B6FFDBCCFFB8AAFFDACDFF9084FFFFFFFFCFC4FF9388FE91
+ 86663A362E1A18FC9991FCA89F2E1F1D0000000000002D1D1BF59B95F59C95F6
+ 9D97F5A19AF3A7A1F2ACA7F4B7B1F3B4AEF2B0AAF3B0AAF2AEA9F0ACA7E5A29C
+ E29F9AE5A39E000000EEACA8EBA9A543302F000000000000000000EDB4B0EDB5
+ B1EEB8B4EFB9B6ECB8B5E1B0ACECBBB8EDBEBAE9B9B7EABBB9EABDBAE9BDBAEA
+ BFBD5C4B4A413635E1B8B6E3BDBA796564000000000000000000141111CEAEAB
+ EBC5C3EDC7C5EFC9C6ECC6C5E7C3C1EECAC7F2CBC9F4CFCCF5D0CDF2CCCAF2CC
+ CAE9C4C2DBB8B5F0CDCBF3D1CEEECCCBEBCBC9EBCCCAE6C5C4EFD0CEEFD0CFED
+ CECCE7C9C6EDCECDEFD1CF786867433A3AEACDCCE5C9C7000000000000000000
+ 433B3BECCFCFECCFCEEBCDCBEFD1D1F0D4D2EFD2D1EED1CFEDD1CFEACECEE7CC
+ CAECD0CFEACECDE3C7C6EACECDEDD1D1EBD1D0EBD1D0EDD4D1E5CCCBE7CECDEA
+ D2D2EDD5D5EBD4D2E6CECEE3CDCCE7D0CFE2CACAEDD4D4E6CDCDE7CFCEE7D0D0
+ 141212403A3AE7D1D0E9D1D1141212000000000000000000968787E9D2D2E3CD
+ CDDBC6C6DBC6C6E6D1D1E6D1D1E2CFCDE7D2D2E6D2D2E1CCCCEDD8D8EAD5D4EC
+ D6D6EBD5D5EDD9D8F0DAD8EDD7D7ECD6D5E4CECDECD6D5EDD7D7ECD6D5E6D0CF
+ ECD6D5EFD9D8EED7D6F6E0DEECD6D4EFD8D7F8E2E00000000000000000DFCCCB
+ D2C0BFDFCCCBF2DFDEF0DEDCEBD8D6ECD8D6EEDAD9F2DFDED5C1C0CEBBBAD5C1
+ C0E9D4D2E9D4D2E7D4D2E0CCCCDCC9C9D9C5C5E6D5D4ECD9DAE9D7D7E5D5D5E9
+ D7D7E7D6D6EAD8D8ECDAD9E3D0D0D5C2C3E3CFCFDAC7C6D2BEBED4BEBEEEDAD8
+ F3DBDAD8C1C0F0DAD8E6CFCEECD5D5EFD8D7D2BAB9D0B6B5D0B8B7DFC6C5E5CE
+ CDEAD0CFE5CCCBE2C9C7E4CACAE2C9C6E3CAC9E3CAC7928181000000928180E3
+ C9C6D9BFBE564C4B000000000000000000A79291D6BAB9DFC3C1ECCFCDE7CCCA
+ DFC1C0DEC1BFD7B9B8D5B6B5D2B6B3D5B7B5E5C6C4DCBFBEDFC1BFE7CAC7EBCC
+ CAEACAC7EDCDCBEDCCCAECCBC9000000EECCCAEECCC92C252400000000000000
+ 0000D8B6B4E9C5C3CAABA9000000000000413737DFBBB8E6C2C0E6C1C0E6C1BF
+ E6C0BFE7C2BFE9C2C0EAC3C0EBC3C1ECC3C1EAC1BFEDC3C1EEC3C0EBBFBBECC0
+ BEEEC1BFEEC1BEE6B8B5ECBDB9000000C99D9BE7B6B37C626000000000000000
+ 00007B5E5DF2B9B7F3BBB7F0B7B40000000000005F4846E5ACA9E9B0ABEEB4B1
+ EBB1ACE5ABA7EDB2ADECB0AAF2B3AEF3B2ADEDAAA6F0ABA7F5AEA9F3AAA6ECA6
+ A1F2AAA5F5ACA7F4ACA7F3ABA5F0A9A4F4ACA67E5955150F0EF5A199F8999365
+ 3E3C000000000000000000FB8076FC8A81FD9F96FE8279FF897FFFB8ADFFCEC2
+ FFFEF0FFBEB0FFC9BAFFF5E5FFDFCEFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF
+ F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE5FFFFF4FFD7C4FF
+ E2D0FFEFDFFFD2C3FFCBBDFFFFF3FFFFFFFFB2A6FF968BFF8A80FE837AA1625C
+ 000000FBA59CFBA29981514D000000000000000000B7736FF4A59EF6B2AAF6B4
+ ADF4AEA8F3AAA5F5A9A4F3A7A2EBA19BE79E99EFA5A1EFA6A2E49C98E29C98E4
+ A19B000000EEADA9E7A9A542302F000000000000000000EDB6B2EBB5B2EBB7B4
+ EDBAB7EBBAB6E1B2AEEDBEBAEDC0BDE7BAB7EBBFBBECC0BEECC2BF967C7B1411
+ 10EAC1BEE7BFBDB19392000000000000000000000000947D7CEAC5C4EAC4C3EB
+ C6C3EBC5C3E9C3C2E1BDB9EEC9C6F2CCCAF4CDCBF4CFCCEEC9C6F3CECBF0CDCA
+ EDC7C5F3CECBF0CDCBE7C5C4EECCCAEFCECCEBCAC7EECECCEECECCEBCCCBE7C7
+ C5EBCBCAEFD0CE958180433B3AEBCDCDEBCECD000000000000000000433B3BEA
+ CDCCECCECDE2C5C3E9CCCAEDCFCFEBCECDECCFCDECCFCDE7CBCBE7CBCAEACDCC
+ E7CDCBE5CACAEACECEECD1D0E9CFCEE7CDCCE7CFCEE4CCCBE6CECCECD5D2EDD5
+ D5EAD2D2E6CFCFEAD2D4ECD2D4E9D1D0EDD6D5E9D1D0ECD2D1EDD6D55F565600
+ 0000ECD6D6ECD7D65F5655000000000000000000443D3DE7D4D1EAD5D4E6D0D0
+ E4CFCFEAD6D6E9D5D5E2CFCEE7D4D4E5D0CFD6C2C1DBC6C5D8C3C2DFCAC9E0CB
+ CAE5D0CFEBD6D5EED8D8EDD7D7E1CBCADEC7C6ECD7D6E6D1D0E3CECDE7D1D1EC
+ D7D6E6D0CFE5CECDDAC3C2CDB7B6D2BFBD0000000000000000DECBCACFBDBBD2
+ C0BFD6C3C2D7C3C3D9C5C4E6D2D1F4E0E0F5E1E0E1CECDCEBBBAD7C3C2E9D4D2
+ EDD9D8E9D5D4DCCACADCCAC9DFCBCAECD8D8EDDBDBE1CFCEDCCBCBE3D1D0DAC7
+ C7DFCBCBECD9D9EDDBD9EBD7D7EDD9D9E5D1D1D2BEBED1BDBDEAD5D5F3DBDADC
+ C5C4EDD6D6E7D0CFE9D2D1ECD4D2D7C0BED0B6B6D2BAB9E5CCCBE6CECEE6CECC
+ DCC3C2DCC3C2D6BEBBDFC5C4E3CAC79382810000006E605FD8BEBDE7CCCBCCB4
+ B3000000000000000000131010E4C7C5E3C6C5E3C6C5E5C7C6DABEBDDCC0BEE0
+ C3C1EACCCBDCBFBED1B4B3D6B8B5E9CAC9E7CAC7E2C3C2DCBDBBDCBDBADEBFBD
+ EECFCDF0D0CE95807F3F3636DFBDBBE0BDBB0000000000000000003D3332DFBB
+ B9EAC6C5E9C5C45E504F000000000000C7A7A6E6C2C1E6C2C1E4BFBDDCB6B5E0
+ BAB7E1BBB9E3BDB9DBB4B3DBB3B1E0B6B4E4BAB8E0B5B2DBB0ADE6BAB7EBBEBB
+ EABDB9E3B5B279605F2A2221DAABA8DBABA8130F0F000000000000140F0FE9B4
+ B1F0BAB7F3BBB8E6AEAB4231300000002D2222F3B5B2EFB2ADEAABA8EBABA8EB
+ ABA8EDACA8E7A8A4EDACA8F4B3B0EFB1ABF3B2ADF5B2ADECA9A4EAA59FEBA39D
+ F4A9A4F4A6A1F3A59EEFA39CF0A39D2C1F1D624340F5A7A1F7ABA4160F0F0000
+ 000000002D1A19FBA89EFDB5ABFD877EFF796FFF9F95FF9185FF9E93FFD9CCFF
+ FFF2FFFFF2FFE2D2FFFFF4FFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBFFFFF3FFFFF4FFFF
+ F6FFB5A6FFFFFFFFEADBFFB0A3FFA195FF9185FFA59AFFA69CFEA4990000009D
+ 5C56F98E87BD6B65000000000000000000604340EEA199F3A29BEF9C97EF9D97
+ ED9B96EF9D98EE9D99EA9B96EB9E99EFA6A2EFA8A4E7A49EE3A29DE3A4A10000
+ 00EDB0ABEBAEAA423130000000000000000000EAB5B1E1AEABE3B3B0E7B7B4E5
+ B6B3E0B2AEEBBDB9EEC1BFEDC0BDECC1BEEEC2BFCFA9A7141010AE8D8DE4BAB8
+ E4BBB9141010000000000000000000413736E7C1BFEAC5C3EAC4C2EAC3C1E0B9
+ B8E4BDBAEAC2C0EBC3C0DCB5B3D9B3B1E5BFBDE1B9B7F3CCCAEFC9C6E9C3C1EE
+ CAC6E7C3C1E3BFBEE2C0BEE5C1C0E2C0BFEECCCBE9C6C5E3C2C0E2C1BFEECDCB
+ F0D0CE968181403838E3C3C3E3C5C4000000000000000000433C3BDFC1C0E1C4
+ C2DEC1C0E6CBC9E7CBCADBBFBEE0C3C3EBCECEEACECEE4CAC7DBC0BFE4CAC7EA
+ CFCEE3C9C7E2C7C7DEC4C3DEC4C3E4CCCCE1C9C9DCC5C4DEC6C5E5CECCE3CCCC
+ E9D1D1ECD4D4EAD2D1E5CDCDDEC6C5D8C1C1DAC2C2ECD4D4948685000000A898
+ 98E3CDCCAE9E9D000000000000000000000000EAD5D4EAD5D4DAC5C4D6C1C1DB
+ C9C9E2CECEE0CCCBEAD6D6EAD5D5D8C3C2D4BFBED8C3C2E0CBCBE2CDCDE2CDCD
+ E5D1D0DCC7C6D9C3C2DFCAC7E2CCCBF0DBDAE7D4D2D7C2C1E7D1D0F2DCDBF0DA
+ D9ECD6D5F2DCDBE7D2D1F0DAD90000000000000000F6E3E2DFCCCBD1BFBECEBA
+ BAD2C0BFCFBBBACFBBBAF2DFDEF6E1E0E7D4D2CEBBBACEBABAD7C3C2E5D1D1D6
+ C2C2D0BFBFD0BEBDD8C4C3E6D2D1D9C5C5D2C0C0DAC7C7D7C4C4D1BFBFD1BFBF
+ E5D2D2EDDADAE1CECCD7C4C4D2BFBFD2BFBED2BEBEE4CFCFE4CFCFD2BBBAD9C2
+ C1DCC5C4E7D0D0E9D1D0DBC3C2D0B6B6D5BDBAE3CBC9E4CCCAD1B8B6D0B7B6D2
+ BAB8D2B8B7D4BAB9423B3A000000746766CFB6B4CFB6B4BEA6A5141212000000
+ 0000000000006C5E5DD0B4B3E9CCCBEDD1CFD7BAB8D0B4B2D0B4B2DCC0BFEFD1
+ D0E9CBC9D1B3B2DABBBAF2D5D2F2D4D1DFC0BED2B5B3D5B7B5D4B5B3D9B9B7EF
+ CFCD42393985706FCFADAB836E6C000000000000000000856F6EE3C1BFECC9C6
+ E9C6C4C2A4A300000000000072605FE6C2C1E6C2C1DAB5B4D8B3B1D9B4B2DEB8
+ B5D8B2B0D8B2AEDAB2B0E2B9B7DFB5B3D7ACAAD7ABA9E0B5B2E0B4B2E3B6B3E3
+ B6B4141010A88683D8A8A6715856000000000000000000715655E7B4B1EEB9B6
+ E7B2AEDAA4A18A6865000000000000EDB2ADDCA19CDC9F9AE1A39EE09F9BE29F
+ 9BE19D99E09A96EEA7A3F0A9A5F4ABA7E9A19BE39C97E49E99E59F9BE9A49EF2
+ AAA5EFA69FEA9D98CD878200000096605CEF9993BA7A73000000000000000000
+ 47302DF89C94FD8D84FD8C82FFB0A5FFB0A4FF7F73FFA99DFFB2A4FFBDAEFFFF
+ F8FFFFFFFFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFD1C2FFC0B2FFB1A3FFCABEFFBBB0FFA599FF9085FD887F150B0B804E49F6AB
+ A3FBB2A90000000000000000002C1A1AED918AED928BEF9690EC9791EA9791E7
+ 9994E99C97E79F9AE6A19BEDA9A5EEADA9E9A9A5E4A8A3E3A9A4000000EBB3AE
+ E3ADA9413130000000000000000000E2B0ABDFACA9E0AEABE0B0ACDFAEACDFB0
+ ACE0B2AEEDC0BDE9BBB9ECBFBBEDC1BF2B22225A4948DCB3B1DEB3B140343400
+ 0000000000000000130F0FC19D9BDCB4B2E7BFBDEBC3C1E1B8B7D7B0ADDAB2AE
+ E4BBB9DBB3B0D5ABA9D5ACAAD6ADABD4ABA9DCB5B2E9C1BFEAC3C1D8B4B2D4B0
+ ADD7B3B1D6B3B1D5B2B0D7B5B3EDCBCAEECBCBE7C6C4E9C6C4EECCCBF2D0CF8B
+ 79763D3534D5B7B6D5B6B60000000000000000003E3737D4B7B6D6BAB9D7BAB9
+ E0C3C3DCC1C0D4B8B7D4B8B7E0C4C3EACFCEE0C4C4D2B8B7D4BAB8DEC3C2D5BA
+ B9D6BDBADBC2C1DAC2C0E7CECEE9D1D0DAC1C1D4BEBBD5BEBDDEC6C6ECD4D4EC
+ D5D4E6CFCFDAC3C3D0BAB9D0BAB9D1BBBAEED8D6EAD5D40000006C6161D4BEBE
+ E0CBC9000000000000000000000000AD9E9CECD7D6D9C4C4D2BEBED4C0C0D5C2
+ C2D5C2C1E5D0D0ECD6D7D0BDBBCFB9B9D1BEBDE4D1CFE6D1D0E3CFCEE2CECDCD
+ B9B8CBB6B4CBB5B4D9C3C1EDD8D7D1BDBBCBB5B4D7C1C0E7D2D1D1BDBBCAB6B5
+ D2BEBDCCB7B5C7B2B00000000000000000F5E2E1D2C0BFCEBABAD9C6C5EFDCDB
+ DECACACEBAB9D7C3C3F5E1E0E7D5D4CEBAB9D5C0C0E9D5D4EFDBD9D9C6C6D0BF
+ BFD1BFBFD7C3C2D9C5C4D0BEBDDECBCBEDDADAE5D2D2D1BFBFD2C0BFECD9D8E2
+ CFCFD1BEBED1BEBED5C2C2DAC6C6E3CECEECD8D7EFDAD9DEC7C6E4CDCCE0C9C9
+ E6CECEE5CECDD0B8B8D0B6B5D0B8B7E6CFCEEAD0CFD0B7B6D1B8B6DAC1BFC5AE
+ AE292323000000948483D6BDBBCFB6B4CFB6B440383800000000000000000012
+ 0F0FD0B5B3D0B5B3E2C6C4EFD2D1ECCFCDD0B4B3D0B4B2E6CAC6EED0CFE7CACA
+ D0B4B2D7B9B7F3D5D2EFD1D0D2B5B3D5B6B5E5C6C5D9BAB8D2B2B0DEBEBB1411
+ 10C0A29FCEADAB3D3333000000000000000000D2B1AEE7C5C4EAC7C5E7C5C4D8
+ B5B4282221000000131010E4C0BEE3C0BDD8B4B2D9B4B2E4BEBBE6C0BED9B3B1
+ D8B2AEE2BAB8E6BFBBDEB5B2D7ADABDBB1AEEEC2BFEBBFBBEEC1BE977A792C22
+ 22D8A9A6DAABA82C2222000000000000130F0FDFABA9E9B5B1F0BBB7E1ABA8DA
+ A5A1DAA4A1000000000000906A68DA9F9BDFA29EE2A5A1DC9E9ADF9F9BE4A39E
+ E09D99E19D99E6A19BECA49EE19893E69B96F0A39EE79894E69792EC9C96F09F
+ 9AEA9A9495625E000000F4A69FF3A19A7E514D0000000000000000009C605AF8
+ 9D95FDA69CFEAAA1FFAA9FFF9A8EFF9F94FFE5D8FFBBADFFB3A5FFE4D4FFE9D7
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FFECDAFFE0CFFF
+ F0E2FFD7C9FFB5A8FF9B90FF8E83FFA79CFDBEB349302D482C29F78E86FB9088
+ 2E1A19000000000000000000F49A94F49E98F5A39DEDA19AE99E99EBA59EF0AC
+ A7EAAAA5E6A9A4E7ABA7EEB3AEECB2ADE4AAA6E4ACA8000000EDB5B1E5ADAA41
+ 3130000000000000000000E1ADAAE5B2AEECB8B5EBB7B4DFACAADFACA9E5B3B0
+ EDBBB9E5B4B2EAB9B7443736140F0FDFB0ADE0B2B04135340000000000000000
+ 00000000A88786DBB0AEDEB4B2E6BBBAE3B8B6DAB2AED7AEADE2B9B7E1B8B6D6
+ ACABD9B2AEE0B7B6E2BAB8D2ABA9D5ADABF2CBC9EDC6C4D4AEACD8B5B4ECC9C6
+ EAC6C5D5B2B0D4B2B1E4C2C1F0CFCDF0CFCDE7C6C4EFCECCE9C7C68572703D36
+ 35E7CAC7DCBFBE0000000000000000003E3737D5B8B7DCC1BFE1C4C3EACECDE2
+ C6C6D5BAB8D4B9B8D7BDBBDEC3C2D9BFBDD2B9B7D7BDBBDAC0BFD4BAB9DCC3C3
+ E5CDCCE2CACAE4CDCDE6CECDD6BFBFD4BEBDDBC4C3E1C9C7E9D1D0EBD4D4E9D2
+ D1E9D2D1D2BDBBD0BABAE1CACAF0DAD9ECD7D71210103D3737E4CFCEE7D2D22C
+ 2828000000000000000000958787ECD8D7D5C1C0D2BEBEDCCAC9E7D5D4DFCBCB
+ E5D0D0E6D1D0CEB9B9CFBAB9DFCAC9EBD6D6EBD7D6EBD6D5EDD9D8D2BFBECCB6
+ B5CDB7B6D0BAB9D5C0BFCDB7B6D1BDBBE6D1CFD2BEBDCBB5B4D2BFBEEAD5D4DC
+ C9C6C7B2B00000000000000000EBD8D7CFBDBBCEBABADAC6C6F0DCDBE1CDCCCE
+ BBB9CFBBBAF0DCDBDFCCCBCEBAB9D7C3C2E7D2D1ECD8D8E9D5D5D0BFBED4C0C0
+ D4C1C0D4C0C0CFBDBDE4D2D1EBD8D8ECD9D9D2C0BFD5C2C1EBD8D8D2C0BFD2BE
+ BEE3CFCFEBD7D7EAD5D6EAD5D6ECD7D6EED9D8EAD2D1E9D1D0E6CFCEE6CFCFD8
+ C0C0D0B8B7D5BBBAD1B9B8E3CAC7EDD4D1E1C7C6D4BAB98D7D7C141212141212
+ C7B0AEE9CFCED4B9B7B79F9F272222000000000000000000000000847272D2B7
+ B6D2B6B5D7BAB9EDD0CEEFD2D0D4B7B5D5B7B5E7CBC9EACCCBE1C3C2D0B3B2D4
+ B6B4E9CBC9DCBFBED1B3B1E3C4C3EBCCCAEECFCED2B2B09F86852B2524E5C4C2
+ CFADAC130F0F000000000000282221D2B1AEE2C0BFECCAC7E9C6C4D8B6B5A489
+ 88000000000000AD9392E3BFBBD8B4B2E0B9B8E5C0BEE7C1BFDEB7B6D8B2B0E7
+ C0BEE0B8B7DBB4B1D7AEABE4B9B6EEC2C0EBBFBBECC1BE2C2423755E5CD7A9A7
+ AB8886000000000000000000584342E9B6B2EBB7B4F2BDB9DEA9A5DCA6A3DEA7
+ A340302F000000453534DAA19BE5AAA6EAABA7DE9F9BE2A39EE4A49FE09E9AE0
+ 9D98E5A19BE6A19BE39B97F0A8A4F2A8A3F2A7A2E79A95EC9B96F09D98ED9892
+ 452B292D1C1AF5958EF79790482C2A0000000000000000009C645EF89890FD93
+ 89FE9186FF9B91FFB0A5FFC4B8FFDECFFFCBBDFFCDBEFFFFFFFFC9B6FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E1FFC7B8FFBF
+ B1FFE7D9FFCEC2FFA69BFF8D83FE8278492422482623F68880FB958C492C2B00
+ 00000000000000009D6E6AF7B2ABF9B5AEEEACA6EAA8A2F2B1ABF2B2ACEFB0AB
+ E6A8A4E6A9A4EFB2ACEEB2ADE4A8A4E6AAA6000000ECAEABEAACA941302F0000
+ 00000000000000E2A9A6E7AEABEAB2AEEBB4B1E2ABA8E0ABA8ECB6B4EDB8B5E7
+ B4B1443635141010C39997DEAEAB5C4948000000000000000000000000947876
+ E5BBB9DBB1B0EAC1BFEFC5C4ECC4C1DAB3B1D9B2B0EEC6C4E6BFBED6B0ADE2BB
+ B9E2BBB9F0CAC7D6B0ADD2ADAAF4CFCCF0CCCAD4B0ADDEBBBAF2CFCDF0D0CDD9
+ B7B6D4B3B2E7C7C5F0D0CEEFD0CEE7C7C5EACBC9D8BAB8857272413938EACDCB
+ E9CDCB000000000000000000423B3BD7BDBBE4C9C7EBCFCDEED4D2EED4D2E6CC
+ CAD5BBBADCC2C2EBD1D1DBC2C0D6BBB9E3C9C7E1C6C6D7BFBED9C2C1E0C7C6E2
+ CACAE7CFCEE7CFCED6BFBED2BBBBDFC7C6E4CDCBE9D0D0E6CFCEDFC9C7E6CFCE
+ D5BEBDD0BABADFC9C9EDD6D6E5D0CF3D37373D3737DEC9C6DAC4C4413C3C0000
+ 000000000000005A5251EDD9D8E7D2D2D4BFBFE1CDCCECD8D8ECD7D7EAD6D5EC
+ D7D7CFB9B9D0BDBBE4D1CFEAD5D5E5D1D0ECD7D8EDD9D9DFCBCACDB9B8CDB7B6
+ D1BBBAD2BEBDDCC6C6ECD6D5F2DCDBD5C0BECBB5B4E9D5D4EBD6D4F9E3E1CCB7
+ B50000000000000000F6E2E1D2C0BFCEBABAD7C4C3EFDBDAE7D4D2CEBAB9D0BD
+ BBEEDADADBC9C7CFBBBAD8C4C3E6D1D0E6D4D4E9D6D5D1C0BED5C2C1DECACAD8
+ C4C3CFBDBDE9D6D6E6D5D4EAD7D7D1BFBED4C1C0E6D2D2D2BFBFD4C0C0DFCBCA
+ E5D1D2E3CFCFDAC5C5E4D0CFE6D0D0DEC7C6E3CCCADEC6C5D5BFBDCFB7B7D2BA
+ B9DFC5C4D0B8B7D0B6B5E6CDCBE1C7C63D35350000005B5050E7CDCDE7CECDE7
+ CDCC9D8988131010000000000000000000000000594E4ED0B5B5DCC1BFDCC0BF
+ D2B6B4EACDCBEACDCBD1B4B3D2B5B4E3C5C4ECCECCE7CAC7D0B3B2D7B9B7EACB
+ CAD7B8B5D2B2B2EDCECDEECECCF7D6D4DBB9B86B5A59605252EECDCB9C838200
+ 00000000000000006E5D5BD2B1AEE6C4C3EECBCAE0BFBDD7B5B3DFBBB9141010
+ 000000423938E1BDBBD8B4B2E3BEBBE7C1C0E9C2C1E0B9B6D8B2B0ECC5C3E9C0
+ BFDBB4B1D7AEACE3B8B6EEC3C0E7BDB9B08D8B141010E4B8B5D7AAA72A222100
+ 0000000000000000BF9593EBB9B7E7B5B2E5B3B0D9A5A2EFB9B5EFB8B5715554
+ 00000015100FDAA19CEEB3AEEFB3AEEFB2ADF3B4B0F0B1ACE3A19DE19E9AEBA6
+ A2E49E99E49D99F0A9A5F3A9A5F3A8A3E99D98EA9B96F0A29BEE9C96442C2B46
+ 2C2BF49B94F79B942E1C1B000000000000000000DA736CF98178FC877EFF9085
+ FFA498FFB5A9FFB7AAFFB9ABFFCFC0FFF3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFE6D7FFBBACFFA193
+ FF978AFF968AFF9589FE988D9F6660160F0EF7ABA3FBB2A96547440000000000
+ 000000009C6E6AF6AEA8F8B0A9F4AAA4EA9E99F2A7A2F2A6A1EEA39DE79D99E6
+ 9D98EBA29DEDA5A1E49C98E69F9B000000EBA7A2E9A6A2422F2D000000000000
+ 000000E2A8A5E7AEABEAB3B0EBB5B2E2AEABE2B0ACEAB7B5B28C8A14100F1410
+ 10CFA6A4C39C994033320000000000000000000000008D7271E5BEBBE2BBB9DB
+ B4B2EBC4C2F0C9C6EEC7C5DBB6B4D8B3B2EFC9C6E9C3C1D6B2B0E2BEBBE6C3C1
+ ECC9C5D5B2B0D4AEACEFCBC9EDC9C6D4B1AED8B7B5F0CFCDF2D0CED9B9B7D4B4
+ B2DEBEBDEECDCDE7C9C6E2C2C0E1C3C1D4B6B5867372413938ECCFCEE2C4C300
+ 0000000000000000433C3BD7BBBADBC1C0E3C7C6EFD5D4EFD5D4EBCFCFD9C0BF
+ D7BDBBE4CACAD7BEBDDCC3C2E3CBC9E6CECDD8C0C0D8C1C0E5CDCCE4CDCCE7D1
+ D0E6CECED5BEBDD1BAB8E0C7C6E5CDCBE7D0CFE9D2D1DCC5C5D8C3C2D2BEBBD1
+ BDBDDEC7C7ECD6D6E6D1D03D3838000000E5D1D0DBC5C5595151000000000000
+ 000000403B3AEED9D9EBD6D6D2BFBFDAC5C4E6D2D2E2CDCBE2CDCBE9D4D2CFBA
+ B9CFBDBBE2CECEE5D1CFD8C4C4E6D1D0EDD9D8E0CCCBCDB7B6CDB7B6D0BAB9D1
+ BDBBDBC6C6DFCBC9F0DBDAD1BDBBCBB5B4DFCBCAE2CDCCF6E0DFCAB4B3000000
+ 0000000000F3E0E0D0BEBDCEBABADFCCCBF3E0E0EAD6D5CFBBBAD1BEBDF2DFDE
+ DAC6C6D0BEBDDBC7C6E9D6D5E7D5D5DECBCBD1BFBFD4C0C0E1CCCCD8C4C3CFBD
+ BDD9C7C6E7D6D5DCC9C9D1BFBED2C1BFEAD6D7D8C5C4D4C1C1D8C4C3E2CDCDD4
+ C1C1D2BFBED2BFBEE1CACADAC3C3DCC5C4D6BFBED0BAB9CFB8B7D6BEBDE0C7C5
+ D2BAB8CEB5B4A18E8D13101012100FA49190D1B6B6D2B8B7E0C5C46C5E5D0000
+ 00000000000000000000000000413A3AD0B4B3D0B4B3E5C9C7D9BDBAD0B4B3DB
+ BEBDE3C5C4D0B4B2D0B4B2E2C4C3F0D2D0E6C7C6D0B3B1E0C0BEE9CAC9D2B4B3
+ D1B2B0E6C7C5E9C7C5EACAC7D1B0AD262020AB9291E5C3C26B5A590000000000
+ 00000000B99B99D2B0ADE7C5C3ECCAC7D6B3B2D7B4B2E4C1BF76646300000000
+ 0000C1A29FD8B4B2D9B4B2DBB6B4E1B9B7D8B2B0D8B2AEE9C1BFE6BEBBD9B0AD
+ D7ADABE2B7B5EEC3C0E2B6B42C23237B6361DEB0ADA17F7D0000000000000000
+ 00594544D9A9A6F2BFBDE4B2AED9A7A4D9A6A3F2BBB7F2BBB7BF908C00000000
+ 0000A67B78DFA6A2ECB2ADEEB4B0F0B5B0EBAEA9E0A29CE3A49FEBA9A4E2A19B
+ E3A19CECA8A4EDA8A3EAA49EE79F9AE79E98EDA19AEC9D9800000098635FEE98
+ 92EF9690000000000000000000000000FB9389F98E85FC8D83FF8C82FF9186FF
+ 978BFF9C90FFA396FFB6A7FFDFCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFCFFEEDAFFEDDBFFECDBFFEDDEFFECDFFFDFD1FF
+ CDC1FFBDB2FFB2A7A16E68000000F7988EF6948B9E5E59000000000000000000
+ 452926EE8C86F59791EC928CEA948EEE9B96F2A39DEB9F9AE69D99E69F9AEDA8
+ A4ECA8A4E4A49FE5A6A2000000ECB0ABE5AAA741313000000000000000000014
+ 0F0F4233324335344235344134334134340000000000000000007B6362443837
+ 0000000000000000000000001410108B7270E0B7B5E5BFBDDFB7B6DBB5B3E1BB
+ B8EDC6C4EEC7C6D9B4B3D7B2B1EAC4C2ECC6C4D6B2B0D9B5B3E6C3C1E5C1BFD6
+ B3B1D6B3B1E1BEBBDCB8B6D4B0ADD7B6B4E7C6C5EBCCCAD5B4B2D4B3B2DCBEBB
+ EFCFCDE7C9C6EDCDCBE4C5C3D2B5B4857272413939EFD2D0DABEBD0000000000
+ 00000000413939D4B8B7D8BDBBD5B9B7D1B6B5E5CBCADCC1C0DBC1C1D5BBBAD6
+ BEBDD6BDBBE4CBCAE6CECDDEC5C5D6BFBEDBC3C3E2CBCBD6BFBED9C2C1DEC5C4
+ D0B8B8D0B8B7DAC1C1DEC5C3EBD2D1ECD4D4E7D1D0E2CBCBD4BEBED4BFBEDBC6
+ C5EDD7D7E7D4D23D3737000000E1CCCCD8C3C3877A7A0000000000000000003D
+ 3737EAD5D4D8C2C2D1BDBDD4C0BFD4BFBFCFBAB9D4BEBEDAC5C4CFBAB9CFBABA
+ E6D1D0EAD6D5E9D4D4EAD6D5EBD7D6D5C1C0CDB7B6D0BAB9E0CBC9CDB8B6CCB7
+ B5D1BDBBE7D2D1DEC9C7CBB5B4D2BFBED9C3C2D9C3C2C7B3B100000000000000
+ 00DCCACACEBABACEBABAE5D1D0F4E1E1D4C0C0D0BEBDD0BEBDE5D1D1D1BFBED0
+ BFBED7C4C4EBD9D8E1CFCFD4C1C1D2C0C0D4C1C1EBD7D7E6D2D2D4C0C0D1BFBF
+ D5C3C3D4C0C0D1BFBED4C1C0EDD9D9EAD5D6D7C4C3D4C0C0D4C0C0D2BFBED2BF
+ BED6C1C2E3CDCDE6D0CFE6CECEDAC3C2D0BAB9CFB8B8DEC5C4E3C9C7D7BEBD54
+ 49490000003D3636D0B6B4D0B6B4CDB4B1B79E9E282222000000000000000000
+ 0000000000003D3535D6BBB9D0B4B3D4B8B6EDD1CFD9BDBBD0B4B3DBBEBDE4C6
+ C4D0B4B2D0B3B2DCBFBEDCBFBED2B4B3D0B3B1EACBC9ECCDCCD1B4B3D1B2B1E6
+ C6C5EBCAC7E2C1BFD2B1B0000000DCBAB8E1C0BE262020000000000000130F0F
+ D0ADABD4B0ADE6C3C2DEBAB9D6B3B1D7B3B2E5C2C1E4C1BE0000000000007663
+ 62DFB8B7D8B3B1D9B3B1DAB3B1D8B1AED8B1AEE7BFBDE4BBB8D8B0ACD7ACAAE2
+ B6B5ECC0BDC59D9C000000E4B6B3E4B5B2584544000000000000000000BF9491
+ D9A8A5E6B5B1E0ACA9DAA7A4DBA6A3F0BAB6F2BBB8DBA4A12A1F1E0000007355
+ 53DB9F9BDFA39EE5A7A3E6A7A3DF9F9ADF9E9AEBA8A4E4A19CE29E99E39F9BED
+ A8A3EFA9A4ECA59FE79E99E99E99EEA39CEEA29B000000966460ED9B95EF9C96
+ 000000000000000000000000FBA198F99D95FC9D93FF9C92FFA498FFADA1FFB7
+ AAFFC2B4FFCEBFFFDFCEFFF5E2FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFBE7FFCDBDFFAC9DFF9587FF9285FF9083FF8D
+ 82FF8B81A15D57000000F79A92F69E969D686400000000000000000045312FED
+ A8A2F3ADA7EBA7A1EAA8A2F0B0AAF4B3AEEAABA6E7AAA5E7AAA6EDB2ADE7ADA9
+ E5ABA7E6AEA9000000ECB4B1E3ACA84132310000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000005A4948C19E9CDEB5B3E5BEBBE4BDB9DBB4B2DAB4B1DAB5B2DEB8B6
+ DCB7B5D8B3B2D7B2B0DEB8B6EEC7C6E3BEBBD6B2B0D7B3B2D7B3B1D7B3B1E0BD
+ BAEDCBC9D5B3B1D4B0ADDAB8B6EDCCCADFBFBDD4B3B2D4B3B2E3C3C1F4D4D1ED
+ CDCBF3D2D0EDCECDD2B5B4857272423A3AEFD2D1D9BBBA000000000000000000
+ 413A39D4B9B8D5B9B7D2B6B6D2B8B6DCC2C1DABFBFDFC4C4D6BBBAD4BBBAD6BD
+ BBEAD0CFEDD4D4E3CBCAD5BBBBD6BEBED7BFBED4BDBBE1C9C7E0C7C6D2BAB9D2
+ BAB9E0C7C6E0C7C6ECD4D2EDD4D5EDD4D5D7C0C0D4BEBED4BFBED5C0BFD8C3C3
+ D6C1C0857878000000D5BEBED4BFBE8679790000000000000000003D3737E3CE
+ CEE2CCCBCFB9B8D0BBBAD0BABACFB9B9D4BFBFD4BFBFCFBAB9CFBBBADFCACAE7
+ D2D2E7D2D1E7D4D2EAD6D5D4C0BFCDB7B6CEB9B8DFC9C7CCB6B5CBB5B4CCB7B6
+ EBD6D4EED9D8D4BFBDCCB8B6D1BDBBD0BDBBCAB7B60000000000000000DFCBCB
+ D7C3C3D6C3C2E6D4D2F0DEDCE6D4D2D9C6C5E7D6D4F0DEDCE1CDCDD7C4C4DAC9
+ C9E6D5D4E3D0D0E2D0CFDCCACADBCACAE6D4D2ECD9D8E4D1D0DAC7C7D8C5C5DB
+ C9C7D9C6C5DAC7C6EBD8D7EBD6D6DFCBCBDAC5C5DCCACAE0CDCCE0CBCCE3CECD
+ DFC9C7E4CECDE5CECEE2CBC9D6C0BFDEC5C4E4CDCBC7B1B0131111131010907F
+ 7FE6CDCCDAC0BFDAC0BF71636200000000000000000000000000000000000076
+ 6867E7CCCBE7CCCAE7CBC9EDD0CFEED1D0D9BDBBD6B9B7E1C4C3E9CBCADFC1C0
+ E4C6C4EACCCAE4C5C3DBBDBAD6B8B6EACBCAECCDCBD1B3B2D2B2B1E7C7C5EAC9
+ C6DEBDBD8772713D3332E1C0BEEAC7C6000000000000000000615252E0BBB9E3
+ BFBDEFCCCAECC9C6DCBAB8E6C3C1EBC6C5E9C4C35C4D4D000000141111EAC3C1
+ E3BDBBE0B9B6E3BBB9E6BFBDE9C0BEE9C0BEE6BEBBE6BBB9E4B8B5EEC1BFF0C3
+ C15F4D4B604E4CF8C7C4DAAEAC0000000000000000002A2020ECBAB7ECB8B6ED
+ BAB7ECB8B5E3B0ABEBB6B2F2B9B7F4BDB9E1A9A66149480000002B1F1FE4A8A4
+ E6A8A4EBABA7EEAEAAEAA7A3E9A6A2EEA9A4EDA8A3E39D98E59E9AF2A9A5F3A8
+ A3F4A7A2EA9C97E99994EC9B96F29F9900000097605CEE958EF6999300000000
+ 0000000000000000FC9187FC8D84FE8C82FF897FFF9287FF9C91FFA89BFFB6A8
+ FFC5B7FFD8C7FFEEDCFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBECFFE7D9FFD6C9FFC6BAFFB9AEFFAEA4
+ A16E68000000F9A9A1F8AAA29E6C6700000000000000000046312FF2A9A3F7AE
+ A9F4AEA9F0ACA6F3AEA9F2B0AAEDACA8EDADA8EFB1ACF0B3AEF0B5B1EAAEAAEB
+ B1AB000000ECB4B0E9B1AC4233320000000000000000005F4A49947371937371
+ 9373719172709273729476744337362B22220000000000000000000000000000
+ 00413535735E5DCAA6A5E7BFBDE6BFBDDFB7B5DFB7B5E1BAB8E3BDBAE3BEBBE1
+ BBB9E0BAB8E4BEBDECC6C4F2CCCAEBC6C4EAC6C3F2CDCBEFCCC9F2CECBF5D1D0
+ EBC9C5E4C2C0EBC9C6ECCAC7EBCAC7E7C6C4E5C4C2EFCFCDF4D2D1EACAC9F3D2
+ D0EFD1D0D5B7B6877474443C3CEDD1D1E0C4C3000000000000000000443D3DDE
+ C3C2D9BEBEE0C4C3E9CECCE7CCCADBC0BFDFC4C3D5BABAD2B9B8D6BDBAEAD1CF
+ ECD1D2E7CFCDE0C6C5DCC2C2E1C7C6E6CECDECD2D4E7CFCEE0C7C6E7CFCDE9D1
+ D1E5CDCDE7D0CFECD4D4ECD4D4E4CDCDE3CDCDE4CECEDFCACAE5CFCFE6D2D289
+ 7C7C000000E4CFCED9C3C39183830000000000000000003E3838E9D4D2F0DAD9
+ E7D1D0E5D0CEE4CFCEE4CFCEE2CCCCE7D2D1E0CBCAD9C5C5E3CFCEEAD5D4E6D1
+ D0E2CDCDEAD6D5EBD7D6E3CECDDFCAC7EFD9D8E3CECDD5C0BFD7C1C0E7D2D1E7
+ D4D2E3CFCED4C1C0D4C2C0DCCAC9DCC9C70000000000000000E1CCCCDCC7C7D5
+ C2C1E3D0CFF0DFDEF2DFDEECD9D8F0DCDCF0DEDCEFDEDEE7D6D6E4D1D1E7D5D5
+ EBD9D8EBD9D8E9D6D6E2CFCFE7D5D4EBD8D7ECD8D8EAD6D7D8C5C5E9D5D6E6D2
+ D2E2CFCEEAD6D6E9D5D6E3CFCFE1CDCCE5D2D1E4D1D0E7D4D2E5CFCFDEC7C6E4
+ CECDE5CECEE1CAC9D7C1C0E4CCCC928382000000403A39C3ADACE6CDCCEACFCE
+ CFB8B62C2726000000000000000000000000000000141111B09B9AE7CCCAEACF
+ CDE3C7C5F0D4D2F3D7D5F0D5D2E4C6C4E1C4C3EACECCE5C7C5E3C5C4EBCDCCEF
+ D1CFF0D2D0EECFCFE4C4C3ECCCCBF0D1CFD7B8B8D1B1B0E1C1BFE0BFBDE1C1BF
+ 3D3332846F6EDEBBB9887271000000000000000000937D7BE2BEBBEECAC7F0CD
+ CCEECBCAEAC6C5ECC7C6ECC7C5EAC5C4B09493000000000000947D7CEAC3C1EB
+ C4C2E4BEBAECC3C2ECC3C1E9C0BEE0B6B4E3B9B6ECC0BEEBBEBBD4ADA9000000
+ D1A8A6F0C1BE64514F000000000000000000AB8685F2C0BDF4C0BDF0BDBAF3BE
+ BAEEB8B6EAB4B1EBB4B1F4BAB8EBB2AEB78B88000000000000F4B5B2F4B4B1EE
+ ADA9F0AEAAF0ADA8F2ADA9EFA9A4EFA8A4E59D99E49B97EEA39EF2A49FF2A29C
+ E99893EA9691EF9993F49B95000000985C58EE8B85F8918A0000000000000000
+ 00000000FC7C74FC766DFD7067FF6A61FF7267FF7E71FF8A7EFF998BFFAD9EFF
+ C5B5FFE7D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF9ECFFEADCFFD2C6FFC1B6A1756E00
+ 0000FCAEA6FBACA49E6C6700000000000000000047312FF4A79FF6A9A3F6ABA5
+ F6ACA6F3A9A4F0A9A4EDA7A2F0ABA6EEAAA6EDABA7F2B1ACEFB0ABEBACA90000
+ 00EEB2ADEBB1AD433332000000000000000000EAB3B0E9B4B2E6B3B0E7B4B2E4
+ B3B0E5B5B2E6B7B5E9B9B7E5B8B6CAA19F7961601410105F4D4C7A6362141110
+ 0000000000005F4E4DCEAAA8EBC3C0EBC3C1EBC3C1EDC5C4EDC6C4E6C0BEE9C2
+ C0E9C2C0EEC7C5F0CBC7F2CDCAEFCBC9F4CFCDECC7C5EAC6C4EFCCCAE9C6C4E9
+ C5C4ECCAC7EFCDCBEBCAC9EECDCBEECCCBEECDCBF0CFCDDFBEBDF0D1CFF0D2D0
+ DBBEBD877474453D3CEFD2D1E9CCCC000000000000000000453D3DE9CDCDE4C9
+ C7EDD0D0F0D5D2F0D4D2E6CBCADAC0BFD5BAB9D2B8B7DAC1C0E5CCCBE7CECCE3
+ CBCAE2C9C6E0C6C5E7CDCDEBD2D1EDD5D2E4CCCCE3CBCBE7D0CFE7CFCFE4CCCC
+ DFC7C6E1CACBE2CCCCE6CFCFE6D0CFE9D4D2E1CBCBEAD4D5ECD8D79587870000
+ 00EAD4D2E4CFCD948785000000000000000000433D3DEAD4D4EED8D6F2DAD9EF
+ D9D8ECD6D6ECD6D7E6D2D1EAD5D4E9D4D4E3D0CEE5D0CFEAD5D5EBD7D6E9D5D4
+ E9D5D4EED9D9F0DBDAE4CECDE9D4D2E5D0CEE0CBCADFCBC9E1CDCCE6D2D1E9D6
+ D5DCCAC9E0CCCCE6D4D2F0DBDA0000000000000000EAD6D4EBD6D5E6D1D1E3D0
+ CFEFDCDBF0DEDCF0DEDCF0DEDCEFDEDCEFDCDCE9D7D8E4D1D1E5D2D2EAD8D8EA
+ D8D8E9D7D8E9D5D5E6D4D2E6D2D2ECD9D9ECD9D9E3D0D0E9D5D6ECD8D8E9D5D5
+ EAD8D7EBD6D6E6D4D2E7D4D4E9D5D5E4D0D0E4CFCFE3CDCCDBC4C4E3CCCBE5CE
+ CEE3CBCBE1CAC7423C3C000000928281D8BFBEE1C9C7E6CDCC93838200000000
+ 00000000000000000000000000003E3737C7B0AEE4CAC7ECCFCEEED1CFEBCECD
+ ECCFCCF3D7D5F2D6D4EBCECDEED0CFEDCFCEECCFCDEFD1D0EED0CFEFD1CFF0D2
+ D0F0D0CFECCECCEECFCEF0D1CFE4C5C3D0B0AED2B2B0E2C1C0D5B5B3120F0FC3
+ A6A5EDCBC9453C3B000000000000000000E7C4C2DAB6B4E4C0BEEFCAC7E7C4C2
+ DFBBB9E9C5C3ECC7C5E9C3C2E7C3C02B24230000002C2424E7C1BFEBC3C1E3BB
+ B9EAC1BFE5BBBAE5BDB9E0B6B3E1B5B3E7BAB7EBBEBB7E66655F4D4BF2C2BFF5
+ C5C20000000000000000002C2222E1B0ACECB9B5EEB9B7EBB6B3ECB5B3EAB3B0
+ E7B0ACE9B0ACEDB2B0E3A9A6EEB2AD000000000000986F6CF2B0ABF2ADA9EEA9
+ A5EFA9A4EBA39EE59C97ECA29CEC9F9BE49692E69793EA9994E99691E9938DEF
+ 9792F59A96F69A950000009C5F5BEE8C86F7938C000000000000000000000000
+ F99188FB958BFD9C92FFA79DFFBEB3FFD0C4FFCCBFFFC7BAFFC2B3FFCDBDFFE0
+ CEFFF4E0FFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFEFFF9ECFFE4D8FFD0C5FFC1B6A17670000000FBB4
+ ABF9B4AC9E736E000000000000000000473633F5B7B1F6B9B3F6BAB5F6BBB6F3
+ B9B4F2B8B2EDB3ADF2B7B3F2B8B3F2B7B3F4B8B4F2B7B3ECB4B0000000EEB6B2
+ EBB5B1433433000000000000000000EAB5B2E9B5B3E7B5B2E7B6B3E7B6B4E7B8
+ B5E6B7B5E9BAB7EABBB9EABBB9ECBEBBEEC1BF453838141110CEA8A75F4E4D00
+ 0000000000000000967C7AEBC3C0EAC1C0EDC5C4EFC7C4EEC6C3EFC6C5EEC7C4
+ ECC5C3ECC5C2F0CAC7ECC5C3EFCAC7DEB9B7E7C2C0F0CCCAEECAC9F0CDCBE5C2
+ C0F0CECCEFCECCEFCDCCEFCDCBEECCCAEECDCCE0C0BFEACBCAEED0CFE5C7C687
+ 74743E3636EBCECDDEC1C0000000000000000000433C3CE3C7C6E7CCCBEFD4D2
+ F0D6D4F0D4D2E9CDCCD7BDBAD2B8B6D4BAB8EACFCDEDD2D1EED5D4EDD4D1E9CF
+ CEE9CFCEEAD1D0ECD2D2ECD4D2E1CACAE7CECEE4CCCBDEC6C5E0C9C7E7CFCFE1
+ CBCBDEC9C7E1CCCCE9D4D2EAD4D5E7D2D1EDD6D6EDD7D77B6F6E000000EFD9D8
+ ECD7D6968989000000000000000000453F3FEED8D7E6CFCFE6D0CFEFD9D8EBD5
+ D4E0CBC9E2CBCAEAD4D2E6D1D0DAC6C4D9C5C4DFCAC9E7D2D1E4D0CFE0CBCAE6
+ D2D1E9D4D2E4CDCCE6D0CFE9D4D2E6D1D0EAD6D5ECD8D7EFDBDAF0DCDBEFDBDB
+ EBD8D7F4E0E0F8E3E20000000000000000EBD5D4F0DBDAE7D4D2DFCCCBE9D7D6
+ E7D5D4EFDCDCEDDCDBECDADAECD9D9E7D6D5E3D0D0E9D6D6ECD9D9ECD9D9EBD9
+ D7EBD8D7E9D5D5E6D2D2EAD7D7EAD6D7E6D4D2E2D0CFEAD7D6E5D1D2E9D6D6EA
+ D5D6E3CFCFE6D4D2E3CFCFE5D1D1E4CFCEDEC7C6D5BEBDE0C9C7E5CECEC7B3B2
+ 292424141111CAB4B3E5CDCBD8BFBDC0AAA9413A3A0000000000000000000000
+ 00000000141212907F7FDCC2C0ECD0CEEED1D1EDD0CEF0D5D4E5CAC7E5C9C6EE
+ D0CFEFD4D1ECCECDEACDCCEACDCBE6CAC7EBCECCEACCCAE6C9C6E9CBC9E2C3C2
+ E0C1BFE7C9C7EFD0CEEBCBCADAB9B8CFB0ADD1B1B09D8684272121EECCCBEAC9
+ C6141111000000000000463C3BE5C1BFD5B1AEDEB8B5EBC5C3E4BFBED9B5B3E9
+ C3C1EAC4C2EBC5C4E4BEBD786362000000000000CAA7A6E6BFBBE7BFBDEAC1BF
+ E5BBB8E9BEBBEDC0BEEFC1BFECBEBBF2C4C0151111B4908DEEBEBA7F65640000
+ 00000000000000997978EDB9B7ECB8B6E7B2AEE9B3B1EEB7B4EEB6B4EEB6B3EF
+ B5B2ECB2AEECB1ADEFB3B0453432000000443130EDACA9EBA8A4EAA6A2EBA6A3
+ EAA5A1E7A19CEBA39EEDA5A1E59D98E59B96E69C97E79A96EB9C97F4A5A1F6A6
+ A1F6A7A1150F0E805854F0A49DF6ABA5000000000000000000000000FB9B93FB
+ 9187FE887FFF857BFF897EFF9286FF9A8DFFA395FFB1A2FFD1C2FFEEDCFFFEEB
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBEFF
+ E1D1FFEFE0FFE4D6FFD9CCFFD2C6FFCDC1FFC9BEA17E78000000FBC0B7FBBFB7
+ 9F7973000000000000000000634845F0AEA8F2B1AAF3B1ABF4B3ADF3B3ADF3B4
+ AEF0B4AEEEB3ADEFB5B1EFB6B1F3BAB6EFB8B4EBB4B1000000EDB9B6EBB8B444
+ 3534000000000000000000EBBBB8EBBBB7E7B9B5E4B6B4E6B8B5E5B8B6E6BAB7
+ E9BDBAEABFBBE9BEBBEABFBDEDC2C1EBC1BF947978141111CDAAA8957B7A0000
+ 00000000000000917676E1BAB7E3BDB9EAC3C1EBC4C1E9C3C0ECC6C4EAC3C1E7
+ C2BFE1BBB9EAC4C1F2CCCAE4BFBDE9C4C3F4D0CEF0CDCBF3CFCDE5C2C0EECBCA
+ EECDCBEFCFCDF3D1CFEECCCBEBCACADEBFBEEACBCAECCDCDE4C7C68A79783E36
+ 36D7BAB9D6B9B8000000000000000000453D3DE2C6C5E4C9C7EFD2D2F0D6D5EE
+ D2D1E2C6C5D4B8B7D2B7B6DEC3C2F0D6D4EDD1D1EED5D4EED5D4E3CACAE9CFCE
+ E5CCCCE6CCCCE7CFCFE1C9C9E9D0D0EAD1D1E7CFCEE9D1D0EAD2D4EAD4D4E9D2
+ D2EAD4D4ECD6D5EBD4D5EAD4D5E9D2D2ECD6D5443D3D141313EED7D7E4CECD7C
+ 7070000000000000000000463F3FF2DCDBEED7D7E6CFCEEFD9D8EFDAD9E2CDCC
+ E4CFCFEAD5D4E6D1D0E6D1D1E1CDCCE1CCCBE6D1D0E1CDCCE6D2D1ECD7D6F0DA
+ D9EDD7D7ECD6D5EED8D8EAD6D6EDD8D8EEDAD9F0DBDBF0DBDBEFDCDBECD8D7F6
+ E2E1F7E2E10000000000000000EBD5D4EEDAD9E6D1D0E6D1D0E4D0CFDCCAC9E5
+ D4D2EDDADAEDDBDBECDADAE7D5D5E0CDCDE9D7D7EDDBDAEBD9D7E9D7D6EAD6D7
+ E9D5D4E6D4D2E1CECEE3D1D0E2D0D0DAC6C6E2CFCEDCC9C9E5D1D1E1CECCDAC7
+ C7DBC9C7DAC7C7E4D0CFE7D2D2E1CAC9DAC3C2DFC7C7C5B0B0131111131010BB
+ A6A6D9C1BFE0C6C58D7D7C141111000000000000000000000000000000413A3A
+ C5AEADDBC1C0D9BEBDDABEBDE2C6C5E4C9C6EACECCDABEBBDEC0BFEACDCBEACD
+ CBE0C3C1D8BBB9D9BBB9D6B8B7DBBFBDE3C4C3EACACAE5C7C5DBBBB9D6B8B6E4
+ C4C3EDCECCECCCCAEFCFCDEAC9C6E1C0BE6E5D5D5C4E4DEDCAC9B09593000000
+ 0000000000007E6B6AF2CDCBE6C1BFEEC7C5F4CDCBF2CBC9E2BDBAE7C1BFE9C2
+ C1E1BDBAE5BFBEEBC4C10000000000005E4E4DE1B8B6E6BDBAEFC4C3E9BEBBE9
+ BBB8EFC2BEF0C3C0F0C2C17E65642D2524F0C0BDE6B5B3151111000000000000
+ 140F0FEEBDBAF0BEBBF0BEBBEDB9B7EBB8B5EDB8B5ECB7B5EEB7B4EFB7B5EEB6
+ B3EEB5B2EFB5B298716F000000150F0FF0B3AEECADAAEFB1ACF0B1ACEEADAAEA
+ A9A5EFB0ABF2B1ABEDADA8F0B0ABEFB0AAE9AAA6F0B3ADF5B5B0F7B4AEF7AEA9
+ 47312F47302EF69F98F89B94482C2A000000000000000000DB7B73FB867DFC82
+ 79FE7F74FF857BFF978CFFAA9EFFB1A3FFC5B7FFFDEDFFF2E1FFFFFDFFFFF8FF
+ FFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE5FFFFFFFFFFFFFFFFF6FFE3D4FFEF
+ E1FFB3A5FF968AFFA297FFAEA4FEADA4664643160F0FFBB4ABFBB6AE654B4800
+ 00000000000000009D7872F5B8B2F3B7B1F2B6B1F3B7B2EEB3ADF0B5B0EEB4AE
+ EEB3AEEEB5B1F0B6B2F0B6B2EFB7B2EBB2AE000000EDB7B3E9B4B04335340000
+ 00000000000000ECBAB7EABAB6E5B7B3E5B7B4E6B9B6E5B9B6E5B9B6E3B8B6E7
+ BEBAE7BFBDE6BFBBECC2C0EBC3C1E9C1BF5F4F4E2C2424EBC4C27B6665000000
+ 000000000000947D7BE3BDBAE5BFBDEAC5C3EAC5C3EEC9C7EFCBC9EFCBC9EBC7
+ C5F2CECCF8D2D0E7C3C1F5D1CFEFCDCBE4C2BFEECBC9E7C5C3EBCAC6EECDCCF0
+ CFCDEFCECDEECDCCEECDCDE1C3C1E5C6C5E5C7C6E1C4C3927F7F413A3AE3C6C5
+ E3C7C6000000000000000000453D3DEACDCDECCFCFEFD4D2F0D4D2EED2D1EACE
+ CDDFC3C3DBC0BFEFD5D4F0D5D4E9CECDEED4D2EED5D4E7CECDEBD2D1E2C9C7E2
+ C9C7E4CCCBDAC2C1E1C9C9E7D1D0E6CECEE7CFCEE9D1D1EAD4D4EAD4D4E9D4D2
+ EBD4D4E3CECEDFCAC9DFC9C9E2CDCC443D3D453E3EE9D2D2D8C1C2453E3E0000
+ 00000000000000433D3DEED9D8EBD5D4D8C1C0EDD7D7F3DCDBE7D2D1E7D2D0EB
+ D6D5E5D0CFE5D0CFE5D0CFEAD5D4EAD5D4E5D0D0E9D5D4E9D4D2EED7D7E7D1D0
+ E9D2D1E4D0CFDBC7C6DECAC9E3CFCEE2CECDE7D5D4EDD9D9DCC9C9F4E0E0F8E3
+ E20000000000000000EDD8D6EED9D8E6D2D1F0DBDAEFDBDAE7D5D4EDD9D9F2DE
+ DCEFDCDBEDDCDBE6D4D4DAC7C7E4D1D1EEDBDBECD8D8EBD8D7EDDAD9ECD9D8EC
+ D9D9E9D6D7E9D6D7EAD6D7E5D1D1E7D5D4E7D5D4EAD6D6EAD6D6E9D5D5E3CFCE
+ DAC5C5E3CFCEE7D2D1E4CDCCD6BFBFE4CDCD141212413B3AE4CDCCDCC4C3D8C0
+ BE594E4E000000000000000000000000000000131111907F7EE7CDCCDEC3C1DE
+ C3C1D7BBBADBC0BDE6CBC9EFD2D1F3D7D4E9CCCBEACDCBEDD0CEEED1D0E7CBCA
+ E6CAC7EACCCBD9BAB9DBBFBDE3C4C3ECCDCBEDCECDE6C7C5DABAB8E9C9C7E9C7
+ C7E6C7C4EDCDCBEDCDCBEDCCCB2C2524B19896EECCCB78656400000000000000
+ 0000DAB8B7F6D0CEEEC7C5EBC4C2F4CECCEEC7C5E1BBB9EEC7C5F0CBC9E0B9B7
+ E1BAB8E2BBB9625251000000141111EBC2BFE6BBB9F5CBC7EBBFBDF2C5C2F0C3
+ C1F7C9C6F9CBC72D2525BB9996EFC1BF7C64620000000000000000007A605FED
+ BEBAECBBB8EDBDB9E6B4B2E9B7B4EAB6B4E3B1ADEAB6B3EBB6B4EAB5B2EDB7B3
+ EEB7B4CD9C99000000000000D2A29EECB6B2EFB9B5F0B8B5ECB4B0EBB2ADF2B7
+ B2F3B6B2EFB0ABF3B1ACF3ADA9EDA59FF4A8A3F6A6A1F7A69FF7A49D472E2C2D
+ 1D1CF69A94F79891482C2A0000000000000000009F5A54FB9086FC9389FF9085
+ FF8B81FFA296FFC4B8FFBFB2FFC3B5FFDCCEFFCEBEFFCFBEFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D4FFC4B3FFFFFFFFE4D6FFF3E4FFC1B4
+ FFB1A5FFB9ADFF9B91FE857B492825492C29FBA59BF9A9A248312F0000000000
+ 00000000BA8782F5B5AEF6B7B2F5B8B3F6BAB5EDB3ADF2B7B2F2B7B3F0B8B4ED
+ B6B2F0B9B4F2BBB7EFBAB6EDB9B5000000EEB9B6EBB8B4443534000000000000
+ 000000EBB8B5ECBAB7EAB9B6E9B8B5E7B9B5E9BAB8EABDBAE7BBB9E9BEBAEABF
+ BBEAC0BDEBC1BEEBC1BFE3BBB9E5BEBB141010766261ECC4C32C242400000000
+ 0000000000CDABA9E9C3C0EBC6C4EBC6C4EFCCC9F0CDCBF2CECBF2D0CDF5D1CF
+ F4D1CFE7C4C2F4D1CFECCAC7DFBDBBE7C6C4E7C7C5EBC9C6E9C9C6EBCAC7E1C1
+ C0E7CAC7E9CAC7DEBFBEEACBCAEACDCBEACDCC948181433B3BE9CECDEACFCE00
+ 0000000000000000453D3DE9CDCCECCFCEF2D5D4F0D5D4EED4D1EBCFCFE7CCCB
+ EBD0CFF2D7D6F0D5D5E4C9C9EAD0D0EED5D4EDD4D2EDD5D4ECD2D1E2C9C9E5CD
+ CCE1CAC9DCC4C4DFC7C7E4CDCCE5CDCDE1CACAE7D1D1E7D1D1E7D1D1EBD5D4EA
+ D4D5ECD6D7E7D2D1E9D4D22C2828453E3EF0D9D9E3CDCD453F3E000000000000
+ 000000938585EAD5D4EED8D7DBC6C4EDD7D7F3DCDBEBD5D5ECD6D7ECD6D6E6D2
+ D1E4CFCEE4CFCEE6D1D0E5D0D0E2CECCE2CDCCD7C1C0D6C1BFDAC5C4E1CCCCDC
+ C9C7D5C2C1D9C5C4DFCCCBDBC7C7E2CECDE6D2D2DAC6C6F4E0DFF9E5E4000000
+ 0000000000F0D9D8ECD7D5EFDAD9F0DBDBEEDBDAE7D4D2E7D4D2EFDBDBE6D4D2
+ ECD9D9EAD8D8E1CECEE3D0D0EDDBDAEEDBDBEDD9D9EEDAD9ECD9D8ECD8D8E9D6
+ D6EAD7D7EDDBD9ECD8D8EAD6D6EBD7D7ECD8D9EBD7D7E9D5D5E4D1D0DAC6C6E2
+ CDCDE7D1D0E5CECED5BEBD413B3B2A2525DEC6C5E6CFCEC9B3B22A2524000000
+ 0000000000000000000000005A504FC1AAA9E6CCCBEAD0CEE9CECDEFD5D4EDD1
+ D0EED4D1F3D7D6F5D7D6F3D6D4D6BAB9E3C5C3EFD2D1EFD4D1EFD1D0EDCFCEEE
+ CFCFE7CAC7E4C5C4DEBFBEE6C9C6EBCCCAE6C7C5DEBFBEEDCDCCECCBC9E5C4C2
+ E7C6C4E1C0BFEBCAC7000000EAC9C6EECBCA282222000000000000292222F4CF
+ CDF0CCCAE2BEBAD6B1AEDBB5B3E4BFBDD8B3B1F2CCC9F5CFCDF4CECCECC5C2DA
+ B4B2B59896000000000000967C7BEBC1BEF6CCC9E7BDBAEDC2BFE2B7B3EABDBA
+ B59392141111F2C5C2E6B9B72B2222000000000000141010E5B7B5E9BAB7E2B5
+ B2E3B4B2E0B1AEE2B3B0E3B4B2E3B4B1E7B7B5E7B8B5E3B3B0ECBBB8EEBDB9E4
+ B2AE2A20200000007C5F5DECB4B1EEB4B1EFB3AEEBACA8EAA8A4EEAAA6F0AAA6
+ F2AAA6F3AAA6F3A7A3F0A49FF0A39DEF9F9AF5A29CF6A19B9A6460000000F698
+ 92F696909D605C0000000000000000009F5E59FB9087FC9990FEA99FFF9D93FF
+ 988CFFACA1FFAEA3FFA698FFA89AFFFBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFF4DFFFFFFFFFFFFFFFE1D0FFB4A5FF9F92FFFFFFFFCCC0FFC0B4FF
+ B9ADFF988DFE9A9149302D492F2CFC958CFB8C842D1B1A000000000000000000
+ EFA7A1F3ACA6F6B1ABF7B5AEF8B7B1F5B6B0F5B6B2F3B7B2F0B7B2EEB6B1EEB7
+ B3EEB8B4EFBAB6ECB8B4000000ECBAB6E9B7B4443635000000000000000000EB
+ BAB7ECBEB9EBBBB7EBBDB8EBBDB9E9BAB8ECBFBBECBFBDEBBFBBEBBFBDEABFBD
+ DFB4B2E7BEBBE6BDBAEDC4C1796463141010EEC6C4B496950000000000000000
+ 002C2524E3BEBAE3BEBBE5C0BFEECAC7E9C5C3E7C4C1EBC7C5F3D0CDF2CFCDE3
+ C1BFEFCDCCF0CECCE9C6C3DCBBB9D9B9B6D7B6B4E1C0BED9B9B7D6B8B6DEBFBD
+ E7C9C7DCBFBEDBBFBEE0C2C1DEC0BF917F7F433B3BEACFCEEBCFCF0000000000
+ 00000000433C3BE6CBCAE9CECCEED4D1E5CBCAE9CECDE6CCCBD7BDBBD7BBBBE7
+ CECCEAD0D0E5CCCCE7CECDEAD0CFECD2D2ECD4D2ECD2D2E3CBCBE7D0CFE0C7C7
+ E1C9C7E1CAC9E0C9C7E3CDCCDCC6C5E3CECEDEC9C7E3CDCDEAD5D5E6D2D1EAD5
+ D5E7D2D1E5D0CF000000968988EFD9D9E4CECE000000000000000000000000B4
+ A4A4ECD8D7EED9D9D9C2C1E6D1D0F3DCDBECD6D5EAD5D4EBD6D5E9D4D4DAC6C5
+ E2CECDE9D4D4E4CFCFE7D2D1ECD7D5E9D4D2E6D1D0EAD5D5EDD9D8EFDADAE6D1
+ D1E7D4D2EED9D9E9D5D5E9D5D5F2DFDEDCCAC9EFDBDAF2DEDC00000000000000
+ 00F2DBD9F2DCDAF3DFDEF0DEDCF0DEDCEBD7D7F0DCDCF0DEDCEDDADAEEDBDBE9
+ D7D8E0CDCDDECBCBE9D5D5EFDBDBEBD7D7EEDAD9ECD9D8E7D4D4E5D4D2E5D2D2
+ EAD8D8E7D4D2EBD7D7ECD8D8EAD5D6E6D4D2E9D5D5E3D0CFE1CCCCE3CECDEAD2
+ D1E9D1D0716565141212C1ADACE0C7C6CAB5B314121200000000000000000000
+ 0000141212928281E0C5C3E1C6C6E9CECDECD0CEEDD1CFE7CCCCE2C6C5E1C5C3
+ E0C4C2EFD1D1DBBEBDCFB3B2D0B5B4E7CBCAEED1D0EDCFCEEDCFCEECCECCE7CA
+ C9E7CAC7E0C1BFEACACAECCECCE9CAC7EBCCCAEFCFCEEAC9C7EDCECCEECDCCE5
+ C4C2907B7B403736E9C6C4EECCCA0000000000000000005B4D4CF4D0CEF5D1CF
+ DAB5B4CFAAA9D9B4B2E0BAB8D2AEACD7B2AEF4CECBF5CECCF3CCCAE2BBB8F3CB
+ C92D26250000002C2323EDC4C1F8CECCF2C7C4EFC5C3DEB4B2EABFBB2C23237D
+ 6665F4CAC6B89895000000000000000000614F4EEDC2C0EEC3C1EFC3C1ECC1BF
+ E6BBB8EDC0BDEDC0BEECBEBAEFBFBDEFBEBAECB9B6EDBAB7EEB9B6E3ACA95B44
+ 42000000453433EAACA9EEB0ACEFB0ACEBA9A6EEABA7EFABA7EDA7A3F2AAA6F2
+ A8A4F2A6A1EA9C98EC9C97F09E99F5A19BF49F9AD58A84000000B97A74F59D97
+ BB767000000000000000000048302EF99E96FB948AFC958BFE9C93FF9186FF8A
+ 7FFF8D82FFC5B8FFFFFFFFF9EAFFFFFBFFFFF3FFFFFFFFFFFFFFFFF0FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFEAD7FFFFF7FFFFF2FFE5D6FFB0A2FF9487FF867BFFFFF6FFC4B9FFA2
+ 98FEB1A7160F0E814E49FB9D95FBA79F000000000000000000462A28EE9690EF
+ 9E98F0A59FF6B1AAF6B2ABF4B1ABF3B1ACF4B5B0F4B5B1F0B4B0F0B6B2EEB6B2
+ EFB9B5EDB8B4000000ECBAB7ECBAB7443636000000000000000000EDBEBAEFC0
+ BDEBBBB8EBBEB9EBBEBAE7BAB7ECC0BDEEC2BFEBC0BDECC1BEE2B7B5DCB2AEDE
+ B6B3E1B8B6ECC4C1CBA7A6000000B49594E9C0BD2C2524000000000000000000
+ CAA8A6DCB7B4E0BBB8EDC7C5E9C4C3E0BBB9E6C3C1F2CECBF5D1CFF0CDCBF2CF
+ CDF2D0CEF0CECCECCAC7EECDCAEDCCCAF2D1CFD6B6B5D4B5B3E5C6C5E4C5C3D5
+ B7B5D7B9B7DCBFBED6B9B8887675403939E7CCCAE9CCCB000000000000000000
+ 453D3DECD0CEEBD0CFF2D6D5EFD5D4F0D7D6F0D7D5EBD1D1ECD4D1F0D8D7EFD7
+ D6EDD5D4EDD6D5EAD1D1EAD1D0EBD4D4ECD4D2E7CFCFE7D1D0E1C9C7E9D1D0EA
+ D2D2E7D1D1EAD4D4E9D4D4ECD6D6E9D4D4ECD6D5ECD7D7E7D4D4EAD5D5EBD5D5
+ B1A1A1000000D1BFBEEFDAD9CFBBBB000000000000000000000000EDDAD9ECD9
+ D8EBD6D6D8C2C2E6D1D0EDD8D7F0DADAECD6D5ECD7D7ECD7D8E3CFCEE7D2D1EB
+ D7D6EAD4D4EAD4D2EDD7D7ECD7D6E7D4D2E9D5D4EFDBDAF0DBDBE9D5D5ECD8D7
+ EDD9D8ECD8D7EFDBDAF4E1E0DBC7C7E9D5D4E9D5D40000000000000000EED7D7
+ E6D2D1ECD8D8E1CECDE7D6D5E9D6D5EEDBDAF0DCDBE4D1D0E5D2D1DCCACAE5D2
+ D2E0CDCCE4D0D0F0DEDCF0DCDCEFDBDAECD9D8EAD6D7E7D5D5E6D5D4EBD8D8EC
+ D9D9EBD8D7ECD8D8E5D1D2E0CCCBE1CDCDDAC6C5DBC7C5D9C1C1E4CDCCC1ACAB
+ 131010928383D8C1C0D6BEBD1412120000000000000000000000003E3737C2AC
+ AAE5CBCAD8BEBDE6CCCBEACFCEEDD2D0EACFCED9BEBBD5BAB8E0C4C3E7CCCBF2
+ D5D2E7CBCACFB4B2D0B5B3E0C3C2EDD0CFEFD1D0F0D2D1EDD0CEECCDCCECCECD
+ EECFCEEDCECCE9CBC9E5C6C4ECCDCAEDCDCCE1C1BFEACAC9EFCFCDEDCCCA4239
+ 388C7876EDCCCA988381000000000000000000A88D8DF4CFCDEFCBCAEDC7C5ED
+ C9C6F0CBCAF0CBCAD4AEADD4AEABD8B4B2EAC4C2E5C0BDDFB9B8EDC6C37B6664
+ 000000000000C2A19EF6CECCF7CFCCF5CDCAEDC5C2B39492151212F4CCCAF2CA
+ C72C2524000000000000000000D4AEACEDC2BFECC1BFEDC0BEEEC0BFECBEBBEF
+ BFBDEFBEBBE7B5B3EDBAB7EEB9B6EDB7B4F0B9B6EFB7B5E4ABA8AA7E7B000000
+ 000000ECAEABF0B2AEEFAEABE7A6A3EDAAA5F0ABA7F0A9A5EDA5A1EA9F9BF0A5
+ 9FEB9E9AEA9D97F0A39DF4A7A2F5A59FF3A19B2D1D1C633F3DF49D96F6A39B15
+ 0F0E0000000000002E1C1AFB9B93FB9890FC8C83FE7F75FF7A6FFFA297FFEBDF
+ FFD2C5FFFEEFFFD0C2FFFFFFFFD7C6FFFEECFFD4C1FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FFFFFFFFFFFFFFFFFFFFF5E2FF
+ FFF9FFE0CFFFD4C4FFE0D1FFD4C5FFB1A4FF9185FF7C71FF7369FED4C9FDC9BF
+ 0000009D6964F9B0A7BD7D760000000000000000007D5653ED9E98EE9A95F29B
+ 96F6A29CF6A7A2F2A7A2F5AEA9F5B3ADF3B3AEEBADA8EEB2ADEBB1ACEFB6B2EF
+ B7B3000000EDB8B5ECB8B5443635000000000000000000E4B5B2EBBDB9E4B6B3
+ E9BAB7E4B7B4E2B6B3E7BBB8EBBFBDEBBFBDECC1BEE1B6B4DAB1ADDBB3B0E1B8
+ B5E6BFBDE5BDBA1411117A6563E9C0BE7D68670000000000000000007B6765E9
+ C3C1E7C2C0ECC7C5EEC9C7EBC6C4E7C4C2EBC9C6F2CECCF0CDCBEFCDCBEFCECC
+ E6C4C3E4C1C0EBCAC7EECCCBEFCECDD5B4B3D5B5B3E7C9C6E6C9C6E4C4C2EBCB
+ CAEFD1CFDEC0BE8673723E3636E9CDCCE9CDCC000000000000000000463D3DEC
+ D0D0ECD0CFF2D5D5F0D7D6F2D8D7F0D8D6EAD0CFE9D0CFEDD4D4E7CECEEAD1D0
+ EED6D6E9D0D0E4CDCCE6CECEEAD2D2EAD2D4EAD4D2E4CECDEBD4D4E9D2D2E2CC
+ CCE7D2D1E9D2D4EDD7D7E6D1D1E9D5D5EAD5D6E9D4D4E6D1D1E3CDCD756A6A14
+ 1212EDD9D8EFDAD9766B6B0000000000000000002C2828E6D2D0E3CFCFE3CECD
+ D4C0C0D9C5C3E6D1D1ECD7D6E0CBCBE4CFCEEAD6D5E4D0CFE7D2D1EAD5D4E5D0
+ CFE5D0CFEDD7D7ECD7D6E7D5D4E0CCCBE7D4D2EAD7D6E6D1D1ECD8D7F0DBDBE9
+ D5D5E7D5D4F2DFDFECD7D6F2DEDCF7E2E10000000000000000D2BDBBD4C1C0D2
+ C0C0D1BEBDD2C0BFD5C2C1E2CFCED7C3C3D2BFBED5C2C1D5C2C1E1CECDE4D1D1
+ DECBCAE7D5D5D9C5C4D4C0C0D4C0BFD4C0C0D8C4C4E4D1D1E9D5D6E4D1D0EAD5
+ D5E6D4D2D7C4C3D1BEBED1BDBDD2BEBDDFC9C7E1C9C9DEC6C66B5F5F272222EC
+ D5D4D5BEBD564C4B000000000000000000000000594F4ED1B8B7D4BAB9D8BFBE
+ D5BBBAEACFCEECD1CFEACFCED8BEBBD4B9B8D2B7B6D1B6B5DABFBDEDD1CFEFD1
+ D1CFB3B2D0B4B2D5B8B7DCC0BEE2C5C3D8BBBAD1B4B3D8BAB8E7CAC9E5C7C5D5
+ B6B5D5B6B5D6B6B4D1B3B1CEAEADD1B2B2DEBFBDEDCECDE3C3C2120F0FBB9E9D
+ E6C5C35F5251000000000000000000D2B0ADDCBAB8E5C1C0E6C3C1F0CCCBF3CE
+ CCE4C0BED2B0ADD4AEACE1BEBBF5D0CEEECAC7EAC4C2E5C0BED7B3B000000000
+ 0000574947F3CCCAF4CECBDBB5B3D8B1AD2922227E6968F2CAC7A68685000000
+ 000000000000614F4EE2B5B3DCB0ADDEB0ADDFB0AEE4B4B1E5B4B2EBB9B6E3B1
+ ADDEABA9DFABA8E0ABA8E0AAA7EAB3B1E7B0ACE3AAA8E0A6A300000000000092
+ 6B69EBABA7E3A39FE3A29DEBA8A4EFAAA7E7A29DE59F9BE6A19BE9A39DE69E9A
+ E69D98E99D98F5A6A1F6A69FF5A6A1805854150F0EEEA19AEF9B95613D3A0000
+ 00000000000000F78C84F88279F97F75FC9489FEBFB5FFC6BBFFC2B7FFD0C4FF
+ BAADFFFFFFFFC1B2FFDFCFFFB1A1FFFFEEFFFCE9FFFFFFFFFFFFFFFFF7FFFFF2
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFBFAEFFEA
+ DAFFD6C6FFA597FFC5B8FFC1B5FFAEA4FF8E84FE7E74FC786E9E4D47000000F6
+ C9C0F5A49B7E534E000000000000000000D28883ED9D97EEA49DF3ACA7F6ADA9
+ F6A9A5F5A7A2F4A49FF6A9A4F0A9A4E9A5A1E9A9A5E7ABA7ECB2ADEEB6B20000
+ 00EDB6B2E7B2AD433433000000000000000000E1B1ADECBDB8EEBFBDEDBEBAE0
+ B2AEE0B3B0E2B6B3E1B5B3EDC1BEF5CBC6F2C5C3DAB1ADD8B0ACDCB3B1DEB6B3
+ DEB6B44035343F3433E2BBB9B69998000000000000000000413736DAB5B4D7B3
+ B1E3BFBDEECCCAEAC6C4D9B6B4D9B6B5DAB7B5DEBAB9EECCCBEDCCCAD9B9B7D4
+ B3B2D7B6B4EAC7C6F2D0CED7B7B5D5B6B4ECCDCBECCCCAE9C9C7E7C7C6ECCDCB
+ D6B6B48571703E3635EDCFCEE2C4C3000000000000000000423B3AD6BAB9D6BA
+ B9D7BDBBD9BFBFEBD1D1EDD5D4DCC3C3DAC1C0D6BDBBD7BEBDDEC5C4EDD5D5DC
+ C3C3D6BEBDD8C2C1E2CBCCE7D0CFE2CCCBDBC3C3E1CACAD5BEBED6C0C0D7C2C1
+ D9C3C2E6D1D1DFC9C9DBC6C5D8C4C3DBC5C5D8C3C3D6C1C0282323564E4EE9D5
+ D2EAD5D4282423000000000000000000716666D2BFBED2BEBED1BDBBD2BDBDD8
+ C3C2E3D0CFDFCACAD2BFBECFBAB9CFBAB9D4C0C0E3CECDE3CECDD5C0BFE6D1D1
+ ECD7D8EBD7D6D9C5C4D0BDBDD5C1C0D4C0C0D5C2C1F0DBDBF2DFDED4C0BFD0BE
+ BDD4C1C1D4C1C0D2C0BFE3CFCE0000000000000000EDD9D8E6D2D1D1BFBED0BE
+ BDDAC7C6DAC7C6D9C6C5D1BFBED8C5C4DECAC9D4C1C0D2C0C0DECBCBDBC9C9D9
+ C5C5D0BEBED4C1C1D8C4C4D5C2C1D2C0BFD6C4C4E5D2D2E7D5D4E6D2D2E6D4D4
+ E3CFCFD1BEBECEB8B7DFC9C6EAD2D2E0CAC9CFB8B7120F0F8B7D7CEED7D6A695
+ 93000000000000000000000000928180D2B9B8D0B6B5E5CCCAEAD0CEDBC1C0E5
+ CBCAE2C6C6D2B8B7CFB4B3E1C6C5DBC1C0D1B6B5D0B5B3EBCFCEF0D5D4CFB4B2
+ D0B3B2D7BBB9DBC0BFD6B9B7D0B4B2D0B4B2D9BDBAE1C4C2D4B6B4D2B5B3E1C3
+ C1D6B6B5CEB0ADCEB0ADD9B9B8E6C9C6EDCECD9E8786272121DBBBBADFBFBD13
+ 0F0F000000000000413838D2B1AED1B0ACE2C0BEE3C1BFD2B0ADCFACAAD2B1AD
+ D5B3B1E0BDBAF5D2D0F5D2CFF5D1CFF4CFCDF4CFCCE3BFBD5647460000000000
+ 00ECC4C2E4BDB9D6ADABA48683000000D0ACA9E7BEBA57464500000000000000
+ 0000CBA5A2DBADABDEB0ADE7B8B6E9B9B7E4B3B1E6B6B3E5B4B1DEABA8E0ADAA
+ EAB5B2E1ADAADFA9A6E4ADABECB5B1E6ADAAE0A6A341302F0000005F4543E4A7
+ A3E2A39EE4A5A1F2B0ABEAA9A5E5A49FE7A59FF0ABA7ECA59FE59C97E69C97EB
+ A29CF6AEA9F6B0AAF5ABA6D7938D00000096625EF4A19AB97973000000000000
+ 0000009B534EF79389F9B0A6FBC6BDFDA499FFC6BBFFA79CFFA99DFFFFFBFFAE
+ A2FFC5B8FF9889FFE9D9FFC9B9FFFFFFFFFFF7FFFFFCFFFFFFFFECD8FFFFFFFF
+ FFFBFFFFFFFFFFFFFFFFFBFFEBD8FFFCEAFFFFFFFFEEDFFFFEEEFF9C8DFFCFC2
+ FFC7BAFF857AFFB1A5FFADA3FFA59AFE998EFB877E6434302D1716F8827AF6B2
+ AA2C25230000000000002D201EF2ABA6EDA49EEEA29CF2A19CF6ABA6F5AEA9F6
+ B4AEF4B2ACF4AEA9E7A19CE7A29CEFA8A4E6A39EE6A5A1E9ABA7000000E7B0AC
+ E5B0AB433433000000000000000000E3B1ADEEBEBAEEBEBBE1B2AEDFAEACEBBD
+ B9EDC0BDDEB1AEDEB2B0F6CAC6F4C9C5DAB1ADD9B0ACEBC1BFE1B8B6DAB3B03F
+ 34333E3333E6C0BDEAC3C1000000000000000000000000D6B2B0D6B2B0EAC6C3
+ EECAC7D7B5B3D7B4B2E5C1C0E2C0BED6B4B2E3C1BFF3D1CFE4C2C0D4B3B2D8B8
+ B6EECDCBEBCBC9D7B8B6D5B6B4E5C7C6E7C9C6D4B5B3D2B3B2D2B3B2D4B5B489
+ 7675423A39F0D2D0EED1CF0000000000000000003D3535D5B9B8DAC0BED8BEBE
+ D5BBBAD8BFBEEED5D4E4CAC9D6BDBBD4BBBAD9C1C0E7CECDEAD0CFD5BBBBD5BB
+ BBDCC5C4E6CFCEE9D1D0E3CDCDDAC3C3D5BEBDD4BDBDDBC6C5E5CFCEDAC4C5E2
+ CDCDDFC9C9D6C0C1D6C0BFE2CDCDDFC9C9BAA8A7000000A59595DEC9C9C6B4B3
+ 000000000000000000000000BAA7A6DAC5C5E4CFCFD4BEBDCEB8B7D9C5C4F2DC
+ DBE7D2D1D2BFBECFB9B9CDB7B6E0CBCAEDD7D6EDD8D8DCC7C6E5D1D0E5D1D1D8
+ C4C4CFBDBBD1BEBDE4D0CFD8C4C4CEBABAE2CECDF3E0DFCEBBBACEBABAE3CFCE
+ D9C5C3CCB8B7CCB8B70000000000000000F4E2E1ECD9D8D0BEBDD2BFBFF0DEDC
+ E6D2D1D4BFBFD1BEBEEDDAD9EEDBDAE1CECED2BFBFDAC7C7E4D1D1D9C5C5D1BF
+ BFEEDBDAF2DEDCEAD6D7D2C0BFD2C1C0E9D6D6EFDBDBEEDBDAEAD6D6E9D6D5D1
+ BDBBCDB6B5E5CFCEEBD4D2DBC5C4B5A19F000000E6CFCEEDD6D5403A39000000
+ 000000000000766A69EAD0CFD4BBBAD0B8B6DEC4C3EDD1D0E1C7C6E6CDCDE1C6
+ C5CFB4B3D2B9B7EFD5D2EED1D1DBC0BECFB5B3E7CDCBF4D8D7CFB4B2D0B5B4EB
+ CFCDECCFCEEED1D0D4B7B6D0B4B3EED0CFE7CCCAD0B4B2D5B8B5E4C5C4D7B9B7
+ D0B2B0CEB1ADDEC0BFEBCCCBECCDCB6C5B5B554848EACBC9D1B6B50000000000
+ 000000007C6B69E5C4C2CFAEACD4B3B2D1B0ADCFADABD5B3B1E7C6C4E3C0BEEB
+ C7C5EFCBCAEDC9C6F2CDCAEBC7C4F2CDCAEBC5C2A185820000000000007B6564
+ E6BEBAD6ACAA2A22225F4E4DECC2C0C29D9B0000000000000000002B2222E3B7
+ B5DBADABE2B3B1EBBBB8ECBDBAEEBEBDECBBB8E1B0ADDEABA8ECB8B5EFBAB8EE
+ B9B7DFA9A6E1AAA8EEB6B4EBB2AEE0A7A4916C6A000000140F0FE6AAA7E2A6A2
+ E7A9A6F3B3AEEAA8A4E4A39FEBA7A3F0ABA7EEAAA6E5A29DE6A6A1EEAAA5F5AC
+ A7F4A8A3F3A49EF2A49D452E2C2C1D1BF59C96F897922D1A1A0000000000002D
+ 1F1DF9CAC1FCB0A6FDB2A8FBB4AAFD988DFFA79CFFD5C9FFA195FFB2A5FF8579
+ FFC1B3FFBDAEFFE5D6FFF5E5FFFFFCFFEFDFFFFFFFFFCBB9FFF9E6FFF4E2FFFF
+ FFFFFBE9FFFFFFFFD8C7FFF2E1FFC6B7FFFFFFFFBAACFFE3D5FF897DFFBAADFF
+ B9ADFF7267FF9E94FEA399FDA79DFBA197150D0C814844F88982DA766F000000
+ 000000000000BA8986F2A49DECA39CF0AAA5F4B2ABF5B0AAF6ADA8F6ACA7F3AC
+ A8EBA8A4E7A9A4EAADA8F2B3AEEAA9A5E5A4A1E7A6A2000000E5A8A5E5A9A745
+ 3433000000000000000000E5B3B0EEBDB9EDBDB9DFB0ACE1B3AEECBDB9F0C1BE
+ DEB1ADDEB1ADF3C6C4F2C7C4DCB2B0E0B5B3F2C7C5ECC4C1EAC2BF3F34333F33
+ 32F2CAC7E7C2BF000000000000000000000000D8B3B1D7B4B1EAC5C3E4C0BFD6
+ B4B2DAB8B6E6C5C3EECDCBD6B5B3D6B5B3F2D0CFEECDCBD4B4B2DFBEBBE6C6C4
+ EBCCCAD8B9B7D6B8B6E5C6C5E1C2C1D2B3B2D2B5B3DFC0BEEED0CF988584433B
+ 3BEED1CFEFD1D00000000000000000003D3635DBC1C0E9CECEEACFCED5BBBAD5
+ BBBAE6CDCCE9CFCED6BBBBD4BBBAE1C7C6EACFCFEBD2D2D4BBBBD6BDBBEDD5D4
+ E7CFCFE9D2D1DEC6C6DBC4C3D8C1C1D5BFBFE3CECDE7D1D1E1CBCCE3CECED9C4
+ C3D5BFBFD7C1C0EAD4D4E2CDCC564E4E282323ECD6D6ECD7D65E565500000000
+ 0000000000292424D4BFBFEBD6D7F2DCDAECD6D5CEB8B8D4BFBEEFD9D9E5D0CF
+ D1BDBBD0BBBACEB8B8DCC6C5F0DBDAECD7D7DFCBC9E6D1D1E3CFCFD1BEBDCEBB
+ BBD8C5C4F2DFDEF2DFDECDB9B8DECACAF2DFDECDB9B8D5C1C0F3E0DFF7E2E1D0
+ BBBACBB8B70000000000000000F3E0E0F0DFDED1BFBED2C1C0F2E0DFEDDAD9D4
+ C0C0D0BEBDF0DCDBEFDCDBE5D1D1D1BEBDDBC7C7E5D1D1D8C4C4D2C0BFF0DCDC
+ F0DCDCEEDBDAD2C0BFD2C1C0E5D2D2F0DCDCF0DCDBF0DBDBF3DCDBD1BDBBCBB5
+ B4ECD5D5F3DBDAD9C2C1837473272222E6CECEF0D9D80000000000000000003D
+ 3737DBC3C1ECD2D1EAD1D0D2BAB8D5BBBAEDD2D0EFD6D5EED5D4EAD0CFCFB5B3
+ D6BBBAEED2D2E7CCCCD9BEBBD0B5B4E4C9C7F3D6D5D0B5B4D2B7B6E5C9C7DFC3
+ C2EDD1CFD6BAB9D1B5B3EFD2D0EDD0CFCEB2B0DBBEBBF0D4D1E1C3C1D4B6B4CF
+ B2B0D6B7B5E2C5C3EBCDCB2722219F8787EDCFCD7C6C6B000000000000000000
+ B79D9CEECCCACFAEACD4B2B0D0AEACD2B0ADF4D0CEEDCBC9E3C0BEECC9C6EECA
+ C9F0CDCAF4CECCF4CECBF4CDCBEAC3C1D5AEAB282120000000151211ECC2BFA2
+ 8281000000D0AAA8EDC3C0594847000000000000000000B79593ECBFBDE3B6B3
+ DFB1AEE3B5B3EBBAB8F0BFBDEEBDB9E1AEACDEAAA8EDB9B7EFBAB8EFB9B7DFAA
+ A7E0AAA7EDB6B4EAB4B1E0A9A6CD9C99000000000000CB9694E2A5A1E6A7A4F3
+ B2AEE7A7A3E4A6A2EDB0ABEFB3ADF2B2ACE5A39DE6A19BF2A8A3F3A8A3F3A9A4
+ F3A8A2F3A49DB67571000000985C58F5938C9C625E000000000000000000DB94
+ 8CFBBBB2FCA69DF9978EFCB4AAFEB4AAFF9388FFA196FF766BFFA195FFB2A5FF
+ B6A8FFF3E4FFD8CAFFE1D2FFC2B3FFC3B4FFBFAEFFC7B7FFDECDFFFFFFFFB8A8
+ FFEBDBFFF5E5FFEFE1FFCDBFFFD0C2FFEEE0FFAEA2FFCCC0FF7F73FFA99EFFAB
+ A1FE756BFD9389FCA298BD7C74000000D98982F7948B804B460000000000002D
+ 1B1AF2A9A3EEC9C2ECB2ABEDA7A1F0A8A3F2AEA9F5B6B1F6B5B0EEACA8E7A39F
+ E9A5A1F0B1ABF5B7B2F5B9B4E6ADA9E7AEAA000000E4A8A5E5A8A54533320000
+ 00000000000000E3ADAAEFBBB9EEBBB8E0B0ADE3B5B2F0C2BFF0C2BFE1B2B0DE
+ B0ADF3C6C4F0C5C3DEB3B1E2B8B6ECC3C1E1B9B7E3BBB94034343F3433F2CAC6
+ EAC2C0000000000000000000000000DAB7B5D8B5B3EBC9C6E5C3C1D7B6B4DCBB
+ BADFBFBDEAC9C6D7B7B5D6B5B3EDCCCBECCCCAD4B4B2E1C1BFE7C7C6EECECDDB
+ BDBAD6B8B7E5C7C6DCBFBED4B6B4E4C5C3E5C7C5F0D1D0988584423A39EDCECD
+ E9CBC90000000000000000003D3636E3CAC9EDD4D2EBCFCFD6BDBBD5BBBAE7CE
+ CDE5CBCAD7BEBED4BBBADFC5C5E6CDCCE3CAC9D4BBBBD5BBBBECD5D2EAD2D1E7
+ D0D0DCC6C5D7C1C1DCC6C6D7C1C1D7C2C2DEC7C6E6D0CFEAD4D4DEC6C7D7C1C0
+ D8C2C3EDD7D7CEBABA000000A29292EDD9D8D1BFBE0000000000000000000000
+ 00A29292D4BFBFE7D4D2EBD5D5ECD6D7CFB8B8DAC5C4F0DAD9E7D1D1D1BBBBD6
+ C1C0D4C0BFD1BDBBE9D4D1E5D0CFE1CCCCE6D1D1DBC7C7CFBDBACEBBBAE1CDCC
+ F2DEDCF4E1E0CEBABAD5C1C0E9D5D5CDB9B8D4C1BFEDD8D9E7D5D4CFBBBACBB8
+ B70000000000000000EEDBDAE6D5D4D1BFBED2BFBFF0DEDCEFDCDBD5C2C1D0BE
+ BDE7D4D4EFDBDBD8C5C4D0BDBBDCC9C7E1CECDD6C2C2D2BFBFEDDAD9EEDCDAE7
+ D5D5D2C0C0D2C1C0E1CCCDECD8D8EED9D9F2DCDBF4DFDCD1BAB9CBB4B3F2DAD8
+ F4DEDCD7C0BF8374733D3635E1C9C9958585000000000000000000BBA6A6D0B8
+ B7D9C1BFDBC2C1D0B7B7D1B9B7DFC5C3D6BEBBE5CBCAD9C0BECFB5B3D2B9B8EF
+ D5D4EDD2D0DBC2C0D0B7B7DCC2C1F0D6D5CFB5B4D0B6B6E3C6C5D7BDBAEED1D1
+ D2B7B6D0B5B3EFD2D1EFD2D1CEB1B0D6B9B7EFD1D1E7CCCAD1B4B3CFB3B1E2C5
+ C3E6CAC7CDB3B1000000D2B3B2F0D1CF463D3D000000000000000000F0CFCDE4
+ C2C0CFAEACE1BEBBD5B2B0D7B5B3EFCDCBEECCC9E6C2C0D8B5B3D8B3B1EDC6C4
+ F4CFCCF2CBC9F5CECCEAC3C0D5AEAB705B5A0000000000007862602820204034
+ 33E6BDBAE1B7B5000000000000000000292120EBBFBBECBFBDDEB1AEDFB2B0E2
+ B4B1E0B2B0E7B7B5ECBAB7E0AEACDEABA8E9B6B3EDB9B7EEBBB9DFABA7E0ADAA
+ ECB6B3E9B3B1E0A8A6E7B0AC2C2222000000765856E2A6A3E5AAA6F3B7B3E9AE
+ AAE4A8A4EEB0ABF3B2ADEFABA7E59F9BE6A19BEEA7A3EFA7A2EEA29BF0A19BF0
+ 9C96ED938D442A28140D0DF0A29AEFB0A82D2221000000000000644844F99B93
+ FB9B92F8BFB5FBA399FE9489FF988DFF6C62FF897EFFA79BFF988CFFD5C7FFC6
+ B9FFE2D4FFC6B8FFB7A9FFAB9CFFC0B1FFA596FFCABBFFFFFFFFBFB0FFD2C3FF
+ C2B4FF9183FFC2B4FFA89BFFE9DBFFB8ACFFAEA3FFB7ABFF756BFE9E94FDAA9F
+ FD8278FC8B822E1D1C2D1E1CF6A49BF8A49B150E0D000000000000B9706AF291
+ 8AEE9089EBA39DEEC3BDF0BBB6F2B1ABF5ADA8F6B4AEECADA8E6AAA6E7AAA5EF
+ B0ABF5B4B0F6B5B1E4A7A3E4A8A4000000E4ADAAE3ABA9433332000000000000
+ 000000E3AAA7EFB8B5EBB6B3E0ABA8E3B2AEF3C2BFEFC1BEE0B2B0DEB1AEF0C4
+ C1EEC3C0DEB4B2E0B6B4F0C6C4EAC1BFE6BEBD2921218A7170EFC6C4E4BDBA00
+ 0000000000000000141111D9B5B3D8B5B3ECC9C6E4C1C0D8B6B5DBBAB8DEBDBA
+ E4C4C2D9B9B7D8B8B7EDCCCBE1C1BFD4B4B3D8B9B7DCBDBBEBCCCAD9BAB8D6B8
+ B6E9CBC9E4C5C4D7B9B8EACCCBECCDCCEED1CF8B79783D3534ECCECCEFD2D100
+ 00000000000000003D3635DCC2C0EED5D4EBD1D1D6BDBDD7BEBDF0D8D6EBD1D1
+ D8BFBFD6BEBDEDD5D4EFD9D7EAD2D2D6BDBDD6BFBFEDD6D5EFD8D8EFD7D8EDD6
+ D6E2CDCCDEC7C7D7C1C1DCC6C5E3CDCCE0C9C9EDD7D6E4CECED5BFBFD7C2C1ED
+ D8D8605757282323D5C0C0E9D2D25F56560000000000000000002C2827DCC7C7
+ D2BFBFE3CECEEAD4D4E5CFCFCFB9B8E5CFCFF0DAD9D4BFBED1BBBBE2CDCCD9C5
+ C5CFBAB9E2CDCCECD7D8E5D1D0E7D4D2E1CECCD0BDBBCEBBBAD6C2C1ECD7D6EC
+ D8D7CEB9BAD4C0BFE9D6D5CEBABAD4C1BFF4E1E0F0DBDACFBBBACBB8B7000000
+ 0000000000DCC9C9D6C4C3D0BEBDD0BEBDE1CECDE7D4D4DCCACAD1BFBED8C5C4
+ E5D1D1D4C1C0D5C1C0E9D6D5D8C5C4D1BEBDD1BEBEEAD7D7EFDCDBDFCCCBD1BF
+ BED1BFBFECD8D7F3DCDBF3DCDBF2DCDBEBD5D4CBB5B4CBB5B3DAC3C2F2DAD9D6
+ C0BF8273723C3535DCC4C3877A790000000000002B2626D6BFBDCEB7B5D2BAB8
+ D5BDBBD0B6B6D1B9B8D5BBBAD1B8B7EAD0CFD9C1BFD0B7B6D6BEBBEFD7D6EDD2
+ D2D5BDBAD2B9B9DBC3C2E7CECDD0B8B7D2B9B8EDD1D1E6CDCBE6CBC9D0B4B3CE
+ B3B1F0D2D1F3D6D4D1B5B3CFB2B0E3C5C3DBBEBBCEB1AED0B2B0E2C4C2E6C7C6
+ 7364633D3333D0B1AEE2C1C00000000000000000003F3635DEBDBAD4B2B1D2B2
+ B1E2C0BED8B6B4D5B2B0DEBAB8E6C2C0D7B3B1D4B0ADD4B0ADE4BFBDF3CDCBF2
+ CCC9F7D0CDE1B9B7D5ADABD6AEAB14100F000000130F0F000000A88886E4BAB8
+ 715C5A000000000000000000A48482DCB0ADE7BAB8DBADABDFB2B0E0B2B0DEAE
+ ACDFB0ADE5B5B3DEAEABDEACAAEBBAB6F0BFBBE9B6B3DFABA8E0ABA8E5B0ACE3
+ ACA9E0A8A5E4ACA9614948000000423231E2AAA7E4ACA8F2B7B2EFB2ADE3A49F
+ E5A6A2EEADA9E9A7A3E5A59FE5A19BEFA6A1F2A59FF3A29CF49E99F49E98EB99
+ 94CE8B85000000624B48EEA8A2B87F7B000000000000000000D98A83F7C6BEF7
+ 9990F8948AFC978DFD736AFE7D72FF9C92FF8D83FFA89DFFC7BBFFB5A9FFC0B4
+ FFB6A9FFE6D8FFA496FFC1B4FF8D80FFBAACFFFFFDFFCDC0FFDECFFFC6B8FFB5
+ A8FFCFC3FFACA1FFA79BFFEDE2FF988DFFACA2FE9C92FC796EFC9D94FCABA2BF
+ 6962000000B97670F4A198805653000000000000452C2AF0958EF49792ED918B
+ EB9089F29994F4ADA8F3C2BDF3C1BBF5B8B4EBA9A5E6A6A2E5A7A3E6ABA7E7AC
+ A9E6ABA7E2A5A2E2A5A1000000EEB3B0E1A9A5443433000000000000000000E5
+ B1ADF4BFBAE4B0ACDFAAA7E4B0ACF0BDB9E9B7B4DFB1ADDFB1AEECBEBBE2B6B4
+ DEB2B0E0B5B3F2C7C5EFC5C3E2B9B7000000A48685EBC3C1937A790000000000
+ 00000000423837D9B6B4D9B6B5EDCBCAEDCBCADCBAB9DBB9B9E2C2C0DFBFBED9
+ B8B7DABABAEACBCADBBDBBD6B6B5D5B5B3DABAB8E2C2C0D5B6B4D5B7B6E5C6C5
+ E9C9C7D7B9B7DBBEBBE2C4C2DCBFBD3D35353D3535EBCDCCF0D2D10000000000
+ 000000003E3636D7BDBBE6CCCCDFC6C5D7BFBFE2C9C9ECD5D4DFC6C5D6BFBED6
+ BFBEE1C9C9E5CECDD9C2C2D6BFBED6C0C0E9D1D1EFD8D8EED8D7EDD7D7E9D4D4
+ DCC7C7D7C2C2E1CCCCE3CDCCD6C0C0E0CACADAC4C4D5BFBED6C0BFB4A3A30000
+ 00A19190D5BFBEAC9C9C000000000000000000000000AC9C9CDEC9C9D4C0C0D4
+ C0C0D6C1C0D2BDBDD0BAB9DCC6C5D5BFBFCFB8B8D0BABADAC5C4D6C2C1D0BDBB
+ D6C2C1E5D1D0E6D1D0E9D6D5EAD7D6E0CCCBCFBBBAD0BDBBE4D0CFD9C6C5CDB9
+ B8D5C1C0EEDAD9D7C3C2CEBBBAECD7D6DFCBCBCCB9B8D1BEBD00000000000000
+ 00D9C6C5D9C6C5D2C0C0D2C0C0DBC9C7EDDAD9EEDBDAE3D0CFD8C5C4DAC6C6D5
+ C2C1E9D5D4F0DCDBDAC7C5D2BFBED5C1C0E7D4D4EDDAD9D9C5C4D1BFBED5C1C1
+ EAD6D6F2DCDBEDD8D7EAD5D4E3CCCBD1BAB9CFB7B6D2BBBADEC6C5DAC4C38679
+ 78272222D8C1C08779790000000000005D5453E2C9C9D5BEBDE5CDCBECD2D0D7
+ C0BED5BDBBDBC3C2E2C9C7E9D0CFD9C3C1D2BABAE6CECDEFD7D7E7D0CFD7BFBE
+ D5BDBBE1C9C7E1C7C6D4BBB9DAC2C0796B6AE6CCCCDEC3C1D1B5B3D0B3B1F3D7
+ D5F0D5D1E5C7C5D6B8B6D6B9B6DABAB9D6B7B5D7B9B8EBCCCAE5C5C328222284
+ 706FD1B2B0887372000000000000000000584A49D6B6B3D7B6B4E1BFBDEBC7C5
+ E6C4C2D9B6B4DAB7B5DEBAB8D9B5B4D7B4B1EAC5C2F5CFCDF4CECBF2CBC9F4CD
+ CADCB5B3D7AEACD9B2B05B4B4A000000000000292121E2B9B6E0B6B3130F0F00
+ 0000000000141010DCB2B0E7BBB9EDC1BEE6BAB7E2B5B3E0B3B0E0B2B0EBBBB9
+ E6B8B6DFB0ADDFAEACEDBBB9EEBDB9E4B1AEE0ABA9E4B1ADE7B3B1E5B0ADE1AD
+ AAEDB9B6987674000000000000E2A8A5EAADAAF2B5B1F2B3B0E9AAA6E6A8A4ED
+ ADA9EBA8A4E7A39DEAA29CEFA29DF09F9BF09F99F3A49EF0A7A1ECAAA5ECB5AE
+ 986F6A000000B4817BF6B3AB63413F000000000000473937F5938AF6958CF797
+ 8EF97970FB7E74FC9E95FD8C83FF8E84FFC2B7FFA69BFFC2B6FFAB9FFF978BFF
+ BFB3FF9689FFBFB2FF897DFFAB9EFFFFFBFFDACDFFE6D9FFC2B6FFBFB3FF9589
+ FFA498FF9186FFB1A6FFBAB0FE867DFCABA2FB9288FB8076F99D962E201E2D1A
+ 19F4837CD68A84150F0E000000150F0ED48E89EF9E98EF9B95ED9791ED9791F4
+ 9D98F49D98F29E99F0AAA6F2BFBAECBDB8E5AEAAE7A9A5EFB0ACF6B9B5F7BBB8
+ E3ACA8E2AAA6000000F3B9B5E6ACA8433231000000000000000000EAB8B4F2C1
+ BEE4B3B1E0AEACECB9B7F3C0BEE9B7B5E1B0ACE1B1ADECBEBAE6B9B6DCAEACE2
+ B5B3EFC4C2ECC2C08D7372130F0FDBB4B2EFC7C45F4F4E000000000000000000
+ 8B7472DAB6B4DEBBB9EBC9C9EAC9C7EAC9C7DFBEBDDEBDBBDCBBB9D9BAB9E0C0
+ BEECCCCBE4C5C4DBBDBBE3C3C1DEBEBDDEBFBDD8B9B8D9BAB9DEBFBDE3C4C2D9
+ BBB9D8BAB9D7B9B8D6B9B73E36363F3837E3C6C5ECD0CE000000000000000000
+ 2A2525DBC1C0DAC0C0D8BEBEDAC1C1E5CCCCDFC6C6D9C1C1D7C0C0D8C1C1DAC2
+ C2DAC4C3D9C3C2D7C1C0DAC3C2E3CCCDE9D2D4E5CFCFE7D1D1E7D4D4E3CDCEDB
+ C5C6DBC5C5DBC5C5D9C4C3E4CECEE0CACADBC5C4E4CECD1413135A5151D6C1C0
+ D7C2C2131111000000000000000000564E4DD8C2C3DAC5C4DBC7C7D4C0BFD2BE
+ BED2BDBDD2BDBDE7D1D0D4BEBECFBAB9D9C3C2D9C5C3DBC9C7D2C0BEDAC6C6E6
+ D2D1E7D2D1E4D0CFE9D5D5ECD7D7E0CCCBD1BEBED6C2C1D8C4C3CFBDBBD5C0C0
+ E1CDCCE3CECED4C0BED7C4C2D5C1C1D2C0C0E9D6D50000000000000000ECDAD9
+ ECD9D9ECD9D9F0DCDCEDDBDAEFDCDCECD9D8ECD8D8E9D6D6E6D4D2D8C5C4EEDB
+ D9F0DCDCE2CECEDBC9C6E9D6D5EAD7D7EAD7D7EBD8D7E3CFCFE4D0D0E6D1D1E7
+ D2D1EBD5D4DBC5C4F0DAD9F0DAD9EDD7D6E3CCCBE3CBCAF0DAD9D2C0BF000000
+ ECD5D6928383000000000000928382E4CDCCE3CBC9E3CBCAECD2D1E3CAC9D6BE
+ BDE0C6C5E4CCCBE6CFCEE2CBC9E5CDCBEED6D6EFD8D7EED7D6EBD1D1E7CECDEA
+ D1D0EDD4D4E7CECDE6CDCC433C3BE5CBCAEDD1D0E6CBCAE1C5C4F4D7D6F2D5D2
+ E1C4C2E0C3C0E7C9C7D8B9B8D9BAB8E5C6C5EBCCCACEB3B2000000C7ACAAE9C9
+ C75F5251000000000000000000978181EDCBCAF0CDCCEFCDCBF0CECCEECBC9E2
+ BFBDE0BEBBE9C5C3E7C3C1E3BFBBEDC7C5F2CCCAEDC7C4EDC7C4F4CDCBEFC7C5
+ E4BDBAEEC5C3B99A99000000000000997F7EF0C7C47D67660000000000000000
+ 007A6463E7BEBAECC1BFECC1BEEFC3C1E6BBB9E2B6B3E5B7B4ECBEBBE6B7B4E5
+ B5B3EAB8B5E9B7B5E7B5B3EBB8B5E6B4B1E9B7B4E9B7B5EAB9B6EEBBB8F0BBB8
+ D4A39F000000000000946E6CEFB3B0F0B4B0EDB2ADEEB0ABF0B0ABF3B0ABF0AA
+ A6F0A8A4F0A59FEEA29DF0A6A1F2AAA5F3B2ACF4BAB5F3B7B1F4ADA7F6B0A947
+ 3533150F0FD88E88F7A29A150F0F0000000000009D635EF99B93F9827AFB8179
+ FC9A91FC948AFD887FFEA89DFEACA2FF9C92FFA89DFF9D92FF887DFF8C82FF86
+ 7BFFBAAEFF867AFF9F94FFFFF3FFCBBFFFB3A7FFA99EFF9E93FF7B6FFFABA1FF
+ 9489FE9085FECCC2FEA399FD9389FCABA2FB9086824541000000BD837EF79891
+ 4727250000000000009D6B67F3A7A1EDA39CF0A59EEFA29BEE9D97F2A19AF3A2
+ 9BF4A29DF3A29CF0A29CECA9A4E5B2ACE6B8B4F5C0BBF6BBB7F7B9B5E3A9A4AB
+ 827F000000EDB8B4E7B2AE453534000000000000000000F0BAB8F6C1BEF3C1BE
+ F3C3C0F3C4C1F2C4C1EEC0BEECBEBAEEC0BEF0C2C0EFBFBEEDBDBAEFC1BEEFC1
+ BFF3C6C32C24235E4C4BE3BAB7EFC6C4141111000000000000000000E2BEBBDE
+ B9B7DEBBB9E4C2C1E5C4C2EAC9C7E6C4C4E3C3C2E5C6C4E2C1C0EBCBCAEDCDCC
+ E9C9C9E7C9C6ECCCCBE9CAC7EBCCCAE7C9C7EACAC9E9CAC9E7C9C7E1C3C1DEC0
+ BEDBBEBDD8BBB9423A39423A3AE5CAC9E7CCCB000000000000000000000000EE
+ D5D4EFD6D5EDD4D4F0D8D6F2D9D8F0D8D7EED7D6EDD5D4EFD8D7EED6D6ECD6D5
+ ECD6D5E3CCCBE2CDCCEAD2D4EED8D7E6D0D1E1CDCCE1CBCBE1CCCCE7D2D2E7D0
+ D0EBD5D5EBD5D5E2CCCBE2CDCCEDD6D5443D3D2B2727DFCAC9E4CECD423C3C00
+ 00000000000000002C2929EED9D9EAD5D4E4CFCEEAD5D5E6D1D0E3CDCDE2CCCB
+ E3CECDEED9D8ECD7D5E7D2D1EBD6D4E3CECDE6D2D0E4D1D0E5D1D0E6D2D1E2CD
+ CDE1CDCCE9D6D5ECD7D8EBD7D6DECAC9E6D2D1F2DEDCEFDBDAE9D6D5E7D4D2E9
+ D5D4D5C1C0EBD7D6E9D5D4EEDAD9EBD7D60000000000000000EFDCDBE5D1D1E6
+ D5D4EEDBDBECDAD9EBD7D6EBD7D6DBC9C7EAD7D6EEDBDAE7D5D4EEDADAF2DEDC
+ EFDBDAEEDADAF2DEDCEFDEDCF0DCDCECD8D8E6D4D4E9D5D5E0CBCBEBD5D4F0DA
+ D9EED8D7F0DAD9F3DCDBF4DEDCE1CAC9D5C0BFE7D1CFEAD4D2141312AB9B99C9
+ B6B50000000000005E5554E4CDCCDCC4C4E3CBC9E4CCCADAC1C0D8C0BFDFC6C5
+ DFC7C6E1C9C7E0C9C6E2CAC7E7CECDE7CFCEE9D1CFE7CFCEE5CDCCE9D0D0EED4
+ D2ECD1D1E9D0CE000000E9CDCCEFD5D4ECD0CFE5CAC9F0D4D4F0D5D2E3C5C4E4
+ C5C4E6C7C6E0C1BFDABBB9E1C3C1E6C7C57666652C2525E7C7C5EBCBC9141212
+ 000000000000000000CBAEACEAC9C6EECCCAEAC7C5EECBC9E6C4C2E6C3C1D9B6
+ B5E3C0BFE9C5C2E3BFBBE3BEBBE9C4C1E9C2C0F0CAC7F5CECCEBC4C1E0B8B6ED
+ C5C3F5CCCA2C2524000000443938EFC7C52C2524000000000000141111E7BEBB
+ EAC0BEEFC4C2EDC2C0F2C5C3EFC3C1E7BBB9E5B7B5EABBB8EABAB7E9B9B7EFBF
+ BDEDBDBAECBDB9F0C1BEEEBEBBEEBEBAEEBDB9EFBBB9F0BBB8F0BAB7EFB8B400
+ 0000000000443332F0B6B3EFB4B1EAACA8E6A6A2ECA8A5F0ABA7F0A8A4F0A7A3
+ F0A8A4EEA9A5ECACA7EFB5B0F0B9B4F2B2ACF2ABA6F6B5B0F7B7B1F5AAA4150F
+ 0E150F0EF6B7B0D79C96150D0D000000150E0DDA7870F7837BF9968DF99890F9
+ 8A81FC9990FDB3A9FD9A90FEB2A8FF9C92FF9287FFA499FF7D72FF7B6FFFB6AB
+ FF8175FF958AFFE0D4FFB3A8FF8E83FF968BFF988DFF9C92FE9C92FE968BFC8C
+ 82FC9D94FCC9BFFC9A91FC9D95DA958C000000482926F7A29A9C6E6900000000
+ 0000482D2CF8A9A3F7AAA4F0A7A1F6AEA8F6ADA7F4AAA5F5A9A3F4A59FF5A6A1
+ F5A7A2F5A8A3ED9F9BE79D99E3A39EEBB6B1F0C5C1EBBAB6E2ADA9916D6A0000
+ 00EEB8B4F0BAB8463736000000000000000000EDB9B6F5C0BDF5C1BFF3C1BEED
+ BDBAEEC0BDEDC0BEEEC2C0F2C4C2EEC1BFEDC1BFF3C6C3F5C7C4F5C5C3B99695
+ 000000D4ACAAEFC4C2B69695000000000000000000615151EFC9C7EECAC9EAC6
+ C4E7C4C3E6C4C2EACAC9ECCBCAEACACAEACBCAE0C0BFECCCCCEECFCEECCBCBE9
+ CAC7E9CBC9E9CAC9EACAC9EDCDCCECCCCAEBCCCAE9C9C7E6C9C7E3C6C5E4C7C6
+ E2C5C4433C3C433C3CE7CCCBE7CECE000000000000000000000000ECD2D0EDD4
+ D2EDD4D4EFD5D4F0D8D7EBD1D0F0D7D6EED6D5EFD7D6F0D9D7EDD6D6EDD6D5E2
+ CBCBDCC6C6E0C9C7E9D2D1E7D4D4E6D0D0E1CACBE6D0D0EED9D8EED8D8EED8D8
+ EDD9D8ECD6D5EDD7D7453E3E141313CAB7B6D9C3C39183830000000000000000
+ 00141313D5C2C1F0DBDBECD8D6E6D0D0ECD6D6EBD5D4EAD4D2ECD6D6EAD4D2ED
+ D8D7EAD6D5E9D4D2E6D1D0E2CDCCE5D1D0E3D0D0E4D0CFE7D2D1E3CFCFE2CECD
+ E6D2D2EAD7D6EBD7D6E7D4D4E9D5D4F0DEDCF4E0DFF5E1E0F3DFDFF3DFDEE5D1
+ D0F3E0DFE6D2D2EFDBDAE3CFCE0000000000000000E6D4D2DFCDCCE3D1D0F0DC
+ DCEEDCDBEEDBDAECD9D8E4D1D0EEDADAEBD8D6E1CFCEE7D5D4EBD7D7EBD7D6EB
+ D7D7EFDCDBEFDEDCF2DEDEEEDBDAECD9D8ECD8D8DBC7C6E6D1D0DEC7C6DEC7C6
+ DEC7C6DFCAC9E6D0D0DFC9C7DAC4C4DAC4C4DBC6C5786C6C5B5252E2CCCA2A25
+ 25000000433D3CE6CFCDE4CCCBE7CFCEECD4D1ECD2D1E9D0CFE4CCCCE3CBCAE3
+ CBCBDBC2C2D7BEBDD7BEBEDAC3C1D6BEBDDAC1C1D7BFBDDEC5C4E9CFCEE9CFCD
+ 938281000000DEC2C0EDD0D1E9CDCCE7CCCAEFD4D2F0D4D1E5CAC7EDD0D0EFD1
+ D0EBCDCCE6C9C6E1C3C2E5C7C52923235C4F4ED7B7B5C6ABA900000000000000
+ 0000000000EBCAC7EDCBC9EECBC9EAC7C5EAC7C5EBC7C5EFCBC9EDC9C6EBC7C5
+ EFCCCAECC7C4EDC7C4EEC9C6F0CAC7F0CBC9F7CFCDF4CDCBE3BDB9EEC7C4F2CA
+ C77D6867000000000000B395940000000000000000005F4F4EE2B9B7E6BDB9EB
+ C0BEE9BDBAEFC3C0EDC1BFE5B8B5E7BAB7EBBEBBEABBB9EBBDB9EEC0BEEFC1BF
+ EDC0BDEEBFBDECBAB8EAB7B4E9B4B2F0BBB8F0BAB7F0B9B7F0B9B74535340000
+ 00000000F2B4B2F2B3B0EEADA9EBA7A4E7A49FEBA6A2EFACA8F0ADA9EFB1ACEA
+ B1ACEAB6B2ECB1ABEEAAA6EDABA6EBADA8F2AEA8EFA39CEE9E99D18E8915100F
+ 473230F297919A635F000000000000150B0BDA827CF99D95F99289FB958CFCB0
+ A7FCA89EFC9C93FDA69CFE978DFE867CFEBDB2FF7F74FF7C72FFB4A9FF7F74FF
+ 8C82FFC7BDFFA298FF796EFEA297FEA298FDA59AFD786EFB9F96F9948BF98D84
+ FBB4AAFCB4ABDA817A150E0D150F0EF88E86DA7F79000000000000472F2DF794
+ 8EF79C96F7AAA4F2A7A2F6ADA8F5ADA8F4ADA8F4ADA8F2AAA5F0A6A1EEA59FF2
+ A7A2EBA19CE99F9BE49C98E59F9BE9ACA7E4B2ADE3BAB7987B78000000F2BBB8
+ F4BDB8473836000000000000000000947472EFBDBAF3C1BEF3C1BEEFBEBAEFC0
+ BBEEBFBDECBFBBF0C3C0EBC0BEEFC4C2F3C7C5F4C7C5F5C9C6151111635250F2
+ C6C3EFC3C12C2424000000000000000000CEACAAEDC7C5EDC7C5ECC6C5E7C3C2
+ E5C2C1E6C4C2E7C6C5EDCCCBEFCECEE7C9C6EFCFCEEFD0CFEECECDE9CBCAE7CA
+ C9EBCBCAEBCCCBECCCCBEBCBCAE9C9C7E3C5C4E7CBC9E5C9C7E0C4C3E4C7C642
+ 3B3B423B3BE6CCCBE7CDCD000000000000000000000000ECD2D1ECD2D1E6CDCC
+ E5CCCBE6CCCBDEC3C2E9CECCECD2D2EDD4D2EFD6D5F2D9D8F0D8D8E7CFCDEBD2
+ D2DFC7C7ECD5D4F2DBDAF2DADAE7D2D1E7D2D1EDD7D7E9D2D2EED8D7EDD8D8EA
+ D5D4443D3D141313D2C0C0EFDAD9938585000000000000000000141313C6B3B3
+ ECD8D6EDD9D8E6D1D1E6D0CFEED9D8EAD5D2E4CFCFEAD5D2E5D0D0E9D4D2EAD6
+ D5E9D4D2E6D1D0E1CBCBE6D2D1E2CECEE6D1D1E5D1D0E0CBCBD9C5C4DFCBCAE0
+ CCCBE5D1D0E9D5D4E7D4D2E7D4D2EDDAD9F3DFDEF8E4E3F5E0E0E9D5D4F0DCDC
+ F2DFDEF6E1E0F3E0DF0000000000000000F0DEDCE7D5D5E2D0CFE6D5D4E0CDCC
+ ECDAD9E9D7D6E2D0CEEBD8D7E7D4D4EAD8D7DFCCCCE1CDCDDFCCCAE3D0CFE1CD
+ CDECDADAEFDBDBECD9D9ECD9D8E5D1D0EBD6D5ECD6D5E3CDCCE9D2D1E9D2D1EF
+ D9D8EFD9D8E6D1CFEED9D7E6D0CFE2CCCBD0BDBD000000C4B1B08E807F000000
+ 000000E0C7C7D6BFBDE1C9C7E5CBCAEBD1D0EBD2D2EDD6D4EDD6D5EDD5D4EFD7
+ D6EAD0CFE9D0D0EAD0D0E7CECEE6CDCCDCC4C3E9D0CFEDD2D1ECD1CF60555500
+ 0000D6BBB9E3C9C7DBC0BFE2C5C4EDD0CFEBCECDE0C4C2EED1D0EDD0CFECCFCE
+ E6CAC9E7CBCACBB2B1000000AE9896D7B8B77161600000000000000000002C26
+ 25E9C7C5EECCCBEECDCCEFCDCBEDCAC7E9C5C4F0CECCEFCBC9EFCCCAEFCCCAED
+ C9C6EBC5C3EAC4C2F0CAC7F2CDCBF5CFCDF0CAC7E3BEBBF0CAC7EBC5C2D1B0AD
+ 000000000000000000000000000000000000D1ACAAE1B7B6EBC0BEEEC2C1EDC2
+ C0EFC5C2EFC4C2ECC2BFEBC0BDEDC0BEEDC1BEEDC0BEECBFBBE4B6B3E9B9B7ED
+ BBB9ECB9B6E2B0ACE0ACA9EAB6B2ECB7B4EEB9B6EEB8B5604948000000000000
+ 97706EEFB0ABEEADA9EFAEAAECABA7EAAAA7EDB1ACEFB7B3F2BEB9F0B8B4F0B3
+ AEF2B0ABF5B7B3F5B8B2F3ADA8F3A8A2F2A49FEFA9A4EFBBB5D2938C150E0D45
+ 2C2BD288839A5A56000000000000472E2CDA847DF79088F9A29AF9ADA5FB9B93
+ FBACA5FC9E96FD978DFD8076FD9B92FE847BFD867CFEB7ACFE867DFE8E84FEBA
+ B1FE9C93FE847AFEAEA5FDA398FD978DFD867DFCADA4FB9890F99288FB9B95DC
+ B0A8160F0E150D0CDA958EDA9690150C0C000000472F2DF2ACA6F2A49DF59993
+ F59B95F3A69FF5ABA6F5ADA8F5B1AAF6B3ADF5B1ABF2ACA8F5B0AAF4ACA8EFA8
+ A4EEA8A4EAA49FE6A29DE7A39FE9A6A2EEB2AD9A7A78000000EBBFBAF3C3C047
+ 383700000000000000000090706EE7B7B4ECBEB9EABAB8E5B6B4EDBEBBECBDB9
+ F0C1BFEDBFBDEABDBAEBBFBBEABEBAEFC4C2453939141110EBC1BFE7BEBB7D67
+ 650000000000000000007B6565ECC3C1EBC4C2EAC3C1E9C3C1E4BFBEE3C0BEE3
+ C0BEE3C1C1E7C5C4EFCFCDEACBCAEECFCDEFD0CFEFD0CFEDCECDEBCECCEDCECD
+ EFD0CEEECFCEEFD0CFEECFCEECCDCDEBCECDEACCCBE6C9C7E3C6C5443C3C443D
+ 3DEBD0CFE7CDCC000000000000000000000000EDD4D4F0D6D5ECD2D1EACFCDED
+ D1D1E0C5C5EBD0D0F2D9D7ECD2D1EAD0CFF3D9D8F4DBD9EDD5D2F3DADAF0D9D8
+ E9D2D1EAD2D1EED7D7E1C9C9E6CFCEEDD6D5E4CECDE9D2D4AE9E9E1412121411
+ 11C4B1B0E7D2D1968987000000000000000000151313D5C1C1EBD5D5EED9D9EF
+ DADAEBD5D5DCC6C5EDD8D7EBD5D4E2CDCBE4CFCEDCC9C7E2CFCEE9D4D2E7D1D0
+ E7D2D1E3CECEE6D1D1E1CDCCE3CFCEE2CDCDDAC5C5D9C6C4E3CFCFE1CECCE3CF
+ CEEBD6D6EFDCDAEBD7D6EAD6D5F2DEDCFBE5E4F9E4E3F6E1E0F9E5E4F6E2E1EE
+ DAD9ECD7D60000000000000000F0DEDCE7D5D4EDDBDAF0DFDEE9D7D6F0DFDEE7
+ D6D5E7D5D4F0DEDEEFDCDBECDAD9E4D2D1E0CDCBD8C5C4DBC9C7DCCACAE7D6D5
+ EDDBDAECD9D7E5D0CFE3CECDE9D2D2E7D1D1EED9D8E6D0CFE9D2D1F2DBDAF3DB
+ DBECD6D4ECD6D5EAD4D2E1CACAE7D1D07B6D6D433D3DE5CFCD423C3C00000079
+ 6C6CE7CFCEE5CDCCE6CECCE9D0CFEDD4D4EDD6D4EAD2D0EAD1CFEFD7D6ECD2D2
+ EBD2D1EBD1D1EAD0D0E6CCCCDEC4C3EBD1CFEDD1D0EACFCE2C2727000000E6CB
+ CBE6CBCBDCC1BFE6CBCAEED2D1ECCFCFDEC1C0E0C4C2EDCFCFEACDCCE1C5C3E6
+ CAC7786968000000E7CAC7E2C3C2413939000000000000000000433A39DFBEBB
+ EAC9C6EFCECCEECCCBEDCBC9EBC6C5EFCBCAEDCAC7EFCCCAEAC5C3E9C4C2E3C0
+ BDE7C2C0E9C4C1EBC5C3F3CECBECC6C4E2BDBAEBC5C3E3BEBBEAC4C244393900
+ 00000000000000000000002D2525F0C6C4E7BEBDE9BFBDEEC5C2EEC3C2F0C6C4
+ F0C6C4EBC1BFE5BAB8E6BAB8E6B9B7ECBEBBECBDB9E6B6B4EAB9B7EFBFBBF0BF
+ BBECBAB7E6B4B1EEB9B7ECB7B3EFB8B5EEB6B3987472000000000000453332EE
+ AEABEEB1ACF0B4B1F0B6B2EFB7B3F3BEBAF3BEB9F3B8B4F3B3AEF4B7B2F3B9B4
+ F5B6B2F4ADA8F2A9A3F4AAA4F3B2ACF4BFB9F4A8A3F5A29BD68E89150E0D150D
+ 0CD57C74D6817B150E0D000000150D0CD7867FF5B0A7F6A39AF89C94F9A69DFB
+ 9A93FC958CFC9890FC887FFC857CFB8D85FCA79DFD8B82FD9187FCB1A7FC988E
+ FD9389FCB9B1FB9A92FC978EFDA49AFC8E85FB9F97F89890DB817A160F0E1510
+ 10DA8C86D88681150F0F000000462927F2948DF3A49DF4B1AAF8ACA6F49C97F3
+ 9A94F7A9A5F7AEAAF8B3ACF8B4B0F7B5B0F6B5B0F7B5B1F7B5B1F6B3AEF5B1AC
+ F3B0ACF3B0ABF3B0ABF4B2ADF2B0AB9A706E000000E6B4B1EEC4C0463A390000
+ 00000000000000927270EEBEB9F2C2BFECBFBDE3B7B4E5B8B6E7BBB9F0C4C1EC
+ C0BEE2B6B4E6B9B7E4B8B5423636141010D1ADAAF2C7C4927876000000000000
+ 000000453B3AEBC4C3EFC9C6ECC5C3EEC7C5ECC5C5EEC7C6EFCBC9EEC9C7E5C2
+ C0E7C5C3F0CECCECCBCAEFCECCF0D0CEF0D0CFEFCFCEEACBCBEECFCEEFD1CFEE
+ CFCEEECFCEECCFCDEACCCBEACDCBEACCCBE7CAC9E2C4C3000000443D3CEDD1D1
+ E5CAC9000000000000000000000000CDB6B5EED5D4E9CFCEEBD0D1F3D8D7EBCF
+ CFE9CECDF0D7D5E2C7C6DAC1C0EDD2D2EDD2D2E4CCCBF2D9D9EFD8D7E6CDCDDF
+ C9C6DBC3C3D9C2C2E5CECDEDD5D5E1CAC95D53530000005D5454E4CECEE4CECE
+ 423C3C0000000000000000002C2828D5C1C1EFDAD9E0CBCAECD8D6EDD9D8E4CF
+ CED9C2C1E2CDCBE1CCCAE3CDCCE3CDCDD6C1C1DAC6C5E1CCCBE2CDCDE6D0D0E5
+ D1D0DFCBCADEC9C7E7D4D1EAD5D4E1CECDE5D1D0ECD8D7EDD9D8EBD7D6EFDBDA
+ F0DCDBF0DBDAECD7D6EEDAD9F8E3E2F9E4E3F4E0DFF8E4E3F2DFDEF8E3E2F2DF
+ DE0000000000000000ECD8D7EDDADAF2E0DFEDDADAE0CDCDF0DFDEE7D5D4ECD9
+ D8F0DEDCEEDBDBECDAD8ECDAD8E9D5D4DBC9C7E2CFCEDECBCAD8C6C5DBC7C6E3
+ CDCDDFCAC9E5CFCEEBD6D5E7D2D1F3DBDAEFDAD8E6D0CFE9D1D0F2DADAECD6D5
+ EFD9D8EFD9D8ECD5D5EDD7D6EED8D62C2827796C6CCDB8B7141313000000CFB8
+ B8ECD2D1E9CFCEE9D0CFEFD7D6EDD7D5E5CCCBE0C7C6EED6D6ECD2D2E6CDCCE3
+ CBCAE9D0CFE2C9C6EDD2D2EED4D4ECD1D0C7B0B0000000000000ECD0CEEACFCD
+ DCC1BFE5CAC7ECD0CFEDD2D0E4C9C6DFC2C0EACCCBE7CBCAE3C6C5E6C9C91411
+ 11433B3BE7CBC9E7CBCA0000000000000000000000005F5252E2C1BFEAC7C5EA
+ C9C6EAC9C6E5C3C1E4C1C0E5C3C1EBC7C5E7C4C2E5C1BFE5C1C0E4C1BEE0BBB9
+ E5C1BFEDCAC7F0CBC9EECAC9E6C2BFEAC3C1DFBAB8E5C0BE927A790000000000
+ 0000000000000099807EF0C7C5ECC2C0EBC2BFEEC4C2EFC7C4F0C7C5F0C6C4EF
+ C4C1EDC0BEEDC1BFE9BAB7E9BBB8ECBEBAEBBBB8EAB9B7E4B5B2ECBAB7ECB8B6
+ EEB9B7EBB5B2EAB4B0EFB7B3ECB2AEB58886000000000000000000D19D9AEFB6
+ B2EFB8B5EEBBB7EEBDB8F0B9B6F2B6B3F2B6B2F3B8B5F4BAB6F0B1ABEEA8A3EB
+ A59FEAA49EF3B6B0F3B9B4F4A9A4F3A39CF2A49DF4A59EF49A94472A28000000
+ 9B6662D28681472C2A000000150F0E9C6C66F79B94F8AAA2F79F98F99A92FB8E
+ 86FCB1A8FC867EFC867EFC988EFC9E95FC9188FC938AFBAAA2FB988EF99C94F9
+ A49BF8968CFB9E96FCA69DFB8078FBABA39D625D150D0C2E1D1CDAA39B9C706C
+ 000000000000644643F6A69EF5938CF39993F6A8A4F8B6B1F6ADA8F09E99F59D
+ 98EEA19BEDA8A3F2ADA9F0AEA9F3B2AEF5B6B1F6B7B2F5B6B2F2B2ADF0B0ABEF
+ AEAAF2B2ADF4B4B1F2B2AE463433000000EAADAAEEB7B4453737000000000000
+ 000000967976F0C1BFF3C3C0F0C2C0ECBFBDECC0BDEEC3C0F0C6C4F2C7C4EDC1
+ BFD5AEAC463A39141111D2ACAAF2C7C59A7F7E000000000000000000473C3BF0
+ CBC9ECC7C6F2CCCAEEC9C7F0CCCAEECAC7EECAC7EECAC9EDC9C7E6C2C1DEBAB8
+ E0BDBBDEBAB9E0BEBDE5C3C2E7C5C4E3C4C3DEBDBBE2C2C1EACBCAECCDCCEBCD
+ CCE9CBCAE7CAC9E4C7C6EACDCCE6CAC9DEC1C0000000443D3CEDD2D1EACECD00
+ 0000000000000000000000948382ECD2D0E5CBCBE4CBCAF0D7D6E7CECCE9CFCD
+ F3D8D8EDD2D1F2D9D7F3D9D7ECD2D1EAD1D1F3DAD9F3DAD9F0DAD8EDD6D6DFC7
+ C6DEC6C5EDD6D57E71701413132C2928B7A6A5EED8D8988A8915141300000000
+ 0000000000736868ECD7D6F3DCDCECD5D6DEC9C9E6D1D0ECD8D6E9D2D2DEC9C9
+ E6D0D0E2CDCCE5D0D0E2CDCCD8C3C2E3CFCEE5D0CFE1CBCBE4D0CEE6D1D1E5D0
+ CFDBC6C5E5D0D0E6D2D1DAC6C5E1CDCCE4CFCEE9D5D5E2CECDDFCAC9D5C1C0EB
+ D7D6DCC9C7E6D2D1DFCBCAE6D2D1EEDAD9F2DFDEEDD8D8F0DEDCE9D6D5000000
+ 0000000000E2CECEDAC7C7ECD8D8D2C0C0D0BFBEE6D5D4E6D4D2E6D4D2EDDADA
+ ECD9D8ECD9D8ECD9D8ECD8D8E0CCCBDFCBCAE0CCCCCFBDBDCDB8B6D9C4C3EAD5
+ D4EFD9D8ECD7D5E4CECEF3DBDBF2DBDAE6D1CFE5D0CEEFD9D8EFD9D8EDD6D6F0
+ DAD9EED9D8EBD5D4EED7D6D1BDBB141212968786CFB9B8141212141212D1BBBA
+ EDD4D2EFD7D7F2D9D8ECD4D2D1BAB8D1B9B8EFD8D6ECD2D2D4BBBAD2B9B8E5CD
+ CCD9BFBEEED4D2F2D7D6EFD6D5988786000000000000EFD5D2EDD0D1EACECDEA
+ CFCEEACECEEDD1D0EBCFCDECCFCFEFD1D1EBCECDEBCDCCAE9898000000948181
+ EBCCCB93817F00000000000000000000000094807FE7C7C5E9C7C5ECCBC9E9C6
+ C5E9C6C5EBC7C5EAC7C5EDCAC7EFCDCBEFCDCAEECBCAEDCAC7E7C3C1EECAC9EF
+ CBCAF0CDCAF0CBC9EFCBC9F0CCC9EDC7C5E9C3C1ECC6C4000000000000000000
+ 141111E5BDBBEBC3C1E3BBB9E4BBB9E3BAB8E5BBB9ECC2BFF0C5C3ECC0BEECBF
+ BDEDC1BEEDC0BEEEC0BDEEC0BDEFC0BDECBBB8DAA9A6E2B0ACF0BDBAE9B4B0DB
+ A6A3DCA5A2DFA6A3E0A5A2EEB4B10000000000000000007D605FEEBAB7EFBFBB
+ ECB8B4E9B2ADEDB2AEEDB4B0EDB5B1EAB0ABE7A8A4E9A6A1EAA6A1EAA8A3EBB3
+ ADEEB4AEF2A6A1F2A59FEA9D98E99B96F29A94F4948DF598929A6662150E0E46
+ 2C2BD886809C6864150F0F000000482E2CDA948CF79E96F99B94FB8A83FBACA4
+ FC8A82FB877FF99C95FD9890FC968DF89289F5A198F69B93F6A59CF5958CF69B
+ 93FBA69DF89B94DA807A482D2C000000643F3DF7958D64423F000000150F0E9D
+ 6460F8A9A3F9B0A9F7A69FF59791F7A19AF8AEA8F7B7B2F3ADA8F3A5A1EA9692
+ E79C97EAA6A2EBA9A4EEAEAAEBACA8EBADA9ECAEABE5A8A4E3A6A2E3A5A2E3A6
+ A3EAACA8EFB2AD463433000000EFB3B0F0B5B246353400000000000000000043
+ 3938EAC0BEF3C7C4F2C4C1EFC0BFEEC1BFEABFBDF2C6C4F0C6C4796362151211
+ 463B3AD6B1AEF0C6C4463A3A000000000000000000453939F6CECCF4CCCAEFCA
+ C9F3CECCEFCCCAF0CDCBEBC7C6E5C1C1E4C1BFE5C2C0E2C0BEDCB9B7DCBAB9E1
+ BEBBE2BFBEECC9C9ECCAC9ECCBCAE7C6C4EBCCCBEFD0CFF0D2D0F0D2D0F0D1D0
+ EACCCBEDCFCEEED0D0F0D4D2EBCECE000000453D3DEFD4D2ECD0CF0000000000
+ 00000000000000978786F2D8D7EFD5D5ECD2D0F3D8D8F0D6D5F2D8D7F4DAD9EE
+ D5D2F3D9D8F2D9D7DEC4C3E6CECDEBD2D2EFD7D7F0DAD8D6C0BF9F8D8D564C4C
+ 0000002D29299A8B8AF3DBDB9A8B8B2D2929000000000000000000453E3DB7A4
+ A2D1BBBADEC9C7F4DCDCF2DCDAEAD5D5E9D4D4EBD6D6E6D1D0E7D4D1E9D4D2E4
+ CFCFE6D1D0E5D0D0E0CBCAE4D0CFE4D0CEDFCAC9E3CECEE9D2D1E6D1D0D9C4C3
+ E6D1D1E5D1D0D7C3C2E0CBCBE0CCCCDCC7C6DCC9C7CFBBBBCDB8B8ECD8D7ECD8
+ D8D5C2C2CEBABAE7D4D2F0DFDEF2E0DFE5D1D0E3CECDDAC5C400000000000000
+ 00E6D2D2E5D2D1EAD7D6CEBBBACFBDBBE6D5D4E3D0CFE2CFCEECD8D8EBD8D7E6
+ D4D2EBD8D7EDDAD9E9D6D5E6D1D1DECBCACDB8B9CDB7B6D8C2C1E6D1D0E0CAC9
+ E3CDCCDAC5C4E9D1D0EED8D7DFC9C7E6D0CFEED8D7E7D1D0DEC7C6ECD5D5E7D1
+ D0EBD4D4ECD5D4ECD4D2C6B0AE443D3D453D3DCFB8B8443D3D1413127B6D6CED
+ D6D5F0D8D8E5CECDD1B8B7D1B8B7EFD7D6ECD2D2D2BAB8D2B9B8DCC3C3DAC0BF
+ EDD1D0F0D7D57C6E6D141312000000000000EED4D1EDD2D1EDD2D1EDD1D0EDD2
+ D0ECD0D0E7CBCAECCFCFEFD2D1EBCECCEBCECD443C3C000000CBB2B0E4C6C55A
+ 4E4E000000000000000000000000948180E9C9C7E6C7C5E7C7C6E7C7C5EBCAC9
+ EACAC7ECCBC9EFCDCCEFCBCAE9C6C4EFCCCAEFCBCAE6C3C1EECAC7EBC6C5EECB
+ C9EDC9C6EDC7C5EEC9C7EAC4C3E5BFBEE7C3C0453B3A0000000000005F4F4EE9
+ C2C0EAC3C1E3BBB8E0B6B5E1B8B5E5B9B8EEC3C1F0C4C1E5B8B6E9BBB8EDC0BD
+ F2C3C1F2C4C1E5B6B3F0C0BEEAB8B5D8A5A2DCA9A6EAB5B2E7B2AEE2ABA8EDB5
+ B1EFB6B3DFA6A4E1A8A5000000000000000000151110F2C0BDF0BBB8F2B9B5EF
+ B7B4F2BBB8F2BBB7F3B7B3F4B4AEF3B1ADF2B0AAF0B3ADF0BDB7F0B4AEF2A7A3
+ F2A7A2F2A8A3E99E98E99590EF948EF49A94F5A39CF4A59ED78C86623D3B0000
+ 00644744D8958E7F514E150F0E000000472C2BB9726CF5948CF49890F88D85F8
+ 877FF79F98FB958CFB9A93F7948BF6A198FBA79EF8B2A9F48B83F3A199BD7C75
+ 633D3A0000002D1A19B97E787F514E150E0D000000624542F4B7B1F7A7A1F89F
+ 99F9B0A9F7B0A9F7A59EF39993F7A59EF7B0AAF3B5B0F2AEA9ECA29CE69793EF
+ A49FF2AEABF6B6B2F6B7B3F5B8B4F6B9B5EBB0ACEBAEAAEBB0ACE2A8A4E4A9A5
+ EFB3B0463534000000F0B6B3F2B7B4463635000000000000000000453837F0C6
+ C4F3CDCAF0CAC6EAC1BEE9BEBBAD8C8A604E4E1410102B2322B49493E6BDBA7D
+ 6866151111000000000000000000796362E6BEBBF4CBC9F3CCC9EEC7C5F3CDCA
+ F2CDCBF3CECBEFCCCBEECBCAEECBCAEDCBC9F0CECDEECCCBEFCDCBF0CECDEDCB
+ CAF2D0CEF0CFCDEFCFCEECCCCAEACBCAEECFCEEFCFCDEED0CFEACBC9ECCECDEE
+ D0CFEDCFCFF0D4D1D0B7B6000000453D3DEFD5D4EDD2D1000000000000000000
+ 0000002C2727998887B6A3A1EDD5D4F2D8D7F0D6D5F3D9D8F2D8D6E3C9C9F0D8
+ D6EBD1D0E5CCCCD0BABA9989897E7170463F3F000000272222564D4CD0B9B9B9
+ A7A6635A59151313000000000000000000463F3FB7A6A5E6CFCED0B9B8CFB9B8
+ E6CFCFF4DEDEF3DCDAECD6D6E3CFCEE9D2D2E7D1D0E6D1D1E7D2D1E2CDCCE6D0
+ D0E5D0D0DAC6C5DCC9C7E1CCCBDAC6C5E0CAC9E4CFCDE4CECCD6C1C0E5D1D0E5
+ D1D0D9C6C5E2CECDE5D0D0EED9D9EFDAD9CEBABACEBBBAEAD7D7ECD9D9D4C1C0
+ CEBBBBEBD8D8EFDCDCF4E2E1F2E0DFF3E0DFF2DEDC0000000000000000EBD8D7
+ E6D4D2E6D4D2D2BFBECEBABAECD8D8E7D6D5EAD7D6E7D6D5E7D5D5E2CECDE5D1
+ D1E9D5D4EDD9D8E7D5D4E0CDCCCEBAB9CDB7B6E1CCCAF2DCDBF0DAD9D8C2C1D9
+ C4C3E2CCCBE6D0CEE1CAC9EBD5D4EED8D7E9D2D0DAC4C2E3CDCCEBD5D4E3CDCC
+ E7D0CFE6CFCEDAC1C0D8C0BE786B6A1411116E62619F8D8C2823232A25257C6F
+ 6FCAB6B5D0B8B8D1B8B7EFD7D5E7D0CED2B9B9D1B9B7B9A4A38B7B7A443D3D00
+ 0000000000000000000000000000DFC4C3DCC1C0DFC4C3E5CBCAECD0CFEBD0CE
+ E2C5C4DCC0BFDCC1BFEACDCCB09A990000002B2525E2C4C3E0C2C11310100000
+ 000000000000000000005E5251C2A6A6DABBBBE4C4C2EAC9C7E9C6C5DEBDBBE4
+ C2C0E9C6C4E5C1BFD8B5B3D7B5B3DAB7B5D8B6B5DEBAB9E0BEBBE0BDBADEB9B7
+ DEB9B7E5C0BEE7C3C1DCB8B7DFBAB8917A79000000000000CFAEACEFC7C6EFC7
+ C5EAC1BEEABFBDEBC1BEEDC2C0EFC3C2E9BEBAEABEBBEDC1BFEABEBAE7B8B5E4
+ B5B2DCADAAEBBAB7E2B0ADD7A4A1DCA8A5E4AEABE3ACAAE7B1ADE5B0ADE2ACA8
+ DEAAA6DEAAA7140F0F000000000000000000987674EFB8B4E9B3B0E6B2AEE9B3
+ B0E9ADAAF0B2AEF2B3AEF2B1ACEFB4B0E9B7B3EDAEAAEAA29CEBA39DEDA5A1F0
+ A8A2E99994E7908AED9591EF9E99EEA29CEE9D97F09A95ED9892D2908A614441
+ 00000063413EB9817B98635E462C2B000000150F0E472A279C5B569A5853F3A1
+ 98F99189FB9D96F89790F7A1989E6C689C6C68462724150F0E150E0D63403DBA
+ 7D78804A46150F0E000000623F3DD4847EEF9E98EEB4ADF5B1A9F9A7A2F8A59E
+ F2ABA6ECA7A2ED9C97EF9B95F2A29DECA6A1EFB3ADEBAAA5E6A19CEDA19CF3A9
+ A4F3B0ABF4B4B0F6B8B4F7BAB6F7BBB7F6BBB7F5BAB7E1A8A4AB807E95706E14
+ 0F0F0000009874729874722B2120000000000000000000000000000000000000
+ 0000000000002B23234238377D6766D1ACAA987D7B614F4E14100F0000000000
+ 000000005E4E4DCEABA9E7C0BEE7C1BFF4CDCAECC6C4DFB8B6EAC3C1ECC6C4EB
+ C5C4EDC7C7EFCCCBEECBCAE4C3C1E1BFBEDFBEBBE2C1C0ECCBCAECCBCAEACAC9
+ E3C2C1EBCBCAE2C3C2DEBEBEE3C4C3E5C5C4E9CAC9DBBDBBDEBFBFE7CAC9EACC
+ CBE9CCCB5A4F4E000000453D3DEFD4D2ECCFCE00000000000000000000000000
+ 0000000000000000000000000000131111403939423C3B453D3D151313000000
+ 0000002C2828453E3E7E71717F72718A7B7B6C5F5F3F38380000000000000000
+ 00000000292424736868CCB8B8F2DADAF4DCDBF2D9D8D4BEBBCFB9B8E3CDCBED
+ D7D6ECD5D5DCC6C5D6C1C0DBC4C4D6C1C0D9C4C3E5D0D0E2CCCBDFCACAD7C2C1
+ D5C0C0DAC5C5E0CAC9DCC7C5E4CECDE0CAC9D7C1C0D6C0C0E6D1D0E5D1D0D7C3
+ C2D6C1C1D7C3C2E7D4D2E6D1D1D0BEBDCFBEBDEBD8D8EAD7D7D5C2C1CEBBBBD9
+ C6C6F0DFDEF4E2E1EDD8D8DECBCAD6C3C10000000000000000E6D4D2E6D4D2E9
+ D6D5CFBDBBCEBABAE3D0CFE0CDCBD4C0BFCEBABAD1BFBED4C0C0D4C0C0D5C2C1
+ E6D1D0E2CFCED6C2C1CDB7B6CDB7B6DEC7C6F2DCDBDFCAC9CDB7B6D0BBBADAC5
+ C4D5C0BED8C1C0E6D0CFEAD5D4D1BDBDCFB9B9D1BBB9E6D0CFE7D1D0E9D1D0E1
+ C7C7CDB5B3CDB5B3D6BFBDCDB8B6564C4C121010544B4B8576768D7F7E433D3C
+ 554B4B3D3635453D3D433D3C3D36360000000000000000000000000000000000
+ 00000000000000000000D2B9B8D5BAB9D6BAB9D6BBBADFC5C3B09B9B8E7D7D3D
+ 3636282222000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000423A39433A3A5D4F4E947F7D9882
+ 81CCAEACD5B3B1D6B3B2DEBAB9DEBAB9DFBAB9E3C0BED9B7B4D7B4B3DEBAB8EE
+ CBC9E3C0BED8B5B3D8B4B3E2BEBA0000002C2424EBC4C2EDC5C3ECC3C1EBC2C0
+ E3B9B7E4BAB8E7BEBADBB2B0D7ACAAD9ADABDBB0ACD9ABA9D8A9A7D8A9A6DBAA
+ A8F0BFBBE7B5B2BE918D906D6C9572705B4545403231403231140F0F00000000
+ 00000000000000000000000000000000000000002A2120423231765957906A67
+ E6A9A5EFB3AEF0B9B5E6B5B1E5A9A4E9A39EE6A29CE49F9AE59F9AEC9E9AEB95
+ 90E6938EEA9994EBA29BE99B96EA9792EE9A94EC9E98EBA9A3EBA39CD087827F
+ 58552D1F1D140D0D613D3B9D5E599A706C613734462926150C0B000000000000
+ 000000000000000000150F0E462F2D7D47447D5A567E504C482F2D0000002D1D
+ 1C7E4E4AD28E88ED9993ED9791ED9791EBA39DECB6B0F8B1AAF8A7A1EA9D97E9
+ A59FEBA9A3EC9D98E69590E69A95EEABA6EAAEA9E5A7A2E7A49FE99F9BE69E9A
+ E3A19CD29D989C767380605E453533140F0F0000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000002A212041
+ 3534403535403736141111000000000000000000130F0F403434766261C4A29F
+ DBB4B2DAB5B2E3BEBBE4BFBDEBC4C2D8B3B0D6B0AEDAB5B3E6C1C0EEC9C6ECC7
+ C5EDC9C7F0CDCBDFBDBAD9B7B6D9B7B6DEBDBBEECECCE0C0BFD8B9B8DBBBBAEE
+ CECDE5C6C5D9BBBADCBDBD927E7D8A7676574A4A3E36352A2323000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000001310103D3636403938453D3D443D3D413B3B2B
+ 26260000000000000000000000000000000000003E38385F5555847474D1B9B9
+ D2BDBAD5BEBDD8C2C2EDD6D5EED6D6E3CBCAD0BAB9CFB9B8D6C0BFE2CCCADCC7
+ C5D1BDBBD1BAB9D4BEBBD2BABAD4BFBEE4CFCEDBC6C5D2BBBACEB8B7CEB7B6D9
+ C3C2E0CAC7D9C2C1DBC6C5CEB8B7CDB7B5CFB9B8E2CCCBE4CFCDCEBABACEB9BA
+ CEBABAEAD7D6EBD8D8D1C0C0CFBEBDE6D4D2DECCCCD5C2C1CEBBBACEBBBAD5C3
+ C2DBC7C6CFBBBACAB7B6CDBAB90000000000000000ECD8D8EAD7D6D9C6C5CEBA
+ BACEBABAD9C6C5ECD8D8D5C1C1CEBABADCC9C7DECBCAE5D1D1DCC9C7E5D0D0E6
+ D2D2D2BEBDCDB7B6CDB7B6D1BBBAEBD5D4D2BDBBCDB7B6D5BFBFF0DAD9EAD4D2
+ D6C0BFD5BFBED9C3C3CFB9B9CFB9B9D0BAB9E6D0D0EAD4D2E4CECCD4BAB9CDB5
+ B3CEB5B4D9C0BFECD2D1DFC6C5D2BBB9847675564D4D403A391412123D36363D
+ 3635463F3E000000000000000000141111453D3D453D3D3E38373D3636413A3A
+ 443D3D000000D6BBBAE2C7C5E4CACAE0C5C5C4ADAC928180897A798775758776
+ 75897876907E7D917F7F877574877675917F7E8B7B798775748774738D7B7A92
+ 7F7E8976758773728773728774738C79788D7A79927D7C957F7D957F7E917B79
+ BA9D9CD7B6B4EBCAC7ECCAC7E4C3C2E0BEBBDEBAB9D7B5B4DEBBB9E6C3C2DAB7
+ B6D9B5B4E0BAB9ECC7C5453A3A937B79EDC5C3F0C9C6ECC5C2EAC1C0E9C0BEED
+ C4C1EDC4C1DAB1ADD8ADAAE3B7B5EDC0BEE0B1AED8A9A7D8A8A6E9B8B5F3C0BE
+ B58D8C8A6A6892716F9878768B6C6A8B6C6A8B6E6C8D716F947875967B799676
+ 749776759776749878759474728E6E6C906D6A946E6C96706E926C6AAC827FEB
+ B8B4EBB9B5E5AAA6E7A6A1EFACA7EEACA7E4A29CE69C98F09D99EC9B95E69893
+ EDA59FEFA49EEB9C96E99691EB9D97EEA9A3EEA9A3EB9D98ED9E98F2A9A3ED9E
+ 97D187829B635F472C2B140E0D000000482B29482D2B2C1F1D00000000000000
+ 00002C1C1A45322F150E0E0000002E201F482F2D9C6A66D98C86F7ADA7F48E88
+ EDA59EEC9B95F5A49DF69F99EC9D97E9A9A3F0B5AEF5AAA5E79792EDA59FF6B4
+ AEF6B4B0E69894E59792F0A6A1E7A6A2E4AAA6ECADA9EEADA9F4AEA9C7898591
+ 666497706E906A688E6A688E6B68926E6C93706E98767499787593716F997875
+ 906E6B8D6B6992706E9A787598767492706E8D6D6B8C6C6A9372709475749173
+ 728C72708D7574907B79AC9392DEB9B7DCB7B6E5BEBDEEC6C4E1B8B7DBB3B1DB
+ B4B3EFC9C6E9C3C1EAC4C3D7B2B0D6B0AEDAB6B4EBC6C4F4CFCDEFCCCAEEC9C7
+ F0CDCBECC9C6DEBBBAD8B7B4E2C0BFEDCDCCDEBEBBDBBBBAECCDCBEFD1CFDBBE
+ BDD9BDBB9683839884838E7B7B887574897676907D7C8D7B7B88757489767592
+ 7F7F938181968484907F7E9887869987878B7A79877676938281998887958484
+ 8779788E7F7E9888879483838676758676759685859887879485859080808B7D
+ 7C938483938382D4BBBAD2BBB9D5BDBDE0C7C6F3DBDAD0B8B8D4BDBBD8C1C0E6
+ D0CEE6CFCEF6DEDCF6DEDCE3CCCBCFB9B8D0BAB9DAC4C2ECD4D4E1CBCBD0BAB9
+ D5BEBDE3CBCADCC6C4DCC6C5E6D0CFE5CFCECFB8B7CDB7B4CCB6B4D9C2C1E3CD
+ CCDAC5C4D5C0BFCDB8B7CDB7B6CEB8B7DAC5C4DFC9C7CFBAB9CCB7B5D4BFBFED
+ D9D9EDD9D9D4C1C0CFBEBDEBD8D8EBD8D7D5C2C1CCB8B7D9C5C4F0DEDCF0DCDB
+ DAC6C5CAB7B6DCC9C70000000000000000E6D5D4E3D0CFD2C0C0D2BFBED5C2C1
+ D2C0C0E3D0CFD7C3C2D5C2C1DBC7C6D8C3C3EFDCDBEFDCDBE7D4D2E7D2D2D0BD
+ BBD7C2C1D6C1C0D1BDBBECD6D5E1CBCACFBAB9D8C2C1F0DAD9F3DCDBE5D0CEE7
+ D1D0DFC9C7D0BBBAD8C2C1D2BBBAE4CECEF0DAD8F0DAD8D5BDBACFB7B5D6BFBD
+ D4BBB9ECD2D1E9D1D0D9C2C1D0BAB9E6CFCFE9D0D0EDD6D4D2BABAD2BAB8F2D9
+ D8EDD5D4D4BDBAD1B9B7EBD2D0ECD2D2EED4D2E4CBCAD2B8B8E7CECDECD1CFDC
+ C3C2D6BEBDE5CBCBE7CDCCE6CCCBE5CBCAEACFCED7BDBBD6BAB9D9C0BED7BDBB
+ E6CBC9E5CAC9D6B9B8D7BBBAE4C7C6DEC2C0D8BDBAD5B8B6E1C3C2E5C7C6D7B9
+ B8D5B7B6D8B9B7D5B7B6D8B9B7DBBDBAE7C6C4EECCCAEECCCCEBCAC9D6B6B5D8
+ B6B5E9C7C6EDCBCBECCBC9E2C1BFE3C1BFD7B5B3D9B7B5DAB7B6DEB9B8E4C0BD
+ EAC4C4EDC7C6EEC7C6DEB7B5EAC2C1ECC5C3ECC4C2E5BEBAE6BFBBE9C0BDEDC3
+ C1DBB2B0D9ADABEFC3C1F0C3C1EDBFBBDBACAADAABA8E5B5B2F0BFBBEDBBB9DA
+ AAA7E7B6B3EFBFBBDAAAA7DCAEABE3B7B4E5B9B7EABBB8EDBBB9E7B5B2EAB9B6
+ EBBAB7EBBBB8E3B1ADE2ACA9E4ABA8EAB1AEEBB2AEE7B2ADE4B4B0EAB7B3E9AD
+ A9E6A5A2E9A9A5ECACA8EEACA8E59E9AE79A96EEA19BEB9E99E69F9AEFA7A2EF
+ A39DED9E98E79A95E9A29CF2AEA9F0A9A4EA9A94EBA49DEBA29BED9D97F6A39C
+ F69B95F7A69FEC9791ED8E88F7958D9E6661986A66965450996460965E5A9760
+ 5CBB8A85F5A69FF8A19AF8A59EF7A8A2F4A59DF5A29BF7ACA5F29590EB9993EB
+ 9F99F8A7A2F4A39CEF9D98E79F99EDB5B0F0B1ABE79E98EC9E9AF4B0AAF7B7B2
+ E6A59FE69B96F0A59FE79F9BE4A49FEFB7B3EEB2ADF5B6B2E4A19CE39D99E7A6
+ A3E2A7A3E4AAA7EDB5B2F3BAB8ECB7B3EEB9B6EFBAB7E7B5B1EFBDB9EBB7B4E0
+ ADAAE9B5B2F3BFBBF4C0BDF4C0BDE2AEACDEABA8F2BFBDEFBEBBF0BFBEDFB0AD
+ E0B4B2EFC6C4EEC9C6DEBBB9DEBBB9EBC7C6EDC9C7EBC5C3DAB5B4E1B9B7EFC7
+ C6EDC7C5E3BEBDD8B3B2DFBAB7D8B5B2E4C1C0F2CFCDEFCDCBEECBCAEAC7C5E2
+ C0BFDEB9B8D7B5B3D9B8B6DBBBB9DEBDBBEBCBCAE9CAC9EECECDD9BDBBD9BDBD
+ EED1D0EFD1D0EED0CED7B9B8E1C4C3E4C6C6E9CCCAD7B9B8DBBFBEE9CCCBEACE
+ CDEDD0D0DCC1C1EED4D2EFD4D4D8BDBDD6BBBAEACECDEBCFCFDFC4C3D6BDBDEA
+ CFCEF0D6D6F3D8D7D6BBBAD4BAB9E6CDCBF2D8D7EFD8D6F2D9D8F0D8D6ECD4D4
+ D6BFBED5BDBBD9C1C0D5BDBDDEC6C5EFD8D7DCC5C5D5BEBDD9C3C2ECD4D2F3DB
+ D9F9E1E0F8E0DFD7BFBED6BFBED4BDBDD5BEBEE4CECDE6D0D0D5BFBDD6BFBEE3
+ CCCAE2CBCAE4CECDE7D1CFE3CBCACFB8B7D4BEBBCFB8B7D4BEBDE6D0CFDEC7C6
+ D1BBBACEB8B7D2BEBBCEB8B7E6D0CFE7D1D0D5C0BECBB5B4D9C5C3DAC6C5ECD7
+ D7D2C0BFCEBABAEBD8D7EDDAD9D5C1C0CBB7B6F2DFDEF7E3E2F0DCDBE1CECDCA
+ B7B6E9D6D50000000000000000EEDADAD9C6C5D0BEBDE2D0CFE5D1D0CFBDBBD2
+ BFBEDAC6C5D8C4C4D8C4C3D5C2C1E5D1D1F0DCDBEDD9D8DAC5C4CEB9B9F0DBDA
+ F2DBDACEB8B9E9D2D1EDD7D7D1BBBAD8C2C1ECD6D6EED7D6DCC7C5E9D2D1D2BE
+ BDD1BDBBE2CCCAD8C2C1D7C1C0ECD6D6E3CCCACEB6B5D6BFBDE4CDCCD4BDBBDF
+ C7C7E3CCCCD6C1C0D4BDBDE4CECDE7D0D0EAD2D1D4BDBBD1BAB8E4CCCBE1C9C6
+ D2BBB9D2B9B7D9C0BEDFC6C4E4CCCAD7BEBDD2B8B8E0C6C5E7CDCDDAC1C0D6BB
+ BBDEC4C3DFC5C4DCC2C0E4CAC9EACFCED5BAB9DCC1C1E7CDCBD9BFBEE5CACAE6
+ CBCAD6BAB9DABFBEE6CBC9E4C9C6D9BDBDD7B9B8E3C6C4E7CAC7D6B8B6D9BAB9
+ E6C7C6DABBB9DBBDBAE2C2C1EACAC7EECDCBEECECCEECCCCD9B8B7D7B6B5E7C6
+ C4EAC9C6EFCECCEFCDCBEAC7C5D7B4B3DAB7B5D9B5B4DCB7B6E6C2C0E7C3C1EE
+ CAC7ECC6C4DAB5B4E0B9B7EAC3C2ECC5C2E6BDBBE6BFBBE1B8B5ECC2BFDBB1AE
+ D9ACAAEBBEBBEEC1BFE6B7B5D9AAA8D9AAA8DCADABE6B7B4E3B5B2DAACA9E0B3
+ B1E1B5B2DAAEABE3B8B5EABBB8EEBFBBECBBB8E4B5B3E9BAB7EDBFBDEFC0BDEF
+ BDBAE7B2B0E2ACA8E3ACA9EDB5B3EDB9B6ECBDB9E5B1ADEAAEABEBADA9E5A7A4
+ ECAEAAEDADA9EDA9A5E59995E69B96F0A6A1EBA6A1E6A29DEFA7A3F3A6A1F2A4
+ 9EE69E99E9A8A3F2ADA7EDA49DE79C97ECA7A1EA9F99EE9E98F6A49EF79C96F8
+ B3ACEB918AEB918AF79790F9A69EEDA8A2EB857FED9C96EC968EF09A94F6B8B2
+ F5A59DF4A49CEE9892F3A8A2F3A39CF6A8A2F8A9A4F5A49DEA918AEAA49DF6A8
+ A3F6A8A2F0A19AE79A95F0AEA9F2BBB5E6A59FECA49EF5ACA7F7B6B1E6A6A2E6
+ A49EF7ACA7E79E9AE39E9AEBACA8EBB3B0F6BBB7E4A8A4E2A29DE39F9CE3A39E
+ F4B8B4F5BDB8F5BEB9F2BAB7F3BEBBF3BFBBEAB6B3ECB9B6E7B5B3E0AEABE4B3
+ B0F0BEBBF3C0BEF3C1BEE3B1AEDEABA9F0BFBDEEBEBBEBBDB9DFB1ADE0B2B0EB
+ BEBBECC1BFDFB6B4DEB8B6E7C4C2E6C6C4E1BFBDDBB9B8E3C0BEEFCBC9EAC3C2
+ DBB5B3DEB8B6EEC7C6D9B5B4DEB9B8F4D1CFF4D1D0F3D1CFF3D0CEEFCDCCE0BE
+ BDD6B5B3D8B7B5D8B7B5DEBDBAEACAC9E9C9C6EECECDD9BBBAD9BDBBEDCFCEEF
+ D1D0E9CCCAD7BAB9E4C6C6E1C4C3E3C6C5D7BAB9DFC3C2EDD1D0EDD1D0EDD0CF
+ DEC3C2EDD1D1EFD5D4DBBEBED6BBBAE9CDCCECD1CFDFC4C3D6BDBBE2C6C6EACF
+ CFF2D7D6D5BAB9D4BAB9E9CFCEEFD6D5EDD4D2F0D7D7EFD6D5E1CAC7D4BBBAD6
+ BFBEDAC3C2D4BDBBD6BFBDE7D0CFE0C9C7DAC3C2E3CBCBD9C2C0EDD5D2FBE2E0
+ EED6D5CFB7B5ECD4D2DFC9C6D2BBBAE0CAC7ECD4D1DCC5C3DBC3C2E5CDCCE4CD
+ CCE6D0CFE7D1CFD4BEBDCEB7B6E0C9C7D4BEBDD0B9B9E5CECDDAC5C3CEB8B7CF
+ B9B8E1CBCAD2BDBAE1CAC9ECD7D5D2BDBBCCB6B5E0CCCCE4D0CFECD7D7D2C0BF
+ CCB8B7E5D2D1EFDBDAD2BFBECBB7B6DECBCAE6D2D2E5D2D1D7C4C3CAB7B6DCCA
+ C90000000000000000E2D0CFD0BEBDD0BEBDEDDAD9F0DFDECFBDBBCEBBBBD8C4
+ C4D2BFBEE2CECDDAC6C5D0BEBDE4D1D0DAC6C5CEBAB9CDB8B7F2DCDCF2DEDCCD
+ B7B6CDB7B6D6C0BFCFB8B8DFCAC9E7D1D0D0B9B8D8C2C1D9C4C4CFB9B9D2BFBD
+ EBD5D5D7C1C0D0BAB8E9D2D0D5BEBECFB7B6736767433D3D0000000000001311
+ 116E6363877979D6C2C1DEC6C6DCC6C5D4BEBDD5BEBDE5CCCC90807F27222200
+ 0000000000413A3AA69493D2B9B8D2B8B8DAC1C0E5CCCAD6BDBBD6BBBAE2C6C6
+ A59292564C4C0000000000002822228B7B7BE2C6C66E60602823230000000000
+ 001310104139394039393E36363E3736141111000000000000A6908EE6C7C6D6
+ B8B7D6B7B5DBBDBBE3C3C2E6C6C5E9C9C6E3C3C1D5B4B2D6B6B4E5C4C2D9B8B7
+ D8B7B5E1BFBEDAB8B5D7B4B2DFBAB8DAB6B5D6B2B0D9B4B3DFB9B7EEC7C6ECC7
+ C6E7C2C1E5BFBEEDC6C4EDC6C4ECC4C2EBC2BFE3B9B6E7BEBAD9AEABD8ACAAE1
+ B4B1EFC1BFE1B3B1DAADABDAADAAE0B3B1EABDBAE1B5B2DAAEACE2B7B5EAC1BE
+ DEB2B0E1B3B0E0B0ACE4B4B2E1B3B0E0B3B0E2B5B2E9BAB7EEBBB9EEB9B6E7B2
+ ADE3ACAAE3AEAAE9B7B4EBBFBBE5B2AEE4A9A6E6AAA6EBADAAE5A9A5E7ABA7EF
+ ACA8E9A19CE49A96E49C98EFAAA6EFADA8E5A19BE9A19BF3A7A2EDA49FE6A49E
+ EAA9A4F3ACA7E99C97E7A29CF2ABA5EEA29CE99B95EF9D97F7A19AF9B5AEEB91
+ 89EA918AF49791F7A7A2EBA59EEA8982F2A29BEF9993EF9A94F7BDB6F4A39DEC
+ A29BE9918AE9A49DEE9E98F3A8A2F6A59EF4B0A9EA8E88E79E98EFA59EF6A9A4
+ E99C96E69893EAA39DEFB6B1E6AEA8E7A5A1F3AAA5EDA8A4E4A7A2E4A7A3F7B4
+ B0EDA49FE39C98E6A49EF5B8B4F3BDB8E3AAA6E3AAA6E6A8A5E2A29DF0B1ADF5
+ B9B6F3BBB8EBB5B2F0BBB8F5C1BEF0BDBAEFBDB9E1B1ADDFADABE3B3B1E7B6B3
+ DFAEACE9B8B5E5B5B3DEACAAE2B2B0EBBAB7E3B4B2DEB1AEE2B4B2EABBBAECBF
+ BEDEB2B0DCB4B2E2BBB9EDC9C6DFBEBBDBBDBBE0BFBEEECCCADFBBB9D9B6B4E2
+ BEBBEFCAC7D8B3B2D5B1AEEECAC9F3CFCEEDCCCAF4D1CFE9C7C5D7B6B5D6B5B4
+ E6C5C4E5C5C3D7B7B5DFBEBDF0D0CFF0D0CFDCBEBBD9BDBAE1C1C1EDCECDDEC0
+ BFD7B9B8E0C3C2E9CDCCDABEBDD7BBBADBBFBEEED2D1EFD4D2EED5D4E3C9C9EC
+ D1D0EACFCFDABFBED7BDBBE1C6C6EED2D1E6CBCAD6BDBBDBC0BFEBD0CFE6CBCA
+ D4BAB8D6BBBAE7CDCCEDD2D1E7CECDEAD1D0E4CBCBD4BBBAD4BABAE7D0CFE7D0
+ CFD5BEBDD2BBBBDAC2C2D5BFBED8C1C0D9C3C2D1BAB9D1BAB9DEC4C3CEB5B4CE
+ B6B6ECD4D2DEC7C6CEB6B5CCB4B2DBC3C2CFB7B5D5BDBBE2CAC9CEB7B6D8C1BF
+ DAC3C2CDB6B4CFB8B6E6CFCED8C1C0CDB6B4E4CDCCDAC4C3CDB7B5D0BBBAE3CC
+ CBCFB9B7CDB6B5E3CDCCCDB8B6CDB7B6D0BDBBE0CCCCE0CCCBCEBBBACCB8B7EC
+ D7D6ECD8D8CCB8B7CBB7B6E1CECDDCCAC9DFCCCBCFBBBACAB7B6CEBAB9000000
+ 0000000000D2C1C1D0BEBDD0BEBDEDDADAEFDCDBD2C0BFCEBDBBD5C2C1D0BEBD
+ D2BFBED0BDBBCFBBBAD5C1C1D1BDBBCEB8B9CDB8B7E3CFCEEED9D8CEBAB9CEB8
+ B7D6C1C0CFB8B8D0BABAD2BDBDD1BBBAD7C1C0D1BEBBCFB9B9DBC6C4EAD5D4D5
+ C0BFCFB9B8DBC5C5D0BAB8D0BAB9E6D0CFE9D2D26E6363000000746969D7C3C2
+ D5BFBFDAC4C3DAC4C3D6C0BFD5BFBDDFC7C7E6CFCDDAC3C2D1BBB9000000433C
+ 3CEBD1D1DEC5C3D2B8B8D2B8B8E5CCCBE7CDCDD9C0BFD5BBBAD6BEBDD6BBBAD7
+ BEBB282323000000BAA4A3DCC3C1E1C6C5D7BDBBBDA6A5000000403939D6BABA
+ D7BBBAD8BDBAD7BAB9DCC0BEE0C3C1BDA4A33E3636292323E3C6C5D7B9B8D6B8
+ B7DABDBBE4C6C5E5C7C5E7C9C6E6C6C4D6B5B4D5B4B2D7B6B4D6B5B4D7B5B4D9
+ B7B5D9B7B5D5B3B1E9C6C3E1BEBAD6B2B0D6B2B0D7B3B1EAC5C2EBC6C5E7C2C0
+ E2BDBAECC4C3EAC2C0E9C0BEE1B8B5DEB4B2D9AEACD8ACABD8ACAAD9ADAAE3B6
+ B4DFB2B1DBB0ACDBB0ADDFB4B2DFB4B2DBB1AEDAB2B0ECC2BFEFC3C2ECBFBBE1
+ B1ADDEAEACDEB1ACDFB4B2E0B3B1E3B4B1E5B4B1ECB8B5EAB6B3E9B3B1E5B3B0
+ E3B4B1E3B7B4E4B1ADE3A9A6E3A9A6E5ABA8EDB2ADE6AAA6E5A6A3E7A29EE69F
+ 9BE39D98E4A19CF0B0ABF2AEAAE7A29CE59B97E69F9AE6A49EE7AAA5EFACA7F2
+ AAA5E79F9AE6A59EEEA6A1EA9E99E79B95E79590EB9D97F7ADA7F09893E9918A
+ E9918AEA9D97E99F99ED9089F8AAA4F6A29CEE9993EBB3ACE99994E9A39CE78E
+ 88ECABA6F4A59EF6ADA8F7A8A3F3ABA5EF9C97E99893E9A49EEA9F9AE69B97E6
+ 9A95E9A19AF5B3ADEBB7B2E5AAA5E6A39EE59E99E4A39EE3A8A4F4B8B4F2B0AB
+ E59E9AE29D99E3A29DE3A7A3E5B0ABECB5B1EFB6B2E2A6A2E5A6A3E9ABA8E4A9
+ A6E1ABA8E6B3AEF2BFBAECB8B5F0BEBBE4B3B1DEADABDFB0ADDFB0ADDEAEACE3
+ B5B2E2B4B2E0B1AEDEAEABDEAEACDEB0ADDEB1AEDFB2B0E1B4B2E1B4B2DCB1B0
+ DCB1B0DFB4B2E7BFBDDFB8B7DBB8B7E0C0BEE4C5C4DBBBBADAB8B6E5C4C2E7C5
+ C3D9B6B4D6B2B1E6C3C1EDC9C7E5C3C1EFCDCCE1BFBED8B6B5D6B6B5DFBFBDDF
+ C0BED6B6B4D6B6B5DCBDBBF2D1CFEDCECDD9BBBAD9BBBADEC0BFD9BBBBD7B9B8
+ E1C4C3E7CBCAD8BDBBD7BAB9DBBFBEE7CDCCE7CCCBE9CECEE1C6C6DFC4C4DAC0
+ C0D7BDBDD7BDBBD8BEBEE1C6C6ECD1D0E0C5C5D6BBBBD7BBBAD6BAB9D6BAB9DA
+ C0BFECD0CFEDD4D1EDD2D1E9D0CFD9C1C0D4BBBAD4BBBBECD2D2EED6D5E1C9C6
+ D2BBBADCC5C4D8C1C0D5BDBDD5BDBBD0B8B7D6BFBDDBC3C2D0B7B7CFB9B7E0C9
+ C6D4BAB9CEB6B5CBB3B2D5BEBDCEB6B5CFB7B5CFB7B6CDB6B5D2BBBACFB8B6CD
+ B6B4D4BEBDE6D0CFD7C1BFCDB6B4D5BFBECFB7B6CCB6B5D9C3C2E7D1D0CFB9B9
+ CBB6B4E5CFCECEB9B8CDB8B7D2BFBED5C2C1D2BFBECCB9B8CEB9B9DEC9C7D8C3
+ C2CBB6B5CBB6B5EEDAD9EFDBDADFCCCBCAB7B6CAB7B6DCC9C700000000000000
+ 00D9C6C6D6C3C3DECCCBE9D7D6ECDAD9D8C6C5DAC7C6E3D0CFE0CCCBE4D0CFDE
+ CBCAE3CFCEF0DBDAE6D2D1DFCAC9D6C1C0E7D2D1F0DBDAE7D1D1E3CECDDAC4C4
+ D9C4C3DAC4C4DEC7C6E3CECED9C2C2D7C1C0D9C4C3E2CCCBE3CFCDE5CFCFDEC9
+ C7E2CCCBD9C3C3E1CBCBE6D2D1E6D1D1928485000000928584E2CECEE3CECEE6
+ D2D1E0CBCBDFC7C7E4CECDEBD5D4E3CCCCE3CCCCD8C1C1000000443D3DEAD1D1
+ E7CFCFDBC3C1DBC3C2E7CECDE1C9C7E3CBCAE4CBCBE3CBCAE4CBCAE7CDCD423B
+ 3B000000E4CAC9E6CCCBE4CAC7E2C6C5E0C5C4000000413A39DFC3C1E3C6C6DE
+ C2C1DFC3C1E2C5C4E5C9C7E2C4C3DEC1C0141111E7CAC9E6C9C7E0C3C1E0C2C0
+ E5C7C6EACAC9EDCDCBE6C6C4E9C9C6E4C1C0DEBDBBDFBBBAEAC9C5E4C2C0E9C5
+ C3E1BEBBECC9C6E9C4C3E1BDBBE3BFBDE5C1C0EBC6C3EAC4C3E3BEBDE0BAB8E7
+ C0BEE2BBB8E0B8B5DEB4B1E1B7B4E0B5B3E1B5B2DFB3B0DFB5B2E7BEBAE6BDBA
+ E1B7B4EAC0BEEBC2C0E5BEBBE0B8B5E5BBB8EFC3C2F0C3C0F0C2BFF0C2C0EBBF
+ BBE9BEBAEABDBAEEBFBDEFBEBBEDBAB8EDBAB7EDB9B6ECB9B7EBBEBAEBBEBBEB
+ B7B4EAB1ADEBB1ADE7AEABEDB4B1EFB5B1EBADA9E7A4A1EFAAA7EFABA7ECA9A4
+ EBACA8EFAEAAF2AEAAF0AAA5ECA6A2EDA9A4ECADA9F2B4AEF3B0AAF0A8A3F2AE
+ A9EDAAA4EFA7A2EBA29CEDA29CF09C97F3ACA7F8A9A4F9A49DF49D97F39D98F5
+ AAA5EEA49DF29892F8ABA5F6A49EF6A39CF8C2BBF3A49DF7B5AEF8A19BF8B3AC
+ F6ABA5F8AEA9F8ADA7F6ACA7F5ABA6F59F9AF5B2ACF6AEAAF3ABA6ECA39EF3A8
+ A3F5B2ACF4B8B4F3BEB8EFB1ADEFABA7E7A29DECACA8ECB1ABE9AEAAEBA9A6E6
+ A29DE4A29DEBABA7ECB3AEEDB9B5F3BDB8EBB4B1E4AAA6E4A7A4E4A7A4E4ABA7
+ EFBAB6F3BFBBECB8B5F2C0BDF3C1BEE3B3B0ECBEBBEDBFBBEDBFBDEDBFBDE4B7
+ B4EABBB9EFC2C0E6B9B7E2B4B2E4B7B5EABEBBEABDBAEDC2C0EBC1C0E5BAB9E2
+ B8B6EEC3C1EDC4C2E3BAB9EDC9C6EBC7C7E3C2C1E9CAC7EFCFCEEECECCE4C4C2
+ E2C0BEF3D0CFEECCCAE5C2C1F2CFCDEDCCCBE0BFBDDBBBBADBBBBAE3C3C2E2C3
+ C2DFBFBEDFBFBEE9CAC9EDCECCE3C5C4E4C5C5E5C7C5EBCDCCE7C9C7E9CCCBEA
+ CDCCE5C9C7E3C6C5EDD1D1F0D4D2EDD0CFE7CDCDE4CAC9E3CACAE9CFCFE7CDCC
+ E1C7C7E0C5C4EACFCFECD2D0E6CDCCE6CDCBE9CECDE6CCCBE5CBCBE7CDCCE7CC
+ CBEFD6D5EED4D4EDD2D1E7CECDDFC6C5E7D0CEEDD4D4EDD5D4EDD6D4E3CACAF0
+ D9D8F0D9D8EED6D6E6CECDE3CBC9EBD2D1F0D8D7E9D0D0ECD5D5ECD5D5E0C7C5
+ D6BEBDDBC4C2EDD5D2E4CCCADCC5C3DCC5C3E0C9C6E3CBCAE0CAC7E1CAC7E6D0
+ CFE6D0CFE1CAC9D9C3C2E7D1D0E6D1CFE3CDCCE6D0CFEAD4D2E5CFCEE7D1D0EC
+ D6D5E0CCCAE1CDCBE9D6D5E0CCCBEBD7D6EDDAD9F2DFDEEBD7D6E7D4D2DECAC9
+ DCC9C7F4E1E0F7E3E2F2E0DFE1CDCCEDD8D8F8E4E30000000000000000DECCCB
+ DCCAC9E1CECEE6D6D5EAD8D7DFCCCCE6D5D4E9D6D5E9D6D5ECD8D8EAD6D5EEDA
+ D9F0DCDBF0DEDCF2DCDBEBD6D5F2DBDBF0DBDAECD7D7E1CCCBD6C0BFE1CBCAEE
+ D9D8F0DBDAF0DBDAEAD4D2EBD6D5EED8D7E9D4D2E9D4D2E7D2D1E7D2D1E6D2D0
+ E3CFCFE4D0CFE5D0D0E4D0CF918383000000928585E5D2D0E7D4D4E9D4D5DFCA
+ CAE2CDCCE9D4D2EAD4D4E6CFCEE9D2D1E3CDCC000000443D3DEAD2D2E7CFCEE1
+ CAC9DBC3C1E1C7C7DBC2C1DEC4C4E2CAC9E9D0CFEBD1D0EAD0CE423B3B000000
+ E7CECDE4C9C9E4CAC9E5CBCAE5CCCA000000413A39E3C9C6E5CAC9E2C6C5E0C3
+ C2DEC2C1E2C5C4E2C5C4DFC3C28E7D7CAA9594E4C7C6E4C7C6E1C2C1EACBCAEB
+ CCCAEDCCCAEECCCBF3D0CFF4D1CFF4D0CFEFCECCF0CFCDEFCCCBEECCCAEECBCA
+ EECAC9E6C3C1E3BFBDE9C4C2EDC9C5EEC7C6EBC6C4EBC5C3E9C1BFECC3C2ECC4
+ C2E1B8B5E2B9B6E6BDBAEAC1BEEAC0BDE9BFBDEBC1BFEEC4C2ECC4C2ECC4C2EE
+ C6C4EFC7C5EFC7C4F0C4C3F0C3C1F0C2C0F0C3C0ECC1BEECC1BFEBBFBBEDC0BD
+ E7B8B6EEBDBAEEBBBAEAB8B5E9B7B5E9B9B6EABFBBE6B9B6EAB7B4EBB3B0EDB5
+ B1EEB6B4EEB6B3EFB6B2EFB4B1EEADAAEDAAA6F0ADAAF0B0ABEDAEAAE7A8A5EE
+ ACA8F2ADA9F2ACA7F2AEAAF0B2ACEDB2ACF2B3AEF3AEA9EEA9A4F0B1ABF5B0AA
+ F5ADA8F3A9A3F7AAA5F8A7A2F7B9B4F8A6A1F9A69FF6A29CF6A49DF8B1AAEFA4
+ 9DF49D97FBADA7F3A39CF8A69FF8C3BDF6AAA4F9B6B0F9A7A1F4AAA5F0A9A4F5
+ AAA5F0A9A4EFA69FEDABA6F3A19BF3A9A4F5B2ADF5ACA8F0A9A5F5ACA7F4ACA9
+ EEAEA9F4BEB8F5BEB8F0B1ACE9A7A2F5B4B0F3B7B3EDB3B0F4BAB7F5B5B2F3AE
+ AAF6B5B2F6B7B3F2B8B5F4C1BEE5B1ACE5B0ACEFB7B4F3B9B6EFB4B1EEB6B3F6
+ C0BDF3BFBDF4C2BFF3C2BEE7B7B4F3C2BFF4C5C2F4C5C3F4C5C3EABDBAEEC2BF
+ F3C6C3F2C5C3EDC1BFEDC0BFEDC1BFEFC3C2F0C5C3F0C5C3EEC4C2EEC4C2EFC6
+ C4EDC3C2E7BFBDEEC5C3ECC5C4ECC7C5F0CECCEFCFCDEED0CEE7C9C6EECFCEF3
+ D2CFEECDCCE9C7C5F3D0CFF3D0CFF3D1CEF4D2D1EDCDCCF3D2D1F4D4D2EFCFCE
+ E1C2C0EECECDEECFCEE7CAC9E6C9C7E0C1C0E6C7C6EACCCBE7CAC9E9CCCAEDD0
+ CFE9CDCCEDD1D0EBCECEEBCFCFEACFCEE2C7C6E1C6C6ECD2D1EDD4D2EAD0CFE7
+ CECEEBD1D1EBD0D0EBD0CFEBD1D1ECD0D1EFD4D2EED2D2ECD0CEE4CAC7EDD1D0
+ E7CECCEFD5D4EFD6D5EFD6D5EFD7D6EED6D5EED5D5EED6D5F3D9D8F5DCDBF4DA
+ D9F5DBDAF5DADAF4DADAEED7D5F2D9D8F2D9D8EFD7D6EED7D5EACFCEE9CFCEEE
+ D6D5EED5D4EBD2D1E9D0CFE7D1CFE2CACAE2CACAE7D0CEE7D0CFE7D0D0E6CFCE
+ DBC5C4E1CAC9E9D1D0EBD5D4E2CCCBD8C1C0E9D1D0E7D1D0EBD5D4ECD7D6DAC6
+ C5EBD7D6ECD8D8E4D0CFECD8D8EFDBDAF3E1E0F0DEDCE7D4D2E7D4D4E6D5D5ED
+ DBDBF0E0DFE6D4D2D9C6C5F0DFDEF2E0DF0000000000000000ECD9D9ECDAD9E3
+ D0CFE6D2D1E7D6D5DECBCBE6D5D4E3D0CFDECAC9E9D6D5E9D5D4ECD6D5ECD7D7
+ EEDAD9EFDAD9EDD9D7F2DBDAF2DCDCF3DEDCF2DCDCEDD8D7EFDAD9F0DBDAF0DC
+ DAF2DCDAEDD7D6EED9D8EED9D8EBD6D5E7D4D2E7D2D1E5D1D0E6D2D1E6D2D1E5
+ D0D0E3CFCEE4CFCF918485000000928584E0CCCCE6D2D1E7D4D2E0CCCBE1CCCC
+ E5D0D0E6D0D0E5D0CEE6D0CFE2CCCB000000433D3CE9D1D0E6CECDE1C9C9DFC5
+ C5E5CDCDDFC6C6E1C7C7E6CDCCEAD0D0EBD1D0EACFCD423B3B000000E6CCCBE3
+ C9C9E4CACAE5CBCAE5CCCA000000413A3AE4CAC9E6CBCAE6CBCAE4CAC9E2C6C4
+ E6CBC9E5CAC9E3C7C6E4C9C7E4C7C6E6CAC9E2C3C2E1C2C1E9CAC9EECDCCEECE
+ CCF2D0CEF0CFCDF4D2D1F4D1CFF0CFCDE9C7C5E6C4C3E9C7C5EBC9C6EBC7C5E4
+ C1BFDFBBB8E0BAB9E9C3C1EBC6C3E9C2C0EAC3C0E5BFBDEDC5C4EEC4C4E9C0BE
+ E9C0BEEBC2C1EEC5C3EFC5C4EDC5C2EDC5C2EEC6C5EEC7C5EBC6C4EDC7C4EFC5
+ C4EFC5C3EFC3C2EBC0BEEDC2BFEFC4C2ECC2C0EDC1BEEEC1BDEFBFBDE4B5B3EB
+ BAB8ECBAB8E7B8B6E6B8B5E5BBB8E5B8B5E7B5B2EAB3B0E6B1ADEBB5B2EFB8B5
+ EFB7B4EEB5B1EFB1ACE7A7A4E9A8A4ECACA8EFB2ADECB0ABE6A8A4ECAAA6EFAA
+ A6EEACA8F2B2ADF2B7B3ECB0ABEFB0AAF3ACA8F2B1ABF2B1ABF6B2ACF6AEA9F4
+ ABA5F4A6A1F5A9A4F6B4AEF6A39DF8A8A3F8A49EF8A9A3FBB5AEF0A49DF39D98
+ F9B0A9ED9E99F2A19AF3BBB6EFA7A2F6B2ACF8AAA5F3A7A2F5B2ACF2A8A3F4AD
+ A9EDA39DF0ACA8EFA59FEFA19CEFB1ABF2AEA9F0ABA6F3ACA8EFA8A3F2B0AAF3
+ B8B3F5C4C0EEB5B1ECADA9F7B5B0F6B7B3EFB5B2F2B8B4F5BBB7F5B5B2F6B5B1
+ F6B6B3F0B5B1EBB4B0DFADA9E0AEAAEEBAB7EFB9B6E5ACA9EDB2B0F5BEBAF3BE
+ BBF5C2C0F3C1BEE7B7B4EEBFBAEDBFBBF2C3C0F2C5C3E3B7B5EDC1BFF3C7C4F0
+ C5C3EDC2C0ECC1C0ECC1C0EEC3C2F2C6C4F2C7C4F0C7C5EFC5C4EEC5C4EDC4C2
+ EAC1C0EDC5C4ECC5C3EEC5C4EFC9C6EFCCCAEECCCBE6C6C4EED0CDF3D5D2EFD1
+ CEDEBFBDE7C6C4EACAC7F0CFCEF0CFCEE2C1BFF0CFCEF2D1CFEBCBC9E1C1C0EB
+ CDCCE9CBC9E9CBCAEACDCCEACCCBE4C6C5DCC0BFD9BBBADABEBDE3C6C5E0C3C2
+ E2C7C6E4C9C7ECCFCFEBCFCFE3C9C7DFC4C3EBCFCFEDD2D1E9CECDE3C9C7E7CD
+ CCEAD0CEECD1D1EBCFCEEACFCEEFD5D2F3D7D6EFD2D0E6CBCAEDD1D0ECD0CFEF
+ D5D5EFD5D4EED5D4EFD6D5EED5D2ECD2D1EBD1CFEED6D5F3D9D8F3D9D8F3D9D9
+ F3D9D8F0D8D7ECD2D2EDD4D2F0D9D8EDD6D5EED6D5EAD0CEEDD4D2EED5D4EDD4
+ D2ECD4D2E7CFCFE9D0CFE3CCCBE3CCCAE7D0CFE7D0CFE6D0CFE7D1D0E2CCCAD8
+ C1C0DEC6C5EAD2D1E1CBCAD6C0BEE7D0D0E6D0CFE2CDCCE6D1D1D6C2C1EAD6D5
+ EDD9D8E4D0CFE7D4D2E6D2D2EFDCDBF2DFDEF0DEDCEAD8D7E6D5D5EFDCDCF0DF
+ DEE6D6D5D8C6C6EBD8D8E3D0D00000000000000000EEDCDBEEDBDAE7D6D5E9D7
+ D6E9D7D6E0CDCDEBD8D8E9D6D5DECBCAE7D4D2EDD7D6EDD7D7E9D5D4E7D5D2E7
+ D2D1E9D2D2F2DBDAF2DEDCEED9D8E9D5D4E4CFCEE2CCCCE3CECDE3CECDECD6D7
+ E3CFCDE9D4D2ECD7D6EBD6D6EAD6D5E7D4D4E3CFCFE5D1D0E5D1D0E6D2D1E6D2
+ D1E6D2D2928686000000948787E1CDCDE5D1D0E6D2D1E3CECEE5D0CFE7D2D2E9
+ D2D2E6D0CFE6D0CFE3CDCC000000433D3DE9D1D1E7D0D0E2CBCBDCC4C4E1CAC9
+ E1CBC9E1C9C7DBC2C2E1C7C6E5CDCBE6CCCB3F3838000000E1C6C5DBC2C1E3CA
+ C9E3C9C7E2C7C6000000413A3AE5CBCAE6CBCAE6CBCAE6CACAE6CAC9E6CBC9E5
+ C9C7E4C9C7E5C9C7E6CAC9E9CAC9E2C4C3E1C2C1EACAC7EACAC9F0D0CEEECCCB
+ EFCECCEBCAC7EECCCBEAC9C6DEBBBADEBBBAE4C2C0EAC6C5E9C5C3E6C3C1E1BB
+ BAE1BBB9E2BEBDE6C1C0E6C1BEE5BFBDDEB7B5EAC2C0EEC5C3E9C2BFE7C0BEE2
+ BBB8ECC3C2E6C0BEE3BEBAE3BEBAE1BEBAEBC4C2E5BFBBE9C0BFEDC4C2EBC0BE
+ ECC3C0E7BEBBE9C0BEE9BFBDE6BBB9E2B4B2ECBDB9EFBFBBE9B8B6ECBBB9EDBF
+ BDECC0BEECC2C0EBBDBAEBB8B5E9B5B2ECB6B3E7B2AEEBB5B2EEB8B5EFB6B4EF
+ B3B0EEB0ACEBACA8ECAEAAEFB3AEEFB5B2EDB0ABEAAAA6EFACA8EFAEAAEEAEAA
+ F3B7B3F3B8B4EFB3AEEFADA9F3B2ACEFB2ADEAA9A4F4AEAAF0AAA5F0A9A4F2A4
+ 9EF3ADA8EFA9A4F5A49EF8A9A3F5A29CF7ABA5FBB6B1EA9C97F5A49EF8B0AAF4
+ A7A2F3A49DF5BDB6F5AEA8F8B5AEF8ADA8EFA39DF7B7B2F7ADA8F6B2ABEBA49E
+ F2ACA7F0ADA8F0A19BF2ADA9F2B1ABF2ADA9F4B1ACF5B0ABF5B2ADF6B7B2F6C0
+ BBF2BEB9EAB0ABF4B6B2F6B5B1F5B8B4EFB7B4F3BAB7F3BAB6F5B6B3F4B5B1EF
+ B3AEECB2AEE0AAA6E0AEABE0AEAADEABA8E0ABA8E6B0ACF0B8B5EFB8B5F5C0BD
+ F3C1BEEBBAB7F4C4C2EEBFBDF0C1BFF2C4C1E3B8B6EDC1BFF0C6C4EDC3C1ECC2
+ C0ECC2C0E4BAB8E9BDBBEEC3C1EBC1C0EDC3C1ECC3C2EFC7C5EDC5C4E6BFBEEA
+ C3C1EBC4C2ECC4C3EEC6C4EEC9C6EECAC7EAC6C5EDCCC9F3D2D0F2D4D2EBCDCC
+ EED1CFEDCECDF2D2D1F2D2D0E3C4C2F2D1CFF4D2D0F3D2D0EBCBC9EFD0CFEDCD
+ CCECCDCDF0D2D0F2D4D2EBCECEEDD0CFE5C7C6DEC2C1E9CBCAEFD4D2EDD2D1EC
+ D0CFEDD2D1EDD2D1ECD1D1E7CCCCE7CDCDECD1D0EACECDE5CBCAD9BEBBDABFBE
+ EACDCCE6CBC9E3C6C5E9CDCCEDD0CFDCC0BFE2C6C4E9CDCCE2C6C5EAD0D0E9CF
+ CFE9CFCFECD2D1E7CFCDE6CDCCE2C9C7E4CBCBEED6D5EDD6D4EDD5D4EDD4D2EA
+ D1D0E2C9C9E6CECDE2CAC9EAD1D0E9D0CEE6CECDEAD0CEE6CFCEEAD1CEECD2D0
+ E5CECCE6CFCDDEC6C4DAC2C0DFC7C5E1C9C7E3CCCBE6CFCEE5CECDD6BFBEE1CB
+ C9E9D1D0E1CAC9D8C2C1EAD5D4E9D4D2EDD8D8E9D4D4D0BDBBE9D5D4EEDAD9E7
+ D4D2ECD9D8E7D6D6ECDAD9EFDCDBF0DFDEE9D6D6ECD9D9F3E1E1F4E2E2EEDCDB
+ EBD8D9F0DFDEE6D4D20000000000000000DECCCBECD9D9EBD8D8E6D2D2E1CECE
+ D5C3C3E5D2D1EBD8D7D9C5C5D5C1C0E1CCCAE7D2D1D8C3C2DCC9C7DEC9C7E1CC
+ CBE5CFCED7C2C1D6C1C0D2BEBDD4BFBFDEC9C7DCC7C6D5C1C0E5D0D0DBC7C6E2
+ CCCCE9D4D4E6D4D2E9D6D6E7D5D5E6D2D1E6D4D2E6D4D2E7D5D2EAD5D5E7D4D4
+ 938787000000938686E2CECEE4D0D0E6D2D1E3CECEE4CFCEE6D2D2E6D1D1E6D0
+ CFE6D0CFE6CECE000000433D3DE9D1D1EAD2D2E9D1D0E5CECCE6CECDE5CCCCE0
+ C6C6DEC5C4E2CACAE7CFCEE9CFCF413A3B000000E0C6C6DCC3C1E0C6C6E3CAC9
+ E3CAC9000000413A3AE2C7C7DCC3C2DCC3C2E1C5C3E3C9C7E5CAC9756867E2C7
+ C6E4C9C7E6CAC9E7CAC9E7CBC9E4C7C6E6C7C6EACAC9EBCBCAE7C7C6EDCDCCDE
+ BEBBEBCBC9EDCBCBE9C6C5E7C6C4EDCACAECC9C7ECCAC6ECC9C6E6C2C1E5C0BF
+ E4BFBEE9C3C1EBC6C4EBC5C4E7C1C0EDC6C3EBC6C3ECC6C4EAC4C2E4BFBDEBC6
+ C4E6C2C0E3BFBDE1BBBAE1BDBAEBC4C2E2BAB7E5BDB9E9C0BEE6BEBBECC3C1EA
+ C2C0EBC0BEEABEBBE6B9B7DEB1ADE0B2B0EBBBB9E5B7B4E5B9B6ECC1BFEBC3C0
+ EDC0BDEDBBB9EDB9B6ECB8B6EDB9B7EAB6B3ECB8B5EEB7B5EEB4B1EFB2B0EFB2
+ B0EEB1ADF0B5B3F0B7B4EFB5B1EEB2ADEBABA7EFAEABF0B2ADEBAEAAEFB7B4F2
+ B7B3F0B3AEF0AEAAF2B5B1ECB0AAF0B0AAF4B0AAF4AEA9F4ABA6F5A8A3F4B5B0
+ ECA49FF3A59FF3A59FF0A19BF7AEA9FBB8B3EA9D98F3A49EF3ABA6EDA39DEB9D
+ 98ECB4AEEAA8A3F2AEA9EFAAA5EA9C97F2B5B0F4AEAAEEAAA6E7A39EF0ABA6F4
+ B6B1F2A8A3F0A9A5EDB0ABF2B1ACF3B1ACEEABA7F4B0ABF3B4B0F3B8B4ECBBB6
+ E3AEABE6ACA8EEB2ACEDB0ABE6ADA9ECB5B2EAB4B1ECB4B1EEB3AEF2B5B2F0B5
+ B2EDB6B3EBB7B4EDBDB9EDBDB9EBB9B6EAB7B4EEB9B6F3BDB9F4BFBAF0BEBAF0
+ C0BDF4C4C2F4C5C2F4C6C3F3C5C3E9BDBAEDC2C1F2C7C5EFC6C3EFC6C4EFC6C4
+ EDC3C2EDC4C2EDC3C2EEC5C4EDC5C3EEC5C4EDC6C5EDC6C4EAC3C2ECC5C4EAC3
+ C2ECC4C4EAC4C3EEC9C6EEC9C7EAC4C3EAC6C3EFCDCCF2D0CFEBCCCBEED1CFF0
+ D5D2F0D4D2F0D4D2EBCDCCF0D2D0F2D2D0EDCECDE3C3C3F3D2D1EBCDCCDBBDBB
+ EDCECDF3D2D1EBCDCCEED2D0E6C9C7E3C7C6EACECDEDD1D0EDD1D0EED2D1EDD1
+ D1ECD0D0E9CECDE7CDCCECD1D0EFD5D2EFD4D1EDD0CFD9BDBAE7CAC9E7CBC9E5
+ CAC7D9BEBBE4CAC6E5CBC9DBBFBDD5BAB8D7BBBBDCC1C0E0C6C5DCC3C2E5CCCB
+ E6CDCDE3CBCADFC6C5DAC2C1DCC4C3E6CDCDE6CECDEDD6D5EED7D6E6CECDE3CB
+ CAE5CDCBD8C0BFE0C7C6E1C7C6DAC1C0E4CCCBD8BFBED7BEBEE2C9C7E4CBCAE4
+ CECBE3CCCBE0C9C7E3CBCADBC4C3DBC5C4E2CBCAE5CECDDBC4C3E4CFCEEAD4D2
+ DEC7C6DEC9C7E6D1D1E9D4D2E9D5D4E9D5D4CEB9B9DFCBCAEBD7D6E0CCCBE7D6
+ D6DBC9C9DFCCCCEDDBDAEEDBDBE6D2D2E7D6D5F2E0DFF3E1E0EAD8D7ECDAD9F3
+ E1E1E9D7D60000000000000000E6D5D4EFDEDCEFDBDAEDD9D9ECD9D8D8C5C4DE
+ CCCBE6D4D2E1CCCBD2BBBADAC3C1D7C1C0D4C0BFD8C4C3DAC5C5E0CBCBECD7D7
+ E9D5D4EDD9D7EDD9D8DEC9C7E9D4D2EDD9D8E1CBCBE2CECEE0CBCAE6D1D0DFCA
+ CADCC9C9E2D0CFE2CFCEE1CDCDDECACADFCBCAE1CDCCE5D1D1E7D4D492858500
+ 00008E8383DEC9C9E3CECEE4D0D1DEC9C9DBC6C5E3CECDE0CBCBE2CDCCE5CECD
+ E0C9C7000000423C3BE3CCCBE6CECEE7D0D0E6CFCEEBD2D1E9D0CFE7CFCEE7CE
+ CCE2CAC9E9CFCEE7CECD423B3B000000E1CAC9DFC6C5E2C9C9E4CBCAE2CAC900
+ 0000403939E3CAC9E0C5C4DCC2C2E0C4C3E1C5C4A99594141111E4C9C7E6CAC9
+ E4C9C7E6CAC9E9CCCBE9CBCAE3C5C4EECFCEEBCCCBEECFCDEECECCE9C9C6EDCC
+ CBEECCCBE9C7C6E4C2C1EDCBCAECCAC9ECC9C9ECC9C9EAC6C4E6C3C1E5C0BFE6
+ C2C0EBC6C5EAC5C4EAC5C3ECC6C5E9C4C2E9C4C3ECC7C5EAC5C4EBC7C6EAC6C4
+ EDC9C6EAC4C2E4BFBDEAC2BFDFB7B5E5BEBBEBC4C2E9C2C0EAC2C0ECC3C0EFC3
+ C2EEC1C0EDC1BFE9BBB8EBBDB9EEC1BFECC1BFEFC6C3EEC5C3EDC1BFECBBB9EA
+ B7B5E5B4B2E4B3B1EAB7B4E9B6B3ECB6B4EAB2AEE5ABA8EBB0ACECB0ADE6ADAA
+ EEB7B4EAB1ADEDB2AEEEB1ACEAABA7EBAEAAECB1ACEBB4B0EEB6B2F0B6B2EEB1
+ ABF0B2ADF4B8B5F3B5B1F5B4B0F6B4B0F5B2ADF4ABA7F7B1ABF7BDB7F0A6A2F5
+ A9A4EFA49EE99C98F7B2ACFBBBB6EEA39DEFA49EEFAAA5EAA29CEB9F9AE7AEAA
+ E9A9A4F5B3ADF6B5B0F0A49EF5B6B2F7B4B0F6B3ADF0B0AAF2ADA8F4B4B0F0AC
+ A7F0A7A3EAADA8EAACA8EFB0ABEAAAA7EDACA9EFB0AAEFB3AEF2BBB7EDBFBAEB
+ B6B3EEB6B2EDB1ADE4AAA7F0B9B6EDB9B5EDB9B6EDB6B3EAB0ACE9ADABF0B7B4
+ F2BAB7F0BDBAEFC1BEF0C1BFEEBFBBECBBB8EEBAB9F3BEBAEBB6B4ECBAB8ECBD
+ B9EFC2BFEFC2C1EBBFBEE3B7B5E5BBB9ECC2C1ECC3C2EFC6C4EDC5C4EDC6C4EA
+ C3C1EEC6C4EFC7C6EBC4C3EBC4C3EBC4C3EBC4C3EAC4C3EAC4C3E7C3C1EDC6C5
+ EBC5C4EEC7C7EBC6C5E6C2C1E6C2C1EAC6C5EECCCAE3C2C0E9C9C6E9CBCAECD0
+ CEEACFCEE3C7C6E7CBCAF0D4D2EBCDCDE2C4C4EFD1D0EBCDCCDBBDBBF2D2D0F3
+ D1CFEECECCF2D2D0E7C9C9E7CAC9E3C6C5D8BDBBDEC1C0E6CBCAECCFCFE5CBC9
+ EBCFCFEBCFCEEED2D1F0D5D2F2D5D4F0D4D2E5C7C5EED0CFEFD1D1EDD0CEEBCF
+ CDEDD1D0EED2D1EDD0CFEBD0CEEDD1CFEFD4D2EDD2D2EBD1D0E7D0CEEAD2D0EC
+ D2D2EBD1D1E3CBCAE5CDCCE6CECDE2CAC9EDD5D4EDD4D4E1C9C7E7D0CFE7CECD
+ E5CDCCEAD1CEE5CCCBDEC4C3ECD4D1E9CFCEECD2D1ECD4D1E6CECDEBD2D1E4CD
+ CBE6CFCEE4CDCBDEC7C5DFC9C7E2CBCAE2CBCAD9C2C0E5CFCDEBD5D4E0CBCAE3
+ CFCDE6D1D0D8C3C2E3CFCEE2CDCDCEBAB9E1CCCCE4D1D0DFCCCCE7D7D6E3D1D0
+ E6D4D2EFDCDCEFDCDCEBD8D8EEDCDCF3E1E1F0DFDEE7D6D6EBD8D8F3E0E0EFDE
+ DE0000000000000000EDDAD9EFDFDEEFDBDAEEDBDAF0DEDCE6D2D2EAD7D6EFDA
+ D8E5CFCEDEC7C6F0DAD9EBD5D4E4CFCEE1CCCCD8C3C2ECD7D7EFDAD9EFDAD9ED
+ D9D8EFDAD9E0CCCBE6D1D1EDD9D8EAD5D4EBD6D6ECD8D7EDD8D7E6D4D2E6D4D2
+ E7D4D4E4D1D0DAC5C5DAC5C5E2CDCCE3CFCFE2CDCDE7D4D49184830000009184
+ 85E4CFCFE4D0D0E7D4D2E5D1D0E3CECEE6D1D1E4CFCDE5CFCFE6D0D0E5CECE00
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000DEC5C5DBC3C2DEC5C4E4CCCBE4CBCA0000001412
+ 12423B3B423B3B423A3A413A3A423B3A141111000000E3C7C7E4C9C7E3C9C7E4
+ C9C7E4C9C7E1C4C3DBBEBDE6C7C6E9CAC9EACBC9EBCBCAEACAC9EDCBCBEDCCCA
+ E2C1C0E3C1BFEECCCAEBC7C6ECC9C6EDCAC7EDC9C7E9C5C3E1BDBAE1BDBBE9C4
+ C3DFBBBAE0BBB9E3BFBDE6C2C1E7C4C3ECCAC9EBC9C6EBC9C6E5C2C1ECC6C5E1
+ BBB9E5BFBDEDC6C4E7C2C0EAC3C1EEC9C5ECC5C3E9C0BDE7BEBBEEC2C1EFC3C1
+ F0C4C1EDC0BEF0C4C2F3C9C5EEC6C3F3CAC6EFC2C0EEBEBBEEBDBAECBAB8E4B3
+ B1E5B4B2EBB8B5E6B3B1E9B2B0E7ADABE4AAA8ECB3B0EAB1ADE6B1ADF0B8B6EE
+ B5B2EEB4B0EDB1ACECB1ACF2B6B2F0B8B4EFB8B5EFB6B3EFB3AEEEAEAAF2B6B2
+ F6BAB6F0B3AEF4B4B0F6B5B1F4B2ACF5ACA8F8B5B1F7B8B3F3A7A3F6ACA7F5AA
+ A5EFA6A1F0ACA8F7B9B4EFA49FF5ACA7F6B2ADF0A9A4F3A9A4EFB6B1EBAEA9F6
+ B4AEF6B8B3EEA49FF3B3ADF6B6B1F5B2ADF0B2ADF2B0AAEFAEAAECADA8EFA6A2
+ E9A7A3EDB2ADF2B3AEECACA9EFB0ACF0B1ACEEB2ADF0B7B3F3C1BDF3C2BFF3BE
+ BAF0B8B4EDB2AEF2B9B6F2BDB8F0BDB9EDBAB7EBB5B2E7AEABEEB5B3F2B9B6EF
+ BAB7EBB8B5EABBB9E5B7B5E9B9B6EBBBB8E9B5B3EAB7B4ECBAB7E5B4B2E9B9B7
+ E6BAB8EBBFBBE6BBB9E5BBB9E4BBB9E6BEBBE9C0BEE4BDBBE4BEBBE2BAB9EBC4
+ C2E5BFBEE7C2C0EBC4C3EAC4C2EAC5C4E5C0BFDEB8B6E5C1BFEAC5C4E9C4C3EB
+ C6C5EAC6C5EAC6C4EAC5C4E9C6C4EECBC9E7C4C3E6C5C3EDCDCBEFD0CEE5C7C6
+ DABFBEE7CCCBF0D6D4EFD4D1EBCFCEEED4D2EED1D0E7CACAF2D4D2F3D4D2F6D6
+ D4F7D8D6E9CAC7EED0CEE9CCCBD7BAB8DABEBDECCFCFF0D5D4EDD1D1E3C6C6E5
+ CAC7E9CDCCE3C5C4ECCFCDE2C4C3DABDBBE7CBC9EBCFCDE5C9C7E2C6C5EBCFCE
+ EDD0CFEDD2D0ECD1CFECD1CFEED5D2EED5D2EFD6D4EED5D4EAD2D0EED5D5EBD2
+ D1DFC6C5E4CCCCE7D0CFE6CECDEDD6D5ECD5D5EDD6D4EAD2D1ECD4D2E4CCCCEC
+ D4D1EBD1CFE7CECEECD1D0ECD4D2EFD6D5EED5D2E6CDCCF2D8D7E3CBC9E4CCCB
+ E6CFCEE4CDCCE0C9C6E6CFCEE3CCCBD8C1BEE5CFCEE6D1D0DFCAC9E4CFCEE6D1
+ D0E4D0CFEDD9D8EDD8D8E0CBCAEEDAD9ECD8D8EBD9D8EDDADAEBD8D8E6D4D4EE
+ DBDBEFDCDCE5D4D2E5D4D4F0DEDEF2E0E0F0DFDEEDDBDAF2DFDEEDDBDB000000
+ 0000000000EDDAD9EFDCDBE7D5D4E6D4D2ECD9D8E1CECDEFDAD9F6E0DEEDD7D6
+ E9D2D1F4DEDCECD7D6E9D5D4EBD6D6DAC5C5EDD9D7F4E0DFF0DBDBEBD7D6EFDB
+ DADCC9C9E5D0D0EDD9D8EDD9D8E5D0D0E9D5D4EED9D9ECD8D7ECD9D7EAD6D6E6
+ D2D2D4BFBFD4C0C0EBD6D6E9D5D4E0CCCBEAD5D5928585000000908382DFCBCC
+ E3CECEE7D4D2E3CECEE3CECEE7D2D2E1CCCCE5CFCFE6CFCFE6D0CF000000443D
+ 3DEAD4D2E7D0CFE1CACAE1C9C6E7CECEEAD1D0E5CDCCDFC7C5DBC2C2D6BFBDD9
+ C1C13F3938000000D7C1C0DAC2C0DEC5C4E5CCCBE5CBCA000000423C3BE6CCCB
+ E6CCCBE6CCCBE6CCCAE6CBCAE5CAC9000000E5CACAE5CAC9E6CAC9E7CACAE9CD
+ CCE9CBCAD8B9B8DCBEBDE7C7C6E1C2C1E1C1C0E2C2C1EBCBC9EDCBCBE2C0BFE2
+ C0BEEDCAC9E9C6C4E4C2C0E4C2C0E9C5C4EAC6C4DFBBBAE5C2C1E9C6C4E9C6C3
+ E7C4C2EDCBC7EBC7C5E4C1BFEBCAC7EFCCCAEFCCCAEEC9C6EDC7C6EAC3C1EEC9
+ C5EFCAC7EDC7C6EAC4C2EEC6C4EDC4C2EAC0BEEAC0BDEAC0BEECC1BEEEC2C0E7
+ BEBBF0C6C4EBC3C1E6BEBAF3C5C2EBBBB8EDBEBAF0C0BEEEBFBBEAB8B6ECBAB8
+ ECBAB7EBB5B3EEB6B4EEB6B4EAB2AEF0B8B5EEB8B5E9B4B1EDB6B3EEB5B2EDB2
+ ADECB1ADEEB4B0F3B9B5F0BBB8F2BAB7EFB6B3F2B5B2EEB3AEEEB5B1F4B8B4EF
+ B3ADF3B4B0F7B6B2EFACA7F4ACA7F4B7B3F2B1ACF5ADA8F6B0AAF7ADA9F7AEA9
+ F7B6B1F8BDB8F5AAA5F6ADA9F7B4AEF4ADAAF4ACA8ECB3ADE9AEA9F4B3ADF4B9
+ B4EEA7A2EFAEA9F3B6B1F3B0ABF0B2ADF3B3AEF0B0ABE9AEA9EEA9A5E9A5A1EF
+ B6B2F4B7B4F3B5B1F5B8B4F5B7B3F2B4B0F3B7B4F3BEBAF3C3C0F2C1BEF2BAB7
+ EEB6B3ECB3B0EFB9B6F0BEBAF0BEBAEFBDBAECB7B5F2B9B6F4BBB8F3BEBAF3BF
+ BBF0BFBDEEC1BEEDC0BEF3C4C1F2C2C0F0C1BEEFBEBBF0C0BEF2C2C0F0C3C1F0
+ C4C2EBC1BFEBC0BEEABFBDE4BBBAE9C0BEECC4C3E3BDBAE1BBB9EAC4C3ECC5C4
+ EBC5C4EAC3C2E9C3C2E9C4C2DFB9B8DAB5B4DEB9B8EBC5C5ECC7C6EBC7C6E9C5
+ C3E2BEBDE5C2C1EDCACAEDCAC9E6C3C2E7C5C4EAC9C7E7C7C6D8B9B9D7B9B8E2
+ C6C5EBCECEECD1D0ECD1D0EED5D4ECD0CFE6CBCAF0D5D2F3D6D5F3D5D4EFD1D0
+ D8B9B8ECCDCBE9CBCADEC0BFD6B9B8DCBFBFE6CAC9E6CBCAD9BDBDE2C6C5E6CA
+ C9E7CBC9E6CBC9E3C6C5D9BDBAE4CAC7EACECCE5CAC7E1C5C3E7CCCAE7CBCAE0
+ C5C3E4CAC7E7CCCBE7CECCEDD2D0EED5D2EED5D4E2C9C7EDD2D2ECD4D2E1CAC9
+ E0C9C6E3CCCBEDD6D5EED8D7ECD4D2EDD6D5EAD1D0E4CDCBDBC3C2DEC5C3ECD4
+ D1E9D0CFE4CAC9E9CFCEECD2D1E7CECDE1C9C7F0D8D7EFD7D6E9D0CFE9D1CFE6
+ CFCDE4CDCBEAD1D0E7D0CFE3CCCBE9D2D1E4CECEE9D4D4EDD8D7E4CFCEE5D0D0
+ EAD6D5E3CFCED5C0BFE6D2D1E4D1D1E6D4D2E2CFCEDAC6C6DCCBCAE6D4D4E7D6
+ D6DECCCCE3D1D1EFDEDCF0DEDEF4E2E1F0DFDEF3E0E0F4E2E200000000000000
+ 00DCCBCAE7D6D5E6D4D2E5D1D0E6D4D2DAC4C4F0DAD9EED8D7E6D0CFECD5D4F2
+ DCDBEFD9D8E7D4D2EAD5D4E4CFCFF2DBDAF4E0DFEDD9D8E5D0D0E6D1D1D7C3C3
+ DECACAE7D4D2E5D1D0DAC6C5DAC6C5E1CDCDDFCACAE0CBCBE0CCCCE1CDCDD2C0
+ BED4C0BFDECACADFCBCADCC9C9E9D4D48C7F7F0000008B7F7FDBC7C6D8C4C3DB
+ C6C6D8C4C3D8C3C2DFC9C9D7C2C2E0CBCCE1CACBE4CECD000000413C3BE9D2D1
+ E7D0CFE7CFCEDAC2C1E1C9C7E7CFCDE6CFCEE2CBCBE4CDCCE4CDCCE4CCCC423B
+ 3B000000D7BFBED8C1C0DFC5C5E3CACAE2C9C7000000413A3AE4CACAE3C9C7E3
+ C9C9E1C6C5E1C5C4E3C9C7AD9999E2C7C6DEC2C2E1C4C4E4C9C7E9CBCAE9CBCA
+ DABBBADFC1C0E7C7C6E4C5C4DBBBBADCBDBBEAC9C7E9C7C6DCBAB9DEBBB9E6C3
+ C2E1BFBDE5C3C1DFBDBBE9C6C4ECC9C7EAC7C5E5C3C1E5C4C3E2C0BFDFBEBBE3
+ C1BEE3C1BFE0BEBAE2BFBDDEB9B8E2BEBBEAC4C2E5C0BEDCB7B5E6C2C1EAC6C4
+ E6C1BFE1BAB8ECC4C2E7BFBDE2B8B6EBC1BFE9BFBDEBC0BEE3B9B7E0B8B5EFC9
+ C6E7BFBBE7B9B8EFC0BDE6B7B3E9B8B6ECBBB9E9B8B6E6B6B4ECBAB7EAB5B2E7
+ B2AEEEB6B3EDB6B3E5AEABEEB9B6EEBAB7EBB4B1E5AEAAE4ABA8E6ACA9E9AEAC
+ E9B0ACEEB9B5EDB8B5ECB6B2EDB4B0F3B7B2F2B8B4E6B0AAEDB2AEE7ACA7F3B5
+ B0F3B3AEECA8A4EEABA7EAB2ADE7A5A1EEA7A2F0ABA6F2A9A5EAA6A1F0B2ADF7
+ BAB6F2A7A3EFAAA5F2B0ABF2ACA8F4ADA9EDB3AEE6ADA9EBAAA6F0B7B2EFAAA6
+ F4B1ACF4BAB6F3B2AEECAEAAF0B3ADEEADAAF0B5B1F0B2ACECA6A3F2B4B1F0B7
+ B3F0B4AEF6B9B5F4B7B3EBADAAEAB0ACF0B9B5EFBEBAF0C3C0EFBEBAEFBBB7EF
+ B8B5F0B9B6F0BBB8ECBBB8E9B8B6E7B7B4EEBAB7F2BAB7F3BDB9F0BDB9ECBAB6
+ ECBDB9E9BBB8F0C4C1F2C4C2EFC1BFECBDBAEFC0BDEFBEBDEDBEBBEFC2C0EBC0
+ BEEDC3C1EFC6C4ECC3C1EFC6C5EFC7C6E6C0BEE6C1BFEDC7C5EAC5C3E3BEBDE1
+ BDBAE5C2C0E6C3C2DEB9B7DAB6B5DEBAB8EECAC9EECBC9EAC7C6E0BEBBDEBAB9
+ E4C1C0E6C3C2E4C2C1D9B8B7DBBABAE0BFBEE0BFBFD8B9B8D8B8B8E5C6C5E6C9
+ C9E2C6C5E6CBCBEED5D5E5CCCBE0C5C4EACFCEECCFCFEFD4D2F3D7D5E6C9C7EA
+ CDCCF3D5D4EDCFCED7BBBAD5B8B7E1C5C3E1C4C2D6BAB8E0C4C2E5CAC7E9CCCB
+ E4C7C6DFC3C1D6BBB9DCC1BFE7CCCAE1C5C3DEC2C1E0C4C2E0C4C2DCC2C0DCC2
+ C0D6BBB9D6BBBADBC1C0EBD0CFEDD2D0DBC2C0E5CBCAEDD2D2EDD4D2EAD1D1E4
+ CCCCECD4D2EDD5D4E9D2D1E5CECDDBC4C2E4CDCCE9D0CFE0C9C7E3CAC9D9C1C0
+ DCC4C3D9C0BEDFC6C5DCC3C2D0B8B7E6CDCCE3CBC9DBC3C2E9D1CFD9C1C0D2BB
+ BAE7CFCEE9D1D0E9D2D1E6D0D0D8C2C1EBD5D4EED9D8EBD5D4E3CFCEE6D1D0DB
+ C7C6D0BDBBD7C2C2D7C3C4DFCDCCE4D1D0DAC9C7DCCAC9ECD9D8EFDCDCEBD8D9
+ E5D4D2DCCBCAE2D0CFE6D5D4ECDAD9EFDEDCF2E0E00000000000000000D1C0C0
+ CFBDBBCEBBBACFBDBBD7C3C1D2BEBBD0BBBAC9B3B2CBB5B4EBD5D2F7E0DFDBC6
+ C5CCB8B7CFBABAE7D5D4EAD7D6E3D0CFD2BFBED2BFBED5C1C0D4C0BFE2CECDEB
+ D6D6EDD8D8D5C1C0D6C1C1D6C3C2D5C2C1DAC6C6EBD8D7EBD7D7D2BFBED4C0BF
+ D6C2C2D9C4C3D7C4C3D8C4C3877B7A0000008E8282DCC9C9D6C2C1D7C3C2D8C3
+ C2D6C1C2D5BFC0D5C0C0E0CBCBE3CDCDDCC6C60000003E3838E6CFCEE9D2D1DA
+ C3C2D2BABAD4BDBBD5BDBDDBC3C2DAC2C1DBC5C4E4CCCCE1CAC93F3938000000
+ D7BFBEDAC2C1E1C7C7E5CCCBE4CBCB000000413A39D9C0BFD7BDBBD7BEBDD7BE
+ BBD7BDBBDCC2C1E2C9C7DEC3C2D7BDBDD7BBBAD8BBBADBBEBDD6B8B7D4B6B5D5
+ B6B5E4C5C4EACBCAE0C0BFE0BFBEEACAC9E9C6C5D6B5B3D5B4B2D7B5B4D6B4B3
+ DEBBBAEAC7C6EFCDCCEECDCBDEBBBAD8B8B6D9B9B8D8B7B6DBBAB9ECCAC7F2CE
+ CCECC7C5E1BDBAD7B3B1D7B3B2E6C2C0E5C1C0DBB8B6DCB9B7DBB6B4DBB6B4DB
+ B5B3DBB4B2D9B1AEDCB4B1EEC5C3EFC5C3DEB6B3DAB3B1DEB7B5F3CAC6E5B9B6
+ DEAEACDFB1ADE2B3B0E0B1AEDBACAADFAEACE1B0ADEAB6B4DFA9A6DFA8A5E5B0
+ ACEDB7B4E9B5B2EEBBB7F0BBB8E3ADAADEA6A3DFA6A3E0A7A4E6AEAAEFB9B6EE
+ BBB8E2ACA9E0A8A5E5ABA7F0B7B3E6B0ACE0A9A5E2A7A4E1A5A1EDB0ABF4B5B0
+ E7A49FE1A39EE1A8A3E09D98E39E99E7A39EE19A96E09D98E0A39EE9ABA7E9A1
+ 9CE19D99E1A29CE9A7A2F3ADA9E6ACA8E3ACA7E4A39FE3AAA6E6A5A1EFACA8F3
+ BDB7E7AAA6E3A6A2E4AAA5E4A7A2E7ABA7EBB1ACE6A49EE2A39FE1AAA6E2A7A4
+ EDB2ADE7ACA8E1A5A2E1A6A2E4ACA8ECB7B4EDBEBAEBBBB8EDBAB7EEBAB7EEB8
+ B5E6B1ADE1B0ACE0B0ADDFAEACE0B0ACE4B1ADEEB8B5E1ACA9DEAAA7DCABA9E1
+ B2AEEABEBBF2C6C3E4B8B7DFB3B1E2B5B3EDBEBDEEBFBDEEC0BEE7BBB9ECC2C1
+ EFC5C3EEC5C3EEC6C4E5BEBDDCB7B5DFB8B7E4C0BEE0B9B8DBB8B6DBB9B7E4C1
+ C0ECC9C6E0BEBBD9B7B6DCB9B8EBC9C6EBC9C6E4C1C0D8B5B4D8B5B4DFBBBAED
+ CBCAECCBCADBBBBAE0C0BFEAC9C9EACAC9DAB9B9D8B9B8E1C1C1E0C1C1D9BBBB
+ DBC0C0EED2D1E2C9C7DBC1C1D7BEBDD8BEBDDCC1C0D9BFBED2B6B5D8BAB9EFD2
+ D0E6CBC9D5B8B7D4B8B6D6B9B9D5B9B8DAC0BFE3C9C6E5CAC9D6BBB9D2B6B5D4
+ B8B6D1B7B5D2B7B5DEC3C1E3C9C6D9BEBDD1B7B5D5B9B8E2C6C5D6BBB9D2B8B6
+ D2B9B6D5B9B7EBD0CFF2D8D6E0C5C4D1B7B6D7BEBBECD4D1E1C7C7D5BDBBD6BF
+ BDDCC5C3D6BEBDD2BBB9D5BEBDE9D1D0ECD4D2DCC4C3CFB9B7CFB7B7DFC6C5EC
+ D2D0EFD7D6EED6D4E6CECDE7CFCEE0C6C5D0B7B6CFB7B6CDB5B4CEB6B5DCC6C4
+ DCC5C4D0BBBACFBAB9CFB9B8CFBAB9E2CCCCEDD8D7ECD7D6E7D2D1D4BFBED0BD
+ BBD2BFBED0BFBEE0CECDF0DEDEE7D5D5DCCACAE9D7D6EBD8D8E7D6D5DBCAC9D0
+ BFBFD0BFBED0BEBED2C0C0DAC7C7E0CECD0000000000000000DBCAC9D1BEBECD
+ B9B8E6D2D1F6E0DEE9D4D1CCB6B4C9B4B2D5C0BEECD6D5F0DAD8CEBAB9CEBAB9
+ CFBBBBDFCCCBE7D6D4D6C2C1D0BEBDE6D2D1F2DCDCE4D1D0E2CFCEE6D2D1D7C3
+ C2D0BDBBE0CBCBEBD6D6D7C4C3D4C1BFECD8D7EDD9D9D2C0BED4BFBFE5D1D0E7
+ D4D2DAC5C5D4C0C0877A79000000918484D6C3C3D5C1C0E0CBCBE4CFCFD5C1C0
+ D5C0C0D7C3C2E3CECEE5CFCFD5BFBE000000413B3AE6D0CFDBC4C3D2BAB9D6BF
+ BEEAD2D1DBC4C4D5BDBBD8C1C0D6C0BFD6BFBED6BEBD3E3737000000DEC5C4E0
+ C6C6DCC3C1E2C9C7E3CACA0000003E3737D5BBB9D8BEBDE3C9C7DBC1C0D6BBBA
+ DABFBEE4CAC9DABFBED6B9B9DEC0BFE2C5C4DEC0BFD4B7B5D4B5B4DEBFBEEECE
+ CDEECECCE4C4C3E4C3C2EECECCE1C0BFD4B3B2DBBAB8EFCDCCE0BFBED4B3B2E6
+ C5C3F0CFCDE9C6C5D7B7B5DEBEBDEECECDE1C0BED6B4B1DAB8B6EFCCC9EAC4C3
+ DBB6B4D6B3B0D7B4B2EBC7C6ECC7C6DCB9B7D9B4B2DEB8B6E6C0BFE1B9B6DAB2
+ B1D9B1AEE5BBB9F0C7C5EDC6C4D9B3B1DAB5B2E7BFBDEDC2BFDAADAADAACAAEB
+ BDBAECBFBBDCADAADBABA9E7B6B4E9B5B2E9B4B1DBA7A4DEA8A6F0B9B7F0BDB9
+ EBB8B5EDB9B6E9B4B1DCA7A4DEA6A4EBB4B0ECB5B2E9B3B0EDB9B6E7B5B2DEA9
+ A6E2ABA7EBB1ADEDB5B2DFA9A5EAB1ADF4B9B5E3A8A4DFA39EF3B3B0E6A49FDE
+ A39EEFB3B0F5B1ACEDAAA5EFABA7E6A19CDF9E9AE1A6A2F4B6B2F0A9A5E1A19B
+ E1A29DF3B1ACF3B1ABE3AAA5E3ADA9E9AAA6E4AAA6E2A49FE9A6A1F3B9B5E3A8
+ A4E3A7A2EFB4B1EFB4B0E7ACA8E7B1ABE6A7A3E19F9BE1A8A4F2B8B4F2B6B4E7
+ ADA9E0A6A3E0A5A2E3AAA7EFB9B5EFBDB9EEC2BFEDBEBAEFBBB8EBB6B3E0AAA7
+ E0ACAAE6B5B2E6B6B3E4B6B2E3B2B0F0BDB9E9B3B0DCA9A7DEABA8EDBDBAECBF
+ BBE4B9B7DFB5B3DFB4B2DEB3B1ECC0BEF0C4C1F0C3C1E7BAB8ECC1C0EEC4C2EE
+ C6C4ECC3C2DBB4B3DBB6B5E4BEBDEBC6C5E3BEBBDBB8B6DEBAB9ECC9C7ECCAC7
+ E0BEBBD9B7B6E0BDBBECCAC9EFCDCBE6C4C2D8B5B4D8B5B4E1C0C0EDCDCBEECE
+ CDE7C7C5E1C0C0EBCBCAE9C9C7D9B9B8D8B9B9E4C4C4E9CAC9DBBDBBD7BABAE6
+ CBC9DEC3C2D7BDBDD7BBBAE7CDCCE9D0CED4BAB9D2B8B7E6CBCAF2D5D4D6BAB8
+ D4B8B6DFC4C2E7CDCCD5B9B8D5BAB9EBCFCDE9CDCCD2B7B5D6BABAEBCFCDD6BA
+ B8D1B5B3E4C9C6E6CCCBE0C5C3D1B7B5D6BDBBDCC3C2D0B7B5D8BEBDDCC2C1DA
+ C0BDE1C6C6EFD6D4D4BBB9D1B8B6E6CECCEBD2D0D5BDBBD4BBBAE1C9C7E7D0CF
+ D2BBB9D2BBB9DFC9C6ECD5D2EBD4D1D5BEBDCFB9B8CFB7B6DBC4C2ECD5D2F3DA
+ D9F3DAD8F0D8D7F5DCDAF2D9D7DAC3C1C9B2B1CBB4B2D1BAB9DCC5C4CFB7B5CE
+ B8B7E3CDCCE0CBC9D0BBBACFB8B8EED9D8EDD9D7D2BEBDCDB8B7DEC7C7E9D5D4
+ D0BEBDCEBBBBE0CDCCE4D1D1DAC6C6E9D6D5EAD8D8E9D7D6D2C0C0CEBDBDDAC9
+ C7D9C7C6CDBBBADAC7C7F3E1E10000000000000000EDDAD9D4C1C0CAB7B5F2DC
+ DBF7E1E0F2DCDBCAB4B3C9B4B2DCC7C6E7D1D0EED8D7CFBBB9D2C0BFD1BFBFDA
+ C7C6E6D4D2DAC7C6D2BFBEE5D1D0ECD9D8F2DEDCE9D6D5E2CECDD1BDBDD2BEBE
+ EDD9D8EFDBDADAC7C5D2C0BFE2CECDECD8D8D5C0BFD5C1C0EBD7D7EAD5D6E3CE
+ CED6C3C2877A79000000928585D5C0BFD6C3C2E4D0CFE4CFCFD7C3C3D5C0C0DB
+ C6C6E5CFCFE7D2D1D4BEBD000000443D3DEAD4D2D5BEBED2B9B9E5CDCDEDD6D5
+ EBD2D4D5BBBBD8C0C0D5BEBBD5BDBBD6BFBE3F3938000000E5CCCBE2CAC9D9C1
+ C0DEC5C4E1C7C60000003E3737D6BBBADFC4C3E6CCCBE5CACAD6B9B8D6BABAE6
+ CBCA8A7978877474E6CBC9E6C9C7E7CBCAD5B6B5D4B6B5E1C2C1EDCCCCEBCBCA
+ E4C4C3E6C6C5EECDCBD5B6B4D5B5B3EAC9C7EECDCCEECDCBD5B5B3DEBEBDF0D0
+ CFDEBEBDD7B7B6E0C1BFEFCECCEAC7C6D6B3B1D7B4B2EAC5C3EAC5C3D9B5B4D7
+ B4B2D8B5B4E7C4C3ECC9C6DEB9B7D8B3B1E0B8B6E5BEBDE7C0BFDAB2B0D8B1AD
+ ECC4C2F2CCC9EBC5C3D9B3B1E1B7B5F2C7C4F0C3C1D9ACAADBAEACF3C5C3ECBF
+ BBE0B2AEDAABA8F2C0BDEAB6B4E9B3B1DAA6A3DFABA8EFBDB9F0BEBBEAB8B5EA
+ B8B4E4B1ACDCA7A4DFA8A5E5B0ACE4B1ACEDBAB7EFBEB9E5B2AEDEA9A5EDB5B1
+ EFB7B4E2ADA9DEA8A5EFB7B4F4BAB6EEB3AEDFA39EE7A8A4EBABA7E0A9A4EEB2
+ ADF5B3ADF4B3AEF6B4B0F4B1ACE2A39EE1A7A3F4B7B3F3ACA9E1A19CEDAEAAF4
+ B4B0EBA9A5E2A8A5E6B3AEEFB2ACF0B7B3E1A6A2E9A7A3F3B9B5E6AEAAE5A9A5
+ F2B8B4F3B7B4F2B6B1F0B7B4ECB2ADE09F9BE5A9A6F4BEBAF2B9B5E3AAA7DFA7
+ A4E0A7A4E1A7A4F0B8B5F2BEBAF0C1BEF0C4C1F0C1BEEAB7B5DFACA9E0ABA9EB
+ B9B6EABAB8ECBEB9EDBFBBF2C2BFEEBBBADCA9A6E1ADABF0BEBBEEBFBBE1B4B1
+ DFB5B3E0B7B5DEB5B3E4BAB8F2C6C4F0C5C2ECC0BEECC0BEF0C5C4F2C6C4EBC3
+ C1DBB3B1DBB6B4E9C2C1E9C3C2EAC5C3DBB8B6E1BEBBEDCBCAEECBCAE0BEBDD9
+ B7B7E0BEBBE2C0BFECCAC9DBB9B8D8B6B5D9B7B7DCBBBAEAC9C7EECECDE7C9C7
+ DFBEBDE6C6C5E5C5C4D9BAB9D8B9B9EBCCCBEBCCCBE0C1C1D7BAB9E2C5C5DEC1
+ C0D7BBBBDEC1C0EED4D2EDD4D2D9C1C0D2BAB9F2D8D6F2D7D5D1B8B6D6BAB9E7
+ CDCCEBD0CFD7BDBBD4B9B7E5CBC9E5CACAD2B7B6D9BEBDEACECDE5CBC9D0B5B3
+ DBC0BEE7CCCADBC0BED0B7B6DCC2C1D9BFBDD2B8B7DAC0BEDCC3C2DCC3C2E7CE
+ CDEDD2D1D4BBB8D2B9B8E7CFCEE9D0CFD2BAB8D5BDBADBC3C1DFC7C6D4BDBAD2
+ BBB9D8C1BFE5CFCDE6CFCED2BAB9D0B9B8CFB7B6D4BBBAECD4D1EED7D6F3DBD9
+ EFD8D6F7DFDCF7DFDBE5CECCC9B2B0D1B9B8EBD2D1F0D8D7CBB5B3D0BBBAECD6
+ D7EAD5D2D6C1C0CEB8B7E7D2D1EAD5D5CDB8B7CDB8B8E9D2D1F2DEDCD7C4C4CE
+ BBBBD7C4C4EAD7D7E7D6D4F0DEDCEFDEDCE2D0CFCEBDBDD2C0C0ECD9D9F2DFDF
+ D0BFBECFBEBDE1CECE0000000000000000E0CCCBD0BBBAC9B4B3ECD7D5F5DFDE
+ F2DCDBCCB6B4CAB4B4EDD8D6EFDAD9E6D1CFD1BEBEE4D1D0D8C5C4DAC7C6ECD8
+ D8ECD8D8D7C3C2D6C2C1E1CDCCEDDAD8EBD7D7E2CDCDD1BDBDD4BFBFF2DEDBF0
+ DCDBE2CFCFD2C0BFDFCBCA5D55559F918ED2BFBEEAD5D6E9D5D5E3CFCEDAC6C5
+ 867A7A000000938585D4BFBFD8C4C4E5D0D1E1CDCCD8C4C4282323DECAC9E6D1
+ D0E7D2D1D4BFBD000000423C3CE3CCCBD4BDBBD2BAB9E2CACAEBD2D4E7D0D0D5
+ BDBBD5BEBDD5BBBBD5BDBBE3CBCB433C3C000000E7CDCDE5CCCBE2C9C9E4CBCB
+ E4CBCA0000003E3737D6BBBAE5CBC9E7CBCAE2C6C4D5B9B8D6B9B8E6CAC98A79
+ 78877474E3C6C5E9CCCBEACDCCD6B7B6D5B7B6DEBFBEECCCCCEACCCBDCBEBDDC
+ BEBDE9C9C7D6B7B6D6B7B5DBBDBBE2C2C1DFC0BFD6B7B5D8B9B7EBCCCBDFC1BF
+ D7B8B6E9C9C6F2CFCEF0CDCCD6B3B1DAB6B4EAC5C4E6C4C2D8B6B4DBB9B6E0BD
+ B9E0BAB8ECC6C5E2BBB9D7B1AEE5BEBBE4BBB9EAC2C0D9B2B0D8B2B0E9C3C1F0
+ CDCBE7C3C1D9B1AEDFB4B2EFC3C1EFC3C1D9AEABDBB0ACEDC1BEE9BAB8E1B2AE
+ D9A8A6ECB8B6E4B1ADECB8B5D9A6A4DEABA8F0C0BBF2C1BEF0BDBAF0BBB9EAB5
+ B2E0A9A7DEA8A5DEA9A6E3B0ACF4C3C0F4C1BEEBB7B4DCA7A4E7B1ACEDB8B5E0
+ ACA8DFA9A6EFB7B4F0B6B3F2B7B4DEA49FE4A6A2ECB0ABE2ADA9E0A29EE5A5A1
+ E4A49FF2AEABEFAEAAE2A6A2DFA6A3EEB1ACE5A29DE1A39EF4B7B3F0B2ADE3A4
+ 9FE3ABA7F0BFBAEEB2AEF4BAB7E4AAA6E4A59FF2B6B3EEB7B3E4A9A6E6ACA8EB
+ B3AEEFB5B1EDB5B1EFB8B4E0A19DE3A6A2F3BDB8F2BAB7E1A8A5E0A8A5E3ABA8
+ E0A7A4E4ACA8F0BAB8ECBAB7EDC1BEEEC1BEE7B7B5DFADAADFABA8E6B3B1E5B4
+ B2E3B4B2E3B5B3EFC1BFEEBFBBDCABA9E0ADABF0BFBBF0C0BEDFB2B0E2B6B4E5
+ BDBBE1B8B7DEB6B4EAC0BEEFC5C4EBC0BEEBC1BFF0C4C2F3C7C5F2C7C5DBB4B2
+ DCB7B5EFCAC7EEC9C6EFCAC9DAB7B6DEBAB9E4C3C1EAC7C6DEBAB9D8B6B5DCBA
+ BADBB9B9E6C5C3D9B7B6DEBBBAE4C3C3DBBABAE6C6C5EECECDECCCCCE4C5C4EB
+ CCCBEDCDCCD9BABAD8B9B9EECFCEEECFCEE5C7C7D7B9B9E0C2C1E0C2C1D7B9B9
+ DCBFBEEDD1D0EBD0CFDEC1C1D2B9B8E6CCCBF0D7D5D2B9B8D7BDBBE4CBC9E7CD
+ CCD8BEBDD4B9B7E3C7C6E5CBCAD2B7B6D5B9B8E4C9C7E6CCCBD2B8B6D6BBB9E1
+ C6C5D5BAB9D6BDBAE6CDCBE1C7C5D7BEBDD5BDBADBC3C1DEC4C3E7CFCFE5CCCC
+ D5BDBBD4BDBADEC6C4DCC4C3D4BDBBD7C0BFE4CDCCDEC6C5D7C0BFD4BEBDDAC4
+ C3E4CECCDEC7C6D1BBBADCC6C5D9C2C1D1BAB9DAC4C2EBD5D4EAD2D1E2CBCAEF
+ D9D7F3DCDBE2CCCBCDB7B6D9C3C1EDD7D7EFD9D8CDB7B7D0BDBBE7D2D2E2CECD
+ D5C1C0CFBAB8D7C3C2E9D5D4CEBAB9CFBDBBEED9D9F2DEDCE5D2D1CFBEBEDECC
+ CBEEDCDCE7D6D5EEDCDCEDDBDAD2C2C2CFBFBEDFCECEE3D1D0E6D6D5DECCCCCF
+ BFBED6C5C50000000000000000D2BFBECDB8B8C7B4B3E5D0CEF2DCDBF0DAD9CA
+ B5B4CAB5B4E1CCCBECD8D7D0BDBAD1BEBDE9D6D5E1CDCDD2C0BFE5D2D1E4D1D0
+ D2BFBED9C6C5D9C5C5D7C2C2E4D0CFDBC7C6D0BDBBD4BFBFEDD9D8EFDBDAD8C4
+ C4D2BFBFDAC9C7AE9E9E121010554D4C9083828D81818A7E7D877B7B554D4D00
+ 0000574F4E857979877A7A9285858E82823E3939000000C1AEADE7D2D1E7D2D1
+ 554C4C0000000000005A504FA18E8DD1B9B8D5BEBDE6CECDDFC7C5D2BBBAD5BD
+ BBD4BBBAD5BBBB8B7D7C0000000000003D3736B9A5A4DCC3C3CAB4B25D535200
+ 0000282323877676907E7E94838192807F867473877574433B3B131010877474
+ E5C9C7E9CCCBEBCDCCD7B8B7D6B8B7DFC2C1EDCECDEBCDCCDEBFBFDABDBBE1C3
+ C2D9BBBAD7BAB9DBBDBBDCBFBDDBBEBDD7B9B7DABDBBEBCDCBDBBDBAD7B7B5EC
+ CBC9EFCECBEAC6C5D6B3B1D9B7B6E9C5C4D9B7B5D7B5B3E5C2C0E6C2C0D8B3B1
+ E1BAB8E4BDBBD7B0ACE3BDB9E9C1BFE7C0BED6B1ADD7B2B1EAC6C3EBC6C3DFB7
+ B5D9B0ACDBB0AEF2C6C4F3C6C4D9ADABD9ADABE6B9B7E6B9B6DCADAAD9A7A5EA
+ B7B4EBB7B5E2B0ADD9A8A5E0B0ACF5C5C1F5C3C0F3C1BDF4C0BDEEB9B5DEA9A6
+ DEA9A6E2B0ACE4B4B1E5B5B2F3C1BDE3B0ACDEA8A5E7B3AEE9B6B3E0ADAADFA9
+ A6EDB6B3EEB5B2E9B1ACDEA4A1E5A7A3F2B8B5E0AAA6E4A6A2EDADA9DFA19CED
+ ADA9F6B6B2F3B6B4DFA8A4E1A5A1E09D9AE3A6A2F3B7B3F3B5B1E1A29EE3AAA6
+ E9B8B4E6ACA9EFB7B3E3ACA8E2A5A1E6ACA8E6B2AEE3AAA7E6ADA9E6B0ACE5AC
+ A9EFB6B3EAB4B0DFA4A1E2A4A1F2B9B6EFBAB6DFA9A6E4ADA9ECB5B2DFA7A5DF
+ A7A4EDB8B4ECB8B5EEBFBBEFC4C1ECBEBADFADABDFACA9E9B6B3E4B3B0DEAEAC
+ DEB1ADECBFBDEABEBBDCAEABDFAEACEEBDBAE1B2AEDEB0ADE5B9B7E6BBB9E1B9
+ B8DEB6B4E0B8B5EFC7C5EBC3C1EDC3C1EEC3C1EFC4C2EBC1BFDAB2B0DBB4B3ED
+ C6C5EEC9C7E7C2C1DAB6B5DEB9B8EAC6C5F0CECBE0BFBDD8B6B5E6C5C3E3C2C1
+ DBBAB9D8B7B5E9C9C7EDCDCCD8B9B9DBBBBBEDCDCCEDCECDE2C3C2E7C9C6EBCC
+ CBD9BAB9D8BAB9EDCFCEEECFCFDFC1BFD8BBBAE4C6C5E5C9C7D7B9B9D7BAB9E9
+ CBCAECCFCED8BEBDD5BAB9E2C5C4EED4D2D2B9B8D6BDBBE6CDCDEBD1D0D6BDBB
+ D2B9B7E7CDCBE7CDCCD2B7B6D6BBBAE7CCCCEAD0CEDBC1BFD2B9B8D9BFBED4BA
+ B8E2C7C6E9CECEE4CBCAD2B9B8D5BDBAE0C7C6DAC2C2E1C9C7E7D0CFD5BFBDD5
+ BEBDE4CDCCEDD6D5D5BEBDD8C3C1E6D0CEE5CFCDD6C0BFD5BFBDE5CFCFE7D2D1
+ D5C0BED1BBBBEBD4D2E4CDCDD0BAB9D5BFBFECD8D6EFDAD9ECD6D6EFDAD9EFDA
+ DAE5D0D0CFBBBAD2BFBFDECACAE9D4D4CFBABAD0BEBBDFCBCBDBC7C7D5C1C1CF
+ BBBAE9D6D5EEDBDACEBBBBCFBDBDE9D6D5EEDCDBD5C2C2D0C0C0D8C6C6E9D7D7
+ E0CFCEE5D4D2E2D0D0D2C2C2D0C0C0D9C6C6E4D2D2E9D8D8DBCBCBCFC0C0D5C4
+ C50000000000000000CEB9B8CBB7B6C9B4B3D0BABAE2CCCBDEC7C6C9B4B2C9B4
+ B2D4C0BED8C3C2CEBBBAD1BEBDDFCDCBDCCACAD1BFBED7C4C4D5C2C2D0BEBDDA
+ C7C5D8C5C4D1BFBDE1CECDD6C2C1D0BDBBD4BFBFEFDBDAF2DEDCD4C0C0D2C0BE
+ DAC7C6DECAC92723228578769487869285848A7E7D857A798579798B7F7E8B7F
+ 7F877A7A8679798D81818D81818679796D6362716565EAD4D290818184757484
+ 7574928381938383AE9B9AD1B9B9D2BAB9DBC4C3D5BDBDD2BBBAE4CCCBD7C0BE
+ A18D8D87767690817F887979857574857574E0C6C59483839483839484848E7F
+ 7D877676877675907D7D897676867473907E7D948181877474B9A19FE6CAC9EB
+ CECEE3C6C6D6B8B7D7B9B8E1C3C2ECCECDEBCDCDE6C9C7E3C6C4E9CCCBE2C4C4
+ DBBFBEDEC1C0E1C3C3DCC0BFDBBFBDE9CAC9E5C6C4D6B6B5D6B5B4E9C6C4ECCA
+ C7DCBAB9D6B4B2D8B7B5D9B9B7D7B5B3D7B4B2E7C3C2E7C3C1D7B1B0DEB8B6EA
+ C3C1DAB3B2D8B2B0E6C0BEDAB5B3D5B0ADD6B3B1EBC6C3EDC5C4E0B6B3D8AEAB
+ D8ADABE9BFBDF2C6C4DBB0ADD9ADAAE0B4B2E7B8B6D9A9A7D8A7A5E6B4B2E9B7
+ B4D9AAA7D9AAA7DEAEABF4C3C0F4C3C0F0BEBAF3BFBDE7B4B0DBA8A5DAA8A5DC
+ ACA9DCADAADCACA9E1B0ABDFABA8DEA9A6E3B1ACE7B5B2E2AEABDFAAA7E0AAA7
+ E4ADA9E0A7A4DEA39FE4A9A5ECB6B3DFA7A4E5A7A4E7AAA6DC9E9AE4A49FF5B7
+ B3F3B8B4E0A9A6DEA19DDE9E9AE4A9A5EFB4B0EEB2ADE0A49FE1A9A6E2B3B0E1
+ AAA6E2AAA7E1ADA9E2A7A3EAADAAE7B5B1E3ACA9E6AEAAE3ADA9E1AAA6E7AEAB
+ E2ACA8DFA7A3E4A7A3ECB3AEE0ACA9DFAAA7E9B2AEF2BAB7DFA9A6DEA7A5ECB6
+ B2ECB8B4EFBFBBEDC1BEEFC4C1E3B4B1DEADAAE5B3B1E6B3B1DEADABDFB1B0EC
+ BFBDE2B6B3DCB1AEE1B2AEE7B7B4DCADAADEB0ADE5B8B7EFC4C2EAC0BEDEB6B4
+ DEB7B5E5BFBDEAC2C0EDC4C3ECC2C0E4BAB8DCB4B2DAB1AEDAB2B0E2BBB9E9C3
+ C1DCB8B7DAB6B5DAB8B7DFBBB9EAC6C5DAB8B7D8B6B5EAC9C9E0BFBED8B7B6D8
+ B7B6E1C1C1ECCCCBD8BAB9D9BAB9EBCCCBEBCDCCE5C6C5EBCDCCE9CBCAD8BABA
+ D8BAB9E2C5C4DEC1C0D7BABADBBFBEECCECEE6CBCADABDBBD6B9B8D8BBBADABD
+ BBD6B9B8D6B9B9E9CDCCEFD2D1D7BBBAD4BAB8D8BFBEE0C6C5D2B9B8D2B9B8DA
+ C1BFD6BBBBD2B8B7D5BBBAE6CCCBE7CDCCE0C5C4D1B8B7D2B8B7D4BAB9E2C9C7
+ E9CFCEE5CDCBD0B7B7D5BDBAD8BFBED2BAB8DAC2C1DFC7C5D4BDBDD5BEBDE7D1
+ D0EDD6D4D8C2C1D5BFBED8C2C1DBC4C4D5BEBDD5BFBDE1CBCAE3CDCCD2BDBBD0
+ BAB9E4CDCCDFCAC7D0BAB9D2BBBAE7D2D1EDD8D7EDD8D8EBD6D6DCC9C7D6C2C1
+ CFBBBAD0BBBADECAC9ECD7D7D6C2C1CFBDBBD4C0C0D4BFBFD0BEBBD5C2C1EEDB
+ DAE5D1D1CEBBBBCFBDBDE9D5D4EBD8D8D0BFBED0C0BFD5C3C3E5D4D2DECCCDE4
+ D2D2E6D6D6D2C2C2D0C0C0D2C2C2DAC9C7DCCCCCD1C1C1CFC0C0D7C6C6000000
+ 0000000000D4C1BFCEB9B8CEB9B8D0BAB9D1BDBAD5C0BFD1BBBACFBAB9D8C3C2
+ D9C4C3D2C0BFE0CCCBDFCCCBD7C3C3D4C1C0DECCCBD9C6C5D8C5C4D7C3C3D7C2
+ C2E0CCCCE9D5D5D7C4C3D4C0BFDAC5C5EDD9D8EDD9D8D7C3C2D5C1C1E2CECEDA
+ C6C6D7C2C1DFCAC9F0DBDAEED9D9DEC9C7D4C0BED5C1BFEBD6D5E4D0CFDCC7C6
+ DAC5C4DCC7C6DEC7C7DAC4C3D6C0BFDCC6C4E3CCCBDEC4C4D2BBB9D4BBBAE1CA
+ C7E1C7C7F0D8D7EAD2D0D7C0BFDAC3C1DBC3C3DFC6C5E6CECDDEC6C4DFC6C5D5
+ BDBBD6BEBDD6BEBDD7BFBEE0C5C5E6CCCBE6CDCCE6CDCBEAD0CFE9CECED9BFBF
+ D7BBBAD9BEBDDCC0BFDBBFBEEBCECCEACCCBD6B8B7D5B7B6E4C7C6E7CBCADEC0
+ BFD8BBBBDBBFBEE7CAC9EBCECDEACDCCE7CBCAE7CCCBEACDCCE6CBCADFC3C2DF
+ C3C3E0C4C3E1C3C2E9CAC7EBCCCBE0C0BED8B7B6D9B8B7EAC9C6E9C9C6DCBDBA
+ D9B9B6E0C0BEDEBBBAD8B5B4E1BEBBEAC5C3EBC6C4DAB5B3E4BEBBECC6C4EAC3
+ C1DCB7B5E2BDBADFB9B8D8B5B3E0BAB7EEC5C4E6BBB9DAB2B0D8AEACD9B0ADDF
+ B4B2EEC3C2E1B7B4DFB3B1E1B3B1E3B5B2E0B0ADDAABA8EBBAB8EBBBB9DCADAB
+ DAADAAE2B2B0EFBFBDEFBEBBE5B4B1EFBDBAEAB7B4E1AEACDEADAADFB1ACDFB0
+ ACE5B6B3EEBDB8E0ACA9DFACA8EAB8B5ECBAB7E7B4B1E3ADAAE4ADABE4AEABE1
+ A9A6E0A6A2F0B7B3F3C0BBE6ADAAEBAEAAE9ACA8E1A4A1F3B4B0F5B9B5F2B9B6
+ E3ADAADCA19CDE9E9BE9AEAAEBB2ADEBB1ACE0A5A1E2ABA8EDBFBAEBB4B0EFB7
+ B4E5B2AEE2A8A4EDB2ADEFBBB8E9B4B1E9B1ADE5AEABEBB5B2EDB5B2EAB4B0E2
+ ADAAECB3B0ECB1ADE2ADA9E2AEABE9B4B0EFBAB7E4AEABE0ABA7EDB7B4ECB8B4
+ EDBAB8ECBEB9ECC2BFEDC1BFE4B6B4E7B7B4E5B4B1E2B1ADEABAB8F0C3C0EDC2
+ BFE2B7B5F0C4C1EBBEBBE0B1AEDFB1AEE4B7B5EFC2C0E9BDBBDFB5B3DFB8B6E5
+ BFBDEEC7C5EFC9C6EFC7C5ECC3C1E1B8B7DFB5B3DFB6B4E3BBB9EBC4C2E4C0BF
+ DEBAB8E1BFBDDFBBB9E2BFBEDCBAB9DFBEBDEAC7C6DFBEBDD9B9B8DCBEBBDEBF
+ BDE9CBCADCBEBDDFC0BFEECFCEEDCFCEEBCDCCEED0CFEDCFCED8BBBAD8BABAE7
+ CBCAE5C7C6D8BBBAD8BBBAEACECDE7CBCAE6CBCADABEBDD9BDBBDCC0BFDBC0BF
+ DBBEBEECD0CFEFD2D0ECD0CFD9BEBDDCC1C1DFC4C2D5BBBAD6BDBBDCC3C2D8BF
+ BED4BBB9D6BDBADCC3C2E4CBC9E4CCCAD2B9B8D1B7B7D6BDBAE2C7C7E9D0CEE9
+ CFCFDAC1BFD4BBB9D6BDBDD6BFBDE1C9C7E4CDCCDFC7C6D9C3C2E6CFCEE3CCCC
+ DFC9C9D7C1C0D7C1C0D8C3C1D6C1C0D6C1BFD9C3C3DBC4C3D4BEBBD5C0BFE5CF
+ CEDBC4C3D1BBBAD5C0C0E1CCCBE3CECDE7D4D2DECAC9D5C1C0D7C3C2D4C0C0D7
+ C3C1E2CCCCF4E0E0F3E0DFE3D0CED9C6C5D8C5C5DAC7C5EBD7D7EEDBDBE3D0D0
+ D1BFBFD4C0BFEEDBD9EDDAD9D5C2C2D2C1C1E6D6D4EBDADAE2D1D1E6D6D6E9D8
+ D9D4C4C5D0C0C0DECDCDEBD9D9EEDCDCDECDCDCFC0C0DFCECE00000000000000
+ 00E4D0CEE4D0CEF3E0DFECD7D5E4CECDF3DEDBF0DBD9EBD6D4EBD7D6EFDBDAEF
+ DBDAEEDAD9E9D6D5E6D2D2EBD7D7EDDAD9EAD6D6ECD8D8E2CFCEE5D0D0F0DCDB
+ E4D0D0DFCBCAEAD6D5E7D4D2ECD8D7F0DCDBE1CCCCDECACAE1CCCCE1CCCBEAD5
+ D4EFDBDAECD7D7ECD8D6EBD5D5EAD4D4E9D4D2EBD6D5E5D0CFDEC9C7E9D4D2E7
+ D2D1E7D2D1EAD4D2EAD2D1E5CECDE4CDCBECD2D1DCC4C3E4CBCAEED7D5E1C7C7
+ EBD1D0EFD8D7E7D0CFEDD5D4EDD5D4EDD5D5E9D1D0DCC5C3E0C7C6E0C7C5E7CE
+ CDE2CAC9E5CCCBE2C9C7DCC2C0D9C0BFE3CAC7E7CECDE4CBC9DFC5C4E2C6C4E5
+ C9C7E7CCCAE7CBCAEBCECCEDCECFE7CBCAE6CAC9E5C9C7E7CCCBE7CDCCE3C7C6
+ DCC0C0DFC3C2E9CCCBE9CECDE2C6C6E7CCCBE9CDCCE3C7C7DBC0BFE5CAC9E5C9
+ C7E2C4C2EACBC9ECCCCAE4C4C3E2C1C0E9C9C6ECCCCAECCCCAE4C5C3E7C6C5E9
+ C7C6E9C5C3E3C0BEEAC5C3EAC4C3EAC4C2E9C3C1EAC4C2ECC7C4ECC9C5E7C4C1
+ EFCCCAF4D0CDEBC5C2F3CBC9F3CAC7F0C7C5EAC0BEE2B9B7DFB5B3EBC1BFEFC5
+ C3E0B5B3EBBEBBECBEBAEEBFBBF2C2C0EABAB8F2C2C0F0C1BFEBBEBAEEC0BEEE
+ C0BDF0C0BEEEBDBAEEBDB9F0BFBBF0C0BDF4C3C1F4C5C2EEC1BEECBDB9F5C4C1
+ F4C2BEEAB7B5EDBBB8F2C0BEEBB9B6ECB8B6EDB9B6F0BAB7F0BBB7EBB3B0EEB3
+ B0F4BEB9F4C1BDF0B7B4F5B8B5F3B7B3EDB1ADF6B8B4F7BDB8F4BDB8EDB9B5DC
+ A19CDE9F9CF2B7B5EFB7B3EEB5B1E1A6A3E1ABA8F2C4C0EAB5B2ECB5B2E3B1AD
+ E2AAA7EDB3AEEEBAB7EFBBB8EDB6B3ECB6B3EFBAB7F2BAB6F4BEBAF2BFBAF0B8
+ B5ECB1ADEDB6B4F2C0BDEDBAB7F0BBB9F0BBB9EDBAB6F0BAB8EFBBB8ECB9B6E7
+ B8B5E5B9B6EAC1BEEBBFBBEBBDBAECBDB9ECBBB8E4B4B2EFC0BEECC1BEEBBFBD
+ F3C7C5F3C6C4EFC2C0E4B7B4E1B4B2E7BBB9E9BDBAE1B7B5E2BAB8EDC6C4EEC9
+ C6E6C0BFE2BBB9EBC4C3EAC2C1E7BFBDE3BAB8E5BEBDEFC7C6EFC9C7EDC7C6EC
+ CAC7EBC7C6EDCBCAEAC9C7EBCAC9E9C7C6DFBEBDEACAC9EBCBCADFC1BFECCDCD
+ E9CBCBE7C9C7EED0CFEBCDCCE9CCCBEDD0CEEDCFCED8BBBAD7BBBAE9CCCBE5C7
+ C6DABDBBD7BBBAE1C5C4E9CCCCEDD0CFEDCFCEEACDCDECCFCEECCFCFE9CDCCE4
+ C7C7ECCDCDF0D2D1E7CAC9E2C5C4E9CCCBE7CCCAE5CBCBE7CDCCEBD1D0EAD1D0
+ E2C9C7E4CCCBE7CECDE6CDCCD4BAB9D1B8B8DBC2C1E9CECDEDD2D2E9D0CFEFD6
+ D5EBD2D1E9D1CFE7CFCEE2CAC9E1C7C7ECD4D4EBD2D2EAD2D2E6CFCEE6D0D0E2
+ CCCBDEC7C6E2CBCAE4CFCDE2CCCCD6C1C0E2CCCCE6D0CFE6D1D0E9D1D0E4CECE
+ E0CAC9E6D2D1E5D0D0E9D5D2E7D4D2EAD5D2E6D2D1E5D1D0E9D4D4E2CDCDEDD9
+ D8F4E0DFF4E1E0EFDBDBEAD7D6E4D0CFE9D5D4E6D4D2ECD8D8EDDADAE6D4D2E6
+ D4D2EFDCDBEFDEDCE6D6D5E0CECEECDBDBEBDADBE5D5D4E9DADAEBDBDBDBCCCC
+ D1C0C0E3D1D1EFDFDEF0DFDEDBCBCACFC0C0E5D6D50000000000000000F0DCDB
+ EFDCDBF3E0DFF2DFDEF3DFDCF7E1E0F4DFDEEED9D9EDDAD9EFDBDAEBD7D5EFDB
+ DAEEDBDAECD9D8EEDBDAEDDAD9EFDCDBF2DFDEEAD7D6F2DEDCF2DFDEECD9D8F0
+ DCDBF2DFDEF0DCDBF2DEDCF2DFDEEBD7D6ECD8D7ECD8D7EAD5D4F2DCDBF2DCDB
+ EBD6D6E9D2D1EDD7D6EED9D8EAD5D4EDD7D6ECD5D5DEC7C6E6D0CEEED8D6EFD8
+ D6EDD5D4EFD7D6ECD5D4EAD2D1E6CECDD8C0BFEDD4D4F3DAD9E6CECDE6CECCED
+ D5D4DCC6C4E7D0CEECD2D4EBD2D4E9D1D0DEC5C4E1C9C7E7CECDECD4D2EDD4D2
+ EDD4D1EAD0D0E7CDCCE4CACAECD0D1E9CECEE6CCCBE4CAC9E1C5C4E5C9C9E5C9
+ C7E4C6C5EBCECCE7CBC9E7CAC9ECCFCFE4C9C7E7CCCBE9CDCCE7CCCBE4C9C7E4
+ C9C7E9CCCBE7CCCBE2C6C5E9CDCDE9CFCEDFC3C2D9BDBDE2C5C3E5C9C7DBBDBB
+ D9BBB9EACAC9E0C0BFDFBEBDEBCBC9ECCDCAECCDCBECCBC9EBCAC7E9C7C5E9C5
+ C4E5C2C1E7C4C3EDC9C7ECC7C5E9C3C2E5C0BFEBC6C4EECBCAEBC9C7EFCCCAF4
+ CECBECC4C2F3CAC7F3CAC7F3CAC9F2C9C6EEC4C3EAC1BEEBC3C1EFC5C2E7BBB9
+ E3B7B4ECBDBAF2C2BFEFC1BFE9BAB8F3C4C2F3C6C3EBBFBDF3C5C2F3C4C1F2C3
+ C0F0C0BEF0C0BDEABAB7EFC0BDF4C5C2F5C7C4F0C3C1EBBBB8F5C3C1F2C0BDEB
+ B9B6ECBDB9EEBFBBEEBDB9E9B5B2E7B4B1EBB6B3F2BBB8EDB4B1EBB2AEF2BFBA
+ F3BFBBEEB5B2F0B6B2EAB0ABE1A7A3F2B5B2F3B9B6E5AEABE0ACA8DB9F9BE2A6
+ A2F0B8B5EDB5B1EDB5B2E4AAA7E0AAA7E5B9B5E5B2AEE3ADAAE1B0ABE3ACA9EE
+ B3B0ECB8B4EFBDBAEEBAB6EEB9B6EEBBB8EFBAB8F4BEBAF3BFBDEEB9B6E5ACA9
+ E9B1AEEFBDB9EDBBB7EEBBB9EEBBB8EEBBB8EFBBBAECB9B6EDBBB8E9B8B5E3B5
+ B2E1B7B4EAC0BEEDC2BFEDC0BDECBDBADEADABE6B6B4E2B4B2DEB3B0EDC2BFF0
+ C6C4EEC3C1EFC3C1EDC0BEEFC3C1EFC4C2EDC2C0EBC2C0EFC7C6F2CCCAEFCAC7
+ E9C3C1F0CBC9F0CAC9F0CAC7E9C2C0EBC2C1F0C9C6EEC7C6EAC4C1F0CCCAEECB
+ C9EECDCBEFCECDF2CFCEEECECDEBCAC9F0D0CFEFCFCEE4C5C4EED0CEEED0CFEB
+ CCCCEDD0CEE3C6C5E2C5C4EDD0CFEDD0CFDABDBDD7BBBBEACCCCEACECDDBBFBE
+ D7BBBBE3C6C6ECCFCFECCFCEEDD1D0EDD1D0EACDCDE7CCCBE7CCCBE2C4C4EBCD
+ CCF0D0D0E1C2C1DCBFBEEBCDCCEBCECDEACECDE5CAC7EDD1D1EDD4D2EAD0CFEC
+ D4D1E6CECDDCC4C3D2BAB8D2BAB9DCC4C2E7CFCDECD2D2E1C9C6E6CECCEBD2D0
+ EED6D5F2DAD8EED7D6EDD5D5EFD9D8EDD8D6EDD6D4EAD2D2E9D2D1E6D0D0E5CF
+ CFE5CFCFE6D1CFE5D0CFDEC9C7E3CDCCE6D1D0E6D0CFE7D1D0E5CFCFE5D0CFE9
+ D5D2E5D1D1E7D4D2E5D0CFECD7D7EBD6D6E3CFCFE1CBCBD5C1C0D7C2C1EBD7D6
+ EEDAD9E7D2D2DCC9C9DECACAE9D6D5DECBC9E9D6D5EDDADAE4D1D1E0CDCDE7D7
+ D7EAD9D8E9D8D7E5D4D4EBD9D9E9D8D8E2D1D1E9DADAECDCDBE7D9D9D1C1C2D2
+ C3C3EFDEDEEFDFDFD1C1C1D0C0C0E6D6D60000000000000000ECD8D6EEDAD9F2
+ DFDCEAD6D5EAD6D4ECD7D5EED8D7ECD7D5EAD6D5E6D2D1E2CDCCE9D7D6E5D2D1
+ DFCCCBE7D4D4E6D2D2E5D1D1EFDBDBE7D4D2EBD7D6EEDBDAEBD7D6ECD8D8F2DE
+ DEEFDBDBEFDBDAEFDBDAE4D0CFECD9D7F0DBDBEBD6D5F2DBDAF3DCDBEDD8D7ED
+ D8D7E7D1D0F2DBDAEED9D8EFD9D8EDD7D6E2CAC9DEC6C5EFD7D6F0D8D6ECD2D1
+ EED5D5ECD4D1ECD5D2E5CECDDBC3C3DCC4C3EED7D5EDD4D4ECD4D1EDD6D4E2CC
+ CBECD4D4EAD1D1E5CDCDE7CFCEE5CDCCE4CBCBE7CFCEE7CECEEBD1D0EDD4D1EA
+ D0CFE1C7C5E3C9C7ECD0D0EDD2D0EBD0CFEACFCDEACFCEECCFCDE7CBCAEDCFCF
+ F3D5D4E7CAC9E2C5C4E1C4C3E1C5C3DFC3C2E5CAC9E9CDCDE6CAC9E3C9C7E9CE
+ CDEACFCEE4CAC9E9CECDEACFCEE9CCCBDBBFBEDFC1C0DCBEBDD8BAB9D8B9B7E4
+ C5C4DEBEBBD9BBB9E6C7C5EBCCCAEDCCCBEECDCBECCBC9ECCAC7ECC9C7E9C6C4
+ E1BEBBE9C4C3EAC5C4E6C2C0D9B6B4E3C1BFEBCAC7DEB9B7E7C2BFE9C2C0DEB5
+ B3ECC4C1EFC6C4F0C9C6F0C7C5EDC5C2E6BEBBE4BBB8ECC1BFEBC0BDE7BBB8EA
+ BDB9EABDB9E5B7B4DEB1AEEDC2C0ECC1BFDFB3B0EEC1BFF0C3C1EEBFBDEFC0BD
+ EFC0BDECBDBAECBEBBECC0BEF0C4C2E6B8B6E6B7B4F5C3C1F4C2BFF0BFBDEEC0
+ BDEABAB7EEBDB9EEBDB9ECB8B5EDB8B6EFB9B6EDB5B2E7B1ADEDBAB7EFBBB7E9
+ AEABEFB5B2E7AEABE3A8A6F2B8B5EBB4B1DBA7A4DBA7A3DBA19DE9ADA9EEB7B4
+ E9B2AEECB4B1EBB3B0E1ACA8E1B5B2E3B1ADE3ADAAE3B2ADE6B3B0EAB1ADEAB5
+ B2EEBEBAEDB9B7ECB8B4ECB9B6ECB8B4EDB8B5EFBDB8EDBBB8E7B1ADE3ABA8E6
+ B3B1E7B7B5EAB8B5E9B7B4ECB9B6EBB9B6EBB9B6EFBEBAEEBEBAEDBFBBEABFBB
+ EFC6C4EFC5C2F0C4C1EDC0BDE9BAB8F0C1BFE3B6B3DAB0ACDBB0ADE6BBB9EAC0
+ BEEFC3C1EEC3C1EFC4C2EEC3C1EBC0BEEDC2C1EEC5C3EEC6C5EDC6C5EDC7C6F0
+ CCCBEFCBCAF0CCCAEEC7C6EDC6C4F2CAC7F0C9C7EEC6C5F4CCCBF2CECCEFCDCC
+ EECDCCEFCFCDEAC9C7E1C0BFEECECDECCCCCDEBFBEECCDCCECCECDE7CBCAEBCE
+ CDE2C5C4DEC1BFEDD0CFEED0D0E5C7C7D7BBBBDBBFBEDEC1C0D7BBBBD9BEBDE7
+ CBCAEBCFCFEBCECDF0D2D1EFD2D1EBCECDEFD2D1F3D5D4EED0CEF0D2D1F4D5D2
+ F0D1CFE5C9C7ECCECDECCFCDECCFCEE2C6C4E9CECCEDD1D1E9CECCEAD1CFDAC2
+ C1D1BAB9D2BBBAD8C1C0E3CCCBE9D0CFEAD2D1DFC6C5E6CDCDEED7D6ECD2D2F3
+ D9D8EED6D5EAD2D1EDD7D6EDD7D5EDD6D4E9D4D1E6D0D0E7D2D1E5CFCEE3CDCD
+ E5D0CFE6D0CFE4CECDE5CFCEE6D0D0E3CDCCE0CAC9DCC6C5E2CDCDE2CECDE3CF
+ CFDFCACAD9C4C3E6D2D1E7D4D2E9D4D4E9D4D2DEC9C7D8C4C3EEDADAF0DBDBED
+ D9D9E4CFCFDAC6C6EBD7D7E9D6D6E9D6D5EAD7D7D9C5C5D7C4C4DBCBCBDECCCC
+ DECDCDE4D2D2E9D8D8E4D2D2DCCCCCE3D4D2E9D9DAECDCDCD8C9C7D2C2C2D5C6
+ C6D5C4C5CFBFBFDBCCCBF2E0DF0000000000000000D7C2C1DCCAC7E5D2D1EAD6
+ D5EFDAD9F2DCDBEFD9D8EFDBD9F0DBDAEEDAD9E6D1D0EBD8D7EBD7D8E7D5D4EB
+ D7D8ECD9D8E1CDCDE9D7D6E6D2D1EDDAD9EFDCDAEEDADAE6D2D2EDDAD9EFDADA
+ EFDADAECD9D7D6C2C1DECAC9E2CECDDAC5C4EAD4D1EDD6D5ECD6D5EDD6D6F3DB
+ D9F9E2E1F5DEDBF3DBDAF5DCDAEFD7D5E3CAC9EBD1D0EBD1D0E9D0CEEAD0CFEC
+ D5D1EFD6D5EDD5D4ECD2D1E6CFCEEDD5D5EAD2D1F2D8D8F0D9D8E9D1D0EDD5D5
+ EDD5D4EAD1D1E7D0CFDFC6C5E2CAC9E6CDCDE0C6C6E3CBCAE9CFCFEAD0CFDCC2
+ C1DBC1BFE4CACAE6CCCBE7CCCBE7CCCCE6CBCAE7CBC9E2C5C4ECCFCDF4D6D4EE
+ D1CFE4C9C7DEC2C2E5CAC9E9CDCCE7CCCBE2C7C6E0C5C4E5CAC9E9CECDEACFCE
+ E7CCCBEBCFCEEBCFCEE9CCCCE1C4C3E1C3C2DBBEBBD9BDBBDEC1BFE9CAC7DEC0
+ BFDABBB9E6C6C4E7C7C5EACAC7E5C5C2E7C5C4EBC9C6ECCAC6E7C4C2E1BEBDE1
+ BFBDEAC7C6EDCBC9EAC7C5EECECBEFCCCAEAC5C2ECC5C3ECC4C2E0B8B5EFC6C4
+ F0CAC7F3CBC9EFC7C5EAC2C0E6BFBBE7BEBBEBC0BEEBBFBDE7BBB9EBBEBBEEC1
+ C0EDC2BFDFB5B3EEC3C2ECC1BFE0B3B1EDC1BFF0C2BFEBBDBAEDBFBDEFC1BEEB
+ BDBAEABFBBECC0BEEFC3C1E6B9B6E9BAB8F3C2BFF4C3C0F4C5C2F0C1BEECBDBA
+ F2C0BDF0BFBBEDBBB8EEBBB8EFBAB6EDB5B2ECB7B4EFC0BBF0BBB8EEB6B2F3B9
+ B7EEB5B3EAB0ACF2B9B6F4BFBAE4B1ADDEAAA6E3A8A5F4BAB6EFB9B6EAB5B2EE
+ B7B4EFB8B5EAB6B2E3B7B4E2B2AEE5B1ADECBAB7ECB9B6E7B0ACEAB6B3EBBDB9
+ EAB7B5E9B5B2E9B6B3E4B2AEE6B3AEEEBAB7EDBEB9EBB7B4ECB5B2EBB6B3ECBB
+ B9EBBBB8EAB9B6EDBDBAEBBAB7E9B8B5EBBAB6EAB9B6EABAB8E7BAB8ECC2C0EC
+ C3C1EFC5C2EFC3C1EDC0BEF0C3C0EBBEBADBAEACE3B8B6F5CAC6ECC2C0ECC3C1
+ EEC4C2EFC4C2EFC3C1EABFBDECC2C0EDC3C2F0C9C6EDC6C5EDC9C7EFCBC9EFCC
+ CAEFCBC9ECC7C6EAC5C3F0CBCAEEC9C6EFC7C5EEC6C5F2CCCAF2CDCCEFCDCBEE
+ CDCCE9C7C6DCBDBAEACAC9ECCDCCE0C2C1EBCDCCE9CBCAE7CAC9EED0CFE4C6C5
+ DCC1C0E7CBCBECCFCFE9CCCCE2C6C5DBC0C0DCC0BFDCC0BFDEC1C0DFC2C1DEC2
+ C1E1C3C3DEC0BFE3C6C5DFC2C1DCC0BFE6C9C7E4C7C6E5C7C7EFD1CFE7CAC9DE
+ C0BFE5C7C6E7CBC9E9CCCBD9BDBDDEC3C2EACFCEEACFCDE7CDCCE3CAC9D8C0BF
+ D6BFBEE9D2D0EAD4D2EDD5D5EED8D7EED7D5EFD8D7F0D9D8EFD7D7F3DAD8E9D1
+ CFE1CAC9EDD5D4EDD6D5EAD2D1EAD2D1E9D4D1E6D0CFE5CFCEE7D1D0E6D0CFE4
+ CFCEDFCAC7E3CECCE4CECDE4CFCEE5CFCFE1CCCADBC9C7E9D5D4E7D4D4E3CFCE
+ E5D0CFE7D4D2EDD9D8EAD5D4F3DCDCECD8D7E9D5D4F2DEDCF3DFDEF2DCDCECD8
+ D8E9D5D4F2DEDCEFDCDBEFDCDBF0DCDBE6D2D2EBD9D9E5D4D4DECDCDE5D4D5EA
+ D9D8EBD9D9E5D5D5DFCECEDACACAECDCDCEFDFDEE1D0D1DACACAD4C4C4D2C3C3
+ DBCBCAEFDEDEEDDBDB0000000000000000D9C4C3E2CDCCE1CCCBDBC7C6EBD6D5
+ E7D4D2E1CCCBE6D1D0EAD6D5F0DBDAEEDAD9ECDAD9EEDBDAE6D2D2ECD8D8EDDA
+ D9DCCAC9E5D1D1ECD9D8E9D6D6EFDBDBEBD7D7E7D4D4E7D4D2EAD7D6F2DEDCF2
+ DEDEDBC7C6E3CFCEEBD7D6EBD5D4F3DBDAF3DAD8F3DBDAE7D0CFEED6D5FBE2E1
+ F9E1DFF3DCD9ECD4D1E4CBCAECD2D0F0D9D6E9D0CEEED5D5EFD6D5EDD5D2E5CE
+ CBE9CFCEEAD0CFE3CBC9EDD5D5EDD4D2F0D8D7EFD8D7EAD2D1EDD5D4EDD5D5E7
+ D0CFE7CECEDCC4C3E0C6C5E9D0CFE7CECDE2CAC9E9CFCEEAD1CFDFC5C4DCC1C1
+ E3C9C9E7CECDEACFCEEACFCEE6CBCAE2C5C4E0C4C2E9CCCBF2D5D4F0D5D2E9CD
+ CCE3C9C7E7CCCBEBD0CFE9CECDE7CDCCEAD0CFE6CBCAE7CDCCE6CCCBDFC3C2E9
+ CDCCEACDCCE6C9C7E5C9C7E9CBCAE4C7C6E6C9C7EACDCCEBCCCBDCBEBDD8B8B7
+ D9BAB8E1C0BEDFBEBBD9B8B6E0BFBDECCAC7EECACAEDC9C7EDCBC9E9C7C4ECCB
+ C9EAC9C7EAC7C5EFCCCBEFCBCAE9C2C0ECC5C3ECC5C2E7C0BEF4CCCAEFC9C6EF
+ C7C5EFC9C6EDC5C2EAC1BFEABFBDE7BDBAE4B9B7E3B8B6E7BDB9EDC2C0EBC1BF
+ E1B8B6ECC2C0EDC1BFE1B4B2EBBEBBEEC0BFE7B9B6EABBB9EBBEBAEBC0BDEDC2
+ BFE9BFBBEEC2C0E6B9B7E2B4B1E5B6B3EFC0BEF2C3C1EDBFBDE9B9B6EDBDB9EF
+ BEBAECB9B6F0BDB9EEB9B5EEB7B5EAB8B5EDBDB9F0BAB8EFB7B4F0BAB7ECB5B1
+ E9B1ACEDB7B4F2BEB9F4C1BEF2BFBAF3B9B6F4BBB8F2BDB9EDB8B5EFBAB7EFB8
+ B6EFBBB8ECC0BBE3B4B1E9B5B2EDBDB9EDBBB9EBB5B2EBB6B3EDBDBAEBBAB7E6
+ B3AEEDBBB7ECBBB7EAB8B4EDBAB7ECBAB7E6B6B2ECB6B3EBB6B4EBB9B7EABAB8
+ E9B8B5EDBDBAECBBB8EAB9B7EDBDB9E9B8B5E4B5B2E7BAB7EBC0BDEAC1BFECC4
+ C1ECC3C0E7BDB9EFC2C0EBBEBAE7BAB8F5C9C5F5CBC7F2C7C4F4CAC7F3CBC7F2
+ C7C5F2C7C5EDC2C0F0C4C3F0C6C4F0C7C5F0C9C6EFCAC7EFCAC9EBC9C6EECAC9
+ EFCBC9EBC6C4F0CCCBF3CDCAF2CBC9EEC6C5EEC9C6EFCAC7EFCCCAEFCDCCEECD
+ CCDFBFBEEACAC9E9CACAE3C5C3ECCECEEACCCBE9CBCAEDCFCEE6C9C9DCBFBFE0
+ C3C2EBCFCDECCFCEEACECDE6CAC9E9CDCCE9CCCBE2C5C4E7CBCAEACDCDEBCECE
+ E7CAC9EACDCCEDD0CFE5C6C5E3C5C3E2C5C3E6CAC7F2D5D2EED0CFECCFCDEBCD
+ CCE7CCCAEDCFCEE6CACAE4C9C6EACFCDEACFCEEAD0CEECD1D0EAD1D0E3CBCAEC
+ D4D2E9D0CFEDD6D5EFD9D8E7D1D0E9D1D0ECD4D4E1CAC9EED7D6EBD4D2E3CCCB
+ EDD5D4EDD6D4ECD4D5EAD4D2EAD2D1E7D1D0E2CBCBE6D0CFE3CDCDE1CACADBC5
+ C5DBC4C4DEC7C7E6D1D0E9D4D2E4CECEDBC9C6E6D2D2E9D5D5E6D1D1E3D0CFEA
+ D5D5EDDAD9E4D0CFF3DEDEF3DCDBEBD7D6F2DEDCF3DFDFF2DEDCF2DEDCECD9D9
+ EFDBDAF3DFDFF3E0DFF0DEDCEDDBDAF0DFDEEBD9D9E1D0D0DECDCDE4D2D2EDDC
+ DBEDDCDBE7D7D8E0D0CFE6D7D6EEDFDEEBDADAECDCDCE4D4D4DAC9C9E1D0CFE9
+ D8D7E4D1D10000000000000000E5D1D0E5D1D0E6D4D2DECAC9E3CECDE1CDCCD7
+ C2C0DCC9C7E9D5D4EEDBD9E3D0CFDFCCCCEDDBDAE6D4D2E9D7D6ECD8D8DECBCA
+ E2CFCEEBD8D7ECD9D8EFDBDBEDDAD9E7D4D2E9D5D5E5D1D1EFDBDAF0DBDBE0CB
+ CBEDD9D8EFDBDAF2DEDCF2DAD8F0D9D7F8E0DEF0D8D7E9D0CEF3D9D8EAD0CFE0
+ C7C5DEC6C3D6BEBDE4CBCAEED6D6E7D0CEE2CBC9E9D2D0E4CDCBD8C1C0D8C1C0
+ DFC7C6DCC4C3EAD1D0EBD2D1EAD1D0E5CDCCDCC5C4E0C9C9E6CECDEAD1D1E7CF
+ CFE3CCCBE9D1D0EDD4D2ECD1D2E6CDCCECD1D1EDD2D1EAD0CFE9CECDEACFCFE6
+ CCCBE6CCCBEDD1D0EDD2D1ECD0CFE7CBCAE4C7C5F0D4D2F0D5D4E9CECEE4CAC9
+ DCC2C1E6CBCAE7CECDE6CCCBE6CCCBDFC4C4E3C9C7E4CAC9DBC0BFE7CBCAEBCE
+ CDE9CCCBE4C7C6E9CCCBEACDCBE7CBCAEBCECDEDCFCEE4C6C4E1C1BFE2C2C0E6
+ C5C4EBCAC7E3C1BFE3C2C0E9C7C5E1BFBDDFBDBAE9C7C5EDCCCAEBCAC9E5C3C1
+ E4C1BFEFCBC9F0CAC7E6C0BFEEC6C4EBC3C2E2BBB9ECC4C2EEC6C5EFC9C6EEC5
+ C4E7C0BDE3B9B7E6BBB9E6BBB9E9BDBBE2B8B5E1B6B4EAC0BEEBC2C0E3BAB7EB
+ C1BFEBBFBDE9BDB9E2B6B3E3B6B4E0B3B1E4B8B6E7BBB9EABFBBECC3C0ECC1BE
+ ECBFBDECBFBBEDBEBAE3B5B3EABDB9EDBFBDE9BAB8E9B9B6EDBEBBEDBDB9E5B4
+ B1EAB6B4EBB6B4ECB7B4E3B3B0E6B6B3EAB4B1ECB6B2EEB8B4EBB5B2EEB7B4EE
+ B8B5EEBAB7F2C1BEEFBBB8F0B7B5F2B9B6ECB7B5E3B0ACEBB6B2ECB6B3ECB8B5
+ EABEBAE2B4B1E5B3B0EBBAB6E4B5B3E4B0ACE7B4B1EABAB7EABAB7ECB9B7EEBD
+ B8ECBDB8EBB9B6EDBAB7EBBAB7E4B5B2E6B3B0E6B1ADE3B2B0E1B4B2E1B4B0EA
+ BAB7EBBBB8E9B9B7EEBFBDE9B9B6E1B2B0E3B6B3ECC1BEE9BEBBE7C2BFE7C1BE
+ E5BDB9E7BDBAE1B4B2DEB1ADEEC2C0F2C7C5EFC6C3F3CBC7EFC7C4ECC4C1F2C7
+ C6F0C5C3EFC4C2EDC2C1ECC2C0EFC6C3ECC5C3EDC6C5E3BFBDE4C2C1E6C3C1EB
+ C6C5EFCCCAF4CECDF2CCCBEFCAC7E2BAB9E1BBB9E3BFBBE7C3C2EECCCBE3C3C2
+ ECCCCBECCDCCEBCCCBECCECDEDCFCEEDCFCEEBCFCDE6C9C7E5C9C6ECCFCEEFD2
+ D1EED2D1ECCFCEE9CCCBEBCFCEE4C9C7E0C4C4E3C9C7EDD0CFF2D5D4EFD4D1EE
+ D1D0EED1D0F2D4D1F3D5D4EBCECCEBCECDEFD1D0EFD0CFEBCDCBE6CAC7E6CBC9
+ EED2D0EACFCDE5CAC9ECCFCEE9CDCCEDD2D0EED4D2EED5D2E9D0CEE9D0CFDCC4
+ C3EDD5D4F0D9D8E3CDCBE1CAC9E7D1CFDBC4C3EBD4D2E9D2D1E0C9C9DFC7C7D8
+ C3C1DFC9C9E6D0D0E7D1D0E5CFCEE6CFCEE9D1D1E3CDCCE7D0D0E3CDCCE0CBCA
+ DEC9C7E7D1D1E6D0CFDECAC9DAC7C6E5D1D0E6D4D2E5D1D0E2CECEE3CFCFE6D2
+ D1DCC9C9EAD6D6EAD7D6ECD8D7EFDBDBF2DEDCECD8D7EAD6D4EDDAD9EBD7D7F3
+ DFDFF3E0DFF0DEDCE9D7D8EBD9D8E5D4D4DBCBCADECCCCE2D1D0EDDBDBEDDCDC
+ E9D8D8E4D4D2E5D5D4EDDCDCEBDADAEFDFDEEFE0E0E9D9D9EBD9D9EEDCDCEFDC
+ DC0000000000000000E5D2D1EDD8D7EEDAD9F2DFDCF2DFDCF0DCDBEBD6D5EBD6
+ D5E5D0D0E4D0CFCFBBBAD0BFBEE6D4D4EBD8D7F0DEDCF0DFDEE6D2D1EDD9D9F0
+ DEDEF0DEDBECD9D8EFDCDBF0DCDBEDDAD9ECD7D8EED9D9EDD9D8E2CECDE5D0D0
+ E4CFCEE1CBC9DFC6C5E7CFCEF8DFDEEDD5D4E0C7C6DEC5C3C9B0ADCBB3B2CEB6
+ B4CBB4B3D1BAB8EAD2D1E6CFCFDBC3C3E0CAC7EBD4D2E9D1D0E9D1D0EAD2D1E0
+ C7C6DEC5C4E4CBCAEAD1D0EDD6D4DCC4C4D1B9B9D5BEBDECD2D4E7CFCFE7CECD
+ EBD2D1EDD4D2ECD1D1E9D0CFECD1D1EAD1CFECD0D1E9CFCEE6CCCBD1B8B7D2B8
+ B8EAD1CFEFD5D4F0D6D4F0D4D2E5CAC7F3D6D5F2D7D5EBD0CFE6CDCCE4CBCAE3
+ CAC9E6CDCBE6CCCCEACFCEE4CAC9E6CAC9E6CBCADEC1C0E9CCCBEBCECEE5C9C7
+ D8BBBADABFBEEACECCE5C9C7EDCFCEEED0CFEDCFCDEECECDEDCCCCEECCCBEFCE
+ CDECCBC9E9C6C4E9C6C5D5B4B2D6B5B3E0C1BFE4C4C2EBCAC9E0BDBBD9B6B5EC
+ C6C5EFCAC7E2BBB9E4BFBDE7C2C0DEB6B4E4BEBBEEC6C4EFCAC7EEC6C4ECC3C2
+ EBC2C0EAC0BFEBC1C0ECC2C0EAC0BEE4BBB9E7BEBBE3BAB8E5BDBAECC2BFEBC1
+ BEE4B9B6DAAEACDAAEACE1B4B2EABFBDEBC1BFEDC3C1EDC4C1EDC3C0EDC2C1EE
+ C1BEEFBFBEE7BBB8ECC1BEEEC1BFEABBB9EABBB8ECBDB9EDBDB9EBB9B7EDBAB8
+ EDB9B6EBB9B6ECBFBBEDBDB9EEB8B6EEB8B6EEB9B6EDB7B4ECB6B3EAB6B3EEBD
+ B8F0C0BEEDB9B7ECB5B1EEB8B4E3B2AEE2AEACE9B5B2EAB4B2E6B3B1EABEB9E3
+ B7B4EAB8B5ECBBB7EABBB8E9B6B3ECB7B4ECBBB8EBBDB9ECBAB7EEBBB8EEBFBB
+ EDBEBAEEBEB9EEBEBAEBBDB9EAB9B6E9B5B2EAB8B5E7B9B7E3B6B4ECBDBAEBBB
+ B9ECBEBAF0C0BEE9B8B6DCAEABDCAEACEDC1BFEDC3C0EDC5C2ECC6C4ECC4C2EC
+ C2C0EABFBDEBBFBDEFC3C1EFC4C2ECC3C1EFC7C5DBB4B1D8B1AEEAC1BFEFC4C3
+ F2C7C6EEC3C2E9BFBDEBC2C0EDC5C3EFCAC7E4BFBEE6C2C0EBC7C6EAC5C3EECA
+ C9EFCAC7E4C0BDDAB6B4D4B0ADD6B0ADD5B1AED6B3B1E7C4C2E9C7C5EBCCCAEA
+ CBCBE9CBC9EECFCEEED0CFEDCECDD8BABAD7B9B8DEC1C0EED1D0F0D4D1EFD4D1
+ EFD4D1EFD4D2F0D4D2E9CECDE5CAC9E7CCCBE7CCCBF0D4D2EFD2D1EFD2D1EACD
+ CBE7CBCAECCFCDE3C5C4E6CBC9E4C6C5ECCECCECCFCEDABDBDDABFBEE4C9C7D9
+ BEBDD8BDBAD6BAB9D4B9B7DBC0BFEED4D1EED4D2EDD2D1EAD0CFD9C1C0EED6D4
+ F3DAD9EFD8D7F0DAD8F3DBDBE9D2D1EFD9D7EDD8D7E5CFCED5BFBED2BDBBDAC3
+ C3E6D0CFEAD4D1E5CDCDEAD4D2ECD5D5EBD4D2ECD5D4E7D1D0DCC7C6DCC7C7E4
+ CECDD4BEBED2BFBFD2C0BFD6C2C2E5D1D1E6D4D2E7D5D4E6D5D4EAD6D7EAD6D7
+ EDDBDAEBD9D8ECD8D8EDDADAF0DEDCEBD7D6F2DEDEEFDCDBEDDAD9F3E0DFF2DE
+ DCEEDBDBEFDEDCF0DFDFEDDCDCEBD9D9ECDADAE2D1D0E2D0D0ECDCDCE6D7D6E6
+ D6D5E7D7D7F0DFDFEFDEDEF0E0E0F0E1E1EEDEDEEFDFDFEEDEDCF2E1E0000000
+ 0000000000E9D5D4E9D6D4ECD8D6EFDAD9F2DEDCECD8D6DCC9C7E6D2D1DCC7C6
+ DCCAC9CFBDBAD1C0BFE3D1D0ECD9D8EEDADAEDD9D9D8C6C5D6C4C3E6D4D2ECD9
+ D8E9D6D5ECD9D8EDDAD9EBD7D7EDD9D9EEDBDAEEDAD9E6D1D1F2DCDBF6E0DFF9
+ E3E2F0D8D7EDD5D4F7DFDCEBD2D0D8C0BFE2CAC7DCC4C3EDD6D4EDD6D5CFB7B6
+ CDB7B5ECD5D5F2DAD9EED7D7E1CAC9EAD2D1EED6D5EDD5D5EDD6D5EDD6D5EDD4
+ D2EDD4D2EED7D5EDD6D4E5CDCCD1BAB8D4BDBBECD2D4E7CFCFE4CCCBECD2D2ED
+ D5D4ECD2D1EBD1D1ECD2D1EAD1CFE9CFCEE2C9C9E1C7C6D1B8B7D1B8B7E7CDCD
+ E6CCCCECD1D0EED2D1E4C7C6F0D5D4F0D6D5E9D0CFE7CFCEE9CFCEE2C9C7E6CD
+ CBEACFCEECD1D0E7CCCBE9CDCDE7CCCBE1C5C3E7CCCBEACECDE6CBCAD8BDBBD9
+ BDBDE9CBCAE9CBC9E9CBCAEACCCBE3C4C3EBCCCAECCCCCEACAC9EDCCCBE6C5C4
+ E7C6C5E2C2C0D5B5B3D5B6B4DEBEBDE9C9C6ECCAC7E4C1BFD9B6B4EBC6C4EECA
+ C7ECC6C4EDC6C5F3CDCBF0CAC6E6BFBEE7C1C0ECC5C3EEC5C4ECC3C0EAC1BFE0
+ B7B5EBC2C0EBC2C0EAC2C0E6BFBEE7C0BEE5BDBAE7BFBDE9BFBDEBC1BFE4B9B6
+ DAAEACDAB0ADE2B7B5EAC0BEECC4C1EDC3C1EBC2C0EBC0BEEBC0BEE9BAB8EABD
+ BAE3B8B6EBBFBDECC1BEE6B8B6E5B6B4ECBEBAEEBEBAEAB8B6EDBBB8EEBAB7ED
+ BDBAE9BEB9EBB9B7EDB9B6EBB7B4ECB8B4E9B4B1EBB6B3E5B3AEEDBBB9F0C0BD
+ EDBAB7EFB7B5F0BAB7ECBAB7E9B6B3EDBAB7EDB8B6EDBAB7ECC0BDE5B9B6EBB9
+ B7ECBDB9EABBB8E6B4B1EBB6B4EBBAB7EBBDBAE9B9B6EDBDBAEEBFBBEDBFBBED
+ BEBAEEBDBAEDBFBBEDBFBBECBAB7ECB9B6EABBB8E5B9B6ECBEBBECBEBBEDBFBB
+ F0C2BFEABBB9DCAEABDCAEACEDC1BFECC1BEEAC1BFEBC5C2ECC5C3ECC4C2EAC0
+ BEE9BEBBE9BEBBE9BEBBE4BAB8E3BAB8D9B2B0D8B2AEDEB6B4EFC6C4F3C9C6EF
+ C5C3EFC4C3ECC3C1F2CAC7F4CCCBEBC4C2E7C2C0F2CCCBEECBC9F4CFCCF2CCCA
+ E2BEBBE6C2C1DFBBB9EBC6C4E1BBB9D5B1B0D8B5B3DCBAB9E3C2C1E9CAC9E7C9
+ C9EECFCEEED0CFECCECDD8BAB8D7B9B8D7BBBAEACCCCEED1D0EFD4D1EED4D2EE
+ D2D1F0D4D2EDD2D0EDD1D0EBCFCEECD0CEF0D4D2EED2D1F2D4D4ECCECEE2C5C4
+ E6CAC9E7CBCAE6CBCAEACCCBEACCCBEDCFCFDCC1BFE0C3C3E6CBCAD8BEBBD6B9
+ B9D5BAB8D4B9B7D6BAB9ECD0D0EBD0CFEED4D2EAD0CED5BBB9E0C6C5EED5D5E5
+ CDCCEDD6D4EED7D5E4CDCCEAD4D2E6D1D1E9D2D1D1BDBAD0BAB9D8C2C1EAD4D2
+ E6D0CFE4CECDEAD4D2EAD4D2ECD5D4ECD5D5EAD4D2E3CCCCE5CFCFE5CFCFD9C4
+ C4D7C3C3D4C0C0D2C0BFD5C2C2E1CECEECD9D9ECD9D9ECD9D9F2DEDEF0DEDBEA
+ D7D7ECD9D9EEDBDBEFDCDCE9D6D6F2DEDEF2DFDFF2DFDFF4E1E1F2DFDFECDAD9
+ EEDCDCF0DFDEEBD9D9E5D4D2E7D7D6DACACADECDCCE6D6D6E5D4D4E4D2D2ECDB
+ DBEFDEDEEDDEDCF0E0E0F0E0E0EEDEDEE9D9D8E9D9D8EEDCDB00000000000000
+ 00E5D1CFD7C2C1D1BEBBD9C4C3E3CFCED5C2C1D2C0BFE2CCCCEED8D9F0DCDBD0
+ BFBED0BFBEEFDEDEF0DFDEEEDBDAE1CFCDDECBCBD6C4C3DBC9C7EDDAD9EBD7D7
+ EBD7D7E1CECEDAC7C6E1CDCDE2CFCEEAD6D5E6D1D1F3DFDCF8E2E1E5CECCDCC4
+ C3DCC4C3EAD1CFF9E1DFF3DAD9F3DAD9EED7D6ECD6D4E1CACACEB7B6CDB7B5E3
+ CBCAF4DBDAF2DAD9EAD2D1DCC5C4EED6D6E3CBC9DCC5C3E5CDCDE3CACAD7BFBE
+ DBC3C2E7CFCEE1CAC7D1BAB8D1B9B8E3CBCAE3CBCADAC2C1DEC5C4DFC5C5E1C9
+ C6E1C7C6DEC4C4D6BEBEDBC1C0E2CAC9E2C9C6D1B8B7D1B8B6EDD4D2E9CFCDEB
+ D0CFDBC0BFD5BAB9DCC2C0F0D6D4E4CBCAE7CECDE6CDCCE3CAC9EACFCEECD0D0
+ EACECDE0C4C3E6CBCAE6CCCBDEC2C1E1C5C4EBCFCEE9CDCCD8BDBBD7BAB9E2C5
+ C3E9CAC9E9CBCAE4C6C5D9BABAE1C2C1E4C5C3DFC0BFDEBEBBE0C0BFEECECCEB
+ CBC9D5B5B4D5B6B4E3C2C1EDCBCAEECCCAE2BFBDD8B5B3E2BFBDEECBC9EDC9C6
+ EEC9C7F4CECCEFCAC7E3BDBADAB3B1DFB7B5EBC3C1ECC3C2E7BFBEDAB2B0E2B9
+ B8E9C1BFE4BDBAE3BBB9E2BAB8DFB6B4E1B9B6EAC0BEECC1C0E9BEBBDBB0AED9
+ B1AEE3BAB7E5BDBAEAC1BFE6BEBBE0B6B4E4B9B6E7BEBAE3B8B5E2B6B4E0B6B4
+ EABFBBEEC1BFE5B8B5E1B3B0ECBDBAEABAB8E0B0ACE1AEABE2B0ADE1B2B0DEB1
+ ADE2B1ADE9B5B3E9B5B2E1AEABE0ABA8DFACA8DEACAAE2B3B0EDBFBDEEBBB8EE
+ B8B4E4B1ADE2B1AEE4B3B0EBB8B5EDBAB6ECBBB7EBBFBBE2B6B3E4B5B2E9B9B7
+ E6B9B7E7B6B4EAB6B3EAB9B6E1B6B3E1B3B0E6B6B3E7B8B5E3B5B2E9B9B6E7B8
+ B6EABBB8EBBFBBE1B0ADE2B0ADE9B9B6E3B8B5EBBEBAEBBDBAEABBB9EDC0BDE7
+ BAB7DCB0ACDCAEACE4B7B5E4B8B6E1B8B5E3BBB9E0BBB9E2BBB9E2BAB8DFB5B3
+ DEB4B1DEB3B1E2B8B6E1B8B6D9B3B1D7B1AEDFB7B5EEC7C5F4CCCAEFC5C3F2C6
+ C5ECC3C0EFC5C4EEC5C3DBB4B1D9B3B2F2CBC9F5CFCDE6C2C0EAC5C3E7C4C2F3
+ CECDF0CDCCF2CECDE1BEBBD6B3B2D6B4B3DBB8B7E5C4C3E3C3C2E1C1C0EBCCCB
+ EECFCEEFD1D0DCBFBED7B9B8DBBFBEE9CDCCEACDCDDBBFBEDABEBDDABEBDDEC4
+ C3E0C4C4E9CECDE2C7C7E0C4C3DABFBFDABFBEF2D5D4F4D8D7F5D8D7F5D8D7EC
+ CFCEDBBFBEE0C2C2EFD2D0EFD2D0D9BDBBD7BAB9DFC3C2E5CBCAD9BEBED7BBBA
+ D4B9B7DCC2C0EED5D2EBD0CFE9CFCDDCC3C2D5BAB9D7BEBDE7CDCCE4CCCBDEC5
+ C4D9C0BFD5BDBBDBC4C2E0CAC7DAC4C3D1BDBBD0BAB9D7C1C0E4CDCCE0CAC9E2
+ CCCBE3CDCCDEC9C7D9C3C2D8C2C1D5C0BFD5BFBFDFCAC9E1CCCCE4D0D0E5D1D1
+ E0CDCDD2C0C0D2BFBEE5D2D1F0DCDCF0DEDCECD9D9F2DEDEF2DFDEE1CFCEDECB
+ CBE0CDCDD8C5C5DFCCCBEFDEDCEDDCDBD9C7C6E5D2D1E5D2D1D9C7C7E7D6D6EF
+ DEDEE3D1D1E6D4D4DECDCCDBCBCAE6D4D4E4D2D2D6C5C5D6C5C5EAD9D9ECDBDB
+ DECDCDD9C7C7DFCFCEEDDEDCE7D8D8DECDCDDECDCC0000000000000000ECD8D6
+ D2C0BECAB7B5D2BFBEDBC6C5CCB8B7CBB7B6CEB9B8EEDAD9EDD8D7D0BEBDD0BF
+ BEE7D6D5E9D7D6D6C3C3D2C0BFDECBCAD4C1C0D1BFBEE1CECDE6D2D1DBC9C6D1
+ BFBED2BFBED5C1C0D1BFBED2BEBDD5C0BFDFCAC9DAC4C4C7B2B1CCB5B3D4BBB9
+ CAB3B2D9C2C0F6DFDEF2DAD9D5BFBED1BABACEB7B6CDB6B5CEB7B6E9D1CFEBD2
+ D1F0D9D7EAD1D0DCC6C5DEC5C4CEB6B5CFB8B7E0C9C7D4BDBACFB6B5CFB6B5E6
+ CECDDFC7C7D1BAB8D1B9B8D8C0BFDEC5C5D2BAB9D1B8B8D1B8B8D7C0BED8BFBE
+ D2B9B8D1B8B8D6BDBDE6CDCBE2C9C7D1B9B7D1B8B7EFD6D5EFD7D5EED5D2D2B7
+ B6CFB5B3CFB5B4F0D7D6E7CECCEAD0D0EAD0CEE3CAC9E3CAC9DEC3C2D6BABAD6
+ BBBADAC0BFD8BEBED8BDBBD8BDBBE4CBCAE6CAC9D7BBBAD7BBBADCC0BFE4C6C5
+ DFC0BFD7B9B8D7B9B8E1C2C1E1C2C1D8B9B7D8B9B8DBBDBAEFD1CFF2D2D0D5B5
+ B4D6B6B4E2C1C0E7C6C4EAC6C4D8B4B3D6B4B2D7B4B3E5C2C1E6C3C1E7C3C1F2
+ CDCBEEC7C6DFB8B6D6B0ADD7B0ACE7C0BEEFC6C4E7C0BED8B1B0DAB3B2E2BBB9
+ DAB4B2DCB5B4E0BAB7DEB6B3DFB5B3E9C0BEEBC1BFE7BEBBDBB2B0DBB3B1E5BD
+ BAE4BDB9E0B8B6DCB5B3DCB4B1DFB5B3DCB2B0DEB3B0DCB3B0DBB1AEE0B5B3EF
+ C1BFEABDBAE4B6B3EBBDBAECBEBADCADAADCAAA7E0B1ADE2B6B4DCAEACE4B3AE
+ EFBDB8EDBAB7DCAAA7DEABA8E0ADABDCACA9DCACAAECBFBBECBAB7E1AAA8DBA9
+ A6DFAEABE6B6B3EAB8B5EDBAB7EDBBB8E9BDB9DFB5B2E1B2B0E9B9B7E5B9B6E6
+ B7B4E9B7B4E3B3B0DEB2B0E1B3B1E2B4B1DEB0ACDEB1ADE2B3B1E9B9B7EBBBB9
+ E4B8B5DEB0ACDEADAAE7B7B5E7BAB7EABEBBEBBFBBEBBEBAEDC2BFEABEBBDBB1
+ ADDBAEACDEB2AEE1B5B3E0B5B3DBB4B1DBB5B3DEB9B7E6C0BEDBB3B1D9B1ADDA
+ B1AEEEC3C1EEC4C2DCB5B2D6B0ADE7C1BEF3CCCAF3CDCAEFC9C6F2CAC7EEC5C2
+ ECC3C1D9B2B0D5ACAAD6B0ADF4CECBF5D0CED1ADABD9B6B4E7C5C2EFCDCADEBB
+ B9D8B6B5D6B4B3D6B4B3DCBAB9E7C4C3EBCAC7E6C4C3E2C2C1E9CAC9EACBCAEB
+ CCCCD8BBBAD7B9B8DABDBDEACDCDE4C7C6D6BAB9D7BDBBDBC1C0DCC1C1DCC1C0
+ E7CECEE2C6C5D9BFBED6BBBAD6BBBAE7CDCCF0D5D4F3D7D6F2D6D5D5B9B9D2B7
+ B5D4B7B6F0D5D2F0D5D4D7BBBAD1B5B5D2B6B5EDD1D0E0C5C4DAC0BFD2B8B7E4
+ CBCAEED4D2E6CCCBD6BBBAD5BABAD5BBBAD2B8B6DBC1C0EED4D2E9CFCED2B9B7
+ D0B7B6D2BBB9E9D1D0EDD5D5D6C0BFD0BAB9E6D1D0EDD6D6E2CCCBE6D1D0E0CA
+ CAD7C1C1D0BBBAD2BDBDD4BFBDD5BFBFDFCAC9E2CDCDE4D0D0DBC9C7D5C2C3D2
+ C0C0D7C4C4E6D5D5EFDCDBEFDCDBE2CFCFEAD6D7D8C5C5D0BFBED5C2C2D7C4C4
+ D0BFBED1C0BFE4D2D2DECCCBD0BFBFD4C1C0DCCBCAD2C1C0D4C2C1E9D8D8EBD9
+ D9D9C7C6D1C0C0DAC9C7DACACACFBFBFCFBFBFD2C2C2EEDEDCF0DFDFD2C2C2CF
+ C0C0DACACAECDBDBDACBCBD0C0C0D0BFBE0000000000000000E5D0CFCDB9B7CA
+ B7B5EED9D8F2DEDBD1BEBDCAB7B5D4C0BFEFDAD9DAC6C4CEBDBBCEBBBBE5D2D1
+ E4D2D1D0BEBDD7C4C3E9D6D6DECCCBD1BFBFD5C2C1E2CFCED5C1C0D2C0BEDCC9
+ C7E4D0D0D5C0BFCDB7B6D9C4C3F2DBDAD0BBBAC9B3B2EAD2D1F9E2E1DCC6C5CD
+ B7B6E4CECED9C4C3CDB7B6CEB7B6D4BEBDD5BFBEDCC6C5EFD9D8EDD7D5F3DBDA
+ EBD2D1DCC6C5CEB7B5CEB5B4ECD2D1F3DAD8E4CBCACFB6B5D1B9B8EED6D5E7D0
+ CFD1BAB8D2BBBAE6CFCFEBD2D4DEC5C4D2B9B9D1B9B8E7D0D0ECD1D2D5BDBBD1
+ B9B8E2C9C9DCC4C3E0C6C5D0B8B7D1B9B8ECD1D2EDD4D4EAD0CFD0B6B4CFB5B3
+ D0B6B4E3C9C6E5CCCBE7CECCE5CBCADAC0BFDEC2C2D6BBBAD6BBB9DBC1C0DCC1
+ C1DAC0BED7BDBBD8BEBDE9CECDE7CDCBD7BAB9D8BBBAE9CCCAE6C7C6E6C9C7D8
+ BAB9D7B9B8EBCCCBECCDCCDBBEBDD8BAB9DFC2C1EDCECEEDCECED6B7B5D6B6B4
+ E7C4C3E4C1C0E9C6C3D7B5B3D7B5B3D8B5B4E9C5C4EDC9C6E9C5C3F0CCCAF2CC
+ CAEDC5C4DAB4B2D8B1AEE5BDBBEEC5C4E3BBB9D8B2B0DFB8B6E2BDBBD9B4B2E0
+ BAB8E6BFBEE1B9B7E0B7B5EAC0BEEBC3C0E1B9B7DBB3B1DBB3B1E2BAB8E9C1BF
+ E0B9B7DBB3B1E0B6B4E1B6B3DAB0ACE1B6B4E6BBB9DBB1ADDCB1ADEEC2BFECBF
+ BDE7B9B6ECBFBBE9BAB7DBACA9DCACA9ECBFBBEBC0BDDCAEACDCAAA8EBB8B6E2
+ B1AEDBAAA7EAB7B4EEBDB9E2B3B0DAACA9E3B6B4EAB7B5DEAAA7DAA9A5EAB9B6
+ E9B8B5E5B5B2E3B1AEE7B7B4E0B4B2DEB5B1E1B3B0E7B9B6E9BDB9E2B6B3E5B3
+ B1DEADAAE1B5B1EBBEBBE6B9B6DFB1AEDEB2AEE6B8B6E6B7B5E9BBB8E0B4B1DE
+ B2AEDEADABE2B1ADE4B7B4E6BBB8EBC1BEEABEBAEABEBBEBBFBBDBB0ACDBB0AC
+ E2B6B4EABEBBEBC0BEDEB5B3DAB4B1E5C1BEEBC5C3DBB5B3D8B1ADDEB6B3EBC1
+ BFEBC2BFDAB3B0D6AEACE2BBB8ECC5C3EFC7C6ECC6C4ECC5C3EBC4C2E4BDBAD5
+ ACABD4ADABDAB4B1F0CAC7EFCAC9D5B1AEE4C1C0E6C5C4D8B7B6D6B6B4D7B6B5
+ DBBAB9E3C3C1ECCAC9EBCAC9EBC9C7EAC7C6E7C5C4EBCBCAEACBCAE5C9C6D7B9
+ B8D7B9B8D9BEBDF0D4D2EED4D1D6BABADCC0C0E6CBCAECD1D0E7CDCCECD1D0E7
+ CDCBD7BEBED6BBBAD6BABADBC2C1E5CACAE6CCCAE4CAC9D4B9B9D5B9B9D4B9B7
+ EFD4D2F0D5D2E3C7C5D1B5B5D6BAB9EFD5D2E0C4C3D7BBB9D1B8B6E4CAC9EFD5
+ D4DEC4C2D0B6B6E6CCCBEED5D2D7BDBBD0B6B5E6CCCCEDD2D2E1C7C6D0B6B6D8
+ C0BFEDD6D5EDD7D5D5BEBDD0BAB8E7D1CFF0DBD9EED9D8EED9D8ECD6D7DFCAC9
+ D0BDBAD6C2C0DCC7C5E5D0CFE4CFCFD8C4C4D2C0C0D4C2C2D5C3C3D8C5C5E2D0
+ D0E2D0D0EDDBDAE7D5D6D9C6C6D9C7C6D0BFBED1C0BFEDDADAF0DEDED5C2C2D0
+ BFBFE5D4D4DCCBCBCFBFBFE4D2D2EFDEDEDECDCDD0BFBFDFCECEDBCBCAD0BFBF
+ D7C5C5DCCBCBE4D2D1D2C1C1CFC0BFD5C4C5ECDBDAF0E0E0CFBFBFD0C0C0EFDF
+ DFEDDCDCD1C2C1CFBEBEE2D0CF0000000000000000F2DEDBD0BBBBCAB7B5F9E5
+ E3F9E5E4ECD8D6CAB7B5DAC6C5F9E3E2F4E0DFD1BFBECEBBBAEFDCDBE4D1D0CF
+ BEBDE6D2D2ECD9D9EBD7D8D4C1C0D4C1C0E4D1D1D4C0BFD4C0BFEFDBD9EBD7D6
+ DFC9C7CDB7B6D8C3C2EBD6D5CFB8B9CDB7B6E9D2D2F0DAD9E5CFCECCB6B5D4BE
+ BDCFB8B7CFB8B7E9D1D1F2DAD9DBC5C4E7D0D0EBD5D2F0D9D8EDD6D5DBC3C3D5
+ BEBDCDB6B5CEB5B4DFC6C5DBC3C2DFC7C6CEB6B5D1B9B8EDD5D4E7D0CFD0BAB9
+ D4BBBBE9D1D0E7D0CFE0C9C7D4BBBBD2BAB9EDD5D2EDD5D4DFC6C5D1B9B8ECD2
+ D2E7D0CFEED5D4D1B9B8D2BABAF0D8D7EDD5D4E3CBCAD0B6B4D5BBB9D2B8B6DE
+ C4C3EDD2D1EDD4D2ECD2D1E7CECDE9CECED5BBB9D6BBB9ECD0D0EAD0CEE6CCCB
+ D7BBBADAC0BEE9CDCCE5CAC9D7BAB9D9BBBAE7CBCAE4C7C6E6C7C6DBBDBBD7B9
+ B8EACCCBEDCFCDE0C2C1D9BDBBE9CCCBECCFCEEDCFCDD7B7B6D7B6B4EECCCBEA
+ C7C6E7C5C3D8B5B4D8B6B4D8B6B4DFBBB9EECBC9E9C5C3EAC5C4EBC6C4E9C2C0
+ DEB7B5D8B2B1DFB7B5EBC4C3DCB7B5DAB5B4E7C3C0E6C2C0DCB7B5DFB8B6E2BB
+ B9E4BDBBE7C0BEE6BEBDE5BEBBDCB4B3DEB6B5DFB7B5DEB8B5E7C1BFDFB7B4DA
+ B1B0E9BFBDEBBFBDDAB1ADEABFBDECC3C0DBB1AEDAB1ADEBBFBBEABDBAE4B7B4
+ EBBEBBE5B7B4DBACA9DEAEABEBBEBAE3B8B5DCAEABDBABA8E6B5B2DEADAADCAB
+ A8E9B7B5E7B7B4E4B4B2DAADAAE0B3B0ECBAB8DEABA8DAA9A6E5B6B3E5B5B3E2
+ B1AEE0AEABE3B3B0E0B4B2DCB4B1DEB1AEE4B6B3E4B8B5E1B4B1E3B3B1DCADAA
+ E4B8B5EBBFBDE7BAB7E3B6B3DEB2AEECC0BEEBBDB9EABBB9DEB2AEDCB3B0E0B2
+ B0DFADABE4B6B3E7BDB9EEC3C1EDC2C0EFC3C1EFC2C0DAB0ACDAB0ACE9BEBAE5
+ B9B7EBC0BEE0B6B4D9B2B0ECC6C4EDC9C6E7C2C0D6B0ADE4BBBAE5BDB9EBC1BF
+ D9B0ADD5ACAADFB7B6EEC7C5EBC5C2ECC6C4EEC9C7E3BEBBDEB6B5D6AEADD7B1
+ ADDEB7B6E5C1BFEAC5C4D7B4B2E4C1C1E4C2C2D7B7B6DEBEBDEDCDCCEBCBCBEA
+ CBCAE5C5C4DFBEBEDFBFBEDBBAB9DCBBBAE5C5C4E1C0BFD7B8B7D8BABAD9BEBD
+ D7BAB9E3C6C5EACECDDEC2C1D8BEBDDCC1C0EBD0CFEDD1D0EACFCFDFC4C3D7BD
+ BDDAC0BFD7BFBEDABFBFF0D5D4F0D7D5E5CCCBD5BBBADAC1BFD4B9B8DBC0C0E4
+ C9C9E1C6C4D2B6B5DEC2C0ECD0CFDABEBED4B8B8D0B6B5DFC3C2F3D8D6D2B8B7
+ D1B7B6EDD1D1EACFCEEAD0CED1B7B6D8BEBDEFD6D5F2D8D7D0B6B5DEC4C3E9D1
+ CFEDD7D5D5BDBBD0B9B8E2CBCAEED9D8ECD6D6EFDAD9EEDAD8EAD5D4D5C0BFD8
+ C3C2E2CDCCE6D2D2E9D5D5D5C3C3D4C2C3D7C4C5D9C6C5E5D2D2E2D0D0D9C7C7
+ E7D5D6E5D4D2D8C5C5D9C7C7D1BFBFD5C3C3ECD9D9F0DEDEE0CDCDCFBFBFE9D7
+ D8DACACAD0BFBFEBD9D9ECDBDBE2D1D1D1C0C0D9C7C7D5C4C5CFBFBFE0CFCEE3
+ D2D2E9D8D9D8C7C7CFC0BFD9C7C7E6D6D5EFDEDED0C0C0D2C2C2EFE0E0EEDEDE
+ D0C1C0D0BFBFF0E0DF0000000000000000F3E0DFCDB9B8CAB7B5F0DCDBF9E3E2
+ E4CFCECAB7B5DECAC7F8E3E2F4E0DFD2C0BFCEBBBAF4E0DFE9D5D4CDB9B8E3CF
+ CFEFDBDAEBD7D6D1BEBDD2BFBFEBD7D5D1BDBBD1BEBDF2DCDCEDD8D8D9C5C4CD
+ B8B8DCCAC7E6D1D1CFBABACDB7B6D4BFBEE0CAC9E2CBCACDB7B6D1BDBBD0B9B9
+ D1BBBAEDD8D7EFD9D8EAD4D1DAC4C2D4BDBBEAD4D1F3DBDAF0D9D8DCC6C4CDB6
+ B4CDB6B4DFC7C6E0C9C6E4CDCCCEB7B7D0B8B8DBC4C2DAC3C2D1BBBBD4BBBBE2
+ CBCBDEC6C6DBC4C3D4BDBBD2BBBAE7D0CFEAD2D2D6BFBED2BBBAE5CDCDEBD2D2
+ ECD2D2D1B9B8D2BBBAF0D9D8F0D8D7D7BEBDD1B7B7E7CCCCE0C5C4D2B7B6E6CB
+ CBEFD6D4EDD4D2E6CDCCE7CECDD6BBBAD5BDBAEBD0CFEDD2D1E7CDCBD5B9B9DA
+ BFBEEACECDE5C9C7D7BAB9D8BBBAE0C3C2DFC2C1DFC1C0DABEBDD9BBBBE0C3C2
+ EACECDDBBFBED8BDBBE1C3C2EBCCCBEECECDD8B7B6D7B6B5EECCCAEBCAC7D9B7
+ B5D8B7B5DEBBB9DBB9B8D8B7B5EBC9C6EBC7C5ECC6C5E6C2C0E4BEBDE7C2C0DB
+ B5B3DBB5B3E4BEBDD9B5B3DFBAB7E9C4C3E9C3C1DAB6B4DFB8B7E2BBBAE2BAB8
+ E7C0BEE0B8B6DCB6B5DAB4B2EAC3C2EAC3C1DAB4B2E4BEBBE3BAB9DBB2B0EBC1
+ BFEDC2C0ECC3C0ECC2C0EBC1BFDAB1ADDBB1ADE6BBB9EABDBAE9BDB9EDC0BEEA
+ BBB9DAACA9DCB0ACEDC2BFEBC0BEE2B3B0DCADAAE7B8B6E1B1ADDBACA9EBB9B7
+ EBBAB8E3B4B2D9ADAADFB3B0ECBAB7DBA9A6D9AAA7E4B6B3EDBEBBECBBB8ECBB
+ B9ECBDB9E6BBB8DEB5B3E0B4B1EABBB9E9BBB9E1B5B3E2B3B0DCACA9E3B6B4EB
+ C1BEE3B7B5E0B3B1DCB1ADEFC3C1EDC2BFE3B6B3DCB0ACE1B6B4EABEBADBADAA
+ DFB1ADECC0BDEFC6C3EFC5C2F2C6C4EFC4C2DAB1ADD9B0ACEBC0BDEDC2BFF0C5
+ C3E5BBB9D9B2AEECC5C2EFC9C7E4C0BED6B1AEE4BDBAEDC5C3EAC2BFDAB2B0D6
+ ADABE5BFBDECC6C3EAC4C2EBC6C5EFCCC9EBC6C4E6C2C0D7B1AED8B3B0E3BDBA
+ DFB9B8DEB8B7D8B5B4DCBAB9DFBEBBD8B7B5E4C5C3E9CBC9E7C9C7E5C6C5E0C1
+ C0E0C1C0E4C4C4E6C6C5EBCCCBE9C7C6DCBDBBD5B6B5E7C9C7EBCDCDD6B8B7D6
+ BAB9E9CCCBE0C4C3DABFBEDEC3C2EACFCFEED5D4EED5D4D9C0BFD7BDBBECD1D0
+ E6CECCD8BEBEEBD1D0F2D8D7D9C0BFD7BEBFECD2D1D9BFBEDBC1C0ECD0D1E4CB
+ CAD2B8B7D9BFBEF4D8D7F2D7D5DAC0BED0B5B5E9CDCCF5D9D8D0B6B5D5BAB8F5
+ DAD8EBD0CFEFD6D5D4BAB9D2B9B8EFD6D5F0D7D6D0B6B6DFC5C4EDD2D1EFD7D6
+ D7BFBED0B9B7D9C2C1EED8D7E3CCCBE9D2D1EDD7D6ECD8D7D4C0BED6C2C1E2CE
+ CDE6D2D1E6D5D5D6C5C4D5C4C4E3D1D1DECBCBECDADAE9D6D7E4D2D2EAD7D7E7
+ D5D6DAC9C7D7C5C5D1C0C1D4C1C2E0CDCDE7D6D5DACAC9CFBFBFE2D1D0D8C6C6
+ CFBFBFE6D5D4ECDBDBDFD0D0D1C1C1D8C7C6D6C6C6CFBFBFDECCCCE1D0CFE3D2
+ D2D2C2C2CFC0BFD5C4C5DACACADCCCCCD0C0C0D1C1C1EEDEDEEFE0DFD1C1C1CF
+ BEBEE2D0CF0000000000000000DAC7C6CAB7B5CAB7B5D9C4C3F4E0DFCDB8B8CA
+ B7B5CEB9B9F3DFDEE2CECDCEBABACEBBBAEEDADADBC7C6CBB7B6CFBAB9E7D4D4
+ DAC6C5CCB9B8D0BDBBE7D6D5D7C4C3CFBBBBE6D1D0EBD7D8D4C1C0D0BEBDE9D6
+ D5EAD7D5CDB7B6CDB7B6E6D0D0F3DEDCE4CECDCDB7B6E2CBCAEBD5D4D9C2C2EF
+ D9D8EDD7D6D6C0BFCDB6B5CDB6B5EAD4D1F4DCDBF3DBDAE9D0D0D5BEBDCDB6B4
+ DBC3C2EFD9D7DEC6C5CFB9B8D4BDBDE6CFCFE4CDCDD1BDBBD4BEBDEAD2D4E9D4
+ D2DFC7C7D2BDBBD2BDBBE6CFCFE7D1D0D2BDBDD4BDBBDBC4C3E7D1D0DBC5C5D2
+ BBBBD5BDBDEED7D6DCC3C2D0B6B5D2B9B7DCC1C0DBC0BECFB4B2D5BAB9E4CAC9
+ EAD0CEE7CECDE5CCCBDAC1C0D5BBBAE1C5C4ECD1D0E2C6C6D5B9B8DABFBEEED2
+ D1DFC3C2D8BBBAD8BEBDE3C6C5E3C5C4DEC1BFD9BDBBD9BEBDE3C6C5EACECDD8
+ BEBBD7BBB9DCC0BEEACCCAE7C7C6D8B7B5D9B8B6EECCCBDFBEBBD6B5B3D9B7B6
+ ECCAC7E0BEBDD8B6B4E4C2C0E7C3C2ECC7C5E5C0BEE2BDBBE3BFBBDCB7B6D9B4
+ B3DBB7B5DAB5B4E2BEBBE9C3C1E0BAB9DAB4B2E0B9B8E0B9B7DAB4B2E2BAB8E1
+ BAB8D9B2B0D9B3B1EDC5C4EAC4C1D9B3B1DAB3B0E3BAB8DBB2B0DEB4B2EBC1BE
+ EBC2BFE4BBB9E0B7B4DAB1ADDBB1AEE6BAB8ECC0BDEABFBBEBBFBBEABDBADBAC
+ AADCB0ADEAC1BEEBBFBDDEB0AEDCAEACEABAB8E6B8B5DCADAAE1B2AEE9BAB8DE
+ B2AEDBB0ACE1B4B1E6B6B3D9A8A5D9AAA7E3B6B3EEC0BDECBDBAEABAB7EBBBB8
+ DFB4B2DCB5B2E0B4B2E4B7B4DEB3B0DEB3B0DFB2AEDCACAADEB0ACE5BBB9E0B4
+ B2DCB0ACDCB0ACEDC2BFE4B9B6DCB0ACDBB0ADE3B8B6E7BDBADAADAADAACA9E4
+ B7B5E9C0BEECC3C0EFC4C2E0B5B3D9B0ADD9B0ACE0B5B3E6BBB9EABFBDDAB1AE
+ D9B1AEE1BAB7E5BFBDD8B4B2D6B1B0D7B2B0E1B9B7DEB5B4D8B2AED7B1AEE6C0
+ BEEBC5C4E7C2C1E6C4C1EECAC9EECBC9E2BEBBD6B2B0D7B1AEE3BEBBE6C2C1DB
+ B8B7D8B5B3DBB9B8DFBDBBD8B8B7DBBBBAE7C7C6E3C4C3D9BABAD8B9B8DABDBA
+ E2C2C1E7C9C7EACAC9DCBDBDD7B7B6D6B6B5E3C4C3EED0CED6B8B7D4B7B6D7BA
+ B9D6BAB9D9BDBDDCC1C0D7BDBDDEC3C2E0C5C4D6BBBAD6BBBAECD2D1EBD0D0D2
+ B9B8DAC1C0E4CAC9D5BBBAD7BEBDF2D7D6DFC4C3D2B9B8DEC5C4D8BFBED2B9B8
+ D2BAB8E9CDCDDEC3C1D2B8B6D0B5B5EFD4D2F5DAD9D0B6B5D0B6B5E7CDCCDEC4
+ C2DCC3C1D0B6B5D0B7B5EFD6D5E0C6C4D0B6B6D2BAB8ECD4D1DFC6C5D1BAB9D0
+ B8B7DEC5C4F0D9D8E6CFCFE3CDCCE5CFCEE1CCCBD0BBBBD5C0C0DECACAD8C6C5
+ DECCCCD9C7C6D7C5C5E7D7D7E5D5D2ECDBDBEAD8D9EDDCDCEFDEDCEEDCDBE7D7
+ D6D8C5C5D2C1C1D5C3C3E1CFCFECD9D8D4C1C1CFBFBFE2D1D0D8C6C6D0C0C0DB
+ CBCAE6D6D6D7C7C7D2C2C2E2D1D1E5D4D4D1C0C0D5C4C3DCCCCCE6D6D5D0C0C0
+ CFC0BFE1D0D0E9D8D9E0CFCFCFC0C0D0C1C1EBDADAEEDEDED8C6C6CFBEBED2C1
+ C10000000000000000E6D2D2CDB8B7CAB7B5DBC7C6EBD7D5D0BBBACAB7B5CDB9
+ B7D9C5C3D1BFBDCEBBBAD1BFBEE7D6D5EBD8D8D4C1C1CFBEBDD2C0BFCFBDBDCE
+ BBBBCFBDBBD9C5C5DECBCAD6C2C2D1BFBFD0BEBED0BEBDDAC7C6E9D6D5D9C5C4
+ CDB7B6CFBAB9DFC9C7ECD6D6CFB8B8CDB7B6E7D1D0F3DCDBE6D0CFD4BEBDCFB8
+ B8CDB6B5CFB7B8D4BEBDECD5D4F3DAD9ECD5D4EAD2D1E9D1D1D2BDBAD0BAB9D9
+ C2C2D5BEBECFB9B8DBC4C4ECD4D4D7C0C0D1BBBBD6C0BFEAD4D4EAD4D4D8C2C2
+ D2BDBDD2BDBDE1CACAE4CECDD5BFBED2BEBDDBC6C5D9C3C2D5BFBDD2BDBDD9C2
+ C1E7D0CFD2BBBAD0B6B5DFC4C3EACECCDEC2C1D0B5B3D6BBBAE2C9C7EBD2D1EB
+ D2D2E7CFCEE4CBCAD7BEBDD6BAB9D9BEBED8BDBBD6B9B8DEC1C0EBCFCEDABFBE
+ D8BBBADABEBEE7CBCAE9CDCCDBC0BED9BEBDD9BEBDE4C9C7E7CCCBD9BDBDD7BA
+ B8DCBFBEDEBEBDD9B9B8D8B8B7E2C1C0EECDCBD8B6B5D6B5B3DCBBBAEAC7C5DF
+ BDBAD8B6B4E3C0BEEAC6C4EDC7C6E9C5C2E7C3C1E9C4C3E2BEBBDAB6B5D9B5B3
+ DCB9B8EBC6C4EECAC6EBC5C3D9B3B1DAB4B2DAB4B2DAB3B0E0B9B7DAB5B3D8B3
+ B0DAB4B2E6C1BFE4BFBBDAB4B2DAB3B1E1B9B7E1B9B6DAB1ADE0B7B5EBC3C1E0
+ B7B5DAB2B0DCB3B1E5BAB8E7BDBAEBBFBDE4B9B7E4B8B5E7BAB8E1B4B2DCB2B0
+ DEB6B4DFB4B2DCAEACDCAEACE2B5B3EBBDBAE0B1ADDCADABDCB1ADDCB1ADDEB3
+ B1ECC1BFEDBEBADBAAA7D9ABA8E5B8B5EDBFBDEBBDBAEBBDBAEDBEBBE3B8B6DC
+ B6B3DCB3B1DCB1AEDCB1AEE0B6B3E5B7B5E0B1ADDCB0ACDEB5B2DFB4B2DCB1AD
+ DCB0ACE6BBB9E1B6B4DBB0ADDCB1AEEABFBDE6BDBADAAEABDAACAAE0B3B1E4B9
+ B7E4BBB8E5BBB9DAB1ADD9B0ADD9B0ADDBB2B0E5BBB9E0B5B3D9B1ADD8B0ADE5
+ BDBBE6C0BEDAB6B3D6B3B1D7B3B1DBB7B4D8B3B1D8B2B1DAB4B2EBC4C2ECC6C4
+ EAC5C2E6C2C0EAC6C3DFBBB9D7B5B3D6B3B1D6B3B1D9B5B4DFBABADCB9B7D8B5
+ B3E2BFBEECCAC9E7C5C4DEBDBBDABDBBD9BBBAD8BAB9DBBEBDE9CBCAE4C6C5EB
+ CCCCE9CAC9DABBBAD7B8B7D7B7B6DEBFBDE9C9C7DFC1C0D5B7B6D9BEBDD9BEBD
+ D7BDBDD7BDBBD7BBBADBC2C1D7BEBED6BBBAD6BEBEE2C9C9E7CECCD4B9B8D8BE
+ BED7BEBDD5BBBAD7BEBDE5CACAD6BDBBD2B9B8DFC5C5DCC3C2D2B9B8D5BBBAE2
+ C7C7D6BDBBD0B6B6D2B8B7EDD2D1F4D9D8D0B6B5D1B7B6E5CCCAE2C7C6DCC3C2
+ D0B7B5D0B7B7EDD5D4DEC4C3D0B6B6D5BBBAD9C1C0D0B9B8D0B7B7D4BBB9E9D0
+ CFF0D8D7ECD5D5E5CFCEE0CAC9E2CDCCD4BEBED4BFBED5C2C1D4C3C4E5D4D5E6
+ D5D6DACACADACBCBD7C6C7D5C4C5D8C6C6EBD9DAEEDEDEEDDBDBDBCBCBD2C1C1
+ D2C1C1DACACAE7D6D6E2CFCFCFBFBFCFBFBFF2DFDFF0DEDCD7C5C5D9C7C7DACA
+ CBD8C7C7DACACAE6D7D7DCCCCBD7C6C6D1C1C1D2C2C1D8C7C7D1C1C0D0C0C0E7
+ D7D8E7D7D7D2C3C2CFC0C0CFC0C0D4C4C4E3D2D2E1D0D0D1C1C1CEBDBB000000
+ 0000000000F8E3E2E7D4D2DECAC9F0DCDBF6E1E0F4E1E0E9D6D5DECCCBEEDCDC
+ EDDBDAE4D1D1E6D6D5EDDBDAEFDCDCE9D7D7E5D2D1DECCCCD5C2C2D2C0C0D7C4
+ C4E2CFCEE2CFCEE7D5D5DCCAC9D7C4C4E0CBCBE3D0CFE9D5D5EBD7D6E3CDCCE6
+ D0D0E6D1D0EDD8D7E6D1D0DAC4C4EDD8D6F3DEDCF2DAD9EAD4D2E2CBCAECD5D4
+ EDD6D6E7D0CFEFD9D7F0DAD8ECD4D2DCC5C4EBD5D4DFC9C7DCC6C5EBD4D4EAD4
+ D2E6CFCFECD6D6ECD7D6E6CFCFD9C2C2E5CFCEDCC7C6E6D0D0DFC9C7D8C3C3D8
+ C2C1E2CDCCE0CAC9DBC5C5DBC6C5E9D2D2EAD4D4E3CDCCDBC5C4EDD6D5EED7D6
+ E6CECCEDD4D2F0D7D6EFD7D5F2D8D7EAD0D0ECD1D1E9CFCEF0D8D6EFD6D6EFD7
+ D6EBD2D1E4CBCAE4CAC9E1C6C6E6CBCAE4C9C7EDD1D0EDD0CFE7CBCBE9CDCBE5
+ C9C7E4CAC7E9CBCAE0C4C3E4CAC9E2C7C6DEC3C1E9CECCE5C9C7E5C7C5E1C1C0
+ E5C6C5E0C0C0E1C2C0EACAC7EDCCCAE2C1BFDBBAB8DEBBBAE4C3C2E5C4C2E9C5
+ C3ECC9C6ECC7C5ECC7C5E7C2C1E5C1C0E9C5C4EBC7C6DCB9B7D9B6B4DFBBB8E7
+ C4C2E9C4C1EBC5C3E5BFBDE6C0BDE4BDBBE3BBBAE7C1BFE5BFBBE1BAB9E6C2BF
+ ECC7C4EDC6C4EAC3C0E6C0BEEBC3C1EAC1C0E3BAB8EBC3C1EDC5C3E4BDBAE5BD
+ BBEBC2C0EBC1BEE5BBB8E9BEBBEABFBBE4B8B6E9BDBAEBC0BEE5BBBAE3BBB8E5
+ B9B7E6B9B6E9BAB8ECBFBDEEC0BEEBBDBAEBBEBBEDC0BEECC1BFE3BAB7EDC1BF
+ EFC0BEE7B7B5E7BAB8E7BBB8EBBEBBEBBDB9EABBB9ECBFBBEBC1BFE5C0BDE6BD
+ BAEABEBAEABEBBEAC1BEEBBFBDEABBB9EABDBAE9BEBDE6BDB9EABEBBEDC2C0ED
+ C3C0ECC2BFE3B9B6EDC2BFEFC5C2EFC6C3EDC3C1E9BDBAECBFBBECC1BFEFC6C4
+ F4CBC9EEC4C2E5BBB9EAC1BFEAC0BEEBC1BFEBC2BFE9BFBDEAC2BFF2CAC7EFC7
+ C6EEC9C5EBC6C5EAC6C5ECCAC6E1BBB9E1BDBBE5C0BEEBC5C3ECC6C4E6C2C1DF
+ BBB9ECC9C6EBC9C6E5C4C1E5C4C3E3C0BFDAB8B7E0BDBAE4C1C0E5C3C2EBC9C7
+ ECCAC9ECCBCAEBCAC9EBCCCBE6C9C7DFC2C1EDCFCEEED0CFEBCDCCEED0CFEED0
+ CFE5C7C6EACBCAEACCCBE9CACAEACBCAEDCECDEACCCCEDD1D0EDD0CFE7CDCCE9
+ CECEEED4D2EFD6D4E6CDCCE1C7C6EBD1D0EDD4D2F0D6D5E9CFCDEED5D2EDD4D2
+ E7CFCEECD1D0F2D7D6ECD1D1E9CFCEF0D6D5F0D7D7EED5D4F0D7D6F3D9D7EBD1
+ D1E9D0CEF0D6D5F4D9D9F5DAD9D0B6B5D5B9B9F3D9D7F5DAD9F4DAD8D1B8B6D1
+ B9B7F4DADAF4DAD9E1C9C6ECD2D0EFD7D6D7BEBDE9D0CFE5CECDECD4D2EDD7D6
+ EBD4D2ECD6D5ECD6D5ECD7D6E7D2D2E3CDCDDBC7C7E3D0CFECDAD9EBDADAE0D0
+ CFD7C7C7D5C5C5D6C5C6D9CACAE6D6D6EAD9D8EAD8D8D9C9C9D9C9C9E4D2D2E9
+ D7D7E7D6D6E9D8D8E0CDCDE4D2D1F2E0E0F0DEDEDFCCCBEAD9D9EEDFDEECDBDB
+ E7D8D8EBDADBE9D8D8ECDBDBEEDEDEE5D5D5ECDBDBECDBDBE6D5D5F0DFDFEFDF
+ DEE7D8D8DBCCCCDBCCCCE4D4D4EBD9D9E5D5D5E5D4D2DBCBCA00000000000000
+ 00F7E4E3EBD8D7E9D7D6F2E0DFF2E0DFF2E0DFF2E0DFECD9D9F0E0E0F2E1E0F2
+ E0DFEEDCDBE7D7D6E5D2D1E3D1D1EBD8D9E7D6D5E0CECCE6D4D4F0DEDCECD9D9
+ ECD9D9F0DFDEEEDBDAE6D2D2ECDAD9E4D1D0E9D5D4F0DBDAF0DAD9E5CFCEE9D2
+ D1ECD6D5EBD5D4E0CBCADFC7C6E6D0CEE3CCCCD8C1C0DEC6C5ECD6D5EED7D6E0
+ CAC7EAD1D0ECD5D5E7D1D0E4CDCDE9D2D1E5CECEE6CFCFECD6D5E9D2D0DFC9C9
+ E4CECDEBD5D2DFC6C5D7C1C0E5CECED7C2C2E5CFD0E9D4D4EBD5D5E9D4D2EDD7
+ D7ECD6D6E7D1D0E2CDCCEAD4D4EDD6D6E6CFCFDEC6C6E9D1D0E2CBCAE1C7C7EC
+ D2D1EAD0D0EFD7D5F4DADAF5DBDBF0D7D5EDD4D2EFD7D5EDD5D4F0D7D6EFD7D6
+ EDD4D2ECD2D1E7CDCCE7CDCCE9CDCDECCFCFE7CBCAEACECDEDD1D0ECCFCFE7CD
+ CCE4C9C7E7CCCBEDD2D1EDD1CFE7CBCAE9CCCBEBCECCEACCCAE2C3C1ECCDCCEA
+ CBC9E5C6C5EBCAC9EDCCCBE9C7C5E7C7C5E2C2C0E0BFBDE7C5C4EECBC9EDCAC7
+ E9C4C2ECC7C6E5C2C0E7C4C2E9C6C4E9C6C4DBB9B7DAB7B6E5C3C1E5C2C0E6C3
+ C0E4BFBDE3BDBBEAC3C1EAC3C1E6C0BFE5BFBDE5C0BFE5C2BFE9C4C2E9C4C2E9
+ C3C1ECC6C4EDC5C2EDC4C2EAC1BFE6BFBEEDC6C4EDC5C2EAC1BFEAC0BFECC3C0
+ EAC0BEE7BEBBEBC0BEEABFBDE6BBB8EABEBBE9BEBBE5BDBAE9C0BEE9BEBAECBF
+ BDECBFBDEBBEBBEABBB9E3B6B3E9BBB9ECC0BEEBC0BEDEB5B3ECC1BFEFC0BEEA
+ BBB9EDC0BEE6BBB9E9BBB9E5B8B5E4B7B5EBBEBBEBC1BFEAC4C1EAC2BFECC0BE
+ ECC1BFEBC2BFEDC2BFEBBEBAE9BBB9EAC0BDE7BFBDEDC2BFEFC4C1EEC4C2EBC1
+ BFE9BEBBEEC3C2EFC5C3EFC6C3F0C7C4EFC4C1EFC2BFEEC2C1EFC5C3F4CCC9F3
+ CAC7EFC5C3ECC3C1EBC2C0E6BDBBEBC1C0F0C6C4EFC6C5F0C9C6EEC6C5EFC9C6
+ EECAC7ECCBC9ECCAC6E3BFBEE6C2C0E9C4C2EAC4C2EAC4C4E7C2C1DFBBB9EECB
+ C9EECCCBE9C6C5EDCBCAF0CFCEEFCDCCEECCCBEDCBC9EDCAC9ECCAC9ECC9C9EE
+ CCCBEECCCBEECECDEBCCCBE1C3C1EBCECDEED0CFE9CBCBEDD0CFEBCFCDDEC0C0
+ E9CBCAE9CCCCE5C6C6EECECDEFD1D0EDCFCEEDCFCEE7CCCBE7CCCBEDD2D1EFD5
+ D4EED5D4ECD1D1EBD1D0EDD4D2EACFCFF0D6D5F3D7D7F0D7D6F0D7D6F0D6D6F0
+ D7D6F3D9D8ECD4D1ECD2D1EDD4D2EED5D4EFD6D6EFD6D5EED5D4EAD1D1EBD1D1
+ E6CDCBEDD4D2F4D9D9D5BBB9D0B7B6EAD0CFF6DBDAEFD5D5D0B6B6DAC2C0F6DC
+ DAF6DCDAF3DAD8F0D8D8F2D9D8DFC7C6F2DAD8ECD6D5ECD4D4E7D1D1E4CECCEC
+ D6D6EFD9D8EFD9D9F0DAD9EED9D8E6D4D2E4D1D1EEDBDBECDADAD6C4C5DCCCCD
+ E7D7D8E4D6D5E1D1D1E9D8D9ECDCDBEDDEDEE1D1D1E6D5D5ECDCDBEDDBDBE4D2
+ D4E4D4D4E9D7D8E7D6D5F2DFDFE4D2D1D5C2C2ECDBDBEEDFDEEEDFDEE6D7D7EC
+ DCDBE9D8D8E9D8D8EEDFDEE6D7D6F0DFDFEEDEDEDFCECEECDBDBEFE0DFF0E1E1
+ F0E1E0E9D9D9EEDFDEEFE0E0EFDFDEEFDEDCEFDFDF0000000000000000EFDFDE
+ DCCBCAD1C0BFDECCCBDAC7C6D9C6C6D8C5C5D5C3C3E3D2D1EAD8D8EDDCDBF0DE
+ DEEDDCDBECDADAEFDCDBF0DEDEF0DEDCE0CECCDFCDCCEFDCDCEDDAD9EEDBDAF0
+ DFDEF0DFDEEEDBDAF0DCDBE9D7D6EAD6D6F3DEDCF0DBDAE5CFCEE1CBCAEDD8D7
+ EED8D7D4BFBED8C2C0DAC5C4E9D1D1E9D1D0EBD5D4EED7D7F2D9D8E3CBCAECD5
+ D4EDD8D6EBD5D6E9D2D2E5CFCEE4CFCDDCC6C5E4CFCEE4CECDE1CBCAE2CCCBE7
+ D1D1E2CBCBE3CCCBEED8D7E2CDCBE9D5D4EED9D8EBD5D5E6D1D0EDD8D7EDD7D7
+ EAD4D5E3CECDE9D2D2ECD5D5E6CFCEE9D1D1EDD6D5EDD5D4E0C7C5E9D0CFE7CF
+ CEEAD1CFEED5D5EFD7D7E6CDCDEAD0CFECD2D1E6CDCCEED6D5EED5D4E9CFCEEC
+ D1D0E9CECEE7CDCDECD1CFECD0CFE5CAC9E1C4C3E9CDCCEBCFCEE2C6C5DABFBE
+ DBC2C0EDD1CFE9CECCE4C7C6E3C5C4EACCCBE7C9C6E0C2C1ECCDCCE6C7C5E3C4
+ C3EECECCEECDCDEFCECDEFCFCEEBC9C7E4C2C1E7C5C3EFCCCAF0CCCBEFCCCAED
+ CBC9E9C6C4E3C0BFDFBBB9DBB9B8D9B8B6DCBAB8E7C5C2E9C4C2EAC5C4E7C2C0
+ E3BEBBEBC5C3EDC7C4EEC7C6E7C2C0E4BFBEE7C3C1ECC7C4EBC6C4EBC5C3ECC5
+ C4E9C2C0ECC4C1E9C1BFEAC4C1EBC5C3EDC5C3ECC5C2ECC4C1ECC4C1EAC0BEEA
+ BFBDECC2C0ECC2C0EABEBBE5B9B8E7BFBDEAC3C0EBC1BFEABEBBE9BDB9EABEBA
+ E9BDBAE4B7B5E3B6B4E3B7B4E4B9B7E6BBB9DCB5B2E9BEBAECBEBBE6B8B6EBBF
+ BDE6BBB9E9BDBAECBFBDEABDBAE6BAB7E3BAB7E2BEBBE1B8B6EABEBBE6BDB9E9
+ BFBDEAC0BEE7BAB8E9BBB9E9BFBDE3BAB8EBC1BEEEC3C2ECC2BFE9C0BEE3B9B6
+ EBC0BEE9BFBDE3BAB8E9C1BFE4BAB8E3B7B4E0B4B2E1B7B5E4BDBAEAC1BFE3BA
+ B8E0B7B5E6BEBAE3BAB8E0B7B5E3BBB8E6BFBDECC4C2E7C1BEECC6C5ECC7C5E7
+ C5C4EAC9C6E0BFBDE1BFBEE3C0BEE6C3C2E9C4C3E6C2C1DCB9B7E9C6C6ECCACA
+ E3C2C0DEBDBBEDCDCAEFCFCDEBCAC9EBC9C9EBC9C6EBC7C6E7C5C3E9C7C5E6C5
+ C4EACAC9EBCBCBE4C6C5ECCECEEDD0CFEACECDEED1CFEED0D0E9CBCBEED0CFEE
+ D0CFECCECDEFD1D1EFD1D0EDCFCEEFD2D1E9CDCDEBCFCEEACECEE9CFCEE9CFCF
+ E6CDCCE6CDCCEACFCFDCC2C1E1C7C6F0D7D5EED6D5EED6D4E5CBCBE6CDCCE9CF
+ CEE2C7C7E6CCCCDEC3C3DFC6C5E6CECDEBD2D2EAD2D2E5CECDE3CCCBE6CECDE4
+ CDCCEFD8D6DCC5C3D1BAB8D4BBBBE3CBCAD4BBBAD1B9B8E4CBCBF3DAD9F3DADA
+ F0D9D8EFD8D8EDD7D7E7D1D0ECD7D6E7D1D0F0D9D8EDD7D6DFC9C6EBD5D4E9D2
+ D0E9D2D0EDD7D6ECD6D5E3CFCFE0CDCDEBD8D9DECBCCD4C2C3D4C4C4E4D4D4E2
+ D1D0D9CAC9E5D6D5ECDCDCEDDEDEE5D6D5EBDADBEEDEDCEDDCDCEAD9D9EBDADA
+ E9D7D7E9D7D8F0DFDEDAC9C9D7C5C5E7D8D8E7D8D8D2C2C2D2C2C2DCCCCCE3D1
+ D1D8C7C7DECDCCDFCECEEDDEDEEDDEDCE6D7D6ECDBDBEEDEDEF2E1E1F2E2E2F2
+ E1E1F0E0E0F2E1E1F2E2E1F4E3E2F4E2E20000000000000000F3E1E0E5D4D2D9
+ C7C7EEDBDAF2E0DFF0DFDEEBD9D9E5D4D4E7D8D7ECDAD9ECDADAEFDCDCEFDEDC
+ ECDBDAEBD9D9EDDBDBECDADAD7C4C4D4C1C0DECBCAD9C6C6DBC9C7E9D7D6EBD8
+ D8E9D5D4E9D6D5E5D1D0E1CDCDEFDAD8F0DAD9E4CECDD6C1C0E9D2D1EAD4D2DE
+ C7C6E7D1D0E9D2D1EBD5D4ECD6D4EAD4D2ECD6D4EDD6D6DBC4C3E2CACAE6D1CF
+ E2CCCCE3CECDE6CFCFE4CFCEE2CBCBE4CECDEAD4D2ECD6D6ECD6D6EFD9D8EFD9
+ D8F0DAD8EFD9D8E6D0D0EAD5D5EFDADAECD7D7E2CECDE6D1D1EDD7D7E7D2D2E1
+ CCCCE3CDCDE7D2D1E3CDCCE4CDCCEED7D7F0D8D8EAD2D0EFD8D7EFD8D7EFD7D6
+ EFD7D6EFD7D6E7CFCFEAD0D0E5CCCBDBC2C0EDD4D2EDD4D4EBD0D0EED4D4EBD0
+ D0E7CECDEFD5D4EED2D1EDD1D0EBCFCEEDD1D0EFD4D4EDD4D2E9CECDE7CCCBEE
+ D2D2EED1D0EBCECDEBCDCDEBCDCCE0C2C1DCBFBEE3C5C4DFC0BFE0C1C0EECFCD
+ F0D1CFEECDCCF0D0CEEFCDCCEECCCAEDCAC9EFCCCBEECCCAEFCDCAECCAC7ECCA
+ C7E9C6C4DFBDBADAB9B6D9B8B6E2C0BFEBC7C5E9C5C3ECC7C5EDC7C5E9C2C0EA
+ C5C3EFCBC7F0CBC9EECAC9EAC4C3E7C4C2EDC9C6ECC7C5E9C3C2E7C1BFE0B9B7
+ E6C1BEE5BFBDE9C3C0EAC3C1E7C1BEE6BFBDE9C0BFEAC2C0E6BFBBEEC4C2EEC4
+ C3EEC3C2EDC1C0ECC2C0EDC5C3EEC6C5EDC4C2EDC1BFEBC0BEEEC3C0EFC3C1EE
+ C1C0ECBFBDEDC2C0EDC3C2ECC3C1DEB6B3E4B9B7EABDB9E6B9B7E9BEBAE0B5B3
+ E6BAB8EDC2BFECBFBDE9BDBAEAC1BEEAC4C2E9C1BFEDC2C0ECC2BFECC4C1EDC4
+ C2E9BEBBEABEBBE7BEBBE2BBB8E7BFBDECC3C0E7BEBBE6BEBBE5BBB9EDC3C1ED
+ C3C0EEC4C2EDC5C2E9BFBDEEC3C1EDC1C0E4BAB8E1BAB7E6C0BEECC5C2E3BAB9
+ E4BDBAE2B9B7E3BBB8EEC5C3ECC4C2ECC5C3EBC5C3EDC7C6EBC9C6EECBCAECCB
+ CBE9C7C6EAC9C7EAC7C6EAC6C6EAC6C4E5C2C1DCB9B7E5C3C1E5C4C3DCBBBADA
+ B9B9DFBEBDE4C2C2DFC0BEE5C5C4E7C6C5EAC7C6E9C6C5E9C7C6E6C5C4E7C6C5
+ E6C7C6E0C1C0E5C9C7E9CDCBE7CBCAEED1D0EBCECEE5CAC7EED1D0EED0D0E9CD
+ CDEED1D1F0D2D1EACCCBEFD2D1EBCECEEDD1D0ECD1D1E7CECEEACFCFEBD0CFEE
+ D5D4EED5D4D9C0BFDEC4C3EBD2D1EED6D5ECD2D1E7CFCDEAD1D0EAD0D0E4CCCB
+ E5CDCCE3CACAEAD1D1EAD2D1ECD5D5EED7D7EDD7D6EBD5D4E9D1D0EDD5D5F0D9
+ D7EED7D6D9C2C1D4BDBBD4BDBDD4BEBBD4BEBDE3CCCCE9D2D2E9D2D1EAD4D4EB
+ D5D4E5CFCEE4CDCDE5D0CFECD7D5F3DBDBF3DCDBEDD7D7F4DCDBF0DAD9F0DAD9
+ F4DCDBF0DBDAE9D5D5DBC9C7ECDAD8E9D5D6D4C2C2D4C3C4D5C4C4D4C4C4D9C7
+ C7E2D1D0EADADBEBDCDCE1D1D1DBCBCBE4D4D4E6D7D7DFCECEE6D6D6DFCDCDDC
+ CBCBEBD8D8D7C5C5D7C7C6D6C6C5D4C3C3D2C2C2D4C3C3E5D6D6E5D5D5DCCBCB
+ E2D1D1D9C9C9EEDEDEECDBDBEAD8D9EBD9D9E4D4D4EBDAD9EFE0DFEEDEDEEFDF
+ DFEFE0E0F2E1E1EFDFDFEFDEDE0000000000000000F4E2E1F2E0DFE5D4D2F3E1
+ E0F2E0DFEEDBDBEDDCDCEAD8D8EDDCDCE7D8D7E0CECEEAD8D8ECDADAE6D6D5EB
+ D8D9EBD8D9ECDAD9DECCCCD5C2C1D6C4C3E3D0CFDAC9C7DECCCBDFCDCBE4D0CF
+ E5D1D0E2CFCEE2CDCCE6D1D0F0DBDAEED9D7DFCAC9F3DCDBF0DBDAEDD8D7EED8
+ D7E6CFCED7C0BFE4CECDE2CBCAE9D1D0F2DAD9EBD5D4EED9D7EFDAD9EBD5D6E3
+ CECDE6D0D0E9D2D1E3CDCCECD6D6E9D4D2ECD6D5EFD9D9EED8D7EAD4D2F2DBDA
+ EFD9D8E5CFCEE5D0CFE6D4D1E5CFCFDCC7C7E7D4D1EEDAD8EAD5D4DBC6C5E5CE
+ CEE5CECEE2CBCADFC7C6EBD2D2E7D1CFDCC5C4E9D1D0E9D1D0E6CFCEE7CFCFEC
+ D4D2E6CDCDEED6D5E4CCCADCC3C2EDD2D2F0D6D5EDD4D2EFD5D4E5CBCAE3C9C7
+ EBD0D0E5CBC9E5CAC9E6CBCAEDD4D1EACFCEEACFCEE6CBCAE5CAC7EED1D0EFD1
+ D0EDCFCEEDCFCEEDCFCDE9CAC9E9CBCAEBCDCCEACBCAE4C6C5EDCCCAEACBC9E6
+ C6C4EECDCBEAC9C6EBC7C5E9C7C5E7C5C4E6C4C2E7C4C3EFCDCBEFCDCBE6C5C3
+ EAC7C6E9C6C4E4C3C1ECCAC7EAC7C6E9C5C4ECC9C6EDC7C6EAC5C3ECC7C5EECB
+ C9EECAC7EBC6C4DFBAB8E0BDBAEAC5C3E2BEBBE5C0BFE6C0BEE6C0BEE5BFBEE9
+ C3C0E9C3C1ECC5C3EAC3C1EAC3C0E9C1BEE7C0BDE1B8B6ECC2C0EFC5C3EEC3C2
+ ECC2C0E9BFBEECC5C3EBC3C1EBC1BFEBBFBDE4B8B6EDC2C0EEC2C0EBBEBDEBBF
+ BDEAC0BDEEC5C3EEC5C3E5BEBBEDC3C1EEC0BFEDC0BEEEC3C1E5BDBAE5BBB9ED
+ C2C0EBC1BEE9BDBAEBC3C0EAC5C2E4BEBAECC3C0EBC2BFEBC3C1EDC4C2E9BEBB
+ EABEBAEBC0BEE4BDBAEAC1C0EBC3C0E7C0BDEBC2BFE4BBB8EEC5C3EAC0BEEEC4
+ C3EDC5C3ECC4C2F2C9C6F0C5C3EFC4C2E6BFBDE1BAB9E7C2BFE9C1C0EAC3C1E6
+ C1BEE5BEBDECC5C4EAC3C1ECC4C2E9C3C2EAC4C4E6C3C2EBC9C6EBCAC7EACAC9
+ EAC9C6EAC7C7E6C4C3EAC6C4E9C6C4E2BFBEE9C6C5E7C4C3E1BFBEDCBDBAE1C1
+ BFE4C5C4E0C1BFE1C1C0E1C1BFE9C7C6E9C7C6EBCACAEFCDCDEFCFCEE6C6C4DE
+ BFBEE2C3C3DFC1C0E1C4C4ECD0D0E4C9C7DCC0C0E9CDCDEBCFCEE6CBC9EDD0CF
+ E7CACAE3C6C4E7CBCAE2C7C6EACECEEBCFCEEACFCFE7CDCCE7CDCDEDD5D4EDD4
+ D2DCC4C3E2CAC9ECD2D1EFD6D5EED5D5EED6D5F0D8D6EFD7D6EED6D6EDD6D5E7
+ D0CFE4CDCCE1CBCAE5CECEE9D4D2E4CDCDDFC9C9DBC5C4E5CFCEEDD7D6EDD8D6
+ E3CDCDDBC6C4E3CDCCE2CCCCE2CCCCE6D0CFEDD8D7ECD6D5EED9D8E7D2D1E5CF
+ CFE9D2D2E6D0D0EAD4D5F0DADAEED9D8E6D0D0F0DBD9EDD7D7EDD7D7F0DBD9EF
+ DADAECD8D7DFCBCBEBD7D6ECD9D8ECDADAE4D1D2DFCECEE3D2D2E4D4D2E2D0D0
+ EBDCDBEBDCDBE4D4D5E5D6D6EBDADBE9DADAE1D2D1ECDCDBEDDCDCF0DFDFF2E0
+ E0E9D8D8E6D7D7EADADAE7D8D8E5D6D5E7D8D7EFDFDFEEDEDEE5D4D2EFDFDEE6
+ D6D6E3D2D2D8C6C6D8C6C6D7C6C5D4C4C4D4C3C3DBCBCBEBD9D9E5D5D4ECDAD9
+ EFDEDCF2E0E0F4E1E00000000000000000E7D6D5E2CFCFD4C2C1E0CDCDE7D6D5
+ E3D2D1E3D2D1E1D0CFE5D6D6EBD9D9E4D2D2EEDCDBF0DFDEF0DFDFF0DFDEEDDB
+ DBECDAD9EBD8D9DECBCADFCDCBECD9D9EFDCDCECD9D9EBD7D8EAD7D7E7D5D4EE
+ D9D9F2DBDAEDD9D7F2DCDBF2DCDBECD6D5F5DFDEECD6D6F0DBD9F2DBDAEBD5D4
+ EBD5D4EDD7D6E7D0CFDFC7C7EAD4D2E3CCCCECD7D6F2DBDAEFDBD9EBD5D5ECD7
+ D7EAD5D4DBC6C5E4CFCFE3CDCDE4CECDECD7D6D8C3C2E4CFCFEEDAD9ECD6D6DF
+ CBC9E6D2D1EDD8D6EED9D8EAD5D4EAD4D5F2DADAF2DADAECD4D4EFD9D7F0D9D8
+ EBD4D4EAD2D2EED7D6ECD5D4E2CACAE6CECDEDD5D4EED6D5EBD2D2EAD0D0E3CA
+ CAEAD1D1EAD1CFE0C5C5EAD0CFEDD2D2ECD1D0F0D6D5EBD0D0EAD0CFEBD1D0E5
+ CBCBDCC1C0DCC2C1E7CFCDE1C6C5DCC3C1DCC2C0D7BDBAE2C5C4E9CCCAE6C9C7
+ E9CBC9EBCECDECCDCDE9CCCBEDCFCDEED0CFEACAC9EECECDE4C4C2E1C1BFE5C5
+ C3E6C4C4EAC9C6EECCCAEECDCBEFCECCE4C3C1EDCBCAEECDCBEBCAC7EECDCBEF
+ CECBECCAC9ECCAC9EBC9C6E9C5C4E7C3C1E9C4C2E5C2C0EAC5C3ECC7C6EAC5C3
+ EAC7C5DFBDBAE3C0BEEEC9C7EECAC7EBC6C4E9C3C1E4BEBBE9C3C1E5C0BEEBC5
+ C3EEC7C5EEC7C4EEC6C3EDC5C2EEC6C3DCB4B2E0B7B5EAC1BFEBC2C0E9BFBDE3
+ BDB9EAC4C1E2BAB9E3B9B7E1B6B4DEB4B2E9BEBBEEC2C1EABEBBEABEBDE9C0BD
+ EDC4C3EEC5C4EBC2C1EEC3C2EEC2C0EEC3C0EEC4C2E9C0BDEBC0BEECC2C0E7BD
+ BAE5B9B7EBC2BFE6C1BFE2BBB9EAC0BEE7BFBDEAC1BFECC4C1EAC0BDEABEBBEE
+ C3C1EEC6C4EFC7C5EEC6C4EDC3C2EFC6C4E7BEBBEEC5C3F0C7C4F2C7C6EEC5C4
+ EDC6C4F4CBC9F0C6C4EFC6C4EDC5C3E7C1C0EBC6C4EBC4C2EFC7C6EAC5C3E2BD
+ BBEAC3C1E3BEBBE6C1BEE7C3C1EAC5C3E6C2C1EAC6C5E6C5C3E9C9C7E7C9C6EA
+ C9C7E9C7C7EDCAC9EBCAC7E5C3C2EDCBC9EDCCCAEBCAC9E6C5C4E7C7C5E6C6C5
+ E1C2C0E2C2C1DFBEBEDFC0BFE5C4C4E6C5C4EECDCCEECECDEBCBCBE5C6C5EACC
+ CBE4C6C5E5C7C7EED1D0ECD0CFE4C9C7EDD1D0EDD1D0E7CCCBEED4D2E9CDCCE6
+ CAC9ECD0D0EBCECEEBCFCEEDD2D1E7CDCDE1C6C5E4CAC9E7CECDE3CBCADEC4C3
+ E9CFCFEBD1D0EFD6D5EED6D5EDD5D4EFD7D6F0D8D6EFD8D7ECD5D4E4CDCCE7D0
+ CFE6D0CFE2CCCBE5CECEE4CFCEE5CECFE2CCCBE2CCCBEED8D7EFD9D8EDD7D6E7
+ D0D0E7D2D1E6D1D0E4CECDE6CFCEEAD5D4E9D2D2EDD8D7E9D2D2E5CECDDBC5C4
+ D6C0BFD6C0BFDEC7C6DBC6C5DCC7C6E4CFCFE6D2D1EAD4D4EFDADAF0DBDBF2DC
+ DCEBD7D6E5D1D1E5D2D1ECDADAE5D4D4E2CFD0E9D7D7E7D6D7E4D4D4E9D8D8EA
+ DADAE4D5D5EAD9DAEDDEDCE9D9D9E2D2D4E6D7D7E5D4D4EFDFDEEFDFDEE7D8D8
+ E7D8D8EEDCDEEEDEDEE6D6D6E6D5D5F2E1E1F0DEDCEDDBDBEFDCDBF2DFDEF2DF
+ DFEBD8D9E2D0CFE2D0CFEAD8D8EEDCDBE7D7D7ECDAD9DBCBCAE9D8D7F6E3E2F6
+ E3E2F7E3E20000000000000000F2E0DFD2C1C1CEBBBDD9C7C6E0CDCDDACAC9E5
+ D4D2EAD8D9EDDCDCEDDBDBE5D5D5E9D8D8E3D2D1ECDBDAE9D8D7DAC7C6D0BFBE
+ DCCACAD8C6C6E1CDCDE9D7D6ECDAD9EDDAD9E1CECED5C2C1D2BFBEE6D1D1EDD8
+ D7ECD7D6F2DCDBF2DCDBF0DAD9F8E2E1F4DEDCF2DCDBF3DCDBF2DBDBF3DCDBF3
+ DCDBE2CCCBCFB8B8D4BEBDD1BBBAD4BFBFEFDAD9EBD5D6ECD7D7F0DBDBEED9D8
+ E2CCCBEBD5D5EDD8D7F4DEDCF4DFDFE5D0D0EDD9D8F2DCDBF0DBDBE7D2D1EDD8
+ D7F2DBDBF3DCDAECD5D5E6D0CFF3DBDBF3DBDAE7D1D1EDD6D5EDD5D5E9D2D1EC
+ D5D4EED6D6EBD4D4E2CCCBE7CFCFECD4D2E7CFCEE6CECDE9CFCFEAD0CFEAD0CF
+ ECD2D1E5CBCBEFD6D4EED5D4EAD0CEF0D6D5F0D6D5EFD6D5F0D7D6F0D7D6EDD5
+ D2F2D8D6F4D9D8EED4D2ECCFCEEDD0D0DCC0BEECCFCEF0D2D1EBCDCBE2C4C3EA
+ CCCBE2C5C4DEC0BEE1C2C2E9CCCAEBCCCAF3D2D0F0D0CEEBCAC9EDCCCBEBCBC9
+ E7C5C4EFCECCF0CFCDEFCFCDDEBDBAE9C9C5E6C6C4E3C3C1E7C6C4EAC9C6ECCA
+ C9ECC9C7ECCAC7EBC7C5E9C5C3DAB8B5DEBAB8EECCCAEECBCAEFCCCBEDCBC9E2
+ BEBDE6C3C1EFCCCAF0CCC9F0CBC9EBC4C3E4BEBBE2BDBAE1BDBAE5C1BEE7C3C0
+ EAC3C1EAC3C0ECC4C2EFC5C4E0B7B5E5BEBAE5BEBBE9BFBDE5BDBBEAC3C0EDC9
+ C7E3BBB9E5BBB9E6BEBAE0B6B4EAC1BFEDC2C1ECC1C0EBC1C0EAC1BEEDC5C4ED
+ C5C3E7C0BFEEC3C2EEC1C0EEC2C1ECC3C0E4BBB9E7BFBDECC2C1E4BAB8E0B6B3
+ EAC1BFE9C4C2E0B9B7EBC1BFECC3C1E9C0BEEEC6C4EDC4C2EEC3C1ECC2C0EFC6
+ C4F2CCC9F0C9C6ECC3C1EBC3C0DFB7B4E4BDBAEFC7C5F0C9C6EAC3C1F2CCCAF4
+ CDCBF3CAC7F4CAC7F3CBC9EDC6C5EDC7C5E3BEBBE9C3C2EBC6C4EAC4C3E7C2C0
+ E2BDBBE4C0BEE6C2C0ECC7C6EAC5C4EAC6C4E6C5C3EACAC7EACBC9EBCCCBE9CA
+ C7EDCBCAEDCACAE6C4C3ECCAC9ECCAC9ECCACAEBCAC9ECCBCBEBCCCCEDCECCEE
+ CFCDE7C9C6E4C5C3E5C5C4E3C3C2EAC9C7EECDCDE6C6C4E2C2C2E4C5C4D8BABA
+ DBBDBDEDD0CFECD0CFE4CAC9EDD1D0EDD2D2EFD5D4EED5D4E7CBC9E6CACAEBCE
+ CEEBCFCEEACECEEED2D1E7CCCBE6CACAE7CECDEDD4D2EACFCFDAC1C0E5CBCAE9
+ CFCEECD2D2EAD1D0E0C6C6EAD2D1EFD8D7EED6D6DFC7C5DCC5C4EAD4D5EDD7D5
+ EDD7D6EDD7D7ECD7D6EDD7D7E7D1D1E0C9C9EED9D7EFDAD8EED8D6EAD5D4EDD7
+ D7EDD6D6DFC9C9D5BFBFD8C2C2E9D2D2EDD8D8EBD5D4E3CDCDE4CECEE0CBCAE7
+ D1D1ECD8D7EDD8D8E9D4D2E6D1D1ECD6D6EDD8D8ECD9D8EFDBDAF2DCDCF0DBDB
+ ECD8D7EAD6D6ECDADAECD9D9E2D0D0E5D4D4E0CECEE0CECEE7D6D7E6D6D6DAC9
+ CAE3D1D0ECDADAE1CFCFD9C9C7D6C5C5D2C1C1DBCBCAE3D2D1DACACAE4D4D4E9
+ D8D9E7D7D6D7C6C6D9C7C7EBD9D9E5D2D2D7C4C4DCCBCAF0DEDCF3E0E0F2DFDE
+ E7D7D6E4D2D2ECDADAE6D6D5EFDEDCEDDBDBD9C7C6E3D1D0F7E4E3F6E2E1DFCC
+ CB0000000000000000F6E3E3D2C1C1CEBBBBE4D2D1F2E0DFE3D2D2EDDCDCEEDE
+ DCEAD8D9EBD9D9EEDEDCEFE0DFEDDADAF2E0DFF0DEDED7C4C4CEBDBBD8C6C6E4
+ D1D0E6D4D4EFDCDCF0DEDCF0DEDCE4D1D1CFBDBDCEBBBAE0CBCAE9D2D1EBD6D5
+ F2DCDBF2DCDBEDD8D7F9E3E1F7E0DFF3DEDCF0DBD9E7D1D0EFD9D8EED7D6D4BF
+ BDCFB9B8E6D0CED1BDBDD0BBBADFCAC9EBD5D4EBD6D6EFDAD9EFDADAE6D1D1ED
+ D8D8ECD7D7F3DEDCF4E0DEEAD5D2ECD7D6F0DBDAEDD9D9E6D1D0EFD9D9EAD5D2
+ ECD6D5ECD5D5E6D0CFF3DBDAF3DBDBE6CFCEEDD5D5EED6D6ECD6D4EDD6D4EFD9
+ D7EFD9D7EAD4D2EAD2D2ECD4D2ECD2D2ECD2D2EDD4D4EDD4D2E9CFCEE6CDCCDC
+ C2C2ECD1D1F0D7D6E7CDCCEED4D2EDD4D1F0D7D5F0D8D6EED6D5ECD4D2F3D8D7
+ F3D8D7EDD1D0F3D7D5F3D6D5F0D2D2F3D6D5F4D6D5F3D6D5F3D6D4F3D5D4ECCE
+ CDE4C7C5EFD1D0ECCDCBEECECEF2D1CFF0D0CEEECDCBF0CFCDEECDCCE9C9C6ED
+ CCCBEFCECCF2D0CFEFCECCEFCECDEECECCEFCFCDEFCFCDEFCDCCF0CECCEDCCCA
+ EECBC9ECCAC7E7C4C3D7B5B2D9B7B4F2CFCCF0CDCBF2D0CDEFCDCBDFBDBBE1BE
+ BBE9C4C2EFCBC9F2CCCAF2CCCAEBC5C2E9C4C2E9C4C2ECC7C5EEC7C5EFC9C6EE
+ C6C4F3CBC9F0C9C6E7C0BEECC4C2ECC4C1EDC4C3EAC2C0E9C3C1EFCAC7EDC5C4
+ EBC1BFEAC1BFE3BAB8EAC0BEEBC1C0EAC0BDE7BEBBE4BBB9EDC5C4ECC5C3E1BA
+ B8EAC0BFE9BEBAEDC3C0EDC3C1E4BBB9EDC3C1EFC6C4EDC2C1E7BEBBEDC5C4E9
+ C3C1E1BBB9EDC4C2E9C0BDEAC2C0EFC9C6F0C7C5F0C5C4E6BDBBE6BFBDEBC5C3
+ F0CAC7EEC6C4F4CCCAECC4C2F0C9C6F4CDCBF4CCCAF0CAC7F3CDCAF4CFCCF3CA
+ C7F4CBC9F4CCC9F3CCCAF3CECCE5C1C0EECAC7F0CCCAEECBC9EECAC9E3C0BFE3
+ BFBEE7C2C1E9C4C2E9C5C3EAC7C5EAC6C5EBCAC9EBCBCAEBCDCBE4C5C4E6C6C4
+ EACAC7DFBFBDE6C4C3EAC9C7EBCAC9E9C7C6EBCBCBEDCECBEECECCEDCECDE7C7
+ C6E6C9C7E7C9C7E1C2C0E2C3C1ECCBCBEAC9C7E4C4C3DCBEBDD6B7B6D6B9B8E9
+ CCCAECCFCEE7CCCBEDD2D2EFD5D4EFD6D4F0D6D5EDD1D1DBC0BFE9CDCCE9CDCC
+ E6CACAEDD2D1EBCECEECD0CFF0D5D5F3D6D6EFD5D4DFC5C4E4CBC9EED5D4EDD4
+ D4EDD4D4E0C7C7DFC6C5E7CFCFE7CFCFD6BEBED6C0C0E2CDCCECD6D5ECD5D5E7
+ D1D2E7D2D2EED8D8EDD7D6E3CDCDEDD7D6EFDAD8EED8D7EBD5D5EDD8D8EED9D8
+ E4CECED4BEBED2BDBDEFD9D9F3DCDBF2DADAEFDAD9F0DAD9EDD8D7F3DCDBF2DB
+ DBEFD9D9E9D2D2ECD5D5E9D2D2F0DAD9EDD8D7ECD7D6F2DBDAF3DCDBEAD5D4F2
+ DCDBF3DEDCF0DCDAEBD7D7ECD9D9EAD9D8EBD9D9EEDCDBECDBDBE2D1D1ECDADA
+ F2DFDFF2DFDFF2E0DFF0DFDEF2DFDFF2E1E0F0E1E1ECDBDBEEDEDEF0E1E0F0E0
+ E0E7D7D7E9D8D8EDDBDBF0DFDEDECDCCE7D6D5EAD8D7F0DEDEF0DEDCE9D8D7EC
+ D9D9E7D7D7E3D0D0F4E3E2F4E3E2DCCCCBE5D5D4F7E4E3F6E2E1DECBCA000000
+ 0000000000F6E3E2D4C2C1CEBBBBE1CECEF2E0DFE5D4D2ECDBDAE5D5D5DACAC9
+ DCCDCCE2D0D0E5D5D5E9D8D7EFDEDCF0DEDEDBC9C9CEBBBAD2C1C0D6C4C4E2D0
+ CFE9D7D6EBD8D8EEDBDBE5D2D1D1BFBFCEBABAE2CDCCE0CBCAD8C3C2D8C2C1DB
+ C5C4E5D0CFF3DEDCE7D1D0E2CBCAE0CAC9DBC6C5ECD6D6F0DAD9EDD8D6EDD7D7
+ F3DCDBE4CFCECFBABACFBABAE4D0CFEBD6D5ECD8D7EFDAD9E6D1D0EAD5D5E1CB
+ CBDCC9C7E6D1D0D9C4C4DBC6C5E3CECDDBC6C5D7C2C2E0CAC9D9C3C3DAC4C3DA
+ C4C3D7C0C0EED8D7F0DAD9E4CDCDE6D1D0DCC6C5E0C9C7E7D1D0F0D9D9F0D9D8
+ E2CBCAE7D0CFE7CFCEEED6D5F0D7D7EFD7D5E9D1CFE6CDCCE0C6C5D7BEBDDEC4
+ C3EAD1D0E6CCCCEBD1D0EBD1D0EBD1D0E3CBC9DFC5C4D8BFBEE5CBCAE9CECDE7
+ CCCBEFD4D1EBCECCE2C4C3E9CCCBF2D5D2F3D5D4F3D7D5F3D6D5E9CBCAE4C6C4
+ EBCDCBE7C7C6F0D0CFF0D0CEEECCCBE3C1C0E9C7C6DFBFBDE2C1C0E9C9C6E6C5
+ C4EBCBCAEBCBC9E7C7C6DFBFBEE7C7C5EFCDCCEECDCBE7C6C4E7C5C4EAC7C5ED
+ CAC7EECBC9D6B4B2DAB7B5F3CFCEF0CECCF2D0CEF4D0CEEECBCAEECBC9EECBC9
+ EFCCC9EDC6C4EEC9C6ECC9C5EDC9C6EECAC9EECAC7ECC6C4E0BAB7E1BAB8F3CB
+ C9F3CBC9E9C2C0EFC7C4EDC5C3EEC5C3ECC4C3E7C3C1EAC5C3E9C1BFE6BEBDE5
+ BBBAE3BAB8EAC1C0E6BDBBE5BBBAE9C0BEE3BBB8EAC2C1E0B9B7DFB8B6EAC0BD
+ EDC1BFF0C5C4EFC6C4E3BBB8EAC1BEEFC6C4EDC4C2EDC3C2EFC6C4EAC6C3EAC5
+ C3F0C7C5E3BBB8DCB5B3E6C1BEF2CBC9F4CAC7F0C7C5E1BAB7E0BBB9EDC5C4EF
+ C7C5F3CCCAEDC6C4E9C2C0ECC5C3EFC7C6EBC4C2F3CCCAF4CECCECC5C4ECC4C1
+ EAC2BFF3CCCAF3CECDEBC7C6E6C3C2EAC5C3F2CDCBF2CDCCEAC6C4EAC6C6EAC5
+ C4E5C2C0E0BDBBDEBAB9DEBBBAE1C0BFE9C9C7EDCECDDFC1BFE1C2C0E9C9C9E4
+ C4C3DCBBBAE3C3C2E9C7C7E3C3C2E3C2C2E4C5C4EDCECDEBCCCCDEC0BFE1C3C1
+ EECFCEE9CAC9EACAC9EFD0CFEECECEE4C5C4E5C6C5D5B7B6D5B7B6EBCDCDE7CA
+ C9E2C5C5E9CDCCE4CAC9E5CAC9EDD2D1F3D7D5E7CDCCF2D5D4EBCFCEE5CAC9E9
+ CECCDFC3C2E4C9C7EDD1D0F2D7D5EBCFCFDFC4C3E4CBC9EFD6D5ECD2D2EAD0D0
+ DEC5C4E4CDCBE9D0D0DFC7C6D6C0C0D6C0C0E2CCCCEAD4D5EAD5D4E1CBCCDBC5
+ C5E5CFCEE6D0D0DBC5C5E5CFCFE9D2D1DCC7C5DBC5C5E5CFCDEDD6D6E5CFCFD1
+ BBBAD0BBB9F0D9D8F4DEDCF4DEDEECD5D5E5CFCEE2CBCAECD5D5F0DAD9F0DAD9
+ E9D2D1DCC6C5DFC9C7E6D0CFDFCAC9DFCBCAE5D0CFE9D2D2E9D4D4DBC6C5E4CF
+ CFF2DCDBEED9D9ECD8D8EBD8D8EBD8D8EAD8D8EAD8D8E5D2D2EBD9D9F0DEDEED
+ DBDAE7D6D5E6D5D4F0DEDEEDDBDBE7D7D6E0CECFE1D0D0E5D5D4E5D5D5E0CECF
+ E4D2D2F2E1E0EDDBDBDCCCCBF0E0DFECD9D9EBD8D9EDDBDAE9D8D7F2E1E0ECD9
+ D9DAC7C7ECD9D9F0E0DFE5D5D4EFDFDEF8E6E5F9E6E5E3D0CF00000000000000
+ 00EFDEDED4C2C1CEBBBBCEBDBBD8C6C6D5C4C3D9C7C7D0BFBFD0C0C0D4C3C3D1
+ C1C1D0BFBFD0BFBFD8C6C6E6D6D5D2C0BFCDBBBAD5C3C2DCCBCBD4C2C1D4C1C0
+ CFBDBBDAC6C6E3D0CFD4C0C0CEBAB9D4BFBED0BDBACDB6B6CDB7B6D4BEBDD9C4
+ C3D7C1C0CDB7B6CFB8B7CFB8B7CFB9B8E3CDCCF0DBDAEDD7D7E6D0CFE9D2D0D1
+ BBBACFBAB9CFBBBAE5D0CFE9D4D2EEDAD9F3DEDEEDD9D8E5D0CFD2BDBDD1BDBB
+ DBC6C6D5C0BFD1BDBBD4BEBED9C4C3DBC5C4D9C3C3D4BEBDD5BFBDD4BEBDD2BE
+ BBE9D2D1F3DBDAEDD7D6E0CAC9D1BDBDD5BEBEE2CACBE9D2D1DBC4C3D5BDBBD5
+ BBBBD4BBBBD5BDBDE7CECDECD2D2E5CCCCD8C0C0D4BBB9D4BAB9D4BAB9D5BBBA
+ DCC4C2E9D0CEEED6D5EDD4D4ECD4D2EBD1D1E9CECCF0D6D4F0D4D1E9CDCCE4C7
+ C5D6BAB8D6B9B8D7B9B8D6B9B8DCC1BFF2D5D2EBCCCCD2B6B4D4B6B4D6B7B5D8
+ B9B7EECECDF3D2D0E6C6C4D8B7B6D8B8B6D8B8B6D8B8B7E2C2C0EACBC9EACAC7
+ EBCBC9D8B9B7D8B7B6DBBAB9E3C2C0DBBAB8D9B7B6D9B8B6DCBAB8ECC9C6EECB
+ CAD6B4B2D8B5B4E0BFBDD9B8B6D8B7B5EBC9C6E9C6C4E3C0BEDAB6B5D7B3B1D7
+ B3B1D7B3B0D8B5B3E3C0BEEBC6C4EFCAC7E3BEBBD5B0ADD6B0ACEEC7C4F4CDCB
+ EEC7C4EEC5C3EFC6C4EFC9C6E7C2C1DAB6B4DAB5B3DCB6B4DCB4B3E4BBB9E4BD
+ B9E0B6B4D8B0ACDBB4B1EEC5C4DEB6B5D9B3B1D9B4B2D9B3B1DEB4B3EFC4C2F0
+ C7C5E0B8B6D8B1AED9B2B0DCB4B2DBB3B0E0B7B4D7B0AED8B4B2EDC9C6F4CDCA
+ DCB4B1D6B0ACDBB5B3F4CDCBF2C9C7DFB6B4DAB3B2DAB5B3DBB7B4E5BEBDEEC6
+ C5DEB8B5D8B3B1D8B3B1DAB5B2DAB4B2EEC9C6F5CFCDE3BEBBD8B1B0D9B2B0F0
+ CAC9F3CECDE0BDBBD7B4B2D7B4B3EBC7C5F0CCCBECC9C7ECC9C7E9C4C3E1BEBD
+ D9B6B4D8B4B3D8B5B4D9B8B6E0BFBEE0C1C0D8BAB8DBBEBBECCDCCDFC0BFD8B8
+ B6DABAB9DFBEBDD8B7B5D7B7B6DABAB9EECECCE2C3C2D6B8B6D7B8B7EECFCEEF
+ D1D0EBCDCBEFD1CFEFD0CFEDCCCBE9C9C7D6B7B6D6B7B7EED0CFE3C4C4D9BBBA
+ D5B9B8D6BAB9D7BAB9D8BEBBECCFCEE7CCCBF2D6D4D6B9B9D1B5B4DCC1BFE5CA
+ C9E5CAC9F0D5D4EDD1D0D4B9B8D2B8B8DBC1C1ECD2D1E1C7C6D2B9B9D2BBBAD7
+ BEBEEDD5D5ECD5D4D6C0C0D6C0C0E4CECDE9D4D2E6D0D0D7C2C2D5C0C0D5C0BF
+ D8C2C2DCC6C6ECD5D6DFC9C6D1BBBAD1BBBAD5BEBEE1CACADCC6C6D1BBBAD1BD
+ BAEAD2D1ECD5D5ECD6D5D4BEBBCEB8B7D5BEBDF3DBDBF3DBDBE0C9C9D1BBBACF
+ B9B8D2BDBDD2BDBBCFBAB8D0BBBBD5C1C0DFCACAD1BEBBCFB9B8D5C0BFEDD8D8
+ EDD9D8EFDBDAEEDAD9EAD6D7EFDCDBEEDADAE9D6D7EDDBDBE1CECED2C0C0D2BF
+ BFD4C0C0D1C0BFCFBFBED1C0C0D5C3C3D1C1C1CFBFBFCFBFBED8C7C6E6D5D5E7
+ D7D6CDBDBBD2C1C0E5D4D2D5C4C3D0BFBED1C0BFD1C0C0E4D2D1DAC9C7CEBBBB
+ CDBBBAD9C7C6E3D0D0D7C4C4CEBBBBE5D4D2DFCCCB0000000000000000F2E0DF
+ D4C2C1CEBBBBD4C2C1F3E1E1E7D7D6D4C3C2D0BFBFD2C2C2F0E0E0E1CECFD0BF
+ BFD0C0C0EBD8D9F0DEDEDECCCBCDBBBAD9C6C5ECDAD9DCCBCACEBDBACEBABAEA
+ D7D7EDDAD9D1BFBFCCB8B7E6D1D0F2DEDCDBC5C4CBB5B4DEC7C6EFD9D8CFBAB9
+ CDB7B6E6D0D0D6C0BFCCB6B5CEB8B7E7D1D0D0BDBACDB7B6CDB7B6CFBAB9D2BF
+ BEE2CDCCE3CECDDCC9C9DAC5C4E7D4D2DFCBCACFBAB9CFBAB9E0CBCAF4DFDED4
+ BFBED1BDBDE2CDCCEDD9D8E6D0D0D1BDBDD4BEBDEAD4D2DFC9C7D1BDBDD5BFBE
+ F3DBDBEED9D7D6C1BFD1BBBBDBC5C4E1C9C7E2CCCAD2BBBAD6BEBEECD4D2DBC2
+ C1D2BAB9DBC4C3F0D8D7E2C9C6D2B9B9D9C0BFE7CFCEDEC4C3D2B9B9D8C0BEEE
+ D6D5F3DAD8F2D9D7F3D9D7F0D7D6EDD4D1F3D6D5F3D6D4E6CAC9D4B7B5D2B6B4
+ E7CBC9EED2D0D6B9B7D5B8B6EACCCBDEBFBDD2B3B2E2C3C2EDCDCCE3C2C1E9C7
+ C6EECFCDD9B9B7D5B5B3E3C3C1DFC0BEDBBBBAD7B8B6E9C9C7F0D1D0E9CAC7D8
+ B8B6D8B8B7E6C6C5E2C0BFD8B7B5DAB8B7E9C6C5EDCBC9ECCAC7E1BFBED6B4B2
+ D7B5B3E3C1C0DAB9B7D7B6B3D8B6B4E6C4C2D9B6B4D6B3B1DAB6B4EEC9C7DAB6
+ B4D5B1B0D8B5B2EFCBC9F6CFCEDCB7B5D5AEADD5AEADE6C1BFF4CDCBEEC6C4EF
+ C7C5EBC4C1E7C1BFDAB6B4D8B4B3DBB6B4E6BFBDE0B7B5E2BAB8DEB6B4D8B0AD
+ D7AEACE0B6B5E5BEBBD8B1AEDAB4B2E3BEBDDEB7B5D8B0ACDFB5B3EEC4C3D8B2
+ AED8B1AEE3BBBAE9C0BFDAB2B0DBB4B1D8B2B0D6B2B1EBC7C5F3CDCBE0B8B6D8
+ B2AEE4BFBBECC6C4E1B8B7D8B1AEE3BDB9E7C2C1D8B4B2E0B9B7F3CCCAE3BDBB
+ D8B3B1DEB8B7EAC3C1E0B9B7E9C3C1F0CCCAD9B5B3D8B2B1E0B9B7F2CCC9F4CE
+ CDDAB7B6D7B4B3D7B4B2EDCBC7F3CECDE9C4C3EAC7C6EDCBC9EDCBC9E1BEBBD7
+ B4B3DCBAB8ECCAC9E4C2C2DABABADEBFBEE5C7C6E9CBC9D8B9B7DABABAEACAC9
+ E3C3C2D7B7B6D7B6B5EBCBCAEECECDD8BAB8D6B7B6E1C3C2F2D2D1E7CAC9EACC
+ CBEECFCEEFD1D0EFD0CFDCBEBDD5B7B6D5B7B6EFD0CFEDD0CFD8BAB9D4B8B7E7
+ CAC9EDD2D1E2C6C5E1C5C3E4C9C7E4C9C6D0B5B4D0B6B4D5BAB9E0C4C3DCC1C0
+ EACECEE5CAC9D2B8B7D2B8B8DAC0C0ECD2D0F0D7D6D6BDBBD1BAB9DCC4C3EFD7
+ D6EDD6D5D6C0C1D6C0C1E2CDCCE9D4D4DBC6C6D5C0C0D9C3C2E0C9C7D4BFBED9
+ C3C2EED9D8F0DADAD1BBBBD1BBBADFC7C6EFD9D8E7D2D0D1BBBAD4BEBDF2DAD9
+ E9D2D1E4CECECEB8B7CEB8B7D0BAB9F3DBDAE9D2D1D4BEBDCFB8B8DBC5C4E9D4
+ D2D2BDBDCFB9B8D5C0C0EBD5D6E6D1D1CEB9B8D0BBBAE3CECDEBD5D5E9D4D2EC
+ D8D8F0DBDAEFDAD9F2DBDBF2DCDBE6D2D1E9D5D4CEBBBACFBDBDEBD7D7F2DEDC
+ D4C0C0CFBFBFE2D0D0F0DEDEDFCDCDCEBDBDDECBCAECDBDAE7D7D6D4C2C2CDBD
+ BBDCCACAE1CFCECDBDBBD4C3C2ECDBDADECDCCE5D4D4E3D1D0CFBEBDCEBBBBF2
+ E0E0EAD8D7CEBBBBCEBAB9EFDCDBEFDEDE0000000000000000E5D2D2D2C1C0CE
+ BBBBE2CFCFF5E3E2E7D6D5D8C6C6D0BFBFD5C4C3EEDEDCECDADAD0BFBFD4C2C2
+ EFE0DFF2E0E0E1CECDCDBBBAD6C3C3F0DFDEEBD8D8CEBDBACDBAB9F3E0E0EDDA
+ DAD2BFBFCCB7B6F2DCDBF2DCDBF2DCDBCBB5B4D7C1C0E4CFCECBB6B4D5C0BFF9
+ E3E2F4DFDECFB8B7CBB5B4E2CDCCCDB7B6CCB6B5D9C2C1EBD6D4EFDAD9F3E0DE
+ F3E0DFEBD6D7E2CDCBE5D1D0D5C1C0CEBAB9CFBABADFCAC9EDD8D8D5C0C0D1BD
+ BBE7D2D2E5CFCFDAC4C4D1BBBBD6C0C0E4CECDDCC7C6D2BDBDD1BBBBEED9D8E6
+ D1D0D4BEBDD1BBBAE7D2D1EAD4D2DEC6C5D2BAB9E7D1CFF2D9D8F0D9D7D2BAB9
+ D5BEBDF0D8D7DCC4C3D2B9B9EAD2D1EDD4D4EED5D5D2BBBAD2BABAEBD2D2F0D8
+ D6F0D8D6F2D8D7EED5D4E5CAC7EBCECCE7CBC9E0C3C2D1B4B4D2B6B4EDD0CFF3
+ D6D4DFC2C0D1B4B3DBBDBADEC0BFD2B5B3DEBFBEE3C3C2E7C9C6F3D2D0EDCCCB
+ D5B6B4D5B5B4EFCFCEE6C7C5E4C5C3D7B8B6DBBDBBF0D1D0EBCCCBD7B8B6D9BA
+ B8E5C5C3E7C6C5D8B7B5D9B8B6E6C5C3E9C6C4EECCCAE7C6C4D6B5B3D9B8B6EF
+ CFCDDFBDBAD8B7B5D6B5B3DEBBB9D8B6B4D6B3B1EAC5C3F3CFCCE7C4C3D5B1B0
+ D6B2B0E9C4C3F3CECCD8B3B1D6B1AED5AEADDFB9B6F7CFCDEFC9C6EEC5C3E0B9
+ B6EBC3C2E4BFBDD7B4B2E9C2C0EBC3C1E7C0BDECC4C2EAC2C0D8B1ADD8B1ADF0
+ C6C5EDC5C4D7B1AEE0BAB8EAC5C2ECC5C2D9B1B0DAB1AEF2C9C6DEB6B5DAB4B1
+ EFC7C5F3CBC7EBC3C1F0C7C5EBC3C2D6B2B0EFCCCAEBC5C4DAB3B2DAB4B2EFCA
+ C7E9C3C1D9B2B1E0B7B5F2CBC9F5CFCDDFBAB9DAB5B3F4CDCCF2CBCAD9B5B3E0
+ BBB9EAC3C2E2BDBAF3CDCBF3CECCD9B6B3D8B4B1E9C2C0EEC9C6F0CBCAD8B4B3
+ D8B6B4D8B5B4DFBDBAF2CFCDE9C6C5EBC9C7E9C6C4ECC9C9E9C6C5D8B5B4DFBD
+ BBECCAC9DEBDBBE3C3C1EECFCEEBCDCCDFC2C1D7B9B7E3C3C2E7C9C7E3C3C2D8
+ B8B6D9B9B9EDCDCCEECECDD6B7B6D6B7B6EED0CFF3D4D2EED0CFEDCFCDE5C9C7
+ E5C7C6E9CAC9D7B8B7D5B7B6D5B7B6DEC1C0E9CCCBDBBFBED8BAB9EBCFCFF2D6
+ D4F0D4D2ECD0D0E2C6C5E7CCCBD0B6B4D5B8B8D4B8B7E5C9C7E3C9C7E0C5C4D6
+ BDBBD2B9B8D5BAB8D5BAB9DCC2C0E4CBCBDCC3C2D1BAB9E3CAC9ECD4D4E7D1D0
+ D6C0C0D7C1C1E6D0D0EDD7D7D6C1C0D6C1C1DCC6C6EAD4D4D9C2C1D4BFBEE9D4
+ D2ECD6D4D6C0BFD1BBBBE6D1D0F0DBD9EAD4D4D1BBBAD7C0C0F5DFDEEFD8D8E9
+ D2D1CEB8B7D4BEBBD1BBBAEFD9D8F3DCDBCFB9B8D0BAB9F3DCDBEBD5D4D7C2C1
+ CEB9B8E0CBCAEAD6D6DFCBCACEB9B8D2BFBDE1CBCAE7D1D1DBC7C6E3CECEE9D4
+ D2E6D2D0E9D4D2E9D4D2E6D1D1D4BEBDCBB5B4CEB8B9F2DAD9F2DEDCE0CBCBCE
+ BBBBE7D6D4F0DFDEE7D5D5CDBBBAECDAD9ECDADAECDADAD1BFBFCDBDBBECDADA
+ EDDCDBCFBFBEDCCCCCEFDEDEEBD9D9F4E3E2F3E2E2D1C1C1CEBDBDE7D7D7D4C2
+ C1CFBDBBE9D6D5F4E1E0F3E0DF0000000000000000F2E0E0D9C7C6CEBBBBEBD8
+ D7F5E3E2EFDEDCEBD8D8D0BFBFD6C4C4ECDBDAE9D8D7D0BFBFD4C2C2E9D7D7F3
+ E0E0E4D0D0CDBBBADAC7C6EFDCDBEDDADACFBDBBCDBAB9F3E0E0EAD7D6D0BDBB
+ CBB6B5E7D2D1D9C4C3DBC6C4CCB6B5D1BDBBD8C3C2CBB6B4D7C1C0F4DFDEF0DA
+ D9CFB8B8CBB5B4D5BFBECFB8B8EAD5D4F6DFDEF7E1E0F6E0DFF3DFDFF3DFDFF5
+ E0E0F3DEDEF4E0DFE5D1D0CEBAB9D2BFBEECD7D6EFDADAD7C2C2D1BDBBEAD5D4
+ EED9D8E4CECDD1BBBBDAC4C4ECD8D7DBC6C5D2BEBDD1BBBBF3DCDBEDD7D6D6C0
+ BFD1BBBAEBD4D4E9D2D1DAC3C1D2BAB9ECD4D4EED7D6EDD5D5D2BABAD5BBBBEC
+ D2D2D9C1C0D2BAB9DCC5C4DEC6C6E3CACAD2BBBBD2BBBAE3CBCBE4CBCBE7CECD
+ EFD6D4EDD4D2EBCFCDECCFCDF3D7D5EACCCBD1B4B4D2B7B5E5C9C6EED1CFE6C9
+ C7D1B4B3EACCCAF3D5D4DABBBADEBDBBE5C5C4EBCCCAF5D5D4F3D2D0D5B6B4D6
+ B6B5F3D2D1E9CAC7E2C3C1D7B8B6E0C2C1F0D2D0EDCDCCD7B8B6DBBDBAEDCCCB
+ EFCFCDDCBDBAD7B6B4DAB8B7EBCAC9F4D1CFEFCDCCD6B5B3DFBFBDF4D2D0F0CF
+ CDDCBBB9D6B5B2E2C0BEDBB8B6D6B3B1F3D0CDF5D2CFF5D1CFD5B0B0D8B4B2F2
+ CCCADFBAB8D5AEADDAB4B2D5AEACD5AEABE7C1BFECC4C2EEC6C4E2BAB8EAC4C1
+ EECCC9DAB6B4DCB6B4E4BBB9EEC7C5F3CBC9F0C9C7D9B3B1DAB2AEF3CBC9E7C0
+ BFD6B1AEEFCAC7F0CCCBF0CBC9DBB4B2DBB2B1F3CBC9EBC4C2DAB5B2E2BBB9EC
+ C5C2ECC4C3F0C7C6EFC9C6D7B3B2E4C1BFEDC7C6DAB4B1E9C3C1F4CFCCE0BBB8
+ D8B2B0EFC7C5EAC2C0F0CCCAEFCCCAD8B4B2EFCBC7F4CECCE0BBB9DEB9B8E7C3
+ C1EBC5C3F4CFCCF4CFCEDBB7B6D8B4B3EEC7C5E5C1BFE1BDBAD7B4B3DAB9B7DB
+ B9B8D9B7B6EECBCAF2CECDEECDCBE5C3C3EECCCAEAC7C6D8B5B3D8B6B3D9B8B7
+ DAB9B8E9C9C7E6C7C6E7CAC9DABDBBD7B8B7EBCCCBEECECEEBCCCCD8B8B7D9B9
+ B9F0D0CFF3D2D1D7B7B6D6B7B6EED0CFF0D2D1EED1D0ECCECEEED1D0EFD2D1DE
+ C1C0D6B7B6DABBBADBBDBBD7B9B8E2C3C2ECCDCDDBBEBDDBBEBDE4C7C5F3D7D5
+ F3D6D5E6CBC9D7BDBBD4B9B7E0C4C4D6BBB9E4CAC7F3D7D6E7CDCBD2B8B7D7BB
+ BADCC2C0D4B9B8D6BBBAE7CDCCDEC4C4D1B9B9E3CBCAE6CECDE2CBCAD6C0C1D8
+ C2C2E3CDCDE4CECDD5BFBEDCC6C6DAC4C3EAD2D4E2CCCCD4BEBEE2CCCCEFD8D8
+ DCC6C5D2BDBDE6D1D0F2DBD9E6D1D0D1BBBAD5BFBEF3DCDAECD5D5DBC5C4D5BE
+ BDECD6D6D6C1BFEED8D7F4DFDECFB9B8D0BBBAF3DEDEF3DBDBDFCAC9CEB9B8E0
+ CBCAECD8D7DAC6C5CEB9B8D4BFBFECD7D6F2DCDCF0DBDAEFDAD9E7D2D2E6D1D0
+ E7D2D1EAD6D6F4DFDED8C3C2CBB5B4CEB8B7E2CBCAD4BBB9CFB8B7CBB6B5E6D1
+ D1E7D5D4D8C5C4CDBBB9E7D5D5EEDCDBE7D6D5D2C2C1CEBDBBF0DFDFF2E0DFD4
+ C3C3D2C2C2D6C5C4E9D8D7F4E2E2EFDFDED1C1C0CDBDBBD1BFBFCEBBBBD8C5C4
+ F6E3E2F8E4E3F2DFDF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000}
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/SplashPage.h b/apps/windoze/CBuilder5/BibleCS/SplashPage.h
new file mode 100644
index 0000000..47bb0a9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/SplashPage.h
@@ -0,0 +1,25 @@
+//---------------------------------------------------------------------------
+
+#ifndef SplashPageH
+#define SplashPageH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+#include <Graphics.hpp>
+//---------------------------------------------------------------------------
+class TSplashPg : public TForm
+{
+__published: // IDE-managed Components
+ TImage *Image1;
+private: // User declarations
+public: // User declarations
+ __fastcall TSplashPg(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TSplashPg *SplashPg;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/StudyProfessor.cpp b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.cpp
new file mode 100644
index 0000000..0456bc8
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.cpp
@@ -0,0 +1,16 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "StudyProfessor.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TForm3 *Form3;
+//---------------------------------------------------------------------------
+__fastcall TForm3::TForm3(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/StudyProfessor.dfm b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.dfm
new file mode 100644
index 0000000..f2ff54e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.dfm
@@ -0,0 +1,45 @@
+object Form3: TForm3
+ Left = 363
+ Top = 103
+ Width = 616
+ Height = 685
+ Caption = 'Form3'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 608
+ Height = 73
+ Align = alTop
+ Caption = 'Panel1'
+ TabOrder = 0
+ object Edit1: TEdit
+ Left = 4
+ Top = 4
+ Width = 265
+ Height = 21
+ TabOrder = 0
+ Text = 'Edit1'
+ end
+ object RadioGroup1: TRadioGroup
+ Left = 280
+ Top = 4
+ Width = 185
+ Height = 57
+ Caption = 'Research Type'
+ Items.Strings = (
+ 'Simple Study'
+ 'Indepth Research')
+ TabOrder = 1
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/StudyProfessor.h b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.h
new file mode 100644
index 0000000..aa808b0
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/StudyProfessor.h
@@ -0,0 +1,25 @@
+//---------------------------------------------------------------------------
+
+#ifndef StudyProfessorH
+#define StudyProfessorH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TForm3 : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TEdit *Edit1;
+ TRadioGroup *RadioGroup1;
+private: // User declarations
+public: // User declarations
+ __fastcall TForm3(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TForm3 *Form3;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/Sword.BMP b/apps/windoze/CBuilder5/BibleCS/Sword.BMP
new file mode 100644
index 0000000..16501a4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/Sword.BMP
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TModuleFonts.cpp b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.cpp
new file mode 100644
index 0000000..03a2e99
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.cpp
@@ -0,0 +1,138 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "TModuleFonts.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma link "RxCombos"
+#pragma resource "*.dfm"
+
+TModuleFonts *ModuleFonts;
+//---------------------------------------------------------------------------
+__fastcall TModuleFonts::TModuleFonts(TComponent* Owner)
+ : TForm(Owner)
+{
+ // Put in the RXLib Font combobox component
+ cmbFontSel = new TFontComboBox(this);
+ cmbFontSel->Parent = pnlFontComboBox;
+ cmbFontSel->Align = alClient;
+// cmbFontSel->Font->Height = -15;
+ cmbFontSel->ParentFont = true;
+ cmbFontSel->UseFonts = true;
+ cmbFontSel->ItemIndex = cmbFontSel->Items->IndexOf("Arial");
+ cmbFontSel->OnChange = cmbFontSelChange;
+}
+//---------------------------------------------------------------------------
+void __fastcall TModuleFonts::FormShow(TObject *Sender)
+{
+ FillList();
+}
+//---------------------------------------------------------------------------
+void __fastcall TModuleFonts::viewAllClick(TObject *Sender)
+{
+ viewAll->Checked = true;
+ viewUnicode->Checked = false;
+ FillList();
+}
+//---------------------------------------------------------------------------
+void __fastcall TModuleFonts::viewUnicodeClick(TObject *Sender)
+{
+ viewUnicode->Checked = true;
+ viewAll->Checked = false;
+ FillList();
+}
+//---------------------------------------------------------------------------
+
+void TModuleFonts::FillList()
+{
+ BibleCSMGR *manager;
+ ModMap::iterator mods;
+ TTreeNode *node;
+ string nodeName;
+ manager = Form1->mainmgr;
+
+ installTree->Items->Clear();
+
+ if (!manager->configPath)
+ return;
+
+ for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
+ for (node = installTree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
+ if (!strcmp(node->Text.c_str(), mods->second->Type())) {
+ break;
+ }
+ }
+ if(mods->second->isUnicode() || viewAll->Checked){
+ if (!node) { // Add Section
+ if (!strncmp(mods->second->Type(), "Bibl", 4)) // If Bibles, put first in list
+ node = installTree->Items->AddChildFirst(0, mods->second->Type());
+ else node = installTree->Items->AddChild(0, mods->second->Type());
+ }
+ nodeName = "[";
+ nodeName += mods->second->Name();
+ nodeName += "] ";
+ nodeName += mods->second->Description();
+ node = installTree->Items->AddChildObject(node, nodeName.c_str(), mods->second->Name());
+ }
+ }
+ //for (node = installTree->Items->GetFirstNode(); node; node = node->getNextSibling())
+ // node->Expand(true);
+ node = installTree->Items->GetFirstNode();
+ if (node)
+ node->MakeVisible();
+
+}
+void __fastcall TModuleFonts::installTreeChange(TObject *Sender,
+ TTreeNode *Node)
+{
+ TTreeNode* currNode = installTree->Selected;
+ BibleCSMGR *manager;
+ AnsiString modName, fontName;
+ ModMap::iterator it;
+ manager = Form1->mainmgr;
+
+ if(!currNode->HasChildren){
+ modName = currNode->Text.SubString(2, currNode->Text.Pos("]") - 2);
+ it = manager->Modules.find(modName.c_str());
+ fontName = (*it).second->getConfigEntry("Font");
+ cmbFontSel->ItemIndex = cmbFontSel->Items->IndexOf(fontName);
+ }
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TModuleFonts::cmbFontSelChange(TObject *Sender)
+{
+ TTreeNode* currNode = installTree->Selected;
+ BibleCSMGR *manager = Form1->mainmgr;
+ manager->applyUserPrefs();
+ AnsiString modName;
+ ModMap::iterator it;
+ if(!currNode->HasChildren){
+ modName = currNode->Text.SubString(2, currNode->Text.Pos("]") - 2);
+ manager->getUserPrefs()[modName.c_str()]["Font"] = cmbFontSel->Items->Strings[cmbFontSel->ItemIndex].c_str();
+ }
+ manager->applyUserPrefs();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TModuleFonts::btnResetClick(TObject *Sender)
+{
+ BibleCSMGR *manager;
+ SectionMap::iterator sit;
+ ModMap::iterator it;
+ manager = Form1->mainmgr;
+
+ sit = manager->getUserPrefs().Sections.begin();
+ while(sit != manager->getUserPrefs().Sections.end())
+ {
+ (*sit).second.erase("Font");
+ sit++;
+ }
+ manager->applyUserPrefs();
+}
+//---------------------------------------------------------------------------
+
+
diff --git a/apps/windoze/CBuilder5/BibleCS/TModuleFonts.dfm b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.dfm
new file mode 100644
index 0000000..ca772c4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.dfm
@@ -0,0 +1,156 @@
+object ModuleFonts: TModuleFonts
+ Left = 523
+ Top = 262
+ Width = 354
+ Height = 462
+ Caption = 'Select Module Fonts'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ KeyPreview = True
+ Menu = MainMenu1
+ OldCreateOrder = False
+ Position = poScreenCenter
+ Scaled = False
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 375
+ Width = 346
+ Height = 41
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object btnReset: TBitBtn
+ Left = 136
+ Top = 8
+ Width = 102
+ Height = 29
+ Anchors = [akRight, akBottom]
+ Caption = '&Reset All'
+ TabOrder = 0
+ OnClick = btnResetClick
+ Glyph.Data = {
+ DE010000424DDE01000000000000760000002800000024000000120000000100
+ 0400000000006801000000000000000000001000000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333444444
+ 33333333333F8888883F33330000324334222222443333388F3833333388F333
+ 000032244222222222433338F8833FFFFF338F3300003222222AAAAA22243338
+ F333F88888F338F30000322222A33333A2224338F33F8333338F338F00003222
+ 223333333A224338F33833333338F38F00003222222333333A444338FFFF8F33
+ 3338888300003AAAAAAA33333333333888888833333333330000333333333333
+ 333333333333333333FFFFFF000033333333333344444433FFFF333333888888
+ 00003A444333333A22222438888F333338F3333800003A2243333333A2222438
+ F38F333333833338000033A224333334422224338338FFFFF8833338000033A2
+ 22444442222224338F3388888333FF380000333A2222222222AA243338FF3333
+ 33FF88F800003333AA222222AA33A3333388FFFFFF8833830000333333AAAAAA
+ 3333333333338888883333330000333333333333333333333333333333333333
+ 0000}
+ Margin = 1
+ NumGlyphs = 2
+ end
+ object btnOK: TBitBtn
+ Left = 248
+ Top = 8
+ Width = 94
+ Height = 29
+ Anchors = [akRight, akBottom]
+ TabOrder = 1
+ Kind = bkOK
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 0
+ Width = 346
+ Height = 334
+ Align = alClient
+ BevelOuter = bvNone
+ Caption = 'Panel2'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ object Panel4: TPanel
+ Left = 0
+ Top = 0
+ Width = 346
+ Height = 32
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 3
+ Top = 8
+ Width = 82
+ Height = 13
+ Caption = 'Installed Modules'
+ end
+ end
+ object installTree: TTreeView
+ Left = 0
+ Top = 32
+ Width = 346
+ Height = 302
+ Align = alClient
+ Indent = 19
+ ReadOnly = True
+ TabOrder = 1
+ OnChange = installTreeChange
+ end
+ end
+ object Panel3: TPanel
+ Left = 0
+ Top = 334
+ Width = 346
+ Height = 41
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 2
+ object Label2: TLabel
+ Left = 7
+ Top = 8
+ Width = 52
+ Height = 13
+ Anchors = [akLeft, akBottom]
+ Caption = 'Font Name'
+ end
+ object pnlFontComboBox: TPanel
+ Left = 85
+ Top = 4
+ Width = 258
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ BevelOuter = bvNone
+ Caption = 'Font ComboBox'
+ TabOrder = 0
+ end
+ end
+ object MainMenu1: TMainMenu
+ Left = 200
+ object menuView: TMenuItem
+ Caption = '&View'
+ Checked = True
+ object viewAll: TMenuItem
+ Caption = 'Show &All Installed'
+ GroupIndex = 1
+ OnClick = viewAllClick
+ end
+ object viewUnicode: TMenuItem
+ Caption = 'Show &Unicode Only'
+ Checked = True
+ GroupIndex = 1
+ OnClick = viewUnicodeClick
+ end
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/TModuleFonts.h b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.h
new file mode 100644
index 0000000..5579f1c
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TModuleFonts.h
@@ -0,0 +1,56 @@
+//---------------------------------------------------------------------------
+
+#ifndef TModuleFontsH
+#define TModuleFontsH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <RxCombos.hpp>
+#include <Buttons.hpp>
+#include <ComCtrls.hpp>
+#include <Menus.hpp>
+#include <dirent.h>
+#include <io.h>
+#include <dir.h>
+// Sword includes
+#include <swmgr.h>
+#include <swconfig.h>
+#include "mainfrm.h"
+#include <ExtCtrls.hpp>
+
+//---------------------------------------------------------------------------
+class TModuleFonts : public TForm
+{
+__published: // IDE-managed Components
+ TMainMenu *MainMenu1;
+ TMenuItem *menuView;
+ TMenuItem *viewAll;
+ TMenuItem *viewUnicode;
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TPanel *Panel3;
+ TBitBtn *btnReset;
+ TBitBtn *btnOK;
+ TLabel *Label2;
+ TPanel *pnlFontComboBox;
+ TPanel *Panel4;
+ TTreeView *installTree;
+ TLabel *Label1;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall viewAllClick(TObject *Sender);
+ void __fastcall viewUnicodeClick(TObject *Sender);
+ void __fastcall installTreeChange(TObject *Sender, TTreeNode *Node);
+ void __fastcall cmbFontSelChange(TObject *Sender);
+ void __fastcall btnResetClick(TObject *Sender);
+private:
+ void FillList();
+public: // User declarations
+ TFontComboBox *cmbFontSel;
+ __fastcall TModuleFonts(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TModuleFonts *ModuleFonts;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dof b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dof
new file mode 100644
index 0000000..e88c4fa
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dof
@@ -0,0 +1,82 @@
+[Compiler]
+A=1
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=1
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=..
+Packages=
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+[Language]
+ActiveLang=
+ProjectLang=$00000409
+RootDir=
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dpr b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dpr
new file mode 100644
index 0000000..717bdc5
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.dpr
@@ -0,0 +1,14 @@
+program ExampleUnicode;
+
+uses
+ Forms,
+ TntForms in '..\TntForms.pas' {TntForm},
+ MainFrm in 'MainFrm.pas' {MainForm};
+
+{$R *.RES}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.res b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.res
new file mode 100644
index 0000000..55f8742
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/ExampleUnicode.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.dfm b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.dfm
new file mode 100644
index 0000000..cbf1624
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.dfm
@@ -0,0 +1,137 @@
+inherited MainForm: TMainForm
+ Left = 266
+ Top = 190
+ Width = 559
+ Height = 451
+ Caption = 'MainForm'
+ OldCreateOrder = True
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Label1: TLabel
+ Left = 16
+ Top = 16
+ Width = 184
+ Height = 13
+ Caption = 'TntEdit (Data aware version available)'
+ end
+ object Label2: TLabel
+ Left = 16
+ Top = 64
+ Width = 217
+ Height = 13
+ Caption = 'TntComboBox (Data aware version available)'
+ end
+ object Label3: TLabel
+ Left = 16
+ Top = 176
+ Width = 50
+ Height = 13
+ Caption = 'TntListBox'
+ end
+ object Label4: TLabel
+ Left = 256
+ Top = 176
+ Width = 79
+ Height = 13
+ Caption = 'TntCheckListBox'
+ end
+ object Label5: TLabel
+ Left = 16
+ Top = 304
+ Width = 44
+ Height = 13
+ Caption = 'TntMemo'
+ end
+ object Label6: TLabel
+ Left = 16
+ Top = 120
+ Width = 217
+ Height = 49
+ AutoSize = False
+ Caption =
+ 'This program will fully support Unicode characters only when run' +
+ 'ning on Windows NT/2000/XP.'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clNavy
+ Font.Height = -11
+ Font.Name = 'MS Shell Dlg 2'
+ Font.Style = [fsBold]
+ ParentFont = False
+ WordWrap = True
+ end
+ object TntComboBox1: TTntComboBox
+ Left = 16
+ Top = 80
+ Width = 185
+ Height = 21
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ object TntEdit1: TTntEdit
+ Left = 16
+ Top = 32
+ Width = 185
+ Height = 21
+ TabOrder = 1
+ end
+ object TntMemo1: TTntMemo
+ Left = 16
+ Top = 320
+ Width = 481
+ Height = 89
+ TabOrder = 2
+ end
+ object TntListBox1: TTntListBox
+ Left = 16
+ Top = 192
+ Width = 225
+ Height = 97
+ ItemHeight = 13
+ TabOrder = 3
+ end
+ object TntCheckListBox1: TTntCheckListBox
+ Left = 256
+ Top = 192
+ Width = 241
+ Height = 97
+ ItemHeight = 13
+ TabOrder = 4
+ end
+ object Button1: TButton
+ Left = 256
+ Top = 8
+ Width = 241
+ Height = 25
+ Caption = 'TntEdit.Text -> Form.Caption'
+ TabOrder = 5
+ OnClick = Button1Click
+ end
+ object Button2: TButton
+ Left = 256
+ Top = 40
+ Width = 241
+ Height = 25
+ Caption = 'Add TntEdit.Text to TntComboBox.Items'
+ TabOrder = 6
+ OnClick = Button2Click
+ end
+ object Button3: TButton
+ Left = 256
+ Top = 72
+ Width = 241
+ Height = 25
+ Caption = 'Add TntEdit.Text to TntListBox.Items'
+ TabOrder = 7
+ OnClick = Button3Click
+ end
+ object Button4: TButton
+ Left = 256
+ Top = 104
+ Width = 241
+ Height = 25
+ Caption = 'Add TntEdit.Text to TntCheckListBox.Items'
+ TabOrder = 8
+ OnClick = Button4Click
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.pas
new file mode 100644
index 0000000..a4c1ef3
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/MainFrm.pas
@@ -0,0 +1,72 @@
+unit MainFrm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ TntForms, StdCtrls, CheckLst, TntStdCtrls, TntDBCtrls;
+
+type
+ TMainForm = class(TTntForm{TNT-ALLOW TTntForm})
+ TntComboBox1: TTntComboBox;
+ TntEdit1: TTntEdit;
+ TntMemo1: TTntMemo;
+ TntListBox1: TTntListBox;
+ TntCheckListBox1: TTntCheckListBox;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Button1: TButton;
+ Button2: TButton;
+ Button3: TButton;
+ Button4: TButton;
+ Label6: TLabel;
+ procedure FormCreate(Sender: TObject);
+ procedure Button1Click(Sender: TObject);
+ procedure Button2Click(Sender: TObject);
+ procedure Button3Click(Sender: TObject);
+ procedure Button4Click(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.DFM}
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ Font.Name := 'MS Shell Dlg 2'
+ else
+ Font.Name := 'MS Shell Dlg';
+end;
+
+procedure TMainForm.Button1Click(Sender: TObject);
+begin
+ Caption := TntEdit1.Text;
+end;
+
+procedure TMainForm.Button2Click(Sender: TObject);
+begin
+ TntComboBox1.Items.Add(TntEdit1.Text);
+end;
+
+procedure TMainForm.Button3Click(Sender: TObject);
+begin
+ TntListBox1.Items.Add(TntEdit1.Text);
+end;
+
+procedure TMainForm.Button4Click(Sender: TObject);
+begin
+ TntCheckListbox1.Items.Add(TntEdit1.Text);
+end;
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Readme.txt b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Readme.txt
new file mode 100644
index 0000000..79b8ae3
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Readme.txt
@@ -0,0 +1,33 @@
+ ** Tnt Delphi UNICODE Controls Project **
+
+Website: http://home.ccci.org/wolbrink/tntmpd/delphi_unicode_controls_project.htm
+Email: wolbrink@ccci.org
+
+These controls are provided as-is, with no implied warranty. They are freely available for you to use in your own projects. Please let me know if you have found them helpful. Also, please let me know if you find any bugs or other areas of needed improvement. I'm also open to those wishing to contribute to the project. Just let me know before you start to make sure no one else is working on it simultaneously.
+
+---Background----------------------------
+
+Designing software for an international audience, I've always wanted to write a full UNICODE application. My approach so far, has been to write Unicode on the inside, and MBCS on the outside. This has always been frustrating, because (even on Windows NT/2000/XP which provide native Unicode window controls) the WideStrings inside my application and databases were always confined to an ANSI VCL. And, since the VCL was designed to wrap the low-level Windows details, why shouldn't the VCL hide the fact that sometimes native Unicode controls are not possible on the given version of Windows. I believe the VCL should be written with a Unicode interface, even if it must (at times) deal with an ANSI operating system. For example, TEdit should expose Text as a WideString, even if it has to convert the WideString to an AnsiString on the Windows 9X platform.
+
+In the past, the ANSI VCL may have made a little sense, considering that there were many more users of Windows 9X, than Windows NT. There would have been some performance penalty to use WideStrings on the Windows 9X platform. But with the faster computers of today, and with more people using platforms such as Windows 2000 and Windows XP, the ANSI VCL just doesn't make sense anymore. In fact, having to use the the ANSI VCL on Windows NT/2000/XP is slower because of the constant conversion to and from UNICODE inside Windows.
+
+My coding signature is Tnt. I will use this to denote my classes from others.
+
+For more information about me: <http://home.ccci.org/wolbrink/index.htm>
+Some of my software projects (all written in Delphi).
+ TntMPD (contact manager for missionaries) <http://home.ccci.org/wolbrink/tntmpd/index.htm>
+ Jesus Film Screen Saver <http://home.ccci.org/wolbrink/screensaver.htm>
+ ActiveX SCR control <http://home.ccci.org/wolbrink/TntBin/ActiveXSCR.exe>
+
+---Design Goals----------------------------
+
+I want the controls to work on Windows 95, 98, ME, NT, 2000, XP, etc. I want a single EXE for all platforms. Of course, full UNICODE support is only truly available on NT/2000/XP. In other words, the controls should automatically scale to take advantage of native Unicode support when possible.
+
+I want the controls to inherit from the Delphi VCL. I want to reuse as much code as possible. For the most part this makes sense. The only sticky part is where text messages get passed around. But I believe I've gotten past this through strategic subclassing at various points in the message flow chain. To give a rough comparison of why this is so important, check out the following chart which compares the lines of code in the VCL for a given control (4,397 in all), and the lines of code required in my descendent controls (655 in all). Besides saving lines of code, I get the advantage of automatically inheriting new features as new versions of Delphi come out. One such example is the AlphaBlending feature in the Delphi 6 TForm. Even though I use Delphi 5 now, I won't have to add any code to get this new feature.
+
+---Credits----------------------------
+
+I found the TWideStrings and TWideStringList classes from Mike Lischke's Delphi Unicode Center very helpful. In fact, Mike's Unicode.pas file is required to compile my code. I have included a copy in my distribution with my own fixes and enhancements.
+
+---More Interesting Information----------------------------
+Case Study: Porting an MFC Application to Unicode: It looks like the FrontPage 2002 team did the roughly the same thing to MFC as what I'm doing to the VCL. They did this with the same goal in mind: to support Unicode as much as possible depending on the support offered by Windows. Another goal was "Don’t abandon MFC; don’t rewrite app". Because they still want to support Windows 9X using the same worldwide EXE used everywhere. They couldn't just compile with the _UNICODE directive. They had to start with the ANSI MFC, strategically subclassing window procedures at just the right places. Hmmm... sounds familiar. \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.hpp b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.hpp
new file mode 100644
index 0000000..de2ee10
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.hpp
@@ -0,0 +1,98 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'TntClasses.pas' rev: 5.00
+
+#ifndef TntClassesHPP
+#define TntClassesHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <Unicode.hpp> // Pascal unit
+#include <ActiveX.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysUtils.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Tntclasses
+{
+//-- type declarations -------------------------------------------------------
+struct TSearchRecW
+{
+ int Time;
+ int Size;
+ int Attr;
+ WideString Name;
+ int ExcludeAttr;
+ unsigned FindHandle;
+ _WIN32_FIND_DATAW FindData;
+} ;
+
+class DELPHICLASS TTntFileStream;
+class PASCALIMPLEMENTATION TTntFileStream : public Classes::THandleStream
+{
+ typedef Classes::THandleStream inherited;
+
+public:
+ __fastcall TTntFileStream(const WideString FileName, Word Mode);
+ __fastcall virtual ~TTntFileStream(void);
+};
+
+
+class DELPHICLASS TTntResourceStream;
+class PASCALIMPLEMENTATION TTntResourceStream : public Classes::TCustomMemoryStream
+{
+ typedef Classes::TCustomMemoryStream inherited;
+
+private:
+ HRSRC HResInfo;
+ unsigned HGlobal;
+ void __fastcall Initialize(unsigned Instance, wchar_t * Name, wchar_t * ResType);
+
+public:
+ __fastcall TTntResourceStream(unsigned Instance, const WideString ResName, wchar_t * ResType);
+ __fastcall TTntResourceStream(unsigned Instance, Word ResID, wchar_t * ResType);
+ __fastcall virtual ~TTntResourceStream(void);
+ virtual int __fastcall Write(const void *Buffer, int Count);
+};
+
+
+//-- var, const, procedure ---------------------------------------------------
+extern PACKAGE int __fastcall WidePos(const WideString Substr, const WideString S);
+extern PACKAGE unsigned __fastcall Tnt_CreateFileW(wchar_t * lpFileName, unsigned dwDesiredAccess, unsigned
+ dwShareMode, Windows::PSecurityAttributes lpSecurityAttributes, unsigned dwCreationDisposition, unsigned
+ dwFlagsAndAttributes, unsigned hTemplateFile);
+extern PACKAGE bool __fastcall Tnt_Is_IntResource(wchar_t * ResStr);
+extern PACKAGE HRSRC __fastcall Tnt_FindResourceW(Windows::HINST hModule, wchar_t * lpName, wchar_t *
+ lpType);
+extern PACKAGE unsigned __fastcall Tnt_FindFirstFileW(wchar_t * lpFileName, _WIN32_FIND_DATAW &lpFindFileData
+ );
+extern PACKAGE BOOL __fastcall Tnt_FindNextFileW(unsigned hFindFile, _WIN32_FIND_DATAW &lpFindFileData
+ );
+extern PACKAGE void __fastcall RaiseLastOSError(void);
+extern PACKAGE int __fastcall WideFileCreate(const WideString FileName);
+extern PACKAGE int __fastcall WideFileOpen(const WideString FileName, unsigned Mode);
+extern PACKAGE int __fastcall WideFindFirst(const WideString Path, int Attr, TSearchRecW &F);
+extern PACKAGE int __fastcall WideFindNext(TSearchRecW &F);
+extern PACKAGE void __fastcall WideFindClose(TSearchRecW &F);
+extern PACKAGE bool __fastcall WideDirectoryExists(const WideString Name);
+extern PACKAGE bool __fastcall WideFileExists(const WideString Name);
+extern PACKAGE unsigned __fastcall WideFileGetAttr(const WideString FileName);
+extern PACKAGE bool __fastcall WideFileSetAttr(const WideString FileName, int Attr);
+
+} /* namespace Tntclasses */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Tntclasses;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // TntClasses
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.pas
new file mode 100644
index 0000000..ab36994
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntClasses.pas
@@ -0,0 +1,384 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntClasses;
+
+{ If you want to use JCLUnicode that comes with Jedi Component Library,
+ define JCL as a "Conditional Define" in the project options. }
+
+interface
+
+{$IFDEF VER140}
+{$WARN SYMBOL_PLATFORM OFF} { We are going to use Win32 specific symbols! }
+{$ENDIF}
+
+uses Classes, SysUtils, Windows, ActiveX, {$IFDEF JCL} JclUnicode {$ELSE} Unicode {$ENDIF};
+
+{$IFDEF JCL}
+procedure JCL_WideStrings_Put(Strings: TWideStrings; Index: Integer; const S: WideString);
+procedure JCL_WideStrings_PutObject(Strings: TWideStrings; Index: Integer; AObject: TObject);
+{$ENDIF}
+
+// Tnt-System
+function WidePos(const Substr, S: Widestring): Integer;
+{TNT-WARN Pos}
+{TNT-WARN AnsiPos}
+
+
+// Tnt-Windows
+function Tnt_CreateFileW(lpFileName: PWideChar; dwDesiredAccess, dwShareMode: DWORD;
+ lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
+ hTemplateFile: THandle): THandle;
+function Tnt_Is_IntResource(ResStr: LPCWSTR): Boolean;
+function Tnt_FindResourceW(hModule: HMODULE; lpName, lpType: PWideChar): HRSRC;
+function Tnt_FindFirstFileW(lpFileName: PWideChar; var lpFindFileData: TWIN32FindDataW): THandle;
+function Tnt_FindNextFileW(hFindFile: THandle; var lpFindFileData: TWIN32FindDataW): BOOL;
+
+// Tnt-SysUtils
+{$IFDEF VER130}
+procedure RaiseLastOSError;
+{$ENDIF}
+function WideFileCreate(const FileName: WideString): Integer;
+{TNT-WARN FileCreate}
+function WideFileOpen(const FileName: WideString; Mode: LongWord): Integer;
+{TNT-WARN FileOpen}
+
+// FindFile - warning on TSearchRec is all that is necessary.
+type
+ TSearchRecW = record
+ Time: Integer;
+ Size: Integer;
+ Attr: Integer;
+ Name: WideString;
+ ExcludeAttr: Integer;
+ FindHandle: THandle;
+ FindData: TWin32FindDataW;
+ end;
+{TNT-WARN TSearchRec}
+function WideFindFirst(const Path: WideString; Attr: Integer; var F: TSearchRecW): Integer;
+function WideFindNext(var F: TSearchRecW): Integer;
+procedure WideFindClose(var F: TSearchRecW);
+
+function WideDirectoryExists(const Name: WideString): Boolean;
+{TNT-WARN DirectoryExists}
+function WideFileExists(const Name: WideString): Boolean;
+{TNT-WARN FileExists}
+function WideFileGetAttr(const FileName: WideString): Cardinal;
+{TNT-WARN FileGetAttr}
+function WideFileSetAttr(const FileName: WideString; Attr: Integer): Boolean;
+{TNT-WARN FileSetAttr}
+
+
+type
+{TNT-WARN TFileStream}
+ TTntFileStream = class(THandleStream)
+ public
+ constructor Create(const FileName: WideString; Mode: Word);
+ destructor Destroy; override;
+ end;
+
+{TNT-WARN TResourceStream}
+ TTntResourceStream = class(TCustomMemoryStream)
+ private
+ HResInfo: HRSRC;
+ HGlobal: THandle;
+ procedure Initialize(Instance: THandle; Name, ResType: PWideChar);
+ public
+ constructor Create(Instance: THandle; const ResName: WideString; ResType: PWideChar);
+ constructor CreateFromID(Instance: THandle; ResID: Word; ResType: PWideChar);
+ destructor Destroy; override;
+ function Write(const Buffer; Count: Longint): Longint; override;
+ end;
+
+implementation
+
+uses Consts, {$IFDEF VER140} RTLConsts, {$ENDIF} TypInfo;
+
+{$IFDEF JCL}
+type
+ TAccessWideStrings = class(TWideStrings);
+
+procedure JCL_WideStrings_Put(Strings: TWideStrings; Index: Integer; const S: WideString);
+var
+ TempObject: TObject;
+begin
+ with TAccessWideStrings(Strings) do begin
+ TempObject := GetObject(Index);
+ Delete(Index);
+ InsertObject(Index, S, TempObject);
+ end;
+end;
+
+procedure JCL_WideStrings_PutObject(Strings: TWideStrings; Index: Integer; AObject: TObject);
+begin
+end;
+{$ENDIF}
+
+function WidePos(const Substr, S: Widestring): Integer;
+begin
+ result := Pos{TNT-ALLOW Pos}(SubStr, S);
+end;
+
+function Tnt_CreateFileW(lpFileName: PWideChar; dwDesiredAccess, dwShareMode: DWORD;
+ lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
+ hTemplateFile: THandle): THandle;
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ Result := CreateFileW(lpFileName, dwDesiredAccess, dwShareMode,
+ lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)
+ else
+ Result := CreateFileA(PAnsiChar(AnsiString(lpFileName)), dwDesiredAccess, dwShareMode,
+ lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)
+end;
+
+function Tnt_Is_IntResource(ResStr: LPCWSTR): Boolean;
+begin
+ result := HiWord(Cardinal(ResStr)) = 0;
+end;
+
+function Tnt_FindResourceW(hModule: HMODULE; lpName, lpType: PWideChar): HRSRC;
+var
+ Ansi_Name, Ansi_Type: PAnsiChar;
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ Result := FindResourceW(hModule, lpName, lpType)
+ else begin
+ // Thunk Name
+ if Tnt_Is_IntResource(lpName) then
+ Ansi_Name := PAnsiChar(lpName)
+ else
+ Ansi_Name := PAnsiChar(AnsiString(lpName));
+ // Thunk Type
+ if Tnt_Is_IntResource(lpType) then
+ Ansi_Type := PAnsiChar(lpType)
+ else
+ Ansi_Type := PAnsiChar(AnsiString(lpType));
+ // Ansi version
+ Result := FindResourceA(hModule, Ansi_Name, Ansi_Type);
+ end;
+end;
+
+procedure GetWin32FindDataW(var WideFindData: TWIN32FindDataW; AnsiFindData: TWIN32FindDataA);
+begin
+ CopyMemory(@WideFindData, @AnsiFindData,
+ Integer(@WideFindData.cFileName) - Integer(@WideFindData));
+ StrPCopyW(WideFindData.cFileName, AnsiFindData.cFileName);
+ StrPCopyW(WideFindData.cAlternateFileName, AnsiFindData.cAlternateFileName);
+end;
+
+function Tnt_FindFirstFileW(lpFileName: PWideChar; var lpFindFileData: TWIN32FindDataW): THandle;
+var
+ Ansi_lpFindFileData: TWIN32FindDataA;
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ result := FindFirstFileW(lpFileName, lpFindFileData)
+ else begin
+ result := FindFirstFileA(PAnsiChar(AnsiString(lpFileName)), Ansi_lpFindFileData);
+ if result <> INVALID_HANDLE_VALUE then
+ GetWin32FindDataW(lpFindFileData, Ansi_lpFindFileData);
+ end;
+end;
+
+function Tnt_FindNextFileW(hFindFile: THandle; var lpFindFileData: TWIN32FindDataW): BOOL;
+var
+ Ansi_lpFindFileData: TWIN32FindDataA;
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ result := FindNextFileW(hFindFile, lpFindFileData)
+ else begin
+ result := FindNextFileA(hFindFile, Ansi_lpFindFileData);
+ if result then
+ GetWin32FindDataW(lpFindFileData, Ansi_lpFindFileData);
+ end;
+end;
+
+{$IFDEF VER130}
+procedure RaiseLastOSError;
+begin
+ RaiseLastWin32Error;
+end;
+{$ENDIF}
+
+function WideFileCreate(const FileName: WideString): Integer;
+begin
+ Result := Integer(Tnt_CreateFileW(PWideChar(FileName), GENERIC_READ or GENERIC_WRITE,
+ 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0))
+end;
+
+function WideFileOpen(const FileName: WideString; Mode: LongWord): Integer;
+const
+ AccessMode: array[0..2] of LongWord = (
+ GENERIC_READ,
+ GENERIC_WRITE,
+ GENERIC_READ or GENERIC_WRITE);
+ ShareMode: array[0..4] of LongWord = (
+ 0,
+ 0,
+ FILE_SHARE_READ,
+ FILE_SHARE_WRITE,
+ FILE_SHARE_READ or FILE_SHARE_WRITE);
+begin
+ Result := Integer(Tnt_CreateFileW(PWideChar(FileName), AccessMode[Mode and 3],
+ ShareMode[(Mode and $F0) shr 4], nil, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, 0));
+end;
+
+function WideFindMatchingFile(var F: TSearchRecW): Integer;
+var
+ LocalFileTime: TFileTime;
+begin
+ with F do
+ begin
+ while FindData.dwFileAttributes and ExcludeAttr <> 0 do
+ if not Tnt_FindNextFileW(FindHandle, FindData) then
+ begin
+ Result := GetLastError;
+ Exit;
+ end;
+ FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
+ FileTimeToDosDateTime(LocalFileTime, LongRec(Time).Hi, LongRec(Time).Lo);
+ Size := FindData.nFileSizeLow;
+ Attr := FindData.dwFileAttributes;
+ Name := FindData.cFileName;
+ end;
+ Result := 0;
+end;
+
+function WideFindFirst(const Path: WideString; Attr: Integer; var F: TSearchRecW): Integer;
+const
+ faSpecial = faHidden or faSysFile or faVolumeID or faDirectory;
+begin
+ F.ExcludeAttr := not Attr and faSpecial;
+ F.FindHandle := Tnt_FindFirstFileW(PWideChar(Path), F.FindData);
+ if F.FindHandle <> INVALID_HANDLE_VALUE then
+ begin
+ Result := WideFindMatchingFile(F);
+ if Result <> 0 then WideFindClose(F);
+ end else
+ Result := GetLastError;
+end;
+
+function WideFindNext(var F: TSearchRecW): Integer;
+begin
+ if Tnt_FindNextFileW(F.FindHandle, F.FindData) then
+ Result := WideFindMatchingFile(F) else
+ Result := GetLastError;
+end;
+
+procedure WideFindClose(var F: TSearchRecW);
+begin
+ if F.FindHandle <> INVALID_HANDLE_VALUE then
+ begin
+ Windows.FindClose(F.FindHandle);
+ F.FindHandle := INVALID_HANDLE_VALUE;
+ end;
+end;
+
+function WideDirectoryExists(const Name: WideString): Boolean;
+var
+ Code: Cardinal;
+begin
+ Code := WideFileGetAttr(Name);
+ Result := (Integer(Code) <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
+end;
+
+function WideFileExists(const Name: WideString): Boolean;
+var
+ Code: Cardinal;
+begin
+ Code := WideFileGetAttr(Name);
+ Result := (Integer(Code) <> -1) and ((FILE_ATTRIBUTE_DIRECTORY and Code) = 0);
+end;
+
+function WideFileGetAttr(const FileName: WideString): Cardinal;
+begin
+ if Win32Platform <> VER_PLATFORM_WIN32_NT then
+ Result := GetFileAttributesA(PAnsiChar(AnsiString(FileName)))
+ else
+ Result := GetFileAttributesW(PWideChar(FileName));
+end;
+
+function WideFileSetAttr(const FileName: WideString; Attr: Integer): Boolean;
+begin
+ if Win32Platform <> VER_PLATFORM_WIN32_NT then
+ Result := SetFileAttributesA(PAnsiChar(AnsiString(FileName)), Attr)
+ else
+ Result := SetFileAttributesW(PWideChar(FileName), Attr);
+end;
+
+{ TTntFileStream }
+
+constructor TTntFileStream.Create(const FileName: WideString; Mode: Word);
+var
+ CreateHandle: Integer;
+begin
+ if Mode = fmCreate then
+ begin
+ CreateHandle := WideFileCreate(FileName);
+ if CreateHandle < 0 then
+ raise EFCreateError.CreateResFmt(PResStringRec(@SFCreateError), [FileName]);
+ end else
+ begin
+ CreateHandle := WideFileOpen(FileName, Mode);
+ if CreateHandle < 0 then
+ raise EFOpenError.CreateResFmt(PResStringRec(@SFOpenError), [FileName]);
+ end;
+ inherited Create(CreateHandle);
+end;
+
+destructor TTntFileStream.Destroy;
+begin
+ if Handle >= 0 then FileClose(Handle);
+end;
+
+{ TTntResourceStream }
+
+constructor TTntResourceStream.Create(Instance: THandle; const ResName: WideString;
+ ResType: PWideChar);
+begin
+ inherited Create;
+ Initialize(Instance, PWideChar(ResName), ResType);
+end;
+
+constructor TTntResourceStream.CreateFromID(Instance: THandle; ResID: Word;
+ ResType: PWideChar);
+begin
+ inherited Create;
+ Initialize(Instance, PWideChar(ResID), ResType);
+end;
+
+procedure TTntResourceStream.Initialize(Instance: THandle; Name, ResType: PWideChar);
+
+ procedure Error;
+ begin
+ raise EResNotFound.CreateFmt(SResNotFound, [Name]);
+ end;
+
+begin
+ HResInfo := Tnt_FindResourceW(Instance, Name, ResType);
+ if HResInfo = 0 then Error;
+ HGlobal := LoadResource(Instance, HResInfo);
+ if HGlobal = 0 then Error;
+ SetPointer(LockResource(HGlobal), SizeOfResource(Instance, HResInfo));
+end;
+
+destructor TTntResourceStream.Destroy;
+begin
+ UnlockResource(HGlobal);
+ FreeResource(HGlobal);
+ inherited Destroy;
+end;
+
+function TTntResourceStream.Write(const Buffer; Count: Longint): Longint;
+begin
+ raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError));
+end;
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.dcr b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.dcr
new file mode 100644
index 0000000..043d41f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.dcr
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.pas
new file mode 100644
index 0000000..a1b25d6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntComCtrls.pas
@@ -0,0 +1,19 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntComCtrls;
+
+interface
+
+implementation
+
+{$R *.dcr}
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.hpp b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.hpp
new file mode 100644
index 0000000..b428869
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.hpp
@@ -0,0 +1,54 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'TntControls.pas' rev: 5.00
+
+#ifndef TntControlsHPP
+#define TntControlsHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <TntClasses.hpp> // Pascal unit
+#include <TntForms.hpp> // Pascal unit
+#include <Forms.hpp> // Pascal unit
+#include <Controls.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <Messages.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Tntcontrols
+{
+//-- type declarations -------------------------------------------------------
+//-- var, const, procedure ---------------------------------------------------
+#define UNICODE_CLASS_EXT ".UnicodeClass"
+extern PACKAGE bool __fastcall IsTextMessage(unsigned Msg);
+extern PACKAGE void __fastcall MakeWMCharMsgSafeForAnsi(Messages::TMessage &Message);
+extern PACKAGE void __fastcall RestoreWMCharMsg(Messages::TMessage &Message);
+extern PACKAGE wchar_t __fastcall GetWideCharFromWMCharMsg(const Messages::TWMKey &Message);
+extern PACKAGE void __fastcall SetWideCharForWMCharMsg(Messages::TWMKey &Message, wchar_t Ch);
+extern PACKAGE bool __fastcall HandleIMEComposition(unsigned hWnd, const Messages::TMessage &Message
+ );
+extern PACKAGE void __fastcall SubClassUnicodeControl(Controls::TWinControl* Control);
+extern PACKAGE void __fastcall CreateUnicodeHandle(Controls::TWinControl* Control, const Controls::TCreateParams
+ &Params, const WideString SubClass);
+extern PACKAGE WideString __fastcall WideGetWindowText(Controls::TWinControl* Control);
+extern PACKAGE void __fastcall WideSetWindowText(Controls::TWinControl* Control, const WideString Text
+ );
+extern PACKAGE WideString __fastcall TntAdjustLineBreaks(const WideString S);
+
+} /* namespace Tntcontrols */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Tntcontrols;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // TntControls
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.pas
new file mode 100644
index 0000000..9ae2017
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntControls.pas
@@ -0,0 +1,482 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntControls;
+
+{
+ Windows NT provides support for native Unicode windows. To add Unicode support to a
+ TWinControl descendant, override CreateWindowHandle() and call CreateUnicodeHandle().
+
+ One major reason this works is because the VCL only uses the ANSI version of
+ SendMessage() -- SendMessageA(). If you call SendMessageA() on a UNICODE
+ window, Windows deals with the ANSI/UNICODE conversion automatically. So
+ for example, if the VCL sends WM_SETTEXT to a window using SendMessageA,
+ Windows actually *expects* a PAnsiChar even if the target window is a UNICODE
+ window. So caling SendMessageA with PChars causes no problems.
+
+ A problem in the VCL has to do with the TControl.Perform() method. Perform()
+ calls the window procedure directly and assumes an ANSI window. This is a
+ problem if, for example, the VCL calls Perform(WM_SETTEXT, ...) passing in a
+ PAnsiChar which eventually gets passed downto DefWindowProcW() which expects a PWideChar.
+
+ This is the reason for SubClassUnicodeControl(). This procedure will subclass the
+ Windows WndProc, and the TWinControl.WindowProc pointer. It will determine if the
+ message came from Windows or if the WindowProc was called directly. It will then
+ call SendMessageA() for Windows to perorm proper conversion on certain text messages.
+
+ Another problem has to do with TWinControl.DoKeyPress(). It is called from the WM_CHAR
+ message. It casts the WideChar to an AnsiChar, and sends the resulting character to
+ DefWindowProc. In order to avoid this, the DefWindowProc is subclasses as well. WindowProc
+ will make a WM_CHAR message safe for ANSI handling code by converting the char code to
+ #FF before passing it on. It stores the original WideChar in the .Unused field of TWMChar.
+ The code #FF is converted back to the WideChar before passing onto DefWindowProc.
+}
+
+interface
+
+uses Windows, Messages, Classes, Controls, Forms, TntForms, TntClasses;
+
+const
+ UNICODE_CLASS_EXT = '.UnicodeClass';
+
+function IsTextMessage(Msg: UINT): Boolean;
+procedure MakeWMCharMsgSafeForAnsi(var Message: TMessage);
+procedure RestoreWMCharMsg(var Message: TMessage);
+function GetWideCharFromWMCharMsg(Message: TWMChar): WideChar;
+procedure SetWideCharForWMCharMsg(var Message: TWMChar; Ch: WideChar);
+function HandleIMEComposition(hWnd: THandle; Message: TMessage): Boolean;
+
+procedure SubClassUnicodeControl(Control: TWinControl);
+procedure CreateUnicodeHandle(Control: TWinControl; const Params: TCreateParams;
+ const SubClass: WideString);
+
+function WideGetWindowText(Control: TWinControl): WideString;
+procedure WideSetWindowText(Control: TWinControl; const Text: WideString);
+
+function TntAdjustLineBreaks(const S: WideString): WideString;
+
+implementation
+
+uses SysUtils, Graphics, Imm;
+
+procedure DestroyUnicodeHandle(Control: TWinControl); forward;
+
+function IsTextMessage(Msg: UINT): Boolean;
+begin
+ // WM_CHAR is omitted because of the special handling it receives
+ result := (Msg = WM_SETTEXT)
+ or (Msg = WM_GETTEXT)
+ or (Msg = WM_GETTEXTLENGTH);
+end;
+
+const
+ ANSI_UNICODE_HOLDER = $FF;
+
+procedure MakeWMCharMsgSafeForAnsi(var Message: TMessage);
+begin
+ with TWMChar(Message) do begin
+ Assert(Msg = WM_CHAR);
+ Assert(Unused = 0);
+ if (CharCode > Word(High(AnsiChar))) then begin
+ Unused := CharCode;
+ CharCode := ANSI_UNICODE_HOLDER;
+ end;
+ end;
+end;
+
+procedure RestoreWMCharMsg(var Message: TMessage);
+begin
+ with TWMChar(Message) do begin
+ Assert(Message.Msg = WM_CHAR);
+ if (Unused > 0)
+ and (CharCode = ANSI_UNICODE_HOLDER) then
+ CharCode := Unused;
+ Unused := 0;
+ end;
+end;
+
+function GetWideCharFromWMCharMsg(Message: TWMChar): WideChar;
+begin
+ if (Message.CharCode = ANSI_UNICODE_HOLDER)
+ and (Message.Unused <> 0) then
+ result := WideChar(Message.Unused)
+ else
+ result := WideChar(Message.CharCode);
+end;
+
+procedure SetWideCharForWMCharMsg(var Message: TWMChar; Ch: WideChar);
+begin
+ Message.CharCode := Word(Ch);
+ Message.Unused := 0;
+ MakeWMCharMsgSafeForAnsi(TMessage(Message));
+end;
+
+function HandleIMEComposition(hWnd: THandle; Message: TMessage): Boolean;
+var
+ IMC: HIMC;
+ Buff: WideString;
+ i: integer;
+begin
+ Result := False;
+ if (Win32Platform = VER_PLATFORM_WIN32_NT)
+ and (Message.Msg = WM_IME_COMPOSITION)
+ and ((Message.lParam and GCS_RESULTSTR) <> 0) then
+ begin
+ IMC := ImmGetContext(hWnd);
+ if IMC <> 0 then begin
+ try
+ Result := True;
+ // Get the result string
+ SetLength(Buff, ImmGetCompositionStringW(IMC, GCS_RESULTSTR, nil, 0) div SizeOf(WideChar));
+ ImmGetCompositionStringW(IMC, GCS_RESULTSTR, PWideChar(Buff), Length(Buff) * SizeOf(WideChar));
+ finally
+ ImmReleaseContext(hWnd, IMC);
+ end;
+ // send WM_CHAR messages for each char in string
+ for i := 1 to Length(Buff) do begin
+ SendMessageW(hWnd, WM_CHAR, Integer(Buff[i]), 0);
+ end;
+ end;
+ end;
+end;
+
+//-----------------------------------------------------------------------------------
+type
+ TWinControlTrap = class
+ private
+ ObjectInstance: Pointer;
+ DefObjectInstance: Pointer;
+ FControl: TWinControl;
+ Handle: THandle;
+ PrevWin32Proc: Pointer;
+ PrevDefWin32Proc: Pointer;
+ PrevWindowProc: TWndMethod;
+ LastWin32Msg: UINT;
+ procedure Win32Proc(var Message: TMessage);
+ procedure DefWin32Proc(var Message: TMessage);
+ procedure WindowProc(var Message: TMessage);
+ procedure HandleWMDestroy(var Message: TMessage);
+ end;
+
+procedure TWinControlTrap.HandleWMDestroy(var Message: TMessage);
+var
+ ThisPrevWin32Proc: Pointer;
+ ThisHandle: THandle;
+begin
+ with Message do begin
+ Assert(Msg = WM_DESTROY);
+ // store local copies of values, since this object is about to be freed
+ ThisPrevWin32Proc := PrevWin32Proc;
+ ThisHandle := Handle;
+
+ // handle destruction
+ DestroyUnicodeHandle(FControl);
+
+ // pass on the WM_DESTROY message
+ Result := CallWindowProc(ThisPrevWin32Proc, ThisHandle, Msg, wParam, lParam);
+ end;
+end;
+
+procedure TWinControlTrap.Win32Proc(var Message: TMessage);
+begin
+ with Message do begin
+ if Msg = WM_DESTROY then begin
+ HandleWMDestroy(Message);
+ exit; { Do not access any data in object. Object is freed. }
+ end;
+ if not HandleIMEComposition(Handle, Message) then begin
+ LastWin32Msg := Msg;
+ Result := CallWindowProcW(PrevWin32Proc, Handle, Msg, wParam, lParam);
+ end;
+ end;
+end;
+
+procedure TWinControlTrap.DefWin32Proc(var Message: TMessage);
+begin
+ with Message do begin
+ if (Msg = WM_CHAR) then begin
+ RestoreWMCharMsg(Message)
+ end;
+ Result := CallWindowProcW(PrevDefWin32Proc, Handle, Msg, wParam, lParam);
+ end;
+end;
+
+procedure TWinControlTrap.WindowProc(var Message: TMessage);
+var
+ CameFromWindows: Boolean;
+begin
+ CameFromWindows := LastWin32Msg <> WM_NULL;
+ LastWin32Msg := WM_NULL;
+ with Message do begin
+ if (not CameFromWindows)
+ and (IsTextMessage(Msg)) then
+ Result := SendMessageA(Handle, Msg, wParam, lParam)
+ else begin
+ if (Msg = WM_CHAR) then begin
+ MakeWMCharMsgSafeForAnsi(Message);
+ end;
+ PrevWindowProc(Message)
+ end;
+ end;
+end;
+
+{$IFDEF VER140}
+function MakeObjectInstance(Method: TWndMethod): Pointer;
+begin
+ Result := Classes.MakeObjectInstance(Method);
+end;
+procedure FreeObjectInstance(ObjectInstance: Pointer);
+begin
+ Classes.FreeObjectInstance(ObjectInstance);
+end;
+{$ENDIF}
+
+//----------------------------------------------------------------------------------
+var
+ WinControlTrap_Atom: TAtom = 0;
+
+type TAccessWinControl = class(TWinControl);
+
+procedure SubClassUnicodeControl(Control: TWinControl);
+var
+ WinControlTrap: TWinControlTrap;
+begin
+ if IsWindowUnicode(Control.Handle) then begin
+ // create trap object, save reference
+ WinControlTrap := TWinControlTrap.Create;
+ SetProp(Control.Handle, MakeIntAtom(WinControlTrap_Atom), Cardinal(WinControlTrap));
+
+ with WinControlTrap do begin
+ // initialize trap object
+ FControl := Control;
+ Handle := Control.Handle;
+ PrevWin32Proc := Pointer(GetWindowLong(Control.Handle, GWL_WNDPROC));
+ PrevDefWin32Proc := TAccessWinControl(Control).DefWndProc;
+ PrevWindowProc := Control.WindowProc;
+
+ // subclass Window Procedures
+ ObjectInstance := MakeObjectInstance(Win32Proc);
+ SetWindowLongW(Control.Handle, GWL_WNDPROC, Integer(ObjectInstance));
+ DefObjectInstance := MakeObjectInstance(DefWin32Proc);
+ TAccessWinControl(Control).DefWndProc := DefObjectInstance;
+ Control.WindowProc := WindowProc;
+ end;
+ end;
+end;
+
+procedure UnSubClassUnicodeControl(Control: TWinControl);
+var
+ WinControlTrap: TWinControlTrap;
+begin
+ if IsWindowUnicode(Control.Handle) then begin
+ // get referenct to trap object
+ WinControlTrap := TWinControlTrap(GetProp(Control.Handle, MakeIntAtom(WinControlTrap_Atom)));
+ RemoveProp(Control.Handle, MakeIntAtom(WinControlTrap_Atom));
+
+ with WinControlTrap do begin
+ // restore window procs
+ Control.WindowProc := PrevWindowProc;
+ TAccessWinControl(Control).DefWndProc := PrevDefWin32Proc;
+ SetWindowLongW(Control.Handle, GWL_WNDPROC, Integer(PrevWin32Proc));
+ FreeObjectInstance(ObjectInstance);
+ FreeObjectInstance(DefObjectInstance);
+
+ // free trap object
+ Free;
+ end;
+ end;
+end;
+
+//----------------------------------------------- CREATE/DESTROY UNICODE HANDLE
+type
+ TWideCaptionHolder = class(TComponent)
+ private
+ WideCaption: WideString;
+ end;
+
+function FindWideCaptionHolder(Control: TWinControl; Default: WideString = ''): TWideCaptionHolder;
+var
+ i: integer;
+begin
+ result := nil;
+ for i := 0 to Control.ComponentCount - 1 do begin
+ if (Control.Components[i] is TWideCaptionHolder) then begin
+ result := TWideCaptionHolder(Control.Components[i]);
+ exit; // found it!
+ end;
+ end;
+ if result = nil then begin
+ result := TWideCaptionHolder.Create(Control);
+ result.WideCaption := Default;
+ end;
+end;
+
+procedure CreateUnicodeHandle(Control: TWinControl; const Params: TCreateParams;
+ const SubClass: WideString);
+var
+ WideSubClass: TWndClassW;
+ WideWinClassName: WideString;
+ WideClass: TWndClassW;
+ TempClass: TWndClassW;
+ Handle: THandle;
+begin
+ if Win32Platform <> VER_PLATFORM_WIN32_NT then begin
+ with Params do
+ TAccessWinControl(Control).WindowHandle := CreateWindowEx(ExStyle, WinClassName,
+ Caption, Style, X, Y, Width, Height, WndParent, 0, WindowClass.hInstance, Param);
+ end else begin
+ // SubClass the unicode version of this control by getting the correct DefWndProc
+ if SubClass <> '' then begin
+ GetClassInfoW(hInstance, PWideChar(SubClass), WideSubClass);
+ TAccessWinControl(Control).DefWndProc := WideSubClass.lpfnWndProc;
+ end else
+ TAccessWinControl(Control).DefWndProc := @DefWindowProcW;
+
+ with Params do begin
+ WideWinClassName := WinClassName + UNICODE_CLASS_EXT;
+ if not GetClassInfoW(Params.WindowClass.hInstance, PWideChar(WideWinClassName), TempClass)
+ then begin
+ // Prepare a TWndClassW record
+ WideClass := TWndClassW(WindowClass);
+ if not Tnt_Is_IntResource(PWideChar(WindowClass.lpszMenuName)) then begin
+ WideClass.lpszMenuName := PWideChar(WideString(WindowClass.lpszMenuName));
+ end;
+ WideClass.lpszClassName := PWideChar(WideWinClassName);
+
+ // Register the UNICODE class
+ if RegisterClassW(WideClass) = 0 then RaiseLastOSError;
+ end;
+
+ // Create UNICODE window
+ Handle := CreateWindowExW(ExStyle, PWideChar(WideWinClassName), nil,
+ Style, X, Y, Width, Height, WndParent, 0, WindowClass.hInstance, Param);
+
+ // SetWindowLongW needs to be called because InitWndProc converts control to ANSI
+ // CallingSetWindowLongA(.., GWL_WNDPROC) makes Windows think it is an ANSI window
+ // But CallingSetWindowLongW(.., GWL_WNDPROC) make Windows think it is a UNICODE window.
+ SetWindowLongW(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_WNDPROC));
+
+ // set handle for control
+ TAccessWinControl(Control).WindowHandle := Handle;
+
+ // sub-class
+ SubClassUnicodeControl(Control);
+
+ // For some reason, caption gets garbled after calling SetWindowLongW(.., GWL_WNDPROC).
+ WideSetWindowText(Control, FindWideCaptionHolder(Control, Caption).WideCaption);
+ end;
+ end;
+end;
+
+procedure DestroyUnicodeHandle(Control: TWinControl);
+begin
+ if Win32Platform = VER_PLATFORM_WIN32_NT then begin
+ // remember caption for future window creation
+ if not (csDestroying in Control.ComponentState) then
+ FindWideCaptionHolder(Control).WideCaption := WideGetWindowText(Control);
+ // un sub-class
+ UnSubClassUnicodeControl(Control);
+ end;
+end;
+
+//----------------------------------------------- GET/SET WINDOW TEXT
+
+function WideGetWindowText(Control: TWinControl): WideString;
+begin
+ if (not Control.HandleAllocated)
+ or (not IsWindowUnicode(Control.Handle)) then begin
+ // NO HANDLE -OR- NOT UNICODE
+ result := TAccessWinControl(Control).Text;
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ result := FindWideCaptionHolder(Control, result).WideCaption
+ end else begin
+ // UNICODE & HANDLE
+ SetLength(Result, GetWindowTextLengthW(Control.Handle) + 1);
+ GetWindowTextW(Control.Handle, PWideChar(Result), Length(Result));
+ SetLength(Result, Length(Result) - 1);
+ end;
+end;
+
+procedure WideSetWindowText(Control: TWinControl; const Text: WideString);
+begin
+ if (not Control.HandleAllocated)
+ or (not IsWindowUnicode(Control.Handle)) then begin
+ // NO HANDLE -OR- NOT UNICODE
+ TAccessWinControl(Control).Text := Text;
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ FindWideCaptionHolder(Control).WideCaption := Text;
+ end else if WideGetWindowText(Control) <> Text then begin
+ // UNICODE & HANDLE
+ SetWindowTextW(Control.Handle, PWideChar(Text));
+ Control.Perform(CM_TEXTCHANGED, 0, 0);
+ end;
+end;
+
+function TntAdjustLineBreaks(const S: WideString): WideString;
+var
+ Source, SourceEnd, Dest: PWideChar;
+ Extra: Integer;
+begin
+ Source := Pointer(S);
+ SourceEnd := Source + Length(S);
+ Extra := 0;
+ while Source < SourceEnd do
+ begin
+ case Source^ of
+ #10:
+ Inc(Extra);
+ #13:
+ if Source[1] = #10 then Inc(Source) else Inc(Extra);
+ end;
+ Inc(Source);
+ end;
+ if Extra = 0 then Result := S else
+ begin
+ Source := Pointer(S);
+ SetString(Result, nil, SourceEnd - Source + Extra);
+ Dest := Pointer(Result);
+ while Source < SourceEnd do
+ case Source^ of
+ #10:
+ begin
+ Dest^ := #13;
+ Inc(Dest);
+ Dest^ := #10;
+ Inc(Dest);
+ Inc(Source);
+ end;
+ #13:
+ begin
+ Dest^ := #13;
+ Inc(Dest);
+ Dest^ := #10;
+ Inc(Dest);
+ Inc(Source);
+ if Source^ = #10 then Inc(Source);
+ end;
+ else
+ Dest^ := Source^;
+ Inc(Dest);
+ Inc(Source);
+ end;
+ end;
+end;
+
+var
+ AtomText: array[0..127] of AnsiChar;
+
+initialization
+ WinControlTrap_Atom := GlobalAddAtom(StrFmt(AtomText, 'WinControlTrap.UnicodeClass.%d',
+ [GetCurrentProcessID]));
+
+finalization
+ GlobalDeleteAtom(WinControlTrap_Atom);
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.dcr b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.dcr
new file mode 100644
index 0000000..8328db4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.dcr
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.pas
new file mode 100644
index 0000000..96f4b19
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntDBCtrls.pas
@@ -0,0 +1,545 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntDBCtrls;
+
+{ If you want to use JCLUnicode that comes with Jedi Component Library,
+ define JCL as a "Conditional Define" in the project options. }
+
+interface
+
+uses Classes, Windows, Messages, DB, DBCtrls, TntStdCtrls, Controls, TntControls,
+{$IFDEF JCL} JclUnicode{$ELSE} Unicode {$ENDIF};
+
+type
+{TNT-WARN TDBEdit}
+ TTntDBEdit = class(TDBEdit{TNT-ALLOW TDBEdit})
+ private
+ FDataLinkModified: Boolean;
+ FAlignment: TAlignment;
+ FFocused: Boolean;
+ FDataLink: TFieldDataLink;
+ InheritedDataChange: TNotifyEvent;
+ procedure DataChange(Sender: TObject);
+ procedure EditingChange(Sender: TObject);
+ procedure UpdateData(Sender: TObject);
+ procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
+ procedure CMExit(var Message: TCMExit); message CM_EXIT;
+ procedure SetReadOnly;
+ private
+ function GetSelText: WideString; reintroduce;
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ protected
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ procedure Change; override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ end;
+
+{TNT-WARN TDBComboBox}
+ TTntCustomDBComboBox = class(TDBComboBox{TNT-ALLOW TDBComboBox}, ITntComboBox)
+ private
+ FDataLink: TFieldDataLink;
+ procedure UpdateData(Sender: TObject);
+ procedure EditingChange(Sender: TObject);
+ procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
+ procedure SetReadOnly;
+ private
+ FItems: TWideStrings;
+ function GetItems: TWideStrings;
+ procedure SetItems(const Value: TWideStrings); reintroduce;
+ function GetSelLength: Integer;
+ procedure SetSelLength(Value: Integer);
+ function GetSelStart: Integer;
+ procedure SetSelStart(Value: Integer);
+ function GetSelText: WideString;
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ function GetItemIndex: Integer; reintroduce;
+ procedure SetItemIndex(const Value: Integer); reintroduce;
+
+ procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
+ protected
+ procedure DataChange(Sender: TObject);
+ procedure DoEditCharMsg(var Message: TWMChar); virtual;
+ function GetComboValue: Variant; virtual; abstract;
+ procedure SetComboValue(const Value: Variant); virtual; abstract;
+ protected
+ procedure CreateWnd; override;
+ procedure WndProc(var Message: TMessage); override;
+ procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
+ ComboProc: Pointer); override;
+ procedure KeyPress(var Key: AnsiChar); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ public
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ property Items: TWideStrings read GetItems write SetItems;
+ end;
+
+ TTntDBComboBox = class(TTntCustomDBComboBox)
+ protected
+ function GetComboValue: Variant; override;
+ procedure SetComboValue(const Value: Variant); override;
+ end;
+
+function GetAsWideString(Field: TField): WideString;
+procedure SetAsWideString(Field: TField; const Value: WideString);
+
+type
+{TNT-WARN TDBCheckBox}
+ TTntDBCheckBox = class(TDBCheckBox{TNT-ALLOW TDBCheckBox})
+ protected
+ procedure Toggle; override;
+ end;
+
+procedure Register;
+
+implementation
+
+uses SysUtils, Forms, {$IFDEF VER140} Variants, {$ENDIF} StdCtrls;
+
+{$R *.dcr}
+
+procedure Register;
+begin
+ RegisterComponents('Tnt', [TTntDBEdit, TTntDBComboBox, TTntDBCheckBox]);
+end;
+
+function GetAsWideString(Field: TField): WideString;
+begin
+ if Field is TWideStringField then
+ result := TWideStringField(Field).Value
+ else
+ result := Field.AsString{TNT-ALLOW AsString};
+end;
+
+procedure SetAsWideString(Field: TField; const Value: WideString);
+begin
+ if Field is TWideStringField then
+ TWideStringField(Field).Value := Value
+ else
+ Field.AsString{TNT-ALLOW AsString} := Value;
+end;
+
+
+{ TTntDBEdit }
+
+constructor TTntDBEdit.Create(AOwner: TComponent);
+begin
+ inherited;
+ FDataLink := TDataLink(Perform(CM_GETDATALINK, 0, 0)) as TFieldDataLink;
+
+ InheritedDataChange := FDataLink.OnDataChange;
+
+ FDataLink.OnDataChange := DataChange;
+ FDataLink.OnEditingChange := EditingChange;
+ FDataLink.OnUpdateData := UpdateData;
+end;
+
+destructor TTntDBEdit.Destroy;
+begin
+ FDataLink := nil;
+ inherited;
+end;
+
+procedure TTntDBEdit.CreateWindowHandle(const Params: TCreateParams);
+begin
+ CreateUnicodeHandle(Self, Params, 'EDIT');
+end;
+
+function TTntDBEdit.GetSelText: WideString;
+begin
+ if (not IsWindowUnicode(Handle)) then
+ Result := inherited SelText
+ else
+ Result := Copy(Text, SelStart + 1, SelLength);
+end;
+
+procedure TTntDBEdit.SetSelText(const Value: WideString);
+begin
+ if (not IsWindowUnicode(Handle)) then
+ inherited SelText := Value
+ else
+ SendMessageW(Handle, EM_REPLACESEL, 0, Longint(PWideChar(Value)));
+end;
+
+function TTntDBEdit.GetText: WideString;
+begin
+ result := WideGetWindowText(Self);
+end;
+
+procedure TTntDBEdit.SetText(const Value: WideString);
+begin
+ WideSetWindowText(Self, Value);
+end;
+
+procedure TTntDBEdit.Change;
+begin
+ FDataLinkModified := True;
+ inherited;
+end;
+
+procedure TTntDBEdit.CMEnter(var Message: TCMEnter);
+begin
+ FFocused := True;
+ inherited;
+ SetReadOnly;
+end;
+
+procedure TTntDBEdit.CMExit(var Message: TCMExit);
+begin
+ inherited;
+ FFocused := False;
+end;
+
+procedure TTntDBEdit.DataChange(Sender: TObject);
+begin
+ if FDataLink.Field <> nil then
+ begin
+ InheritedDataChange(Sender); // properly sets FAlignment
+ if FAlignment <> FDataLink.Field.Alignment then
+ begin
+ EditText := ''; {forces update}
+ FAlignment := FDataLink.Field.Alignment;
+ end;
+ EditMask := FDataLink.Field.EditMask;
+ if not (csDesigning in ComponentState) then
+ begin
+ if (FDataLink.Field.DataType in [ftString, ftWideString]) and (MaxLength = 0) then
+ MaxLength := FDataLink.Field.Size;
+ end;
+ if FFocused and FDataLink.CanModify then
+ Text := GetAsWideString(FDataLink.Field)
+ else
+ begin
+ if (FDataLink.Field is TNumericField) then
+ Text := FDataLink.Field.DisplayText
+ else
+ Text := GetAsWideString(FDataLink.Field);
+ CheckCursor;
+ if FDataLink.Editing and FDataLinkModified then
+ Modified := True;
+ end;
+ end else
+ begin
+ FAlignment := taLeftJustify;
+ InheritedDataChange(Sender);
+ end;
+ FDataLinkModified := False;
+end;
+
+procedure TTntDBEdit.SetReadOnly;
+begin
+ if HandleAllocated then
+ SendMessage(Handle, EM_SETREADONLY, Ord(not FDataLink.CanModify), 0);
+end;
+
+procedure TTntDBEdit.EditingChange(Sender: TObject);
+begin
+ FDataLinkModified := False;
+ SetReadOnly;
+end;
+
+procedure TTntDBEdit.UpdateData(Sender: TObject);
+begin
+ ValidateEdit;
+ SetAsWideString(FDataLink.Field, Text);
+ FDataLinkModified := False;
+end;
+
+{ TTntCustomDBComboBox }
+
+constructor TTntCustomDBComboBox.Create(AOwner: TComponent);
+begin
+ inherited;
+ FItems := TTntComboBoxStrings.Create;
+ TTntComboBoxStrings(FItems).ComboBox := Self;
+ FDataLink := TDataLink(Perform(CM_GETDATALINK, 0, 0)) as TFieldDataLink;
+ FDataLink.OnDataChange := DataChange;
+ FDataLink.OnUpdateData := UpdateData;
+ FDataLink.OnEditingChange := EditingChange;
+end;
+
+destructor TTntCustomDBComboBox.Destroy;
+begin
+ FreeAndNil(FItems);
+ FDataLink := nil;
+ inherited;
+end;
+
+procedure TTntCustomDBComboBox.CreateWindowHandle(const Params: TCreateParams);
+begin
+ CreateUnicodeHandle(Self, Params, 'COMBOBOX');
+end;
+
+procedure TTntCustomDBComboBox.CreateWnd;
+begin
+ inherited;
+ if Win32Platform = VER_PLATFORM_WIN32_NT then begin
+ if ListHandle <> 0 then
+ SetWindowLongW(ListHandle, GWL_WNDPROC, GetWindowLong(ListHandle, GWL_WNDPROC));
+ SetWindowLongW(EditHandle, GWL_WNDPROC, GetWindowLong(EditHandle, GWL_WNDPROC));
+ end;
+end;
+
+procedure TTntCustomDBComboBox.SetReadOnly;
+begin
+ if (Style in [csDropDown, csSimple]) and HandleAllocated then
+ SendMessage(EditHandle, EM_SETREADONLY, Ord(not FDataLink.CanModify), 0);
+end;
+
+procedure TTntCustomDBComboBox.EditingChange(Sender: TObject);
+begin
+ SetReadOnly;
+end;
+
+procedure TTntCustomDBComboBox.CMEnter(var Message: TCMEnter);
+begin
+ inherited;
+ SetReadOnly;
+end;
+
+procedure TTntCustomDBComboBox.WndProc(var Message: TMessage);
+begin
+ if (not (csDesigning in ComponentState))
+ and (Message.Msg = CB_SHOWDROPDOWN)
+ and (Message.WParam = 0)
+ and (not FDataLink.Editing) then begin
+ DataChange(Self); {Restore text}
+ Dispatch(Message); {Do NOT call inherited!}
+ end else
+ inherited WndProc(Message);
+end;
+
+procedure TTntCustomDBComboBox.ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
+ ComboProc: Pointer);
+begin
+ if (not IsWindowUnicode(ComboWnd)) then begin
+ if Message.Msg = WM_CHAR then
+ DoEditCharMsg(TWMKey(Message));
+ inherited;
+ end else begin
+ try
+ // UNICODE
+ if IsTextMessage(Message.Msg) then
+ with Message do
+ Result := CallWindowProcW(ComboProc, ComboWnd, Msg, WParam, LParam)
+ else if Message.Msg = WM_CHAR then begin
+ MakeWMCharMsgSafeForAnsi(Message);
+ DoEditCharMsg(TWMKey(Message));
+ if DoKeyPress(TWMKey(Message)) then Exit;
+ RestoreWMCharMsg(Message);
+ with TWMKey(Message) do begin
+ if ((CharCode = VK_RETURN) or (CharCode = VK_ESCAPE)) and DroppedDown then
+ begin
+ DroppedDown := False;
+ Exit;
+ end;
+ end;
+ with Message do
+ Result := CallWindowProcW(ComboProc, ComboWnd, Msg, WParam, LParam)
+ end else if not HandleIMEComposition(ComboWnd, Message) then
+ inherited;
+ except
+ Application.HandleException(Self);
+ end;
+ end;
+end;
+
+procedure TTntCustomDBComboBox.KeyPress(var Key: AnsiChar);
+begin
+ { Don't call inherited for VK_BACK and Delphi 6. This combo's text will be copied to an
+ AnsiString, last char deleted, and the AnsiString will be reassigned to this combo.
+ This will drop all Unicode chars. }
+ if Ord(Key) <> VK_BACK then
+ inherited
+ else if Assigned(OnKeyPress) then
+ OnKeyPress(Self, Key);
+end;
+
+function TTntCustomDBComboBox.GetItems: TWideStrings;
+begin
+ result := FItems;
+end;
+
+procedure TTntCustomDBComboBox.SetItems(const Value: TWideStrings);
+begin
+ FItems.Assign(Value);
+ DataChange(Self);
+end;
+
+function TTntCustomDBComboBox.GetSelText: WideString;
+begin
+ if (not IsWindowUnicode(Handle)) then
+ Result := inherited SelText
+ else begin
+ Result := '';
+ if Style < csDropDownList then
+ Result := Copy(Text, SelStart + 1, SelLength);
+ end;
+end;
+
+procedure TTntCustomDBComboBox.SetSelText(const Value: WideString);
+begin
+ if (not IsWindowUnicode(Handle)) then
+ inherited SelText := Value
+ else begin
+ if Style < csDropDownList then
+ begin
+ HandleNeeded;
+ SendMessageW(EditHandle, EM_REPLACESEL, 0, Longint(PWideChar(Value)));
+ end;
+ end;
+end;
+
+function TTntCustomDBComboBox.GetText: WideString;
+begin
+ result := WideGetWindowText(Self);
+end;
+
+procedure TTntCustomDBComboBox.SetText(const Value: WideString);
+begin
+ WideSetWindowText(Self, Value);
+end;
+
+procedure TTntCustomDBComboBox.CNCommand(var Message: TWMCommand);
+begin
+ if Message.NotifyCode <> CBN_SELCHANGE then
+ inherited
+ else begin
+ Text := Items[ItemIndex];
+ Click;
+ Change;
+ end;
+end;
+
+procedure TTntCustomDBComboBox.DataChange(Sender: TObject);
+begin
+ if not (Style = csSimple) and DroppedDown then Exit;
+ if FDataLink.Field <> nil then
+ SetComboValue(FDataLink.Field.Value)
+ else
+ if csDesigning in ComponentState then
+ SetComboValue(Name)
+ else
+ SetComboValue(Null);
+end;
+
+procedure TTntCustomDBComboBox.UpdateData(Sender: TObject);
+begin
+ FDataLink.Field.Value := GetComboValue;
+end;
+
+procedure TTntCustomDBComboBox.DoEditCharMsg(var Message: TWMChar);
+begin
+end;
+
+function TTntCustomDBComboBox.GetSelLength: Integer;
+begin
+ result := SelLength;
+end;
+
+procedure TTntCustomDBComboBox.SetSelLength(Value: Integer);
+begin
+ SelLength := Value;
+end;
+
+function TTntCustomDBComboBox.GetSelStart: Integer;
+begin
+ result := SelStart;
+end;
+
+procedure TTntCustomDBComboBox.SetSelStart(Value: Integer);
+begin
+ SelStart := Value;
+end;
+
+function TTntCustomDBComboBox.GetItemIndex: Integer;
+begin
+ result := ItemIndex;
+end;
+
+procedure TTntCustomDBComboBox.SetItemIndex(const Value: Integer);
+begin
+ ItemIndex := Value;
+end;
+
+{ TTntDBComboBox }
+
+procedure TTntDBComboBox.SetComboValue(const Value: Variant);
+
+{$IFDEF VER130}
+ // Delphi 6 compatiblity function
+ function VarToWideStr(const V: Variant): WideString;
+ begin
+ if TVarData(V).VType <> varNull then Result := V else Result := '';
+ end;
+{$ENDIF}
+
+var
+ I: Integer;
+ Redraw: Boolean;
+ OldValue: WideString;
+ NewValue: WideString;
+begin
+ OldValue := VarToWideStr(GetComboValue);
+ NewValue := VarToWideStr(Value);
+
+ if NewValue <> OldValue then
+ begin
+ if Style <> csDropDown then
+ begin
+ Redraw := (Style <> csSimple) and HandleAllocated;
+ if Redraw then Items.BeginUpdate;
+ try
+ if NewValue = '' then I := -1 else I := Items.IndexOf(NewValue);
+ ItemIndex := I;
+ finally
+ Items.EndUpdate;
+ end;
+ if I >= 0 then Exit;
+ end;
+ if Style in [csDropDown, csSimple] then Text := NewValue;
+ end;
+end;
+
+function TTntDBComboBox.GetComboValue: Variant;
+var
+ I: Integer;
+begin
+ if Style in [csDropDown, csSimple] then Result := Text else
+ begin
+ I := ItemIndex;
+ if I < 0 then Result := '' else Result := Items[I];
+ end;
+end;
+
+{ TTntDBCheckBox }
+
+procedure TTntDBCheckBox.Toggle;
+var
+ FDataLink: TDataLink;
+begin
+ inherited;
+ FDataLink := TDataLink(Perform(CM_GETDATALINK, 0, 0)) as TFieldDataLink;
+ FDataLink.UpdateRecord;
+end;
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.dfm b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.dfm
new file mode 100644
index 0000000..8966fca
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.dfm
@@ -0,0 +1,12 @@
+object TntForm: TTntForm
+ Left = 204
+ Top = 230
+ Width = 696
+ Height = 480
+ Caption = 'TntForm'
+ Color = clBtnFace
+ ParentFont = True
+ OldCreateOrder = False
+ PixelsPerInch = 96
+ TextHeight = 13
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.hpp b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.hpp
new file mode 100644
index 0000000..7df8940
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.hpp
@@ -0,0 +1,79 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'TntForms.pas' rev: 5.00
+
+#ifndef TntFormsHPP
+#define TntFormsHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <Forms.hpp> // Pascal unit
+#include <Controls.hpp> // Pascal unit
+#include <Messages.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <TntClasses.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Tntforms
+{
+//-- type declarations -------------------------------------------------------
+class DELPHICLASS TTntForm;
+class PASCALIMPLEMENTATION TTntForm : public Forms::TForm
+{
+ typedef Forms::TForm inherited;
+
+private:
+ WideString __fastcall GetCaption();
+ void __fastcall SetCaption(const WideString Value);
+
+protected:
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+
+public:
+ virtual void __fastcall DefaultHandler(void *Message);
+
+__published:
+ __property WideString Caption = {read=GetCaption, write=SetCaption};
+public:
+ #pragma option push -w-inl
+ /* TCustomForm.Create */ inline __fastcall virtual TTntForm(Classes::TComponent* AOwner) : Forms::TForm(
+ AOwner) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TCustomForm.CreateNew */ inline __fastcall virtual TTntForm(Classes::TComponent* AOwner, int Dummy
+ ) : Forms::TForm(AOwner, Dummy) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TCustomForm.Destroy */ inline __fastcall virtual ~TTntForm(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntForm(HWND ParentWindow) : Forms::TForm(ParentWindow
+ ) { }
+ #pragma option pop
+
+};
+
+
+//-- var, const, procedure ---------------------------------------------------
+extern PACKAGE void __fastcall EnableManualPeekMessageWithRemove(void);
+extern PACKAGE void __fastcall DisableManualPeekMessageWithRemove(void);
+
+} /* namespace Tntforms */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Tntforms;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // TntForms
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.pas
new file mode 100644
index 0000000..d5519ac
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms.pas
@@ -0,0 +1,204 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntForms;
+
+interface
+
+{$IFDEF VER140}
+{$WARN SYMBOL_PLATFORM OFF} { We are going to use Win32 specific symbols! }
+{$ENDIF}
+
+uses
+ Classes, TntClasses, Windows, Messages, Controls, Forms;
+
+{TNT-WARN TForm}
+type
+ TTntForm{TNT-ALLOW TTntForm} = class(TForm{TNT-ALLOW TForm})
+ private
+ function GetCaption: WideString;
+ procedure SetCaption(const Value: WideString);
+ protected
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ public
+ procedure DefaultHandler(var Message); override;
+ published
+ property Caption: WideString read GetCaption write SetCaption;
+ end;
+
+{TNT-WARN PeekMessage}
+{TNT-WARN PeekMessageA}
+{TNT-WARN PeekMessageW}
+procedure EnableManualPeekMessageWithRemove;
+procedure DisableManualPeekMessageWithRemove;
+
+implementation
+
+{$R *.DFM}
+
+uses SysUtils, Consts, TntControls;
+
+{$IFDEF VER130}
+const
+ WS_EX_LAYERED = $00080000;
+{$ENDIF}
+
+{ TTntForm }
+
+procedure TTntForm{TNT-ALLOW TTntForm}.CreateWindowHandle(const Params: TCreateParams);
+var
+ NewParams: TCreateParams;
+ WideWinClassName: WideString;
+begin
+ if (Win32Platform <> VER_PLATFORM_WIN32_NT)
+ or (csDesigning in ComponentState) then
+ inherited
+ else if (FormStyle = fsMDIChild) and not (csDesigning in ComponentState) then
+ begin
+ if (Application.MainForm = nil) or
+ (Application.MainForm.ClientHandle = 0) then
+ raise EInvalidOperation.Create(SNoMDIForm);
+ WideWinClassName := Params.WinClassName + UNICODE_CLASS_EXT;
+ DefWndProc := @DefMDIChildProcW;
+ WindowHandle := CreateMDIWindowW(PWideChar(WideWinClassName),
+ nil, Params.style, Params.X, Params.Y, Params.Width, Params.Height,
+ Application.MainForm.ClientHandle, hInstance, Longint(Params.Param));
+ if WindowHandle = 0 then
+ RaiseLastOSError;
+ SetWindowLongW(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_WNDPROC));
+ WideSetWindowText(Self, Params.Caption);
+ SubClassUnicodeControl(Self);
+ Include(FFormState, fsCreatedMDIChild);
+ end else
+ begin
+ NewParams := Params;
+ NewParams.ExStyle := NewParams.ExStyle and not WS_EX_LAYERED;
+ CreateUnicodeHandle(Self, NewParams, '');
+ Exclude(FFormState, fsCreatedMDIChild);
+ end;
+{$IFDEF VER140}
+ if AlphaBlend then begin
+ // toggle AlphaBlend to force update
+ AlphaBlend := False;
+ AlphaBlend := True;
+ end;
+{$ENDIF}
+end;
+
+procedure TTntForm{TNT-ALLOW TTntForm}.DefaultHandler(var Message);
+begin
+ if (ClientHandle <> 0)
+ and (Win32Platform = VER_PLATFORM_WIN32_NT)
+ and (not (csDesigning in ComponentState)) then
+ with TMessage(Message) do
+ if Msg = WM_SIZE then
+ Result := DefWindowProcW(Handle, Msg, wParam, lParam)
+ else
+ Result := DefFrameProcW(Handle, ClientHandle, Msg, wParam, lParam)
+ else
+ inherited DefaultHandler(Message)
+end;
+
+function TTntForm{TNT-ALLOW TTntForm}.GetCaption: WideString;
+begin
+ if (csDesigning in ComponentState) then
+ result := inherited Caption
+ else
+ result := WideGetWindowText(Self)
+end;
+
+procedure TTntForm{TNT-ALLOW TTntForm}.SetCaption(const Value: WideString);
+begin
+ if (csDesigning in ComponentState) then
+ inherited Caption := Value
+ else
+ WideSetWindowText(Self, Value)
+end;
+
+//===========================================================================
+// The NT GetMessage Hook is needed to support entering Unicode
+// characters directly from the keyboard (bypassing the IME).
+// Special thanks go to Francisco Leong for developing this solution.
+//
+// Example:
+// 1. Install "Turkic" language support.
+// 2. Add "Azeri (Latin)" as an input locale.
+// 3. In an EDIT, enter Shift+I. (You should see a capital "I" with dot.)
+// 4. In an EDIT, enter single quote (US Keyboard). (You should see an upturned "e".)
+//
+var
+ NTGetMessageHook: HHOOK = 0;
+
+function IsDlgMsg(var Msg: TMsg): Boolean;
+begin
+ result := (Application.DialogHandle <> 0)
+ and (IsDialogMessage(Application.DialogHandle, Msg))
+end;
+
+var
+ ManualPeekMessageWithRemove: Integer = 0;
+
+function GetMessageForNT(Code: Integer; wParam: Integer; lParam: Integer): LRESULT; stdcall;
+var
+ ThisMsg: PMSG;
+ Handled: Boolean;
+begin
+ if (Code >= 0)
+ and (wParam = PM_REMOVE)
+ and (ManualPeekMessageWithRemove = 0) then
+ begin
+ ThisMsg := PMSG(lParam);
+ if (ThisMsg.message = WM_CHAR)
+ and (ThisMsg.wParam > Integer(High(AnsiChar)))
+ and IsWindowUnicode(ThisMsg.hwnd) then
+ begin
+ // more than 8-bit WM_CHAR destined for Unicode window
+ Handled := False;
+ if Assigned(Application.OnMessage) then
+ Application.OnMessage(ThisMsg^, Handled);
+ Application.CancelHint;
+ // dispatch msg if not a dialog message
+ if (not Handled) and (not IsDlgMsg(ThisMsg^)) then
+ DispatchMessageW(ThisMsg^);
+ // clear for further processing
+ ThisMsg.message := WM_NULL;
+ end;
+ end;
+ Result := CallNextHookEx(NTGetMessageHook, Code, wParam, lParam);
+end;
+
+procedure CreateMessageHookForNT;
+begin
+ Assert(Win32Platform = VER_PLATFORM_WIN32_NT);
+ NTGetMessageHook := SetWindowsHookExW(WH_GETMESSAGE, GetMessageForNT, 0, GetCurrentThreadID);
+ if NTGetMessageHook = 0 then
+ RaiseLastOSError;
+end;
+
+procedure EnableManualPeekMessageWithRemove;
+begin
+ Inc(ManualPeekMessageWithRemove);
+end;
+
+procedure DisableManualPeekMessageWithRemove;
+begin
+ if (ManualPeekMessageWithRemove > 0) then
+ Dec(ManualPeekMessageWithRemove);
+end;
+
+initialization
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ CreateMessageHookForNT;
+
+finalization
+ if NTGetMessageHook <> 0 then
+ Win32Check(UnhookWindowsHookEx(NTGetMessageHook));
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms_Design.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms_Design.pas
new file mode 100644
index 0000000..33ea94a
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntForms_Design.pas
@@ -0,0 +1,116 @@
+unit TntForms_Design;
+
+interface
+
+uses Windows, ExptIntf;
+
+type
+ TTntNewFormExpert = class(TIExpert)
+ protected
+ function ThisFormName: WideString; virtual; abstract;
+ public
+ function GetName: AnsiString; override;
+ function GetAuthor: AnsiString; override;
+ function GetComment: AnsiString; override;
+ function GetPage: AnsiString; override;
+ function GetGlyph: HICON; override;
+ function GetStyle: TExpertStyle; override;
+ function GetState: TExpertState; override;
+ function GetIDString: AnsiString; override;
+ function GetMenuText: AnsiString; override;
+ procedure Execute; override;
+ end;
+
+procedure Register;
+
+implementation
+
+uses TntForms, DsgnIntf, EditIntf, ToolIntf;
+
+type
+ TTntNewTntFormExpert = class(TTntNewFormExpert)
+ protected
+ function ThisFormName: WideString; override;
+ public
+ function GetName: AnsiString; override;
+ end;
+
+procedure Register;
+begin
+ RegisterCustomModule(TTntForm{TNT-ALLOW TTntForm}, TCustomModule);
+ RegisterLibraryExpert(TTntNewTntFormExpert.Create);
+end;
+
+{ TTntNewFormExpert }
+
+function TTntNewFormExpert.GetName: AnsiString;
+begin
+ result := ThisFormName;
+end;
+
+function TTntNewFormExpert.GetAuthor: AnsiString;
+begin
+ result := 'Troy Wolbrink';
+end;
+
+function TTntNewFormExpert.GetComment: AnsiString;
+begin
+ result := 'Creates a new Unicode enabled TntForm';
+end;
+
+function TTntNewFormExpert.GetPage: AnsiString;
+begin
+ result := 'New';
+end;
+
+function TTntNewFormExpert.GetGlyph: HICON;
+begin
+ result := 0;
+end;
+
+function TTntNewFormExpert.GetStyle: TExpertStyle;
+begin
+ result := esForm;
+end;
+
+function TTntNewFormExpert.GetState: TExpertState;
+begin
+ result := [esEnabled];
+end;
+
+function TTntNewFormExpert.GetIDString: AnsiString;
+begin
+ result := 'Tnt.Create_'+ThisFormName+'.Wizard';
+end;
+
+function TTntNewFormExpert.GetMenuText: AnsiString;
+begin
+ result := '';
+end;
+
+procedure TTntNewFormExpert.Execute;
+var
+ ModuleName, FormName, FileName: AnsiString;
+ ModIntf: TIModuleInterface;
+begin
+ ToolServices.GetNewModuleAndClassName(ThisFormName, ModuleName, FormName, FileName);
+ ModIntf := ToolServices.CreateModuleEx(FileName, FormName, ThisFormName, '', nil, nil, [cmNewForm]);
+ ModIntf.ShowSource;
+ ModIntf.ShowForm;
+ ModIntf.Release;
+end;
+
+{ TTntNewTntFormExpert }
+
+function TTntNewTntFormExpert.ThisFormName: WideString;
+begin
+ result := TTntForm{TNT-ALLOW TTntForm}.ClassName;
+ Delete(result, 1, 1); // drop the 'T'
+end;
+
+function TTntNewTntFormExpert.GetName: AnsiString;
+begin
+ result := ThisFormName + ' (Unicode)'
+end;
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.dcr b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.dcr
new file mode 100644
index 0000000..bd1440b
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.dcr
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.hpp b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.hpp
new file mode 100644
index 0000000..09a434c
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.hpp
@@ -0,0 +1,575 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'TntStdCtrls.pas' rev: 5.00
+
+#ifndef TntStdCtrlsHPP
+#define TntStdCtrlsHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <Menus.hpp> // Pascal unit
+#include <Graphics.hpp> // Pascal unit
+#include <Forms.hpp> // Pascal unit
+#include <Unicode.hpp> // Pascal unit
+#include <CheckLst.hpp> // Pascal unit
+#include <StdCtrls.hpp> // Pascal unit
+#include <Controls.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <Messages.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Tntstdctrls
+{
+//-- type declarations -------------------------------------------------------
+typedef void __fastcall (__closure *TWideKeyPressEvent)(System::TObject* Sender, wchar_t &Key);
+
+class DELPHICLASS TTntCustomEdit;
+class PASCALIMPLEMENTATION TTntCustomEdit : public Stdctrls::TCustomEdit
+{
+ typedef Stdctrls::TCustomEdit inherited;
+
+private:
+ HIDESBASE WideString __fastcall GetSelText();
+ HIDESBASE void __fastcall SetSelText(const WideString Value);
+ HIDESBASE WideString __fastcall GetText();
+ HIDESBASE void __fastcall SetText(const WideString Value);
+
+protected:
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+
+public:
+ __property WideString SelText = {read=GetSelText, write=SetSelText};
+ __property WideString Text = {read=GetText, write=SetText};
+public:
+ #pragma option push -w-inl
+ /* TCustomEdit.Create */ inline __fastcall virtual TTntCustomEdit(Classes::TComponent* AOwner) : Stdctrls::TCustomEdit(
+ AOwner) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntCustomEdit(HWND ParentWindow) : Stdctrls::TCustomEdit(
+ ParentWindow) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TWinControl.Destroy */ inline __fastcall virtual ~TTntCustomEdit(void) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntEdit;
+class PASCALIMPLEMENTATION TTntEdit : public TTntCustomEdit
+{
+ typedef TTntCustomEdit inherited;
+
+__published:
+ __property Anchors ;
+ __property AutoSelect ;
+ __property AutoSize ;
+ __property BiDiMode ;
+ __property BorderStyle ;
+ __property CharCase ;
+ __property Color ;
+ __property Constraints ;
+ __property Ctl3D ;
+ __property DragCursor ;
+ __property DragKind ;
+ __property DragMode ;
+ __property Enabled ;
+ __property Font ;
+ __property HideSelection ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property MaxLength ;
+ __property OEMConvert ;
+ __property ParentBiDiMode ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PasswordChar ;
+ __property PopupMenu ;
+ __property ReadOnly ;
+ __property ShowHint ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property Text ;
+ __property Visible ;
+ __property OnChange ;
+ __property OnClick ;
+ __property OnContextPopup ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnEndDock ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnMouseDown ;
+ __property OnMouseMove ;
+ __property OnMouseUp ;
+ __property OnStartDock ;
+ __property OnStartDrag ;
+public:
+ #pragma option push -w-inl
+ /* TCustomEdit.Create */ inline __fastcall virtual TTntEdit(Classes::TComponent* AOwner) : TTntCustomEdit(
+ AOwner) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntEdit(HWND ParentWindow) : TTntCustomEdit(ParentWindow
+ ) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TWinControl.Destroy */ inline __fastcall virtual ~TTntEdit(void) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntCustomMemo;
+class PASCALIMPLEMENTATION TTntCustomMemo : public Stdctrls::TCustomMemo
+{
+ typedef Stdctrls::TCustomMemo inherited;
+
+private:
+ Unicode::TWideStrings* FLines;
+ HIDESBASE void __fastcall SetLines(const Unicode::TWideStrings* Value);
+ HIDESBASE WideString __fastcall GetSelText();
+ HIDESBASE void __fastcall SetSelText(const WideString Value);
+ HIDESBASE WideString __fastcall GetText();
+ HIDESBASE void __fastcall SetText(const WideString Value);
+
+protected:
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+
+public:
+ __fastcall virtual TTntCustomMemo(Classes::TComponent* AOwner);
+ __fastcall virtual ~TTntCustomMemo(void);
+ __property WideString SelText = {read=GetSelText, write=SetSelText};
+ __property WideString Text = {read=GetText, write=SetText};
+ __property Unicode::TWideStrings* Lines = {read=FLines, write=SetLines};
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntCustomMemo(HWND ParentWindow) : Stdctrls::TCustomMemo(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntMemo;
+class PASCALIMPLEMENTATION TTntMemo : public TTntCustomMemo
+{
+ typedef TTntCustomMemo inherited;
+
+__published:
+ __property Align ;
+ __property Alignment ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property BorderStyle ;
+ __property Color ;
+ __property Constraints ;
+ __property Ctl3D ;
+ __property DragCursor ;
+ __property DragKind ;
+ __property DragMode ;
+ __property Enabled ;
+ __property Font ;
+ __property HideSelection ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property Lines ;
+ __property MaxLength ;
+ __property OEMConvert ;
+ __property ParentBiDiMode ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PopupMenu ;
+ __property ReadOnly ;
+ __property ScrollBars ;
+ __property ShowHint ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property Visible ;
+ __property WantReturns ;
+ __property WantTabs ;
+ __property WordWrap ;
+ __property OnChange ;
+ __property OnClick ;
+ __property OnContextPopup ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnEndDock ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnMouseDown ;
+ __property OnMouseMove ;
+ __property OnMouseUp ;
+ __property OnStartDock ;
+ __property OnStartDrag ;
+public:
+ #pragma option push -w-inl
+ /* TTntCustomMemo.Create */ inline __fastcall virtual TTntMemo(Classes::TComponent* AOwner) : TTntCustomMemo(
+ AOwner) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TTntCustomMemo.Destroy */ inline __fastcall virtual ~TTntMemo(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntMemo(HWND ParentWindow) : TTntCustomMemo(ParentWindow
+ ) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntComboBoxStrings;
+class PASCALIMPLEMENTATION TTntComboBoxStrings : public Unicode::TWideStrings
+{
+ typedef Unicode::TWideStrings inherited;
+
+protected:
+ virtual WideString __fastcall Get(int Index);
+ virtual int __fastcall GetCount(void);
+ virtual System::TObject* __fastcall GetObject(int Index);
+ virtual void __fastcall PutObject(int Index, System::TObject* AObject);
+ virtual void __fastcall SetUpdateState(bool Updating);
+
+public:
+ Stdctrls::TCustomComboBox* ComboBox;
+ virtual int __fastcall Add(const WideString S);
+ virtual void __fastcall Clear(void);
+ virtual void __fastcall Delete(int Index);
+ virtual int __fastcall IndexOf(const WideString S);
+ virtual void __fastcall Insert(int Index, const WideString S);
+public:
+ #pragma option push -w-inl
+ /* TWideStrings.Create */ inline __fastcall TTntComboBoxStrings(void) : Unicode::TWideStrings() { }
+
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TWideStrings.Destroy */ inline __fastcall virtual ~TTntComboBoxStrings(void) { }
+ #pragma option pop
+
+};
+
+
+__interface ITntComboBox;
+typedef System::DelphiInterface<ITntComboBox> _di_ITntComboBox;
+__interface ITntComboBox : public IUnknown
+{
+
+public:
+ virtual Unicode::TWideStrings* __fastcall GetItems(void) = 0 ;
+ virtual void __fastcall SetItems(const Unicode::TWideStrings* Value) = 0 ;
+ virtual int __fastcall GetSelLength(void) = 0 ;
+ virtual int __fastcall GetSelStart(void) = 0 ;
+ virtual WideString __fastcall GetSelText(void) = 0 ;
+ virtual void __fastcall SetSelLength(int Value) = 0 ;
+ virtual void __fastcall SetSelStart(int Value) = 0 ;
+ virtual void __fastcall SetSelText(const WideString Value) = 0 ;
+ virtual WideString __fastcall GetText(void) = 0 ;
+ virtual void __fastcall SetText(const WideString Value) = 0 ;
+ virtual int __fastcall GetItemIndex(void) = 0 ;
+ virtual void __fastcall SetItemIndex(const int Value) = 0 ;
+ __property int SelLength = {read=GetSelLength, write=SetSelLength};
+ __property int SelStart = {read=GetSelStart, write=SetSelStart};
+ __property WideString SelText = {read=GetSelText, write=SetSelText};
+ __property WideString Text = {read=GetText, write=SetText};
+ __property Unicode::TWideStrings* Items = {read=GetItems, write=SetItems};
+ __property int ItemIndex = {read=GetItemIndex, write=SetItemIndex};
+};
+
+class DELPHICLASS TTntCustomComboBox;
+class PASCALIMPLEMENTATION TTntCustomComboBox : public Stdctrls::TCustomComboBox
+{
+ typedef Stdctrls::TCustomComboBox inherited;
+
+private:
+ Unicode::TWideStrings* FItems;
+ Unicode::TWideStrings* __fastcall GetItems(void);
+ HIDESBASE void __fastcall SetItems(const Unicode::TWideStrings* Value);
+ HIDESBASE int __fastcall GetSelLength(void);
+ HIDESBASE void __fastcall SetSelLength(int Value);
+ HIDESBASE int __fastcall GetSelStart(void);
+ HIDESBASE void __fastcall SetSelStart(int Value);
+ HIDESBASE WideString __fastcall GetSelText();
+ HIDESBASE void __fastcall SetSelText(const WideString Value);
+ HIDESBASE WideString __fastcall GetText();
+ HIDESBASE void __fastcall SetText(const WideString Value);
+ HIDESBASE int __fastcall GetItemIndex(void);
+ HIDESBASE void __fastcall SetItemIndex(const int Value);
+ HIDESBASE MESSAGE void __fastcall CNCommand(Messages::TWMCommand &Message);
+
+protected:
+ virtual void __fastcall DoEditCharMsg(Messages::TWMKey &Message);
+ virtual void __fastcall CreateWnd(void);
+ virtual void __fastcall ComboWndProc(Messages::TMessage &Message, HWND ComboWnd, void * ComboProc);
+
+ DYNAMIC void __fastcall KeyPress(char &Key);
+
+public:
+ __fastcall virtual TTntCustomComboBox(Classes::TComponent* AOwner);
+ __fastcall virtual ~TTntCustomComboBox(void);
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+ __property WideString SelText = {read=GetSelText, write=SetSelText};
+ __property WideString Text = {read=GetText, write=SetText};
+ __property Unicode::TWideStrings* Items = {read=GetItems, write=SetItems};
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntCustomComboBox(HWND ParentWindow) : Stdctrls::TCustomComboBox(
+ ParentWindow) { }
+ #pragma option pop
+
+private:
+ void *__ITntComboBox; /* Tntstdctrls::ITntComboBox */
+
+public:
+ operator ITntComboBox*(void) { return (ITntComboBox*)&__ITntComboBox; }
+
+};
+
+
+class DELPHICLASS TTntComboBox;
+class PASCALIMPLEMENTATION TTntComboBox : public TTntCustomComboBox
+{
+ typedef TTntCustomComboBox inherited;
+
+__published:
+ __property Style ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property Color ;
+ __property Constraints ;
+ __property Ctl3D ;
+ __property DragCursor ;
+ __property DragKind ;
+ __property DragMode ;
+ __property DropDownCount ;
+ __property Enabled ;
+ __property Font ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property ItemHeight ;
+ __property MaxLength ;
+ __property ParentBiDiMode ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PopupMenu ;
+ __property ShowHint ;
+ __property Sorted ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property Text ;
+ __property Visible ;
+ __property OnChange ;
+ __property OnClick ;
+ __property OnContextPopup ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnDrawItem ;
+ __property OnDropDown ;
+ __property OnEndDock ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnMeasureItem ;
+ __property OnStartDock ;
+ __property OnStartDrag ;
+ __property Items ;
+public:
+ #pragma option push -w-inl
+ /* TTntCustomComboBox.Create */ inline __fastcall virtual TTntComboBox(Classes::TComponent* AOwner)
+ : TTntCustomComboBox(AOwner) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TTntCustomComboBox.Destroy */ inline __fastcall virtual ~TTntComboBox(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntComboBox(HWND ParentWindow) : TTntCustomComboBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntCustomListBox;
+class PASCALIMPLEMENTATION TTntCustomListBox : public Stdctrls::TCustomListBox
+{
+ typedef Stdctrls::TCustomListBox inherited;
+
+private:
+ Unicode::TWideStrings* FItems;
+ HIDESBASE void __fastcall SetItems(const Unicode::TWideStrings* Value);
+
+protected:
+ virtual void __fastcall DrawItem(int Index, const /*Windows::*/TRect &Rect, Windows::TOwnerDrawState State
+ );
+
+public:
+ __fastcall virtual TTntCustomListBox(Classes::TComponent* AOwner);
+ __fastcall virtual ~TTntCustomListBox(void);
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+
+__published:
+ __property Unicode::TWideStrings* Items = {read=FItems, write=SetItems};
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntCustomListBox(HWND ParentWindow) : Stdctrls::TCustomListBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntListBox;
+class PASCALIMPLEMENTATION TTntListBox : public TTntCustomListBox
+{
+ typedef TTntCustomListBox inherited;
+
+__published:
+ __property Align ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property BorderStyle ;
+ __property Color ;
+ __property Columns ;
+ __property Constraints ;
+ __property Ctl3D ;
+ __property DragCursor ;
+ __property DragKind ;
+ __property DragMode ;
+ __property Enabled ;
+ __property ExtendedSelect ;
+ __property Font ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property IntegralHeight ;
+ __property ItemHeight ;
+ __property Items ;
+ __property MultiSelect ;
+ __property ParentBiDiMode ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PopupMenu ;
+ __property ShowHint ;
+ __property Sorted ;
+ __property Style ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property TabWidth ;
+ __property Visible ;
+ __property OnClick ;
+ __property OnContextPopup ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnDrawItem ;
+ __property OnEndDock ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnMeasureItem ;
+ __property OnMouseDown ;
+ __property OnMouseMove ;
+ __property OnMouseUp ;
+ __property OnStartDock ;
+ __property OnStartDrag ;
+public:
+ #pragma option push -w-inl
+ /* TTntCustomListBox.Create */ inline __fastcall virtual TTntListBox(Classes::TComponent* AOwner) :
+ TTntCustomListBox(AOwner) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TTntCustomListBox.Destroy */ inline __fastcall virtual ~TTntListBox(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntListBox(HWND ParentWindow) : TTntCustomListBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TTntCheckListBox;
+class PASCALIMPLEMENTATION TTntCheckListBox : public Checklst::TCheckListBox
+{
+ typedef Checklst::TCheckListBox inherited;
+
+private:
+ Unicode::TWideStrings* FItems;
+ HIDESBASE void __fastcall SetItems(const Unicode::TWideStrings* Value);
+ void __fastcall DrawItemStub(Controls::TWinControl* Control, int Index, const /*Windows::*/TRect &Rect,
+ Windows::TOwnerDrawState State);
+
+protected:
+ virtual void __fastcall DrawItem(int Index, const /*Windows::*/TRect &Rect, Windows::TOwnerDrawState State
+ );
+
+public:
+ __fastcall virtual TTntCheckListBox(Classes::TComponent* AOwner);
+ __fastcall virtual ~TTntCheckListBox(void);
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+
+__published:
+ __property Unicode::TWideStrings* Items = {read=FItems, write=SetItems};
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TTntCheckListBox(HWND ParentWindow) : Checklst::TCheckListBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+//-- var, const, procedure ---------------------------------------------------
+extern PACKAGE void __fastcall Register(void);
+
+} /* namespace Tntstdctrls */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Tntstdctrls;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // TntStdCtrls
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.pas
new file mode 100644
index 0000000..6616243
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntStdCtrls.pas
@@ -0,0 +1,1234 @@
+
+{*******************************************************}
+{ The Delphi Unicode Controls Project }
+{ }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Copyright (c) 2002, Troy Wolbrink (wolbrink@ccci.org) }
+{ }
+{*******************************************************}
+
+unit TntStdCtrls;
+
+{ If you want to use JCLUnicode that comes with Jedi Component Library,
+ define JCL as a "Conditional Define" in the project options. }
+
+interface
+
+uses
+ Windows, Messages, Classes, Controls, StdCtrls, CheckLst,
+{$IFDEF JCL} JclUnicode {$ELSE} Unicode {$ENDIF};
+
+type
+ TWideKeyPressEvent = procedure(Sender: TObject; var Key: WideChar) of object;
+
+{TNT-WARN TCustomEdit}
+type
+ TTntCustomEdit = class(TCustomEdit{TNT-ALLOW TCustomEdit})
+ private
+ function GetSelText: WideString; reintroduce;
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ protected
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ public
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ end;
+
+{TNT-WARN TEdit}
+ TTntEdit = class(TTntCustomEdit)
+ published
+ property Anchors;
+ property AutoSelect;
+ property AutoSize;
+{$IFDEF VER140}
+ property BevelEdges;
+ property BevelInner;
+ property BevelKind default bkNone;
+ property BevelOuter;
+{$ENDIF}
+ property BiDiMode;
+ property BorderStyle;
+ property CharCase;
+ property Color;
+ property Constraints;
+ property Ctl3D;
+ property DragCursor;
+ property DragKind;
+ property DragMode;
+ property Enabled;
+ property Font;
+ property HideSelection;
+ property ImeMode;
+ property ImeName;
+ property MaxLength;
+ property OEMConvert;
+ property ParentBiDiMode;
+ property ParentColor;
+ property ParentCtl3D;
+ property ParentFont;
+ property ParentShowHint;
+ property PasswordChar;
+ property PopupMenu;
+ property ReadOnly;
+ property ShowHint;
+ property TabOrder;
+ property TabStop;
+ property Text;
+ property Visible;
+ property OnChange;
+ property OnClick;
+ property OnContextPopup;
+ property OnDblClick;
+ property OnDragDrop;
+ property OnDragOver;
+ property OnEndDock;
+ property OnEndDrag;
+ property OnEnter;
+ property OnExit;
+ property OnKeyDown;
+ property OnKeyPress;
+ property OnKeyUp;
+ property OnMouseDown;
+ property OnMouseMove;
+ property OnMouseUp;
+ property OnStartDock;
+ property OnStartDrag;
+ end;
+
+{TNT-WARN TCustomMemo}
+type
+ TTntCustomMemo = class(TCustomMemo{TNT-ALLOW TCustomMemo})
+ private
+ FLines: TWideStrings;
+ procedure SetLines(const Value: TWideStrings);
+ function GetSelText: WideString; reintroduce;
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ protected
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ property Lines: TWideStrings read FLines write SetLines;
+ end;
+
+{TNT-WARN TMemo}
+ TTntMemo = class(TTntCustomMemo)
+ published
+ property Align;
+ property Alignment;
+ property Anchors;
+{$IFDEF VER140}
+ property BevelEdges;
+ property BevelInner;
+ property BevelKind default bkNone;
+ property BevelOuter;
+{$ENDIF}
+ property BiDiMode;
+ property BorderStyle;
+ property Color;
+ property Constraints;
+ property Ctl3D;
+ property DragCursor;
+ property DragKind;
+ property DragMode;
+ property Enabled;
+ property Font;
+ property HideSelection;
+ property ImeMode;
+ property ImeName;
+ property Lines;
+ property MaxLength;
+ property OEMConvert;
+ property ParentBiDiMode;
+ property ParentColor;
+ property ParentCtl3D;
+ property ParentFont;
+ property ParentShowHint;
+ property PopupMenu;
+ property ReadOnly;
+ property ScrollBars;
+ property ShowHint;
+ property TabOrder;
+ property TabStop;
+ property Visible;
+ property WantReturns;
+ property WantTabs;
+ property WordWrap;
+ property OnChange;
+ property OnClick;
+ property OnContextPopup;
+ property OnDblClick;
+ property OnDragDrop;
+ property OnDragOver;
+ property OnEndDock;
+ property OnEndDrag;
+ property OnEnter;
+ property OnExit;
+ property OnKeyDown;
+ property OnKeyPress;
+ property OnKeyUp;
+ property OnMouseDown;
+ property OnMouseMove;
+ property OnMouseUp;
+ property OnStartDock;
+ property OnStartDrag;
+ end;
+
+ TTntComboBoxStrings = class(TWideStrings)
+ protected
+ function Get(Index: Integer): WideString; override;
+ function GetCount: Integer; override;
+ function GetObject(Index: Integer): TObject; override;
+{$IFDEF JCL}
+ procedure Put(Index: Integer; const S: WideString); override;
+{$ENDIF}
+ procedure PutObject(Index: Integer; AObject: TObject); override;
+ procedure SetUpdateState(Updating: Boolean); override;
+ public
+ ComboBox: TCustomComboBox{TNT-ALLOW TCustomComboBox};
+ function Add(const S: WideString): Integer; override;
+ procedure Clear; override;
+ procedure Delete(Index: Integer); override;
+ function IndexOf(const S: WideString): Integer; override;
+ procedure Insert(Index: Integer; const S: WideString); override;
+ end;
+
+type
+ ITntComboBox = interface
+ function GetItems: TWideStrings;
+ procedure SetItems(const Value: TWideStrings);
+ function GetSelLength: Integer;
+ function GetSelStart: Integer;
+ function GetSelText: WideString;
+ procedure SetSelLength(Value: Integer);
+ procedure SetSelStart(Value: Integer);
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ function GetItemIndex: Integer;
+ procedure SetItemIndex(const Value: Integer);
+ //--
+ property SelLength: Integer read GetSelLength write SetSelLength;
+ property SelStart: Integer read GetSelStart write SetSelStart;
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ property Items: TWideStrings read GetItems write SetItems;
+ property ItemIndex: Integer read GetItemIndex write SetItemIndex;
+ end;
+
+{TNT-WARN TCustomComboBox}
+type
+ TTntCustomComboBox = class(TCustomComboBox{TNT-ALLOW TCustomComboBox}, ITntComboBox)
+ private
+ FItems: TWideStrings;
+ function GetItems: TWideStrings;
+ procedure SetItems(const Value: TWideStrings); reintroduce;
+ function GetSelLength: Integer;
+ procedure SetSelLength(Value: Integer);
+ function GetSelStart: Integer;
+ procedure SetSelStart(Value: Integer);
+ function GetSelText: WideString;
+ procedure SetSelText(const Value: WideString);
+ function GetText: WideString;
+ procedure SetText(const Value: WideString);
+ function GetItemIndex: Integer; reintroduce;
+ procedure SetItemIndex(const Value: Integer); reintroduce;
+
+ procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
+ protected
+ procedure DoEditCharMsg(var Message: TWMChar); virtual;
+ procedure CreateWnd; override;
+ procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
+ ComboProc: Pointer); override;
+ procedure KeyPress(var Key: AnsiChar); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ public
+ property SelText: WideString read GetSelText write SetSelText;
+ property Text: WideString read GetText write SetText;
+ property Items: TWideStrings read GetItems write SetItems;
+ end;
+
+{TNT-WARN TComboBox}
+ TTntComboBox = class(TTntCustomComboBox)
+ published
+{$IFDEF VER140}
+ property AutoComplete default True;
+ property AutoDropDown default False;
+ property BevelEdges;
+ property BevelInner;
+ property BevelKind default bkNone;
+ property BevelOuter;
+{$ENDIF}
+ property Style; {Must be published before Items}
+ property Anchors;
+ property BiDiMode;
+{$IFDEF VER140}
+ property CharCase;
+{$ENDIF}
+ property Color;
+ property Constraints;
+ property Ctl3D;
+ property DragCursor;
+ property DragKind;
+ property DragMode;
+ property DropDownCount;
+ property Enabled;
+ property Font;
+ property ImeMode;
+ property ImeName;
+ property ItemHeight;
+{$IFDEF VER140}
+ property ItemIndex default -1;
+{$ENDIF}
+ property MaxLength;
+ property ParentBiDiMode;
+ property ParentColor;
+ property ParentCtl3D;
+ property ParentFont;
+ property ParentShowHint;
+ property PopupMenu;
+ property ShowHint;
+ property Sorted;
+ property TabOrder;
+ property TabStop;
+ property Text;
+ property Visible;
+ property OnChange;
+ property OnClick;
+{$IFDEF VER140}
+ property OnCloseUp;
+{$ENDIF}
+ property OnContextPopup;
+ property OnDblClick;
+ property OnDragDrop;
+ property OnDragOver;
+ property OnDrawItem;
+ property OnDropDown;
+ property OnEndDock;
+ property OnEndDrag;
+ property OnEnter;
+ property OnExit;
+ property OnKeyDown;
+ property OnKeyPress;
+ property OnKeyUp;
+ property OnMeasureItem;
+{$IFDEF VER140}
+ property OnSelect;
+{$ENDIF}
+ property OnStartDock;
+ property OnStartDrag;
+ property Items; { Must be published after OnMeasureItem }
+ end;
+
+{TNT-WARN TCustomListBox}
+type
+ TTntCustomListBox = class(TCustomListBox{TNT-ALLOW TCustomListBox})
+ private
+ FItems: TWideStrings;
+ procedure SetItems(const Value: TWideStrings);
+ protected
+ procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ published
+ property Items: TWideStrings read FItems write SetItems;
+ end;
+
+{TNT-WARN TListBox}
+ TTntListBox = class(TTntCustomListBox)
+ published
+{$IFDEF VER140}
+ property Style;
+ property AutoComplete;
+{$ENDIF}
+ property Align;
+ property Anchors;
+{$IFDEF VER140}
+ property BevelEdges;
+ property BevelInner;
+ property BevelKind default bkNone;
+ property BevelOuter;
+{$ENDIF}
+ property BiDiMode;
+ property BorderStyle;
+ property Color;
+ property Columns;
+ property Constraints;
+ property Ctl3D;
+ property DragCursor;
+ property DragKind;
+ property DragMode;
+ property Enabled;
+ property ExtendedSelect;
+ property Font;
+ property ImeMode;
+ property ImeName;
+ property IntegralHeight;
+ property ItemHeight;
+ property Items;
+ property MultiSelect;
+ property ParentBiDiMode;
+ property ParentColor;
+ property ParentCtl3D;
+ property ParentFont;
+ property ParentShowHint;
+ property PopupMenu;
+{$IFDEF VER140}
+ property ScrollWidth;
+{$ENDIF}
+ property ShowHint;
+ property Sorted;
+{$IFDEF VER130}
+ property Style;
+{$ENDIF}
+ property TabOrder;
+ property TabStop;
+ property TabWidth;
+ property Visible;
+ property OnClick;
+ property OnContextPopup;
+{$IFDEF VER140}
+ property OnData;
+ property OnDataFind;
+ property OnDataObject;
+{$ENDIF}
+ property OnDblClick;
+ property OnDragDrop;
+ property OnDragOver;
+ property OnDrawItem;
+ property OnEndDock;
+ property OnEndDrag;
+ property OnEnter;
+ property OnExit;
+ property OnKeyDown;
+ property OnKeyPress;
+ property OnKeyUp;
+ property OnMeasureItem;
+ property OnMouseDown;
+ property OnMouseMove;
+ property OnMouseUp;
+ property OnStartDock;
+ property OnStartDrag;
+ end;
+
+{TNT-WARN TCheckListBox}
+ TTntCheckListBox = class(TCheckListBox{TNT-ALLOW TCheckListBox})
+ private
+ FItems: TWideStrings;
+ procedure SetItems(const Value: TWideStrings);
+ procedure DrawItemStub(Control: TWinControl; Index: Integer; Rect: TRect;
+ State: TOwnerDrawState);
+ protected
+ procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure CreateWindowHandle(const Params: TCreateParams); override;
+ published
+ property Items: TWideStrings read FItems write SetItems;
+ end;
+
+procedure Register;
+
+implementation
+
+uses Forms, SysUtils, Consts,
+{$IFDEF VER140}
+ RTLConsts,
+{$ENDIF}
+ TntControls, TntForms, TntClasses;
+
+{$R *.dcr}
+
+procedure Register;
+begin
+ RegisterComponents('Tnt', [TTntEdit, TTntComboBox, TTntListBox, TTntMemo,
+ TTntCheckListBox]);
+end;
+
+type
+ TTntMemoStrings = class(TWideStrings)
+ private
+ Memo: TTntCustomMemo;
+ protected
+ function Get(Index: Integer): WideString; override;
+ function GetCount: Integer; override;
+{$IFDEF JCL}
+ function GetText: WideString; override;
+ procedure SetText(const Value: WideString); override;
+ procedure PutObject(Index: Integer; AObject: TObject); override;
+{$ELSE}
+ function GetTextStr: WideString; override;
+ procedure SetTextStr(const Value: WideString); override;
+{$ENDIF}
+ procedure Put(Index: Integer; const S: WideString); override;
+ procedure SetUpdateState(Updating: Boolean); override;
+ public
+ procedure Clear; override;
+ procedure Delete(Index: Integer); override;
+ procedure Insert(Index: Integer; const S: WideString); override;
+ end;
+
+ TAccessCustomListBox = class(TCustomListBox{TNT-ALLOW TCustomListBox});
+
+ TTntListBoxStrings = class(TWideStrings)
+ private
+ ListBox: TAccessCustomListBox;
+ protected
+ procedure Put(Index: Integer; const S: WideString); override;
+ function Get(Index: Integer): WideString; override;
+ function GetCount: Integer; override;
+ function GetObject(Index: Integer): TObject; override;
+ procedure PutObject(Index: Integer; AObject: TObject); override;
+ procedure SetUpdateState(Updating: Boolean); override;
+ public
+ function Add(const S: WideString): Integer; override;
+ procedure Clear; override;
+ procedure Delete(Index: Integer); override;
+ procedure Exchange(Index1, Index2: Integer); override;
+ function IndexOf(const S: WideString): Integer; override;
+ procedure Insert(Index: Integer; const S: WideString); override;
+ procedure Move(CurIndex, NewIndex: Integer); override;
+ end;
+
+{ TTntCustomEdit }
+
+procedure TTntCustomEdit.CreateWindowHandle(const Params: TCreateParams);
+begin
+ if SysLocale.FarEast and (Win32Platform <> VER_PLATFORM_WIN32_NT)
+ and ((Params.Style and ES_READONLY) <> 0) then
+ inherited
+ else
+ CreateUnicodeHandle(Self, Params, 'EDIT');
+end;
+
+function TTntCustomEdit.GetSelText: WideString;
+begin
+ if (not IsWindowUnicode(Handle)) then
+ Result := inherited SelText
+ else
+ Result := Copy(Text, SelStart + 1, SelLength);
+end;
+
+procedure TTntCustomEdit.SetSelText(const Value: WideString);
+begin
+ if (not IsWindowUnicode(Handle)) then
+ inherited SelText := Value
+ else
+ SendMessageW(Handle, EM_REPLACESEL, 0, Longint(PWideChar(Value)));
+end;
+
+function TTntCustomEdit.GetText: WideString;
+begin
+ result := WideGetWindowText(Self);
+end;
+
+procedure TTntCustomEdit.SetText(const Value: WideString);
+begin
+ WideSetWindowText(Self, Value);
+end;
+
+{ TTntMemoStrings }
+
+function TTntMemoStrings.GetCount: Integer;
+begin
+ result := TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.Count;
+end;
+
+function MemoLineLengthW(Handle: THandle; Index: Integer): Integer;
+var
+ SelStart: Integer;
+begin
+ SelStart := SendMessageW(Handle, EM_LINEINDEX, Index, 0);
+ if SelStart < 0 then
+ result := 0
+ else
+ result := SendMessageW(Handle, EM_LINELENGTH, SelStart, 0);
+end;
+
+function TTntMemoStrings.Get(Index: Integer): WideString;
+var
+ Len: Integer;
+begin
+ if (not IsWindowUnicode(Memo.Handle)) then
+ result := TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines[Index]
+ else begin
+ SetLength(Result, MemoLineLengthW(Memo.Handle, Index));
+ if Length(Result) > 0 then begin
+ Word((PWideChar(Result))^) := Length(Result);
+ Len := SendMessageW(Memo.Handle, EM_GETLINE, Index, Longint(PWideChar(Result)));
+ SetLength(Result, Len);
+ end;
+ end;
+end;
+
+procedure TTntMemoStrings.Put(Index: Integer; const S: WideString);
+var
+ SelStart: Integer;
+begin
+ if (not IsWindowUnicode(Memo.Handle)) then
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines[Index] := S
+ else begin
+ SelStart := SendMessageW(Memo.Handle, EM_LINEINDEX, Index, 0);
+ if SelStart >= 0 then
+ begin
+ SendMessageW(Memo.Handle, EM_SETSEL, SelStart, SelStart + MemoLineLengthW(Memo.Handle, Index));
+ SendMessageW(Memo.Handle, EM_REPLACESEL, 0, Longint(PWideChar(S)));
+ end;
+ end;
+end;
+
+procedure TTntMemoStrings.Insert(Index: Integer; const S: Widestring);
+var
+ SelStart, LineLen: Integer;
+ Line: WideString;
+begin
+ if (not IsWindowUnicode(Memo.Handle)) then
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.Insert(Index, S)
+ else begin
+ if Index >= 0 then
+ begin
+ SelStart := SendMessageW(Memo.Handle, EM_LINEINDEX, Index, 0);
+ if SelStart >= 0 then
+ Line := S + #13#10
+ else begin
+ SelStart := SendMessageW(Memo.Handle, EM_LINEINDEX, Index - 1, 0);
+ LineLen := MemoLineLengthW(Memo.Handle, Index - 1);
+ if LineLen = 0 then
+ Exit;
+ Inc(SelStart, LineLen);
+ Line := #13#10 + s;
+ end;
+ SendMessageW(Memo.Handle, EM_SETSEL, SelStart, SelStart);
+ SendMessageW(Memo.Handle, EM_REPLACESEL, 0, Longint(PWideChar(Line)));
+ end;
+ end;
+end;
+
+procedure TTntMemoStrings.Delete(Index: Integer);
+begin
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.Delete(Index);
+end;
+
+procedure TTntMemoStrings.Clear;
+begin
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.Clear;
+end;
+
+procedure TTntMemoStrings.SetUpdateState(Updating: Boolean);
+begin
+ if Updating then
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.BeginUpdate
+ else
+ TCustomMemo{TNT-ALLOW TCustomMemo}(Memo).Lines.EndUpdate
+end;
+
+{$IFDEF JCL}
+function TTntMemoStrings.GetText: WideString;
+{$ELSE}
+function TTntMemoStrings.GetTextStr: WideString;
+{$ENDIF}
+begin
+ Result := Memo.Text;
+end;
+
+{$IFDEF JCL}
+procedure TTntMemoStrings.SetText(const Value: WideString);
+{$ELSE}
+procedure TTntMemoStrings.SetTextStr(const Value: WideString);
+{$ENDIF}
+begin
+ Memo.Text := TntAdjustLineBreaks(Value);
+end;
+
+{$IFDEF JCL}
+procedure TTntMemoStrings.PutObject(Index: Integer; AObject: TObject);
+begin
+ JCL_WideStrings_PutObject(Self, Index, AObject);
+end;
+{$ENDIF}
+
+{ TTntCustomMemo }
+
+constructor TTntCustomMemo.Create(AOwner: TComponent);
+begin
+ inherited;
+ FLines := TTntMemoStrings.Create;
+ TTntMemoStrings(FLines).Memo := Self;
+end;
+
+destructor TTntCustomMemo.Destroy;
+begin
+ FreeAndNil(FLines);
+ inherited;
+end;
+
+procedure TTntCustomMemo.SetLines(const Value: TWideStrings);
+begin
+ FLines.Assign(Value);
+end;
+
+procedure TTntCustomMemo.CreateWindowHandle(const Params: TCreateParams);
+begin
+ if SysLocale.FarEast and (Win32Platform <> VER_PLATFORM_WIN32_NT)
+ and ((Params.Style and ES_READONLY) <> 0) then
+ inherited
+ else
+ CreateUnicodeHandle(Self, Params, 'EDIT');
+end;
+
+function TTntCustomMemo.GetSelText: WideString;
+begin
+ if (not IsWindowUnicode(Handle)) then
+ Result := inherited SelText
+ else
+ Result := Copy(Text, SelStart + 1, SelLength);
+end;
+
+procedure TTntCustomMemo.SetSelText(const Value: WideString);
+begin
+ if (not IsWindowUnicode(Handle)) then
+ inherited SelText := Value
+ else
+ SendMessageW(Handle, EM_REPLACESEL, 0, Longint(PWideChar(Value)));
+end;
+
+function TTntCustomMemo.GetText: WideString;
+begin
+ result := WideGetWindowText(Self);
+end;
+
+procedure TTntCustomMemo.SetText(const Value: WideString);
+begin
+ WideSetWindowText(Self, Value);
+end;
+
+{ TTntComboBoxStrings }
+
+function TTntComboBoxStrings.GetCount: Integer;
+begin
+ Result := ComboBox.Items.Count;
+end;
+
+function TTntComboBoxStrings.Get(Index: Integer): WideString;
+var
+ Len: Integer;
+begin
+ if (not IsWindowUnicode(ComboBox.Handle)) then
+ result := ComboBox.Items[Index]
+ else begin
+ Len := SendMessageW(ComboBox.Handle, CB_GETLBTEXTLEN, Index, 0);
+ if Len = CB_ERR then
+ Result := ''
+ else begin
+ SetLength(Result, Len + 1);
+ Len := SendMessageW(ComboBox.Handle, CB_GETLBTEXT, Index, Longint(PWideChar(Result)));
+ if Len = CB_ERR then
+ Result := ''
+ else
+ Result := PWideChar(Result);
+ end;
+ end;
+end;
+
+function TTntComboBoxStrings.GetObject(Index: Integer): TObject;
+begin
+ result := ComboBox.Items.Objects[Index];
+end;
+
+{$IFDEF JCL}
+procedure TTntComboBoxStrings.Put(Index: Integer; const S: WideString);
+begin
+ JCL_WideStrings_Put(Self, Index, S);
+end;
+{$ENDIF}
+
+procedure TTntComboBoxStrings.PutObject(Index: Integer; AObject: TObject);
+begin
+ ComboBox.Items.Objects[Index] := AObject;
+end;
+
+function TTntComboBoxStrings.Add(const S: WideString): Integer;
+begin
+ if (not IsWindowUnicode(ComboBox.Handle)) then
+ result := ComboBox.Items.Add(S)
+ else begin
+ Result := SendMessageW(ComboBox.Handle, CB_ADDSTRING, 0, Longint(PWideChar(S)));
+ if Result < 0 then
+ raise EOutOfResources.Create(SInsertLineError);
+ end;
+end;
+
+procedure TTntComboBoxStrings.Insert(Index: Integer; const S: WideString);
+begin
+ if (not IsWindowUnicode(ComboBox.Handle)) then
+ ComboBox.Items.Insert(Index, S)
+ else begin
+ if SendMessageW(ComboBox.Handle, CB_INSERTSTRING, Index, Longint(PWideChar(S))) < 0 then
+ raise EOutOfResources.Create(SInsertLineError);
+ end;
+end;
+
+procedure TTntComboBoxStrings.Delete(Index: Integer);
+begin
+ ComboBox.Items.Delete(Index);
+end;
+
+procedure TTntComboBoxStrings.Clear;
+var
+ S: WideString;
+begin
+ S := WideGetWindowText(ComboBox);
+ SendMessage(ComboBox.Handle, CB_RESETCONTENT, 0, 0);
+ WideSetWindowText(ComboBox, S);
+ ComboBox.Update;
+end;
+
+procedure TTntComboBoxStrings.SetUpdateState(Updating: Boolean);
+begin
+ if Updating then
+ ComboBox.Items.BeginUpdate
+ else
+ ComboBox.Items.EndUpdate
+end;
+
+function TTntComboBoxStrings.IndexOf(const S: WideString): Integer;
+begin
+ if (not IsWindowUnicode(ComboBox.Handle)) then
+ result := ComboBox.Items.IndexOf(S)
+ else
+ Result := SendMessageW(ComboBox.Handle, CB_FINDSTRINGEXACT, -1, LongInt(PWideChar(S)));
+end;
+
+{ TTntCustomComboBox }
+
+constructor TTntCustomComboBox.Create(AOwner: TComponent);
+begin
+ inherited;
+ FItems := TTntComboBoxStrings.Create;
+ TTntComboBoxStrings(FItems).ComboBox := Self;
+end;
+
+destructor TTntCustomComboBox.Destroy;
+begin
+ FreeAndNil(FItems);
+ inherited;
+end;
+
+procedure TTntCustomComboBox.CreateWindowHandle(const Params: TCreateParams);
+begin
+ CreateUnicodeHandle(Self, Params, 'COMBOBOX');
+end;
+
+procedure TTntCustomComboBox.CreateWnd;
+begin
+ inherited;
+ if Win32Platform = VER_PLATFORM_WIN32_NT then begin
+ if ListHandle <> 0 then
+ SetWindowLongW(ListHandle, GWL_WNDPROC, GetWindowLong(ListHandle, GWL_WNDPROC));
+ SetWindowLongW(EditHandle, GWL_WNDPROC, GetWindowLong(EditHandle, GWL_WNDPROC));
+ end;
+end;
+
+procedure TTntCustomComboBox.ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
+ ComboProc: Pointer);
+begin
+ if (not IsWindowUnicode(ComboWnd)) then begin
+ if Message.Msg = WM_CHAR then
+ DoEditCharMsg(TWMKey(Message));
+ inherited;
+ end else begin
+ try
+ // UNICODE
+ if IsTextMessage(Message.Msg) then
+ with Message do
+ Result := CallWindowProcW(ComboProc, ComboWnd, Msg, WParam, LParam)
+ else if Message.Msg = WM_CHAR then begin
+ MakeWMCharMsgSafeForAnsi(Message);
+ DoEditCharMsg(TWMKey(Message));
+ if DoKeyPress(TWMKey(Message)) then Exit;
+ RestoreWMCharMsg(Message);
+ with TWMKey(Message) do begin
+ if ((CharCode = VK_RETURN) or (CharCode = VK_ESCAPE)) and DroppedDown then
+ begin
+ DroppedDown := False;
+ Exit;
+ end;
+ end;
+ with Message do
+ Result := CallWindowProcW(ComboProc, ComboWnd, Msg, WParam, LParam)
+ end else if not HandleIMEComposition(ComboWnd, Message) then
+ inherited;
+ except
+ Application.HandleException(Self);
+ end;
+ end;
+end;
+
+procedure TTntCustomComboBox.KeyPress(var Key: AnsiChar);
+begin
+ { Don't call inherited for VK_BACK and Delphi 6. This combo's text will be copied to an
+ AnsiString, last char deleted, and the AnsiString will be reassigned to this combo.
+ This will drop all Unicode chars. }
+ if Ord(Key) <> VK_BACK then
+ inherited
+ else if Assigned(OnKeyPress) then
+ OnKeyPress(Self, Key);
+end;
+
+function TTntCustomComboBox.GetItems: TWideStrings;
+begin
+ result := FItems;
+end;
+
+procedure TTntCustomComboBox.SetItems(const Value: TWideStrings);
+begin
+ FItems.Assign(Value);
+end;
+
+function TTntCustomComboBox.GetSelText: WideString;
+begin
+ if (not IsWindowUnicode(Handle)) then
+ Result := inherited SelText
+ else begin
+ Result := '';
+ if Style < csDropDownList then
+ Result := Copy(Text, SelStart + 1, SelLength);
+ end;
+end;
+
+procedure TTntCustomComboBox.SetSelText(const Value: WideString);
+begin
+ if (not IsWindowUnicode(Handle)) then
+ inherited SelText := Value
+ else begin
+ if Style < csDropDownList then
+ begin
+ HandleNeeded;
+ SendMessageW(EditHandle, EM_REPLACESEL, 0, Longint(PWideChar(Value)));
+ end;
+ end;
+end;
+
+function TTntCustomComboBox.GetText: WideString;
+begin
+ result := WideGetWindowText(Self);
+end;
+
+procedure TTntCustomComboBox.SetText(const Value: WideString);
+begin
+ WideSetWindowText(Self, Value);
+end;
+
+procedure TTntCustomComboBox.CNCommand(var Message: TWMCommand);
+begin
+ if Message.NotifyCode <> CBN_SELCHANGE then
+ inherited
+ else begin
+ Text := Items[ItemIndex];
+ Click;
+ Change;
+ end;
+end;
+
+procedure TTntCustomComboBox.DoEditCharMsg(var Message: TWMChar);
+begin
+end;
+
+function TTntCustomComboBox.GetSelLength: Integer;
+begin
+ result := SelLength;
+end;
+
+procedure TTntCustomComboBox.SetSelLength(Value: Integer);
+begin
+ SelLength := Value;
+end;
+
+function TTntCustomComboBox.GetSelStart: Integer;
+begin
+ result := SelStart;
+end;
+
+procedure TTntCustomComboBox.SetSelStart(Value: Integer);
+begin
+ SelStart := Value;
+end;
+
+function TTntCustomComboBox.GetItemIndex: Integer;
+begin
+ result := ItemIndex;
+end;
+
+procedure TTntCustomComboBox.SetItemIndex(const Value: Integer);
+begin
+ ItemIndex := Value;
+end;
+
+{ TTntListBoxStrings }
+
+function TTntListBoxStrings.GetCount: Integer;
+begin
+ Result := ListBox.Items.Count;
+end;
+
+function TTntListBoxStrings.Get(Index: Integer): WideString;
+var
+ Len: Integer;
+begin
+ if (not IsWindowUnicode(ListBox.Handle)) then
+ result := ListBox.Items[Index]
+ else begin
+ Len := SendMessageW(ListBox.Handle, LB_GETTEXTLEN, Index, 0);
+ if Len = LB_ERR then
+ Error(SListIndexError, Index)
+ else begin
+ SetLength(Result, Len + 1);
+ Len := SendMessageW(ListBox.Handle, LB_GETTEXT, Index, Longint(PWideChar(Result)));
+ if Len = LB_ERR then
+ Result := ''
+ else
+ Result := PWideChar(Result);
+ end;
+ end;
+end;
+
+function TTntListBoxStrings.GetObject(Index: Integer): TObject;
+begin
+ result := ListBox.Items.Objects[Index];
+end;
+
+procedure TTntListBoxStrings.Put(Index: Integer; const S: WideString);
+var
+ I: Integer;
+ TempData: Longint;
+begin
+ I := ListBox.ItemIndex;
+ TempData := ListBox.InternalGetItemData(Index);
+ // Set the Item to 0 in case it is an object that gets freed during Delete
+ ListBox.InternalSetItemData(Index, 0);
+ Delete(Index);
+ InsertObject(Index, S, nil);
+ ListBox.InternalSetItemData(Index, TempData);
+ ListBox.ItemIndex := I;
+end;
+
+procedure TTntListBoxStrings.PutObject(Index: Integer; AObject: TObject);
+begin
+ ListBox.Items.Objects[Index] := AObject;
+end;
+
+function TTntListBoxStrings.Add(const S: WideString): Integer;
+begin
+ if (not IsWindowUnicode(ListBox.Handle)) then
+ result := ListBox.Items.Add(S)
+ else begin
+ Result := SendMessageW(ListBox.Handle, LB_ADDSTRING, 0, Longint(PWideChar(S)));
+ if Result < 0 then
+ raise EOutOfResources.Create(SInsertLineError);
+ end;
+end;
+
+procedure TTntListBoxStrings.Insert(Index: Integer; const S: WideString);
+begin
+ if (not IsWindowUnicode(ListBox.Handle)) then
+ ListBox.Items.Insert(Index, S)
+ else begin
+ if SendMessageW(ListBox.Handle, LB_INSERTSTRING, Index, Longint(PWideChar(S))) < 0 then
+ raise EOutOfResources.Create(SInsertLineError);
+ end;
+end;
+
+procedure TTntListBoxStrings.Delete(Index: Integer);
+begin
+ ListBox.DeleteString(Index);
+end;
+
+procedure TTntListBoxStrings.Exchange(Index1, Index2: Integer);
+var
+ TempData: Longint;
+ TempString: WideString;
+begin
+ BeginUpdate;
+ try
+ TempString := Strings[Index1];
+ TempData := ListBox.InternalGetItemData(Index1);
+ Strings[Index1] := Strings[Index2];
+ ListBox.InternalSetItemData(Index1, ListBox.InternalGetItemData(Index2));
+ Strings[Index2] := TempString;
+ ListBox.InternalSetItemData(Index2, TempData);
+ if ListBox.ItemIndex = Index1 then
+ ListBox.ItemIndex := Index2
+ else if ListBox.ItemIndex = Index2 then
+ ListBox.ItemIndex := Index1;
+ finally
+ EndUpdate;
+ end;
+end;
+
+procedure TTntListBoxStrings.Clear;
+begin
+ ListBox.ResetContent;
+end;
+
+procedure TTntListBoxStrings.SetUpdateState(Updating: Boolean);
+begin
+ if Updating then
+ ListBox.Items.BeginUpdate
+ else
+ ListBox.Items.EndUpdate
+end;
+
+function TTntListBoxStrings.IndexOf(const S: WideString): Integer;
+begin
+ if (not IsWindowUnicode(ListBox.Handle)) then
+ result := ListBox.Items.IndexOf(S)
+ else
+ Result := SendMessageW(ListBox.Handle, LB_FINDSTRINGEXACT, -1, LongInt(PWideChar(S)));
+end;
+
+procedure TTntListBoxStrings.Move(CurIndex, NewIndex: Integer);
+var
+ TempData: Longint;
+ TempString: WideString;
+begin
+ BeginUpdate;
+ ListBox.FMoving := True;
+ try
+ if CurIndex <> NewIndex then
+ begin
+ TempString := Get(CurIndex);
+ TempData := ListBox.InternalGetItemData(CurIndex);
+ ListBox.InternalSetItemData(CurIndex, 0);
+ Delete(CurIndex);
+ Insert(NewIndex, TempString);
+ ListBox.InternalSetItemData(NewIndex, TempData);
+ end;
+ finally
+ ListBox.FMoving := False;
+ EndUpdate;
+ end;
+end;
+
+{ TTntCustomListBox }
+
+constructor TTntCustomListBox.Create(AOwner: TComponent);
+begin
+ inherited;
+ FItems := TTntListBoxStrings.Create;
+ TTntListBoxStrings(FItems).ListBox := TAccessCustomListBox(Self as TCustomListBox{TNT-ALLOW TCustomListBox});
+end;
+
+destructor TTntCustomListBox.Destroy;
+begin
+ FreeAndNil(FItems);
+ inherited;
+end;
+
+procedure TTntCustomListBox.CreateWindowHandle(const Params: TCreateParams);
+begin
+ CreateUnicodeHandle(Self, Params, 'LISTBOX');
+end;
+
+procedure TTntCustomListBox.SetItems(const Value: TWideStrings);
+begin
+ FItems.Assign(Value);
+end;
+
+procedure TTntCustomListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
+var
+ Flags: Longint;
+begin
+ if Assigned(OnDrawItem) then OnDrawItem(Self, Index, Rect, State) else
+ begin
+ Canvas.FillRect(Rect);
+ if Index < Items.Count then
+ begin
+ Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
+ if not UseRightToLeftAlignment then
+ Inc(Rect.Left, 2)
+ else
+ Dec(Rect.Right, 2);
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ DrawTextW(Canvas.Handle, PWideChar(Items[Index]), Length(Items[Index]), Rect, Flags)
+ else begin
+ DrawTextA(Canvas.Handle, PAnsiChar(inherited Items[Index]), Length(inherited Items[Index]), Rect, Flags)
+ end;
+ end;
+ end;
+end;
+
+{ TTntCheckListBox }
+
+constructor TTntCheckListBox.Create(AOwner: TComponent);
+begin
+ inherited;
+ FItems := TTntListBoxStrings.Create;
+ TTntListBoxStrings(FItems).ListBox := TAccessCustomListBox(Self as TCustomListBox{TNT-ALLOW TCustomListBox});
+end;
+
+destructor TTntCheckListBox.Destroy;
+begin
+ FreeAndNil(FItems);
+ inherited;
+end;
+
+procedure TTntCheckListBox.CreateWindowHandle(const Params: TCreateParams);
+begin
+ CreateUnicodeHandle(Self, Params, 'LISTBOX');
+end;
+
+procedure TTntCheckListBox.SetItems(const Value: TWideStrings);
+begin
+ FItems.Assign(Value);
+end;
+
+procedure TTntCheckListBox.DrawItemStub(Control: TWinControl; Index: Integer; Rect: TRect;
+ State: TOwnerDrawState);
+begin
+end;
+
+procedure TTntCheckListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
+var
+ Flags: Longint;
+ SaveEvent: TDrawItemEvent;
+begin
+ if Assigned(OnDrawItem) then OnDrawItem(Self, Index, Rect, State) else
+ begin
+ SaveEvent := OnDrawItem;
+ try
+ OnDrawItem := DrawItemStub;
+ inherited;
+ finally
+ OnDrawItem := SaveEvent;
+ end;
+ Canvas.FillRect(Rect);
+ if Index < Items.Count then
+ begin
+ Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
+ if not UseRightToLeftAlignment then
+ Inc(Rect.Left, 2)
+ else
+ Dec(Rect.Right, 2);
+ if Win32Platform = VER_PLATFORM_WIN32_NT then
+ DrawTextW(Canvas.Handle, PWideChar(Items[Index]), Length(Items[Index]), Rect, Flags)
+ else begin
+ DrawTextA(Canvas.Handle, PAnsiChar(inherited Items[Index]), Length(inherited Items[Index]), Rect, Flags)
+ end;
+ end;
+ end;
+end;
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dof b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dof
new file mode 100644
index 0000000..04b0575
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dof
@@ -0,0 +1,82 @@
+[Compiler]
+A=1
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=1
+R=1
+S=0
+T=1
+U=0
+V=1
+W=0
+X=1
+Y=0
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=Tnt Unicode VCL
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+[Language]
+ActiveLang=
+ProjectLang=$00000409
+RootDir=
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=1
+MajorVer=0
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=0.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dpk b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dpk
new file mode 100644
index 0000000..f5697c6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.dpk
@@ -0,0 +1,44 @@
+package TntUnicodeVcl_D50;
+
+{$R *.RES}
+{$ALIGN ON}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS ON}
+{$RANGECHECKS ON}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS ON}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'Tnt Unicode VCL'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ vcl50,
+ Vclx50,
+ Vcldb50;
+
+contains
+ Unicode in 'Unicode.pas',
+ TntComCtrls in 'TntComCtrls.pas',
+ TntControls in 'TntControls.pas',
+ TntDBCtrls in 'TntDBCtrls.pas',
+ TntForms in 'TntForms.pas' {TntForm},
+ TntStdCtrls in 'TntStdCtrls.pas',
+ TntClasses in 'TntClasses.pas',
+ TntForms_Design in 'TntForms_Design.pas';
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.res b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.res
new file mode 100644
index 0000000..def7d6f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D50.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dof b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dof
new file mode 100644
index 0000000..991df10
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dof
@@ -0,0 +1,87 @@
+[FileVersion]
+Version=6.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=1
+R=1
+S=0
+T=1
+U=0
+V=1
+W=0
+X=1
+Y=0
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=Tnt Unicode VCL
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=$00000409
+RootDir=
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=1
+MajorVer=0
+MinorVer=0
+Release=0
+Build=10
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=0.0.0.10
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dpk b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dpk
new file mode 100644
index 0000000..ed7a911
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.dpk
@@ -0,0 +1,43 @@
+package TntUnicodeVcl_D60;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS ON}
+{$RANGECHECKS ON}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS ON}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'Tnt Unicode VCL'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ vcl,
+ vclx,
+ vcldb;
+
+contains
+ Unicode in 'Unicode.pas',
+ TntComCtrls in 'TntComCtrls.pas',
+ TntControls in 'TntControls.pas',
+ TntDBCtrls in 'TntDBCtrls.pas',
+ TntForms in 'TntForms.pas' {TntForm},
+ TntStdCtrls in 'TntStdCtrls.pas',
+ TntClasses in 'TntClasses.pas';
+
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.res b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.res
new file mode 100644
index 0000000..43464f6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/TntUnicodeVcl_D60.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.hpp b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.hpp
new file mode 100644
index 0000000..1e4d580
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.hpp
@@ -0,0 +1,657 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'Unicode.pas' rev: 5.00
+
+#ifndef UnicodeHPP
+#define UnicodeHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <Classes.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Unicode
+{
+//-- type declarations -------------------------------------------------------
+typedef char UTF7;
+
+typedef char UTF8;
+
+typedef wchar_t UTF16;
+
+typedef unsigned UTF32;
+
+typedef unsigned *PUCS4;
+
+typedef unsigned UCS4;
+
+typedef wchar_t *PUCS2;
+
+typedef wchar_t UCS2;
+
+typedef unsigned *PCardinal;
+
+#pragma option push -b-
+enum Unicode__1 { sfCaseSensitive, sfIgnoreNonSpacing, sfSpaceCompress, sfWholeWordOnly };
+#pragma option pop
+
+typedef Set<Unicode__1, sfCaseSensitive, sfWholeWordOnly> TSearchFlags;
+
+class DELPHICLASS TSearchEngine;
+class DELPHICLASS TWideStrings;
+typedef void __fastcall (__closure *TConfirmConversionEvent)(TWideStrings* Sender, bool &Allowed);
+
+class PASCALIMPLEMENTATION TWideStrings : public Classes::TPersistent
+{
+ typedef Classes::TPersistent inherited;
+
+private:
+ Classes::TStrings* FAnsiStrings;
+ int FUpdateCount;
+ unsigned FLanguage;
+ bool FSaved;
+ bool FSaveUnicode;
+ TConfirmConversionEvent FOnConfirmConversion;
+ WideString __fastcall GetCommaText();
+ WideString __fastcall GetName(int Index);
+ WideString __fastcall GetValue(const WideString Name);
+ void __fastcall ReadData(Classes::TReader* Reader);
+ void __fastcall SetCommaText(const WideString Value);
+ void __fastcall SetValue(const WideString Name, const WideString Value);
+ void __fastcall WriteData(Classes::TWriter* Writer);
+ void __fastcall SetAnsiStrings(const Classes::TStrings* Value);
+
+protected:
+ virtual void __fastcall DefineProperties(Classes::TFiler* Filer);
+ void __fastcall Error(const WideString Msg, int Data);
+ virtual WideString __fastcall Get(int Index) = 0 ;
+ virtual int __fastcall GetCapacity(void);
+ virtual int __fastcall GetCount(void) = 0 ;
+ virtual System::TObject* __fastcall GetObject(int Index);
+ virtual WideString __fastcall GetTextStr();
+ virtual void __fastcall Put(int Index, const WideString S);
+ virtual void __fastcall PutObject(int Index, System::TObject* AObject);
+ virtual void __fastcall SetCapacity(int NewCapacity);
+ virtual void __fastcall SetTextStr(const WideString Value);
+ virtual void __fastcall SetUpdateState(bool Updating);
+ virtual void __fastcall SetLanguage(unsigned Value);
+
+public:
+ __fastcall TWideStrings(void);
+ __fastcall virtual ~TWideStrings(void);
+ virtual int __fastcall Add(const WideString S);
+ virtual int __fastcall AddObject(const WideString S, System::TObject* AObject);
+ void __fastcall Append(const WideString S);
+ virtual void __fastcall AddStrings(Classes::TStrings* Strings)/* overload */;
+ virtual void __fastcall AddStrings(TWideStrings* Strings)/* overload */;
+ virtual void __fastcall Assign(Classes::TPersistent* Source);
+ virtual void __fastcall AssignTo(Classes::TPersistent* Dest);
+ void __fastcall BeginUpdate(void);
+ virtual void __fastcall Clear(void) = 0 ;
+ virtual void __fastcall Delete(int Index) = 0 ;
+ void __fastcall EndUpdate(void);
+ bool __fastcall Equals(TWideStrings* Strings);
+ virtual void __fastcall Exchange(int Index1, int Index2);
+ virtual wchar_t * __fastcall GetText(void);
+ virtual int __fastcall IndexOf(const WideString S);
+ int __fastcall IndexOfName(const WideString Name);
+ int __fastcall IndexOfObject(System::TObject* AObject);
+ virtual void __fastcall Insert(int Index, const WideString S) = 0 ;
+ void __fastcall InsertObject(int Index, const WideString S, System::TObject* AObject);
+ virtual void __fastcall LoadFromFile(const WideString FileName);
+ virtual void __fastcall LoadFromStream(Classes::TStream* Stream);
+ virtual void __fastcall Move(int CurIndex, int NewIndex);
+ virtual void __fastcall SaveToFile(const WideString FileName);
+ virtual void __fastcall SaveToStream(Classes::TStream* Stream);
+ virtual void __fastcall SetText(wchar_t * Text);
+ __property int Capacity = {read=GetCapacity, write=SetCapacity, nodefault};
+ __property WideString CommaText = {read=GetCommaText, write=SetCommaText};
+ __property int Count = {read=GetCount, nodefault};
+ __property unsigned Language = {read=FLanguage, write=SetLanguage, nodefault};
+ __property WideString Names[int Index] = {read=GetName};
+ __property System::TObject* Objects[int Index] = {read=GetObject, write=PutObject};
+ __property WideString Values[WideString Name] = {read=GetValue, write=SetValue};
+ __property bool Saved = {read=FSaved, nodefault};
+ __property bool SaveUnicode = {read=FSaveUnicode, write=FSaveUnicode, nodefault};
+ __property WideString Strings[int Index] = {read=Get, write=Put/*, default*/};
+ __property WideString Text = {read=GetTextStr, write=SetTextStr};
+ __property TConfirmConversionEvent OnConfirmConversion = {read=FOnConfirmConversion, write=FOnConfirmConversion
+ };
+
+__published:
+ __property Classes::TStrings* AnsiStrings = {read=FAnsiStrings, write=SetAnsiStrings, stored=false}
+ ;
+};
+
+
+class PASCALIMPLEMENTATION TSearchEngine : public System::TObject
+{
+ typedef System::TObject inherited;
+
+private:
+ Classes::TList* FResults;
+ TWideStrings* FOwner;
+
+protected:
+ virtual int __fastcall GetCount(void);
+
+public:
+ __fastcall virtual TSearchEngine(TWideStrings* AOwner);
+ __fastcall virtual ~TSearchEngine(void);
+ virtual void __fastcall AddResult(unsigned Start, unsigned Stop);
+ virtual void __fastcall Clear(void);
+ virtual void __fastcall ClearResults(void);
+ virtual void __fastcall DeleteResult(unsigned Index);
+ virtual void __fastcall FindPrepare(const WideString Pattern, TSearchFlags Options) = 0 /* overload */
+ ;
+ virtual void __fastcall FindPrepare(const wchar_t * Pattern, unsigned PatternLength, TSearchFlags Options
+ ) = 0 /* overload */;
+ virtual bool __fastcall FindFirst(const WideString Text, unsigned &Start, unsigned &Stop) = 0 /* overload */
+ ;
+ virtual bool __fastcall FindFirst(const wchar_t * Text, unsigned TextLen, unsigned &Start, unsigned
+ &Stop) = 0 /* overload */;
+ virtual bool __fastcall FindAll(const WideString Text) = 0 /* overload */;
+ virtual bool __fastcall FindAll(const wchar_t * Text, unsigned TextLen) = 0 /* overload */;
+ virtual void __fastcall GetResult(unsigned Index, int &Start, int &Stop);
+ __property int Count = {read=GetCount, nodefault};
+};
+
+
+struct TUTBMChar
+{
+ unsigned LoCase;
+ unsigned UpCase;
+ unsigned TitleCase;
+} ;
+
+typedef TUTBMChar *PUTBMChar;
+
+struct TUTBMSkip;
+typedef TUTBMSkip *PUTBMSkip;
+
+struct TUTBMSkip
+{
+ TUTBMChar *BMChar;
+ int SkipValues;
+} ;
+
+class DELPHICLASS TUTBMSearch;
+class PASCALIMPLEMENTATION TUTBMSearch : public TSearchEngine
+{
+ typedef TSearchEngine inherited;
+
+private:
+ TSearchFlags FFlags;
+ TUTBMChar *FPattern;
+ unsigned FPatternUsed;
+ unsigned FPatternSize;
+ unsigned FPatternLength;
+ TUTBMSkip *FSkipValues;
+ int FSkipsUsed;
+ unsigned FMD4;
+
+protected:
+ void __fastcall ClearPattern(void);
+ void __fastcall Compile(wchar_t * Pattern, int PatternLength, TSearchFlags Flags);
+ bool __fastcall Find(wchar_t * Text, unsigned TextLen, unsigned &MatchStart, unsigned &MatchEnd);
+ unsigned __fastcall GetSkipValue(wchar_t * TextStart, wchar_t * TextEnd);
+ bool __fastcall Match(wchar_t * Text, wchar_t * Start, wchar_t * Stop, unsigned &MatchStart, unsigned
+ &MatchEnd);
+
+public:
+ __fastcall virtual TUTBMSearch(TWideStrings* AOwner);
+ __fastcall virtual ~TUTBMSearch(void);
+ virtual void __fastcall Clear(void);
+ virtual void __fastcall FindPrepare(const WideString Pattern, TSearchFlags Options)/* overload */;
+ virtual void __fastcall FindPrepare(const wchar_t * Pattern, unsigned PatternLength, TSearchFlags Options
+ )/* overload */;
+ virtual bool __fastcall FindFirst(const WideString Text, unsigned &Start, unsigned &Stop)/* overload */
+ ;
+ virtual bool __fastcall FindFirst(const wchar_t * Text, unsigned TextLen, unsigned &Start, unsigned
+ &Stop)/* overload */;
+ virtual bool __fastcall FindAll(const WideString Text)/* overload */;
+ virtual bool __fastcall FindAll(const wchar_t * Text, unsigned TextLen)/* overload */;
+};
+
+
+struct TRange
+{
+ unsigned MinCode;
+ unsigned MaxCode;
+} ;
+
+typedef TRange *PRange;
+
+typedef DynamicArray<TRange > Unicode__4;
+
+struct TCClass
+{
+ DynamicArray<TRange > Ranges;
+ int RangesUsed;
+} ;
+
+struct TSymbol
+{
+ unsigned Chr;
+ TCClass CCL;
+} ;
+
+struct TElement
+{
+ bool OnStack;
+ unsigned AType;
+ unsigned LHS;
+ unsigned RHS;
+} ;
+
+struct TStateList;
+typedef TStateList *PStateList;
+
+typedef DynamicArray<unsigned > Unicode__5;
+
+struct TStateList
+{
+ DynamicArray<unsigned > List;
+ int ListUsed;
+} ;
+
+struct TSymbolTableEntry
+{
+ unsigned ID;
+ unsigned AType;
+ unsigned Mods;
+ unsigned Props;
+ TSymbol Symbol;
+ TStateList States;
+} ;
+
+typedef TSymbolTableEntry *PSymbolTableEntry;
+
+struct TState;
+typedef TState *PState;
+
+typedef DynamicArray<TElement > Unicode__6;
+
+struct TState
+{
+ unsigned ID;
+ bool Accepting;
+ TStateList StateList;
+ DynamicArray<TElement > Transitions;
+ int TransitionsUsed;
+} ;
+
+typedef DynamicArray<TState > Unicode__7;
+
+struct TStateTable
+{
+ DynamicArray<TState > States;
+ int StatesUsed;
+} ;
+
+struct TEquivalent
+{
+ unsigned Left;
+ unsigned Right;
+} ;
+
+typedef DynamicArray<TElement > Unicode__8;
+
+struct TExpressionList
+{
+ DynamicArray<TElement > Expressions;
+ int ExpressionsUsed;
+} ;
+
+typedef DynamicArray<TSymbolTableEntry > Unicode__9;
+
+struct TSymbolTable
+{
+ DynamicArray<TSymbolTableEntry > Symbols;
+ int SymbolsUsed;
+} ;
+
+typedef DynamicArray<TEquivalent > Unicode__01;
+
+struct TEquivalentList
+{
+ DynamicArray<TEquivalent > Equivalents;
+ int EquivalentsUsed;
+} ;
+
+struct TUREBuffer;
+typedef TUREBuffer *PUREBuffer;
+
+struct TUREBuffer
+{
+ bool Reducing;
+ int Error;
+ unsigned Flags;
+ TStateList Stack;
+ TSymbolTable SymbolTable;
+ TExpressionList ExpressionList;
+ TStateTable States;
+ TEquivalentList EquivalentList;
+} ;
+
+struct TTransition
+{
+ unsigned Symbol;
+ unsigned NextState;
+} ;
+
+struct TDFAState;
+typedef TDFAState *PDFAState;
+
+struct TDFAState
+{
+ bool Accepting;
+ int NumberTransitions;
+ int StartTransition;
+} ;
+
+typedef DynamicArray<TDFAState > Unicode__11;
+
+struct TDFAStates
+{
+ DynamicArray<TDFAState > States;
+ int StatesUsed;
+} ;
+
+typedef DynamicArray<TTransition > Unicode__21;
+
+struct TTransitions
+{
+ DynamicArray<TTransition > Transitions;
+ int TransitionsUsed;
+} ;
+
+struct TDFA
+{
+ unsigned Flags;
+ TSymbolTable SymbolTable;
+ TDFAStates StateList;
+ TTransitions TransitionList;
+} ;
+
+class DELPHICLASS TURESearch;
+class PASCALIMPLEMENTATION TURESearch : public TSearchEngine
+{
+ typedef TSearchEngine inherited;
+
+private:
+ TUREBuffer FUREBuffer;
+ TDFA FDFA;
+
+protected:
+ void __fastcall AddEquivalentPair(unsigned L, unsigned R);
+ void __fastcall AddRange(TCClass &CCL, const TRange &Range);
+ unsigned __fastcall AddState(const unsigned * NewStates, const int NewStates_Size);
+ void __fastcall AddSymbolState(unsigned Symbol, unsigned State);
+ unsigned __fastcall BuildCharacterClass(wchar_t * CP, unsigned Limit, PSymbolTableEntry Symbol);
+ void __fastcall CCLSetup(PSymbolTableEntry Symbol, unsigned Mask);
+ void __fastcall ClearUREBuffer(void);
+ unsigned __fastcall CompileSymbol(wchar_t * S, unsigned Limit, PSymbolTableEntry Symbol);
+ void __fastcall CompileURE(wchar_t * RE, unsigned RELength, bool Casefold);
+ void __fastcall CollectPendingOperations(unsigned &State);
+ unsigned __fastcall ConvertRE2NFA(wchar_t * RE, unsigned RELength);
+ bool __fastcall ExecuteURE(unsigned Flags, wchar_t * Text, unsigned TextLen, unsigned &MatchStart,
+ unsigned &MatchEnd);
+ void __fastcall ClearDFA(void);
+ void __fastcall HexDigitSetup(PSymbolTableEntry Symbol, unsigned Mask);
+ unsigned __fastcall MakeExpression(unsigned AType, unsigned LHS, unsigned RHS);
+ unsigned __fastcall MakeHexNumber(wchar_t * NP, unsigned Limit, unsigned &Number);
+ unsigned __fastcall MakeSymbol(wchar_t * S, unsigned Limit, unsigned &Consumed);
+ bool __fastcall MatchesProperties(unsigned Props, unsigned C);
+ void __fastcall MergeEquivalents(void);
+ unsigned __fastcall ParsePropertyList(wchar_t * Properties, unsigned Limit, unsigned &Mask);
+ unsigned __fastcall Peek(void);
+ unsigned __fastcall Pop(void);
+ unsigned __fastcall PosixCCL(wchar_t * CP, unsigned Limit, PSymbolTableEntry Symbol);
+ unsigned __fastcall ProbeLowSurrogate(wchar_t * LeftState, unsigned Limit, unsigned &Code);
+ void __fastcall Push(unsigned V);
+ void __fastcall Reduce(unsigned Start);
+ void __fastcall SpaceSetup(PSymbolTableEntry Symbol, unsigned Mask);
+ bool __fastcall SymbolsAreDifferent(PSymbolTableEntry A, PSymbolTableEntry B);
+
+public:
+ __fastcall virtual TURESearch(TWideStrings* AOwner);
+ __fastcall virtual ~TURESearch(void);
+ virtual void __fastcall Clear(void);
+ virtual void __fastcall FindPrepare(const WideString Pattern, TSearchFlags Options)/* overload */;
+ virtual void __fastcall FindPrepare(const wchar_t * Pattern, unsigned PatternLength, TSearchFlags Options
+ )/* overload */;
+ virtual bool __fastcall FindFirst(const WideString Text, unsigned &Start, unsigned &Stop)/* overload */
+ ;
+ virtual bool __fastcall FindFirst(const wchar_t * Text, unsigned TextLen, unsigned &Start, unsigned
+ &Stop)/* overload */;
+ virtual bool __fastcall FindAll(const WideString Text)/* overload */;
+ virtual bool __fastcall FindAll(const wchar_t * Text, unsigned TextLen)/* overload */;
+};
+
+
+typedef TStrings TAnsiStrings;
+;
+
+struct TWideStringItem
+{
+ WideString FString;
+ System::TObject* FObject;
+} ;
+
+typedef DynamicArray<TWideStringItem > TWideStringItemList;
+
+class DELPHICLASS TWideStringList;
+class PASCALIMPLEMENTATION TWideStringList : public TWideStrings
+{
+ typedef TWideStrings inherited;
+
+private:
+ DynamicArray<TWideStringItem > FList;
+ int FCount;
+ bool FSorted;
+ Classes::TDuplicates FDuplicates;
+ Classes::TNotifyEvent FOnChange;
+ Classes::TNotifyEvent FOnChanging;
+ void __fastcall ExchangeItems(int Index1, int Index2);
+ void __fastcall Grow(void);
+ void __fastcall QuickSort(int L, int R);
+ void __fastcall InsertItem(int Index, const WideString S);
+ void __fastcall SetSorted(bool Value);
+
+protected:
+ virtual void __fastcall Changed(void);
+ virtual void __fastcall Changing(void);
+ virtual WideString __fastcall Get(int Index);
+ virtual int __fastcall GetCapacity(void);
+ virtual int __fastcall GetCount(void);
+ virtual System::TObject* __fastcall GetObject(int Index);
+ virtual void __fastcall Put(int Index, const WideString S);
+ virtual void __fastcall PutObject(int Index, System::TObject* AObject);
+ virtual void __fastcall SetCapacity(int NewCapacity);
+ virtual void __fastcall SetUpdateState(bool Updating);
+ virtual void __fastcall SetLanguage(unsigned Value);
+
+public:
+ __fastcall virtual ~TWideStringList(void);
+ virtual int __fastcall Add(const WideString S);
+ virtual void __fastcall Clear(void);
+ virtual void __fastcall Delete(int Index);
+ virtual void __fastcall Exchange(int Index1, int Index2);
+ virtual bool __fastcall Find(const WideString S, int &Index);
+ virtual int __fastcall IndexOf(const WideString S);
+ virtual void __fastcall Insert(int Index, const WideString S);
+ virtual void __fastcall Sort(void);
+ __property Classes::TDuplicates Duplicates = {read=FDuplicates, write=FDuplicates, nodefault};
+ __property bool Sorted = {read=FSorted, write=SetSorted, nodefault};
+ __property Classes::TNotifyEvent OnChange = {read=FOnChange, write=FOnChange};
+ __property Classes::TNotifyEvent OnChanging = {read=FOnChanging, write=FOnChanging};
+public:
+ #pragma option push -w-inl
+ /* TWideStrings.Create */ inline __fastcall TWideStringList(void) : TWideStrings() { }
+ #pragma option pop
+
+};
+
+
+struct TUNumber
+{
+ int Numerator;
+ int Denominator;
+} ;
+
+//-- var, const, procedure ---------------------------------------------------
+static const wchar_t WideNull = wchar_t(0x0);
+static const wchar_t Tabulator = wchar_t(0x9);
+static const wchar_t Space = wchar_t(0x20);
+static const wchar_t LF = wchar_t(0xa);
+static const wchar_t LineFeed = wchar_t(0xa);
+static const wchar_t VerticalTab = wchar_t(0xb);
+static const wchar_t FormFeed = wchar_t(0xc);
+static const wchar_t CR = wchar_t(0xd);
+static const wchar_t CarriageReturn = wchar_t(0xd);
+extern PACKAGE WideString CRLF;
+static const wchar_t LineSeparator = wchar_t(0x2028);
+static const wchar_t ParagraphSeparator = wchar_t(0x2029);
+static const wchar_t BOM_LSB_FIRST = wchar_t(0xfeff);
+static const wchar_t BOM_MSB_FIRST = wchar_t(0xfffe);
+extern PACKAGE unsigned ReplacementCharacter;
+extern PACKAGE unsigned MaximumUCS2;
+extern PACKAGE unsigned MaximumUTF16;
+extern PACKAGE unsigned MaximumUCS4;
+extern PACKAGE unsigned SurrogateHighStart;
+extern PACKAGE unsigned SurrogateHighEnd;
+extern PACKAGE unsigned SurrogateLowStart;
+extern PACKAGE unsigned SurrogateLowEnd;
+extern PACKAGE unsigned __fastcall UnicodeToUpper(unsigned Code);
+extern PACKAGE unsigned __fastcall UnicodeToLower(unsigned Code);
+extern PACKAGE unsigned __fastcall UnicodeToTitle(unsigned Code);
+extern PACKAGE TUNumber __fastcall UnicodeGetNumber(unsigned Code);
+extern PACKAGE int __fastcall UnicodeGetDigit(unsigned Code);
+extern PACKAGE unsigned __fastcall StrLenW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrEndW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrMoveW(wchar_t * Dest, wchar_t * Source, unsigned Count);
+extern PACKAGE wchar_t * __fastcall StrCopyW(wchar_t * Dest, wchar_t * Source);
+extern PACKAGE wchar_t * __fastcall StrECopyW(wchar_t * Dest, wchar_t * Source);
+extern PACKAGE wchar_t * __fastcall StrLCopyW(wchar_t * Dest, wchar_t * Source, unsigned MaxLen);
+extern PACKAGE wchar_t * __fastcall StrPCopyW(wchar_t * Dest, const WideString Source);
+extern PACKAGE wchar_t * __fastcall StrPLCopyW(wchar_t * Dest, const WideString Source, unsigned MaxLen
+ );
+extern PACKAGE wchar_t * __fastcall StrCatW(wchar_t * Dest, wchar_t * Source);
+extern PACKAGE wchar_t * __fastcall StrLCatW(wchar_t * Dest, wchar_t * Source, unsigned MaxLen);
+extern PACKAGE int __fastcall StrCompW(wchar_t * Str1, wchar_t * Str2);
+extern PACKAGE int __fastcall StrICompW(wchar_t * Str1, wchar_t * Str2);
+extern PACKAGE int __fastcall StrLCompW(wchar_t * Str1, wchar_t * Str2, unsigned MaxLen);
+extern PACKAGE int __fastcall StrLICompW(wchar_t * Str1, wchar_t * Str2, unsigned MaxLen);
+extern PACKAGE int __fastcall StrNScanW(wchar_t * S1, wchar_t * S2);
+extern PACKAGE int __fastcall StrRNScanW(wchar_t * S1, wchar_t * S2);
+extern PACKAGE wchar_t * __fastcall StrScanW(wchar_t * Str, wchar_t Chr)/* overload */;
+extern PACKAGE wchar_t * __fastcall StrScanW(wchar_t * Str, wchar_t Chr, unsigned StrLen)/* overload */
+ ;
+extern PACKAGE wchar_t * __fastcall StrRScanW(wchar_t * Str, wchar_t Chr);
+extern PACKAGE wchar_t * __fastcall StrPosW(wchar_t * Str, wchar_t * SubStr);
+extern PACKAGE wchar_t * __fastcall StrUpperW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrLowerW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrTitleW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrAllocW(unsigned Size);
+extern PACKAGE unsigned __fastcall StrBufSizeW(wchar_t * Str);
+extern PACKAGE wchar_t * __fastcall StrNewW(wchar_t * Str);
+extern PACKAGE void __fastcall StrDisposeW(wchar_t * Str);
+extern PACKAGE void __fastcall StrSwapByteOrder(wchar_t * Str);
+extern PACKAGE WideString __fastcall WideAdjustLineBreaks(const WideString S);
+extern PACKAGE WideString __fastcall WideQuotedStr(const WideString S, wchar_t Quote);
+extern PACKAGE WideString __fastcall WideExtractQuotedStr(wchar_t * &Src, wchar_t Quote);
+extern PACKAGE WideString __fastcall WideStringOfChar(wchar_t C, unsigned Count);
+extern PACKAGE WideString __fastcall WideTrim(const WideString S);
+extern PACKAGE WideString __fastcall WideTrimLeft(const WideString S);
+extern PACKAGE WideString __fastcall WideTrimRight(const WideString S);
+extern PACKAGE int __fastcall WideCharPos(const WideString S, const wchar_t Ch, const int Index);
+extern PACKAGE WideString __fastcall WideCompose(const WideString S);
+extern PACKAGE WideString __fastcall WideComposeHangul(WideString Source);
+extern PACKAGE WideString __fastcall WideDecompose(const WideString S);
+extern PACKAGE wchar_t __fastcall WideLoCase(wchar_t C);
+extern PACKAGE WideString __fastcall WideLowerCase(const WideString S);
+extern PACKAGE wchar_t __fastcall WideTitleCaseChar(wchar_t C);
+extern PACKAGE WideString __fastcall WideTitleCaseString(const WideString S);
+extern PACKAGE wchar_t __fastcall WideUpCase(wchar_t C);
+extern PACKAGE WideString __fastcall WideUpperCase(const WideString S);
+extern PACKAGE bool __fastcall UnicodeIsAlpha(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsDigit(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsAlphaNum(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsControl(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSpace(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsWhiteSpace(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsBlank(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsPunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsGraph(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsPrintable(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsUpper(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsLower(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsTitle(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsHexDigit(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsIsoControl(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsFormatControl(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSymbol(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsNumber(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsNonSpacing(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsOpenPunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsClosePunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsInitialPunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsFinalPunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsComposite(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsQuotationMark(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSymmetric(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsMirroring(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsNonBreaking(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsRTL(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsLTR(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsStrong(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsWeak(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsNeutral(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSeparator(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsMark(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsModifier(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsLetterNumber(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsConnectionPunctuation(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsDash(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsMath(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsCurrency(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsModifierSymbol(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsNonSpacingMark(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSpacingMark(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsEnclosing(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsPrivate(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsSurrogate(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsLineSeparator(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsParagraphSeparator(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsIdenifierStart(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsIdentifierPart(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsDefined(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsUndefined(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsHan(unsigned C);
+extern PACKAGE bool __fastcall UnicodeIsHangul(unsigned C);
+extern PACKAGE int __fastcall CodePageFromLocale(unsigned Language);
+extern PACKAGE Word __fastcall KeyboardCodePage(void);
+extern PACKAGE wchar_t __fastcall KeyUnicode(char C);
+extern PACKAGE unsigned __fastcall CodeBlockFromChar(const wchar_t C);
+extern PACKAGE WideString __fastcall CodePageToWideString(AnsiString A, Word CodePage);
+extern PACKAGE AnsiString __fastcall WideStringToUTF8(WideString S);
+extern PACKAGE WideString __fastcall UTF8ToWideString(AnsiString S);
+
+} /* namespace Unicode */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Unicode;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // Unicode
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.pas b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.pas
new file mode 100644
index 0000000..388b063
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.pas
@@ -0,0 +1,7042 @@
+
+{*******************************************************}
+{ }
+{ The Delphi Unicode Controls Project }
+{ http://home.ccci.org/wolbrink }
+{ }
+{ Special Note: This unit, Unicode.pas, was written }
+{ originally by Mike Lischke. Only a few minor }
+{ modifications and bug fixes have been made. I }
+{ have provided this unit so that others, at their }
+{ own discretion, may use the same Unicode.pas as me.}
+{ }
+{ If you prefer, you may download the original at }
+{ http://www.delphi-unicode.net or you may use the }
+{ JclUnicode.pas from the JEDI component library at }
+{ http://www.delphi-jedi.org/ and look for JCL. To }
+{ use the JCL unit, you must define "JCL" for Tnt }
+{ Delphi Unicode controls to compile. }
+{ }
+{*******************************************************}
+
+unit Unicode;
+
+// Copyright (c) 1999, 2000 Mike Lischke (public@lischke-online.de)
+// Portions Copyright (c) 1999, 2000 Azret Botash (az)
+//
+// 01-APR-2000 ml:
+// preparation for public release
+// FEB-MAR 2000 version 2.0 beta
+// - Unicode regular expressions (URE) search class (TURESearch)
+// - generic search engine base class for both the Boyer-Moore and the RE search class
+// - whole word only search in UTBM, bug fixes in UTBM
+// - string decompositon (including hangul)
+// OCT/99 - JAN/2000 ml: version 1.0
+// - basic Unicode implementation, more than 100 WideString/UCS2 and UCS4 core functions
+// - TWideStrings and TWideStringList classes
+// - Unicode Tuned Boyer-Moore search class (TUTBMSearch)
+// - low and high level Unicode/Wide* functions
+// - low level Unicode UCS4 data import and functions
+// - helper functions
+//----------------------------------------------------------------------------------------------------------------------
+// This unit contains routines and classes to manage and work with Unicode/WideStrings strings.
+// You need Delphi 4 or higher to compile this code.
+//
+// Unicode encodings and wide strings:
+// Currently there are several encoding schemes defined which describe (among others) the code size and (resulting from
+// this) the usable value pool. Delphi supports the wide character data type for Unicode which corresponds to
+// UCS2 (UTF-16 coding scheme). This scheme uses 2 bytes to store character values and can therefor handle up to
+// 65536 characters. Another scheme is UCS4 (UTF-32 coding scheme) which uses 4 bytes per character. The first 65536
+// code points correspond directly to those of UCS2. Other code points are mainly used for character surrogates.
+// To provide support for UCS2 (WideChar in Delphi) as well as UCS4 the library is splitted into two parts. The low
+// level part accepts and returns UCS4 characters while the high level part deals directly with WideChar/WideString
+// data types. Additionally, UCS2 is defined as being WideChar to retain maximum compatibility.
+//
+// Publicy available low level functions are all preceded by "Unicode..." (e.g. in UnicodeToUpper) while
+// the high level functions use the Str... or Wide... naming scheme (e.g. WideUpCase and WideUpperCase).
+//
+//----------------------------------------------------------------------------------------------------------------------
+// Open issues:
+// - Keep in mind that this unit is still in beta state. In particular the URE class does not yet work for all cases.
+// - Yet to do things in the URE class are:
+// - check all character classes if they match correctly
+// - optimize rebuild of DFA (build only when pattern changes)
+// - set flag parameter of ExecuteURE
+// - add \d any decimal digit
+// \D any character that is not a decimal digit
+// \s any whitespace character
+// \S any character that is not a whitespace character
+// \w any "word" character
+// \W any "non-word" character
+// - For a perfect text search both the text to be searched through as well as the pattern must be normalized
+// to allow to match, say, accented and unaccented characters or the ligature fi with the letter combination fi etc.
+// Normalization is usually done by decomposing the string and optionally compose it again, but I had not yet the
+// opportunity to go through the composition stuff.
+// - The wide string classes still compare text with functions provided by the particular system. This works usually
+// fine under WinNT/W2K (although also there are limitations like maximum text lengths). Under Win9x conversions
+// from and to MBCS are necessary which are bound to a particular locale and so very limited in general use.
+// These comparisons should be changed so that the code in this unit is used. This requires, though, a working
+// composition implementation.
+
+interface
+
+uses
+ Windows, Classes;
+
+const
+ // definitions of often used characters:
+ // Note: Use them only for tests of a certain character not to determine character classes like
+ // white spaces as in Unicode are often many code points defined being in a certain class.
+ // Hence your best option is to use the various UnicodeIs* functions.
+
+ // can't use identifier "Null" here as this is already in a special Variant identifier
+ WideNull = WideChar(#0);
+ Tabulator = WideChar(#9);
+ Space = WideChar(#32);
+
+ // logical line breaks
+ LF = WideChar($A);
+ LineFeed = WideChar($A);
+ VerticalTab = WideChar($B);
+ FormFeed = WideChar($C);
+ CR = WideChar($D);
+ CarriageReturn = WideChar($D);
+ CRLF: WideString = #$D#$A;
+ LineSeparator = WideChar($2028);
+ ParagraphSeparator = WideChar($2029);
+
+ // byte order marks for strings
+ // Unicode text files should contain $FFFE as first character to identify such a file clearly. Depending on the system
+ // where the file was created on this appears either in big endian or little endian style.
+ BOM_LSB_FIRST = WideChar($FEFF); // this is how the BOM appears on x86 systems when written by a x86 system
+ BOM_MSB_FIRST = WideChar($FFFE);
+
+type
+ // Unicode transformation formats (UTF) data types
+ UTF7 = AnsiChar;
+ UTF8 = AnsiChar;
+ UTF16 = WideChar;
+ UTF32 = Cardinal;
+
+ // UTF conversion schemes (UCS) data types
+ PUCS4 = ^UCS4;
+ UCS4 = Cardinal;
+ PUCS2 = PWideChar;
+ UCS2 = WideChar;
+
+const
+ ReplacementCharacter: UCS4 = $0000FFFD;
+ MaximumUCS2: UCS4 = $0000FFFF;
+ MaximumUTF16: UCS4 = $0010FFFF;
+ MaximumUCS4: UCS4 = $7FFFFFFF;
+
+ SurrogateHighStart: UCS4 = $D800;
+ SurrogateHighEnd: UCS4 = $DBFF;
+ SurrogateLowStart: UCS4 = $DC00;
+ SurrogateLowEnd: UCS4 = $DFFF;
+
+type
+ PCardinal = ^Cardinal;
+
+ TWideStrings = class;
+
+ TSearchFlags = set of (
+ sfCaseSensitive, // match letter case
+ sfIgnoreNonSpacing, // ignore non-spacing characters in search
+ sfSpaceCompress, // handle several consecutive white spaces as one white space
+ // (this applies to the pattern as well as the search text)
+ sfWholeWordOnly); // match only text at end/start and/or surrounded by white spaces
+
+ // a generic search class defininition used for tuned Boyer-Moore and Unicode regular expression searches
+ TSearchEngine = class
+ private
+ FResults: TList; // 2 entries for each result (start and stop position)
+ FOwner: TWideStrings; // at the moment unused, perhaps later to access strings faster
+ protected
+ function GetCount: Integer; virtual;
+ public
+ constructor Create(AOwner: TWideStrings); virtual;
+ destructor Destroy; override;
+
+ procedure AddResult(Start, Stop: Cardinal); virtual;
+ procedure Clear; virtual;
+ procedure ClearResults; virtual;
+ procedure DeleteResult(Index: Cardinal); virtual;
+ procedure FindPrepare(const Pattern: WideString; Options: TSearchFlags); overload; virtual; abstract;
+ procedure FindPrepare(const Pattern: PWideChar; PatternLength: Cardinal; Options: TSearchFlags); overload; virtual; abstract;
+ function FindFirst(const Text: WideString; var Start, Stop: Cardinal): Boolean; overload; virtual; abstract;
+ function FindFirst(const Text: PWideChar; TextLen: Cardinal; var Start, Stop: Cardinal): Boolean; overload; virtual; abstract;
+ function FindAll(const Text: WideString): Boolean; overload; virtual; abstract;
+ function FindAll(const Text: PWideChar; TextLen: Cardinal): Boolean; overload; virtual; abstract;
+ procedure GetResult(Index: Cardinal; var Start, Stop: Integer); virtual;
+
+ property Count: Integer read GetCount;
+ end;
+
+
+ // The Unicode Tuned Boyer-Moore (UTBM) search implementation is an extended translation created from a free package
+ // written by Mark Leisher (mleisher@crl.nmsu.edu).
+ //
+ // The code handles high and low surrogates as well as case (in)dependency, can ignore non-spacing characters and
+ // allows optionally to return whole words only.
+
+ // single pattern character
+ PUTBMChar = ^TUTBMChar;
+ TUTBMChar = record
+ LoCase,
+ UpCase,
+ TitleCase: UCS4;
+ end;
+
+ PUTBMSkip = ^TUTBMSkip;
+ TUTBMSkip = record
+ BMChar: PUTBMChar;
+ SkipValues: Integer;
+ end;
+
+ TUTBMSearch = class(TSearchEngine)
+ private
+ FFlags: TSearchFlags;
+ FPattern: PUTBMChar;
+ FPatternUsed,
+ FPatternSize,
+ FPatternLength: Cardinal;
+ FSkipValues: PUTBMSkip;
+ FSkipsUsed: Integer;
+ FMD4: Cardinal;
+ protected
+ procedure ClearPattern;
+ procedure Compile(Pattern: PUCS2; PatternLength: Integer; Flags: TSearchFlags);
+ function Find(Text: PUCS2; TextLen: Cardinal; var MatchStart, MatchEnd: Cardinal): Boolean;
+ function GetSkipValue(TextStart, TextEnd: PUCS2): Cardinal;
+ function Match(Text, Start, Stop: PUCS2; var MatchStart, MatchEnd: Cardinal): Boolean;
+ public
+ constructor Create(AOwner: TWideStrings); override;
+ destructor Destroy; override;
+
+ procedure Clear; override;
+ procedure FindPrepare(const Pattern: WideString; Options: TSearchFlags); override;
+ procedure FindPrepare(const Pattern: PWideChar; PatternLength: Cardinal; Options: TSearchFlags); override;
+ function FindFirst(const Text: WideString; var Start, Stop: Cardinal): Boolean; override;
+ function FindFirst(const Text: PWideChar; TextLen: Cardinal; var Start, Stop: Cardinal): Boolean; override;
+ function FindAll(const Text: WideString): Boolean; override;
+ function FindAll(const Text: PWideChar; TextLen: Cardinal): Boolean; override;
+ end;
+
+
+ // Regular expression search engine for text in UCS2 form taking surrogates into account.
+ // This implementation is an improved translation from the URE package written by Mark Leisher (mleisher@crl.nmsu.edu)
+ // who used a variation of the RE->DFA algorithm done by Mark Hopkins (markh@csd4.csd.uwm.edu).
+ // Assumptions:
+ // o Regular expression and text already normalized.
+ // o Conversion to lower case assumes a 1-1 mapping.
+ //
+ // Definitions:
+ // Separator - any one of U+2028, U+2029, NL, CR.
+ //
+ // Operators:
+ // . - match any character
+ // * - match zero or more of the last subexpression
+ // + - match one or more of the last subexpression
+ // ? - match zero or one of the last subexpression
+ // () - subexpression grouping
+ // {m, n} - match at least m occurences and up to n occurences
+ // Note: both values can be 0 or ommitted which denotes then a unlimiting bound
+ // {,} and {0,} and {0, 0} correspond to *
+ // {, 1} and {0, 1} correspond to ?
+ // {1,} and {1, 0} correspond to +
+ // {m} - match exactly m occurences
+ //
+ // Notes:
+ // o The "." operator normally does not match separators, but a flag is
+ // available that will allow this operator to match a separator.
+ //
+ // Literals and Constants:
+ // c - literal UCS2 character
+ // \x.... - hexadecimal number of up to 4 digits
+ // \X.... - hexadecimal number of up to 4 digits
+ // \u.... - hexadecimal number of up to 4 digits
+ // \U.... - hexadecimal number of up to 4 digits
+ //
+ // Character classes:
+ // [...] - Character class
+ // [^...] - Negated character class
+ // \pN1,N2,...,Nn - Character properties class
+ // \PN1,N2,...,Nn - Negated character properties class
+ //
+ // POSIX character classes recognized:
+ // :alnum:
+ // :alpha:
+ // :cntrl:
+ // :digit:
+ // :graph:
+ // :lower:
+ // :print:
+ // :punct:
+ // :space:
+ // :upper:
+ // :xdigit:
+ //
+ // Notes:
+ // o Character property classes are \p or \P followed by a comma separated
+ // list of integers between 1 and 32. These integers are references to
+ // the following character properties:
+ //
+ // N Character Property
+ // --------------------------
+ // 1 _URE_NONSPACING
+ // 2 _URE_COMBINING
+ // 3 _URE_NUMDIGIT
+ // 4 _URE_NUMOTHER
+ // 5 _URE_SPACESEP
+ // 6 _URE_LINESEP
+ // 7 _URE_PARASEP
+ // 8 _URE_CNTRL
+ // 9 _URE_PRIVATE
+ // 10 _URE_UPPER (note: upper, lower and titel case classes need to have case
+ // 11 _URE_LOWER sensitive search be enabled to match correctly!)
+ // 12 _URE_TITLE
+ // 13 _URE_MODIFIER
+ // 14 _URE_OTHERLETTER
+ // 15 _URE_DASHPUNCT
+ // 16 _URE_OPENPUNCT
+ // 17 _URE_CLOSEPUNCT
+ // 18 _URE_OTHERPUNCT
+ // 19 _URE_MATHSYM
+ // 20 _URE_CURRENCYSYM
+ // 21 _URE_OTHERSYM
+ // 22 _URE_LTR
+ // 23 _URE_RTL
+ // 24 _URE_EURONUM
+ // 25 _URE_EURONUMSEP
+ // 26 _URE_EURONUMTERM
+ // 27 _URE_ARABNUM
+ // 28 _URE_COMMONSEP
+ // 29 _URE_BLOCKSEP
+ // 30 _URE_SEGMENTSEP
+ // 31 _URE_WHITESPACE
+ // 32 _URE_OTHERNEUT
+ //
+ // o Character classes can contain literals, constants, and character
+ // property classes. Example:
+ //
+ // [abc\U10A\p1,3,4]
+
+ // structure used to handle a compacted range of characters
+ PRange = ^TRange;
+ TRange = record
+ MinCode,
+ MaxCode: UCS4;
+ end;
+
+ TCClass = record
+ Ranges: array of TRange;
+ RangesUsed: Integer;
+ end;
+
+ // either a single character or a list of character classes
+ TSymbol = record
+ Chr: UCS4;
+ CCL: TCClass;
+ end;
+
+ // this is a general element structure used for expressions and stack elements
+ TElement = record
+ OnStack: Boolean;
+ AType,
+ LHS,
+ RHS: Cardinal;
+ end;
+
+ // this is a structure used to track a list or a stack of states
+ PStateList = ^TStateList;
+ TStateList = record
+ List: array of Cardinal;
+ ListUsed: Integer;
+ end;
+
+ // structure to track the list of unique states for a symbol during reduction
+ PSymbolTableEntry = ^TSymbolTableEntry;
+ TSymbolTableEntry = record
+ ID,
+ AType: Cardinal;
+ Mods,
+ Props: Cardinal;
+ Symbol: TSymbol;
+ States: TStateList;
+ end;
+
+ // structure to hold a single State
+ PState = ^TState;
+ TState = record
+ ID: Cardinal;
+ Accepting: Boolean;
+ StateList: TStateList;
+ Transitions: array of TElement;
+ TransitionsUsed: Integer;
+ end;
+
+ // structure used for keeping lists of states
+ TStateTable = record
+ States: array of TState;
+ StatesUsed: Integer;
+ end;
+
+ // structure to track pairs of FDFA states when equivalent states are merged
+ TEquivalent = record
+ Left, Right: Cardinal;
+ end;
+
+ TExpressionList = record
+ Expressions: array of TElement;
+ ExpressionsUsed: Integer;
+ end;
+
+ TSymbolTable = record
+ Symbols: array of TSymbolTableEntry;
+ SymbolsUsed: Integer;
+ end;
+
+ TEquivalentList = record
+ Equivalents: array of TEquivalent;
+ EquivalentsUsed: Integer;
+ end;
+
+ // structure used for constructing the NFA and reducing to a minimal FDFA
+ PUREBuffer = ^TUREBuffer;
+ TUREBuffer = record
+ Reducing: Boolean;
+ Error: Integer;
+ Flags: Cardinal;
+ Stack: TStateList;
+ SymbolTable: TSymbolTable; // table of unique symbols encountered
+ ExpressionList: TExpressionList; // tracks the unique expressions generated for the NFA and when the NFA is reduced
+ States: TStateTable; // the reduced table of unique groups of NFA states
+ EquivalentList: TEquivalentList; // tracks states when equivalent states are merged
+ end;
+
+ TTransition = record
+ Symbol,
+ NextState: Cardinal;
+ end;
+
+ PDFAState = ^TDFAState;
+ TDFAState = record
+ Accepting: Boolean;
+ NumberTransitions: Integer;
+ StartTransition: Integer;
+ end;
+
+ TDFAStates = record
+ States: array of TDFAState;
+ StatesUsed: Integer;
+ end;
+
+ TTransitions = record
+ Transitions: array of TTransition;
+ TransitionsUsed: Integer;
+ end;
+
+ TDFA = record
+ Flags: Cardinal;
+ SymbolTable: TSymbolTable;
+ StateList: TDFAStates;
+ TransitionList: TTransitions;
+ end;
+
+ TURESearch = class(TSearchEngine)
+ private
+ FUREBuffer: TUREBuffer;
+ FDFA: TDFA;
+ protected
+ procedure AddEquivalentPair(L, R: Cardinal);
+ procedure AddRange(var CCL: TCClass; Range: TRange);
+ function AddState(NewStates: array of Cardinal): Cardinal;
+ procedure AddSymbolState(Symbol, State: Cardinal);
+ function BuildCharacterClass(CP: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+ procedure CCLSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+ procedure ClearUREBuffer;
+ function CompileSymbol(S: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+ procedure CompileURE(RE: PWideChar; RELength: Cardinal; Casefold: Boolean);
+ procedure CollectPendingOperations(var State: Cardinal);
+ function ConvertRE2NFA(RE: PWideChar; RELength: Cardinal): Cardinal;
+ function ExecuteURE(Flags: Cardinal; Text: PUCS2; TextLen: Cardinal; var MatchStart, MatchEnd: Cardinal): Boolean;
+ procedure ClearDFA;
+ procedure HexDigitSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+ function MakeExpression(AType, LHS, RHS: Cardinal): Cardinal;
+ function MakeHexNumber(NP: PUCS2; Limit: Cardinal; var Number: Cardinal): Cardinal;
+ function MakeSymbol(S: PUCS2; Limit: Cardinal; var Consumed: Cardinal): Cardinal;
+ function MatchesProperties(Props, C: Cardinal): Boolean;
+ procedure MergeEquivalents;
+ function ParsePropertyList(Properties: PUCS2; Limit: Cardinal; var Mask: Cardinal): Cardinal;
+ function Peek: Cardinal;
+ function Pop: Cardinal;
+ function PosixCCL(CP: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+ function ProbeLowSurrogate(LeftState: PUCS2; Limit: Cardinal; var Code: UCS4): Cardinal;
+ procedure Push(V: Cardinal);
+ procedure Reduce(Start: Cardinal);
+ procedure SpaceSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+ function SymbolsAreDifferent(A, B: PSymbolTableEntry): Boolean;
+ public
+ constructor Create(AOwner: TWideStrings); override;
+ destructor Destroy; override;
+
+ procedure Clear; override;
+ procedure FindPrepare(const Pattern: WideString; Options: TSearchFlags); override;
+ procedure FindPrepare(const Pattern: PWideChar; PatternLength: Cardinal; Options: TSearchFlags); override;
+ function FindFirst(const Text: WideString; var Start, Stop: Cardinal): Boolean; override;
+ function FindFirst(const Text: PWideChar; TextLen: Cardinal; var Start, Stop: Cardinal): Boolean; override;
+ function FindAll(const Text: WideString): Boolean; override;
+ function FindAll(const Text: PWideChar; TextLen: Cardinal): Boolean; override;
+ end;
+
+ // Event used to give the application a chance to switch the way of how to save the text in TWideStrings
+ // if the text contains characters not only from the ANSI block but the save type is
+ // ANSI. On triggering the event the application can change the property SaveUnicode
+ // as needed. This property is again checked after the callback returns.
+ TConfirmConversionEvent = procedure(Sender: TWideStrings; var Allowed: Boolean) of object;
+
+ TAnsiStrings = TStrings{TNT-ALLOW TStrings};
+
+ TWideStrings = class(TPersistent)
+ private
+ FAnsiStrings: TAnsiStrings;
+ FUpdateCount: Integer;
+ FLanguage: LCID; // language can usually left alone, the system's default is used
+ FSaved, // set in SaveToStream, True in case saving was successfull otherwise False
+ FSaveUnicode: Boolean; // flag set on loading to keep track in which format to save
+ // (can be set explicitely, but expect losses if there's true Unicode content
+ // and this flag is set to False)
+ FOnConfirmConversion: TConfirmConversionEvent;
+ function GetCommaText: WideString;
+ function GetName(Index: Integer): WideString;
+ function GetValue(const Name: WideString): WideString;
+ procedure ReadData(Reader: TReader);
+ procedure SetCommaText(const Value: WideString);
+ procedure SetValue(const Name, Value: WideString);
+ procedure WriteData(Writer: TWriter);
+ procedure SetAnsiStrings(const Value: TAnsiStrings);
+ protected
+ procedure DefineProperties(Filer: TFiler); override;
+ procedure Error(const Msg: WideString; Data: Integer);
+ function Get(Index: Integer): WideString; virtual; abstract;
+ function GetCapacity: Integer; virtual;
+ function GetCount: Integer; virtual; abstract;
+ function GetObject(Index: Integer): TObject; virtual;
+ function GetTextStr: WideString; virtual;
+ procedure Put(Index: Integer; const S: WideString); virtual;
+ procedure PutObject(Index: Integer; AObject: TObject); virtual;
+ procedure SetCapacity(NewCapacity: Integer); virtual;
+ procedure SetTextStr(const Value: WideString); virtual;
+ procedure SetUpdateState(Updating: Boolean); virtual;
+ procedure SetLanguage(Value: LCID); virtual;
+ public
+ constructor Create;
+ destructor Destroy; override;
+
+ function Add(const S: WideString): Integer; virtual;
+ function AddObject(const S: WideString; AObject: TObject): Integer; virtual;
+ procedure Append(const S: WideString);
+ procedure AddStrings(Strings: TAnsiStrings); overload; virtual;
+ procedure AddStrings(Strings: TWideStrings); overload; virtual;
+ procedure Assign(Source: TPersistent); override;
+ procedure AssignTo(Dest: TPersistent); override;
+ procedure BeginUpdate;
+ procedure Clear; virtual; abstract;
+ procedure Delete(Index: Integer); virtual; abstract;
+ procedure EndUpdate;
+ function Equals(Strings: TWideStrings): Boolean;
+ procedure Exchange(Index1, Index2: Integer); virtual;
+ function GetText: PWideChar; virtual;
+ function IndexOf(const S: WideString): Integer; virtual;
+ function IndexOfName(const Name: WideString): Integer;
+ function IndexOfObject(AObject: TObject): Integer;
+ procedure Insert(Index: Integer; const S: WideString); virtual; abstract;
+ procedure InsertObject(Index: Integer; const S: WideString; AObject: TObject);
+ procedure LoadFromFile(const FileName: WideString); virtual;
+ procedure LoadFromStream(Stream: TStream); virtual;
+ procedure Move(CurIndex, NewIndex: Integer); virtual;
+ procedure SaveToFile(const FileName: WideString); virtual;
+ procedure SaveToStream(Stream: TStream); virtual;
+ procedure SetText(Text: PWideChar); virtual;
+
+ property Capacity: Integer read GetCapacity write SetCapacity;
+ property CommaText: WideString read GetCommaText write SetCommaText;
+ property Count: Integer read GetCount;
+ property Language: LCID read FLanguage write SetLanguage;
+ property Names[Index: Integer]: WideString read GetName;
+ property Objects[Index: Integer]: TObject read GetObject write PutObject;
+ property Values[const Name: WideString]: WideString read GetValue write SetValue;
+ property Saved: Boolean read FSaved;
+ property SaveUnicode: Boolean read FSaveUnicode write FSaveUnicode;
+ property Strings[Index: Integer]: WideString read Get write Put; default;
+ property Text: WideString read GetTextStr write SetTextStr;
+
+ property OnConfirmConversion: TConfirmConversionEvent read FOnConfirmConversion write FOnConfirmConversion;
+ published
+ property AnsiStrings: TAnsiStrings read FAnsiStrings write SetAnsiStrings stored False;
+ end;
+
+ // TWideStringList class
+ TWideStringItem = record
+ FString: WideString;
+ FObject: TObject;
+ end;
+
+ TWideStringItemList = array of TWideStringItem;
+
+ TWideStringList = class(TWideStrings)
+ private
+ FList: TWideStringItemList;
+ FCount: Integer;
+ FSorted: Boolean;
+ FDuplicates: TDuplicates;
+ FOnChange: TNotifyEvent;
+ FOnChanging: TNotifyEvent;
+ procedure ExchangeItems(Index1, Index2: Integer);
+ procedure Grow;
+ procedure QuickSort(L, R: Integer);
+ procedure InsertItem(Index: Integer; const S: WideString);
+ procedure SetSorted(Value: Boolean);
+ protected
+ procedure Changed; virtual;
+ procedure Changing; virtual;
+ function Get(Index: Integer): WideString; override;
+ function GetCapacity: Integer; override;
+ function GetCount: Integer; override;
+ function GetObject(Index: Integer): TObject; override;
+ procedure Put(Index: Integer; const S: WideString); override;
+ procedure PutObject(Index: Integer; AObject: TObject); override;
+ procedure SetCapacity(NewCapacity: Integer); override;
+ procedure SetUpdateState(Updating: Boolean); override;
+ procedure SetLanguage(Value: LCID); override;
+ public
+ destructor Destroy; override;
+
+ function Add(const S: WideString): Integer; override;
+ procedure Clear; override;
+ procedure Delete(Index: Integer); override;
+ procedure Exchange(Index1, Index2: Integer); override;
+ function Find(const S: WideString; var Index: Integer): Boolean; virtual;
+ function IndexOf(const S: WideString): Integer; override;
+ procedure Insert(Index: Integer; const S: WideString); override;
+ procedure Sort; virtual;
+
+ property Duplicates: TDuplicates read FDuplicates write FDuplicates;
+ property Sorted: Boolean read FSorted write SetSorted;
+ property OnChange: TNotifyEvent read FOnChange write FOnChange;
+ property OnChanging: TNotifyEvent read FOnChanging write FOnChanging;
+ end;
+
+ // result type for number retrival functions
+ TUNumber = record
+ Numerator,
+ Denominator: Integer;
+ end;
+
+// functions involving Null-terminated strings
+// NOTE: PWideChars as well as WideStrings are NOT managed by reference counting (in opposition to 8 bit strings)!
+function StrLenW(Str: PWideChar): Cardinal;
+function StrEndW(Str: PWideChar): PWideChar;
+function StrMoveW(Dest, Source: PWideChar; Count: Cardinal): PWideChar;
+function StrCopyW(Dest, Source: PWideChar): PWideChar;
+function StrECopyW(Dest, Source: PWideChar): PWideChar;
+function StrLCopyW(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
+function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar;
+function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar;
+function StrCatW(Dest, Source: PWideChar): PWideChar;
+function StrLCatW(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
+function StrCompW(Str1, Str2: PWideChar): Integer;
+function StrICompW(Str1, Str2: PWideChar): Integer;
+function StrLCompW(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
+function StrLICompW(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
+function StrNScanW(S1, S2: PWideChar): Integer;
+function StrRNScanW(S1, S2: PWideChar): Integer;
+function StrScanW(Str: PWideChar; Chr: WideChar): PWideChar; overload;
+function StrScanW(Str: PWideChar; Chr: WideChar; StrLen: Cardinal): PWideChar; overload;
+function StrRScanW(Str: PWideChar; Chr: WideChar): PWideChar;
+function StrPosW(Str, SubStr: PWideChar): PWideChar;
+function StrUpperW(Str: PWideChar): PWideChar;
+function StrLowerW(Str: PWideChar): PWideChar;
+function StrTitleW(Str: PWideChar): PWideChar;
+function StrAllocW(Size: Cardinal): PWideChar;
+function StrBufSizeW(Str: PWideChar): Cardinal;
+function StrNewW(Str: PWideChar): PWideChar;
+procedure StrDisposeW(Str: PWideChar);
+procedure StrSwapByteOrder(Str: PWideChar);
+
+// functions involving Delphi wide strings
+function WideAdjustLineBreaks(const S: WideString): WideString;
+function WideCharPos(const S: WideString; const Ch: WideChar; const Index: Integer): Integer; //az
+function WideCompose(const S: WideString): WideString;
+function WideComposeHangul(Source: WideString): WideString;
+function WideDecompose(const S: WideString): WideString;
+function WideLoCase(C: WideChar): WideChar;
+function WideLowerCase(const S: WideString): WideString;
+function WideExtractQuotedStr(var Src: PWideChar; Quote: WideChar): WideString;
+function WideQuotedStr(const S: WideString; Quote: WideChar): WideString;
+function WideStringOfChar(C: WideChar; Count: Cardinal): WideString;
+function WideTitleCaseChar(C: WideChar): WideChar;
+function WideTitleCaseString(const S: WideString): WideString;
+function WideTrim(const S: WideString): WideString;
+function WideTrimLeft(const S: WideString): WideString;
+function WideTrimRight(const S: WideString): WideString;
+function WideUpCase(C: WideChar): WideChar;
+function WideUpperCase(const S: WideString): WideString;
+
+// low level character routines
+function UnicodeGetDigit(Code: UCS4): Integer;
+function UnicodeGetNumber(Code: UCS4): TUNumber;
+function UnicodeToUpper(Code: UCS4): UCS4;
+function UnicodeToLower(Code: UCS4): UCS4;
+function UnicodeToTitle(Code: UCS4): UCS4;
+
+// character test routines
+function UnicodeIsAlpha(C: UCS4): Boolean;
+function UnicodeIsDigit(C: UCS4): Boolean;
+function UnicodeIsAlphaNum(C: UCS4): Boolean;
+function UnicodeIsControl(C: UCS4): Boolean;
+function UnicodeIsSpace(C: UCS4): Boolean;
+function UnicodeIsWhiteSpace(C: UCS4): Boolean;
+function UnicodeIsBlank(C: UCS4): Boolean;
+function UnicodeIsPunctuation(C: UCS4): Boolean;
+function UnicodeIsGraph(C: UCS4): Boolean;
+function UnicodeIsPrintable(C: UCS4): Boolean;
+function UnicodeIsUpper(C: UCS4): Boolean;
+function UnicodeIsLower(C: UCS4): Boolean;
+function UnicodeIsTitle(C: UCS4): Boolean;
+function UnicodeIsHexDigit(C: UCS4): Boolean;
+
+function UnicodeIsIsoControl(C: UCS4): Boolean;
+function UnicodeIsFormatControl(C: UCS4): Boolean;
+
+function UnicodeIsSymbol(C: UCS4): Boolean;
+function UnicodeIsNumber(C: UCS4): Boolean;
+function UnicodeIsNonSpacing(C: UCS4): Boolean;
+function UnicodeIsOpenPunctuation(C: UCS4): Boolean;
+function UnicodeIsClosePunctuation(C: UCS4): Boolean;
+function UnicodeIsInitialPunctuation(C: UCS4): Boolean;
+function UnicodeIsFinalPunctuation(C: UCS4): Boolean;
+
+function UnicodeIsComposite(C: UCS4): Boolean;
+function UnicodeIsQuotationMark(C: UCS4): Boolean;
+function UnicodeIsSymmetric(C: UCS4): Boolean;
+function UnicodeIsMirroring(C: UCS4): Boolean;
+function UnicodeIsNonBreaking(C: UCS4): Boolean;
+
+// Directionality functions
+function UnicodeIsRTL(C: UCS4): Boolean;
+function UnicodeIsLTR(C: UCS4): Boolean;
+function UnicodeIsStrong(C: UCS4): Boolean;
+function UnicodeIsWeak(C: UCS4): Boolean;
+function UnicodeIsNeutral(C: UCS4): Boolean;
+function UnicodeIsSeparator(C: UCS4): Boolean;
+
+// Other character test functions
+function UnicodeIsMark(C: UCS4): Boolean;
+function UnicodeIsModifier(C: UCS4): Boolean;
+function UnicodeIsLetterNumber(C: UCS4): Boolean;
+function UnicodeIsConnectionPunctuation(C: UCS4): Boolean;
+function UnicodeIsDash(C: UCS4): Boolean;
+function UnicodeIsMath(C: UCS4): Boolean;
+function UnicodeIsCurrency(C: UCS4): Boolean;
+function UnicodeIsModifierSymbol(C: UCS4): Boolean;
+function UnicodeIsNonSpacingMark(C: UCS4): Boolean;
+function UnicodeIsSpacingMark(C: UCS4): Boolean;
+function UnicodeIsEnclosing(C: UCS4): Boolean;
+function UnicodeIsPrivate(C: UCS4): Boolean;
+function UnicodeIsSurrogate(C: UCS4): Boolean;
+function UnicodeIsLineSeparator(C: UCS4): Boolean;
+function UnicodeIsParagraphSeparator(C: UCS4): Boolean;
+
+function UnicodeIsIdenifierStart(C: UCS4): Boolean;
+function UnicodeIsIdentifierPart(C: UCS4): Boolean;
+
+function UnicodeIsDefined(C: UCS4): Boolean;
+function UnicodeIsUndefined(C: UCS4): Boolean;
+
+function UnicodeIsHan(C: UCS4): Boolean;
+function UnicodeIsHangul(C: UCS4): Boolean;
+
+// utility functions
+function CodePageFromLocale(Language: LCID): Integer;
+function KeyboardCodePage: Word;
+function KeyUnicode(C: AnsiChar): WideChar;
+function CodeBlockFromChar(const C: WideChar): Cardinal;
+function CodePageToWideString(A: AnsiString; CodePage: Word): WideString;
+
+// WideString Conversion routines
+function WideStringToUTF8(S: WideString): AnsiString;
+function UTF8ToWideString(S: AnsiString): WideString;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+implementation
+
+// ~67K Unicode data for case mapping, decomposition, numbers etc.
+// This data is loaded on demand which means only those parts will be put in memory which are needed
+// by one of the lookup functions.
+{$R Unicode.res}
+
+uses
+ Consts, {$IFDEF VER140} RTLConsts, {$ENDIF} SyncObjs, SysUtils, TntClasses;
+
+resourcestring
+ SUREBaseString = 'Error in regular expression: %s' + #13;
+ SUREUnexpectedEOS = 'Unexpected end of pattern.';
+ SURECharacterClassOpen = 'Character class not closed, '']'' is missing.';
+ SUREUnbalancedGroup = 'Unbalanced group expression, '')'' is missing.';
+ SUREInvalidCharProperty = 'A character property is invalid';
+ SUREInvalidRepeatRange = 'Invalid repeation range.';
+ SURERepeatRangeOpen = 'Repeation range not closed, ''}'' is missing.';
+ SUREExpressionEmpty = 'Expression is empty.';
+
+type
+ TCompareFunc = function (W1, W2: WideString; Locale: LCID): Integer;
+
+var
+ WideCompareText: TCompareFunc;
+
+//----------------- Loader routines for resource data ------------------------------------------------------------------
+
+const
+ // Values that can appear in the Mask1 parameter of the IsProperty function.
+ UC_MN = $00000001; // Mark, Non-Spacing
+ UC_MC = $00000002; // Mark, Spacing Combining
+ UC_ME = $00000004; // Mark, Enclosing
+ UC_ND = $00000008; // Number, Decimal Digit
+ UC_NL = $00000010; // Number, Letter
+ UC_NO = $00000020; // Number, Other
+ UC_ZS = $00000040; // Separator, Space
+ UC_ZL = $00000080; // Separator, Line
+ UC_ZP = $00000100; // Separator, Paragraph
+ UC_CC = $00000200; // Other, Control
+ UC_CF = $00000400; // Other, Format
+ UC_OS = $00000800; // Other, Surrogate
+ UC_CO = $00001000; // Other, private use
+ UC_CN = $00002000; // Other, not assigned
+ UC_LU = $00004000; // Letter, Uppercase
+ UC_LL = $00008000; // Letter, Lowercase
+ UC_LT = $00010000; // Letter, Titlecase
+ UC_LM = $00020000; // Letter, Modifier
+ UC_LO = $00040000; // Letter, Other
+ UC_PC = $00080000; // Punctuation, Connector
+ UC_PD = $00100000; // Punctuation, Dash
+ UC_PS = $00200000; // Punctuation, Open
+ UC_PE = $00400000; // Punctuation, Close
+ UC_PO = $00800000; // Punctuation, Other
+ UC_SM = $01000000; // Symbol, Math
+ UC_SC = $02000000; // Symbol, Currency
+ UC_SK = $04000000; // Symbol, Modifier
+ UC_SO = $08000000; // Symbol, Other
+ UC_L = $10000000; // Left-To-Right
+ UC_R = $20000000; // Right-To-Left
+ UC_EN = $40000000; // European Number
+ UC_ES = $80000000; // European Number Separator
+
+ // Values that can appear in the Mask2 parameter of the IsProperty function
+ UC_ET = $00000001; // European Number Terminator
+ UC_AN = $00000002; // Arabic Number
+ UC_CS = $00000004; // Common Number Separator
+ UC_B = $00000008; // Block Separator
+ UC_S = $00000010; // Segment (unit) Separator (this includes tab and vertical tab)
+ UC_WS = $00000020; // Whitespace
+ UC_ON = $00000040; // Other Neutrals
+
+ // Implementation specific character properties.
+ UC_CM = $00000080; // Composite
+ UC_NB = $00000100; // Non-Breaking
+ UC_SY = $00000200; // Symmetric
+ UC_HD = $00000400; // Hex Digit
+ UC_QM = $00000800; // Quote Mark
+ UC_MR = $00001000; // Mirroring
+ UC_SS = $00002000; // Space, other
+
+ UC_CP = $00004000; // Defined
+
+ // Added for UnicodeData-2.1.3.
+ UC_PI = $00008000; // Punctuation, Initial
+ UC_PF = $00010000; // Punctuation, Final
+
+type
+ TUHeader = record
+ BOM: WideChar;
+ Count: Word;
+ case Boolean of
+ True:
+ (Bytes: Cardinal);
+ False:
+ (Len: array[0..1] of Word);
+ end;
+
+ TWordArray = array of Word;
+ TCardinalArray = array of Cardinal;
+
+var
+ // As the global data can be accessed by several threads it should be guarded
+ // while the data is loaded.
+ LoadInProgress: TCriticalSection;
+
+//----------------- internal support routines --------------------------------------------------------------------------
+
+function SwapCardinal(C: Cardinal): Cardinal;
+
+// swaps all bytes in C from MSB to LSB order
+// EAX contains both parameter as well as result
+
+asm
+ BSWAP EAX
+end;
+
+//----------------- support for character properties -------------------------------------------------------------------
+
+var
+ PropertyOffsets: TWordArray;
+ PropertyRanges: TCardinalArray;
+
+procedure LoadUnicodeTypeData;
+
+// loads the character property data (as saved by the Unicode database extractor into the ctype.dat file)
+
+var
+ I, Size: Integer;
+ Header: TUHeader;
+ Stream: TTntResourceStream;
+
+begin
+ // make sure no other code is currently modifying the global data area
+ if LoadInProgress = nil then LoadInProgress := TCriticalSection.Create;
+ LoadInProgress.Enter;
+
+ // Data already loaded?
+ if PropertyOffsets = nil then
+ begin
+ Stream := TTntResourceStream.Create(HInstance, 'TYPE', 'UNICODE');
+ Stream.Read(Header, SizeOf(Header));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ Header.Count := Swap(Header.Count);
+ Header.Bytes := SwapCardinal(Header.Bytes);
+ end;
+
+ // Calculate the offset into the storage for the ranges. The offsets
+ // array is on a 4-byte boundary and one larger than the value provided in
+ // the header count field. This means the offset to the ranges must be
+ // calculated after aligning the count to a 4-byte boundary.
+ Size := (Header.Count + 1) * SizeOf(Word);
+ if (Size and 3) <> 0 then Inc(Size, 4 - (Size and 3));
+
+ // fill offsets array
+ SetLength(PropertyOffsets, Size div SizeOf(Word));
+ Stream.Read(PropertyOffsets[0], Size);
+
+ // Do an endian swap if necessary. Don't forget there is an extra node on the end with the final index.
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ for I := 0 to Header.Count do
+ PropertyOffsets[I] := Swap(PropertyOffsets[I]);
+ end;
+
+ // Load the ranges. The number of elements is in the last array position of the offsets.
+ SetLength(PropertyRanges, PropertyOffsets[Header.Count]);
+ Stream.Read(PropertyRanges[0], PropertyOffsets[Header.Count] * SizeOf(Cardinal));
+
+ // Do an endian swap if necessary.
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ for I := 0 to PropertyOffsets[Header.Count] - 1 do
+ PropertyRanges[I] := SwapCardinal(PropertyRanges[I]);
+ end;
+ Stream.Free;
+ end;
+ LoadInProgress.Leave;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function PropertyLookup(Code, N: Cardinal): Boolean;
+
+var
+ L, R, M: Integer;
+
+begin
+ // load property data if not already done
+ if PropertyOffsets = nil then LoadUnicodeTypeData;
+
+ Result := False;
+ // There is an extra node on the end of the offsets to allow this routine
+ // to work right. If the index is 0xffff, then there are no nodes for the property.
+ L := PropertyOffsets[N];
+ if L <> $FFFF then
+ begin
+ // Locate the next offset that is not 0xffff. The sentinel at the end of
+ // the array is the max index value.
+ M := 1;
+ while ((Integer(N) + M) < High(PropertyOffsets)) and (PropertyOffsets[Integer(N) + M] = $FFFF) do Inc(M);
+
+ R := PropertyOffsets[Integer(N) + M] - 1;
+
+ while L <= R do
+ begin
+ // Determine a "mid" point and adjust to make sure the mid point is at
+ // the beginning of a range pair.
+ M := (L + R) shr 1;
+ Dec(M, M and 1);
+ if Code > PropertyRanges[M + 1] then L := M + 2
+ else
+ if Code < PropertyRanges[M] then R := M - 2
+ else
+ if (Code >= PropertyRanges[M]) and (Code <= PropertyRanges[M + 1]) then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function IsProperty(Code, Mask1, Mask2: Cardinal): Boolean;
+
+var
+ I: Cardinal;
+ Mask: Cardinal;
+
+begin
+ Result := False;
+ if Mask1 <> 0 then
+ begin
+ Mask := 1;
+ for I := 0 to 31 do
+ begin
+ if ((Mask1 and Mask) <> 0) and PropertyLookup(Code, I) then
+ begin
+ Result := True;
+ Exit;
+ end;
+ Mask := Mask shl 1;
+ end;
+ end;
+
+ if Mask2 <> 0 then
+ begin
+ I := 32;
+ Mask := 1;
+ while I < Cardinal(High(PropertyOffsets)) do
+ begin
+ if ((Mask2 and Mask) <> 0) and PropertyLookup(Code, I) then
+ begin
+ Result := True;
+ Exit;
+ end;
+ Inc(I);
+ Mask := Mask shl 1;
+ end;
+ end;
+end;
+
+//----------------- support for case mapping ---------------------------------------------------------------------------
+var
+ CaseMapSize: Cardinal;
+ CaseLengths: array[0..1] of Word;
+ CaseMap: TCardinalArray;
+
+procedure LoadUnicodeCaseData;
+
+var
+ Stream: TTntResourceStream;
+ I: Cardinal;
+ Header: TUHeader;
+
+begin
+ // make sure no other code is currently modifying the global data area
+ if LoadInProgress = nil then LoadInProgress := TCriticalSection.Create;
+ LoadInProgress.Enter;
+
+ if CaseMap = nil then
+ begin
+ Stream := TTntResourceStream.Create(HInstance, 'CASE', 'UNICODE');
+ Stream.Read(Header, SizeOf(Header));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ Header.Count := Swap(Header.Count);
+ Header.Len[0] := Swap(Header.Len[0]);
+ Header.Len[1] := Swap(Header.Len[1]);
+ end;
+
+ // Set the node count and lengths of the upper and lower case mapping tables.
+ CaseMapSize := Header.Count * 3;
+ CaseLengths[0] := Header.Len[0] * 3;
+ CaseLengths[1] := Header.Len[1] * 3;
+
+ SetLength(CaseMap, CaseMapSize);
+
+ // Load the case mapping table.
+ Stream.Read(CaseMap[0], CaseMapSize * SizeOf(Cardinal));
+
+ // Do an endian swap if necessary.
+ if Header.BOM = BOM_MSB_FIRST then
+ for I := 0 to CaseMapSize -1 do CaseMap[I] := SwapCardinal(CaseMap[I]);
+ Stream.Free;
+ end;
+ LoadInProgress.Leave;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CaseLookup(Code: Cardinal; L, R, Field: Integer): Cardinal;
+
+var
+ M: Integer;
+
+begin
+ // load case mapping data if not already done
+ if CaseMap = nil then LoadUnicodeCaseData;
+
+ // Do the binary search.
+ while L <= R do
+ begin
+ // Determine a "mid" point and adjust to make sure the mid point is at
+ // the beginning of a case mapping triple.
+ M := (L + R) shr 1;
+ Dec(M, M mod 3);
+ if Code > CaseMap[M] then L := M + 3
+ else
+ if Code < CaseMap[M] then R := M - 3
+ else
+ if Code = CaseMap[M] then
+ begin
+ Result := CaseMap[M + Field];
+ Exit;
+ end;
+ end;
+
+ Result := Code;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeToUpper(Code: UCS4): UCS4;
+
+var
+ Field,
+ L, R: Integer;
+
+begin
+ // load case mapping data if not already done
+ if CaseMap = nil then LoadUnicodeCaseData;
+
+ if UnicodeIsUpper(Code) then Result := Code
+ else
+ begin
+ if UnicodeIsLower(Code) then
+ begin
+ Field := 2;
+ L := CaseLengths[0];
+ R := (L + CaseLengths[1]) - 3;
+ end
+ else
+ begin
+ Field := 1;
+ L := CaseLengths[0] + CaseLengths[1];
+ R := CaseMapSize - 3;
+ end;
+ Result := CaseLookup(Code, L, R, Field);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeToLower(Code: UCS4): UCS4;
+
+var
+ Field,
+ L, R: Integer;
+
+begin
+ // load case mapping data if not already done
+ if CaseMap = nil then LoadUnicodeCaseData;
+
+ if UnicodeIsLower(Code) then Result := Code
+ else
+ begin
+ if UnicodeIsUpper(Code) then
+ begin
+ Field := 1;
+ L := 0;
+ R := CaseLengths[0] - 3;
+ end
+ else
+ begin
+ Field := 2;
+ L := CaseLengths[0] + CaseLengths[1];
+ R := CaseMapSize - 3;
+ end;
+ Result := CaseLookup(Code, L, R, Field);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeToTitle(Code: UCS4): UCS4;
+
+var
+ Field,
+ L, R: Integer;
+
+begin
+ // load case mapping data if not already done
+ if CaseMap = nil then LoadUnicodeCaseData;
+
+ if UnicodeIsTitle(Code) then Result := Code
+ else
+ begin
+ // The offset will always be the same for converting to title case.
+ Field := 2;
+
+ if UnicodeIsUpper(Code) then
+ begin
+ L := 0;
+ R := CaseLengths[0] - 3;
+ end
+ else
+ begin
+ L := CaseLengths[0];
+ R := (L + CaseLengths[1]) - 3;
+ end;
+ Result := CaseLookup(Code, L, R, Field);
+ end;
+end;
+
+//----------------- Support for decomposition --------------------------------------------------------------------------
+
+const // constants for hangul composition and decomposition (this is done algorithmically
+ // saving so significant memory)
+ SBase = $AC00;
+ LBase = $1100;
+ VBase = $1161;
+ TBase = $11A7;
+ LCount = 19;
+ VCount = 21;
+ TCount = 28;
+ NCount = VCount * TCount; // 588
+ SCount = LCount * NCount; // 11172
+
+var
+ DecompositionSize: Cardinal;
+ DecompositionNodes,
+ Decompositions: TCardinalArray;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure LoadUnicodeDecompositionData;
+
+var
+ Stream: TTntResourceStream;
+ I: Cardinal;
+ Header: TUHeader;
+
+begin
+ // make sure no other code is currently modifying the global data area
+ if LoadInProgress = nil then LoadInProgress := TCriticalSection.Create;
+ LoadInProgress.Enter;
+
+ if Decompositions = nil then
+ begin
+ Stream := TTntResourceStream.Create(HInstance, 'DECOMPOSE', 'UNICODE');
+ Stream.Read(Header, SizeOf(Header));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ Header.Count := Swap(Header.Count);
+ Header.Bytes := SwapCardinal(Header.Bytes);
+ end;
+
+ DecompositionSize := Header.Count shl 1; // two values per node
+ SetLength(DecompositionNodes, DecompositionSize + 1); // one entry more (the sentinel)
+ Stream.Read(DecompositionNodes[0], (DecompositionSize + 1) * SizeOf(Cardinal));
+ SetLength(Decompositions, (Header.Bytes div SizeOf(Cardinal)) - DecompositionSize - 1);
+ Stream.Read(Decompositions[0], Length(Decompositions) * SizeOf(Cardinal));
+
+ // Do an endian swap if necessary.
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ for I := 0 to High(DecompositionNodes) do
+ DecompositionNodes[I] := SwapCardinal(DecompositionNodes[I]);
+ for I := 0 to High(Decompositions) do
+ Decompositions[I] := SwapCardinal(Decompositions[I]);
+ end;
+ Stream.Free;
+ end;
+
+ LoadInProgress.Leave;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeDecomposeHangul(Code: UCS4): TCardinalArray;
+
+// algorithmically decompose hangul character using some predefined contstants
+
+var
+ Rest: Integer;
+
+begin
+ if not UnicodeIsHangul(Code) then Result := nil
+ else
+ begin
+ Dec(Code, SBase);
+ Rest := Code mod TCount;
+ if Rest = 0 then SetLength(Result, 2)
+ else SetLength(Result, 3);
+ Result[0] := LBase + (Code div NCount);
+ Result[1] := VBase + ((Code mod NCount) div TCount);
+ if Rest <> 0 then Result[2] := TBase + Rest;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeDecompose(Code: UCS4): TCardinalArray;
+
+var
+ L, R, M: Integer;
+
+begin
+ // load decomposition data if not already done
+ if Decompositions = nil then LoadUnicodeDecompositionData;
+
+ if not UnicodeIsComposite(Code) then
+ begin
+ // return the code itself if it is not a composite
+ SetLength(Result, 1);
+ Result[0] := Code;
+ end
+ else
+ begin
+ // if the code is hangul then decomposition is algorithmically
+ Result := UnicodeDecomposeHangul(Code);
+ if Result = nil then
+ begin
+ L := 0;
+ R := DecompositionNodes[DecompositionSize] - 1;
+
+ while L <= R do
+ begin
+ // Determine a "mid" point and adjust to make sure the mid point is at
+ // the beginning of a code + offset pair.
+ M := (L + R) shr 1;
+ Dec(M, M and 1);
+ if Code > DecompositionNodes[M] then L := M + 2
+ else
+ if Code < DecompositionNodes[M] then R := M - 2
+ else
+ if Code = DecompositionNodes[M] then
+ begin
+ // found a decomposition, return the codes
+ SetLength(Result, DecompositionNodes[M + 3] - DecompositionNodes[M + 1] - 1);
+ Move(Decompositions[DecompositionNodes[M + 1]], Result[0], Length(Result) * SizeOf(Cardinal));
+ Break;
+ end;
+ end;
+ end;
+ end;
+end;
+
+//----------------- Support for combining classes ----------------------------------------------------------------------
+
+var
+ CCLSize: Cardinal;
+ CCLNodes: TCardinalArray;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure LoadUnicodeCombiningData;
+
+var
+ Stream: TTntResourceStream;
+ I: Cardinal;
+ Header: TUHeader;
+
+begin
+ // make sure no other code is currently modifying the global data area
+ if LoadInProgress = nil then LoadInProgress := TCriticalSection.Create;
+ LoadInProgress.Enter;
+
+ if CCLNodes = nil then
+ begin
+ Stream := TTntResourceStream.Create(HInstance, 'COMBINE', 'UNICODE');
+ Stream.Read(Header, SizeOf(Header));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ Header.Count := Swap(Header.Count);
+ Header.Bytes := SwapCardinal(Header.Bytes);
+ end;
+
+ CCLSize := Header.Count * 3;
+ SetLength(CCLNodes, CCLSize);
+ Stream.Read(CCLNodes[0], CCLSize * SizeOf(Cardinal));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ for I := 0 to CCLSize - 1 do
+ CCLNodes[I] := SwapCardinal(CCLNodes[I]);
+
+ Stream.Free;
+ end;
+ LoadInProgress.Leave;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeCanonicalClass(Code: Cardinal): Cardinal;
+
+var
+ L, R, M: Integer;
+
+begin
+ // load combination data if not already done
+ if CCLNodes = nil then LoadUnicodeCombiningData;
+
+ Result := 0;
+ L := 0;
+ R := CCLSize - 1;
+
+ while L <= R do
+ begin
+ M := (L + R) shr 1;
+ Dec(M, M mod 3);
+ if Code > CCLNodes[M + 1] then L := M + 3
+ else
+ if Code < CCLNodes[M] then R := M - 3
+ else
+ if (Code >= CCLNodes[M]) and (Code <= CCLNodes[M + 1]) then
+ begin
+ Result := CCLNodes[M + 2];
+ Break;
+ end;
+ end;
+end;
+
+//----------------- Support for numeric values -------------------------------------------------------------------------
+
+var
+ NumberSize: Cardinal;
+ NumberNodes: TCardinalArray;
+ NumberValues: TWordArray;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure LoadUnicodeNumberData;
+
+var
+ Stream: TTntResourceStream;
+ I: Cardinal;
+ Header: TUHeader;
+
+begin
+ // make sure no other code is currently modifying the global data area
+ if LoadInProgress = nil then LoadInProgress := TCriticalSection.Create;
+ LoadInProgress.Enter;
+
+ if NumberNodes = nil then
+ begin
+ Stream := TTntResourceStream.Create(HInstance, 'NUMBERS', 'UNICODE');
+ Stream.Read(Header, SizeOf(Header));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ Header.Count := Swap(Header.Count);
+ Header.Bytes := SwapCardinal(Header.Bytes);
+ end;
+
+ NumberSize := Header.Count;
+ SetLength(NumberNodes, NumberSize);
+ Stream.Read(NumberNodes[0], NumberSize * SizeOf(Cardinal));
+ SetLength(NumberValues, (Header.Bytes - NumberSize * SizeOf(Cardinal)) div SizeOf(Word));
+ Stream.Read(NumberValues[0], Length(NumberValues) * SizeOf(Word));
+
+ if Header.BOM = BOM_MSB_FIRST then
+ begin
+ for I := 0 to High(NumberNodes) do
+ NumberNodes[I] := SwapCardinal(NumberNodes[I]);
+ for I := 0 to High(NumberValues) do
+ NumberValues[I] := Swap(NumberValues[I]);
+ end;
+ Stream.Free;
+ end;
+ LoadInProgress.Leave;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeNumberLookup(Code: UCS4; var num: TUNumber): Boolean;
+
+var
+ L, R, M: Integer;
+ VP: PWord;
+
+begin
+ // load number data if not already done
+ if NumberNodes = nil then LoadUnicodeNumberData;
+
+ Result := False;
+ L := 0;
+ R := NumberSize - 1;
+ while L <= R do
+ begin
+ // Determine a "mid" point and adjust to make sure the mid point is at
+ // the beginning of a code+offset pair.
+ M := (L + R) shr 1;
+ Dec(M, M and 1);
+ if Code > NumberNodes[M] then L := M + 2
+ else
+ if Code < NumberNodes[M] then R := M - 2
+ else
+ begin
+ VP := Pointer(Cardinal(@NumberValues[0]) + NumberNodes[M + 1]);
+ num.numerator := VP^;
+ Inc(VP);
+ num.denominator := VP^;
+ Result := True;
+ Break;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeDigitLookup(Code: UCS4; var Digit: Integer): Boolean;
+
+var
+ L, R, M: Integer;
+ VP: PWord;
+
+begin
+ // load number data if not already done
+ if NumberNodes = nil then LoadUnicodeNumberData;
+
+ Result := False;
+ L := 0;
+ R := NumberSize - 1;
+ while L <= R do
+ begin
+ // Determine a "mid" point and adjust to make sure the mid point is at
+ // the beginning of a code+offset pair.
+ M := (L + R) shr 1;
+ Dec(M, M and 1);
+ if Code > NumberNodes[M] then L := M + 2
+ else
+ if Code < NumberNodes[M] then R := M - 2
+ else
+ begin
+ VP := Pointer(Cardinal(@NumberValues[0]) + NumberNodes[M + 1]);
+ M := VP^;
+ Inc(VP);
+ if M = VP^ then
+ begin
+ Digit := M;
+ Result := True;
+ end;
+ Break;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeGetNumber(Code: UCS4): TUNumber;
+
+begin
+ // Initialize with some arbitrary value, because the caller simply cannot
+ // tell for sure if the code is a number without calling the ucisnumber()
+ // macro before calling this function.
+ Result.Numerator := -111;
+ Result.Denominator := -111;
+
+ UnicodeNumberLookup(Code, Result);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UnicodeGetDigit(Code: UCS4): Integer;
+
+begin
+ // Initialize with some arbitrary value, because the caller simply cannot
+ // tell for sure if the code is a number without calling the ucisdigit()
+ // macro before calling this function.
+ Result := -111;
+
+ UnicodeDigitLookup(Code, Result);
+end;
+
+//----------------- TSearchEngine --------------------------------------------------------------------------------------
+
+constructor TSearchEngine.Create(AOwner: TWideStrings);
+
+begin
+ FOwner := AOwner;
+ FResults := TList.Create;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+destructor TSearchEngine.Destroy;
+
+begin
+ Clear;
+ FResults.Free;
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TSearchEngine.AddResult(Start, Stop: Cardinal);
+
+begin
+ FResults.Add(Pointer(Start));
+ FResults.Add(Pointer(Stop));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TSearchEngine.Clear;
+
+begin
+ ClearResults;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TSearchEngine.ClearResults;
+
+begin
+ FResults.Clear;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TSearchEngine.DeleteResult(Index: Cardinal);
+
+// explicitly deletes a search result
+
+begin
+ with FResults do
+ begin
+ // start index
+ Delete(2 * Index);
+ // stop index
+ Delete(2 * Index);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TSearchEngine.GetCount: Integer;
+
+// returns the number of matches found
+
+begin
+ Result := FResults.Count div 2;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TSearchEngine.GetResult(Index: Cardinal; var Start, Stop: Integer);
+
+// returns the start position of a match (end position can be determined by adding the length
+// of the pattern to the start position)
+
+begin
+ Start := Cardinal(FResults[2 * Index]);
+ Stop := Cardinal(FResults[2 * Index + 1]);
+end;
+
+//----------------- TUTBMSearch ----------------------------------------------------------------------------------------
+
+constructor TUTBMSearch.Create(AOwner: TWideStrings);
+
+begin
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+destructor TUTBMSearch.Destroy;
+
+begin
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TUTBMSearch.ClearPattern;
+
+begin
+ FreeMem(FPattern);
+ FPattern := nil;
+ FFlags := [];
+ FPatternUsed := 0;
+ FPatternSize := 0;
+ FPatternLength := 0;
+ FreeMem(FSkipValues);
+ FSkipValues := nil;
+ FSkipsUsed := 0;
+ FMD4 := 0;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.GetSkipValue(TextStart, TextEnd: PUCS2): Cardinal;
+
+// looks up the SkipValues value for a character
+
+var
+ I: Integer;
+ C1, C2: UCS4;
+ Sp: PUTBMSkip;
+
+begin
+ Result := 0;
+ if Cardinal(TextStart) < Cardinal(TextEnd) then
+ begin
+ C1 := Word(TextStart^);
+ if (TextStart + 1) < TextEnd then C2 := Word((TextStart + 1)^)
+ else C2 := $FFFFFFFF;
+ if (SurrogateHighStart <= C1) and
+ (C1 <= SurrogateHighEnd) and
+ (SurrogateLowStart <= C2) and
+ (C2 <= $DDDD) then C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+
+ Sp := FSkipValues;
+ for I := 0 to FSkipsUsed - 1 do
+ begin
+ if not (Boolean(C1 xor Sp.BMChar.UpCase) and
+ Boolean(C1 xor Sp.BMChar.LoCase) and
+ Boolean(C1 xor Sp.BMChar.TitleCase)) then
+ begin
+ if (TextEnd - TextStart) < Sp.SkipValues then Result := TextEnd - TextStart
+ else Result := Sp.SkipValues;
+ Exit;
+ end;
+ Inc(Sp);
+ end;
+ Result := FPatternLength;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.Match(Text, Start, Stop: PUCS2; var MatchStart, MatchEnd: Cardinal): Boolean;
+
+// Checks once whether the text at position Start (which points to the end of the current text part to be matched)
+// matches.
+// Note: If whole words only are allowed then the left and right border tests are done here too. The keypoint for the
+// right border is that the next character after the search string is either the text end or a space character.
+// For the left side this is similar, but there is nothing like a string start marker (like the string end marker #0).
+//
+// It seems not obvious, but we still can use the passed Text pointer to do the left check. Although this pointer
+// might not point to the real string start (e.g. in TUTBMSearch.FindAll Text is incremented as needed) it is
+// still a valid check mark. The reason is that Text either points to the real string start or a previous match
+// (happend already, keep in mind the search options do not change in the FindAll loop) and the character just
+// before Text is a space character.
+// This fact implies, though, that strings passed to Find (or FindFirst, FindAll in TUTBMSearch) always really
+// start at the given address. Although this might not be the case in some circumstances (e.g. if you pass only
+// the selection from an editor) it is still assumed that a pattern matching from the first position on (from the
+// search string start) also matches when whole words only are allowed.
+
+var
+ CheckSpace: Boolean;
+ C1, C2: UCS4;
+ Count: Integer;
+ Cp: PUTBMChar;
+
+begin
+ // be pessimistic
+ Result := False;
+
+ // set the potential match endpoint first
+ MatchEnd := (Start - Text) + 1;
+
+ C1 := Word(Start^);
+ if (Start + 1) < Stop then C2 := Word((Start + 1)^)
+ else C2 := $FFFFFFFF;
+ if (SurrogateHighStart <= C1) and
+ (C1 <= SurrogateHighEnd) and
+ (SurrogateLowStart <= C2) and
+ (C2 <= SurrogateLowEnd) then
+ begin
+ C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+ // Adjust the match end point to occur after the UTF-16 character.
+ Inc(MatchEnd);
+ end;
+
+ // check special cases
+ if FPatternUsed = 1 then
+ begin
+ MatchStart := Start - Text;
+ Result := True;
+ Exit;
+ end;
+
+ // Early out if entire words need to be matched and the next character
+ // in the search string is neither the string end nor a space character.
+ if (sfWholeWordOnly in FFlags) and
+ not ((Start + 1)^ = WideNull) and
+ not UnicodeIsWhiteSpace(Word((Start + 1)^)) then Exit;
+
+ // compare backward
+ Cp := FPattern;
+ Inc(Cp, FPatternUsed - 1);
+
+ Count := FPatternLength;
+ while (Start >= Text) and (Count > 0) do
+ begin
+ // ignore non-spacing characters if indicated
+ if sfIgnoreNonSpacing in FFlags then
+ begin
+ while (Start > Text) and UnicodeIsNonSpacing(C1) do
+ begin
+ Dec(Start);
+ C2 := Word(Start^);
+ if (Start - 1) > Text then C1 := Word((Start - 1)^)
+ else C1 := $FFFFFFFF;
+ if (SurrogateLowStart <= C2) and (C2 <= SurrogateLowEnd) and
+ (SurrogateHighStart <= C1) and (C1 <= SurrogateHighEnd) then
+ begin
+ C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+ Dec(Start);
+ end
+ else C1 := C2;
+ end;
+ end;
+
+ // handle space compression if indicated
+ if sfSpaceCompress in FFlags then
+ begin
+ CheckSpace := False;
+ while (Start > Text) and
+ (UnicodeIsWhiteSpace(C1) or UnicodeIsControl(C1)) do
+ begin
+ CheckSpace := UnicodeIsWhiteSpace(C1);
+ Dec(Start);
+ C2 := Word(Start^);
+ if (Start - 1) > Text then C1 := Word((Start - 1)^)
+ else C1 := $FFFFFFFF;
+ if (SurrogateLowStart <= C2) and (C2 <= SurrogateLowEnd) and
+ (SurrogateHighStart <= C1) and (C1 <= SurrogateHighEnd) then
+ begin
+ C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+ Dec(Start);
+ end
+ else C1 := C2;
+ end;
+ // Handle things if space compression was indicated and one or
+ // more member characters were found.
+ if CheckSpace then
+ begin
+ if Cp.UpCase <> $20 then Exit;
+ Dec(Cp);
+ Dec(Count);
+ // If Count is 0 at this place then the space character(s) was the first
+ // in the pattern and we need to correct the start position.
+ if Count = 0 then Inc(Start);
+ end;
+ end;
+
+ // handle the normal comparison cases
+ if (Count > 0) and
+ (Boolean(C1 xor Cp.UpCase) and
+ Boolean(C1 xor Cp.LoCase) and
+ Boolean(C1 xor Cp.TitleCase)) then Exit;
+
+ if C1 >= $10000 then Dec(Count, 2)
+ else Dec(Count, 1);
+ if Count > 0 then
+ begin
+ Dec(Cp);
+ // get the next preceding character
+ if Start > Text then
+ begin
+ Dec(Start);
+ C2 := Word(Start^);
+ if (Start - 1) > Text then C1 := Word((Start - 1)^)
+ else C1 := $FFFFFFFF;
+ if (SurrogateLowStart <= C2) and (C2 <= SurrogateLowEnd) and
+ (SurrogateHighStart <= C1) and (C1 <= SurrogateHighEnd) then
+ begin
+ C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+ Dec(Start);
+ end
+ else C1 := C2;
+ end;
+ end;
+ end;
+
+ // So far the string matched. Now check its left border for a space character if
+ // whole word only are allowed.
+ if not (sfWholeWordOnly in FFlags) or
+ (Start <= Text) or
+ UnicodeIsWhiteSpace(Word((Start - 1)^)) then
+ begin
+ // set the match start position
+ MatchStart := Start - Text;
+ Result := True;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TUTBMSearch.Compile(Pattern: PUCS2; PatternLength: Integer; Flags: TSearchFlags);
+
+var
+ HaveSpace: Boolean;
+ I, J, K,
+ SLen: Integer;
+ Cp: PUTBMChar;
+ Sp: PUTBMSkip;
+ C1, C2,
+ Sentinel: UCS4;
+
+begin
+ if Assigned(Pattern) and (Pattern^ <> #0) and (PatternLength > 0) then
+ begin
+ // do some initialization
+ FFlags := Flags;
+ // extra skip flag
+ FMD4 := 1;
+
+ Sentinel := 0;
+
+ // allocate more storage if necessary
+ FPattern := AllocMem(SizeOf(TUTBMChar) * PatternLength);
+ FSkipValues := AllocMem(SizeOf(TUTBMSkip) * PatternLength);
+ FPatternSize := PatternLength;
+
+ // Preprocess the pattern to remove controls (if specified) and determine case.
+ Cp := FPattern;
+ I := 0;
+ HaveSpace := False;
+ while I < PatternLength do
+ begin
+ C1 := Word(Pattern[I]);
+ if (I + 1) < PatternLength then C2 := Word(Pattern[I + 1])
+ else C2 := $FFFFFFFF;
+ if (SurrogateHighStart <= C1) and (C1 <= SurrogateHighEnd) and
+ (SurrogateLowStart <= C2) and (C2 <= SurrogateLowEnd) then C1 := $10000 + (((C1 and $03FF) shl 10) or (C2 and $03FF));
+
+ // Make sure the HaveSpace flag is turned off if the character is not an appropriate one.
+ if not UnicodeIsWhiteSpace(C1) then HaveSpace := False;
+
+ // If non-spacing characters should be ignored, do it here.
+ if (sfIgnoreNonSpacing in Flags) and UnicodeIsNonSpacing(C1) then
+ begin
+ Inc(I);
+ Continue;
+ end;
+
+ // check if spaces and controls need to be compressed
+ if sfSpaceCompress in Flags then
+ begin
+ if UnicodeIsWhiteSpace(C1) then
+ begin
+ if not HaveSpace then
+ begin
+ // Add a space and set the flag.
+ Cp.UpCase := $20;
+ Cp.LoCase := $20;
+ Cp.TitleCase := $20;
+ Inc(Cp);
+
+ // increase the real pattern length
+ Inc(FPatternLength);
+ Sentinel := $20;
+ HaveSpace := True;
+ end;
+ Inc(I);
+ Continue;
+ end;
+
+ // ignore all control characters
+ if UnicodeIsControl(C1) then
+ begin
+ Inc(I);
+ Continue;
+ end;
+ end;
+
+ // add the character
+ if not (sfCaseSensitive in Flags) then
+ begin
+ Cp.UpCase := UnicodeToUpper(C1);
+ Cp.LoCase := UnicodeToLower(C1);
+ Cp.TitleCase := UnicodeToTitle(C1);
+ end
+ else
+ begin
+ Cp.UpCase := C1;
+ Cp.LoCase := C1;
+ Cp.TitleCase := C1;
+ end;
+
+ Sentinel := Cp.UpCase;
+
+ // move to the next character
+ Inc(Cp);
+
+ // increase the real pattern length appropriately
+ if C1 >= $10000 then Inc(FPatternLength, 2)
+ else Inc(FPatternLength, 1);
+
+ // increment the loop index for UTF-16 characters
+ if C1 > $10000 then Inc(I, 2)
+ else Inc(I);
+ end;
+
+ // set the number of characters actually used
+ FPatternUsed := (PAnsiChar(Cp) - PAnsiChar(FPattern)) div SizeOf(TUTBMChar);
+
+ // Go through and construct the skip array and determine the actual length
+ // of the pattern in UCS2 terms.
+ SLen := FPatternLength - 1;
+ Cp := FPattern;
+ K := 0;
+ for I := 0 to FPatternUsed - 1 do
+ begin
+ // locate the character in the FSkipValues array
+ Sp := FSkipValues;
+ J := 0;
+ while (J < FSkipsUsed) and (Sp.BMChar.UpCase <> Cp.UpCase) do
+ begin
+ Inc(J);
+ Inc(Sp);
+ end;
+
+ // If the character is not found, set the new FSkipValues element and
+ // increase the number of FSkipValues elements.
+ if J = FSkipsUsed then
+ begin
+ Sp.BMChar := Cp;
+ Inc(FSkipsUsed);
+ end;
+
+ // Set the updated FSkipValues value. If the character is UTF-16 and is
+ // not the last one in the pattern, add one to its FSkipValues value.
+ Sp.SkipValues := SLen - K;
+ if (Cp.UpCase >= $10000) and ((K + 2) < SLen) then Inc(Sp.SkipValues);
+
+ // set the new extra FSkipValues for the sentinel character
+ if ((Cp.UpCase >= $10000) and
+ ((K + 2) <= SLen) or ((K + 1) <= SLen) and
+ (Cp.UpCase = Sentinel)) then FMD4 := SLen - K;
+
+ // increase the actual index
+ if Cp.UpCase >= $10000 then Inc(K, 2)
+ else Inc(K, 1);
+ Inc(Cp);
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.Find(Text: PUCS2; TextLen: Cardinal; var MatchStart, MatchEnd: Cardinal): Boolean;
+
+// this is the main matching routine using a tuned Boyer-Moore algorithm
+
+var
+ K: Cardinal;
+ Start,
+ Stop: PUCS2;
+
+begin
+ Result := False;
+ if Assigned(FPattern) and
+ (FPatternUsed > 0) and
+ Assigned(Text) and
+ (TextLen > 0) and
+ (TextLen >= FPatternLength) then
+ begin
+ Start := Text + FPatternLength - 1;
+ Stop := Text + TextLen;
+
+ // adjust the start point if it points to a low surrogate
+ if (SurrogateLowStart <= UCS4(Start^)) and
+ (UCS4(Start^) <= SurrogateLowEnd) and
+ (SurrogateHighStart <= UCS4((Start - 1)^)) and
+ (UCS4((Start - 1)^) <= SurrogateHighEnd) then Dec(Start);
+
+ while Start < Stop do
+ begin
+ repeat
+ K := GetSkipValue(Start, Stop);
+ if K = 0 then Break;
+ Inc(Start, K);
+ if (Start < Stop) and
+ (SurrogateLowStart <= UCS4(Start^)) and
+ (UCS4(Start^) <= SurrogateLowEnd) and
+ (SurrogateHighStart <= UCS4((Start - 1)^)) and
+ (UCS4((Start - 1)^) <= SurrogateHighEnd) then Dec(Start);
+ until False;
+
+ if (Start < Stop) and Match(Text, Start, Stop, MatchStart, MatchEnd) then
+ begin
+ Result := True;
+ Break;
+ end;
+ Inc(Start, FMD4);
+ if (Start < Stop) and
+ (SurrogateLowStart <= UCS4(Start^)) and
+ (UCS4(Start^) <= SurrogateLowEnd) and
+ (SurrogateHighStart <= UCS4((Start - 1)^)) and
+ (UCS4((Start - 1)^) <= SurrogateHighEnd) then Dec(Start);
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TUTBMSearch.Clear;
+
+begin
+ ClearPattern;
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.FindAll(const Text: WideString): Boolean;
+
+begin
+ Result := FindAll(PWideChar(Text), Length(Text));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.FindAll(const Text: PWideChar; TextLen: Cardinal): Boolean;
+
+// Looks for all occurences of the pattern passed to FindPrepare and creates an internal list of their positions.
+
+var
+ Start, Stop: Cardinal;
+ Run: PWideChar;
+ RunLen: Cardinal;
+
+begin
+ ClearResults;
+ Run := Text;
+ RunLen := TextLen;
+ // repeat to find all occurences of the pattern
+ while Find(Run, RunLen, Start, Stop) do
+ begin
+ // store this result (consider text pointer movement)...
+ AddResult(Start + Run - Text, Stop + Run - Text);
+ // ... and advance text position and length
+ Inc(Run, Stop);
+ Dec(RunLen, Stop);
+ end;
+ Result := Count > 0;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.FindFirst(const Text: WideString; var Start, Stop: Cardinal): Boolean;
+
+// Looks for the first occurence of the pattern passed to FindPrepare in Text and returns True if one could be
+// found (in which case Start and Stop are set to the according indices) otherwise False.
+// This function is in particular of interest if only one occurence needs to be found.
+
+begin
+ ClearResults;
+ Result := Find(PWideChar(Text), Length(Text), Start, Stop);
+ if Result then AddResult(Start, Stop);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TUTBMSearch.FindFirst(const Text: PWideChar; TextLen: Cardinal; var Start, Stop: Cardinal): Boolean;
+
+// Same as the WideString version of this method.
+
+begin
+ ClearResults;
+ Result := Find(Text, TextLen, Start, Stop);
+ if Result then AddResult(Start, Stop);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TUTBMSearch.FindPrepare(const Pattern: WideString; Options: TSearchFlags);
+
+begin
+ FindPrepare(PWideChar(Pattern), Length(Pattern), Options);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TUTBMSearch.FindPrepare(const Pattern: PWideChar; PatternLength: Cardinal; Options: TSearchFlags);
+
+// prepare following search by compiling the given pattern into an internal structure
+
+begin
+ Compile(Pattern, PatternLength, Options);
+end;
+
+//----------------- Unicode RE search core -----------------------------------------------------------------------------
+
+const
+ _URE_NONSPACING = $00000001;
+ _URE_COMBINING = $00000002;
+ _URE_NUMDIGIT = $00000004;
+ _URE_NUMOTHER = $00000008;
+ _URE_SPACESEP = $00000010;
+ _URE_LINESEP = $00000020;
+ _URE_PARASEP = $00000040;
+ _URE_CNTRL = $00000080;
+ _URE_PRIVATE = $00000100;
+
+ _URE_UPPER = $00000200;
+ _URE_LOWER = $00000400;
+ _URE_TITLE = $00000800;
+ _URE_MODIFIER = $00001000;
+ _URE_OTHERLETTER = $00002000;
+ _URE_DASHPUNCT = $00004000;
+ _URE_OPENPUNCT = $00008000;
+ _URE_CLOSEPUNCT = $00010000;
+ _URE_OTHERPUNCT = $00020000;
+ _URE_MATHSYM = $00040000;
+ _URE_CURRENCYSYM = $00080000;
+ _URE_OTHERSYM = $00100000;
+
+ _URE_LTR = $00200000;
+ _URE_RTL = $00400000;
+
+ _URE_EURONUM = $00800000;
+ _URE_EURONUMSEP = $01000000;
+ _URE_EURONUMTERM = $02000000;
+ _URE_ARABNUM = $04000000;
+ _URE_COMMONSEP = $08000000;
+
+ _URE_BLOCKSEP = $10000000;
+ _URE_SEGMENTSEP = $20000000;
+
+ _URE_WHITESPACE = $40000000;
+ _URE_OTHERNEUT = $80000000;
+
+ // Error codes
+ _URE_OK = 0;
+ _URE_UNEXPECTED_EOS = -1;
+ _URE_CCLASS_OPEN = -2;
+ _URE_UNBALANCED_GROUP = -3;
+ _URE_INVALID_PROPERTY = -4;
+ _URE_INVALID_RANGE = -5;
+ _URE_RANGE_OPEN = -6;
+
+ // options that can be combined for searching
+ URE_IGNORE_NONSPACING = $01;
+ URE_DONT_MATCHES_SEPARATORS = $02;
+
+const // Flags used internally in the FDFA
+ _URE_DFA_CASEFOLD = $01;
+ _URE_DFA_BLANKLINE = $02;
+
+ CClassFlags: array[0..32] of Cardinal = (
+ 0,
+ _URE_NONSPACING,
+ _URE_COMBINING,
+ _URE_NUMDIGIT,
+ _URE_NUMOTHER,
+ _URE_SPACESEP,
+ _URE_LINESEP,
+ _URE_PARASEP,
+ _URE_CNTRL,
+ _URE_PRIVATE,
+ _URE_UPPER,
+ _URE_LOWER,
+ _URE_TITLE,
+ _URE_MODIFIER,
+ _URE_OTHERLETTER,
+ _URE_DASHPUNCT,
+ _URE_OPENPUNCT,
+ _URE_CLOSEPUNCT,
+ _URE_OTHERPUNCT,
+ _URE_MATHSYM,
+ _URE_CURRENCYSYM,
+ _URE_OTHERSYM,
+ _URE_LTR,
+ _URE_RTL,
+ _URE_EURONUM,
+ _URE_EURONUMSEP,
+ _URE_EURONUMTERM,
+ _URE_ARABNUM,
+ _URE_COMMONSEP,
+ _URE_BLOCKSEP,
+ _URE_SEGMENTSEP,
+ _URE_WHITESPACE,
+ _URE_OTHERNEUT
+ );
+
+const // symbol types for the FDFA
+ _URE_ANY_CHAR = 1;
+ _URE_CHAR = 2;
+ _URE_CCLASS = 3;
+ _URE_NCCLASS = 4;
+ _URE_BOL_ANCHOR = 5;
+ _URE_EOL_ANCHOR = 6;
+
+ // op codes for converting the NFA to a FDFA
+ _URE_SYMBOL = 10;
+ _URE_PAREN = 11;
+ _URE_QUEST = 12;
+ _URE_STAR = 13;
+ _URE_PLUS = 14;
+ _URE_ONE = 15;
+ _URE_AND = 16;
+ _URE_OR = 17;
+
+ _URE_NOOP = $FFFF;
+
+ _URE_REGSTART = $8000;
+ _URE_REGEND = $4000;
+
+//----------------- TURESearch -----------------------------------------------------------------------------------------
+
+constructor TURESearch.Create(AOwner: TWideStrings);
+
+begin
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+destructor TURESearch.Destroy;
+
+begin
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.Clear;
+
+begin
+ inherited;
+ ClearUREBuffer;
+ ClearDFA;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.Push(V: Cardinal);
+
+begin
+ with FUREBuffer do
+ begin
+ // If the 'Reducing' parameter is True, check to see if the value passed is already on the stack.
+ if Reducing and ExpressionList.Expressions[Word(V)].OnStack then Exit;
+
+ if Stack.ListUsed = Length(Stack.List) then SetLength(Stack.List, Length(Stack.List) + 8);
+ Stack.List[Stack.ListUsed] := V;
+ Inc(Stack.ListUsed);
+
+ // If the 'reducing' parameter is True, flag the element as being on the Stack.
+ if Reducing then ExpressionList.Expressions[Word(V)].OnStack := True;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.Peek: Cardinal;
+
+begin
+ if FUREBuffer.Stack.ListUsed = 0 then Result := _URE_NOOP
+ else Result := FUREBuffer.Stack.List[FUREBuffer.Stack.ListUsed - 1];
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.Pop: Cardinal;
+
+begin
+ if FUREBuffer.Stack.ListUsed = 0 then Result := _URE_NOOP
+ else
+ begin
+ Dec(FUREBuffer.Stack.ListUsed);
+ Result := FUREBuffer.Stack.List[FUREBuffer.Stack.ListUsed];
+ if FUREBuffer.Reducing then FUREBuffer.ExpressionList.Expressions[Word(Result)].OnStack := False;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.ParsePropertyList(Properties: PUCS2; Limit: Cardinal; var Mask: Cardinal): Cardinal;
+
+// Parse a comma-separated list of integers that represent character properties. Combine them
+// into a mask that is returned in the 'mask' variable, and return the number of characters consumed.
+
+var
+ M, N: Cardinal;
+ Run,
+ ListEnd: PUCS2;
+
+begin
+ Run := Properties;
+ ListEnd := Run + Limit;
+
+ M := 0;
+ N := 0;
+ while (FUREBuffer.Error = _URE_OK) and (Run < ListEnd) do
+ begin
+ if Run^ = ',' then
+ begin
+ // Encountered a comma, so select the next character property flag and reset the number.
+ M := M or CClassFlags[N];
+ N := 0;
+ end
+ else
+ if (Run^ >= '0') and (Run^ <= '9') then
+ begin
+ // Encountered a digit, so start or Continue building the cardinal that represents the character property flag.
+ N := (N * 10) + Cardinal(Word(Run^) - Ord('0'));
+ end
+ else
+ // Encountered something that is not part of the property list. Indicate that we are done.
+ Break;
+
+ // If a property number greater than 32 occurs, then there is a problem. Most likely a missing comma separator.
+ if N > 32 then FUREBuffer.Error := _URE_INVALID_PROPERTY;
+ Inc(Run);
+ end;
+
+ if N in [1..32] then M := M or CClassFlags[N];
+
+ // Set the mask that represents the group of character properties.
+ Mask := M;
+
+ // Return the number of characters consumed.
+ Result := Run - Properties;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.MakeHexNumber(NP: PUCS2; Limit: Cardinal; var Number: Cardinal): Cardinal;
+
+// Collect a hex number with 1 to 4 digits and return the number of characters used.
+
+var
+ I: Integer;
+ Run,
+ ListEnd: PUCS2;
+
+begin
+ Run := np;
+ ListEnd := Run + Limit;
+
+ Number := 0;
+ I := 0;
+ while (I < 4) and (Run < ListEnd) do
+ begin
+ if (Run^ >= '0') and (Run^ <= '9') then
+ Number := (Number shl 4) + Cardinal(Word(Run^) - Ord('0'))
+ else
+ if (Run^ >= 'A') and (Run^ <= 'F') then
+ Number := (Number shl 4) + Cardinal(Word(Run^) - Ord('A')) + 10
+ else
+ if (Run^ >= 'a') and (Run^ <= 'f') then
+ Number := (Number shl 4) + Cardinal(Word(Run^) - Ord('a')) + 10
+ else Break;
+ Inc(I);
+ Inc(Run);
+ end;
+
+ Result := Run - NP;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.AddRange(var CCL: TCClass; Range: TRange);
+
+// Insert a Range into a character class, removing duplicates and ordering them in increasing Range-start order.
+
+var
+ I: Integer;
+ Temp: UCS4;
+
+begin
+ // If the `Casefold' flag is set, then make sure both endpoints of the Range are converted to lower.
+ if (FUREBuffer.Flags and _URE_DFA_CASEFOLD) <> 0 then
+ begin
+ Range.MinCode := UnicodeToLower(Range.MinCode);
+ Range.MaxCode := UnicodeToLower(Range.MaxCode);
+ end;
+
+ // Swap the Range endpoints if they are not in increasing order.
+ if Range.MinCode > Range.MaxCode then
+ begin
+ Temp := Range.MinCode;
+ Range.MinCode := Range.MaxCode;
+ Range.MaxCode := Temp;
+ end;
+
+ I := 0;
+ while (I < CCL.RangesUsed) and (Range.MinCode < CCL.Ranges[I].MinCode) do Inc(I);
+
+ // check for a duplicate
+ if (I < CCL.RangesUsed) and (Range.MinCode = CCL.Ranges[I].MinCode) and (Range.MaxCode = CCL.Ranges[I].MaxCode) then Exit;
+
+ if CCL.RangesUsed = Length(CCL.Ranges) then SetLength(CCL.Ranges, Length(CCL.Ranges) + 8);
+
+ if I < CCL.RangesUsed then Move(CCL.Ranges[I], CCL.Ranges[I + 1], SizeOf(TRange) * (CCL.RangesUsed - I));
+
+ CCL.Ranges[I].MinCode := Range.MinCode;
+ CCL.Ranges[I].MaxCode := Range.MaxCode;
+ Inc(CCL.RangesUsed);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+const
+ _URE_ALPHA_MASK = _URE_UPPER or _URE_LOWER or _URE_OTHERLETTER or _URE_MODIFIER or
+ _URE_TITLE or _URE_NONSPACING or _URE_COMBINING;
+ _URE_ALNUM_MASK = _URE_ALPHA_MASK or _URE_NUMDIGIT;
+ _URE_PUNCT_MASK = _URE_DASHPUNCT or _URE_OPENPUNCT or _URE_CLOSEPUNCT or _URE_OTHERPUNCT;
+ _URE_GRAPH_MASK = _URE_NUMDIGIT or _URE_NUMOTHER or _URE_ALPHA_MASK or _URE_MATHSYM or
+ _URE_CURRENCYSYM or _URE_OTHERSYM;
+ _URE_PRINT_MASK = _URE_GRAPH_MASK or _URE_SPACESEP;
+ _URE_SPACE_MASK = _URE_SPACESEP or _URE_LINESEP or _URE_PARASEP;
+
+type
+ PTrie = ^TTrie;
+ TTrie = record
+ Key: UCS2;
+ Len,
+ Next: Cardinal;
+ Setup: Integer;
+ Mask: Cardinal;
+ end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.CCLSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+
+begin
+ Symbol.Props := Symbol.Props or Mask;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.SpaceSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+
+var
+ Range: TRange;
+
+begin
+ Symbol.Props := Symbol.Props or Mask;
+
+ Range.MinCode := Word(Tabulator);
+ Range.MaxCode := Word(Tabulator);
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := Word(CarriageReturn);
+ Range.MaxCode := Word(CarriageReturn);
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := Word(LineFeed);
+ Range.MaxCode := Word(LineFeed);
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := Word(FormFeed);
+ Range.MaxCode := Word(FormFeed);
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := $FEFF;
+ Range.MaxCode := $FEFF;
+ AddRange(Symbol.Symbol.CCL, Range);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.HexDigitSetup(Symbol: PSymbolTableEntry; Mask: Cardinal);
+
+var
+ Range: TRange;
+
+begin
+ Range.MinCode := Word('0');
+ Range.MaxCode := Word('9');
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := Word('A');
+ Range.MaxCode := Word('F');
+ AddRange(Symbol.Symbol.CCL, Range);
+ Range.MinCode := Word('a');
+ Range.MaxCode := Word('f');
+ AddRange(Symbol.Symbol.CCL, Range);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+const
+ CClassTrie: array[0..64] of TTrie = (
+ (Key: #$003A; Len: 1; Next: 1; Setup: 0; Mask: 0),
+ (Key: #$0061; Len: 9; Next: 10; Setup: 0; Mask: 0),
+ (Key: #$0063; Len: 8; Next: 19; Setup: 0; Mask: 0),
+ (Key: #$0064; Len: 7; Next: 24; Setup: 0; Mask: 0),
+ (Key: #$0067; Len: 6; Next: 29; Setup: 0; Mask: 0),
+ (Key: #$006C; Len: 5; Next: 34; Setup: 0; Mask: 0),
+ (Key: #$0070; Len: 4; Next: 39; Setup: 0; Mask: 0),
+ (Key: #$0073; Len: 3; Next: 49; Setup: 0; Mask: 0),
+ (Key: #$0075; Len: 2; Next: 54; Setup: 0; Mask: 0),
+ (Key: #$0078; Len: 1; Next: 59; Setup: 0; Mask: 0),
+ (Key: #$006C; Len: 1; Next: 11; Setup: 0; Mask: 0),
+ (Key: #$006E; Len: 2; Next: 13; Setup: 0; Mask: 0),
+ (Key: #$0070; Len: 1; Next: 16; Setup: 0; Mask: 0),
+ (Key: #$0075; Len: 1; Next: 14; Setup: 0; Mask: 0),
+ (Key: #$006D; Len: 1; Next: 15; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 16; Setup: 1; Mask: _URE_ALNUM_MASK),
+ (Key: #$0068; Len: 1; Next: 17; Setup: 0; Mask: 0),
+ (Key: #$0061; Len: 1; Next: 18; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 19; Setup: 1; Mask: _URE_ALPHA_MASK),
+ (Key: #$006E; Len: 1; Next: 20; Setup: 0; Mask: 0),
+ (Key: #$0074; Len: 1; Next: 21; Setup: 0; Mask: 0),
+ (Key: #$0072; Len: 1; Next: 22; Setup: 0; Mask: 0),
+ (Key: #$006C; Len: 1; Next: 23; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 24; Setup: 1; Mask: _URE_CNTRL),
+ (Key: #$0069; Len: 1; Next: 25; Setup: 0; Mask: 0),
+ (Key: #$0067; Len: 1; Next: 26; Setup: 0; Mask: 0),
+ (Key: #$0069; Len: 1; Next: 27; Setup: 0; Mask: 0),
+ (Key: #$0074; Len: 1; Next: 28; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 29; Setup: 1; Mask: _URE_NUMDIGIT),
+ (Key: #$0072; Len: 1; Next: 30; Setup: 0; Mask: 0),
+ (Key: #$0061; Len: 1; Next: 31; Setup: 0; Mask: 0),
+ (Key: #$0070; Len: 1; Next: 32; Setup: 0; Mask: 0),
+ (Key: #$0068; Len: 1; Next: 33; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 34; Setup: 1; Mask: _URE_GRAPH_MASK),
+ (Key: #$006F; Len: 1; Next: 35; Setup: 0; Mask: 0),
+ (Key: #$0077; Len: 1; Next: 36; Setup: 0; Mask: 0),
+ (Key: #$0065; Len: 1; Next: 37; Setup: 0; Mask: 0),
+ (Key: #$0072; Len: 1; Next: 38; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 39; Setup: 1; Mask: _URE_LOWER),
+ (Key: #$0072; Len: 2; Next: 41; Setup: 0; Mask: 0),
+ (Key: #$0075; Len: 1; Next: 45; Setup: 0; Mask: 0),
+ (Key: #$0069; Len: 1; Next: 42; Setup: 0; Mask: 0),
+ (Key: #$006E; Len: 1; Next: 43; Setup: 0; Mask: 0),
+ (Key: #$0074; Len: 1; Next: 44; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 45; Setup: 1; Mask: _URE_PRINT_MASK),
+ (Key: #$006E; Len: 1; Next: 46; Setup: 0; Mask: 0),
+ (Key: #$0063; Len: 1; Next: 47; Setup: 0; Mask: 0),
+ (Key: #$0074; Len: 1; Next: 48; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 49; Setup: 1; Mask: _URE_PUNCT_MASK),
+ (Key: #$0070; Len: 1; Next: 50; Setup: 0; Mask: 0),
+ (Key: #$0061; Len: 1; Next: 51; Setup: 0; Mask: 0),
+ (Key: #$0063; Len: 1; Next: 52; Setup: 0; Mask: 0),
+ (Key: #$0065; Len: 1; Next: 53; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 54; Setup: 2; Mask: _URE_SPACE_MASK),
+ (Key: #$0070; Len: 1; Next: 55; Setup: 0; Mask: 0),
+ (Key: #$0070; Len: 1; Next: 56; Setup: 0; Mask: 0),
+ (Key: #$0065; Len: 1; Next: 57; Setup: 0; Mask: 0),
+ (Key: #$0072; Len: 1; Next: 58; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 59; Setup: 1; Mask: _URE_UPPER),
+ (Key: #$0064; Len: 1; Next: 60; Setup: 0; Mask: 0),
+ (Key: #$0069; Len: 1; Next: 61; Setup: 0; Mask: 0),
+ (Key: #$0067; Len: 1; Next: 62; Setup: 0; Mask: 0),
+ (Key: #$0069; Len: 1; Next: 63; Setup: 0; Mask: 0),
+ (Key: #$0074; Len: 1; Next: 64; Setup: 0; Mask: 0),
+ (Key: #$003A; Len: 1; Next: 65; Setup: 3; Mask: 0)
+ );
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.PosixCCL(CP: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+
+// Probe for one of the POSIX colon delimited character classes in the static trie.
+
+var
+ I: Integer;
+ N: Cardinal;
+ TP: PTrie;
+ Run,
+ ListEnd: PUCS2;
+
+
+begin
+ Result := 0;
+ // If the number of characters left is less than 7,
+ // then this cannot be interpreted as one of the colon delimited classes.
+ if Limit >= 7 then
+ begin
+ Run := cp;
+ ListEnd := Run + Limit;
+ TP := @CClassTrie[0];
+ I := 0;
+ while (Run < ListEnd) and (I < 8) do
+ begin
+ N := TP.Len;
+ while (N > 0) and (TP.Key <> Run^) do
+ begin
+ Inc(TP);
+ Dec(N);
+ end;
+
+ if N = 0 then
+ begin
+ Result := 0;
+ Exit;
+ end;
+
+ if (Run^ = ':') and ((I = 6) or (I = 7)) then
+ begin
+ Inc(Run);
+ Break;
+ end;
+ if (Run + 1) < ListEnd then TP := @CClassTrie[TP.Next];
+ Inc(I);
+ Inc(Run);
+ end;
+
+ case TP.Setup of
+ 1:
+ begin
+ CCLSetup(Symbol, TP.Mask);
+ Result := Run - CP;
+ end;
+ 2:
+ begin
+ SpaceSetup(Symbol, TP.Mask);
+ Result := Run - CP;
+ end;
+ 3:
+ begin
+ HexDigitSetup(Symbol, TP.Mask);
+ Result := Run - CP;
+ end;
+ else
+ Result := 0;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.BuildCharacterClass(CP: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+
+// Construct a list of ranges and return the number of characters consumed.
+
+var
+ RangeEnd: Integer;
+ N: Cardinal;
+ Run,
+ ListEnd: PUCS2;
+ C, Last: UCS4;
+ Range: TRange;
+
+
+begin
+ Run := cp;
+ ListEnd := Run + Limit;
+
+ if Run^ = '^' then
+ begin
+ Symbol.AType := _URE_NCCLASS;
+ Inc(Run);
+ end
+ else Symbol.AType := _URE_CCLASS;
+
+ Last := 0;
+ RangeEnd := 0;
+ while (FUREBuffer.Error = _URE_OK) and (Run < ListEnd) do
+ begin
+ // Allow for the special case []abc], where the first closing bracket would end an empty
+ // character class, which makes no sense. Hence this bracket is treaded literally.
+ if (Run^ = ']') and (Symbol.Symbol.CCL.RangesUsed > 0) then Break;
+
+ C := UCS4(Run^);
+ Inc(Run);
+
+ // escape character
+ if C = Ord('\') then
+ begin
+ if Run = ListEnd then
+ begin
+ // The EOS was encountered when expecting the reverse solidus to be followed by the character it is escaping.
+ // Set an Error code and return the number of characters consumed up to this point.
+ FUREBuffer.Error := _URE_UNEXPECTED_EOS;
+ Result := Run - CP;
+ Exit;
+ end;
+
+ C := UCS4(Run^);
+ Inc(Run);
+ case UCS2(C) of
+ 'a':
+ C := $07;
+ 'b':
+ C := $08;
+ 'f':
+ C := $0c;
+ 'n':
+ C := $0a;
+ 'R':
+ C := $0d;
+ 't':
+ C := $09;
+ 'v':
+ C := $0b;
+ 'p',
+ 'P':
+ begin
+ Inc(Run, ParsePropertyList(Run, ListEnd - Run, Symbol.Props));
+ // Invert the bit mask of the properties if this is a negated character class or if 'P' is used to specify
+ // a list of character properties that should *not* match in a character class.
+ if C = Ord('P') then Symbol.Props := not Symbol.Props;
+ Continue;
+ end;
+ 'x',
+ 'X',
+ 'u',
+ 'U':
+ begin
+ if (Run < ListEnd) and
+ ((Run^ >= '0') and (Run^ <= '9') or
+ (Run^ >= 'A') and (Run^ <= 'F') or
+ (Run^ >= 'a') and (Run^ <= 'f')) then
+ Inc(Run, MakeHexNumber(Run, ListEnd - Run, C));
+ end;
+ end;
+ end
+ else
+ if C = Ord(':') then
+ begin
+ // Probe for a POSIX colon delimited character class.
+ Dec(Run);
+ N := PosixCCL(Run, ListEnd - Run, Symbol);
+ if N = 0 then Inc(Run)
+ else
+ begin
+ Inc(Run, N);
+ Continue;
+ end;
+ end;
+
+ // Check to see if the current character is a low surrogate that needs
+ // to be combined with a preceding high surrogate.
+ if Last <> 0 then
+ begin
+ if (C >= SurrogateLowStart) and (C <= SurrogateLowEnd) then
+ begin
+ // Construct the UTF16 character code.
+ C := $10000 + (((Last and $03FF) shl 10) or (C and $03FF))
+ end
+ else
+ begin
+ // Add the isolated high surrogate to the range.
+ if RangeEnd = 1 then Range.MaxCode := Last and $FFFF
+ else
+ begin
+ Range.MinCode := Last and $FFFF;
+ Range.MaxCode := Last and $FFFF;
+ end;
+
+ AddRange(Symbol.Symbol.CCL, Range);
+ RangeEnd := 0;
+ end;
+ end;
+
+ // Clear the Last character code.
+ Last := 0;
+
+ // This slightly awkward code handles the different cases needed to construct a range.
+ if (C >= SurrogateHighStart) and (C <= SurrogateHighEnd) then
+ begin
+ // If the high surrogate is followed by a Range indicator, simply add it as the Range start. Otherwise,
+ // save it in the next character is a low surrogate.
+ if Run^ = '-' then
+ begin
+ Inc(Run);
+ Range.MinCode := C;
+ RangeEnd := 1;
+ end
+ else Last := C;
+ end
+ else
+ if RangeEnd = 1 then
+ begin
+ Range.MaxCode := C;
+ AddRange(Symbol.Symbol.CCL, Range);
+ RangeEnd := 0;
+ end
+ else
+ begin
+ Range.MinCode := C;
+ Range.MaxCode := C;
+ if Run^ = '-' then
+ begin
+ Inc(Run);
+ RangeEnd := 1;
+ end
+ else AddRange(Symbol.Symbol.CCL, Range);
+ end;
+ end;
+
+ if (Run < ListEnd) and (Run^ = ']') then Inc(Run)
+ else
+ begin
+ // The parse was not terminated by the character class close symbol (']'), so set an error code.
+ FUREBuffer.Error := _URE_CCLASS_OPEN;
+ end;
+ Result := Run - CP;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.ProbeLowSurrogate(LeftState: PUCS2; Limit: Cardinal; var Code: UCS4): Cardinal;
+
+// Probe for a low surrogate hex code.
+
+var
+ I: Integer;
+ Run,
+ ListEnd: PUCS2;
+
+begin
+ I := 0;
+ Code := 0;
+ Run := LeftState;
+ ListEnd := Run + Limit;
+
+ while (I < 4) and (Run < ListEnd) do
+ begin
+ if (Run^ >= '0') and (Run^ <= '9') then
+ Code := (Code shl 4) + Cardinal(Word(Run^) - Ord('0'))
+ else
+ if (Run^ >= 'A') and (Run^ <= 'F') then
+ Code := (Code shl 4) + Cardinal(Word(Run^) - Ord('A')) + 10
+ else
+ if (Run^ >= 'a') and (Run^ <= 'f') then
+ Code := (Code shl 4) + Cardinal(Word(Run^) - Ord('a')) + 10
+ else Break;
+ Inc(Run);
+ end;
+
+ if (SurrogateLowStart <= Code) and
+ (Code <= SurrogateLowEnd) then Result := Run - LeftState
+ else Result := 0;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.CompileSymbol(S: PUCS2; Limit: Cardinal; Symbol: PSymbolTableEntry): Cardinal;
+
+var
+ C: UCS4;
+ Run,
+ ListEnd: PUCS2;
+
+begin
+ Run := S;
+ ListEnd := S + Limit;
+
+ C := Word(Run^);
+ Inc(Run);
+ if C = Ord('\') then
+ begin
+ if Run = ListEnd then
+ begin
+ // The EOS was encountered when expecting the reverse solidus to be followed by the character it is escaping.
+ // Set an Error code and return the number of characters consumed up to this point.
+ FUREBuffer.Error := _URE_UNEXPECTED_EOS;
+ Result := Run - S;
+ Exit;
+ end;
+
+ C := Word(Run^);
+ Inc(Run);
+ case UCS2(C) of
+ 'p',
+ 'P':
+ begin
+ if UCS2(C) = 'p' then Symbol.AType :=_URE_CCLASS
+ else Symbol.AType :=_URE_NCCLASS;
+ Inc(Run, ParsePropertyList(Run, ListEnd - Run, Symbol.Props));
+ end;
+ 'a':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $07;
+ end;
+ 'b':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $08;
+ end;
+ 'f':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $0C;
+ end;
+ 'n':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $0A;
+ end;
+ 'r':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $0D;
+ end;
+ 't':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $09;
+ end;
+ 'v':
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := $0B;
+ end;
+ else
+ case UCS2(C) of
+ 'x',
+ 'X',
+ 'u',
+ 'U':
+ begin
+ // Collect between 1 and 4 digits representing an UCS2 code.
+ if (Run < ListEnd) and
+ ((Run^ >= '0') and (Run^ <= '9') or
+ (Run^ >= 'A') and (Run^ <= 'F') or
+ (Run^ >= 'a') and (Run^ <= 'f')) then
+ Inc(Run, MakeHexNumber(Run, ListEnd - Run, C));
+ end;
+ end;
+
+ // Simply add an escaped character here.
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := C;
+ end;
+ end
+ else
+ if (UCS2(C) = '^') or (UCS2(C) = '$') then
+ begin
+ // Handle the BOL and EOL anchors. This actually consists simply of setting a flag that indicates that the user
+ // supplied anchor match function should be called. This needs to be done instead of simply matching line/paragraph
+ // separators because beginning-of-text and end-of-text tests are needed as well.
+ if UCS2(C) = '^' then Symbol.AType := _URE_BOL_ANCHOR
+ else Symbol.AType := _URE_EOL_ANCHOR;
+ end
+ else
+ if UCS2(C) = '[' then
+ begin
+ // construct a character class
+ Inc(Run, BuildCharacterClass(Run, ListEnd - Run, Symbol));
+ end
+ else
+ if UCS2(C) = '.' then Symbol.AType := _URE_ANY_CHAR
+ else
+ begin
+ Symbol.AType := _URE_CHAR;
+ Symbol.Symbol.Chr := C;
+ end;
+
+ // If the symbol type happens to be a character and is a high surrogate, then probe forward to see if it is followed
+ // by a low surrogate that needs to be added.
+ if (Run < ListEnd) and
+ (Symbol.AType = _URE_CHAR) and
+ (SurrogateHighStart <= Symbol.Symbol.Chr) and
+ (Symbol.Symbol.Chr <= SurrogateHighEnd) then
+ begin
+ if (SurrogateLowStart <= UCS4(Run^)) and
+ (UCS4(Run^) <= SurrogateLowEnd) then
+ begin
+ Symbol.Symbol.Chr := $10000 + (((Symbol.Symbol.Chr and $03FF) shl 10) or (Word(Run^) and $03FF));
+ Inc(Run);
+ end
+ else
+ if (Run^ = '\') and
+ (((Run + 1)^ = 'x') or
+ ((Run + 1)^ = 'X') or
+ ((Run + 1)^ = 'u') or
+ ((Run + 1)^ = 'U')) then
+ begin
+ Inc(Run, ProbeLowSurrogate(Run + 2, ListEnd - (Run + 2), C));
+ if (SurrogateLowStart <= C) and (C <= SurrogateLowEnd) then
+ begin
+ // Take into account the \[xu] in front of the hex code.
+ Inc(Run, 2);
+ Symbol.Symbol.Chr := $10000 + (((Symbol.Symbol.Chr and $03FF) shl 10) or (C and $03FF));
+ end;
+ end;
+ end;
+
+ // Last, make sure any _URE_CHAR type symbols are changed to lower if the 'Casefold' flag is set.
+ if ((FUREBuffer.Flags and _URE_DFA_CASEFOLD) <> 0) and (Symbol.AType = _URE_CHAR) then
+ Symbol.Symbol.Chr := UnicodeToLower(Symbol.Symbol.Chr);
+
+ // If the symbol constructed is anything other than one of the anchors,
+ // make sure the _URE_DFA_BLANKLINE flag is removed.
+ if (Symbol.AType <> _URE_BOL_ANCHOR) and (Symbol.AType <> _URE_EOL_ANCHOR) then
+ FUREBuffer.Flags := FUREBuffer.Flags and not _URE_DFA_BLANKLINE;
+
+ // Return the number of characters consumed.
+ Result := Run - S;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.SymbolsAreDifferent(A, B: PSymbolTableEntry): Boolean;
+
+begin
+ Result := False;
+ if (A.AType <> B.AType) or
+ (A.Mods <> B.Mods) or
+ (A.Props <> B.Props) then Result := True
+ else
+ begin
+ if (A.AType = _URE_CCLASS) or (A.AType = _URE_NCCLASS) then
+ begin
+ if A.Symbol.CCL.RangesUsed <> B.Symbol.CCL.RangesUsed then Result := True
+ else
+ begin
+ if (A.Symbol.CCL.RangesUsed > 0) and
+ not CompareMem(@A.Symbol.CCL.Ranges[0], @B.Symbol.CCL.Ranges[0],
+ SizeOf(TRange) * A.Symbol.CCL.RangesUsed) then
+ begin
+ Result := True;;
+ end
+ end;
+ end
+ else
+ if (A.AType = _URE_CHAR) and
+ (A.Symbol.Chr <> B.Symbol.Chr) then Result := True;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.MakeSymbol(S: PUCS2; Limit: Cardinal; var Consumed: Cardinal): Cardinal;
+
+// Construct a symbol, but only keep unique symbols.
+
+var
+ I: Integer;
+ Start: PSymbolTableEntry;
+ Symbol: TSymbolTableEntry;
+
+begin
+ // Build the next symbol so we can test to see if it is already in the symbol table.
+ FillChar(Symbol, SizeOf(TSymbolTableEntry), 0);
+ Consumed := CompileSymbol(S, Limit, @Symbol);
+
+ // Check to see if the symbol exists.
+ I := 0;
+ Start := @FUREBuffer.SymbolTable.Symbols[0];
+ while (I < FUREBuffer.SymbolTable.SymbolsUsed) and SymbolsAreDifferent(@Symbol, Start) do
+ begin
+ Inc(I);
+ Inc(Start);
+ end;
+
+ if I < FUREBuffer.SymbolTable.SymbolsUsed then
+ begin
+ // Free up any ranges used for the symbol.
+ if (Symbol.AType = _URE_CCLASS) or (Symbol.AType = _URE_NCCLASS) then Symbol.Symbol.CCL.Ranges := nil;
+ Result := FUREBuffer.SymbolTable.Symbols[I].ID;
+ Exit;
+ end;
+
+ // Need to add the new symbol.
+ if FUREBuffer.SymbolTable.SymbolsUsed = Length(FUREBuffer.SymbolTable.Symbols) then
+ begin
+ SetLength(FUREBuffer.SymbolTable.Symbols, Length(FUREBuffer.SymbolTable.Symbols) + 8);
+ end;
+
+ Symbol.ID := FUREBuffer.SymbolTable.SymbolsUsed;
+ Inc(FUREBuffer.SymbolTable.SymbolsUsed);
+ FUREBuffer.SymbolTable.Symbols[Symbol.ID] := Symbol;
+ Result := Symbol.ID;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.MakeExpression(AType, LHS, RHS: Cardinal): Cardinal;
+
+var
+ I: Integer;
+
+begin
+ // Determine if the expression already exists or not.
+ with FUREBuffer.ExpressionList do
+ begin
+ for I := 0 to ExpressionsUsed - 1 do
+ if (Expressions[I].AType = AType) and
+ (Expressions[I].LHS = LHS) and
+ (Expressions[I].RHS = RHS) then
+ begin
+ Result := I;
+ Exit;
+ end;
+
+ // Need to add a new expression.
+ if ExpressionsUsed = Length(Expressions) then
+ SetLength(Expressions, Length(Expressions) + 8);
+
+ Expressions[ExpressionsUsed].OnStack := False;
+ Expressions[ExpressionsUsed].AType := AType;
+ Expressions[ExpressionsUsed].LHS := LHS;
+ Expressions[ExpressionsUsed].RHS := RHS;
+
+ Result := ExpressionsUsed;
+ Inc(ExpressionsUsed);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function IsSpecial(C: Word): Boolean;
+
+begin
+ Result := C in [Word('+'), Word('*'), Word('?'), Word('{'), Word('|'), Word(')')];
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.CollectPendingOperations(var State: Cardinal);
+
+// collect all pending AND and OR operations and make corresponding expressions
+
+var
+ Operation: Cardinal;
+
+begin
+ repeat
+ Operation := Peek;
+ if (Operation <> _URE_AND) and (Operation <> _URE_OR) then Break;
+ // make an expression with the AND or OR operator and its right hand side
+ Operation := Pop;
+ State := MakeExpression(Operation, Pop, State);
+ until False;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.ConvertRE2NFA(RE: PWideChar; RELength: Cardinal): Cardinal;
+
+// Convert the regular expression into an NFA in a form that will be easy to reduce to a FDFA.
+// The starting state for the reduction will be returned.
+
+var
+ C: UCS2;
+ Head, Tail: PUCS2;
+ S: WideString;
+ Symbol,
+ State,
+ LastState,
+ Used,
+ M, N: Cardinal;
+ I: Integer;
+
+begin
+ State := _URE_NOOP;
+
+ Head := RE;
+ Tail := Head + RELength;
+ while (FUREBuffer.Error = _URE_OK) and (Head < Tail) do
+ begin
+ C := Head^;
+ Inc(Head);
+ case C of
+ '(':
+ Push(_URE_PAREN);
+ ')': // check for the case of too many close parentheses
+ begin
+ if Peek = _URE_NOOP then
+ begin
+ FUREBuffer.Error := _URE_UNBALANCED_GROUP;
+ Break;
+ end;
+ CollectPendingOperations(State);
+ // remove the _URE_PAREN off the stack
+ Pop;
+ end;
+ '*':
+ State := MakeExpression(_URE_STAR, State, _URE_NOOP);
+ '+':
+ State := MakeExpression(_URE_PLUS, State, _URE_NOOP);
+ '?':
+ State := MakeExpression(_URE_QUEST, State, _URE_NOOP);
+ '|':
+ begin
+ CollectPendingOperations(State);
+ Push(State);
+ Push(_URE_OR);
+ end;
+ '{': // expressions of the form {m, n}
+ begin
+ C := #0;
+ M := 0;
+ N := 0;
+ // get first number
+ while UnicodeIsWhiteSpace(Word(Head^)) do Inc(Head);
+ S := '';
+ while Head^ in [WideChar('0')..WideChar('9')] do
+ begin
+ S := S + Head^;
+ Inc(Head);
+ end;
+ if S <> '' then M := StrToInt(S);
+
+ while UnicodeIsWhiteSpace(Word(Head^)) do Inc(Head);
+ if (Head^ <> ',') and (Head^ <> '}') then
+ begin
+ FUREBuffer.Error := _URE_INVALID_RANGE;
+ Break;
+ end;
+
+ // check for an upper limit
+ if Head^ <> '}' then
+ begin
+ Inc(Head);
+ // get second number
+ while UnicodeIsWhiteSpace(Word(Head^)) do Inc(Head);
+ S := '';
+ while Head^ in [WideChar('0')..WideChar('9')] do
+ begin
+ S := S + Head^;
+ Inc(Head);
+ end;
+ if S <> '' then N := StrToInt(S);
+ end
+ else N := M;
+
+ if Head^ <> '}' then
+ begin
+ FUREBuffer.Error := _URE_RANGE_OPEN;
+ Break;
+ end
+ else Inc(Head);
+
+ // N = 0 means unlimited number of occurences
+ if N = 0 then
+ begin
+ case M of
+ 0: // {,} {0,} {0, 0} mean the same as the star operator
+ State := MakeExpression(_URE_STAR, State, _URE_NOOP);
+ 1: // {1,} {1, 0} mean the same as the plus operator
+ State := MakeExpression(_URE_PLUS, State, _URE_NOOP);
+ else
+ begin
+ // encapsulate the expanded branches as would they be in parenthesis
+ // in order to avoid unwanted concatenation with pending operations/symbols
+ Push(_URE_PAREN);
+ // {m,} {m, 0} mean M fixed occurences plus star operator
+ // make E^m...
+ for I := 1 to M - 1 do
+ begin
+ Push(State);
+ Push(_URE_AND);
+ end;
+ // ...and repeat the last symbol one or more times
+ State := MakeExpression(_URE_PLUS, State, _URE_NOOP);
+ CollectPendingOperations(State);
+ Pop;
+ end;
+ end;
+ end
+ else
+ begin
+ // check proper range limits
+ if M > N then
+ begin
+ FUREBuffer.Error := _URE_INVALID_RANGE;
+ Break;
+ end;
+
+ // check special case {0, 1} (which corresponds to the ? operator)
+ if (M = 0) and (N = 1) then State := MakeExpression(_URE_QUEST, State, _URE_NOOP)
+ else
+ begin
+ // handle the general case by expanding {m, n} into the equivalent
+ // expression E^m | E^(m + 1) | ... | E^n
+
+ // encapsulate the expanded branches as would they be in parenthesis
+ // in order to avoid unwanted concatenation with pending operations/symbols
+ Push(_URE_PAREN);
+ // keep initial state as this is the one all alternatives start from
+ LastState := State;
+
+ // Consider the special case M = 0 first. Because there's no construct to
+ // enter a pure epsilon-transition into the expression array I work around
+ // with the question mark operator to describe the first and second branch alternative.
+ if M = 0 then
+ begin
+ State := MakeExpression(_URE_QUEST, State, _URE_NOOP);
+ Inc(M, 2);
+ // Mark the pending OR operation (there must always follow at least on more
+ // alternative because the special case {0, 1} has already been handled).
+ Push(State);
+ Push(_URE_OR);
+ end;
+
+ while M <= N do
+ begin
+ State := LastState;
+ // create E^M
+ for I := 1 to Integer(M) - 1 do
+ begin
+ Push(State);
+ Push(_URE_AND);
+ end;
+ // finish the branch and mark it as pending OR operation if it isn't the last one
+ CollectPendingOperations(State);
+ if M < N then
+ begin
+ Push(State);
+ Push(_URE_OR);
+ end;
+ Inc(M);
+ end;
+ // remove the _URE_PAREN off the stack
+ Pop;
+ end;
+ end;
+ end;
+ else
+ Dec(Head);
+ Symbol := MakeSymbol(Head, Tail - Head, Used);
+ Inc(Head, Used);
+ State := MakeExpression(_URE_SYMBOL, Symbol, _URE_NOOP);
+ end;
+
+ if (C <> '(') and
+ (C <> '|') and
+ (C <> '{') and
+ (Head < Tail) and
+ (not IsSpecial(Word(Head^)) or (Head^ = '(')) then
+ begin
+ Push(State);
+ Push(_URE_AND);
+ end;
+ end;
+
+ CollectPendingOperations(State);
+ if FUREBuffer.Stack.ListUsed > 0 then FUREBuffer.Error := _URE_UNBALANCED_GROUP;
+
+ if FUREBuffer.Error = _URE_OK then Result := State
+ else Result := _URE_NOOP;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.AddSymbolState(Symbol, State: Cardinal);
+
+var
+ I, J: Integer;
+ Found: Boolean;
+
+begin
+ // Locate the symbol in the symbol table so the state can be added.
+ // If the symbol doesn't exist, then we are in serious trouble.
+ for I := 0 to FUREBuffer.SymbolTable.SymbolsUsed - 1 do
+ if Symbol = FUREBuffer.SymbolTable.Symbols[I].ID then Break;
+
+ // Now find out if the state exists in the symbol's state list.
+ with FUREBuffer.SymbolTable.Symbols[I].States do
+ begin
+ Found := False;
+ for J := 0 to ListUsed - 1 do
+ if State <= List[J] then
+ begin
+ Found := True;
+ Break;
+ end;
+
+ if not Found then J := ListUsed;
+ if not Found or (State < List[J]) then
+ begin
+ // Need to add the state in order.
+ if ListUsed = Length(List) then SetLength(List, Length(List) + 8);
+ if J < ListUsed then Move(List[J], List[J + 1], SizeOf(Cardinal) * (ListUsed - J));
+ List[J] := State;
+ Inc(ListUsed);
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.AddState(NewStates: array of Cardinal): Cardinal;
+
+var
+ I: Integer;
+ Found: Boolean;
+
+begin
+ Found := False;
+ for I := 0 to FUREBuffer.States.StatesUsed - 1 do
+ begin
+ if (FUREBuffer.States.States[I].StateList.ListUsed = Length(NewStates)) and
+ CompareMem(@NewStates[0], @FUREBuffer.States.States[I].StateList.List[0], SizeOf(Cardinal) * Length(NewStates)) then
+ begin
+ Found := True;
+ Break;
+ end;
+ end;
+
+ if not Found then
+ begin
+ // Need to add a new DFA State (set of NFA states).
+ if FUREBuffer.States.StatesUsed = Length(FUREBuffer.States.States) then
+ SetLength(FUREBuffer.States.States, Length(FUREBuffer.States.States) + 8);
+
+ with FUREBuffer.States.States[FUREBuffer.States.StatesUsed] do
+ begin
+ ID := FUREBuffer.States.StatesUsed;
+ if (StateList.ListUsed + Length(NewStates)) >= Length(StateList.List) then
+ SetLength(StateList.List, Length(StateList.List) + Length(NewStates) + 8);
+ Move(NewStates[0], StateList.List[StateList.ListUsed], SizeOf(Cardinal) * Length(NewStates));
+ Inc(StateList.ListUsed, Length(NewStates));
+ end;
+ Inc(FUREBuffer.States.StatesUsed);
+ end;
+
+ // Return the ID of the DFA state representing a group of NFA States.
+ if Found then Result := I
+ else Result := FUREBuffer.States.StatesUsed - 1;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.Reduce(Start: Cardinal);
+
+var
+ I, J,
+ Symbols: Integer;
+ State,
+ RHS,
+ s1, s2,
+ ns1, ns2: Cardinal;
+ Evaluating: Boolean;
+
+begin
+ FUREBuffer.Reducing := True;
+
+ // Add the starting state for the reduction.
+ AddState([Start]);
+
+ // Process each set of NFA states that get created.
+ I := 0;
+ // further states are added in the loop
+ while I < FUREBuffer.States.StatesUsed do
+ begin
+ with FUREBuffer, States.States[I], ExpressionList do
+ begin
+ // Push the current states on the stack.
+ for J := 0 to StateList.ListUsed - 1 do Push(StateList.List[J]);
+
+ // Reduce the NFA states.
+ Accepting := False;
+ Symbols := 0;
+ J := 0;
+ // need a while loop here as the stack will be modified within the loop and
+ // so also its usage count used to terminate the loop
+ while J < FUREBuffer.Stack.ListUsed do
+ begin
+ State := FUREBuffer.Stack.List[J];
+ Evaluating := True;
+
+ // This inner loop is the iterative equivalent of recursively
+ // reducing subexpressions generated as a result of a reduction.
+ while Evaluating do
+ begin
+ case Expressions[State].AType of
+ _URE_SYMBOL:
+ begin
+ ns1 := MakeExpression(_URE_ONE, _URE_NOOP, _URE_NOOP);
+ AddSymbolState(Expressions[State].LHS, ns1);
+ Inc(Symbols);
+ Evaluating := False;
+ end;
+ _URE_ONE:
+ begin
+ Accepting := True;
+ Evaluating := False;
+ end;
+ _URE_QUEST:
+ begin
+ s1 := Expressions[State].LHS;
+ ns1 := MakeExpression(_URE_ONE, _URE_NOOP, _URE_NOOP);
+ State := MakeExpression(_URE_OR, ns1, s1);
+ end;
+ _URE_PLUS:
+ begin
+ s1 := Expressions[State].LHS;
+ ns1 := MakeExpression(_URE_STAR, s1, _URE_NOOP);
+ State := MakeExpression(_URE_AND, s1, ns1);
+ end;
+ _URE_STAR:
+ begin
+ s1 := Expressions[State].LHS;
+ ns1 := MakeExpression(_URE_ONE, _URE_NOOP, _URE_NOOP);
+ ns2 := MakeExpression(_URE_PLUS, s1, _URE_NOOP);
+ State := MakeExpression(_URE_OR, ns1, ns2);
+ end;
+ _URE_OR:
+ begin
+ s1 := Expressions[State].LHS;
+ s2 := Expressions[State].RHS;
+ Push(s1);
+ Push(s2);
+ Evaluating := False;
+ end;
+ _URE_AND:
+ begin
+ s1 := Expressions[State].LHS;
+ s2 := Expressions[State].RHS;
+ case Expressions[s1].AType of
+ _URE_SYMBOL:
+ begin
+ AddSymbolState(Expressions[s1].LHS, s2);
+ Inc(Symbols);
+ Evaluating := False;
+ end;
+ _URE_ONE:
+ State := s2;
+ _URE_QUEST:
+ begin
+ ns1 := Expressions[s1].LHS;
+ ns2 := MakeExpression(_URE_AND, ns1, s2);
+ State := MakeExpression(_URE_OR, s2, ns2);
+ end;
+ _URE_PLUS:
+ begin
+ ns1 := Expressions[s1].LHS;
+ ns2 := MakeExpression(_URE_OR, s2, State);
+ State := MakeExpression(_URE_AND, ns1, ns2);
+ end;
+ _URE_STAR:
+ begin
+ ns1 := Expressions[s1].LHS;
+ ns2 := MakeExpression(_URE_AND, ns1, State);
+ State := MakeExpression(_URE_OR, s2, ns2);
+ end;
+ _URE_OR:
+ begin
+ ns1 := Expressions[s1].LHS;
+ ns2 := Expressions[s1].RHS;
+ ns1 := MakeExpression(_URE_AND, ns1, s2);
+ ns2 := MakeExpression(_URE_AND, ns2, s2);
+ State := MakeExpression(_URE_OR, ns1, ns2);
+ end;
+ _URE_AND:
+ begin
+ ns1 := Expressions[s1].LHS;
+ ns2 := Expressions[s1].RHS;
+ ns2 := MakeExpression(_URE_AND, ns2, s2);
+ State := MakeExpression(_URE_AND, ns1, ns2);
+ end;
+ end;
+ end;
+ end;
+ end;
+ Inc(J);
+ end;
+
+ // clear the state stack
+ while Pop <> _URE_NOOP do ;
+
+ // generate the DFA states for the symbols collected during the current reduction
+ if (TransitionsUsed + Symbols) > Length(Transitions) then
+ SetLength(Transitions, Length(Transitions) + Symbols);
+
+ // go through the symbol table and generate the DFA state transitions for
+ // each symbol that has collected NFA states
+ Symbols := 0;
+ J := 0;
+ while J < FUREBuffer.SymbolTable.SymbolsUsed do
+ begin
+ begin
+ if FUREBuffer.SymbolTable.Symbols[J].States.ListUsed > 0 then
+ begin
+ Transitions[Symbols].LHS := FUREBuffer.SymbolTable.Symbols[J].ID;
+ with FUREBuffer.SymbolTable.Symbols[J] do
+ begin
+ RHS := AddState(Copy(States.List, 0, States.ListUsed));
+ States.ListUsed := 0;
+ end;
+ Transitions[Symbols].RHS := RHS;
+ Inc(Symbols);
+ end;
+ end;
+ Inc(J);
+ end;
+
+ // set the number of transitions actually used
+ // Note: we need again to qualify a part of the TransistionsUsed path since the
+ // state array could be reallocated in the AddState call above and the with ... do
+ // will then be invalid.
+ States.States[I].TransitionsUsed := Symbols;
+ end;
+ Inc(I);
+ end;
+ FUREBuffer.Reducing := False;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.AddEquivalentPair(L, R: Cardinal);
+
+var
+ I: Integer;
+
+begin
+ L := FUREBuffer.States.States[L].ID;
+ R := FUREBuffer.States.States[R].ID;
+
+ if L <> R then
+ begin
+ if L > R then
+ begin
+ I := L;
+ L := R;
+ R := I;
+ end;
+
+ // Check to see if the equivalence pair already exists.
+ I := 0;
+ with FUREBuffer.EquivalentList do
+ begin
+ while (I < EquivalentsUsed) and
+ ((Equivalents[I].Left <> L) or (Equivalents[I].Right <> R)) do Inc(I);
+
+ if I >= EquivalentsUsed then
+ begin
+ if EquivalentsUsed = Length(Equivalents) then
+ SetLength(Equivalents, Length(Equivalents) + 8);
+
+ Equivalents[EquivalentsUsed].Left := L;
+ Equivalents[EquivalentsUsed].Right := R;
+ Inc(EquivalentsUsed);
+ end;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.MergeEquivalents;
+
+// merges the DFA states that are equivalent
+
+var
+ I, J, K,
+ Equal: Integer;
+ Done: Boolean;
+ State1, State2,
+ LeftState, RightState: PState;
+
+begin
+ for I := 0 to FUREBuffer.States.StatesUsed - 1 do
+ begin
+ State1 := @FUREBuffer.States.States[I];
+ if State1.ID = Cardinal(I) then
+ begin
+ J := 0;
+ while J < I do
+ begin
+ State2 := @FUREBuffer.States.States[J];
+ if State2.ID = Cardinal(J) then
+ begin
+ FUREBuffer.EquivalentList.EquivalentsUsed := 0;
+ AddEquivalentPair(I, J);
+
+ Done := False;
+ Equal := 0;
+ while Equal < FUREBuffer.EquivalentList.EquivalentsUsed do
+ begin
+ LeftState := @FUREBuffer.States.States[FUREBuffer.EquivalentList.Equivalents[Equal].Left];
+ RightState := @FUREBuffer.States.States[FUREBuffer.EquivalentList.Equivalents[Equal].Right];
+
+ if (LeftState.Accepting <> RightState.Accepting) or
+ (LeftState.TransitionsUsed <> RightState.TransitionsUsed) then
+ begin
+ Done := True;
+ Break;
+ end;
+
+ K := 0;
+ while (K < LeftState.TransitionsUsed) and
+ (LeftState.Transitions[K].LHS = RightState.Transitions[K].LHS) do Inc(K);
+
+ if K < LeftState.TransitionsUsed then
+ begin
+ Done := True;
+ Break;
+ end;
+
+ for K := 0 to LeftState.TransitionsUsed - 1 do
+ AddEquivalentPair(LeftState.Transitions[K].RHS, RightState.Transitions[K].RHS);
+
+ Inc(Equal);
+ end;
+
+ if not Done then Break;
+ end;
+ Inc(J);
+ end;
+
+ if J < I then
+ with FUREBuffer do
+ for Equal := 0 to EquivalentList.EquivalentsUsed - 1 do
+ States.States[EquivalentList.Equivalents[Equal].Right].ID := States.States[EquivalentList.Equivalents[Equal].Left].ID;
+ end;
+ end;
+
+ // Renumber the states appropriately
+ State1 := @FUREBuffer.States.States[0];
+ Equal := 0;
+ for I := 0 to FUREBuffer.States.StatesUsed - 1 do
+ begin
+ if State1.ID = Cardinal(I) then
+ begin
+ State1.ID := Equal;
+ Inc(Equal);
+ end
+ else State1.ID := FUREBuffer.States.States[State1.ID].ID;
+ Inc(State1);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.ClearUREBuffer;
+
+var
+ I: Integer;
+
+begin
+ with FUREBuffer do
+ begin
+ // quite a few dynamic arrays to free
+ Stack.List := nil;
+ ExpressionList.Expressions := nil;
+
+ // the symbol table has been handed over to the DFA and will be freed on
+ // release of the DFA
+ SymbolTable.SymbolsUsed := 0;
+
+ for I := 0 to States.StatesUsed - 1 do
+ begin
+ States.States[I].Transitions := nil;
+ States.States[I].StateList.List := nil;
+ States.States[I].StateList.ListUsed := 0;
+ States.States[I].TransitionsUsed := 0;
+ end;
+
+ States.StatesUsed := 0;
+ States.States := nil;
+ EquivalentList.Equivalents := nil;
+ end;
+ FillChar(FUREBuffer, SizeOf(FUREBuffer), 0);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.CompileURE(RE: PWideChar; RELength: Cardinal; Casefold: Boolean);
+
+var
+ I, J: Integer;
+ State: Cardinal;
+ Run: PState;
+ TP: Integer;
+
+begin
+ // be paranoid
+ if Assigned(RE) and
+ (RE^ <> WideNull) and
+ (RELength > 0) then
+ begin
+ // Reset the various fields of the compilation buffer. Default the Flags
+ // to indicate the presense of the "^$" pattern. If any other pattern
+ // occurs, then this flag will be removed. This is done to catch this
+ // special pattern and handle it specially when matching.
+ ClearUREBuffer;
+ ClearDFA;
+ FUREBuffer.Flags := _URE_DFA_BLANKLINE;
+ if Casefold then FUREBuffer.Flags := FUREBuffer.Flags or _URE_DFA_CASEFOLD;
+
+ // Construct the NFA. If this stage returns a 0, then an error occured or an empty expression was passed.
+ State := ConvertRE2NFA(RE, RELength);
+ if State <> _URE_NOOP then
+ begin
+ // Do the expression reduction to get the initial DFA.
+ Reduce(State);
+
+ // Merge all the equivalent DFA States.
+ MergeEquivalents;
+
+ // Construct the minimal DFA.
+ FDFA.Flags := FUREBuffer.Flags and (_URE_DFA_CASEFOLD or _URE_DFA_BLANKLINE);
+
+ // Free up the NFA state groups and transfer the symbols from the buffer to the FDFA.
+ FDFA.SymbolTable := FUREBuffer.SymbolTable;
+ FUREBuffer.SymbolTable.Symbols := nil;
+
+ // Collect the total number of states and transitions needed for the DFA.
+ State := 0;
+ for I := 0 to FUREBuffer.States.StatesUsed - 1 do
+ begin
+ if FUREBuffer.States.States[I].ID = State then
+ begin
+ Inc(FDFA.StateList.StatesUsed);
+ Inc(FDFA.TransitionList.TransitionsUsed, FUREBuffer.States.States[I].TransitionsUsed);
+ Inc(State);
+ end;
+ end;
+
+ // Allocate enough space for the states and transitions.
+ SetLength(FDFA.StateList.States, FDFA.StateList.StatesUsed);
+ SetLength(FDFA.TransitionList.Transitions, FDFA.TransitionList.TransitionsUsed);
+
+ // Actually transfer the FDFA States from the buffer.
+ State := 0;
+ TP := 0;
+ Run := @FUREBuffer.States.States[0];
+ for I := 0 to FUREBuffer.States.StatesUsed - 1 do
+ begin
+ if Run.ID = State then
+ begin
+ FDFA.StateList.States[I].StartTransition := TP;
+ FDFA.StateList.States[I].NumberTransitions := Run.TransitionsUsed;
+ FDFA.StateList.States[I].Accepting := Run.Accepting;
+
+ // Add the transitions for the state
+ for J := 0 to FDFA.StateList.States[I].NumberTransitions - 1 do
+ begin
+ FDFA.TransitionList.Transitions[TP].Symbol := Run.Transitions[J].LHS;
+ FDFA.TransitionList.Transitions[TP].NextState := FUREBuffer.States.States[Run.Transitions[J].RHS].ID;
+ Inc(TP);
+ end;
+
+ Inc(State);
+ end;
+ Inc(Run);
+ end;
+ end
+ else
+ begin
+ // there might be an error while parsing the pattern, show it if so
+ case FUREBuffer.Error of
+ _URE_UNEXPECTED_EOS:
+ raise Exception.CreateFmt(SUREBaseString + SUREUnexpectedEOS, [RE]);
+ _URE_CCLASS_OPEN:
+ raise Exception.CreateFmt(SUREBaseString + SURECharacterClassOpen, [RE]);
+ _URE_UNBALANCED_GROUP:
+ raise Exception.CreateFmt(SUREBaseString + SUREUnbalancedGroup, [RE]);
+ _URE_INVALID_PROPERTY:
+ raise Exception.CreateFmt(SUREBaseString + SUREInvalidCharProperty, [RE]);
+ _URE_INVALID_RANGE:
+ raise Exception.CreateFmt(SUREBaseString + SUREInvalidRepeatRange, [RE]);
+ _URE_RANGE_OPEN:
+ raise Exception.CreateFmt(SUREBaseString + SURERepeatRangeOpen, [RE]);
+ else
+ // expression was empty
+ raise Exception.Create(SUREExpressionEmpty);
+ end;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.ClearDFA;
+
+var
+ I: Integer;
+
+begin
+ with FDFA do
+ begin
+ for I := 0 to SymbolTable.SymbolsUsed - 1 do
+ begin
+ if (SymbolTable.Symbols[I].AType = _URE_CCLASS) or
+ (SymbolTable.Symbols[I].AType = _URE_NCCLASS) then SymbolTable.Symbols[I].Symbol.CCL.Ranges := nil;
+ end;
+
+ for I := 0 to SymbolTable.SymbolsUsed - 1 do
+ begin
+ FDFA.SymbolTable.Symbols[I].States.List := nil;
+ FDFA.SymbolTable.Symbols[I].States.ListUsed := 0;
+ end;
+ SymbolTable.SymbolsUsed := 0;
+
+ SymbolTable.Symbols := nil;
+ StateList.States := nil;
+ TransitionList.Transitions := nil;
+ end;
+ FillChar(FDFA, SizeOf(FDFA), 0);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function IsSeparator(C: UCS4): Boolean;
+
+begin
+ Result := (C = $D) or (C = $A) or (C = $2028) or (C = $2029);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+const
+ PropertyMap: array[0..31] of Cardinal = (
+ 0, // class ID 1, corresponds to UC_MN
+ 1, // class ID 2, UC_MC
+ 3, // 3, UC_ND
+ 5, // 4, UC_NO
+ 6, // 5, UC_ZS
+ 7, // 6, UC_ZL
+ 8, // 7, UC_ZP
+ 9, // 8, UC_CC
+ 12, // 9, UC_CO
+ 14, // 10, UC_LU
+ 15, // 11, UC_LL
+ 16, // 12, UC_LT
+ 17, // 13, UC_LM
+ 18, // 14, UC_LO
+ 20, // 15, UC_PD
+ 21, // 16, UC_PS
+ 22, // 17, UC_PE
+ 23, // 18, UC_PO
+ 24, // 19, UC_SM
+ 25, // 20, UC_SC
+ 26, // 21, UC_SO
+ 27, // 22, UC_L
+ 28, // 23, UC_R
+ 29, // 24, UC_EN
+ 30, // 25, UC_ES
+ 32, // 26, UC_ET
+ 33, // 27, UC_AN
+ 34, // 28, UC_CS
+ 35, // 29, UC_B
+ 36, // 30, UC_S
+ 37, // 31, UC_WS
+ 38 // 32, UC_ON
+ );
+
+function TURESearch.MatchesProperties(Props, C: Cardinal): Boolean;
+
+// tries to match any of the given properties
+
+var
+ I: Integer;
+ Mask: Cardinal;
+
+begin
+ Result := False;
+ // We need only one match in order to tell the caller success,
+ // but unfortunately we cannot directly map the URE flags to the
+ // Unicode property flags. Hence we need to loop and explicitly remap them.
+ Mask := 1;
+ for I := 0 to 31 do
+ begin
+ if ((Props and Mask) <> 0) and PropertyLookup(C, PropertyMap[I]) then
+ begin
+ Result := True;
+ Exit;
+ end;
+ Mask := Mask shl 1;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.ExecuteURE(Flags: Cardinal; Text: PUCS2; TextLen: Cardinal;
+ var MatchStart, MatchEnd: Cardinal): Boolean;
+
+var
+ I, J: Integer;
+ Matched,
+ Found: Boolean;
+ Start, Stop: Integer;
+ C: UCS4;
+ Run, Tail, lp: PUCS2;
+ LastState: PDFAState;
+ Symbol: PSymbolTableEntry;
+ Rp: PRange;
+
+begin
+ Result := False;
+ if Assigned(Text) then
+ begin
+ // Handle the special of an empty string matching the "^$" pattern.
+ if (Textlen = 0) and ((FDFA.Flags and _URE_DFA_BLANKLINE) <> 0) then
+ begin
+ MatchStart := 0;
+ MatchEnd := 0;
+ Result := True;
+ Exit;
+ end;
+
+ Run := Text;
+ Tail := Run + TextLen;
+
+ Start := -1;
+ Stop := -1;
+
+ LastState := @FDFA.StateList.States[0];
+
+ Found := False;
+ while not Found and (Run < Tail) do
+ begin
+ lp := Run;
+ C := UCS4(Run^);
+ Inc(Run);
+
+ // Check to see if this is a high surrogate that should be combined with a following low surrogate.
+ if (Run < Tail) and
+ (SurrogateHighStart <= C) and (C <= SurrogateHighEnd) and
+ (SurrogateLowStart <= UCS4(Run^)) and (UCS4(Run^) <= SurrogateLowEnd) then
+ begin
+ C := $10000 + (((C and $03FF) shl 10) or (UCS4(Run^) and $03FF));
+ Inc(Run);
+ end;
+
+ // Determine if the character is non-spacing and should be skipped.
+ if ((Flags and URE_IGNORE_NONSPACING) <> 0) and UnicodeIsNonSpacingMark(C) then
+ begin
+ Inc(Run);
+ Continue;
+ end;
+
+ if (FDFA.Flags and _URE_DFA_CASEFOLD) <> 0 then C := UnicodeToLower(C);
+
+ // See if one of the transitions matches.
+ I := LastState.NumberTransitions - 1;
+ Matched := False;
+ while not Matched and (I >= 0) do
+ begin
+ Symbol := @FDFA.SymbolTable.Symbols[FDFA.TransitionList.Transitions[LastState.StartTransition + I].Symbol];
+ case Symbol.AType of
+ _URE_ANY_CHAR:
+ if ((Flags and URE_DONT_MATCHES_SEPARATORS) <> 0) or not IsSeparator(C) then Matched := True;
+ _URE_CHAR:
+ if C = Symbol.Symbol.Chr then Matched := True;
+ _URE_BOL_ANCHOR:
+ if Lp = Text then
+ begin
+ Run := lp;
+ Matched := True;
+ end
+ else
+ if IsSeparator(C) then
+ begin
+ if (C = $D) and (Run < Tail) and (Run^ = #$A) then Inc(Run);
+ Lp := Run;
+ Matched := True;
+ end;
+ _URE_EOL_ANCHOR:
+ if IsSeparator(C) then
+ begin
+ // Put the pointer back before the separator so the match end position will be correct.
+ // This will also cause the `Run' pointer to be advanced over the current separator once the match
+ // end point has been recorded.
+ Run := Lp;
+ Matched := True;
+ end;
+ _URE_CCLASS,
+ _URE_NCCLASS:
+ with Symbol^ do
+ begin
+ if Props <> 0 then Matched := MatchesProperties(Props, C);
+ if Symbol.CCL.RangesUsed > 0 then
+ begin
+ Rp := @Symbol.CCL.Ranges[0];
+ for J := 0 to Symbol.CCL.RangesUsed - 1 do
+ begin
+ if (Rp.MinCode <= C) and (C <= Rp.MaxCode) then
+ begin
+ Matched := True;
+ Break;
+ end;
+ Inc(Rp);
+ end;
+ end;
+
+ if AType = _URE_NCCLASS then Matched := not Matched;
+ end;
+ end;
+
+ if Matched then
+ begin
+ if Start = -1 then Start := Lp - Text
+ else Stop := Run - Text;
+
+ LastState := @FDFA.StateList.States[FDFA.TransitionList.Transitions[LastState.StartTransition + I].NextState];
+
+ // If the match was an EOL anchor, adjust the pointer past the separator that caused the match.
+ // The correct match position has been recorded already.
+ if Symbol.AType = _URE_EOL_ANCHOR then
+ begin
+ // skip the character that caused the match.
+ Inc(Run);
+ // Handle the infamous CRLF situation.
+ if (Run < Tail) and (C = $D) and (Run^ = #$A) then Inc(Run);
+ end;
+ end;
+ Dec(I);
+ end;
+
+ if not Matched then
+ begin
+ Found := LastState.Accepting;
+ if not Found then
+ begin
+ // If the last state was not accepting, then reset and start over.
+ LastState := @FDFA.StateList.States[0];
+ Start := -1;
+ Stop := -1;
+ end
+ else
+ begin
+ // set start and stop pointer if not yet done
+ if Start = -1 then
+ begin
+ Start := Lp - Text;
+ Stop := Run - Text;
+ end
+ else
+ if Stop = -1 then Stop := Lp - Text;
+ end;
+ end
+ else
+ if Run = Tail then
+ begin
+ if not LastState.Accepting then
+ begin
+ // This ugly hack is to make sure the end-of-line anchors match when the source text hits the end.
+ // This is only done if the last subexpression matches.
+ for I := 0 to LastState.NumberTransitions - 1 do
+ begin
+ if Found then Break;
+ Symbol := @FDFA.SymbolTable.Symbols[FDFA.TransitionList.Transitions[LastState.StartTransition + I].Symbol];
+ if Symbol.AType =_URE_EOL_ANCHOR then
+ begin
+ LastState := @FDFA.StateList.States[FDFA.TransitionList.Transitions[LastState.StartTransition + I].NextState];
+ if LastState.Accepting then
+ begin
+ Stop := Run - Text;
+ Found := True;
+ end
+ else Break;
+ end;
+ end;
+ end
+ else
+ begin
+ // Make sure any conditions that match all the way to the end of the string match.
+ Found := True;
+ Stop := Run - Text;
+ end;
+ end;
+ end;
+
+ if Found then
+ begin
+ MatchStart := Start;
+ MatchEnd := Stop;
+ end;
+ Result := Found;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.FindAll(const Text: WideString): Boolean;
+
+begin
+ Result := FindAll(PWideChar(Text), Length(Text));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.FindAll(const Text: PWideChar; TextLen: Cardinal): Boolean;
+
+// Looks for all occurences of the pattern passed to FindPrepare and creates an internal list of their positions.
+
+var
+ Start, Stop: Cardinal;
+ Run: PWideChar;
+ RunLen: Cardinal;
+
+begin
+ ClearResults;
+ Run := Text;
+ RunLen := TextLen;
+ // repeat to find all occurences of the pattern
+ while ExecuteURE(0, Run, RunLen, Start, Stop) do
+ begin
+ // store this result (consider text pointer movement)...
+ AddResult(Start + Run - Text, Stop + Run - Text);
+ // ... and advance text position and length
+ Inc(Run, Stop);
+ Dec(RunLen, Stop);
+ end;
+ Result := FResults.Count > 0;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.FindFirst(const Text: WideString; var Start, Stop: Cardinal): Boolean;
+
+begin
+ Result := FindFirst(PWideChar(Text), Length(Text), Start, Stop);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TURESearch.FindFirst(const Text: PWideChar; TextLen: Cardinal; var Start, Stop: Cardinal): Boolean;
+
+// Looks for the first occurence of the pattern passed to FindPrepare in Text and returns True if one could be
+// found (in which case Start and Stop are set to the according indices) otherwise False.
+// This function is in particular of interest if only one occurence needs to be found.
+
+begin
+ ClearResults;
+ Result := ExecuteURE(0, PWideChar(Text), Length(Text), Start, Stop);
+ if Result then AddResult(Start, Stop);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.FindPrepare(const Pattern: PWideChar; PatternLength: Cardinal; Options: TSearchFlags);
+
+begin
+ CompileURE(Pattern, PatternLength, not (sfCaseSensitive in Options));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TURESearch.FindPrepare(const Pattern: WideString; Options: TSearchFlags);
+
+begin
+ CompileURE(PWideChar(Pattern), Length(Pattern), not (sfCaseSensitive in Options));
+end;
+
+//----------------- TAnsiStringsForWideStrings ---------------------------------------------------------------------------------------
+
+type
+ TAnsiStringsForWideStrings = class(TAnsiStrings)
+ private
+ FWideStrings: TWideStrings;
+ protected
+ function Get(Index: Integer): AnsiString; override;
+ function GetCount: Integer; override;
+ public
+ procedure Clear; override;
+ procedure Delete(Index: Integer); override;
+ procedure Insert(Index: Integer; const S: AnsiString); override;
+ end;
+
+{ TAnsiStringsForWideStrings }
+
+procedure TAnsiStringsForWideStrings.Clear;
+begin
+ FWideStrings.Clear;
+end;
+
+procedure TAnsiStringsForWideStrings.Delete(Index: Integer);
+begin
+ FWideStrings.Delete(Index);
+end;
+
+function TAnsiStringsForWideStrings.Get(Index: Integer): AnsiString;
+begin
+ result := FWideStrings.Get(Index);
+end;
+
+function TAnsiStringsForWideStrings.GetCount: Integer;
+begin
+ result := FWideStrings.Count;
+end;
+
+procedure TAnsiStringsForWideStrings.Insert(Index: Integer; const S: AnsiString);
+begin
+ FWideStrings.Insert(Index, S);
+end;
+
+//----------------- TWideStrings ---------------------------------------------------------------------------------------
+
+constructor TWideStrings.Create;
+
+begin
+ inherited;
+ FAnsiStrings := TAnsiStringsForWideStrings.Create;
+ TAnsiStringsForWideStrings(FAnsiStrings).FWideStrings := Self;
+ // there should seldom be the need to use a language other than the one of the system
+ FLanguage := GetUserDefaultLCID;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+destructor TWideStrings.Destroy;
+
+begin
+ FreeAndNil(FAnsiStrings);
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetAnsiStrings(const Value: TAnsiStrings);
+begin
+ Clear;
+ AddStrings(Value);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetLanguage(Value: LCID);
+
+begin
+ FLanguage := Value;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.Add(const S: WideString): Integer;
+
+begin
+ Result := GetCount;
+ Insert(Result, S);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.AddObject(const S: WideString; AObject: TObject): Integer;
+
+begin
+ Result := Add(S);
+ PutObject(Result, AObject);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Append(const S: WideString);
+
+begin
+ Add(S);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.AddStrings(Strings: TAnsiStrings);
+
+var
+ I: Integer;
+
+begin
+ BeginUpdate;
+ try
+ for I := 0 to Strings.Count - 1 do AddObject(Strings[I], Strings.Objects[I]);
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.AddStrings(Strings: TWideStrings);
+
+var
+ I: Integer;
+
+begin
+ BeginUpdate;
+ try
+ for I := 0 to Strings.Count - 1 do AddObject(Strings[I], Strings.Objects[I]);
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Assign(Source: TPersistent);
+
+// usual assignment routine, but able to assign wide and small strings
+
+var
+ I: Integer;
+
+begin
+ if Source is TWideStrings then
+ begin
+ BeginUpdate;
+ try
+ Clear;
+ AddStrings(TWideStrings(Source));
+ finally
+ EndUpdate;
+ end;
+ end
+ else
+ if Source is TAnsiStrings then
+ begin
+ BeginUpdate;
+ try
+ Clear;
+ for I := 0 to TAnsiStrings(Source).Count - 1 do AddObject(TAnsiStrings(Source)[I], TAnsiStrings(Source).Objects[I]);
+ finally
+ EndUpdate;
+ end;
+ end
+ else inherited Assign(Source);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.AssignTo(Dest: TPersistent);
+
+// need to do also assignment to old style TStrings, but this class doesn't know TWideStrings, so
+// we need to do it from here
+
+var
+ I: Integer;
+
+begin
+ if Dest is TAnsiStrings then
+ with Dest as TAnsiStrings do
+ begin
+ BeginUpdate;
+ try
+ Clear;
+ for I := 0 to Self.Count - 1 do AddObject(Self[I], Self.Objects[I]);
+ finally
+ EndUpdate;
+ end;
+ end
+ else
+ if Dest is TWideStrings then
+ with Dest as TWideStrings do
+ begin
+ BeginUpdate;
+ try
+ Clear;
+ AddStrings(Self);
+ finally
+ EndUpdate;
+ end;
+ end
+ else inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.BeginUpdate;
+
+begin
+ if FUpdateCount = 0 then SetUpdateState(True);
+ Inc(FUpdateCount);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.DefineProperties(Filer: TFiler);
+
+ function DoWrite: Boolean;
+
+ begin
+ if Filer.Ancestor <> nil then
+ begin
+ Result := True;
+ if Filer.Ancestor is TWideStrings then Result := not Equals(TWideStrings(Filer.Ancestor))
+ end
+ else Result := Count > 0;
+ end;
+
+begin
+ Filer.DefineProperty('WideStrings', ReadData, WriteData, DoWrite);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.EndUpdate;
+
+begin
+ Dec(FUpdateCount);
+ if FUpdateCount = 0 then SetUpdateState(False);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.Equals(Strings: TWideStrings): Boolean;
+
+var
+ I, Count: Integer;
+
+begin
+ Result := False;
+ Count := GetCount;
+ if Count <> Strings.GetCount then Exit;
+ for I := 0 to Count - 1 do
+ if Get(I) <> Strings.Get(I) then Exit;
+ Result := True;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Error(const Msg: WideString; Data: Integer);
+
+ function ReturnAddr: Pointer;
+
+ asm
+ MOV EAX, [EBP + 4]
+ end;
+
+begin
+ raise EStringListError.CreateFmt(Msg, [Data]) at ReturnAddr;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Exchange(Index1, Index2: Integer);
+
+var
+ TempObject: TObject;
+ TempString: WideString;
+
+begin
+ BeginUpdate;
+ try
+ TempString := Strings[Index1];
+ TempObject := Objects[Index1];
+ Strings[Index1] := Strings[Index2];
+ Objects[Index1] := Objects[Index2];
+ Strings[Index2] := TempString;
+ Objects[Index2] := TempObject;
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetCapacity: Integer;
+
+begin // descendants may optionally override/replace this default implementation
+ Result := Count;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetCommaText: WideString;
+
+var
+ S: WideString;
+ P: PWideChar;
+ I,
+ Count: Integer;
+
+begin
+ Count := GetCount;
+ if (Count = 1) and (Get(0) = '') then Result := '""'
+ else
+ begin
+ Result := '';
+ for I := 0 to Count - 1 do
+ begin
+ S := Get(I);
+ P := PWideChar(S);
+ while not (P^ in [WideNull..Space, WideChar('"'), WideChar(',')]) do Inc(P);
+ if (P^ <> WideNull) then S := WideQuotedStr(S, '"');
+ Result := Result + S + ',';
+ end;
+ System.Delete(Result, Length(Result), 1);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetName(Index: Integer): WideString;
+
+var
+ P: Integer;
+
+begin
+ Result := Get(Index);
+ P := Pos{TNT-ALLOW Pos}('=', Result);
+ if P > 0 then SetLength(Result, P - 1)
+ else Result := '';
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetObject(Index: Integer): TObject;
+
+begin
+ Result := nil;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetText: PWideChar;
+
+begin
+ Result := StrNewW(PWideChar(GetTextStr));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetTextStr: WideString;
+
+var
+ I, L,
+ Size,
+ Count: Integer;
+ P: PWideChar;
+ S: WideString;
+
+begin
+ Count := GetCount;
+ Size := 0;
+ for I := 0 to Count - 1 do Inc(Size, Length(Get(I)) + 2);
+ SetLength(Result, Size);
+ P := Pointer(Result);
+ for I := 0 to Count - 1 do
+ begin
+ S := Get(I);
+ L := Length(S);
+ if L <> 0 then
+ begin
+ System.Move(Pointer(S)^, P^, 2 * L);
+ Inc(P, L);
+ end;
+ P^ := CarriageReturn;
+ Inc(P);
+ P^ := LineFeed;
+ Inc(P);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.GetValue(const Name: WideString): WideString;
+
+var
+ I: Integer;
+
+begin
+ I := IndexOfName(Name);
+ if I >= 0 then Result := Copy(Get(I), Length(Name) + 2, MaxInt)
+ else Result := '';
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.IndexOf(const S: WideString): Integer;
+
+begin
+ for Result := 0 to GetCount - 1 do
+ if WideCompareText(Get(Result), S, FLanguage) = 0 then Exit;
+ Result := -1;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.IndexOfName(const Name: WideString): Integer;
+
+var
+ P: Integer;
+ S: WideString;
+
+begin
+ for Result := 0 to GetCount - 1 do
+ begin
+ S := Get(Result);
+ P := Pos{TNT-ALLOW Pos}('=', S);
+ if (P > 0) and (WideCompareText(Copy(S, 1, P - 1), Name, FLanguage) = 0) then Exit;
+ end;
+ Result := -1;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStrings.IndexOfObject(AObject: TObject): Integer;
+
+begin
+ for Result := 0 to GetCount - 1 do
+ if GetObject(Result) = AObject then Exit;
+ Result := -1;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.InsertObject(Index: Integer; const S: WideString; AObject: TObject);
+
+begin
+ Insert(Index, S);
+ PutObject(Index, AObject);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.LoadFromFile(const FileName: WideString);
+
+var
+ Stream: TStream;
+
+begin
+ try
+ Stream := TTntFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
+ try
+ LoadFromStream(Stream);
+ finally
+ Stream.Free;
+ end;
+ except
+ RaiseLastOSError;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.LoadFromStream(Stream: TStream);
+
+// usual loader routine, but enhanced to handle byte order marks in stream
+
+var
+ Size,
+ BytesRead: Integer;
+ Order: WideChar;
+ SW: WideString;
+ SA: AnsiString;
+
+begin
+ BeginUpdate;
+ try
+ Size := Stream.Size - Stream.Position;
+ BytesRead := Stream.Read(Order, 2);
+ if (Order = BOM_LSB_FIRST) or (Order = BOM_MSB_FIRST) then
+ begin
+ FSaveUnicode := True;
+ SetLength(SW, (Size - 2) div 2);
+ Stream.Read(PWideChar(SW)^, Size - 2);
+ if Order = BOM_MSB_FIRST then StrSwapByteOrder(PWideChar(SW));
+ SetTextStr(SW);
+ end
+ else
+ begin
+ // without byte order mark it is assumed that we are loading ANSI text
+ FSaveUnicode := False;
+ Stream.Seek(-BytesRead, soFromCurrent);
+ SetLength(SA, Size);
+ Stream.Read(PAnsiChar(SA)^, Size);
+ SetTextStr(SA);
+ end;
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Move(CurIndex, NewIndex: Integer);
+
+var
+ TempObject: TObject;
+ TempString: WideString;
+
+begin
+ if CurIndex <> NewIndex then
+ begin
+ BeginUpdate;
+ try
+ TempString := Get(CurIndex);
+ TempObject := GetObject(CurIndex);
+ Delete(CurIndex);
+ InsertObject(NewIndex, TempString, TempObject);
+ finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.Put(Index: Integer; const S: WideString);
+
+var
+ TempObject: TObject;
+
+begin
+ TempObject := GetObject(Index);
+ Delete(Index);
+ InsertObject(Index, S, TempObject);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.PutObject(Index: Integer; AObject: TObject);
+
+begin
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.ReadData(Reader: TReader);
+
+begin
+ Reader.ReadListBegin;
+ BeginUpdate;
+ try
+ Clear;
+ while not Reader.EndOfList do
+ if Reader.NextValue in [vaString, vaLString] then
+ Add(Reader.ReadString)
+ else
+ Add(Reader.ReadWideString);
+ finally
+ EndUpdate;
+ end;
+ Reader.ReadListEnd;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SaveToFile(const FileName: WideString);
+
+var
+ Stream: TStream;
+
+begin
+ Stream := TTntFileStream.Create(FileName, fmCreate);
+ try
+ SaveToStream(Stream);
+ finally
+ Stream.Free;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SaveToStream(Stream: TStream);
+
+var
+ SW, BOM: WideString;
+ SA: AnsiString;
+ Allowed: Boolean;
+ Run: PWideChar;
+
+begin
+ // The application can decide in which format to save the content.
+ // If FSaveUnicode is False then all strings are saved in standard ANSI format
+ // which is also loadable by TStrings but you should be aware that all Unicode
+ // strings are then converted to ANSI based on the current system locale.
+ // An extra event is supplied to ask the user about the potential loss of information
+ // when converting Unicode to ANSI strings.
+ SW := GetTextStr;
+ Allowed := True;
+ FSaved := False; // be pessimistic
+ // check for potential information loss makes only sense if the application has set
+ // an event to be used as call back to ask about the conversion
+ if not FSaveUnicode and Assigned(FOnConfirmConversion) then
+ begin
+ // application requests to save only ANSI characters, so check the text and
+ // call back in case information could be lost
+ Run := PWideChar(SW);
+ // only ask if there's at least one Unicode character in the text
+ while Run^ in [WideChar(#1)..WideChar(#255)] do Inc(Run);
+ // Note: The application can still set FSaveUnicode to True in the callback.
+ if Run^ <> WideNull then FOnConfirmConversion(Self, Allowed);
+ end;
+
+ if Allowed then
+ begin
+ // only save if allowed
+ if FSaveUnicode then
+ begin
+ BOM := BOM_LSB_FIRST;
+ Stream.WriteBuffer(PWideChar(BOM)^, 2);
+ // SW has already been filled
+ Stream.WriteBuffer(PWideChar(SW)^, 2 * Length(SW));
+ end
+ else
+ begin
+ // implicit conversion to ANSI
+ SA := SW;
+ if Allowed then Stream.WriteBuffer(PAnsiChar(SA)^, Length(SA));
+ end;
+ FSaved := True;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetCapacity(NewCapacity: Integer);
+
+begin
+ // do nothing - descendants may optionally implement this method
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetCommaText(const Value: WideString);
+
+var
+ P, P1: PWideChar;
+ S: WideString;
+
+begin
+ BeginUpdate;
+ try
+ Clear;
+ P := PWideChar(Value);
+ while P^ in [WideChar(#1)..Space] do Inc(P);
+ while P^ <> WideNull do
+ begin
+ if P^ = '"' then S := WideExtractQuotedStr(P, '"')
+ else
+ begin
+ P1 := P;
+ while (P^ > Space) and (P^ <> ',') do Inc(P);
+ SetString(S, P1, P - P1);
+ end;
+ Add(S);
+
+ while P^ in [WideChar(#1)..Space] do Inc(P);
+ if P^ = ',' then
+ repeat
+ Inc(P);
+ until not (P^ in [WideChar(#1)..Space]);
+ end;
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetText(Text: PWideChar);
+
+begin
+ SetTextStr(Text);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetTextStr(const Value: WideString);
+
+var
+ Head,
+ Tail: PWideChar;
+ S: WideString;
+
+begin
+ BeginUpdate;
+ try
+ Clear;
+ Head := PWideChar(Value);
+ while Head^ <> WideNull do
+ begin
+ Tail := Head;
+ while not (Tail^ in [WideNull, LineFeed, CarriageReturn, VerticalTab, FormFeed]) and
+ (Tail^ <> LineSeparator) and
+ (Tail^ <> ParagraphSeparator) do Inc(Tail);
+ SetString(S, Head, Tail - Head);
+ Add(S);
+ Head := Tail;
+ if Head^ <> WideNull then
+ begin
+ Inc(Head);
+ if (Tail^ = CarriageReturn) and
+ (Head^ = LineFeed) then Inc(Head);
+ end;
+ end;
+ finally
+ EndUpdate;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetUpdateState(Updating: Boolean);
+
+begin
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.SetValue(const Name, Value: WideString);
+
+var
+ I : Integer;
+
+begin
+ I := IndexOfName(Name);
+ if Value <> '' then
+ begin
+ if I < 0 then I := Add('');
+ Put(I, Name + '=' + Value);
+ end
+ else
+ if I >= 0 then Delete(I);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStrings.WriteData(Writer: TWriter);
+
+var
+ I: Integer;
+
+begin
+ Writer.WriteListBegin;
+ for I := 0 to Count-1 do
+ Writer.WriteWideString(Get(I));
+ Writer.WriteListEnd;
+end;
+
+//----------------- TWideStringList ------------------------------------------------------------------------------------
+
+destructor TWideStringList.Destroy;
+
+begin
+ FOnChange := nil;
+ FOnChanging := nil;
+ FCount := 0;
+ FList := nil;
+ inherited Destroy;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.Add(const S: WideString): Integer;
+
+begin
+ if not Sorted then Result := FCount
+ else
+ if Find(S, Result) then
+ case Duplicates of
+ dupIgnore:
+ Exit;
+ dupError:
+ Error(SDuplicateString, 0);
+ end;
+ InsertItem(Result, S);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Changed;
+
+begin
+ if (FUpdateCount = 0) and Assigned(FOnChange) then FOnChange(Self);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Changing;
+
+begin
+ if (FUpdateCount = 0) and Assigned(FOnChanging) then FOnChanging(Self);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Clear;
+
+begin
+ if FCount <> 0 then
+ begin
+ Changing;
+ // this will automatically finalize the array
+ FList := nil;
+ FCount := 0;
+ SetCapacity(0);
+ Changed;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Delete(Index: Integer);
+
+begin
+ if (Index < 0) or (Index >= FCount) then Error(SListIndexError, Index);
+ Changing;
+ FList[Index].FString := '';
+ Dec(FCount);
+ if Index < FCount then begin
+ System.Move(FList[Index + 1], FList[Index], (FCount - Index) * SizeOf(TWideStringItem));
+ Pointer(FList[FCount].FString) := nil;
+ end;
+ Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Exchange(Index1, Index2: Integer);
+
+begin
+ if (Index1 < 0) or (Index1 >= FCount) then Error(SListIndexError, Index1);
+ if (Index2 < 0) or (Index2 >= FCount) then Error(SListIndexError, Index2);
+ Changing;
+ ExchangeItems(Index1, Index2);
+ Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.ExchangeItems(Index1, Index2: Integer);
+
+var
+ Temp: TWideStringItem;
+
+begin
+ Temp := FList[Index1];
+ FList[Index1] := FList[Index2];
+ FList[Index2] := Temp;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.Find(const S: WideString; var Index: Integer): Boolean;
+
+var
+ L, H, I, C: Integer;
+
+begin
+ Result := False;
+ L := 0;
+ H := FCount - 1;
+ while L <= H do
+ begin
+ I := (L + H) shr 1;
+ C := WideCompareText(FList[I].FString, S, FLanguage);
+ if C < 0 then L := I+1
+ else
+ begin
+ H := I - 1;
+ if C = 0 then
+ begin
+ Result := True;
+ if Duplicates <> dupAccept then L := I;
+ end;
+ end;
+ end;
+ Index := L;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.Get(Index: Integer): WideString;
+
+begin
+ if (Index < 0) or (Index >= FCount) then Error(SListIndexError, Index);
+ Result := FList[Index].FString;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.GetCapacity: Integer;
+
+begin
+ Result := Length(FList);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.GetCount: Integer;
+
+begin
+ Result := FCount;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.GetObject(Index: Integer): TObject;
+
+begin
+ if (Index < 0) or (Index >= FCount) then Error(SListIndexError, Index);
+ Result := FList[Index].FObject;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Grow;
+
+var
+ Delta,
+ Len: Integer;
+
+begin
+ Len := Length(FList);
+ if Len > 64 then Delta := Len div 4
+ else
+ if Len > 8 then Delta := 16
+ else Delta := 4;
+ SetCapacity(Len + Delta);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TWideStringList.IndexOf(const S: WideString): Integer;
+
+begin
+ if not Sorted then Result := inherited IndexOf(S)
+ else
+ if not Find(S, Result) then Result := -1;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Insert(Index: Integer; const S: WideString);
+
+begin
+ if Sorted then Error(SSortedListError, 0);
+ if (Index < 0) or (Index > FCount) then Error(SListIndexError, Index);
+ InsertItem(Index, S);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.InsertItem(Index: Integer; const S: WideString);
+
+begin
+ Changing;
+ if FCount = Length(FList) then Grow;
+ if Index < FCount then
+ System.Move(FList[Index], FList[Index + 1], (FCount - Index) * SizeOf(TWideStringItem));
+ with FList[Index] do
+ begin
+ Pointer(FString) := nil;
+ FObject := nil;
+ FString := S;
+ end;
+ Inc(FCount);
+ Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Put(Index: Integer; const S: WideString);
+
+begin
+ if Sorted then Error(SSortedListError, 0);
+ if (Index < 0) or (Index >= FCount) then Error(SListIndexError, Index);
+ Changing;
+ FList[Index].FString := S;
+ Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.PutObject(Index: Integer; AObject: TObject);
+
+begin
+ if (Index < 0) or (Index >= FCount) then Error(SListIndexError, Index);
+ Changing;
+ FList[Index].FObject := AObject;
+ Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.QuickSort(L, R: Integer);
+
+var
+ I, J: Integer;
+ P: WideString;
+
+begin
+ repeat
+ I := L;
+ J := R;
+ P := FList[(L + R) shr 1].FString;
+ repeat
+ while WideCompareText(FList[I].FString, P, FLanguage) < 0 do Inc(I);
+ while WideCompareText(FList[J].FString, P, FLanguage) > 0 do Dec(J);
+ if I <= J then
+ begin
+ ExchangeItems(I, J);
+ Inc(I);
+ Dec(J);
+ end;
+ until I > J;
+ if L < J then QuickSort(L, J);
+ L := I;
+ until I >= R;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.SetCapacity(NewCapacity: Integer);
+
+begin
+ SetLength(FList, NewCapacity);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.SetSorted(Value: Boolean);
+
+begin
+ if FSorted <> Value then
+ begin
+ if Value then Sort;
+ FSorted := Value;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.SetUpdateState(Updating: Boolean);
+
+begin
+ if Updating then Changing
+ else Changed;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.Sort;
+
+begin
+ if not Sorted and (FCount > 1) then
+ begin
+ Changing;
+ QuickSort(0, FCount - 1);
+ Changed;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TWideStringList.SetLanguage(Value: LCID);
+
+begin
+ inherited;
+ if Sorted then Sort;
+end;
+
+//----------------- functions for null terminated wide strings ---------------------------------------------------------
+
+function StrLenW(Str: PWideChar): Cardinal;
+
+// returns number of characters in a string excluding the null terminator
+
+asm
+ MOV EDX, EDI
+ MOV EDI, EAX
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ MOV EAX, 0FFFFFFFEH
+ SUB EAX, ECX
+ MOV EDI, EDX
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrEndW(Str: PWideChar): PWideChar;
+
+// returns a pointer to the end of a null terminated string
+
+asm
+ MOV EDX, EDI
+ MOV EDI, EAX
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ LEA EAX, [EDI - 2]
+ MOV EDI, EDX
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrMoveW(Dest, Source: PWideChar; Count: Cardinal): PWideChar;
+
+// Copies the specified number of characters to the destination string and returns Dest
+// also as result. Dest must have enough room to store at least Count characters.
+
+asm
+ PUSH ESI
+ PUSH EDI
+ MOV ESI, EDX
+ MOV EDI, EAX
+ MOV EDX, ECX
+ CMP EDI, ESI
+ JG @@1
+ JE @@2
+ SHR ECX, 1
+ REP MOVSD
+ MOV ECX, EDX
+ AND ECX, 1
+ REP MOVSW
+ JMP @@2
+
+@@1: LEA ESI, [ESI + 2 * ECX - 2]
+ LEA EDI, [EDI + 2 * ECX - 2]
+ STD
+ AND ECX, 1
+ REP MOVSW
+ SUB EDI, 2
+ SUB ESI, 2
+ MOV ECX, EDX
+ SHR ECX, 1
+ REP MOVSD
+ CLD
+@@2: POP EDI
+ POP ESI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrCopyW(Dest, Source: PWideChar): PWideChar;
+
+// copies Source to Dest and returns Dest
+
+asm
+ PUSH EDI
+ PUSH ESI
+ MOV ESI, EAX
+ MOV EDI, EDX
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ NOT ECX
+ MOV EDI, ESI
+ MOV ESI, EDX
+ MOV EDX, ECX
+ MOV EAX, EDI
+ SHR ECX, 1
+ REP MOVSD
+ MOV ECX, EDX
+ AND ECX, 1
+ REP MOVSW
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrECopyW(Dest, Source: PWideChar): PWideChar;
+
+// copies Source to Dest and returns a pointer to the null character ending the string
+
+asm
+ PUSH EDI
+ PUSH ESI
+ MOV ESI, EAX
+ MOV EDI, EDX
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ NOT ECX
+ MOV EDI, ESI
+ MOV ESI, EDX
+ MOV EDX, ECX
+ SHR ECX, 1
+ REP MOVSD
+ MOV ECX, EDX
+ AND ECX, 1
+ REP MOVSW
+ LEA EAX, [EDI - 2]
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrLCopyW(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
+
+// copies a specified maximum number of characters from Source to Dest
+
+asm
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV ESI, EAX
+ MOV EDI, EDX
+ MOV EBX, ECX
+ XOR AX, AX
+ TEST ECX, ECX
+ JZ @@1
+ REPNE SCASW
+ JNE @@1
+ INC ECX
+@@1: SUB EBX, ECX
+ MOV EDI, ESI
+ MOV ESI, EDX
+ MOV EDX, EDI
+ MOV ECX, EBX
+ SHR ECX, 1
+ REP MOVSD
+ MOV ECX, EBX
+ AND ECX, 1
+ REP MOVSW
+ STOSW
+ MOV EAX, EDX
+ POP EBX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar;
+
+// copies a Pascal-style string to a null-terminated wide string
+
+begin
+ Result := StrPLCopyW(Dest, Source, Length(Source));
+ Result[Length(Source)] := WideNull;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar;
+// copies characters from a Pascal-style WideString into a null-terminated wide string
+
+begin
+ result := StrLCopyW(Dest, PWideChar(Source), MaxLen);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrCatW(Dest, Source: PWideChar): PWideChar;
+
+// appends a copy of Source to the end of Dest and returns the concatenated string
+
+begin
+ StrCopyW(StrEndW(Dest), Source);
+ Result := Dest;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrLCatW(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
+
+// appends a specified maximum number of WideCharacters to string
+
+asm
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV EDI, Dest
+ MOV ESI, Source
+ MOV EBX, MaxLen
+ SHL EBX, 1
+ CALL StrEndW
+ MOV ECX, EDI
+ ADD ECX, EBX
+ SUB ECX, EAX
+ JBE @@1
+ MOV EDX, ESI
+ SHR ECX, 1
+ CALL StrLCopyW
+@@1: MOV EAX, EDI
+ POP EBX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrCompW(Str1, Str2: PWideChar): Integer;
+
+// compares Str1 to Str2 (binary comparation)
+// Note: There's also an extended comparation function which uses a given language to
+// compare unicode strings.
+
+asm
+ PUSH EDI
+ PUSH ESI
+ MOV EDI, EDX
+ MOV ESI, EAX
+ MOV ECX, 0FFFFFFFFH
+ XOR EAX, EAX
+ REPNE SCASW
+ NOT ECX
+ MOV EDI, EDX
+ XOR EDX, EDX
+ REPE CMPSW
+ MOV AX, [ESI - 2]
+ MOV DX, [EDI - 2]
+ SUB EAX, EDX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrICompW(Str1, Str2: PWideChar): Integer;
+
+// compares Str1 to Str2 without case sensitivity (binary comparation),
+// Note: only ANSI characters are compared case insensitively
+
+asm
+ PUSH EDI
+ PUSH ESI
+ MOV EDI, EDX
+ MOV ESI, EAX
+ MOV ECX, 0FFFFFFFFH
+ XOR EAX, EAX
+ REPNE SCASW
+ NOT ECX
+ MOV EDI, EDX
+ XOR EDX, EDX
+@@1: REPE CMPSW
+ JE @@4
+ MOV AX, [ESI - 2]
+ CMP AX, 'a'
+ JB @@2
+ CMP AX, 'z'
+ JA @@2
+ SUB AL, 20H
+@@2: MOV DX, [EDI - 2]
+ CMP DX, 'a'
+ JB @@3
+ CMP DX, 'z'
+ JA @@3
+ SUB DX, 20H
+@@3: SUB EAX, EDX
+ JE @@1
+@@4: POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrLCompW(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
+
+// compares a specified maximum number of charaters in two strings
+
+asm
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV EDI, EDX
+ MOV ESI, EAX
+ MOV EBX, ECX
+ XOR EAX, EAX
+ OR ECX, ECX
+ JE @@1
+ REPNE SCASW
+ SUB EBX, ECX
+ MOV ECX, EBX
+ MOV EDI, EDX
+ XOR EDX, EDX
+ REPE CMPSW
+ MOV AX, [ESI - 2]
+ MOV DX, [EDI - 2]
+ SUB EAX, EDX
+@@1: POP EBX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrLICompW(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
+
+// compares strings up to a specified maximum number of characters, not case sensitive
+// Note: only ANSI characters are compared case insensitively
+
+asm
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV EDI, EDX
+ MOV ESI, EAX
+ MOV EBX, ECX
+ XOR EAX, EAX
+ OR ECX, ECX
+ JE @@4
+ REPNE SCASW
+ SUB EBX, ECX
+ MOV ECX, EBX
+ MOV EDI, EDX
+ XOR EDX, EDX
+@@1: REPE CMPSW
+ JE @@4
+ MOV AX, [ESI - 2]
+ CMP AX, 'a'
+ JB @@2
+ CMP AX, 'z'
+ JA @@2
+ SUB AX, 20H
+@@2: MOV DX, [EDI - 2]
+ CMP DX, 'a'
+ JB @@3
+ CMP DX, 'z'
+ JA @@3
+ SUB DX, 20H
+@@3: SUB EAX, EDX
+ JE @@1
+@@4: POP EBX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrNScanW(S1, S2: PWideChar): Integer;
+
+// determines where (in S1) the first time one of the characters of S2 appear.
+// The result is the length of a string part of S1 where none of the characters of
+// S2 do appear (not counting the trailing #0 and starting with position 0 in S1).
+
+var
+ Run: PWideChar;
+
+begin
+ Result := -1;
+ if Assigned(S1) and Assigned(S2) then
+ begin
+ Run := S1;
+ while (Run^ <> #0) do
+ begin
+ if StrScanW(S2, Run^) <> nil then Break;
+ Inc(Run);
+ end;
+ Result := Run - S1;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrRNScanW(S1, S2: PWideChar): Integer;
+
+// This function does the same as StrRNScanW but uses S1 in reverse order. This means S1 points to the last
+// character of a string, is traveresed reversely and terminates with a starting #0.
+// This is useful for parsing strings stored in reversed macro buffers etc.
+
+var
+ Run: PWideChar;
+
+begin
+ Result := -1;
+ if Assigned(S1) and Assigned(S2) then
+ begin
+ Run := S1;
+ while (Run^ <> #0) do
+ begin
+ if StrScanW(S2, Run^) <> nil then Break;
+ Dec(Run);
+ end;
+ Result := S1 - Run;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrScanW(Str: PWideChar; Chr: WideChar): PWideChar;
+
+// returns a pointer to first occurrence of a specified character in a string
+
+asm
+ PUSH EDI
+ PUSH EAX
+ MOV EDI, Str
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ NOT ECX
+ POP EDI
+ MOV AX, Chr
+ REPNE SCASW
+ MOV EAX, 0
+ JNE @@1
+ MOV EAX, EDI
+ SUB EAX, 2
+@@1: POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrScanW(Str: PWideChar; Chr: WideChar; StrLen: Cardinal): PWideChar;
+
+// returns a pointer to first occurrence of a specified character in a string
+// or nil if not found
+// Note: this is just a binary search for the specified character and there's no check for
+// a terminating null. Instead at most StrLen characters are searched. This makes
+// this function extremly fast.
+//
+// on enter EAX contains Str, EDX contains Chr and ECX StrLen
+// on exit EAX contains result pointer or nil
+
+asm
+ TEST EAX, EAX
+ JZ @@Exit // get out if the string is nil or StrLen is 0
+ JCXZ @@Exit
+@@Loop:
+ CMP [EAX], DX // this unrolled loop is actually faster on modern processors
+ JE @@Exit // than REP SCASW
+ INC EAX
+ DEC ECX
+ JNZ @@Loop
+ XOR EAX, EAX
+@@Exit:
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrRScanW(Str: PWideChar; Chr: WideChar): PWideChar;
+
+// returns a pointer to the last occurance of Chr in Str
+
+asm
+ PUSH EDI
+ MOV EDI, Str
+ MOV ECX, 0FFFFFFFFH
+ XOR AX, AX
+ REPNE SCASW
+ NOT ECX
+ STD
+ SUB EDI, 2
+ MOV AX, Chr
+ REPNE SCASW
+ MOV EAX, 0
+ JNE @@1
+ MOV EAX, EDI
+ ADD EAX, 2
+@@1: CLD
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrPosW(Str, SubStr: PWideChar): PWideChar;
+
+// returns a pointer to the first occurance of SubStr in Str
+
+asm
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ OR EAX, EAX
+ JZ @@2
+ OR EDX, EDX
+ JZ @@2
+ MOV EBX, EAX
+ MOV EDI, EDX
+ XOR AX, AX
+ MOV ECX, 0FFFFFFFFH
+ REPNE SCASW
+ NOT ECX
+ DEC ECX
+ JZ @@2
+ MOV ESI, ECX
+ MOV EDI, EBX
+ MOV ECX, 0FFFFFFFFH
+ REPNE SCASW
+ NOT ECX
+ SUB ECX, ESI
+ JBE @@2
+ MOV EDI, EBX
+ LEA EBX, [ESI - 1] // Note: 2 would be wrong here, we are dealing with numbers not an address
+@@1: MOV ESI, EDX
+ LODSW
+ REPNE SCASW
+ JNE @@2
+ MOV EAX, ECX
+ PUSH EDI
+ MOV ECX, EBX
+ REPE CMPSW
+ POP EDI
+ MOV ECX, EAX
+ JNE @@1
+ LEA EAX, [EDI - 2]
+ JMP @@3
+
+@@2: XOR EAX, EAX
+@@3: POP EBX
+ POP ESI
+ POP EDI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrUpperW(Str: PWideChar): PWideChar;
+
+// converts Str to upper case and returns it
+
+begin
+ Result := Str;
+ while Str^ <> WideNull do
+ begin
+ Str^ := WideChar(UnicodeToUpper(Word(Str^)));
+ Inc(Str);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrLowerW(Str: PWideChar): PWideChar;
+
+// converts Str to lower case and returns it
+
+begin
+ Result := Str;
+ while Str^ <> WideNull do
+ begin
+ Str^ := WideChar(UnicodeToLower(Word(Str^)));
+ Inc(Str);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrTitleW(Str: PWideChar): PWideChar;
+
+// converts Str to title case and returns it
+
+begin
+ Result := Str;
+ while Str^ <> WideNull do
+ begin
+ Str^ := WideChar(UnicodeToTitle(Word(Str^)));
+ Inc(Str);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrAllocW(Size: Cardinal): PWideChar;
+
+// Allocates a buffer for a null-terminated wide string and returns a pointer
+// to the first character of the string.
+
+begin
+ Size := SizeOf(WideChar) * Size + SizeOf(Cardinal);
+ GetMem(Result, Size);
+ FillChar(Result^, Size, 0);
+ Cardinal(Pointer(Result)^) := Size;
+ Inc(Result, SizeOf(Cardinal) div SizeOf(WideChar));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrBufSizeW(Str: PWideChar): Cardinal;
+
+// Returns max number of wide characters that can be stored in a buffer allocated by StrAllocW.
+
+begin
+ Dec(Str, SizeOf(Cardinal) div SizeOf(WideChar));
+ Result := (Cardinal(Pointer(Str)^) - SizeOf(Cardinal)) div 2;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function StrNewW(Str: PWideChar): PWideChar;
+
+// Duplicates the given string (if not nil) and returns the address of the new string.
+
+var
+ Size: Cardinal;
+
+begin
+ if Str = nil then Result := nil
+ else
+ begin
+ Size := StrLenW(Str) + 1;
+ Result := StrMoveW(StrAllocW(Size), Str, Size);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure StrDisposeW(Str: PWideChar);
+
+// releases a string allocated with StrNew.
+
+begin
+ if Str <> nil then
+ begin
+ Dec(Str, SizeOf(Cardinal) div SizeOf(WideChar));
+ FreeMem(Str, Cardinal(Pointer(Str)^));
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure StrSwapByteOrder(Str: PWideChar);
+
+// exchanges in each character of the given string the low order and high order
+// byte to go from LSB to MSB and vice versa.
+// EAX contains address of string
+
+asm
+ PUSH ESI
+ PUSH EDI
+ MOV ESI, EAX
+ MOV EDI, ESI
+ XOR EAX, EAX // clear high order byte to be able to use 32bit operand below
+@@1: LODSW
+ OR EAX, EAX
+ JZ @@2
+ XCHG AL, AH
+ STOSW
+ JMP @@1
+
+@@2: POP EDI
+ POP ESI
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideAdjustLineBreaks(const S: WideString): WideString;
+
+var
+ Source,
+ SourceEnd,
+ Dest: PWideChar;
+ Extra: Integer;
+
+begin
+ Source := Pointer(S);
+ SourceEnd := Source + Length(S);
+ Extra := 0;
+ while Source < SourceEnd do
+ begin
+ case Source^ of
+ LF:
+ Inc(Extra);
+ CR:
+ if Source[1] = LineFeed then Inc(Source)
+ else Inc(Extra);
+ end;
+ Inc(Source);
+ end;
+
+ Source := Pointer(S);
+ SetString(Result, nil, SourceEnd - Source + Extra);
+ Dest := Pointer(Result);
+ while Source < SourceEnd do
+ case Source^ of
+ LineFeed:
+ begin
+ Dest^ := LineSeparator;
+ Inc(Dest);
+ Inc(Source);
+ end;
+ CarriageReturn:
+ begin
+ Dest^ := LineSeparator;
+ Inc(Dest);
+ Inc(Source);
+ if Source^ = LineFeed then Inc(Source);
+ end;
+ else
+ Dest^ := Source^;
+ Inc(Dest);
+ Inc(Source);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideQuotedStr(const S: WideString; Quote: WideChar): WideString;
+
+// works like QuotedStr from SysUtils.pas but can insert any quotation character
+
+var
+ P, Src,
+ Dest: PWideChar;
+ AddCount: Integer;
+
+begin
+ AddCount := 0;
+ P := StrScanW(PWideChar(S), Quote);
+ while Assigned(P) do
+ begin
+ Inc(P);
+ Inc(AddCount);
+ P := StrScanW(P, Quote);
+ end;
+
+ if AddCount = 0 then Result := Quote + S + Quote
+ else
+ begin
+ SetLength(Result, Length(S) + AddCount + 2);
+ Dest := PWideChar(Result);
+ Dest^ := Quote;
+ Inc(Dest);
+ Src := PWideChar(S);
+ P := StrScanW(Src, Quote);
+ repeat
+ Inc(P);
+ Move(Src^, Dest^, (P - Src) * SizeOf(WideChar));
+ Inc(Dest, P - Src);
+ Dest^ := Quote;
+ Inc(Dest);
+ Src := P;
+ P := StrScanW(Src, Quote);
+ until P = nil;
+ P := StrEndW(Src);
+ Move(Src^, Dest^, (P - Src) * SizeOf(WideChar));
+ Inc(Dest, P - Src);
+ Dest^ := Quote;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideExtractQuotedStr(var Src: PWideChar; Quote: WideChar): WideString;
+
+// extracts a string enclosed in quote characters given by Quote
+
+var
+ P, Dest: PWideChar;
+ DropCount: Integer;
+
+begin
+ Result := '';
+ if (Src = nil) or (Src^ <> Quote) then Exit;
+
+ Inc(Src);
+ DropCount := 1;
+ P := Src;
+ Src := StrScanW(Src, Quote);
+
+ while Assigned(Src) do // count adjacent pairs of quote chars
+ begin
+ Inc(Src);
+ if Src^ <> Quote then Break;
+ Inc(Src);
+ Inc(DropCount);
+ Src := StrScanW(Src, Quote);
+ end;
+
+ if Src = nil then Src := StrEndW(P);
+ if (Src - P) <= 1 then Exit;
+
+ if DropCount = 1 then SetString(Result, P, Src - P - 1)
+ else
+ begin
+ SetLength(Result, Src - P - DropCount);
+ Dest := PWideChar(Result);
+ Src := StrScanW(P, Quote);
+ while Assigned(Src) do
+ begin
+ Inc(Src);
+ if Src^ <> Quote then Break;
+ Move(P^, Dest^, (Src - P) * SizeOf(WideChar));
+ Inc(Dest, Src - P);
+ Inc(Src);
+ P := Src;
+ Src := StrScanW(Src, Quote);
+ end;
+ if Src = nil then Src := StrEndW(P);
+ Move(P^, Dest^, (Src - P - 1) * SizeOf(WideChar));
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideStringOfChar(C: WideChar; Count: Cardinal): WideString;
+
+// returns a string of Count characters filled with C
+
+var
+ I: Integer;
+
+begin
+ SetLength(Result, Count);
+ for I := 1 to Count do Result[I] := C;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideTrim(const S: WideString): WideString;
+
+var
+ I, L: Integer;
+
+begin
+ L := Length(S);
+ I := 1;
+ while (I <= L) and
+ (UnicodeIsWhiteSpace(Word(S[I])) or UnicodeIsControl(Word(S[I]))) do Inc(I);
+ if I > L then Result := ''
+ else
+ begin
+ while UnicodeIsWhiteSpace(Word(S[L])) or UnicodeIsControl(Word(S[L])) do Dec(L);
+ Result := Copy(S, I, L - I + 1);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideTrimLeft(const S: WideString): WideString;
+
+var
+ I, L: Integer;
+
+begin
+ L := Length(S);
+ I := 1;
+ while (I <= L) and
+ (UnicodeIsWhiteSpace(Word(S[I])) or UnicodeIsControl(Word(S[I]))) do Inc(I);
+ Result := Copy(S, I, Maxint);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideTrimRight(const S: WideString): WideString;
+
+var
+ I: Integer;
+
+begin
+ I := Length(S);
+ while (I > 0) and
+ (UnicodeIsWhiteSpace(Word(S[I])) or UnicodeIsControl(Word(S[I]))) do Dec(I);
+ Result := Copy(S, 1, I);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideCharPos(const S: WideString; const Ch: WideChar; const Index: Integer): Integer;
+
+// returns the index of character Ch in S, starts searching at index Index
+// Note: This is a quick memory search. No attempt is made to interpret either the given
+// charcter nor the string (ligatures, modifiers, surrogates etc.)
+
+asm
+ TEST EAX,EAX // make sure we are not null
+ JZ @StrIsNil
+ DEC ECX // make index zero based
+ JL @IdxIsSmall
+ PUSH EBX
+ PUSH EDI
+ MOV EDI,EAX // EDI := S
+ XOR EAX,EAX
+ MOV AX, DX // AX := Ch
+ MOV EDX,[EDI-4] // EDX := Length(S) * 2
+ SHR EDX,1 // EDX := EDX div 2
+ MOV EBX,EDX // save the length to calc. result
+ SUB EDX,ECX // EDX = EDX - Index = # of chars to scan
+ JLE @IdxIsBig
+ ADD EDI,ECX // point to index'th char
+ MOV ECX,EDX // loop counter
+ CLD
+ REPNE SCASW
+ JNE @NoMatch
+ MOV EAX,EBX // result := saved length -
+ SUB EAX,ECX // loop counter value
+ POP EDI
+ POP EBX
+ RET
+@IdxIsBig:
+@NoMatch:
+ XOR EAX,EAX
+ POP EDI
+ POP EBX
+ RET
+@IdxIsSmall:
+ XOR EAX,EAX
+@StrIsNil:
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideCompose(const S: WideString): WideString;
+
+// returns a string with all characters of S but if there is a possibility to combine characters
+// then they are composed
+
+var
+ I: Integer;
+
+begin
+ for I := 1 to Length(S) do
+ begin
+ //UnicodeCompose(
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideComposeHangul(Source: WideString): WideString;
+
+var
+ Len: Integer;
+ Ch,
+ Last: WideChar;
+ I, J: Integer;
+ LINdex,
+ VIndex,
+ SIndex,
+ TIndex: Integer;
+
+begin
+ // copy first char
+ Len := Length(Source);
+ if Len > 0 then
+ begin
+ // allocate memory only once and shorten the result when done
+ SetLength(Result, Len);
+ J := 1;
+ Last := Source[J];
+ Result := Last;
+
+ for I := 2 to Len do
+ begin
+ Ch := Source[I];
+
+ // 1. check to see if two current characters are L and V
+ LIndex := Word(Last) - LBase;
+ if (0 <= LIndex) and (LIndex < LCount) then
+ begin
+ VIndex := Word(Ch) - VBase;
+ if (0 <= VIndex) and (VIndex < VCount) then
+ begin
+ // make syllable of form LV
+ Last := WideChar((SBase + (LIndex * VCount + VIndex) * TCount));
+ Result[J] := Last; // reset last
+ Continue; // discard Ch
+ end;
+ end;
+
+ // 2. check to see if two current characters are LV and T
+ SIndex := Word(Last) - SBase;
+ if (0 <= SIndex) and (SIndex < SCount) and ((SIndex mod TCount) = 0) then
+ begin
+ TIndex := Word(Ch) - TBase;
+ if (0 <= TIndex) and (TIndex <= TCount) then
+ begin
+ // make syllable of form LVT
+
+ Inc(Word(Last), TIndex);
+ Result[J] := Last; // reset last
+ Continue; // discard ch
+ end;
+ end;
+
+ // if neither case was true, just add the character
+ Last := Ch;
+ Inc(J);
+ Result[J] := Ch;
+ end;
+ // shorten the result to real length
+ SetLength(Result, J);
+ end
+ else Result := '';
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideDecompose(const S: WideString): WideString;
+
+// returns a string with all characters of S but decomposed, e.g. Ê is returned as E^ etc.
+
+var
+ I, J, K: Integer;
+ CClass: Cardinal;
+ Decomp: TCardinalArray;
+
+begin
+ Result := '';
+ Decomp := nil;
+ for I := 1 to Length(S) do
+ begin
+ // no need to dive iteratively into decompositions as this is already done
+ // on creation of the data used to lookup the decomposition
+ Decomp := UnicodeDecompose(Word(S[I]));
+ // We need to sort the returned values according to their canonical class.
+ for J := 0 to High(Decomp) do
+ begin
+ CClass := UnicodeCanonicalClass(Decomp[J]);
+ if CClass = 0 then Result := Result + WideChar(Decomp[J])
+ else
+ begin
+ K := Length(Result);
+ // bubble-sort combining marks as necessary
+ while K > 1 do
+ begin
+ if UnicodeCanonicalClass(Word(Result[K])) <= CClass then Break;
+ Dec(K);
+ end;
+ Insert(WideChar(Decomp[J]), Result, K + 1);
+ end;
+ end;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideLoCase(C: WideChar): WideChar;
+
+begin
+ Result := WideChar(UnicodeToLower(Word(C)));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideLowerCase(const S: WideString): WideString;
+
+var
+ I: Integer;
+
+begin
+ Result := S;
+ for I := 1 to Length(S) do
+ Result[I] := WideChar(UnicodeToLower(Word(Result[I])));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideTitleCaseChar(C: WideChar): WideChar;
+
+begin
+ Result := WideChar(UnicodeToTitle(Word(C)));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideTitleCaseString(const S: WideString): WideString;
+
+var
+ I: Integer;
+
+begin
+ Result := S;
+ for I := 1 to Length(S) do
+ Result[I] := WideChar(UnicodeToTitle(Word(Result[I])));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideUpCase(C: WideChar): WideChar;
+
+begin
+ Result := WideChar(UnicodeToUpper(Word(C)));
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideUpperCase(const S: WideString): WideString;
+
+var
+ I: Integer;
+
+begin
+ Result := S;
+ for I := 1 to Length(S) do
+ Result[I] := WideChar(UnicodeToUpper(Word(Result[I])));
+end;
+
+//----------------- character test routines ----------------------------------------------------------------------------
+
+// Is the character alphabetic?
+function UnicodeIsAlpha(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_LU or UC_LL or UC_LM or UC_LO or UC_LT, 0); end;
+// Is the character a digit?
+function UnicodeIsDigit(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ND, 0); end;
+// Is the character alphabetic or a number?
+function UnicodeIsAlphaNum(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_LU or UC_LL or UC_LM or UC_LO or UC_LT or UC_ND, 0); end;
+// Is the character a control character?
+function UnicodeIsControl(C: UCS4): Boolean; begin Result := IsProperty(C, UC_CC or UC_CF, 0); end;
+// Is the character a spacing character?
+function UnicodeIsSpace(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ZS or UC_SS, 0); end;
+// Is the character a white space character (same as UnicodeIsSpace plus tabulator, new line etc.)?
+function UnicodeIsWhiteSpace(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ZS or UC_SS, UC_WS or UC_S); end;
+// Is the character a space separator?
+function UnicodeIsBlank(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ZS, 0); end;
+// Is the character a punctuation mark?
+function UnicodeIsPunctuation(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_PD or UC_PS or UC_PE or UC_PO, UC_PI or UC_PF); end;
+// Is the character graphical?
+function UnicodeIsGraph(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_MN or UC_MC or UC_ME or UC_ND or UC_NL or UC_NO or
+ UC_LU or UC_LL or UC_LT or UC_LM or UC_LO or UC_PC or UC_PD or
+ UC_PS or UC_PE or UC_PO or UC_SM or UC_SM or UC_SC or UC_SK or
+ UC_SO, UC_PI or UC_PF); end;
+// Is the character printable?
+function UnicodeIsPrintable(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_MN or UC_MC or UC_ME or UC_ND or UC_NL or UC_NO or
+ UC_LU or UC_LL or UC_LT or UC_LM or UC_LO or UC_PC or UC_PD or
+ UC_PS or UC_PE or UC_PO or UC_SM or UC_SM or UC_SC or UC_SK or
+ UC_SO or UC_ZS, UC_PI or UC_PF); end;
+// Is the character already upper case?
+function UnicodeIsUpper(C: UCS4): Boolean; begin Result := IsProperty(C, UC_LU, 0); end;
+// Is the character already lower case?
+function UnicodeIsLower(C: UCS4): Boolean; begin Result := IsProperty(C, UC_LL, 0); end;
+// Is the character already title case?
+function UnicodeIsTitle(C: UCS4): Boolean; begin Result := IsProperty(C, UC_LT, 0); end;
+// Is the character a hex digit?
+function UnicodeIsHexDigit(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_HD); end;
+
+// Is the character a C0 control character (< 32)?
+function UnicodeIsIsoControl(C: UCS4): Boolean; begin Result := IsProperty(C, UC_CC, 0); end;
+// Is the character a format control character?
+function UnicodeIsFormatControl(C: UCS4): Boolean; begin Result := IsProperty(C, UC_CF, 0); end;
+
+// Is the character a symbol?
+function UnicodeIsSymbol(C: UCS4): Boolean; begin Result := IsProperty(C, UC_SM or UC_SC or UC_SO or UC_SK, 0); end;
+// Is the character a number or digit?
+function UnicodeIsNumber(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ND or UC_NO or UC_NL, 0); end;
+// Is the character non-spacing?
+function UnicodeIsNonSpacing(C: UCS4): Boolean; begin Result := IsProperty(C, UC_MN, 0); end;
+// Is the character an open/left punctuation (i.e. '[')?
+function UnicodeIsOpenPunctuation(C: UCS4): Boolean; begin Result := IsProperty(C, UC_PS, 0); end;
+// Is the character an close/right punctuation (i.e. ']')?
+function UnicodeIsClosePunctuation(C: UCS4): Boolean; begin Result := IsProperty(C, UC_PE, 0); end;
+// Is the character an initial punctuation (i.e. U+2018 LEFT SINGLE QUOTATION MARK)?
+function UnicodeIsInitialPunctuation(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_PI); end;
+// Is the character a final punctuation (i.e. U+2019 RIGHT SINGLE QUOTATION MARK)?
+function UnicodeIsFinalPunctuation(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_PF); end;
+
+// Can the character be decomposed into a set of other characters?
+function UnicodeIsComposite(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_CM); end;
+// Is the character one of the many quotation marks?
+function UnicodeIsQuotationMark(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_QM); end;
+// Is the character one that has an opposite form (i.e. <>)?
+function UnicodeIsSymmetric(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_SY); end;
+// Is the character mirroring (superset of symmetric)?
+function UnicodeIsMirroring(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_MR); end;
+// Is the character non-breaking (i.e. non-breaking space)?
+function UnicodeIsNonBreaking(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_NB); end;
+
+// Directionality functions
+// Does the character have strong right-to-left directionality (i.e. Arabic letters)?
+function UnicodeIsRTL(C: UCS4): Boolean; begin Result := IsProperty(C, UC_R, 0); end;
+// Does the character have strong left-to-right directionality (i.e. Latin letters)?
+function UnicodeIsLTR(C: UCS4): Boolean; begin Result := IsProperty(C, UC_L, 0); end;
+// Does the character have strong directionality?
+function UnicodeIsStrong(C: UCS4): Boolean; begin Result := IsProperty(C, UC_L or UC_R, 0); end;
+// Does the character have weak directionality (i.e. numbers)?
+function UnicodeIsWeak(C: UCS4): Boolean; begin Result := IsProperty(C, UC_EN or UC_ES, UC_ET or UC_AN or UC_CS); end;
+// Does the character have neutral directionality (i.e. whitespace)?
+function UnicodeIsNeutral(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_B or UC_S or UC_WS or UC_ON); end;
+// Is the character a block or segment separator?
+function UnicodeIsSeparator(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_B or UC_S); end;
+
+// Other functions inspired by John Cowan.
+// Is the character a mark of some kind?
+function UnicodeIsMark(C: UCS4): Boolean; begin Result := IsProperty(C, UC_MN or UC_MC or UC_ME, 0); end;
+// Is the character a modifier letter?
+function UnicodeIsModifier(C: UCS4): Boolean; begin Result := IsProperty(C, UC_LM, 0); end;
+// Is the character a number represented by a letter?
+function UnicodeIsLetterNumber(C: UCS4): Boolean; begin Result := IsProperty(C, UC_NL, 0); end;
+// Is the character connecting punctuation?
+function UnicodeIsConnectionPunctuation(C: UCS4): Boolean; begin Result := IsProperty(C, UC_PC, 0); end;
+// Is the character a dash punctuation?
+function UnicodeIsDash(C: UCS4): Boolean; begin Result := IsProperty(C, UC_PD, 0); end;
+// Is the character a math character?
+function UnicodeIsMath(C: UCS4): Boolean; begin Result := IsProperty(C, UC_SM, 0); end;
+// Is the character a currency character?
+function UnicodeIsCurrency(C: UCS4): Boolean; begin Result := IsProperty(C, UC_SC, 0); end;
+// Is the character a modifier symbol?
+function UnicodeIsModifierSymbol(C: UCS4): Boolean; begin Result := IsProperty(C, UC_SK, 0); end;
+// Is the character a non-spacing mark?
+function UnicodeIsNonSpacingMark(C: UCS4): Boolean; begin Result := IsProperty(C, UC_MN, 0); end;
+// Is the character a spacing mark?
+function UnicodeIsSpacingMark(C: UCS4): Boolean; begin Result := IsProperty(C, UC_MC, 0); end;
+// Is the character enclosing (i.e. enclosing box)?
+function UnicodeIsEnclosing(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ME, 0); end;
+// Is the character from the Private Use Area?
+function UnicodeIsPrivate(C: UCS4): Boolean; begin Result := IsProperty(C, UC_CO, 0); end;
+// Is the character one of the surrogate codes?
+function UnicodeIsSurrogate(C: UCS4): Boolean; begin Result := IsProperty(C, UC_OS, 0); end;
+// Is the character a line separator?
+function UnicodeIsLineSeparator(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ZL, 0); end;
+// Is th character a paragraph separator;
+function UnicodeIsParagraphSeparator(C: UCS4): Boolean; begin Result := IsProperty(C, UC_ZP, 0); end;
+
+// Can the character begin an identifier?
+function UnicodeIsIdenifierStart(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_LU or UC_LL or UC_LT or UC_LO or UC_NL, 0); end;
+// Can the character appear in an identifier?
+function UnicodeIsIdentifierPart(C: UCS4): Boolean;
+begin Result := IsProperty(C, UC_LU or UC_LL or UC_LT or UC_LO or UC_NL or UC_MN or
+ UC_MC or UC_ND or UC_PC or UC_CF, 0); end;
+
+// Is the character defined (appears in one of the data files)?
+function UnicodeIsDefined(C: UCS4): Boolean; begin Result := IsProperty(C, 0, UC_CP); end;
+// Is the character not defined (non-Unicode)?
+function UnicodeIsUndefined(C: UCS4): Boolean; begin Result := not IsProperty(C, 0, UC_CP); end;
+
+// Other miscellaneous character property functions.
+// Is the character a Han ideograph?
+function UnicodeIsHan(C: UCS4): Boolean;
+begin Result := ((C >= $4E00) and (C <= $9FFF)) or ((C >= $F900) and (C <= $FAFF)); end;
+
+// Is the character a pre-composed Hangul syllable?
+function UnicodeIsHangul(C: UCS4): Boolean;
+begin Result := (C >= $AC00) and (C <= $D7FF); end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CodePageFromLocale(Language: LCID): Integer;
+
+// determines the code page for a given locale
+
+var
+ Buf: array[0..6] of AnsiChar;
+
+begin
+ GetLocaleInfo(Language, LOCALE_IDefaultAnsiCodePage, Buf, 6);
+ Result := StrToIntDef(Buf, GetACP);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function KeyboardCodePage: Word;
+
+begin
+ Result := CodePageFromLocale(GetKeyboardLayout(0) and $FFFF);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function KeyUnicode(C: AnsiChar): WideChar;
+
+// converts the given character (as it comes with a WM_CHAR message) into its corresponding
+// Unicode character depending on the active keyboard layout
+
+begin
+ MultiByteToWideChar(KeyboardCodePage, MB_USEGLYPHCHARS, @C, 1, @Result, 1);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CodeBlockFromChar(const C: WideChar): Cardinal;
+
+// returns the Unicode code block to which C belongs
+
+begin
+ case C of
+ #$0000..#$007F: // Basic Latin
+ Result := 0;
+ #$0080..#$00FF: // Latin-1 Supplement
+ Result := 1;
+ #$0100..#$017F: // Latin Extended-A
+ Result := 2;
+ #$0180..#$024F: // Latin Extended-B
+ Result := 3;
+ #$0250..#$02AF: // IPA Extensions
+ Result := 4;
+ #$02B0..#$02FF: // Spacing Modifier Letters
+ Result := 5;
+ #$0300..#$036F: // Combining Diacritical Marks
+ Result := 6;
+ #$0370..#$03FF: // Greek
+ Result := 7;
+ #$0400..#$04FF: // Cyrillic
+ Result := 8;
+ #$0530..#$058F: // Armenian
+ Result := 9;
+ #$0590..#$05FF: // Hebrew
+ Result := 10;
+ #$0600..#$06FF: // Arabic
+ Result := 11;
+ #$0900..#$097F: // Devanagari
+ Result := 12;
+ #$0980..#$09FF: // Bengali
+ Result := 13;
+ #$0A00..#$0A7F: // Gurmukhi
+ Result := 14;
+ #$0A80..#$0AFF: // Gujarati
+ Result := 15;
+ #$0B00..#$0B7F: // Oriya
+ Result := 16;
+ #$0B80..#$0BFF: // Tamil
+ Result := 17;
+ #$0C00..#$0C7F: // Telugu
+ Result := 18;
+ #$0C80..#$0CFF: // Kannada
+ Result := 19;
+ #$0D00..#$0D7F: // Malayalam
+ Result := 20;
+ #$0E00..#$0E7F: // Thai
+ Result := 21;
+ #$0E80..#$0EFF: // Lao
+ Result := 22;
+ #$0F00..#$0FBF: // Tibetan
+ Result := 23;
+ #$10A0..#$10FF: // Georgian
+ Result := 24;
+ #$1100..#$11FF: // Hangul Jamo
+ Result := 25;
+ #$1E00..#$1EFF: // Latin Extended Additional
+ Result := 26;
+ #$1F00..#$1FFF: // Greek Extended
+ Result := 27;
+ #$2000..#$206F: // General Punctuation
+ Result := 28;
+ #$2070..#$209F: // Superscripts and Subscripts
+ Result := 29;
+ #$20A0..#$20CF: // Currency Symbols
+ Result := 30;
+ #$20D0..#$20FF: // Combining Marks for Symbols
+ Result := 31;
+ #$2100..#$214F: // Letterlike Symbols
+ Result := 32;
+ #$2150..#$218F: // Number Forms
+ Result := 33;
+ #$2190..#$21FF: // Arrows
+ Result := 34;
+ #$2200..#$22FF: // Mathematical Operators
+ Result := 35;
+ #$2300..#$23FF: // Miscellaneous Technical
+ Result := 36;
+ #$2400..#$243F: // Control Pictures
+ Result := 37;
+ #$2440..#$245F: // Optical Character Recognition
+ Result := 38;
+ #$2460..#$24FF: // Enclosed Alphanumerics
+ Result := 39;
+ #$2500..#$257F: // Box Drawing
+ Result := 40;
+ #$2580..#$259F: // Block Elements
+ Result := 41;
+ #$25A0..#$25FF: // Geometric Shapes
+ Result := 42;
+ #$2600..#$26FF: // Miscellaneous Symbols
+ Result := 43;
+ #$2700..#$27BF: // Dingbats
+ Result := 44;
+ #$3000..#$303F: // CJK Symbols and Punctuation
+ Result := 45;
+ #$3040..#$309F: // Hiragana
+ Result := 46;
+ #$30A0..#$30FF: // Katakana
+ Result := 47;
+ #$3100..#$312F: // Bopomofo
+ Result := 48;
+ #$3130..#$318F: // Hangul Compatibility Jamo
+ Result := 49;
+ #$3190..#$319F: // Kanbun
+ Result := 50;
+ #$3200..#$32FF: // Enclosed CJK Letters and Months
+ Result := 51;
+ #$3300..#$33FF: // CJK Compatibility
+ Result := 52;
+ #$4E00..#$9FFF: // CJK Unified Ideographs
+ Result := 53;
+ #$AC00..#$D7A3: // Hangul Syllables
+ Result := 54;
+ #$D800..#$DB7F: // High Surrogates
+ Result := 55;
+ #$DB80..#$DBFF: // High Private Use Surrogates
+ Result := 56;
+ #$DC00..#$DFFF: // Low Surrogates
+ Result := 57;
+ #$E000..#$F8FF: // Private Use
+ Result := 58;
+ #$F900..#$FAFF: // CJK Compatibility Ideographs
+ Result := 59;
+ #$FB00..#$FB4F: // Alphabetic Presentation Forms
+ Result := 60;
+ #$FB50..#$FDFF: // Arabic Presentation Forms-A
+ Result := 61;
+ #$FE20..#$FE2F: // Combining Half Marks
+ Result := 62;
+ #$FE30..#$FE4F: // CJK Compatibility Forms
+ Result := 63;
+ #$FE50..#$FE6F: // Small Form Variants
+ Result := 64;
+ #$FE70..#$FEFF: // Arabic Presentation Forms-B
+ Result := 65;
+ #$FF00..#$FFEF: // Halfwidth and Fullwidth Forms
+ Result := 66;
+ else
+ // #$FFF0..#$FFFF Specials
+ Result := 67;
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CodePageToWideString(A: AnsiString; CodePage: Word): WideString;
+
+begin
+ SetLength(Result, Length(A));
+ MultiByteToWideChar(CodePage, 0, PAnsiChar(A), Length(A), PWideChar(Result), Length(A) * 2);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CompareTextWin95(W1, W2: WideString; Locale: LCID): Integer;
+
+// special comparation function for Win9x since there's no system defined comparation function,
+// returns -1 if W1 < W2, 0 if W1 = W2 or 1 if W1 > W2
+
+var
+ S1, S2: AnsiString;
+ CP: Integer;
+ L1, L2: Integer;
+
+begin
+ L1 := Length(W1);
+ L2 := Length(W2);
+ SetLength(S1, L1);
+ SetLength(S2, L2);
+ CP := CodePageFromLocale(Locale);
+ WideCharToMultiByte(CP, 0, PWideChar(W1), L1, PAnsiChar(S1), L1, nil, nil);
+ WideCharToMultiByte(CP, 0, PWideChar(W2), L2, PAnsiChar(S2), L2, nil, nil);
+ Result := CompareStringA(Locale, NORM_IGNORECASE, PAnsiChar(S1), Length(S1), PAnsiChar(S2), Length(S2)) - 2;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function CompareTextWinNT(W1, W2: WideString; Locale: LCID): Integer;
+
+// Wrapper function for WinNT since there's no system defined comparation function in Win9x and
+// we need a central comparation function for TWideStringList.
+// Returns -1 if W1 < W2, 0 if W1 = W2 or 1 if W1 > W2
+
+begin
+ Result := CompareStringW(Locale, NORM_IGNORECASE, PWideChar(W1), Length(W1), PWideChar(W2), Length(W2)) - 2;
+end;
+
+//----------------- Conversion routines --------------------------------------------------------------------------------
+
+const
+ halfShift: Integer = 10;
+
+ halfBase: UCS4 = $0010000;
+ halfMask: UCS4 = $3FF;
+
+ offsetsFromUTF8: array[0..5] of UCS4 = ($00000000, $00003080, $000E2080, $03C82080, $FA082080, $82082080);
+
+ bytesFromUTF8: array[0..255] of Byte = (
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5);
+
+ firstByteMark: array[0..6] of Byte = ($00, $00, $C0, $E0, $F0, $F8, $FC);
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function WideStringToUTF8(S: WideString): AnsiString;
+
+var
+ ch: UCS4;
+ L, J, T,
+ bytesToWrite: Word;
+ byteMask: UCS4;
+ byteMark: UCS4;
+
+begin
+ if Length(S) = 0 then
+ begin
+ Result := '';
+ Exit;
+ end;
+
+ SetLength(Result, Length(S) * 6); // assume worst case
+ T := 1;
+ for J := 1 to Length(S) do
+ begin
+ byteMask := $BF;
+ byteMark := $80;
+
+ ch := UCS4(S[J]);
+
+ if ch < $80 then
+ bytesToWrite := 1
+ else
+ if ch < $800 then
+ bytesToWrite := 2
+ else
+ if ch < $10000 then
+ bytesToWrite := 3
+ else
+ if ch < $200000 then
+ bytesToWrite := 4
+ else
+ if ch < $4000000 then
+ bytesToWrite := 5
+ else
+ if ch <= MaximumUCS4 then
+ bytesToWrite := 6
+ else
+ begin
+ bytesToWrite := 2;
+ ch := ReplacementCharacter;
+ end;
+
+ for L := bytesToWrite downto 2 do
+ begin
+ Result[T + L - 1] := AnsiChar((ch or byteMark) and byteMask);
+ ch := ch shr 6;
+ end;
+ Result[T] := AnsiChar(ch or firstByteMark[bytesToWrite]);
+ Inc(T, bytesToWrite);
+ end;
+ SetLength(Result, T - 1); // assume worst case
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function UTF8ToWideString(S: AnsiString): WideString;
+
+var
+ L, J, T: Cardinal;
+ ch: UCS4;
+ extraBytesToWrite: Word;
+
+begin
+ if Length(S) = 0 then
+ begin
+ Result := '';
+ Exit;
+ end;
+
+ SetLength(Result, Length(S)); // create enough room
+
+ L := 1;
+ T := 1;
+ while L <= Cardinal(Length(S)) do
+ begin
+ ch := 0;
+ extraBytesToWrite := bytesFromUTF8[Ord(S[L])];
+
+ for J := extraBytesToWrite downto 1 do
+ begin
+ ch := ch + Ord(S[L]);
+ Inc(L);
+ ch := ch shl 6;
+ end;
+ ch := ch + Ord(S[L]);
+ Inc(L);
+ ch := ch - offsetsFromUTF8[extraBytesToWrite];
+
+ if ch <= MaximumUCS2 then
+ begin
+ Result[T] := WideChar(ch);
+ Inc(T);
+ end
+ else
+ if ch > MaximumUCS4 then
+ begin
+ Result[T] := WideChar(ReplacementCharacter);
+ Inc(T);
+ end
+ else
+ begin
+ ch := ch - halfBase;
+ Result[T] := WideChar((ch shr halfShift) + SurrogateHighStart);
+ Inc(T);
+ Result[T] := WideChar((ch and halfMask) + SurrogateLowStart);
+ Inc(T);
+ end;
+ end;
+ SetLength(Result, T - 1); // now fix up length
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+initialization
+ if (Win32Platform and VER_PLATFORM_WIN32_NT) <> 0 then @WideCompareText := @CompareTextWinNT
+ else @WideCompareText := @CompareTextWin95;
+finalization
+ LoadInProgress.Free;
+end.
diff --git a/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.res b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.res
new file mode 100644
index 0000000..e8f02e4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/TntUnicodeControls/Unicode.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/back.bmp b/apps/windoze/CBuilder5/BibleCS/back.bmp
new file mode 100644
index 0000000..e1f0f93
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/back.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/biblecsmgr.cpp b/apps/windoze/CBuilder5/BibleCS/biblecsmgr.cpp
new file mode 100644
index 0000000..b2e0ba5
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/biblecsmgr.cpp
@@ -0,0 +1,130 @@
+//---------------------------------------------------------------------------
+#include "BibleCSMGR.h"
+#include <swconfig.h>
+#include <markupfiltmgr.h>
+#ifdef _ICU_
+//#include <utf8arshaping.h>
+#include <utf8bidireorder.h>
+#include <utf8transliterator.h>
+#endif
+//---------------------------------------------------------------------------
+BibleCSMGR::BibleCSMGR(TModInstFrm *iModInstFrm) : SWMgr(0, 0, false, new MarkupFilterMgr(FMT_RTF, ENC_RTF))
+{
+#ifdef _ICU_
+// arshaping = new UTF8arShaping();
+ bidireorder = new UTF8BiDiReorder();
+// transliterator = new UTF8Transliterator();
+#endif
+ ModInstFrm = iModInstFrm;
+ userPrefs = 0;
+ Load();
+
+ OSVERSIONINFO osvi;
+ memset(&osvi, 0, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ platformID = osvi.dwPlatformId;
+}
+
+
+BibleCSMGR::~BibleCSMGR()
+{
+#ifdef _ICU_
+// if (arshaping)
+// delete arshaping;
+ if (bidireorder)
+ delete bidireorder;
+// if (transliterator)
+// delete transliterator;
+#endif
+ if (userPrefs) {
+ userPrefs->Save();
+ delete userPrefs;
+ }
+}
+
+
+void BibleCSMGR::AddRenderFilters(SWModule *module, ConfigEntMap &section)
+{
+ string lang;
+ ConfigEntMap::iterator entry;
+
+ lang = ((entry = section.find("Lang")) != section.end()) ? (*entry).second : (string)"en";
+
+ if (module->Direction() == DIRECTION_RTL) {
+#ifdef _ICU_
+// if (!strnicmp(lang.c_str(), "ar", 2)) {
+// module->AddRenderFilter(arshaping);
+// }
+ if (platformID == WIN9X || (strnicmp(lang.c_str(), "he", 2) && strnicmp(lang.c_str(), "ar", 2))) {
+ module->AddRenderFilter(bidireorder);
+
+ }
+#endif
+ }
+ SWMgr::AddRenderFilters(module, section);
+}
+
+
+char BibleCSMGR::AddModToConfig(int conffd, const char *fname)
+{
+ SWConfig modconf(fname);
+ SectionMap::iterator section;
+ AnsiString abouttext = "";
+ int logflag;
+ TMemoryStream *RTFStream = new TMemoryStream();
+ char retval;
+
+ section = modconf.Sections.begin();
+
+ ModInstFrm->ModText->Caption = "";
+ ModInstFrm->ModText->Caption = ModInstFrm->ModText->Caption + "Found new module [ " + (*(*section).second.find("Description")).second.c_str() + " ]. Installing...";
+
+ abouttext = abouttext + "{\\fs20\\cf0 " + (*(*section).second.find("About")).second.c_str() + " }";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(abouttext.c_str(), abouttext.Length());
+ RTFStream->Position = 0;
+ ModInstFrm->AboutText->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+
+ ModInstFrm->ShowModal();
+
+ logflag = SWLog::systemlog->getLogLevel();
+ SWLog::systemlog->setLogLevel(0);
+ retval = SWMgr::AddModToConfig(conffd, fname);
+ SWLog::systemlog->setLogLevel(logflag);
+
+ return retval;
+}
+
+signed char BibleCSMGR::Load () {
+ signed char retval = SWMgr::Load();
+#ifdef _ICU_
+// optionFilters.insert(FilterMap::value_type("UTF8Transliterator", transliterator));
+// options.push_back(transliterator->getOptionName());
+#endif
+ userPrefs = new SWConfig("./userprefs.conf");
+ applyUserPrefs();
+ return retval;
+};
+
+void BibleCSMGR::applyUserPrefs() {
+ (*config) += (*userPrefs);
+}
+
+void BibleCSMGR::AddGlobalOptions (SWModule * module, ConfigEntMap & section,
+ ConfigEntMap::iterator start,
+ ConfigEntMap::iterator end) {
+
+ SWMgr::AddGlobalOptions(module, section, start, end);
+#ifdef _ICU_
+// module->AddOptionFilter(transliterator);
+#endif
+};
+
+/* maybe force a section for each module and set a per module userConfig. "But not like this. Not like this."
+void BibleCSMGR::AddLocalOptions(SWModule *module, ConfigEntMap &section, ConfigEntMap::iterator start, ConfigEntMap::iterator end)
+{
+ userPrefs[module->Name()]["Font"];
+}
+*/
diff --git a/apps/windoze/CBuilder5/BibleCS/biblecsmgr.h b/apps/windoze/CBuilder5/BibleCS/biblecsmgr.h
new file mode 100644
index 0000000..d9dbc97
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/biblecsmgr.h
@@ -0,0 +1,34 @@
+//---------------------------------------------------------------------------
+#ifndef biblecsmgrH
+#define biblecsmgrH
+#include <swmgr.h>
+#include "ModInstForm.h"
+//---------------------------------------------------------------------------
+
+enum PlatformIDs { WIN32S = 0, WIN9X, WINNT, WINCE };
+
+class BibleCSMGR : public SWMgr {
+ TModInstFrm *ModInstFrm;
+// SWFilter *arshaping;
+ SWFilter *bidireorder;
+ SWFilter *transliterator;
+ char platformID;
+ SWConfig *userPrefs;
+
+protected:
+ virtual char AddModToConfig(int conffd, const char *fname);
+ virtual void AddRenderFilters(SWModule *module, ConfigEntMap &section);
+ virtual signed char Load ();
+ virtual void AddGlobalOptions (SWModule * module, ConfigEntMap & section,
+ ConfigEntMap::iterator start,
+ ConfigEntMap::iterator end);
+
+public:
+ BibleCSMGR(TModInstFrm *iModInstFrm);
+ virtual ~BibleCSMGR();
+ SWConfig &getUserPrefs() { return *userPrefs; }
+ void applyUserPrefs();
+};
+
+#endif
+
diff --git a/apps/windoze/CBuilder5/BibleCS/bookmark.bmp b/apps/windoze/CBuilder5/BibleCS/bookmark.bmp
new file mode 100644
index 0000000..4b6df0c
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/bookmark.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.cpp b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.cpp
new file mode 100644
index 0000000..4429c5d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.cpp
@@ -0,0 +1,221 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "bookmarkfrm.h"
+#include <swconfig.h>
+#include <dirent.h>
+#include "mainfrm.h"
+#include "newbmfilefrm.h"
+#include <io.h>
+#include <dir.h>
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TbookmarkForm *bookmarkForm;
+//---------------------------------------------------------------------------
+__fastcall TbookmarkForm::TbookmarkForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ SWConfig *bookmarks;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ DIR *dir;
+ struct dirent *ent;
+ string conffile;
+ bmdir = "";
+
+ bmtree->Items->Clear();
+
+ if ((sit = Form1->optionsconf->Sections.find("Bookmarks")) != Form1->optionsconf->Sections.end())
+ bmdir = ((eit = (*sit).second.find("Directory")) != (*sit).second.end()) ? (*eit).second : (string)"";
+
+// Add Personal Bookmarks first, or if they don't exist, ADD A BLANK BRANCH first in the tree
+// --------------------------------------------------------------------------
+
+ if (bmdir == "")
+ bmdir = "./bookmarks/";
+
+ if (access(bmdir.c_str(), 0)) { // directory does not exist
+ _mkdir(bmdir.c_str());
+ }
+
+ conffile = bmdir + "personal.conf";
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) {
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ else bmtree->Items->AddObject(bmtree->Selected, "Personal Bookmarks", *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ delete bookmarks;
+// --------------------------------------------------------------------------
+
+// Add all other bookmark files ---------------------------------------------
+ if (dir = opendir(bmdir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, "personal.conf")) && (strcmp(ent->d_name, "."))&& (strcmp(ent->d_name, ".."))) {
+ conffile = bmdir;
+ conffile += ent->d_name;
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) { // Currently supports only ONE topsection per file because on save, each topsection designates which file to rewrite
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ delete bookmarks;
+ }
+ }
+ closedir(dir);
+ }
+}
+
+
+__fastcall TbookmarkForm::~TbookmarkForm() {
+ list <String *>::iterator it;
+
+ SaveBookmarks();
+
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++)
+ delete *it;
+}
+
+
+//---------------------------------------------------------------------------
+
+void TbookmarkForm::AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section)
+{
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ if ((sit = config->Sections.find(section.c_str())) != config->Sections.end()) {
+ for (eit = (*sit).second.begin(); eit != (*sit).second.end(); eit++) {
+ node = tree->Items->AddChild(parent, (*eit).second.c_str());
+ AddSection(config, tree, node, (*eit).first.c_str());
+ }
+ }
+}
+
+
+void __fastcall TbookmarkForm::bmtreeDragDrop(TObject *Sender, TObject *Source,
+ int X, int Y)
+{
+ bmtree->Selected->MoveTo(bmtree->DropTarget, naAddChildFirst);
+}
+//---------------------------------------------------------------------------
+void __fastcall TbookmarkForm::bmtreeDragOver(TObject *Sender, TObject *Source,
+ int X, int Y, TDragState State, bool &Accept)
+{
+ Accept = false;
+
+ if (String(Source->ClassName()) == "TTreeView") {
+ if (Source == bmtree) {
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ Accept = true;
+ }
+ }
+ else Accept = true;
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TbookmarkForm::bmtreeDblClick(TObject *Sender)
+{
+ if (!bmtree->Selected->getFirstChild()) {
+ *(Form1->DefaultVSKey) = bmtree->Selected->Text.c_str();
+ Form1->TextKeyChanged();
+ }
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TbookmarkForm::AddChild1Click(TObject *Sender)
+{
+ bmtree->Selected->Expand(false);
+ bmtree->Items->AddChildFirst(bmtree->Selected, "New Topic")->EditText();
+}
+//---------------------------------------------------------------------------
+void __fastcall TbookmarkForm::Delete1Click(TObject *Sender)
+{
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ bmtree->Selected->Delete();
+ }
+ }
+ else bmtree->Selected->Delete();
+}
+//---------------------------------------------------------------------------
+void __fastcall TbookmarkForm::Rename1Click(TObject *Sender)
+{
+ bmtree->Selected->EditText();
+}
+//---------------------------------------------------------------------------
+
+void TbookmarkForm::SaveBookmarks()
+{
+ TTreeNode *tree = 0;
+ SWConfig *bmconf;
+ ConfigEntMap emap;
+ SectionMap::iterator sit;
+ char buf[15];
+ bool personal, other;
+ list <String *>::iterator it;
+ string persfile;
+
+ if (bmtree->Items->Count)
+ tree = bmtree->Items->Item[0];
+
+ if ((sit = Form1->optionsconf->Sections.find("Bookmarks")) != Form1->optionsconf->Sections.end()) {
+ personal = (atoi((*(*sit).second.find("AutoSavePersonal")).second.c_str())) ? true:false;
+ other = (atoi((*(*sit).second.find("AutoSaveOther")).second.c_str())) ? true:false;
+ }
+
+ persfile = bmdir + "personal.conf";
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++) { // delete all bookmark files before saving in case a top level was deleted
+ if (((!strcmp((*it)->c_str(), persfile.c_str())) && personal) || ((strcmp((*it)->c_str(), persfile.c_str())) && other))
+ unlink((*it)->c_str());
+ }
+
+ for (;tree;tree = tree->getNextSibling()) {
+ if (((*((String *)tree->Data) == persfile.c_str()) && personal) || ((*((String *)tree->Data) != persfile.c_str()) && other)) {
+ bmconf = new SWConfig(((String *)tree->Data)->c_str());
+ emap = bmconf->Sections["ROOT"];
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ emap.erase(buf); emap.insert(ConfigEntMap::value_type(buf, tree->Text.c_str()));
+ AddSectionToConf(bmconf, buf, tree);
+ bmconf->Sections["ROOT"] = emap;
+ bmconf->Save();
+ delete bmconf;
+ }
+ }
+}
+
+
+void TbookmarkForm::AddSectionToConf(SWConfig *config, String section, TTreeNode *tree) {
+ ConfigEntMap sit;
+ char buf[15];
+
+ if (tree = tree->getFirstChild()) {
+ sit = config->Sections[section.c_str()];
+ for (; tree; tree = tree->getNextSibling()) {
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ sit.erase(buf); sit.insert(ConfigEntMap::value_type(buf, tree->Text.c_str()));
+ AddSectionToConf(config, buf, tree);
+ }
+ config->Sections[section.c_str()] = sit;
+ }
+}
+
+void __fastcall TbookmarkForm::NewBookmarkFile1Click(TObject *Sender)
+{
+ if (NewBMfrm->ShowModal() == mrOk) {
+ bmtree->Items->AddObject(bmtree->Items->Item[0], NewBMfrm->bmtitle->Text, *bmfiles.insert(bmfiles.begin(), new String(String(bmdir.c_str()) + NewBMfrm->bmfile->Text + String(".conf"))));
+ }
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.dfm b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.dfm
new file mode 100644
index 0000000..213bff4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.dfm
@@ -0,0 +1,80 @@
+object bookmarkForm: TbookmarkForm
+ Left = 315
+ Top = 90
+ Width = 294
+ Height = 300
+ Caption = 'Bookmarks'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object bmtree: TTreeView
+ Left = 0
+ Top = 0
+ Width = 286
+ Height = 273
+ Align = alClient
+ DragMode = dmAutomatic
+ Indent = 19
+ PopupMenu = BMPopup
+ TabOrder = 0
+ OnDblClick = bmtreeDblClick
+ OnDragDrop = bmtreeDragDrop
+ OnDragOver = bmtreeDragOver
+ end
+ object BMPopup: TPopupMenu
+ Left = 252
+ Top = 244
+ object AddChild1: TMenuItem
+ Caption = '&Add Child'
+ OnClick = AddChild1Click
+ end
+ object Delete1: TMenuItem
+ Caption = '&Delete'
+ OnClick = Delete1Click
+ end
+ object Rename1: TMenuItem
+ Caption = '&Rename'
+ OnClick = Rename1Click
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object NewBookmarkFile1: TMenuItem
+ Caption = '&New Bookmark File'
+ OnClick = NewBookmarkFile1Click
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.h b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.h
new file mode 100644
index 0000000..41c606a
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/bookmarkfrm.h
@@ -0,0 +1,48 @@
+//---------------------------------------------------------------------------
+#ifndef bookmarkfrmH
+#define bookmarkfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ComCtrls.hpp>
+#include <swconfig.h>
+#include <vcl\Menus.hpp>
+#include <list>
+//---------------------------------------------------------------------------
+class TbookmarkForm : public TForm
+{
+__published: // IDE-managed Components
+ TTreeView *bmtree;
+ TPopupMenu *BMPopup;
+ TMenuItem *Delete1;
+ TMenuItem *AddChild1;
+ TMenuItem *Rename1;
+ TMenuItem *N1;
+ TMenuItem *NewBookmarkFile1;
+ void __fastcall bmtreeDragDrop(TObject *Sender, TObject *Source, int X, int Y);
+ void __fastcall bmtreeDragOver(TObject *Sender, TObject *Source, int X, int Y,
+ TDragState State, bool &Accept);
+ void __fastcall bmtreeDblClick(TObject *Sender);
+ void __fastcall AddChild1Click(TObject *Sender);
+ void __fastcall Delete1Click(TObject *Sender);
+ void __fastcall Rename1Click(TObject *Sender);
+ void __fastcall NewBookmarkFile1Click(TObject *Sender);
+private: // User declarations
+ void AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section);
+ list <String *> bmfiles; // so we can delete each display we create
+
+
+public: // User declarations
+ string bmdir;
+ __fastcall TbookmarkForm(TComponent* Owner);
+ __fastcall ~TbookmarkForm();
+ void SaveBookmarks();
+ void AddSectionToConf(SWConfig *config, String section, TTreeNode *tree);
+};
+//---------------------------------------------------------------------------
+extern TbookmarkForm *bookmarkForm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/InstallBtn.BMP b/apps/windoze/CBuilder5/BibleCS/cdstartup/InstallBtn.BMP
new file mode 100644
index 0000000..1a4cc45
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/InstallBtn.BMP
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/RunBtn.BMP b/apps/windoze/CBuilder5/BibleCS/cdstartup/RunBtn.BMP
new file mode 100644
index 0000000..dc698d5
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/RunBtn.BMP
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.bpr b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.bpr
new file mode 100644
index 0000000..1059c12
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.bpr
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="cdstartup.exe"/>
+ <OBJFILES value="cdstartup.obj mainfrm.obj"/>
+ <RESFILES value="cdstartup.res"/>
+ <IDLFILES value=""/>
+ <IDLGENFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES) mainfrm.dfm"/>
+ <LIBFILES value=""/>
+ <LIBRARIES value="vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib"/>
+ <PACKAGES value="vclx50.bpi vcl50.bpi vcldb50.bpi vclbde50.bpi vcldbx50.bpi ibsmp50.bpi
+ bcbsmp50.bpi dclocx50.bpi qrpt50.bpi teeui50.bpi vclsmp50.bpi teedb50.bpi
+ tee50.bpi dss50.bpi nmfast50.bpi inetdb50.bpi inet50.bpi vclmid50.bpi"/>
+ <PATHCPP value=".;"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+ <RELEASELIBPATH value="$(BCB)\lib\release"/>
+ <LINKER value="ilink32"/>
+ <USERDEFINES value=""/>
+ <SYSDEFINES value="NO_STRICT"/>
+ <MAINSOURCE value="cdstartup.cpp"/>
+ <INCLUDEPATH value="$(BCB)\include;$(BCB)\include\vcl"/>
+ <LIBPATH value="$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I$(BCB)\include -I$(BCB)\include\vcl -src_suffix cpp -boa"/>
+ <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -X- -a8 -b-
+ -k- -vi -c -tW -tWM"/>
+ <PFLAGS value="-$YD -v -M -JPHNE"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value="-D&quot;&quot; -aa -Tpe -x"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="c0w32.obj $(OBJFILES)"/>
+ <ALLRES value="$(RESFILES)"/>
+ <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=5
+Release=3
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=CrossWire Software &amp; Bible Society
+FileDescription=The SWORD Project CD Installer
+FileVersion=1.5.3.0
+InternalName=cdstartup
+LegalCopyright=(c) 2002 CrossWire Software under the GNU General Public License
+LegalTrademarks=
+OriginalFilename=
+ProductName=The SWORD Project
+ProductVersion=1.5.3
+Comments=Seek Him and you will find Him
+
+[HistoryLists\hlIncludePath]
+Count=1
+Item0=$(BCB)\include;$(BCB)\include\vcl
+
+[HistoryLists\hlLibraryPath]
+Count=1
+Item0=$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[CORBA]
+AddServerUnit=1
+AddClientUnit=1
+PrecompiledHeaders=1
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.cpp b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.cpp
new file mode 100644
index 0000000..9f2f8c7
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.cpp
@@ -0,0 +1,21 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+USERES("cdstartup.res");
+USEFORM("mainfrm.cpp", Form1);
+//---------------------------------------------------------------------------
+WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
+{
+ try
+ {
+ Application->Initialize();
+ Application->CreateForm(__classid(TForm1), &Form1);
+ Application->Run();
+ }
+ catch (Exception &exception)
+ {
+ Application->ShowException(&exception);
+ }
+ return 0;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.res b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.res
new file mode 100644
index 0000000..e6b3991
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/cdstartup.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.cpp b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.cpp
new file mode 100644
index 0000000..843adef
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.cpp
@@ -0,0 +1,70 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "mainfrm.h"
+#include <shellapi.h>
+#include <dir.h>
+#include <stdio.h>
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TForm1 *Form1;
+//---------------------------------------------------------------------------
+__fastcall TForm1::TForm1(TComponent* Owner)
+ : TForm(Owner)
+{
+ char buf[2048];
+ char buf2[2048];
+
+ sprintf("SWORD_PATH=%s", getcwd(buf2, 2047));
+ putenv(buf);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BitBtn1Click(TObject *Sender)
+{
+ WinExec(".\\Disk Images\\disk1\\setup.exe", SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BitBtn2Click(TObject *Sender)
+{
+/*
+ static char *file = ".\\Windows\\sword.exe";
+ static char dir[2048]; // = "\\";
+ SHELLEXECUTEINFO sei;
+ memset(&sei, 0, sizeof(SHELLEXECUTEINFO));
+ sei.cbSize = sizeof(SHELLEXECUTEINFO);
+ sei.fMask = SEE_MASK_NOCLOSEPROCESS;
+ sei.hwnd = this->WindowHandle;
+ sei.lpFile = file;
+ sei.lpDirectory = getcwd(dir, 2047);
+ MessageBox(0, sei.lpDirectory, "cwd", MB_OK);
+ sei.nShow = SW_SHOWNORMAL;
+*/
+ WinExec(".\\Windows\\sword.exe", SW_SHOWNORMAL);
+// ShellExecute(this->Handle, "open", ".\\Windows\\sword.exe", NULL, "\\", SW_SHOWNORMAL);
+// ShellExecuteEx(&sei);
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormShow(TObject *Sender)
+{
+// AddFontResource("\\sword\\modules\\texts\\rawtext\\nu\\greek.ttf");
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BitBtn3Click(TObject *Sender)
+{
+ ShellExecute(this->Handle, "open", "http://www.crosswire.org", NULL, NULL, SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BitBtn4Click(TObject *Sender)
+{
+ ShellExecute(this->Handle, "open", ".\\", NULL, NULL, SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::BitBtn5Click(TObject *Sender)
+{
+ WinExec(".\\fonts\\setup.exe", SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.dfm b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.dfm
new file mode 100644
index 0000000..6bb62ad
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.h b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.h
new file mode 100644
index 0000000..ba10380
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/mainfrm.h
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------------
+#ifndef mainfrmH
+#define mainfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\Buttons.hpp>
+#include <Graphics.hpp>
+//---------------------------------------------------------------------------
+class TForm1 : public TForm
+{
+__published: // IDE-managed Components
+ TImage *Image1;
+ TBitBtn *BitBtn1;
+ TBitBtn *BitBtn2;
+ TLabel *Label1;
+ TBitBtn *BitBtn3;
+ TBitBtn *BitBtn4;
+ TBitBtn *BitBtn5;
+ void __fastcall BitBtn1Click(TObject *Sender);
+ void __fastcall BitBtn2Click(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall BitBtn3Click(TObject *Sender);
+ void __fastcall BitBtn4Click(TObject *Sender);
+ void __fastcall BitBtn5Click(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ __fastcall TForm1(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TForm1 *Form1;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/cdstartup/sword.bmp b/apps/windoze/CBuilder5/BibleCS/cdstartup/sword.bmp
new file mode 100644
index 0000000..88b4e72
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/cdstartup/sword.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/editentryfrm.cpp b/apps/windoze/CBuilder5/BibleCS/editentryfrm.cpp
new file mode 100644
index 0000000..01935e0
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/editentryfrm.cpp
@@ -0,0 +1,352 @@
+#include <vcl.h>
+#pragma hdrstop
+#include <windows.hpp>
+#include <stdlib.h>
+#include <stdio.h>
+#include "editentryfrm.h"
+#include <swdisprtf.h>
+#include "rxricheditx.h"
+
+const float RulerAdj = 4.0/3.0;
+const int GutterWid = 6;
+//----------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TEditEntryForm *EditEntryForm;
+//----------------------------------------------------------------------------
+__fastcall TEditEntryForm::TEditEntryForm(TComponent *Owner) : TForm(Owner) {
+ ResultBuf = 0;
+ RichEdit1 = new TRxRichEditX(this);
+
+ RichEdit1->Parent = pnlRichEdit;
+ RichEdit1->Align = alClient;
+ RichEdit1->ScrollBars = ssVertical;
+}
+
+
+__fastcall TEditEntryForm::~TEditEntryForm() {
+ if (ResultBuf)
+ delete [] ResultBuf;
+}
+
+
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::SelectionChange(TObject */*Sender*/) {
+ char sizebuf[6];
+
+ try {
+ FUpdating = True;
+ FirstInd->Left = int(RichEdit1->Paragraph->FirstIndent*RulerAdj)-
+ 4+GutterWid;
+ LeftInd->Left = int((RichEdit1->Paragraph->LeftIndent+
+ RichEdit1->Paragraph->FirstIndent)*RulerAdj)-
+ 4+GutterWid;
+ RightInd->Left = Ruler->ClientWidth-6-int(
+ (RichEdit1->Paragraph->RightIndent+GutterWid)*RulerAdj);
+
+ BoldButton->Down = RichEdit1->SelAttributes->Style.Contains(fsBold);
+ ItalicButton->Down = RichEdit1->SelAttributes->Style.Contains(fsItalic);
+ UnderlineButton->Down = RichEdit1->SelAttributes->Style.Contains(fsUnderline);
+
+ BulletsButton->Down = bool(RichEdit1->Paragraph->Numbering);
+
+ FontSize->Text = itoa(RichEdit1->SelAttributes->Size, sizebuf, 10);
+
+ switch((int)RichEdit1->Paragraph->Alignment)
+ { case 0: LeftAlign->Down = True; break;
+ case 1: RightAlign->Down = True; break;
+ case 2: CenterAlign->Down = True; break;
+ }
+ }
+ catch (...) {
+ FUpdating = False;
+ }
+ FUpdating = False;
+}
+
+
+//----------------------------------------------------------------------------
+TRxTextAttributes *__fastcall TEditEntryForm::CurrText(void)
+{
+ return RichEdit1->SelAttributes;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::CheckFileSave(void)
+{
+ if ( RichEdit1->Modified ) {
+ switch(MessageBox(Handle, "Save Changes?","Modify Comment",MB_YESNOCANCEL | MB_ICONQUESTION)) {
+ case ID_YES : ExtractRTF(); break;
+ case ID_CANCEL : Abort(); break;
+ default:
+ if (ResultBuf)
+ delete [] ResultBuf;
+ ResultBuf = 0;
+ break;
+ };
+ }
+}
+
+
+void __fastcall TEditEntryForm::SetupRuler(void)
+{ int iCtr = 1;
+ char sTmp[201];
+ while (iCtr < 200) {
+ sTmp[iCtr] = 9;
+ iCtr++;
+ sTmp[iCtr] = '|';
+ iCtr++;
+ }
+ Ruler->Caption = (AnsiString)sTmp;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::SetEditRect(void)
+{ TRect Rct = Rect(GutterWid, 0, RichEdit1->ClientWidth-GutterWid,
+ ClientHeight);
+ SendMessage(RichEdit1->Handle, EM_SETRECT, 0, long(&Rct));
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FormCreate(TObject* /*Sender*/)
+{ Application->OnHint = &ShowHint;
+ SetupRuler();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::ShowHint(TObject* /*Sender*/)
+{ StatusBar->SimpleText = Application->Hint;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::EditUndoClick(TObject* /*Sender*/)
+{ if ( RichEdit1->HandleAllocated() )
+ SendMessage(RichEdit1->Handle, EM_UNDO, 0, 0);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::EditCutClick(TObject* /*Sender*/)
+{ RichEdit1->CutToClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::EditCopyClick(TObject* /*Sender*/)
+{ RichEdit1->CopyToClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::EditPasteClick(TObject* /*Sender*/)
+{ RichEdit1->PasteFromClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::RulerResize(TObject* /*Sender*/)
+{ RulerLine->Width = (int)Ruler->ClientWidth - (RulerLine->Left*2);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FormResize(TObject* Sender)
+{ SetEditRect();
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FormPaint(TObject* /*Sender*/)
+{ SetEditRect();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::BoldButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ { if ( BoldButton->Down )
+ CurrText()->Style = CurrText()->Style << fsBold;
+ else
+ CurrText()->Style = CurrText()->Style >> fsBold;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::ItalicButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ {
+ if ( ItalicButton->Down )
+ CurrText()->Style = CurrText()->Style << fsItalic;
+ else
+ CurrText()->Style = CurrText()->Style >> fsItalic;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::UnderlineButtonClick(TObject* /*Sender*/)
+{
+ if ( !FUpdating ) {
+ if ( UnderlineButton->Down )
+ CurrText()->Style = CurrText()->Style << fsUnderline;
+ else CurrText()->Style = CurrText()->Style >> fsUnderline;
+ }
+}
+
+
+void __fastcall TEditEntryForm::FontSizeChange(TObject* /*Sender*/)
+{
+ int fontsize = atoi(FontSize->Text.c_str());
+
+ if ((!FUpdating) && (fontsize)) {
+ if (fontsize < 1) {
+ ShowMessage("Please Enter a Number betweek 1 and 1638");
+ FontSize->Text = 1;
+ }
+ else if (fontsize > 1638) {
+ ShowMessage("Please Enter a Number betweek 1 and 1638");
+ FontSize->Text = 1638;
+ }
+ CurrText()->Size = atoi(FontSize->Text.c_str());
+ }
+}
+
+
+void __fastcall TEditEntryForm::AlignClick(TObject* Sender)
+{
+ if ( !FUpdating ) {
+ TControl *oAliBtn = (TControl*)(Sender);
+ RichEdit1->Paragraph->Alignment = (TAlignment)oAliBtn->Tag;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::BulletsButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ RichEdit1->Paragraph->Numbering = (TNumberingStyle)BulletsButton->Down;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FormCloseQuery(TObject* /*Sender*/,
+ bool & CanClose)
+{ try {
+ CheckFileSave();
+ }
+ catch (...) {
+ CanClose = False;
+ }
+}
+//----------------------------------------------------------------------------
+
+//***************************
+//***Ruler Indent Dragging***
+//***************************
+
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::RulerItemMouseDown(TObject * Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{ TLabel * oTmpLabel = (TLabel *)Sender;
+ FDragOfs = oTmpLabel->Width / 2;
+ oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
+ FDragging = True;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::RulerItemMouseMove(TObject *Sender, TShiftState Shift, int X, int /*Y*/) {
+ if (FDragging) {
+ TLabel *oTmpLabel = (TLabel *)Sender;
+ oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
+ oTmpLabel->Left -= oTmpLabel->Left % 10;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FirstIndMouseUp(TObject *Sender, TMouseButton
+ Button, TShiftState Shift, int X, int Y)
+{ FDragging = False;
+ RichEdit1->Paragraph->FirstIndent = int((FirstInd->Left+FDragOfs-GutterWid) / RulerAdj);
+ LeftIndMouseUp(Sender, Button, Shift, X, Y);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::LeftIndMouseUp(TObject *Sender, TMouseButton
+ /*Button*/, TShiftState /*Shift*/, int /*X*/, int /*Y*/)
+{ FDragging = False;
+ RichEdit1->Paragraph->LeftIndent = int((LeftInd->Left+FDragOfs-GutterWid)/
+ RulerAdj)-RichEdit1->Paragraph->FirstIndent;
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::RightIndMouseUp(TObject *Sender, TMouseButton
+ /*Button*/, TShiftState /*Shift*/, int /*X*/, int /*Y*/)
+{ FDragging = False;
+ RichEdit1->Paragraph->RightIndent =
+ int((Ruler->ClientWidth-RightInd->Left+FDragOfs-2) /
+ RulerAdj)-2*GutterWid;
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntryForm::FormActivate(TObject *Sender)
+{
+ System::AnsiString newtext, tmptext;
+
+ if (Module) {
+ TMemoryStream *RTFStream = new TMemoryStream();
+ newtext = RTFDisplay->RTFHeader;
+ Module->Error(); // clear error;
+ newtext = newtext + "\\pard \\nowidctlpar \\cf0 ";
+ (const char *)*Module; // force key to snap to entry before pulling out the text of the key
+ tmptext = Module->getRawEntry();
+
+ newtext = newtext + RTFDisplay->RTFVersePre + " " + tmptext + RTFDisplay->RTFVersePost;
+ newtext = newtext + RTFDisplay->RTFTrailer;
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ RichEdit1->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+ }
+ SelectionChange(this);
+ RichEdit1->SetFocus();
+ if (ResultBuf)
+ delete [] ResultBuf;
+ ResultBuf = 0;
+}
+//---------------------------------------------------------------------
+
+void TEditEntryForm::ExtractRTF()
+{
+ System::AnsiString newtext, tmptext;
+ TMemoryStream *RTFStream = new TMemoryStream();
+ char *tmpbuf, *datastart;
+
+ RTFStream->Clear();
+ RichEdit1->Lines->SaveToStream(RTFStream);
+ RTFStream->Position = 0;
+ if (ResultBuf)
+ delete [] ResultBuf;
+ tmpbuf = new char [ RTFStream->Size + 1];
+ RTFStream->ReadBuffer(tmpbuf, RTFStream->Size);
+ tmpbuf[RTFStream->Size] = 0;
+ char *tbl = strstr(tmpbuf, "colortbl");
+ if (!tbl)
+ tbl = strstr(tmpbuf, "fonttbl");
+ if (tbl) {
+ strtok(tbl, "}");
+// strtok(NULL, "}");
+ datastart = strtok(NULL, "");
+ ResultBuf = new char [ strlen(datastart) + 2 ];
+ ResultBuf[0] = '{';
+ strcpy(ResultBuf+1, datastart);
+ delete [] tmpbuf;
+ delete RTFStream;
+ //-------- Change all fonts to \f1
+ for (int i = 0; i < strlen(ResultBuf)-4; i++) {
+ if (ResultBuf[i] == '\\') {
+ if (ResultBuf[i+1] == '\\') { // skip a real '\' character
+ i += 1;
+ continue;
+ }
+ if (ResultBuf[i+1] == 'f') {
+ if (isdigit(ResultBuf[i+2])) {
+ ResultBuf[i+2] = '1';
+ if (isdigit(ResultBuf[i+3])) {
+ memmove(&ResultBuf[i+3], &ResultBuf[i+4], strlen(&ResultBuf[i+3]));
+ }
+ }
+ }
+ if (ResultBuf[i+1] == 'c') {
+ if (ResultBuf[i+2] == 'f') {
+ if (isdigit(ResultBuf[i+3])) {
+ ResultBuf[i+3] = '7';
+ if (isdigit(ResultBuf[i+4])) {
+ memmove(&ResultBuf[i+4], &ResultBuf[i+5], strlen(&ResultBuf[i+4]));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+__fastcall TCharsetObject::TCharsetObject(int FCharset)
+ : TObject()
+{
+ Charset = FCharset;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/editentryfrm.dfm b/apps/windoze/CBuilder5/BibleCS/editentryfrm.dfm
new file mode 100644
index 0000000..cafd893
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/editentryfrm.dfm
@@ -0,0 +1,892 @@
+object EditEntryForm: TEditEntryForm
+ Left = 424
+ Top = 102
+ Width = 541
+ Height = 407
+ Caption = 'Edit Entry'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsMDIForm
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ OnActivate = FormActivate
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnPaint = FormPaint
+ OnResize = FormResize
+ PixelsPerInch = 96
+ TextHeight = 13
+ object SpeedBar: TPanel
+ Left = 0
+ Top = 0
+ Width = 533
+ Height = 32
+ Align = alTop
+ BevelOuter = bvNone
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ object UndoButton: TSpeedButton
+ Left = 3
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Undo|'
+ Glyph.Data = {
+ 96090000424D9609000000000000360000002800000028000000140000000100
+ 1800000000006009000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7FFFFFFF007F7F007F7F007F7FFFFFFF007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7FFFFFFF007F7F
+ 007F7FFFFFFFFFFFFFFFFFFF007F7F007F7FFFFFFF007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFF007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFF7F7F7F00007F00007F00007F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F7F00
+ 7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F0000FFFF00FF
+ FF00FF7F007F00007F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F7F
+ 7F7F7F7F7FFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00FF0000FFFF00FFFF00FF7F00
+ 7F00007F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7F7F7F7F
+ FFFFFFFFFFFF007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF007F7FFF00FF0000FFFFFFFF0000FFFF00FFFF00FF7F007F00000000
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F7F7F7F7F7F7FFFFFFFFFFF
+ FF007F7F007F7F007F7FFFFFFFFFFFFF007F7FFFFFFFFFFFFFFFFFFF007F7F00
+ 00FFFF00FFFFFFFFFF00FF0000FFFF00FF0000007F7F00000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F
+ 7FFFFFFF007F7F007F7F007F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF007F7F00
+ 7F7FFFFFFF007F7F007F7F007F7FFFFFFF007F7F007F7F007F7F0000FFFF00FF
+ FFFFFFFF00FF000000007F007F00007F7F00000000007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7FFFFFFF00
+ 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF007F7FFFFFFF007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000FFFF00FF00000000FF
+ 00007F00007F007F00007F7F00000000007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7F7F7F7F007F7F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F00000000FF0000FFFF00FF00007F0000
+ 7F000000007F7F7F000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F7F7F7F007F7FFFFFFF007F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F00000000FF0000FFFF00FF000000007F00007F7F7F
+ 7F7F7F000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F7F7F7F007F7FFFFFFF007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F00000000FF00000000BFBFBF00FFFF7F00007F7F7F7F7F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F7F7F7F007F7F7F7F7F007F7F007F7F7F7F7F7F7F7F7F7F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F000000BFBFBFFFFFFF00FFFF00FFFF7F00007F7F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F
+ 007F7FFFFFFF007F7F007F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000FF
+ FFFFFFFFFF00FFFF00FFFF7F0000007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7FFFFF
+ FF007F7F007F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFFFFFFF
+ 00FFFF00FFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7FFFFFFF007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFFFFFFF00FFFF007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F7F7F7F007F7F007F7F007F7F}
+ NumGlyphs = 2
+ OnClick = EditUndoClick
+ end
+ object CutButton: TSpeedButton
+ Left = 34
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Cut|'
+ Glyph.Data = {
+ 96090000424D9609000000000000360000002800000028000000140000000100
+ 1800000000006009000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFF
+ FFFFFFFFFFFF007F7F007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFF
+ FFFFFFFF007F7F007F7F007F7F007F7F007F7F7F7F7F7F00007F00007F7F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F00007F00007F7F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFF
+ FF007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF00
+ 7F7F007F7F007F7F7F7F7F7F0000007F7F007F7F7F00007F7F7F007F7F007F7F
+ 007F7F007F7F7F7F7F7F0000007F7F007F7F7F00007F7F7F007F7F007F7F007F
+ 7F007F7F7F7F7F7F7F7FFFFFFF007F7F7F7F7F7F7F7FFFFFFF007F7F007F7F00
+ 7F7F7F7F7F7F7F7F007F7F007F7F7F7F7F7F7F7FFFFFFF007F7F007F7F007F7F
+ 7F7F7F7F0000007F7F007F7F007F7F7F0000007F7F007F7F007F7F007F7F7F00
+ 00007F7F007F7F007F7F7F00007F7F7F007F7F007F7F007F7F007F7F7F7F7F7F
+ 7F7FFFFFFF007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7FFFFFFF
+ 007F7F007F7F7F7F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7F7F0000007F
+ 7F007F7F007F7F7F0000007F7F007F7F007F7F007F7F7F0000007F7F007F7F00
+ 7F7F7F00007F7F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7FFFFFFFFFFFFF
+ 007F7F7F7F7FFFFFFFFFFFFF007F7F007F7F7F7F7FFFFFFF007F7F007F7F7F7F
+ 7F7F7F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F0000007F7F007F7F7F
+ 00007F7F7F007F7F007F7F7F7F7F7F0000007F7F007F7F7F00007F7F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7FFFFFFFFFFFFF7F7F7F7F7F
+ 7FFFFFFFFFFFFF7F7F7F7F7F7FFFFFFFFFFFFF7F7F7F7F7F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F7F7F7F7F00007F00007F00007F00007F7F7F
+ 7F7F7F7F00007F00007F00007F00007F7F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F7F00007F00007F00007F00007F00007F00007F00
+ 007F0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F7F00007F7F00FFFFFFFFFFFF7F7F007F0000007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F7F7F7F7F7F7F007F7FFFFFFF7F7F7F7F7F7FFFFFFF007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 0000FFFFFF000000000000FFFFFF000000007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F
+ 7F7F7F7F7F7F7F007F7F7F7F7F007F7FFFFFFF007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF
+ FFFFFF000000FFFFFF000000007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7F007F7F007F7FFFFFFF7F
+ 7F7F007F7F7F7F7F007F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF
+ FFFFFFFF000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F7F7F7F007F7F007F7F007F7F7F7F7F7F7F7F007F7FFFFFFF007F7F
+ 7F7F7F007F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 00FFFFFFFFFFFFFFFFFF000000007F7F007F7F000000FFFFFFFFFFFFFFFFFF00
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F7F
+ 007F7F007F7F7F7F7F007F7F007F7F7F7F7F007F7FFFFFFF007F7F7F7F7F007F
+ 7FFFFFFF007F7F007F7F007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF00
+ 0000007F7F007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF000000007F7F
+ 007F7F007F7F007F7F007F7F007F7F7F7F7F007F7F007F7F007F7F7F7F7F007F
+ 7F007F7F007F7F007F7F7F7F7F007F7FFFFFFF007F7F7F7F7F007F7FFFFFFF00
+ 7F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF000000007F7F007F7F007F7F
+ 007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFF000000007F7F007F7F007F
+ 7F007F7F7F7F7FFFFFFF007F7F007F7F7F7F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F7F7F7F007F7FFFFFFF007F7F7F7F7FFFFFFF007F7F007F7F007F7F
+ 000000FFFFFFFFFFFF000000007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F000000FFFFFFFFFFFF000000007F7F007F7F007F7F007F7F7F7F7FFF
+ FFFF007F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 7F7F7F007F7FFFFFFF7F7F7FFFFFFF007F7F007F7F007F7F000000FFFFFF0000
+ 00007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 0000FFFFFF000000007F7F007F7F007F7F007F7F7F7F7FFFFFFF7F7F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F007F
+ 7F7F7F7FFFFFFF007F7F007F7F007F7F000000000000007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000
+ 007F7F007F7F007F7F007F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F}
+ NumGlyphs = 2
+ OnClick = EditCutClick
+ end
+ object CopyButton: TSpeedButton
+ Left = 59
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Copy|'
+ Glyph.Data = {
+ 96090000424D9609000000000000360000002800000028000000140000000100
+ 1800000000006009000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F00000000000000000000000000000000000000000000000000
+ 0000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFF
+ FF007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00000000FFFFFFFFFF
+ 00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF000000007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7FFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7FFFFFFF007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F000000FFFFFF7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7FFFFFFF000000007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F7F7F7FFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F00000000FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF
+ FFFF000000007F7F007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFF
+ FFFFFF7F7F7FFFFFFF007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F
+ 7FFFFFFF007F7F007F7F007F7F007F7F00000000000000000000000000000000
+ 0000FFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFF000000007F7F
+ 007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFF
+ FF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F007F7F7F7F7FFFFFFF007F7F00
+ 7F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF
+ 00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF000000007F7F007F7F007F7F007F
+ 7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7FFFFFFF007F7FFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7FFFFFFF007F7F007F7F007F7F007F7F
+ 000000FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7FFFFFFF000000007F7F007F7F007F7F007F7F007F7F7F7F7FFF
+ FFFF007F7F007F7F007F7F7F7F7FFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F000000FFFFFFBFBF
+ BFBFBFBFBFBFBF00000000FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF
+ FFFF000000007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F
+ 007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7FFFFFFF7F7F
+ 7FFFFFFF007F7F007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000007F7F
+ 007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7FFFFF
+ FF007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F007F7F007F7F00
+ 7F7F007F7F007F7F000000FFFFFFBFBFBFBFBFBFBFBFBF00000000FFFFFFFFFF
+ 00FFFFFFFFFF00FFFFFFFFFF000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7FFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFF7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
+ 00000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFF
+ FFFF007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFBFBF
+ BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFF000000007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFF000000007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F
+ 7F007F7FFFFFFF7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000
+ 000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000
+ 00000000000000000000000000000000007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F}
+ NumGlyphs = 2
+ OnClick = EditCopyClick
+ end
+ object PasteButton: TSpeedButton
+ Left = 84
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Paste|'
+ Glyph.Data = {
+ 96090000424D9609000000000000360000002800000028000000140000000100
+ 1800000000006009000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F00000000000000000000000000000000
+ 0000000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F00000000FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF
+ 000000007F7F007F7F007F7F007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF7F7F7FFFFFFF007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7FFF
+ FFFF007F7F007F7F000000000000000000000000000000000000000000000000
+ 000000FFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFF000000007F7F007F
+ 7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFF
+ FFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F007F7F7F7F7FFFFFFF007F7F000000
+ BFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFFFFFF00000000FFFFFFFF
+ FF00FFFFFFFFFF00FFFFFFFFFF00FFFF000000007F7F007F7F7F7F7FFFFFFF00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F
+ 007F7FFFFFFFFFFFFFFFFFFF7F7F7FFFFFFF007F7F000000FFFFFFBFBFBFFFFF
+ FFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBF000000FFFFFFBFBFBFBFBFBF7F7F7F7F
+ 7F7F7F7F7FFFFFFF000000007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F7F7F7FFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F
+ 7F007F7F7F7F7FFFFFFF007F7F000000BFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFF
+ FFFFBFBFBF7F00007F00007F00007F000000FFFFFFFFFF00FFFFFFFFFF00FFFF
+ 000000007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F
+ 7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFF007F7FFFFFFFFFFFFFFFFFFF7F7F7FFF
+ FFFF007F7F000000FFFFFFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBF
+ FF00007F00007F0000BFBFBF7F7F7F7F7F7F7F7F7FFFFFFF000000007F7F007F
+ 7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F
+ 7F7F7F7F7FFFFFFF7F7F7F7F7F7F7F7F7F007F7F7F7F7FFFFFFF007F7F000000
+ BFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBF7F00007F0000FF00007F00
+ 0000FFFFFFFFFF00FFFFFFFFFF00FFFF000000007F7F007F7F7F7F7FFFFFFF00
+ 7F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFF
+ 007F7F007F7F007F7FFFFFFF7F7F7FFFFFFF007F7F000000FFFFFFBFBFBFFFFF
+ FFBFBFBFFFFFFFBFBFBF7F00007F00007F0000FFFFFF7F0000FFFFFFFFFFFFFF
+ FFFF7F7F7F7F7F7F000000007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F
+ 007F7F007F7F7F7F7F7F7F7F7F7F7FFFFFFF7F7F7F007F7F007F7F007F7F7F7F
+ 7F7F7F7F7F7F7F007F7F007F7F000000BFBFBFFFFFFFBFBFBFFFFFFFBFBFBF7F
+ 00007F00007F000000000000FFFFFFFFFF00FFFFFFFFFF00FFFF7F7F7F000000
+ 007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F7F7F7F7F7F
+ 7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F007F7F00
+ 7F7F007F7F000000FFFFFFBFBFBFFFFFFFBFBFBF7F00007F00007F0000BFBFBF
+ 000000000000000000000000000000000000000000007F7F007F7F007F7F007F
+ 7F7F7F7FFFFFFF007F7F007F7F007F7F7F7F7F7F7F7F7F7F7F007F7F7F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F000000
+ BFBFBFFFFFFFBFBFBFFFFFFFBFBFBF7F0000BFBFBFFFFFFFBFBFBFFFFFFF0000
+ 00007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF00
+ 7F7F007F7F007F7F007F7F7F7F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000FFFFFFBFBFBFFFFF
+ FFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFFFFFFBFBFBF000000007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F000000BFBFBFFFFFFFBFBFBFFFFFFFBFBFBFFF
+ FFFFBFBFBFFFFFFFBFBFBFFFFFFF000000007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F7F7F7FFFFFFF007F7F007F7FFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFF007F7F7F7F7FFFFFFF007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F000000FFFFFFBFBFBF7F00007F00007F00007F00007F00007F0000
+ FFFFFFBFBFBF000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F7F7F7F007F7FFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFF
+ FFFF7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 000000000000FFFF00FF0000FF0000FF0000FF00007F0000000000000000007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F7F
+ 7F7F007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7FFFFF
+ 00FF0000FF0000FF0000FF00007F0000007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F7F7F
+ 7F7F7F7F7F7F7F7F7F7F7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7FFFFF00FFFF00FF
+ FF00FFFF00007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F}
+ NumGlyphs = 2
+ OnClick = EditPasteClick
+ end
+ object Bevel1: TBevel
+ Left = 0
+ Top = 0
+ Width = 533
+ Height = 2
+ Align = alTop
+ Shape = bsTopLine
+ end
+ object BoldButton: TSpeedButton
+ Left = 232
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Bold'
+ AllowAllUp = True
+ GroupIndex = 1
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -21
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F00000000000000000000000000
+ 0000000000000000000000000000000000000000007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000000000
+ 00007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F
+ 007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F00
+ 7F7F000000000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F0000
+ 00000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F000000000000000000000000007F7F007F7F007F7F000000000000
+ 000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F00000000000000000000000000000000000000000000000000000000000000
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000
+ 000000000000000000007F7F007F7F007F7F000000000000000000000000007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00000000000000
+ 0000000000007F7F007F7F007F7F000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000000000
+ 00007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F
+ 007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F00
+ 7F7F000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F0000000000000000000000000000000000000000000000000000000000
+ 00000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ ParentFont = False
+ OnClick = BoldButtonClick
+ end
+ object ItalicButton: TSpeedButton
+ Left = 258
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Italic'
+ AllowAllUp = True
+ GroupIndex = 4
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -21
+ Font.Name = 'MS Serif'
+ Font.Style = [fsBold, fsItalic]
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F00000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F000000000000000000000000007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ ParentFont = False
+ OnClick = ItalicButtonClick
+ end
+ object LeftAlign: TSpeedButton
+ Left = 320
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Align Left'
+ AllowAllUp = True
+ GroupIndex = 2
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ OnClick = AlignClick
+ end
+ object CenterAlign: TSpeedButton
+ Tag = 2
+ Left = 346
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Center'
+ AllowAllUp = True
+ GroupIndex = 2
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ OnClick = AlignClick
+ end
+ object RightAlign: TSpeedButton
+ Tag = 1
+ Left = 373
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Align Right'
+ AllowAllUp = True
+ GroupIndex = 2
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ OnClick = AlignClick
+ end
+ object UnderlineButton: TSpeedButton
+ Left = 284
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Underline'
+ AllowAllUp = True
+ GroupIndex = 5
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -21
+ Font.Name = 'MS Serif'
+ Font.Style = [fsBold, fsItalic]
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000000000000000
+ 000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F00
+ 0000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F007F7F0000
+ 00000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F000000000000000000007F7F007F7F007F7F007F7F007F7F000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000
+ 00000000000000007F7F007F7F007F7F007F7F007F7F00000000000000000000
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F000000000000000000007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00000000000000000000
+ 7F7F007F7F007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F000000000000000000007F7F007F
+ 7F007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F
+ 007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F00
+ 7F7F000000000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F000000000000000000007F7F007F7F007F7F007F7F007F7F0000
+ 00000000000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F000000000000000000007F7F007F7F007F7F007F7F007F7F000000000000
+ 000000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F0000000000
+ 00000000000000000000000000007F7F00000000000000000000000000000000
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ ParentFont = False
+ OnClick = UnderlineButtonClick
+ end
+ object BulletsButton: TSpeedButton
+ Left = 399
+ Top = 5
+ Width = 25
+ Height = 25
+ Hint = 'Bullets'
+ AllowAllUp = True
+ GroupIndex = 3
+ Glyph.Data = {
+ E6040000424DE604000000000000360000002800000014000000140000000100
+ 180000000000B004000000000000000000000000000000000000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F7F00007F00007F00007F0000007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F7F00007F00007F00007F0000007F7F007F7F
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000007F7F7F00007F00007F00007F0000007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F7F00007F00007F00007F0000007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F00007F0000
+ 7F00007F0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F00007F00007F00007F
+ 0000007F7F007F7F000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000007F7F7F00007F00007F00007F0000007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F7F00007F00007F00007F0000007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F7F00007F00007F00007F0000007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F00
+ 007F00007F00007F0000007F7F007F7F00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000007F7F7F00007F0000
+ 7F00007F0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F7F00007F00007F00007F
+ 0000007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F00
+ 7F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F
+ 007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F7F007F
+ 7F007F7F007F7F007F7F}
+ OnClick = BulletsButtonClick
+ end
+ object Label1: TLabel
+ Left = 122
+ Top = 13
+ Width = 47
+ Height = 13
+ Caption = 'Font Size:'
+ end
+ object FontSize: TEdit
+ Left = 176
+ Top = 6
+ Width = 31
+ Height = 21
+ TabOrder = 0
+ Text = '10'
+ OnChange = FontSizeChange
+ end
+ object UpDown1: TUpDown
+ Left = 207
+ Top = 6
+ Width = 17
+ Height = 21
+ Associate = FontSize
+ Min = 1
+ Max = 1638
+ Position = 10
+ TabOrder = 1
+ Wrap = False
+ end
+ end
+ object Ruler: TPanel
+ Left = 0
+ Top = 32
+ Width = 533
+ Height = 26
+ Align = alTop
+ Alignment = taLeftJustify
+ BevelInner = bvLowered
+ BevelOuter = bvNone
+ BorderWidth = 1
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -12
+ Font.Name = 'Arial'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnResize = RulerResize
+ object FirstInd: TLabel
+ Left = 5
+ Top = 2
+ Width = 10
+ Height = 9
+ AutoSize = False
+ Caption = 'ê'
+ DragCursor = crArrow
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -12
+ Font.Name = 'Wingdings'
+ Font.Style = []
+ ParentFont = False
+ OnMouseDown = RulerItemMouseDown
+ OnMouseMove = RulerItemMouseMove
+ OnMouseUp = FirstIndMouseUp
+ end
+ object LeftInd: TLabel
+ Left = 5
+ Top = 12
+ Width = 10
+ Height = 11
+ AutoSize = False
+ Caption = 'é'
+ DragCursor = crArrow
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -12
+ Font.Name = 'Wingdings'
+ Font.Style = []
+ ParentFont = False
+ OnMouseDown = RulerItemMouseDown
+ OnMouseMove = RulerItemMouseMove
+ OnMouseUp = LeftIndMouseUp
+ end
+ object RulerLine: TBevel
+ Left = 4
+ Top = 12
+ Width = 579
+ Height = 2
+ Shape = bsTopLine
+ end
+ object RightInd: TLabel
+ Left = 575
+ Top = 14
+ Width = 10
+ Height = 14
+ Caption = 'ñ'
+ DragCursor = crArrow
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -12
+ Font.Name = 'Wingdings'
+ Font.Style = []
+ ParentFont = False
+ OnMouseDown = RulerItemMouseDown
+ OnMouseMove = RulerItemMouseMove
+ OnMouseUp = RightIndMouseUp
+ end
+ end
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 362
+ Width = 533
+ Height = 18
+ Panels = <>
+ SimplePanel = True
+ end
+ object pnlRichEdit: TPanel
+ Left = 0
+ Top = 58
+ Width = 533
+ Height = 304
+ Align = alClient
+ Caption = 'pnlRichEdit'
+ TabOrder = 3
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/editentryfrm.h b/apps/windoze/CBuilder5/BibleCS/editentryfrm.h
new file mode 100644
index 0000000..303c9c9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/editentryfrm.h
@@ -0,0 +1,110 @@
+//----------------------------------------------------------------------------
+//Borland C++Builder
+//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved.
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+#ifndef editentryfrmH
+#define editentryfrmH
+//----------------------------------------------------------------------------
+#include <Outline.hpp>
+#include <Grids.hpp>
+#include <Buttons.hpp>
+#include <ExtCtrls.hpp>
+#include <StdCtrls.hpp>
+#include <ComCtrls.hpp>
+#include <Menus.hpp>
+#include <Dialogs.hpp>
+#include <Forms.hpp>
+#include <Controls.hpp>
+#include <Graphics.hpp>
+#include <Classes.hpp>
+#include <SysUtils.hpp>
+#include <Messages.hpp>
+#include <Windows.hpp>
+#include <System.hpp>
+#include <swmodule.h>
+#include <swdisprtf.h>
+#include "rxricheditx.h"
+//----------------------------------------------------------------------------
+class TEditEntryForm : public TForm
+{
+__published:
+ TPanel *SpeedBar;
+ TSpeedButton *UndoButton;
+ TSpeedButton *CutButton;
+ TSpeedButton *CopyButton;
+ TSpeedButton *PasteButton;
+ TBevel *Bevel1;
+ TSpeedButton *BoldButton;
+ TSpeedButton *ItalicButton;
+ TSpeedButton *LeftAlign;
+ TSpeedButton *CenterAlign;
+ TSpeedButton *RightAlign;
+ TSpeedButton *UnderlineButton;
+ TSpeedButton *BulletsButton;
+ TEdit *FontSize;
+ TUpDown *UpDown1;
+ TPanel *Ruler;
+ TLabel *FirstInd;
+ TLabel *LeftInd;
+ TBevel *RulerLine;
+ TLabel *RightInd;
+ TStatusBar *StatusBar;
+ TLabel *Label1;
+ TPanel *pnlRichEdit;
+ void __fastcall SelectionChange(TObject *Sender);
+ void __fastcall AlignClick(TObject *Sender);
+ void __fastcall EditUndoClick(TObject *Sender);
+ void __fastcall EditCutClick(TObject *Sender);
+ void __fastcall EditCopyClick(TObject *Sender);
+ void __fastcall EditPasteClick(TObject *Sender);
+ void __fastcall RulerResize(TObject *Sender);
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall FormResize(TObject *Sender);
+ void __fastcall FormPaint(TObject *Sender);
+ void __fastcall BoldButtonClick(TObject *Sender);
+ void __fastcall FontSizeChange(TObject *Sender);
+ void __fastcall UnderlineButtonClick(TObject *Sender);
+ void __fastcall ItalicButtonClick(TObject *Sender);
+ void __fastcall BulletsButtonClick(TObject *Sender);
+ void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
+ void __fastcall RulerItemMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall RulerItemMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
+ void __fastcall FirstIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall LeftIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall RightIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall FormActivate(TObject *Sender);
+
+private:
+ TRxRichEditX *RichEdit1;
+ AnsiString FFileName;
+ bool FUpdating;
+ int FDragOfs;
+ bool FDragging;
+ TRxTextAttributes *__fastcall CurrText(void);
+ void __fastcall CheckFileSave(void);
+ void __fastcall SetupRuler(void);
+ void __fastcall SetEditRect(void);
+ void __fastcall ShowHint(TObject *Sender);
+
+public:
+ SWModule *Module;
+ SWDispRTF *RTFDisplay;
+
+ virtual __fastcall TEditEntryForm(TComponent *Owner);
+ __fastcall ~TEditEntryForm();
+ char *ResultBuf;
+ void ExtractRTF();
+};
+//----------------------------------------------------------------------------
+class TCharsetObject : public TObject
+{
+public:
+ int Charset;
+ __fastcall TCharsetObject(int FCharset);
+};
+//----------------------------------------------------------------------------
+extern TEditEntryForm *EditEntryForm;
+//----------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/getsaved.conf b/apps/windoze/CBuilder5/BibleCS/getsaved.conf
new file mode 100644
index 0000000..6a77364
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/getsaved.conf
@@ -0,0 +1,8 @@
+[ROOT]
+getsaved=What's God all about anyway?
+
+[getsaved]
+verse1=Romans 3:23
+verse2=Romans 6:23
+verse3=John 3:16
+verse4=I John 1:9 \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/layout.conf b/apps/windoze/CBuilder5/BibleCS/layout.conf
new file mode 100644
index 0000000..aaf1482
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/layout.conf
@@ -0,0 +1,156 @@
+
+[CommentView]
+DTN=
+Family=
+Geneva=
+JFB=
+MAK=
+MHC=
+MHCC=
+PNT=
+Personal=
+RWP=
+Rieger=
+TDavid=
+TFG=
+TSK=
+Wesley=
+
+[History]
+<<<<<<< layout.conf=
+<<<<<<< layout.conf=
+<<<<<<< layout.conf=
+>>>>>>> 1.26=
+>>>>>>> 1.26=
+LastComModule=MHC
+LastTextModule=NKJV
+LastVerse=John 3:1
+LookupSaveCount=5
+LookupText=John 3:1
+LookupText=John 3:16
+LookupText=Isaiah 53:5
+LookupText=Isaiah 53:3
+LookupText=Ps 22:6-8
+SearchSaveCount=5
+SearchText=God love world
+SearchText=sheep fold
+SearchText=singular
+SearchText=man
+SearchText=dagger
+
+[LDView]
+AmTract=
+BDB=true
+Eastons=
+Hitchcocks=
+ISBE=
+Naves=
+Packard=
+Smiths=
+StrongsGreek=
+StrongsHebrew=
+Thayer=
+Torrey=
+WebstersDict=
+
+[TextView]
+>>>>>>> 1.26=
+AKJV=true
+ALB=false
+ASV=true
+Afr1983=
+AraSVD=true
+BBE=true
+BHS=true
+BWE=
+Byz=true
+CLNT=
+ChiGNPU=
+ChiGU=true
+Common=
+CzeBKR=false
+CzeCEP=false
+CzeKMS=true
+CzeNKB=false
+DR=true
+DRA=false
+Dan=true
+Darby=false
+Diaglott=true
+Esperanto=true
+FinPR=true
+FreCrl=true
+FreLSG=false
+GerBen=false
+GerLut=false
+GerLut1545=false
+GerSch=true
+GothicA=true
+GothicB=false
+HNV=false
+HunKar=true
+IGNT=true
+ISV=true
+Icelandic=true
+IndBIS=true
+IndTB=false
+IndTL=false
+ItaLND=true
+ItaNRV=false
+JPS=true
+JST=true
+JapKUG=true
+JapSNKI=false
+KJV=true
+Ketchi=true
+Korean=true
+LO=true
+LXX=false
+LXXM=true
+Latvian=true
+ManxGaelic=true
+Maori=true
+Mel=true
+Montgomery=false
+Murdock=true
+N27U4=
+NASB95=
+NCV=
+NIV=
+NKJV=
+Norsk=true
+ORTHJBC=true
+PorAA=true
+RNKJV=false
+RST=true
+RWebster=false
+RomCor=true
+Rotherham=true
+ScotsGaelic=false
+Scrivner=true
+SpaRV=false
+SpaSEV=false
+SpaVNT=false
+Stephanus=true
+Swahili=true
+SweSVE=true
+Tagalog=true
+Tamil=
+ThaiKJV=true
+Tisch=true
+Turkish=true
+Twenty=false
+UMGreek=true
+Ukrainian=true
+Uma=true
+Viet=true
+Vulgate=true
+Vulgate_HebPs=false
+WEB=false
+WH=false
+WHNU=true
+Websters=true
+Weymouth=false
+Xhosa=true
+YLT=false
+
diff --git a/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp b/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp
new file mode 100644
index 0000000..3aee541
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp
@@ -0,0 +1,2821 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#include <vcl/clipbrd.hpp>
+#pragma hdrstop
+
+#include "mainfrm.h"
+#include "swdisprtfchap.h"
+#include "searchfrm.h"
+#include "swwinlog.h"
+#include "AboutBoxfrm.h"
+#include "ModInstForm.h"
+#include "biblecsmgr.h"
+#include "Greek2Greek.h"
+#include "bookmarkfrm.h"
+#include "optionfrm.h"
+#include "vrslstfrm.h"
+#include <utilstr.h>
+#include <filemgr.h>
+#include <localemgr.h>
+#include "editentryfrm.h"
+#include "versesel.h"
+#include "splashfrm.h"
+#include "ModVisFrm.h"
+#include "DevOfTheDay.h"
+#include "SplashPage.h"
+//#include "nsEmbedAPI.h"
+#include <graphics.hpp>
+#include "sword.h"
+#include "rtfhintfrm.h"
+#include "newbmfilefrm.h"
+#include "RangeMaintFrm.h"
+#include "PrintFrm.h"
+#include "PreviewForm.h"
+//---------------------------------------------------------------------------
+#pragma link "RxRichEd"
+//#pragma link "MOZILLACONTROLLib_OCX"
+//#pragma link "SHDocVw_OCX"
+#pragma resource "*.dfm"
+
+static const char *rtfclasses[] = {"RTFDisp", "SWDisplay", "SWObject", 0};
+SWClass RTFDisp::classdef(rtfclasses);
+
+TForm1 *Form1;
+//---------------------------------------------------------------------------
+
+
+/*
+inline AnsiString& operator=(AnsiString& dest, const string& src) {
+ dest = src.c_str();
+ return dest;
+}
+
+*/
+
+void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
+{
+ if (Msg.message == WM_VERSE)
+ {
+ HKEY hkey;
+ LONG result;
+ unsigned long verSize = 32;
+ result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "sword\\OpenVerse", NULL, KEY_READ | KEY_WRITE, &hkey);
+ result = RegQueryValueEx(hkey, NULL, NULL, NULL, NULL, &verSize);
+ char* verStr = new char[verSize];
+ result = RegQueryValueEx(hkey, NULL, NULL, NULL, verStr, &verSize);
+ result = RegCloseKey(hkey);
+ result = RegDeleteKey(HKEY_CLASSES_ROOT, "sword\\OpenVerse");
+ NavigateVerseURL(verStr);
+ Handled = true;
+ }
+}
+
+void TForm1::NavigateVerseURL (char* verStrIN)
+{
+ unsigned long verSize = strlen(verStrIN) + 1;
+ char * verStr = new char[verSize];
+ strcpy (verStr, verStrIN);
+ char * verStr2 = new char[verSize];
+ unsigned long verSize2 = 0;
+ if (*(verStr + verSize - 2) == '\"') {
+ *(verStr + verSize - 2) = 0;
+ }
+ verSize = 0;
+ if (strstr(verStr, "libronix")) {
+ char* bib = strstr(verStr, "bible:");
+ if (bib) {
+ verSize = 6 + (unsigned long)(bib - verStr);
+ }
+ }
+ else if (strstr(verStr, "sword://")) {
+ verSize = 9;
+ }
+ else if (*verStr == '\"') {
+ verSize = 1;
+ }
+
+ while (verStr[verSize] != 0) {
+ verStr2[verSize2] = verStr[verSize];
+ verSize++;
+ verSize2++;
+ }
+ verStr2[verSize2] = 0;
+
+ char * verse = strstr(verStr2, "/");
+ if (verse) {
+ *verse = 0;
+ verse++;
+ }
+ else {
+ verse = verStr2;
+ verStr2 = 0;
+ }
+
+ freeHandLookup->Text = verse;
+ freeHandLookupoldKeyPress(0, '\r');
+
+ delete [] verStr;
+ delete [] verStr2;
+}
+
+__fastcall TForm1::TForm1(TComponent* Owner)
+ : TForm(Owner)
+{
+ optionsconf = new SWConfig("./options.conf");
+
+ // add our ui locale info to sword's system localemgr
+ LocaleMgr::systemLocaleMgr.loadConfigDir("./uilocales.d");
+
+ Lookup->Text = "[ SWORD DDE Lookup ]";
+ Search->Text = "[ SWORD DDE Search ]";
+ modstates.clear();
+ displays.clear();
+ ctrlstates.clear();
+ DefaultVSKey = 0;
+ DefaultStrKey = 0;
+ clickText = "";
+
+ lbDictKeysOld->Visible = false;
+ DictKeyEditOld->Visible = false;
+ lbDictKeys = new TTntListBox(this);
+ lbDictKeys->Parent = Panel2;
+ lbDictKeys->Align = alClient;
+ lbDictKeys->Font->Name = "Code2000";
+ lbDictKeys->OnClick = lbDictKeysOldClick;
+
+ DictKeyEdit = new TTntEdit(this);
+ DictKeyEdit->Parent = Panel2;
+ DictKeyEdit->Align = alTop;
+ DictKeyEdit->Font->Name = "Code2000";
+ DictKeyEdit->OnChange = DictKeyEditOldChange;
+ renderingHint = false;
+ closing = false;
+}
+
+void __fastcall TForm1::DisplayHint(TObject* Sender)
+{
+ StatusBar1->SimpleText = GetLongHint(Application->Hint);
+}
+
+//---------------------------------------------------------------------------
+__fastcall TForm1::~TForm1()
+{
+
+ list <SWDisplay *>::iterator it;
+ int loop;
+
+
+ if (mainmgr)
+ delete mainmgr;
+ for (it = displays.begin(); it != displays.end(); it++)
+ delete *it;
+
+ if (layoutconf)
+ delete layoutconf;
+
+ if (optionsconf)
+ delete optionsconf;
+
+ for (loop = 0; loop < 10; loop++) {
+ if (ctrlstates[loop])
+ delete ctrlstates[loop];
+ }
+
+ if (DefaultVSKey)
+ delete DefaultVSKey;
+ if (DefaultStrKey)
+ delete DefaultStrKey;
+
+ list <ModState *>::iterator mit;
+ for (mit = modstates.begin(); mit != modstates.end(); mit++) {
+ delete (*mit);
+ }
+}
+//---------------------------------------------------------------------------
+
+char TForm1::CreateTextPane(SWModule *mod, char *font) {
+ TTabSheet *newtab = new TTabSheet(this);
+ SWDispRTFChap *newrtf = new SWDispRTFChap(this);
+ char buf[1024];
+ SectionMap::iterator sit;
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->ParentShowHint = true;
+ newtab->PageControl = TextPageControl;
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+ newrtf->PopupMenu = (strcmp(mod->Name(), "N27U4")) ? PopupMenu2 : PopupMenu1;
+ newrtf->OnMouseDown = RTFMouseDown;
+ newrtf->Name = String("TextRTF")+mod->Name();
+
+ newrtf->module = mod;
+ newrtf->recalcAppearance();
+
+ SWDisplay *disp = new RTFDisp(newrtf);
+ mod->Disp(disp);
+ displays.insert(displays.begin(), disp);
+ mod->SetKey(*DefaultVSKey);
+
+ return 0;
+}
+//---------------------------------------------------------------------------
+char TForm1::CreateCommentPane(SWModule *mod, char* font) {
+ TTabSheet *newtab = new TTabSheet(this);
+ TWinControl *newrtf;
+ char buf[1024];
+ SectionMap::iterator sit;
+
+ if ((*mainmgr->config->Sections[mod->Name()].find("ModDrv")).second == "HREFCom") {
+// if (mainmgr->config->Sections[mod->Name()]["External"] == "1") {
+ newrtf = new TPanel(this);
+ ((TPanel *)newrtf)->Caption = "Syncronizing to External Viewer";
+ SWDisplay *disp = new DispExternal();
+ mod->Disp(*displays.insert(displays.begin(), disp));
+/*
+ }
+ else {
+ // newrtf = new THTML(this->Handle);
+ // newrtf = new SWDispRTF(this);
+ newrtf = HTML1;
+ newrtf->Visible = true;
+ mod->Disp(*displays.insert(displays.begin(), new HREFDisp((THTML *)newrtf)));
+ // mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf)));
+ }
+*/
+ }
+ else {
+/* IE Control
+ newrtf = new TCppWebBrowser(this);
+ HREFDisp *disp = new HREFDisp((TCppWebBrowser *)newrtf);
+ newrtf->Visible = true;
+ mod->Disp(*displays.insert(displays.begin(), disp));
+ ((TCppWebBrowser *)newrtf)->OnBeforeNavigate2 = CppWebBrowser1BeforeNavigate2;
+*/
+ newrtf = new SWDispRTF(this);
+
+ SWDisplay *disp = new RTFDisp((SWDispRTF *)newrtf);
+ mod->Disp(*displays.insert(displays.begin(), disp));
+ ((SWDispRTF *)newrtf)->ScrollBars = ssVertical;
+ ((SWDispRTF *)newrtf)->ReadOnly = true;
+ ((SWDispRTF *)newrtf)->Name = String("CommentRTF")+mod->Name();
+
+ if ((*mainmgr->config->Sections[mod->Name()].find("ModDrv")).second == "RawFiles") {
+ ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu3;
+ ((SWDispRTF *)newrtf)->ExpandNewLine = false;
+ }
+ else ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu2;
+ ((SWDispRTF *)newrtf)->OnMouseDown = RTFMouseDown;
+ ((SWDispRTF *)newrtf)->OnURLClick = RTFURLClick;
+ }
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->ParentShowHint = true;
+ newtab->PageControl = CommentaryPageControl;
+
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+ ((SWDispRTF *)newrtf)->module = mod;
+ ((SWDispRTF *)newrtf)->recalcAppearance();
+
+ mod->SetKey(*DefaultVSKey);
+ return 0;
+}
+//---------------------------------------------------------------------------
+char TForm1::CreateLDPane(SWModule *mod, char* font) {
+ TTabSheet *newtab = new TTabSheet(this);
+ SWDispRTF *newrtf = new SWDispRTF(this);
+ SectionMap::iterator sit;
+ char buf[1024];
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->ParentShowHint = true;
+ newtab->PageControl = LexDictPageControl;
+
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+ newrtf->Name = String("LexDictRTF")+mod->Name();
+ newrtf->PopupMenu = PopupMenu2;
+ newrtf->OnMouseDown = RTFMouseDown;
+ newrtf->OnURLClick = RTFURLClick;
+ newrtf->module = mod;
+ newrtf->recalcAppearance();
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+ if ((*sit).second.find("LDBackColor") != (*sit).second.end()) {
+ lbDictKeys->Color = TColor((atoi((*(*sit).second.find("LDBackColor")).second.c_str())));
+ }
+ if ((*sit).second.find("LDFontColor") != (*sit).second.end())
+ lbDictKeys->Font->Color = TColor((atoi((*(*sit).second.find("LDFontColor")).second.c_str())));
+ }
+ SWDisplay *disp = new RTFDisp(newrtf);
+ mod->Disp(*displays.insert(displays.begin(), disp));
+ mod->SetKey(*DefaultStrKey);
+ return 0;
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::BookTOCChange(TObject* Sender, TTreeNode* Node) {
+ ModMap::iterator it;
+
+ if (mainmgr) {
+ it = mainmgr->Modules.find(CommentaryPageControl->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ ((TreeKeyIdx *)(SWKey *)*(it->second))->setOffset((long)Node->Data);
+ (*it).second->Display();
+ if (logmodstate)
+ modstates.insert(modstates.begin(), new ModState(CommentaryPageControl, CommentaryPageControl->ActivePage, (*it).second->KeyText()));
+ }
+ }
+}
+
+
+char TForm1::CreateBookPane(SWModule *mod, char* font) {
+ TTabSheet *newtab = new TTabSheet(this);
+ TWinControl *newrtf;
+ char buf[1024];
+ SectionMap::iterator sit;
+ TTreeView *toc = new TTreeView(this);
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->ParentShowHint = true;
+ newtab->PageControl = CommentaryPageControl;
+
+ TSplitter *splitter = new TSplitter(this);
+ splitter->Parent = newtab;
+ splitter->Align = alLeft;
+
+ toc->Parent = newtab;
+ toc->Align = alLeft;
+ toc->OnChange = BookTOCChange;
+ toc->Items->Clear();
+
+ newrtf = new SWDispRTF(this);
+ SWDisplay *disp = new RTFBookDisp((SWDispRTF *)newrtf, toc);
+ mod->Disp(*displays.insert(displays.begin(), disp));
+ ((SWDispRTF *)newrtf)->ScrollBars = ssVertical;
+ ((SWDispRTF *)newrtf)->ReadOnly = true;
+
+ if ((*mainmgr->config->Sections[mod->Name()].find("ModDrv")).second == "RawFiles") {
+ ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu3;
+ ((SWDispRTF *)newrtf)->ExpandNewLine = false;
+ }
+ else ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu2;
+ ((SWDispRTF *)newrtf)->OnMouseDown = RTFMouseDown;
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+ ((SWDispRTF *)newrtf)->module = mod;
+ ((SWDispRTF *)newrtf)->recalcAppearance();
+
+
+
+// mod->SetKey(*DefaultVSKey);
+ return 0;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::TextPageControlChange(TObject *Sender)
+{
+ RefreshActiveSheet(TextPageControl);
+ Form1->ActiveControl = TextPageControl;
+}
+//---------------------------------------------------------------------------
+void TForm1::RefreshActiveSheet(TPageControl *pc)
+{
+ ModMap::iterator it;
+
+ if (mainmgr) {
+ it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ SWModule *module = it->second;
+ module->Display();
+ if (logmodstate)
+ modstates.insert(modstates.begin(), new ModState(pc, pc->ActivePage, module->KeyText()));
+ if (pc == LexDictPageControl)
+ FillDictKeys();
+ }
+ }
+}
+
+
+void TForm1::TextKeyChanged()
+{
+ cbBook->ItemIndex = cbBook->Items->IndexOf(DefaultVSKey->books[DefaultVSKey->Testament()-1][DefaultVSKey->Book()-1].name);
+ CHBox->Text = DefaultVSKey->Chapter();
+ VSBox->Text = DefaultVSKey->Verse();
+ freeHandLookup->Text = (const char *)*DefaultVSKey;
+ RefreshActiveSheet(TextPageControl);
+ logmodstate = false; // only log state once
+ RefreshActiveSheet(CommentaryPageControl);
+ logmodstate = true;
+}
+
+
+void __fastcall TForm1::btnLookupClick(TObject *Sender)
+{
+ if (!(StrToInt(CHBox->Text)) || (!StrToInt(VSBox->Text)))
+ DefaultVSKey->AutoNormalize(0);
+
+ if (StrToInt(CHBox->Text) < 0)
+ CHBox->Text = StrToInt(CHBox->Text) + 1;
+ if (StrToInt(VSBox->Text) < 0)
+ VSBox->Text = StrToInt(VSBox->Text) + 1;
+
+ (*DefaultVSKey) = (cbBook->Text + " " + CHBox->Text + ":" + VSBox->Text).c_str();
+ TextKeyChanged();
+ DefaultVSKey->AutoNormalize(1);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::CommentaryPageControlChange(TObject *Sender)
+{
+ RefreshActiveSheet(CommentaryPageControl);
+ Form1->ActiveControl = CommentaryPageControl;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::DictKeyEditOldChange(TObject *Sender)
+{
+ if (DefaultStrKey) {
+// if (DictKeyEdit->Modified) {
+ *DefaultStrKey = WideStringToUTF8(DictKeyEdit->Text).c_str();
+ RefreshActiveSheet(LexDictPageControl);
+ DictKeyEdit->Modified = false;
+// }
+ }
+}
+
+void TForm1::FillDictKeys() {
+ ModMap::iterator it;
+ int index = 0;
+ SWKey saveKey;
+ ConfigEntMap::const_iterator const_eit;
+ string fontname;
+
+ if (mainmgr) {
+ it = mainmgr->Modules.find(LexDictPageControl->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ SWModule *module = (*it).second;
+ RTFDisp *disp = SWDYNAMIC_CAST(RTFDisp, module->Disp());
+ if (disp) {
+ SWDispRTF *rtfDisp = (SWDispRTF*) disp->editControl();
+ rtfDisp->recalcAppearance();
+ lbDictKeys->Font->Name = rtfDisp->dispAttribs.fontName;
+ lbDictKeys->Font->Size = rtfDisp->dispAttribs.fontSize;
+
+ DictKeyEdit->Font->Name = rtfDisp->dispAttribs.fontName;
+ DictKeyEdit->Font->Size = rtfDisp->dispAttribs.fontSize;
+ }
+
+ module->KeyText(); // snap to entry
+ saveKey = module->KeyText();
+ int count = lbDictKeys->Height / lbDictKeys->ItemHeight;
+ lbDictKeys->Items->Clear();
+ for (int i = 0; i < (count / 2); i++)
+ (*module)++;
+ for (int i = 0; i < count-1; i++)
+ (*module)--;
+ module->Error();
+ for (;!module->Error() && count;count--,(*module)++) {
+ lbDictKeys->Items->Add(UTF8ToWideString(module->KeyText()));
+ if (saveKey == module->Key())
+ index = lbDictKeys->Items->Count-1;
+ }
+ lbDictKeys->ItemIndex = index;
+ }
+ }
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::LexDictPageControlChange(TObject *Sender)
+{
+ *DefaultStrKey = WideStringToUTF8(DictKeyEdit->Text).c_str();
+ RefreshActiveSheet(LexDictPageControl);
+ Form1->ActiveControl = LexDictPageControl;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::NewSearchWindow1Click(TObject *Sender) {
+
+ searchForm->Show();
+}
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Exit1Click(TObject *Sender)
+{
+ Close();
+}
+
+void __fastcall TForm1::About1Click(TObject *Sender)
+{
+ AboutBox->ShowModal();
+}
+
+
+WideString TForm1::TrimJunk(WideString src) {
+ bool hasDigit = false;
+ bool hasAlpha = false;
+ WideString retVal = "";
+
+ int len = src.Length();
+ for (int i = 1; i <=len; i++) {
+ if (isdigit(src[i]))
+ hasDigit = true;
+ if (isalpha(src[i]) || (src[i] > 255))
+ hasAlpha = true;
+ }
+ for (int i = 1; i <= len; i++) {
+ if (hasDigit && !hasAlpha) { // number
+ if (isdigit(src[i])) retVal += src[i];
+ }
+ else if (hasAlpha) { // alpha
+ if (isalpha(src[i]) || (src[i] > 255)) retVal += src[i];
+ }
+ else retVal += src[i];
+ }
+ return retVal;
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ int wordstart;
+ int saveSelStart = rtf->SelStart;
+ String lookupKey;
+ ConfigEntMap::iterator eit;
+ char preChar = 0;
+
+ if (!rtf->SelLength) {
+ preChar = (rtf->WordAtCursor().Length()) ? rtf->WordAtCursor()[1] : 0;
+ lookupKey = TrimJunk(rtf->WordAtCursor());
+ }
+ else {
+ preChar = rtf->Text[(rtf->SelStart)?rtf->SelStart:0];
+ lookupKey = Trim(rtf->SelText);
+ }
+
+ // check if all digits (strongs)
+ int i;
+ for (i = 0; i < strlen(lookupKey.c_str()); i++) {
+ if (!isdigit(lookupKey.c_str()[i]))
+ break;
+ }
+
+ if ((i == strlen(lookupKey.c_str())) && (i)) {
+ String curLex = LexDictPageControl->ActivePage->Caption;
+ String feature = (DefaultVSKey->Testament() == 1)?"Hebrew":"Greek";
+ feature += (preChar == '(')?"Parse":"Def";
+ if (!strncmp(rtf->Name.c_str(), "TextRTFLXX", 10))
+ feature = "GreekDef";
+ if (!hasFeature(mainmgr, curLex.c_str(), feature.c_str())) {
+ string tmpval = ((eit = optionsconf->Sections["ModDefaults"].find(feature.c_str())) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ for (int i = 0; i < LexDictPageControl->PageCount; i++) {
+ if (!stricmp(LexDictPageControl->Pages[i]->Caption.c_str(), tmpval.c_str())) {
+ LexDictPageControl->ActivePageIndex = i;
+ break;
+ }
+ }
+ }
+ }
+
+ DictKeyEdit->Text = UTF8ToWideString(lookupKey);
+}
+
+
+void __fastcall TForm1::verseLookupClick(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ int wordstart;
+ int saveSelStart = rtf->SelStart;
+
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length()) - rtf->SelStart - 1;
+ freeHandLookup->Text = Trim(rtf->SelText);
+ rtf->SelStart = saveSelStart;
+ rtf->SelLength = 0;
+ }
+ else freeHandLookup->Text = Trim(rtf->SelText);
+ char ret = '\r';
+ freeHandLookupoldKeyPress(Sender, ret);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::SaveLayout1Click(TObject *Sender)
+{
+ ConfigEntMap sit;
+ sit = layoutconf->Sections["Screen"];
+ if(Form1->WindowState == wsMaximized) {
+ sit["Maximized"] = "true";
+ }
+ else {
+ sit["Maximized"] = "false";
+ sit["MainTop"] = IntToStr(Form1->Top).c_str();
+ sit["MainLeft"] = IntToStr(Form1->Left).c_str();
+ sit["MainHeight"] = IntToStr(Form1->Height).c_str();
+ sit["MainWidth"] = IntToStr(Form1->Width).c_str();
+ }
+ sit["TextComHeight"] = IntToStr(pnlTextCom->Height).c_str();
+ sit["TextWidth"] = IntToStr(pnlText->Width).c_str();
+
+ if(searchForm->WindowState == wsMaximized) {
+ sit["SearchMaximized"] = "true";
+ }
+ else {
+ sit["SearchMaximized"] = "false";
+ sit["SearchTop"] = IntToStr(searchForm->Top).c_str();
+ sit["SearchLeft"] = IntToStr(searchForm->Left).c_str();
+ sit["SearchWidth"] = IntToStr(searchForm->Width).c_str();
+ sit["SearchHeight"] = IntToStr(searchForm->Height).c_str();
+ }
+
+ OptionsList options = mainmgr->getGlobalOptions();
+ for (OptionsList::iterator it = options.begin(); it != options.end(); it++) {
+ string value = mainmgr->getGlobalOption(it->c_str());
+ (*layoutconf)["ModuleOptions"][it->c_str()] = value;
+ }
+ layoutconf->Sections["Screen"] = sit;
+ layoutconf->Save();
+}
+
+
+void TForm1::fillVKeySelector(VerseKey *vk) {
+ VerseKey *myVk = (VerseKey *)vk->clone();
+ myVk->Error(); //clear error
+ (*myVk) = TOP;
+ cbBook->Clear();
+ while (!myVk->Error()) {
+ AnsiString s1 = (const char *)(*myVk);
+ s1.SetLength(s1.Length() - 4);
+ cbBook->Items->Add(s1);
+ myVk->Book(myVk->Book() + 1);
+ }
+ delete myVk;
+}
+
+
+void TForm1::i12ize(const char *lang) {
+ LocaleMgr::systemLocaleMgr.setDefaultLocaleName(lang);
+
+ // TODO 5 -cConfiguration Ops -oScribe: add mainmgr->configpath, or something, to beginning of these image names ???
+ const char *tmp;
+ Graphics::TBitmap *bitmap = 0;
+ TPicture *pic = new TPicture();
+
+ ImageList1->Clear();
+
+ tmp = _tr("BackBtnImage");
+ if (strcmp("BackBtnImage", tmp)) {
+ pic->LoadFromFile(tmp);
+ bitmap = pic->Bitmap;
+ }
+ else bitmap = BackBtnImage->Picture->Bitmap;
+
+ TColor transColor = bitmap->Canvas->Pixels[0][0];
+ ImageList1->AddMasked(bitmap, transColor);
+
+ tmp = _tr("SearchBtnImage");
+ if (strcmp("SearchBtnImage", tmp)) {
+ pic->LoadFromFile(tmp);
+ bitmap = pic->Bitmap;
+ }
+ else bitmap = SearchBtnImage->Picture->Bitmap;
+
+ transColor = bitmap->Canvas->Pixels[0][0];
+ ImageList1->AddMasked(bitmap, transColor);
+
+ bitmap = BookmarkBtnImage->Picture->Bitmap;
+ transColor = bitmap->Canvas->Pixels[0][0];
+ ImageList2->AddMasked(bitmap, transColor);
+
+ delete pic;
+
+ // MainForm
+ File1->Caption = _tr("&File");
+ SaveLayout1->Caption = _tr("S&ave Layout");
+ Print1->Caption = _tr("&Print...");
+ Exit1->Caption = _tr("E&xit");
+ Edit1->Caption = _tr("&Edit");
+ Copy1->Caption = _tr("&Copy");
+ Copy2->Caption = _tr("&Copy");
+ Copy3->Caption = _tr("&Copy");
+ Copy4->Caption = _tr("&Copy");
+ CopyasBGreekTransliteration1->Caption = _tr("Copy as &B-Greek Transliteration");
+ MenuItem1->Caption = _tr("Dictionary Lookup");
+ Copy4->Caption = _tr("&Copy");
+ Copy4->Caption = _tr("&Copy");
+ Copy4->Caption = _tr("&Copy");
+ Options2->Caption = _tr("Options");
+ Options1->Caption = _tr("&Preferences...");
+ Search1->Caption = _tr("&Search");
+ NewSearchWindow1->Caption = _tr("&New Search Window");
+ Tools1->Caption = _tr("&Tools");
+ InstallManager1->Caption = _tr("Install Manager");
+ Help1->Caption = _tr("&Help");
+ Contents1->Caption = _tr("Contents");
+ DevotionaloftheDay1->Caption = _tr("Devotional of the Day");
+ About1->Caption = _tr("&About");
+ Bookmarkbtn->Caption = _tr("Bookmark");
+ DictionaryLookup1->Caption = _tr("Dictionary Lookup");
+ DictionaryLookup2->Caption = _tr("Dictionary Lookup");
+ EditEntry1->Caption = _tr("&Edit Entry");
+ DeleteEntry1->Caption = _tr("&Delete Entry");
+ LinktoVerse1->Caption = _tr("Link to Comment for Verse...");
+ AddBookmark1->Caption = _tr("&Add Bookmark");
+ EditBookmarks1->Caption = _tr("&Edit Bookmarks / Tree View...");
+ HideShowModules1->Caption = _tr("Hide / Show Modules");
+ ToolButton3->Hint = _tr("Go Back To Previous Location");
+ ToolButton4->Hint = _tr("Bring Up Search Window");
+ TextPageControl->Hint = _tr("Biblical Texts");
+ CommentaryPageControl->Hint = _tr("Commentaries");
+ LexDictPageControl->Hint = _tr("Lexicons / Dictionaries");
+ // AboutBox
+ AboutBox->Caption = _tr("About The SWORD Project");
+ AboutBox->OKButton->Caption = _tr("OK");
+
+ // bookmarkForm
+ bookmarkForm->Caption = _tr("Bookmarks");
+
+ // DevOfTheDay2
+ DevOfTheDay2->Caption = _tr("Devotion for Today");
+ DevOfTheDay2->ckShowTip->Caption = _tr("Show Devotional at Startup");
+ DevOfTheDay2->btnOK->Caption = _tr("&Close");
+ DevOfTheDay2->Label1->Caption = _tr("Words To Live By...");
+
+ // EditEntryForm
+ EditEntryForm->Caption = _tr("Edit Entry");
+ EditEntryForm->Label1->Caption = _tr("Font Size:");
+
+
+
+ // ModInstForm
+ ModInstFrm->Caption = _tr("Found New Module...");
+ ModInstFrm->OkBtn->Caption = _tr("OK");
+
+ // ModVisForm
+ ModVisForm->Caption = _tr("Check Modules To Show As Tabs");
+ ModVisForm->modList->Columns->Items[0]->Caption = _tr("Module");
+ ModVisForm->modList->Columns->Items[1]->Caption = _tr("Description");
+ ModVisForm->OkBtn->Caption = _tr("OK");
+ ModVisForm->CancelBtn->Caption = _tr("Cancel");
+
+ // NewBMfrm
+ NewBMfrm->Caption = _tr("Add New Bookmark File");
+ NewBMfrm->Label1->Caption = _tr("File Name (without extension):");
+ NewBMfrm->Label2->Caption = _tr("Bookmark Section Title:");
+ NewBMfrm->OkBtn->Caption = _tr("OK");
+ NewBMfrm->CancelBtn->Caption = _tr("Cancel");
+
+ // OptionsForm
+ Optionsfrm->Caption = _tr("Preferences");
+ Optionsfrm->TabSheet1->Caption = _tr("General");
+ Optionsfrm->TabSheet2->Caption = _tr("Special Modules");
+ Optionsfrm->TabSheet3->Caption = _tr("Display");
+ Optionsfrm->gbPersonalize->Caption = _tr("Personalize");
+ Optionsfrm->AutoBMPersonal->Caption = _tr("Save Personal Bookmarks");
+ Optionsfrm->AutoBMOther->Caption = _tr("Save Other Bookmarks");
+ Optionsfrm->HintPopups->Caption = _tr("Show Hint Pop-ups");
+ Optionsfrm->Label4->Caption = _tr("Language");
+ Optionsfrm->AutoLayout->Caption = _tr("Save Screen Layout");
+ Optionsfrm->HintStrongs->Caption = _tr("Show Hint Over Strongs Numbers");
+ Optionsfrm->OkBtn->Caption = _tr("OK");
+ Optionsfrm->CancelBtn->Caption = _tr("Cancel");
+ Optionsfrm->gbDefModules->Caption = _tr("Original Language Support - Default Modules");
+ Optionsfrm->Label7->Caption = _tr("Definitions");
+ Optionsfrm->Label8->Caption = _tr("Parsing");
+ Optionsfrm->Label5->Caption = _tr("Greek");
+ Optionsfrm->Label6->Caption = _tr("Hebrew");
+ Optionsfrm->Label10->Caption = _tr("Strong's Numbered Text");
+ Optionsfrm->gbDevos->Caption = _tr("Daily Devotionals");
+ Optionsfrm->Label9->Caption = _tr("Default Devotional");
+ Optionsfrm->devSplashCB->Caption = _tr("Show Devotional Splash Screen on Startup");
+ Optionsfrm->devsAsDictsCB->Caption = _tr("Show Devotionals as Dictionaries");
+ Optionsfrm->gbGloss->Caption = _tr("Glossaries");
+ Optionsfrm->glosAsDictsCB->Caption = _tr("Show Glossaries as Dictionaries");
+ Optionsfrm->gbColors->Caption = _tr("Display Colors");
+ Optionsfrm->Label2->Caption = _tr("Preview");
+ Optionsfrm->Label3->Caption = _tr("Module Type");
+ Optionsfrm->Label14->Caption = _tr("Scheme");
+ Optionsfrm->Label11->Caption = _tr("Text Font");
+ Optionsfrm->btnFont->Caption = _tr("Select Font...");
+ Optionsfrm->Label13->Caption = _tr("Verse Number Color");
+ Optionsfrm->btnNumClr->Caption = _tr("Select Color...");
+ Optionsfrm->AutoVSColor->Caption = _tr("Current Verse Color");
+ Optionsfrm->btnCurrVerse->Caption = _tr("Select Color...");
+ Optionsfrm->Label15->Caption = _tr("Combo/Edit Fields");
+ Optionsfrm->btnFieldClr->Caption = _tr("Select Color...");
+ Optionsfrm->Label1->Caption = _tr("Individual Modules (Font Only)");
+ Optionsfrm->btnModFonts->Caption = _tr("Select Font...");
+ Optionsfrm->Label12->Caption = _tr("Strong's Numbers <...>");
+ Optionsfrm->Label16->Caption = _tr("Strong's Tense (...)");
+ Optionsfrm->btnStrongClr->Caption = _tr("Select Color...");
+ Optionsfrm->btnMorphClr->Caption = _tr("Select Color...");
+
+ // RangeMaintForm
+ RangeMaintForm->Caption = _tr("Maintain Custom Ranges");
+ RangeMaintForm->Label1->Caption = _tr("Range Name");
+ RangeMaintForm->Label2->Caption = _tr("Range Text");
+ RangeMaintForm->Label3->Caption = _tr("eg. mat-jo;rev4");
+ RangeMaintForm->SpeedButton1->Caption = _tr("&Add");
+ RangeMaintForm->SpeedButton2->Caption = _tr("&Remove");
+ RangeMaintForm->SpeedButton3->Caption = _tr("&Save");
+ RangeMaintForm->SpeedButton4->Caption = _tr("&Cancel");
+
+ // searchForm
+ searchForm->Caption = _tr("Search...");
+ searchForm->searchBtn->Caption = _tr("Search");
+ searchForm->searchTypeGroup->Caption = _tr("Search Type");
+ searchForm->searchTypeGroup->Items->CommaText = _tr("\"Mult Word\",\"Phrase\",\"Regular Expression\"");
+ searchForm->caseSensitiveCkBx->Caption = _tr("Case Sensitive");
+ searchForm->searchOptionsGroup->Caption = _tr("Search Options");
+ searchForm->scopeGroup->Caption = _tr("Scope");
+ searchForm->scopeGroup->Items->CommaText = _tr("\"Entire Module\",\"Current Results\",\"Custom Range\"");
+ searchForm->customRangeBtn->Caption = _tr("Define Custom Range");
+ searchForm->resultsLV->Columns->Items[0]->Caption = _tr("Reference");
+ searchForm->resultsLV->Columns->Items[1]->Caption = _tr("Preview...");
+ searchForm->lblChooseModule->Caption = _tr("Choose Module");
+ searchForm->Button2->Caption = _tr("&Help");
+
+ // VerseSelFrm
+ VerseSelFrm->Caption = _tr("Type Verse");
+ VerseSelFrm->OkBtn->Caption = _tr("OkBtn");
+ VerseSelFrm->CancelBtn->Caption = _tr("Cancel");
+
+ // VerseListFrm
+ VerseListFrm->Caption = _tr("Verse List");
+
+ // Print Form
+ PrintForm->shtSelection->Caption = _tr("Print Selection");
+ PrintForm->radText->Caption = _tr("Bible Text");
+ PrintForm->radComm->Caption = _tr("Commentary Text");
+ PrintForm->radLD->Caption = _tr("Lexicon/Dictionary Text");
+ PrintForm->lblModName->Caption = _tr("Module Name");
+ PrintForm->GroupBox1->Caption = _tr("Print Source");
+ PrintForm->GroupBox2->Caption = _tr("Print Range");
+ PrintForm->staticRange->Caption = _tr("Verse List");
+ PrintForm->shtSetup->Caption = _tr("Page Setup");
+ PrintForm->labelLeft->Caption = _tr("Left:");
+ PrintForm->labelRight->Caption = _tr("Right:");
+ PrintForm->labelTop->Caption = _tr("Top:");
+ PrintForm->labelBot->Caption = _tr("Bottom:");
+ PrintForm->ckHeader->Caption = _tr("Print Header");
+ PrintForm->labelHeader->Caption = _tr("Header Text:");
+ PrintForm->ckFooter->Caption = _tr("Print Footer");
+ PrintForm->labelFooter->Caption = _tr("Footer Text:");
+ PrintForm->editFooter->Text = _tr("Page &p of &t");
+ PrintForm->GroupBox4->Caption = _tr("Margins (Inches)");
+ PrintForm->GroupBox5->Caption = _tr("Header/Footer");
+ PrintForm->shtFormat->Caption = _tr("Formatting Options");
+ PrintForm->GroupBox3->Caption = _tr("Font and Size");
+ PrintForm->Label10->Caption = _tr("Chapter Heading");
+ PrintForm->Label11->Caption = _tr("Body Text:");
+ PrintForm->Label12->Caption = _tr("Verse Numbers:");
+ PrintForm->ckBookHead->Caption = _tr("Book Name");
+ PrintForm->ckChHead->Caption = _tr("Chapter Headings");
+ PrintForm->ckParagraph->Caption = _tr("Paragraph Format");
+ PrintForm->labelFont->Caption = _tr("Font:");
+ PrintForm->ckVSNum->Caption = _tr("Verse Numbers");
+ PrintForm->ckSuperVS->Caption = _tr("Superscripted");
+ PrintForm->ckPrefix->Caption = _tr("Prefixed (John 1:1 KJV)...");
+ PrintForm->ckPostfix->Caption = _tr("Postfixed ...(John 1:1 KJV)");
+ PrintForm->btnPrint->Caption = _tr("&Print");
+ PrintForm->btnPreview->Caption = _tr("P&review...");
+ PrintForm->btnSetup->Caption = _tr("Printer&s...");
+ PrintForm->btnClose->Caption = _tr("&Close");
+
+ // Print Preview Form
+ PreviewForm->btnPrint->Caption = "Print";
+ PreviewForm->btnClose->Caption = "&Close";
+
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormShow(TObject *Sender)
+{
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit, eitend;
+ AnsiString s1;
+ char textFont[128];
+ char commentFont[128];
+ char LDFont[128];
+ char tempTextFont[128];
+ char tempCommFont[128];
+ char tempLDFont[128];
+ int loop;
+ int maxFiles;
+ TColor fieldColor;
+ string tmpval;
+ bool showDevos;
+ bool showGlos;
+ bool showDevOfDay = false;
+
+/*
+ showLocked = true;
+ for (int i=0;i<=ParamCount();i++) {
+ if (LowerCase(ParamStr(i)) == "-noLocked")
+ showLocked = false;
+ }
+*/
+
+ logmodstate = true;
+ freshdict = true;
+ if (SWLog::systemlog)
+ delete SWLog::systemlog;
+ SWLog::systemlog = new SWWinLog(this->Handle); // set the system logger to our MSWindows specific SWLog class
+ tmpval = ((eit = optionsconf->Sections["System"].find("MaxFiles")) != optionsconf->Sections["System"].end())? (*eit).second : (string)"";
+ if ((maxFiles = atoi(tmpval.c_str()))) {
+ FileMgr::systemFileMgr.maxFiles = maxFiles;
+ }
+
+
+ tmpval = ((eit = optionsconf->Sections["Hints"].find("On")) != optionsconf->Sections["Hints"].end())? (*eit).second : (string)"1";
+
+ if (atoi(tmpval.c_str()))
+ Form1->ShowHint = true;
+ else Form1->ShowHint = false;
+
+ tmpval = ((eit = optionsconf->Sections["General"].find("DevsAsDicts")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"";
+ showDevos = (!stricmp(tmpval.c_str(), "true"));
+
+ tmpval = ((eit = optionsconf->Sections["General"].find("GlosAsDicts")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"";
+ showGlos = !(!stricmp(tmpval.c_str(), "false"));
+
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("locale")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"en_us";
+ i12ize(tmpval.c_str());
+
+ DefaultVSKey = new VerseKey();
+ DefaultStrKey = new StrKey();
+
+
+// DefaultVSKey->setLocale(tmpval.c_str());
+
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("TextFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempTextFont, tmpval.c_str()); // Temporary holding place for text font
+
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("CommentFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempCommFont, tmpval.c_str());
+
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("LDFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempLDFont, tmpval.c_str());
+
+ fillVKeySelector(DefaultVSKey);
+
+ cbBook->ItemIndex = cbBook->Items->IndexOf("James");
+
+ DefaultVSKey->Persist(1); // when set to a module, make the module hold on to this actual key and not a copy
+ *DefaultVSKey = "James 1:19"; // set to our standard starting verse
+ DefaultStrKey->Persist(1);
+ *DefaultStrKey = "";
+
+ mainmgr = new BibleCSMGR(ModInstFrm);
+
+ // Load devotion and show form
+ String devoKey = TDateTime::CurrentDate().FormatString("mm.dd");
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("DailyDevotion")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ it->second->SetKey(devoKey.c_str());
+ DevOfTheDay2->RichTip->Text = it->second->StripText();
+ }
+ tmpval = ((eit = optionsconf->Sections["General"].find("TipOfTheDay")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"";
+ if (!stricmp(tmpval.c_str(), "Devotional")) {
+ DevOfTheDay2->ckShowTip->Checked = true;
+ showDevOfDay = true;
+ }
+ // If no devotional text is shown then a general how-to is diplayed.
+ if(DevOfTheDay2->RichTip->Text == "")
+ DevOfTheDay2->RichTip->Text = "A Daily Devotional is not installed or is not configured for use with the \"Devotional of the Day.\n\nTo configure an installed devotional for use with this dialog box open the Preferences dialog box by going to the \"Options\" menu and selecting \"Preferences...\"; then click the \"Special Modules\" tab. Find the \"Default Devotional\" option and select a devotional to use from the list. If nothing shows up in the pull-down list you will need to install a devotional. This can be done by using the Install Manager. Some examples of devotionals are \"Spurgeon's Morning and Evening\" or \"Jonathan Bagster's Daily Light\".\n\nVisit our website at www.crosswire.org for more information.";
+
+
+ for (it = mainmgr->Modules.begin(); it != mainmgr->Modules.end(); it++) {
+ bool devotional = false;
+ bool glossary = false;
+
+ // leave out enciphered texts with no key
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("CipherKey")) != (*sit).second.end()) {
+ const char *cipherKey = (char *)(*eit).second.c_str();
+ if (strlen(cipherKey) < 1)
+ continue;
+ }
+
+ for (eit = (*sit).second.lower_bound("Feature"), eitend = (*sit).second.upper_bound("Feature"); eit != eitend; eit++) {
+ const char *feature = eit->second.c_str();
+ if (!stricmp(feature, "StrongsNumbers")) {
+ Optionsfrm->strongsNumsCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ if (optionsconf->Sections["ModDefaults"].find("StrongsNumbers") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["StrongsNumbers"] = it->second->Name();
+ }
+ if (!stricmp(feature, "GreekDef")) {
+ Optionsfrm->greekDefCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ if (optionsconf->Sections["ModDefaults"].find("GreekDef") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["GreekDef"] = it->second->Name();
+ }
+ if (!stricmp(feature, "GreekParse")) {
+ Optionsfrm->greekParseCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ if (optionsconf->Sections["ModDefaults"].find("GreekParse") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["GreekParse"] = it->second->Name();
+ }
+ if (!stricmp(feature, "HebrewDef")) {
+ Optionsfrm->hebrewDefCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ if (optionsconf->Sections["ModDefaults"].find("HebrewDef") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["HebrewDef"] = it->second->Name();
+ }
+ if (!stricmp(feature, "HebrewParse")) {
+ Optionsfrm->hebrewParseCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ if (optionsconf->Sections["ModDefaults"].find("HebrewParse") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["HebrewParse"] = it->second->Name();
+ }
+ if (!stricmp(feature, "DailyDevotion")) {
+ Optionsfrm->dailyDefaultCB->Items->AddObject(it->second->Description(), (TObject *)it->second->Name());
+ devotional = true;
+ if (optionsconf->Sections["ModDefaults"].find("DailyDevotion") == optionsconf->Sections["ModDefaults"].end())
+ (*optionsconf)["ModDefaults"]["DailyDevotion"] = it->second->Name();
+ }
+ if (!stricmp(feature, "Glossary")) {
+ glossary = true;
+ }
+ optionsconf->Save();
+ }
+ }
+
+ if (!strcmp((*it).second->Type(), "Biblical Texts")) {
+ strcpy(textFont, tempTextFont);
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ strcpy(textFont,(char *)(*eit).second.c_str());
+ }
+ }
+ CreateTextPane((*it).second, textFont);
+ }
+ if (!strcmp((*it).second->Type(), "Commentaries")) {
+ strcpy(commentFont, tempCommFont);
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ strcpy(commentFont,(char *)(*eit).second.c_str());
+ }
+ }
+ CreateCommentPane((*it).second, commentFont);
+ }
+ if (!strcmp((*it).second->Type(), "Generic Books")) {
+ strcpy(commentFont, tempCommFont);
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ strcpy(commentFont,(char *)(*eit).second.c_str());
+ }
+ }
+ CreateBookPane((*it).second, commentFont);
+ }
+ if (!strcmp((*it).second->Type(), "Lexicons / Dictionaries")) {
+ strcpy(LDFont, tempLDFont);
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ strcpy(LDFont,(char *)(*eit).second.c_str());
+ }
+ }
+ if ((!devotional && !glossary) ||
+ (showDevos && devotional) ||
+ (showGlos && glossary))
+ CreateLDPane((*it).second, LDFont);
+ }
+ }
+
+ layoutconf = new SWConfig("./layout.conf");
+
+ if ((sit = layoutconf->Sections.find("Screen")) != layoutconf->Sections.end()) {
+
+ if ((eit = (*sit).second.find("MainTop")) != (*sit).second.end())
+ Form1->Top = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("MainLeft")) != (*sit).second.end())
+ Form1->Left = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("MainHeight")) != (*sit).second.end())
+ Form1->Height = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("MainWidth")) != (*sit).second.end())
+ Form1->Width = atoi((*eit).second.c_str());
+
+ Form1->WindowState = (sit->second["Maximized"] == "true") ? wsMaximized : wsNormal;
+
+ if ((eit = (*sit).second.find("TextComHeight")) != (*sit).second.end())
+ pnlTextCom->Height = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("TextWidth")) != (*sit).second.end())
+ pnlText->Width = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("SearchTop")) != (*sit).second.end()){
+ searchForm->Top = atoi((*eit).second.c_str());
+ searchForm->Position = poDesigned;
+ }
+
+ if ((eit = (*sit).second.find("SearchLeft")) != (*sit).second.end())
+ searchForm->Left = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("SearchHeight")) != (*sit).second.end())
+ searchForm->Height = atoi((*eit).second.c_str());
+ if ((eit = (*sit).second.find("SearchWidth")) != (*sit).second.end())
+ searchForm->Width = atoi((*eit).second.c_str());
+
+ searchForm->WindowState = (sit->second["SearchMaximized"] == "true") ? wsMaximized : wsNormal;
+ }
+
+
+ for (loop = 0; loop < 10; loop++)
+ ctrlstates.insert(ctrlstates.begin(), 0);
+
+
+
+ // Add options to Options Main Menu choice
+ sit = layoutconf->Sections.find("ModuleOptions");
+ OptionsList options = mainmgr->getGlobalOptions();
+ for (OptionsList::iterator it = options.begin(); it != options.end(); it++) {
+ TMenuItem *newitem = new TMenuItem(MainMenu1);
+ newitem->Caption = it->c_str();
+ newitem->Default = false;
+ newitem->OnClick = OptionShowVals;
+ newitem->Hint = mainmgr->getGlobalOptionTip(it->c_str());
+ if (sit != layoutconf->Sections.end()) {
+ if ((eit = sit->second.find(it->c_str())) != sit->second.end())
+ mainmgr->setGlobalOption(it->c_str(), eit->second.c_str());
+ }
+ OptionsList values = mainmgr->getGlobalOptionValues(it->c_str());
+ for (OptionsList::iterator it2 = values.begin(); it2 != values.end(); it2++) {
+ TMenuItem *newitem2 = new TMenuItem(MainMenu1);
+ newitem2->Caption = it2->c_str();
+ newitem2->Default = false;
+ newitem2->OnClick = GlobalOptionChange;
+ newitem->Add(newitem2);
+ }
+// Mainmenu->Items->Add(newitem);
+ Options2->Add(newitem);
+ }
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()){
+ if ((eit = (*sit).second.find("FieldColor")) != (*sit).second.end())
+ fieldColor = TColor(atoi((*eit).second.c_str()));
+ else fieldColor = clAqua;
+ }
+
+ cbBook->Color = fieldColor;
+ CHBox->Color = fieldColor;
+ VSBox->Color = fieldColor;
+ freeHandLookup->Color = fieldColor;
+ DictKeyEdit->Color = fieldColor;
+
+ if ((sit = layoutconf->Sections.find("History")) != layoutconf->Sections.end()) {
+
+ eitend = (*sit).second.upper_bound("SearchText");
+ for (eit = (*sit).second.lower_bound("SearchText"); eit != eitend; eit++)
+ searchForm->SearchText->Items->Add(UTF8ToWideString(eit->second.c_str()));
+
+ eitend = (*sit).second.upper_bound("LookupText");
+ for (eit = (*sit).second.lower_bound("LookupText"); eit != eitend; eit++)
+ freeHandLookup->Items->Add(eit->second.c_str());
+
+ if ((eit = (*sit).second.find("LastTextModule")) != (*sit).second.end()) {
+ for (int i = 0; i < TextPageControl->PageCount; i++) {
+ if (!strcmp(TextPageControl->Pages[i]->Caption.c_str(), (*eit).second.c_str())) {
+ TextPageControl->ActivePageIndex = i;
+ break;
+ }
+ }
+ }
+ if ((eit = (*sit).second.find("LastComModule")) != (*sit).second.end()) {
+ for (int i = 0; i < CommentaryPageControl->PageCount; i++) {
+ if (!strcmp(CommentaryPageControl->Pages[i]->Caption.c_str(), (*eit).second.c_str())) {
+ CommentaryPageControl->ActivePageIndex = i;
+ break;
+ }
+ }
+ }
+ if (this->Tag) {
+ NavigateVerseURL((char*)(this->Tag));
+ }
+ else if ((eit = (*sit).second.find("LastVerse")) != (*sit).second.end()) {
+ freeHandLookup->Text = (*eit).second.c_str();
+ char ret = '\r';
+ freeHandLookupoldKeyPress(0, ret);
+ }
+ }
+
+ ConfigEntMap *section;
+ TPageControl *pc = 0;
+ for (int pcs = 0; pcs < 3; pcs++) {
+ switch (pcs) {
+ case 0:
+ pc = TextPageControl;
+ section = &(*layoutconf)["TextView"];
+ break;
+ case 1:
+ pc = CommentaryPageControl;
+ section = &(*layoutconf)["CommentView"];
+ break;
+ case 2:
+ pc = LexDictPageControl;
+ section = &(*layoutconf)["LDView"];
+ break;
+ }
+
+ for (int i = 0; i < pc->PageCount; i++) {
+ string heading = pc->Pages[i]->Caption.c_str();
+ pc->Pages[i]->TabVisible = !((*section)[heading.c_str()] == "false"); // !false allows default to be true
+ }
+ }
+
+ SplashPg->Hide();
+ if(showDevOfDay){
+ DevOfTheDay2->Show();
+ }
+ RefreshActiveSheet(LexDictPageControl);
+ RefreshActiveSheet(CommentaryPageControl);
+ RefreshActiveSheet(TextPageControl);
+}
+
+bool TForm1::hasFeature(SWMgr *mgr, const char *modName, const char *feature) {
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit, eitend;
+
+ if ((sit = mgr->config->Sections.find(modName)) != mgr->config->Sections.end()) {
+ for (eit = (*sit).second.lower_bound("Feature"), eitend = (*sit).second.upper_bound("Feature"); eit != eitend; eit++) {
+ const char *tfeature = eit->second.c_str();
+ if (!stricmp(tfeature, feature))
+ return true;
+ }
+ }
+ return false;
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::LookupPokeData(TObject *Sender)
+{
+ char buf[255];
+ char *token;
+ ModMap::iterator it;
+
+ strncpy(buf, Lookup->Text.c_str(), 254);
+ buf[254] = 0;
+ token = strtok(buf, " ");
+ if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) {
+ token = strtok(NULL, "");
+ (*it).second->SetKey(token);
+ Lookup->Text = (const char *)(*(*it).second);
+ }
+ else Lookup->Text = "";
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::SearchPokeData(TObject *Sender)
+{
+ char buf[255];
+ char *token;
+ ModMap::iterator it;
+ AnsiString retval = "";
+
+ strncpy(buf, Search->Text.c_str(), 254);
+ buf[254] = 0;
+ token = strtok(buf, " ");
+ if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) {
+ token = strtok(NULL, "");
+ ListKey &results = (*it).second->Search(token, REG_ICASE);
+ while (!results.Error()) {
+ retval = retval + (const char *)results + "; ";
+ results++;
+ }
+ Search->Text = retval;
+ }
+ else Search->Text = "";
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
+{
+ ModMap::iterator it;
+
+ it = mainmgr->Modules.find(LexDictPageControl->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ if (Button == btNext)
+ (*((*it).second))++;
+ else (*((*it).second))--;
+ DictKeyEdit->Text = UTF8ToWideString(((*it).second)->KeyText());
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
+{
+ if (Sender == UpDown1)
+ UpDown2->Position = 1;
+ btnLookupClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+void TForm1::RestoreState(ModState *state)
+{
+ ModMap::iterator it;
+
+ if (state) {
+ state->pc->ActivePage = (TTabSheet *)state->ap;
+ if ((state->pc == TextPageControl) || (state->pc == CommentaryPageControl)) {
+ if (mainmgr) {
+ it = mainmgr->Modules.find(state->pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ SWModule *module = it->second;
+ if (!strcmp(module->Type(0), "Generic Books")) {
+ module->SetKey(state->key);
+ }
+ else {
+ *DefaultVSKey = state->key;
+ TextKeyChanged();
+ }
+ }
+ }
+ }
+ if (state->pc == LexDictPageControl) {
+ DictKeyEdit->Text = UTF8ToWideString((const char *)state->key);
+ }
+ if (state->pc->ActivePage->ControlCount){
+ Form1->SetFocusedControl( (TWinControl *)state->pc->ActivePage->Controls[0] );
+ }
+ }
+}
+
+
+void __fastcall TForm1::BackbtnClick(TObject *Sender)
+{
+ list <ModState *>::iterator it;
+ logmodstate = false;
+ it = modstates.begin();
+ if (it != modstates.end()) {
+ it++;
+
+ if (it != modstates.end()) {
+ RestoreState(*it);
+ delete *modstates.begin();
+ modstates.erase(modstates.begin(), it);
+ }
+ }
+ logmodstate = true;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Button1Click(TObject *Sender)
+{
+/*
+ list <ModState *>::iterator it;
+ ListBox1->Clear();
+ for (it = modstates.begin(); it != modstates.end(); it++) {
+ ListBox1->Items->Add((*it)->ap->Caption.c_str());
+ }
+*/
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::CopyasBGreekTransliteration1Click(TObject *Sender)
+{
+ char *retbuf;
+ int len;
+ TClipboard *clip = new TClipboard();
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ len = rtf->SelText.Length() * 2;
+ retbuf = new char [ len ];
+ if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) {
+ clip->SetTextBuf(retbuf);
+ }
+ delete clip;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Copy1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length()) - rtf->SelStart - 1;
+ }
+ rtf->CopyToClipboard();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BookmarkItemClick(TObject *Sender)
+{
+ TMenuItem *menuchoice = (TMenuItem *)Sender;
+ const char *source = menuchoice->Caption.c_str();
+ char *value = new char [strlen(source) + 1];
+ int k = 0;
+ for (unsigned int j = 0; j < strlen(source); j++) {
+ if (source[j] != '&')
+ value[k++] = source[j];
+ }
+ value[k] = 0;
+ *DefaultVSKey = value;
+ delete [] value;
+ TextKeyChanged();
+}
+
+void __fastcall TForm1::AddBookmark1Click(TObject *Sender)
+{
+// TMenuItem *newitem;
+
+ bookmarkForm->bmtree->Items->AddChild(bookmarkForm->bmtree->Items->Item[0], (const char *)*DefaultVSKey);
+}
+
+void TForm1::AddSectionToMenu(TMenu *menu, TMenuItem *item, TTreeNode *tree)
+{
+ TMenuItem *newitem;
+
+ for (tree = tree->getFirstChild(); tree; tree = tree->getNextSibling()) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = tree->Text;
+ if (!tree->getFirstChild())
+ newitem->OnClick = BookmarkItemClick;
+ item->Add(newitem);
+ AddSectionToMenu(menu, newitem, tree);
+ }
+}
+
+void TForm1::RefreshBookmarksMenu(TMenu *menu, TTreeView *treeview)
+{
+ TMenuItem *newitem;
+ TTreeNode *tree = 0;
+
+ if (treeview->Items->Count)
+ tree = treeview->Items->Item[0];
+
+ while (menu->Items->Count > 3)
+ menu->Items->Delete(3);
+
+ for (;tree;tree = tree->getNextSibling()) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = tree->Text;
+ menu->Items->Add(newitem);
+ AddSectionToMenu(menu, newitem, tree);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BookmarkbtnClick(TObject *Sender)
+{
+ TPoint menup, point;
+ point.x = 0;
+ point.y = Bookmarkbtn->Height;
+ menup = Bookmarkbtn->ClientToScreen(point);
+ RefreshBookmarksMenu(BookmarkPopup, bookmarkForm->bmtree);
+ BookmarkPopup->Popup(menup.x, menup.y);
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::EditBookmarks1Click(TObject *Sender)
+{
+ bookmarkForm->Show();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
+ TShiftState Shift)
+{
+ char buf[5];
+ int val;
+ ModMap::iterator it;
+ TPageControl *pc = TextPageControl;
+
+ if ((Shift.Contains(ssCtrl)) && (!Shift.Contains(ssAlt))) {
+ if ((Key >= '0') && (Key <= '9')) {
+ sprintf(buf, "%c", Key);
+ val = atoi(buf);
+
+ if (!Shift.Contains(ssShift)) {
+ if ((Screen->ActiveControl == CommentaryPageControl) || (IsChild(CommentaryPageControl->Handle, Screen->ActiveControl->Handle)))
+ pc = CommentaryPageControl;
+ if ((Screen->ActiveControl == LexDictPageControl) || (IsChild(LexDictPageControl->Handle, Screen->ActiveControl->Handle)))
+ pc = LexDictPageControl;
+
+ it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ if (ctrlstates[val])
+ delete ctrlstates[val];
+
+ ctrlstates[val] = new ModState(pc, pc->ActivePage, (*it).second->KeyText());
+ }
+ }
+ else RestoreState(ctrlstates[val]);
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Options1Click(TObject *Sender)
+{
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ ConfigEntMap emap;
+ int color;
+ string tmpval;
+
+ //*********************************
+ //Initialize Preferences Dialog Box
+
+ Optionsfrm->LoadDispSettings(optionsconf);
+ /*
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+ if ((*sit).second.find("AutoVSColor") != (*sit).second.end())
+ Optionsfrm->AutoVSColor->Checked = (((atoi((*(*sit).second.find("AutoVSColor")).second.c_str()))) ? true:false);
+ else Optionsfrm->AutoVSColor->Checked = true;
+
+ if ((*sit).second.find("TextBackColor") != (*sit).second.end())
+ Optionsfrm->FontDialogText->BackColor = TColor(atoi((*(*sit).second.find("TextBackColor")).second.c_str()));
+ else Optionsfrm->FontDialogText->BackColor = TColor(clWhite);
+
+ if ((*sit).second.find("CommentBackColor") != (*sit).second.end())
+ Optionsfrm->FontDialogComment->BackColor = TColor(atoi((*(*sit).second.find("CommentBackColor")).second.c_str()));
+ else Optionsfrm->FontDialogComment->BackColor = TColor(clWhite);
+
+ if ((*sit).second.find("LDBackColor") != (*sit).second.end())
+ Optionsfrm->FontDialogLD->BackColor = TColor(atoi((*(*sit).second.find("LDBackColor")).second.c_str()));
+ else Optionsfrm->FontDialogLD->BackColor = TColor(clWhite);
+
+ if ((*sit).second.find("PopupBackColor") != (*sit).second.end())
+ Optionsfrm->FontDialogPopup->BackColor = TColor(atoi((*(*sit).second.find("PopupBackColor")).second.c_str()));
+ else Optionsfrm->FontDialogPopup->BackColor = TColor(clInfoText);
+
+ if ((*sit).second.find("TextFontName") != (*sit).second.end())
+ Optionsfrm->FontDialogText->Font->Name = ((*(*sit).second.find("TextFontName")).second.c_str());
+ else Optionsfrm->FontDialogText->Font->Name = "Times New Roman";
+
+ if ((*sit).second.find("CommentFontName") != (*sit).second.end())
+ Optionsfrm->FontDialogComment->Font->Name = ((*(*sit).second.find("CommentFontName")).second.c_str());
+ else Optionsfrm->FontDialogComment->Font->Name = "Times New Roman";
+
+ if ((*sit).second.find("LDFontName") != (*sit).second.end())
+ Optionsfrm->FontDialogLD->Font->Name = ((*(*sit).second.find("LDFontName")).second.c_str());
+ else Optionsfrm->FontDialogLD->Font->Name = "Times New Roman";
+
+ if ((*sit).second.find("PopupFontName") != (*sit).second.end())
+ Optionsfrm->FontDialogPopup->Font->Name = ((*(*sit).second.find("PopupFontName")).second.c_str());
+ else Optionsfrm->FontDialogPopup->Font->Name = "MS Sans Serif";
+
+ if ((*sit).second.find("TextFontSize") != (*sit).second.end())
+ Optionsfrm->FontDialogText->Font->Size = (atoi ((*(*sit).second.find("TextFontSize")).second.c_str()));
+ else Optionsfrm->FontDialogText->Font->Size = 10;
+
+ if ((*sit).second.find("CommentFontSize") != (*sit).second.end())
+ Optionsfrm->FontDialogComment->Font->Size = (atoi ((*(*sit).second.find("CommentFontSize")).second.c_str()));
+ else Optionsfrm->FontDialogComment->Font->Size = 10;
+
+ if ((*sit).second.find("LDFontSize") != (*sit).second.end())
+ Optionsfrm->FontDialogLD->Font->Size = (atoi ((*(*sit).second.find("LDFontSize")).second.c_str()));
+ else Optionsfrm->FontDialogLD->Font->Size = 10;
+
+ if ((*sit).second.find("PopupFontSize") != (*sit).second.end())
+ Optionsfrm->FontDialogPopup->Font->Size = (atoi ((*(*sit).second.find("PopupFontSize")).second.c_str()));
+ else Optionsfrm->FontDialogPopup->Font->Size = 10;
+
+ if ((*sit).second.find("TextFontColor") != (*sit).second.end())
+ Optionsfrm->FontDialogText->Font->Color = TColor(atoi ((*(*sit).second.find("TextFontColor")).second.c_str()));
+ else Optionsfrm->FontDialogText->Font->Color = clBlack;
+
+ if ((*sit).second.find("CommentFontColor") != (*sit).second.end())
+ Optionsfrm->FontDialogComment->Font->Color = TColor(atoi ((*(*sit).second.find("CommentFontColor")).second.c_str()));
+ else Optionsfrm->FontDialogComment->Font->Color = clBlack;
+
+ if ((*sit).second.find("LDFontColor") != (*sit).second.end())
+ Optionsfrm->FontDialogLD->Font->Color = TColor(atoi ((*(*sit).second.find("LDFontColor")).second.c_str()));
+ else Optionsfrm->FontDialogLD->Font->Color = clBlack;
+
+ if ((*sit).second.find("PopupFontColor") != (*sit).second.end())
+ Optionsfrm->FontDialogPopup->Font->Color = TColor(atoi ((*(*sit).second.find("PopupFontColor")).second.c_str()));
+ else Optionsfrm->FontDialogPopup->Font->Color = clBlack;
+ }
+ */
+ if ((sit = optionsconf->Sections.find("Bookmarks")) != optionsconf->Sections.end()) {
+ Optionsfrm->AutoBMPersonal->Checked = ((atoi(sit->second["AutoSavePersonal"].c_str()))?true:false);
+ Optionsfrm->AutoBMOther->Checked = ((atoi(sit->second["AutoSaveOther"].c_str()))?true:false);
+ }
+ if ((sit = optionsconf->Sections.find("Layout")) != optionsconf->Sections.end()) {
+ Optionsfrm->AutoLayout->Checked = ((atoi(sit->second["AutoSaveLayout"].c_str()))?true:false);
+
+ }
+
+ Optionsfrm->HintStrongs->Checked = true;
+ tmpval = ((eit = optionsconf->Sections["HintStrongs"].find("On")) != optionsconf->Sections["HintStrongs"].end())? (*eit).second : (string)"1";
+ if (!atoi(tmpval.c_str()))
+ Optionsfrm->HintStrongs->Checked = false;
+
+ Optionsfrm->HintPopups->Checked = true;
+ tmpval = ((eit = optionsconf->Sections["Hints"].find("On")) != optionsconf->Sections["Hints"].end())? (*eit).second : (string)"1";
+ if (!atoi(tmpval.c_str()))
+ Optionsfrm->HintPopups->Checked = false;
+
+ Optionsfrm->devsAsDictsCB->Checked = false;
+ tmpval = ((eit = optionsconf->Sections["General"].find("DevsAsDicts")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"false";
+ if (!stricmp(tmpval.c_str(), "true"))
+ Optionsfrm->devsAsDictsCB->Checked = true;
+
+ Optionsfrm->glosAsDictsCB->Checked = true;
+ tmpval = ((eit = optionsconf->Sections["General"].find("GlosAsDicts")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"true";
+ if (stricmp(tmpval.c_str(), "false"))
+ Optionsfrm->glosAsDictsCB->Checked = true;
+
+ Optionsfrm->devSplashCB->Checked = false;
+ tmpval = ((eit = optionsconf->Sections["General"].find("TipOfTheDay")) != optionsconf->Sections["General"].end())? (*eit).second : (string)"";
+ if (!stricmp(tmpval.c_str(), "Devotional"))
+ Optionsfrm->devSplashCB->Checked = true;
+
+ const char *localeName = LocaleMgr::systemLocaleMgr.getDefaultLocaleName();
+ SWLocale *defLocale = LocaleMgr::systemLocaleMgr.getLocale(localeName);
+ Optionsfrm->localeCB->ItemIndex = Optionsfrm->localeCB->Items->IndexOf((defLocale)?defLocale->getDescription():"English (US)");
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("GreekDef")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->greekDefCB->ItemIndex = Optionsfrm->greekDefCB->Items->IndexOf(it->second->Description());
+ }
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("GreekParse")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->greekParseCB->ItemIndex = Optionsfrm->greekParseCB->Items->IndexOf(it->second->Description());
+ }
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("HebrewDef")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->hebrewDefCB->ItemIndex = Optionsfrm->hebrewDefCB->Items->IndexOf(it->second->Description());
+ }
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("HebrewParse")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->hebrewParseCB->ItemIndex = Optionsfrm->hebrewParseCB->Items->IndexOf(it->second->Description());
+ }
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("DailyDevotion")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->dailyDefaultCB->ItemIndex = Optionsfrm->dailyDefaultCB->Items->IndexOf(it->second->Description());
+ }
+
+ tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("StrongsNumbers")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if ((it = mainmgr->Modules.find(tmpval)) != mainmgr->Modules.end()) {
+ Optionsfrm->strongsNumsCB->ItemIndex = Optionsfrm->strongsNumsCB->Items->IndexOf(it->second->Description());
+ }
+ //*********************************
+ // Show Dialog Box
+ if (Optionsfrm->ShowModal() == mrOk) {
+ // Save Preferences settings :)
+ emap = optionsconf->Sections["Appearance"];
+ emap.erase("AutoVSColor"); emap.insert(ConfigEntMap::value_type("AutoVSColor", IntToStr((Optionsfrm->AutoVSColor->Checked)?1:0).c_str()));
+ emap.erase("CurrentVSColor"); emap.insert(ConfigEntMap::value_type("CurrentVSColor", IntToStr(Optionsfrm->ColorDialogVS->Color).c_str()));
+ emap.erase("StrongsColor"); emap.insert(ConfigEntMap::value_type("StrongsColor", IntToStr(Optionsfrm->ColorDialogStrongs->Color).c_str()));
+ emap.erase("MorphColor"); emap.insert(ConfigEntMap::value_type("MorphColor", IntToStr(Optionsfrm->ColorDialogMorph->Color).c_str()));
+ emap.erase("VSNumberColor"); emap.insert(ConfigEntMap::value_type("VSNumberColor", IntToStr(Optionsfrm->ColorDialogVerseNum->Color).c_str()));
+ emap.erase("FieldColor"); emap.insert(ConfigEntMap::value_type("FieldColor", IntToStr(Optionsfrm->ColorDialogField->Color).c_str()));
+
+ emap.erase("TextBackColor"); emap.insert(ConfigEntMap::value_type("TextBackColor", IntToStr(Optionsfrm->FontDialogText->BackColor).c_str()));
+ emap.erase("CommentBackColor"); emap.insert(ConfigEntMap::value_type("CommentBackColor", IntToStr(Optionsfrm->FontDialogComment->BackColor).c_str()));
+ emap.erase("LDBackColor"); emap.insert(ConfigEntMap::value_type("LDBackColor", IntToStr(Optionsfrm->FontDialogLD->BackColor).c_str()));
+ emap.erase("PopupBackColor"); emap.insert(ConfigEntMap::value_type("PopupBackColor", IntToStr(Optionsfrm->FontDialogPopup->BackColor).c_str()));
+
+ emap.erase("TextFontName"); emap.insert(ConfigEntMap::value_type("TextFontName", (Optionsfrm->FontDialogText->Font->Name).c_str()));
+ emap.erase("CommentFontName"); emap.insert(ConfigEntMap::value_type("CommentFontName", (Optionsfrm->FontDialogComment->Font->Name).c_str()));
+ emap.erase("LDFontName"); emap.insert(ConfigEntMap::value_type("LDFontName", (Optionsfrm->FontDialogLD->Font->Name).c_str()));
+ emap.erase("PopupFontName"); emap.insert(ConfigEntMap::value_type("PopupFontName", (Optionsfrm->FontDialogPopup->Font->Name).c_str()));
+
+ emap.erase("TextFontSize"); emap.insert(ConfigEntMap::value_type("TextFontSize", IntToStr(Optionsfrm->FontDialogText->Font->Size).c_str()));
+ emap.erase("CommentFontSize"); emap.insert(ConfigEntMap::value_type("CommentFontSize", IntToStr(Optionsfrm->FontDialogComment->Font->Size).c_str()));
+ emap.erase("LDFontSize"); emap.insert(ConfigEntMap::value_type("LDFontSize", IntToStr(Optionsfrm->FontDialogLD->Font->Size).c_str()));
+ emap.erase("PopupFontSize"); emap.insert(ConfigEntMap::value_type("PopupFontSize", IntToStr(Optionsfrm->FontDialogPopup->Font->Size).c_str()));
+
+ emap.erase("TextFontColor"); emap.insert(ConfigEntMap::value_type("TextFontColor", IntToStr(Optionsfrm->FontDialogText->Font->Color).c_str()));
+ emap.erase("CommentFontColor"); emap.insert(ConfigEntMap::value_type("CommentFontColor", IntToStr(Optionsfrm->FontDialogComment->Font->Color).c_str()));
+ emap.erase("LDFontColor"); emap.insert(ConfigEntMap::value_type("LDFontColor", IntToStr(Optionsfrm->FontDialogLD->Font->Color).c_str()));
+ emap.erase("PopupFontColor"); emap.insert(ConfigEntMap::value_type("PopupFontColor", IntToStr(Optionsfrm->FontDialogPopup->Font->Color).c_str()));
+
+ emap.erase("locale"); emap.insert(ConfigEntMap::value_type("locale", (const char *)Optionsfrm->localeCB->Items->Objects[Optionsfrm->localeCB->ItemIndex]));
+ optionsconf->Sections["Appearance"] = emap;
+
+ emap = optionsconf->Sections["ModDefaults"];
+
+ if (Optionsfrm->greekDefCB->ItemIndex > -1) {
+ emap.erase("GreekDef"); emap.insert(ConfigEntMap::value_type("GreekDef", (const char *)Optionsfrm->greekDefCB->Items->Objects[Optionsfrm->greekDefCB->ItemIndex]));
+ }
+ if (Optionsfrm->greekParseCB->ItemIndex > -1) {
+ emap.erase("GreekParse"); emap.insert(ConfigEntMap::value_type("GreekParse", (const char *)Optionsfrm->greekParseCB->Items->Objects[Optionsfrm->greekParseCB->ItemIndex]));
+ }
+ if (Optionsfrm->hebrewDefCB->ItemIndex > -1) {
+ emap.erase("HebrewDef"); emap.insert(ConfigEntMap::value_type("HebrewDef", (const char *)Optionsfrm->hebrewDefCB->Items->Objects[Optionsfrm->hebrewDefCB->ItemIndex]));
+ }
+ if (Optionsfrm->hebrewParseCB->ItemIndex > -1) {
+ emap.erase("HebrewParse"); emap.insert(ConfigEntMap::value_type("HebrewParse", (const char *)Optionsfrm->hebrewParseCB->Items->Objects[Optionsfrm->hebrewParseCB->ItemIndex]));
+ }
+ if (Optionsfrm->dailyDefaultCB->ItemIndex > -1) {
+ emap.erase("DailyDevotion"); emap.insert(ConfigEntMap::value_type("DailyDevotion", (const char *)Optionsfrm->dailyDefaultCB->Items->Objects[Optionsfrm->dailyDefaultCB->ItemIndex]));
+ }
+ if (Optionsfrm->strongsNumsCB->ItemIndex > -1) {
+ emap.erase("StrongsNumbers"); emap.insert(ConfigEntMap::value_type("StrongsNumbers", (const char *)Optionsfrm->strongsNumsCB->Items->Objects[Optionsfrm->strongsNumsCB->ItemIndex]));
+ }
+ optionsconf->Sections["ModDefaults"] = emap;
+
+
+ emap = optionsconf->Sections["Bookmarks"];
+ emap.erase("AutoSavePersonal"); emap.insert(ConfigEntMap::value_type("AutoSavePersonal", IntToStr((Optionsfrm->AutoBMPersonal->Checked)?1:0).c_str()));
+ emap.erase("AutoSaveOther"); emap.insert(ConfigEntMap::value_type("AutoSaveOther", IntToStr((Optionsfrm->AutoBMOther->Checked)?1:0).c_str()));
+ optionsconf->Sections["Bookmarks"] = emap;
+
+ emap = optionsconf->Sections["Layout"];
+ emap.erase("AutoSaveLayout"); emap.insert(ConfigEntMap::value_type("AutoSaveLayout", IntToStr((Optionsfrm->AutoLayout->Checked)?1:0).c_str()));
+ optionsconf->Sections["Layout"] = emap;
+
+ emap = optionsconf->Sections["Hints"];
+ emap.erase("On"); emap.insert(ConfigEntMap::value_type("On", IntToStr((Optionsfrm->HintPopups->Checked)?1:0).c_str()));
+ optionsconf->Sections["Hints"] = emap;
+
+ emap = optionsconf->Sections["HintStrongs"];
+ emap.erase("On"); emap.insert(ConfigEntMap::value_type("On", IntToStr((Optionsfrm->HintStrongs->Checked)?1:0).c_str()));
+ optionsconf->Sections["HintStrongs"] = emap;
+
+ emap = optionsconf->Sections["General"];
+ emap.erase("TipOfTheDay"); emap.insert(ConfigEntMap::value_type("TipOfTheDay", (Optionsfrm->devSplashCB->Checked)?"Devotional":""));
+ emap.erase("DevsAsDicts"); emap.insert(ConfigEntMap::value_type("DevsAsDicts", (Optionsfrm->devsAsDictsCB->Checked)?"true":"false"));
+ emap.erase("GlosAsDicts"); emap.insert(ConfigEntMap::value_type("GlosAsDicts", (Optionsfrm->glosAsDictsCB->Checked)?"true":"false"));
+ optionsconf->Sections["General"] = emap;
+
+ optionsconf->Save();
+ RefRTFHeaders();
+ }
+
+ tmpval = ((eit = optionsconf->Sections["Hints"].find("On")) != optionsconf->Sections["Hints"].end())? (*eit).second : (string)"1";
+
+ if (atoi(tmpval.c_str()))
+ Form1->ShowHint = true;
+ else Form1->ShowHint = false;
+
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("locale")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"en_us";
+ i12ize(tmpval.c_str());
+ DefaultVSKey->setLocale(tmpval.c_str());
+ fillVKeySelector(DefaultVSKey);
+ TextKeyChanged();
+ RefreshActiveSheet(LexDictPageControl);
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::cbBookChange(TObject *Sender)
+{
+ CHBox->Text = "1";
+ VSBox->Text = "1";
+ if (Screen->ActiveControl == cbBook)
+ btnLookupClick(Sender);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormCreate(TObject *Sender)
+{
+// Application->OnHint = DisplayHint;
+// Application->ShowHint = true;
+// this->ShowHint = true;
+// nsresult rv;
+// rv = NS_InitEmbedding(nsnull, nsnull);
+
+ Application->OnMessage = AppMessage;
+ Application->Title = "The SWORD Project for Windows";
+}
+
+
+void TForm1::AddVerseChoices(TPopupMenu *menu, const char *buf, TRxRichEdit *rtf) {
+ TMenuItem *newitem;
+
+ tmpVerseList = DefaultVSKey->ParseVerseList((char *)buf, *DefaultVSKey);
+
+ ModMap::iterator target;
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ char *keytext = 0; // check for and remove return at end of keytext
+ stdstr(&keytext, (*(*target).second).KeyText());
+ if (keytext[strlen(keytext)-1] == '\r')
+ keytext[strlen(keytext)-1] = 0;
+
+ tmpVerseListCaption = String("VerseList from- ") + (*target).first.c_str() + ": " + keytext;
+ delete [] keytext; // ---------------------------------
+ }
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "-";
+ menu->Items->Add(newitem);
+ newitem = new TMenuItem(menu);
+ newitem->Caption = _tr("Create Verse List");
+ newitem->Hint = _tr("Create a New Verse List Window");
+ newitem->Default = true;
+ newitem->OnClick = createVerseList;
+ menu->Items->Add(newitem);
+ int breakcnt = 3;
+ while (!tmpVerseList.Error()) {
+ breakcnt++;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = (const char *)tmpVerseList;
+ newitem->OnClick = BookmarkItemClick;
+ if (!(breakcnt%15))
+ newitem->Break = mbBreak;
+ menu->Items->Add(newitem);
+ tmpVerseList++;
+ }
+
+
+
+}
+
+
+void __fastcall TForm1::PopupMenuPopup(TObject *Sender) {
+
+ int versestart, verseend;
+ TPopupMenu *menu = (TPopupMenu *)Sender;
+ int staticMenuItemsCount = 0;
+ TMenuItem *newitem;
+
+ if (menu == PopupMenu1)
+ staticMenuItemsCount = 4;
+ else if (menu == PopupMenu2)
+ staticMenuItemsCount = 3;
+ else if (menu == PopupMenu3)
+ staticMenuItemsCount = 7;
+
+ while (menu->Items->Count > staticMenuItemsCount)
+ menu->Items->Delete(staticMenuItemsCount);
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (clickText.Length()) {
+ string highlight = Trim(clickText).c_str();
+ tmpVerseList = DefaultVSKey->ParseVerseList((char *)highlight.c_str(), *DefaultVSKey);
+ if (tmpVerseList.Count())
+ AddVerseChoices(menu, highlight.c_str(), rtf);
+ }
+ else if (!rtf->SelLength) {
+ int entrylen = strlen(rtf->Text.c_str());
+ char *entrytext = new char [ entrylen + 1 ];
+ int selstart = rtf->SelStart;
+ strcpy(entrytext, rtf->Text.c_str());
+// for (versestart = rtf->SelStart; ((versestart)&&(rtf->Text[versestart] != '#')); versestart--);
+ for (versestart = selstart; ((versestart)&&(entrytext[versestart] != '#')); versestart--);
+ if (versestart) {
+ for (verseend = versestart; ((verseend < entrylen) && (entrytext[verseend] != '|')); verseend++);
+ if ((verseend < entrylen) && (verseend > selstart)) {
+ int len = (verseend - versestart) + 1;
+ char *buf = new char [ len + 1 ];
+ memset(buf, 0 , len + 1);
+ strncpy(buf, &entrytext[versestart+1], len - 2); // strip the # and | from the string
+ int buflen = strlen(buf);
+ for (int i = 0; i < buflen; i++) {
+ if ((buf[i] == 10) || (buf[i] == 13))
+ buf[i] = ' ';
+ }
+ AddVerseChoices(menu, buf, rtf);
+ delete [] buf;
+ }
+ }
+ delete [] entrytext;
+ }
+ else {
+ string highlight = Trim(rtf->SelText).c_str();
+ tmpVerseList = DefaultVSKey->ParseVerseList((char *)highlight.c_str(), *DefaultVSKey);
+ if (tmpVerseList.Count())
+ AddVerseChoices(menu, highlight.c_str(), rtf);
+
+// newitem = new TMenuItem(menu);
+// newitem->Caption = "Verse Lookup";
+// newitem->Hint = "Attempt to lookup highlighted text as a verse";
+// newitem->OnClick = verseLookupClick;
+// menu->Items->Add(newitem);
+ }
+ clickText = "";
+
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::createVerseList(TObject *Sender)
+{
+ TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList);
+ tmpForm->Caption = tmpVerseListCaption;
+ tmpForm->Show();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::freeHandLookupoldKeyPress(TObject *Sender, char &Key)
+{
+ if (Key == '\r') {
+ ListKey tmpVerseList = DefaultVSKey->ParseVerseList(freeHandLookup->Text.c_str(), *DefaultVSKey);
+
+ if (tmpVerseList.Count()) {
+ int index = freeHandLookup->Items->IndexOf(freeHandLookup->Text);
+ freeHandLookup->Items->Insert(0, freeHandLookup->Text);
+
+ if (index >= 0)
+ freeHandLookup->Items->Delete(index+1);
+
+ freeHandLookup->ItemIndex = 0;
+
+ if (tmpVerseList.Count() > 1) {
+ TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList);
+ tmpForm->Caption = _tr("User Verse List");
+ tmpForm->Show();
+ }
+
+ tmpVerseList = TOP;
+ *DefaultVSKey = tmpVerseList;
+ TextKeyChanged();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::RTFMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) {
+ ((TWinControl *)Sender)->SetFocus();
+ TRichEdit *rtf = (TRichEdit *)Sender;
+ if (Button == mbRight) {
+ if (!rtf->SelLength)
+ SendMessage(rtf->Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(X, Y));
+ TPoint menup, point;
+ point.x = X;
+ point.y = Y;
+ menup = rtf->ClientToScreen(point);
+ rtf->PopupMenu->Popup(menup.x, menup.y);
+ }
+}
+
+void __fastcall TForm1::RTFURLClick(TObject *Sender, const AnsiString URLText, TMouseButton Button) {
+ if (!renderingHint) {
+ TRichEdit *rtf = (TRichEdit *)Sender;
+ clickText = URLText;
+ rtf->PopupMenu->Popup(Mouse->CursorPos.x, Mouse->CursorPos.y);
+ }
+}
+
+
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::EditEntry1Click(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module;
+// EditEntry->RichEdit1->Text = rtf->Text;
+ ModMap::iterator target;
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ EditEntryForm->Module = module = (*target).second;
+ EditEntryForm->RTFDisplay = rtf;
+ }
+ else EditEntryForm->Module = module = 0;
+ EditEntryForm->ShowModal();
+ if (EditEntryForm->ResultBuf) {
+ if (module)
+// DictKeyEdit->Text = EditEntry->ResultBuf; // for testing purposes
+ *module << EditEntryForm->ResultBuf;
+ }
+ RefreshActiveSheet(CommentaryPageControl);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::DeleteEntry1Click(TObject *Sender)
+{
+ if (MessageBox(Handle, "Are you sure you wish to delete this entry?", "Delete Entry", MB_YESNO) == IDYES) {
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module;
+ ModMap::iterator target;
+
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ module = (*target).second;
+ module->deleteEntry();
+ }
+ RefreshActiveSheet(CommentaryPageControl);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::LinktoVerse1Click(TObject *Sender)
+{
+ if (VerseSelFrm->ShowModal() == mrOk) {
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module;
+ ModMap::iterator target;
+ SWKey *linkkey = new VerseKey(VerseSelFrm->Panel2->Caption.c_str());
+
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ module = (*target).second;
+ *module << linkkey;
+ }
+ RefreshActiveSheet(CommentaryPageControl);
+ }
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::GlobalOptionChange(TObject *Sender)
+{
+// ModMap::iterator it;
+// SectionMap::iterator sit;
+// ConfigEntMap::iterator eit, eitend;
+ ConfigEntMap::iterator eit;
+ TMenuItem *menuchoice = (TMenuItem *)Sender;
+ const char *source = menuchoice->Caption.c_str();
+ char *value = new char [strlen(source) + 1];
+ int k = 0;
+ for (unsigned int j = 0; j < strlen(source); j++) {
+ if (source[j] != '&')
+ value[k++] = source[j];
+ }
+ value[k] = 0;
+ source = menuchoice->Parent->Caption.c_str();
+ char *option = new char [strlen(source) + 1];
+ k = 0;
+ for (unsigned int j = 0; j < strlen(source); j++) {
+ if (source[j] != '&')
+ option[k++] = source[j];
+ }
+ option[k] = 0;
+ mainmgr->setGlobalOption(option, value);
+
+ if ((!stricmp(option, "Strong's Numbers")) && (!stricmp(value, "On"))) {
+ string curText = TextPageControl->ActivePage->Caption.c_str();
+ if (!hasFeature(mainmgr, curText.c_str(), "StrongsNumbers")) {
+ string tmpval = ((eit = optionsconf->Sections["ModDefaults"].find("StrongsNumbers")) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ for (int i = 0; i < TextPageControl->PageCount; i++) {
+ if (!stricmp(TextPageControl->Pages[i]->Caption.c_str(), tmpval.c_str())) {
+ TextPageControl->ActivePageIndex = i;
+ break;
+ }
+ }
+ }
+ }
+
+
+ delete [] option;
+ delete [] value;
+ TextKeyChanged();
+}
+//---------------------------------------------------------------------------
+
+
+
+void __fastcall TForm1::OptionShowVals(TObject *Sender)
+{
+ TMenuItem *menuChoice = (TMenuItem *)Sender;
+
+ string option = menuChoice->Caption.c_str();
+ int k = 0;
+ const char *source = option.c_str();
+ char *caption = new char [strlen(source) + 1];
+ for (unsigned int j = 0; j < strlen(source); j++) {
+ if (source[j] != '&')
+ caption[k++] = source[j];
+ }
+ caption[k] = 0;
+
+ string value = mainmgr->getGlobalOption(caption);
+ delete [] caption;
+ for (int i = 0; i < menuChoice->Count; i++) {
+ int k = 0;
+ char *source = menuChoice->Items[i]->Caption.c_str();
+ char *caption = new char [strlen(source) + 1];
+ for (unsigned int j = 0; j < strlen(source); j++) {
+ if (source[j] != '&')
+ caption[k++] = source[j];
+ }
+ caption[k] = 0;
+ if (!stricmp(caption, value.c_str()))
+ menuChoice->Items[i]->Checked = true;
+ else menuChoice->Items[i]->Checked = false;
+ delete [] caption;
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::Contents1Click(TObject *Sender)
+{
+ string helpDir;
+ ConfigEntMap::iterator it = optionsconf->Sections["Help"].find("Directory");
+ if (it != optionsconf->Sections["Help"].end())
+ helpDir = (*it).second;
+ else helpDir = ".\\help";
+
+ string helpExe = helpDir + "\\sword.chm";
+
+ if ((int)ShellExecute(this->Handle, "open", helpExe.c_str(), NULL, NULL, SW_SHOWNORMAL) < 33) {
+ helpExe = helpDir + "\\index.html";
+ ShellExecute(this->Handle, "open", helpExe.c_str(), NULL, NULL, SW_SHOWNORMAL);
+ }
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
+{
+ int saveCount = 5;
+ closing = true;
+
+ ConfigEntMap section;
+ ConfigEntMap::iterator entryIt;
+
+
+ section = layoutconf->Sections["History"];
+ entryIt = section.find("SearchSaveCount");
+ if (entryIt != section.end())
+ saveCount = atoi(entryIt->second.c_str());
+ else section.insert(ConfigEntMap::value_type("SearchSaveCount", "5"));
+
+ section.erase("SearchText");
+ for (int loop = 0; ((loop < saveCount) && (loop < searchForm->SearchText->Items->Count)); loop++) {
+ WideString entry = searchForm->SearchText->Items->Strings[loop];
+ section.insert(ConfigEntMap::value_type("SearchText", WideStringToUTF8(entry).c_str()));
+ }
+
+ entryIt = section.find("LookupSaveCount");
+ if (entryIt != section.end())
+ saveCount = atoi(entryIt->second.c_str());
+ else section.insert(ConfigEntMap::value_type("LookupSaveCount", "5"));
+
+ section.erase("LookupText");
+ for (int loop = 0; ((loop < saveCount) && (loop < freeHandLookup->Items->Count)); loop++)
+ section.insert(ConfigEntMap::value_type("LookupText", freeHandLookup->Items->Strings[loop].c_str()));
+
+ section.erase("LastVerse");
+ section.insert(ConfigEntMap::value_type("LastVerse", (const char *)*DefaultVSKey));
+
+ section.erase("LastTextModule");
+ section.insert(ConfigEntMap::value_type("LastTextModule", TextPageControl->ActivePage->Caption.c_str()));
+
+ section.erase("LastComModule");
+ section.insert(ConfigEntMap::value_type("LastComModule", CommentaryPageControl->ActivePage->Caption.c_str()));
+
+ layoutconf->Sections["History"] = section;
+ layoutconf->Save();
+
+// NS_TermEmbedding();
+
+ section = optionsconf->Sections["Layout"];
+ entryIt = section.find("AutoSaveLayout");
+ if(entryIt != section.end()){
+ if(atoi(entryIt->second.c_str()))
+ SaveLayout1Click(this);
+ }
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::lbDictKeysOldClick(TObject *Sender)
+{
+ DictKeyEdit->Text = lbDictKeys->Items->Strings[lbDictKeys->ItemIndex];
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::HideShowModules1Click(TObject *Sender)
+{
+ ConfigEntMap *section;
+ TMenuItem *menuItem = (TMenuItem *)Sender;
+ TPopupMenu *menu = (TPopupMenu *)menuItem->GetParentMenu();
+ TComponent *comp = menu->PopupComponent;
+ TPageControl *pc = 0;
+
+ if ((comp == TextPageControl) || (comp == pnlText)) {
+ pc = TextPageControl;
+ section = &(*layoutconf)["TextView"];
+ }
+ if ((comp == CommentaryPageControl) || (comp == pnlComment)) {
+ pc = CommentaryPageControl;
+ section = &(*layoutconf)["CommentView"];
+ }
+ if ((comp == LexDictPageControl) || (comp == pnlDict)) {
+ pc = LexDictPageControl;
+ section = &(*layoutconf)["LDView"];
+ }
+
+ if (!pc) return; // assert pc
+
+ for (int i = 0; i < pc->PageCount; i++) {
+ string heading = pc->Pages[i]->Caption.c_str();
+ (*section)[heading.c_str()] = ((pc->Pages[i]->TabVisible) ? "true" : "false");
+ }
+ ModVisForm->mgr = mainmgr;
+ ModVisForm->section = section;
+ if (ModVisForm->ShowModal() == mrOk) {
+ for (int i = 0; i < pc->PageCount; i++) {
+ string heading = pc->Pages[i]->Caption.c_str();
+ pc->Pages[i]->TabVisible = ((*section)[heading.c_str()] == "true");
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::DevotionaloftheDay1Click(TObject *Sender) {
+ DevOfTheDay2->Show();
+}
+//---------------------------------------------------------------------------
+
+void dehtmlize(char *buf) {
+ bool deref = false;
+ int nums = 0;
+ while (*buf) {
+ if (deref) {
+ if (!isdigit(*buf))
+ deref = false;
+ else {
+ *buf = ' ';
+ nums++;
+ }
+ if (nums > 1)
+ deref = false;
+ }
+ if (*buf == '%') {
+ deref = true;
+ nums = 0;
+ *buf = ' ';
+ }
+ buf++;
+ }
+}
+
+void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender,
+ LPDISPATCH pDisp, TVariant *URL, TVariant *Flags,
+ TVariant *TargetFrameName, TVariant *PostData, TVariant *Headers,
+ TOLEBOOL *Cancel)
+{
+ AnsiString url = *URL;
+ string stuff = url.c_str();
+ char *offset = strstr(url.c_str(), "passage");
+ if (offset > 0) {
+ string verse = (offset+8);
+ char * buf = new char [ verse.length() + 1 ];
+ strcpy(buf, verse.c_str());
+ dehtmlize(buf);
+ (*Cancel) = true;
+ *DefaultVSKey = (buf);
+ TextKeyChanged();
+ delete [] buf;
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::InstallManager1Click(TObject *Sender)
+{
+ WinExec("InstallMgr.exe", SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+
+
+void TForm1::RefRTFHeaders()
+{
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit, eitend;
+ char textFont[128];
+ char commentFont[128];
+ char LDFont[128];
+ char tempTextFont[128];
+ char tempCommFont[128];
+ char tempLDFont[128];
+ char buf[1024];
+ TColor fieldColor;
+ string tmpval;
+ SWDispRTFChap* rtfDispChapter;
+ SWDispRTF* rtfDisp;
+
+ // Store fonts here: needed for being able to switch back to original font name if it changes
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("TextFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempTextFont, tmpval.c_str());
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("CommentFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempCommFont, tmpval.c_str());
+ tmpval = ((eit = optionsconf->Sections["Appearance"].find("LDFontName")) != optionsconf->Sections["Appearance"].end())? (*eit).second : (string)"Times New Roman";
+ strcpy(tempLDFont, tmpval.c_str());
+
+ // Change the panels attributes here
+ for (it = mainmgr->Modules.begin(); it != mainmgr->Modules.end(); it++) {
+ SWModule *module = it->second;
+ RTFDisp *disp = SWDYNAMIC_CAST(RTFDisp, module->Disp());
+ if (disp) {
+ rtfDisp = (SWDispRTF*) disp->editControl();
+ rtfDisp->recalcAppearance();
+ }
+ }
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end())
+ if ((*sit).second.find("LDBackColor") != (*sit).second.end())
+ lbDictKeys->Color = TColor((atoi((*(*sit).second.find("LDBackColor")).second.c_str())));
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end())
+ if ((*sit).second.find("LDFontColor") != (*sit).second.end())
+ lbDictKeys->Font->Color = TColor((atoi((*(*sit).second.find("LDFontColor")).second.c_str())));
+
+ // Change the text entry field color
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()){
+ if ((eit = (*sit).second.find("FieldColor")) != (*sit).second.end())
+ fieldColor = TColor(atoi((*eit).second.c_str()));
+ else fieldColor = clAqua;
+ }
+ cbBook->Color = fieldColor;
+ CHBox->Color = fieldColor;
+ VSBox->Color = fieldColor;
+ freeHandLookup->Color = fieldColor;
+ DictKeyEdit->Color = fieldColor;
+}
+
+
+void __fastcall TForm1::ApplicationEvents1Hint(TObject *Sender)
+{
+ StatusBar1->SimpleText = GetLongHint(Application->Hint);
+}
+
+
+void __fastcall TForm1::ApplicationEvents1ShowHint(AnsiString &HintStr,
+ bool &CanShow, THintInfo &HintInfo)
+{
+ ConfigEntMap::const_iterator const_eit;
+ string fontname;
+ char buf[1024];
+ static TRect lastRect(0,0,0,0);
+ bool selected = false;
+ bool link = false;
+ static WideString lastWord = "";
+ String verseList = "";
+ WideString targetWord;
+ // assert we are in a sword module rtf window and we're not grinding
+ if (HintInfo.HintControl == searchForm->resultsLV) {
+ HintStr = "";
+ }
+ if ((strncmp(HintInfo.HintControl->Name.c_str(), "TextRTF", 7)) &&
+ (strncmp(HintInfo.HintControl->Name.c_str(), "CommentRTF", 10)) &&
+ (strncmp(HintInfo.HintControl->Name.c_str(), "LexDictRTF", 10))) {
+ return;
+ }
+
+// Application->HintHidePause = HintDisplayTime;
+ HintInfo.HintWindowClass = __classid(THintWindow);
+
+ if (!Form1->Active)
+ return;
+
+ ConfigEntMap::iterator eit;
+ string tmpval = ((eit = optionsconf->Sections["HintStrongs"].find("On")) != optionsconf->Sections["HintStrongs"].end())? (*eit).second : (string)"1";
+
+ SWDispRTF *rtf = 0;
+ if (atoi(tmpval.c_str())) {
+ do {
+ ConfigEntMap::iterator eit;
+
+ HintInfo.HideTimeout = 32000;
+ HintInfo.HintWindowClass = __classid(TRTFHintWindow);
+ HintInfo.CursorRect = lastRect;
+ HintStr = "";
+
+ rtf = (SWDispRTF *)HintInfo.HintControl;
+
+ renderingHint = true;
+// HintTimer->Enabled = false;
+// HintTimer->Enabled = true;
+
+ if (!rtf->SelLength) {
+ SendMessage(rtf->Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(HintInfo.CursorPos.x, HintInfo.CursorPos.y));
+ selected = false;
+ targetWord = rtf->WordAtCursor();
+
+ int entrylen = strlen(rtf->Text.c_str());
+ char *entrytext = new char [ entrylen + 1 ];
+ int selstart = rtf->SelStart;
+ int versestart, verseend;
+ strcpy(entrytext, rtf->Text.c_str());
+ // for (versestart = rtf->SelStart; ((versestart)&&(rtf->Text[versestart] != '#')); versestart--);
+ for (versestart = selstart; ((versestart)&&(entrytext[versestart] != '#')); versestart--);
+ if (versestart) {
+ for (verseend = versestart; ((verseend < entrylen) && (entrytext[verseend] != '|')); verseend++);
+ if ((verseend < entrylen) && (verseend > selstart)) {
+ int len = (verseend - versestart) + 1;
+ char *buf = new char [ len + 1 ];
+ memset(buf, 0 , len + 1);
+ strncpy(buf, &entrytext[versestart+1], len - 2); // strip the # and | from the string
+ int buflen = strlen(buf);
+ for (int i = 0; i < buflen; i++) {
+ if ((buf[i] == 10) || (buf[i] == 13))
+ buf[i] = ' ';
+ }
+ verseList = buf;
+ delete [] buf;
+ }
+ }
+ delete [] entrytext;
+ }
+ else {
+ selected = true;
+ targetWord = rtf->SelText;
+ }
+
+// TPoint currentChar = rtf->GetCharPos(rtf->SelStart);
+ TPoint currentChar = rtf->ScreenToClient(Mouse->CursorPos);
+ HintInfo.CursorRect = TRect(TPoint(currentChar.x-15, currentChar.y-15), TPoint(currentChar.x+15, currentChar.y+15));
+ lastRect = HintInfo.CursorRect;
+
+
+// HintInfo.CursorRect = TRect(TPoint(currentChar.x-12, currentChar.y-12), TPoint(currentChar.x+12, currentChar.y+12));
+// HintInfo.HideTimeout = 65000;
+// HintInfo.ReshowTimeout = 2000;
+// if (!rtf->SelLength) {
+// rtf->SelLength = 1;
+ if (!selected) {
+ rtf->SelLength = 1;
+ if (rtf->SelAttributes->Link) {
+ link = true;
+ int saveStart = rtf->SelStart;
+ int last = -1;
+ while ((rtf->SelStart != last) && (rtf->SelAttributes->Link)) {
+ last = rtf->SelStart;
+ rtf->SelStart -= 1;
+ rtf->SelLength = 1;
+ }
+ int start = rtf->SelStart + 1;
+ rtf->SelStart++;
+ rtf->SelLength = 1;
+ last = -1;
+ while ((rtf->SelStart != last) && (rtf->SelAttributes->Link)) {
+ last = rtf->SelStart;
+ rtf->SelStart += 1;
+ rtf->SelLength = 1;
+ }
+ int len = (rtf->SelStart - start);
+ rtf->SelStart = saveStart;
+ verseList = rtf->GetTextRange(start, start+len);
+ }
+ rtf->SelLength = 0;
+ }
+ else {
+ if (rtf->SelAttributes->Link) {
+ link = true;
+ }
+ }
+
+ // use cache if same word
+ if (targetWord.Length() && (targetWord == lastWord) && (currentRTF == rtf)) {
+ HintStr = "reshow same text";
+ break;
+ }
+ currentRTF = rtf;
+ lastWord = targetWord;
+
+ // currently assume all links are verselists
+ if (verseList.Length()) {
+ ModMap::iterator it;
+ it = mainmgr->Modules.find(TextPageControl->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ SWModule *module = it->second;
+ ListKey verses = DefaultVSKey->ParseVerseList(verseList.c_str(), *DefaultVSKey, true);
+ if (verses.Count()) {
+ RTFHintForm->rtfDrawer->fillWithVerses(module, &verses, true, true, "Popup");
+ HintStr = "show rtf";
+ }
+ else HintStr = "";
+ break;
+ }
+ }
+
+ // see if strongs number
+ char preChar = (targetWord.Length()) ? targetWord[1] : 0;
+ targetWord = TrimJunk(targetWord);
+
+ // check if all digits (strongs)
+ int i;
+ for (i = 1; i <= targetWord.Length(); i++) {
+ if (!isdigit(targetWord[i]))
+ break;
+ }
+
+ if ((i == targetWord.Length()+1) && (i-1)) {
+ String feature = (DefaultVSKey->Testament() == 1)?"Hebrew":"Greek";
+ feature += (preChar == '(')?"Parse":"Def";
+ if (!strncmp(HintInfo.HintControl->Name.c_str(), "TextRTFLXX", 10))
+ feature = "GreekDef";
+ string tmpval = ((eit = optionsconf->Sections["ModDefaults"].find(feature.c_str())) != optionsconf->Sections["ModDefaults"].end())? (*eit).second : (string)"";
+ if (tmpval.size()) {
+ SWModule *defMod = mainmgr->Modules[tmpval];
+ if (!defMod) {
+ HintStr = "";
+ break;
+ }
+ defMod->SetKey(WideStringToUTF8(targetWord).c_str());
+ HintStr = defMod->RenderText();
+ defMod->SetKey(DefaultStrKey);
+
+ // Color attributes for the strongs portion of the hint are here.
+ // If the module uses it's own font load that else we will try the config file else we will use the default
+ RTFHintForm->rtfDrawer->module = defMod;
+ RTFHintForm->rtfDrawer->type = "Popup";
+ RTFHintForm->rtfDrawer->recalcAppearance();
+
+ if (HintStr.Length()) {
+ TMemoryStream *RTFStream = new TMemoryStream();
+ System::AnsiString newtext, tmptext;
+
+ newtext = RTFHintForm->rtfDrawer->RTFHeader;
+ newtext += RTFHintForm->rtfDrawer->RTFHeadMargin;
+ newtext += "\\pard \\nowidctlpar \\cf7\\f0 ";
+
+ tmptext = HintStr.c_str();
+ newtext += RTFHintForm->rtfDrawer->RTFVersePre + " " + tmptext + RTFHintForm->rtfDrawer->RTFVersePost;
+ newtext += RTFHintForm->rtfDrawer->RTFTrailer;
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ RTFHintForm->rtfDrawer->Lines->LoadFromStream(RTFStream);
+ RTFHintForm->rtfDrawer->Repaint();
+
+ delete RTFStream;
+ HintStr = "show rtf";
+ break;
+ }
+ }
+ }
+ HintStr = "";
+ } while (false);
+ if (!HintStr.Length())
+ lastWord = "";
+ }
+}
+//---------------------------------------------------------------------------
+
+
+__fastcall TRTFHintWindow::TRTFHintWindow(Classes::TComponent* AOwner)
+ : THintWindow(AOwner)
+{
+ Canvas->Font->Name = "Arial";
+ Canvas->Font->Color = clWindowText;
+}
+
+__fastcall TRTFHintWindow::~TRTFHintWindow(void) {
+// RTFHintForm->Hide();
+}
+
+
+//------------------------------------------------------------------------------------------//
+
+void __fastcall TRTFHintWindow::CreateParams(TCreateParams &Params)
+{
+ inherited::CreateParams(Params);
+
+ Params.Style = WS_POPUP;
+ Params.WindowClass.style = Params.WindowClass.style | CS_SAVEBITS;
+
+ if(NewStyleControls)
+ {
+ Params.ExStyle = WS_EX_TOOLWINDOW;
+ AddBiDiModeExStyle(Params.ExStyle);
+ }
+}
+//------------------------------------------------------------------------------------------//
+
+void __fastcall TRTFHintWindow::Paint(void)
+{
+ TRect Rect = ClientRect;
+
+ TColor penColor;
+ string strColor;
+ strColor = Form1->optionsconf->Sections["Appearance"]["PopupFontColor"];
+ if(strColor == "")
+ penColor = clBlack;
+ else
+ penColor = StrToInt((AnsiString)strColor.c_str());
+
+ TColor backColor;
+ strColor = Form1->optionsconf->Sections["Appearance"]["PopupBackColor"];
+ if(strColor == "")
+ backColor = 14680063;
+ else
+ backColor = StrToInt((AnsiString)strColor.c_str());
+
+ Canvas->Brush->Color = penColor;
+ Canvas->FillRect(Rect);
+
+ Rect.Left += 4;
+ Rect.Top += 4;
+ Rect.Right -= 4;
+ Rect.Bottom -= 4;
+
+ Frame3D(Canvas, Rect, clBtnShadow, clBtnHighlight, 1);
+
+ Canvas->Brush->Color = backColor;//TColor(0xB4CDBB);
+ Canvas->FillRect(Rect);
+
+
+ Graphics::TMetafile *AMetaFile= new Graphics::TMetafile();
+ Graphics::TMetafileCanvas *AMetaFileCanvas = new Graphics::TMetafileCanvas(AMetaFile, 0);
+ Rect = ClientRect;
+ Rect.Right -= 12;
+ Rect.Bottom -=12;
+ bool jagged = RTFHintForm->rtfDrawer->paintTo(AMetaFileCanvas->Handle, &Rect);
+ delete AMetaFileCanvas;
+ Canvas->Draw(7,7,AMetaFile);
+ delete AMetaFile;
+
+ if (jagged) {
+ int triCount = (Rect.Right/60) + 1;
+ Canvas->Pen->Color = penColor; //clBlack; // TColor(0xA4BDAB);
+ Canvas->Brush->Color = penColor; //clBlack;
+ int i;
+ for (i = 0; i < triCount; i++) {
+ TPoint points[3];
+ points[0].x = i * 60;
+ points[0].y = ClientRect.Bottom;
+ points[1].x = (i * 60) + 30;
+ points[1].y = ClientRect.Bottom-15;
+ points[2].x = (i+1) * 60;
+ points[2].y = ClientRect.Bottom;
+ Canvas->Polygon(points, 2);
+ }
+/*
+ Canvas->Pen->Color = clBlack;
+ TPoint points[4];
+ points[0].x = 0; points[0].y = Rect.Bottom-1;
+ points[1].x = Rect.Right; points[1].y = Rect.Bottom-1;
+ points[2].x = Rect.Right; points[2].y = Rect.Bottom;
+ points[3].x = 0; points[3].y = Rect.Bottom;
+ Canvas->Polygon(points, 3);
+*/
+ }
+
+// RTFHintForm->rtfDrawer->PaintTo(Canvas->Handle, 4, 4);
+
+// RTFHintForm->Repaint();
+// RTFHintForm->rtfDrawer->Repaint();
+// Graphics::TBitmap *hintBit = RTFHintForm->GetFormImage();
+// Clipboard()->Assign(hintBit);
+// Canvas->CopyRect(Rect, hintBit->Canvas, Rect);
+// delete hintBit;
+
+/*
+ Rect.Left += 1;
+ Rect.Top += 5;
+ Rect.Right -= 1;
+ Rect.Bottom -= 1;
+
+ DrawText( Canvas->Handle,
+ Caption.c_str(),
+ -1,
+ &Rect,
+ DT_RIGHT|DT_NOPREFIX|DT_WORDBREAK|DrawTextBiDiModeFlagsReadingOnly() );
+ */
+}
+//------------------------------------------------------------------------------------------//
+
+void __fastcall TRTFHintWindow::ActivateHint(const /*Windows::*/TRect& Rect,
+ const AnsiString AHint)
+{
+ inherited::ActivateHint(Rect, AHint);
+}
+//------------------------------------------------------------------------------------------//
+
+void __fastcall TRTFHintWindow::ActivateHintData(const /*Windows::*/TRect& Rect,
+ const AnsiString AHint,
+ void* AData)
+{
+ TRect newRect = Rect;
+ // for dual head monitors, be sure we're all on one monitor
+ TForm1::ClipOrCenterRectToMonitor(&newRect, MONITOR_CLIP);
+ inherited::ActivateHintData(newRect, AHint, AData);
+}
+//------------------------------------------------------------------------------------------//
+
+bool __fastcall TRTFHintWindow::IsHintMsg(tagMSG& Msg)
+{
+ bool retVal = inherited::IsHintMsg(Msg);
+ if (retVal)
+ Form1->renderingHint = false;
+ return retVal;
+}
+
+//------------------------------------------------------------------------------------------//
+
+/*Windows::*/TRect __fastcall TRTFHintWindow::CalcHintRect(int MaxWidth,
+ const AnsiString AHint,
+ void* AData)
+{
+ TRect Rect(0, 0, 0, 0); // EmptyRect asks for size
+
+ Graphics::TMetafile *AMetaFile= new Graphics::TMetafile();
+ Graphics::TMetafileCanvas *AMetaFileCanvas = new Graphics::TMetafileCanvas(AMetaFile, 0);
+ RTFHintForm->rtfDrawer->paintTo(AMetaFileCanvas->Handle, &Rect);
+ delete AMetaFileCanvas;
+ delete AMetaFile;
+
+ Rect.Right += 12;
+ Rect.Bottom += 12;
+ return Rect;
+}
+//------------------------------------------------------------------------------------------//
+
+
+void __fastcall TForm1::Print1Click(TObject *Sender)
+{
+ PrintForm->ShowModal();
+}
+//---------------------------------------------------------------------------
+
+
+
+void __fastcall TForm1::SearchForWord1Click(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ int wordstart;
+ int saveSelStart = rtf->SelStart;
+ WideString lookupKey;
+ ConfigEntMap::iterator eit;
+
+ if (!rtf->SelLength) {
+ lookupKey = rtf->WordAtCursor();
+ lookupKey = TrimJunk(lookupKey);
+
+ int entrylen = strlen(rtf->Text.c_str());
+ WideString entrytext = rtf->GetText();
+ int selstart = rtf->SelStart;
+ int versestart, verseend;
+ for (versestart = selstart; versestart; versestart--) {
+ if (!isdigit(entrytext[versestart]))
+ break;
+ }
+ if ((entrytext[versestart] == '<') ||
+ (entrytext[versestart] == '(')) {
+ for (verseend = versestart+1; (verseend < entrylen); verseend++) {
+ if (!isdigit(entrytext[verseend]))
+ break;
+ }
+ if ((entrytext[verseend] == '>') ||
+ (entrytext[verseend] == ')')) {
+ if ((verseend < entrylen) && (verseend > selstart)) {
+ int len = (verseend - versestart) + 1;
+ lookupKey = entrytext.SubString(versestart, len);
+ }
+ }
+ }
+ }
+ else {
+ lookupKey = TRxRichEditX::Trim(rtf->GetTextRange(rtf->SelStart, rtf->SelStart + rtf->SelLength));
+ }
+
+ searchForm->SearchText->Text = lookupKey;
+ searchForm->Show();
+}
+//---------------------------------------------------------------------------
+
+//
+// ClipOrCenterRectToMonitor
+//
+// The most common problem apps have when running on a
+// multimonitor system is that they "clip" or "pin" windows
+// based on the SM_CXSCREEN and SM_CYSCREEN system metrics.
+// Because of app compatibility reasons these system metrics
+// return the size of the primary monitor.
+//
+// This shows how you use the multi-monitor functions
+// to do the same thing.
+//
+void TForm1::ClipOrCenterRectToMonitor(LPRECT prc, UINT flags) {
+ HMONITOR hMonitor;
+ MONITORINFO mi;
+ RECT rc;
+ int w = prc->right - prc->left;
+ int h = prc->bottom - prc->top;
+
+ //
+ // get the nearest monitor to the passed rect.
+ //
+ hMonitor = MonitorFromRect(prc, MONITOR_DEFAULTTONEAREST);
+
+ //
+ // get the work area or entire monitor rect.
+ //
+ mi.cbSize = sizeof(mi);
+ GetMonitorInfo(hMonitor, &mi);
+
+ if (flags & MONITOR_WORKAREA)
+ rc = mi.rcWork;
+ else
+ rc = mi.rcMonitor;
+
+ //
+ // center or clip the passed rect to the monitor rect
+ //
+ if (flags & MONITOR_CENTER)
+ {
+ prc->left = rc.left + (rc.right - rc.left - w) / 2;
+ prc->top = rc.top + (rc.bottom - rc.top - h) / 2;
+ prc->right = prc->left + w;
+ prc->bottom = prc->top + h;
+ }
+ else
+ {
+ prc->left = max(rc.left, min(rc.right-w, prc->left));
+ prc->top = max(rc.top, min(rc.bottom-h, prc->top));
+ prc->right = prc->left + w;
+ prc->bottom = prc->top + h;
+ }
+}
+
+
+void TForm1::ClipOrCenterWindowToMonitor(HWND hwnd, UINT flags) {
+ RECT rc;
+ GetWindowRect(hwnd, &rc);
+ ClipOrCenterRectToMonitor(&rc, flags);
+ SetWindowPos(hwnd, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+}
+
diff --git a/apps/windoze/CBuilder5/BibleCS/mainfrm.dfm b/apps/windoze/CBuilder5/BibleCS/mainfrm.dfm
new file mode 100644
index 0000000..7a30ec1
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/mainfrm.dfm
@@ -0,0 +1,738 @@
+object Form1: TForm1
+ Left = 414
+ Top = 117
+ Width = 686
+ Height = 510
+ Caption = 'The SWORD Project'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -10
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ KeyPreview = True
+ Menu = MainMenu1
+ OldCreateOrder = True
+ Position = poDefault
+ Scaled = False
+ ShowHint = True
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnKeyDown = FormKeyDown
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Splitter2: TSplitter
+ Left = 0
+ Top = 282
+ Width = 678
+ Height = 5
+ Cursor = crVSplit
+ Align = alTop
+ ResizeStyle = rsUpdate
+ end
+ object pnlTextCom: TPanel
+ Left = 0
+ Top = 46
+ Width = 678
+ Height = 236
+ Align = alTop
+ BevelOuter = bvNone
+ Caption = 'pnlTextCom'
+ TabOrder = 0
+ object Splitter1: TSplitter
+ Left = 368
+ Top = 0
+ Width = 5
+ Height = 236
+ Cursor = crHSplit
+ ResizeStyle = rsUpdate
+ end
+ object pnlText: TPanel
+ Left = 0
+ Top = 0
+ Width = 368
+ Height = 236
+ Align = alLeft
+ BevelOuter = bvNone
+ Constraints.MinHeight = 10
+ Constraints.MinWidth = 10
+ PopupMenu = PopupMenu4
+ TabOrder = 0
+ object TextPageControl: TPageControl
+ Left = 0
+ Top = 0
+ Width = 368
+ Height = 236
+ Hint = 'Biblical Texts'
+ Align = alClient
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -9
+ Font.Name = 'Arial'
+ Font.Style = []
+ HotTrack = True
+ MultiLine = True
+ ParentFont = False
+ PopupMenu = PopupMenu4
+ TabHeight = 14
+ TabOrder = 0
+ OnChange = TextPageControlChange
+ end
+ end
+ object pnlComment: TPanel
+ Left = 373
+ Top = 0
+ Width = 305
+ Height = 236
+ Align = alClient
+ BevelOuter = bvNone
+ Constraints.MinHeight = 10
+ Constraints.MinWidth = 10
+ PopupMenu = PopupMenu4
+ TabOrder = 1
+ object CommentaryPageControl: TPageControl
+ Left = 0
+ Top = 0
+ Width = 305
+ Height = 236
+ Hint = 'Commentaries'
+ Align = alClient
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -9
+ Font.Name = 'Arial'
+ Font.Style = []
+ HotTrack = True
+ MultiLine = True
+ ParentFont = False
+ PopupMenu = PopupMenu4
+ TabHeight = 14
+ TabOrder = 0
+ OnChange = CommentaryPageControlChange
+ end
+ end
+ end
+ object pnlDict: TPanel
+ Left = 0
+ Top = 287
+ Width = 678
+ Height = 162
+ Align = alClient
+ BevelOuter = bvNone
+ Constraints.MinHeight = 10
+ Constraints.MinWidth = 10
+ PopupMenu = PopupMenu4
+ TabOrder = 1
+ object Splitter3: TSplitter
+ Left = 488
+ Top = 0
+ Width = 5
+ Height = 162
+ Cursor = crHSplit
+ Align = alRight
+ end
+ object LexDictPageControl: TPageControl
+ Left = 0
+ Top = 0
+ Width = 488
+ Height = 162
+ Hint = 'Lexicons / Dictionaries'
+ Align = alClient
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -9
+ Font.Name = 'Arial'
+ Font.Style = []
+ HotTrack = True
+ MultiLine = True
+ ParentFont = False
+ PopupMenu = PopupMenu4
+ TabHeight = 14
+ TabOrder = 0
+ OnChange = LexDictPageControlChange
+ end
+ object Panel2: TPanel
+ Left = 493
+ Top = 0
+ Width = 185
+ Height = 162
+ Align = alRight
+ Caption = 'Panel2'
+ TabOrder = 1
+ object DictKeyEditOld: TRichEdit
+ Left = 1
+ Top = 1
+ Width = 183
+ Height = 24
+ Align = alTop
+ Color = clAqua
+ MaxLength = 128
+ PlainText = True
+ TabOrder = 0
+ WantReturns = False
+ WordWrap = False
+ OnChange = DictKeyEditOldChange
+ end
+ object lbDictKeysOld: TListBox
+ Left = 1
+ Top = 25
+ Width = 183
+ Height = 136
+ Align = alClient
+ ItemHeight = 13
+ TabOrder = 1
+ OnClick = lbDictKeysOldClick
+ end
+ end
+ end
+ object StatusBar1: TStatusBar
+ Left = 0
+ Top = 449
+ Width = 678
+ Height = 15
+ Panels = <>
+ SimplePanel = True
+ end
+ object CoolBar1: TCoolBar
+ Left = 0
+ Top = 0
+ Width = 678
+ Height = 46
+ AutoSize = True
+ Bands = <
+ item
+ Control = ToolBar2
+ ImageIndex = -1
+ MinHeight = 40
+ Width = 106
+ end
+ item
+ Break = False
+ Control = Panel1
+ ImageIndex = -1
+ MinHeight = 42
+ Width = 250
+ end
+ item
+ Break = False
+ Control = ToolBar1
+ ImageIndex = -1
+ Width = 314
+ end>
+ object BackBtnImage: TImage
+ Left = 16
+ Top = 0
+ Width = 38
+ Height = 34
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D61701E030000424D1E0300000000000076000000280000002600
+ 0000220000000100040000000000A80200000000000000000000100000001000
+ 0000FFFFFF00FFCFCE00B5AECE00848284009CFF31002120210000FF00008482
+ 0000008200003934000000000000000000000000000000000000000000000000
+ 0000777777777777777777777777777777777777770077777777777777777777
+ 777777777777A77777007777777777777777777777777777777A777777007777
+ 7AA7AAA77AA77AA77AAA77A777A7777777007777777A777A7A7A7A77A777A7A7
+ 77A7777777007777777A777A7A7AAA77A777A7AA7A77777777007777777A777A
+ 7A777A77A777777AAA77777777007777777A77AA77A77A77A777777A77A77777
+ 77007777777AAAA777A77A77A777A77AA77A777777007777777A77AA777A7A77
+ 7A77A77A7A7A777777007777777A777A7777AA7777AAA77A77AA777777007777
+ 777A777A777777777777777A77777777770077777AAAAAA7777777775577777A
+ 777777777700777777777777777777768577777A777777777700777777777777
+ 7777776868777777A777777777007777777777777777768688777777A7777777
+ 77007777777777777777686868777777A7777777770077777777777777768686
+ 88777777AA777777770077777777777777686868687777777777777777007777
+ 7777777776868686868697777777777777007777777777776868686868683777
+ 7777777777007777777777768686868686865777777777777700777777777778
+ 6848686868685777777777777700777777777774214141616161577777777777
+ 7700777777777777421414161616377777777777770077777777777774214141
+ 6161977777777777770077777777777777421414187777777777777777007777
+ 7777777777742141687777777777777777007777777777777777421418777777
+ 7777777777007777777777777777742168777777777777777700777777777777
+ 7777774218777777777777777700777777777777777777742577777777777777
+ 7700777777777777777777774377777777777777770077777777777777777777
+ 77777777777777777700}
+ Transparent = True
+ Visible = False
+ end
+ object SearchBtnImage: TImage
+ Left = 56
+ Top = 0
+ Width = 38
+ Height = 34
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D61701E030000424D1E0300000000000076000000280000002600
+ 0000220000000100040000000000A80200000000000000000000100000001000
+ 0000FFFFFF00F2F5FF00FFF7E100BAC0CF007E828F00DBB97700C4862300F6FF
+ 0C0002000600B5AECE0000000000000000000000000000000000000000000000
+ 0000999999999999999999999999999999998999990099999999999999999999
+ 9999999999999899990099999999999999999999999999999999989999009988
+ 8999888998899889899999888998998999009899989889989898989989999899
+ 9898999899009899989899989898889988999899989889989900999998988899
+ 9899989988999899999889998900999989989988998998998899989999988899
+ 8900998899989998998998998989989998988899890098899999899899989898
+ 8888998998998989890098999999988999998899989899988899899889009889
+ 8999999999999999999999999999899999009988899998889999999999999999
+ 9999899999009999999986668999999999999999999989999900999999996776
+ 6899999999999999999989999900999999995677868999999999999999999899
+ 9900999999999568786899999999999999999899990099999999995687868999
+ 9999999999999889990099999999999568744844888889999999999999009999
+ 9999999956734488888888899999999999009999999999999561488822222288
+ 9999999999009999999999999953888222222228899999999900999999999999
+ 9998882222222222899999999900999999999999999882222222222228999999
+ 9900999999999999999882222222222224999999990099999999999999984222
+ 2222222224999999990099999999999999984222222222222499999999009999
+ 9999999999984222222222222499999999009999999999999998422222222222
+ 2499999999009999999999999999822222222222499999999900999999999999
+ 9999892222222222499999999900999999999999999994922222222499999999
+ 9900999999999999999999442222244999999999990099999999999999999999
+ 44444999999999999900}
+ Transparent = True
+ Visible = False
+ end
+ object ToolBar2: TToolBar
+ Left = 9
+ Top = 1
+ Width = 93
+ Height = 40
+ AutoSize = True
+ ButtonHeight = 40
+ ButtonWidth = 45
+ EdgeBorders = []
+ Flat = True
+ Images = ImageList1
+ TabOrder = 0
+ object ToolButton3: TToolButton
+ Left = 0
+ Top = 0
+ Hint = 'Go Back To Previous Location'
+ Caption = 'Back'
+ ImageIndex = 0
+ OnClick = BackbtnClick
+ end
+ object ToolButton4: TToolButton
+ Left = 45
+ Top = 0
+ Hint = 'Bring Up Search Window'
+ Caption = 'ToolButton4'
+ ImageIndex = 1
+ OnClick = NewSearchWindow1Click
+ end
+ end
+ object Panel1: TPanel
+ Left = 117
+ Top = 0
+ Width = 237
+ Height = 42
+ BevelOuter = bvNone
+ TabOrder = 2
+ object btnLookup: TSpeedButton
+ Left = 212
+ Top = 0
+ Width = 21
+ Height = 21
+ Hint = 'Lookup'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00555555555555
+ 555555555555555555555555555555555555555555FF55555555555559055555
+ 55555555577FF5555555555599905555555555557777F5555555555599905555
+ 555555557777FF5555555559999905555555555777777F555555559999990555
+ 5555557777777FF5555557990599905555555777757777F55555790555599055
+ 55557775555777FF5555555555599905555555555557777F5555555555559905
+ 555555555555777FF5555555555559905555555555555777FF55555555555579
+ 05555555555555777FF5555555555557905555555555555777FF555555555555
+ 5990555555555555577755555555555555555555555555555555}
+ NumGlyphs = 2
+ OnClick = btnLookupClick
+ end
+ object cbBook: TComboBox
+ Left = 0
+ Top = 0
+ Width = 121
+ Height = 21
+ Style = csDropDownList
+ Color = clAqua
+ ItemHeight = 13
+ TabOrder = 0
+ OnChange = cbBookChange
+ end
+ object CHBox: TEdit
+ Left = 128
+ Top = 0
+ Width = 25
+ Height = 22
+ Color = clAqua
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '1'
+ end
+ object UpDown1: TUpDown
+ Left = 153
+ Top = 0
+ Width = 22
+ Height = 22
+ Associate = CHBox
+ Min = -1
+ Max = 200
+ Position = 1
+ TabOrder = 2
+ Wrap = False
+ OnClick = UpDown1Click
+ end
+ object VSBox: TEdit
+ Left = 168
+ Top = 0
+ Width = 25
+ Height = 22
+ Color = clAqua
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '19'
+ end
+ object UpDown2: TUpDown
+ Left = 193
+ Top = 0
+ Width = 22
+ Height = 22
+ Associate = VSBox
+ Min = -1
+ Max = 200
+ Position = 19
+ TabOrder = 4
+ Wrap = False
+ OnClick = UpDown1Click
+ end
+ object freeHandLookup: TComboBox
+ Left = 0
+ Top = 21
+ Width = 233
+ Height = 21
+ Color = clAqua
+ ItemHeight = 13
+ TabOrder = 5
+ OnKeyPress = freeHandLookupoldKeyPress
+ end
+ end
+ object ToolBar1: TToolBar
+ Left = 369
+ Top = 8
+ Width = 301
+ Height = 25
+ AutoSize = True
+ ButtonHeight = 23
+ ButtonWidth = 82
+ EdgeBorders = []
+ Images = ImageList2
+ TabOrder = 3
+ object Bookmarkbtn: TSpeedButton
+ Left = 0
+ Top = 2
+ Width = 101
+ Height = 23
+ Caption = 'Bookmark'
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 333333333333FF3333333333333C0C333333333333F777F3333333333CC0F0C3
+ 333333333777377F33333333C30F0F0C333333337F737377F333333C00FFF0F0
+ C33333F7773337377F333CC0FFFFFF0F0C3337773F33337377F3C30F0FFFFFF0
+ F0C37F7373F33337377F00FFF0FFFFFF0F0C7733373F333373770FFFFF0FFFFF
+ F0F073F33373F333373730FFFFF0FFFFFF03373F33373F333F73330FFFFF0FFF
+ 00333373F33373FF77333330FFFFF000333333373F333777333333330FFF0333
+ 3333333373FF7333333333333000333333333333377733333333333333333333
+ 3333333333333333333333333333333333333333333333333333}
+ Layout = blGlyphRight
+ NumGlyphs = 2
+ OnClick = BookmarkbtnClick
+ end
+ object BookmarkBtnImage: TImage
+ Left = 101
+ Top = 5
+ Width = 75
+ Height = 16
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170F6020000424DF60200000000000076000000280000004B00
+ 0000100000000100040000000000800200000000000000000000100000001000
+ 0000000000000000800000800000008080008000000080008000808000008080
+ 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
+ FF00888888888888888888888888888888888888888888888888888888888888
+ 8888888888888880000088888888888888888888888888888888888888888888
+ 888888888888888888C0C8888888888000008888888888888888888888888888
+ 88888888888888888888888888888888CC0F0C88888888800000888888888888
+ 88888888888888888888888888888888888888888888888C80F0F0C888888880
+ 00008888000088880008880008808880808808808800008088088808888888C0
+ 0FFF0F0C88888880000088880888088088808088808088088088088080888080
+ 880880888888CC0FFFFFF0F0C888888000008888088808808880808880808088
+ 808808808088808088080888888C80F0FFFFFF0F0C8888800000888808880880
+ 888080888080088880880880880000808800888888800FFF0FFFFFF0F0C88880
+ 000088880000888088808088808080888088088088888080880808888880FFFF
+ F0FFFFFF0F088880000088880888088800088800088088088000800888000880
+ 0808808888880FFFFF0FFFFFF088888000008888088808888888888888808888
+ 888888888888888888088888888880FFFFF0FFF0088888800000888808880888
+ 88888888888088888888888888888888880888888888880FFFFF000888888880
+ 0000888800008888888888888880888888888888888888888808888888888880
+ FFF0888888888880000088888888888888888888888888888888888888888888
+ 8888888888888888000888888888888000008888888888888888888888888888
+ 8888888888888888888888888888888888888888888888800000888888888888
+ 8888888888888888888888888888888888888888888888888888888888888880
+ 0000}
+ Visible = False
+ end
+ end
+ object pnlSpeed: TPanel
+ Left = 12
+ Top = 0
+ Width = 0
+ Height = 49
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 1
+ end
+ end
+ object MainMenu1: TMainMenu
+ Left = 572
+ Top = 4
+ object File1: TMenuItem
+ Caption = '&File'
+ object SaveLayout1: TMenuItem
+ Caption = 'S&ave Layout'
+ OnClick = SaveLayout1Click
+ end
+ object N5: TMenuItem
+ Caption = '-'
+ end
+ object Print1: TMenuItem
+ Caption = '&Print...'
+ OnClick = Print1Click
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object Exit1: TMenuItem
+ Caption = 'E&xit'
+ OnClick = Exit1Click
+ end
+ end
+ object Edit1: TMenuItem
+ Caption = '&Edit'
+ object Copy3: TMenuItem
+ Caption = '&Copy'
+ OnClick = Copy1Click
+ end
+ end
+ object Options2: TMenuItem
+ Caption = 'Options'
+ object Options1: TMenuItem
+ Caption = '&Preferences...'
+ OnClick = Options1Click
+ end
+ end
+ object Search1: TMenuItem
+ Caption = '&Search'
+ object NewSearchWindow1: TMenuItem
+ Caption = '&New Search Window'
+ ShortCut = 114
+ OnClick = NewSearchWindow1Click
+ end
+ end
+ object Tools1: TMenuItem
+ Caption = '&Tools'
+ object InstallManager1: TMenuItem
+ Caption = 'Install Manager'
+ OnClick = InstallManager1Click
+ end
+ end
+ object Help1: TMenuItem
+ Caption = '&Help'
+ object Contents1: TMenuItem
+ Caption = 'Contents'
+ OnClick = Contents1Click
+ end
+ object DevotionaloftheDay1: TMenuItem
+ Caption = 'Devotional of the Day'
+ OnClick = DevotionaloftheDay1Click
+ end
+ object SEPERATOR: TMenuItem
+ Caption = '-'
+ end
+ object About1: TMenuItem
+ Caption = '&About'
+ OnClick = About1Click
+ end
+ end
+ end
+ object PopupMenu2: TPopupMenu
+ OnPopup = PopupMenuPopup
+ Left = 273
+ Top = 246
+ object Copy2: TMenuItem
+ Caption = '&Copy'
+ OnClick = Copy1Click
+ end
+ object DictionaryLookup1: TMenuItem
+ Caption = 'Dictionary Lookup'
+ OnClick = DictionaryLookup1Click
+ end
+ object SearchForWord2: TMenuItem
+ Caption = 'Search For Word'
+ OnClick = SearchForWord1Click
+ end
+ end
+ object Search: TDdeServerItem
+ ServerConv = Bible
+ OnPokeData = SearchPokeData
+ Left = 684
+ Top = 60
+ end
+ object Lookup: TDdeServerItem
+ ServerConv = Bible
+ OnPokeData = LookupPokeData
+ Left = 656
+ Top = 60
+ end
+ object Bible: TDdeServerConv
+ Left = 624
+ Top = 60
+ end
+ object PopupMenu1: TPopupMenu
+ OnPopup = PopupMenuPopup
+ Left = 245
+ Top = 246
+ object Copy1: TMenuItem
+ Caption = '&Copy'
+ OnClick = Copy1Click
+ end
+ object CopyasBGreekTransliteration1: TMenuItem
+ Caption = 'Copy as &B-Greek Transliteration'
+ OnClick = CopyasBGreekTransliteration1Click
+ end
+ object MenuItem1: TMenuItem
+ Caption = 'Dictionary Lookup'
+ OnClick = DictionaryLookup1Click
+ end
+ object SearchForWord1: TMenuItem
+ Caption = 'Search For Word'
+ OnClick = SearchForWord1Click
+ end
+ end
+ object BookmarkPopup: TPopupMenu
+ Left = 600
+ object AddBookmark1: TMenuItem
+ Caption = '&Add Bookmark'
+ Hint = 'Add Current Verse to Personal Bookmarks'
+ OnClick = AddBookmark1Click
+ end
+ object EditBookmarks1: TMenuItem
+ Caption = '&Edit Bookmarks / Tree View...'
+ Hint = 'Edit Bookmarks / View Bookmarks in a Tree View'
+ OnClick = EditBookmarks1Click
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ end
+ object ImageList1: TImageList
+ BlendColor = clBtnFace
+ DrawingStyle = dsTransparent
+ Height = 34
+ Width = 38
+ Left = 14
+ Top = 4
+ end
+ object ImageList2: TImageList
+ Masked = False
+ Width = 75
+ Left = 518
+ Top = 2
+ end
+ object PopupMenu3: TPopupMenu
+ OnPopup = PopupMenuPopup
+ Left = 301
+ Top = 246
+ object EditEntry1: TMenuItem
+ Caption = '&Edit Entry'
+ OnClick = EditEntry1Click
+ end
+ object DeleteEntry1: TMenuItem
+ Caption = '&Delete Entry'
+ OnClick = DeleteEntry1Click
+ end
+ object LinktoVerse1: TMenuItem
+ Caption = 'Link to Comment for Verse...'
+ OnClick = LinktoVerse1Click
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object Copy4: TMenuItem
+ Caption = '&Copy'
+ OnClick = Copy1Click
+ end
+ object DictionaryLookup2: TMenuItem
+ Caption = 'Dictionary Lookup'
+ OnClick = DictionaryLookup1Click
+ end
+ object SearchForWord3: TMenuItem
+ Caption = 'Search For Word'
+ OnClick = SearchForWord1Click
+ end
+ end
+ object PopupMenu4: TPopupMenu
+ Left = 328
+ Top = 58
+ object HideShowModules1: TMenuItem
+ Caption = 'Hide / Show Modules'
+ OnClick = HideShowModules1Click
+ end
+ end
+ object ApplicationEvents1: TApplicationEvents
+ OnHint = ApplicationEvents1Hint
+ OnShowHint = ApplicationEvents1ShowHint
+ Left = 547
+ Top = 19
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/mainfrm.h b/apps/windoze/CBuilder5/BibleCS/mainfrm.h
new file mode 100644
index 0000000..cd23e99
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/mainfrm.h
@@ -0,0 +1,418 @@
+//---------------------------------------------------------------------------
+#ifndef mainfrmH
+#define mainfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\ComCtrls.hpp>
+#include "biblecsmgr.h"
+#include <swtext.h>
+#include <strkey.h>
+#include <regex.h>
+#include <listkey.h>
+#include <swgenbook.h>
+#include "swdisprtfchap.h"
+#include <AppEvnts.hpp>
+#include <Buttons.hpp>
+#include <DdeMan.hpp>
+#include <Graphics.hpp>
+#include <ImgList.hpp>
+#include <Menus.hpp>
+#include <ToolWin.hpp>
+#include <vcl\Buttons.hpp>
+#include <vcl\Menus.hpp>
+#include <vcl\DdeMan.hpp>
+#include <OleCtrls.hpp>
+#include <ToolWin.hpp>
+#include <shellapi.h>
+#include <Graphics.hpp>
+#include <ImgList.hpp>
+#include <jpeg.hpp>
+#include "RxRichEdit.hpp"
+//#include "MOZILLACONTROLLib_OCX.h"
+#include "SHDocVw_OCX.h"
+#include <AppEvnts.hpp>
+#include <TntStdCtrls.hpp>
+
+#ifndef USEOLDRTF
+#include "RxRichEdit.hpp"
+#else
+#define TRxRichEdit TRichEdit
+#endif
+
+#include <list>
+#include <vector>
+
+#define _tr(text) LocaleMgr::systemLocaleMgr.translate(text)
+#define MONITOR_CENTER 0x0001 // center rect to monitor
+#define MONITOR_CLIP 0x0000 // clip rect to monitor
+#define MONITOR_WORKAREA 0x0002 // use monitor work area
+#define MONITOR_AREA 0x0000 // use monitor entire area
+
+
+class RTFDisp : public SWDisplay {
+ SWDispRTF *edit;
+ static SWClass classdef;
+public:
+ RTFDisp(SWDispRTF *iedit) { myclass = &classdef; edit = iedit; }
+ virtual SWDispRTF *editControl() { return edit; }
+ RTFDisp() {}
+ virtual char Display(SWModule &imodule) {
+ return edit->Display(imodule);
+ }
+};
+
+class RTFBookDisp : public RTFDisp {
+ SWDispRTF *edit;
+ TTreeView *toc;
+public:
+ RTFBookDisp(SWDispRTF *iedit, TTreeView *itoc) : RTFDisp(iedit) { toc = itoc;}
+ RTFBookDisp() {}
+
+ void fillTreeTOC(TreeKeyIdx treeKey, TTreeView *tree, TTreeNode *parent) {
+ TTreeNode *node = tree->Items->AddChildObject(parent, treeKey.getLocalName(), (void *)treeKey.getOffset());
+ if (treeKey.firstChild()) {
+ fillTreeTOC(treeKey, tree, node);
+ treeKey.parent();
+ }
+ if (treeKey.nextSibling())
+ fillTreeTOC(treeKey, tree, parent);
+ }
+
+ virtual char Display(SWModule &imodule) {
+ if (!toc->Items->GetFirstNode()) {
+ //edit->Text = "Loading TOC...";
+ imodule = TOP;
+ ((TreeKeyIdx *)((SWKey *)imodule))->firstChild();
+ fillTreeTOC(*(TreeKeyIdx *)((SWKey *)imodule), toc, toc->Selected);
+ }
+ return RTFDisp::Display(imodule);
+ }
+};
+
+class HREFDisp : public SWDisplay {
+ TCppWebBrowser *edit;
+public:
+ HREFDisp(TCppWebBrowser *iedit) { edit = iedit; }
+ HREFDisp() {}
+ char Display(SWModule &imodule) {
+
+ TMemoryStream *stm = new TMemoryStream();
+
+ if ( stm == NULL )
+ return 1;
+
+ stm->Clear();
+ string modText = (string)"<HTML><BODY>" + (string)imodule.RenderText() + (string)"</BODY></HTML>";
+ stm->WriteBuffer(modText.c_str(), modText.length());
+
+ IPersistStreamInit *psi = NULL;
+
+ stm->Seek( 0, 0 );
+
+ // If you pass soOwned instead, the stream will be freed for you
+ TStreamAdapter *sa = new TStreamAdapter( stm, soReference );
+
+ if ( sa == NULL ) {
+ delete stm;
+ return 1;
+ }
+
+ _di_IDispatch doc = edit->Document;
+ if ( doc == NULL ) {
+ TVariant url = "about:blank";
+ edit->Navigate2( &url );
+ while ( doc == NULL ) {
+ Application->ProcessMessages();
+ doc = edit->Document;
+ }
+ }
+
+// if ( doc->QueryInterface(IID_IPersistStreamInit, (void**)&psi ) == S_OK ) {
+ HRESULT result = doc->QueryInterface(IID_IPersistStreamInit, (void**)&psi );
+ if (result == S_OK) {
+// if ( doc->QueryInterface(IID_IWrite, (void**)"test" ) == S_OK ) {
+ if ( psi )
+ psi->Load( *sa );
+ }
+ else
+ delete sa;
+
+ delete stm;
+
+// edit->SetTextBuf("yo mama");
+// edit->RequestDoc((char *)imodule);
+ return 0;
+ }
+};
+
+class DispExternal : public SWDisplay {
+public:
+ DispExternal() {}
+ char Display(SWModule &imodule) {
+ SHELLEXECUTEINFO info;
+ info.cbSize = sizeof(SHELLEXECUTEINFO);
+ info.fMask = SEE_MASK_NOCLOSEPROCESS; //SEE_MASK_CLASSNAME;
+ info.hwnd = GetFocus();
+ info.lpVerb = "open";
+ info.lpFile = (const char *)imodule;
+ info.lpParameters = NULL;
+ info.lpDirectory = NULL;
+ info.nShow = 0;
+// info.lpClass = ".html";
+ ShellExecuteEx(&info);
+// ShellExecute(edit->Handle, "open", (char *)imodule, NULL, NULL, SW_SHOWNORMAL);
+ return 0;
+ }
+};
+
+
+class ModState {
+public:
+ ModState(TPageControl *ipc, TTabSheet *iap, SWKey ikey) { pc = ipc; ap = iap; key = ikey; }
+ ModState();
+ TPageControl *pc;
+ TTabSheet* ap;
+ SWKey key;
+};
+
+//---------------------------------------------------------------------------
+class TForm1 : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *pnlTextCom;
+ TSplitter *Splitter2;
+ TPanel *pnlText;
+ TPanel *pnlComment;
+ TSplitter *Splitter1;
+ TPanel *pnlDict;
+ TPageControl *TextPageControl;
+ TPageControl *CommentaryPageControl;
+ TStatusBar *StatusBar1;
+ TPageControl *LexDictPageControl;
+ TMainMenu *MainMenu1;
+ TMenuItem *Search1;
+ TMenuItem *NewSearchWindow1;
+ TMenuItem *Help1;
+ TMenuItem *About1;
+ TPopupMenu *PopupMenu2;
+ TMenuItem *DictionaryLookup1;
+ TMenuItem *File1;
+ TMenuItem *SaveLayout1;
+ TMenuItem *Exit1;
+ TMenuItem *N1;
+ TDdeServerItem *Search;
+ TDdeServerItem *Lookup;
+ TDdeServerConv *Bible;
+ TPopupMenu *PopupMenu1;
+ TMenuItem *MenuItem1;
+ TMenuItem *Copy1;
+ TMenuItem *CopyasBGreekTransliteration1;
+ TMenuItem *Copy2;
+ TMenuItem *Edit1;
+ TMenuItem *Copy3;
+ TPopupMenu *BookmarkPopup;
+ TMenuItem *AddBookmark1;
+ TMenuItem *N2;
+ TMenuItem *EditBookmarks1;
+ TMenuItem *Options1;
+ TCoolBar *CoolBar1;
+ TImageList *ImageList1;
+ TImage *BackBtnImage;
+ TImage *SearchBtnImage;
+ TToolBar *ToolBar2;
+ TToolButton *ToolButton3;
+ TToolButton *ToolButton4;
+ TPanel *pnlSpeed;
+ TPanel *Panel1;
+ TComboBox *cbBook;
+ TEdit *CHBox;
+ TUpDown *UpDown1;
+ TEdit *VSBox;
+ TUpDown *UpDown2;
+ TSpeedButton *btnLookup;
+ TToolBar *ToolBar1;
+ TImageList *ImageList2;
+ TImage *BookmarkBtnImage;
+ TSpeedButton *Bookmarkbtn;
+ TPopupMenu *PopupMenu3;
+ TMenuItem *Copy4;
+ TMenuItem *DictionaryLookup2;
+ TMenuItem *N3;
+ TMenuItem *EditEntry1;
+ TMenuItem *DeleteEntry1;
+ TMenuItem *LinktoVerse1;
+ TMenuItem *Options2;
+ TMenuItem *Contents1;
+ TComboBox *freeHandLookup;
+ TPanel *Panel2;
+ TSplitter *Splitter3;
+ TRichEdit *DictKeyEditOld;
+ TListBox *lbDictKeysOld;
+ TPopupMenu *PopupMenu4;
+ TMenuItem *HideShowModules1;
+ TMenuItem *DevotionaloftheDay1;
+ TMenuItem *Tools1;
+ TMenuItem *InstallManager1;
+ TMenuItem *SEPERATOR;
+ TApplicationEvents *ApplicationEvents1;
+ TMenuItem *Print1;
+ TMenuItem *N5;
+ TMenuItem *SearchForWord1;
+ TMenuItem *SearchForWord2;
+ TMenuItem *SearchForWord3;
+ void __fastcall TextPageControlChange(TObject *Sender);
+ void __fastcall btnLookupClick(TObject *Sender);
+ void __fastcall CommentaryPageControlChange(TObject *Sender);
+
+
+
+ void __fastcall DictKeyEditOldChange(TObject *Sender);
+ void __fastcall LexDictPageControlChange(TObject *Sender);
+ void __fastcall NewSearchWindow1Click(TObject *Sender);
+
+ void __fastcall Exit1Click(TObject *Sender);
+ void __fastcall About1Click(TObject *Sender);
+ void __fastcall DictionaryLookup1Click(TObject *Sender);
+ void __fastcall SaveLayout1Click(TObject *Sender);
+
+
+ void __fastcall FormShow(TObject *Sender);
+
+ void __fastcall LookupPokeData(TObject *Sender);
+
+ void __fastcall SearchPokeData(TObject *Sender);
+ void __fastcall UpDown3Click(TObject *Sender, TUDBtnType Button);
+ void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
+
+
+ void __fastcall BackbtnClick(TObject *Sender);
+ void __fastcall Button1Click(TObject *Sender);
+ void __fastcall CopyasBGreekTransliteration1Click(TObject *Sender);
+ void __fastcall Copy1Click(TObject *Sender);
+
+
+
+ void __fastcall AddBookmark1Click(TObject *Sender);
+ void __fastcall BookmarkItemClick(TObject *Sender);
+ void __fastcall BookmarkbtnClick(TObject *Sender);
+ void __fastcall EditBookmarks1Click(TObject *Sender);
+
+ void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
+ void __fastcall Options1Click(TObject *Sender);
+ void __fastcall cbBookChange(TObject *Sender);
+
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall PopupMenuPopup(TObject *Sender);
+ void __fastcall createVerseList(TObject *Sender);
+ void __fastcall freeHandLookupoldKeyPress(TObject *Sender, char &Key);
+ void __fastcall RTFMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y);
+ void __fastcall RTFURLClick(TObject *Sender, const AnsiString URLText, TMouseButton Button);
+ void __fastcall EditEntry1Click(TObject *Sender);
+ void __fastcall DeleteEntry1Click(TObject *Sender);
+ void __fastcall LinktoVerse1Click(TObject *Sender);
+ void __fastcall BookTOCChange(TObject* Sender, TTreeNode* Node);
+
+ void __fastcall GlobalOptionChange(TObject *Sender);
+
+
+ void __fastcall OptionShowVals(TObject *Sender);
+ void __fastcall Contents1Click(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+ void __fastcall lbDictKeysOldClick(TObject *Sender);
+ void __fastcall verseLookupClick(TObject *Sender);
+ void __fastcall HideShowModules1Click(TObject *Sender);
+ void __fastcall DevotionaloftheDay1Click(TObject *Sender);
+ void __fastcall CppWebBrowser1BeforeNavigate2(TObject *Sender,
+ LPDISPATCH pDisp, TVariant *URL, TVariant *Flags,
+ TVariant *TargetFrameName, TVariant *PostData, TVariant *Headers,
+ TOLEBOOL *Cancel);
+ void __fastcall InstallManager1Click(TObject *Sender);
+ void __fastcall ApplicationEvents1Hint(TObject *Sender);
+ void __fastcall ApplicationEvents1ShowHint(AnsiString &HintStr,
+ bool &CanShow, THintInfo &HintInfo);
+ void __fastcall Print1Click(TObject *Sender);
+ void __fastcall SearchForWord1Click(TObject *Sender);
+private: // User declarations
+ list <SWDisplay *> displays; // so we can delete each display we create
+ list <ModState *> modstates;
+ vector <ModState *> ctrlstates;
+ bool logmodstate;
+ bool freshdict;
+ String clickText;
+
+ char CreateTextPane(SWModule *mod, char *font = 0);
+ char CreateCommentPane(SWModule *mod, char *font = 0);
+ char CreateLDPane(SWModule *mod, char *font = 0);
+ char CreateBookPane(SWModule *mod, char *font = 0);
+ void PushState();
+ void BackState();
+ void ForwardState();
+ void AddSectionToMenu(TMenu *menu, TMenuItem *item, TTreeNode *tree);
+ void FillDictKeys();
+ void AddVerseChoices(TPopupMenu *menu, const char *buf, TRxRichEdit *rtf);
+ void fillVKeySelector(VerseKey *vk);
+ static bool hasFeature(SWMgr *mgr, const char *modName, const char *feature);
+ void NavigateVerseURL(char* verStr);
+ void RefRTFHeaders();
+
+public: // User declarations
+ TTntListBox *lbDictKeys;
+ TTntEdit *DictKeyEdit;
+ VerseKey *DefaultVSKey;
+ SWKey *DefaultStrKey;
+ BibleCSMGR *mainmgr;
+ SWConfig *layoutconf;
+ SWConfig *optionsconf;
+ SWDispRTF *currentRTF;
+ __fastcall TForm1(TComponent* Owner);
+ __fastcall ~TForm1();
+ void __fastcall DisplayHint(TObject* Sender);
+ void RefreshActiveSheet(TPageControl *ts);
+ void TextKeyChanged(); // updates dependents on TextKeyChanged
+ void RefreshBookmarksMenu(TMenu *menu, TTreeView *tree);
+ void RestoreState(ModState *state);
+ void i12ize(const char *lang);
+ static WideString TrimJunk(WideString src);
+ void __fastcall AppMessage(tagMSG &Msg, bool &Handled);
+ static void ClipOrCenterRectToMonitor(LPRECT prc, UINT flags);
+ static void ClipOrCenterWindowToMonitor(HWND hwnd, UINT flags);
+ ListKey tmpVerseList;
+ String tmpVerseListCaption;
+ bool renderingHint;
+ bool closing;
+};
+
+class TRTFHintWindow : public THintWindow {
+ typedef THintWindow inherited;
+
+protected:
+ virtual void __fastcall Paint(void);
+ virtual void __fastcall CreateParams(TCreateParams &Params);
+
+public:
+ __fastcall virtual TRTFHintWindow(Classes::TComponent* AOwner);
+ __fastcall TRTFHintWindow(HWND ParentWindow) : THintWindow(ParentWindow) { }
+ __fastcall virtual ~TRTFHintWindow(void);
+ virtual void __fastcall ActivateHint(const /*Windows::*/TRect& Rect, const AnsiString AHint);
+ virtual void __fastcall ActivateHintData(const /*Windows::*/TRect& Rect, const AnsiString AHint, void* AData);
+ virtual /*Windows::*/TRect __fastcall CalcHintRect(int MaxWidth, const AnsiString AHint, void* AData);
+ virtual bool __fastcall IsHintMsg(tagMSG& Msg);
+
+ __property BiDiMode ;
+ __property Caption ;
+ __property Color ;
+ __property Canvas ;
+ __property Font ;
+
+};
+
+
+//---------------------------------------------------------------------------
+extern TForm1 *Form1;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.cpp b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.cpp
new file mode 100644
index 0000000..c611804
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.cpp
@@ -0,0 +1,14 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "newbmfilefrm.h"
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TNewBMfrm *NewBMfrm;
+//---------------------------------------------------------------------------
+__fastcall TNewBMfrm::TNewBMfrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//--------------------------------------------------------------------------- \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.dfm b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.dfm
new file mode 100644
index 0000000..e6d1226
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.dfm
@@ -0,0 +1,99 @@
+object NewBMfrm: TNewBMfrm
+ Left = 247
+ Top = 249
+ BorderIcons = []
+ BorderStyle = bsDialog
+ Caption = 'Add New Bookmark File'
+ ClientHeight = 85
+ ClientWidth = 492
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Label1: TLabel
+ Left = 0
+ Top = 8
+ Width = 197
+ Height = 21
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = 'File Name (without extension):'
+ end
+ object Label2: TLabel
+ Left = 0
+ Top = 32
+ Width = 197
+ Height = 21
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = 'Bookmark Section Title:'
+ end
+ object bmfile: TEdit
+ Left = 200
+ Top = 4
+ Width = 121
+ Height = 21
+ TabOrder = 0
+ end
+ object bmtitle: TEdit
+ Left = 200
+ Top = 28
+ Width = 289
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 1
+ end
+ object OkBtn: TButton
+ Left = 330
+ Top = 56
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 2
+ end
+ object CancelBtn: TButton
+ Left = 412
+ Top = 56
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 3
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.h b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.h
new file mode 100644
index 0000000..78b2e27
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/newbmfilefrm.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef newbmfilefrmH
+#define newbmfilefrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+//---------------------------------------------------------------------------
+class TNewBMfrm : public TForm
+{
+__published: // IDE-managed Components
+ TLabel *Label1;
+ TEdit *bmfile;
+ TEdit *bmtitle;
+ TLabel *Label2;
+ TButton *OkBtn;
+ TButton *CancelBtn;
+private: // User declarations
+public: // User declarations
+ __fastcall TNewBMfrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TNewBMfrm *NewBMfrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/optionfrm.cpp b/apps/windoze/CBuilder5/BibleCS/optionfrm.cpp
new file mode 100644
index 0000000..5cff2a7
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/optionfrm.cpp
@@ -0,0 +1,644 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include <localemgr.h>
+#include <list>
+#include <string>
+#include <dirent.h>
+#include <io.h>
+#include <dir.h>
+#include "TModuleFonts.h"
+#include "optionfrm.h"
+#include "mainfrm.h"
+
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TOptionsfrm *Optionsfrm;
+
+const char *TOptionsfrm::defaultLocaleName = "en_us";
+const char *TOptionsfrm::defaultLocaleDescription = "English (US)";
+//---------------------------------------------------------------------------
+__fastcall TOptionsfrm::TOptionsfrm(TComponent* Owner)
+ : TForm(Owner)
+{
+ FontDialogText = new TFontSelFrm(this);
+ FontDialogComment = new TFontSelFrm(this);
+ FontDialogLD = new TFontSelFrm(this);
+ FontDialogPopup = new TFontSelFrm(this);
+}
+//---------------------------------------------------------------------------
+void __fastcall TOptionsfrm::btnCurrVerseClick(TObject *Sender)
+{
+ ColorDialogVS->Execute();
+ shpCurrVSClr->Brush->Color = ColorDialogVS->Color;
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::FormCreate(TObject *Sender)
+{
+ list<string> locales;
+
+ localeCB->Clear();
+ localeCB->Items->AddObject(defaultLocaleDescription, (TObject *)defaultLocaleName);
+
+ locales = LocaleMgr::systemLocaleMgr.getAvailableLocales();
+
+ for (list<string>::iterator it = locales.begin(); it != locales.end(); it++) {
+ const char *name = LocaleMgr::systemLocaleMgr.getLocale(it->c_str())->getName();
+ const char *description = LocaleMgr::systemLocaleMgr.getLocale(it->c_str())->getDescription();
+ localeCB->Items->AddObject(description, (TObject *)name);
+ }
+ localeCB->ItemIndex = 0;
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::FormShow(TObject *Sender)
+{
+ PageControl1->ActivePage = TabSheet1;
+ FindSchemeNames();
+ cmbTextSelect->ItemIndex = 0;
+ UpdatePreview();
+}
+
+
+
+void __fastcall TOptionsfrm::btnFontClick(TObject *Sender)
+{
+
+ TFontSelFrm* tempFrm = new TFontSelFrm(this);
+ switch (cmbTextSelect->ItemIndex)
+ {
+ case 0:
+ CopyFontDlg(tempFrm, FontDialogText);
+ if(FontDialogText->ShowModal() == mrOk){
+ CopyFontDlg(FontDialogComment, FontDialogText);
+ CopyFontDlg(FontDialogLD, FontDialogText);
+ CopyFontDlg(FontDialogPopup, FontDialogText);
+ UpdatePreview();
+ }else CopyFontDlg(FontDialogText, tempFrm);
+ break;
+ case 1:
+ CopyFontDlg(tempFrm, FontDialogText);
+ if(FontDialogText->ShowModal() == mrOk)
+ UpdatePreview();
+ else CopyFontDlg(FontDialogText, tempFrm);
+ break;
+ case 2:
+ CopyFontDlg(tempFrm, FontDialogComment);
+ if(FontDialogComment->ShowModal() == mrOk)
+ UpdatePreview();
+ else CopyFontDlg(FontDialogComment, tempFrm);
+ break;
+ case 3:
+ CopyFontDlg(tempFrm, FontDialogLD);
+ if(FontDialogLD->ShowModal() == mrOk)
+ UpdatePreview();
+ else CopyFontDlg(FontDialogLD, tempFrm);
+ break;
+ case 4:
+ CopyFontDlg(tempFrm, FontDialogPopup);
+ if(FontDialogPopup->ShowModal() == mrOk)
+ UpdatePreview();
+ else CopyFontDlg(FontDialogPopup, tempFrm);
+ break;
+ }
+ delete tempFrm;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::shpCurrVSClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ btnCurrVerseClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::btnNumClrClick(TObject *Sender)
+{
+ ColorDialogVerseNum->Execute();
+ shpNumClr->Brush->Color = ColorDialogVerseNum->Color;
+ UpdatePreview();
+
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::btnFieldClrClick(TObject *Sender)
+{
+ ColorDialogField->Execute();
+ shpFieldClr->Brush->Color = ColorDialogField->Color;
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+// TODO 2 -cOptions: add new category, Search Results
+void __fastcall TOptionsfrm::cmbTextSelectChange(TObject *Sender)
+{
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::cmbSchemeSelectChange(TObject *Sender)
+{
+ AnsiString tempName = ExtractFilePath(Application->ExeName) + COLOR_DIR + cmbSchemeSelect->Text + COLOR_EXT;
+ SWConfig schemesconf(tempName.c_str());
+ LoadDispSettings(&schemesconf);
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+// TODO 1 -cOptions: Change to use RxRichEditX somehow, so we're consistent with look and feel of real control
+void TOptionsfrm::UpdatePreview()
+{
+ char buffTemp[512], buffFinal[512], font[64];
+ char* verse = "Why, my beloved brothers, let every man be swift to hear, slow to speak, slow to wrath";
+ int vsColorRed, vsColorGreen, vsColorBlue, numColorRed, numColorGreen, numColorBlue;
+ int fontSize;
+ TMemoryStream * RTFStream = new TMemoryStream;
+
+ strcpy(buffFinal, "{\\rtf1\\ansi");
+
+ switch (cmbTextSelect->ItemIndex)
+ {
+ case 2:
+ TRxRichEditX::TColorToRGB(FontDialogComment->Font->Color, vsColorRed, vsColorGreen, vsColorBlue);
+ TRxRichEditX::TColorToRGB(ColorDialogVerseNum->Color, numColorRed, numColorGreen, numColorBlue);
+ strcpy(font, FontDialogComment->Font->Name.c_str());
+ fontSize = FontDialogComment->Font->Size;
+ RTFPreview->Color = FontDialogComment->BackColor;
+ break;
+ case 3:
+ TRxRichEditX::TColorToRGB(FontDialogLD->Font->Color, vsColorRed, vsColorGreen, vsColorBlue);
+ TRxRichEditX::TColorToRGB(ColorDialogVerseNum->Color, numColorRed, numColorGreen, numColorBlue);
+ strcpy(font, FontDialogLD->Font->Name.c_str());
+ fontSize = FontDialogLD->Font->Size;
+ RTFPreview->Color = FontDialogLD->BackColor;
+ break;
+ default:
+ TRxRichEditX::TColorToRGB(FontDialogText->Font->Color, vsColorRed, vsColorGreen, vsColorBlue);
+ TRxRichEditX::TColorToRGB(ColorDialogVerseNum->Color, numColorRed, numColorGreen, numColorBlue);
+ strcpy(font, FontDialogText->Font->Name.c_str());
+ fontSize = FontDialogText->Font->Size;
+ RTFPreview->Color = FontDialogText->BackColor;
+ }
+
+ // This is a strange way to deal with font size but I can't think of a different way to do it.
+ // So for now I will use the current system.
+ fontSize -= 12;
+ sprintf(buffTemp, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}}" , font);
+ strcat(buffFinal, buffTemp);
+ sprintf(buffTemp, "{\\colortbl;\\red%d\\green%d\\blue%d;\\red%d\\green%d\\blue%d;}" , vsColorRed, vsColorGreen, vsColorBlue, numColorRed, numColorGreen, numColorBlue);
+ strcat(buffFinal, buffTemp);
+
+ sprintf(buffTemp, "\\pard \\qc\\nowidctlpar{\\f1\\fs%d\\cf1\\b Chapter 1 ", (30 + fontSize));
+ strcat(buffFinal, buffTemp);
+ sprintf(buffTemp, "\\par\\fs%d\\par}", (10 + fontSize));
+ strcat(buffFinal, buffTemp);
+
+ sprintf(buffTemp, "{\\fs%d\\cf2\\super 19}", (10 + fontSize));
+ strcat(buffFinal, buffTemp);
+
+ sprintf(buffTemp, "\\ql\\nowidctlpar \\cf1\\f0\\fs%d ", (24 + fontSize));
+ strcat(buffFinal, buffTemp);
+ strcat(buffFinal, verse);
+
+ strcat(buffFinal, " }");
+
+ RTFStream->WriteBuffer(buffFinal, 512);
+ RTFStream->Position = 0;
+ RTFPreview->Lines->LoadFromStream(RTFStream);
+ GetCurrentScheme();
+}
+
+TOptionsfrm::CopyFontDlg(TFontSelFrm* lhs, const TFontSelFrm* rhs)
+{
+ lhs->BackColor = rhs->BackColor;
+ lhs->Font->Color = rhs->Font->Color;
+ lhs->Font->Size = rhs->Font->Size;
+ lhs->Font->Name = rhs->Font->Name;
+}
+
+void __fastcall TOptionsfrm::btnSaveScheme(TObject *Sender)
+{
+ TPoint menup, point;
+ point.x = 0;
+ point.y = btnSave->Height;
+ menup = btnSave->ClientToScreen(point);
+ SavePopup->Popup(menup.x, menup.y);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::SaveSchemeClick(TObject *Sender)
+{
+
+ ConfigEntMap emap;
+ AnsiString strName = cmbSchemeSelect->Text;
+ if(strName != "" && !strName.Pos("/") && !strName.Pos("\\")
+ && !strName.Pos(":") && !strName.Pos("*")
+ && !strName.Pos("?") && !strName.Pos("\"")
+ && !strName.Pos("<") && !strName.Pos(">")
+ && !strName.Pos("|")) {
+
+ AnsiString strName = COLOR_DIR + cmbSchemeSelect->Text + COLOR_EXT;
+ SWConfig schemeconf(strName.c_str());
+
+ emap = schemeconf.Sections["Appearance"];
+ emap.erase("AutoVSColor"); emap.insert(ConfigEntMap::value_type("AutoVSColor", IntToStr((AutoVSColor->Checked)?1:0).c_str()));
+ emap.erase("CurrentVSColor"); emap.insert(ConfigEntMap::value_type("CurrentVSColor", IntToStr(shpCurrVSClr->Brush->Color).c_str()));
+ emap.erase("VSNumberColor"); emap.insert(ConfigEntMap::value_type("VSNumberColor", IntToStr(ColorDialogVerseNum->Color).c_str()));
+ emap.erase("FieldColor"); emap.insert(ConfigEntMap::value_type("FieldColor", IntToStr(ColorDialogField->Color).c_str()));
+ emap.erase("StrongsColor"); emap.insert(ConfigEntMap::value_type("StrongsColor", IntToStr(ColorDialogStrongs->Color).c_str()));
+ emap.erase("MorphColor"); emap.insert(ConfigEntMap::value_type("MorphColor", IntToStr(ColorDialogMorph->Color).c_str()));
+
+ emap.erase("TextBackColor"); emap.insert(ConfigEntMap::value_type("TextBackColor", IntToStr(FontDialogText->BackColor).c_str()));
+ emap.erase("CommentBackColor"); emap.insert(ConfigEntMap::value_type("CommentBackColor", IntToStr(FontDialogComment->BackColor).c_str()));
+ emap.erase("LDBackColor"); emap.insert(ConfigEntMap::value_type("LDBackColor", IntToStr(FontDialogLD->BackColor).c_str()));
+ emap.erase("PopupBackColor"); emap.insert(ConfigEntMap::value_type("PopupBackColor", IntToStr(FontDialogPopup->BackColor).c_str()));
+
+ emap.erase("TextFontName"); emap.insert(ConfigEntMap::value_type("TextFontName", (FontDialogText->Font->Name).c_str()));
+ emap.erase("CommentFontName"); emap.insert(ConfigEntMap::value_type("CommentFontName", (FontDialogComment->Font->Name).c_str()));
+ emap.erase("LDFontName"); emap.insert(ConfigEntMap::value_type("LDFontName", (FontDialogLD->Font->Name).c_str()));
+ emap.erase("PopupFontName"); emap.insert(ConfigEntMap::value_type("PopupFontName", (FontDialogPopup->Font->Name).c_str()));
+
+ emap.erase("TextFontSize"); emap.insert(ConfigEntMap::value_type("TextFontSize", IntToStr(FontDialogText->Font->Size).c_str()));
+ emap.erase("CommentFontSize"); emap.insert(ConfigEntMap::value_type("CommentFontSize", IntToStr(FontDialogComment->Font->Size).c_str()));
+ emap.erase("LDFontSize"); emap.insert(ConfigEntMap::value_type("LDFontSize", IntToStr(FontDialogLD->Font->Size).c_str()));
+ emap.erase("PopupFontSize"); emap.insert(ConfigEntMap::value_type("PopupFontSize", IntToStr(FontDialogPopup->Font->Size).c_str()));
+
+ emap.erase("TextFontColor"); emap.insert(ConfigEntMap::value_type("TextFontColor", IntToStr(FontDialogText->Font->Color).c_str()));
+ emap.erase("CommentFontColor"); emap.insert(ConfigEntMap::value_type("CommentFontColor", IntToStr(FontDialogComment->Font->Color).c_str()));
+ emap.erase("LDFontColor"); emap.insert(ConfigEntMap::value_type("LDFontColor", IntToStr(FontDialogLD->Font->Color).c_str()));
+ emap.erase("PopupFontColor"); emap.insert(ConfigEntMap::value_type("PopupFontColor", IntToStr(FontDialogPopup->Font->Color).c_str()));
+
+ schemeconf.Sections["Appearance"] = emap;
+ schemeconf.Save();
+ }else{
+ Application->MessageBox("Scheme name missing or invalid.","Oops", MB_OK);
+ }
+ SetCurrentDir(ExtractFilePath(Application->ExeName));
+ FindSchemeNames();
+}
+//---------------------------------------------------------------------------
+
+
+void TOptionsfrm::FindSchemeNames()
+{
+ DIR *dir;
+ struct dirent *ent;
+ string conffile;
+ AnsiString strName;
+ AnsiString strPath = COLOR_DIR;
+
+ TStringList *schemeNames = new TStringList;
+ cmbSchemeSelect->Clear();
+
+ if (access(strPath.c_str(), 0)) { // directory does not exist
+ _mkdir(strPath.c_str());
+ }
+
+ if (dir = opendir(strPath.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, "."))&& (strcmp(ent->d_name, "..")) && !strcmp(ExtractFileExt(ent->d_name).c_str(), COLOR_EXT.c_str())) {
+ strName = ent->d_name;
+ schemeNames->Add(strName.SubString(1, strName.Length() - 4).c_str());
+ }
+ }
+ closedir(dir);
+ cmbSchemeSelect->Items = schemeNames;
+ }
+ delete schemeNames;
+}
+
+void __fastcall TOptionsfrm::ExportClick(TObject *Sender)
+{
+ AnsiString name = cmbSchemeSelect->Text;
+ AnsiString newFileName;
+ AnsiString exName;
+ AnsiString subdir = ExtractFilePath(Application->ExeName) + COLOR_DIR;
+ if(name != ""){
+ SaveSchDlg->FileName = name;
+ if(SaveSchDlg->Execute()){
+ exName = subdir + name + COLOR_EXT;
+ newFileName = SaveSchDlg->FileName.c_str();
+ if(!CopyFileA(exName.c_str(), newFileName.c_str(),1))
+ Application->MessageBox("Export Failed." , "Oops", MB_OK);
+ }
+ }else{
+ Application->MessageBox("No Scheme Selected to Export. Please Select a Scheme and Retry" , "Oops", MB_OK);
+ }
+ SetCurrentDir(ExtractFilePath(Application->ExeName));
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::ImportClick(TObject *Sender)
+{
+ AnsiString newFileName;
+ AnsiString exName, newPath;
+ AnsiString subdir = ExtractFilePath(Application->ExeName) + COLOR_DIR;
+ if(OpenSchDlg->Execute()){
+ exName = OpenSchDlg->FileName.c_str();
+ newFileName = ExtractFileName(exName);
+ newPath = subdir + newFileName;
+ if(!CopyFileA(exName.c_str(), newPath.c_str(),1))
+ MessageBox(this, "Import Failed." , "Oops", MB_OK);
+ }
+ SetCurrentDir(ExtractFilePath(Application->ExeName));
+ FindSchemeNames();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::DeleteClick(TObject *Sender)
+{
+ AnsiString name = cmbSchemeSelect->Text;
+ AnsiString fullName = ExtractFilePath(Application->ExeName) + COLOR_DIR + name + COLOR_EXT;
+ if(name != ""){
+ DeleteFile(fullName);
+ }else{
+ Application->MessageBox("No Scheme Selected to Delete. Please Select a Scheme and Retry" , "Oops", MB_OK);
+ }
+ SetCurrentDir(ExtractFilePath(Application->ExeName));
+ FindSchemeNames();
+}
+//---------------------------------------------------------------------------
+
+
+void TOptionsfrm::GetCurrentScheme()
+{
+
+ AnsiString tempName;
+ SWConfig *schemesconf;
+ SectionMap::iterator sit, oit;
+
+ SWConfig *optionsconf = dynamic_cast<TForm1*>(Application->MainForm)->optionsconf;
+ for(int count = 0; count < cmbSchemeSelect->Items->Count; count++)
+ {
+ tempName = ExtractFilePath(Application->ExeName) + COLOR_DIR + cmbSchemeSelect->Items->Strings[count] + COLOR_EXT;
+ schemesconf = new SWConfig(tempName.c_str());
+ if( schemesconf->Sections["Appearance"]["CurrentVSColor"] == optionsconf->Sections["Appearance"]["CurrentVSColor"] &&
+ schemesconf->Sections["Appearance"]["VSNumberColor"] == optionsconf->Sections["Appearance"]["VSNumberColor"] &&
+ schemesconf->Sections["Appearance"]["StrongsColor"] == optionsconf->Sections["Appearance"]["StrongsColor"] &&
+ schemesconf->Sections["Appearance"]["MorphColor"] == optionsconf->Sections["Appearance"]["MorphColor"] &&
+ schemesconf->Sections["Appearance"]["FieldColor"] == optionsconf->Sections["Appearance"]["FieldColor"] &&
+
+ schemesconf->Sections["Appearance"]["TextBackColor"] == optionsconf->Sections["Appearance"]["TextBackColor"] &&
+ schemesconf->Sections["Appearance"]["CommentBackColor"] == optionsconf->Sections["Appearance"]["CommentBackColor"] &&
+ schemesconf->Sections["Appearance"]["LDBackColor"] == optionsconf->Sections["Appearance"]["LDBackColor"] &&
+ schemesconf->Sections["Appearance"]["PopupBackColor"] == optionsconf->Sections["Appearance"]["PopupBackColor"] &&
+
+ schemesconf->Sections["Appearance"]["TextFontName"] == optionsconf->Sections["Appearance"]["TextFontName"] &&
+ schemesconf->Sections["Appearance"]["CommentFontName"] == optionsconf->Sections["Appearance"]["CommentFontName"] &&
+ schemesconf->Sections["Appearance"]["LDFontName"] == optionsconf->Sections["Appearance"]["LDFontName"] &&
+ schemesconf->Sections["Appearance"]["PopupFontName"] == optionsconf->Sections["Appearance"]["PopupFontName"] &&
+
+ schemesconf->Sections["Appearance"]["TextFontSize"] == optionsconf->Sections["Appearance"]["TextFontSize"] &&
+ schemesconf->Sections["Appearance"]["CommentFontSize"] == optionsconf->Sections["Appearance"]["CommentFontSize"] &&
+ schemesconf->Sections["Appearance"]["LDFontSize"] == optionsconf->Sections["Appearance"]["LDFontSize"] &&
+ schemesconf->Sections["Appearance"]["PopupFontSize"] == optionsconf->Sections["Appearance"]["PopupFontSize"] &&
+
+ schemesconf->Sections["Appearance"]["TextFontColor"] == optionsconf->Sections["Appearance"]["TextFontColor"] &&
+ schemesconf->Sections["Appearance"]["CommentFontColor"] == optionsconf->Sections["Appearance"]["CommentFontColor"] &&
+ schemesconf->Sections["Appearance"]["LDFontColor"] == optionsconf->Sections["Appearance"]["LDFontColor"] &&
+ schemesconf->Sections["Appearance"]["PopupFontColor"] == optionsconf->Sections["Appearance"]["PopupFontColor"]){ cmbSchemeSelect->ItemIndex = count;
+ count = cmbSchemeSelect->Items->Count; // Basically we are done and can move on :)
+ }
+ delete schemesconf;
+ }
+}
+
+
+
+void __fastcall TOptionsfrm::btnModFontsClick(TObject *Sender)
+{
+ TModuleFonts *pDlg = new TModuleFonts(this);
+ pDlg->ShowModal();
+
+ delete pDlg;
+}
+//---------------------------------------------------------------------------
+
+
+
+// TODO 1 -cOptions: add hint verselist preview toggle
+void __fastcall TOptionsfrm::HintStrongsClick(TObject *Sender)
+{
+ //In order for HintStrongs to work HintPopups has to be on
+ if(HintStrongs->Checked){
+ HintPopups->Checked = true;
+ }
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::HintPopupsClick(TObject *Sender)
+{
+ // If we turn off HintPopups we have to turn off HintStrongs
+ // because HintStrongs will not work if hints are off
+ if(!HintPopups->Checked)
+ HintStrongs->Checked = false;
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::btnStrongClrClick(TObject *Sender)
+{
+ ColorDialogStrongs->Execute();
+ shpStrongClr->Brush->Color = ColorDialogStrongs->Color;
+ UpdatePreview();
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TOptionsfrm::btnMorphClrClick(TObject *Sender)
+{
+ ColorDialogMorph->Execute();
+ shpMorphClr->Brush->Color = ColorDialogMorph->Color;
+ UpdatePreview();
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::shpFieldClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ btnFieldClrClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::shpStrongClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ btnStrongClrClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TOptionsfrm::shpMorphClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ btnMorphClrClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+
+
+
+void TOptionsfrm::LoadDispSettings(SWConfig* config)
+{
+ SectionMap::iterator sit;
+
+ if ((sit = config->Sections.find("Appearance")) != config->Sections.end()) {
+ if ((*sit).second.find("CurrentVSColor") != (*sit).second.end()){
+ shpCurrVSClr->Brush->Color = TColor(atoi((*(*sit).second.find("CurrentVSColor")).second.c_str()));
+ ColorDialogVS->Color = TColor(atoi((*(*sit).second.find("CurrentVSColor")).second.c_str()));
+ }
+ else {
+ shpCurrVSClr->Brush->Color = TColor(clBlue);
+ ColorDialogVS->Color = TColor(clBlue);
+ }
+ if ((*sit).second.find("AutoVSColor") != (*sit).second.end()) {
+ AutoVSColor->Checked = (atoi((*(*sit).second.find("AutoVSColor")).second.c_str()) == 0) ? false : true;
+ }
+ else {
+ AutoVSColor->Checked = true;
+ }
+
+ if ((*sit).second.find("StrongsColor") != (*sit).second.end()){
+ shpStrongClr->Brush->Color = TColor(atoi((*(*sit).second.find("StrongsColor")).second.c_str()));
+ ColorDialogStrongs->Color = TColor(atoi((*(*sit).second.find("StrongsColor")).second.c_str()));
+ }
+ else{
+ shpStrongClr->Brush->Color = TColor(16711935); // Magenta
+ ColorDialogStrongs->Color = TColor(16711935);
+ }
+
+ if ((*sit).second.find("MorphColor") != (*sit).second.end()){
+ shpMorphClr->Brush->Color = TColor(atoi((*(*sit).second.find("MorphColor")).second.c_str()));
+ ColorDialogMorph->Color = TColor(atoi((*(*sit).second.find("MorphColor")).second.c_str()));
+ }
+ else{
+ shpMorphClr->Brush->Color = TColor(60534); // Light Green
+ ColorDialogMorph->Color = TColor(60534);
+ }
+
+ if ((*sit).second.find("VSNumberColor") != (*sit).second.end()){
+ shpNumClr->Brush->Color = TColor(atoi((*(*sit).second.find("VSNumberColor")).second.c_str()));
+ ColorDialogVerseNum->Color = TColor(atoi((*(*sit).second.find("VSNumberColor")).second.c_str()));
+ }
+ else{
+ shpNumClr->Brush->Color = TColor(clBlue);
+ ColorDialogVerseNum->Color = TColor(clBlue);
+ }
+
+ if ((*sit).second.find("FieldColor") != (*sit).second.end()){
+ shpFieldClr->Brush->Color = TColor(atoi((*(*sit).second.find("FieldColor")).second.c_str()));
+ ColorDialogField->Color = TColor(atoi((*(*sit).second.find("FieldColor")).second.c_str()));
+ }
+ else{
+ shpFieldClr->Brush->Color = TColor(clAqua);
+ ColorDialogField->Color = TColor(clAqua);
+ }
+
+
+ if ((*sit).second.find("VSNumberColor") != (*sit).second.end())
+ ColorDialogVerseNum->Color = TColor(atoi ((*(*sit).second.find("VSNumberColor")).second.c_str()));
+ else
+ ColorDialogVerseNum->Color = clBlue;
+
+ //**** Font BackColor ****//
+ if ((*sit).second.find("TextBackColor") != (*sit).second.end())
+ FontDialogText->BackColor = TColor(atoi((*(*sit).second.find("TextBackColor")).second.c_str()));
+ else
+ FontDialogText->BackColor = TColor(clWhite);
+
+ if ((*sit).second.find("CommentBackColor") != (*sit).second.end())
+ FontDialogComment->BackColor = TColor(atoi((*(*sit).second.find("CommentBackColor")).second.c_str()));
+ else
+ FontDialogComment->BackColor = TColor(clWhite);
+
+ if ((*sit).second.find("LDBackColor") != (*sit).second.end())
+ FontDialogLD->BackColor = TColor(atoi((*(*sit).second.find("LDBackColor")).second.c_str()));
+ else
+ FontDialogLD->BackColor = TColor(clWhite);
+ if ((*sit).second.find("PopupBackColor") != (*sit).second.end())
+ FontDialogPopup->BackColor = TColor(atoi((*(*sit).second.find("PopupBackColor")).second.c_str()));
+ else
+ FontDialogPopup->BackColor = TColor(14680063); // 13434879 == cream color
+
+ //**** Font Face Name ****//
+ if ((*sit).second.find("TextFontName") != (*sit).second.end())
+ FontDialogText->Font->Name = ((*(*sit).second.find("TextFontName")).second.c_str());
+ else
+ FontDialogText->Font->Name = "Times New Roman";
+
+ if ((*sit).second.find("CommentFontName") != (*sit).second.end())
+ FontDialogComment->Font->Name = ((*(*sit).second.find("CommentFontName")).second.c_str());
+ else
+ FontDialogComment->Font->Name = "Times New Roman";
+
+ if ((*sit).second.find("LDFontName") != (*sit).second.end())
+ FontDialogLD->Font->Name = ((*(*sit).second.find("LDFontName")).second.c_str());
+ else
+ FontDialogLD->Font->Name = "Times New Roman";
+ if ((*sit).second.find("PopupFontName") != (*sit).second.end())
+ FontDialogPopup->Font->Name = ((*(*sit).second.find("PopupFontName")).second.c_str());
+ else
+ FontDialogPopup->Font->Name = "Times New Roman";
+
+ //**** Font Size ****//
+ if ((*sit).second.find("TextFontSize") != (*sit).second.end())
+ FontDialogText->Font->Size = (atoi ((*(*sit).second.find("TextFontSize")).second.c_str()));
+ else
+ FontDialogText->Font->Size = 10;
+ if ((*sit).second.find("CommentFontSize") != (*sit).second.end())
+ FontDialogComment->Font->Size = (atoi ((*(*sit).second.find("CommentFontSize")).second.c_str()));
+ else
+ FontDialogComment->Font->Size = 10;
+
+ if ((*sit).second.find("LDFontSize") != (*sit).second.end())
+ FontDialogLD->Font->Size = (atoi ((*(*sit).second.find("LDFontSize")).second.c_str()));
+ else
+ FontDialogLD->Font->Size = 10;
+ if ((*sit).second.find("PopupFontSize") != (*sit).second.end())
+ FontDialogPopup->Font->Size = (atoi ((*(*sit).second.find("PopupFontSize")).second.c_str()));
+ else
+ FontDialogPopup->Font->Size = 10;
+
+ //**** Font ForeColor ****//
+ if ((*sit).second.find("TextFontColor") != (*sit).second.end())
+ FontDialogText->Font->Color = TColor(atoi ((*(*sit).second.find("TextFontColor")).second.c_str()));
+ else
+ FontDialogText->Font->Color = clBlack;
+
+ if ((*sit).second.find("CommentFontColor") != (*sit).second.end())
+ FontDialogComment->Font->Color = TColor(atoi ((*(*sit).second.find("CommentFontColor")).second.c_str()));
+ else
+ FontDialogComment->Font->Color = clBlack;
+
+ if ((*sit).second.find("LDFontColor") != (*sit).second.end())
+ FontDialogLD->Font->Color = TColor(atoi ((*(*sit).second.find("LDFontColor")).second.c_str()));
+ else
+ FontDialogLD->Font->Color = clBlack;
+ if ((*sit).second.find("PopupFontColor") != (*sit).second.end())
+ FontDialogPopup->Font->Color = TColor(atoi ((*(*sit).second.find("PopupFontColor")).second.c_str()));
+ else
+ FontDialogPopup->Font->Color = clBlack;
+ }
+}
+
+
+void __fastcall TOptionsfrm::shpNumClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{
+ btnNumClrClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+
diff --git a/apps/windoze/CBuilder5/BibleCS/optionfrm.dfm b/apps/windoze/CBuilder5/BibleCS/optionfrm.dfm
new file mode 100644
index 0000000..3e5a86e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/optionfrm.dfm
@@ -0,0 +1,681 @@
+object Optionsfrm: TOptionsfrm
+ Left = 272
+ Top = 126
+ BorderStyle = bsDialog
+ Caption = 'Preferences'
+ ClientHeight = 325
+ ClientWidth = 531
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel2: TPanel
+ Left = 0
+ Top = 284
+ Width = 531
+ Height = 41
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object OkBtn: TBitBtn
+ Left = 338
+ Top = 9
+ Width = 89
+ Height = 25
+ Anchors = [akTop, akRight]
+ TabOrder = 0
+ Kind = bkOK
+ end
+ object CancelBtn: TBitBtn
+ Left = 436
+ Top = 9
+ Width = 89
+ Height = 25
+ Anchors = [akTop, akRight]
+ TabOrder = 1
+ Kind = bkCancel
+ end
+ end
+ object PageControl1: TPageControl
+ Left = 0
+ Top = 0
+ Width = 531
+ Height = 284
+ ActivePage = TabSheet3
+ Align = alClient
+ TabOrder = 1
+ object TabSheet1: TTabSheet
+ Caption = 'General'
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 523
+ Height = 163
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object gbPersonalize: TGroupBox
+ Left = 0
+ Top = 0
+ Width = 523
+ Height = 163
+ Align = alClient
+ Caption = 'Personalize'
+ TabOrder = 0
+ object Label4: TLabel
+ Left = 7
+ Top = 79
+ Width = 48
+ Height = 13
+ Caption = 'Language'
+ end
+ object AutoBMPersonal: TCheckBox
+ Left = 7
+ Top = 17
+ Width = 210
+ Height = 14
+ Hint =
+ 'Saves your personal bookmarks when you exit'#13#10'so that you can hav' +
+ 'e them next time you run '#13#10'The Sword Project'
+ Caption = 'Autosave Personal Bookmarks'
+ TabOrder = 0
+ end
+ object AutoBMOther: TCheckBox
+ Left = 7
+ Top = 36
+ Width = 210
+ Height = 14
+ Caption = 'Autosave Other Bookmarks'
+ TabOrder = 1
+ end
+ object HintPopups: TCheckBox
+ Left = 248
+ Top = 36
+ Width = 245
+ Height = 13
+ Hint =
+ 'Shows the hint boxes when you mouseover a'#13#10'panel giving a brief ' +
+ 'description of the current '#13#10'module.'
+ Caption = 'Show Hint Pop-ups'
+ TabOrder = 2
+ OnClick = HintPopupsClick
+ end
+ object localeCB: TComboBox
+ Left = 94
+ Top = 76
+ Width = 207
+ Height = 21
+ Hint =
+ 'Select your localized language'#13#10'This only localizes the book nam' +
+ 'es'#13#10'of the bible not the interface.'
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 3
+ end
+ object AutoLayout: TCheckBox
+ Left = 7
+ Top = 55
+ Width = 210
+ Height = 17
+ Hint = 'Saves the screen layout when the program exits'
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Autosave Screen Layout'
+ TabOrder = 4
+ end
+ object HintStrongs: TCheckBox
+ Left = 248
+ Top = 17
+ Width = 245
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Show Hint Over Strongs Numbers'
+ TabOrder = 5
+ OnClick = HintStrongsClick
+ end
+ end
+ end
+ end
+ object TabSheet2: TTabSheet
+ Caption = 'Special Modules'
+ ImageIndex = 1
+ object gbDefModules: TGroupBox
+ Left = 0
+ Top = 0
+ Width = 523
+ Height = 105
+ Align = alTop
+ Caption = 'Original Language Support - Default Modules'
+ TabOrder = 0
+ object Label5: TLabel
+ Left = 7
+ Top = 36
+ Width = 29
+ Height = 13
+ Caption = 'Greek'
+ end
+ object Label6: TLabel
+ Left = 7
+ Top = 59
+ Width = 37
+ Height = 13
+ Caption = 'Hebrew'
+ end
+ object Label7: TLabel
+ Left = 75
+ Top = 16
+ Width = 49
+ Height = 13
+ Caption = 'Definitions'
+ end
+ object Label8: TLabel
+ Left = 271
+ Top = 16
+ Width = 35
+ Height = 13
+ Caption = 'Parsing'
+ end
+ object Label10: TLabel
+ Left = 7
+ Top = 81
+ Width = 114
+ Height = 13
+ Caption = 'Strong'#39's Numbered Text'
+ end
+ object hebrewDefCB: TComboBox
+ Left = 75
+ Top = 55
+ Width = 190
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ object greekDefCB: TComboBox
+ Left = 75
+ Top = 33
+ Width = 190
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 1
+ end
+ object greekParseCB: TComboBox
+ Left = 271
+ Top = 33
+ Width = 190
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 2
+ end
+ object hebrewParseCB: TComboBox
+ Left = 271
+ Top = 55
+ Width = 190
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 3
+ end
+ object strongsNumsCB: TComboBox
+ Left = 154
+ Top = 78
+ Width = 190
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 4
+ end
+ end
+ object gbDevos: TGroupBox
+ Left = 0
+ Top = 105
+ Width = 301
+ Height = 151
+ Align = alLeft
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Caption = 'Daily Devotionals'
+ TabOrder = 1
+ object Label9: TLabel
+ Left = 8
+ Top = 24
+ Width = 107
+ Height = 21
+ AutoSize = False
+ Caption = 'Default Devotional'
+ end
+ object dailyDefaultCB: TComboBox
+ Left = 115
+ Top = 18
+ Width = 166
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ object devSplashCB: TCheckBox
+ Left = 8
+ Top = 48
+ Width = 283
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Show Devotional Splash Screen on Startup'
+ TabOrder = 1
+ end
+ object devsAsDictsCB: TCheckBox
+ Left = 8
+ Top = 64
+ Width = 283
+ Height = 22
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Show Devotionals as Dictionaries'
+ TabOrder = 2
+ end
+ end
+ object gbGloss: TGroupBox
+ Left = 305
+ Top = 105
+ Width = 218
+ Height = 151
+ Align = alRight
+ Caption = 'Glossaries'
+ TabOrder = 2
+ object glosAsDictsCB: TCheckBox
+ Left = 9
+ Top = 19
+ Width = 186
+ Height = 13
+ Caption = 'Show Glossaries as Dictionaries'
+ TabOrder = 0
+ end
+ end
+ end
+ object TabSheet3: TTabSheet
+ Caption = 'Display'
+ ImageIndex = 2
+ object Panel3: TPanel
+ Left = 0
+ Top = 0
+ Width = 523
+ Height = 256
+ Align = alClient
+ Anchors = [akLeft, akTop, akRight]
+ BevelOuter = bvNone
+ Caption = 'Panel3'
+ TabOrder = 0
+ object gbColors: TGroupBox
+ Left = 0
+ Top = 0
+ Width = 523
+ Height = 256
+ Align = alClient
+ Caption = 'Display Colors'
+ TabOrder = 0
+ object Label2: TLabel
+ Left = 7
+ Top = 17
+ Width = 38
+ Height = 13
+ Caption = 'Preview'
+ end
+ object Label3: TLabel
+ Left = 228
+ Top = 10
+ Width = 66
+ Height = 13
+ Caption = 'Window Type'
+ end
+ object Label11: TLabel
+ Left = 228
+ Top = 59
+ Width = 105
+ Height = 13
+ Caption = 'Text Styles and Colors'
+ end
+ object Label13: TLabel
+ Left = 228
+ Top = 87
+ Width = 91
+ Height = 13
+ Caption = 'Entry Number Color'
+ end
+ object shpCurrVSClr: TShape
+ Left = 391
+ Top = 114
+ Width = 20
+ Height = 16
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ OnMouseDown = shpCurrVSClrMouseDown
+ end
+ object Label14: TLabel
+ Left = 356
+ Top = 10
+ Width = 39
+ Height = 13
+ Caption = 'Scheme'
+ end
+ object Label15: TLabel
+ Left = 228
+ Top = 145
+ Width = 86
+ Height = 13
+ Caption = 'Combo/Edit Fields'
+ end
+ object btnSave: TSpeedButton
+ Left = 491
+ Top = 27
+ Width = 22
+ Height = 22
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 4E010000424D4E01000000000000760000002800000012000000120000000100
+ 040000000000D800000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFF000000FFFFFFFFFFFFFFFFFF000000FFD0000000000000FF000000FF03
+ 300000088030FF000000FF03300000088030FF000000FF03300000088030FF00
+ 0000FF03300000000030FF000000FF03333333333330FF000000FF0330000000
+ 0330FF000000FF03088888888030FF000000FF03088888888030FF000000FF03
+ 088888888030FF000000FF03088888888030FF000000FF03088888888000FF00
+ 0000FF03088888888080FF000000FF00000000000000FF000000FFFFFFFFFFFF
+ FFFFFF000000FFFFFFFFFFFFFFFFFF000000}
+ OnClick = btnSaveScheme
+ end
+ object Label1: TLabel
+ Left = 228
+ Top = 232
+ Width = 142
+ Height = 13
+ Caption = 'Individual Modules (Font Only)'
+ end
+ object Label12: TLabel
+ Left = 228
+ Top = 174
+ Width = 107
+ Height = 13
+ Caption = 'Strong'#39's Numbers <...>'
+ end
+ object Label16: TLabel
+ Left = 228
+ Top = 203
+ Width = 89
+ Height = 13
+ Caption = 'Strong'#39's Tense (...)'
+ end
+ object shpStrongClr: TShape
+ Left = 391
+ Top = 172
+ Width = 20
+ Height = 16
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ OnMouseDown = shpStrongClrMouseDown
+ end
+ object shpMorphClr: TShape
+ Left = 391
+ Top = 201
+ Width = 20
+ Height = 16
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ OnMouseDown = shpMorphClrMouseDown
+ end
+ object shpFieldClr: TShape
+ Left = 391
+ Top = 143
+ Width = 20
+ Height = 16
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ OnMouseDown = shpFieldClrMouseDown
+ end
+ object shpNumClr: TShape
+ Left = 391
+ Top = 85
+ Width = 20
+ Height = 16
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ OnMouseDown = shpNumClrMouseDown
+ end
+ object btnCurrVerse: TButton
+ Left = 421
+ Top = 111
+ Width = 96
+ Height = 25
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ Caption = 'Select Color...'
+ TabOrder = 4
+ OnClick = btnCurrVerseClick
+ end
+ object RTFPreview: TRichEdit
+ Left = 7
+ Top = 38
+ Width = 208
+ Height = 211
+ Anchors = [akLeft, akTop, akBottom]
+ ScrollBars = ssVertical
+ TabOrder = 0
+ WantReturns = False
+ end
+ object cmbTextSelect: TComboBox
+ Left = 228
+ Top = 27
+ Width = 125
+ Height = 21
+ ItemHeight = 13
+ TabOrder = 1
+ OnChange = cmbTextSelectChange
+ Items.Strings = (
+ 'All Windows'
+ 'Bible Window'
+ 'Commentary Window'
+ 'Lexicon/Dictionary Window'
+ 'Pop-Up Windows')
+ end
+ object btnFont: TButton
+ Left = 421
+ Top = 54
+ Width = 96
+ Height = 25
+ Hint =
+ 'Selects the font, the background color, and text color for your ' +
+ 'panels'
+ Anchors = [akTop, akRight]
+ Caption = 'Customize...'
+ TabOrder = 2
+ OnClick = btnFontClick
+ end
+ object AutoVSColor: TCheckBox
+ Left = 228
+ Top = 113
+ Width = 149
+ Height = 18
+ Caption = 'Current Verse Color'
+ TabOrder = 3
+ end
+ object btnNumClr: TButton
+ Left = 421
+ Top = 82
+ Width = 96
+ Height = 25
+ Hint = 'Selects the color of verse numbers'
+ Anchors = [akTop, akRight]
+ Caption = 'Select Color...'
+ TabOrder = 5
+ OnClick = btnNumClrClick
+ end
+ object cmbSchemeSelect: TComboBox
+ Left = 356
+ Top = 27
+ Width = 121
+ Height = 21
+ ItemHeight = 13
+ TabOrder = 6
+ OnChange = cmbSchemeSelectChange
+ Items.Strings = (
+ 'Default'
+ 'Parchment'
+ 'Midnight')
+ end
+ object btnFieldClr: TButton
+ Left = 421
+ Top = 140
+ Width = 96
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Select Color...'
+ TabOrder = 7
+ OnClick = btnFieldClrClick
+ end
+ object btnModFonts: TButton
+ Left = 421
+ Top = 227
+ Width = 96
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Select Font...'
+ TabOrder = 8
+ OnClick = btnModFontsClick
+ end
+ object btnStrongClr: TButton
+ Left = 421
+ Top = 169
+ Width = 96
+ Height = 25
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ Caption = 'Select Color...'
+ TabOrder = 9
+ OnClick = btnStrongClrClick
+ end
+ object btnMorphClr: TButton
+ Left = 421
+ Top = 198
+ Width = 96
+ Height = 25
+ Hint = 'Selects the color of the current verse'
+ Anchors = [akTop, akRight]
+ Caption = 'Select Color...'
+ TabOrder = 10
+ OnClick = btnMorphClrClick
+ end
+ end
+ end
+ end
+ end
+ object ColorDialogVS: TColorDialog
+ Ctl3D = True
+ Color = 3328000
+ Left = 295
+ Top = 65528
+ end
+ object ColorDialogField: TColorDialog
+ Ctl3D = True
+ Left = 323
+ Top = 65528
+ end
+ object ColorDialogVerseNum: TColorDialog
+ Ctl3D = True
+ Left = 348
+ Top = 65528
+ end
+ object SavePopup: TPopupMenu
+ Left = 268
+ Top = 65528
+ object SaveScheme: TMenuItem
+ Caption = '&Save Scheme'
+ OnClick = SaveSchemeClick
+ end
+ object DeleteScheme1: TMenuItem
+ Caption = '&Delete Scheme'
+ OnClick = DeleteClick
+ end
+ object Import: TMenuItem
+ Caption = 'Import Scheme...'
+ OnClick = ImportClick
+ end
+ object Export: TMenuItem
+ Caption = 'E&xport Scheme...'
+ OnClick = ExportClick
+ end
+ end
+ object OpenSchDlg: TOpenDialog
+ DefaultExt = '*.sch'
+ Filter = 'Sword Scheme File (*.sch)|*.sch'
+ Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing]
+ Title = 'Select Scheme File'
+ Left = 220
+ Top = 65528
+ end
+ object SaveSchDlg: TSaveDialog
+ DefaultExt = '.sch'
+ Filter = 'Sword Scheme File (*.sch)|*.sch'
+ Left = 244
+ Top = 65528
+ end
+ object ColorDialogStrongs: TColorDialog
+ Ctl3D = True
+ Left = 376
+ Top = 65528
+ end
+ object ColorDialogMorph: TColorDialog
+ Ctl3D = True
+ Color = clFuchsia
+ CustomColors.Strings = (
+ 'ColorA=FFFFFFFF'
+ 'ColorB=FFFFFFFF'
+ 'ColorC=FFFFFFFF'
+ 'ColorD=FFFFFFFF'
+ 'ColorE=FFFFFFFF'
+ 'ColorF=FFFFFFFF'
+ 'ColorG=FFFFFFFF'
+ 'ColorH=FFFFFFFF'
+ 'ColorI=FFFFFFFF'
+ 'ColorJ=FFFFFFFF'
+ 'ColorK=FFFFFFFF'
+ 'ColorL=FFFFFFFF'
+ 'ColorM=FFFFFFFF'
+ 'ColorN=FFFFFFFF'
+ 'ColorO=FFFFFFFF'
+ 'ColorP=FFFFFFFF')
+ Left = 408
+ Top = 65528
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/optionfrm.h b/apps/windoze/CBuilder5/BibleCS/optionfrm.h
new file mode 100644
index 0000000..5ff30c9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/optionfrm.h
@@ -0,0 +1,146 @@
+//---------------------------------------------------------------------------
+#ifndef optionfrmH
+#define optionfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\Dialogs.hpp>
+#include <ComCtrls.hpp>
+
+#include "FontSel.h"
+#include <Buttons.hpp>
+#include <Menus.hpp>
+
+const AnsiString COLOR_DIR = "colors\\";
+const AnsiString COLOR_EXT = ".sch";
+
+//---------------------------------------------------------------------------
+class TOptionsfrm : public TForm
+{
+__published: // IDE-managed Components
+ TColorDialog *ColorDialogVS;
+ TPanel *Panel2;
+ TPageControl *PageControl1;
+ TTabSheet *TabSheet1;
+ TTabSheet *TabSheet2;
+ TPanel *Panel1;
+ TGroupBox *gbPersonalize;
+ TCheckBox *AutoBMPersonal;
+ TCheckBox *AutoBMOther;
+ TGroupBox *gbDefModules;
+ TComboBox *hebrewDefCB;
+ TComboBox *greekDefCB;
+ TComboBox *greekParseCB;
+ TComboBox *hebrewParseCB;
+ TLabel *Label5;
+ TLabel *Label6;
+ TLabel *Label7;
+ TLabel *Label8;
+ TGroupBox *gbDevos;
+ TLabel *Label9;
+ TComboBox *dailyDefaultCB;
+ TCheckBox *devSplashCB;
+ TCheckBox *devsAsDictsCB;
+ TLabel *Label10;
+ TComboBox *strongsNumsCB;
+ TTabSheet *TabSheet3;
+ TCheckBox *HintPopups;
+ TLabel *Label4;
+ TComboBox *localeCB;
+ TPanel *Panel3;
+ TGroupBox *gbColors;
+ TLabel *Label2;
+ TLabel *Label3;
+ TRichEdit *RTFPreview;
+ TComboBox *cmbTextSelect;
+ TButton *btnFont;
+ TCheckBox *AutoVSColor;
+ TButton *btnCurrVerse;
+ TButton *btnNumClr;
+ TLabel *Label11;
+ TLabel *Label13;
+ TShape *shpCurrVSClr;
+ TLabel *Label14;
+ TComboBox *cmbSchemeSelect;
+ TButton *btnFieldClr;
+ TLabel *Label15;
+ TColorDialog *ColorDialogField;
+ TColorDialog *ColorDialogVerseNum;
+ TPopupMenu *SavePopup;
+ TMenuItem *SaveScheme;
+ TMenuItem *Export;
+ TMenuItem *Import;
+ TSpeedButton *btnSave;
+ TOpenDialog *OpenSchDlg;
+ TSaveDialog *SaveSchDlg;
+ TMenuItem *DeleteScheme1;
+ TCheckBox *AutoLayout;
+ TGroupBox *gbGloss;
+ TCheckBox *glosAsDictsCB;
+ TButton *btnModFonts;
+ TLabel *Label1;
+ TBitBtn *OkBtn;
+ TBitBtn *CancelBtn;
+ TCheckBox *HintStrongs;
+ TLabel *Label12;
+ TLabel *Label16;
+ TShape *shpStrongClr;
+ TButton *btnStrongClr;
+ TShape *shpMorphClr;
+ TButton *btnMorphClr;
+ TShape *shpFieldClr;
+ TColorDialog *ColorDialogStrongs;
+ TColorDialog *ColorDialogMorph;
+ TShape *shpNumClr;
+ void __fastcall btnCurrVerseClick(TObject *Sender);
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall btnFontClick(TObject *Sender);
+ void __fastcall shpCurrVSClrMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall btnNumClrClick(TObject *Sender);
+ void __fastcall btnFieldClrClick(TObject *Sender);
+ void __fastcall cmbTextSelectChange(TObject *Sender);
+ void __fastcall cmbSchemeSelectChange(TObject *Sender);
+ void __fastcall btnSaveScheme(TObject *Sender);
+ void __fastcall SaveSchemeClick(TObject *Sender);
+ void __fastcall ExportClick(TObject *Sender);
+ void __fastcall ImportClick(TObject *Sender);
+ void __fastcall DeleteClick(TObject *Sender);
+ void __fastcall btnModFontsClick(TObject *Sender);
+ void __fastcall HintStrongsClick(TObject *Sender);
+ void __fastcall HintPopupsClick(TObject *Sender);
+ void __fastcall btnStrongClrClick(TObject *Sender);
+ void __fastcall btnMorphClrClick(TObject *Sender);
+ void __fastcall shpFieldClrMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y);
+ void __fastcall shpStrongClrMouseDown(TObject *Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall shpMorphClrMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y);
+ void __fastcall shpNumClrMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y);
+
+private: // User declarations
+ static const char *defaultLocaleName;
+ static const char *defaultLocaleDescription;
+ CopyFontDlg(TFontSelFrm* lhs, const TFontSelFrm* rhs);
+ void FindSchemeNames();
+ void GetCurrentScheme();
+public:
+ TFontSelFrm* FontDialogText;
+ TFontSelFrm* FontDialogComment;
+ TFontSelFrm* FontDialogLD;
+ TFontSelFrm* FontDialogPopup;
+ void LoadDispSettings(SWConfig* config);
+ void UpdatePreview();
+public: // User declarations
+ __fastcall TOptionsfrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TOptionsfrm *Optionsfrm;
+//---------------------------------------------------------------------------
+#endif
+
diff --git a/apps/windoze/CBuilder5/BibleCS/options.conf b/apps/windoze/CBuilder5/BibleCS/options.conf
new file mode 100644
index 0000000..21b3dd6
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/options.conf
@@ -0,0 +1,48 @@
+
+[Appearance]
+AutoVSColor=1
+CommentBackColor=16771797
+CommentFontColor=8388608
+CommentFontName=MS Sans Serif
+CommentFontSize=16
+CurrentVSColor=8388863
+CurrentVSColorBlue=255
+CurrentVSColorGreen=128
+CurrentVSColorRed=128
+FieldColor=16771797
+FontSize=0
+LDBackColor=16771797
+LDFontColor=8388608
+LDFontName=MS Sans Serif
+LDFontSize=16
+TextBackColor=16771797
+TextFontColor=8388608
+TextFontName=MS Sans Serif
+TextFontSize=16
+VSNumberColor=255
+locale=en_us
+
+[Bookmarks]
+AutoSaveOther=0
+AutoSavePersonal=0
+
+[General]
+DevsAsDicts=false
+Splash=
+TipOfTheDay=Devotional
+
+[Hints]
+On=1
+
+[Layout]
+AutoSaveLayout=0
+
+[ModDefaults]
+DailyDevotion=losung_en_96
+GreekDef=StrongsGreek
+GreekParse=Thayer
+HebrewDef=BDB
+StrongsNumbers=KJV
+
+[System]
+
diff --git a/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.cpp b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.cpp
new file mode 100644
index 0000000..0fbe311
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.cpp
@@ -0,0 +1,48 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "rtfhintfrm.h"
+#include <clipbrd.hpp>
+#include <swdisprtf.h>
+#include <swdisprtfchap.h>
+#include "mainfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+
+TRTFHintForm *RTFHintForm;
+
+
+__fastcall TRTFHintForm::TRTFHintForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ rtfDrawer = new TRxRichEditX(Panel1);
+ rtfDrawer->Parent = Panel1;
+ rtfDrawer->Align = alTop;
+ // I changed this to white because our defual now needs to be white so you can use it for controls like the search window with little extra formatting info.
+ rtfDrawer->Color = 14680063; //TColor(0xB4CDBB);
+ rtfDrawer->BorderStyle = bsNone;
+ rtfDrawer->Text = "yoyo";
+ rtfDrawer->Name = "rtfDrawer";
+ rtfDrawer->Enabled = true;
+ rtfDrawer->Visible = true;
+ rtfDrawer->DoubleBuffered = false;
+ searchListDrawer = new TRxRichEditX(Panel1);
+ searchListDrawer->Parent = Panel1;
+ searchListDrawer->Align = alBottom;
+ searchListDrawer->Color = clWindow; //TColor(0xB4CDBB);
+ searchListDrawer->BorderStyle = bsNone;
+ searchListDrawer->Text = "yoyo";
+ searchListDrawer->Name = "searchListDrawer";
+ searchListDrawer->Enabled = true;
+ searchListDrawer->Visible = true;
+ searchListDrawer->DoubleBuffered = false;
+}
+//---------------------------------------------------------------------------
+void __fastcall TRTFHintForm::Button1Click(TObject *Sender)
+{
+ Clipboard()->Assign(this->GetFormImage());
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.dfm b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.dfm
new file mode 100644
index 0000000..3ac81ab
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.dfm
@@ -0,0 +1,26 @@
+object RTFHintForm: TRTFHintForm
+ Left = 600
+ Top = 225
+ Width = 437
+ Height = 479
+ Caption = 'RTFHintForm'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 429
+ Height = 452
+ Align = alClient
+ Caption = 'Panel1'
+ TabOrder = 0
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.h b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.h
new file mode 100644
index 0000000..e07b338
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rtfhintfrm.h
@@ -0,0 +1,30 @@
+//---------------------------------------------------------------------------
+
+#ifndef rtfhintfrmH
+#define rtfhintfrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <RxRichEdit.hpp>
+#include <ExtCtrls.hpp>
+#include <swmodule.h>
+#include <listkey.h>
+#include "RxRichEditX.h"
+
+class TRTFHintForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ void __fastcall Button1Click(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ TRxRichEditX *rtfDrawer;
+ TRxRichEditX *searchListDrawer;
+ __fastcall TRTFHintForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TRTFHintForm *RTFHintForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/rxlib/RXCCONST.R32 b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCCONST.R32
new file mode 100644
index 0000000..f1dd19c
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCCONST.R32
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/rxlib/RXCOMBOS.R32 b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCOMBOS.R32
new file mode 100644
index 0000000..3e2c310
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCOMBOS.R32
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/rxlib/RXCONST.R32 b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCONST.R32
new file mode 100644
index 0000000..0d0bce7
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rxlib/RXCONST.R32
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/rxlib/RxRichEd.hpp b/apps/windoze/CBuilder5/BibleCS/rxlib/RxRichEd.hpp
new file mode 100644
index 0000000..37e802d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rxlib/RxRichEd.hpp
@@ -0,0 +1,628 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'RxRichEd.pas' rev: 5.00
+
+#ifndef RxRichEdHPP
+#define RxRichEdHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <ComCtrls.hpp> // Pascal unit
+#include <Menus.hpp> // Pascal unit
+#include <RichEdit.hpp> // Pascal unit
+#include <Dialogs.hpp> // Pascal unit
+#include <StdCtrls.hpp> // Pascal unit
+#include <Graphics.hpp> // Pascal unit
+#include <Forms.hpp> // Pascal unit
+#include <Controls.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <SysUtils.hpp> // Pascal unit
+#include <Messages.hpp> // Pascal unit
+#include <Commctrl.hpp> // Pascal unit
+#include <ComObj.hpp> // Pascal unit
+#include <ActiveX.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Rxriched
+{
+#define CHARFORMAT2A ::CHARFORMAT2A
+
+//-- type declarations -------------------------------------------------------
+typedef Shortint TRichEditVersion;
+
+typedef CHARFORMAT2A TCharFormat2;
+
+#pragma option push -b-
+enum TRxAttributeType { atDefaultText, atSelected, atWord };
+#pragma option pop
+
+#pragma option push -b-
+enum TRxConsistentAttribute { caBold, caColor, caFace, caItalic, caSize, caStrikeOut, caUnderline, caProtected,
+ caOffset, caHidden, caLink, caBackColor, caDisabled, caWeight, caSubscript, caRevAuthor };
+#pragma option pop
+
+typedef Set<TRxConsistentAttribute, caBold, caRevAuthor> TRxConsistentAttributes;
+
+#pragma option push -b-
+enum TSubscriptStyle { ssNone, ssSubscript, ssSuperscript };
+#pragma option pop
+
+#pragma option push -b-
+enum TUnderlineType { utNone, utSolid, utWord, utDouble, utDotted, utWave };
+#pragma option pop
+
+class DELPHICLASS TRxTextAttributes;
+class DELPHICLASS TRxCustomRichEdit;
+class DELPHICLASS TRxParaAttributes;
+#pragma option push -b-
+enum TParaAlignment { paLeftJustify, paRightJustify, paCenter, paJustify };
+#pragma option pop
+
+typedef Shortint THeadingStyle;
+
+#pragma option push -b-
+enum TLineSpacingRule { lsSingle, lsOneAndHalf, lsDouble, lsSpecifiedOrMore, lsSpecified, lsMultiple
+ };
+#pragma option pop
+
+#pragma option push -b-
+enum TRxNumbering { nsNone, nsBullet, nsArabicNumbers, nsLoCaseLetter, nsUpCaseLetter, nsLoCaseRoman,
+ nsUpCaseRoman };
+#pragma option pop
+
+#pragma option push -b-
+enum TRxNumberingStyle { nsParenthesis, nsPeriod, nsEnclosed, nsSimple };
+#pragma option pop
+
+#pragma option push -b-
+enum TParaTableStyle { tsNone, tsTableRow, tsTableCellEnd, tsTableCell };
+#pragma option pop
+
+class PASCALIMPLEMENTATION TRxParaAttributes : public Classes::TPersistent
+{
+ typedef Classes::TPersistent inherited;
+
+private:
+ TRxCustomRichEdit* RichEdit;
+ void __fastcall GetAttributes(PARAFORMAT2 &Paragraph);
+ TParaAlignment __fastcall GetAlignment(void);
+ int __fastcall GetFirstIndent(void);
+ THeadingStyle __fastcall GetHeadingStyle(void);
+ int __fastcall GetLeftIndent(void);
+ int __fastcall GetRightIndent(void);
+ int __fastcall GetSpaceAfter(void);
+ int __fastcall GetSpaceBefore(void);
+ int __fastcall GetLineSpacing(void);
+ TLineSpacingRule __fastcall GetLineSpacingRule(void);
+ TRxNumbering __fastcall GetNumbering(void);
+ TRxNumberingStyle __fastcall GetNumberingStyle(void);
+ Word __fastcall GetNumberingTab(void);
+ int __fastcall GetTab(Byte Index);
+ int __fastcall GetTabCount(void);
+ TParaTableStyle __fastcall GetTableStyle(void);
+ void __fastcall SetAlignment(TParaAlignment Value);
+ void __fastcall SetAttributes(PARAFORMAT2 &Paragraph);
+ void __fastcall SetFirstIndent(int Value);
+ void __fastcall SetHeadingStyle(THeadingStyle Value);
+ void __fastcall SetLeftIndent(int Value);
+ void __fastcall SetRightIndent(int Value);
+ void __fastcall SetSpaceAfter(int Value);
+ void __fastcall SetSpaceBefore(int Value);
+ void __fastcall SetLineSpacing(int Value);
+ void __fastcall SetLineSpacingRule(TLineSpacingRule Value);
+ void __fastcall SetNumbering(TRxNumbering Value);
+ void __fastcall SetNumberingStyle(TRxNumberingStyle Value);
+ void __fastcall SetNumberingTab(Word Value);
+ void __fastcall SetTab(Byte Index, int Value);
+ void __fastcall SetTabCount(int Value);
+ void __fastcall SetTableStyle(TParaTableStyle Value);
+
+protected:
+ void __fastcall InitPara(PARAFORMAT2 &Paragraph);
+ virtual void __fastcall AssignTo(Classes::TPersistent* Dest);
+
+public:
+ __fastcall TRxParaAttributes(TRxCustomRichEdit* AOwner);
+ virtual void __fastcall Assign(Classes::TPersistent* Source);
+ __property TParaAlignment Alignment = {read=GetAlignment, write=SetAlignment, nodefault};
+ __property int FirstIndent = {read=GetFirstIndent, write=SetFirstIndent, nodefault};
+ __property THeadingStyle HeadingStyle = {read=GetHeadingStyle, write=SetHeadingStyle, nodefault};
+ __property int LeftIndent = {read=GetLeftIndent, write=SetLeftIndent, nodefault};
+ __property int LineSpacing = {read=GetLineSpacing, write=SetLineSpacing, nodefault};
+ __property TLineSpacingRule LineSpacingRule = {read=GetLineSpacingRule, write=SetLineSpacingRule, nodefault
+ };
+ __property TRxNumbering Numbering = {read=GetNumbering, write=SetNumbering, nodefault};
+ __property TRxNumberingStyle NumberingStyle = {read=GetNumberingStyle, write=SetNumberingStyle, nodefault
+ };
+ __property Word NumberingTab = {read=GetNumberingTab, write=SetNumberingTab, nodefault};
+ __property int RightIndent = {read=GetRightIndent, write=SetRightIndent, nodefault};
+ __property int SpaceAfter = {read=GetSpaceAfter, write=SetSpaceAfter, nodefault};
+ __property int SpaceBefore = {read=GetSpaceBefore, write=SetSpaceBefore, nodefault};
+ __property int Tab[Byte Index] = {read=GetTab, write=SetTab};
+ __property int TabCount = {read=GetTabCount, write=SetTabCount, nodefault};
+ __property TParaTableStyle TableStyle = {read=GetTableStyle, write=SetTableStyle, nodefault};
+public:
+
+ #pragma option push -w-inl
+ /* TPersistent.Destroy */ inline __fastcall virtual ~TRxParaAttributes(void) { }
+ #pragma option pop
+
+};
+
+
+#pragma option push -b-
+enum TRichLangOption { rlAutoKeyboard, rlAutoFont, rlImeCancelComplete, rlImeAlwaysSendNotify };
+#pragma option pop
+
+typedef Set<TRichLangOption, rlAutoKeyboard, rlImeAlwaysSendNotify> TRichLangOptions;
+
+typedef void __fastcall (__closure *TRichEditProtectChangeEx)(System::TObject* Sender, const Messages::TMessage
+ &Message, int StartPos, int EndPos, bool &AllowChange);
+
+typedef void __fastcall (__closure *TRichEditURLClickEvent)(System::TObject* Sender, const AnsiString
+ URLText, Controls::TMouseButton Button);
+
+typedef void __fastcall (__closure *TRichEditFindErrorEvent)(System::TObject* Sender, const AnsiString
+ FindText);
+
+typedef void __fastcall (__closure *TRichEditFindCloseEvent)(System::TObject* Sender, Dialogs::TFindDialog*
+ Dialog);
+
+#pragma option push -b-
+enum TUndoName { unUnknown, unTyping, unDelete, unDragDrop, unCut, unPaste };
+#pragma option pop
+
+#pragma option push -b-
+enum TRichStreamFormat { sfDefault, sfRichText, sfPlainText };
+#pragma option pop
+
+#pragma option push -b-
+enum TRichStreamMode { smSelection, smPlainRtf, smNoObjects, smUnicode };
+#pragma option pop
+
+typedef Set<TRichStreamMode, smSelection, smUnicode> TRichStreamModes;
+
+#pragma option push -b-
+enum TRichSelection { stText, stObject, stMultiChar, stMultiObject };
+#pragma option pop
+
+typedef Set<TRichSelection, stText, stMultiObject> TRichSelectionType;
+
+#pragma option push -b-
+enum TRichSearchType { stWholeWord, stMatchCase, stBackward, stSetSelection };
+#pragma option pop
+
+typedef Set<TRichSearchType, stWholeWord, stSetSelection> TRichSearchTypes;
+
+class PASCALIMPLEMENTATION TRxCustomRichEdit : public Stdctrls::TCustomMemo
+{
+ typedef Stdctrls::TCustomMemo inherited;
+
+private:
+ bool FHideScrollBars;
+ bool FSelectionBar;
+ bool FAutoURLDetect;
+ bool FWordSelection;
+ bool FPlainText;
+ TRxTextAttributes* FSelAttributes;
+ TRxTextAttributes* FDefAttributes;
+ TRxTextAttributes* FWordAttributes;
+ TRxParaAttributes* FParagraph;
+ TParaAlignment FOldParaAlignment;
+ int FScreenLogPixels;
+ int FUndoLimit;
+ Classes::TStrings* FRichEditStrings;
+ Classes::TMemoryStream* FMemStream;
+ bool FHideSelection;
+ TRichLangOptions FLangOptions;
+ bool FModified;
+ bool FLinesUpdating;
+ Windows::TRect FPageRect;
+ _charrange FClickRange;
+ Controls::TMouseButton FClickBtn;
+ Dialogs::TFindDialog* FFindDialog;
+ Dialogs::TReplaceDialog* FReplaceDialog;
+ Dialogs::TFindDialog* FLastFind;
+ bool FAllowObjects;
+ System::TObject* FCallback;
+ _di_IUnknown FRichEditOle;
+ Menus::TPopupMenu* FPopupVerbMenu;
+ AnsiString FTitle;
+ bool FAutoVerbMenu;
+ bool FAllowInPlace;
+ TMetaClass*FDefaultConverter;
+ Classes::TNotifyEvent FOnSelChange;
+ Comctrls::TRichEditResizeEvent FOnResizeRequest;
+ Comctrls::TRichEditProtectChange FOnProtectChange;
+ TRichEditProtectChangeEx FOnProtectChangeEx;
+ Comctrls::TRichEditSaveClipboard FOnSaveClipboard;
+ TRichEditURLClickEvent FOnURLClick;
+ TRichEditFindErrorEvent FOnTextNotFound;
+ TRichEditFindCloseEvent FOnCloseFindDialog;
+ bool __fastcall GetAutoURLDetect(void);
+ bool __fastcall GetWordSelection(void);
+ TRichLangOptions __fastcall GetLangOptions(void);
+ bool __fastcall GetCanRedo(void);
+ bool __fastcall GetCanPaste(void);
+ TUndoName __fastcall GetRedoName(void);
+ TUndoName __fastcall GetUndoName(void);
+ TRichStreamFormat __fastcall GetStreamFormat(void);
+ TRichStreamModes __fastcall GetStreamMode(void);
+ TRichSelectionType __fastcall GetSelectionType(void);
+ void __fastcall PopupVerbClick(System::TObject* Sender);
+ void __fastcall ObjectPropsClick(System::TObject* Sender);
+ void __fastcall CloseObjects(void);
+ void __fastcall UpdateHostNames(void);
+ void __fastcall SetAllowObjects(bool Value);
+ void __fastcall SetStreamFormat(TRichStreamFormat Value);
+ void __fastcall SetStreamMode(TRichStreamModes Value);
+ void __fastcall SetAutoURLDetect(bool Value);
+ void __fastcall SetWordSelection(bool Value);
+ void __fastcall SetHideScrollBars(bool Value);
+ HIDESBASE void __fastcall SetHideSelection(bool Value);
+ void __fastcall SetTitle(const AnsiString Value);
+ void __fastcall SetLangOptions(TRichLangOptions Value);
+ void __fastcall SetRichEditStrings(Classes::TStrings* Value);
+ void __fastcall SetDefAttributes(TRxTextAttributes* Value);
+ void __fastcall SetSelAttributes(TRxTextAttributes* Value);
+ void __fastcall SetWordAttributes(TRxTextAttributes* Value);
+ void __fastcall SetSelectionBar(bool Value);
+ void __fastcall SetUndoLimit(int Value);
+ void __fastcall UpdateTextModes(bool Plain);
+ void __fastcall AdjustFindDialogPosition(Dialogs::TFindDialog* Dialog);
+ void __fastcall SetupFindDialog(Dialogs::TFindDialog* Dialog, const AnsiString SearchStr, const AnsiString
+ ReplaceStr);
+ bool __fastcall FindEditText(Dialogs::TFindDialog* Dialog, bool AdjustPos, bool Events);
+ bool __fastcall GetCanFindNext(void);
+ void __fastcall FindDialogFind(System::TObject* Sender);
+ void __fastcall ReplaceDialogReplace(System::TObject* Sender);
+ void __fastcall FindDialogClose(System::TObject* Sender);
+ void __fastcall SetUIActive(bool Active);
+ MESSAGE void __fastcall CMDocWindowActivate(Messages::TMessage &Message);
+ MESSAGE void __fastcall CMUIDeactivate(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall CMBiDiModeChanged(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall CMColorChanged(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall CMFontChanged(Messages::TMessage &Message);
+ MESSAGE void __fastcall CNNotify(Messages::TWMNotify &Message);
+ MESSAGE void __fastcall EMReplaceSel(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall WMDestroy(Messages::TWMNoParams &Msg);
+ HIDESBASE MESSAGE void __fastcall WMMouseMove(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall WMPaint(Messages::TWMPaint &Message);
+ HIDESBASE MESSAGE void __fastcall WMSetCursor(Messages::TWMSetCursor &Message);
+ HIDESBASE MESSAGE void __fastcall WMSetFont(Messages::TWMSetFont &Message);
+ HIDESBASE MESSAGE void __fastcall WMRButtonUp(Messages::TMessage &Message);
+
+protected:
+ virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
+ virtual void __fastcall CreateWindowHandle(const Controls::TCreateParams &Params);
+ virtual void __fastcall CreateWnd(void);
+ virtual void __fastcall DestroyWnd(void);
+ DYNAMIC Menus::TPopupMenu* __fastcall GetPopupMenu(void);
+ virtual void __fastcall TextNotFound(Dialogs::TFindDialog* Dialog);
+ virtual void __fastcall RequestSize(const Windows::TRect &Rect);
+ DYNAMIC void __fastcall SelectionChange(void);
+ DYNAMIC bool __fastcall ProtectChange(const Messages::TMessage &Message, int StartPos, int EndPos);
+
+ DYNAMIC bool __fastcall SaveClipboard(int NumObj, int NumChars);
+ DYNAMIC void __fastcall URLClick(const AnsiString URLText, Controls::TMouseButton Button);
+ virtual void __fastcall SetPlainText(bool Value);
+ virtual void __fastcall CloseFindDialog(Dialogs::TFindDialog* Dialog);
+ virtual void __fastcall DoSetMaxLength(int Value);
+ virtual int __fastcall GetSelLength(void);
+ virtual int __fastcall GetSelStart(void);
+ virtual AnsiString __fastcall GetSelText(void);
+ virtual void __fastcall SetSelLength(int Value);
+ virtual void __fastcall SetSelStart(int Value);
+ __property bool AllowInPlace = {read=FAllowInPlace, write=FAllowInPlace, default=1};
+ __property bool AllowObjects = {read=FAllowObjects, write=SetAllowObjects, default=1};
+ __property bool AutoURLDetect = {read=GetAutoURLDetect, write=SetAutoURLDetect, default=1};
+ __property bool AutoVerbMenu = {read=FAutoVerbMenu, write=FAutoVerbMenu, default=1};
+ __property bool HideSelection = {read=FHideSelection, write=SetHideSelection, default=1};
+ __property bool HideScrollBars = {read=FHideScrollBars, write=SetHideScrollBars, default=1};
+ __property AnsiString Title = {read=FTitle, write=SetTitle};
+ __property TRichLangOptions LangOptions = {read=GetLangOptions, write=SetLangOptions, default=2};
+ __property Classes::TStrings* Lines = {read=FRichEditStrings, write=SetRichEditStrings};
+ __property bool PlainText = {read=FPlainText, write=SetPlainText, default=0};
+ __property bool SelectionBar = {read=FSelectionBar, write=SetSelectionBar, default=1};
+ __property TRichStreamFormat StreamFormat = {read=GetStreamFormat, write=SetStreamFormat, default=0
+ };
+ __property TRichStreamModes StreamMode = {read=GetStreamMode, write=SetStreamMode, default=0};
+ __property int UndoLimit = {read=FUndoLimit, write=SetUndoLimit, default=100};
+ __property bool WordSelection = {read=GetWordSelection, write=SetWordSelection, default=1};
+ __property ScrollBars ;
+ __property TabStop ;
+ __property Comctrls::TRichEditSaveClipboard OnSaveClipboard = {read=FOnSaveClipboard, write=FOnSaveClipboard
+ };
+ __property Classes::TNotifyEvent OnSelectionChange = {read=FOnSelChange, write=FOnSelChange};
+ __property Comctrls::TRichEditProtectChange OnProtectChange = {read=FOnProtectChange, write=FOnProtectChange
+ };
+ __property TRichEditProtectChangeEx OnProtectChangeEx = {read=FOnProtectChangeEx, write=FOnProtectChangeEx
+ };
+ __property Comctrls::TRichEditResizeEvent OnResizeRequest = {read=FOnResizeRequest, write=FOnResizeRequest
+ };
+ __property TRichEditURLClickEvent OnURLClick = {read=FOnURLClick, write=FOnURLClick};
+ __property TRichEditFindErrorEvent OnTextNotFound = {read=FOnTextNotFound, write=FOnTextNotFound};
+ __property TRichEditFindCloseEvent OnCloseFindDialog = {read=FOnCloseFindDialog, write=FOnCloseFindDialog
+ };
+
+public:
+ __fastcall virtual TRxCustomRichEdit(Classes::TComponent* AOwner);
+ __fastcall virtual ~TRxCustomRichEdit(void);
+ virtual void __fastcall Clear(void);
+ void __fastcall SetSelection(int StartPos, int EndPos, bool ScrollCaret);
+ _charrange __fastcall GetSelection(void);
+ AnsiString __fastcall GetTextRange(int StartPos, int EndPos);
+ int __fastcall LineFromChar(int CharIndex);
+ int __fastcall GetLineIndex(int LineNo);
+ int __fastcall GetLineLength(int CharIndex);
+ AnsiString __fastcall WordAtCursor(void);
+ int __fastcall FindText(const AnsiString SearchStr, int StartPos, int Length, TRichSearchTypes Options
+ );
+ int __fastcall SearchText(const AnsiString SearchStr, int StartPos, int Length, TRichSearchTypes Options
+ );
+ virtual int __fastcall GetSelTextBuf(char * Buffer, int BufSize);
+ virtual Windows::TPoint __fastcall GetCaretPos(void);
+ Windows::TPoint __fastcall GetCharPos(int CharIndex);
+ bool __fastcall InsertObjectDialog(void);
+ bool __fastcall ObjectPropertiesDialog(void);
+ bool __fastcall PasteSpecialDialog(void);
+ Dialogs::TFindDialog* __fastcall FindDialog(const AnsiString SearchStr);
+ Dialogs::TReplaceDialog* __fastcall ReplaceDialog(const AnsiString SearchStr, const AnsiString ReplaceStr
+ );
+ bool __fastcall FindNext(void);
+ virtual void __fastcall Print(const AnsiString Caption);
+ /* class method */ static void __fastcall RegisterConversionFormat(TMetaClass* vmt, const AnsiString
+ AExtension, bool APlainText, TMetaClass* AConversionClass);
+ HIDESBASE void __fastcall ClearUndo(void);
+ void __fastcall Redo(void);
+ void __fastcall StopGroupTyping(void);
+ __property bool CanFindNext = {read=GetCanFindNext, nodefault};
+ __property bool CanRedo = {read=GetCanRedo, nodefault};
+ __property bool CanPaste = {read=GetCanPaste, nodefault};
+ __property TUndoName RedoName = {read=GetRedoName, nodefault};
+ __property TUndoName UndoName = {read=GetUndoName, nodefault};
+ __property TMetaClass* DefaultConverter = {read=FDefaultConverter, write=FDefaultConverter};
+ __property TRxTextAttributes* DefAttributes = {read=FDefAttributes, write=SetDefAttributes};
+ __property TRxTextAttributes* SelAttributes = {read=FSelAttributes, write=SetSelAttributes};
+ __property TRxTextAttributes* WordAttributes = {read=FWordAttributes, write=SetWordAttributes};
+ __property Windows::TRect PageRect = {read=FPageRect, write=FPageRect};
+ __property TRxParaAttributes* Paragraph = {read=FParagraph};
+ __property TRichSelectionType SelectionType = {read=GetSelectionType, nodefault};
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TRxCustomRichEdit(HWND ParentWindow) : Stdctrls::TCustomMemo(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+class PASCALIMPLEMENTATION TRxTextAttributes : public Classes::TPersistent
+{
+ typedef Classes::TPersistent inherited;
+
+private:
+ TRxCustomRichEdit* RichEdit;
+ TRxAttributeType FType;
+ void __fastcall AssignFont(Graphics::TFont* Font);
+ void __fastcall GetAttributes(CHARFORMAT2A &Format);
+ Graphics::TFontCharset __fastcall GetCharset(void);
+ void __fastcall SetCharset(Graphics::TFontCharset Value);
+ TSubscriptStyle __fastcall GetSubscriptStyle(void);
+ void __fastcall SetSubscriptStyle(TSubscriptStyle Value);
+ Graphics::TColor __fastcall GetBackColor(void);
+ Graphics::TColor __fastcall GetColor(void);
+ TRxConsistentAttributes __fastcall GetConsistentAttributes(void);
+ int __fastcall GetHeight(void);
+ bool __fastcall GetHidden(void);
+ bool __fastcall GetDisabled(void);
+ bool __fastcall GetLink(void);
+ AnsiString __fastcall GetName(void);
+ int __fastcall GetOffset(void);
+ Graphics::TFontPitch __fastcall GetPitch(void);
+ bool __fastcall GetProtected(void);
+ Byte __fastcall GetRevAuthorIndex(void);
+ int __fastcall GetSize(void);
+ Graphics::TFontStyles __fastcall GetStyle(void);
+ TUnderlineType __fastcall GetUnderlineType(void);
+ void __fastcall SetAttributes(CHARFORMAT2A &Format);
+ void __fastcall SetBackColor(Graphics::TColor Value);
+ void __fastcall SetColor(Graphics::TColor Value);
+ void __fastcall SetDisabled(bool Value);
+ void __fastcall SetHeight(int Value);
+ void __fastcall SetHidden(bool Value);
+ void __fastcall SetLink(bool Value);
+ void __fastcall SetName(AnsiString Value);
+ void __fastcall SetOffset(int Value);
+ void __fastcall SetPitch(Graphics::TFontPitch Value);
+ void __fastcall SetProtected(bool Value);
+ void __fastcall SetRevAuthorIndex(Byte Value);
+ void __fastcall SetSize(int Value);
+ void __fastcall SetStyle(Graphics::TFontStyles Value);
+ void __fastcall SetUnderlineType(TUnderlineType Value);
+
+protected:
+ void __fastcall InitFormat(CHARFORMAT2A &Format);
+ virtual void __fastcall AssignTo(Classes::TPersistent* Dest);
+
+public:
+ __fastcall TRxTextAttributes(TRxCustomRichEdit* AOwner, TRxAttributeType AttributeType);
+ virtual void __fastcall Assign(Classes::TPersistent* Source);
+ __property Graphics::TFontCharset Charset = {read=GetCharset, write=SetCharset, nodefault};
+ __property Graphics::TColor BackColor = {read=GetBackColor, write=SetBackColor, nodefault};
+ __property Graphics::TColor Color = {read=GetColor, write=SetColor, nodefault};
+ __property TRxConsistentAttributes ConsistentAttributes = {read=GetConsistentAttributes, nodefault}
+ ;
+ __property bool Disabled = {read=GetDisabled, write=SetDisabled, nodefault};
+ __property bool Hidden = {read=GetHidden, write=SetHidden, nodefault};
+ __property bool Link = {read=GetLink, write=SetLink, nodefault};
+ __property AnsiString Name = {read=GetName, write=SetName};
+ __property int Offset = {read=GetOffset, write=SetOffset, nodefault};
+ __property Graphics::TFontPitch Pitch = {read=GetPitch, write=SetPitch, nodefault};
+ __property bool Protected = {read=GetProtected, write=SetProtected, nodefault};
+ __property Byte RevAuthorIndex = {read=GetRevAuthorIndex, write=SetRevAuthorIndex, nodefault};
+ __property TSubscriptStyle SubscriptStyle = {read=GetSubscriptStyle, write=SetSubscriptStyle, nodefault
+ };
+ __property int Size = {read=GetSize, write=SetSize, nodefault};
+ __property Graphics::TFontStyles Style = {read=GetStyle, write=SetStyle, nodefault};
+ __property int Height = {read=GetHeight, write=SetHeight, nodefault};
+ __property TUnderlineType UnderlineType = {read=GetUnderlineType, write=SetUnderlineType, nodefault
+ };
+public:
+ #pragma option push -w-inl
+ /* TPersistent.Destroy */ inline __fastcall virtual ~TRxTextAttributes(void) { }
+ #pragma option pop
+
+};
+
+
+class DELPHICLASS TOEMConversion;
+class PASCALIMPLEMENTATION TOEMConversion : public Comctrls::TConversion
+{
+ typedef Comctrls::TConversion inherited;
+
+public:
+ virtual int __fastcall ConvertReadStream(Classes::TStream* Stream, char * Buffer, int BufSize);
+ virtual int __fastcall ConvertWriteStream(Classes::TStream* Stream, char * Buffer, int BufSize);
+public:
+
+ #pragma option push -w-inl
+ /* TObject.Create */ inline __fastcall TOEMConversion(void) : Comctrls::TConversion() { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TObject.Destroy */ inline __fastcall virtual ~TOEMConversion(void) { }
+ #pragma option pop
+
+};
+
+
+struct TRichConversionFormat;
+typedef TRichConversionFormat *PRichConversionFormat;
+
+struct TRichConversionFormat
+{
+ TMetaClass*ConversionClass;
+ AnsiString Extension;
+ bool PlainText;
+ TRichConversionFormat *Next;
+} ;
+
+class DELPHICLASS TRxRichEdit;
+class PASCALIMPLEMENTATION TRxRichEdit : public TRxCustomRichEdit
+{
+ typedef TRxCustomRichEdit inherited;
+
+__published:
+ __property Align ;
+ __property Alignment ;
+ __property AutoURLDetect ;
+ __property AutoVerbMenu ;
+ __property AllowObjects ;
+ __property AllowInPlace ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property BorderWidth ;
+ __property DragKind ;
+ __property BorderStyle ;
+ __property Color ;
+ __property Ctl3D ;
+ __property DragCursor ;
+ __property DragMode ;
+ __property Enabled ;
+ __property Font ;
+ __property HideSelection ;
+ __property HideScrollBars ;
+ __property Title ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property Constraints ;
+ __property ParentBiDiMode ;
+ __property LangOptions ;
+ __property Lines ;
+ __property MaxLength ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PlainText ;
+ __property PopupMenu ;
+ __property ReadOnly ;
+ __property ScrollBars ;
+ __property SelectionBar ;
+ __property ShowHint ;
+ __property StreamFormat ;
+ __property StreamMode ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property UndoLimit ;
+ __property Visible ;
+ __property WantTabs ;
+ __property WantReturns ;
+ __property WordSelection ;
+ __property WordWrap ;
+ __property OnChange ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnContextPopup ;
+ __property OnEndDock ;
+ __property OnStartDock ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnMouseDown ;
+ __property OnMouseMove ;
+ __property OnMouseUp ;
+ __property OnMouseWheel ;
+ __property OnMouseWheelDown ;
+ __property OnMouseWheelUp ;
+ __property OnProtectChange ;
+ __property OnProtectChangeEx ;
+ __property OnResizeRequest ;
+ __property OnSaveClipboard ;
+ __property OnSelectionChange ;
+ __property OnStartDrag ;
+ __property OnTextNotFound ;
+ __property OnCloseFindDialog ;
+ __property OnURLClick ;
+public:
+ #pragma option push -w-inl
+ /* TRxCustomRichEdit.Create */ inline __fastcall virtual TRxRichEdit(Classes::TComponent* AOwner) :
+ TRxCustomRichEdit(AOwner) { }
+ #pragma option pop
+ #pragma option push -w-inl
+ /* TRxCustomRichEdit.Destroy */ inline __fastcall virtual ~TRxRichEdit(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TRxRichEdit(HWND ParentWindow) : TRxCustomRichEdit(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+//-- var, const, procedure ---------------------------------------------------
+extern PACKAGE TRichEditVersion RichEditVersion;
+
+} /* namespace Rxriched */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Rxriched;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // RxRichEd
diff --git a/apps/windoze/CBuilder5/BibleCS/rxlib/Rxcombos.hpp b/apps/windoze/CBuilder5/BibleCS/rxlib/Rxcombos.hpp
new file mode 100644
index 0000000..8bf3ee7
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/rxlib/Rxcombos.hpp
@@ -0,0 +1,272 @@
+// Borland C++ Builder
+// Copyright (c) 1995, 1999 by Borland International
+// All rights reserved
+
+// (DO NOT EDIT: machine generated header) 'RxCombos.pas' rev: 5.00
+
+#ifndef RxCombosHPP
+#define RxCombosHPP
+
+#pragma delphiheader begin
+#pragma option push -w-
+#pragma option push -Vx
+#include <Menus.hpp> // Pascal unit
+#include <Forms.hpp> // Pascal unit
+#include <StdCtrls.hpp> // Pascal unit
+#include <Graphics.hpp> // Pascal unit
+#include <Controls.hpp> // Pascal unit
+#include <Classes.hpp> // Pascal unit
+#include <Messages.hpp> // Pascal unit
+#include <Windows.hpp> // Pascal unit
+#include <SysInit.hpp> // Pascal unit
+#include <System.hpp> // Pascal unit
+
+//-- user supplied -----------------------------------------------------------
+
+namespace Rxcombos
+{
+//-- type declarations -------------------------------------------------------
+typedef Stdctrls::TComboBoxStyle TOwnerDrawComboStyle;
+
+class DELPHICLASS TOwnerDrawComboBox;
+class PASCALIMPLEMENTATION TOwnerDrawComboBox : public Stdctrls::TCustomComboBox
+{
+ typedef Stdctrls::TCustomComboBox inherited;
+
+private:
+ Stdctrls::TComboBoxStyle FStyle;
+ bool FItemHeightChanging;
+ void __fastcall SetComboStyle(TOwnerDrawComboStyle Value);
+ HIDESBASE MESSAGE void __fastcall CMFontChanged(Messages::TMessage &Message);
+ HIDESBASE MESSAGE void __fastcall CMRecreateWnd(Messages::TMessage &Message);
+
+protected:
+ virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
+ virtual void __fastcall CreateWnd(void);
+ void __fastcall ResetItemHeight(void);
+ virtual int __fastcall MinItemHeight(void);
+ __property TOwnerDrawComboStyle Style = {read=FStyle, write=SetComboStyle, default=2};
+
+public:
+ __fastcall virtual TOwnerDrawComboBox(Classes::TComponent* AOwner);
+public:
+ #pragma option push -w-inl
+ /* TCustomComboBox.Destroy */ inline __fastcall virtual ~TOwnerDrawComboBox(void) { }
+ #pragma option pop
+
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TOwnerDrawComboBox(HWND ParentWindow) : Stdctrls::TCustomComboBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+#pragma option push -b-
+enum TColorComboOption { coIncludeDefault, coIncludeNone };
+#pragma option pop
+
+typedef Set<TColorComboOption, coIncludeDefault, coIncludeNone> TColorComboOptions;
+
+class DELPHICLASS TColorComboBox;
+class PASCALIMPLEMENTATION TColorComboBox : public TOwnerDrawComboBox
+{
+ typedef TOwnerDrawComboBox inherited;
+
+private:
+ Graphics::TColor FColorValue;
+ bool FDisplayNames;
+ Classes::TStrings* FColorNames;
+ TColorComboOptions FOptions;
+ Classes::TNotifyEvent FOnChange;
+ Graphics::TColor __fastcall GetColorValue(void);
+ void __fastcall SetColorValue(Graphics::TColor NewValue);
+ void __fastcall SetDisplayNames(bool Value);
+ void __fastcall SetColorNames(Classes::TStrings* Value);
+ void __fastcall SetOptions(TColorComboOptions Value);
+ void __fastcall ColorNamesChanged(System::TObject* Sender);
+
+protected:
+ virtual void __fastcall CreateWnd(void);
+ virtual void __fastcall DrawItem(int Index, const Windows::TRect &Rect, Windows::TOwnerDrawState State
+ );
+ DYNAMIC void __fastcall Click(void);
+ DYNAMIC void __fastcall Change(void);
+ virtual void __fastcall PopulateList(void);
+ DYNAMIC void __fastcall DoChange(void);
+
+public:
+ __fastcall virtual TColorComboBox(Classes::TComponent* AOwner);
+ __fastcall virtual ~TColorComboBox(void);
+ __property Text ;
+
+__published:
+ __property Graphics::TColor ColorValue = {read=GetColorValue, write=SetColorValue, default=0};
+ __property Classes::TStrings* ColorNames = {read=FColorNames, write=SetColorNames};
+ __property bool DisplayNames = {read=FDisplayNames, write=SetDisplayNames, default=1};
+ __property TColorComboOptions Options = {read=FOptions, write=SetOptions, default=0};
+ __property Color ;
+ __property Ctl3D ;
+ __property DragMode ;
+ __property DragCursor ;
+ __property Enabled ;
+ __property Font ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property Constraints ;
+ __property DragKind ;
+ __property ParentBiDiMode ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PopupMenu ;
+ __property ShowHint ;
+ __property Style ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property Visible ;
+ __property Classes::TNotifyEvent OnChange = {read=FOnChange, write=FOnChange};
+ __property OnClick ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnDropDown ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnStartDrag ;
+ __property OnContextPopup ;
+ __property OnEndDock ;
+ __property OnStartDock ;
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TColorComboBox(HWND ParentWindow) : TOwnerDrawComboBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+#pragma option push -b-
+enum TFontDevice { fdScreen, fdPrinter, fdBoth };
+#pragma option pop
+
+#pragma option push -b-
+enum TFontListOption { foAnsiOnly, foTrueTypeOnly, foFixedPitchOnly, foNoOEMFonts, foOEMFontsOnly, foScalableOnly,
+ foNoSymbolFonts };
+#pragma option pop
+
+typedef Set<TFontListOption, foAnsiOnly, foNoSymbolFonts> TFontListOptions;
+
+class DELPHICLASS TFontComboBox;
+class PASCALIMPLEMENTATION TFontComboBox : public TOwnerDrawComboBox
+{
+ typedef TOwnerDrawComboBox inherited;
+
+private:
+ Graphics::TBitmap* FTrueTypeBMP;
+ Graphics::TBitmap* FDeviceBMP;
+ Classes::TNotifyEvent FOnChange;
+ TFontDevice FDevice;
+ bool FUpdate;
+ bool FUseFonts;
+ TFontListOptions FOptions;
+ void __fastcall SetFontName(const AnsiString NewFontName);
+ AnsiString __fastcall GetFontName();
+ bool __fastcall GetTrueTypeOnly(void);
+ void __fastcall SetDevice(TFontDevice Value);
+ void __fastcall SetOptions(TFontListOptions Value);
+ void __fastcall SetTrueTypeOnly(bool Value);
+ void __fastcall SetUseFonts(bool Value);
+ void __fastcall Reset(void);
+ HIDESBASE MESSAGE void __fastcall WMFontChange(Messages::TMessage &Message);
+
+protected:
+ virtual void __fastcall PopulateList(void);
+ DYNAMIC void __fastcall Change(void);
+ DYNAMIC void __fastcall Click(void);
+ DYNAMIC void __fastcall DoChange(void);
+ virtual void __fastcall CreateWnd(void);
+ virtual void __fastcall DrawItem(int Index, const Windows::TRect &Rect, Windows::TOwnerDrawState State
+ );
+ virtual int __fastcall MinItemHeight(void);
+
+public:
+ __fastcall virtual TFontComboBox(Classes::TComponent* AOwner);
+ __fastcall virtual ~TFontComboBox(void);
+ __property Text ;
+
+__published:
+ __property TFontDevice Device = {read=FDevice, write=SetDevice, default=0};
+ __property AnsiString FontName = {read=GetFontName, write=SetFontName};
+ __property TFontListOptions Options = {read=FOptions, write=SetOptions, default=0};
+ __property bool TrueTypeOnly = {read=GetTrueTypeOnly, write=SetTrueTypeOnly, stored=false, nodefault
+ };
+ __property bool UseFonts = {read=FUseFonts, write=SetUseFonts, default=0};
+ __property Color ;
+ __property Ctl3D ;
+ __property DragMode ;
+ __property DragCursor ;
+ __property Enabled ;
+ __property Font ;
+ __property Anchors ;
+ __property BiDiMode ;
+ __property Constraints ;
+ __property DragKind ;
+ __property ParentBiDiMode ;
+ __property ImeMode ;
+ __property ImeName ;
+ __property ParentColor ;
+ __property ParentCtl3D ;
+ __property ParentFont ;
+ __property ParentShowHint ;
+ __property PopupMenu ;
+ __property ShowHint ;
+ __property Style ;
+ __property TabOrder ;
+ __property TabStop ;
+ __property Visible ;
+ __property Classes::TNotifyEvent OnChange = {read=FOnChange, write=FOnChange};
+ __property OnClick ;
+ __property OnDblClick ;
+ __property OnDragDrop ;
+ __property OnDragOver ;
+ __property OnDropDown ;
+ __property OnEndDrag ;
+ __property OnEnter ;
+ __property OnExit ;
+ __property OnKeyDown ;
+ __property OnKeyPress ;
+ __property OnKeyUp ;
+ __property OnStartDrag ;
+ __property OnContextPopup ;
+ __property OnEndDock ;
+ __property OnStartDock ;
+public:
+ #pragma option push -w-inl
+ /* TWinControl.CreateParented */ inline __fastcall TFontComboBox(HWND ParentWindow) : TOwnerDrawComboBox(
+ ParentWindow) { }
+ #pragma option pop
+
+};
+
+
+//-- var, const, procedure ---------------------------------------------------
+
+} /* namespace Rxcombos */
+#if !defined(NO_IMPLICIT_NAMESPACE_USE)
+using namespace Rxcombos;
+#endif
+#pragma option pop // -w-
+#pragma option pop // -Vx
+
+#pragma delphiheader end.
+//-- end unit ----------------------------------------------------------------
+#endif // RxCombos
diff --git a/apps/windoze/CBuilder5/BibleCS/save.bmp b/apps/windoze/CBuilder5/BibleCS/save.bmp
new file mode 100644
index 0000000..0ec6204
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/save.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/schemes.conf b/apps/windoze/CBuilder5/BibleCS/schemes.conf
new file mode 100644
index 0000000..66bd2c0
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/schemes.conf
@@ -0,0 +1,84 @@
+[Default]
+CommentBackColor=16777215
+CommentFontColor=0
+CommentFontName=Times New Roman
+CommentFontSize=12
+CurrentVSColor=16711680
+FieldColor=16776960
+LDBackColor=16777215
+LDFontColor=0
+LDFontName=Times New Roman
+LDFontSize=12
+TextBackColor=16777215
+TextFontColor=0
+TextFontName=Times New Roman
+TextFontSize=12
+VSNumberColor=16711680
+
+[Parchment]
+CommentBackColor=13434879
+CommentFontColor=0
+CommentFontName=Arial
+CommentFontSize=10
+CurrentVSColor=4227327
+FieldColor=16777215
+LDBackColor=13434879
+LDFontColor=0
+LDFontName=Arial
+LDFontSize=10
+TextBackColor=13434879
+TextFontColor=0
+TextFontName=Arial
+TextFontSize=10
+VSNumberColor=4227327
+
+[Midnight]
+CommentBackColor=0
+CommentFontColor=65280
+CommentFontName=Arial
+CommentFontSize=14
+CurrentVSColor=65535
+FieldColor=12632256
+LDBackColor=0
+LDFontColor=65280
+LDFontName=Arial
+LDFontSize=14
+TextBackColor=0
+TextFontColor=65280
+TextFontName=Arial
+TextFontSize=14
+VSNumberColor=8454143
+
+[Light Blues]
+CommentBackColor=16771797
+CommentFontColor=8388608
+CommentFontName=MS Sans Serif
+CommentFontSize=12
+CurrentVSColor=8388863
+FieldColor=16771797
+LDBackColor=16771797
+LDFontColor=8388608
+LDFontName=MS Sans Serif
+LDFontSize=12
+TextBackColor=16771797
+TextFontColor=8388608
+TextFontName=MS Sans Serif
+TextFontSize=12
+VSNumberColor=255
+
+[Lighten Up]
+CommentBackColor=16777215
+CommentFontColor=8421504
+CommentFontName=MS Serif
+CommentFontSize=12
+CurrentVSColor=0
+FieldColor=12632256
+LDBackColor=16777215
+LDFontColor=8421504
+LDFontName=MS Serif
+LDFontSize=12
+TextBackColor=16777215
+TextFontColor=8421504
+TextFontName=MS Serif
+TextFontSize=12
+VSNumberColor=12632256
diff --git a/apps/windoze/CBuilder5/BibleCS/search.bmp b/apps/windoze/CBuilder5/BibleCS/search.bmp
new file mode 100644
index 0000000..ee693be
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/search.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp b/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp
new file mode 100644
index 0000000..f661f7f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp
@@ -0,0 +1,414 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "searchfrm.h"
+#include <listkey.h>
+#include "mainfrm.h"
+#include <regex.h>
+#include "RangeMaintFrm.h"
+#include <unicode.hpp>
+#include <unicodertf.h>
+#include "rtfhintfrm.h"
+#include <localemgr.h>
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TsearchForm *searchForm;
+//---------------------------------------------------------------------------
+__fastcall TsearchForm::TsearchForm(TComponent* Owner)
+ : TForm(Owner) {
+ pvrtf = new TRxRichEditX(this);
+
+ pvrtf->Parent = plPreview;
+ pvrtf->Align = alClient;
+ pvrtf->ScrollBars = ssVertical;
+ pvrtf->ReadOnly = true;
+// pvrtf->PopupMenu = PopupMenu2;
+// SearchText = 0;
+// if (!SearchText) {
+ SearchTextOld->Visible = false;
+ SearchText = new TTntComboBox(this);
+ SearchText->Parent = Panel3;
+ SearchText->Align = alClient;
+ SearchText->ParentFont = false;
+ SearchText->Font->Size = 12;
+// }
+
+// mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf)));
+// mod->SetKey(DefaultVSKey);
+// return 0;
+ target = 0;
+}
+//---------------------------------------------------------------------------
+void __fastcall TsearchForm::searchBtnClick(TObject *Sender)
+{
+// ModMap::iterator target;
+ class TWaitCursor {
+ public:
+ TWaitCursor() : oldc(Screen->Cursor) { Screen->Cursor = crHourGlass; }
+ ~TWaitCursor() { Screen->Cursor = oldc; }
+ private:
+ TCursor oldc;
+ } wait; // show hourglass
+
+ if (!SearchText->Text.Length())
+ return;
+
+
+ int index = SearchText->Items->IndexOf(SearchText->Text);
+ SearchText->Items->Insert(0, SearchText->Text);
+
+ if (index >= 0)
+ SearchText->Items->Delete(index+1);
+
+ SearchText->ItemIndex = 0;
+
+ Caption = "";
+
+ if (target) {
+ Caption = _tr("Searching");
+ Caption += (AnsiString)" [ " + (AnsiString)target->Description() + (AnsiString)" (" + (AnsiString)target->Name() + (AnsiString)") ]...";
+ resultsLV->Items->Clear();
+ int searchType;
+ switch (searchTypeGroup->ItemIndex) {
+ case 0: searchType = -2; break;
+ case 1: searchType = -1; break;
+ case 2: searchType = 0; break;
+ }
+ int searchOptions = (caseSensitiveCkBx->Checked) ? 0 : REG_ICASE;
+ SWKey *scope = 0;
+ switch (scopeGroup->ItemIndex) {
+ case 2:
+ if (ComboBox1->ItemIndex < 0)
+ results = VerseKey().ParseVerseList(ComboBox1->Text.c_str(), "", true);
+ else {
+ TCustomRange *rs = (TCustomRange *)ComboBox1->Items->Objects[ComboBox1->ItemIndex];
+ results = VerseKey().ParseVerseList(rs->text.c_str(), "", true);
+ }
+ case 1:
+ if (!results.Count())
+ return;
+ scope = &results; break;
+ }
+
+ searchBtn->Caption = _tr("Halt");
+ searchBtn->OnClick = TerminateSearch;
+ searchThread = new TSearchThread(this, WideStringToUTF8(SearchText->Text).c_str(), searchType, searchOptions, scope);
+ }
+ else Caption = "Error finding target module";
+}
+
+
+void __fastcall TsearchForm::TerminateSearch(TObject *Sender)
+{
+ target->terminateSearch = true;
+}
+
+//---------------------------------------------------------------------------
+void __fastcall TsearchForm::ListBox1DblClick(TObject *Sender)
+{
+ if (!resultsLV->Items->Count) return; // assert items in list view
+
+ TListItem *focused = resultsLV->ItemFocused;
+ if (focused) {
+ int row = focused->Index;
+ if (targetpc == Form1->LexDictPageControl) {
+ Form1->DictKeyEdit->Text = resultsLV->Items->Item[row]->Caption.c_str();
+ }
+ else {
+ *(Form1->DefaultVSKey) = resultsLV->Items->Item[row]->Caption.c_str();
+ Form1->TextKeyChanged();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TsearchForm::ListBox1Click(TObject *Sender)
+{
+ if (!resultsLV->Items->Count) return; // assert items in list view
+
+ if (target) {
+ TListItem *focused = resultsLV->ItemFocused;
+ if (focused) {
+ int row = focused->Index;
+ ListKey verse;
+ verse << resultsLV->Items->Item[row]->Caption.c_str();
+ pvrtf->fillWithVerses(target, &verse, true, false);
+ }
+ }
+}
+
+//---------------------------------------------------------------------------
+
+__fastcall TsearchForm::TSearchThread::TSearchThread(TsearchForm *parent, string searchText, int searchType, int searchOptions, SWKey *scope, bool CreateSuspended)
+ : TThread(CreateSuspended)
+{
+ this->parent = parent;
+ this->searchText = searchText;
+ this->searchType = searchType;
+ this->searchOptions = searchOptions;
+ this->scope = scope;
+ Priority = tpNormal;
+ FreeOnTerminate = true;
+}
+
+
+void __fastcall TsearchForm::TSearchThread::updateProgressBar(void) {
+ parent->progressBar->Position = parent->status;
+ parent->progressBar->Repaint();
+}
+
+
+void __fastcall TsearchForm::TSearchThread::updateStatus(void) {
+ Synchronize((TThreadMethod)&updateProgressBar);
+}
+
+
+void TsearchForm::TSearchThread::searchProgressCallback(char status, void *searchThread) {
+ TsearchForm::TSearchThread *thread = (TsearchForm::TSearchThread *)searchThread;
+ thread->parent->status = status;
+ thread->updateStatus();
+}
+
+
+void __fastcall TsearchForm::TSearchThread::FillListBox(void)
+{
+ TListItem *pItem;
+
+ SWKey *savekey = (SWKey *)*(parent->target);
+ for (results = TOP; !results.Error(); results++) {
+ parent->target->SetKey(results);
+ pItem = parent->resultsLV->Items->Add();
+ pItem->Caption = (const char *)results;
+ pItem->SubItems->Add("");
+// pItem->SubItems->Add((*parent->target).second->StripText());
+// pItem = resultsLV->Items->Add(
+ }
+ parent->target->SetKey(*savekey);
+// ListBox1->Items->Pack(); // so Count is set correctly (per helpfile)
+ parent->Caption = ((AnsiString)parent->resultsLV->Items->Count + (AnsiString)" " + (AnsiString)((parent->resultsLV->Items->Count == 1) ? _tr("match") : _tr("matches"))) + (AnsiString)" from [ " + (AnsiString)parent->target->Description() + (AnsiString)" (" + (AnsiString)parent->target->Name() + (AnsiString)") ]";
+ parent->searchBtn->Caption = _tr("Search");
+ parent->searchBtn->OnClick = parent->searchBtnClick;
+}
+
+void __fastcall TsearchForm::TSearchThread::Execute()
+{
+ results = parent->target->Search(searchText.c_str(), searchType, searchOptions, scope, 0, searchProgressCallback, this);
+
+ Synchronize((TThreadMethod)&FillListBox);
+ parent->results = results;
+}
+
+
+
+
+void __fastcall TsearchForm::scopeGroupClick(TObject *Sender) {
+ bool enabled = (scopeGroup->ItemIndex == 2);
+
+ customRangeBtn->Enabled = enabled;
+ ComboBox1->Enabled = enabled;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::customRangeBtnClick(TObject *Sender)
+{
+ RangeMaintForm->ShowModal();
+ populateRanges();
+}
+//---------------------------------------------------------------------------
+
+void TsearchForm::populateRanges() {
+ ConfigEntMap::iterator loop, end;
+ SWConfig config("./options.conf");
+ ComboBox1->Clear();
+ loop = config.Sections["CustomRanges"].begin();
+ end = config.Sections["CustomRanges"].end();
+ while (loop != end) {
+ TCustomRange *rs = new TCustomRange(loop->first.c_str(), loop->second.c_str());
+ ComboBox1->Items->AddObject(rs->name.c_str(), rs);
+ loop++;
+ }
+}
+
+
+void __fastcall TsearchForm::FormShow(TObject *Sender)
+{
+ populateRanges();
+ fillList();
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TsearchForm::resultsLVChange(TObject *Sender, TListItem *Item,
+ TItemChange Change)
+{
+ ListBox1Click(Sender);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::resultsLVCustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw) {
+
+ if (target && !Form1->closing) {
+ TRect rect = Item->DisplayRect(drSelectBounds);
+ static UnicodeRTF filter;
+ char buf[255];
+ strcpy(buf, Item->Caption.c_str());
+
+ SWKey *key = *target;
+ if (!SWDYNAMIC_CAST(VerseKey, key))
+ filter.ProcessText(buf, 253, *target, target);
+
+ RTFHintForm->searchListDrawer->fillWithRTFString(target, ((String)" \\b " + buf + " ").c_str());
+ if (resultsLV->Selected == Item) RTFHintForm->searchListDrawer->Color = TColor(0xB4CDBB);
+ Sender->Canvas->Brush->Color = RTFHintForm->searchListDrawer->Color;
+ Sender->Canvas->FillRect(rect);
+
+ rect.Right = resultsLV->Column[0]->Width;
+ RTFHintForm->searchListDrawer->paintTo(Sender->Canvas->Handle, &rect, 0);
+
+ ListKey verse;
+ verse << Item->Caption.c_str();
+ RTFHintForm->searchListDrawer->fillWithVerses(target, &verse, false, false, "Default", true);
+ //set color back in case it got changed in fill*
+ if (resultsLV->Selected == Item) RTFHintForm->searchListDrawer->Color = TColor(0xB4CDBB);
+
+ RTFHintForm->searchListDrawer->SelStart = 3;
+ RTFHintForm->searchListDrawer->SelLength = 1;
+ double textHeight = RTFHintForm->searchListDrawer->SelAttributes->Height;
+ double multiplier = 1.2;
+ textHeight *= multiplier;
+ int textWithMargin = 3 + textHeight;
+ if (resultsLV->StateImages->Height != textWithMargin) {
+ resultsLV->StateImages->Height = textWithMargin;
+ DefaultDraw = false;
+ return;
+ }
+ RTFHintForm->searchListDrawer->SelLength = 0;
+
+ rect = Item->DisplayRect(drSelectBounds);
+ rect.Left = rect.Left + resultsLV->Column[0]->Width;// + 5;
+ RTFHintForm->searchListDrawer->paintTo(Sender->Canvas->Handle, &rect, 0);
+ }
+ DefaultDraw = false;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::resultsLVInfoTip(TObject *Sender,
+ TListItem *Item, AnsiString &InfoTip)
+{
+ InfoTip = "";
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::Button1Click(TObject *Sender)
+{
+ bool newVisible = !pnlChooseMod->Visible;
+ ChooseModSplitter->Visible = newVisible;
+ pnlChooseMod->Visible = newVisible;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::FormActivate(TObject *Sender)
+{
+ if (!Form1->closing) {
+ Mouse->Capture = 0;
+ if (searchBtn->OnClick != TerminateSearch) {
+ TPageControl *targetpc = Form1->TextPageControl;
+
+ if ((Form1->ActiveControl == Form1->CommentaryPageControl) || (IsChild(Form1->CommentaryPageControl->Handle, Form1->ActiveControl->Handle)))
+ targetpc = Form1->CommentaryPageControl;
+ if ((Form1->ActiveControl == Form1->LexDictPageControl) || (IsChild(Form1->LexDictPageControl->Handle, Form1->ActiveControl->Handle)))
+ targetpc = Form1->LexDictPageControl;
+
+
+ ModMap::iterator it = Form1->mainmgr->Modules.find(targetpc->ActivePage->Caption.c_str());
+ if (it != Form1->mainmgr->Modules.end()) {
+ setTarget(it->second);
+ }
+ SearchText->SetFocus();
+ }
+ }
+}
+
+void TsearchForm::setTarget(SWModule *itarget) {
+ target = itarget;
+ moduleName->Caption = target->Description() + (AnsiString) " (" + target->Name() + ")";
+ RTFHintForm->searchListDrawer->fillWithRTFString(target, "yoyo");
+ SearchText->Font->Name = RTFHintForm->searchListDrawer->dispAttribs.fontName;
+// SearchText->Font->Size = RTFHintForm->searchListDrawer->dispAttribs.fontSize;
+}
+//---------------------------------------------------------------------------
+
+void TsearchForm::fillList()
+{
+ BibleCSMGR *manager;
+ ModMap::iterator mods;
+ TTreeNode *node;
+ string nodeName;
+ manager = Form1->mainmgr;
+
+ modTreeView->Items->Clear();
+
+ if (!manager->configPath)
+ return;
+
+ for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
+ for (node = modTreeView->Items->GetFirstNode(); node; node = node->getNextSibling()) {
+ if (!strcmp(node->Text.c_str(), mods->second->Type())) {
+ break;
+ }
+ }
+ if (!node) { // Add Section
+ if (!strncmp(mods->second->Type(), "Bibl", 4)) // If Bibles, put first in list
+ node = modTreeView->Items->AddChildFirst(0, mods->second->Type());
+ else node = modTreeView->Items->AddChild(0, mods->second->Type());
+ }
+ nodeName = "[";
+ nodeName += mods->second->Name();
+ nodeName += "] ";
+ nodeName += mods->second->Description();
+ node = modTreeView->Items->AddChildObject(node, nodeName.c_str(), mods->second->Name());
+
+ }
+ //for (node = modTreeView->Items->GetFirstNode(); node; node = node->getNextSibling())
+ // node->Expand(true);
+ node = modTreeView->Items->GetFirstNode();
+ if (node)
+ node->MakeVisible();
+}
+
+void __fastcall TsearchForm::modTreeViewChange(TObject *Sender, TTreeNode *Node) {
+ BibleCSMGR *manager;
+ ModMap::iterator mods;
+ TTreeNode *node;
+ string nodeName;
+ manager = Form1->mainmgr;
+ TTreeNode* currNode = modTreeView->Selected;
+ AnsiString nodeSubString;
+ AnsiString modName;
+
+ for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
+ if (currNode->Text.SubString(2, currNode->Text.Pos("]") - 2) == mods->second->Name()) { // Add Section
+ setTarget(mods->second);
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TsearchForm::Button2Click(TObject *Sender)
+{
+ string helpDir;
+ ConfigEntMap::iterator it = Form1->optionsconf->Sections["Help"].find("Directory");
+ if (it != Form1->optionsconf->Sections["Help"].end())
+ helpDir = (*it).second;
+ else helpDir = ".\\help";
+
+ string helpExe = helpDir + "\\Sword.chm::searchh.html";
+ if ((int)ShellExecute(this->Handle, "open", "hh", helpExe.c_str(), NULL, SW_SHOWNORMAL) < 33) {
+ helpExe = helpDir + "\\searchh.html";
+ ShellExecute(this->Handle, "open", helpExe.c_str(), NULL, NULL, SW_SHOWNORMAL);
+ }
+
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/searchfrm.dfm b/apps/windoze/CBuilder5/BibleCS/searchfrm.dfm
new file mode 100644
index 0000000..c3b607f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/searchfrm.dfm
@@ -0,0 +1,393 @@
+object searchForm: TsearchForm
+ Left = 332
+ Top = 103
+ Width = 494
+ Height = 474
+ Caption = 'Search...'
+ Color = clBtnFace
+ Constraints.MinHeight = 360
+ Constraints.MinWidth = 360
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001002020100000000000E80200001600000028000000200000004000
+ 0000010004000000000080020000000000000000000000000000000000000000
+ 000000008000008000000080800080000000800080008080000080808000C0C0
+ C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF006666
+ 6666666666666666666666666666688888888888888888088888888888866888
+ 8888888888888880888888888886688888888888888888808888888888866888
+ 8008888088008880800080008800688888088880880808808080808088006888
+ 8808888088080880800880888806688888008880080808880080808088066888
+ 8808080080800800080088008000688888080888888888888888888888066888
+ 8000088888888888888888888806688888888888888888880888888888866008
+ 8808880888877777777878888F86088088088808887888877788888888F60880
+ 800888078788888878878888888F6800808080878788888878878888888F6088
+ 808087878788888877788888888F0888088087887788888878888888888F0808
+ 0888788878788887788888F888F600000087778777877777777888FFFF866888
+ 8880888888888888888888888886688888880888888888888888888888866800
+ 8880808800088888888888888886688088808808080888888888888888866880
+ 8880080800888888888888888886688088800008080888888888888888866880
+ 8880880880088888888888888886088080808888888888888888888888860000
+ 0080888888888888888888888886688888808888888888888888888888866888
+ 8888088888888888888888888886666666660666666666666666666666660000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ OnActivate = FormActivate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object ChooseModSplitter: TSplitter
+ Left = 101
+ Top = 0
+ Width = 5
+ Height = 431
+ Cursor = crHSplit
+ Visible = False
+ end
+ object pnlChooseMod: TPanel
+ Left = 0
+ Top = 0
+ Width = 101
+ Height = 431
+ Align = alLeft
+ TabOrder = 0
+ Visible = False
+ object Panel9: TPanel
+ Left = 1
+ Top = 1
+ Width = 99
+ Height = 24
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object lblChooseModule: TLabel
+ Left = 4
+ Top = 6
+ Width = 74
+ Height = 13
+ Caption = 'Choose Module'
+ end
+ end
+ object modTreeView: TTreeView
+ Left = 1
+ Top = 25
+ Width = 99
+ Height = 405
+ Align = alClient
+ Indent = 19
+ TabOrder = 1
+ OnChange = modTreeViewChange
+ end
+ end
+ object Panel7: TPanel
+ Left = 106
+ Top = 0
+ Width = 380
+ Height = 431
+ Align = alClient
+ BevelOuter = bvNone
+ Caption = 'Panel7'
+ TabOrder = 1
+ object pnlResult: TPanel
+ Left = 0
+ Top = 204
+ Width = 380
+ Height = 227
+ Align = alClient
+ TabOrder = 0
+ object Splitter1: TSplitter
+ Left = 1
+ Top = 108
+ Width = 378
+ Height = 5
+ Cursor = crVSplit
+ Align = alBottom
+ ResizeStyle = rsUpdate
+ end
+ object plPreview: TPanel
+ Left = 1
+ Top = 113
+ Width = 378
+ Height = 113
+ Align = alBottom
+ TabOrder = 0
+ end
+ object resultsLV: TListView
+ Left = 1
+ Top = 1
+ Width = 378
+ Height = 107
+ Hint = 'false'
+ Align = alClient
+ Columns = <
+ item
+ Caption = 'Reference'
+ MinWidth = 175
+ Width = 175
+ end
+ item
+ AutoSize = True
+ Caption = 'Preview...'
+ end>
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ HideSelection = False
+ ReadOnly = True
+ RowSelect = True
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ StateImages = searchImageList
+ TabOrder = 1
+ ViewStyle = vsReport
+ OnChange = resultsLVChange
+ OnClick = ListBox1Click
+ OnCustomDrawItem = resultsLVCustomDrawItem
+ OnDblClick = ListBox1DblClick
+ OnInfoTip = resultsLVInfoTip
+ end
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 380
+ Height = 132
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 1
+ object Panel3: TPanel
+ Left = 0
+ Top = 0
+ Width = 380
+ Height = 33
+ Align = alTop
+ BevelOuter = bvNone
+ Caption = 'Panel3'
+ TabOrder = 0
+ object SearchTextOld: TComboBox
+ Left = 0
+ Top = 2
+ Width = 378
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ end
+ object Panel8: TPanel
+ Left = 0
+ Top = 33
+ Width = 380
+ Height = 29
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 1
+ object moduleName: TLabel
+ Left = 28
+ Top = 0
+ Width = 352
+ Height = 29
+ Align = alClient
+ AutoSize = False
+ Caption = 'moduleName'
+ Layout = tlCenter
+ end
+ object Panel6: TPanel
+ Left = 0
+ Top = 0
+ Width = 28
+ Height = 29
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Button1: TButton
+ Left = 3
+ Top = 3
+ Width = 22
+ Height = 21
+ Caption = '...'
+ TabOrder = 0
+ OnClick = Button1Click
+ end
+ end
+ end
+ object Panel10: TPanel
+ Left = 0
+ Top = 62
+ Width = 380
+ Height = 70
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ object searchTypeGroup: TRadioGroup
+ Left = 0
+ Top = 0
+ Width = 164
+ Height = 70
+ Align = alLeft
+ Caption = 'Search Type'
+ ItemIndex = 0
+ Items.Strings = (
+ 'Mult Word'
+ 'Phrase'
+ 'Regular Expression')
+ TabOrder = 0
+ end
+ object searchOptionsGroup: TGroupBox
+ Left = 164
+ Top = 0
+ Width = 132
+ Height = 70
+ Align = alLeft
+ Caption = 'Search Options'
+ TabOrder = 1
+ object caseSensitiveCkBx: TCheckBox
+ Left = 8
+ Top = 16
+ Width = 117
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Case Sensitive'
+ TabOrder = 0
+ end
+ end
+ object Panel4: TPanel
+ Left = 298
+ Top = 0
+ Width = 82
+ Height = 70
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 2
+ object searchBtn: TButton
+ Left = 3
+ Top = 5
+ Width = 75
+ Height = 25
+ Caption = 'Search'
+ Default = True
+ TabOrder = 0
+ OnClick = searchBtnClick
+ end
+ object Button2: TButton
+ Left = 3
+ Top = 33
+ Width = 75
+ Height = 25
+ Caption = '&Help'
+ Default = True
+ TabOrder = 1
+ OnClick = Button2Click
+ end
+ end
+ end
+ end
+ object pnlScope: TPanel
+ Left = 0
+ Top = 132
+ Width = 380
+ Height = 72
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 2
+ object Panel2: TPanel
+ Left = 0
+ Top = 0
+ Width = 380
+ Height = 43
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 0
+ object scopeGroup: TRadioGroup
+ Left = 0
+ Top = 0
+ Width = 380
+ Height = 43
+ Align = alClient
+ Caption = 'Scope'
+ Columns = 3
+ ItemIndex = 0
+ Items.Strings = (
+ 'Entire Module'
+ 'Current Results'
+ 'Custom Range')
+ TabOrder = 0
+ OnClick = scopeGroupClick
+ end
+ end
+ object Panel5: TPanel
+ Left = 0
+ Top = 43
+ Width = 380
+ Height = 29
+ Align = alBottom
+ TabOrder = 1
+ object Panel11: TPanel
+ Left = 165
+ Top = 1
+ Width = 214
+ Height = 27
+ Align = alClient
+ BevelOuter = bvNone
+ Caption = 'Panel11'
+ TabOrder = 0
+ object ComboBox1: TComboBox
+ Left = 4
+ Top = 4
+ Width = 206
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Enabled = False
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ end
+ object Panel12: TPanel
+ Left = 1
+ Top = 1
+ Width = 164
+ Height = 27
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 1
+ object customRangeBtn: TButton
+ Left = 4
+ Top = 4
+ Width = 153
+ Height = 21
+ Caption = 'Define Custom Range'
+ Enabled = False
+ TabOrder = 0
+ OnClick = customRangeBtnClick
+ end
+ end
+ end
+ end
+ end
+ object progressBar: TProgressBar
+ Left = 0
+ Top = 431
+ Width = 486
+ Height = 16
+ Align = alBottom
+ Min = 0
+ Max = 100
+ Step = 1
+ TabOrder = 2
+ end
+ object searchImageList: TImageList
+ Left = 300
+ Top = 601
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/searchfrm.h b/apps/windoze/CBuilder5/BibleCS/searchfrm.h
new file mode 100644
index 0000000..2b9a8ca
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/searchfrm.h
@@ -0,0 +1,107 @@
+//---------------------------------------------------------------------------
+#ifndef searchH
+#define searchH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include "mainfrm.h"
+#include <swmgr.h>
+#include <ComCtrls.hpp>
+#include <TntStdCtrls.hpp>
+#include "rxricheditx.h"
+#include <ImgList.hpp>
+//---------------------------------------------------------------------------
+class TsearchForm : public TForm {
+ class TSearchThread;
+ friend class TSearchThread;
+__published: // IDE-managed Components
+ TImageList *searchImageList;
+ TPanel *pnlChooseMod;
+ TPanel *Panel7;
+ TProgressBar *progressBar;
+ TPanel *pnlResult;
+ TSplitter *Splitter1;
+ TPanel *plPreview;
+ TListView *resultsLV;
+ TPanel *Panel1;
+ TPanel *Panel3;
+ TComboBox *SearchTextOld;
+ TPanel *pnlScope;
+ TPanel *Panel2;
+ TRadioGroup *scopeGroup;
+ TPanel *Panel5;
+ TPanel *Panel8;
+ TLabel *moduleName;
+ TSplitter *ChooseModSplitter;
+ TPanel *Panel9;
+ TTreeView *modTreeView;
+ TPanel *Panel6;
+ TButton *Button1;
+ TPanel *Panel10;
+ TRadioGroup *searchTypeGroup;
+ TGroupBox *searchOptionsGroup;
+ TCheckBox *caseSensitiveCkBx;
+ TPanel *Panel4;
+ TButton *searchBtn;
+ TPanel *Panel11;
+ TPanel *Panel12;
+ TButton *customRangeBtn;
+ TComboBox *ComboBox1;
+ TLabel *lblChooseModule;
+ TButton *Button2;
+ void __fastcall searchBtnClick(TObject *Sender);
+ void __fastcall TerminateSearch(TObject *Sender);
+ void __fastcall ListBox1DblClick(TObject *Sender);
+ void __fastcall ListBox1Click(TObject *Sender);
+ void __fastcall scopeGroupClick(TObject *Sender);
+ void __fastcall customRangeBtnClick(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall resultsLVChange(TObject *Sender, TListItem *Item,
+ TItemChange Change);
+ void __fastcall resultsLVCustomDrawItem(TCustomListView *Sender,
+ TListItem *Item, TCustomDrawState State, bool &DefaultDraw);
+ void __fastcall resultsLVInfoTip(TObject *Sender, TListItem *Item,
+ AnsiString &InfoTip);
+ void __fastcall Button1Click(TObject *Sender);
+ void __fastcall FormActivate(TObject *Sender);
+ void __fastcall modTreeViewChange(TObject *Sender, TTreeNode *Node);
+ void __fastcall Button2Click(TObject *Sender);
+private: // User declarations
+ class TSearchThread : public TThread {
+ ListKey results;
+ string searchText;
+ int searchType;
+ int searchOptions;
+ SWKey *scope;
+ TsearchForm *parent;
+ protected:
+ void __fastcall Execute();
+ public:
+ __fastcall TSearchThread(TsearchForm *parent, string searchText, int searchType, int searchOptions, SWKey *scope = 0, bool CreateSuspended = false);
+ void __fastcall FillListBox(void);
+ static void searchProgressCallback(char status, void *searchFrm);
+ void __fastcall updateStatus(void);
+ void __fastcall updateProgressBar(void);
+ } *searchThread;
+ TRxRichEditX *pvrtf;
+ ListKey results;
+ void populateRanges();
+public: // User declarations
+ void setTarget(SWModule *target);
+ char status;
+ SWModule *target;
+ TPageControl *targetpc;
+ TTntComboBox *SearchText;
+// AnsiString CapText;
+
+ __fastcall TsearchForm(TComponent* Owner);
+ void fillList();
+};
+//---------------------------------------------------------------------------
+extern TsearchForm *searchForm;
+//---------------------------------------------------------------------------
+#endif
+
diff --git a/apps/windoze/CBuilder5/BibleCS/splashfrm.cpp b/apps/windoze/CBuilder5/BibleCS/splashfrm.cpp
new file mode 100644
index 0000000..dffc53b
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/splashfrm.cpp
@@ -0,0 +1,16 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "splashfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TsplashForm *splashForm;
+//---------------------------------------------------------------------------
+__fastcall TsplashForm::TsplashForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/splashfrm.dfm b/apps/windoze/CBuilder5/BibleCS/splashfrm.dfm
new file mode 100644
index 0000000..fac531e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/splashfrm.dfm
@@ -0,0 +1,13590 @@
+object splashForm: TsplashForm
+ Left = 353
+ Top = 335
+ BorderIcons = []
+ BorderStyle = bsSingle
+ Caption = 'The SWORD Project'
+ ClientHeight = 351
+ ClientWidth = 684
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Image1: TImage
+ Left = 0
+ Top = 0
+ Width = 684
+ Height = 238
+ Align = alTop
+ AutoSize = True
+ Center = True
+ Picture.Data = {
+ 07544269746D61703E9C0600424D3E9C06000000000036000000280000005E02
+ 0000EE0000000100180000000000089C0600120B0000120B0000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE00000000000000000000000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE0000000000000000000000000000000000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000000000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000CECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCE000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCE000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCE000000000000000000000000000000
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE00000000000000000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCE00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000CECFCECECFCE00
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCE0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCE0000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000CECFCECECFCE000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCE000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000CECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCECECFCECECFCE000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCE000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCE00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCE000000000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000CECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000CECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6
+ A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5
+ A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE080808080C08080C08080C08080C08
+ 080C08080C08080C08080C08101010101010101010101010CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCE0000000000000000
+ 00000000000000000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5
+ A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBE
+ BDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6
+ C7C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0808080808080808
+ 08080808080808080808080808080C08080C08080C08080C08080C08080C0808
+ 0C08080C08101010101010101010101010101010101010101010101010CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE313031313031313031313031313031313031CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424A494A4A49
+ 4A4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365636365636365
+ 636365636B696B6B696B6B696B6B696B6B696B6B696B6B696B6B696B6B6D6B6B
+ 6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B737173737173737173737173
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6
+ A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBD
+ BABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBD
+ C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7
+ C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE080808080808080808080808080808080808
+ 080808080808080C08080C08080C08080C08080C08080C08080C08080C081010
+ 1010101010101010101010101010101010101010101010141010141010141010
+ 1410CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE313031313031313031313031313031313031CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A
+ 4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE6365636365636365636365636365636B696B
+ 6B696B6B696B6B696B6B696B6B696B6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D
+ 6B6B6D6B6B6D6B6B6D6B6B6D6B73717373717373717373717373717373717373
+ 7173737173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE848684848684848684848684848684CECFCECECFCE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5
+ A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAA
+ ADADAEADADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEB5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5
+ B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBA
+ BDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6
+ C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6
+ C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECBCECECBCECECBCECECBCECECBCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE00040000040008080808080808080808080808080808080808080808080808
+ 0C08080C08080C08080C08080C08080C08080C08080C08101010101010101010
+ 1010101010101010101010101010101014101014101014101014101014101014
+ 10CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 313031313031313031313031313031313031CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A494A4A494A4A
+ 494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE6365636365636365636365636365636365636B696B6B696B6B696B6B
+ 696B6B696B6B696B6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B
+ 6B6D6B6B6D6B7371737371737371737371737371737371737371737371737371
+ 73737573737573CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE8486848486848486848486848486848486848C8A8C8C8A8C8C
+ 8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8CCECFCE
+ CECFCECECFCE8C8E8C8C8E8C8C8E8C9492949492949492949492949492949492
+ 94949294949294949694949694949694949694949694CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5
+ A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEAD
+ ADAEADADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2
+ B5B5B2B5B5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5
+ B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABD000000000000000000000000
+ 000000000000BDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3
+ C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6
+ C7C6C6C7C6C6C7C6CECBCECECBCECECBCECECBCECECBCECECBCECECBCECECBCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000400000400
+ 080808080808080808080808080808080808080808080808080C08080C08080C
+ 08080C08080C08080C08080C08080C0810101010101010101010101010101010
+ 1010101010101010101410101410101410101410101410101410101410101410
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE31303131303131
+ 3031313031313031313431313431313431CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A494A4A494A4A494ACECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE636563636563
+ 6365636365636365636365636365636B696B6B696B6B696B6B696B6B696B6B69
+ 6B6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B73
+ 7173737173737173737173737173737173737173737173737173737573737573
+ 737573737573737573737573CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE8486848486848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A
+ 8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C
+ 8E8C8C8E8C8C8E8C949294949294949294949294949294949294949294949294
+ 949694949694949694949694949694949694CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEADADAEADAD
+ AEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5
+ B5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBA
+ BDBDBABDBDBABDBDBABDBDBABD00000000000000000000000000000000000000
+ 0000000000BDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6
+ C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7
+ C6CECBCECECBCECECBCECECBCECECBCECECBCECECBCECECBCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00040000040000040008080808080808
+ 0808080808080808080808080808080808080C08080C08080C08CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE101410101410101410101410101410101410101410101410181818181818CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE3130313130313130313130
+ 31313431313431313431313431CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE4A494A4A494A4A494A4A494A4A494A4A494A4A4D4ACECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE63656363656363656363656363656363
+ 65636365636365636B696B6B696B6B696B6B696B6B696B6B696B6B696B6B696B
+ 6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B7371737371737371
+ 7373717373717373717373717373717373717373757373757373757373757373
+ 75737375737375737375737B797BCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE84
+ 86848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C
+ 8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E
+ 8C94929494929494929494929494929494929494929494929494969494969494
+ 9694949694949694949694949694CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAE
+ ADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5B5
+ B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABD
+ BDBABDBDBABDBDBABD0000000000000000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEC6C7C6C6C7C6C6C7C6C6C7C6CECBCECECBCE
+ CECBCECECBCECECBCECECBCECECBCECECBCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0004000004000808080808080808080808080808
+ 08080808080808080808080C08080C08080C08CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE101410101410101410101410101410181818181818181818181818CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE313031313031313031313431313431
+ 313431313431313431CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A49
+ 4A4A494A4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4ACECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE6361636361636365636365636365636365636365636365636365636365
+ 636B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE6B6D6B6B6D6B6B6D6B737173737173737173737173737173
+ 7371737371737371737371737375737375737375737375737375737375737375
+ 737375737B797B7B797B7B797B7B797BCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486848486
+ 848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C
+ 8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C949294949294
+ 9492949492949492949492949492949492949496949496949496949496949496
+ 94949694949694949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADB5B2B5
+ B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5B6
+ B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBD
+ BABDBDBABD000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECBCECECBCECECBCECECBCECE
+ CBCECECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000400080808080808080808080808080808080808080808
+ 080808080C08080C08080C08CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE101410101410181818181818181818181818181818181818CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE31303131303131343131343131343131343131
+ 3431313431CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A494A4A494A
+ 4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE63616363
+ 61636365636365636365636365636365636365636365636365636B696B6B696B
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE7371737375737375737375737375737375737375737375737375737B797B
+ 7B797B7B797B7B797B7B797B7B797B7B797BCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E
+ 8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C94929494929494929494929494
+ 9294949294949294949294949694949694949694949694949694949694949694
+ 9496949C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5
+ A5A6A5A5A6A5ADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEB5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5
+ B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBE
+ BD000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECBCECECBCECECBCECECB
+ CECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6
+ D3D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE080808080808080808080808080808080808080808080808080C0808
+ 0C08080C08CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE181818181818181818181818181818181818181818181818CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE3130313130313134313134313134313134313134313134313134
+ 31313431CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A
+ 494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE6361636361636365636365
+ 636365636365636365636365636365636365636B696BCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE7375737375737375737375737375737B797B7B797B7B797B7B
+ 797B7B797B7B797B7B797B7B797B7B7D7BCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C
+ 8C8E8C8C8E8C8C8E8C8C8E8C9492949492949492949492949492949492949492
+ 94949294949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5AD
+ AAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BD
+ BABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBD000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECBCECECBCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3
+ D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 080808080808080808080808080808080808080808080C08080C08CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE181818181818181818181818181818181818181C18181C18CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE313031313431313431313431313431313431313431313431313431393839
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A4D4A4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE636163636163636563636563636563636563
+ 6365636365636365636365636B696BCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE7375737B797B7B797B7B797B7B797B7B797B7B79
+ 7B7B797B7B797B7B7D7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C8C
+ 8E8C8C8E8C949294949294949294949294949294949294949294949294CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADCECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBA
+ BDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDCECFCE00000000
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE08080808
+ 0808080808080808080808080808080C08080C08080C08CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE181818181818181818181818181C18181C18181C18181C18CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE3134
+ 31313431313431313431313431313431313431313431393839393839CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4A
+ 4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE63616363616363656363656363656363656363656363656363
+ 65636365636B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE7B797B7B797B7B797B7B797B7B797B7B797B
+ 7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C9492
+ 94949294949294949294949294949294949294949294CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABD
+ BDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDCECFCECECFCE0000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0808080808080808
+ 08080808080808080C08080C08080C08CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE1818
+ 18181818181818181C18181C18181C18181C18181C18181C18CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE313431313431313431
+ 313431313431313431313431313431393839393839393839393839CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A
+ 4D4A4A4D4A525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 636163636163636563636563636563636563636563636563636563636563CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE7B797B7B797B7B797B7B7D7B7B7D7B7B
+ 7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C949294949294949294
+ 949294949294949294949294949294949694CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5A5A6A5A5A6A5A5A6A5ADAAADADAAADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEB5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBD
+ BABDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE080808080808080808080808
+ 080C08080C08080C08080C08CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181818
+ 181C18181C18181C18181C18181C18181C18181C18181C18CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE31343131343131343131343131
+ 3431313431313431393839393839393839393839393839CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A5251
+ 52525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE63616363616363
+ 6563636563636563636563636563636563636563636563CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE7B797B7B7D7B7B7D7B7B7D7B7B7D7B7B7D
+ 7B7B7D7B7B7D7B7B7D7B848284848284CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE8C8E8C94929494929494929494929494929494929494
+ 9294949294949294949694949694CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5
+ A5A6A5ADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBE
+ BDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6
+ D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE080808080808080808080C08080C0808
+ 0C08080C08CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181C18181C1818
+ 1C18181C18181C18181C18181C18181C18212021CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE3134313134313134313134313134313134
+ 31393839393839393839393839393839393839CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A494A4A
+ 4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A525152525152525152
+ 525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE6361636361636361636365636365636365
+ 63636563636563636563636563636563CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B
+ 7B7D7B848284848284848284848284CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE9492949492949492949492949492949492949492949492
+ 94949694949694949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADAD
+ AAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBD
+ BABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3
+ D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE080808080808080C08080C08080C08080C08080C
+ 08CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181C18181C18181C
+ 18181C18181C18181C18212021212021CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE313431313431313431313431313431313431393839393839
+ 393839393839393839393839393839CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A525152525152525152525152525152CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE636163636163636163636563636563636563636563636563
+ 636563636563636563CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B84828484
+ 8284848284848284848284848284CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE949294949294949294949294949294949294949294949694949694
+ 949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBA
+ BDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6
+ D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE080808080C08080C08080C08080C08080C08CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE181C18181C18181C18181C18
+ 181C18212021212021212021CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE31343131343131343131343131343139383939383939383939383939
+ 3839393839393839393839393839CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A4D4A
+ 4A4D4A4A4D4A4A4D4A525152525152525152525152525152525152CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE63616363616363616363656363656363656363656363656363656363656363
+ 6563CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE7B7D7B7B7D7B7B7D7B8482848482848482848482
+ 84848284848284848284848284CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE949294949294949294949294949294949294949694949694949694949694CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABD
+ BDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6
+ D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE080C08080C08080C08080C08080C08080C08CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE181C18181C18181C18181C1821202121
+ 2021212021212021CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 3134313134313134313134313938393938393938393938393938393938393938
+ 39393839393839393839CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A
+ 4D4A525152525152525152525152525152525152525152CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE636163636163
+ 636163636563636563636563636563636563636563636563636563CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE7B7D7B848284848284848284848284848284848284
+ 848284848284848684848684CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE949294
+ 949294949294949294949694949694949694949694949694949694CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5A5A6A5ADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABDBDBABDBD
+ BEBDBDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7
+ D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 080C08080C08080C08080C08080C08080C08CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE181C18181C18181C182120212120212120212120
+ 21212021CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE31343131343131
+ 3431313431393839393839393839393839393839393839393839393839393839
+ 393839393C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A5251525251
+ 52525152525152525152525152525152525152525552CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE63616363616363616363656363
+ 6563636563636563636563636563636563636563CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE84828484828484828484828484828484828484828484
+ 8684848684848684848684CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE94929494929494
+ 9294949694949694949694949694949694949694949694CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAAD
+ ADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBE
+ BDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6
+ D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE080C0808
+ 0C08080C08080C08080C08080C08CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE181C18181C18212021212021212021212021212021212021
+ 212021CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE3134313134313134313938
+ 39393839393839393839393839393839CECFCE393839393839393839393C3939
+ 3C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A525152525152525152525152
+ 525152525152525152525152525552525552CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE6361636361636365636365636365636365
+ 63636563636563636563636563CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE8482848482848482848482848482848486848486848486
+ 84848684848684CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE9492949492949496949496
+ 94949694949694949694949694949694CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADAD
+ AAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBD
+ BDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6D6
+ D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE080C08080C08080C
+ 08080C08080C08101010CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE181C18212021212021212021212021212021212021212021212021CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE313431313431393839393839393839
+ 393839393839393839393839CECFCE393839393839393C39393C39393C39393C
+ 39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A52515252515252515252515252515252515252
+ 5152525152525552525552525552525552CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE636163636163636563636563636563636563636563636563
+ 6365636365636B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE848284848284848284848284848684848684848684848684848684
+ 848684848684CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE949294949694949694949694949694
+ 949694949694949694949694CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBD
+ BEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDB
+ DEDEDBDEDEDBDEDEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE080C08080C08080C08080C08
+ 101010101010CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 212021212021212021212021212021212021212021212021212421CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE31343131343139383939383939383939383939383939
+ 3839393839CECFCECECFCE393839393C39393C39393C39393C39393C39393C39
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A
+ 4A4D4A4A4D4A5251525251525251525251525251525251525251525251525255
+ 52525552525552525552525552CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE6361636365636365636365636365636365636365636365636365636B
+ 696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE84828484828484868484868484868484868484868484868484868484
+ 8684CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE94969494969494969494969494969494969494
+ 96949496949C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ BDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDE
+ DEDBDEDEDBDEDEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE080C08080C08080C0810101010101010
+ 1010CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21202121
+ 2021212021212021212021212021212021212421212421CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE3134313938393938393938393938393938393938393938393938
+ 39CECFCECECFCECECFCE393C39393C39393C39393C39393C39393C39CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A4D4A52
+ 5152525152525152525152525152525152525152CECFCE525552525552525552
+ 525552525552525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE636163
+ 6365636365636365636365636365636365636365636365636B696B6B696BCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE8486848486848486848486848486848486848486848486848C8A8C8C8A
+ 8CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE9496949496949496949496949496949496949496949C9A
+ 9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5ADAAADADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBD
+ BEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCED6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDE
+ DBDEDEDBDEDEDFDEDEDFDECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE080C08080C08101010101010101010CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2120212120212120
+ 21212021212021212021212421212421212421CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE393839393839393839393839393839393839393839393839393839CECFCE
+ CECFCECECFCE393C39393C39393C39393C39393C39393C39CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A4D4A5251525251525251
+ 52525152525152525152525152525152CECFCE52555252555252555252555252
+ 5552525552525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE63616363656363656363
+ 65636365636365636365636365636365636B696B6B696BCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE84
+ 86848486848486848486848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE9496949496949496949496949496949496949C9A9C9C9A9C9C9A9C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAAD
+ ADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBE
+ BDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDF
+ DEDEDFDEDEDFDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE080C08101010101010101010101010CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE212021212021212021212021
+ 212021212421212421212421212421CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE3938393938
+ 39393839393839393839393839393839393839393839CECFCECECFCECECFCECE
+ CFCE393C39393C39393C39393C39393C39424142424142CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE4A4D4A4A4D4A4A4D4A525152525152525152525152525152
+ 525152525152525152CECFCECECFCE5255525255525255525255525255525255
+ 52525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE6365636365636365636365636365
+ 636365636365636365636B696B6B696BCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486
+ 848486848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8CCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE9496949496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9CCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADAD
+ AAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBD
+ BDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDE
+ DEDFDEDEDFDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE101010101010101010101010101010CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE21202121202121202121202121242121
+ 2421212421212421212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393839393839393839
+ 393839393839393839393839393839393839CECFCECECFCECECFCECECFCECECF
+ CE393C39393C39393C39424142424142424142CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE4A4D4A4A4D4A4A4D4A52515252515252515252515252515252515252515252
+ 5152525552CECFCECECFCECECFCE525552525552525552525552525552525552
+ 5A595ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE636563636563636563636563636563636563
+ 6365636B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE848684848684
+ 8486848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8CCECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE949694
+ 9496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAA
+ ADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6
+ C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDE
+ DFDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 101010101010101010101010101010CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE2120212120212120212120212124212124212124212124
+ 21212421212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE39383939383939383939383939383939
+ 3839393839393839393839393C39CECFCECECFCECECFCECECFCECECFCE393C39
+ 393C39424142424142424142424142CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A
+ 4A4D4A5251525251525251525251525251525251525251525251525255525255
+ 52CECFCECECFCECECFCE5255525255525255525255525255525A595A5A595ACE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE6365636365636365636365636365636365636365636B696B6B
+ 696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486848486848486848C
+ 8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8CCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE94969494969494
+ 96949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3
+ C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ DEDBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDF
+ DECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE10101010
+ 1010101010101010101010CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE212021212021212021212421212421212421212421212421212421
+ 212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE3938393938393938393938393938393938393938
+ 39393839393C39CECFCECECFCECECFCECECFCECECFCECECFCE393C3942414242
+ 4142424142424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A52515252
+ 5152525152525152525152525152525152525152525552525552CECFCECECFCE
+ CECFCECECFCE5255525255525255525255525A595A5A595A5A595ACECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE6365636365636365636365636365636365636B696B6B696B6B696BCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486848C8A8C8C8A8C8C8A
+ 8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8CCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE9496949496949C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5ADAA
+ ADADAAADADAAADADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6
+ C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEDEDBDEDE
+ DBDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEE7E3E7CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE1010101010101010101010
+ 10101010101010CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2120
+ 21212021212021212421212421212421212421212421212421212421212421CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE393839393839393839393839393839393839393839393C39
+ 393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCE4241424241424241
+ 42424142424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A5251525251525251525251
+ 52525152525152525152525152525552525552525552CECFCECECFCECECFCECE
+ CFCECECFCE5255525255525A595A5A595A5A595A5A595A5A595ACECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE63
+ 65636365636365636365636365636B696B6B696B6B696B6B696BCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C
+ 8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE9496949C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAAD
+ ADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6
+ C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEDEDBDEDEDFDEDEDF
+ DEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE212021212021
+ 212421212421212421212421212421212421212421212421292829CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE393839393839393839393839393839393839393C39393C39393C39CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE424142424142424142424142
+ 424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE525152525152525152525152525152525152
+ 525152525152525552525552525552525552CECFCECECFCECECFCECECFCECECF
+ CE5255525A595A5A595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365636365636365
+ 636365636365636B696B6B696B6B696B6B696B6B696BCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C
+ 8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9A9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEA5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADAD
+ AAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ BDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C7C6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEDEDFDEDEDFDEDEDFDE
+ DEDFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE21202121202121242121242121
+ 2421212421212421212421212421212421292829292829CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393839
+ 393839393839393839393839393839393C39393C39393C39CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE42414242414242414242414242414242
+ 4542CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE52515252515252515252515252515252515252515252
+ 5552525552525552525552CECFCECECFCECECFCECECFCECECFCECECFCE5A595A
+ 5A595A5A595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE636563636563636563636563
+ 6B696B6B696B6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E
+ 8C8C8E8C8C8E8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E
+ 9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAA
+ ADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C3C6C6
+ C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCEDEDFDEDEDFDEDEDFDEDEDFDEDE
+ DFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE2120212124212124212124212124212124
+ 21212421212421212421292829292829292829CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE39383939383939
+ 3839393839393839393C39393C39393C39393C39CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE424142424142424142424142424542424542CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE5251525251525251525251525251525251525251525255525255525255
+ 52525552525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A
+ 595A5A595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE6365636365636365636B696B6B696B6B
+ 696B6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C
+ 8C8E8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C3C6C6C3C6C6C3
+ C6C6C3C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEE7E3
+ E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE212021212421212421212421212421212421212421212421
+ 212421292829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE3938393938393938393938
+ 39393C39393C39393C39393C39393C39CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE424142424142424542424542424542424542CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE52
+ 5152525152525152525152525152525152525552525552525552525552525552
+ 525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A59
+ 5A5A595A5A595A5A595A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE6365636365636365636B696B6B696B6B696B6B696B6B69
+ 6B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C
+ 8E8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5ADAAADADAA
+ ADADAAADADAAADADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C3C6C6C3C6C6C3C6C6C3C6
+ C6C3C6C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEDEDFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7
+ E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE21202121242121242121242121242121242121242121242121242129282929
+ 2829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE393839393839393839393839393C39393C39
+ 393C39393C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE424142424542424542424542424542424542CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5251525251
+ 52525152525152525152525552525552525552525552525552525552CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A595A5A595A
+ 5A595A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE6365636365636B696B6B696B6B696B6B696B6B696B6B696B6B696B
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E
+ 8C949294CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5ADAAADADAAADADAAADADAAAD
+ ADAAADADAAADADAAADADAAADADAAADADAEADCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6
+ C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7
+ E3E7E7E3E7E7E3E7E7E7E7CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE212021212421
+ 2124212124212124212124212124212124212124212928292928292928292928
+ 29CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE393839393839393839393C39393C39393C39393C3939
+ 3C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE424542424542424542424542424542424542CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE525152525152525152525152
+ 525152525552525552525552525552525552525552525552CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A595A5A5D5A5A
+ 5D5A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365
+ 636365636B696B6B696B6B696B6B696B6B696B6B696B6B696B6B696BCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C
+ 8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C949294949294
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C
+ 9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEA5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADAD
+ AAADADAAADADAAADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEC6C3C6C6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7
+ C6C6C7C6C6C7C6C6C7C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3
+ E7E7E7E7E7E7E7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE21202121242121242121242121
+ 2421212421212421212421212421292829292829292829292829292829CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE393839393839393C39393C39393C39393C39393C39393C39CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE424542424542424542424542424542424542CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE52515252515252515252515252555252
+ 5552525552525552525552525552525552525552CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D
+ 5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365636B696B
+ 6B696B6B696B6B696B6B696B6B696B6B696B6B696B6B6D6BCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E
+ 8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C949294949294949294CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9E9C9C9E
+ 9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAA
+ ADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEC6C3C6C6C3C6C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6
+ C6C7C6C6C7C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7
+ E7E7E7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE2120212120212124212124212124212124212124212124
+ 21212421212421292829292829292829292829292829CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE39
+ 3839393839393C39393C39393C39393C39393C39393C39393C39CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245
+ 424245424245424245424245424A494ACECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE5251525251525251525255525255525255525255
+ 52525552525552525552525552CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B
+ 696B6B696B6B696B6B696B6B696B6B6D6BCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C
+ 8C8E8C8C8E8C8C8E8C8C8E8C949294949294949294949294CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C
+ 9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5AD
+ AAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAEAD
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEC6C3C6C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6
+ C7C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E3
+ E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21
+ 2021212021212021212421212421212421212421212421212421212421212421
+ 292829292829292829292829292829CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393839393C
+ 39393C39393C39393C39393C39393C39393C39393C39CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424542424542
+ 4245424245424A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE525152525152525152525552525552525552525552525552525552
+ 525552525552525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B696B6B696B6B69
+ 6B6B696B6B696B6B6D6B6B6D6BCECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C8C
+ 8E8C8C8E8C949294949294949294949294949294CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C
+ 9E9C9C9E9CA5A2A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5ADAAADADAAADADAA
+ ADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAEADCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ C6C3C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E3E7E7E3E7
+ E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE2120212120212120212120
+ 2121242121242121242121242121242121242121242121242129282929282929
+ 2829292829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393C39393C39393C39
+ 393C39393C39393C39393C39393C39CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424245424A
+ 494A4A494A4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE52515252515252555252555252555252555252555252555252555252555252
+ 5552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A636163CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE6B696B6B696B6B696B6B696B6B696B6B696B6B696B
+ 6B6D6B6B6D6B6B6D6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C9492
+ 94949294949294949294949294949294CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CA5A2
+ A5A5A2A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEA5A6A5ADAAADADAAADADAAADADAAADADAAAD
+ ADAAADADAAADADAAADADAAADADAEADADAEADADAEADCECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C7C6C6
+ C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E3E7E7E3E7E7E3E7E7
+ E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE212021212021212021212021212021212421212421
+ 2124212124212124212124212124212124212928292928292928292928292928
+ 29292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE393C39393C39393C39393C39393C3939
+ 3C39393C39393C39424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424A494A4A494A4A49
+ 4A4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE525152
+ 525552525552525552525552525552525552525552525552525552525552CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A636163636163CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE6B696B6B696B6B696B6B696B6B696B6B696B6B696B6B6D6B6B6D6B6B
+ 6D6B6B6D6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C949294949294949294
+ 949294949294949294949294CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CA5A2A5A5A2A5A5A2A5
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEA5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADAD
+ AAADADAAADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C7C6C6C7C6C6C7
+ C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECBCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEE7E3E7E7E3E7E7E3E7E7E3E7E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE21202121202121202121202121202121202121242121242121242121242121
+ 2421212421212421212421292829292829292829292829292829292829CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE393C39393C39393C39393C39393C39393C39393C
+ 39424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A494A
+ 4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE52515252555252555252
+ 55525255525255525255525255525255525255525255525A595ACECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE5A5D5A5A5D5A5A5D5A636163636163636163CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 6B696B6B696B6B696B6B696B6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D
+ 6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE8C8E8C8C8E8C8C8E8C94929494929494929494929494929494
+ 9294949294949294CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CA5A2A5A5A2A5A5A2A5A5A2A5CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAE
+ ADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C7C6C6C7C6C6C7C6C6C7C6
+ C6C7C6C6C7C6C6C7C6C6C7C6CECBCECECBCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEE7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE212021212021
+ 2120212120212120212120212124212124212124212124212124212124212124
+ 21212421292829292829292829292829292829292829292829CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE393C39393C39393C39393C39393C39393C39393C39424142424142
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A494A4A
+ 494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE5255525255525255525255525255
+ 525255525255525255525255525255525A595ACECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A5D5A
+ 5A5D5A636163636163636163636163636163CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B696B6B
+ 696B6B696B6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE8C8E8C8C8E8C9492949492949492949492949492949492949492949492
+ 94949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9E9C
+ 9C9E9C9C9E9C9C9E9CA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5ADAAADAD
+ AAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAEADADAEAD
+ ADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEC6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6
+ C7C6C6C7C6CECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEE7E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+ E7E7E7E7E7E7E7E7EFEBEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE21202121202121202121202121202121
+ 2021212021212421212421212421212421212421212421212421212421292829
+ 292829292829292829292829292829292829CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE393C39393C39393C39393C39393C39393C39424142424142CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE4A494A4A494A4A494A4A494A4A494A4A4D4ACECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE525552525552525552525552525552525552525552
+ 5255525255525255525A595A5A595ACECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A5D5A63616363
+ 6163636163636163636163636163CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B69
+ 6B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C
+ 8E8C949294949294949294949294949294949294949294949294949694949694
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9E9C9C9E9C9C
+ 9E9CA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5ADAAADADAAADADAAADADAA
+ ADADAAADADAAADADAAADADAAADADAAADADAEADADAEADADAEADADAEADCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEC6C7C6C6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECB
+ CECECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCEE7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+ E7EFEBEFEFEBEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE2120212120212120212120212120212120212120212120212124
+ 2121242121242121242121242121242121242121242129282929282929282929
+ 2829292829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393C39393C39
+ 393C39393C39393C39393C39424142424142424142CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4ACECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE52555252555252555252555252555252555252555252555252
+ 55525A595A5A595ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6361636361636361
+ 63636163636163636163CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B6D6B
+ 6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9492949492
+ 94949294949294949294949294949294949294949694949694949694CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9E9C9C9E9CA5A2A5A5A2
+ A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A6A5A5A6A5A5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAAD
+ ADAAADADAAADADAAADADAEADADAEADADAEADADAEADADAEADCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEC6C7C6C6C7C6C6C7C6C6C7C6C6C7C6CECBCECECBCECECBCE
+ CECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCEE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEF
+ EFEBEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21
+ 2021212021212021212021212021212021212021212021212421212421212421
+ 2124212124212124212124212124212928292928292928292928292928292928
+ 29292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393C39393C39393C3939
+ 3C39393C39424142424142424142424142CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE5255525255525255525255525255525255525255525255525A595A5A59
+ 5A5A595ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE636163636163636163636163
+ 636163636163636563CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B6D6B6B6D6B6B6D6B6B
+ 6D6B6B6D6B6B6D6B6B6D6B6B6D6B737173CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE949294949294949294
+ 949294949294949294949294949694949694949694949694CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE9C9E9CA5A2A5A5A2A5A5A2A5A5A2A5
+ A5A2A5A5A2A5A5A2A5A5A2A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADAD
+ AAADADAEADADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEC6C7C6C6C7C6C6C7C6C6C7C6CECBCECECBCECECBCECECBCECECBCECE
+ CBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFCE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2120212120212120
+ 2121202121202121202121202121202121242121242121242121242121242121
+ 2421212421212421292829292829292829292829292829292829292829292829
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE393C39393C39393C39393C39393C394241
+ 42424142424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE52555252
+ 55525255525255525255525255525255525255525A595A5A595A5A595A5A595A
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE63616363616363616363616363616363
+ 6563636563CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D
+ 6B6B6D6B6B6D6B737173737173CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE94929494929494929494929494
+ 9294949294949694949694949694949694949694CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCEA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5
+ A2A5A5A2A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5
+ ADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAE
+ ADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ C6C7C6C6C7C6C6C7C6CECBCECECBCECECBCECECBCECECBCECECBCECECBCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E7E7E7E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFCECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE181C18212021212021212021212021212021
+ 2120212120212120212124212124212124212124212124212124212124212124
+ 21292829292829292829292829292829292829292829292829CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE393C39393C39393C39393C39424142424142424142
+ 424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A
+ 4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5255525255525255
+ 525255525255525255525255525A595A5A595A5A595A5A595ACECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE6361636361636361636365636365636365
+ 63CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B
+ 737173737173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE9492949492949492949492949492949496
+ 94949694949694949694949694949694CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A6
+ A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADAD
+ AAADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAEADADAEADADAEAD
+ ADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C7C6C6
+ C7C6CECBCECECBCECECBCECECBCECECBCECECBCECECBCECECBCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E7E7E7E7E7E7E7E7E7
+ E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE181C1821202121202121202121202121202121202121202121
+ 2021212421212421212421212421212421212421212421212421292829292829
+ 292829292829292829292829292829292829CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE393C39393C39393C3942414242414242414242414242414242
+ 4142CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE525552525552525552525552
+ 5255525255525A595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE636163636163636563636563636563636563CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B73717373717373
+ 7173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE949294949294949294949294949694949694949694
+ 949694949694949694949694CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A6A5A5A6A5A5A6A5
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEADAAADADAAADADAAADADAAADADAEADADAEADADAEADADAEADADAEADADAEADAD
+ AEADADAEADB5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEC6C7C6CECBCECECB
+ CECECBCECECBCECECBCECECBCECECBCECECBCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEE7E7E7E7E7E7E7E7E7E7E7E7EFEB
+ EFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181C18
+ 181C182120212120212120212120212120212120212120212120212124212124
+ 2121242121242121242121242121242121242129282929282929282929282929
+ 2829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 393C39393C39393C39424142424142424142424142424142424142CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A
+ 4A4D4A4A4D4A4A4D4A525152CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE5255525255525255525255525255525255525A
+ 595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE636163636563636563636563636563636563636563CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B737173737173737173737173CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE94929494929494929494969494969494969494969494969494
+ 9694949694949694CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEA5A2A5A5A2A5A5A2A5A5A2A5A5A2A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADADAEADB5B2
+ B5B5B2B5B5B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECBCECECBCECECBCECECBCE
+ CECBCECECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEE7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEF
+ EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181C1821202121
+ 2021212021212021212021212021212021212021212421212421212421212421
+ 212421212421212421212421292829292829292829292829292829292829CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393C3939
+ 3C39424142424142424142424142424142424142424142CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A4A
+ 4D4A525152525152525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE5255525255525255525255525255525A595A5A595A5A59
+ 5A5A595A5A595A5A595ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE636563636563636563636563636563636563CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B
+ 6D6B6B6D6B6B6D6B6B6D6B737173737173737173737173737173CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE9492949492949496949496949496949496949496949496949496949496
+ 949C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A2A5
+ A5A2A5A5A2A5A5A2A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEADB5B2B5B5B2B5B5B2B5
+ B5B2B5B5B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECBCECECBCECECBCECECBCECECBCECE
+ CBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEE7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEF
+ EBEFEFEBEFEFEBEFEFEFEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE181C182120212120212120212120
+ 2121202121202121202121202121242121242121242121242121242121242121
+ 2421212421292829292829292829292829292829CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE393C394241424241
+ 42424142424142424142424142424142424142CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE4A4D4A4A4D4A4A4D4A5251525251
+ 52525152525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE5255525255525255525255525255525A595A5A595A5A595A5A595A5A595A
+ 5A595A5A595ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE6365636365636365636365636365636365636B696BCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B6B6D
+ 6B6B6D6B737173737173737173737173737173737173CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE94929494
+ 92949496949496949496949496949496949496949496949496949C9A9C9C9A9C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A2A5A5A2A5A5
+ A2A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCEB5B2B5B5B2B5B5B2B5B5B2B5B5
+ B2B5B5B2B5B5B2B5B5B6B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECBCECECBCECECBCECECBCECECBCECECBCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCEE7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEB
+ EFEFEFEFEFEFEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE181C18212021212021212021212021212021212021
+ 2120212120212124212124212124212124212124212124212124212124212928
+ 29292829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE393C39424142424142424142424142
+ 424142424142424142424142CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE4A4D4A525152525152525152525152
+ 525152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5255
+ 525255525255525255525A595A5A595A5A595A5A595A5A595A5A595A5A595ACE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365
+ 636365636365636365636365636B696B6B696BCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B6B6D6B737173
+ 737173737173737173737173737173737173CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9492949496949496
+ 949496949496949496949496949496949496949C9A9C9C9A9C9C9A9CCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A2A5A5A2A5A5A6A5A5A6
+ A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEB5B2B5B5B2B5B5B2B5B5B2B5B5B2
+ B5B5B6B5B5B6B5B5B6B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECBCECECBCECECBCECECBCECECBCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7
+ E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEF
+ EFEFEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE181C1821202121202121202121202121202121202121202121202121
+ 2421212421212421212421212421212421212421212421292829292829292829
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE42414242414242414242414242414242414242
+ 4142424142424542CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE52515252515252515252515252515252515252
+ 5152CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE525552525552
+ 5255525A595A5A595A5A595A5A595A5A595A5A595A5A595A5A595ACECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE636563
+ 6365636365636B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B73717373717373717373
+ 7173737173737173737173737173737173CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE949694949694949694949694
+ 9496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEA5A2A5A5A6A5A5A6A5A5A6A5A5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEB5B2B5B5B2B5B5B2B5B5B6B5B5B6B5
+ B5B6B5B5B6B5B5B6B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECBCECECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E7E7EFEBEFEFEB
+ EFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFCE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE181C18
+ 2120212120212120212120212120212120212120212120212124212124212124
+ 21212421212421212421212421212421292829292829CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE4241424241424241424241424241424241424241424245
+ 42CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE525152525152525152525152525152525152525152CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE5255525255525255525A595A5A
+ 595A5A595A5A595A5A595A5A595A5A595A5A595ACECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365636365636B
+ 696B6B696B6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE7371737371737371737371737371737371
+ 73737173737173737173737573CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE94969494969494969494969494969494
+ 96949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5
+ A6A5A5A6A5A5A6A5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEB5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5
+ B6B5B5B6B5B5B6B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECBCECECBCECECBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEF
+ EFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21202121202121
+ 2021212021212021212021212021212021212421212421212421212421212421
+ 212421212421212421292829CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE424142424142424142424142424142424142424142424542424542CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE525152525152525152525152525152525552CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE5255525255525A595A5A595A5A595A5A59
+ 5A5A595A5A595A5A595A5A595A5A5D5ACECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE6365636B696B6B696B6B69
+ 6B6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE737173737173737173737173737173737173737173
+ 737173737573737573CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE9496949496949496949496949496949496949C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6
+ A5ADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6
+ B5B5B6B5BDBABDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECBCECE
+ CBCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEF
+ EBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE2120212120212120212120212120
+ 2121202121202121202121242121242121242121242121242121242121242121
+ 2421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4241
+ 42424142424142424142424142424142424542424542424542CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE525152525152525152525152525552525552CECFCECECFCECECFCECE
+ CFCECECFCECECFCE5255525255525A595A5A595A5A595A5A595A5A595A5A595A
+ 5A595A5A595A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B696B
+ 6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE73717373717373717373717373717373717373757373
+ 7573737573CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE9496949496949496949496949496949C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAAD
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABD
+ BDBABDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECBCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE212021212021212021212021212021212021
+ 212021212421212421212421212421212421212421212421212421CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424142424142
+ 424142424142424142424542424542424542CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 525152525152525152525552525552525552525552CECFCECECFCECECFCECECF
+ CECECFCE5255525A595A5A595A5A595A5A595A5A595A5A595A5A595A5A595A5A
+ 5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B696B6B696B6B
+ 696B6B6D6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE7371737371737371737371737371737375737375737375737375
+ 73737573CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE9496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEA5A6A5A5A6A5A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEB5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBD
+ BABDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCED6D3D6CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE21202121202121202121202121202121202121202121242121
+ 2421212421212421212421212421212421CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE42414242414242414242414242
+ 4142424542424542424542424542CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE52
+ 5152525552525552525552525552525552CECFCECECFCECECFCECECFCE525552
+ 5A595A5A595A5A595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D
+ 5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE6B696B6B696B6B696B6B696B6B696B6B6D6B6B6D
+ 6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE737173737173737173737573737573737573737573737573737573
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE949694
+ 9496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5
+ A5A6A5A5A6A5A5A6A5A5A6A5ADAAADADAAADADAAADADAAADCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCEB5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCED6D3D6D6D3D6CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE2120212120212120212120212120212120212124212124212124212124
+ 21212421212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE4241424241424241424241424245424245
+ 42424542424542424542CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5255525255
+ 52525552525552525552525552525552CECFCECECFCECECFCE5A595A5A595A5A
+ 595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5ACECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE6B696B6B696B6B696B6B6D6B6B6D6B6B6D6BCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE737173737173737573737573737573737573737573737573737573737573CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE94969494969494
+ 96949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5
+ A6A5A5A6A5ADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCEB5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CED6D3D6D6D3D6D6D3D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEF
+ EFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFF7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21202121
+ 2021212021212021212021212021212421212421212421212421212421212421
+ 212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE424142424142424142424142424542424542424542424542
+ 424542CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE525552525552525552
+ 525552525552525552525552CECFCECECFCECECFCE5A595A5A595A5A595A5A59
+ 5A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE6B696B6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE737173
+ 7375737375737375737375737375737375737375737375737B797BCECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE9496949496949496949C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5A5A6A5ADAA
+ ADADAAADADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEB5B6
+ B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6
+ D6D3D6D6D3D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEF
+ EBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2120212120212120
+ 21212021212021212421212421212421212421212421212421212421CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE424142424142424142424542424542424542424542424542424542CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE52555252555252555252
+ 5552525552525552525552CECFCE5A595A5A595A5A595A5A595A5A595A5A595A
+ 5A595A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE6B696B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE73757373
+ 75737375737375737375737375737375737B797B7B797B7B797BCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE9496949496949C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9A9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEA5A6A5A5A6A5ADAAADADAAADADAAAD
+ ADAAADADAAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABD
+ BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6
+ D3D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE212021212021212021212021
+ 212421212421212421212421212421212421212421CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424142
+ 424142424142424542424542424542424542424542424542424542CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE5255525255525255525255525255
+ 525255525A595ACECFCE5A595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A
+ 5D5A5A5D5A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6BCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE7375737375737375
+ 737375737375737375737B797B7B797B7B797B7B797BCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE9496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9A9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCEA5A6A5ADAAADADAAADADAAADADAAADADAAADAD
+ AAADADAAADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBD
+ BABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE21202121202121202121242121242121
+ 2421212421212421212421212421CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE42414242414242
+ 4542424542424542424542424542424542424542CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE5255525255525255525255525255525A595A
+ 5A595A5A595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D
+ 5A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D
+ 6B6B6D6B6B6D6B6B6D6B6B6D6B6B6D6B737173CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE737573737573737573737573
+ 7375737B797B7B797B7B797B7B797B7B797B7B797BCECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE9496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E
+ 9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAA
+ ADADAAADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABDBDBA
+ BDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFF7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE2120212120212124212124212124212124212124
+ 21212421212421212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE4241424241424245424245424245
+ 42424542424542424542424542424542CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE5255525255525255525A595A5A595A5A595A5A
+ 595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B6B6D6B
+ 6B6D6B6B6D6B6B6D6B737173737173CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE7375737375737375737B797B7B
+ 797B7B797B7B797B7B797B7B797B7B797BCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9496949C
+ 9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9CCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAEAD
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBD
+ BDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3
+ D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ EFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3
+ F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE212021212421212421212421212421212421212421212421
+ 212421CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE424142424542424542424542424542424542
+ 4245424245424245424A494ACECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE5255525255525A595A5A595A5A595A5A595A5A595A5A59
+ 5A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B6B6D6B6B
+ 6D6B737173737173737173CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE7375737B797B7B797B7B797B7B79
+ 7B7B797B7B797B7B797B7B797BCECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9CCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEADAAADADAAADADAAADADAAADADAAADADAAADADAAADADAEADADAEADCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBD
+ BEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6
+ D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7
+ F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE212421212421212421212421212421212421212421212421292829CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE42454242454242454242454242454242454242454242
+ 45424A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE5255525A595A5A595A5A595A5A595A5A595A5A595A5A595A5A595A
+ 5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE6B6D6B6B6D6B7371737371
+ 73737173737173737173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE7B797B7B797B7B797B7B797B7B797B7B797B
+ 7B797B7B797B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAAAD
+ ADAAADADAAADADAAADADAAADADAAADADAEADADAEADADAEADCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCEBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBE
+ BDBDBEBDCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6
+ D3D6D6D3D6D6D3D6D6D7D6D6D7D6CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE212421
+ 212421212421212421212421212421212421212421292829CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE4245424245424245424245424245424245424245424A494A4A49
+ 4ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE5A595A5A595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A
+ 5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5ACECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE6B6D6B737173737173737173737173
+ 737173737173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE7B797B7B797B7B797B7B797B7B797B7B797B7B
+ 7D7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAAADADAAADAD
+ AAADADAAADADAAADADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCEBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBD
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3
+ D6D6D7D6D6D7D6D6D7D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE21242121
+ 2421212421212421212421212421292829292829CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE42
+ 45424245424245424245424245424245424245424A494A4A494A4A494ACECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 5A595A5A595A5A595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D
+ 5A5A5D5A5A5D5A5A5D5A636163CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE73717373717373717373717373717373
+ 7173CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE7B797B7B797B7B797B7B797B7B797B7B7D7B7B7D7B7B7D
+ 7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E
+ 9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAAADADAAADADAAADADAA
+ ADADAEADADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBA
+ BDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6
+ D6D7D6D6D7D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2124212124212124
+ 21212421212421292829292829292829CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424245
+ 424245424245424245424245424A494A4A494A4A494A4A494ACECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A
+ 595A5A595A5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A
+ 5A5D5A636163CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE7371737371737371737371737371737371737371
+ 73CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE7B797B7B797B7B797B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B
+ 7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C
+ 9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C
+ 9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCEADAAADADAAADADAAADADAEADADAEAD
+ ADAEADADAEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBD
+ BDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6
+ D7D6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3
+ F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE212421212421212421212421
+ 292829292829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424542424542424542
+ 4245424245424A494A4A494A4A494A4A494A4A494ACECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A59
+ 5A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A63616363
+ 6163CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE737173737173737173737173737173737173737573CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE7B797B7B797B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B
+ 7D7B848284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCEADAAADADAAADADAEADADAEADADAEADADAEADAD
+ AEADADAEADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBD
+ BEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7
+ F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE21242121242121242129282929282929
+ 2829292829292829CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE313431313431313431393839393839CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE4245424245424245424245424A
+ 494A4A494A4A494A4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A595A5A5D5A
+ 5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A636163636163CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE737173737173737173737173737573737573CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B8482848482
+ 84848284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEADAAADADAEADADAEADADAEADADAEADADAEADADAEADADAE
+ ADADAEADCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBE
+ BDBDBEBDC6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6
+ D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE2124212124212928292928292928292928292928
+ 29CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE313431313431393839393839393839CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE4245424245424245424245424A494A4A494A4A49
+ 4A4A494A4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE5A595A5A5D5A5A5D5A5A5D5A5A
+ 5D5A5A5D5A5A5D5A5A5D5A5A5D5A636163636163636163CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE737173737173737173737573737573737573737573CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B848284848284848284848284
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEADAEADADAEADADAEADADAEADADAEADADAEADADAEADADAEADB5B2B5
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6
+ C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6D6D7
+ D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE212421292829292829292829292829292829292829292829
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE313431393839393839393839393839CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE4245424245424245424A494A4A494A4A494A4A494A4A494A
+ 4A494A4A494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D
+ 5A5A5D5A5A5D5A636163636163636163CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE73
+ 7173737173737573737573737573737573737573CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE7B7D7B7B7D7B7B7D7B7B7D7B84828484828484828484828484828484828484
+ 8284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E
+ 9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CEADAEADADAEADADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6
+ C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D7D6D6D7D6D6D7D6
+ D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7
+ F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE292829292829292829292829292829292829292829CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE393839393839393839393839393839CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE4245424245424245424A494A4A494A4A494A4A494A4A494A4A494A4A494A4A
+ 494ACECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A
+ 636163636163636163636163CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE7371737375
+ 73737573737573737573737573737573CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 7B7D7B7B7D7B8482848482848482848482848482848482848482848482848486
+ 84CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C
+ 9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEAD
+ ADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBD
+ BDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCED6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6
+ D7D6D6D7D6D6D7D6DEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3
+ F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE292829292829292829292829292829292829292C29292C29CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 393839393839393839393839393839CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424542
+ 4245424A494A4A494A4A494A4A494A4A494A4A494A4A494A4A494ACECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A63616363616363
+ 6163636163636163CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE737573737573737573
+ 737573737573737573737573737573CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE84
+ 8284848284848284848284848284848284848284848284848684848684848684
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE9C9A9C9C9A9C9C9A9C9C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEADADAEADAD
+ AEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBD
+ BEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7
+ D6DEDBDEDEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7
+ F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE292829292829292829292829292C29292C29292C29CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE39383939383939
+ 3839393839393839393839CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424245424A494A4A
+ 494A4A494A4A494A4A494A4A494A4A494A4A494A4A4D4A4A4D4ACECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A6361636361636361636361636361
+ 63636163CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE73757373757373757373757373
+ 75737375737375737B797B7B797BCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8482848482
+ 84848284848284848284848284848284848684848684848684848684848684CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE9496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADADAE
+ ADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBE
+ BDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDE
+ DEDBDEDEDBDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE2928
+ 29292829292829292C29292C29292C29292C29292C29CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCE3938393938393938393938
+ 39393839393839CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE4245424A494A4A494A4A494A4A49
+ 4A4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A
+ 5D5A5A5D5A5A5D5A5A5D5A636163636163636163636163636163636163636163
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE7375737375737375737375737375737375
+ 737B797B7B797B7B797BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE848284
+ 848284848284848284848684848684848684848684848684848684848684CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE9496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C
+ 9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5
+ B5B2B5B5B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCEBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6
+ C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CED6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDE
+ DBDECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCEEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE292829292829
+ 292C29292C29292C29292C29292C29292C29CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000CECFCECECFCECECFCECECFCE393839393839393839393839393839393839
+ 393839CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE4245424A494A4A494A4A494A4A494A4A494A4A494A
+ 4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A5D5A5A5D
+ 5A5A5D5A636163636163636163636163636163636163636163636163CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE7375737375737375737375737375737B797B7B797B
+ 7B797B7B797B7B797BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE84828484
+ 82848486848486848486848486848486848486848486848486848C8A8C8C8A8C
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE9496949496949C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E
+ 9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCEADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5
+ B2B5B5B2B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBEBDBDBE
+ BDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6
+ C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6
+ D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEB
+ EFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7
+ F3F7F7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE292C29292C2929
+ 2C29292C29292C29292C29292C29292C29CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00CECFCECECFCE393839393839393839393839393839393839393839393839CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE4245424A494A4A494A4A494A4A494A4A494A4A494A4A494A4A494A4A
+ 4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4ACECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE5A5D5A5A5D5A5A5D5A636163
+ 636163636163636163636163636163636163636163636563636563CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE7375737375737375737375737375737B797B7B797B7B797B7B797B7B
+ 797B7B797BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486848486
+ 848486848486848486848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C8C
+ 8A8CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE9496949496949496949496949C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ ADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2
+ B5B5B2B5CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBD
+ BDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6D6
+ D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCEEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3
+ F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE292C29292C29292C
+ 29292C29292C29292C29313031CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 393839393839393839393839393839393839393839393839393C39CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE424542424542
+ 4A494A4A494A4A494A4A494A4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A525152525152CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE5A5D5A5A5D5A5A5D5A63616363616363616363
+ 6163636163636163636163636163636563636563636563CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE737573
+ 7375737375737375737375737B797B7B797B7B797B7B797B7B797B7B797B7B79
+ 7B7B797B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE848684848684
+ 8486848486848486848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A
+ 8C8C8A8C8C8E8C8C8E8CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE949694
+ 9496949496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A
+ 9C9C9A9C9C9A9C9C9E9C9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAEADADAEADAD
+ AEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEBDBABDBDBABDBDBA
+ BDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBD
+ BEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCED6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDB
+ DEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCEE7E7E7EFEB
+ EFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7F7F3F7CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE292C29292C29292C29
+ 292C29313031313031313031313031CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000039383939383939
+ 3839393839393839393839393839393839393C39393C39CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE4245424245424245424A494A4A494A4A
+ 494A4A494A4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A
+ 4A4D4A4A4D4A4A4D4A525152525152525152525152525152525152CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE5A5D5A5A5D5A5A5D5A6361636361636361636361636361636361
+ 63636163636163636563636563636563636563636563636563636563636563CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE73717373757373757373757373757373757373757373
+ 75737375737B797B7B797B7B797B7B797B7B797B7B797B7B797B7B797B7B7D7B
+ 7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE84868484868484
+ 86848486848C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C
+ 8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C9492949492949492
+ 9494929494929494929494929494929494969494969494969494969494969494
+ 96949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C
+ 9C9E9C9C9E9C9C9E9C9C9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADADAEADADAEADB5B2
+ B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5
+ B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABD
+ BDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3
+ C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6
+ D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDE
+ DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDF
+ DEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7CECFCECECFCECECFCEE7E3E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEF
+ EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFF7F3F7F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE292C29292C2931303131
+ 3031313031313031313031313031313031CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE3938393938393938393938393938
+ 39393839393839393839393C39393C39393C39CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE4245424245424245424245424245424A494A4A494A4A494A4A494A4A49
+ 4A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A
+ 4D4A525152525152525152525152525152525152525152525152525552525552
+ 525552CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE5A595A5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A
+ 5D5A5A5D5A5A5D5A636163636163636163636163636163636163636163636163
+ 6365636365636365636365636365636365636365636365636B696B6B696B6B69
+ 6B6B696B6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE737173737173737173
+ 7371737371737375737375737375737375737375737375737375737375737B79
+ 7B7B797B7B797B7B797B7B797B7B797B7B797B7B797B7B7D7B7B7D7B7B7D7B7B
+ 7D7B7B7D7B7B7D7B7B7D7B7B7D7BCECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8486848C8A
+ 8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C
+ 8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C949294949294949294949294949294
+ 9492949492949492949496949496949496949496949496949496949496949496
+ 949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9C9C
+ 9E9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCEADAAADADAAADADAAADAD
+ AEADADAEADADAEADADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5
+ B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6
+ B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBD
+ BEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6
+ C6C3C6C6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7
+ D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDE
+ DBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDE
+ E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEF
+ EBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+ F7F3F7F7F3F7F7F3F7CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE3130313130313130
+ 31313031313031313031313031313431CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE393839393839393839393839393839393839393839393839
+ 393839393C39393C39393C39393C39CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE42
+ 45424245424245424245424A494A4A494A4A494A4A494A4A494A4A494A4A494A
+ 4A494A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A5251525251
+ 52525152525152525152525152525152525152525552525552525552525552CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE5A595A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D
+ 5A63616363616363616363616363616363616363616363616363656363656363
+ 65636365636365636365636365636365636B696B6B696B6B696B6B696B6B696B
+ 6B696B6B696B6B696BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE73717373717373717373717373
+ 75737375737375737375737375737375737375737375737B797B7B797B7B797B
+ 7B797B7B797B7B797B7B797B7B797B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D
+ 7B7B7D7B7B7D7B848284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8A8C
+ 8C8A8C8C8A8C8C8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E
+ 8C8C8E8C8C8E8C8C8E8C94929494929494929494929494929494929494929494
+ 92949496949496949496949496949496949496949496949496949C9A9C9C9A9C
+ 9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9E9C9C9E9CCECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCEADAAADADAAADADAEADADAEADADAE
+ ADADAEADADAEADADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5
+ B2B5B5B2B5B5B2B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5
+ BDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBE
+ BDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6
+ C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCED6D3D6D6D3D6D6D3D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6
+ D6D7D6D6D7D6D6D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDB
+ DEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7
+ E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+ E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEB
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF7F3F7F7F3F7CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE313031313031313031
+ 3130313130313134313134313134313134313134313134313134313134313938
+ 39393839393839393839393839393839393839393839393839393839393C3939
+ 3C39393C39393C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424245
+ 424245424A494A4A494A4A494A4A494A4A494A4A494A4A494A4A494A4A4D4A4A
+ 4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A4A4D4A525152525152525152525152
+ 525152525152525152525152525552525552525552525552525552CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A636163636163
+ 6361636361636361636361636361636361636365636365636365636365636365
+ 636365636365636365636B696B6B696B6B696B6B696B6B696B6B696B6B696B6B
+ 696B6B6D6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE7371737371737371737375737375737375
+ 737375737375737375737375737375737B797B7B797B7B797B7B797B7B797B7B
+ 797B7B797B7B797B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B
+ 848284848284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C
+ 8A8C8C8A8C8C8A8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C
+ 8C8E8C9492949492949492949492949492949492949492949492949496949496
+ 949496949496949496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C
+ 9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCEADAAADADAEADADAEADADAEADADAEADADAEAD
+ ADAEADADAEADADAEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2
+ B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBD
+ BABDBDBABDBDBABDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBD
+ BDBEBDBDBEBDBDBEBDC6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3
+ D6D6D3D6D6D3D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6
+ D7D6DEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDFDEDEDFDE
+ DEDFDEDEDFDEDEDFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7E7E3
+ E7E7E3E7E7E3E7E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+ E7E7EFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEF
+ EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE31303131303131303131
+ 3431313431313431313431313431313431313431313431393839393839393839
+ 393839393839393839393839393839393839393839393C39393C39393C39393C
+ 39393C39393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE4245424245424A494A
+ 4A494A4A494A4A494A4A494A4A494A4A494A4A494A4A4D4A4A4D4A4A4D4A4A4D
+ 4A4A4D4A4A4D4A4A4D4A4A4D4A52515252515252515252515252515252515252
+ 5152525152525552525552525552525552525552525552CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE5A5D
+ 5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A5A5D5A63616363616363616363616363
+ 6163636163636163636163636563636563636563636563636563636563636563
+ 6365636B696B6B696B6B696B6B696B6B696B6B696B6B696B6B696B6B6D6B6B6D
+ 6BCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE737173737173737573737573737573737573737573
+ 7375737375737375737B797B7B797B7B797B7B797B7B797B7B797B7B797B7B79
+ 7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B7B7D7B84828484828484
+ 8284CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE8C8A
+ 8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C8C8E8C94929494
+ 9294949294949294949294949294949294949294949694949694949694949694
+ 9496949496949496949496949C9A9C9C9A9C9C9A9C9C9A9C9C9A9C9C9A9CCECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEADAEADADAEADADAEADADAEADADAEADADAEADADAEADAD
+ AEADB5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B2B5B5B6B5B5B6B5
+ B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5B5B6B5BDBABDBDBABDBDBABDBDBABDBDBA
+ BDBDBABDBDBABDBDBABDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBDBEBDBD
+ BEBDC6C3C6C6C3C6CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCED6D3D6D6D3D6
+ D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6D6D7D6DEDBDEDEDB
+ DEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDBDEDEDFDEDEDFDEDEDFDEDEDFDEDE
+ DFDEDEDFDEDEDFDEDEDFDEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7
+ E7E3E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEB
+ EFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEBEFEFEFEFEFEFEFEFEFEFEFEFEFCE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE3134313134
+ 3131343131343131343131343131343139383939383939383939383939383939
+ 3839393839393839393839393839393C39393C39393C39393C39393C39393C39
+ 393C39CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE737173737573CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE848284848284CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE8C8E8C8C8E8C8C8E8C8C8E8C9492949492949492949492
+ 9494929494929494929494929494969494969494969494969494969494969494
+ 96949496949C9A9C9C9A9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCEBDBEBDBDBEBDBDBEBDBDBEBDCECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCEE7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E3E7E7E7E7E7
+ E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7EFEBEFEFEBEFCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE313431
+ 313431313431313431393839393839393839393839393839393839CECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE949294949294949294949294949294
+ 9492949492949496949496949496949496949496949496949496949496949C9A
+ 9C9C9A9C9C9A9CCECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE9496949496949496949496949496949496949C9A9CCECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE00000000000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE0000000000000000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCE000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCE000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCE000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCE000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECF
+ CECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECE000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE000000000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCE
+ CECFCE000000000000000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCE00
+ 0000000000000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00
+ 0000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000000000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000
+ 000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE00000000000000000000000000000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000
+ 0000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000
+ 0000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000000000000000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000CECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000000000000000000000CECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCE000000000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCE000000000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCE000000000000000000000000000000000000CECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000
+ 000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000CE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCE000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCE000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECE000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCE000000000000000000000000000000CECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCE000000000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000
+ 00000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000000000
+ 000000000000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000000000000000
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000000000000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCE000000000000000000000000000000
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCE000000000000000000000000000000CECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCE000000000000000000000000000000000000CECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCE000000000000000000000000000000000000CECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CE000000000000000000000000000000000000000000CECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE000000
+ 000000000000000000000000000000000000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 0000000000000000000000000000000000000000CECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000000000
+ 00000000000000000000000000000000CECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCE0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ 0000000000CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE00000000
+ 00CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCE0000000000CECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECE
+ CFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCE
+ CECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECFCECECF
+ CECECFCECECFCECECFCECECFCECECFCE00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000CECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFCECE}
+ Transparent = True
+ end
+ object devotion: TLabel
+ Left = 44
+ Top = 172
+ Width = 341
+ Height = 141
+ Alignment = taCenter
+ AutoSize = False
+ Transparent = True
+ WordWrap = True
+ end
+ object Button1: TButton
+ Left = 304
+ Top = 316
+ Width = 75
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/splashfrm.h b/apps/windoze/CBuilder5/BibleCS/splashfrm.h
new file mode 100644
index 0000000..03be987
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/splashfrm.h
@@ -0,0 +1,26 @@
+//---------------------------------------------------------------------------
+
+#ifndef splashfrmH
+#define splashfrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include <Graphics.hpp>
+//---------------------------------------------------------------------------
+class TsplashForm : public TForm
+{
+__published: // IDE-managed Components
+ TImage *Image1;
+ TButton *Button1;
+ TLabel *devotion;
+private: // User declarations
+public: // User declarations
+ __fastcall TsplashForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TsplashForm *splashForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Default.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Default.sch
new file mode 100644
index 0000000..3fe1ff9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Default.sch
@@ -0,0 +1,20 @@
+[Appearance]
+CommentBackColor=16777215
+CommentFontColor=0
+CommentFontName=Times New Roman
+CommentFontSize=12
+CurrentVSColor=16711680
+FieldColor=16776960
+LDBackColor=16777215
+LDFontColor=0
+LDFontName=Times New Roman
+LDFontSize=12
+TextBackColor=16777215
+TextFontColor=0
+TextFontName=Times New Roman
+TextFontSize=12
+VSNumberColor=16711680
+PopupBackColor=14680063
+PopupFontColor=0
+PopupFontName=Times New Roman
+PopupFontSize=9
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Light Blues.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Light Blues.sch
new file mode 100644
index 0000000..bf26d58
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Light Blues.sch
@@ -0,0 +1,24 @@
+
+[Appearance]
+CommentBackColor=16771797
+CommentFontColor=8388608
+CommentFontName=MS Sans Serif
+CommentFontSize=12
+CurrentVSColor=8388863
+FieldColor=16771797
+LDBackColor=16771797
+LDFontColor=8388608
+LDFontName=MS Sans Serif
+LDFontSize=12
+MorphColor=4227072
+PopupBackColor=16773087
+PopupFontColor=8388608
+PopupFontName=MS Sans Serif
+PopupFontSize=10
+StrongsColor=8388736
+TextBackColor=16771797
+TextFontColor=8388608
+TextFontName=MS Sans Serif
+TextFontSize=12
+VSNumberColor=255
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Lighten Up.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Lighten Up.sch
new file mode 100644
index 0000000..657beba
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Lighten Up.sch
@@ -0,0 +1,24 @@
+
+[Appearance]
+CommentBackColor=16777215
+CommentFontColor=8421504
+CommentFontName=MS Serif
+CommentFontSize=12
+CurrentVSColor=0
+FieldColor=12632256
+LDBackColor=16777215
+LDFontColor=8421504
+LDFontName=MS Serif
+LDFontSize=12
+MorphColor=5329233
+PopupBackColor=15461355
+PopupFontColor=6908265
+PopupFontName=Times New Roman
+PopupFontSize=11
+StrongsColor=5329233
+TextBackColor=16777215
+TextFontColor=8421504
+TextFontName=MS Serif
+TextFontSize=12
+VSNumberColor=12632256
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Midnight.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Midnight.sch
new file mode 100644
index 0000000..e73c6fb
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Midnight.sch
@@ -0,0 +1,24 @@
+
+[Appearance]
+CommentBackColor=0
+CommentFontColor=65280
+CommentFontName=Arial
+CommentFontSize=14
+CurrentVSColor=65535
+FieldColor=12632256
+LDBackColor=0
+LDFontColor=65280
+LDFontName=Arial
+LDFontSize=14
+MorphColor=16711808
+PopupBackColor=0
+PopupFontColor=65535
+PopupFontName=Arial
+PopupFontSize=10
+StrongsColor=16711935
+TextBackColor=0
+TextFontColor=65280
+TextFontName=Arial
+TextFontSize=14
+VSNumberColor=8454143
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Navy Blues.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Navy Blues.sch
new file mode 100644
index 0000000..f8cacbe
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Navy Blues.sch
@@ -0,0 +1,24 @@
+
+[Appearance]
+CommentBackColor=8404992
+CommentFontColor=14408667
+CommentFontName=Tahoma
+CommentFontSize=13
+CurrentVSColor=65535
+FieldColor=12632256
+LDBackColor=8404992
+LDFontColor=14408667
+LDFontName=Tahoma
+LDFontSize=13
+MorphColor=16777215
+PopupBackColor=12632256
+PopupFontColor=8388608
+PopupFontName=Tahoma
+PopupFontSize=11
+StrongsColor=16777215
+TextBackColor=8404992
+TextFontColor=14408667
+TextFontName=Tahoma
+TextFontSize=13
+VSNumberColor=8454143
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/colors/Parchment.sch b/apps/windoze/CBuilder5/BibleCS/stage/colors/Parchment.sch
new file mode 100644
index 0000000..88b69be
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/colors/Parchment.sch
@@ -0,0 +1,24 @@
+
+[Appearance]
+CommentBackColor=13434879
+CommentFontColor=0
+CommentFontName=Arial
+CommentFontSize=10
+CurrentVSColor=4227327
+FieldColor=16777215
+LDBackColor=13434879
+LDFontColor=0
+LDFontName=Arial
+LDFontSize=10
+MorphColor=25025
+PopupBackColor=14680063
+PopupFontColor=0
+PopupFontName=Arial
+PopupFontSize=9
+StrongsColor=16512
+TextBackColor=13434879
+TextFontColor=0
+TextFontName=Arial
+TextFontSize=10
+VSNumberColor=4227327
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de.conf b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de.conf
new file mode 100644
index 0000000..722e88d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de.conf
@@ -0,0 +1,180 @@
+[Meta]
+Name=de
+Description=German
+Translator=Christian Renz <crenz@web42.com>
+
+[Text]
+BackBtnImage=uilocales.d/de_back.bmp
+SearchBtnImage=uilocales.d/de_search.bmp
+&About=&Über SWORD...
+About The SWORD Project=Über das SWORD Projekt
+&Add=&Hinzufügen
+&Add Bookmark=Lesezeichen &hinzufügen
+Add New Bookmark File=Neue Lesezeichendatei hinzufügen
+Bookmark Section Title:=Name für diese Gruppe von Lesezeichen:
+Bookmark=Lesezeichen
+Bookmarks=Lesezeichen
+Cancel=Abbrechen
+Case Sensitive=Groß-/Kleinschreibung
+Chapter=Kapitel
+Check Modules To Show As Tabs=Anzuzeigende Module ankreuzen
+Combo/Edit Fields=Kombo-/Eingabefelder
+Contents=&Inhalt
+&Copy=&Kopieren
+Copy as &B-Greek Transliteration=Als &B-Greek-Umschrift kopieren
+&Close=&Schließen
+Create a New Verse List Window=Neues Verslistenfenster &öffnen
+Create Verse List=Neue Versliste erstellen
+Current Verse Color=Aktuelle Versfarbe
+Daily Devotionals=Tageslese
+Default Devotional=Standard-Tagelese
+Define Custom Range=Eigenen Bereich festlegen
+Definitions=Definitionen
+&Delete Entry=Eintrag l&öschen
+Description=Beschreibung
+Devotion for Today=Tageslese für heute
+Devotional of the Day=&Tageslese
+Dictionary Lookup=Im Wörterbuch nachschlagen
+Display Colors=Anzeigefarben
+Display=Anzeige
+&Edit=&Bearbeiten
+&Edit Bookmarks / Tree View...=Lesezeichen &bearbeiten / Baumdarstellung...
+Edit Entry=Eintrag bearbeiten
+&Edit Entry=Eintrag &bearbeiten
+"Entire Module","Current Results","Custom Range"="Ganzes Module","Aktuelle Ergebnisse","Eigener Bereich"
+E&xit=&Beenden
+eg. mat-jo;rev4=z.B. mat-jo;rev4
+&File=&Datei
+File Name (without extension):=Dateiname (ohne Endung)
+Font Size:=Schriftgröße
+Found New Module...=Neues Modul gefunden...
+General=Allgemein
+Greek=Griechisch
+Hebrew=Hebräisch
+&Help=&Hilfe
+Hide / Show Modules=Module anzeigen/verstecken
+Individual Modules (Font Only)=Einzelne Module (nur Schriftart)
+Install Manager=&Installationsprogramm
+Language=Sprache
+Link to Comment for Verse...=Mit anderem Vers &verknüpfen
+Maintain Custom Ranges=Eigene Bereiche verwalten
+Module Type=Modulart
+Module=Modul
+"Mult Word","Phrase","Regular Expression"="Mehrere Worte","Ausdruck","Regulärer Ausdruck"
+&New Search Window=&Neues Suchfenster...
+OK=OK
+OkBtn=OK
+Options=&Optionen
+Original Language Support - Default Modules=Standardmodule für Ursprachenunterstützung
+Parsing=Syntaxanalyse
+Personalize=Personalisieren
+Preferences=Voreinstellungen
+&Preferences...=&Voreinstellungen...
+Preview...=Vorschau...
+Preview=Vorschau
+Range Name=Name für diesen Bereich
+Range Text=Bibeltext
+Reference=Bibelstelle
+&Remove=&Entfernen
+&Save=&Speichern
+S&ave Layout=Anordnung s&peichern
+Save Other Bookmarks=Andere Lesezeichen speichern
+Save Personal Bookmarks=Eigene Lesezeichen speichern
+Save Screen Layout=Bildschirmanordnung speichern
+Scheme=Schema
+Scope=Bereich
+&Search=&Suche
+Search Options=Sucheinstellungen
+Search Type=Suchart
+Search...=Suche...
+Search=Suche
+Select Color...=Farbe...
+Select Font...=Schriftart...
+Show Devotional at Startup=Tageslese beim Programmstart anzeigen
+Show Devotional Splash Screen on Startup=Tageslese beim Programmstart anzeigen
+Show Devotionals as Dictionaries=Tageslese als Wörterbucher anzeigen
+Show Hint Over Strongs Numbers=Erklärung über Strongs-Nummern anzeigen
+Show Hint Pop-ups=Tipps anzeigen
+Special Modules=Besondere Module
+Strong's Numbered Text=Text mit Strongs-Nummern
+Text Font=Schriftart für den Text
+&Tools=&Tools
+Type Verse=Vers eintippen
+User Verse List=Eigene Versliste
+Verse List=Versliste
+Verse Number Color=Farbe für Versnummern
+&New Bookmark File=&Neue Lesezeichendatei
+P&rint...=&Drucken...
+The SWORD Project=Das SWORD Projekt
+&Footnotes=&Fußnoten
+&On=&An
+O&ff=A&us
+&Hebrew Cantillation=Hebräische Kantillation
+H&ebrew Vowel Points=Hebräische Vokalmarkierungen
+&Strong's Numbers=Strongs-Nummern
+&Morphological Tags=Wortformenanzeige
+He&adings=Ü&berschriften
+&Transliteration=&Umschrift
+&Latin=Lateinische Buchstaben
+&Basic Latin=Lateinische Buchstaben ohne Akzente
+B&eta=B&eta
+B&Greek=B&Greek
+Print Selection=Druckauswahl
+Print Source=Quelle
+Bible Text=Bibeltext
+Commentary Text=Kommentartext
+Lexicon/Dictionary Text=Lexikon-/Wörterbuchtext
+Module Name=Modulname
+Print Range=Druckbereich
+Versbereich oder -liste:
+&Print=&Drucken
+Print=Drucken
+Print...=Drucken...
+&Print...=&Drucken...
+P&review=&Vorschau
+P&review...=&Vorschau...
+Printer&s...=D&rucker...
+Margins (Inches)=Ränder (Zoll)
+Top:=Oben:
+Left:=Links:
+Right:=Rechts:
+Bottom:=Unten:
+Header/Footer=Kopf-/Fußzeile
+Print Header=Kopfzeile drucken
+Header Text:=Kopfzeilentext:
+Print Footer=Fußzeile drucken
+Footer Text:=Fußzeilentext:
+Formatting Options=Formatierung
+Font and Size=Schriftart und -größe
+Chapter Heading:=Kapitelüberschrift:
+Body Text:=Text:
+Verse Numbers:=Versnummern:
+Font:=Schriftart:
+Book Name=Buchname
+Chapter Headings=Kapitelüberschriften
+Paragraph Format=Absatzformat
+Verse Numbers=Versnummern
+Superscripted=Hochgestellt
+Prefixed (John 1:1 KJV)...=Vorne (Johannes 1,1 KJV)...
+Postfixed ...(John 1:1 KJV)=Hinten ...(Johannes 1,1 KJV)
+"English (US)","Czech","Danish","German","French","Norwegian","Polish","Portuguese","Slovak"="Englisch (USA)","Tschechisch","Dänisch","Deutsch","Französisch","Norwegisch","Polnisch","Portugiesisch","Slovakisch"
+Glossaries=Glossare
+Show Glossaries as Dictionaries=Glossare als Wörterbücher anzeigen
+Default=Standard
+"All Modules","Bible Modules","Commentary Modules","Lexicon/Dictionary Modules"="Alle Module","Bibelmodule","Kommentarmodule","Lexikon-/Wörterbuchmodule"
+&Save Scheme=Schema &speichern
+&Delete Scheme=Schema &löschen
+&Import Scheme=Schema &importieren
+&Export Scheme=Schema &exportieren
+Personal Bookmarks=Eigene Lesezeichen
+Words To Live By...Worte zum Leben...
+Go Back To Previous Location=Zurück
+Bring Up Search Window=Suchfenster anzeigen
+Biblical Texts=Biblische Texte
+Commentaries=Kommentare
+Lexicons / Dictionaries=Lexika / Wörterbücher
+Lookup Entry=Nach Eintrag suchen
+Verse Range or List=Versbereich oder -liste
+Page Setup=Seite einrichten
+Strong's Numbers <...>=Strongs Nummer <...>
+Strong's Tense (...)=Strongs Zeitform (...) \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_back.bmp b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_back.bmp
new file mode 100644
index 0000000..645a0c0
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_back.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_search.bmp b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_search.bmp
new file mode 100644
index 0000000..831a59f
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/de_search.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/hu.conf b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/hu.conf
new file mode 100644
index 0000000..946759d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/hu.conf
@@ -0,0 +1,172 @@
+[Meta]
+Name=hu
+Description=Magyar
+Translator=Mentler Gyula <mentler@sbgk.hu>
+
+[Text]
+BackBtnImage=uilocales.d/en_back.bmp
+SearchBtnImage=uilocales.d/en_search.bmp
+&About=SWORD &névjegye
+About The SWORD Project=SWORD Projektrõl
+&Add=&Hozzáadás
+&Add Bookmark=&Könyvjelzõ elhelyezése
+Add New Bookmark File=Új könyvjelzõfile létrehozása
+Bookmark Section Title:=Könyvjelzõ csoport címe:
+Bookmark=Könyvjelzõ
+Bookmarks=Könyvjelzõk
+Cancel=Mégsem
+Case Sensitive=Kis-/Nagybetû érzékeny
+Chapter=Fejezet
+Check Modules To Show As Tabs=Fülként megjelenõ modulok kijelölése
+Combo/Edit Fields=Combo/Edit Fields
+Contents=&Tartalom
+&Copy=&Másolás
+Copy as &B-Greek Transliteration=Másolás &B-Görög átírásban
+&Close=Be&zárás
+Create a New Verse List Window=Új verslista ablak létrehozása
+Create Verse List=Verslista létrehozása
+Current Verse Color=Aktuális vers színe
+Daily Devotionals=Napi csendesség
+Default Devotional=Alapértelmezett napi csendesség
+Define Custom Range=Tartomány megadása
+Definitions=Definíciók
+&Delete Entry=Bejegyzés törlése
+Description=Leírás
+Devotion for Today=Mai csendesség
+Devotional of the Day=&Csendesség
+Dictionary Lookup=Keresés a szótárban
+Display Colors=Képernyõ színei
+Display=Képernyõ
+&Edit=S&zerkesztés
+&Edit Bookmarks / Tree View...=Könyvjelzõk s&zerkesztése / Fa nézet
+Edit Entry=Bejegyzés szerkesztése
+&Edit Entry=Bejegyzés s&zerkesztése
+"Entire Module","Current Results","Custom Range"="Egész modul","Aktuális eredmények","Beállított tartomány"
+E&xit=&Kilépés
+eg. mat-jo;rev4=eg. mat-jo;rev4
+&File=&File
+File Name (without extension):=File neve (kiterjesztés nélkül):
+Font Size:=Betûtípus mérete:
+Found New Module...=Új modultok...
+General=Álltalános
+Greek=Görög
+Hebrew=Héber
+&Help=&Súgó
+Hide / Show Modules=Modulok elrejtése/megjelenítése
+Individual Modules (Font Only)=Egyedi modulok (csak betûtípus)
+Install Manager=&Install manager program
+Language=Nyelv
+Link to Comment for Verse...=Mutató a vershez tartozó kommentárra
+Maintain Custom Ranges=Tartományok beállítása
+Module Type=Modul típus
+Module=Modul
+"Mult Word","Phrase","Regular Expression"="Több szó","Kifejezés","Reguláris kifejezés"
+&New Search Window=Új keresõablak
+OK=OK
+OkBtn=OK
+Options=&Beállítások
+Original Language Support - Default Modules=Eredeti nyelv támogatás - Alapértelmezett modulok
+Parsing=Szintaktikai feldolgozás
+Personalize=Personalize
+Preferences=Testreszabás
+&Preferences...=&Testreszabás...
+Preview...=Preview...
+Preview=Preview
+Range Name=Tartomány neve
+Range Text=Tartomány szövege
+Reference=Hivatkozás
+&Remove=&Eltávolítás
+&Save=&Mentés
+S&ave Layout=Elrendezés &mentése
+Save Other Bookmarks=Egyéb könyvjelzõk mentése
+Save Personal Bookmarks=Személyes könyvjelzõk mentése
+Save Screen Layout=Képernyõelrendezés mentése
+Scheme=Séma
+Scope=Környezet(Scope)
+&Search=&Keresés
+Search Options=Keresési opciók
+Search Type=Kereséstípus
+Search...=Keresés...
+Search=Keresés
+Select Color...=Szín...
+Select Font...=Betûtípus...
+Show Devotional at Startup=Show Devotional at Startup
+Show Devotional Splash Screen on Startup=Show Devotional Splash Screen on Startup
+Show Devotionals as Dictionaries=Show Devotionals as Dictionaries
+Show Hint Over Strongs Numbers=Magyarázatok megmutatása a Strong számok felett
+Show Hint Pop-ups=Tipp ablalok megmutatása
+Special Modules=Speciális modulok
+Strong's Numbered Text=Strong számokkal ellátott szöveg
+Text Font=Betûtípus a szöveghez
+&Tools=&Eszközök
+Type Verse=Type Verse
+User Verse List=Felhasználói verslista
+Verse List=Verslista
+Verse Number Color=Vers sorszámok színe
+&New Bookmark File=&Új könyvjelzõfile
+P&rint...=&Nyomtatás...
+The SWORD Project=A SWORD Projekt
+&Footnotes=&Lábjegyzetek
+&On=&Be
+O&ff=@Ki
+&Hebrew Cantillation=Héber recitálás
+H&ebrew Vowel Points=Héber magánhangzók pontozása
+&Strong's Numbers=Strong számok
+&Morphological Tags=Morfológiai jelzések
+He&adings=Fejlécek
+&Transliteration=Átírás
+&Latin=Latin betûk
+&Basic Latin=Latin betûk ékezet nélkül
+B&eta=B&eta
+B&Greek=B&Görög
+Print Selection=Kiválasztott rész kinyomtatása
+Print Source=Forrás nyomtatása
+Bible Text=Bibliai szöveg
+Commentary Text=Kommentár szövege
+Lexicon/Dictionary Text=Lexikon/Szótár
+Module Name=Modulnév
+Print Range=Tartomány nyomtatása
+&Print=&Nyomtatás
+P&review=Bemutatás
+Printer&s...=Nyomtatók...
+Margins (Inches)=Margók (inch)
+Top=Fent
+Left=Bal
+Right=Jobb
+Bottom=Lent
+Header/Footer=Fej-/Lábléc
+Print Header=Fejléc nyomtatás
+Header Text=Fejléc szövege
+Print Footer=Lábléc nyomtatása
+Footer Text=Lábléc szövege
+Formatting Options=Formázási opciók
+Font and Size=Metûtípus és méret
+Chapter Heading=Fejezet fejléce
+Body Text=Kenyérszöveg
+Verse Numbers=Versszámozás
+Font=Betûtípus
+Book Name=Könyv neve
+Chapter Headigns=Fejezetek fejlécei
+Paragraph Format=Bekezdés formázás
+Verse Numbers=Versszámozás
+Superscripted=Felsõ indexbe
+Prefixed (John 1:1 KJV)...=Elé írva (János 1,1 KJV)...
+Postfixed ...(John 1:1 KJV)=Utána írva ...(János 1,1 KJV)
+"English (US)","Czech","Danish","German","French","Norwegian","Polish","Portuguese","Slovak"="Angol (USA)","Cseh","Dán","Német","Francia","Norvég","Lengyel","Portugál","Szlovák"
+Glossaries=Szójegyzékek
+Show Glossaries as Dictionaries=Szójegyzékek és szótárak megmutatása
+Default=Alapértelmezett
+"All Modules","Bible Modules","Commentary Modules","Lexicon/Dictionary Modules"="Minden modul","Biblia modulok","Kommentár modulok","Lexikon/szótár modulok"
+&Save Scheme=Séma &mentés
+&Delete Scheme=Séma &törlés
+&Import Scheme=Séma &importálás
+&Export Scheme=Séma &exportálás
+Words To Live By...=Words To Live By...
+Go Back To Previous Location=Vissza az elõzõ helyre
+Bring Up Search Window=Keresõablak megjelenítése
+Biblical Texts=Bibliai szövegek
+Commentaries=Kommentárok
+Lexicons / Dictionaries=Lexikonok/Szótárak
+
+
+
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/id.conf b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/id.conf
new file mode 100644
index 0000000..a0802ef
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/id.conf
@@ -0,0 +1,179 @@
+[Meta]
+Name=id
+Description=Indonesia
+Translator=SABDA/YLSA <SABDA@xc.org>
+
+[Text]
+#BackBtnImage=uilocales.d/id_back.bmp
+#SearchBtnImage=uilocales.d/id_search.bmp
+&About=&Tentang SWORD/PEDANG...
+About The SWORD Project=Tentang Proyek SWORD/PEDANG
+&Add=&Tambah
+&Add Bookmark=Tambah Bookmark
+Add New Bookmark File=Tambah File Bookmark Baru
+Bookmark Section Title:=Judul Bagian Bookmark:
+Bookmark=Bookmark
+Bookmarks=Bookmark
+Cancel=Batal
+Case Sensitive=Huruf Besar/Kecil Berbeda
+Chapter=Pasal/Bab
+Check Modules To Show As Tabs=Cek Modul yang Ditampilkan dalam Tab
+Combo/Edit Fields=Field Multi/Edit
+Contents=Isi
+&Copy=Copy
+Copy as &B-Greek Transliteration=Copy Ke Transliterasi Yunani
+&Close=Tutup
+Create a New Verse List Window=Membuat Jendela Daftar Ayat Baru
+Create Verse List=Membuat Daftar Ayat
+Current Verse Color=Warna Ayat Aktif
+Daily Devotionals=Renungan Harian
+Default Devotional=Renungan Standar/Default
+Define Custom Range=Definisikan Batasan Khusus/Custom
+Definitions=Definisi
+&Delete Entry=Hapus Data
+Description=Deskripsi
+Devotion for Today=Renungan untuk Hari Ini
+Devotional of the Day=Renungan Hari Ini
+Dictionary Lookup=Cari dalam Kamus
+Display Colors=Warna Tampilan
+Display=Tampilkan
+&Edit=&Edit
+&Edit Bookmarks / Tree View...=Edit Bookmark / Sub-Bagian...
+Edit Entry=Edit Tulisan/Data
+&Edit Entry=Edit Tulisan/Data
+"Entire Module","Current Results","Custom Range"="Dalam Satu Modul","Dalam Hasil Pencarian","Dalam Batasan Khusus"
+E&xit=Keluar
+eg. mat-jo;rev4=mis. mat-yoh;wah4
+&File=File
+File Name (without extension):=Nama File (tanpa ekstensi/jenis):
+Font Size:=Ukuran Font:
+Found New Module...=Modul Baru Ditemukan...
+General=Umum
+Greek=Yunani
+Hebrew=Ibrani
+&Help=Help -- Bantuan/Info
+Hide / Show Modules=Sembunyikan/Tampilkan Modul
+Individual Modules (Font Only)=Modul Tersendiri (Hanya Font)
+Install Manager=Program Install Manager
+Language=Bahasa
+Link to Comment for Verse...=Link Ke Catatan/Komentar untuk Ayat...
+Maintain Custom Ranges=Mengolah Batasan Khusus
+Module Type=Jenis Modul
+Module=Modul
+"Mult Word","Phrase","Regular Expression"="Multi-Kata","Frasa","Ekspresi/Rumus"
+&New Search Window=Jendela Pencarian Baru
+OK=OK
+OkBtn=OkBtn
+Options=Pilihan
+Original Language Support - Default Modules=Dukungan untuk Bahasa Asli - Modul Standar/Default
+Parsing=Uraian Kalimat/Parsing
+Personalize=Kustomisasi Pribadi
+Preferences=Preferensi
+&Preferences...=Preferensi...
+Preview=Lihat Dahulu
+Preview...=Lihat Dahulu...
+Range Name=Batasan Nama
+Range Text=Batasan Teks
+Reference=Referensi
+&Remove=Hapus
+&Save=Simpan
+S&ave Layout=Simpan Susunan/Layout
+Save Other Bookmarks=Simpan Bookmark Lain
+Save Personal Bookmarks=Simpan Bookmark Pribadi
+Save Screen Layout=Simpan Susunan/Layout Layar
+Scheme=Skema
+Scope=Ruang Lingkup
+&Search=Cari
+Search Options=Pilihan Pencarian
+Search Type=Jenis Pencarian
+Search...=Cari...
+Search=Cari
+Select Color...=Pilih Warna...
+Select Font...=Pilih Font...
+Show Devotional at Startup=Tampilkan Renungan di Start-up
+Show Devotional Splash Screen on Startup=Tampilkan Layar Renungan Saat Start-up
+Show Devotionals as Dictionaries=Tampilkan Renungan Seperti Kamus
+Show Hint Over Strongs Numbers=Tampilkan Tip Nomor Strong
+Show Hint Pop-ups=Tampilkan Tip Pop-up
+Special Modules=Modul Khusus
+Strong's Numbered Text=Teks dengan Nomor Strong
+Text Font=Font Teks
+&Tools=Alat-alat
+Type Verse=Ketik Ayat
+User Verse List=Daftar Ayat Pengguna
+Verse List=Daftar Ayat
+Verse Number Color=Warna Nomor Ayat
+&New Bookmark File=File Bookmark Baru
+P&rint...=Cetak...
+The SWORD Project=Proyek SWORD/PEDANG
+&Footnotes=Catatan Kaki
+&On=Hidup/On
+O&ff=Mati/Off
+&Hebrew Cantillation=Kantilasi/Kanonis Ibrani
+H&ebrew Vowel Points=Titik/Poin Vokal Ibrani
+&Strong's Numbers=Nomor Strong
+&Morphological Tags= Tag Morfologi
+He&adings=Bagian Kepala
+&Transliteration=Transliterasi
+&Latin=Bahasa Latin
+&Basic Latin=Bahasa Latin (Basic/Dasar)
+B&eta=Beta
+B&Greek=Yunani
+Print Selection=Pilihan Cetak
+Print Source=Sumber Cetak
+Bible Text=Teks Alkitab
+Commentary Text=Teks Tafsiran/Komentar
+Lexicon/Dictionary Text=Teks Leksikon/Kamus
+Module Name=Nama Modul
+Print Range=Batasan Cetak
+Versbereich oder -liste: **********
+&Print=Cetak
+&Print...=Cetak...
+Print=Cetak
+Print...=Cetak...
+P&review=Lihat Dahulu Cetakan
+P&review...=Lihat Dahulu Cetakan...
+Printer&s...=Printer...
+Margins (Inches)=Margin (Inci)
+Top:=Atas:
+Left:=Kiri:
+Right:=Kanan:
+Bottom:=Bawah:
+Header/Footer=Kepala/Kaki
+Print Header=Kepala/Header Halaman Cetak
+Header Text:=Teks Kepala/Header:
+Print Footer= Kaki/Footer Halaman Cetak
+Footer Text:=Teks Kaki/Footer:
+Formatting Options=Pilihan Format
+Font and Size=Font dan Ukuran
+Chapter Heading:=Judul Bab/Pasal:
+Body Text:=Teks Utama:
+Verse Numbers:=Nomor Ayat:
+Font:=Font:
+Book Name=Nama Kitab/Buku
+Chapter Headings=Judul Bab/Pasal
+Paragraph Format=Format Paragraf
+Verse Numbers=Nomor Ayat
+Superscripted=Tulisan Superskrip
+Prefixed (John 1:1 KJV)...=Alamat Ayat Sebelum (Yohanes 1:1 TB)...
+Postfixed ...(John 1:1 KJV)=Alamat Ayat Setelah ...(Yohanes 1:1 TB)
+"English (US)","Czech","Danish","German","French","Norwegian","Polish","Portuguese","Slovak"="Inggris","Cekoslovakia","Denmark","Jerman","Prancis","Norwegia","Polandia","Portugis","Slovia"
+Glossaries=Daftar Kata - Glossary
+Show Glossaries as Dictionaries=Tampil Daftar Kata/Glossary Seperti Kamus
+Default=Standar/Default
+"All Modules","Bible Modules","Commentary Modules","Lexicon/Dictionary Modules"="Semua Modul","Modul Alkitab","Modul Tafsiran/Komentar","Modul Leksikon/Kamus"
+&Save Scheme=Simpan Skema
+&Delete Scheme=Hapus Skema
+&Import Scheme=Impor Skema
+&Export Scheme=Ekspor Skema
+Words To Live By...=Kata-kata untuk Kehidupan...
+Go Back To Previous Location=Kembali ke Lokasi Sebelumnya
+Bring Up Search Window=Dapat Jendala Pencarian
+Biblical Texts=Teks Alkitabiah
+Commentaries=Tafsiran/Komentar
+Lexicons / Dictionaries= Leksikon / Kamus
+Lookup Entry=Lookup Entry
+Verse Range or List=Verse Range or List
+Page Setup=Page Setup
+Strong's Numbers <...>=Strong's Numbers <...>
+Strong's Tense (...)=Strong's Tense (...) \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl.conf b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl.conf
new file mode 100644
index 0000000..286d8ff
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl.conf
@@ -0,0 +1,178 @@
+[Meta]
+Name=sl
+Description=Slovenian
+Translator=Gregor Anzelj <gre_gor@hotmail.com>
+
+[Text]
+BackBtnImage=uilocales.d/sl_back.bmp
+SearchBtnImage=uilocales.d/sl_search.bmp
+&About=Vi&zitka
+About The SWORD Project=Predstavitev projekta SWORD
+&Add=&Dodaj
+&Add Bookmark=&Dodaj zaznamek
+Add New Bookmark File=Dodaj novo datoteko zaznamkov
+Bookmark Section Title:=Ime skupine zaznamkov:
+Bookmark=Zaznamek
+Bookmarks=Zaznamki
+Cancel=Preklici
+Case Sensitive=Razlikovanje crk
+Chapter=Poglavje
+Check Modules To Show As Tabs=Oznaci module, ki bodo vidni
+Combo/Edit Fields=Kombo/Vnosna polja
+Contents=Vsebina
+&Copy=&Kopiraj
+Copy as &B-Greek Transliteration=Kopiraj kot &B-Grski prepis
+&Close=&Zapri
+Create a New Verse List Window=Ustvari okno z novim seznamom vrstic
+Create Verse List=Ustvari seznam vrstic
+Current Verse Color=Barva trenutne vrstice
+Daily Devotionals=Dnevno branje
+Default Devotional=Privzeto branje
+Define Custom Range=Definiraj lasten obseg
+Definitions=Definicije
+&Delete Entry=&Izbrisi vnos
+Description=Opis
+Devotion for Today=Danasnje dnevno branje
+Devotional of the Day=Dnevno branje
+Dictionary Lookup=Poglej v slovarju
+Display Colors=Barve zaslona
+Display=Zaslon
+&Edit=&Urejanje
+&Edit Bookmarks / Tree View...=&Urejanje zaznamkov / Drevo...
+Edit Entry=Urejanje vnosa
+&Edit Entry=&Urejanje vnosa
+"Entire Module","Current Results","Custom Range"="Celoten modul","Trenutni rezultati","Lasten obseg"
+E&xit=Iz&hod
+eg. mat-jo;rev4=npr. mt-jn;raz4
+&File=&Datoteka
+File Name (without extension):=Ime datoteke (brez koncnice):
+Font Size:=Velikost pisave:
+Found New Module...=Najden je nov modul...
+General=Splosno
+Greek=Grsko
+Hebrew=Hebrejsko
+&Help=&Pomoc
+Hide / Show Modules=Pokazi / Skrij module
+Individual Modules (Font Only)=Posamezni moduli (samo pisava)
+Install Manager=Namestitveni program
+Language=Jezik
+Link to Comment for Verse...=Povezava s komentarjem vrstice
+Maintain Custom Ranges=Vzdrzuj lastne obsege
+Module Type=Tip modula
+Module=Modul
+"Mult Word","Phrase","Regular Expression"="Vec besed","Fraza","Pravilen izraz"
+&New Search Window=&Novo iskalno okno
+OK=V redu
+OkBtn=&V redu
+Options=&Moznosti
+Original Language Support - Default Modules=Podpora za izvirne jezike - Privzeti moduli
+Parsing=Razclemba
+Personalize=Po meri
+Preferences=Nastavitve
+&Preferences...=&Nastavitve...
+Preview...=Predogled...
+Preview=Predogled
+Range Name=Ime obsega
+Range Text=Obseg besedila
+Reference=Referenca
+&Remove=&Odstrani
+&Save=&Shrani
+S&ave Layout=S&hrani izgled
+Save Other Bookmarks=Shrani druge zaznamke
+Save Personal Bookmarks=Shrani osebne zaznamke
+Save Screen Layout=Shrani izgled zaslona
+Scheme=Shema
+Scope=Obseg
+&Search=&Iskanje
+Search Options=Moznosti iskanja
+Search Type=Tip iskanja
+Search...=Iskanje...
+Search=Iskanje
+Select Color...=Izberi barvo...
+Select Font...=Izberi pisavo...
+Show Devotional at Startup=Pokazi branje ob zacetku
+Show Devotional Splash Screen on Startup=Pokazi dnevno branje ob zacetku
+Show Devotionals as Dictionaries=Pokazi dnevna branja kot slovarje
+Show Hint Over Strongs Numbers=Pokazi namige pri Strong stevilih
+Show Hint Pop-ups=Pokazi namige
+Special Modules=Posebni moduli
+Strong's Numbered Text=Besedilo s Strong stevili
+Text Font=Pisava besedila
+&Tools=&Orodja
+Type Verse=Tip vrstice
+User Verse List=Uporabnikov seznam vrstic
+Verse List=Seznam vrstic
+Verse Number Color=Barva stevilke vrstice
+&New Bookmark File=&Nova datoteka zaznamkov
+P&rint...=Na&tisni...
+The SWORD Project=Projekt SWORD
+&Footnotes=&Opombe
+&On=&Pokazi
+O&ff=&Skrij
+&Hebrew Cantillation=Hebrejska kantilacija?
+H&ebrew Vowel Points=Hebrejske pike?
+&Strong's Numbers=&Strong stevila
+&Morphological Tags=&Morfoloske oznake
+He&adings=&Naslovi
+&Transliteration=&Prepis
+&Latin=&Latinica
+&Basic Latin=Latinica &brez naglasov
+B&eta=B&eta
+B&Greek=B-&Grsko
+Print Selection=Izbor tiskanja
+Print Source=Vir tiskanja
+Bible Text=Biblicno besedilo
+Commentary Text=Besedilo komentarja
+Lexicon/Dictionary Text=Besedilo leksikona/slovarja
+Module Name=Ime modula
+Print Range=Obseg tiskanja
+&Print=Na&tisni
+&Print...=Na&tisni...
+Print=Natisni
+Print...=Natisni...
+P&review=P&redogled
+P&review...=P&redogled...
+Printer&s...=T&iskalniki...
+Margins (Inches)=Robovi (v palcih)
+Top:=Zgoraj:
+Left:=Levo:
+Right:=Desno:
+Bottom:=Spodaj:
+Header/Footer=Glava/Noga
+Print Header=Natisni glavo
+Header Text:=Besedilo glave:
+Print Footer=Natisni nogo
+Footer Text:=Besedilo noge:
+Formatting Options=Moznosti oblikovanja
+Font and Size=Pisava in velikost
+Chapter Heading:=Naslov poglavja:
+Body Text:=Besedilo:
+Verse Numbers:=Stevilke vrstic:
+Font:=Pisava:
+Book Name=Ime knjige
+Chapter Headings=Naslovi poglavij
+Paragraph Format=Oblika odstavka
+Verse Numbers=Stevilke vrstic
+Superscripted=Nadpisano
+Prefixed (John 1:1 KJV)...=Predpona (Janez 1,1 KJV)...
+Postfixed ...(John 1:1 KJV)=Pripona ...(Janez 1,1 KJV)
+"English (US)","Czech","Danish","German","French","Norwegian","Polish","Portuguese","Slovak","Slovenian"="anglesko","cesko","dansko","nemsko","francosko","norvesko","poljsko","portugalsko","slovasko","slovensko"
+Glossaries=Besednjaki
+Show Glossaries as Dictionaries=Pokazi besednjake kot slovarje
+Default=Privzeto
+"All Modules","Bible Modules","Commentary Modules","Lexicon/Dictionary Modules"="Vsi moduli","Biblicni moduli","Moduli komentarjev","Moduli leksikonov/slovarjev"
+&Save Scheme=&Shrani shemo
+&Delete Scheme=&Izbrisi shemo
+&Import Scheme=&Uvozi shemo
+&Export Scheme=I&zvozi shemo
+Words To Live By...=Besede za zivljenje...
+Go Back To Previous Location=Pojdi na prejsnje mesto
+Bring Up Search Window=Pokazi iskalno okno
+Biblical Texts=Biblicna besedila
+Commentaries=Komentarji
+Lexicons / Dictionaries=Leksikoni / Slovarji
+Lookup Entry=Lookup Entry
+Verse Range or List=Verse Range or List
+Page Setup=Page Setup
+Strong's Numbers <...>=Strong's Numbers <...>
+Strong's Tense (...)=Strong's Tense (...)
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_back.bmp b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_back.bmp
new file mode 100644
index 0000000..9be8143
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_back.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_search.bmp b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_search.bmp
new file mode 100644
index 0000000..c44be4d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/stage/uilocales.d/sl_search.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.bpr b/apps/windoze/CBuilder5/BibleCS/sword.bpr
new file mode 100644
index 0000000..8d99df8
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/sword.bpr
@@ -0,0 +1,166 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="stage\sword.exe"/>
+ <OBJFILES value="obj\sword.obj obj\mainfrm.obj obj\AboutBoxfrm.obj obj\bookmarkfrm.obj
+ obj\newbmfilefrm.obj obj\optionfrm.obj obj\searchfrm.obj
+ obj\biblecsmgr.obj obj\ModInstForm.obj obj\vrslstfrm.obj
+ obj\editentryfrm.obj obj\versesel.obj obj\RangeMaintFrm.obj
+ obj\ModVisFrm.obj obj\swdisprtfchap.obj obj\swdisprtf.obj
+ obj\DevOfTheDay.obj obj\SplashPage.obj obj\FontSel.obj rxlib\Rxcombos.obj
+ rxlib\Vclutils.obj rxlib\Rxcconst.obj rxlib\Rxconst.obj
+ obj\StudyProfessor.obj rxlib\RxRichEd.obj rxlib\Maxmin.obj
+ obj\TModuleFonts.obj obj\rtfhintfrm.obj obj\RxRichEditX.obj
+ obj\PreviewForm.obj obj\PrintFrm.obj TntUnicodeControls\Unicode.obj
+ TntUnicodeControls\TntControls.obj TntUnicodeControls\TntForms.obj
+ TntUnicodeControls\TntStdCtrls.obj TntUnicodeControls\TntClasses.obj"/>
+ <RESFILES value="sword.res"/>
+ <IDLFILES value=""/>
+ <IDLGENFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES) mainfrm.dfm AboutBoxfrm.dfm bookmarkfrm.dfm newbmfilefrm.dfm
+ optionfrm.dfm searchfrm.dfm ModInstForm.dfm vrslstfrm.dfm editentryfrm.dfm
+ versesel.dfm RangeMaintFrm.dfm ModVisFrm.dfm DevOfTheDay.dfm
+ SplashPage.dfm FontSel.dfm StudyProfessor.dfm rtfhintfrm.dfm
+ PreviewForm.dfm PrintFrm.dfm"/>
+ <LIBFILES value="swordlib.lib ..\..\..\..\..\icu-sword\as_is\borland\icucommon.lib
+ ..\..\..\..\..\icu-sword\as_is\borland\icudatab.lib
+ ..\..\..\..\..\icu-sword\as_is\borland\icui18n.lib"/>
+ <LIBRARIES value="bcbie50.lib vcljpg50.lib nmfast50.lib vclbde50.lib vcldb50.lib vclx50.lib
+ vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib vclx50.lib vcldb50.lib vclbde50.lib nmfast50.lib vcljpg50.lib
+ bcbie50.lib"/>
+ <PACKAGES value="Vcl50.bpi Vclx50.bpi bcbsmp50.bpi Qrpt50.bpi Vcldb50.bpi Vclbde50.bpi
+ ibsmp50.bpi vcldbx50.bpi TeeUI50.bpi TeeDB50.bpi Tee50.bpi TeeQR50.bpi
+ VCLIB50.bpi bcbie50.bpi vclie50.bpi Inetdb50.bpi Inet50.bpi NMFast50.bpi
+ dclocx50.bpi bcb2kaxserver50.bpi"/>
+ <PATHCPP value=".;..\..;rxlib;TntUnicodeControls"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+ <RELEASELIBPATH value="$(BCB)\lib\release"/>
+ <LINKER value="ilink32"/>
+ <USERDEFINES value="_ICU_;_ICUSWORD_"/>
+ <SYSDEFINES value="NO_STRICT"/>
+ <MAINSOURCE value="sword.cpp"/>
+ <INCLUDEPATH value="TntUnicodeControls;..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib"/>
+ <LIBPATH value="TntUnicodeControls;..\..\..\..\..\TntUnicodeControls;..\..;..\..\..\..\lib;&quot;C:\Program Files\Borland\CBuilder5\RX\Units\&quot;;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;&quot;C:\program files\borland\cbuilder3\projects\&quot;;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I..\.. -I..\..\..\..\..\icu-sword\source\common
+ -I..\..\..\..\..\icu-sword\source\i18n -I..\..\..\..\include
+ -I$(BCB)\include -I$(BCB)\include\vcl -Irxlib -src_suffix cpp -D_ICU_"/>
+ <CFLAG1 value="-O2 -Vx -Ve -RT- -X- -a8 -4 -b- -k- -vi -c -tW -tWM"/>
+ <PFLAGS value="-N2obj -N0obj -$Y- -$L- -$D- -v -M -JPHNE"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value="-Iobj -D&quot;&quot; -aa -Tpe -GD -s -Gn"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="c0w32.obj $(OBJFILES)"/>
+ <ALLRES value="$(RESFILES)"/>
+ <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=1
+MajorVer=1
+MinorVer=5
+Release=3
+Build=103
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=CrossWire Software &amp; Bible Society
+FileDescription=Windows 32bit User Interface to The SWORD Project
+FileVersion=1.5.3.103
+InternalName=biblecs
+LegalCopyright=(c) 2002 CrossWire Bible Society under the terms of the GNU General Public License
+LegalTrademarks=
+OriginalFilename=
+ProductName=The SWORD Project
+ProductVersion=1.5.4betaX
+Comments=Seek Him and you will find Him
+
+[HistoryLists\hlIncludePath]
+Count=11
+Item0=TntUnicodeControls;..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item1=TntUnicodeControls;..\..\..\WINDOZE;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item2=..\..\..\..\..\TntUnicodeControls;..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item3=..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item4=..\..\..\windoze;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item5=..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\windoze;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item6=..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item7=..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\windoze;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item8=..\..\..\..\..\icu-sword\source\common\;..\..\..\..\..\icu-sword\source\i18n\;..\..;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item9=C:\icu-sword\source\common\;C:\icu-sword\source\i18n\;..\..;C:\Program Files\Borland\CBuilder5\RX\Units\;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+Item10=..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..;C:\Program Files\Borland\CBuilder5\RX\Units\;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib
+
+[HistoryLists\hlLibraryPath]
+Count=8
+Item0=TntUnicodeControls;..\..\..\..\..\TntUnicodeControls;..\..;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item1=TntUnicodeControls;..\..\..\..\..\TntUnicodeControls;..\..\..\WINDOZE;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item2=..\..\..\..\..\TntUnicodeControls;..\..;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item3=..\..;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item4=..\..\..\windoze;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item5=..\..;..\..\..\windoze;..\..\..\..\lib;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item6=..\..;..\..\..\..\lib\;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+Item7=..\..;C:\Program Files\Borland\CBuilder5\RX\Units\;$(BCB)\Projects\Lib;RX\Units;rxlib;..\InstallMgr;C:\program files\borland\cbuilder3\projects\;C:\borland\cbuilder3\lib\release\;$(BCB)\lib\release;$(BCB)\lib\obj;$(BCB)\lib
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[HistoryLists\hlConditionals]
+Count=5
+Item0=_ICU_;_ICUSWORD_
+Item1=_ICU_;_ICUSWORD_;_DEBUG
+Item2=_ICU_
+Item3=_ICU_;_DEBUG
+Item4=_DEBUG
+
+[HistoryLists\hlIntOutputDir]
+Count=2
+Item0=obj
+Item1=C:\sword\apps\windoze\CBuilder5\BibleCS\obj
+
+[HistoryLists\hlFinalOutputDir]
+Count=4
+Item0=stage\
+Item1=C:\Documents and Settings\Michelle Trotz\My Documents\My Projects\The Sword Project\Stage_Sword\
+Item2=C:\Documents and Settings\Michelle Trotz\My Documents\My Projects\The Sword Project\Stage_Sword
+Item3=C:\sword\apps\windoze\CBuilder5\BibleCS\stage
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.cpp b/apps/windoze/CBuilder5/BibleCS/sword.cpp
new file mode 100644
index 0000000..3686c59
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/sword.cpp
@@ -0,0 +1,160 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+#include "SplashPage.h"
+#include <winreg.h>
+#include <dir.h>
+#include "sword.h"
+
+USERES("sword.res");
+USEFORM("mainfrm.cpp", Form1);
+USEFORM("AboutBoxfrm.cpp", AboutBox);
+USEFORM("bookmarkfrm.cpp", bookmarkForm);
+USEFORM("newbmfilefrm.cpp", NewBMfrm);
+USEFORM("optionfrm.cpp", Optionsfrm);
+USEFORM("searchfrm.cpp", searchForm);
+USEUNIT("biblecsmgr.cpp");
+USEFORM("ModInstForm.cpp", ModInstFrm);
+USEFORM("vrslstfrm.cpp", VerseListFrm);
+USEFORM("editentryfrm.cpp", EditEntryForm);
+USEFORM("versesel.cpp", VerseSelFrm);
+USELIB("swordlib.lib");
+USEFORM("RangeMaintFrm.cpp", RangeMaintForm);
+USEFORM("ModVisFrm.cpp", ModVisForm);
+USEUNIT("..\..\swdisprtfchap.cpp");
+USEUNIT("..\..\swdisprtf.cpp");
+USEFORM("DevOfTheDay.cpp", DevOfTheDay2);
+USEFORM("SplashPage.cpp", SplashPg);
+USEFORM("FontSel.cpp", FontSelFrm);
+USEOBJ("rxlib\Rxcombos.obj");
+USEOBJ("rxlib\Vclutils.obj");
+USEOBJ("rxlib\Rxcconst.obj");
+USEOBJ("rxlib\Rxconst.obj");
+USEFORM("StudyProfessor.cpp", Form3);
+USELIB("..\..\..\..\..\icu-sword\as_is\borland\icucommon.lib");
+USELIB("..\..\..\..\..\icu-sword\as_is\borland\icudatab.lib");
+USELIB("..\..\..\..\..\icu-sword\as_is\borland\icui18n.lib");
+USEOBJ("rxlib\RxRichEd.obj");
+USEOBJ("rxlib\Maxmin.obj");
+USEUNIT("TModuleFonts.cpp");
+USEFORM("rtfhintfrm.cpp", RTFHintForm);
+USEUNIT("RxRichEditX.cpp");
+USEFORM("PreviewForm.cpp", PreviewForm);
+USEFORM("PrintFrm.cpp", PrintForm);
+USEOBJ("TntUnicodeControls\Unicode.obj");
+USEOBJ("TntUnicodeControls\TntControls.obj");
+USEOBJ("TntUnicodeControls\TntForms.obj");
+USEOBJ("TntUnicodeControls\TntStdCtrls.obj");
+USEOBJ("TntUnicodeControls\TntClasses.obj");
+//---------------------------------------------------------------------------
+WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
+
+ LONG result;
+
+ try {
+ HKEY hkey;
+ HWND otherInst;
+
+ // see if there's a previous instance running
+ otherInst = ::FindWindow(NULL, "The SWORD Project for Windows");
+ // if so, and we have an argument, send the argument to the other instance
+ if (*lpCmdLine) {
+ if (otherInst && *lpCmdLine) {
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\OpenVerse", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, lpCmdLine, strlen(lpCmdLine) + 1);
+ result = RegCloseKey(hkey);
+
+ PostMessage(otherInst, WM_VERSE, NULL, NULL);
+ return 0;
+ }
+
+ // TODO 5: if we have a cmdline argument, figure we have to change directories. BAD, FIX.
+ result = Application->ExeName.Length();
+ char * dir = new char[result + 1];
+ strcpy (dir, Application->ExeName.c_str());
+ for (;result > 0 && dir[result] != '\\'; result--) {
+ dir[result] = 0;
+ }
+ chdir(dir);
+ delete [] dir;
+ }
+
+ // adjust the registry for our private protocol using the current path
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, "URL:SWORD Protocol", strlen("URL:SWORD Protocol") + 1);
+ result = RegSetValueEx(hkey, "URL Protocol", 0, REG_SZ, "", 1);
+ result = RegCloseKey(hkey);
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\DefaultIcon", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, Application->ExeName.c_str(), Application->ExeName.Length() + 1);
+ result = RegCloseKey(hkey);
+ AnsiString opencommand = Application->ExeName + " \"%1\"";
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\shell\\open\\command", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, opencommand.c_str(), opencommand.Length() + 1);
+ result = RegCloseKey(hkey);
+
+
+ /*
+ // don't override Logos' setting if it exists
+ result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "libronixdls", 0, KEY_READ | KEY_WRITE, &hkey);
+ if (!result) {
+ char* libStr = new char[32];
+ unsigned long libSize = 32;
+ result = RegQueryValueEx(hkey, NULL, NULL, NULL, libStr, &libSize);
+ if (!result) {
+ if (strstr(libStr, "SWORD")) {
+ result = 1;
+ }
+ }
+ }
+ if (result) {
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, "URL:SWORD Protocol", strlen("URL:SWORD Protocol") + 1);
+ result = RegSetValueEx(hkey, "URL Protocol", 0, REG_SZ, "", 1);
+ result = RegCloseKey(hkey);
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls\\DefaultIcon", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, Application->ExeName.c_str(), Application->ExeName.Length() + 1);
+ result = RegCloseKey(hkey);
+ AnsiString opencommand = Application->ExeName + " \"%1\"";
+ result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls\\shell\\open\\command", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL);
+ result = RegSetValueEx(hkey, NULL, 0, REG_SZ, opencommand.c_str(), opencommand.Length() + 1);
+ result = RegCloseKey(hkey);
+ }
+ */
+ }
+ catch (Exception &exception) {
+ Application->ShowException(&exception);
+ }
+
+ try {
+ Application->Initialize();
+ Application->Title = "The SWORD Project";
+ SplashPg = new TSplashPg(static_cast<void*>(NULL));
+ SplashPg->Show();
+ Application->ProcessMessages();
+ Application->CreateForm(__classid(TForm1), &Form1);
+ Application->CreateForm(__classid(TAboutBox), &AboutBox);
+ Application->CreateForm(__classid(TbookmarkForm), &bookmarkForm);
+ Application->CreateForm(__classid(TNewBMfrm), &NewBMfrm);
+ Application->CreateForm(__classid(TOptionsfrm), &Optionsfrm);
+ Application->CreateForm(__classid(TsearchForm), &searchForm);
+ Application->CreateForm(__classid(TModInstFrm), &ModInstFrm);
+ Application->CreateForm(__classid(TVerseListFrm), &VerseListFrm);
+ Application->CreateForm(__classid(TEditEntryForm), &EditEntryForm);
+ Application->CreateForm(__classid(TVerseSelFrm), &VerseSelFrm);
+ Application->CreateForm(__classid(TRangeMaintForm), &RangeMaintForm);
+ Application->CreateForm(__classid(TModVisForm), &ModVisForm);
+ Application->CreateForm(__classid(TDevOfTheDay2), &DevOfTheDay2);
+ Application->CreateForm(__classid(TForm3), &Form3);
+ Application->CreateForm(__classid(TRTFHintForm), &RTFHintForm);
+ Application->CreateForm(__classid(TPreviewForm), &PreviewForm);
+ Application->CreateForm(__classid(TPrintForm), &PrintForm);
+ Application->Run();
+ delete SplashPg;
+ }
+ catch (Exception &exception) {
+ Application->ShowException(&exception);
+ }
+ return 0;
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.h b/apps/windoze/CBuilder5/BibleCS/sword.h
new file mode 100644
index 0000000..5bfa702
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/sword.h
@@ -0,0 +1 @@
+#define WM_VERSE (WM_APP + 1995)
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.ico b/apps/windoze/CBuilder5/BibleCS/sword.ico
new file mode 100644
index 0000000..694fbb1
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/sword.ico
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.res b/apps/windoze/CBuilder5/BibleCS/sword.res
new file mode 100644
index 0000000..8aa7e8d
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/sword.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/swordlib.bpr b/apps/windoze/CBuilder5/BibleCS/swordlib.bpr
new file mode 100644
index 0000000..52ae339
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/swordlib.bpr
@@ -0,0 +1,203 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="..\..\..\..\lib\swordlib.lib"/>
+ <OBJFILES value="..\..\..\..\obj\swordlib.obj ..\..\..\..\obj\versekey.obj
+ ..\..\..\..\obj\swkey.obj ..\..\..\..\obj\listkey.obj
+ ..\..\..\..\obj\strkey.obj ..\..\..\..\obj\swmgr.obj
+ ..\..\..\..\obj\swconfig.obj ..\..\..\..\obj\rawcom.obj
+ ..\..\..\..\obj\swcom.obj ..\..\..\..\obj\rawverse.obj
+ ..\..\..\..\obj\rawstr.obj ..\..\..\..\obj\gbfrtf.obj
+ ..\..\..\..\obj\gbfplain.obj ..\..\..\..\obj\rawld.obj
+ ..\..\..\..\obj\swld.obj ..\..\..\..\obj\rawtext.obj
+ ..\..\..\..\obj\swtext.obj ..\..\..\..\obj\swmodule.obj
+ ..\..\..\..\obj\tbdisp.obj ..\..\..\..\obj\swwinlog.obj
+ ..\..\..\..\obj\hrefcom.obj ..\..\..\..\obj\filemgr.obj
+ ..\..\..\..\obj\rawfiles.obj ..\..\..\..\obj\utilstr.obj
+ ..\..\..\..\obj\utilconf.obj ..\..\..\..\obj\Greek2Greek.obj
+ ..\..\..\..\obj\regex.obj ..\..\..\..\obj\swlog.obj
+ ..\..\..\..\obj\swdisp.obj ..\..\..\..\obj\gbfstrongs.obj
+ ..\..\..\..\obj\gbffootnotes.obj ..\..\..\..\obj\cipherfil.obj
+ ..\..\..\..\obj\sapphire.obj ..\..\..\..\obj\swcipher.obj
+ ..\..\..\..\obj\swlocale.obj ..\..\..\..\obj\localemgr.obj
+ ..\..\..\..\obj\lzsscomprs.obj ..\..\..\..\obj\zverse.obj
+ ..\..\..\..\obj\swcomprs.obj ..\..\..\..\obj\ztext.obj
+ ..\..\..\..\obj\thmlrtf.obj ..\..\..\..\obj\gbfhtml.obj
+ ..\..\..\..\obj\gbfthml.obj ..\..\..\..\obj\plainfootnotes.obj
+ ..\..\..\..\obj\plainhtml.obj ..\..\..\..\obj\rtfhtml.obj
+ ..\..\..\..\obj\thmlgbf.obj ..\..\..\..\obj\thmlhtml.obj
+ ..\..\..\..\obj\thmlplain.obj ..\..\..\..\obj\zcom.obj
+ ..\..\..\..\obj\gbfheadings.obj ..\..\..\..\obj\rawstr4.obj
+ ..\..\..\..\obj\rawld4.obj ..\..\..\..\obj\zipcomprs.obj
+ ..\..\..\..\obj\uncompr.obj ..\..\..\..\obj\compress.obj
+ ..\..\..\..\obj\inflate.obj ..\..\..\..\obj\deflate.obj
+ ..\..\..\..\obj\zutil.obj ..\..\..\..\obj\trees.obj
+ ..\..\..\..\obj\maketree.obj ..\..\..\..\obj\infutil.obj
+ ..\..\..\..\obj\inftrees.obj ..\..\..\..\obj\inffast.obj
+ ..\..\..\..\obj\infcodes.obj ..\..\..\..\obj\infblock.obj
+ ..\..\..\..\obj\crc32.obj ..\..\..\..\obj\adler32.obj
+ ..\..\..\..\obj\gzio.obj ..\..\..\..\obj\untgz.obj
+ ..\..\..\..\obj\unicodertf.obj ..\..\..\..\obj\gbfmorph.obj
+ ..\..\..\..\obj\thmlolb.obj ..\..\..\..\obj\roman.obj
+ ..\..\..\..\obj\gbfhtmlhref.obj ..\..\..\..\obj\latin1utf8.obj
+ ..\..\..\..\obj\latin1utf16.obj ..\..\..\..\obj\scsuutf8.obj
+ ..\..\..\..\obj\swbasicfilter.obj ..\..\..\..\obj\thmlhtmlhref.obj
+ ..\..\..\..\obj\utf8cantillation.obj ..\..\..\..\obj\utf8greekaccents.obj
+ ..\..\..\..\obj\utf8hebrewpoints.obj
+ ..\..\..\..\obj\utf8transliterator.obj ..\..\..\..\obj\utf8utf16.obj
+ ..\..\..\..\obj\utf16utf8.obj ..\..\..\..\obj\utf8latin1.obj
+ ..\..\..\..\obj\utf8html.obj ..\..\..\..\obj\thmlscripref.obj
+ ..\..\..\..\obj\thmlheadings.obj ..\..\..\..\obj\thmllemma.obj
+ ..\..\..\..\obj\thmlmorph.obj ..\..\..\..\obj\thmlfootnotes.obj
+ ..\..\..\..\obj\thmlstrongs.obj ..\..\..\..\obj\utf8nfkd.obj
+ ..\..\..\..\obj\utf8nfc.obj ..\..\..\..\obj\utf8bidireorder.obj
+ ..\..\..\..\obj\utf8arshaping.obj ..\..\..\..\obj\markupfiltmgr.obj
+ ..\..\..\..\obj\encfiltmgr.obj ..\..\..\..\obj\swfiltermgr.obj
+ ..\..\..\..\obj\swversion.obj ..\..\..\..\obj\zld.obj
+ ..\..\..\..\obj\zstr.obj ..\..\..\..\obj\entriesblk.obj
+ ..\..\..\..\obj\swgenbook.obj ..\..\..\..\obj\rawgenbook.obj
+ ..\..\..\..\obj\treekey.obj ..\..\..\..\obj\treekeyidx.obj
+ ..\..\..\..\obj\thmlvariants.obj ..\..\..\..\obj\swcacher.obj
+ ..\..\..\..\obj\greeklexattribs.obj ..\..\..\..\obj\gbfosis.obj
+ ..\..\..\..\obj\thmlosis.obj"/>
+ <RESFILES value=""/>
+ <IDLFILES value=""/>
+ <IDLGENFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES)"/>
+ <LIBFILES value=""/>
+ <LIBRARIES value="nmfast50.lib vclx50.lib vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib vclx50.lib nmfast50.lib"/>
+ <PACKAGES value=""/>
+ <PATHCPP value=".;..\..\..\..\src\keys;..\..\..\..\src\mgr;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\common;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts;..\..\..\..\src\modules;..\..;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\utilfuns;..\..\..\..\src\frontend;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\genbook\rawgenbook"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value=""/>
+ <RELEASELIBPATH value=""/>
+ <LINKER value="TLib"/>
+ <USERDEFINES value="_ICU_;_ICUSWORD_"/>
+ <SYSDEFINES value="NO_STRICT;_NO_VCL"/>
+ <MAINSOURCE value="swordlib.cpp"/>
+ <INCLUDEPATH value="..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl"/>
+ <LIBPATH value="..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ <LISTFILE value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I..\.. -I..\..\..\..\src\modules\genbook\rawgenbook
+ -I..\..\..\..\src\modules\genbook -I..\..\..\..\src\modules\lexdict\zld
+ -I..\..\..\..\..\icu-sword\source\common
+ -I..\..\..\..\..\icu-sword\source\i18n -I..\..\..\..\src\utilfuns\zlib
+ -I..\..\..\..\src\modules\lexdict\rawld4
+ -I..\..\..\..\src\modules\comments\zcom
+ -I..\..\..\..\src\modules\texts\ztext -I..\..\..\..\src\frontend
+ -I..\..\.. -I..\..\..\..\utilfuns -I..\..\..\framework
+ -I..\..\..\..\src\modules\comments\rawfiles
+ -I..\..\..\..\src\modules\comments\hrefcom -I..\..\..\..\include
+ -I..\..\..\..\frontend -I..\..\..\..\src\utilfuns
+ -I..\..\..\..\src\modules -I..\..\..\..\src\modules\texts
+ -I..\..\..\..\src\modules\texts\rawtext
+ -I..\..\..\..\src\modules\texts\rawgbf -I..\..\..\..\src\modules\lexdict
+ -I..\..\..\..\src\modules\lexdict\rawld -I..\..\..\..\src\modules\filters
+ -I..\..\..\..\src\modules\common -I..\..\..\..\src\modules\comments
+ -I..\..\..\..\src\modules\comments\rawcom -I..\..\..\..\src\mgr
+ -I..\..\..\..\src\keys -I$(BCB)\include -I$(BCB)\include\vcl -src_suffix
+ cpp -D_ICU_ -D_DEBUG"/>
+ <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -RT- -X- -a8
+ -4 -b- -k- -vi -c -g0 -tWM"/>
+ <PFLAGS value="-N2..\..\..\..\obj -N0..\..\..\..\obj -$Y- -$L- -$D- -v -M -JPHNE"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value="/P512"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="$(OBJFILES)"/>
+ <ALLRES value=""/>
+ <ALLLIB value="cg32.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[HistoryLists\hlIncludePath]
+Count=10
+Item0=..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item1=..\..;..\..\..\WINDOZE;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\APPS;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item2=..\..\..\windoze;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item3=..\..;..\..\..\windoze;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item4=..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\windoze;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item5=..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item6=..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n\;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item7=..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;C:\icu-sword\source\common\;C:\icu-sword\source\i18n\;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item8=..\..\..\..\src\modules\lexdict\zld;C:\icu-sword\source\common\;C:\icu-sword\source\i18n\;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item9=..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common\;..\..\..\..\..\icu-sword\source\i18n\;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+
+[HistoryLists\hlLibraryPath]
+Count=6
+Item0=..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+Item1=..\..;..\..\..\WINDOZE;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+Item2=..\..\..\windoze;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+Item3=..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\windoze;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+Item4=..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+Item5=..\..\..\..\src\modules\lexdict\zld;..\..;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys
+
+[HistoryLists\hlConditionals]
+Count=5
+Item0=_ICU_;_ICUSWORD_
+Item1=_ICU_;_ICUSWORD_;_DEBUG
+Item2=_ICU_
+Item3=_ICU_;_DEBUG
+Item4=_DEBUG
+
+[HistoryLists\hlIntOutputDir]
+Count=2
+Item0=..\..\..\..\obj
+Item1=C:\sword\obj
+
+[HistoryLists\hlFinalOutputDir]
+Count=2
+Item0=..\..\..\..\lib\
+Item1=C:\sword\lib
+
+[HistoryLists\hlTlibPageSize]
+Count=2
+Item0=0x0200
+Item1=0x0100
+
+[Debugging]
+DebugSourceDirs=
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/BibleCS/swordlib.cpp b/apps/windoze/CBuilder5/BibleCS/swordlib.cpp
new file mode 100644
index 0000000..80f7b7e
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/swordlib.cpp
@@ -0,0 +1,121 @@
+//---------------------------------------------------------------------------
+#include <condefs.h>
+#pragma hdrstop
+USEUNIT("..\..\..\..\src\keys\versekey.cpp");
+USEUNIT("..\..\..\..\src\keys\swkey.cpp");
+USEUNIT("..\..\..\..\src\keys\listkey.cpp");
+USEUNIT("..\..\..\..\src\keys\strkey.cpp");
+USEUNIT("..\..\..\..\src\mgr\swmgr.cpp");
+USEUNIT("..\..\..\..\src\mgr\swconfig.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\rawcom\rawcom.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\swcom.cpp");
+USEUNIT("..\..\..\..\src\modules\common\rawverse.cpp");
+USEUNIT("..\..\..\..\src\modules\common\rawstr.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfrtf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfplain.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\rawld\rawld.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\swld.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\rawtext\rawtext.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\swtext.cpp");
+USEUNIT("..\..\..\..\src\modules\swmodule.cpp");
+USEUNIT("..\..\tbdisp.cpp");
+USEUNIT("..\..\swwinlog.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\hrefcom\hrefcom.cpp");
+USEUNIT("..\..\..\..\src\mgr\filemgr.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\rawfiles\rawfiles.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\utilstr.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\utilconf.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\Greek2Greek.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\regex.c");
+USEUNIT("..\..\..\..\src\frontend\swlog.cpp");
+USEUNIT("..\..\..\..\src\frontend\swdisp.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfstrongs.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbffootnotes.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\cipherfil.cpp");
+USEUNIT("..\..\..\..\src\modules\common\sapphire.cpp");
+USEUNIT("..\..\..\..\src\modules\common\swcipher.cpp");
+USEUNIT("..\..\..\..\src\mgr\swlocale.cpp");
+USEUNIT("..\..\..\..\src\mgr\localemgr.cpp");
+USEUNIT("..\..\..\..\src\modules\common\lzsscomprs.cpp");
+USEUNIT("..\..\..\..\src\modules\common\zverse.cpp");
+USEUNIT("..\..\..\..\src\modules\common\swcomprs.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\ztext\ztext.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlrtf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfthml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\plainfootnotes.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\plainhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\rtfhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlgbf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlplain.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\zcom\zcom.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfheadings.cpp");
+USEUNIT("..\..\..\..\src\modules\common\rawstr4.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\rawld4\rawld4.cpp");
+USEUNIT("..\..\..\..\src\modules\common\zipcomprs.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\uncompr.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\compress.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inflate.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\deflate.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\zutil.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\trees.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\maketree.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infutil.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inftrees.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inffast.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infcodes.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infblock.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\crc32.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\adler32.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\gzio.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\untgz.c");
+USEUNIT("..\..\..\..\src\modules\filters\unicodertf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfmorph.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlolb.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\roman.c");
+USEUNIT("..\..\..\..\src\modules\filters\gbfhtmlhref.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\latin1utf8.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\latin1utf16.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\scsuutf8.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\swbasicfilter.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlhtmlhref.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8cantillation.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8greekaccents.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8hebrewpoints.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8transliterator.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8utf16.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf16utf8.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8latin1.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8html.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlscripref.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlheadings.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmllemma.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlmorph.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlfootnotes.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlstrongs.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8nfkd.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8nfc.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8bidireorder.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\utf8arshaping.cpp");
+USEUNIT("..\..\..\..\src\mgr\markupfiltmgr.cpp");
+USEUNIT("..\..\..\..\src\mgr\encfiltmgr.cpp");
+USEUNIT("..\..\..\..\src\mgr\swfiltermgr.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\swversion.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\zld\zld.cpp");
+USEUNIT("..\..\..\..\src\modules\common\zstr.cpp");
+USEUNIT("..\..\..\..\src\modules\common\entriesblk.cpp");
+USEUNIT("..\..\..\..\src\modules\genbook\swgenbook.cpp");
+USEUNIT("..\..\..\..\src\modules\genbook\rawgenbook\rawgenbook.cpp");
+USEUNIT("..\..\..\..\src\keys\treekey.cpp");
+USEUNIT("..\..\..\..\src\keys\treekeyidx.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlvariants.cpp");
+USEUNIT("..\..\..\..\src\mgr\swcacher.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\greeklexattribs.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfosis.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlosis.cpp");
+//---------------------------------------------------------------------------
+#define Library
+
+// To add a file to the library use the Project menu 'Add to Project'.
+
diff --git a/apps/windoze/CBuilder5/BibleCS/swordprj.bpg b/apps/windoze/CBuilder5/BibleCS/swordprj.bpg
new file mode 100644
index 0000000..c5e4dab
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/swordprj.bpg
@@ -0,0 +1,32 @@
+#------------------------------------------------------------------------------
+VERSION = BWS.01
+#------------------------------------------------------------------------------
+!ifndef ROOT
+ROOT = $(MAKEDIR)\..
+!endif
+#------------------------------------------------------------------------------
+MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
+DCC = $(ROOT)\bin\dcc32.exe $**
+BRCC = $(ROOT)\bin\brcc32.exe $**
+#------------------------------------------------------------------------------
+PROJECTS = icucommon.lib icui18n.lib swordlib.lib sword.exe
+#------------------------------------------------------------------------------
+default: sword
+#------------------------------------------------------------------------------
+
+
+swordlib.lib: swordlib.bpr
+ $(MAKE)
+
+sword.exe: sword.bpr
+ $(MAKE)
+
+icui18n.lib: ..\..\..\..\..\icu-sword\as_is\borland\i18n.bpr
+ $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
+ $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
+
+icucommon.lib: ..\..\..\..\..\icu-sword\as_is\borland\common.bpr
+ $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
+ $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
+
+
diff --git a/apps/windoze/CBuilder5/BibleCS/versesel.cpp b/apps/windoze/CBuilder5/BibleCS/versesel.cpp
new file mode 100644
index 0000000..8788580
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/versesel.cpp
@@ -0,0 +1,22 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "versesel.h"
+#include <versekey.h>
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TVerseSelFrm *VerseSelFrm;
+//---------------------------------------------------------------------------
+__fastcall TVerseSelFrm::TVerseSelFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TVerseSelFrm::Edit1Change(TObject *Sender)
+{
+ VerseKey trykey = Edit1->Text.c_str();
+ Panel2->Caption = (const char *)trykey;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/BibleCS/versesel.dfm b/apps/windoze/CBuilder5/BibleCS/versesel.dfm
new file mode 100644
index 0000000..4a2bd65
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/versesel.dfm
@@ -0,0 +1,64 @@
+object VerseSelFrm: TVerseSelFrm
+ Left = 520
+ Top = 99
+ Width = 277
+ Height = 128
+ Caption = 'Type Verse'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Edit1: TEdit
+ Left = 0
+ Top = 0
+ Width = 284
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ OnChange = Edit1Change
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 37
+ Width = 269
+ Height = 28
+ Align = alBottom
+ TabOrder = 1
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 65
+ Width = 269
+ Height = 36
+ Align = alBottom
+ TabOrder = 2
+ object OkBtn: TButton
+ Left = 110
+ Top = 6
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ end
+ object CancelBtn: TButton
+ Left = 190
+ Top = 6
+ Width = 75
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/versesel.h b/apps/windoze/CBuilder5/BibleCS/versesel.h
new file mode 100644
index 0000000..b4198f4
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/versesel.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef verseselH
+#define verseselH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TVerseSelFrm : public TForm
+{
+__published: // IDE-managed Components
+ TEdit *Edit1;
+ TPanel *Panel2;
+ TPanel *Panel1;
+ TButton *OkBtn;
+ TButton *CancelBtn;
+ void __fastcall Edit1Change(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ __fastcall TVerseSelFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TVerseSelFrm *VerseSelFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/vrslstfrm.cpp b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.cpp
new file mode 100644
index 0000000..ac0f3b9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.cpp
@@ -0,0 +1,49 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "vrslstfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TVerseListFrm *VerseListFrm;
+//---------------------------------------------------------------------------
+__fastcall TVerseListFrm::TVerseListFrm(TComponent* Owner, ListKey &iVerseList)
+ : TForm(Owner), verseList(iVerseList) {
+ pvrtf = new SWDispRTF(this);
+
+ pvrtf->Parent = plPreview;
+ pvrtf->Align = alClient;
+ pvrtf->ScrollBars = ssVertical;
+ pvrtf->ReadOnly = true;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TVerseListFrm::ListBox1Click(TObject *Sender) {
+ ModMap::iterator target;
+ target = Form1->mainmgr->Modules.find(Form1->TextPageControl->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ SWKey *savekey = *(*target).second;
+ (*target).second->SetKey(ListBox1->Items->Strings[ListBox1->ItemIndex].c_str());
+ pvrtf->Display(*(*target).second);
+ (*target).second->SetKey(*savekey);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TVerseListFrm::ListBox1DblClick(TObject *Sender)
+{
+ *(Form1->DefaultVSKey) = ListBox1->Items->Strings[ListBox1->ItemIndex].c_str();
+ Form1->TextKeyChanged();
+}
+//---------------------------------------------------------------------------
+void __fastcall TVerseListFrm::FormShow(TObject *Sender)
+{
+ for (verseList = TOP; (!verseList.Error()); verseList++)
+ ListBox1->Items->Add((const char *)verseList);
+}
+//---------------------------------------------------------------------------
+
+
+
+
diff --git a/apps/windoze/CBuilder5/BibleCS/vrslstfrm.dfm b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.dfm
new file mode 100644
index 0000000..ed8fd45
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.dfm
@@ -0,0 +1,40 @@
+object VerseListFrm: TVerseListFrm
+ Left = 457
+ Top = 100
+ Width = 256
+ Height = 315
+ Caption = 'Verse List'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ OldCreateOrder = True
+ Position = poScreenCenter
+ Scaled = False
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object plPreview: TPanel
+ Left = 0
+ Top = 143
+ Width = 248
+ Height = 145
+ Align = alBottom
+ Caption = 'plPreview'
+ TabOrder = 0
+ end
+ object ListBox1: TListBox
+ Left = 0
+ Top = 0
+ Width = 248
+ Height = 143
+ Align = alClient
+ ItemHeight = 13
+ TabOrder = 1
+ OnClick = ListBox1Click
+ OnDblClick = ListBox1DblClick
+ end
+end
diff --git a/apps/windoze/CBuilder5/BibleCS/vrslstfrm.h b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.h
new file mode 100644
index 0000000..7af64b9
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/vrslstfrm.h
@@ -0,0 +1,29 @@
+//---------------------------------------------------------------------------
+#ifndef vrslstfrmH
+#define vrslstfrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include "mainfrm.h"
+//---------------------------------------------------------------------------
+class TVerseListFrm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *plPreview;
+ TListBox *ListBox1;
+ void __fastcall ListBox1Click(TObject *Sender);
+ void __fastcall ListBox1DblClick(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+private: // User declarations
+ SWDispRTF *pvrtf;
+ ListKey &verseList;
+public: // User declarations
+ __fastcall TVerseListFrm(TComponent* Owner, ListKey &iVerseList);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TVerseListFrm *VerseListFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/BibleCS/wtbsa.conf b/apps/windoze/CBuilder5/BibleCS/wtbsa.conf
new file mode 100644
index 0000000..ff69dc7
--- /dev/null
+++ b/apps/windoze/CBuilder5/BibleCS/wtbsa.conf
@@ -0,0 +1,20 @@
+[ROOT]
+WTBSA=What the Bible Says About...
+
+[WTBSA]
+Mormons=Mormonism
+Calvan=Calvanism
+
+[Mormons]
+Verse=I Peter 2:8
+
+[Calvan]
+Verse=James 1:19
+TotalDep=Total Depravity of Man
+UncondEl=Unconditional Election
+LimAt=Limited Atonement
+IrrGrace=Irresistable Grace
+PersSt=Perseverence of the Saints
+
+[TotalDep]
+Verse=Romans 1:1
diff --git a/apps/windoze/CBuilder5/InstallMgr/FTPDownload.cpp b/apps/windoze/CBuilder5/InstallMgr/FTPDownload.cpp
new file mode 100644
index 0000000..eb74177
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/FTPDownload.cpp
@@ -0,0 +1,29 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "FTPDownload.h"
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+// Important: Methods and properties of objects in VCL can only be
+// used in a method called using Synchronize, for example:
+//
+// Synchronize(UpdateCaption);
+//
+// where UpdateCaption could look like:
+//
+// void __fastcall FTPDownload::UpdateCaption()
+// {
+// Form1->Caption = "Updated in a thread";
+// }
+//---------------------------------------------------------------------------
+__fastcall FTPDownload::FTPDownload(bool CreateSuspended)
+ : TThread(CreateSuspended)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall FTPDownload::Execute()
+{
+ //---- Place thread code here ----
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/InstallMgr/FTPDownload.h b/apps/windoze/CBuilder5/InstallMgr/FTPDownload.h
new file mode 100644
index 0000000..4ad9e01
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/FTPDownload.h
@@ -0,0 +1,16 @@
+//---------------------------------------------------------------------------
+#ifndef FTPDownloadH
+#define FTPDownloadH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+//---------------------------------------------------------------------------
+class FTPDownload : public TThread
+{
+private:
+protected:
+ void __fastcall Execute();
+public:
+ __fastcall FTPDownload(bool CreateSuspended);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/InfoFrm.cpp b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.cpp
new file mode 100644
index 0000000..a75b7b2
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.cpp
@@ -0,0 +1,33 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "InfoFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TInfoForm *InfoForm;
+//---------------------------------------------------------------------------
+__fastcall TInfoForm::TInfoForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TInfoForm::FormShow(TObject *Sender)
+{
+ AnsiString abouttext = "";
+ TMemoryStream *RTFStream = new TMemoryStream();
+
+ abouttext = abouttext + "{\\fs20\\cf0 " + info.c_str() + " }";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(abouttext.c_str(), abouttext.Length());
+ RTFStream->Position = 0;
+ InfoText->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+}
+//---------------------------------------------------------------------------
+void __fastcall TInfoForm::SpeedButton1Click(TObject *Sender)
+{
+ ModalResult = mrOk;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/InstallMgr/InfoFrm.dfm b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.dfm
new file mode 100644
index 0000000..ca189d0
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/InfoFrm.h b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.h
new file mode 100644
index 0000000..9bbeef6
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InfoFrm.h
@@ -0,0 +1,32 @@
+//---------------------------------------------------------------------------
+#ifndef InfoFrmH
+#define InfoFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+#include <string>
+
+//---------------------------------------------------------------------------
+class TInfoForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TRichEdit *InfoText;
+ TSpeedButton *SpeedButton1;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall SpeedButton1Click(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ std::string info;
+ __fastcall TInfoForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TInfoForm *InfoForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpg b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpg
new file mode 100644
index 0000000..792eb7c
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpg
@@ -0,0 +1,31 @@
+#------------------------------------------------------------------------------
+VERSION = BWS.01
+#------------------------------------------------------------------------------
+!ifndef ROOT
+ROOT = $(MAKEDIR)\..
+!endif
+#------------------------------------------------------------------------------
+MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
+DCC = $(ROOT)\bin\dcc32.exe $**
+BRCC = $(ROOT)\bin\brcc32.exe $**
+#------------------------------------------------------------------------------
+PROJECTS = swordlib.lib zlib.lib libcurl.lib InstallMgr.exe
+#------------------------------------------------------------------------------
+default: $(PROJECTS)
+#------------------------------------------------------------------------------
+
+InstallMgr.exe: InstallMgr.bpr
+ $(MAKE)
+
+swordlib.lib: ..\BibleCS\swordlib.bpr
+ $(MAKE)
+
+zlib.lib: zlib.bpr
+ $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
+ $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
+
+libcurl.lib: libcurl.bpr
+ $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
+ $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
+
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpr b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpr
new file mode 100644
index 0000000..1b2a792
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.bpr
@@ -0,0 +1,136 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="InstallMgr.exe"/>
+ <OBJFILES value="InstallMgr.obj MainFrm.obj StatusFrm.obj RemoteMntFrm.obj InfoFrm.obj
+ cipherfrm.obj UninstallFrm.obj"/>
+ <RESFILES value="InstallMgr.res"/>
+ <IDLFILES value=""/>
+ <IDLGENFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES) MainFrm.dfm StatusFrm.dfm RemoteMntFrm.dfm InfoFrm.dfm
+ cipherfrm.dfm UninstallFrm.dfm"/>
+ <LIBFILES value="zlib.lib ..\..\..\..\lib\swordlib.lib libcurl.lib curl\lib\ws2_32.lib"/>
+ <LIBRARIES value="vclx50.lib vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib vclx50.lib"/>
+ <PACKAGES value="vcl50.bpi vclx50.bpi vcljpg50.bpi bcbsmp50.bpi qrpt50.bpi vcldb50.bpi
+ vclbde50.bpi ibsmp50.bpi vcldbx50.bpi teeui50.bpi teedb50.bpi tee50.bpi
+ nmfast50.bpi dclocx50.bpi"/>
+ <PATHCPP value=".;"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+ <RELEASELIBPATH value="$(BCB)\lib\release"/>
+ <LINKER value="ilink32"/>
+ <USERDEFINES value="VCL"/>
+ <SYSDEFINES value="NO_STRICT"/>
+ <MAINSOURCE value="InstallMgr.cpp"/>
+ <INCLUDEPATH value="curl\include;..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include"/>
+ <LIBPATH value="..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I..\BibleCS -I..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr
+ -I$(BCB)\include -I$(BCB)\include\vcl -I..\..\..\..\include -src_suffix
+ cpp -DVCL -boa"/>
+ <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -RT- -X- -a8
+ -b- -k- -vi -c -tW -tWM"/>
+ <PFLAGS value="-$Y- -$L- -$D- -v -JPHNE -M"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value="-D&quot;&quot; -aa -Tpe -x -Gn"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="c0w32.obj sysinit.obj $(OBJFILES)"/>
+ <ALLRES value="$(RESFILES)"/>
+ <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=5
+Release=3
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=CrossWire Bible Society
+FileDescription=SWORD Installation Manager
+FileVersion=1.5.3.0
+InternalName=InstallMgr
+LegalCopyright=Copyright 2002 by CrossWire Bible Society
+LegalTrademarks=
+OriginalFilename=
+ProductName=The SWORD Project
+ProductVersion=1.5.3
+Comments=Seek Jesus who exchanges temporary for eternal
+
+[HistoryLists\hlIncludePath]
+Count=6
+Item0=curl\include;..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item1=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item2=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item3=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item4=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item5=..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+
+[HistoryLists\hlLibraryPath]
+Count=5
+Item0=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib
+Item1=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib
+Item2=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib
+Item3=..\BibleCS;..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib
+Item4=..\..\..\..\usr\src\sword\apps\windoze\CBuilder4\InstallMgr;$(BCB)\lib\obj;$(BCB)\lib
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[HistoryLists\hlConditionals]
+Count=8
+Item0=VCL
+Item1=VCL;__STDC__ true
+Item2=VCL;__STDC__
+Item3=VCL;_MSC_VER
+Item4=VCL __STDC__
+Item5=VCL;_DEBUG
+Item6=_DEBUG;VCL
+Item7=_DEBUG
+
+[HistoryLists\hlRunParameters]
+Count=1
+Item0=-uninstall
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/InstallMgr/InstallMgr.cpp b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.cpp
new file mode 100644
index 0000000..a269603
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.cpp
@@ -0,0 +1,36 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+USERES("InstallMgr.res");
+USEFORM("MainFrm.cpp", MainForm);
+USEFORM("StatusFrm.cpp", StatusForm);
+USEFORM("RemoteMntFrm.cpp", RemoteMntForm);
+USEFORM("InfoFrm.cpp", InfoForm);
+USEFORM("cipherfrm.cpp", CipherForm);
+USEFORM("UninstallFrm.cpp", UninstallForm);
+USELIB("zlib.lib");
+USELIB("..\..\..\..\lib\swordlib.lib");
+USELIB("libcurl.lib");
+USELIB("curl\lib\ws2_32.lib");
+//---------------------------------------------------------------------------
+WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
+{
+ try
+ {
+ Application->Initialize();
+ Application->Title = "Install Manager";
+ Application->CreateForm(__classid(TMainForm), &MainForm);
+ Application->CreateForm(__classid(TStatusForm), &StatusForm);
+ Application->CreateForm(__classid(TRemoteMntForm), &RemoteMntForm);
+ Application->CreateForm(__classid(TInfoForm), &InfoForm);
+ Application->CreateForm(__classid(TCipherForm), &CipherForm);
+ Application->CreateForm(__classid(TUninstallForm), &UninstallForm);
+ Application->Run();
+ }
+ catch (Exception &exception)
+ {
+ Application->ShowException(&exception);
+ }
+ return 0;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/InstallMgr/InstallMgr.res b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.res
new file mode 100644
index 0000000..67f5484
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/InstallMgr.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/MainFrm.cpp b/apps/windoze/CBuilder5/InstallMgr/MainFrm.cpp
new file mode 100644
index 0000000..42e0500
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/MainFrm.cpp
@@ -0,0 +1,1110 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+extern "C" {
+#include <untgz.h>
+}
+
+#include "MainFrm.h"
+#include "StatusFrm.h"
+#include "RemoteMntFrm.h"
+#include "InfoFrm.h"
+#include "cipherfrm.h"
+#include "UninstallFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+
+#include <swwinlog.h>
+#include <shellapi.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <io.h>
+#include <sys/stat.h>
+#include <dir.h>
+#include <FileCtrl.hpp>
+
+TMainForm *MainForm;
+
+
+VersionInfo::VersionInfo(const char *version) {
+ char *buf = new char[ strlen(version) + 1 ];
+ char *tok;
+ major = minor = minor2 = minor3 = 0;
+
+ strcpy(buf, version);
+ tok = strtok(buf, ".");
+ if (tok)
+ major = atoi(tok);
+ tok = strtok(0, ".");
+ if (tok)
+ minor = atoi(tok);
+ tok = strtok(0, ".");
+ if (tok)
+ minor2 = atoi(tok);
+ tok = strtok(0, ".");
+ if (tok)
+ minor3 = atoi(tok);
+ delete [] buf;
+}
+
+
+int VersionInfo::compare(const VersionInfo &vi) const {
+ if (major == vi.major)
+ if (minor == vi.minor)
+ if (minor2 == vi.minor2)
+ if (minor3 == vi.minor3)
+ return 0;
+ else return minor3 - vi.minor3;
+ else return minor2 - vi.minor2;
+ else return minor - vi.minor;
+ else return major - vi.major;
+}
+
+
+__fastcall InstallSourceTab::InstallSourceTab(TComponent *Owner, const char *confEnt, const char *type) : TControl(Owner) {
+ char *buf = new char [ strlen(confEnt) + 1 ];
+
+ strcpy(buf, confEnt);
+
+ Caption = strtok(buf, "|");
+ Source = strtok(0, "|");
+ Directory = strtok(0, "|");
+ delete [] buf;
+ Type = type;
+ mgr = 0;
+}
+
+__fastcall InstallSourceTab::~InstallSourceTab() {
+ if (mgr)
+ delete mgr;
+}
+
+__fastcall TMainForm::TMainForm(TComponent* Owner)
+ : TForm(Owner)
+{
+ try {
+ manager = new SWMgr();
+ }
+ catch (...) {
+ createPathAndFile("./mods.d/globals.conf");
+ manager = new SWMgr();
+ }
+ installConf = new SWConfig("./InstallMgr.conf");
+ localMgr = 0;
+}
+
+
+__fastcall TMainForm::~TMainForm()
+{
+ delete manager;
+ delete installConf;
+ if (localMgr)
+ delete localMgr;
+}
+
+
+void __fastcall TMainForm::FormCreate(TObject *Sender) {
+
+ refreshPageControl();
+
+ if (SWLog::systemlog)
+ delete SWLog::systemlog;
+ SWLog::systemlog = new SWWinLog(this->Handle); // set the system logger to our MSWindows specific SWLog class
+
+ fillInstallTree();
+ fillSourceTree(getLocalDir(), localTree);
+}
+
+
+void TMainForm::refreshPageControl() {
+ SectionMap::iterator sources;
+ ConfigEntMap::iterator sourceBegin;
+ ConfigEntMap::iterator sourceEnd;
+
+ while (PageControl1->PageCount > 1) {
+ delete PageControl1->Pages[1];
+ }
+
+ sources = installConf->Sections.find("Sources");
+ passive = (!stricmp((*installConf)["General"]["PassiveFTP"].c_str(), "true"));
+
+ if (sources != installConf->Sections.end()) {
+ sourceBegin = sources->second.lower_bound("FTPSource");
+ sourceEnd = sources->second.upper_bound("FTPSource");
+
+ if (sourceBegin != sourceEnd) {
+ while (sourceBegin != sourceEnd) {
+ InstallSourceTab *ist = new InstallSourceTab(this, sourceBegin->second.c_str(), "FTP");
+ addSource(ist);
+ sourceBegin++;
+ }
+ }
+ }
+}
+
+
+void TMainForm::addSource(InstallSourceTab *ist)
+{
+ TTabSheet *newtab = new TTabSheet(this);
+ TTreeView *newtree = new TTreeView(this);
+ TSpeedButton *newbutton = new TSpeedButton(this);
+ TPanel *newpanel = new TPanel(this);
+ char buf[512];
+ SectionMap::iterator sit;
+
+ newtab->Caption = ist->Caption.c_str();
+ newtab->Hint = ist->Source.c_str();
+ newtab->ShowHint = true;
+ newtab->PageControl = PageControl1;
+ ist->Parent = newtab;
+ ist->tree = newtree;
+ newpanel->Parent = newtab;
+ newpanel->Align = alTop;
+ newpanel->BevelOuter = bvNone;
+ newpanel->BevelInner = bvNone;
+ newpanel->Height = 25;
+ newbutton->Parent = newpanel;
+ newbutton->Caption = "Refresh from Remote Source";
+ newbutton->Width = 210;
+ newbutton->OnClick = RefreshRemoteSource;
+ newbutton->Flat = true;
+ newbutton->Glyph = SpeedButton2->Glyph;
+ newtree->Parent = newtab;
+ newtree->Align = alClient;
+ newtree->ReadOnly = true;
+ newtree->OnDblClick = localTreeDblClick;
+ newtree->Images = ImageList1;
+ newtree->StateImages = ImageList2;
+ string parent = "./sources/" + ist->Source + "/file";
+ createParent(parent.c_str());
+ parent = "./sources/" + ist->Source;
+ fillSourceTree(parent.c_str(), newtree);
+}
+
+
+const char *TMainForm::getLocalDir()
+{
+ ConfigEntMap::iterator entry;
+
+ entry = installConf->Sections["Sources"].find("LocalPath");
+ if (entry == installConf->Sections["Sources"].end()) {
+ installConf->Sections["Sources"].insert(ConfigEntMap::value_type("LocalPath", "d:/sword"));
+ entry = installConf->Sections["Sources"].find("LocalPath");
+ }
+ return entry->second.c_str();
+
+}
+
+
+void TMainForm::setLocalDir(const char *idir)
+{
+ installConf->Sections["Sources"].erase("LocalPath"); installConf->Sections["Sources"].insert(ConfigEntMap::value_type("LocalPath", idir));
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TMainForm::LocalPath1Click(TObject *Sender)
+{
+ AnsiString Dir = "C:";
+ WideString Root = getLocalDir();
+ SelectDirectory("Select Local Path", Root , Dir);
+
+/*
+ localPathDlg->Title = "Select a file in the directory to choose";
+ localPathDlg->InitialDir = getLocalDir();
+ if (localPathDlg->Execute()) {
+ char *buf = new char [ strlen(localPathDlg->FileName.c_str()) + 1 ];
+
+ strcpy(buf, localPathDlg->FileName.c_str());
+ int end = strlen(buf) - 1;
+ while (end) {
+ if ((buf[end] == '/') || (buf[end] == '\\'))
+ break;
+ end--;
+ }
+ buf[end+1] = 0;
+ setLocalDir(buf);
+ delete [] buf;
+ }
+*/
+
+ setLocalDir(Dir.c_str());
+
+ installConf->Save();
+ fillSourceTree(getLocalDir(), localTree);
+}
+//---------------------------------------------------------------------------
+
+void TMainForm::fillInstallTree()
+{
+ ModMap::iterator mods;
+ TTreeNode *node;
+ string nodeName;
+
+ installTree->Items->Clear();
+
+ if (!manager->configPath)
+ return;
+
+ for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
+ for (node = installTree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
+ if (!strcmp(node->Text.c_str(), mods->second->Type())) {
+ break;
+ }
+ }
+ if (!node) { // Add Section
+ if (!strncmp(mods->second->Type(), "Bibl", 4)) // If Bibles, put first in list
+ node = installTree->Items->AddChildFirst(0, mods->second->Type());
+ else node = installTree->Items->AddChild(0, mods->second->Type());
+ }
+ nodeName = "[";
+ nodeName += mods->second->Name();
+ nodeName += "] ";
+ nodeName += mods->second->Description();
+ node = installTree->Items->AddChildObject(node, nodeName.c_str(), mods->second->Name());
+ }
+ for (node = installTree->Items->GetFirstNode(); node; node = node->getNextSibling())
+ node->Expand(true);
+ node = installTree->Items->GetFirstNode();
+ if (node)
+ node->MakeVisible();
+}
+
+
+void TMainForm::fillSourceTree(const char *sourceConf, TTreeView *tree)
+{
+ ModMap::iterator mods;
+ TTreeNode *node;
+ SectionMap::iterator sections, targetSection;
+ ConfigEntMap::iterator entry;
+ string secName;
+ const char * modDesc;
+ string nodeName;
+ string targetVersion;
+ string sourceVersion;
+ bool cipher;
+ bool showLocked = LockedModules1->Checked;
+
+ SWMgr *mgr;
+
+ if (tree == localTree) {
+ if (localMgr)
+ delete localMgr;
+ mgr = localMgr = new SWMgr(sourceConf);
+ }
+ else {
+
+ InstallSourceTab *ist = (InstallSourceTab *) tree->Parent->Controls[0];
+ if (ist->mgr)
+ delete ist->mgr;
+ mgr = ist->mgr = new SWMgr(sourceConf);
+ }
+
+ tree->Items->Clear();
+
+ if (!mgr->configPath)
+ return;
+
+ for (sections = mgr->config->Sections.begin(); sections != mgr->config->Sections.end(); sections++) {
+
+ cipher = false;
+
+ if (!strcmp(sections->first.c_str(), "Globals")) // skip [Globals]
+ continue;
+
+ entry = sections->second.find("CipherKey");
+ if (entry != sections->second.end()) {
+ if (showLocked)
+ cipher = true;
+ else continue;
+ }
+
+ mods = mgr->Modules.find(sections->first.c_str());
+ if (mods != mgr->Modules.end())
+ secName = mods->second->Type();
+ else {
+ secName = "Other";
+ }
+
+ string misc1 = ((entry = sections->second.find("Category")) != sections->second.end()) ? (*entry).second : (string)"";
+ if (misc1.length() > 0)
+ secName = misc1;
+
+ entry = sections->second.find("Description");
+ if (entry != sections->second.end())
+ modDesc = entry->second.c_str();
+ else modDesc = "";
+
+
+ targetVersion = "0.0";
+ sourceVersion = "1.0";
+
+ entry = sections->second.find("Version");
+ if (entry != sections->second.end())
+ sourceVersion = entry->second.c_str();
+
+ targetSection = manager->config->Sections.find(sections->first);
+ if (targetSection != manager->config->Sections.end()) {
+ targetVersion = "1.0";
+ entry = targetSection->second.find("Version");
+ if (entry != targetSection->second.end())
+ targetVersion = entry->second;
+ }
+
+ if (VersionInfo(sourceVersion.c_str()) > VersionInfo(targetVersion.c_str())) {
+ for (node = tree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
+ if (!strcmp(node->Text.c_str(), secName.c_str())) {
+ break;
+ }
+ }
+
+ if (!node) { // Add Section
+ if (!strncmp(secName.c_str(), "Bibl", 4)) // If Bibles, put first in list
+ node = tree->Items->AddChildFirst(0, secName.c_str());
+ else node = tree->Items->AddChild(0, secName.c_str());
+ node->ImageIndex = 0;
+ }
+ nodeName = "[" + sections->first + "] " + modDesc;
+ node = tree->Items->AddChildObject(node, nodeName.c_str(), (void *) sections->first.c_str());
+ if (VersionInfo(targetVersion.c_str()) < VersionInfo("1.0")) {
+ node->ImageIndex = 1;
+ node->SelectedIndex = 1;
+ }
+ else {
+ node->ImageIndex = 2;
+ node->SelectedIndex = 2;
+ }
+ if (cipher) {
+ node->ImageIndex += 2;
+ node->SelectedIndex += 2;
+ }
+ node->StateIndex = 0;
+ }
+ }
+ for (node = tree->Items->GetFirstNode(); node; node = node->getNextSibling())
+ node->Expand(true);
+ node = tree->Items->GetFirstNode();
+ if (node)
+ node->MakeVisible();
+}
+
+
+void __fastcall TMainForm::Button5Click(TObject *Sender)
+{
+ TTreeView *tree;
+ for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
+ if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
+ tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
+ break;
+ }
+ }
+ TTreeNode *node = tree->Selected;
+ if (node) {
+ if (node->Parent) {
+ if (node->StateIndex == 1)
+ node->StateIndex = 0; //node->StateIndex;
+ else node->StateIndex = 1;
+ tree->Repaint();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::localTreeDblClick(TObject *Sender)
+{
+ Button5Click(Sender);
+}
+//---------------------------------------------------------------------------
+
+int TMainForm::selectAll(TTreeView *tree, bool sel)
+{
+ TTreeNode *node;
+ TTreeNode *node2;
+ int retCount = 0;
+
+ for (node = tree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
+ for (node2 = node->getFirstChild(); node2; node2 = node2->getNextSibling()) {
+ if (node2->StateIndex == 1) {
+ if (!sel) {
+ node2->StateIndex = 0; //node2->StateIndex;
+ retCount++;
+ }
+ }
+ else {
+ if (sel) {
+ node2->StateIndex = 1;
+ retCount++;
+ }
+ }
+ }
+ }
+ return retCount;
+}
+
+
+void __fastcall TMainForm::Button6Click(TObject *Sender) // SELECT ALL
+{
+ TTreeView *tree;
+ for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
+ if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
+ tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
+ break;
+ }
+ }
+ if (!selectAll(tree, true))
+ selectAll(tree, false);
+ tree->Repaint();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::Image1Click(TObject *Sender)
+{
+ ShellExecute(this->Handle, "open", "http://www.crosswire.org", NULL, NULL, SW_SHOWNORMAL);
+
+}
+//---------------------------------------------------------------------------
+
+int TMainForm::removeModule(const char *modName)
+{
+ SectionMap::iterator module;
+ ConfigEntMap::iterator fileBegin;
+ ConfigEntMap::iterator fileEnd, entry;
+
+ module = manager->config->Sections.find(modName);
+
+ if (module != manager->config->Sections.end()) {
+ entry = module->second.find("CipherKey");
+ if (entry != module->second.end())
+ CipherForm->cipherEdit->Text = entry->second.c_str();
+
+ fileBegin = module->second.lower_bound("File");
+ fileEnd = module->second.upper_bound("File");
+
+ if (fileBegin != fileEnd) { // remove each file
+ while (fileBegin != fileEnd) {
+ //remove file
+ remove(fileBegin->second.c_str());
+ fileBegin++;
+ }
+ }
+ else { //remove all files in DataPath directory
+
+ DIR *dir;
+ struct dirent *ent;
+ ConfigEntMap::iterator entry;
+ string modDir;
+ string modFile;
+
+ entry = module->second.find("DataPath");
+ if (entry != module->second.end()) {
+ modDir = entry->second.c_str();
+ entry = module->second.find("ModDrv");
+ if (entry != module->second.end()) {
+ if (!strcmp(entry->second.c_str(), "RawLD") || !strcmp(entry->second.c_str(), "RawLD4") || !strcmp(entry->second.c_str(), "zLD") || !strcmp(entry->second.c_str(), "RawGenBook") || !strcmp(entry->second.c_str(), "zGenBook")) {
+ char *buf = new char [ strlen(modDir.c_str()) + 1 ];
+
+ strcpy(buf, modDir.c_str());
+ int end = strlen(buf) - 1;
+ while (end) {
+ if (buf[end] == '/')
+ break;
+ end--;
+ }
+ buf[end] = 0;
+ modDir = buf;
+ delete [] buf;
+ }
+ }
+
+ if (dir = opendir(modDir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = modDir;
+ modFile += "/";
+ modFile += ent->d_name;
+ remove(modFile.c_str());
+ }
+ }
+ closedir(dir);
+ }
+ if (dir = opendir(manager->configPath)) { // find and remove .conf file
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = manager->configPath;
+ modFile += "/";
+ modFile += ent->d_name;
+ SWConfig *config = new SWConfig(modFile.c_str());
+ if (config->Sections.find(modName) != config->Sections.end()) {
+ delete config;
+ remove(modFile.c_str());
+ }
+ else delete config;
+ }
+ }
+ closedir(dir);
+ }
+ }
+ }
+ return 0;
+ }
+ return 1;
+}
+
+
+int TMainForm::createParent(const char *pName)
+{
+ char *buf = new char [ strlen(pName) + 1 ];
+ int retCode = 0;
+
+ strcpy(buf, pName);
+ int end = strlen(buf) - 1;
+ while (end) {
+ if (buf[end] == '/')
+ break;
+ end--;
+ }
+ buf[end] = 0;
+ if (strlen(buf)>0) {
+ if (access(buf, 02)) { // not exists with write access?
+ if ((retCode = mkdir(buf))) {
+ createParent(buf);
+ retCode = mkdir(buf);
+ }
+ }
+ }
+ else retCode = -1;
+ delete [] buf;
+ return retCode;
+}
+
+
+int TMainForm::createPathAndFile(const char *fName)
+{
+ int fd;
+
+ fd = open(fName, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
+ if (fd < 1) {
+ createParent(fName);
+ fd = open(fName, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
+ }
+ return fd;
+}
+
+
+int TMainForm::copyFileToCWD(const char *sourceDir, const char *fName)
+{
+ string sourcePath = sourceDir;
+ sourcePath += fName;
+
+ string dest;
+ dest = manager->prefixPath;
+ if ((manager->prefixPath[strlen(manager->prefixPath)-1] != '\\') && ( manager->prefixPath[strlen(manager->prefixPath)-1] != '/'))
+ dest += "/";
+ dest += fName;
+
+ return copyFile(sourcePath.c_str(), dest.c_str());
+}
+
+
+int TMainForm::copyFile(const char *sourceFile, const char *targetFile)
+{
+ int sfd, dfd, len;
+ char buf[4096];
+
+ if ((sfd = open(sourceFile, O_RDONLY|O_BINARY)) < 1)
+ return -1;
+ if ((dfd = createPathAndFile(targetFile)) < 1)
+ return -1;
+
+ do {
+ len = read(sfd, buf, 4096);
+ write(dfd, buf, len);
+ }
+ while(len == 4096);
+ close(dfd);
+ close(sfd);
+
+ return 0;
+}
+
+
+int TMainForm::installModule(const char *modName, InstallSourceTab *ist)
+{
+ SectionMap::iterator module, section;
+ ConfigEntMap::iterator fileBegin;
+ ConfigEntMap::iterator fileEnd;
+ ConfigEntMap::iterator entry;
+ string sourceDir;
+ string buffer;
+ bool aborted = false;
+ bool cipher = false;
+
+ if (ist)
+ sourceDir = "./sources/" + ist->Source;
+ else sourceDir = getLocalDir();
+
+ SWMgr mgr(sourceDir.c_str());
+
+ module = mgr.config->Sections.find(modName);
+
+ if (module != mgr.config->Sections.end()) {
+
+ entry = module->second.find("CipherKey");
+ if (entry != module->second.end())
+ cipher = true;
+
+ fileEnd = module->second.upper_bound("File");
+ fileBegin = module->second.lower_bound("File");
+
+ if (fileBegin != fileEnd) { // copy each file
+ if (ist) {
+ while (fileBegin != fileEnd) { // ftp each file first
+ buffer = sourceDir + "/" + fileBegin->second;
+ if (FTPCopy(ist, fileBegin->second.c_str(), buffer.c_str())) {
+ aborted = true;
+ break; // user aborted
+ }
+ fileBegin++;
+ }
+ fileBegin = module->second.lower_bound("File");
+ }
+
+ if (!aborted) {
+ // DO THE INSTALL
+ while (fileBegin != fileEnd) {
+ copyFileToCWD(sourceDir.c_str(), fileBegin->second.c_str());
+ fileBegin++;
+ }
+ }
+ //---------------
+
+ if (ist) {
+ fileBegin = module->second.lower_bound("File");
+ while (fileBegin != fileEnd) { // delete each tmp ftp file
+ buffer = sourceDir + "/" + fileBegin->second;
+ remove(buffer.c_str());
+ fileBegin++;
+ }
+ }
+ }
+ else { //copy all files in DataPath directory
+ DIR *dir;
+ struct dirent *ent;
+ ConfigEntMap::iterator entry;
+ string modDir;
+ string modFile;
+ string sourceOrig = sourceDir;
+
+ entry = module->second.find("DataPath");
+ if (entry != module->second.end()) {
+ modDir = entry->second.c_str();
+ entry = module->second.find("ModDrv");
+ if (entry != module->second.end()) {
+ if (!strcmp(entry->second.c_str(), "RawLD") || !strcmp(entry->second.c_str(), "RawLD4") || !strcmp(entry->second.c_str(), "zLD") || !strcmp(entry->second.c_str(), "RawGenBook") || !strcmp(entry->second.c_str(), "zGenBook")) {
+ char *buf = new char [ strlen(modDir.c_str()) + 1 ];
+
+ strcpy(buf, modDir.c_str());
+ int end = strlen(buf) - 1;
+ while (end) {
+ if (buf[end] == '/')
+ break;
+ end--;
+ }
+ buf[end] = 0;
+ modDir = buf;
+ delete [] buf;
+ }
+ }
+
+ if (ist) {
+ buffer = sourceDir + "/" + modDir;
+ if (FTPCopy(ist, modDir.c_str(), buffer.c_str(), true)) {
+ aborted = true; // user aborted
+ }
+ }
+ sourceDir += "/";
+ sourceDir += modDir;
+ if (!aborted) {
+ if (dir = opendir(sourceDir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = modDir;
+ modFile += "/";
+ modFile += ent->d_name;
+ copyFileToCWD(sourceOrig.c_str(), modFile.c_str());
+ }
+ }
+ closedir(dir);
+ }
+ }
+ if (ist) { // delete tmp ftp files
+ if (dir = opendir(sourceDir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = sourceOrig + "/" + modDir;
+ modFile += "/";
+ modFile += ent->d_name;
+ remove(modFile.c_str());
+ }
+ }
+ closedir(dir);
+ }
+ }
+ sourceDir = sourceOrig;
+ sourceDir += "/mods.d/";
+ if (!aborted) {
+ if (dir = opendir(sourceDir.c_str())) { // find and copy .conf file
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = sourceDir;
+ modFile += ent->d_name;
+ SWConfig *config = new SWConfig(modFile.c_str());
+ if (config->Sections.find(modName) != config->Sections.end()) {
+ delete config;
+ string targetFile = manager->configPath; //"./mods.d/";
+ targetFile += "/";
+ targetFile += ent->d_name;
+ copyFile(modFile.c_str(), targetFile.c_str());
+ if (cipher) {
+ CipherForm->modName = modName;
+ CipherForm->confFile = targetFile;
+ if (CipherForm->ShowModal() == mrCancel) {
+ removeModule(modName);
+ aborted = true;
+ }
+ }
+ }
+ else delete config;
+ }
+ }
+ closedir(dir);
+ }
+ }
+ }
+ }
+ return (aborted) ? -1 : 0;
+ }
+ return 1;
+}
+
+
+void TMainForm::fillAllSourceTrees()
+{
+ fillSourceTree(getLocalDir(), localTree);
+ for (int i = 1; i < PageControl1->PageCount; i++) {
+ InstallSourceTab *ist = (InstallSourceTab *) MainForm->PageControl1->Pages[i]->Controls[0];
+ string parent = "./sources/" + ist->Source;
+ fillSourceTree(parent.c_str(), ist->tree);
+ }
+}
+
+
+void __fastcall TMainForm::Button4Click(TObject *Sender) // REMOVE MODULE
+{
+ TTreeNode *node = installTree->Selected;
+ if (node) {
+ if (node->Parent) {
+ removeModule((const char *)node->Data);
+ delete manager;
+ manager = new SWMgr();
+ fillInstallTree();
+ fillAllSourceTrees();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::Button2Click(TObject *Sender) // INSTALL
+{
+ TTreeNode *node;
+ int count = 0;
+ int abort = 0;
+
+ class TWaitCursor {
+ public:
+ TWaitCursor() : oldc(Screen->Cursor) { Screen->Cursor = crHourGlass; }
+ ~TWaitCursor() { Screen->Cursor = oldc; }
+ private:
+ TCursor oldc;
+ } wait; // show hourglass
+
+ TTreeView *tree;
+ for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
+ if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
+ tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
+ break;
+ }
+ }
+
+ for (node = tree->Items->GetFirstNode(); node; node = node->GetNext()) {
+ if (node->StateIndex == 1)
+ count++;
+ } // do true progress bar
+
+ if (!count) {
+ MessageBox(this->WindowHandle, "Please first choose which modules you would like to install by double-clicking a module in the 'Available' tree.", "Please select modules first.", MB_OK);
+ return; // if nothing is selected, do nothing
+ }
+
+ progressBar->Max = count;
+ progressBar->Position = 0;
+
+ for (node = tree->Items->GetFirstNode(); node; node = node->GetNext()) {
+ if (node->StateIndex == 1) { // if selected for install
+ CipherForm->cipherEdit->Text = "";
+ if ((node->ImageIndex == 2) || (node->ImageIndex == 4)) { // if this is an upgrade
+ removeModule((const char *)node->Data);
+ }
+ // install module
+ statusBar->Caption = "Installing: " + node->Text + "...";
+ statusBar->Repaint();
+ if (tree == localTree)
+ abort = installModule((const char *)node->Data);
+ else abort = installModule((const char *)node->Data, (InstallSourceTab *) PageControl1->ActivePage->Controls[0]);
+ if (abort)
+ break;
+ progressBar->Position++;
+ }
+ }
+ delete manager;
+ manager = new SWMgr();
+ fillInstallTree();
+ fillAllSourceTrees();
+ statusBar->Caption = "";
+ progressBar->Position = 0;
+}
+
+
+int TMainForm::FTPCopy(InstallSourceTab *ist, const char *src, const char *dest, bool dirTransfer, const char *suffix)
+{
+ StatusForm->ist = ist;
+ StatusForm->src = src;
+ StatusForm->dest = dest;
+ StatusForm->suffix = suffix;
+ StatusForm->dirTransfer = dirTransfer;
+ StatusForm->passive = passive;
+ Application->ProcessMessages();
+ if (StatusForm->ShowModal() == mrCancel)
+ return -1;
+ else return 0;
+}
+
+
+void __fastcall TMainForm::RefreshRemoteSource(TObject *Sender)
+{
+ InstallSourceTab *ist = (InstallSourceTab *) MainForm->PageControl1->ActivePage->Controls[0];
+ DIR *dir;
+ struct dirent *ent;
+ ConfigEntMap::iterator entry;
+ string modDir;
+ string modFile;
+ string root = "./sources/";
+ root += ist->Source.c_str();
+ string target = root + "/mods.d";
+
+ if (dir = opendir(target.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
+ modFile = target;
+ modFile += "/";
+ modFile += ent->d_name;
+ remove(modFile.c_str());
+ }
+ }
+ closedir(dir);
+ }
+
+
+ string archive = root + "/mods.d.tar.gz";
+ if (!FTPCopy(ist, "mods.d.tar.gz", archive.c_str(), false)) {
+ int fd = open(archive.c_str(), O_RDONLY|O_BINARY);
+ untargz(fd, root.c_str());
+ close(fd);
+ }
+ else FTPCopy(ist, "mods.d", target.c_str(), true, ".conf");
+
+ target = "./sources/";
+ target += ist->Source.c_str();
+
+ fillSourceTree(target.c_str(), ist->tree);
+}
+
+
+
+void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
+{
+ InfoForm->Caption = "W A R N I N G";
+ InfoForm->info = "\\qc {\\b \\fs20 -=+* WARNING *+=- -=+* WARNING *+=-}\\par\\par\\pard ";
+ InfoForm->info += "Although Install Manager provides a convenient way for installing and upgrading SWORD components, it also uses a systematic method for accessing sites which gives packet sniffers a target to lock into for singling out users. \\par\\par ";
+ InfoForm->info += "\\b\\qc IF YOU LIVE IN A PERSECUTED COUNTRY AND DO NOT WISH TO RISK DETECTION, YOU SHOULD *NOT* USE INSTALL MANAGER'S REMOTE SOURCE FEATURES.";
+ InfoForm->ShowModal();
+ if (RemoteMntForm->ShowModal() == mrOk) {
+ delete installConf;
+ installConf = new SWConfig("./InstallMgr.conf");
+
+ refreshPageControl();
+ }
+}
+
+void __fastcall TMainForm::SpeedButton5Click(TObject *Sender)
+{
+ TTreeView *tree;
+ InstallSourceTab *ist = 0;
+ SectionMap::iterator module;
+ ConfigEntMap::iterator entry, entryEnd;
+ string sourceDir;
+
+ if (PageControl1->ActivePage != PageControl1->Pages[0]) {
+ ist = (InstallSourceTab *) PageControl1->ActivePage->Controls[0];
+ tree = ist->tree;
+ }
+ else tree = localTree;
+
+ TTreeNode *node = tree->Selected;
+ if (node) {
+ if (node->Parent) {
+ if (ist)
+ sourceDir = "./sources/" + ist->Source;
+ else sourceDir = getLocalDir();
+ SWMgr *mgr = new SWMgr(sourceDir.c_str());
+
+ module = mgr->config->Sections.find((const char *)node->Data);
+
+ if (module != mgr->config->Sections.end()) {
+ string targetVersion = "0.0";
+ string sourceVersion = "1.0";
+ SectionMap::iterator targetSection;
+
+ entry = module->second.find("Version");
+ if (entry != module->second.end())
+ sourceVersion = entry->second.c_str();
+
+ targetSection = manager->config->Sections.find(module->first);
+ if (targetSection != manager->config->Sections.end()) {
+ targetVersion = "1.0";
+ entry = targetSection->second.find("Version");
+ if (entry != targetSection->second.end())
+ targetVersion = entry->second;
+ }
+ if (VersionInfo(targetVersion.c_str()) < VersionInfo("1.0")) {
+ InfoForm->info = "\\pard{\\b * Additional Module Available for Install. } \\par ";
+ }
+ else {
+ InfoForm->info = "\\pard{\\b + Upgraded Module Available for Install.}\\par\\tab Current Version: \\tab " + targetVersion + " \\par\\tab Upgrade Version:\\tab " + sourceVersion + " \\par ";
+ bool changes = false;
+ for (entry = module->second.begin(); entry != module->second.end(); entry++) {
+ if (!strncmp(entry->first.c_str(), "History_", 8)) {
+ if (VersionInfo(&entry->first.c_str()[8]) > VersionInfo(targetVersion.c_str())) {
+ if (!changes) {
+ changes = true;
+ InfoForm->info += "\\par{\\b Changes: }\\par ";
+ }
+ InfoForm->info += "\\tab ";
+ InfoForm->info += entry->second.c_str();
+ InfoForm->info += "\\par ";
+ }
+ }
+ }
+ }
+
+ entry = module->second.find("About");
+ if (entry != module->second.end()) {
+ InfoForm->info += "\\par{\\b About: } \\par\\par ";
+ InfoForm->info += entry->second.c_str();
+ }
+ InfoForm->Caption = "Module Information";
+ InfoForm->ShowModal();
+ }
+ delete mgr;
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::Exit1Click(TObject *Sender)
+{
+ Close();
+}
+//---------------------------------------------------------------------------
+
+
+void TMainForm::deleteAllModules() {
+
+ SWMgr *mgr = new SWMgr();
+
+
+ int count = mgr->Modules.size();
+
+ if (!count)
+ return;
+
+ UninstallForm->Show();
+ UninstallForm->ProgressBar1->Max = count;
+ UninstallForm->ProgressBar1->Position = 0;
+
+ ModMap::iterator it;
+ for (it = mgr->Modules.begin(); it != mgr->Modules.end(); it++) {
+ string label = "Uninstalling: [";
+ label += it->second->Name();
+ label += "] ";
+ label += it->second->Description();
+ UninstallForm->Label1->Caption = label.c_str();
+ UninstallForm->Label1->Repaint();
+ removeModule(it->second->Name());
+ UninstallForm->ProgressBar1->Position = UninstallForm->ProgressBar1->Position + 1;
+ UninstallForm->ProgressBar1->Repaint();
+ }
+ delete mgr;
+ UninstallForm->Hide();
+ return;
+}
+void __fastcall TMainForm::FormShow(TObject *Sender)
+{
+ for (int i=0;i<=ParamCount();i++) {
+ if (LowerCase(ParamStr(i)) == "-uninstall") {
+ deleteAllModules();
+ Application->Terminate();
+ }
+ }
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::LockedModules1Click(TObject *Sender) {
+ LockedModules1->Checked = !(LockedModules1->Checked);
+
+ if (LockedModules1->Checked) {
+ InfoForm->Caption = "About Locked Modules";
+ InfoForm->info = "\\qc {\\b \\fs20 About Locked Modules}\\par\\par\\pard ";
+
+ InfoForm->info += "Unfortunately, we are unable to legally provide these modules to the general public at this time. We are making attempts to gain permission from the copyright holders, but until such an agreement is arranged, these modules are only available to our developers and testers. We hope to be able to provide some of these to you soon. \\par\\par\\pard ";
+ InfoForm->info += "If you would like to contribute to the project by contacting a publisher seeking distribution permission for CrossWire, your efforts would be very appreciated-- especially in regard to non-English texts. Please subscribe to our developers' forum per instructions on our website, following the [Mailing Lists] link, and post a message stating how you would like to help. Thank you. \\par\\par\\pard ";
+ InfoForm->info += "\t-CrossWire Bible Society. ";
+ InfoForm->ShowModal();
+ }
+ fillAllSourceTrees();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TMainForm::Contents1Click(TObject *Sender)
+{
+ SWConfig optionsconf("options.conf");
+ string helpDir;
+ ConfigEntMap::iterator it = optionsconf.Sections["Help"].find("Directory");
+ if (it != optionsconf.Sections["Help"].end())
+ helpDir = (*it).second;
+ else helpDir = ".\\help";
+
+ string helpExe = helpDir + "\\Sword.chm::modulesh.html#instmgr";
+ ShellExecute(this->Handle, "open", "hh", helpExe.c_str(), NULL, SW_SHOWNORMAL);
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/MainFrm.dfm b/apps/windoze/CBuilder5/InstallMgr/MainFrm.dfm
new file mode 100644
index 0000000..97c9de9
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/MainFrm.dfm
@@ -0,0 +1,2224 @@
+object MainForm: TMainForm
+ Left = 361
+ Top = 228
+ Width = 597
+ Height = 475
+ Caption = 'Install Manager'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Menu = MainMenu1
+ OldCreateOrder = False
+ Position = poScreenCenter
+ Scaled = False
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Splitter1: TSplitter
+ Left = 281
+ Top = 81
+ Width = 3
+ Height = 326
+ Cursor = crHSplit
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 589
+ Height = 81
+ Align = alTop
+ AutoSize = True
+ BorderStyle = bsSingle
+ TabOrder = 0
+ object Image1: TImage
+ Left = 1
+ Top = 1
+ Width = 583
+ Height = 75
+ Hint = 'http://www.crosswire.org'
+ Align = alClient
+ AutoSize = True
+ Center = True
+ ParentShowHint = False
+ Picture.Data = {
+ 07544269746D6170E69A0000424DE69A0000000000003600000028000000AF00
+ 00004B0000000100180000000000B09A0000120B0000120B0000000000000000
+ 0000403B3B817E7E8077768177777D74738076767D73737C7271766C6C796F6F
+ 746B6A726867756B6A736969726867756A6A726868776C6C736868726767766B
+ 6B736968716766766C6B746968726867746A69736968746A6A726767766B6A72
+ 6766726767716665726766736868746868716665706564766B6A766A6A796C6C
+ 776B6A776B6B766A69786B6A776A69766968766868766968776A697367667669
+ 69776969776A6A766A69786B6A756767776968776969786A6977696879696977
+ 6867776867776867796A69796969796A69776767766666756564726161776666
+ 7867667866667968677767667766657968677765647563627462617665647866
+ 647764637766657464637A68677A68677866657A69687A6A6976676675646375
+ 6463766463776564746261756463746463776766756463736261756564756362
+ 7665647666657565647464637766657767667667667768677565647968687969
+ 687C6D6C796A6A7567667567667769687A6C6B796B6A76686875686773666677
+ 6B6A786C6B7A6D6D756969756969766A6A756A69746968726666776C6C786D6D
+ 786E6D766B6B776C6C766C6C736968746B6A786E6E776D6D756B6B786E6E7A70
+ 6F7A6F6F796F6E796F6E766C6C786F6F776D6D756B6A7B7170786E6E776D6D7B
+ 7271766D6C7A7070786F6F786E6E7C72727A7170776D6D756C6C776F6F78706F
+ 736B6A776E6E756D6D8077763A3535000000817776FFF9F7F0DCDAFEEAE8FDE8
+ E7FFEEEDF9E4E3FFECEAF2DDDCFCE8E7F9E4E3F5E1E0F7E2E1F9E4E3FAE5E4FC
+ E6E5F7E1E0F7E1E0FCE6E5F9E4E2FAE4E3F9E3E2F9E2E1FFE8E7FEE7E6F9E2E0
+ FBE4E3FDE8E6FCE7E6F9E3E2FAE3E2FBE4E3F5DEDCF3DBDAF9E2E0FDE5E3FDE4
+ E4FCE2E2F7DEDDFAE0DEF6DDDBFDE3E2FFE6E5FFE7E6FFE4E3FFE6E4FFE7E5FF
+ E5E4FFE5E4F5D8D7F8DCDBFFE8E7FFE9E8FFE4E3FFE2E1FDE2E0FFE5E4FBE0DF
+ FBDEDDFFE0E0FFE0DFFEDEDDF5D4D4FBDAD9FFDFDCFFE0DEFFE4E2FFE4E2FFE2
+ E1FFDFDEFEDEDCFFDEDDFAD7D6FDDAD9FFDCDBFCD7D6F7D1CFFCD8D6FFDBDAFF
+ DEDCFFD8D6FED5D3FFDBD9FFDDDBFFD9D6FFD8D7FFDEDCFCD8D6FFDDDBFCD4D2
+ F3CDCBF8D3D1FFDEDCFFDEDDFCD7D6FFDDDBFED8D6FFD8D6FFD9D6FED8D7F9D5
+ D4FFDCDBFBD7D5F8D4D3FAD7D4FCD8D6F9D6D4FCDAD8FCDAD8FCD9D7FFDFDCFF
+ E5E3FFE4E2FFE1DFFFDDDBFFE2E0FFE0DEFFE4E2FFE7E5FFE2E1FCDDDCF9DBD9
+ FEDFDDFEE0DEFEE0DEFFE2E1FFE3E2FFE7E5FEE2E0FFECEBFFEAEAFFE8E7FFE9
+ E8FFECEAFFE7E6FDE5E4FFEAEAFFE8E8FFEBEAFFE9E9FCE6E6FEEAE9FCE7E6FD
+ E8E7FFF1F0FEE8E7F8E2E1FFEBEAFFF0EEFFEAE9FFEDECFEE9E9FDE8E8FFEEEE
+ FFECEBFFEFEEFFF2F0FFEAE9F5E0DFFFEFEEF8E4E2FFECEBFFEDECFFEAE9FFF1
+ F0FFF2F1FFEFEEFFEFEEFFEFEEFFF2F1FCE9E8FFF3F2FFF1F0FFFFFF80787700
+ 00007C7272FCEFEDCBB8B7E6D3D1E8D5D4E5D3D1E3D0CFEFDBDADBC7C6E2CFCE
+ E9D6D5E3D1D0E1CECDE0CDCCE3CFCEDDC8C7DFCBCAE8D4D3E7D3D2E9D4D3EDD9
+ D8EDD8D7E5D0CFE6D1D0E2CDCCEAD5D4E3CECCE7D2D1EFDBDAEEDAD9E9D4D3F0
+ DCDBEBD6D4DEC8C7E6CFCEE4CDCCE6CFCEE3CBCBE0C8C7E5CDCCEBD3D2E8D0CF
+ E5CCCBE5CCCBE8CECDE9D0CEEBD0CFEDD3D3F1D6D5E2C7C5DFC5C4EED5D4F1D9
+ D8F0D7D6E7CBCAECD0D0EBD1D0EBD2D1F1D6D5EDD1D0EBCDCCECCFCDDCBEBDE7
+ C8C6F1D1CFF5D4D2EDCECCE5C5C3F1D1D0EFD1D0EDCECDEFCFCDECCBCAEAC9C7
+ EBCAC8ECC9C8E0BCBAEAC7C5EECBC9EAC8C6EEC9C7EDC6C4F1CBC9ECCAC9EECB
+ CAF2CCCAEECAC8E7C4C2F2CCCBECC5C3E9C5C2DEBAB8EBC9C7F2D2D0E9C6C4EE
+ CAC8EECAC8ECC6C4EEC8C7ECC9C8E7C6C4ECCBC9E9C7C5E8C7C5E8C6C4EBC9C8
+ E4C4C3E3C3C2E3C2C0E9C6C5E8C8C5ECCDCBEECDCBF0D0CEEDCECCEECECCE8CA
+ C9E3C5C3EFD1D0F1D4D3ECD0CEEACECDEFD3D2F0D4D2F3D8D6ECD0CFEAD0CEEC
+ D0CFE5CBC8F2D9D7E9D0CFECD3D1F1D9D8F2DADAECD4D4EAD3D3E7D1D0ECD6D6
+ E9D5D5EBD8D8ECDADAEEDDDCF0DDDCE8D3D3EDD8D7F1DCDBF0DADAE3CDCDEBD7
+ D6E9D5D5ECDAD9EEDDDCE6D5D5E7D6D6E7D5D4EDD9D9E8D4D3EFDBDAE6D2D0ED
+ D9D8E6D3D2E4D0CFF2DDDBEFDCDBF3E1E0F5E3E2ECDAD9F0DEDDF2E0DFF5E3E1
+ EBD9D8F2E0DFE9D8D7FEF1F07971700000007D7372FFF3F1CDBAB9ECD8D7DECC
+ CBDCC9C8E7D3D1F3DFDED0BDBCDDCAC9E3D0CFD6C2C1E3D0CFE4D0CFD7C3C2DA
+ C6C5DBC6C5E3CFCED8C4C4D6C2C1E7D3D2E7D3D1DCC7C7DFCACAD7C2C1E5CFCE
+ D5C0BFE5D0CFEDD9D8EFDAD9EDD8D7EED9D8F0DBDAEAD4D3DCC6C4DDC7C6DAC3
+ C2DAC1C1D9C1C0DBC2C1E4CBCAD9C1BFDDC4C3DABFBEDFC5C4DFC6C4DAC0C0E2
+ C9C9DFC6C5E3C9C8DEC4C3E2C8C6E3C9C8E9D1D0DEC5C4EACECDE0C3C2DCC2C1
+ E6CCCBE5C9C8E0C3C1EED0CFDEBEBDE9C9C8E9C7C6EDCAC8D8B8B68F7B7AD3B4
+ B2F0D1CFF8D8D6F4D1D0E3C1C0EAC7C6E7C4C3E9C6C5E2BDBCECC7C6E1BEBCE3
+ BFBDE8C2C0EBC4C1E9C1BFE9C6C4E6C2C0EAC4C2E9C3C1EBC5C3EAC4C2F4CBC8
+ E2BEBCEBC5C3F3D0CEFCDAD7EDC8C5E8C2BFEDC6C4EDC4C2F0C9C7E1BEBCE4C2
+ C0E9C6C4E9C8C6E7C4C2E3C0C0F2CFCEEDCBC9E0BEBDE1BFBDE0BFBCDBBAB8E2
+ C0BED8B7B5E9C8C6E5C4C2DDBCBBDFC0BEDDBEBDE6C8C6EFD2D0D8BCBADFC3C1
+ ECD1D0ECD1D0E8CCCBD9BDBBE3C7C5D4B8B6E2C7C5DEC3C3E0C6C5DAC2C1EBD4
+ D2E2CAC9DEC6C5E5CDCCDAC5C4DFCACAE0CDCDDFCDCDEAD8D8E9D7D7DFCBCBDF
+ CBCBDDC8C8EDD8D7E4CFCFDBC7C7DBC8C6E1CECEEDDADAECDBDBDFCECDE4D3D3
+ EAD9D8E6D3D2D0BCBBECD7D7F6E2E1E8D5D4D3C0BFD7C3C2DDCAC9F5E3E2F6E3
+ E2DECCCBDBCAC9D9C7C6E4D2D1DECCCCDDCCCCDBC9C9D8C6C5EAD7D670686700
+ 0000786F6EEFDBD9D6C3C2DCC9C8D9C6C5E1CDCDF7E4E2EDD9D8D6C2C0DAC6C5
+ E1CCCCD7C4C3E4D1D0DBC7C6DAC7C6E8D4D4DAC7C6DAC7C6E1CECDE4D0CFDDC9
+ C8DECACAE1CCCCE4D0CFE1CCCBE8D4D3D8C4C3E9D5D5E9D5D4ECD7D6E7D2D1ED
+ D7D5EBD6D4E4CECED4BEBDEDD7D6E2CBCADFC8C6DFC7C6E3CBCAE9D0D0DDC4C3
+ E7CECDE1C8C6EED4D3EBD2D0DDC4C3E0C6C6E5CBCAE2C9C7E3C9C8ECD2D0DFC4
+ C3E5CAC9E3CAC9E4CAC9E5C8C8EACCCBE0C5C4E9CFCEE5C8C7F0D1D0DDBDBBEE
+ CDCCEDCBC8E8C4C3E9C4C3A18B8AA9908EECCBC9A28C8B9C8686E3C1C0D2B3B3
+ C0A3A1F2CCCBE2BCBBECC6C5E4BFBDEEC9C8AB8F8DE6BEBBB79795D1B2B0E8C3
+ C1EAC2C0BFA09EBFA19FD5B0ADAE8E8DE2BDBBB19694C9ABA9A68E8DB4989699
+ 7F7ECAA7A59B807FA88C8BE5C1BFDDBDBB957E7DD7B7B6A08685E5C2C0B99E9C
+ AD9391C7A8A6EDCAC8EACAC8DBBBB9E9C7C5DDBCB9F2D0CEE5C4C2E6C7C5E5C6
+ C4E2C3C1F1D3D1EDD0CEDDC0BEDDC1C0EFD4D3F2D7D6DFC4C2DEC2C1F7DBD9D9
+ BDBCE5C9C8D7BDBBF1D9D7E1CAC9E5CECDE0C9C8E6CFCEE2CCCBE1CCCCE8D5D5
+ E8D6D5DECCCBEDDAD9E5D2D1DAC6C5ECD7D6DEC9C9E5D0D0DFCBCAEDD9D8E3CF
+ CEDECBCAEDDBDBE5D3D3DAC9C8E9D7D7E6D4D4EBD9D9D7C3C2F3DEDEF1DDDCDD
+ CAC9D6C2C1E9D6D4D2BFBEEBD8D7F1DFDED3C0BFEFDCDBE5D3D2DBC9C9DECCCC
+ E5D4D3D4C2C1EAD8D7F1DFDE6F67670000006A6160DFCBC9EEDBD9D4C1C0D4C1
+ C0D2BFBEDDC9C8D5C1C1E1CDCBDCC7C6D9C4C4D7C4C3D9C4C3E2CECCD9C5C4DF
+ CCCBD9C7C6DBC8C7DFCBCBE4D0D0D9C5C4E4D0CFDDC8C8DAC6C5DFCBC9E1CDCB
+ D6C2C1E8D4D4E8D5D4EDD9D8E3CFCDECD6D6EBD5D4ECD5D4DCC6C4E0C9C8DDC7
+ C6E1C9C9DDC5C4DCC4C2E2CAC8D9C1C0E0C7C5DAC1C0DEC5C4E4CAC9DDC4C3DE
+ C4C3DEC5C4E6CCCBDDC4C3DFC5C3E1C5C4E1C6C5E5CAC9E4CAC9E3C7C6E8CACA
+ DFC1C0E5C9C7E0C5C3EACBC9DBBCBBEBCAC9ECC9C7ECC9C7E3BEBCAD92909F88
+ 87A18987877473947F7E8E7878C4A6A5897372F4CCCAE3BCBBEDC5C3E7C0BEDA
+ B6B4403534BE9C9A62504F7F6B69F2CBC9EEC4C29379788B7472CCA7A57B6463
+ CAA8A5786462796564C4A5A48D7574866E6C786261977B7A816B6AA48B8A9B83
+ 827864638772717F6968D0AFADC5A8A69C84827B6766EBC7C5E1C1BEDCBAB8E5
+ C3C1DAB8B7E6C3C1DFBEBDE2C2C0E4C4C2DBBCBADEC0BEDCBEBCE5C8C6DFC3C2
+ E8CDCCF3D8D7E6CAC9DABDBBE5C9C8DBBFBEE8CECCD9C0BFECD3D3DEC6C5E6CE
+ CDDFC8C7E1CBCBE4D0CFDDCACAEBD8D8DFCCCCE1CDCCEDD9D9E7D2D1DCC7C6DE
+ CAC8D8C4C3E0CBCADCC7C6EBD8D7DECAC9E0CDCCEDDBDAE6D4D4DBCAC9E0CFCE
+ DECCCCE4D2D3DAC8C7F2E0DFF3E0DFE9D7D5D8C5C5E0CDCDDAC8C7EBD9D8EDDB
+ DBDBC9C9E1CFCFE1D0CFE1D0CFD7C6C5E6D5D4E0CFCEDFCECEECDAD9766D6D00
+ 00006D6363F4E0DFF1DEDDECD9D8DBC8C7E0CDCCF2DEDCECD9D7EFDBD9EAD5D4
+ E3CECDECD8D7E3CECDF0DBDAE5D1D0E7D4D3E7D3D3DAC6C5E1CECDE7D3D3D7C3
+ C2EDD8D7E5D2D1E1CCCBE9D4D3EAD5D5E8D3D3EAD6D6E2CECDE8D5D4E6D1D0E9
+ D4D3E9D4D4E9D3D2EAD4D2E5CECDE6D0CFE9D2D1E3CCCBE7D0CFE6CECDE3CBC9
+ E5CBCBE0C7C6E3CAC8E8CECDE9D0CFE8CECDE3C8C7EFD5D4E8CFCEE8CECDEFD3
+ D2ECD0CFEED1D0E4C8C7E2C7C6E9CECCDEBFBDEACAC8EACDCBE9CDCAEBCDCBEE
+ CCCAEECDCAF2CFCDF0CBC9CCACAA9E8887B19896907B7AE0C0BF5A4D4CC6A7A6
+ 816C6BFAD0CFEBC4C2EDC4C2F6CDCBB19493796463A28785625050B89897D0B0
+ AFFACFCDBA9A99A38786ECC2C07E6766CFADAB8F7877A68C8BCBABA9CAA8A595
+ 7A78967B7AA88A88BA9B9A665655806C6A9E8483A38986917978DCB9B7BB9E9C
+ 5C4D4CC4A5A4EFCCCAE9C6C4EBC7C5EFCCCAEAC8C6EFCDCAEAC9C7EACAC8EFCF
+ CDECCDCBEBCCCAE8CAC8EDCFCEECCFCEF0D4D3F1D4D3F0D3D2ECCFCEE9CDCBEB
+ D1CFE7CECDEAD1D0EDD3D2EAD1D0EDD5D4EAD4D3EBD6D6EDDADAE8D4D4ECD7D7
+ E7D3D2ECD7D7EED8D9F0DAD9ECD6D5E3CECDE5CFCFEAD5D4EBD6D6F1DDDCE9D6
+ D5EBD9D8F1DEDEEDDBDAE9D7D7E7D6D6E5D5D4E6D5D5E5D3D2EBDAD9E7D5D5F0
+ DEDDE6D3D2E7D5D4ECD9D8F3E1E0F4E3E2E6D5D4E7D5D5EDDCDBECDADAE9D8D7
+ EEDDDCE6D5D4EBDAD9F9E7E6786F6E000000736969FFEDECEAD7D6F3E1DFE4D2
+ D0E5D1D0F5E2E1F5E2E0F0DCDAF2DEDCE7D3D1F3DFDDE4CFCEECD7D6EDD9D8EF
+ DBDBEDD9D8DFCBCAD9C5C5DBC7C7DAC6C5EAD7D6EBD6D5E8D3D2E9D4D3E7D3D2
+ EDD8D9EED9D9E8D2D2E8D3D3E0CBCBE4CFCDE1CCCBE4CECEE8D2D1E8D1CFE9D2
+ D1EAD4D2E9D2D0EBD4D2EDD5D4EBD2D1EAD1CFEAD0CFE5CCCAEAD0CFECD1D0ED
+ D2D1EFD3D3F1D6D4E9CECDE9CECEEDD2D1EBCFCDEFD2D1EACCCBDDBFBEDEC2C0
+ E0C3C2EAC9C8EECCCAEBCDCBEBCCCAEECCCAEDCBC9F2CFCCF6D1CFAF94935C4E
+ 4DCAADAC96807FAB91909C8483A08786816C6BAB8E8DF4CAC8EBC1BEF8CBC988
+ 7170AC8E8DB19290715B5BF4C8C6A68B89F6CBC9C09F9E87706FD5AEAD796260
+ 997F7D8D7574EDCCC8B79896AA8D8B7C6564DCB3B1987E7C9C8382B899978C75
+ 74846E6CD5B1AF927B78DBB7B5846F6D8C7675AF9493EBC8C6E8C2C0EAC7C5F1
+ CECBF2CECCE9C6C4EDCBC9E8C7C5EACAC8EBCCCBF0D1D0ECCFCEEBCFCEE8CBCA
+ ECCECDE9CDCCECCFCDEED1CFEED2D0F3D9D7E6CCCBEACFCEE3C9C9E7CFCEEAD4
+ D3EED9D8EDD8D7ECD8D6ECD8D7ECD7D5ECD7D5EED8D7EFD9D8EFD8D8F1DADAEA
+ D4D4EAD5D4E2CDCCE6D1D1E9D4D4E5D2D1E6D3D3ECD9D9EAD8D8E9D8D7EADADA
+ E8D7D8E1CFD0DDCBCBEBD9D7E5D3D2EFDDDCEBD8D8EDDCDBEBDAD8EFDEDCF0DF
+ DDE7D6D4E5D4D3D9C7C7E7D6D5F0DEDEEEDDDCE3D2D1E1CECDE5D1D0766D6C00
+ 00007B7171FFEFEEEDDBD9F2DFDDEAD6D5E1CDCCF0DDDCF2DFDDECD7D6EDD9D8
+ E8D4D3EDD9D8E7D2D1E8D3D2DFCBC9E8D4D4EAD5D4E0CCCBDFCBCAE4D0CFE8D4
+ D3E9D5D5E7D2D1E8D3D2E9D5D4E6D2D2EBD7D6EED9D9ECD7D6EFDBDAEFD9D9E8
+ D1D0EDD6D5EAD4D2EBD6D4E8D2D0E8D0CFE8D0CEEAD1D0E7CECDEFD5D5ECD3D2
+ EBD3D2EED4D2EBD0CFEED3D1EFD3D3EBCFCDE7CBC9F1D5D3E8CCCBE3C7C6EDD1
+ D0EBCECDEDD0CEEFD0CEE9C9C7E9CAC8EDCFCEECCECCEBC9C6EBC9C7E6C6C3EB
+ CAC9E6C4C2EAC6C4EEC9C7D8B6B57C6867E1BFBDECCAC8E2C0BDF2CDCBE8C3C1
+ E9C2BFE0BAB8F4CAC8F4C7C5F2C5C2685655E1BAB7987D7C5A4948F0C5C2B699
+ 97D3ACAAEABFBDD3AEACEBBDBAE6B8B5E3BBB9EAC2C0F6D1CDEFC4C2D9B2B082
+ 6A68EBBEBBE9BFBCE1BBB9F1C8C5E4BDBBE4BDBAECC4C1E6C1BEE4BEBCE2BBB9
+ E7C3C0E0BEBCEFC9C6E9C4C0EFCAC7F1CDCAF3CECCECC9C7ECCAC9EDCCCBEDCC
+ CBEECFCEEED0CFEACCCBE9CBCAE9CCCAEDD0CFECCFCDF2D5D3F3D6D4EFD3D1F2
+ D5D4ECD0CFEFD4D3ECD3D2ECD6D5EBD6D5EDD7D5EBD4D2E9D2D1E5CFCFE7D1CF
+ E7D0CFEAD2D1EED7D6ECD5D4EBD5D4E9D3D2EED7D7EBD6D6EDD7D7EDD9D9EAD6
+ D6E8D5D4ECD9D8E9D7D7EBDADAECDBDBECDBDBE5D4D3E5D3D2ECDADAE6D4D3F1
+ DEDDF1DEDEF0DEDDECDAD9EDDBDAF3E0E0E9D7D6E6D5D4E2D0CFEAD9D8E3D2D1
+ E7D5D5F0DFDDE8D6D5EEDBD9746B6B0000007C7272FEEDECF1DFDEF3E1DFF0DD
+ DBEED9D8E8D5D3EAD6D5EFDBDAEFDBDAEDDAD9F2DEDDECD8D7F5E1DFEFDBD9EF
+ DCDAEFDBDAF1DCDBE1CECCE6D1D0F0DBDAEFD9D9EBD6D5E8D3D3E6D1D1E4D0D0
+ E8D3D3EBD5D6E8D3D2F0DBDBF0DADADFC8C7EDD6D5EED7D6EED8D6EBD4D3E8D1
+ D0E7CFCDEBD2D1E4CCCAEDD5D3E9D1D0E8CFCEECD3D2E7CDCBEACFCDF0D4D2ED
+ D0CFEACDCBF1D3D2EFD1D0E8CBCBEDD0CFEED1D0E2C4C2E8C9C7E6C6C4EBCAC9
+ EFCFCDEFD1CFECCDCBEDC8C6ECC9C6EFCFCDE4C2C0E2BDBBE3BEBCF4CCCAAC8F
+ 8ECDABAAE8C4C2F1CBC9EDC7C4F2CCCAF3C9C6F5CAC7F6CAC7F6C8C5D1A8A554
+ 4544ECC2BF5E4C4B9E7F7D9B7F7DE3BDBB967B79ECC1BEC9A6A3F1C2C0F5C4C1
+ F0C4C1EFC6C3F0C9C6F1C4C1F5C6C4836967D7ADAAEFC4C2ECC4C2ECC3C1EBC3
+ C0ECC2C0EAC2BFEDC5C3EAC1BFECC4C1F2CECBF2CBC9F3CDCAF2CDCAF1CAC8F6
+ D0CDF7D1CFF4CFCEF0CECBEFCDCCECCCCAF0D1D0F3D5D3EECFCEF0D1D0F0D3D1
+ F1D5D3ECCFCDEFD2D0F2D6D3E3C7C4E0C4C3E2C7C6EAD2D0E9D3D2EBD5D4ECD5
+ D4EED6D5F2DAD9F3DBDAF1DAD9F3DBD9F1D9D8EFD8D6F2DBDAF0D9D8EED7D6ED
+ D6D5F1DBDAEBD5D4F1DBDAF3DFDFEAD7D7EBD7D7EFDCDCE8D6D6E9D7D8ECDADB
+ EBDBDBE7D5D4E7D5D4EBD9D8E7D4D3EEDCDBEEDCDBF1DFDEEEDCDBF0DEDEF2E0
+ DFEDDCDBF2E0E0F1DFDEF3E2E1E7D5D4F2DFDEF9E5E4F8E5E4FFEFEE766D6C00
+ 0000766C6BF8E4E3F4E0DFF3DFDEE2CFCDE5D1CFDFCBC9DBC7C7E4D0CFF2DFDE
+ E5D1D0EDDAD9E1CECDE7D3D1E5D0CFE2CFCEEAD6D4EAD6D5DAC5C5DBC7C6E6D2
+ D1E8D3D2F0DAD9E4CFCFECD7D7E1CCCDE3CECEEDD9D8E5D0D0E2CDCCECD6D5D9
+ C2C2E6CFCDE7CFCEE8D1D1EDD5D4E2CCCBEAD2D1E6CDCCDFC7C6E2CAC9E2CAC9
+ E8CFCEE5CCCAECD3D1E4C9C7E9CDCBF2D6D4ECD0CFE5C8C6EACDCBEBCDCCE1C3
+ C2E6C8C6DEBFBDE6C8C6E3C4C2DEBDBBE8C6C4E4C2C0EAC9C7EAC9C7E5C0BEEF
+ CBC9E9C8C6E7C3C1DEB8B5E7C0BDE9C2BF9B7F7EC5A2A0F0CAC8E5BDBBEEC6C4
+ E9BFBCE4B8B5E7B9B6EDBEBBB58F8D8C6F6DDAB2AF8A6E6CBE9492997876DBB4
+ B2987A79CFA7A4F3C4C2EFBDBAF5C3C0ECBFBCEEC5C1E8BFBCEABBB9F2C3C099
+ 7977D6ACA9F2C8C6EDC4C2ECC4C1E5BBB8E3B9B7E4BCB9E9C0BDE8BEBCE0BAB8
+ E6BFBDEDC6C3EBC4C1E6BEBCF0C9C6E6BFBDEAC5C2E5C2BFEBC7C6EFCDCBEDCD
+ CAE3C3C2E5C4C3EBCCCAE3C3C2E7CAC9EACDCCE9CBCAE4C6C4EDCFCDEDD0CEEA
+ CFCDDDC5C4E5D0CEECD5D3ECD4D3E8D0CEE3CBCAE9D0CFEDD5D3E6CDCBE6CDCB
+ ECD3D2EDD6D4E9D1D0E6CFCEEDD5D4E7D1D0E7D1D0DFC8C8E0CBCAEED9D9E0CC
+ CCE7D4D3E8D6D6E8D5D5E3D2D1EBD9D9E5D3D3EAD7D5EDDBDAF0DEDCE2CFCEE6
+ D3D2EDDBDAE6D4D3E1CECEE3D1D0F3E1E0E4D2D2E3D1D0EBD9D9F1DFDEDBC8C7
+ E5D2D0E9D7D5EAD8D7F6E4E36F66660000007C7372FFEAE9F5E2E1D8C5C4DDC9
+ C7DECBC9DDCAC8DFCBCAD4C1BFEBD8D6D5C0BFE5D1CFDAC6C5EDD9D6E3CECCD3
+ BEBDDECBCADECBCADECBC9DCC8C7E1CCCCDAC5C4E6D1D1DEC9C9E9D4D4DDC9C9
+ E1CDCCE1CDCCE5D1D0DEC9C7ECD6D5DCC6C5E9D2D2EAD2D1EAD2D1E5CDCCD8BF
+ BEEAD2D1E3CBCADDC4C4E0C8C7DCC4C2DFC6C5E4CAC9E0C6C4DEC4C2DCC1C0E2
+ C6C4DEC1BFE3C6C4DFC1BFEACCCADBBCBAEACBC9DFC0BFE9C9C7E5C5C3E1C0BE
+ E9C6C4DAB4B2E7C2BFDEBEBCE0BFBDE2BCBAE6C2C0E0BEBCE4BEBCEBC3C1F1C8
+ C5EDC1BFDEB1AFEBC1BFE0B8B5EDC3C0E3B9B6EEC2BFDFB0ADF1C1BDE8B4B1F6
+ C1BDFACAC7FCCAC6E4B0ADF7C0BCF5C7C4F1BEBBEEBDBAE4B7B4E8B4B2E9B6B3
+ E1B2AFE3BAB7E5B9B6EABAB7F2C1BDE6B2AFE3B5B2F0C5C2F1C6C3E9BEBBE3B6
+ B4E9BEBCDFB6B3EDC1BEE2BAB7E6BFBCE1B8B5ECC3C0E6BDBADDB3B0EBC3C1E4
+ BDBBE1BBB9E6C1BFE0BDBBEFCECCF0D0CEE1C0BEE1C0BFECCDCBE1C3C2E6CAC8
+ E3C6C4E2C2C0E0C1C0E5C8C7E4CBC9DEC6C4E4CCCBE9D2D0EED6D5DDC5C4CBB4
+ B3E4CAC9DEC4C3E8CFCDDDC4C2E7CECCDEC6C4EDD5D4DAC2C1DAC3C1E5CECDDD
+ C6C5E9D3D2D8C3C3E6D2D0E1CCCCDFCBCAE1CECDDECBCBE6D3D3DECCCCEAD8D7
+ DBC7C6E7D5D4EFDCDBF1DEDCD8C4C3E4D1D0DECBCAE4D1D0DCC9C8DBC8C7EBD8
+ D7D9C6C7E1D0CEDDCACAECDADAD4C2C0ECD9D8D9C7C6E2D0D0E8D5D469606000
+ 00007D7272F4DFDEF0DEDCD0BDBBDFCBC9E0CDCCE0CDCCE0CCCBDECBCAECD8D7
+ D7C3C2E7D4D3DECBCAEBD7D6EDD9D8D4BFBDDAC5C4ECD9D8E4D0CFE0CCCCEBD7
+ D6D9C5C5DDCAC9E3CFCEE2CDCDDECAC9EAD5D4DDC8C8E1CCCBE0CBCAEBD6D5DB
+ C5C4ECD6D4F2DBDAEAD2D2DDC4C3E0C7C6E4CCCAE3CAC9E2C9C8E5CCCBDAC2C0
+ E0C6C5EFD4D3DEC3C2ECD1CFE3C8C6DEC2C0DDC1BFEED1CFDEBEBCE4C4C2DBBB
+ B9EBCCCADFBFBDE5C5C4E2C2C0E6C5C3EFCCCADCB7B5E8C2BFE1BDBBEBC9C7DE
+ BCB9DEB7B5ECC7C5EAC7C5E8C2BFEFC6C3EBC0BDDEB0AEE2B4B1E5BCB9ECC0BD
+ E1B5B2F2C5C2E1B1AEF4C2BFE2AFACEFBAB7F7C5C2F2C1BDE1ADA9EAB3AFEEBE
+ BAE5B3B0EDBBB8E8BAB7EFBAB7EAB6B3E8B8B5EBC1BEE5B7B4EEBCB9ECB7B4E0
+ AEAAE1B4B1EBBFBCF3C6C3E5B7B4E3B5B3EDC1BFE0B3B1EEC3C0DEB6B4EEC2C0
+ E6BAB7EABFBCE9BDBAE0B4B2E5BCBAE3BCB9E9C2C0EDC9C7DEBCBAF0CDCCF0CE
+ CDE4C3C2E6C7C5ECCFCDE3C7C5E5C9C7E7C8C6EDCECCE5C9C8DEC3C2DCC4C3EC
+ D3D1E8CECCE3CAC8EFD5D4C6B0B07A6C6BC6B1B0E2C8C7E3CAC8E0C7C4EED5D3
+ DDC4C2EDD3D1DFC6C5E6CDCCE9D2D1E0C9C9EFDBD9DDC9C8EAD6D6DDC8C8E7D3
+ D3E3D0CFE1CDCDEDD9D9E0CDCDECD9D8DDC9C8EAD8D7EEDAD9F0DBDAD8C4C3E8
+ D5D4DDCAC9ECD9D8E3D1D0DECBCBE1CECDDBC8C7EDDBDAD5C3C2E2D0CFD5C2C0
+ EDDBDAD9C7C5EBD9D8E9D7D66A6261000000786F6EEFDAD9E9D7D5E2CECDDCC9
+ C8DECCCBE6D4D3E4D2D1DBC9C8E4D3D2DACAC9E6D5D4DECCCCDFCDCDE1CFCEDE
+ CBCAE2CDCCDAC5C4E8D3D2DBC7C6E1CDCDE1CFCEE0CDCCE2CFCEE0CCCCDECAC9
+ E8D3D3DDC9C8E3CECEDDC8C8E2CCCBDBC4C4E7D0CFF1DAD9E5CDCCDAC3C2EAD1
+ D0E1C9C8DFC6C4DFC5C4E0C6C5E3C9C8DAC0BFE4C9C8E6CBC9DFC3C2DCC0BFF0
+ D3D1E1C5C3E1C3C2E3C4C2E2C2C0DABAB9E0C0BEDEBDBBE6C5C3DCBBB9E7C5C3
+ E7C4C2DBB7B5EDC7C6E3BEBCE3BEBCE4C1BFE7C3C0E5BBB9E0BAB7E3BFBCF3C9
+ C5E9BDBBE0B3B0EABBB8DFB1AEF2C7C3E7B9B6E8BBB8E2B0ADEAB6B3E1ADAAEE
+ B7B4F8C3C0F5C3C0E3AEAAE2A9A5E8B4B0E4B1ADEAB6B2E6B6B3E8B1AEE6B1AE
+ E5B5B1E8BDB9E3B2AEE7B3AFE5AEABE7B4B0E4B6B3E8B9B6F4C5C3EFBFBCE4B6
+ B3E6B8B5E1B2B0E7BCBAE0B3B0F1C3C1E2B7B3EABEBBE6B9B6E5B9B6F1C7C5E0
+ B9B6EDC7C5E4C0BEE9C5C3F8D4D1EDCBC9E0BFBEE2C3C2E4C7C5E3C5C4EBCCCA
+ E3C5C4ECD1D0E3CAC8EAD1CFEDD2D0EACECCE1C5C3E5C9C8EBD0CEEED3D2EBCF
+ CD948281B49F9EE4C8C7E2C7C6ECD1CFDEC3C1E2C8C6E2C9C7E5CCCBE7CFCEDF
+ C8C8E2CDCDDDC8C8EBD7D6DDC8C8E3CECDEDD8D7DECAC9DFCBCBDDC9C8E4D0CF
+ DECBCAF3DFDEF8E4E2E7D1D0D5BFBFE3CFCFE5D3D3DFCDCDDECCCBDDCBCADAC7
+ C6E1CFCFE9D7D6D8C7C6E1CECDD2C0BEE3D1D0E0CECCDECCCAE7D4D46C646300
+ 0000736968FAE6E4E5D2D0F4E0DEEEDCDBEDDCDBEEDDDBECDBDAE5D5D5E3D3D3
+ E9D9D9EBDBDBE5D4D3ECDCDBE8D6D6E6D4D4E6D2D1E3CECDE5D0CFE5D1D0E4D1
+ D0E8D5D4E9D5D5E9D6D5E0CCCCE2CECDE8D3D2DECAC9EFDAD9EED9D8EDD6D5EE
+ D7D5ECD4D3EED6D6EBD2D1EBD4D2ECD4D3EAD2D2E8CFCEE5CBCAE5CAC9EED2D1
+ E9CECBECD0CEF3D7D5EDD0CEE6C9C7F0D3D1E4C7C6EBCECCECCFCDEED0CDEDCE
+ CCE7C7C5EECCCAEECCCAEDCAC8EAC8C5E5C3C2E5C3C1E7C3C1EAC6C4E9C4C1EB
+ C4C2ECC9C7EAC4C2E9BEBCEBC4C1F2CCC9EEC3C0EBBDBAF2C2BFE1AEABE8BAB7
+ EBBDBAEDBEBBF3C2BEF0BBB8F0BAB7EFB8B5F1BAB7F6C4C0EEB8B5EFB4B0F2BB
+ B8EEBCB8ECB6B2F3C0BCE9B0ACEDB6B2EDBCB7ECBFBBEEBAB6EDB6B3EFB7B4F0
+ BDBAF0C1BDF0C0BCF0BEBBF0BFBCF1C2BEF0BFBBF2C4C1E9BCB9EEBFBCF0C4C1
+ EEC0BDEBBEBCDBB2AFD9B1AEF2C8C5ECC3C1EBC5C3E8C2C0DFBDBCDFBFBDDFBF
+ BEE9CACAEACBCAEECDCCE9CAC8C5ACABDFC7C5EED5D4F4DAD8E8CECCBEA8A6BB
+ A4A3D1B7B5EACECCEED2D0E8CCCAEED0CE8474736F6261F9DCDBE5CBC9DAC2C0
+ D2BAB8D8C1BFD5BFBDC9B3B1E2CCCAEAD3D3E8D4D3F1DBDBEFD9D9CEBCBBCDBA
+ BADAC6C6EDD8D7ECD7D7EED9D9F0DADADFCBCAD8C5C3DBC8C7E6D1D1E8D5D4EB
+ D8D8EFDCDCEEDCDBEFDEDDECDBDBE9D8D8EDDCDBE8D6D6E6D6D5F3E2E0EFDDDB
+ ECDBD9F2E0DFECDBD9FAE8E7756D6C000000766C6CF9EAE8E6D4D2EEDBDAF1E0
+ DFEEDEDDEBDAD9EEDEDDEBDCDBE9D8D8EADBDAEAD9D9EBDAD9EAD9D8EAD9D8EA
+ D8D7E5D4D3E8D4D3E5D1D0EBD8D6EBD7D7E8D4D3EAD7D6ECD8D8E8D4D3DECAC9
+ DBC7C6E4CECDF1DCDBF1DDDBF0D9D8EFD7D6EDD5D4ECD3D2E4CBCAEAD2D1E9D1
+ D0EBD3D2E9D1D0EAD0CFEACECDEED2D1E9CCCBEED0CFF0D3D1EED1D0EACECCF2
+ D5D4E5C9C7E0C2C0DEC0BFF1D3D2F5D7D5EFCFCCF2D1CFF0CECCF1CECDEBC9C6
+ E7C4C2E9C6C4E7C3C1EAC5C3EAC4C2E9C2C0ECC4C2EEC9C6EDC6C3EBBFBCEFC7
+ C5F0C7C4F1C4C0F4C4C1EFBCB9EDB9B6EDBFBCF0BFBBF4C3BFF0BCB8F5BEBAF1
+ B8B5EDB3AFF3BEBAF3BDBAF1B6B2F1B8B4F0BCB9F1B9B4F5C2BEF2B7B3F4BBB7
+ F1C0BCEDBFBBF0B9B6F0B6B3F0B7B3EBBAB6F1BFBCF4C2BEF5C1BDF1BFBCF2BF
+ BCF4C2BEF4C6C3ECBCB9F1C2BEF2C3C0F5C5C2D9AFAD463938876F6DE7BFBCE8
+ BEBBEEC6C3F2C9C7987F7E1F1B1BBBA2A0EDCCCAF3D1CFCEB1B05F5453AB9997
+ ECD1D0F6DAD9B29D9D49403F897876C7AFAEC0A8A7AE9998DEC4C2F3D6D4ECCE
+ CC7C6B6A6F6261FFE5E4DCC4C24B43425A514FAD9B9AAA98977C6F6E605756E8
+ D2D1FBE5E4C6B4B4857978948686A697979185847A6F6EEAD5D4F0DAD9F0DAD9
+ C8B5B4423C3B5E5454E2CFCEF2DEDDEEDBDBE6D4D4EDDBDBF2E0DFEEDDDDEADA
+ D9EAD8D8E9D8D7E6D5D4F1DEDCF0DEDDEEDDDBF1DFDEF1DFDEFBEBEA78707000
+ 0000776E6DFFF3F1F1DDDCEEDBDBE9D8D8EEDDDCEDDCDBEADADAECDDDCECDCDB
+ EDDCDCE5D5D5E9D8D8E9D8D8E9D8D8E7D6D6E9D8D7EAD8D8E3D0D0EBD7D6EDD9
+ D9EBD7D6EDD9D8EDD9D9EDD9D8F0DBDAECD6D5E9D3D3ECD7D7F0DBDAF1DBD9F0
+ DAD8EFD8D7F0D8D7E9D1D1EED5D4EBD2D1EAD0D0ECD1D1E8CECDE8CCCBF2D7D5
+ E9CCCBE7C9C8F1D4D3ECCFCEE7CAC9EFD3D1EACCCBECCECCEFD1CFEBCCCBF0D2
+ D0F1D3D1F0D0CEEFCDCCF0CDCCECCAC7EBC7C5E7C3C2E7C2C0EBC5C3E9C5C2E9
+ C2C0EBC3C0EDC3C0EDC5C3EBC1BEEDBEBCF0C7C4EBC0BCEFBEBBF1BFBBEDB7B4
+ ECB9B6F0C0BCF2BFBCF0BCB9F2B9B5F2B8B4F1B5B1F2B8B5F0BAB6F1B4B0F3B4
+ B0F1BBB8F2B7B3F1BBB7F0B3AFF1B7B3F4C2BEEFBEBAEFB6B2EFB2AEF0B7B3EC
+ B9B6EEBAB7F2BDBAF8C3BFF6C3BFF1BBB8F3C3C0F5C4C1F0C0BCF2C2BEF1C0BD
+ F4C4C2F7C7C45B4948B89896FFD4D1EBC1BEF1C8C5EEC4C2DDB9B73C3333E8C5
+ C3F3CFCCD7BAB8342E2DA28F8EF9DAD9F5D7D5BDA5A5282222BEA7A5FDDDDBF4
+ D5D3F9DBD9E5C9C78F7D7CE2C7C6F8DAD8806F6E726463FDDFDEFEE1DF706463
+ 8F807FFFEAE8F7DDDBFCE3E1A39392D1BCBBC8B5B5453F3FC5B3B2F9E3E2F8E2
+ E1FAE4E38B7F7FD0BDBDF7E2E0F1DBDAFFE9E7756A69817575FBE5E4F0DCDCEE
+ DCDCEEDCDBE9D8D7EDDCDBEFDEDDF0DFDFF3E1E1F1DFDEEEDCDBF7E4E2F0DDDC
+ F0DEDDF2E0DFF3E1E0FFF0EE7971710000007B7170FFF4F3EFDBDAECDAD9EFDF
+ DEEDDCDBF0DFDEECDCDCECDCDCEEDEDEEFDFDFEEDDDCEDDCDBEDDDDCDFCCCCD9
+ C8C8E7D6D6EDDBDAE5D3D2E9D7D6EBD7D7EAD7D6E9D5D4EBD6D6E6D2D1EBD6D5
+ EDD7D7E8D2D2E9D2D2EED8D7E9D2D1EED7D5F4DDDBF3DCDBEFD7D6F1D9D8F4DB
+ DAF2D8D7EDD2D0DFC3C1DFC2C1E4C7C6EDD0CFECCFCEF4D8D7F2D5D4EFD0CFF1
+ D2D0E8C9C7EDCECCF2D3D2EECFCDEDCECCECCBCAEDCECCEFD0CDF2D1CFEECCCA
+ EDC8C6E9C4C1E8C3C0EFC7C5ECC4C1EDC5C3EDC5C3ECC1BFEDC1BFEFC6C4EEC3
+ C0E9B9B6E1B7B5E3B4B1EEBAB7EFBAB7EBB3AFF1BEBBF0BBB8F3BFBCEFB7B3F1
+ B5B1F2B3AFEEB0ACE6AEA9EEB1ACF2B0ACF2BAB6F3B6B2F1BAB6E4A4A0EBB0AB
+ F5C4C0F3BFBAEEB1ACF1B0ACF4BCB8EFBCB7F0BAB5EEB7B3F1BCB9F1BBB7F0BC
+ B8F0BEBBE9B5B2E3B1ADE8B5B2E2B0ADF3C3C0F6C7C4594847A58987E6BEBBE4
+ BDBAFCD2CFECC4C1D8B5B2413736ECC8C6F3D2D14C4443827170F2D3D0E4C4C2
+ F1D0CF4C4342877675FFDEDDEED0CEEDCECCEED0CEFCDCDA958281958382FFE9
+ E78A7978706261FEE2E0FFE4E27366658B7C7BFFE3E2F1D7D7F2DAD9F2DAD9EC
+ D4D3554C4DA89897F9E2E1ECD6D5EDD8D7F0DBDAEFD9D8EFDAD9F3DDDCF5DFDD
+ FEE9E7746A69857A79FDE9E8F3DFDEEFDCDBE8D6D6D8C7C7E3D2D2EEDCDCE9D9
+ D8EEDDDDF1DEDEEAD7D6EDDAD9F0DDDCF1DEDDEBD9D8E6D4D2FDEAE8766D6D00
+ 00007E7573FBECEBE1CECDE2D1D0EBDAD9DFCFCEE4D5D4EADBDAE4D4D4E9D9D9
+ E0CFCEE1D1D0E0CFCFEEDDDDE1D0D0DECDCCE7D6D6E0CECEE0CFCEE7D4D4DFCC
+ CBE1CDCDE8D4D4ECD7D7E1CCCCDDC8C8E6D1D0ECD7D6E2CCCCE3CCCBE0C8C8ED
+ D5D4E3CBCAE5CDCDE5CECDE1C9C8E3CBCAE4CAC9F1D6D4EDD0CFDDC0BFDABCBA
+ EDD0CFEACDCCE6CAC9E2C5C3E7CAC8EBCCCAE0C0BEE0BFBDEBCAC9EAC9C7DEBE
+ BCE3C2C1DCBBB9E5C5C2EACAC8E2C1BFEBC8C6ECC7C5E7C0BEE1B9B6E3BAB7EA
+ C1BFE7BEBBEDC3C0E6B9B7E7B9B6E7BEBBEEC3BFEAB9B6E0B5B2E9B8B4F4BEBA
+ EEB5B1E9AFABE7B3AFECB6B2F4BDB8F4B6B2F3B3AEEFACA7E7ACA7F3B5B1EBA5
+ A1EBB1ACEEAFAAF3BAB5E7A39EF0B3ADEEBEB9EAB1ADEBAAA5F6B4B0EEB7B3EA
+ B3AFF4BAB6EEB5B1E8B0ADF4BCB8E8B6B1E7B2AEEBB7B4E6B1AEEDB9B5E2B0AD
+ EDBDB9EFC1BE55454476605EA58684826B69B09492F0C6C3D4AFAC3D3433BCA3
+ A16E6160514646FAD8D6E7C6C3E0BDBCD7B9B7332D2CD9BCBBE7C8C6E5C5C4E3
+ C3C1DEC0BEF2D3D2A993925F5251FEE3E18C7C7A675958EED1CFF5D8D66B5E5D
+ 726362DAC0BFCFB8B7877978D5BEBED9C2C23E3837E3CCCBE3CCCBDCC6C5E2CC
+ CBDDC8C7E9D4D3E9D4D3E0CAC9F4DEDDEDD7D66A605F857978F6E1E0E1CECCE2
+ CFCDEBD8D7DCCACADDCACBE5D3D3DECDCDEAD9D9E1CECDDECAC9D9C5C3EBD7D6
+ E6D3D2E2D0CFEAD8D6E8D5D46C63630000006E6564E1CCCAE1CFCEDFCECDD9C8
+ C8D8C8C7E5D5D5DECFCFDFCFCFE2D1D1E2D1D1DCCBCADAC9C8EAD9D8DDCCCCDF
+ CFCEE5D4D3DDCCCBE6D4D4E8D5D5DBC8C7E5D2D1EAD6D6E5D1D0DFCAC9E8D3D2
+ DDC7C7E8D3D3DEC8C7ECD4D3DCC5C3EDD5D4DDC6C5E9D1D0DEC6C5E1C9C8DFC5
+ C4E2C7C6DABFBEDCC1C0E1C5C3E7CAC8EFD2D1E5C9C8DCBEBDE3C6C3EED0CFE2
+ C2C1E6C6C5E3C3C1E5C3C1E7C4C2E0BDBBEDCCC9DCBAB8EBC9C7E6C4C1DCBBB8
+ EBC9C7EFCDCBEBC4C2DEB5B3E6BCB9E8BEBBE6BBB8E8BEBBE7BBB8EBBCB9E4B4
+ B1E7BBB9E5B6B3E8B6B2F0C3C0F3BEBAEEB5B1E4A6A2ECB3AFE5ADA9EFB7B3F5
+ B7B3F5B2AEEBA4A0E7A5A1F1B2ADEAA09CF0B3AEF3B1ACEFB1ADE8A29DEFB2AE
+ EEBCB6EEB0ACF0ABA6F3B1ACE7AFABE8ADA9F3B7B3E7AEAAE5A9A5F3BDB9EAB3
+ AFE8B1ADECB5B1E9B1AEF0BBB7E7B4B1F0C0BDE4B6B3534341AE8C8AFFD2CFE5
+ BDBB4C3E3DA48684D8B7B4352E2DB39A98B298978B7675A38A89EBC7C5ECC9C7
+ D3B6B4403736DDBDBBE1C0BEE8C8C7E9C9C8D9BAB8EBCDCB9581804E4444FCDD
+ DB8C7B7A635655F0D2D0ECCECC665958564B49A99594A491904F4645CCB6B6C7
+ B1B03C3635E3CCCBE0C9C8E0CBC9E1CCCADAC5C4EAD5D5DAC5C3D7C2C1E7D2D1
+ E8D2D16D6463817474E5CFCEE5D1D0DDC9C8E0CCCBE1CECDE5D3D3E6D5D4D9C8
+ C7E3D1D0DCC8C7E7D3D2D4C0BFEDD9D8DCC8C7E6D4D3E4D2D1F0DCDB776E6D00
+ 0000706665DFCAC8EAD8D7E3D2D1DFCECDDCCBCAE8D7D7DFCFCEE3D2D2E2D2D2
+ E3D2D2DFCDCDDECDCDE2D1D0DDCCCBDFCFCEDECDCCDFCDCCE2CFCFE3D1D1DAC6
+ C5EAD6D5EBD7D7E3CFCFDFC9C8EBD6D5DFC9C9E5D0CFDDC7C6F0DAD9DAC3C2E6
+ CECDDBC3C2E6CECDDBC4C3E7CECDEED4D3E2C7C6D9BEBDE2C6C5EDD2D0E2C6C4
+ EDD2D0EFD3D3DEC1BFDEC0BEE7C7C6DFBFBDE4C4C2E3C3C1DFBFBDE1C0BDE1BE
+ BCEAC6C4DBB7B5E8C5C2DFBCBAE0BDBBE2BFBDF0CDCAEDC8C6DEB6B3E7BCBAE7
+ BBB8E7BAB7E9BCB9E8BCB8EDBFBCE4B3B0E6B3B0EDC0BDE9B9B5E8B5B1F1C3BF
+ EBB2AFE5A8A4EEADA9E6ADA9EEB4B0F5B7B3EEA9A5E99F9AF0A7A2EAA8A3ECA0
+ 9BEEAAA5F1AEA8EBACA6EEA6A1EBADA8ECB8B3EEACA6F1A6A2EDAEA9EDB3AEED
+ AEA9F0B1ADE9ADA8E9AFABEEB5B2EBB0ACEAB0ACECB2AEE7AFABECB7B3E6B5B1
+ F4C3C0E6B5B2544342A98987EEC0BEFDCECA685554635655DFBFBD3C3231E3BE
+ BBF8D0CEE1BCBA4F4241C4A7A5EAC6C4E1BEBC655756CFB1AFDEBDBBDCBDBCE2
+ C3C2DBBCBAECCCCA534948786969FFE6E4897977635554F3D4D3EFD0CF645655
+ 837372F8DBD9EDD1D0D8C0BFE7CFCED5BEBD474040CFBCBAE2CBCAE0CBC9DEC9
+ C8DCC8C6ECD6D5E2CDCBE3CECDE3D0CEEBD4D36F6464817574E5CFCEEFDBDADE
+ C9C9DECAC9DCC8C7E8D4D3EAD7D7DAC7C6E4D1D0DEC9C8EAD6D5D5C1C0E7D3D2
+ D5C1C0E0CECCDFCCCBEEDADA746B6B0000006C6261E3CECDE6D5D4DBCAC9E0CF
+ CDDDCCCBE0D0CFDECECDE1D0CFE9D9D8DFCECEDAC9C9E3D1D2DECDCCE2D0D0E6
+ D5D5E0CECEE0CECEE0CDCDE2D0CFDECAC9EBD6D6E9D5D5E9D5D3E0C9CADDC7C6
+ E2CDCBE1CBCAE0C9C8ECD4D3DCC4C3E8CFCEE3CBCAE7D0CFEBD3D2E3CACAE9D0
+ CFE1C7C7EED3D2E6CBCADEC3C1DABEBDE7CBC9ECCFCEE1C5C4DFC2C0E4C6C4E9
+ C9C7E1C0BDE3C1BFE1C0BEE4C3C1E2C0BEE6C2C0E5C0BDE7C0BEE8C2C0E9C4C1
+ E5C1BEF3CECAEAC3C0DEB8B6E2BBB8E2B7B5E4B7B4EEBFBCE8B9B6E8B9B6EABB
+ B8EEBBB8EDB7B4EABBB7EBB8B5F1BCB8F1BFBBEAAEAAE9A7A3EDACA7F2B8B3F3
+ B6B2EEA9A4EBA09AF5A6A0EEA9A3EC9F9AEEA39EEEA8A2EDAAA4F4A7A2EEB0AB
+ EEB7B2EDA39EEDA09CECAFAAF1B3AEEFADA8EDAEA9EEAFAAF0B6B2EEB1ACECB0
+ ABEDAFAAEBAFABEDB5B1EFBBB7ECB9B6F5C1BEECBBB7584746AF8D8AF9CAC8E4
+ BFBC3A3231A98F8DDAB5B3392F2EE3BCB9F1C9C6E1BDBB322A2ABA9C9BE7C3C0
+ F4D0CEB59B9A937F7EECCAC8E8C8C6E8C9C7F2D1CFA6908F2C2626D8BDBCFFE0
+ DE877776695B5BF0D1CFFADBD96C5E5D7F7070F8DCDBE5CBCAF0D6D6C8B3B2E9
+ D1D09C8D8D7B6F6EEBD5D3E6D0CEDEC9C8E3CBCAB6A4A3E1CCCBEBD5D5EDD7D6
+ F4DEDD6A605F847877F1DBDAF4DFDEDFCBCAE7D2D2DECAC9E7D3D2E1CECDD8C4
+ C3EDD9D8E1CDCCDCC8C7DECAC9E0CDCCD6C2C1DECBCAEAD7D6EFDBD9736A6900
+ 00007A706FFDEAE9F3E2E1EDDCDBF0DEDDF4E2E1F4E2E1F2E1E0F2E1E0EFDEDD
+ F0DEDEE8D6D6ECDADAE8D6D6E4D2D2E8D6D6E7D5D5EAD8D7E6D3D3E9D6D5E9D4
+ D4EED8D9E9D5D4E8D2D2EBD6D5E9D3D3ECD5D4EBD3D3F1DBD9F1DAD8EFD7D6F0
+ D8D7F6DEDDF1DAD9F1D8D7EAD1D0E9D0CFEDD4D3EDD3D3ECD2D1E9CFCEECD0CF
+ EED0CFECCDCCEBCDCCEED0CFF1D4D2F2D4D2F0D1CFF4D2D1EDCAC8F4D0CEF1CE
+ CCF1CDCBF2CECBECC6C4F4CDCBF1C9C6EFC6C4F2C9C7F0C7C5EEC6C3F3CBC8EB
+ C3C1EDC3C0ECBEBBF3C3BFF2C1BDEFBDB9EFBEBAF3BFBBF2BAB6F4C1BDF3BDB9
+ F3BCB8F3BDB8F1B0ABF2AAA5F1AFABF1B3AEF7B3ADF6A8A3F5A29CF5AAA4F5A7
+ A1F6A6A0F7AFA9F5AFA8F4A59FF4B6B1F5B9B2F4A49EF1A6A0F1B3ADF3AFAAF1
+ ADA8F3B0AAF3B5B0F2B2AEF3B3AFF3B2ADF5B6B2F5BAB6F4BEBAF4BEBBF5C0BC
+ F8C6C2E6B9B6473838937977C4ABA9776665947B7AF7CBC9AB8C8B332A29B496
+ 95C1A2A16E5C5B8D7776F7D2D0F1CECCF2CFCEF5D3D0BDA3A2AB9492D9BCBBD3
+ B6B5907D7B584D4CC5ABAAF7D7D5EED0CE645757483F3FE1C5C4EBD0CE534949
+ 706363CBB5B4C3AFAEA59493817474EDD5D3F0D8D7A29190A89997D8C3C2D1BC
+ BB8E7F7E3D3737BBAAA97E7372C2B0B0CBB9B85C5353716766D1BFBFA89A987A
+ 706EF5E0E0EDD9D8ECD8D7E5D1D1E4D0CFE7D3D2EEDAD9ECD8D7F0DCDBEAD7D6
+ E6D3D2E4D1D0F1DEDDFCE8E6776D6D0000007B7271FFEEEDEAD7D6E4D3D2E4D2
+ D1EEDCDBE7D6D5EEDDDDF1E0DFEDDCDCF1DFDFEFDEDEF0DFDDEFDDDDEBD9D8EF
+ DDDCFBE8E8FDE9E9F8E4E4F7E3E3EEDAD9EFDADAEFD9D9EFD8D8FAE3E2F2DAD9
+ F0D8D7EED6D5F3DCDBEFD8D6F1D9D8ECD4D3F1D9D7F0D8D6F2DAD9EDD5D4EBD2
+ D2EBD3D2ECD3D3EFD6D5ECD2D1EDD2D1EBD0CFE2C5C4E8C9C7EBCBC9E9CBC9ED
+ CECCEDCECCF1D1CFE4C5C3EFCECCEFCBC9EFC9C7EFC8C6E7C1BEEFC8C6EEC5C3
+ ECC1BFEFC4C2D8B1AFE8BEBCF3C9C6EDC3C0F0C7C4EEC4C0F1C3C0F1BEBBECB7
+ B3EBB7B3F0BDBAF2BBB8F1B5B1F4BEBBF5BCB8F6BDB8F6BBB6F5ADA8F2A6A1F1
+ B0ABF5B3AEF6A8A3FBA39CFFA9A3FFB2ABFEA49EF9AFA8FCAFA7F5A29CFFC2BB
+ FFB8B2F9A09AF4ACA5F0AEA8F2ABA5F3ACA6F2AEA9F3B2ADF1ADA7F0ABA6F0AD
+ A8F1B2AFF1B8B4F4BAB6F7BDB9FBC4C1FFCBC7E8B8B5CCABA8D0B0AED7B3B0EE
+ C3C0FFD9D7FBCDCAECC0BEE5BBB9D0ADAAB99998D3B1AFF5CFCDEDCAC8E9C6C5
+ EBC9C7E5C3C2F9D6D4EAC9C8D0B3B2B19897BDA3A2EBCBCAF4D4D2F2D2D1E0C4
+ C3C5ADACC3ACABE1C7C6E6CDCBC9B3B2CEB7B7D0B9B7D1BAB9C9B4B3D8C0C0FB
+ E1DFF4DAD9FEE4E2EAD2D1CCB8B7AE9D9CB09F9DD9C4C3EAD3D2AE9D9DBEACAC
+ BEACACBAA8A7BCAAA9C3B1B0C1B0AFAC9D9BEAD7D6E9D6D5ECD7D6EFDAD9E6D1
+ D0EFDBD9F2DDDCF2DEDCF3DFDEECDAD8EAD7D6E3D1D0E8D6D5FAE5E4736A6900
+ 0000756B6BFFEDECF0DDDCEDDBDAE5D3D2F2E0DFE9D8D7E7D6D5ECDADAE4D2D1
+ EAD8D8EDDCDCEEDCDCF0DDDDE9D6D6E4D2D17F7575766D6C706767615A5A4842
+ 414D4646685F5F675E5D7F7372998A89CFBBBAF0D9D8EDD5D4EFD7D5EBD3D2EB
+ D2D2EED5D4EFD6D4EED5D4EED5D4E9D1D0EAD2D0EBD2D1ECD3D2EDD4D2F1D6D5
+ A89594827372F5D6D4EECECCEDCDCBEBCAC8E8C6C4F0CECCE7C4C2F2D0CEEFCC
+ C9ECC8C5E5BFBCE4BBB8EBC1BFEDC3C0EEC4C1EBC1BE5E4C4BDEB3B0F3C5C2EC
+ C0BCEEC3C0ECC0BDECC1BDEEC0BCF1BDB9EEB8B4F2BBB6F1BAB6EFB7B3EEB0AB
+ F3BAB6F5BAB5F7BDB8F9B8B3F4A59FF6A9A3FFBBB5F9ADA6D48882B5716C8E60
+ 5C784C49523A38442E2D68434081635FA06F6ACA7F7AEDA9A3FEB1ABF7AAA4F2
+ A7A2F4AFA9F4ABA5F3A9A4F2AAA5F1B0ABF1B6B1F3B7B2D5A19EA7817E866765
+ 7F63617C6765816E6D816A697D656478615F786260826968967A78B69492EAC3
+ C1F4CCCAF4CECBEDC9C7EFCCC9ECC8C6F0CDCBF6D2D0D1B3B1AE949389767573
+ 6261796867B89F9EDDC0BFB59E9DA08D8B8E7C7C837473786B6B837574887978
+ 7C6E6D786A69776A69776B6A6F6363665B5A6156566359586C61617B6E6E8D7E
+ 7EA09090BFACABE4CECDFFECEBF8E1E0F3DDDCF5DFDEF6E0DEF4DDDCF9E2E1F0
+ DAD9F2DDDCF2DDDCECD7D5EAD5D4E3CFCEE7D2D1ECD7D6F3DEDDF2DEDDF5E2E0
+ EDDAD8DFCCCAE2CFCEFEE9E87B7271000000766D6CFDECEBF3DFDEF0DCDBE9D6
+ D4EEDCDBECD9D8E7D4D3E4D2D1E1CECDDFCDCDE4D2D2E5D3D3E7D5D4EDDAD9CE
+ BDBC0000000000001210104C4545716666887B798F81818E81806D6362554D4C
+ 413A3A7B6F6FECD5D4F0D9D8EDD5D5F0D8D7EFD6D5EED6D4EBD2D1E9D0CEE9D0
+ CFEBD2D1ECD3D2EBD0D0EBD1CFFADEDD786A6A262121E8CBC9EED0CEEFCFCCED
+ CECBE9C8C6ECCAC8E6C3C0EDC8C5EFCAC7EBC6C3EAC4C2EBC6C3EEC6C4E4BAB7
+ F2C4C1BA9794070606C6A09EF7C7C3EDBDBAECBCB8EBBCB8E6B8B4E5B7B4F5C6
+ C2F0BCB9F3B9B5F0B5B1F2B7B3F0B5B1F1B0ACF5B9B4F5B8B2F7BAB5FAB0A9F4
+ 9E98AE78737C5855623E3C50302D5B3C39724643754A47724D49784E4B684F4B
+ 3E2927482E2C6649468D605CE29893FFB0A9F5A9A3F3A49EF2A39EF1ABA6F2B3
+ AEF2B2ADF1B5B0EBB2ADDBA6A3CFA9A6BFA09C3A2E2D4B3938755B590000000E
+ 0B0A9B7B79BC9694DAB3B1DCB5B3E9C2C0EAC3C1F2CCCAECC6C4EAC4C3EDC8C6
+ EEC9C8957F7D7967677A6766040303191616A69190E0C4C2E5C7C5DBC0BED4BA
+ B9C9B0AFB09B9A1B18188878786B5F5E0000000000000000001412123F38385C
+ 5251685D5C685D5D584F4F35302F2A2626373232383232342F2F776C6CDAC6C5
+ F6E0DFE8D2D1E7D2D1E8D3D1E9D4D3E4CFCFEDD8D7ECD7D5EBD6D5EBD6D5E1CD
+ CCE3CECDE1CDCCEAD6D4E5D1D0F4E0DFF1DDDCF1DEDCEDDAD9FBE7E6786F6E00
+ 0000706766E2CECCE9D6D5E4D0CFE2D0CEE1CECDDCC9C8EEDBDBD7C6C6DAC8C7
+ E1D0CFD6C4C4E2D0CFD8C6C5EBD7D7AE9F9E010101857877DEC9C9EBD5D5E7D1
+ CFF0D9D8F4DEDDE6D0CED4BFBD9485848C7D7D504847433C3CDBC5C3E3CBCBEB
+ D3D3DEC5C4E5CDCCE2CAC9E0C7C6E0C7C6E8CFCEE5CCCAE1C7C6E1C6C5EACECC
+ 635756000000B19A99F0CFCEDCBCBAE5C4C2DCBAB8E5C3C0DDBAB8E9C5C2E4BF
+ BCE0BAB7DDB5B3EAC2BFE4BCB9DBB4B2EFC4C1745F5D000000886B69FBC8C4E4
+ B5B1EEBCB8EBB6B3E6B2AEE7B4B1F3C2BEF3C3BEECB9B5E9B0ACEAABA6ECADA8
+ EBADA7F2ADA7F1B0ABFCB8B1C9928D714B487044414D383662403EB46762E98D
+ 86FA958CFFA39AFFB1A8FFA9A1F3B5ACD17E76895A555A3F3C5C3C38462E2C95
+ 6661FFA6A0F69F99EFA39EEEAAA4F1ACA7EFAFA9ECABA6EEB5B1EBC0BCECBEBA
+ FFCBC78264617D615FA9827F0000003D302FECBCB9E9BCB9F3C8C5EFC4C1E0B6
+ B4E1B9B6F0C9C6E2BBB9E8C2C0ECC5C3877170877372C0A5A41814141C1817D4
+ B7B6F2D1CFE1C2C1E8C9C7EDCFCDE1C4C2E3C5C4F9DBDA544A4A9784827A6A69
+ 0000003C3534B8A2A0DDC4C3E5CBC9EED4D2EED3D2F3D9D8E9D0CFDFC8C7B8A4
+ A3817474615756635959282424100F0F847777DCC6C5E0CBC9DFCBCAD7C3C2E6
+ D2D1EDD9D7DAC5C4DEC9C8E7D3D1DCC8C6E4CFCEDBC8C7DAC6C5DAC6C5E9D5D4
+ D4C0BFEAD7D5E7D4D3E5D0CE685E5D0000007A7170EBD7D5EEDCDBDECBCAE4D1
+ D0DAC7C6E1D0CEEDDCDCDFCECEE1CFCFEFDEDED9C9C8E9D8D7DBCACAF6E3E3AF
+ A0A0221F1FD8C4C3ECD7D6E6D2D0DCC6C5E8D2D1E7D0D0D8C2C1E3CDCBEAD2D1
+ 8C7E7CAE9C9B332E2E594F4FE4CBC9F0D7D6DDC5C4EBD3D2E1C9C8ECD3D2E4CB
+ CAE4CAC9E1C8C7E7CDCCE8CDCCCDB4B3847373453C3C5F5152FCDAD9DEBDBAF3
+ D0CEE4C2C0DCB9B6DDB9B7ECC8C6DAB6B3F0CAC8E1BBB7E3BBB8DEB5B3EDC3C0
+ C7A19F77615F614F4E4F403EF5C3C1E4B1ADE9B6B3E4AFACEFBAB6F4BCB8F5BC
+ B9F0BAB5E6B4B0EEBBB7E9B1ADEFADA8EFAAA5F1AEA8FDB1ABA5787464474585
+ 5E5A351D1C95605CFBADA5FF9890FD8B83FD938AFC9A90FCA39AFDA49AFEC4BB
+ FF9187FFB4ABC8827C62403C805450301E1D633F3CF3A19AF8ACA6F1A9A3EFA8
+ A4EFADA7EEBBB6E9BDB8F0B9B5E9ADA9F4B5B18764627F6260A27C7A00000050
+ 3F3EF6C7C3F2C4C1F1C5C2F5C9C6E5BAB7E6BCBAEDC6C3E3BDBAF1CBC9A88E8C
+ 826F6ECBADAB1C1818050505B69C9BF0CCCBE5C3C1DDBDBBE8C8C6E7C8C7DABD
+ BBDABEBCF9DAD96D605F907D7C7666650000007E706FF2D5D4EFD6D5DCC4C3F1
+ D9D8E2C9C9DAC2C1EDD6D5E5CECDE3CCCBF3DCDBC4B2B15D5453908281595050
+ 000000514949E0CCCBEAD5D5DAC6C5E8D4D3EBD7D6DECBCAD9C5C5DECAC9EAD6
+ D5D9C4C3E5D1D0E3CFCDE0CCCBE5D2D1DAC6C5F6E2E1EEDBDAEFDBDA655C5B00
+ 0000736A6AE9D6D5E5D4D3DCCACAE3D2D1D9C8C7E7D5D5E3D1D1DBCACADAC7C6
+ E3D2D2D7C6C6E2D1D0D9C8C7EBD9D9A29595696060E3CDCCE2CDCCE3CFCEDAC4
+ C3E3CDCDE5D0CFDBC4C4DDC6C5E2CBCACDB7B6786C6BA79393040403AA9695F3
+ D8D6DBC1C0E1C8C7DFC7C6E4CACAE0C7C6E4CACAE0C6C5E8CECDEACFCEA79392
+ A69292706262131111E2C3C1DDBBB8E9C6C3DEBAB8DEBBB8DFBAB8EBC7C4DBB6
+ B3E7C1BFE0BAB8E6C0BDDDB6B4F5CBC88A716FA887856D5756120E0EDDB0ADE4
+ B5B2ECBBB7E7B2AFEDB6B2E6ADA9F2B7B3F1B4B0E7ABA7EEB6B1EBB6B0EDB6B0
+ F3B2ADF9ACA6996B686747439B6C69151312A2716CFF9D95FFAAA0FC9E95FD80
+ 77FF9288FFA59BFFAAA0FFA298FFB8AEFE9389FEABA1FFA198E7968E5B39369D
+ 5E592B1B1A4D3432F8A9A2F4A9A3F0B2ACECBDB8EFB9B4EBABA6EBA9A4E8A9A4
+ F0B1ADA279768467659F7C79000000644F4EFAC6C3E1B0ACECBEBAF4C8C5E6BB
+ B9E6BFBCEDC8C5E8C3C1D7B7B5705E5DDEBCBA3A3231000000847270F6D3D1DF
+ BCBBE3C1BFDFBEBCE2C2C1DDBFBCE4C6C4E2C4C3F5D6D4766867927F7E766666
+ 000000978686E7CDCCE5CBCADBC3C2E5CECCDFC8C7DDC6C5E7D0D0E4CECCDCC7
+ C6E3CDCCF5DFDDD6C0BF695F5E968887675D5D0000004F4848E0CCCCDFCBCAEF
+ DADAEFDCDBD8C5C4DBC8C7D8C4C4E0CCCBDCC8C6D9C5C4D6C1C1DFCBCADDCAC8
+ D8C5C3F4E0DFF1DDDCEBD6D5655B5A0000006D6464E5D3D1E7D6D6E5D3D3E2D1
+ D0DCCAC9E5D3D3DCCBCAE1CFCEE2D0D0E1D0D0E2D1D0E6D5D4D9C8C7EFDDDD94
+ 89899B8E8EEAD5D4E3CDCDE5D0CFE4CECDE4CECCE5CFCEE4CDCDE1CBCAE2CBCA
+ EBD2D1736767B4A09F322C2C615655F5DAD8E2C8C6E2C8C7E7CDCBE2C8C7E4CA
+ C9E6CCCBE0C6C4E9CECDEED2D1887877C3ABAA3932320000009B8684EDCAC8E7
+ C5C2E4C2C0E6C3C0DFBAB9E9C4C2E5BFBDE5BEBCE7C1BEE6BFBCE7BFBCE1BBB8
+ 6E5A59CDA8A5151211000000B5908DF5C1BEF6C3C0ECB9B6E8B3B0EDB5B1F2B7
+ B2EFB0ACEEAEAAEDAAA6EEACA7F1B4AEFFC5BFAE807C5A3C3BB37B7609060695
+ 6560FFC2B9FEA79FFE8D83FFACA2FF8F84FF968BFFABA0FFB8ACFFBEB3FFB1A6
+ FFAFA4FFABA0FE9E94FF9E94E07E765E3A37C17F790C06066E4B49FEC2BCF6C2
+ BCEFACA7F1A9A4F1ABA7ECACA8F2B6B2FBC1BDAB8481866764A37C7A00000075
+ 5B59F9C3C0E8B9B6EABEBBEDC3C0E5BDBAEBC3C1E9C1BFE9C2BF7C6767CBAAA8
+ 7B67660000003F3434EDC9C7EFCDCBDDBBBAEAC9C7E6C6C4E7C8C6DEC0BFEBCD
+ CCE4C7C5F2D3D18D7C7A9D8A897A6C6B0000009C8C8BEED4D3E2CBC9EED6D6E7
+ CFCEE9D2D1ECD4D4E6CFCFE7D2D1E1CBCBE3CDCCE1CBCAE4CECDDFCAC9564E4D
+ B09F9F5951510000006D6363EBD7D6E8D4D4E9D5D4E3D0CFEBD8D7E2CECDE6D2
+ D1EBD7D6DAC6C6DFCBCAE6D1D1E4D0CFE3CFCEF4DFDEF1DDDCF2DDDC6D626200
+ 0000776E6EEBD9D8E4D3D3E7D6D5EEDDDDE8D6D5EBD9D8ECDBDBE8D6D6ECDAD9
+ EDDCDDE8D8D8E1D0D0D7C7C6F0DDDDBBADADDAC9C8EBD6D5EAD4D3F1DCDBEED8
+ D6E0CBCAE4CECCE5CFCEE4CECDE7D0D0F0D7D6776B6BAA98975249492F2A2AEE
+ D4D2F0D5D4E7CDCCE8CFCDEDD2D1EED3D2ECD0CFEACECDEED2D1E2C7C6867675
+ C1A9A80908080000004C4241F3D0CEE9C7C5E8C6C4EAC8C5E9C5C3EDC8C6E4BF
+ BCEBC5C3EBC4C1EAC2BFF8CDCAA58885A48683856C6A0000000000007E6665FC
+ C9C6F0BFBBF2BDBAEEB7B3F3BAB6F1B8B4EEB3AFEFB0ACF0ACA7F0A7A3F8ACA7
+ E19D984D3937C3908B231817452B28FDA79EFFABA2FEB9B0FF9F94FFAFA4FFBA
+ AEFFAC9FFFB5A8FFCABCFFEDE5FFC6BAFFCEC1FFB8ADFFA99FFF897FFF9F95A1
+ 66618A5954966D69000000B88884FFAFA9F5A8A2F3ADA8EEAEA9EBAFABE8ADA9
+ F3B6B1BB8D8A8E6D6BA8817F000000765E5CFFD0CDF0C2BFECBFBCECBFBCEABE
+ BCF3C8C6FBCFCDA98C8AA28785C3A2A0080707120F0FC6A8A6E7C3C1E1BFBDDF
+ BEBBF0CFCCF3D3D1F3D5D2ECCECDEFD2D1F2D5D3F8DBD9938281A18F8E7F7170
+ 0000009A8B89F1D7D6E8CFCEE9D1D0E9D1D0E8D0CFECD5D5F0D9D9F0D9D9EFD9
+ D8EFD9D8EDD8D7EBD6D6F3DEDDC3B3B2514A4AD4C2C21A1818070606BFAFAFF2
+ DEDDE6D4D2EBD7D7EAD7D7E8D5D4EAD6D5EDD8D8EED9D8F1DDDBEDD9D8EDD9D8
+ E3CFCEE7D3D1E7D4D2F6E0DF736968000000766D6DF4E2E0E2D1D0E8D6D6F2E0
+ DFEBDAD8E8D6D5EBDBDAE9D8D7EDDBDBECDCDCE8D8D8E4D3D4E2D1D1E9D9D9EE
+ DCDCF3E0E0E8D3D3EDD8D7F1DAD9EFD9D8E2CDCCE1CAC9E5CFCEE3CCCAE8D0CF
+ F1D8D76F6463C2ADAC443D3C211D1DE5CDCBEED4D2EED3D2ECD2D1F0D5D4EFD3
+ D2ECD0CEE9CCCBF4D7D6CAB2B29B88879985840000001613130B0A0AC5A8A7F2
+ CFCDE7C5C3EBC7C5EAC6C3ECC6C3E8C2C0E9C2BFEAC2C0EAC2BFE9C1BE725E5D
+ D1ABA8221C1B120E0E362B2B392D2DF2BFBCEFBCB8F0BDB8ECB7B4F0B8B4F1B7
+ B3F1B5B0F1B3AEF4B3AFF2AEA8FFB1AB7A514EA06965875C58000000C7918BFF
+ AEA5FE9E95FFB7AEFFD0C7FFB7A9FFDACDFFC9BBFFCEBEFFEDE4FFFDFBFFE3D8
+ FFE6D9FFCCBEFFA79BFFA197FFA197F9A79E635351D69D962013122A1A19F3A7
+ A1F9B3ADF5B2ACF3AFAAECA9A4E9A9A5EFB2AFCD9D9A937370A5817F00000074
+ 5A58FFC7C4EBB9B6EBBBB8EDBFBDE9BDBBF4C9C7D0ACAA786463E5C1BE2F2727
+ 0000008E7977FED9D6E4C3C1E7C6C4EFCECBE8C7C5F0D0CEEFCFCDE8CCCAEBCF
+ CEEDD1D0FADEDC8F7E7EA492918274730000009A8B8AF4DAD8EDD4D2E7CECEE7
+ CFCDE1C9C7E2CBCAE9D2D1ECD5D5EAD3D3EDD7D6EDD7D6E9D4D3E9D4D3F8E1E0
+ 7268679D8F8F8F8382000000524B4AF3DFDEE6D3D2EDD9D9EDDBDAEAD8D8E9D7
+ D6EBD6D5EDD8D7EBD6D5E9D5D4E8D5D3DECBCADFCCCBEEDAD9F3DFDE73696800
+ 0000766D6DFAE8E7F8E7E6F4E3E2F3E1E1DDCCCBE5D3D2EEDCDBE4D4D3EAD9D9
+ EEDEDEEBDBDCEBDBDBE8D7D8DECDCDE0CECEF1DDDDECD8D7EDD9D8EFDAD8E3CD
+ CCE7D0CFEBD5D4EAD4D3EAD2D1F4DBDAB8A5A46E6261D5BEBC0E0C0C393333EA
+ D2D0F0D6D4EDD3D1E8CDCBE4C9C8ECD1D0EED3D2E8CCCBF5D7D59F8B8AB8A09E
+ 594E4D0000009C8685262121625453F6D2D1E8C6C4E9C5C4EAC7C4EAC5C4ECC5
+ C3EBC2C0EBC3C1F1C6C3AF908E997C7A9F817F000000705A59B99492070606D3
+ A7A4F7C1BEF1BBB6F1BAB6F3BAB6F4B9B5F3B7B3EFB2ADF2B2ADF5B1ABDC9D98
+ 5C403EDE968F120B0A392220FDAAA1FFBAB2FFB9AFFFB9ADFFDBD1FFEDE6FFE4
+ DAFFF6EAFFF0E2FFFFFFFFFCFCFFF7F3FFF8F0FFD6C7FFC0B2FFC7BBFFC1B9FF
+ CDC395635DB16E68905F5A000000A6736FFFB4ADF5ADA7F4B2ADF4B6B1F3B8B3
+ F1B5B1C99693926E6BA47B78000000755A59FEC8C4ECBBB8E9BBB8ECC0BEEBC0
+ BEEDC4C2756261CDAEAC6F5E5E000000514545F0CDCAECCAC8ECCCCAF5D4D2F6
+ D4D2ECCBC9EBCBC9F2D3D1ECCFCEECD0CEEED2D1F8DCDAA08F8EA694947F7171
+ 0000009B8A89FBDFDEF2D8D7F0D7D5ECD3D2EBD2D1E7CFCEEAD2D1EBD4D3E8D1
+ D0ECD5D4EED9D8E8D3D3E9D4D3F1D9D9C7B5B4534C4CD5C3C20F0E0E040404CD
+ BBBBE8D5D4E6D3D3E9D7D6E7D5D4E9D7D6EEDADAF0DCDBEFDBDAECD8D7EEDAD9
+ EDDAD8EEDAD9F2DEDDFEEEED7C7271000000716968EDDBDAE4D3D2E8D7D5F4E2
+ E1D9C8C7E0CDCCECD9D8E0CECEE6D5D4EBDADAE4D5D4E7D6D6EBDADAE6D4D4D9
+ C7C7E2CFCEEAD5D4E9D4D3ECD7D6D6C0BFDDC6C5EAD4D2E3CCCBEED6D4C1AEAD
+ 4F4747D5BEBC8678770000006C5F5FF1D6D4E6CCCBE2C7C6E0C4C3D8BDBBE8CC
+ CBE5C9C8E6CAC8F4D7D5857473C7ACAA161313161313EBCBC8867472120F0FDA
+ BBB9ECCAC8E5C2C0E7C5C2E6C2C0E9C3C1E7BFBDEBC3C1F0C6C376615FC69F9D
+ 312827080606D2A7A5EFBDBA161111967472FBC1BEECB4B1EDB4B0F2B7B3F3B6
+ B3F2B3AFEDADA8F5B2ADFEB7B2996E6A9D6E6AA87570000000895752FFA59CFF
+ 968DFFB8ADFFE1D5FFEADDFFFBF4FFFDFBFFFFFDFFFEFDFFFFFFFFFFFFFFFFFF
+ FFFEF5FFF2E7FFE5DAFFE7DDFFCBC2FFA59ACE7D767C534ED28B850000004D34
+ 32F8AFA9F5AEA9F2ACA7EFA9A4EFABA6F1AFABC7918D926F6CA47E7A00000075
+ 5D5BFAC8C5EABEBAE9BFBCEFC6C3FCD2CF947C7BAB908EAE9391000000151212
+ D4B6B4F5D1CFE8C5C4EBC8C6EAC7C4ECC9C7F1CECCEFCDCBEACAC8E8C9C8EDCF
+ CEECCECDF3D4D2B9A4A2A995957C6D6D000000958483F2D6D5E9CFCEE8CECDEC
+ D3D2E8CECDE8D0CFE9D0D0E6CFCEE7D1D1E6D1CFE9D4D4ECD7D7EAD5D4E6D1D0
+ EBD5D5544D4DCAB9B8514A49000000877C7BF5E1E0E2CFCFE5D4D3E9D7D6DDC9
+ C9DFCCCBE6D3D3E8D6D5E3CFCEEAD7D6E6D3D2ECD8D7ECD8D7F2DDDB71676700
+ 0000797070E9D7D6DBCAC9D8C7C6EEDCDBE0CECDDDCBCAE5D4D3D5C5C4DECCCB
+ DDCCCCE3D2D2D9C7C7E9D8D7DECDCCDBC8C9E6D4D3E7D3D2E3CECDE9D4D4D7C0
+ C0E0CAC9E6CFCDE2CAC9958584484040C3AEADAF9B9A0A0909080707B7A1A0F2
+ D8D6DEC3C2DEC3C1ECD1CFDBC0BFF0D5D3DDC1C0DFC2C1CEB3B28674739F8887
+ 000000594C4CFAD8D6D8BBBA0C0A0A937E7DEFCDCBDFBDBBE1BEBCDEBAB8E2BD
+ BBDDB6B3EFC6C3C2A09E866C6BA1817F0000005C4948FBC9C5F0BBB84F3D3C56
+ 4240EEB4B0E4AAA6E3A7A3E7A8A4EFAEAAEAA8A3EBA7A2EFA9A4F6ACA6674745
+ CE8D885B3E3B000000B37973FFAEA4FFA99EFFB2A7FFCABDFFF1E7FFFEFBFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F3FFDDCFFFC6B9FF
+ B0A5EE9A9168423FE7968F170F0E120C0BE69994F5A8A2ECA7A1ECADA7EBB1AC
+ F2BAB6C99A97917270A27F7D000000735B59FAC7C4E8B9B7E8BBB8FECFCCB091
+ 8F796363BD9C9A161212000000987E7DF2CBC9E5C0BEDFBAB9E1BCBADCB7B5DB
+ B7B5E7C3C1E5C3C1DFBFBDDEBEBCE2C3C2F0D1D0F5D6D4B29C9BA38F8D776968
+ 0000008D7C7CECD1CFE5CCCBD9C1BFE4CBCBDDC5C3DCC4C3DCC5C4E2CCCBE8D2
+ D2DAC5C5DFCACAEDD8D8E7D3D2D5C1C0F4DEDD7B72719C8F8D8A7E7E00000057
+ 5150ECD9D8DAC8C8E2D1D0E9D5D6D6C2C2E2D0CFEDDADADFCDCCD0BCBBDECAC9
+ D9C5C5E0CDCBD8C5C5EEDBD9695F5E000000786F6FE6D3D3E8D6D5DECCCBE0CF
+ CEDDCCCBE2D0CFEBD9D9D8C7C7D8C6C5DECECDEDDCDBDBCACADECDCDDCC9C9E9
+ D6D7E8D6D6EAD6D5E5D1D0DCC6C6D7C1C0E5CECCDFC9C8695E5E685C5DE3CCCB
+ 9A89870F0E0E000000726464E3C9C7E6CCCAE3C9C6DFC4C3EBD0CFDABFBEE2C6
+ C5E0C3C2F7D9D7A8908FA58F8E6F605F000000947E7DF7D6D4EFCECD5C4F4E37
+ 2F2FE5C4C1E7C4C3E5C2C0E4C0BEE3BFBDE2BCB9F7CECB846D6CB69492413534
+ 000000BA9694F4C4C1F0BDBA9B7A781D1615DDA9A6F0B7B3ECB2AEE5A8A4E7A8
+ A3ECAAA6F3AFAAEFA7A2E39C9760403EE596902A1B1A020101D5817AFF9E94FF
+ ADA2FFC8BBFFDBCEFFF2EDFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFDFAFFEBDFFFCEC0FFB5AAF99D93704742E4968E3E2A280000
+ 00C58E8AFEB9B2EFAEA8F1B2ADEAABA7F2B4B0CA9692916D6BA47B790000006B
+ 5352F4BFBCE3B4B0E1B3B09E7F7D62504FA183811F1918000000836E6EEEC7C5
+ EFCBC9E6C2C0E6C3C1E3C0BFE6C4C3E2C1BEE4C3C0E5C4C2E8C9C7E8CAC8DDC0
+ BEF0D2D1EED1CFA69190AB98977D6F6E0000008F7F7FF1D7D5F0D8D7E2CBC9E0
+ C9C8DEC7C6E3CCCBDDC8C7E6D0D0E7D2D1D9C4C3E3CECDEAD5D5E3CFCED7C3C3
+ F4DFDF887D7C847878A79899000000343130E7D5D4E0CDCDE9D7D7E7D4D3D7C4
+ C4E6D5D4EAD8D8E8D6D5D2BEBDD4C0C0E4D1D0E2CFCDD8C5C4FCE9E76B606000
+ 0000746B6BE6D3D3EBD9D9DCCACAE0CECDDAC8C8E3D2D2E3D2D2D8C7C7E4D2D1
+ DAC9C9DDCCCCD9C8C7E6D5D4DBC9C9DBC9C9D9C6C6E4D0D0DFCACAD6C1C1ECD5
+ D4A896954D4544948482D7BEBD6B605F000000000000605555E0C6C4E4CAC8DB
+ C1C0DDC3C1DCC1C0E3C7C6E0C4C2E0C4C3E0C3C1F6D7D5837170C0A6A5312A2A
+ 090707C9ACAAEBCAC9E4C3C2C0A5A4090808B69B99E7C3C1DEBBB8E4C0BEE3BE
+ BCE6BEBCCEABA97E6766B79592000000463837EFC0BDE3B4B1EEBDBAD8ABA816
+ 1110AF8582F3BBB6EBB3AEE7ACA8E8ABA6EBACA8F0B0ABEFABA5D59691684845
+ E49A940C08080B0707EC958EFFA096FFA89DFFB5A8FFD9CAFFFFFAFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7FFEEE0FFCABBFF
+ B6AAFFABA16C4843E197905B3D3A0000009D6D69FEB1ABEFABA5F1B0ABEAACA8
+ F1B5B1CA989491706EA27E7B0000000C0A09342A29372D2C231C1C000000251F
+ 1E010101100D0E9B8281F8D1CFE2BEBCE5C3C0E2C0BEE2C0BEE8C6C4E0BFBDE0
+ BFBDE4C4C2DCBCBAE5C7C5E1C4C2DEC1BFF1D4D2F2D5D3A48F8FAC9898796B6B
+ 0000008E7E7DE4C9C8DFC6C5E1C8C8D9C2C1E2CBCAE9D2D2DCC6C6DEC8C8E1CB
+ CAD8C2C1E2CCCBEFD9D8E6D0D1D8C4C4EBD7D6918585736969BAAAAA0000002A
+ 2727E0CDCDDAC6C6D7C3C3DAC6C5D6C3C2E7D4D4EBD9D8E2D1D0D5C1C0D9C6C4
+ D4C1BFE7D4D3D6C3C2E7D2D1685F5E000000706767ECD8D9ECDCDAEBDAD9EEDD
+ DCE6D5D5E5D5D5E8D8D8E4D3D3ECDBDAE6D5D5DFCECEE4D3D2ECDBDAE4D1D1E3
+ D1D1E5D2D2E5D1D1EBD6D5E3CECD8679795C5352D2BDBDB7A4A2282323000000
+ 080707877878F0D6D4F3D9D8E9CFCEE4CAC8E8CDCCEBD0CEE8CDCBEACECCE4C8
+ C6DEC1C0DFC2C07C6B6ABDA3A2030202423938ECCBC9F0CFCEEACAC8F5D2D13E
+ 35355E504FF4CFCDE9C4C2EAC6C4E5C0BDF6CCCA907876C19F9D5D4D4C000000
+ AC8B89FCCBC9ECBDB9EFBDBAF5C0BD403231765958FCC0BCEFB2AEF0B1ACEBAA
+ A5ECA8A4F3ACA7F0A49FD5918C684441E8948E0B07070B0706ED8981FF9086FF
+ 9A8FFFB0A4FFCCBCFFF5E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFF2EDFFDFD4FFC2B86A4C48E5A39C5C423F0000
+ 009C726EFFC0B9F5B6B1F1B4B0F0B5B1F5BCB8CF9F9C927270A5817E00000050
+ 3F3EBC9694B18E8CB2918F9379774E4040211B1B3F3434615150B99C9BF1CBC9
+ EBC7C5E8C5C3E8C5C3F1CECCEFCECBEECECBF0D0CEEACBC9EECFCDECCECCEED1
+ CFEFD1D0F6DAD8A99494AE9B9A7D6F6F000000948584F2D7D7EDD4D2E2CAC9D6
+ BFBEE4CDCCECD5D4E2CBCAE9D2D1EBD5D4E6D0D0E8D2D2E8D2D2E8D2D3E6D3D2
+ EEDADAAA9D9D7F7473C5B5B40000002C2829E9D5D4EFDBDAE8D4D4E7D4D4E4D1
+ D0E8D5D4EAD8D7EBD9D8E8D5D4E7D4D3DECBCAEAD7D6E2D1D0F0DEDC756C6B00
+ 0000776D6CFBE7E6E8D7D6F0E0DFF1E1E0EDDDDDE9D8D8EEDDDDECDBDBEAD8D7
+ ECDBDBE8D7D6EAD9D9EAD8D9E8D6D6E9D7D7E4D1D0E7D2D1DBC7C75F56568E80
+ 7FDEC7C67C706F000000000000332D2DB4A09FFADFDDEED5D3EED4D2F0D6D4EB
+ D1D0ECD2D0EED3D2EDD1CFEBD0CEEDD1CFDEC0BFB79E9D958281968381000000
+ 82706FF2CFCCECCAC8E7C6C4F8D5D39983810F0D0CD9B8B6EFCAC8E9C4C1EDC4
+ C2DFB8B6836C6ACCA8A5040303372C2BF0C2BFF0C0BDF0BDBBEEBAB7FDC4C080
+ 6360382A2AF3B7B3F1B2AEECABA7EDAAA6E9A4A0EAA39FF4A8A3DE99956B4845
+ E699940F0A090B0706ED9088FF998FFFA99FFFB5A8FFCBBCFFF5E6FFFFFCFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFF3ECFFF5EFFF
+ E5DAFFD3C869524EE5B0A95B4643000000A57E79FFC5BFF5BDB7F2BBB5F1BBB6
+ F7C1BDD1A4A1927471A684820000007A6362FFD2CFF1C4C1F1C6C3F8CDCBF8CE
+ CCC3A3A2705E5D605050040303857170F5D0CEEFCCCAEFCCC9EDCBC8EECCCAEC
+ CAC8EECDCBF2D1D0EECECCF2D4D3F3D4D3E9CBCBF2D6D5AE9A9AA59291786A6A
+ 000000968685FADFDFF4DAD9E1C8C7DAC2C1EED6D5EFD8D6EAD3D2EBD4D4E8D2
+ D2E9D3D3E7D2D2E9D4D4E8D4D4ECD8D8F6E1E1998C8C857A79C3B3B20000002D
+ 2A2AE9D6D5F1DCDCEBD8D6E9D5D5E8D4D4E4D1D0E8D5D4EAD8D7EFDBDAECD8D7
+ ECD9D8EFDDDCF1DFDEFFF0F07D7474000000786E6DFEEAE9EBD8D7E9D8D7F0DF
+ DFEBDBDAE6D5D5EFDEDDEDDCDBECDADAE9D8D8E7D5D6E6D5D5E9D7D7E3D2D1E3
+ D1D1EAD6D5DAC6C55B5353A29292C8B4B235302F000000070606746968DDC6C5
+ EBD1CFEDD3D2EBD1CFEAD0CEEBD1D0E4C9C7DFC4C3E9CDCCE6CAC8E3C6C4EED0
+ CFF7D8D69B8786B9A19F584C4B000000CAAEADF5D1CFEFCDCBEBC8C6EECBC9DF
+ BDBB1A17168B7573FBD3D1EEC6C3FED3D1A58987B394916E59580000009D7F7E
+ FBCCCAEBBDBAEBBCB9EDBDBBF6C2BFC69C99181312D9A9A6F5BEBBEEB6B2F2B8
+ B4F2B7B2F0B2AEF7B6B1ECAAA5624542E69A9432201E020201D78079FF968CFF
+ 9B91FFB9AEFFD3C6FFEDE2FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFAFFEFE8FFECE1FFDBCDFFB2A6F6A39A664441E7A69F3D2D2B0000
+ 00CA9B96FDC4BFF3BDB8F2BCB8F0BDB9F6C3BED0A6A2927573A5848200000075
+ 605EFDCECAE9BFBCEAC1BFEAC3C0ECC6C4FBD3D1B69A988571706A5A5A000000
+ 917C7AF5D1CFEFCECCF0D0CEF2D2D0F1D1CFF0D0CFE9CAC8EACCC9EDD0CDEDCF
+ CEE8CCCBEFD3D2B39F9EAA97977C6F6E000000988787FCE1E0F1D8D6E6CDCCEA
+ D1D0EED6D6EED6D5EED7D6E8D1D0E4CDCDE4CECEE8D2D2E9D5D5EBD8D7EBD7D7
+ F4DFDF897E7D9D8F8FA09292000000403B3BEEDAD9EAD6D6F0DCDCECD9D8E8D5
+ D4E8D6D5E8D6D5E6D3D2E6D3D2E6D4D3E0CECDE5D3D2E8D6D6FDEAEA7E747500
+ 0000796F6EFFEFEEF3E1E0EFDDDDF1DFDFECDCDCE4D3D3EFDDDDF2E0DFEFDDDD
+ EBDBDAEDDCDBEEDCDCEDDBDBE9D7D7E4D1D0EED9D8706565A79897B4A2A11110
+ 0F000000342F2EB7A4A3F8DEDDF1D8D6E8D0CEF1D6D5E2C8C7E5CBC9F3D8D7F1
+ D6D5E9CECCE9CDCCEDD1CFEDD0CFEED1CFF1D2D0867474CCB2B11411112A2424
+ F3D2D0E3C1BFE1BFBDE3C1BFF4D1CFF7D1CF6D5D5C2F2727F5CFCDF5CECBE5BF
+ BD7C6867D0B0AC0F0C0C241E1EEBC3C0EEC5C3E9BFBDEBC0BEEDC1BEF1C3C0E7
+ B9B62A20209F7D7AFCC3C0EEB4B0F1B3AFF4B2AEF2ACA8F2A9A3FBADA76C4946
+ D78E885F3E3C000000B4746EFFABA2FF9E94FFA99DFFCEC3FFF7F0FFFFFDFFFE
+ FBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFCF5FFF3E9FFCBBEFFBFB6FF
+ C9BEEEA39A6B4642E9968F160E0D18100FE8A39EFAB8B2F7BBB5F5BCB8F3BEB9
+ F5C2BED1A7A4927674A6878400000076605FFED0CCECC2BFEDC4C1EFC7C4E9C2
+ C0E4BEBBF1CBC96E5C5CB69A99151212110E0FD8B8B5F0CECBEBCAC8F1D1CFF3
+ D4D2F1D2D1EBCCCAE8CBC8E2C5C3DFC3C1E3C8C6E7CCCAAC9897AC9A997F7171
+ 0000009A8988FDE3E2F0D9D7EAD2D1ECD5D3EED8D7EDD7D6EFD9D8ECD6D6E7D2
+ D1E7D2D2E8D4D3E8D5D5EAD6D6EDDADAF7E3E2716868C9B9B87A70700000006D
+ 6564FAE7E6E5D1D1F1DDDCEFDBDBE9D6D6E9D6D5EBD8D7ECD8D7EAD7D6EFDDDC
+ EBD8D8EDDBDAEFDDDDFBE9E87A7170000000726868F2DFDFDFCECDE7D6D5E3D2
+ D2DECDCDE3D2D2E8D7D6E6D4D3E0CFCEE5D4D4EBDADAEBDAD9E0CECEDCCAC9E8
+ D3D3AE9E9D7B6F6FC2AFAE0B0909000000625857DBC4C3EED5D4EED6D5DFC7C5
+ D8C0BEEBD1D0E0C6C5D7BDBCE8CDCCE4CAC9E7CDCBE8CCCBE1C6C3E1C4C2E7CA
+ C8D8BEBC867473B49C9B000000615352F7D5D3EECDCBEAC9C7D7B6B4EAC9C6F5
+ D2D0C2A6A4040403BCA09EFFDEDB9D8482A68D8C84706E000000887170F5CAC9
+ EAC0BFEDC2BFE9BCBAE8B9B6EDBCB9F8C1BE574241574241F7BBB7ECB0ACF0B0
+ ACECAAA6ECA8A3EDA7A1FFB6B19D6E6B9E6D6AA4716C000000885551FF9D94FD
+ 9D93FFC3B9FFE2D8FFE9E2FFDDCFFFF4E8FFFFFFFFFFFDFFFFFFFFFFFFFFFFFC
+ FFFFFFFFF1E8FFE0D1FFCDC0FFAFA5FF988ECC87807C5D59D09690000000573C
+ 3AF9ACA6F6AEA8F6B0ACF6B4AFF0B3AFF0B7B3D0A29F927572A5848200000072
+ 5D5BFDD0CDE9BEBCE6BEBBECC5C2EEC7C4DDB8B5EFC9C6877170A088865F5150
+ 0000009D8584F1CFCDEDCDCAE4C4C3EACAC8F0D2CFE3C4C3ECCDCCE5C8C6E1C4
+ C3EBCECDEFD2D0A69090AA96967D706F000000948484F0D6D5ECD5D5EDD6D5E4
+ CDCCE7D0CFEAD4D3E1CCCBEAD5D5E7D3D1E4CFCFE1CECEE8D4D4E7D4D3E6D3D4
+ DBC7C75D5454E0CECE373232000000988B8BE9D5D4DBC9C8E8D5D5DFCCCBE1CE
+ CDE8D5D4E7D4D3EEDBDBE1CFCEDFCECDEAD8D8EBD9D8E1D0D0F2E0DF766D6C00
+ 0000797070EFDDDCDCCBCADECDCCDDCCCBE3D1D0DCCBCBDFCECEDDCBCBE3D1D1
+ D9C8C7EAD9D9EDDCDBDDCBCADCC7C6F0DADA726766C5B3B24A43430000007D72
+ 70E5CDCBEAD2D1E9D1D0DEC6C5DFC7C5DFC6C5E2C9C7E5CBC9DAC1BFE5CBCAD7
+ BDBBE4CAC8DAC0BEDEC2C0D2B5B3EBCECDB19C9BA28D8C7D6D6C0000009C8886
+ E5C5C3DBBBBADDBEBCE5C6C4F4D4D2F5D4D2F4D1CF372F2E554847EBC5C36353
+ 51CAAAA71D1817120F0FD6B0AEE9BEBCECC1BFE8BBB8E5B6B3EABAB8E5B3B0F7
+ C1BE9D7977261D1CE0A9A5F0B4B1EBAEABEEB1ACEBACA7EBACA7FBB7B2DD9E99
+ 5E423FDC928D100808382321FDB5ADFEBDB4FFB7ADFFC7BEFFB3A8FFC0B2FFF0
+ E4FFFCF8FFF0E6FFF9EFFFFDF9FFF6EDFFF3E7FFE8DEFFC1B3FFB1A6FFA69CFF
+ B1A7965752AF69648D5F5A000000B08480FBB6B0F5B3AEF7B7B2F2B3AEECAFAA
+ F2B5B1CB98958F6E6CA37E7C000000725C5AFFD0CDE5BAB7ECC2BFE4BCB9F3CB
+ C9E2BCBAF4CDCB8D76759E868483706F0000006B5A59F3D0CEE4C4C3E1C2C0E1
+ C2C0E9CAC9E2C4C3E5C7C5E5C9C7E1C5C4E1C4C3E1C4C3B09A99B09C9A807271
+ 0000008E7E7EEDD3D3DCC5C4E8D0D0D9C2C0E4CDCDE2CBCBDEC8C7EAD5D5E0CC
+ CBD9C4C4E2CECEE4D1D1DCC8C8E9D5D4A597977F7474C3B3B2020202120F0FD2
+ C0C0E9D5D5D9C6C5EBD8D7D4C1C0D9C5C4EDDAD9E6D3D2DFCDCDD7C6C5E5D4D3
+ DFCDCDE1CFCEDECDCCEDDAD9675E5E0000007A7271F0DFDEE4D3D3E4D2D2E1D0
+ CFEAD9D8DBC9C8DECCCCE5D3D3F0DFDFD8C7C6EBD8D9F6E3E2E2CECDE1CCCCE8
+ D3D2766A6ABCAAAA030203413A3AE8D2D0DFC8C7DEC7C5EAD3D2DBC4C2E4CCCB
+ E7CECDDEC6C5E2C9C9E0C6C5EBD1CFDBC2C0ECD2D1DBC1BFEACFCED6BBB9EED2
+ D0857674C1A9A83F3837040404D3B8B6DDBEBCD8B9B7EFD0CDE7C6C4E9C8C6F5
+ D4D1FBD6D4917977100D0D715E5D927A78987F7E000000766261F4C9C6E4BAB7
+ ECC0BEE8BBB8E7B9B6F1C1BFE5B5B2EFBCBAD6A6A31D1716B88D8AF5BCB8EAB2
+ AEF0B7B3EDB0ACECADA8F4AFAAFEB0AA784F4CA16C68805B58000000C8918AFF
+ B9AFFCAFA5FF948AFF968BFFBFB4FFE2D5FFD3C6FFC0B1FFD2C5FFE5DCFFDACB
+ FFCABCFFD6CAFFC3B8FFA298FF9D93F99C93614441DB928B2A1816392322F7AE
+ A8F0B7B1F3BCB6F6BBB6ECB0ACEDB3AFF8BEBACB9B978E6D6BA27D7B00000073
+ 5A59FECAC7E5B8B6F0C5C2E4BBB8EEC7C4E4BEBCF9D2D08D7676B09493806D6B
+ 000000716160F4D2D0E2C3C2E1C3C1E2C4C2E4C7C5E2C5C3E2C4C3E4C8C6E1C6
+ C4E0C5C3F0D3D2B4A09FAC9897807271000000938483F8E0DFDDC6C5EAD2D2DC
+ C5C4EAD4D4DFCAC9E3CECDF0DBDBE5D1D0DCC9C8E1CDCCE9D5D4DFCBCBE8D4D4
+ 655D5DCEBDBC5852520000006E6464ECD9D9EBD7D7DECAC9E7D3D2DAC6C6DAC7
+ C6E7D5D4E9D7D6DAC9C8D9C7C6EFDDDCDAC8C8DCCBCAE6D4D3F2DFDE665D5C00
+ 0000706867E9D8D7DECDCCEAD9D9E0CFCEDDCCCBE6D5D3DAC9C7E2D0D0E8D7D6
+ D8C7C6EFDCDBF2DEDDDFCBCADAC5C4E3CECD7B6F6F9A8C8B000101948685E9D3
+ D1DDC7C6D8C2C1E3CDCCDBC6C4EAD3D3E5CFCEDEC7C7E2CBC9CDB8B7E0C9C7D9
+ C0BEF0D6D4DEC3C1DEC3C1DCC0BEDFC4C2726362BAA1A00504042F2828DCBFBC
+ E6C7C5E1C1BFE3C2C0DCBBB9E8C6C4F6D4D1EFCBC8D7B3B1221D1C171414CEAC
+ AA2D2625080707CEAAA8EFC5C2E2B9B7E5BBB9E5BAB7E8BBB8EDBFBCE4B5B2E8
+ B8B5ECBAB73F3231775C5AFDC5C0EEB6B2EDB2AEECAEAAEDAAA6F3A9A5F8ADA8
+ DFA29D54423FC8938E20161546312FFDB2AAFC968DFD8B82FF9D93FFBAB0FFBD
+ B2FFBBAEFFB3A6FFB2A7FFEDE5FFD1C5FFB4A8FFAFA5FFBFB5FEA299FFA299A7
+ 6C66855350A16D68000101BD817CFBA39DF0A19CF4B3AEF4BEB9EBB8B3EBB5B1
+ F6BDBAC7989591716FA37F7C000000765F5DFDCBC8E8BAB7EFC1BFE5BAB7EAC0
+ BEE4BCBAF9D1CF715F5EC9A9A84D42410000009F8886F0CFCEEACBCBE1C3C2DF
+ C2C0E6CAC9E1C5C4E0C3C1DFC2C1E1C5C4E3C8C6E9CDCB897978A08E8D827373
+ 0000008A7B7AEED6D5E4CDCDE6D0D0DCC7C7E4CECEDDC9C7E3CFCFEFDADAEBD8
+ D8E0CDCEE1CDCDE1CDCDEFD9D9938685857979A395950000001D1B1AD1BFBFE0
+ CECED8C4C4DECACADAC6C6DCC9C8DBC9C7E2D0CFEBD9D8E9D7D7DBC8C7DECCCB
+ D9C8C7E2D0CFDECCCAEDD9D96F6666000000766E6DFBE9E8EFDEDEEEDDDCEAD9
+ D8E8D7D6F0DFDEEBD9D8EEDDDDEEDCDCE7D5D5E9D6D6EBD7D6EFDBDAE8D3D2EE
+ D9D8887D7C9B8F8E0B0B0AAD9D9CF1DAD8E7D0CFDFC8C8E5D0CFE3CECDEBD6D4
+ E9D4D3E9D3D2F7DEDE918483D2BCBBEED4D3F1D8D6E8CDCBE3C7C5E9CDCBB59F
+ 9E8B7A799D89880000005D5150F8D7D6F1D1D0EACAC8E4C4C3E8C8C5EECCCAF1
+ CECCF1CECBF8D1CF715F5F3F3535A88E8C00000060504FF8CFCDF1CAC7EAC2BF
+ EAC0BEEBBFBEEDC1BFEEC1BFEDC0BEEFC1BEFFCECB695452312524F6BFBBEFB6
+ B2F0B3AFF2B0ACF1ADA9F0B3AFF2BBB5FEC3BDBB8B86604341B0807B04040498
+ 5D58FF9D94FC9C93FDA79EFFB1A6FFA79CFF948AFF9E93FFA69BFFD6CCFFABA0
+ FF9F95FE9C92FDAAA0FFB8AFE6968E4F302EC1837D0F0707775350FFBAB3F4B0
+ AAF4ACA6F5AAA5F4ACA8EBAEAAECBAB6FAC9C5AD88858B6E6CA9868300000075
+ 5E5DFFD3D1F3C8C5F0C7C4EFC6C4F0C7C5FACFCDD0ADAB6F5D5CDCB9B70C0A0A
+ 1E1A19E4C3C2EBCBC9EBCDCCEBCDCDE7CAC9EED1D0ECD0CFEBCFCEEBCECEECCF
+ CDE8CCCBECD1CF8C7C7BA1908F807372000000786D6CFDE5E5F0D9D8EED7D6EF
+ D9D9EFDAD9E8D4D3E5D0CFEBD8D8E6D3D3E9D6D6EFDBDBFBE6E6B0A1A06E6665
+ C8B7B6161414070606B6A8A7F6E2E1EBD7D6E8D4D3ECD9D8EBD8D7E7D4D3E6D5
+ D4E8D6D5E5D3D2EBDAD9E9D7D6EBD9D8F1DFDEEDDBDAE7D5D4FDEBEA776E6D00
+ 0000776E6EF8E7E6EDDCDBECDCDAEADAD8EBDBDAE7D6D5E9D7D7EFDEDEF2E1E1
+ ECDAD9E8D5D4E7D3D2EAD7D6EBD7D6EAD6D5B6A6A6877C7A3A3434796D6DF5DE
+ DDEBD4D2EBD5D5EBD5D4E6D0CFE5CFCEE3CCCCE5CECDEFD7D6554C4CCBB4B4ED
+ D3D2EED4D3EBD1D0EFD4D3F4D8D67C6E6DAB96945D5151000000837271FFDEDC
+ EECFCDEFCFCDF0CFCDEFCFCCEDCBC9F2D0CEF3D0CEF4D0CDC6A9A7120F102721
+ 20030303BC9D9CF6CDCBF0C9C7EEC6C4ECC3C0EEC5C2EEC3C1EFC4C2ECBFBCEB
+ BCB9FECBC89E7D7C030202D1A09EF6B8B4EDB0ACF2B8B4F1BDB9F0BBB6F3BAB5
+ F3B3AEFFB8B49D767275524F7E53500E0606AF706BFFACA4FDB1A9FCABA3FE9C
+ 93FE988EFE9C93FF9E94FFAEA5FF9C92FEA79EFC9D94FFA69DEAACA45A3E3BA4
+ 6E694229275B4240FBAAA4F8AEA8F7B6B1F7B8B3F4B4AFF4B2ADEFABA7EAAAA6
+ F2BAB6AD8B888A716FAC8C8A000000544342F6C9C5EFC3C1EEC3C1EFC6C4F4CB
+ C8F0CAC8675756CAA9A7715E5D000000917B7AFBD6D4EBCAC8E8C8C6ECCDCCEF
+ D2D1F1D5D4EFD4D3EDD2D0F0D3D2EFD2D1EBD1CFF4D8D78D7E7DA29191807373
+ 000000786D6CFEE6E5EBD2D2E9D1D0EFD8D7F0D9D8F1DAD9ECD6D6EDD8D7ECD7
+ D7F4DFDEF1DDDC998D8D6C6362C4B4B42B2727050404A59797FCE9E8E9D5D5EC
+ D8D7E8D5D4E6D4D4EBD8D7E8D5D4E6D4D3E7D5D4E1CECEE4D3D1EBD9D9EEDDDB
+ F3E1E0FAE7E6F5E3E2FFF3F2796F6F000000776F6EFEEDEDEBDBDAECDCDAEEDD
+ DDF0E0DEE7D6D6DFCECDE2D1D1E7D5D5E8D5D4EDD9D9EFDBDAEEDAD9F2DDDCF0
+ DCDBEFDADA8B7F7E8074743A3434D9C3C3F7DFDEF1DBDAEAD4D3EFD9D8EBD4D4
+ EAD3D2F4DCDBE0C9C8262222D6BFBEE9D0CEEDD4D4E6CCCBEED3D2E1C8C7544A
+ 49CEB7B61E1A1A0000009F8A89F8D9D6EDCECCECCBCAEECFCCEBCBC9E7C6C4ED
+ CDCAF1D0CEECCAC8EDCAC83D34340000003D3433F1CBC9EFC9C7F1CCCAF1CBC8
+ ECC4C2ECC3C0EDC2BFECC0BEEEC1BEEBBCB9F4C1BDC59A98000000816361FFC7
+ C3F1C0BCF2C1BDF3BEBAF3BCB7F2B3AEF2B4AEF5BAB6FFB8B1A8736F69413E7D
+ 53502D1D1C916662FDAFA8FFAEA6FFA39BFD948BFCA198FC9E96FCA79FFDAAA2
+ FFABA3FFAAA2D48C86684441815F5B47302E644643FAA8A2FCB8B3F5AAA5F5AB
+ A7F4B6B1F5BAB5F6BCB7F4B9B5F1B4B0FEBFBBA07877826765AB8B8800000050
+ 4140FACECBF3C8C6F1C8C6FDD4D2DCB6B4725E5DAB908F8E7876000000675858
+ F6D3D1F2CFCEEECDCBEECDCBE7C6C5E8C8C7EBCDCCEDCFCEE9CDCCF0D4D3EFD4
+ D2EBD1D0F9DDDC6F63629B8B8B827474000000655B5AFEE5E4F3DBDAF1D9D8F1
+ D9D8F1DAD8F2DBDAFAE4E3F7E0DFE2CCCCC0AFAE7C7171817676928685181616
+ 211E1EB7A8A8F8E3E3EDDBD9E5D2D1E6D2D1E5D2D1E0CDCDE6D3D2E8D5D5E4D1
+ D0E7D5D4E4D2D1EAD8D7E7D5D4EAD7D7EAD8D7F0DDDCF5E3E2FEEFEF776E6E00
+ 0000736A6AF7E5E5DAC8C8E7D7D6EDDCDCEEDEDCEEDDDCE8D6D6DAC8C8D7C3C2
+ EBD8D7E8D5D3EEDAD9E9D6D4EEDAD9EDD9D8F3DFDEDFCBC9897C7B665C5C6258
+ 58CBB8B7F1DBDBE4CDCBF8E0DFE8D0CFEAD2D0EAD3D28074730B090ADFC9C8F1
+ D8D7F0D7D6F4D9D8FFE8E7A290906F6262BCA7A6000000000000BFA8A7FFE0DE
+ F5D5D4F2D3D1F3D2D0EECFCCEBCAC9EECDCBF0CFCDEFCECCFAD6D48673720000
+ 00957E7DF8D2CFE6C0BEEDC6C5F0C8C5EFC6C3F1C7C5EFC4C2E6B9B6EDBCB9F1
+ BEBBF6C0BCE5B1AE050404282020F7C7C4FECAC6F7C2BEF2BCB7F0B4AFEFB7B1
+ F1B7B2F3AFAAEDA39EFFA9A3D08F8A805653714E4B493432664744B57873EB98
+ 91FD9A92FFACA4FFABA3FFB2AAF3A49CDA928B9A646051363462403E513B3999
+ 706CFFB7B1FBAFA9F7ABA5F7BAB5EFAAA6EBA7A2F2B7B3F6BEBAF6BEBAF6BCB8
+ FFC4C08768667F6260AE88850000002C2524DDBBB9E1BDBBD5B1B0A68C8B7361
+ 608D7876564848010101715F5EFAD6D4F7D4D2F2D2D0EECECDECCCCBE9CAC8E8
+ C8C7EDCECDEED0CFEBCECDF3D7D6F6DAD8F8DCDBFFEDEC685D5CA594938B7C7C
+ 000000342E2EC5B2B1E0CBCAE8D1D0E7D1CFDDC9C7D2BEBEC8B6B6978A896D62
+ 62635A5A665D5D474141201E1E796E6DCEBBBAF8E3E3F0DDDDE9D6D5E9D7D6E8
+ D5D5E7D4D4E3D0CFE3D0CFE7D4D3E4D0CFE6D3D2E1CFCEE8D5D5DCC9C9DFCDCD
+ E2D1D1DECCCCF4E4E3FCECEB746B6A000000766D6DF9E7E5D6C4C4E7D5D4E0CF
+ CFDFCECDE2D0D0EAD8D7D7C4C3DAC6C5EBD8D7D8C5C4E0CDCCE5D1CFE5D2D1DB
+ C7C6E9D5D4ECD6D5D5BFBD9C8C8B605656534B4B8276768B7C7C8E81806E6261
+ 5047471A1717000000020201CFB9B7E7CFCED9C3C2A794948576752E29294840
+ 3F4941400303030404045046467B6C6B998584AF9896CCB1AFDCBCBAE1C1C0E3
+ C3C2E0C0BEE7C7C5E9C8C6BEA2A01F1A1ADCBCBAF2CDCAEAC4C1EAC3C0E4BDBA
+ E5BDBAE2B7B4EABDBAD5A9A7B8908EA2807E8E706E6F58560F0C0C0202026551
+ 4F997977BA908EECB5B1F1BEBAECB5B1EBABA6EEAAA5EB9D99EDA39EF6ABA6F1
+ A59FB886818A615D6346424A312F5539366A413D724A47734B476D4D4A62423F
+ 4C34325238366342408C605CDF9791FFC0BAFAB3ADEFADA8EFA8A3EEA7A3EDB5
+ B0EBABA8F1AFABE5AEAAC399969676736F56542E242430252540323104030306
+ 040413100F2D26254A3F3E4E4342504342372E2D4C403FB39795F3CFCDEDCAC8
+ E1BFBDEECCCAF1D0CFECCDCBE1C3C1EBCDCCE8CAC9E9CDCBE6CAC9CDB4B3AB95
+ 94917F7F7A6C6C201D1C554C4C463F3F0404040202020A09091211112F2A2A55
+ 4D4C3D3737342F2F3631313F39393731304841415950508B7E7DDCC8C8FBE4E4
+ DAC5C4E5D1D0E2CFCEDAC5C4DCC8C7E5D2D1D9C6C5D9C6C5E1CECCDECAC9D7C3
+ C2E4D1D0D7C4C5E4D2D1E1D0CFDFCFCEE1D0CFD6C5C4E9D8D7EEDCDB6C636200
+ 0000776E6EF2E0DFD4C3C2E0CFCED9C7C7DDCBCAEAD8D7E8D6D5D7C4C3DAC6C5
+ E4D1D0D8C4C3EEDAD9E4D0CFD9C6C5D6C2C1EBD7D7E3CDCCDAC4C1FAE2E0DEC9
+ C8B0A09F8F82828779788377766F64628B7E7D9284839081818B7D7CD6C0BEEE
+ D5D5DDC6C5B29F9DA39190BDA8A7B39E9DB29E9DB5A09FC1AAA9AD97969D8988
+ AA9493BCA4A2C4ABAAD6B8B7EDCFCDEACBCADFC0BEE0C0BFE3C2C0E6C4C3B49A
+ 99EECAC8EDC8C6ECC7C4E5BFBCE3BBB9EBC1BFDDB1AFEDC0BDCCA4A2BB9795AE
+ 8D8BAC8E8CAD8E8DBB9896BD9A97A98684B08886BC9391DEB1AEECB7B4EDB1AD
+ EBADA9ECA4A0ECA6A1EFACA7ECA39EF0AEA9F8B2ACF1ACA6DB9892BE817C8D5D
+ 5A8658544E3533412A296B4D4A885F5CA67470CD908BEEA29DFAADA7FAACA7EE
+ ABA5F1B7B1EDA8A3F5B9B4EBA6A1ECABA6EBB4B0F3B7B3D09794B88B88AF8886
+ AE8A88B89491B69290AE8B88BE9895C09A98B18C8AC29D9BBB9897AF9392C3A8
+ A6DCBCBBF2CFCDEAC5C3EFCCCBE2BFBEDCBAB8EECECCF2D3D1ECCCCBDEBEBDE1
+ C3C2E4C8C6EDD1D0DFC4C4C9B2B2B49E9DAB9796A28F8EB09C9BB09D9CB2A09F
+ B8A3A3B4A09FB6A3A2AF9E9DBAA7A7AF9C9BC2AFAEC1AFAEB1A1A0B6A4A3C7B3
+ B2E2CDCCE5CFCEEDD8D6FAE4E3EDD7D6D6C1C0E3CFCEE0CCCBDEC9C7E5D1D0E7
+ D2D1D4BFBED8C3C2E3CFCED4C1C0D4C0BFE4D0CFD4C1BFE2D0CFE2D1D0E0CFCF
+ E3D1D0DBCAC9F0DEDEE9D6D56F6766000000736B6BE9D7D6E8D6D5D7C5C4DAC8
+ C7DBC9C8E5D3D3DDCBCAE3D0CFE4D1CFDCC8C7DCC8C7E6D1D0E0CDCBD9C6C5DF
+ CBCAE2CECCDBC6C5A89897736969988A8AD6C3C2F2DDDCE7D1CFE1CBC9897B79
+ 978887DFC8C7EBD2D2F0D7D6E0C8C7B7A4A3786C6BAF9C9BD5BEBD887A798374
+ 74AA9795A491908676759D8A89ECCFCEE5C8C6F1D3D2F0D2D1DDBFBDE4C7C5E7
+ C9C7E0C1BFDDBCBADFBDBBEDCBC9F2CFCEE9C7C5EDCAC8E9C4C1E2BBB9E3BAB8
+ ECC1C0DDB3B1E5BBB9E5BCB9EBC2BFE9BFBCEFC3C0EFC3C0F1C7C3F8C9C6EFBC
+ B9F0BFBCF1C3C0EAB6B2EAB2AEEDB3B0E9A7A3ECAAA5ECAEAAF0ABA7EDABA6EF
+ B1ACEDAAA5EEACA6F4A8A2FFB4AEFCA69FFCABA4F2A59FF6A39DF9B4AEFFB6AF
+ FAADA7FBB2ACF9B0AAECA29DF3AEA9ECA49FEEB6B1EBB1ACF2B2ADEAB1ACF0AF
+ AAE9ABA7F1BDB9EAB3AFECB0ACFAC2BFFBC7C4FACAC7F8C8C5EDBEBCF0C2BFF6
+ C7C5EDBEBCF3C4C2ECC0BEF0C4C3ECC4C2E7C4C2E8C9C7E2C4C3E9C9C7E2C0BE
+ E3C1C0E6C6C3F4D6D4EED0CEDDBEBDDFC1BFE3C5C4EED1D0E0C5C4EFD3D2E8CC
+ CBEBD1D0E6CBCAEED4D3F7DEDDF2DAD9ECD3D2E8CFCEF1D8D6E7CECDF2D9D7E1
+ C8C7F3DAD9F7E0DFECD5D4E2CCCCE2CCCBDFCAC9DFCAC8DCC7C6E7D1CFDDC7C6
+ E2CCCBD8C3C2DDC8C6DEC8C7E1CCCBDAC6C4DBC6C5DAC5C4DECAC8D5C2C0DBC7
+ C5DFCBCAD5C1C0DFCCCCDBC9C8DECBCAE0CECDD9C7C6E7D6D5E3D0CF6C636200
+ 00006C6464E9D7D7EDDDDCDCCBCADECDCCDECCCBE1CFCEDCCAC9E2CFCFE8D5D5
+ D8C4C4DAC6C6DECACADAC6C6DFCBCAE5D2D1DECAC9DECAC9DAC8C73935359286
+ 86E5D2D1E0CCCBE5D0CFEDD7D6544C4B766B6BE7D0CFE1CACAE4CDCCE3CCCCCD
+ B8B7221F1FBCA8A7EDD4D35149486C605FD6BEBDCFB7B6C1ABAA635858CFB7B6
+ E3C8C7E9CDCCEBCDCBE2C4C2DFC0BFE3C4C2E3C4C1E8C8C6DFBEBCE8C7C5EBCA
+ C8E9C6C4E8C4C2E3BDBAE0B9B6E0B9B6E6BFBDE4BDBBE6C1BFE4BEBBF0C8C6ED
+ C3C0E6BDBAE8BFBDEBBFBCEEBFBCEBBEBCEABFBCE9B7B4EBB5B2EEB7B3ECAEAB
+ ECACA8EEB3AFF1B2AEEBAAA6EEB4AFF2B3AEEEAFAAEFADA7EDA5A0F5B0AAF4A4
+ 9EF0A7A1F1A7A1F9ACA6F5B4AEF1AFA9F2ACA6F6B3ADF6B3AEF1A9A4F2B0ABED
+ A9A4F2B3AEF0BEB9ECAFABEBAFABF0B9B5E9AAA7E9AFABEEBDB9EEBBB7E9B1AE
+ E8B3B0F0C1BDF2C4C1E9BCBAE7BDBBE9BFBCE8BEBCE7BDBAE4BBB9E8C0BEE8C0
+ BFE5BEBDE9C5C3E7C6C5E6C9C8E9CBCAE7C9C7E7C7C5EFCFCDEDCECDDFC2C0E4
+ C7C6E0C3C2E9CDCBE9CDCCE2C6C6E4C9C8E9CFCEE3C9C8EAD1D0ECD4D3E5CECE
+ E4CCCCE0C9C8EBD3D2E5CECDE3CAC9E3CACAEDD5D4EED7D6E0CAC9E9D2D2EDD7
+ D6E4CECDE6D1D0E0CAC9E3CDCCE2CDCCE3CDCCD8C2C1DFC9C8DAC5C3DBC6C5DB
+ C7C5E5D0CFDEC9C8DFCBCAE0CCCBE3D0CFE2CECDDECACAE0CDCDE1CFCFE6D4D3
+ DDCACAE5D3D2EEDDDCEEDBDA756C6C000000746C6BF7E5E5E9D9D8E7D6D6E9D8
+ D7EDDBDAF1DFDEF2E0DFF1DDDDF4E1E1EAD6D6ECD9D8F2DFDEEEDBD9EEDBDAEA
+ D7D6E9D7D6E9D7D6EDDADA585152AEA1A0F2E0DFE5D2D2EAD7D7F9E3E36E6564
+ 8A7E7EF4DCDCE2CCCBE2CCCBECD5D5E6D0CE403A3AD4BEBEFCE1E17065648779
+ 77F7DDDCE8CECDF4D9D7D3BCBBD7BFBEE8CCCBEDD0CEF1D3D1F5D6D4F2D3D2ED
+ CECCEECFCDEBCBC9E6C5C3EDCCC9EBC8C6EBC7C6EBC5C4E8C3C0EDC8C5EDC8C5
+ EFCBC9EFCCCAF1CCCBF0C9C7F0C8C6EFC8C5EFC6C3EEC1BFEEC1BFEAC1BEEAC1
+ BEECBBB8EFBCB9F1BEBAEFB6B2EFB3AFF0B7B3EDB2AFF2B4B0F2B9B5F1B9B5F3
+ B5B0F4B8B3F5B3AEF6B1ACF8B4AFF9ADA7F8B3ADF5ADA7F7ADA7F6B7B1F8BAB4
+ F8B3AEF5B4AFF2B1ACF2AEAAF4B3AEF4B6B1F4B3AFF5BEB9F3C1BCF2B6B2F4BD
+ BAF4BEBBF6BAB6F6BFBBEABBB7E9B9B5EDB9B6F2BFBCF6C7C5F1C4C1F1C7C4F3
+ C9C7EEC5C3F3CCC9EEC6C5EFC8C6F3CCCAF1CBC9EFCAC9EDC8C7EFCCCBF2D3D1
+ EED1CFF2D7D4EDD0CEEFD1CFF1D3D2EFD1D0F1D4D2EACECCEED2D1EACFCEE8CD
+ CCE5CBC9EAD0CFECD3D2EDD4D3E6CECDEED6D5EAD3D2EBD3D2EDD5D4F0D7D6F0
+ D6D6EBD3D1EFD7D6F1DAD9F0DAD9EFD8D7F4DDDCF7DFDFF4DDDCF1DBDAF3DDDC
+ EFD8D7EFD8D7F0DAD8EAD5D4E7D1CFEAD5D4EAD6D5E2CDCDE9D4D4E3CFCEE9D5
+ D4EAD7D6E7D5D4EDDBDAEEDCDCF4E3E2EDDCDBEFDEDEEEDDDDF9E7E778707000
+ 0000756D6DFEEDEBE7D6D6E5D4D4E5D3D2E4D0D0E6D4D3E4D2D1EAD7D6E8D6D4
+ E3D0D0E4D1D0E5D3D2E7D4D3EBD9D8EAD8D8E8D7D6EAD8D7EDDBDB575051AA9D
+ 9DEFDDDCE6D4D3E9D6D6F7E2E16D63638F8282FFEBEBF2DCDBF1DAD9F3DBDAED
+ D6D5403939CCB7B6F8DFDD6C6161897B7BF9DFDEF2D7D7D1BBB9E4CBCAEDD2D1
+ E7CCCBECCFCEF0D2D1EDCFCDEDCFCEE6C8C7ECCCCBECCCCAE6C4C3E8C7C5EBC8
+ C7EBC8C6EECBC9EAC7C5EBC9C7E7C5C3E9C6C4E9C5C2ECC7C5EDC7C5ECC5C3E7
+ BEBCEBBFBDEBC1BEEEC7C4EEC4C2EDBEBBECBDBAEEBEBBF1BBB8EFB6B3F0BAB6
+ F0B9B6EEB3AFF0B6B2F2BEBAF2B8B4F1B9B4F2B6B2F5B3AEF4B3AFF3AFABF5AC
+ A6F8B7B2F2ACA7F3AEA9F0B1ACF4B8B2F3B0ABF6B8B3F1B1ACF2B4AFF2B1ADF2
+ B7B3F3B5B2F5BAB6F2C2BEEDB9B5F2BAB6F0BDB9F1BEBBF3BAB7ECB8B5E9BCB8
+ E9BCB9EEBDBAF5C4C0F2C4C2F3C9C6F2C9C6ECC4C3F2CCCAF0CAC8EDC7C6EFCA
+ C8F0CACAEFCBCAEDC9C8EECAC9F0CCCBEECCCBF0D2CFEFD4D2EFD4D2F1D7D6EF
+ D3D1F1D5D3EED1D0EBCFCEF1D5D3EDD3D2E5CBCAEBD1D0EED5D4EED6D5EBD3D2
+ EFD7D5ECD4D2E4CAC9EAD0CFE8CFCDE7CECCE2C9C7E6CECEE9D2D2EBD4D3E4CD
+ CCE8D2D1EFD9D8EDD6D5E6D0CFE6D0CFE7D1CFE6D0CFE7D0CFE9D3D2E3CECDE2
+ CDCCE5D1D0E3CECCE7D2D1E3CFCEE9D6D5E8D5D4DFCDCCEBD9D8E7D6D5EDDCDB
+ EFDEDDF1E0DFF0E0E0FEEDED766E6D000000766E6EFFF0EFEEDCDCE7D6D5E9D6
+ D5E2CDCCE3D0CFDECCCBEAD7D7EEDCDAE8D5D4E9D7D6E8D6D5EAD8D7E7D6D6E7
+ D6D5E1CFCEE7D4D4ECDADA565050A99C9CF0DDDDE6D3D3E7D4D3F7E1E1706666
+ 4B44448A7D7D8478788477778376757D7170292424CFBBBAF7DFDE6F64645950
+ 50AA9898A392914B4343D0BAB9ECD3D2E8CECDE7CCCBEDD1D0ECCFCEEED0CFEA
+ CBCAEFCFCEEECECDEBCBC9E7C5C5EAC9C8EAC8C7EBCAC9EECECDEDCDCBEBC9C7
+ EAC7C5EAC6C4EECAC8ECC7C5F0C8C7EFC6C3EFC7C5F0CBC9F1C8C6EEC2BFE9BC
+ BAECBEBBECB9B7ECB6B3EDB9B6F0BDBBF0B9B5EFB8B4F1BDBAF1BCB8F2BAB6F5
+ BEBAF6BBB7F7B7B3F8BCB8F5B2AEF2AEA9F6B9B5F4B1ADF2B0ACEDB2ADF1B9B4
+ F4B5B1F5B9B4F5B8B4F2B8B3F0B2ADEEB4B0F0B7B3F1B6B3F2BEBAF1C4C1F0BC
+ B9EEBAB6F1C2BEEEBCBAEFBAB8F3C2C0F0C5C3EDC3C0EFC1BEEEBFBDEEC3C1EE
+ C6C4E9C2C0EBC6C4EDC9C7EBC7C6EDCAC8EDCAC9EDCBC9E8C6C5EAC8C7EECCCC
+ ECCBCAECCBCAEDCDCCEDD0CEECD2D0E7CECDF0D6D5EED4D3EBD0CFF3D6D4F4D8
+ D6EDD1D0E2C8C7E6CCCBEED6D5EAD1D0EED4D3ECD3D1E9CECDEDD3D2EBD2D1EE
+ D5D4ECD4D2EFD7D6EDD7D5EED8D7E8D1D1E6D0CFECD7D6EED8D7EAD5D4E8D2D1
+ E9D2D1EBD5D3EDD6D5EDD6D5EAD4D3E6D2D0E5D0CFE3CECCE8D5D3E6D3D2E6D4
+ D2E8D5D5E3D1D0EBDAD9E8D8D7EBDBDAEDDCDCF0DFDFF2E2E1FFF0F079717100
+ 0000746C6BFAE8E7E6D5D4E9D7D6EFDAD9F1DDDCEEDBDAE7D4D4F2DFDEEEDCDB
+ E3D1D0E8D6D5E9D7D6E6D3D3E9D7D6E7D5D4D9C7C7E4D2D2EAD7D6564F4FA79A
+ 9AEAD7D7E2CFCFE2CFCFF5DFDF6E6564766C6BD4C1C0C4B1B0CAB7B6C8B5B4BD
+ ABAB363130C7B4B3F7DFDE6E6362796C6CDEC7C6D7C0BF9D8D8CD6BFBEE9CFCE
+ E8CDCDE0C4C3E6CAC9E3C6C6ECCECDE4C5C3E7C8C6E7C8C6ECCCCBE7C8C6E6C7
+ C5E8C9C7E9C9C7E8C9C7ECCBC9E9C6C5ECCBC9EAC8C7ECC8C5EAC4C2EDC7C4EA
+ C4C2EECAC7EDC4C2EDC1BEEDC1BFEBBFBCECBCB9EDBAB8EEBCB9EFBEBBEBB7B4
+ EBB5B3F1BDBAF0BFBDF2BCB8EFBAB7EFB9B4F4BBB6F1B4B0EEB5B1F2B2ADF3B2
+ AEF4BBB7F4B4AFF4B5B1F1B7B3EDB8B3F2B6B2F4B9B5F2B9B5F0B7B3EEB4B0EF
+ B4B1F3BDB9F5BDB9F0B9B5F2C5C2F2C5C3F0BEBBF2C2BEEDC1BFEDBDBBF4C1BE
+ F0C2BFEDC3C0F2C9C6F0C5C2F0C4C2F0C7C5EEC7C5ECC7C5EDC9C7E7C5C3EBC9
+ C8E9C6C5E9C9C7DFBEBDE7C6C5EECECDE5C5C4EAC9C9E7C8C7E6C8C7E1C5C4E0
+ C5C5EBD1D0EED6D6EAD2D1EED5D4F0D6D5E9CECCEBD0CFDCC2C1E4CBC9E1C8C6
+ E9CFCEE3CAC8DFC7C5E7CFCCE4CBC9E5CCCAE2CAC9E5CDCBEFD7D5E8D1D0EBD4
+ D3E7D1D1EDD7D6EBD6D5E7D1D0E6CFCFE6D0CEE5CECEE6D0CEE6CFCEE9D2D1E4
+ CFCDE4CFCEEAD5D4E3D0CFEBD8D7EBD8D7E6D4D3DCCACAE6D4D4E4D3D2E6D5D5
+ EBDBDAE6D7D6EBDBDAFEF0EF7971710000006E6665E5D3D2E4D2D1DCC8C6D3C0
+ BEEFDBD9D7C5C4DECCCCE6D5D3DDCBCAE4D2D1E8D5D5DFCCCBDECCCBDCCBCAEE
+ DCDBDECCCBE4D1D0E1CFCE524B4AA69999E5D2D2E0CDCDDFCCCCF2DDDD69605F
+ 8A7F7EF1DBDAE2CCCBE2CCCBE4CFCEDCC8C73D3736CBB7B6F7DEDD6E63638173
+ 72EED5D4E0C8C7E9D1D0DCC4C3DFC5C4DDC3C1DCC0BFEBCFCEE7CAC9E9CBC9DD
+ BFBDE2C4C2E4C6C4EFD0CEE1C3C2E2C5C3E2C3C1EECDCBDDBCBAE3C3C1E6C5C4
+ DFBEBCE3BFBDDEB9B7EBC6C4E8C4C2E3BFBDE9C2BFE4BAB8E5BBB8E3B7B5E9BA
+ B8E3B2AFEEBCBAEEC0BDE8B7B4E3B0ADEAB8B4EDBEBBE5B4B0ECB9B5E9B7B3E8
+ B3AFEDB4B0E8AEABEBB2ADEDAEAAE5A7A3EBB3AEEAACA8EBAFAAEEB5B2E7B2AE
+ E8AFABF0B8B4E9B3AFEDB6B2ECB6B2E7ADA9E9B5B1EEB8B5E3ADA9EBB9B6F0C6
+ C3F0C3C0EABAB6E5B7B5E6BBB8EDBEBBE5B6B3E6B9B6EDC5C3E3BDBBE9C0BEF1
+ C7C5EDC5C4F2CCCAE9C5C4E3C0C0E7C5C4E0C0BFEBCCCAE0C1C0E7C8C7ECCDCB
+ DBBBBAE9CAC9E9CCCAE6C9C8E3C6C5E1C4C4E2C6C6E4CBCAE1C9C8E0C9C8E0C9
+ C8E0C8C6EAD0CEDBC3C1DDC4C3E2CAC8E2C9C7DDC4C3DAC1BFE5CCCBDCC3C2DC
+ C4C2D9C1C0DBC3C1EBD4D3DCC5C3E7D0CFDEC8C7E1CBCAD9C4C2E5D0CFE6D0CF
+ D2BDBCE5D0CEF1DBD9EFD9D7E3CDCBD0BAB9DBC5C4DAC6C4DCC9C7DCC8C7EEDB
+ DADBC8C7DBC9C8DAC9C9E6D5D5E7D6D5EDDDDCD8C9C8D9C8C8ECDAD9766E6D00
+ 0000736A6AE6D2D0F6E2E1E2CECDD9C6C4ECD9D8DAC8C7DECDCCE6D5D4DECCCB
+ EEDCDBE8D5D5D8C5C5EFDDDCE2D1CFC5B5B5BEAEACE8D5D6DECCCC4741419C8F
+ 8FE5D3D3CABABAB1A2A2FDE8E75C5454776D6DE2CBCAEAD5D4E2CDCDDAC4C3D1
+ BCBC2E2A2AC9B6B5F6DDDD615757756867EDD4D3DCC3C2CEB7B6968584E4CBCA
+ E3C8C7DDC2C1EED1D0E6CAC9E1C5C3DFC2C1E9CBCADEC2C0E6CAC9E2C6C4F0D1
+ D0DEBDBBE9C9C7DDBEBBE4C4C2E7C6C4E0BDBBE9C5C3DEBAB8EFCDCAE4C2C0EB
+ C4C2E7BFBCE7BEBCE8BEBBE6B9B7EBBBB9E1B2AFF1C4C2F1C3BFE5B4B2E3B1AE
+ EEC0BCEEC0BDE7B5B2E9B8B5E9B8B4F2BEBAE6AEAAE9B3AFECB3AFF3B7B3EBB2
+ AEEAB3B0EBAFABF1B8B4E9B2AFEFBCB9ECB6B2ECB5B1EBB6B3EFBAB6F1BEBAE8
+ B1ADEEB9B5EDBBB8E2AEABE8B5B1F2C4C1F1C8C5E6B8B6E6B7B4EABFBCEEC4C1
+ E8BAB8EABCB9EBC0BEE2BDBBE4BFBEF0C9C7EEC7C5F4CDCAE7C2C0E6C3C2EECC
+ CBE2C2C0EDCDCCE1C1C0E3C4C3E5C6C5DFC0C0E6C9C8EED1D0E9CDCBE4C7C6E6
+ CAC9EACFCEDFC5C4DEC3C3E9CFCEE6CFCEE3CCCBE4CDCBE1CAC8E4CCCBE1C8C7
+ E0C8C6E3C9C9E1C8C6E0C7C6DDC5C3E0C9C7DBC3C2E1CBC9E9D2D1DAC4C2E4CE
+ CDDAC5C3E3CECCD9C4C2E4CFCEDFCBC9D8C2C1DFCAC9F0DBDAF4DFDDEED9D7D6
+ C1C0EAD5D4D6C3C2E8D6D5D7C4C3E4D2D1D6C3C3EEDCDBDBCBCAE2D2D2EFDFDE
+ E6D6D5D8C8C8EADADAE9D9D86F67670000006A6160DDC9C8E3D0CFDAC7C6D5C3
+ C2DBCAC9DDCCCBDECDCCDECDCDD9C8C7DCCACADFCDCCD7C5C4EFDCDCDFCECDBD
+ AFAE635B59A699989C8F8E696161877B7BA39696807575796F6EDAC8C7655B5A
+ 6B6160C8B3B3E0CBC9DCC7C7DEC8C7AD9B9B504847968786D2BDBC7166657C6F
+ 6EA49291A08D8C877877877776EBD1D0E2C7C6DFC4C3EDD2D1E5CAC9E3C9C8DF
+ C4C3E0C5C4E3C7C6E2C5C4E4C6C4EBCCCADCBDBBDEC0BEE2C3C1E3C1C0E4C0BF
+ E1BEBCE4C1BFDBBAB8EBC9C7DFB9B7E7BFBDE9C1BFE1B9B7E2B8B5E3B5B3E6B8
+ B6DFB4B1F4C8C5F5C6C3E7B6B3DEB0ADE5B9B6E7B9B6E4B4B2E7B9B6E6B4B1E8
+ B5B1E5B0ACEAB7B3E6ADAAE8AEAAF4BDB9E3ADAAE5ABA8F0BAB6E6B0ADE9B9B6
+ E8B5B2E8B3AFE9B7B4E7B4B0EAB8B4E5B2AEEAB5B2E7B6B3EAB8B5E3B1AEEDBD
+ B9F1C7C4E9C0BDE5B7B5E4B7B4E8BFBDE6BDBBE6BBB8E3B8B6EAC2C1E4C0BEE6
+ C3C1EFCAC8EFC8C6E1BCBAE5C1BFE9C8C6DEBEBDE8C8C7E0C1C0E5C7C6DCBFBD
+ E8CBCBDFC4C3ECD0D0ECD0CFE4C8C8E3C8C7E4CAC9E4C9C9E3C8C8DFC4C3DFC5
+ C4E2C9C8E5CDCCDDC6C6DFC8C7DDC5C3DBC3C2E0C8C7E6CECDD7BFBEDFC7C6E9
+ D2D1D8C2C1DCC5C4E2CDCBDAC6C5E7D3D1DCC9C7E0CDCBDAC6C5E4D0CFD9C5C4
+ E4CFCED7C3C2EBD8D7EEDBDAE2D0D0D5C3C3E6D3D4DAC8C7DAC8C8D9C8C7E8D7
+ D6D6C5C5EAD9D9D8C8C8E1D2D1E8D8D8DECFCFD7C8C8E4D5D4E9D9D96C646400
+ 0000706766F0DDDBE2CECDE4D1CFE2D0CEE5D3D2E7D6D5E4D2D2E5D5D4E3D1D0
+ E6D4D3E5D3D2E3D1D0EEDDDCE1CFCEE3D0D0E1CECDE9D7D6DECCCAE8D5D4E2CF
+ CFDDCBCAE2CFCEE1CDCBDFCAC8E0CAC8EAD3D2EAD4D3E4CFCDE8D2D2E5D0CEDB
+ C5C4E6CFCEDFC8C8DFC8C7EBD4D2E3CCCBD9C1C0DEC6C4E8CECCE5CACAE9CFCE
+ E3CAC9E3C9C8EBD2D1EAD1D0E9D0CFE3CACAE6CCCAECCFCEE3C5C4E9CBC9E8CB
+ C9E4C7C5E3C4C2EAC9C7E9C7C5EBC9C7E9C8C7E9C9C7E9C8C5F0CAC8E3BDBBE5
+ BFBDEAC4C1E7BEBBEABFBDECC0BEECC1BFE9BFBCF1C4C2F0C2BFEEC1BEE9BFBC
+ EBC1BDECBEBBEBBEBBECBFBCEBBAB7E9B7B4EEBBB8F2C0BDEEB7B4EFB7B3F7C3
+ BFE4B0ACE7B0ACEFBBB6E5B2AFEDC0BCE9B8B4EAB6B2F0BFBCECBBB8EFBEBBEF
+ BEBBEDB9B6EBBBB8F0C1BEECBCB9EFBFBCEDC1BEEBC4C1EAC1BEEABDBAECC1BF
+ ECC5C2F0C8C6E7BEBBEAC1BFE8C1BFE7C5C2EFCCCAECC8C6E7C2C0E6C1BFECC9
+ C8E8C8C6E8C9C7E8CAC9E8CAC9E4C7C6E7CCCBE8CCCBEDD3D2EFD4D4E4CAC9E2
+ C8C7E2C8C7E1C8C8ECD2D2E5CBCAE5CBCAE8CECDEED4D3E3C9C8E3CAC9E3CBCA
+ E3CCCBE3CCCBE8D1D0D7C0BFE1CAC9ECD5D5E4CECDE2CCCBE5CFCEE7D2D2EAD5
+ D4E3CECEDFCBCAE0CCCBDFCBCAE2CECDE5D1D0DFCCCBE8D6D5E9D7D6E0CECEDF
+ CCCCEEDBDBEFDEDDE1CFCEE7D5D4ECDBDAE1D0D0EEDDDDE1D1D0EADADAEADCDC
+ E2D4D5DCCCCDEFDFDFEBDCDB706969000000776E6DFFF1EFF2E1DFF5E1E0F1DF
+ DDEDDBDAEDDBDAECDBDAEFDDDDEFDDDCF1DFDEEFDEDDF3E1E1F1DFDEECDAD9ED
+ DAD9F4E1E0EFDBDBF2DEDDF3DFDEEBD6D5ECD7D5F2DCDBF1DBDAEBD6D4E7D1D0
+ F0DAD9EDD7D5EAD5D4EED8D8E7D1D1E8D2D1EFD8D7EFD7D6E6CECEEDD4D5EBD3
+ D2EBD2D0EDD3D2EFD4D3E9CFCEE6CDCDE9D1D0E7CECDEAD1D0EAD1D1E9D0CFE2
+ C8C7E0C5C4E2C6C5E4C7C5ECD0CEEFD2D0EED0CEEBCBC9E9C9C8EBCAC9E8C8C6
+ ECCDCBEECCC9EECAC7F4CFCEF1CCCAEBC7C4EDC6C3ECC3C0EEC4C1EDC4C2EEC6
+ C4F2C9C7F2C7C5EFC4C1F2C8C6F1C8C6F2C6C3F4C7C4F0C5C2EFC2BFEFBFBCF0
+ BEBBF0BFBCF2C0BDEEB8B6EFB9B6ECBAB7DFACA8ECB7B4EFBCB9E8B6B3E6BBB8
+ E6B6B3EAB8B5EFC0BEF0C1BEEFC0BDF3C4C0EDBCB9EBBAB9EEC1BFEFC2BFEFC1
+ BEEEC1BEEAC2BFEFC9C7F0C7C4EBBFBDE4BCB9EAC3C1F0C9C7EFC8C6EFC8C6EF
+ CAC8EFCDCCEFCDCCF2D0CFEECBC9F1CDCCF2CFCDF2D3D1F2D4D3EBCECDEED1D0
+ EACFCEEFD4D3E8CECDEAD0CFE9CECEE0C6C6E0C7C6E1C7C7EDD3D3F0D6D5EDD4
+ D3EDD2D1F1D5D3E9CDCCEDD2D1EBD1D0EED5D4EDD6D5DFC9C8D8C3C1E8D2D1EA
+ D4D3EDD7D6F3DDDCEFD9D8F0DCDBEDD9D8EAD6D5E8D4D4E9D5D4E6D3D1E9D6D5
+ E6D2D1E8D6D5E7D4D4E8D6D4EDDADAE3D0CFE7D5D3F1DEDEE5D2D2EAD8D7ECDB
+ DAE4D3D3E5D6D6E9DAD9EADADAE6D8D8EBDEDEDBCCCCE2D3D3EBDBDB766F6E00
+ 00006F6665F3E0DFE9D7D6EBD8D7EDDBD9EFDDDCEDDCDBEBDADAE8D7D6E9D8D7
+ EFDEDDECDADAEDDBDBEFDDDCE3D1D0EAD7D6F1DDDBF0DBD9F6E1DFF7E2E0EED7
+ D6ECD6D4EED7D6EED8D6EBD5D3E9D2D2EED8D7F0DBDAEED8D8EDD8D7E5CFCEE7
+ D0CFE8D1D1EBD4D3E2CAC9E9D1D0ECD4D3E8CFCEE9D0CEF2D8D7E6CECCE9D0CF
+ E9D1D0E8D0CFE9D1D0E9D0CFECD2D1E7CCCBE3C8C7E8CDCBE0C4C2E4C7C5E6C8
+ C6EACBC9EECECCE9CAC8ECCDCCEECFCDEECDCBEBC8C6ECC8C6F3CFCDEFCBC9EA
+ C5C2EAC3C1EAC2C0EDC5C3E9C4C2EAC2C0EDC4C2EDC3C1EEC5C2EEC6C4EBC3C1
+ EBC0BDF4C8C6EFC4C2F0C3C1F0C1BEF0BEBBEEC0BDF1C0BCEFBCB9EFBCB9EFC1
+ BDEBBAB7F3C0BDEFBEBBEFC0BDE7BDBAEBBDBAEDBDBAEDBFBCECBFBCECBEBAED
+ BFBBEDBFBCECBBB8EBBFBDECC1BEEDC1BEECC0BEEBC1BEEEC8C5EFC9C6EFC7C4
+ E8BFBCEFC8C5F2CDCAF4CECBF1C9C7F0C9C8F1CDCBF0CFCDEFCFCEEECECCF2D0
+ CEF3CFCDF2D0CEF2D2D1E8CBCAEACECDEACECDEDD2D1EBD0CFE4CBCAEED4D3E6
+ CDCCE3CAC9E4CAC9E8CECEE9CFCEE9CECDE8CDCCEFD4D3EDD2D0EBD1CFE9CFCE
+ E9D0CFEED6D5E5CECDE5D0CFEED9D8EED9D8ECD7D6EED9D7EAD5D4EED8D7ECD8
+ D7EAD6D5E8D4D3E6D2D2E2CECDE7D3D2E6D3D2E5D4D3E9D6D6E8D6D5ECDAD9F0
+ DCDCEFDDDCF4E1E1EDDCDBF1E0DFF2E0DFECDCDBE4D5D5E6D6D6EDDEDDE4D5D5
+ ECDEDDE8D9D9DBCDCDF7E6E6776F6F000000746B6BFCE9E8EDDBD9E8D6D4E7D5
+ D4E3D1D0E3D2D1EFDEDDEAD9D8EBDAD9F0DFDEEFDEDDEDDCDBF0DDDDE9D7D6EE
+ DBDAF1DBD9F3DDDCE7D1CFDFC9C7D9C3C1E6D1D0E9D3D3E8D3D2E6D1D0E6D0CF
+ EAD4D2EDD8D6E0CAC9E6D1D1EAD4D4EED8D7EDD6D6EED7D6ECD5D4E3CCCBE6CE
+ CDF0D7D6ECD2D1F2D9D8EAD3D2E6CFCDEAD3D2E9D1D0E6CDCDE7CDCCEBD1D0E4
+ CAC9EBD1D0EFD4D3EBCFCDEBCDCCECCDCCE8C9C7E0C2C0E9CCCAE8CBC9EAC9C8
+ EECBC9EAC7C5E9C5C4F1CECCEFCAC8EAC4C3ECC5C3E8C2C0EAC4C2EBC6C3EBC3
+ C1E2BAB7E6BEBDEDC7C5EFC9C6EFC6C4ECC1BFEDC5C2ECC2BFEEC3C0EEC0BDEF
+ C0BEECC0BDEFBEBCF0BFBCEEBEBBF2C5C2F3C2BFEEBEBBEABBB8EEBEBCEAC0BD
+ EBC0BCEABDBAEDBFBCEEC2BFF0C3C0F0C3C0EDC2BEEBBDBAE8BCBAE9BFBDEEC3
+ C1EDC2BFE4B9B7EDC6C4EDCAC7ECC7C4EAC2BFF2CAC8F1CCCAE8C4C1EFCAC8F2
+ CAC9EEC9C6EFCDCAEAC9C7ECCCCBF3D2D0EAC8C6E0BDBBE3C2C0EACBCAECD0CF
+ EED3D1EFD3D2E3C9C7E8CECDF2D9D7F1D8D7EDD4D3E8CFCEF1D7D7F2D8D7EED3
+ D2EBD1CFECD2D0EED3D2E6CCCBE7CECDE2C9C7E5CCCBF0D9D7ECD5D4E9D3D1EF
+ DBDAECD7D6ECD8D7EAD6D5DCC8C7E5D0D0EBD6D5EBD6D6ECD7D7E5D2D1E4D0D0
+ DFCCCBDECCCBE8D6D6E8D7D6E9D7D8EEDCDCF1E0DFF1DFDFF0DEDEF3E2E1F4E3
+ E2F0E0E0EADADAE6D6D6ECDDDDEADCDBEDDDDDF3E4E4F0E2E2FFF0EF79717000
+ 0000746C6BF4E1DFE8D6D5E2D0CEE8D5D4DDCBCADECFCEF2E0E0E3D3D2E0CFCE
+ EEDCDCEBD9D9E6D5D4EAD8D7EEDBDAF0DCDBE5CFCDEFD9D7EBD5D4E8D3D2D9C5
+ C4DCC7C6F2DCDCE9D4D3ECD6D5E8D2D1E6CFCEE9D4D2DCC7C6DEC8C7E6D0CFE7
+ D0D0E7D1CFE5CECDE6CFCEDBC4C3DFC8C7EFD7D6E5CBCAECD4D2ECD5D4E8D2D0
+ EBD3D2E9D0D0E7CECEE6CCCBEAD1D0DDC3C2E8CDCCE9CECDE6CACAE9CCCCE8CA
+ C9EACDCBD9BDBBE7CAC9E9C9C7E2C2C0EECDCBF1CFCEEBC8C6E5C2C0EFCAC8E7
+ C2C0E9C4C2E9C5C3E5C1BFE9C4C2EBC4C2DEB7B5E7C2C0ECC7C5E9C3C1EAC2C0
+ E6BFBDEDC5C3E9BFBCEDC2BFE9BCB9E9BDBAE9BEBBEEBEBBE8B9B6E5B6B3EDC1
+ BFF0C0BDEABBB8EBBDBAF0C2BFEAC2BFEAC0BDEBBFBDECBFBCE8BFBCEBC0BDEC
+ C1BEEEC3C1EBC0BDEABDBBEBC2C0EFC5C2EDC3C1E1B7B5E9C1BEE9C5C2E9C7C5
+ E8C2C0E6BFBDE6C0BFDBB8B6EAC6C4F4CECDF0CAC8F1CCCAE6C3C1F2D0CFEDCC
+ CAEACAC7EBCAC9DCBCBADDBEBDE8CAC9EBD0CFEFD4D3DCC0BFE4CACAEBD2D1E7
+ CECDE9D0CFEBD2D1E7CECDEDD4D3F1D8D6ECD2D1E6CBCAEDD4D2DFC5C5E2C9C8
+ D9C1C0DBC3C1EED6D5E7D0CFDDC5C4ECD5D4E7D1D0E3CFCDE5D2D1D5C2C1E2CE
+ CDE8D3D2E7D3D2E5D0D0E0CCCCE5D1D1E2CFCFD8C7C7DFCECEF0DFDFF2E1E0ED
+ DCDBE5D4D4E7D6D5F0DFDEEBDAD9E8D8D7EEDEDEECDBDBE2D3D2E4D4D4E2D3D3
+ EDDEDEE8D9D9ECDEDDF9EAEA736B6B000000746B6AE4D1CFE3D1D0D2C1C0E4D1
+ D1E0CECDDECFCEE2D2D1DECECDDBCACAE2D0D0DBC9C8DDCBCAD7C4C3E3CFCED8
+ C4C3E0CBCADDC9C8E9D5D4D9C5C4D5C1C0E4D0CEF3DEDCE5D0CFD6C0C0E4CECD
+ D9C3C2E0CAC9DFCAC9DDC7C6E2CCCBD7C0C0E2CCCBD8C1C1E2CCCBDCC6C4E3CC
+ CBEFD9D7D4BCBADFC7C6EDD6D5E7D0CFE1C8C8DCC4C3DFC6C6DDC5C4E7CFCEDD
+ C3C2E7CCCBE1C5C4E1C6C5E3C8C6DFC4C3EED3D2DCBFBEE9CAC8E4C4C2DABBB9
+ EACAC9F0CFCDEDCAC9DBB8B6ECC7C6E3BFBDE1BEBCE1BFBDE3C0BDE8C2C0EAC5
+ C3DFBAB8E7C3C1E2BEBCE2BBB9E1BAB8E1BBB8E9C0BEECC3C0EBC1BEE1B5B2E6
+ BDBAE3B7B5EABCB9E4B6B3E4B8B5E5BBB9E8B9B7E2B5B2E9BDBAEBBEBBE4BDBA
+ E6BCBAE9C0BDE6BAB7E5BCBAE5BBB8E4BAB7EBC1BFE3BAB7E4B7B5EAC2BFEDC5
+ C3EDC4C1E0B8B5E5BDBBE3BDBBE2C0BEE4C2BFDEB9B7ECC6C4DEBAB7EBC7C5F2
+ CFCDF0CCCAE2BDBCDBB7B5F0CECCE1C0BEE8CAC8E0C2C0E0C1C0E8C9C8EACBCA
+ E9CCCBEBCFCEDAC0BFE7CDCCE4CACADEC5C4E7CECEE9D1D0D9C1C0DFC6C6F1D9
+ D8E5CCCBD8BFBEEFD6D5DBC2C1E3CAC9E0C7C6E0C8C7EAD2D0DEC6C5DEC6C5E3
+ CBCAE5CDCCD8C1C0EAD5D5D9C5C4EAD6D5EDDAD9E3CFCFD6C3C1DECBCAE3D0CF
+ DECCCCDAC9C9E3D3D3EEDDDDE3D2D3DACAC9E3D2D2DAC9C9E2D2D1DCCCCBE1D1
+ D0DFCFCFE0D0D0DDCDCDDDCDCDD7C8C8EEDFDED8C9C9E8D9D9EADAD96E666500
+ 0000766D6CE6D2D1F5E3E1DCCBC9EBD8D7E4D2D1E1CFCEDFCECDEAD8D7E2D0D0
+ DDCCCADBC9C8EFDCDBD9C6C5E2CFCED5C1C1E9D5D4DECAC9D2BEBDE1CDCCECD9
+ D7E2CECDF0DBDAE4CECDD1BCBBE5CFCEDCC6C5DEC8C7DEC9C9DFCBCBE5D0CFD9
+ C3C3EBD6D5DDC7C6EBD5D4E0CAC9E3CECDE8D2D1D9C1C0DDC5C3ECD4D3EDD5D5
+ DFC8C7E2CBC9EBD3D2DEC5C4E8CFCEDDC3C2E6CBCAE0C6C5E3C8C7E7CDCBE1C8
+ C7EED2D1DEC0BFECCDCBE0C2C0DDBDBCE6C7C5EDCDCBEBC9C7E1BEBCE3C0BFE1
+ C0BEE8C6C4E2BFBEE6C3C1E8C4C2E2BEBCE5C1C0E4C2BFE2BDBBEAC3C1EBC5C2
+ E5BFBCE4BCBAEDC4C2EBC1BFE1B7B4ECC4C1E2B8B5E4B8B5E6BAB7E9BEBCE1B8
+ B5E4B7B4E3B7B4EBBFBDE8BDBAE2BCB9E6BDBAE7BEBCE2B6B4E9C1BEE6BDBBE8
+ C0BEEBC2BFE1BAB7E3B8B6E7BEBBF1CBC8F0C8C6DFB9B6ECC4C2E9C2C0E6C2C0
+ EAC8C7E1BDBCEBC6C3DCB7B5E8C5C3EFCDCBEECCCBDFBCBADFBCBAE5C4C3E1C1
+ C0DEC1C0E6C9C8EBCFCEE4C8C6E5C7C6E8CAC9DFC2C1E1C7C6DFC6C5E5CCCBE0
+ C7C6EED6D6E6CFCEE0C8C7E1C9C9ECD5D4E0C9C8DFC7C6E4CCCCDEC6C5E6CECC
+ E1C8C7E0C7C6E4CCCBE3CBC9EDD5D4DBC3C2EDD6D5DEC6C6EED8D6D8C4C2E7D3
+ D1EFDBDAECD9D8DBC8C6E8D5D5E0D0D0DACACAE7D6D6E8D8D8E9D8D8DCCCCCD7
+ C7C7ECDBDBDECECEDDCDCEE1D1D1E9DADAD9C9C9D8C8C8E3D4D3E0D1D1D7C8C8
+ E5D6D5D9CACAEEDFDFE8D8D7746C6B000000726969E3CFCEE7D4D3D6C4C3DECC
+ CBDBC9C8E1D0D0E0CFCEDAC9C8D6C4C4DACAC8DCCBCADECCCCDAC9C9E5D3D2D5
+ C1C0E7D4D3DBC7C6E9D4D4E8D4D3DEC9C9D6C1C0F0DBDAF0DADADBC6C5DFCACA
+ DBC7C6E2CDCDDCC8C8E2CECEE5D1D1D7C3C2E4D0D0D9C5C5E2CECCDAC6C6E4CF
+ CEDCC6C4E2CAC9DCC3C2E0C8C7EED7D6E5CFCEDEC6C5E2C9C9DFC6C5E7CECDDD
+ C3C3E6CDCCDEC5C4E2C9C8E4CBCADEC3C2E4C7C6E1C3C2E6C8C6DCBEBDE5C7C5
+ E2C3C1EDCCCBEAC8C6E5C4C3DDBBBAE4C3C2EBCAC7E0BDBBE0BDBBE2BEBCDFBB
+ BAEAC8C5E0BDBBE3BEBCE6C0BEEAC6C3E0BAB8E6BFBDECC4C1EAC1BFE2BAB8E6
+ C0BEE2B8B6E9BFBCE5BAB7E3BBB8E6BEBBE5B9B6E2B8B5EFC5C3EEC3C0E4BEBB
+ E2BBB9E3BCB9E3B9B6E3BBB9E1B9B8E6BFBCE4BCBAE5BEBCE5BDBBE2B8B6ECC7
+ C4E8C2C0DDB7B5E7C0BEE4BDBBE3BFBCE4C2C1DCBBB9E1BEBCDDBAB8ECC9C7EB
+ CAC8ECCBC9DEBEBBDDBCBBE1C0BFE0C0BFE5C7C6E3C7C6E0C4C4E1C6C4EBCFCE
+ E7CAC9DBBFBDE9CCCBDDC3C2DDC3C2DEC5C4E0C8C8DCC5C4E5CDCCE4CDCCDEC7
+ C6DEC7C6E5CDCDDEC7C6DDC6C5E2CAC9DCC5C3E7CECDE5CDCCDFC7C6E5CECCD8
+ C1C0E7D0CFDAC3C2E0CAC9D7C1C0EBD5D4EBD6D6E5D1D1D9C6C6DDCCCBE3D3D3
+ E1D2D1E2D3D3E9DADAF0E0E0DECFCEDAC9CAE6D5D5D9CAC9E7D6D6DECFCEE0D1
+ D2E1D3D2DFD0D0DCCDCCDBCCCCDFD0D0E3D4D4D4C5C6E6D7D7EBDADA69616100
+ 00007B7272F9E6E5EFDEDDECDBDAE9D9D8EDDDDDECDCDBECDBDBE6D5D5DFCFCE
+ E8D7D6EDDCDBE5D3D3E7D6D5EDDADAEAD6D5ECD8D7E5D1D0EAD6D5E7D3D2E6D1
+ D1EBD6D6EEDAD9EAD6D5E7D3D2E7D2D1E7D3D2EBD6D6E1CDCCE3CFCEE6D3D3E5
+ D1D1E9D4D4E4D1D0EBD7D6E5D1D0E9D4D3E8D1D1F1DAD8F2DAD9EDD6D5F1DBD9
+ F0DAD9E9D2D1E6CECDEBD2D1EBD1D1EAD1D0E8CFCDE8CFCEE8CFCEEAD0CEE7CC
+ CAE7CAC9EACDCBEBCDCCE4C6C4E7C8C7EDCECBEDCDCBEAC9C8EACAC9DFBFBDE6
+ C7C5EACAC7E8C5C3E8C5C3E7C4C3E8C6C4ECCBC8ECC9C7ECC7C5EBC7C5ECC8C6
+ EBC6C4ECC6C3EBC4C2EAC2C0EAC3C1E8C2BFEBC2BFECC3C1EAC0BEEAC3C1EBC4
+ C1EFC3C2EBC2C0EBC2BFECC2C0EBC6C4EAC3C1ECC6C3EDC4C2EAC2C0EBC5C2EF
+ C9C6EAC4C1EFC8C6EFCAC7ECC4C2EEC7C5F1CCCAEBC5C4EBC5C3EBC5C3EFCBC9
+ F0CCCBEDCDCCE7C7C5E6C5C3ECCBC9E7C6C5ECCDCBEACCCAEACBCAEACAC9ECCD
+ CCEFD0CFEDCFCEE7CCCBEED3D2EFD4D3EACFCFE9CECEECD0CFEFD3D3ECD3D2EA
+ D2D1EFD7D6E9D2D1ECD4D4EFD8D6EED7D6EED6D6EED7D6ECD5D4EFD8D7EFD8D8
+ EAD3D3F1D9D8E4CDCCE1CAC9F1DAD9DBC4C3F3DCDBEFD9D7E8D2D1EAD5D4EDD8
+ D7ECD7D6EEDADAEBD7D6E5D4D3ECDCDCDED0D0DFD1D1E5D7D7EDDEDEE3D4D4EB
+ DBDBE9D9DAE9D8D8EEDDDDE6D6D6EDDFDFEADCDBEADCDCEADCDBECDDDDECDDDC
+ F0E1E1E6D9D8EBDDDCFBEDEC746C6C0000007A7271F5E4E3EAD9D8E8D8D7E7D8
+ D7EFDFDFF0E0E0EEDEDDEFDFDFE1D0CFE7D6D5EADBD9F0DFDEEBDAD9EDDBDAED
+ D9D8E7D4D3E8D4D3E2CECDE8D4D3EFDAD9ECD6D5E9D5D5E9D6D5E7D3D3E7D3D2
+ EAD6D5ECD8D7ECD8D7EBD7D6EDDAD9EBD9D8EDDADAE8D5D5E9D5D5E9D4D3EDD8
+ D7EBD5D4EED9D7F1DBDAEDD6D6E8D2D0EFD8D7EFD7D6EBD4D3EED6D5EBD1D0EE
+ D5D5E8D0CEEBD2D1EED4D3EBD0D0E7CBCAE7CCCAEACECDF2D4D3F0D2D0ECCDCB
+ F0D0CEF0D0CEEBCBC9E1C1C0E1C2C0EBCBC9ECCAC8EBC9C8F1CFCDEBC9C8EBCB
+ C9ECCBC9EBC8C6EAC7C5ECCAC7EDC9C7ECC8C6EDC7C5EFC9C8EDC5C4EDC9C7EF
+ C8C6EEC6C4EDC4C2EAC2C0EBC5C3E6C1BEECC3C1E9C2C0EBC3C1ECC4C2E9C6C3
+ EBC6C4EEC8C5ECC5C4EAC3C1E9C5C2EEC8C5E9C4C2EDC7C5EDC8C5ECC5C3E8C1
+ BFE9C5C3E9C5C2E6C1BFE9C4C2EECAC8EECBC9EECFCDEBCDCBE9C9C8EBCBCAE5
+ C5C4E9CAC9E3C5C4EACCCBEBCDCCECCECCEBCDCBECCECDE8CCCBEAD0CFEED4D3
+ ECD1D1EED3D3EFD4D4F0D5D4EED3D3EDD4D4ECD5D4EED7D6E7CFCEE9D2D1F1DA
+ D9ECD5D4EBD3D3E7D0CFE9D3D2EED9D9EAD6D5EBD5D5EBD6D5DAC5C4DBC6C5E0
+ CACAF1DCDBF0DBDCEBD7D7EDDADAF1DDDCEDD9D8F0DCDBF2DEDDE7D5D5E8D7D7
+ DACBCCE0D1D0E3D4D4EDE0E0E8D9DAEBDDDDE9DADAEBDBDBE5D5D5DFD0D0DED0
+ CFE0D1D1E5D5D5E3D4D4ECDEDDEADBDBECDEDDF2E3E3F2E4E4FFF5F47A727200
+ 000078706FF7E6E5EBDADAEBDBDBEBDCDCE9DADAEDDDDDEEDFDEEDDDDDE0CFCF
+ E1D1D0E8D7D6E8D7D6E9D7D7EDDAD9F0DDDCEEDBD9F1DEDDEFDBDAE9D5D4E8D3
+ D3E9D5D4EFDBDAEDDAD9EAD7D6E6D3D3ECD9D8ECD8D8EFDCDBECD8D8EBD9D7EA
+ D7D6EEDADAECD8D8EBD6D6E9D4D4ECD7D6E8D2D2EDD8D7EBD5D5ECD4D5E7D0CF
+ EED6D5F0D9D7ECD4D4EBD3D2E7CFCEEBD4D2E6CDCCE7CDCCEED3D2EDD1D0EACF
+ CEEBD0CFECD0CFEACDCBECCDCCEECFCDEDCFCDECCDCCEECFCDECCDCBECCDCCEC
+ CDCCECCBC9EBCBC9F0CFCDE7C7C5E9C8C6ECCBC9E8C5C4E8C6C4EDCAC8EDCAC8
+ EBC7C4E6C1BFEEC8C7ECC6C5EBC8C6E8C1BFEAC2C1EFC7C6EEC7C4EFCBC9EDC8
+ C6F0C8C6ECC6C3ECC6C3EBC4C1EBC8C5EAC6C3EEC8C7EDC7C5EDC5C3EECAC8EE
+ C9C7EAC6C3EEC9C7F0CBCAF2CDCBF2CCCAEAC6C5EBC9C7EBC8C7EAC6C5EAC8C6
+ EBCAC9ECCCCAECCFCDECCECDEDCDCDEACBC9ECCDCBE7C9C7E6C9C8E4C8C6E5C8
+ C7EBCDCCF0D2D1E8CCCAE5CAC9EBD0D0E9D0CFECD3D2EDD4D3EAD0D0EBD1D1ED
+ D4D4E9D1D1EBD4D3E5CFCEE9D2D2F0D9D8F0DAD9F1DBDBEBD6D5E8D4D3E9D5D5
+ E7D3D3E6D2D1F0DCDBE9D4D3E5D2D1E6D3D2ECD9D8ECD9D8E5D1D1E3CFCFE9D5
+ D4EAD6D6EEDBDBF3E0DFEDDADAEBDAD9E9D9D9E4D4D4E6D7D7EADCDDE8D9DAEA
+ DCDCE5D7D7EBDCDBECDCDCE9DBDBE7D9D8ECDDDDEEDDDDEDDDDDEAD9D9E1D1D1
+ E3D4D4E9D9D8E9DAD9FFF4F37B7272000000787070E8D7D7E5D3D4E9DAD9EDDF
+ DEEDDEDEEFE0DFF0E0DFDBCBCADECECEECDBDBF3E3E2DFCECDDFCCCBEFDBDAF1
+ DEDDF7E3E2F6E2E1F2DEDDF2DEDCDECAC9DBC7C6E0CDCCEFDCDCF0DDDCEAD7D6
+ F1DEDEEEDBDAEEDCDBECD9D9EFDBDAEEDAD9F0DBDAF1DBDBEFD9D9EEDAD9F1DC
+ DBEBD6D5EFD8D8EDD6D6EDD6D5E8D0D0EED7D6EFD7D6F1D9D8EFD9D7EED7D6F1
+ D9D7EFD5D4EDD3D1F3D8D7EFD4D3E9CFCDECD1CFF1D5D3F0D3D1EED0CFEED0CE
+ F1D3D1ECCFCDEDD0CEF0D2D0F0D2D0EFD0CEE3C3C1E8C9C6F5D5D3EACBC9EBCB
+ C9F4D3D0EECCCAE9C7C5EDCBC9EFCCCAF0CCCAE8C4C2ECC7C5ECC8C6EDCBC9E9
+ C3C1E8C3C1EEC8C6EBC6C3EECAC9EBC7C5F0C8C6EDC7C5EEC9C7ECC5C3EBC8C7
+ E9C5C3EDC8C6F0CCCAEFC9C7EFCCCAF2CECCEDC9C7F0CCCAF3D0CDF4D1CFF5D1
+ CFF4D0CEEDCBCAEFCECCEDCCCBE6C5C4EBCAC8ECCBCAEBCDCCEDD1D0ECCFCDEA
+ CCCAECCDCCEED0CFEED1D0EED3D1E9CDCCE7CAC9ECCECDEACDCCDFC3C2E4CAC9
+ EDD4D3EFD7D6F1DAD8EAD1D0ECD2D2EED5D4EBD2D1F0D7D7E9D1D0EAD3D2EED8
+ D8E8D2D1ECD6D6DFCAC9EAD6D6EDD9D9EEDADAE9D5D5EFDBDAF0DCDBF0DCDCDF
+ CACAE3CFCFF2DFDEECD8D8EAD7D6EFDCDBEBD7D7EEDADAF0DDDCF3DFDFEEDCDC
+ F0DEDEEBDADAE9D9D9EADBDBE8D8D8F0DFDFE8D8D8EADADAEADCDCEEE0DFE9DA
+ DAEADADAE9D8D7ECDBDAF4E4E3EDDDDCEDDDDDF0E0E0E7D8D6FFF6F4736A6A00
+ 0000797071E8D6D6E1D0D0E5D6D5DDCFCEDDCFCFE0D1D1EADAD9D8C7C7DACACA
+ E1D1CFE6D5D5DECDCDD8C6C5DBC8C7DBC7C6E5D2D1DFCBCADAC7C6ECD9D8EDD9
+ D8E2CECED3C0C0E7D5D4F0DDDDEBD8D7DFCCCBE0CDCCDDCAC9E1CDCDDECAC9DB
+ C7C6E5D0D0F1DCDCE0CCCBE3CECDEBD6D5E0CBCAE3CDCDEFD8D7E7D0CFDBC4C3
+ DFC8C7E9D3D1EFD9D8E9D3D2EAD3D2EFD5D4E8CECCE3C8C7EACFCEF1D7D6E2C7
+ C6E5C9C7F1D4D2E8CAC9E0C3C1E4C7C5EDD1CFE8CCCAE3C6C4E9CBC9E4C6C4EC
+ CDCBE4C4C2E2C2C1EACBC9EECFCDE8C8C6E5C4C2E5C4C2EDCDCBEDCCCAE1BEBC
+ F2CECCF0CCCAF0CCCAE7C6C4E5C3C1E6C1BFE6C1BFE4BFBDE7C3C1E1BEBDE3BE
+ BCF0C9C7E6C1BFE5C1BFE7C2C0E5C3C0EFCDCAE2BEBBECC9C7EEC9C8E0BDBCEA
+ C7C5EDCAC8E5C2C0E8C5C3F2D0CEE8C4C3EDC9C7EECECDE4C3C2F1D0CFEDCDCC
+ E9C9C7E0C0BEE2C2C1E7CAC9E2C7C5E7CAC9E1C3C2E3C6C5E3C6C6EACFCEE0C5
+ C4EDD1D0EFD3D1EFD3D2DFC3C2E3C8C7E7CCCCE1C8C7E5CDCCEDD5D3E9CFCEE1
+ C8C7E7CFCDF1D8D7E0C8C8E9D2D1E7D0CFDFC9C8E9D4D3DAC6C7E8D4D4E5D1D2
+ DECBCAE3CFCFE9D4D4DCC8C7E6D1D1DCC9C8E1CECCF2DEDDE1CCCCEAD5D4F0DB
+ DBDECAC9DECAC9DCCAC8E5D1D1DECBCAE9D6D5F1DFDFEFDEDEEFDDDDEDDDDDE8
+ D7D7E4D2D2E4D4D4E1D2D2DFD0CFE1D2D1EADBDAE1D2D1E5D5D4E1D1D1E7D8D7
+ E0CFCFE4D4D4E7D7D7F5E8E7746B6B0000007E7575F7E5E3F8E7E6F3E2E2E6D6
+ D5F8E7E8E6D5D5FEEDEDEAD9D8F5E3E2ECDAD8EFDDDDF2DFDFEEDAD9F9E4E3E8
+ D3D2EAD5D4F1DCDBEDD8D7E8D4D2E7D2D1EED8D7FAE6E5FBE7E7F8E4E4E9D6D5
+ ECD7D7F3DFDEEDD9D8F7E2E2E9D3D3F2DDDBE9D3D3FDE9E7E8D3D2F5DFDEEDD6
+ D5F7E0DFEFD7D6F5DDDCEFD6D6F5DDDDEDD5D5F2DBD9FFEDEBFFEAE9FFE6E4FC
+ DFDEE7CBCAFADFDDEDD1CFF2D4D3ECCFCDF9DAD9FFE0DEECCDCCF6D8D6EED0CE
+ FBDEDCF4D6D5F1D2D1F2D1D0F1D0CEFFDEDCF2D1CFF2D2D0EFCFCCEFCECCEBCA
+ C7FAD7D5EFCBCAF6D2D1F9D5D3E6C1BFFCD7D5FFDCDAFBD5D3F0CDCBF5CFCDFA
+ D3D2F1CAC8F3CBC9F5CECDF4D0CEF2CCCAF8CFCDF1CBC9FAD3D1F8D1CEF0CCCA
+ FDD9D8F1CBC9FAD6D3F3CCCAFBD7D5F3CFCEFDD8D6EFCBCAF7D2D1FFDDDAEECA
+ C7FCD7D5F8D4D3E9C7C5FDDAD9FFDDDCFEDDDBF1CFCDF3D2D1F4D5D4F9DBDAF1
+ D4D3F6D7D7F0D1CFF5D6D5F6D7D6F1D3D2FFE5E4FEE2E1FDE0DFEBCDCCF1D4D4
+ F4D8D7F1D5D4FEE2E1FADFDEEED3D1E6CCCBF6DCDBF4DAD9E6CCCBF1D8D7F3DA
+ D9ECD4D3FDE6E6ECD6D7F8E4E3ECD8D7F0DBDAEDD8D7FBE6E6E8D2D2FAE5E4F0
+ DBD9F5DFDFFCE6E5E2CDCCF6E0DFF4DEDDEDD8D7F2DDDCE8D3D2F5E2E1E4CFCE
+ F7E2E2FBE7E7FEEAE9FFECEBF5E1E0E3CFCEFAE5E5E7D5D4F9E7E6ECDADAF8E7
+ E6F0E0DFEBDBDAEFDEDDEEDEDEFEEDECEEDEDDEBDADAEBD9D8FFF5F5837A7A00
+ 00003B3737756D6C787070776F6E6D6565756E6D6D65657870706F6666746B6B
+ 7168687169697168686E65647268686B61616A6160766C6B736969685E5D6F65
+ 657C72717D73737B72727970706D6564716867736969716767756B6A6E646472
+ 69686C6262766C6C6D6363756B6B6E6363786E6D7267677065656E6463726767
+ 6F65656E6463766A6A786C6C776A697669686C5F5E766A697163637467667162
+ 627667677A6B6A6E605F7869697062617467667365647365647466656E5F5E79
+ 69687363637667667566656E5F5E6F5F5E7B6C6A74636372616171605F6C5B5A
+ 715F5E78666575646374636272615F7A68677362607462617361617867667462
+ 627462617463617564627A686774636273636274626175656372615F7A696874
+ 64637867667262617665647A696870605F76656470605F6E5F5E736463796968
+ 7767677363626E5F5E7364637668676F61617769687263637466657365647264
+ 647A6C6C776B6A7366666D605F6E6160746665716363786B6A776B6A6E62616E
+ 6262766A697064646D61606E61607165657065647469686E64647369696E6464
+ 736969706666746A6A6F6565776D6D706666736968746A6A6F6565756B6A7168
+ 67736969766C6C6F6565736A696B6261776D6D776E6D746B6A766D6C72696869
+ 5F5E7065656B6160746B6B6D6565776E6E6F6867726A6A746C6C6D65657A7272
+ 736B6B6961616C6464817B7B3D3939000000}
+ ShowHint = True
+ Transparent = True
+ OnClick = Image1Click
+ end
+ object MediaPlayer1: TMediaPlayer
+ Left = 88
+ Top = 1
+ Width = 253
+ Height = 30
+ Display = Panel1
+ FileName = 'C:\WINNT\winnt256.bmp'
+ Visible = False
+ TabOrder = 0
+ end
+ end
+ object pnlAvailable: TPanel
+ Left = 0
+ Top = 81
+ Width = 281
+ Height = 326
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 1
+ object Panel2: TPanel
+ Left = 0
+ Top = 296
+ Width = 281
+ Height = 30
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object SpeedButton4: TSpeedButton
+ Left = 200
+ Top = 3
+ Width = 65
+ Height = 25
+ Caption = 'I&nstall'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 33333333FF33333333FF333993333333300033377F3333333777333993333333
+ 300033F77FFF3333377739999993333333333777777F3333333F399999933333
+ 33003777777333333377333993333333330033377F3333333377333993333333
+ 3333333773333333333F333333333333330033333333F33333773333333C3333
+ 330033333337FF3333773333333CC333333333FFFFF77FFF3FF33CCCCCCCCCC3
+ 993337777777777F77F33CCCCCCCCCC3993337777777777377333333333CC333
+ 333333333337733333FF3333333C333330003333333733333777333333333333
+ 3000333333333333377733333333333333333333333333333333}
+ NumGlyphs = 2
+ OnClick = Button2Click
+ end
+ object SpeedButton5: TSpeedButton
+ Left = 4
+ Top = 3
+ Width = 65
+ Height = 25
+ Caption = '&Info'
+ Flat = True
+ OnClick = SpeedButton5Click
+ end
+ object SpeedButton6: TSpeedButton
+ Left = 69
+ Top = 3
+ Width = 65
+ Height = 25
+ Caption = '&Select'
+ Flat = True
+ OnClick = Button5Click
+ end
+ object SpeedButton7: TSpeedButton
+ Left = 135
+ Top = 3
+ Width = 65
+ Height = 25
+ Caption = 'Select &All'
+ Flat = True
+ OnClick = Button6Click
+ end
+ end
+ object PageControl1: TPageControl
+ Left = 0
+ Top = 24
+ Width = 281
+ Height = 272
+ ActivePage = TabSheet1
+ Align = alClient
+ MultiLine = True
+ TabOrder = 1
+ object TabSheet1: TTabSheet
+ Caption = 'Local'
+ object localTree: TTreeView
+ Left = 0
+ Top = 0
+ Width = 273
+ Height = 244
+ Align = alClient
+ Images = ImageList1
+ Indent = 19
+ ReadOnly = True
+ StateImages = ImageList2
+ TabOrder = 0
+ OnDblClick = localTreeDblClick
+ end
+ end
+ end
+ object Panel8: TPanel
+ Left = 0
+ Top = 0
+ Width = 281
+ Height = 24
+ Align = alTop
+ Alignment = taLeftJustify
+ BevelOuter = bvNone
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object Label1: TLabel
+ Left = 0
+ Top = 0
+ Width = 53
+ Height = 24
+ Align = alLeft
+ BiDiMode = bdLeftToRight
+ Caption = 'Available'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentBiDiMode = False
+ ParentFont = False
+ Layout = tlCenter
+ end
+ object Panel3: TPanel
+ Left = 53
+ Top = 0
+ Width = 228
+ Height = 24
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 0
+ object SpeedButton2: TSpeedButton
+ Left = 180
+ Top = 0
+ Width = 23
+ Height = 22
+ Enabled = False
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 333333333333333FF3FF3333333333CC30003333333333773777333333333C33
+ 3000333FF33337F33777339933333C3333333377F33337F3333F339933333C33
+ 33003377333337F33377333333333C333300333F333337F33377339333333C33
+ 3333337FF3333733333F33993333C33333003377FF33733333773339933C3333
+ 330033377FF73F33337733339933C33333333FF377F373F3333F993399333C33
+ 330077F377F337F33377993399333C33330077FF773337F33377399993333C33
+ 33333777733337F333FF333333333C33300033333333373FF7773333333333CC
+ 3000333333333377377733333333333333333333333333333333}
+ NumGlyphs = 2
+ Visible = False
+ end
+ object Image2: TImage
+ Left = 72
+ Top = 8
+ Width = 14
+ Height = 16
+ Picture.Data = {
+ 07544269746D617076010000424D760100000000000076000000280000002000
+ 0000100000000100040000000000000100000000000000000000100000001000
+ 0000000000000000800000800000008080008000000080008000808000007F7F
+ 7F00BFBFBF000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
+ FF0033333333333333333FF3333333333333447333333333333377FFF3333333
+ 3333744473333333333337773FF3333333333444447333333333373F773FF333
+ 333333444444733333333373F3773FF3333333744444447333333337F333773F
+ F333333444444444733333373F3333773FF333334444444444733FFF7FFFFFFF
+ 77FF999999999999999977777777777733773333CCCCCCCCCC3333337333333F
+ 7733333CCCCCCCCC33333337F3333F773333333CCCCCCC3333333337333F7733
+ 333333CCCCCC3333333333733F77333333333CCCCC333333333337FF77333333
+ 33333CCC3333333333333777333333333333CC33333333333333773333333333
+ 3333}
+ Transparent = True
+ end
+ object Label2: TLabel
+ Left = 92
+ Top = 8
+ Width = 87
+ Height = 13
+ Caption = 'Selected for Install'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object SpeedButton1: TSpeedButton
+ Left = 8
+ Top = 0
+ Width = 23
+ Height = 22
+ Hint = 'Manage Remote Sources'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00555555555555
+ 5555555555FFFFF555555555544C4C5555555555F777775FF5555554C444C444
+ 5555555775FF55775F55554C4334444445555575577F55557FF554C4C334C4C4
+ 335557F5577FF55577F554CCC3334444335557555777F555775FCCCCC333CCC4
+ C4457F55F777F555557F4CC33333CCC444C57F577777F5F5557FC4333333C3C4
+ CCC57F777777F7FF557F4CC33333333C4C457F577777777F557FCCC33CC4333C
+ C4C575F7755F777FF5755CCCCC3333334C5557F5FF777777F7F554C333333333
+ CC55575777777777F755553333CC3C33C555557777557577755555533CC4C4CC
+ 5555555775FFFF77555555555C4CCC5555555555577777555555}
+ NumGlyphs = 2
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = SpeedButton1Click
+ end
+ end
+ end
+ end
+ object pnlInstalled: TPanel
+ Left = 284
+ Top = 81
+ Width = 305
+ Height = 326
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ object Panel5: TPanel
+ Left = 0
+ Top = 296
+ Width = 305
+ Height = 30
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object SpeedButton3: TSpeedButton
+ Left = 8
+ Top = 3
+ Width = 77
+ Height = 25
+ Caption = '&Remove'
+ Flat = True
+ Glyph.Data = {
+ 76010000424D7601000000000000760000002800000020000000100000000100
+ 0400000000000001000000000000000000001000000010000000000000000000
+ 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
+ 333333333333333333FF33333333333330003333333333333777333333333333
+ 300033FFFFFF3333377739999993333333333777777F3333333F399999933333
+ 3300377777733333337733333333333333003333333333333377333333333333
+ 3333333333333333333F333333333333330033333F33333333773333C3333333
+ 330033337F3333333377333CC3333333333333F77FFFFFFF3FF33CCCCCCCCCC3
+ 993337777777777F77F33CCCCCCCCCC399333777777777737733333CC3333333
+ 333333377F33333333FF3333C333333330003333733333333777333333333333
+ 3000333333333333377733333333333333333333333333333333}
+ NumGlyphs = 2
+ OnClick = Button4Click
+ end
+ end
+ object Panel7: TPanel
+ Left = 0
+ Top = 0
+ Width = 305
+ Height = 24
+ Align = alTop
+ Alignment = taLeftJustify
+ BevelOuter = bvNone
+ Caption = 'Installed'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ end
+ object Panel6: TPanel
+ Left = 0
+ Top = 24
+ Width = 305
+ Height = 272
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ object installTree: TTreeView
+ Left = 0
+ Top = 0
+ Width = 305
+ Height = 272
+ Align = alClient
+ Indent = 19
+ ParentShowHint = False
+ ReadOnly = True
+ ShowHint = False
+ TabOrder = 0
+ end
+ end
+ end
+ object statusBar: TPanel
+ Left = 0
+ Top = 407
+ Width = 589
+ Height = 22
+ Align = alBottom
+ Alignment = taLeftJustify
+ BevelOuter = bvLowered
+ TabOrder = 3
+ object Panel4: TPanel
+ Left = 436
+ Top = 1
+ Width = 152
+ Height = 20
+ Align = alRight
+ Caption = 'Panel4'
+ TabOrder = 0
+ object progressBar: TProgressBar
+ Left = 1
+ Top = 1
+ Width = 150
+ Height = 18
+ Align = alRight
+ BorderWidth = 2
+ Min = 0
+ Max = 100
+ TabOrder = 0
+ end
+ end
+ end
+ object MainMenu1: TMainMenu
+ Left = 748
+ Top = 4
+ object File1: TMenuItem
+ Caption = '&File'
+ object Exit1: TMenuItem
+ Caption = 'E&xit'
+ OnClick = Exit1Click
+ end
+ end
+ object Option1: TMenuItem
+ Caption = '&Options'
+ object LocalPath1: TMenuItem
+ Caption = '&Local Path...'
+ OnClick = LocalPath1Click
+ end
+ object ManageRemoteSources1: TMenuItem
+ Caption = '&Manage Remote Sources...'
+ OnClick = SpeedButton1Click
+ end
+ end
+ object View1: TMenuItem
+ Caption = '&View'
+ object LockedModules1: TMenuItem
+ Caption = '&Locked Modules'
+ OnClick = LockedModules1Click
+ end
+ end
+ object Help1: TMenuItem
+ Caption = '&Help'
+ object Contents1: TMenuItem
+ Caption = '&Contents'
+ OnClick = Contents1Click
+ end
+ end
+ end
+ object localPathDlg: TOpenDialog
+ Options = [ofNoChangeDir, ofEnableSizing]
+ Left = 716
+ Top = 4
+ end
+ object Timer1: TTimer
+ Left = 524
+ Top = 78
+ end
+ object ImageList1: TImageList
+ Left = 524
+ Top = 110
+ Bitmap = {
+ 494C010105000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000003000000001002000000000000030
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000FFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFF0000000000000000
+ 000000000000000000008080800000000000FFFFFF0000FFFF000000000000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFF0000808080008080
+ 80008080800080808000808080000000000000000000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFF0000000000000000
+ 0000000000000000000080808000000000000000000000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF
+ 0000FFFF0000FFFF0000FFFF00000000000000000000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFF00000000
+ 00000000000080808000000000000000000000000000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFF0000FFFF
+ 0000FFFF0000FFFF000000000000000000000000000000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FF000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000FFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FF00000000000000FF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000BFBFBF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000C0C0C0000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000FF00000000000000FFFFFF0000000000FF00000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000FFFF000000
+ 00000000000000FFFF0000000000000000000000000000FFFF00000000000000
+ 000000FFFF000000000000000000000000000000000000000000000000000000
+ 000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000
+ 000000000000000000000000000000000000000000000000000000FFFF000000
+ 00000000000000FFFF0000000000000000000000000000FFFF00000000000000
+ 000000FFFF00000000000000000000000000000000000000000000000000FF00
+ 000000000000FFFFFF00FFFFFF00FFFFFF0000000000FF000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF000000000000FFFF000000000000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF000000000000FFFF000000000000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000FF000000FF00
+ 0000FF00000000000000FFFFFF00FFFFFF00FFFFFF0000000000FF0000000000
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF0000000000FFFFFF000000000000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF0000000000FFFFFF000000000000FFFF0000FFFF0000FF
+ FF000000000000000000000000000000000000000000FF000000FF000000FF00
+ 0000FF000000FF00000000000000FFFFFF00FFFFFF00FFFFFF0000000000FF00
+ 000000000000000000000000000000000000000000000000000000FFFF0000FF
+ FF0000FFFF0000000000FFFFFF007F7F7F00FFFFFF000000000000FFFF0000FF
+ FF0000FFFF000000000000000000000000000000000000000000000000000000
+ 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
+ FF0000000000000000000000000000000000000000000000000000FFFF0000FF
+ FF0000FFFF0000000000FFFFFF0080808000FFFFFF000000000000FFFF0000FF
+ FF0000FFFF0000000000000000000000000080000000FF000000FF000000FF00
+ 0000FF000000FF000000FF00000000000000FFFFFF00FFFFFF00FFFFFF000000
+ 0000FF000000000000000000000000000000000000000000000000FFFF0000FF
+ FF0000000000FFFFFF0000FFFF007F7F7F0000FFFF00FFFFFF000000000000FF
+ FF0000FFFF000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000008080800000FFFF00FFFFFF000000000000FF
+ FF0000FFFF00000000000000000000000000FF00000080000000FF000000FF00
+ 0000FF000000FF000000FF000000FF00000000000000FFFFFF00FFFFFF00FFFF
+ FF0000000000FF000000000000000000000000FFFF0000FFFF0000FFFF0000FF
+ FF000000000000FFFF00FFFFFF007F7F7F00FFFFFF0000FFFF000000000000FF
+ FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000
+ 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000FF
+ FF000000000000000000000000000000000000000000FFFF0000000000000000
+ 000000000000000000008080800000000000FFFFFF0000FFFF000000000000FF
+ FF0000FFFF0000FFFF0000FFFF000000000000000000FF00000080000000FF00
+ 0000FF00000000000000FF000000FF000000FF00000000000000FFFFFF00FFFF
+ FF00FFFFFF0000000000FF00000000000000000000000000000000FFFF0000FF
+ FF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF000000000000FF
+ FF0000FFFF000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF00000000000000
+ 00000000000000000000000000000000000000000000FFFF0000808080008080
+ 80008080800080808000808080000000000000FFFF00FFFFFF000000000000FF
+ FF0000FFFF000000000000000000000000000000000000000000FF0000008000
+ 0000FF000000FF000000FF00000000000000FF000000FF00000000000000FFFF
+ FF0000000000FF0000000000000000000000000000000000000000FFFF0000FF
+ FF0000FFFF0000000000FFFFFF0000FFFF00FFFFFF000000000000FFFF0000FF
+ FF0000FFFF000000000000000000000000000000000000000000000000000000
+ 00000000000000FFFF000000000000FFFF000000000000FFFF00000000000000
+ 00000000000000000000000000000000000000000000FFFF0000000000000000
+ 000000000000000000008080800000000000FFFFFF000000000000FFFF0000FF
+ FF0000FFFF00000000000000000000000000000000000000000000000000FF00
+ 000080000000FF0000000000000000000000FF000000FF000000FF0000000000
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF0000000000000000000000000000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF0000000000FFFFFF00000000000000
+ 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF
+ 0000FFFF0000FFFF0000FFFF0000000000000000000000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000FF00000080000000FF000000FF000000FF000000FF000000FF000000FF00
+ 00000000000000000000000000000000000000000000000000000000000000FF
+ FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000FFFF0000FFFF0000FFFF0000FF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 000000000000FF00000080000000FF000000FF000000FF000000FF0000000000
+ 000000000000000000000000000000000000000000000000000000FFFF000000
+ 00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000000000
+ 000000FFFF000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000FFFF00000000
+ 000000000000808080000000000000FFFF0000FFFF0000FFFF00000000000000
+ 000000FFFF000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FF00000080000000FF00000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000FFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000FFFF0000FFFF
+ 0000FFFF0000FFFF00000000000000FFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000FFFF000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000300000000100010000000000800100000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000E00F000000000000E00F000000000000
+ E00F000000000000F00F000000000000F00F000000000000F80F000000000000
+ F00700000000000080070000000000000007000000000000000F000000000000
+ 001F000000000000001F000000000000001F000000000000811F000000000000
+ 811F000000000000C3BF000000000000FFFFFEFFE00FFEFFFDFFFC7FE00FFC7F
+ F8FFFC7FE00FFC7FF07FD837F00FD837E03FE00FF00FE00FC01FE00FF80FE00F
+ 800FC007F007C0070007C007F007800700030001F00700018001C007F00F0007
+ C003C007F01F0007E00FE00FF81F000FF00FE00FFE1F000FF81FD837FF1F8037
+ FC7FFEFFFF1F80FFFFFFFEFFFFBFC2FF00000000000000000000000000000000
+ 000000000000}
+ end
+ object ImageList2: TImageList
+ Left = 524
+ Top = 142
+ Bitmap = {
+ 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000001000000001002000000000000010
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007F7F7F007F7F7F00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000080000000800000007F7F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F7F007F7F7F007F7F
+ 7F0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000007F7F7F0080000000800000008000
+ 00007F7F7F000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F7F0000000000FFFF
+ FF007F7F7F007F7F7F0000000000FFFFFF00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000080000000800000008000
+ 000080000000800000007F7F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007F7F7F000000
+ 0000FFFFFF00000000007F7F7F007F7F7F0000000000FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000800000008000
+ 0000800000008000000080000000800000007F7F7F0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007F7F
+ 7F00FFFFFF000000000000000000000000007F7F7F007F7F7F0000000000FFFF
+ FF00FFFFFF0000000000000000000000000000000000000000007F7F7F008000
+ 00008000000080000000800000008000000080000000800000007F7F7F000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007F7F
+ 7F0000000000FFFFFF00000000000000000000000000000000007F7F7F007F7F
+ 7F0000000000FFFFFF00FFFFFF00000000000000000000000000000000008000
+ 0000800000008000000080000000800000008000000080000000800000008000
+ 00007F7F7F000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
+ FF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF007F7F7F007F7F7F00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000800000008000000080000000800000008000000080000000800000008000
+ 000080000000800000007F7F7F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007F7F7F007F7F7F007F7F7F007F7F
+ 7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F
+ 7F0000000000000000007F7F7F007F7F7F000000FF000000FF000000FF000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF000000FF000000FF000000FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00007F7F7F00000000000000000000000000000000000000000000000000FFFF
+ FF007F7F7F007F7F7F0000000000000000000000000000000000000000000000
+ 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+ 0000FF000000FF00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007F7F
+ 7F00FFFFFF0000000000000000000000000000000000FFFFFF007F7F7F007F7F
+ 7F0000000000000000000000000000000000000000000000000000000000FF00
+ 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007F7F
+ 7F00000000000000000000000000FFFFFF007F7F7F007F7F7F00000000000000
+ 000000000000000000000000000000000000000000000000000000000000FF00
+ 0000FF000000FF000000FF000000FF000000FF000000FF000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007F7F7F000000
+ 000000000000FFFFFF007F7F7F007F7F7F000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FF000000FF00
+ 0000FF000000FF000000FF000000FF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F7F00FFFFFF00FFFF
+ FF007F7F7F007F7F7F0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FF000000FF000000FF00
+ 0000FF000000FF00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F7F007F7F7F007F7F
+ 7F00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FF000000FF000000FF00
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007F7F7F007F7F7F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FF000000FF000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000100000000100010000000000800000000000000000000000
+ 000000000000000000000000FFFFFF009FFFFFFF0000000007FF1FFF00000000
+ 89FF07FF00000000A27F81FF00000000D49FC07F00000000E727C01F00000000
+ EBC9E007000000008000F00100000000000C000000000000F7E3F00300000000
+ E78FE00F00000000EE3FE03F00000000D8FFC0FF0000000083FF83FF00000000
+ 8FFF8FFF000000003FFF3FFF0000000000000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/apps/windoze/CBuilder5/InstallMgr/MainFrm.h b/apps/windoze/CBuilder5/InstallMgr/MainFrm.h
new file mode 100644
index 0000000..47fe65c
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/MainFrm.h
@@ -0,0 +1,146 @@
+//---------------------------------------------------------------------------
+#ifndef MainFrmH
+#define MainFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Dialogs.hpp>
+#include <Menus.hpp>
+#include <ExtCtrls.hpp>
+#include <MPlayer.hpp>
+#include <Graphics.hpp>
+#include <ComCtrls.hpp>
+#include <swmgr.h>
+#include <ImgList.hpp>
+#include <Buttons.hpp>
+#include <NMFtp.hpp>
+#include <NMHttp.hpp>
+#include <Psock.hpp>
+
+
+class VersionInfo {
+ public:
+ int major, minor, minor2, minor3;
+
+ VersionInfo(const char *version);
+ int compare(const VersionInfo &vi) const;
+ bool operator>(const VersionInfo &vi) const {return (compare(vi) > 0);}
+ bool operator<(const VersionInfo &vi) const {return (compare(vi) < 0);}
+ bool operator==(const VersionInfo &vi) const {return (compare(vi) == 0);}
+};
+
+
+class InstallSourceTab : public TControl {
+public:
+ __fastcall InstallSourceTab(TComponent *Owner, const char *confEnt, const char *type);
+ __fastcall ~InstallSourceTab();
+ string Type;
+ string Source;
+ string Directory;
+ string Caption;
+ TTreeView *tree;
+ SWMgr *mgr;
+};
+
+
+//---------------------------------------------------------------------------
+class TMainForm : public TForm
+{
+ class TWebThread;
+ friend class TWebThread;
+__published: // IDE-managed Components
+ TMainMenu *MainMenu1;
+ TMenuItem *File1;
+ TMenuItem *Exit1;
+ TMenuItem *Option1;
+ TMenuItem *LocalPath1;
+ TOpenDialog *localPathDlg;
+ TPanel *Panel1;
+ TMediaPlayer *MediaPlayer1;
+ TImage *Image1;
+ TPanel *pnlAvailable;
+ TPanel *pnlInstalled;
+ TSplitter *Splitter1;
+ TPanel *Panel2;
+ TPanel *Panel5;
+ TPageControl *PageControl1;
+ TTabSheet *TabSheet1;
+ TTreeView *localTree;
+ TPanel *Panel8;
+ TPanel *Panel7;
+ TPanel *Panel6;
+ TTreeView *installTree;
+ TTimer *Timer1;
+ TLabel *Label1;
+ TImageList *ImageList1;
+ TPanel *Panel3;
+ TImageList *ImageList2;
+ TPanel *statusBar;
+ TPanel *Panel4;
+ TProgressBar *progressBar;
+ TSpeedButton *SpeedButton2;
+ TImage *Image2;
+ TLabel *Label2;
+ TMenuItem *ManageRemoteSources1;
+ TSpeedButton *SpeedButton1;
+ TSpeedButton *SpeedButton3;
+ TSpeedButton *SpeedButton4;
+ TSpeedButton *SpeedButton5;
+ TSpeedButton *SpeedButton6;
+ TSpeedButton *SpeedButton7;
+ TMenuItem *View1;
+ TMenuItem *LockedModules1;
+ TMenuItem *Help1;
+ TMenuItem *Contents1;
+ void __fastcall LocalPath1Click(TObject *Sender);
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall Button5Click(TObject *Sender);
+ void __fastcall localTreeDblClick(TObject *Sender);
+ void __fastcall Button6Click(TObject *Sender);
+ void __fastcall Image1Click(TObject *Sender);
+ void __fastcall Button4Click(TObject *Sender);
+ void __fastcall Button2Click(TObject *Sender);
+ void __fastcall SpeedButton1Click(TObject *Sender);
+ void __fastcall SpeedButton5Click(TObject *Sender);
+ void __fastcall Exit1Click(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall LockedModules1Click(TObject *Sender);
+ void __fastcall Contents1Click(TObject *Sender);
+
+private: // User declarations
+
+ SWMgr *manager;
+ SWConfig *installConf;
+ const char *getLocalDir();
+ void setLocalDir(const char *idir);
+ void refreshPageControl();
+ void addSource(InstallSourceTab *ist);
+ void fillAllSourceTrees();
+ void deleteAllModules();
+
+public: // User declarations
+ __fastcall TMainForm(TComponent* Owner);
+ __fastcall ~TMainForm();
+ void __fastcall RefreshRemoteSource(TObject *Sender);
+ int selectAll(TTreeView *tree, bool sel);
+ int removeModule(const char *modName);
+ int installModule(const char *modName, InstallSourceTab *ist = 0);
+ static int createParent(const char *pName);
+ int createPathAndFile(const char *fName);
+ int copyFile(const char *sourceFile, const char *targetFile);
+ int copyFileToCWD(const char *sourceDir, const char *fName);
+ int FTPCopy(InstallSourceTab *ist, const char *src, const char *dest, bool dirTransfer = false, const char *suffix = "");
+ SWMgr *localMgr;
+ bool passive;
+
+protected:
+ virtual void fillInstallTree();
+ virtual void fillSourceTree(const char *sourceConf, TTreeView *tree);
+};
+
+//---------------------------------------------------------------------------
+extern PACKAGE TMainForm *MainForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.cpp b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.cpp
new file mode 100644
index 0000000..148a7fd
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.cpp
@@ -0,0 +1,160 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "RemoteMntFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+
+TRemoteMntForm *RemoteMntForm;
+
+
+class TRemoteSource : public TObject {
+public:
+ string name;
+ string machine;
+ string dir;
+ TRemoteSource(const char *confEnt) {
+ char *buf = new char [ strlen(confEnt) + 1 ];
+
+ strcpy(buf, confEnt);
+
+ name = strtok(buf, "|");
+ machine = strtok(0, "|");
+ dir = strtok(0, "|");
+ delete [] buf;
+ }
+ string getConfEnt() {
+ return name +"|" + machine + "|" + dir;
+ }
+};
+
+
+//---------------------------------------------------------------------------
+__fastcall TRemoteMntForm::TRemoteMntForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TRemoteMntForm::FormShow(TObject *Sender)
+{
+ ConfigEntMap::iterator loop, end;
+ config = new SWConfig("./InstallMgr.conf");
+ ListBox1->Clear();
+ loop = config->Sections["Sources"].lower_bound("FTPSource");
+ end = config->Sections["Sources"].upper_bound("FTPSource");
+ while (loop != end) {
+ TRemoteSource *rs = new TRemoteSource(loop->second.c_str());
+ ListBox1->Items->AddObject(rs->name.c_str(), rs);
+ loop++;
+ }
+ ListBox1->ItemIndex = 0;
+ ListBox1Click(0);
+ CheckBox1->Checked = (!stricmp((*config)["General"]["PassiveFTP"].c_str(), "true"));
+ checkDisabled();
+}
+
+
+void TRemoteMntForm::checkDisabled() {
+ bool enabled = ListBox1->Items->Count;
+ NameEdit->Enabled = enabled;
+ MachineEdit->Enabled = enabled;
+ DirEdit->Enabled = enabled;
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TRemoteMntForm::FormClose(TObject *Sender,
+ TCloseAction &Action)
+{
+ delete config;
+}
+
+
+void __fastcall TRemoteMntForm::SpeedButton4Click(TObject *Sender)
+{
+ ModalResult = mrCancel;
+}
+
+
+void __fastcall TRemoteMntForm::ListBox1Click(TObject *Sender)
+{
+ if (ListBox1->ItemIndex >= 0) {
+ TRemoteSource *rs = (TRemoteSource *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+
+ NameEdit->Text = rs->name.c_str();
+ MachineEdit->Text = rs->machine.c_str();
+ DirEdit->Text = rs->dir.c_str();
+ }
+ else {
+ NameEdit->Text = "";
+ MachineEdit->Text = "";
+ DirEdit->Text = "";
+ }
+}
+
+
+void __fastcall TRemoteMntForm::NameEditChange(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ TRemoteSource *rs = (TRemoteSource *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+ rs->name = NameEdit->Text.c_str();
+ ListBox1->Items->Strings[ListBox1->ItemIndex] = rs->name.c_str();
+}
+
+
+void __fastcall TRemoteMntForm::MachineEditChange(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ TRemoteSource *rs = (TRemoteSource *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+ rs->machine = MachineEdit->Text.c_str();
+}
+
+
+void __fastcall TRemoteMntForm::DirEditChange(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ TRemoteSource *rs = (TRemoteSource *)ListBox1->Items->Objects[ListBox1->ItemIndex];
+ rs->dir = DirEdit->Text.c_str();
+}
+
+void __fastcall TRemoteMntForm::SpeedButton2Click(TObject *Sender)
+{
+ if (ListBox1->ItemIndex < 0)
+ return;
+ int delItem = ListBox1->ItemIndex;
+ ListBox1->Items->Delete(delItem);
+ ListBox1->ItemIndex = (delItem < ListBox1->Items->Count) ? delItem : delItem - 1;
+ checkDisabled();
+ ListBox1Click(0);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TRemoteMntForm::SpeedButton1Click(TObject *Sender)
+{
+ TRemoteSource *rs = new TRemoteSource("[New Remote Site]|ftp.domain.org|/pub/sword/raw/");
+ ListBox1->ItemIndex = ListBox1->Items->AddObject(rs->name.c_str(), rs);
+
+ checkDisabled();
+ ListBox1Click(0);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TRemoteMntForm::SpeedButton3Click(TObject *Sender)
+{
+ TRemoteSource *rs;
+ config->Sections["Sources"].erase("FTPSource");
+ for (int i = 0; i < ListBox1->Items->Count; i++) {
+ rs = (TRemoteSource *)ListBox1->Items->Objects[i];
+ config->Sections["Sources"].insert(ConfigEntMap::value_type("FTPSource", rs->getConfEnt().c_str()));
+ }
+ (*config)["General"]["PassiveFTP"] = (CheckBox1->Checked) ? "true" : "false";
+ config->Save();
+ ModalResult = mrOk;
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.dfm b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.dfm
new file mode 100644
index 0000000..e2b7c64
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.h b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.h
new file mode 100644
index 0000000..67c825d
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/RemoteMntFrm.h
@@ -0,0 +1,52 @@
+//---------------------------------------------------------------------------
+#ifndef RemoteMntFrmH
+#define RemoteMntFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <ExtCtrls.hpp>
+#include <swconfig.h>
+//---------------------------------------------------------------------------
+class TRemoteMntForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TPanel *Panel3;
+ TListBox *ListBox1;
+ TSpeedButton *SpeedButton1;
+ TSpeedButton *SpeedButton2;
+ TEdit *NameEdit;
+ TEdit *MachineEdit;
+ TEdit *DirEdit;
+ TPanel *Panel4;
+ TSpeedButton *SpeedButton3;
+ TSpeedButton *SpeedButton4;
+ TLabel *Label1;
+ TLabel *Label2;
+ TLabel *Label3;
+ TCheckBox *CheckBox1;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+ void __fastcall NameEditChange(TObject *Sender);
+ void __fastcall SpeedButton4Click(TObject *Sender);
+ void __fastcall ListBox1Click(TObject *Sender);
+ void __fastcall MachineEditChange(TObject *Sender);
+ void __fastcall DirEditChange(TObject *Sender);
+ void __fastcall SpeedButton2Click(TObject *Sender);
+ void __fastcall SpeedButton1Click(TObject *Sender);
+ void __fastcall SpeedButton3Click(TObject *Sender);
+private: // User declarations
+ SWConfig *config;
+ void checkDisabled();
+
+public: // User declarations
+ __fastcall TRemoteMntForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TRemoteMntForm *RemoteMntForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/StatusFrm.cpp b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.cpp
new file mode 100644
index 0000000..0abc9da
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.cpp
@@ -0,0 +1,273 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "StatusFrm.h"
+#include "MainFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+//#pragma link "IdBaseComponent"
+//#pragma link "IdComponent"
+//#pragma link "IdFTP"
+//#pragma link "IdTCPClient"
+//#pragma link "IdTCPConnection"
+#pragma resource "*.dfm"
+TStatusForm *StatusForm;
+
+
+
+
+struct FtpFile {
+ char *filename;
+ FILE *stream;
+};
+
+int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
+{
+ struct FtpFile *out=(struct FtpFile *)stream;
+ if(out && !out->stream) {
+ /* open file for writing */
+ out->stream=fopen(out->filename, "wb");
+ if(!out->stream)
+ return -1; /* failure, can't open file to write */
+ }
+ return fwrite(buffer, size, nmemb, out->stream);
+}
+
+
+
+
+
+//---------------------------------------------------------------------------
+__fastcall TStatusForm::TStatusForm(TComponent* Owner)
+ : TForm(Owner) {
+ suffix = "";
+ passive = false;
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+}
+
+
+__fastcall TStatusForm::~TStatusForm() {
+ curl_global_cleanup();
+}
+
+
+//---------------------------------------------------------------------------
+void __fastcall TStatusForm::FormShow(TObject *Sender)
+{
+ abort = false;
+ ftpThread = new TFTPThread(ist, src.c_str(), dest.c_str(), dirTransfer, passive, true, suffix.c_str());
+ ftpThread->OnTerminate = Cleanup;
+ ftpThread->Resume();
+}
+//---------------------------------------------------------------------------
+__fastcall TStatusForm::TFTPThread::TFTPThread(InstallSourceTab *iist, const char *isrc, const char *idest, bool idirTransfer, bool CreateSuspended, bool ipassive, const char *isuffix)
+ : TThread(CreateSuspended)
+{
+ ist = iist;
+ src = isrc;
+ dest = idest;
+ suffix = isuffix;
+ dirTransfer = idirTransfer;
+ Priority = tpNormal;
+ passive = ipassive;
+ FreeOnTerminate = true;
+ Synchronize((TThreadMethod)&CreateFTPObject);
+}
+
+__fastcall TStatusForm::TFTPThread::~TFTPThread()
+{
+}
+
+
+void __fastcall TStatusForm::TFTPThread::Execute()
+{
+ CURL *curl;
+ CURLcode res;
+ struct FtpFile ftpfile={
+ "curl.tar.gz", /* name to store the file as if succesful */
+ NULL
+ };
+
+ Synchronize((TThreadMethod)&PreConnect);
+ StatusForm->ftpCon->Host = ist->Source.c_str();
+ StatusForm->ftpCon->Username = "ftp";
+ StatusForm->ftpCon->Password = "installmgr@user.com";
+ StatusForm->ftpCon->Passive = passive;
+
+
+ curl = curl_easy_init();
+
+ if (curl) {
+ /* Get curl 7.9.2 from sunet.se's FTP site: */
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
+ /* Define our callback to get called when there's data to be written */
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
+ /* Set a pointer to our struct to pass to the callback */
+ curl_easy_setopt(curl, CURLOPT_FILE, &ftpfile);
+
+ /* Switch on full protocol/debug output */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+
+ if(CURLE_OK != res) {
+ /* we failed */
+ fprintf(stderr, "curl told us %d\n", res);
+ }
+ }
+
+ if(ftpfile.stream)
+ fclose(ftpfile.stream); /* close the local file */
+
+/*
+ try {
+ StatusForm->ftpCon->Connect(true, -1);
+ StatusForm->ftpCon->TransferType = ftBinary;
+ StatusForm->ftpCon->ChangeDir(ist->Directory.c_str());
+ }
+ catch(...) {
+ MessageBox(0, "Can't connect. Please check your configuration.", "Connection Error", MB_OK);
+ StatusForm->Button1Click(0); // abort thread
+ }
+
+ if (!Terminated) {
+ if (dirTransfer) {
+ StatusForm->ftpCon->ChangeDir(src.c_str());
+ TStringList *dirText = new TStringList();
+ StatusForm->ftpCon->List(dirText, "*", true);
+ TIdFTPListItems *dirList = StatusForm->ftpCon->DirectoryListing;
+ for (int i = 0; i < dirList->Count; i++) {
+ if (dirList->Items[i]->ItemType != ditDirectory) {
+ buffer = dest + "/" + (dirList->Items[i]->FileName.c_str());
+// files->Strings[i].c_str();
+ if (!strcmp(&buffer.c_str()[buffer.length()-suffix.length()], suffix.c_str())) {
+ buffer2 = "Downloading (";
+ buffer2 += IntToStr(i+1).c_str();
+ buffer2 += " of ";
+ buffer2 += IntToStr(dirList->Count).c_str();
+ buffer2 += "): ";
+ buffer2 += (dirList->Items[i]->FileName.c_str());
+ // SWLog::systemlog->LogInformation("%s", buffer.c_str());
+ TMainForm::createParent(buffer.c_str()); // make sure parent directory exists
+ Synchronize((TThreadMethod)&PreDownload1);
+ try {
+ StatusForm->currentFileSize = dirList->Items[i]->Size;
+ StatusForm->ftpCon->Get(dirList->Items[i]->FileName.c_str(), buffer.c_str(), true, false);
+ }
+ catch(...) {
+ MessageBox(0, "Can't download file. If you have not done so recently, you might try pressing the Refresh from Remote Source button.", "Download Error", MB_OK);
+ StatusForm->Button1Click(0); // abort thread
+ }
+ if (Terminated)
+ break;
+ }
+ }
+ }
+ }
+ else {
+ Synchronize((TThreadMethod)&PreDownload2);
+ try {
+ StatusForm->ftpCon->Get(src.c_str(), dest.c_str(), true, false);
+ }
+ catch(...) {StatusForm->abort = true;}
+ }
+ try {
+ StatusForm->ftpCon->Disconnect();
+ }
+ catch(...){}
+ }
+*/
+}
+
+
+void __fastcall TStatusForm::TFTPThread::FTPLinkPacketRecvd(TObject *Sender)
+{
+// Synchronize((TThreadMethod)&UpdateBytes);
+}
+
+
+//void __fastcall TStatusForm::TFTPThread::UpdateBytes(void) {
+void __fastcall TStatusForm::UpdateBytes(void) {
+ StatusForm->statusBar->Caption = IntToStr(StatusForm->currentByteCount) + " bytes out of " + IntToStr(StatusForm->currentFileSize) + " transferred (" + IntToStr((int)((float)(StatusForm->currentByteCount + 1) / (float)(StatusForm->currentFileSize + 1) * 100)) + "%)";
+ StatusForm->statusBar->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::CreateFTPObject(void)
+{
+// FTPLink = new TNMFTP(0);
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreConnect(void)
+{
+ buffer = "Connecting to server at ";
+ buffer += ist->Source.c_str();
+ buffer += "...";
+ StatusForm->actionBar->Caption = buffer.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreDownload1(void)
+{
+// SWLog::systemlog->LogInformation("Creating parent dir: %s", buffer.c_str());
+// SWLog::systemlog->LogInformation("Return: %d", ret);
+ StatusForm->actionBar->Caption = buffer2.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreDownload2(void)
+{
+ buffer = "Downloading: ";
+ buffer += src.c_str();
+ StatusForm->actionBar->Caption = buffer.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+ MainForm->createParent(dest.c_str()); // make sure parent directory exists
+}
+
+
+void __fastcall TStatusForm::Cleanup(TObject *Sender)
+//void __fastcall TStatusForm::TFTPThread::Cleanup()
+{
+ if (abort)
+ StatusForm->ModalResult = mrCancel;
+ else StatusForm->ModalResult = mrOk;
+// StatusForm->Close();
+}
+
+void __fastcall TStatusForm::FormClose(TObject *Sender, TCloseAction &Action)
+{
+ suffix = "";
+ MainForm->SetFocus();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TStatusForm::Button1Click(TObject *Sender)
+{
+ abort = true;
+// ftpCon->Abort();
+ ftpThread->Terminate();
+}
+//---------------------------------------------------------------------------
+
+/*
+void __fastcall TStatusForm::ftpConWork(TObject *Sender,
+ TWorkMode AWorkMode, const int AWorkCount)
+{
+ currentByteCount = AWorkCount;
+// Synchronize((TThreadMethod)&UpdateBytes);
+ UpdateBytes();
+}
+*/
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/StatusFrm.dfm b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.dfm
new file mode 100644
index 0000000..bf8609e
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/StatusFrm.h b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.h
new file mode 100644
index 0000000..d4b2094
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/StatusFrm.h
@@ -0,0 +1,89 @@
+//---------------------------------------------------------------------------
+#ifndef StatusFrmH
+#define StatusFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+//#include <NMFtp.hpp>
+#include "MainFrm.h"
+//#include "IdBaseComponent.hpp"
+//#include "IdComponent.hpp"
+//#include "IdFTP.hpp"
+//#include "IdTCPClient.hpp"
+//#include "IdTCPConnection.hpp"
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+//---------------------------------------------------------------------------
+
+class TFTPCon {
+public:
+ string Host;
+ string Username;
+ string Password;
+ bool Passive;
+ string cwd;
+
+};
+
+class TStatusForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TButton *Button1;
+ TPanel *statusBar;
+ TPanel *Panel3;
+ TPanel *actionBar;
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall Cleanup(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+ void __fastcall Button1Click(TObject *Sender);
+// void __fastcall ftpConWork(TObject *Sender, TWorkMode AWorkMode,
+// const int AWorkCount);
+private: // User declarations
+ class TFTPThread : public TThread {
+ bool abort;
+ InstallSourceTab *ist;
+ string src;
+ string dest;
+ string buffer;
+ string buffer2;
+ string suffix;
+ bool dirTransfer;
+ bool passive;
+ protected:
+ void __fastcall Execute();
+ public:
+// TNMFTP *FTPLink;
+ __fastcall TFTPThread(InstallSourceTab *iist, const char *isrc, const char *idest, bool idirTransfer = false, bool CreateSuspended = false, bool ipassive = false, const char *suffix = "");
+ __fastcall TFTPThread::~TFTPThread();
+ void __fastcall FTPLinkPacketRecvd(TObject *Sender);
+ void __fastcall CreateFTPObject(void);
+ void __fastcall PreConnect(void);
+ void __fastcall PreDownload1(void);
+ void __fastcall PreDownload2(void);
+// void __fastcall Cleanup(void);
+ } *ftpThread;
+public: // User declarations
+ TFTPCon *ftpCon;
+ long currentByteCount;
+ long currentFileSize;
+ InstallSourceTab *ist;
+ string src;
+ string dest;
+ string suffix;
+ bool dirTransfer;
+ bool passive;
+ bool abort;
+ void __fastcall UpdateBytes();
+ __fastcall TStatusForm(TComponent* Owner);
+ __fastcall ~TStatusForm();
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TStatusForm *StatusForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.cpp b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.cpp
new file mode 100644
index 0000000..98a97d9
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.cpp
@@ -0,0 +1,15 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "UninstallFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TUninstallForm *UninstallForm;
+//---------------------------------------------------------------------------
+__fastcall TUninstallForm::TUninstallForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.dfm b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.dfm
new file mode 100644
index 0000000..3a2f310
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.h b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.h
new file mode 100644
index 0000000..45fdd7f
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/UninstallFrm.h
@@ -0,0 +1,26 @@
+//---------------------------------------------------------------------------
+#ifndef UninstallFrmH
+#define UninstallFrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TUninstallForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TProgressBar *ProgressBar1;
+ TLabel *Label1;
+private: // User declarations
+public: // User declarations
+ __fastcall TUninstallForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TUninstallForm *UninstallForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/arrow2r.bmp b/apps/windoze/CBuilder5/InstallMgr/arrow2r.bmp
new file mode 100644
index 0000000..8d5713f
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/arrow2r.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/arrow3u.bmp b/apps/windoze/CBuilder5/InstallMgr/arrow3u.bmp
new file mode 100644
index 0000000..a1c4068
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/arrow3u.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/back.bmp b/apps/windoze/CBuilder5/InstallMgr/back.bmp
new file mode 100644
index 0000000..966e157
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/back.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/bookshut.bmp b/apps/windoze/CBuilder5/InstallMgr/bookshut.bmp
new file mode 100644
index 0000000..5389910
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/bookshut.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/bulblk.bmp b/apps/windoze/CBuilder5/InstallMgr/bulblk.bmp
new file mode 100644
index 0000000..0da70ab
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/bulblk.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/bulbon.bmp b/apps/windoze/CBuilder5/InstallMgr/bulbon.bmp
new file mode 100644
index 0000000..61c7e5b
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/bulbon.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/check.bmp b/apps/windoze/CBuilder5/InstallMgr/check.bmp
new file mode 100644
index 0000000..09307a9
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/check.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/cipherfrm.cpp b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.cpp
new file mode 100644
index 0000000..5b77797
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.cpp
@@ -0,0 +1,67 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "cipherfrm.h"
+#include <swmgr.h>
+#include <swconfig.h>
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TCipherForm *CipherForm;
+//---------------------------------------------------------------------------
+__fastcall TCipherForm::TCipherForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TCipherForm::Button2Click(TObject *Sender)
+{
+ SectionMap::iterator section;
+ ConfigEntMap::iterator entry;
+ SWConfig *modconf = new SWConfig(confFile.c_str());
+ string tmpBuf;
+
+ section = modconf->Sections.find(modName);
+ if (section != modconf->Sections.end()) {
+ entry = section->second.find("CipherKey");
+ if (entry != section->second.end()) {
+ entry->second = CipherForm->cipherEdit->Text.c_str();
+ modconf->Save();
+ delete modconf; // close file
+ modconf = 0;
+ SWMgr *mgr = new SWMgr();
+ SWModule *mod = mgr->Modules[modName];
+ mod->SetKey("Ipet 2:12");
+ tmpBuf = mod->StripText();
+ mod->SetKey("gen 1:10");
+ tmpBuf += "\r\n\r\n";
+ tmpBuf += mod->StripText();
+ Memo1->Text = tmpBuf.c_str();
+ delete mgr;
+ }
+ }
+ if (modconf)
+ delete modconf;
+
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TCipherForm::FormShow(TObject *Sender)
+{
+ string tmpCaption;
+ tmpCaption = "Cipher Key: [";
+ tmpCaption += modName;
+ tmpCaption += "]";
+ Caption = tmpCaption.c_str();
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TCipherForm::FormClose(TObject *Sender,
+ TCloseAction &Action)
+{
+ Memo1->Text = "";
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/cipherfrm.dfm b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.dfm
new file mode 100644
index 0000000..98d9beb
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/cipherfrm.h b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.h
new file mode 100644
index 0000000..dba1e59
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/cipherfrm.h
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------------
+#ifndef cipherfrmH
+#define cipherfrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include <string>
+//---------------------------------------------------------------------------
+class TCipherForm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TPanel *Panel3;
+ TLabel *Label1;
+ TLabel *Label2;
+ TEdit *cipherEdit;
+ TMemo *Memo1;
+ TButton *Button1;
+ TButton *Button2;
+ TButton *Button3;
+ void __fastcall Button2Click(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+private: // User declarations
+public: // User declarations
+ std::string confFile;
+ std::string modName;
+ __fastcall TCipherForm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TCipherForm *CipherForm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/InstallMgr/delete.bmp b/apps/windoze/CBuilder5/InstallMgr/delete.bmp
new file mode 100644
index 0000000..d20cbf9
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/delete.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/filenew.bmp b/apps/windoze/CBuilder5/InstallMgr/filenew.bmp
new file mode 100644
index 0000000..59fb3db
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/filenew.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/floppy.bmp b/apps/windoze/CBuilder5/InstallMgr/floppy.bmp
new file mode 100644
index 0000000..5fbef0a
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/floppy.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/globe.bmp b/apps/windoze/CBuilder5/InstallMgr/globe.bmp
new file mode 100644
index 0000000..e4b661d
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/globe.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/insert.bmp b/apps/windoze/CBuilder5/InstallMgr/insert.bmp
new file mode 100644
index 0000000..7cc35c5
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/insert.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/installmgr.conf b/apps/windoze/CBuilder5/InstallMgr/installmgr.conf
new file mode 100644
index 0000000..04a349b
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/installmgr.conf
@@ -0,0 +1,8 @@
+
+[General]
+PassiveFTP=true
+
+[Sources]
+FTPSource=crosswire|ftp.crosswire.org|/pub/sword/raw/
+LocalPath=C:\tmp
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/query.bmp b/apps/windoze/CBuilder5/InstallMgr/query.bmp
new file mode 100644
index 0000000..36cd506
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/query.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/sword.bmp b/apps/windoze/CBuilder5/InstallMgr/sword.bmp
new file mode 100644
index 0000000..32c5606
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/sword.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/trash.bmp b/apps/windoze/CBuilder5/InstallMgr/trash.bmp
new file mode 100644
index 0000000..effbab9
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/trash.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/undo.bmp b/apps/windoze/CBuilder5/InstallMgr/undo.bmp
new file mode 100644
index 0000000..fc4fff6
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/undo.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/upgdlk.bmp b/apps/windoze/CBuilder5/InstallMgr/upgdlk.bmp
new file mode 100644
index 0000000..4158452
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/upgdlk.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/InstallMgr/zlib.bpf b/apps/windoze/CBuilder5/InstallMgr/zlib.bpf
new file mode 100644
index 0000000..a725d34
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/zlib.bpf
@@ -0,0 +1,25 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+USEUNIT("..\..\..\..\src\utilfuns\zlib\adler32.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\compress.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\crc32.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\deflate.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\gzio.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infblock.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infcodes.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inffast.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inflate.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\inftrees.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\infutil.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\maketree.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\trees.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\uncompr.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\untgz.c");
+USEUNIT("..\..\..\..\src\utilfuns\zlib\zutil.c");
+//---------------------------------------------------------------------------
+#define Library
+
+// To add a file to the library use the Project menu 'Add to Project'.
+
diff --git a/apps/windoze/CBuilder5/InstallMgr/zlib.bpr b/apps/windoze/CBuilder5/InstallMgr/zlib.bpr
new file mode 100644
index 0000000..635316b
--- /dev/null
+++ b/apps/windoze/CBuilder5/InstallMgr/zlib.bpr
@@ -0,0 +1,126 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="zlib.lib"/>
+ <OBJFILES value="..\..\..\..\src\utilfuns\zlib\adler32.obj
+ ..\..\..\..\src\utilfuns\zlib\compress.obj
+ ..\..\..\..\src\utilfuns\zlib\crc32.obj
+ ..\..\..\..\src\utilfuns\zlib\deflate.obj
+ ..\..\..\..\src\utilfuns\zlib\gzio.obj
+ ..\..\..\..\src\utilfuns\zlib\infblock.obj
+ ..\..\..\..\src\utilfuns\zlib\infcodes.obj
+ ..\..\..\..\src\utilfuns\zlib\inffast.obj
+ ..\..\..\..\src\utilfuns\zlib\inflate.obj
+ ..\..\..\..\src\utilfuns\zlib\inftrees.obj
+ ..\..\..\..\src\utilfuns\zlib\infutil.obj
+ ..\..\..\..\src\utilfuns\zlib\maketree.obj
+ ..\..\..\..\src\utilfuns\zlib\trees.obj
+ ..\..\..\..\src\utilfuns\zlib\uncompr.obj
+ ..\..\..\..\src\utilfuns\zlib\untgz.obj
+ ..\..\..\..\src\utilfuns\zlib\zutil.obj"/>
+ <RESFILES value=""/>
+ <IDLFILES value=""/>
+ <IDLGENFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES)"/>
+ <LIBFILES value=""/>
+ <LIBRARIES value=""/>
+ <PACKAGES value=""/>
+ <PATHCPP value=".;..\..\..\..\src\utilfuns\zlib"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <LINKER value="TLib"/>
+ <USERDEFINES value=""/>
+ <SYSDEFINES value="_RTLDLL;NO_STRICT"/>
+ <MAINSOURCE value="zlib.bpf"/>
+ <INCLUDEPATH value="..\..\..\..\src\utilfuns\zlib;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include"/>
+ <LIBPATH value="..\..\..\..\src\utilfuns\zlib;$(BCB)\lib\obj;$(BCB)\lib"/>
+ <WARNINGS value="-w-par"/>
+ <LISTFILE value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I..\..\..\..\src\utilfuns\zlib -I$(BCB)\include -I$(BCB)\include\vcl
+ -I..\..\..\..\include -src_suffix cpp -boa"/>
+ <CFLAG1 value="-O2 -H=$(BCB)\lib\vcl50.csm -Hc -Vx -Ve -X- -a8 -b- -k- -vi -c -tW -tWM"/>
+ <PFLAGS value="-$Y- -$L- -$D- -v -JPHNE -M"/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value=""/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="$(OBJFILES)"/>
+ <ALLLIB value=""/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[HistoryLists\hlIncludePath]
+Count=2
+Item0=..\..\..\..\src\utilfuns\zlib;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item1=..\..\..\..\src\utilfuns\zlib;$(BCB)\include;$(BCB)\include\vcl
+
+[HistoryLists\hlLibraryPath]
+Count=1
+Item0=..\..\..\..\src\utilfuns\zlib;$(BCB)\lib\obj;$(BCB)\lib
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[HistoryLists\hlConditionals]
+Count=1
+Item0=_DEBUG
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[CORBA]
+AddServerUnit=1
+AddClientUnit=1
+PrecompiledHeaders=1
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/AboutBoxfrm.cpp b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.cpp
new file mode 100644
index 0000000..39ca670
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.cpp
@@ -0,0 +1,85 @@
+//---------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "AboutBoxfrm.h"
+#include "mainfrm.h"
+//---------------------------------------------------------------------
+#pragma resource "*.dfm"
+TAboutBox *AboutBox;
+//---------------------------------------------------------------------
+__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
+ : TForm(AOwner)
+{
+}
+//---------------------------------------------------------------------
+void __fastcall TAboutBox::FormShow(TObject *Sender)
+{
+ int i;
+ static char *modtypes[] = {"Biblical Texts", "Commentaries", "Lexicons / Dictionaries"};
+
+ AnsiString newtext, tmptext;
+ ModMap::iterator it;
+ SectionMap::iterator it2;
+ TMemoryStream *RTFStream = new TMemoryStream();
+
+ newtext = "{\\rtf1\\ansi{\\fonttbl{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}}{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;}";
+ newtext += "\\pard\\qc\\cf2\\nowidctlpar{\\fs30\\b Installed Modules } \\par \\pard \\nowidctlpar \\cf0 ";
+
+ for (i = 0; i < 3; i++) {
+ newtext += "\\par {\\fs28\\b ";
+ newtext += modtypes[i];
+ newtext += " }\\par \\par ";
+ for (it = Form1->mainmgr->Modules.begin(); it != Form1->mainmgr->Modules.end(); it++) {
+ if (!strcmp((*it).second->Type(), modtypes[i])) {
+ it2 = Form1->mainmgr->config->Sections.find((*it).second->Name());
+ if (it2 != Form1->mainmgr->config->Sections.end()) {
+ newtext = newtext + "{\\fs24\\cf1\\b " + (*it).second->Name() + " }\t";
+ newtext = newtext + "{\\fs24\\i " + (*it).second->Description() + " } \\par ";
+ newtext = newtext + "{\\fs20\\cf0 " + (*it2).second["About"].c_str() + " }\\par \\par";
+ }
+ }
+ }
+ }
+ newtext += "{\\fs24 \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ ModulesAbout->Lines->LoadFromStream(RTFStream);
+
+ newtext = "{\\rtf1\\ansi{\\fonttbl{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}}{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;}";
+ newtext += "\\fs20 Thanx to God for His GREAT MERCY and LOVE: Never did anyone have so much, give it up so completely, to humble Himself and die such a death, all for such an ENEMY as me. -Philippians 2:6-8; Romans 5:6-10 \\par\\par ";
+ newtext += "For the latest updates and info, visit us on the net at: \\par ";
+ newtext += "http://www.crosswire.org \\par\\par ";
+ newtext += "Send us feedback, bug reports, or patches/additions: \\par ";
+ newtext += "sword-feedback@crosswire.org \\par ";
+ newtext += "sword-bugs@crosswire.org \\par ";
+ newtext += "sword-patches@crosswire.org (please include unified diffs if possible (diff -u)) \\par\\par ";
+ newtext += "To be on our mailing list: \\par ";
+ newtext += "sword-list-info@crosswire.org \\par\\par ";
+ newtext += "This software is provided free for the study of God and His Word. You DO NOT NEED TO license or pay for this software. Please: copy it freely and distribute it to athiests in Russia :), post it on your favorite FTP site, write your own modules and features for it, include it on your lastest freeware CDROM, incorporate all the cool utility classes into a product of your own, write a tract module for the program and sneak it onto all of your co-workers' computers and blame it on a virus, make fun of your pastor for spending $400 dollars on a similar package, give it to your pastor who can't figure out how to use his $400 dollar package :) \\par\\par ";
+ newtext += "OK, if you still feel the need, you can help our organization out at: \\par\\par ";
+ newtext += "CrossWire Software & Bible Society \\par ";
+ newtext += "P. O. Box 2528 \\par ";
+ newtext += "Tempe, AZ 85280-2528 \\par\\par ";
+ newtext += "... but I must warn you, your contributions will probably just go toward paying my way through college, or to give me a little more time to spend on the project :) \\par\\par ";
+ newtext += "\tMay the peace of GOD consume your heart, \\par ";
+ newtext += "\t\tThe SWORD Project Development Team \\par ";
+ newtext += "_________________________________________ \\par ";
+ newtext += "Thanks be to God for all the wonderful people who have contributed in so many ways to make this project possible. These are just a few (I could not possibly name them all) who have directly contributed an abundance of their time and talents: \\par\\par ";
+ newtext += "All the people at The Outpost in Scottsdale for testing and suggestions; The Bible Foundation: Jerry Kingery, Jerry Hastings; Geoffrey W. Hastings; William Dicks; Everyone on b-greek@virginia.edu; Michael Paul Johnson; Roland Nygren; Bill Kincaid; Mark Fuller; Larry Pierce; Franklin Bratcher; Gregory Hall; Luis Cortes\\par \\par ";
+ newtext += "{\\i And the list goes on...} \\par \\par ";
+ newtext += "{\\fs24 \\par }}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ CreditAbout->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+
+
+}
+//---------------------------------------------------------------------------
+
+
+
+
diff --git a/apps/windoze/CBuilder5/prototype/AboutBoxfrm.dfm b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.dfm
new file mode 100644
index 0000000..4911690
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/AboutBoxfrm.h b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.h
new file mode 100644
index 0000000..77da4f8
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AboutBoxfrm.h
@@ -0,0 +1,36 @@
+//----------------------------------------------------------------------------
+#ifndef AboutBoxfrmH
+#define AboutBoxfrmH
+//----------------------------------------------------------------------------
+#include <vcl\System.hpp>
+#include <vcl\Windows.hpp>
+#include <vcl\SysUtils.hpp>
+#include <vcl\Classes.hpp>
+#include <vcl\Graphics.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Buttons.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\ComCtrls.hpp>
+//----------------------------------------------------------------------------
+class TAboutBox : public TForm
+{
+__published:
+ TPanel *Panel1;
+ TImage *ProgramIcon;
+ TLabel *ProductName;
+ TLabel *Version;
+ TLabel *Copyright;
+ TButton *OKButton;
+ TRichEdit *CreditAbout;
+ TRichEdit *ModulesAbout;
+ void __fastcall FormShow(TObject *Sender);
+private:
+public:
+ virtual __fastcall TAboutBox(TComponent* AOwner);
+};
+//----------------------------------------------------------------------------
+extern TAboutBox *AboutBox;
+//----------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/AppBar.cpp b/apps/windoze/CBuilder5/prototype/AppBar.cpp
new file mode 100644
index 0000000..8d7cf98
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AppBar.cpp
@@ -0,0 +1,234 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "AppBar.h"
+#include "DockCanvas.h"
+#include "ModTabPanel.h"
+#include "biblecsmgr.h"
+#include "BookMarkPanel.h"
+#include "DeskTopNameForm.h"
+#include <versekey.h>
+#include "vrslstfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+//#pragma link "MenuBar"
+#pragma resource "*.dfm"
+TAppBarFrm *AppBarFrm;
+//---------------------------------------------------------------------------
+__fastcall TAppBarFrm::TAppBarFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::FormCreate(TObject *Sender)
+{
+ ImageList1->Add(BackBtnImage->Picture->Bitmap, NULL);
+ ImageList1->Add(SearchBtnImage->Picture->Bitmap, NULL);
+ mainmgr = new BibleCSMGR(ModInstFrm);
+ commonVK = new VerseKey();
+ commonVK->Persist(true);
+ commonSK = new SWKey();
+ commonSK->Persist(true);
+ *commonVK = "Jas 1:19";
+ fillVKeySelector(commonVK);
+ ModMap::iterator it;
+ SWKey *tryKey;
+ for (it = mainmgr->Modules.begin(); it != mainmgr->Modules.end(); it++) {
+ tryKey = it->second->CreateKey();
+ const SWClass *keyClass = tryKey->getClass();
+ bool yes = (keyClass->isAssignableFrom("VerseKey"));
+ SWKey *vkey = (yes) ? commonVK:commonSK;
+ it->second->SetKey(vkey);
+ delete tryKey;
+ }
+ activeDesktop = 0;
+ TextKeyChanged();
+}
+//---------------------------------------------------------------------------
+void __fastcall TAppBarFrm::SpeedButton2Click(TObject *Sender)
+{
+ if (activeDesktop) {
+ TModTabPanel *textTabs = new TModTabPanel(activeDesktop, mainmgr, "Biblical Texts");
+ textTabs->ManualDock(activeDesktop, NULL, alLeft);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TAppBarFrm::SpeedButton5Click(TObject *Sender)
+{
+ if (activeDesktop) {
+ TBookMarkPanel *bookmarks = new TBookMarkPanel(activeDesktop);
+ bookmarks->ManualDock(activeDesktop, NULL, alLeft);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::SpeedButton3Click(TObject *Sender)
+{
+ if (activeDesktop) {
+ TModTabPanel *textTabs = new TModTabPanel(activeDesktop, mainmgr, "Commentaries");
+ textTabs->ManualDock(activeDesktop, NULL, alLeft);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::SpeedButton4Click(TObject *Sender)
+{
+ if (activeDesktop) {
+ TModTabPanel *textTabs = new TModTabPanel(activeDesktop, mainmgr, "Lexicons / Dictionaries");
+ textTabs->ManualDock(activeDesktop, NULL, alLeft);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::TabControl1Change(TObject *Sender)
+{
+ int index = TabControl1->TabIndex;
+ if (index > -1) {
+ activeDesktop = ((TForm *)(TabControl1->Tabs->Objects[index]));
+ activeDesktop->Show();
+ }
+ else activeDesktop = 0;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::SpeedButton1Click(TObject *Sender)
+{
+ DeskTopNameFrm->ShowModal();
+ activeDesktop = new TDockCanvasFrm(this);
+ activeDesktop->OnClose = FormClose;
+ activeDesktop->OnActivate = FormActivate;
+ activeDesktop->Caption = DeskTopNameFrm->desktopName->Text;
+ TabControl1->Tabs->AddObject(activeDesktop->Caption, activeDesktop);
+ if (activeDesktop->Top < (this->Top + this->Height))
+ activeDesktop->Top = this->Top + this->Height + 1;
+ activeDesktop->Show();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::FormClose(TObject *Sender,
+ TCloseAction &Action)
+{
+ int index = TabControl1->Tabs->IndexOfObject(Sender);
+ TabControl1->Tabs->Delete(index);
+ TabControl1->TabIndex = 0;
+ TabControl1Change(Sender);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::FormActivate(TObject *Sender)
+{
+ int index = TabControl1->Tabs->IndexOfObject(Sender);
+ TabControl1->TabIndex = index;
+ TabControl1Change(Sender);
+}
+//---------------------------------------------------------------------------
+
+void TAppBarFrm::fillVKeySelector(VerseKey *vk) {
+ VerseKey *myVk = (VerseKey *)vk->clone();
+ myVk->Error(); //clear error
+ (*myVk) = TOP;
+ cbBook->Clear();
+ while (!myVk->Error()) {
+ AnsiString s1 = (const char *)(*myVk);
+ s1.SetLength(s1.Length() - 4);
+ cbBook->Items->Add(s1);
+ myVk->Book(myVk->Book() + 1);
+ }
+ delete myVk;
+}
+
+
+void __fastcall TAppBarFrm::FormDestroy(TObject *Sender)
+{
+ delete commonVK;
+ delete commonSK;
+}
+void TAppBarFrm::RefreshActiveSheet(TPageControl *pc)
+{
+ ModMap::iterator it;
+ if (mainmgr) {
+ it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ (*it).second->Display();
+// if (logmodstate)
+// modstates.insert(modstates.begin(), new ModState(pc, pc->ActivePage, (*it).second->KeyText()));
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void TAppBarFrm::TextKeyChanged()
+{
+ cbBook->ItemIndex = cbBook->Items->IndexOf(commonVK->books[commonVK->Testament()-1][commonVK->Book()-1].name);
+ CHBox->Text = commonVK->Chapter();
+ VSBox->Text = commonVK->Verse();
+ freeHandLookup->Text = (const char *)*commonVK;
+
+ if (activeDesktop) {
+ for (int i = 0; i < activeDesktop->DockClientCount; i++) {
+ TPanel *panel = dynamic_cast<TPanel *>(activeDesktop->DockClients[i]);
+ if (panel) {
+ TPageControl *pc = dynamic_cast<TPageControl *>(panel->Controls[0]);
+ if (pc)
+ RefreshActiveSheet(pc);
+ }
+ }
+ }
+
+// RefreshActiveSheet(PageControl1);
+// logmodstate = false; // only log state once
+// RefreshActiveSheet(PageControl2);
+// logmodstate = true;
+}
+void __fastcall TAppBarFrm::btnLookupClick(TObject *Sender)
+{
+ if (!(StrToInt(CHBox->Text)) || (!StrToInt(VSBox->Text)))
+ commonVK->AutoNormalize(0);
+
+ if (StrToInt(CHBox->Text) < 0)
+ CHBox->Text = StrToInt(CHBox->Text) + 1;
+ if (StrToInt(VSBox->Text) < 0)
+ VSBox->Text = StrToInt(VSBox->Text) + 1;
+
+ *commonVK = (cbBook->Text + " " + CHBox->Text + ":" + VSBox->Text).c_str();
+ TextKeyChanged();
+ commonVK->AutoNormalize(1);
+}
+
+void __fastcall TAppBarFrm::UpDown1Click(TObject *Sender,
+ TUDBtnType Button)
+{
+ btnLookupClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TAppBarFrm::freeHandLookupKeyPress(TObject *Sender,
+ char &Key)
+{
+ if (Key == '\r') {
+ ListKey tmpVerseList = commonVK->ParseVerseList(freeHandLookup->Text.c_str(), *commonVK);
+
+ if (tmpVerseList.Count()) {
+ int index = freeHandLookup->Items->IndexOf(freeHandLookup->Text);
+ freeHandLookup->Items->Insert(0, freeHandLookup->Text);
+
+ if (index >= 0)
+ freeHandLookup->Items->Delete(index+1);
+
+ freeHandLookup->ItemIndex = 0;
+
+ if (tmpVerseList.Count() > 1) {
+ TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList);
+ tmpForm->Caption = "User Verse List";
+ tmpForm->Show();
+ }
+
+ tmpVerseList = TOP;
+ *commonVK = tmpVerseList;
+ TextKeyChanged();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/prototype/AppBar.dfm b/apps/windoze/CBuilder5/prototype/AppBar.dfm
new file mode 100644
index 0000000..f11d879
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AppBar.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/AppBar.h b/apps/windoze/CBuilder5/prototype/AppBar.h
new file mode 100644
index 0000000..4839b2f
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/AppBar.h
@@ -0,0 +1,94 @@
+//---------------------------------------------------------------------------
+#ifndef AppBarH
+#define AppBarH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <Buttons.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+#include <Graphics.hpp>
+#include <ToolWin.hpp>
+#include <Menus.hpp>
+//#include <MenuBar.hpp>
+#include <ImgList.hpp>
+//#include <DockCanvas.h>
+class SWMgr;
+class VerseKey;
+class SWKey;
+//---------------------------------------------------------------------------
+class TAppBarFrm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TTabControl *TabControl1;
+ TCoolBar *CoolBar1;
+ TImage *BackBtnImage;
+ TImage *SearchBtnImage;
+ TToolBar *ToolBar2;
+ TToolButton *ToolButton3;
+ TToolButton *ToolButton4;
+ TPanel *Panel3;
+ TSpeedButton *btnLookup;
+ TComboBox *cbBook;
+ TEdit *CHBox;
+ TUpDown *UpDown1;
+ TEdit *VSBox;
+ TUpDown *UpDown2;
+ TToolBar *ToolBar1;
+ TSpeedButton *Bookmarkbtn;
+ TPanel *pnlSpeed;
+ TCoolBar *CoolBar2;
+ TMainMenu *MainMenu2;
+ TMenuItem *File1;
+ TMenuItem *Options1;
+ TMenuItem *SaveLayout1;
+ TMenuItem *N1;
+ TMenuItem *Exit1;
+ TMenuItem *Edit2;
+ TMenuItem *Copy3;
+ TMenuItem *Search3;
+ TMenuItem *NewSearchWindow1;
+ TMenuItem *Help4;
+ TMenuItem *About1;
+ TImageList *ImageList1;
+ TImage *Image2;
+ TImage *Image1;
+ TPanel *Panel4;
+ TSpeedButton *SpeedButton1;
+ TSpeedButton *SpeedButton2;
+ TSpeedButton *SpeedButton3;
+ TSpeedButton *SpeedButton4;
+ TSpeedButton *SpeedButton5;
+ TComboBox *freeHandLookup;
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall SpeedButton2Click(TObject *Sender);
+ void __fastcall SpeedButton5Click(TObject *Sender);
+ void __fastcall SpeedButton3Click(TObject *Sender);
+ void __fastcall SpeedButton4Click(TObject *Sender);
+ void __fastcall TabControl1Change(TObject *Sender);
+ void __fastcall SpeedButton1Click(TObject *Sender);
+ void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
+ void __fastcall FormActivate(TObject *Sender);
+ void __fastcall btnLookupClick(TObject *Sender);
+ void __fastcall FormDestroy(TObject *Sender);
+ void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
+ void __fastcall freeHandLookupKeyPress(TObject *Sender, char &Key);
+private: // User declarations
+ void RefreshActiveSheet(TPageControl *pc);
+ void TextKeyChanged();
+ void fillVKeySelector(VerseKey *vk);
+ VerseKey *commonVK;
+ SWKey *commonSK;
+public: // User declarations
+ __fastcall TAppBarFrm(TComponent* Owner);
+ SWMgr *mainmgr;
+ TForm *activeDesktop;
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TAppBarFrm *AppBarFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/Bitmap1.bmp b/apps/windoze/CBuilder5/prototype/Bitmap1.bmp
new file mode 100644
index 0000000..cab8e28
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/Bitmap1.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/BookMarkPanel.cpp b/apps/windoze/CBuilder5/prototype/BookMarkPanel.cpp
new file mode 100644
index 0000000..78dd615
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/BookMarkPanel.cpp
@@ -0,0 +1,352 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "BookMarkPanel.h"
+#pragma package(smart_init)
+#include "newbmfilefrm.h"
+//#include <dir.h>
+#include <io.h>
+#include <dirent.h>
+#include <swconfig.h>
+//---------------------------------------------------------------------------
+// ValidCtrCheck is used to assure that the components created do not have
+// any pure virtual functions.
+//
+
+static inline void ValidCtrCheck(TBookMarkPanel *)
+{
+ new TBookMarkPanel(NULL);
+}
+//---------------------------------------------------------------------------
+__fastcall TBookMarkPanel::TBookMarkPanel(TComponent* Owner)
+ : TPanel(Owner)
+{
+ BMPopup = new TPopupMenu(this);
+ TMenuItem * newitem;
+ newitem = new TMenuItem(BMPopup);
+ newitem->Caption = "&Add Child";
+ newitem->OnClick = AddChild1Click;
+ BMPopup->Items->Add(newitem);
+ newitem = new TMenuItem(BMPopup);
+ newitem->Caption = "&Delete";
+ newitem->OnClick = Delete1Click;
+ BMPopup->Items->Add(newitem);
+ newitem = new TMenuItem(BMPopup);
+ newitem->Caption = "&Rename";
+ newitem->OnClick = Rename1Click;
+ BMPopup->Items->Add(newitem);
+ newitem = new TMenuItem(BMPopup);
+ newitem->Caption = "-";
+ BMPopup->Items->Add(newitem);
+ newitem = new TMenuItem(BMPopup);
+ newitem->Caption = "&New Bookmark File";
+ newitem->OnClick = NewBookmarkFile1Click;
+ BMPopup->Items->Add(newitem);
+}
+
+
+__fastcall TBookMarkPanel::~TBookMarkPanel()
+{
+ list <String *>::iterator it;
+
+ SaveBookmarks();
+
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++)
+ delete *it;
+}
+
+
+void __fastcall TBookMarkPanel::CreateWnd() {
+
+ TPanel::CreateWnd();
+
+ SWConfig *bookmarks;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ DIR *dir;
+ struct dirent *ent;
+ string conffile;
+ bmdir = "";
+ SWConfig optionsconf("./options.conf");
+
+ this->DragMode = dmAutomatic;
+ this->DragKind = dkDock;
+ this->UseDockManager = true;
+
+ bmtree = new TTreeView(this);
+ bmtree->Parent = this;
+ bmtree->Align = alClient;
+ bmtree->Items->Clear();
+ bmtree->PopupMenu = BMPopup;
+
+ if ((sit = optionsconf.Sections.find("Bookmarks")) != optionsconf.Sections.end())
+ bmdir = ((eit = (*sit).second.find("Directory")) != (*sit).second.end()) ? (*eit).second : (string)"";
+
+// Add Personal Bookmarks first, or if they don't exist, ADD A BLANK BRANCH first in the tree
+// --------------------------------------------------------------------------
+
+ if (bmdir == "")
+ bmdir = "./bookmarks/";
+
+ if (access(bmdir.c_str(), 0)) { // directory does not exist
+ _mkdir(bmdir.c_str());
+ }
+
+ conffile = bmdir + "personal.conf";
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) {
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ else bmtree->Items->AddObject(bmtree->Selected, "Personal Bookmarks", *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ delete bookmarks;
+// --------------------------------------------------------------------------
+
+// Add all other bookmark files ---------------------------------------------
+ if (dir = opendir(bmdir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, "personal.conf")) && (strcmp(ent->d_name, "."))&& (strcmp(ent->d_name, ".."))) {
+ conffile = bmdir;
+ conffile += ent->d_name;
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) { // Currently supports only ONE topsection per file because on save, each topsection designates which file to rewrite
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ delete bookmarks;
+ }
+ }
+ closedir(dir);
+ }
+/*
+ SWConfig *bookmarks;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ DIR *dir;
+ struct dirent *ent;
+ string conffile;
+ bmdir = "";
+ SWConfig optionsconf("./options.conf");
+
+ this->DragMode = dmAutomatic;
+ this->DragKind = dkDock;
+ this->UseDockManager = true;
+
+ bmtree = new TTreeView(this);
+ bmtree->Parent = this;
+ bmtree->Align = alClient;
+ bmtree->DragMode = dmAutomatic;
+ bmtree->Indent = 19;
+ bmtree->PopupMenu = BMPopup;
+ bmtree->TabOrder = 0;
+ bmtree->OnDblClick = bmtreeDblClick;
+ bmtree->OnDragDrop = bmtreeDragDrop;
+ bmtree->OnDragOver = bmtreeDragOver;
+
+
+
+ bmtree->Items->Clear();
+
+ if ((sit = optionsconf.Sections.find("Bookmarks")) != optionsconf.Sections.end())
+ bmdir = (*sit).second["Directory"];
+
+// Add Personal Bookmarks first, or if they don't exist, ADD A BLANK BRANCH first in the tree
+// --------------------------------------------------------------------------
+
+ if (bmdir == "")
+ bmdir = "./bookmarks/";
+
+ if (access(bmdir.c_str(), 0)) { // directory does not exist
+ _mkdir(bmdir.c_str());
+ }
+
+ conffile = bmdir + "personal.conf";
+ bookmarks = new SWConfig(conffile);
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) {
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ else bmtree->Items->AddObject(bmtree->Selected, "Personal Bookmarks", *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ delete bookmarks;
+// --------------------------------------------------------------------------
+
+// Add all other bookmark files ---------------------------------------------
+ if (dir = opendir(bmdir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, "personal.conf")) && (strcmp(ent->d_name, "."))&& (strcmp(ent->d_name, ".."))) {
+ conffile = bmdir;
+ conffile += ent->d_name;
+ bookmarks = new SWConfig(conffile);
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) { // Currently supports only ONE topsection per file because on save, each topsection designates which file to rewrite
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ delete bookmarks;
+ }
+ }
+ closedir(dir);
+ }
+*/
+}
+
+
+void TBookMarkPanel::AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section)
+{
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ if ((sit = config->Sections.find(section.c_str())) != config->Sections.end()) {
+ for (eit = (*sit).second.begin(); eit != (*sit).second.end(); eit++) {
+ node = tree->Items->AddChild(parent, (*eit).second.c_str());
+ AddSection(config, tree, node, (*eit).first.c_str());
+ }
+ }
+}
+
+
+void __fastcall TBookMarkPanel::bmtreeDragDrop(TObject *Sender, TObject *Source,
+ int X, int Y)
+{
+ bmtree->Selected->MoveTo(bmtree->DropTarget, naAddChildFirst);
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookMarkPanel::bmtreeDragOver(TObject *Sender, TObject *Source,
+ int X, int Y, TDragState State, bool &Accept)
+{
+ Accept = false;
+
+ if (String(Source->ClassName()) == "TTreeView") {
+ if (Source == bmtree) {
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ Accept = true;
+ }
+ }
+ else Accept = true;
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookMarkPanel::bmtreeDblClick(TObject *Sender)
+{
+ if (!bmtree->Selected->getFirstChild()) {
+// Form1->DefaultVSKey = bmtree->Selected->Text.c_str();
+// Form1->TextKeyChanged();
+ }
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookMarkPanel::AddChild1Click(TObject *Sender)
+{
+ bmtree->Selected->Expand(false);
+ bmtree->Items->AddChildFirst(bmtree->Selected, "New Topic")->EditText();
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookMarkPanel::Delete1Click(TObject *Sender)
+{
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ bmtree->Selected->Delete();
+ }
+ }
+ else bmtree->Selected->Delete();
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookMarkPanel::Rename1Click(TObject *Sender)
+{
+ bmtree->Selected->EditText();
+}
+//---------------------------------------------------------------------------
+
+void TBookMarkPanel::SaveBookmarks()
+{
+ TTreeNode *tree = 0;
+ SWConfig *bmconf;
+ ConfigEntMap emap;
+ SectionMap::iterator sit;
+ char buf[15];
+ bool personal, other;
+ list <String *>::iterator it;
+ string persfile;
+ SWConfig optionsconf("./options.conf");
+
+ if (bmtree->Items->Count)
+ tree = bmtree->Items->Item[0];
+
+ if ((sit = optionsconf.Sections.find("Bookmarks")) != optionsconf.Sections.end()) {
+ personal = (atoi((*(*sit).second.find("AutoSavePersonal")).second.c_str())) ? true:false;
+ other = (atoi((*(*sit).second.find("AutoSaveOther")).second.c_str())) ? true:false;
+ }
+
+ persfile = bmdir + "personal.conf";
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++) { // delete all bookmark files before saving in case a top level was deleted
+ if (((!strcmp((*it)->c_str(), persfile.c_str())) && personal) || ((strcmp((*it)->c_str(), persfile.c_str())) && other))
+ unlink((*it)->c_str());
+ }
+
+ for (;tree;tree = tree->getNextSibling()) {
+ if (((*((String *)tree->Data) == persfile.c_str()) && personal) || ((*((String *)tree->Data) != persfile.c_str()) && other)) {
+ bmconf = new SWConfig(((String *)tree->Data)->c_str());
+ emap = bmconf->Sections["ROOT"];
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ emap.erase(buf); emap.insert(ConfigEntMap::value_type(buf, tree->Text.c_str()));
+ AddSectionToConf(bmconf, buf, tree);
+ bmconf->Sections["ROOT"] = emap;
+ bmconf->Save();
+ delete bmconf;
+ }
+ }
+}
+
+
+void TBookMarkPanel::AddSectionToConf(SWConfig *config, String section, TTreeNode *tree) {
+ ConfigEntMap sit;
+ char buf[15];
+
+ if (tree = tree->getFirstChild()) {
+ sit = config->Sections[section.c_str()];
+ for (; tree; tree = tree->getNextSibling()) {
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ sit.erase(buf); sit.insert(ConfigEntMap::value_type(buf, tree->Text.c_str()));
+ AddSectionToConf(config, buf, tree);
+ }
+ config->Sections[section.c_str()] = sit;
+ }
+}
+
+void __fastcall TBookMarkPanel::NewBookmarkFile1Click(TObject *Sender)
+{
+ if (NewBMfrm->ShowModal() == mrOk) {
+ bmtree->Items->AddObject(bmtree->Items->Item[0], NewBMfrm->bmtitle->Text, *bmfiles.insert(bmfiles.begin(), new String(String(bmdir.c_str()) + NewBMfrm->bmfile->Text + String(".conf"))));
+ }
+}
+
+
+
+//---------------------------------------------------------------------------
+namespace Bookmarkpanel
+{
+ void __fastcall PACKAGE Register()
+ {
+ TComponentClass classes[1] = {__classid(TBookMarkPanel)};
+ RegisterComponents("Samples", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/BookMarkPanel.h b/apps/windoze/CBuilder5/prototype/BookMarkPanel.h
new file mode 100644
index 0000000..c998b76
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/BookMarkPanel.h
@@ -0,0 +1,39 @@
+//---------------------------------------------------------------------------
+#ifndef BookMarkPanelH
+#define BookMarkPanelH
+//---------------------------------------------------------------------------
+#include <SysUtils.hpp>
+#include <Controls.hpp>
+#include <Classes.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include <swconfig.h>
+#include <list>
+//---------------------------------------------------------------------------
+class PACKAGE TBookMarkPanel : public TPanel
+{
+private:
+ void AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section);
+ list <String *> bmfiles; // so we can delete each display we create
+protected:
+public:
+ __fastcall TBookMarkPanel(TComponent* Owner);
+ virtual __fastcall ~TBookMarkPanel();
+ virtual void __fastcall CreateWnd();
+ string bmdir;
+ void SaveBookmarks();
+ void AddSectionToConf(SWConfig *config, String section, TTreeNode *tree);
+__published:
+ TTreeView *bmtree;
+ TPopupMenu *BMPopup;
+ void __fastcall bmtreeDragDrop(TObject *Sender, TObject *Source, int X, int Y);
+ void __fastcall bmtreeDragOver(TObject *Sender, TObject *Source, int X, int Y,
+ TDragState State, bool &Accept);
+ void __fastcall bmtreeDblClick(TObject *Sender);
+ void __fastcall AddChild1Click(TObject *Sender);
+ void __fastcall Delete1Click(TObject *Sender);
+ void __fastcall Rename1Click(TObject *Sender);
+ void __fastcall NewBookmarkFile1Click(TObject *Sender);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/CommentPanel.cpp b/apps/windoze/CBuilder5/prototype/CommentPanel.cpp
new file mode 100644
index 0000000..dbf8adf
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/CommentPanel.cpp
@@ -0,0 +1,222 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#include <vcl/clipbrd.hpp>
+#pragma hdrstop
+
+#include "CommentPanel.h"
+#pragma package(smart_init)
+#include "swdisprtfchap.h"
+#include <swconfig.h>
+#include <swmodule.h>
+#include "Greek2Greek.h"
+#include <utilfuns.h>
+#include <swmgr.h>
+#include <shellapi.h>
+
+class RTFDisp : public SWDisplay {
+ SWDispRTF *edit;
+public:
+ RTFDisp(SWDispRTF *iedit) { edit = iedit; }
+ RTFDisp() {}
+ char Display(SWModule &imodule) {
+ edit->Display(imodule);
+ }
+};
+
+class DispExternal : public SWDisplay {
+public:
+ DispExternal() {}
+ char Display(SWModule &imodule) {
+ SHELLEXECUTEINFO info;
+ info.cbSize = sizeof(SHELLEXECUTEINFO);
+ info.fMask = SEE_MASK_NOCLOSEPROCESS; //SEE_MASK_CLASSNAME;
+ info.hwnd = GetFocus();
+ info.lpVerb = "open";
+ info.lpFile = (char *)imodule;
+ info.lpParameters = NULL;
+ info.lpDirectory = NULL;
+ info.nShow = 0;
+// info.lpClass = ".html";
+ ShellExecuteEx(&info);
+// ShellExecute(edit->Handle, "open", (char *)imodule, NULL, NULL, SW_SHOWNORMAL);
+ }
+};
+
+//---------------------------------------------------------------------------
+// ValidCtrCheck is used to assure that the components created do not have
+// any pure virtual functions.
+//
+
+static inline void ValidCtrCheck(TCommentPanel *)
+{
+ new TCommentPanel(NULL);
+}
+//---------------------------------------------------------------------------
+__fastcall TCommentPanel::TCommentPanel(TComponent* Owner, SWModule *mod, SWMgr *imgr)
+ : TPanel(Owner)
+{
+ module = mod;
+ mgr = imgr;
+ this->font = 0;
+ stdstr(&(this->font), font);
+ menu = new TPopupMenu(this);
+ menu->OnPopup = PopupMenuPopup;
+
+ TMenuItem * newitem;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "&Copy";
+ newitem->Hint = "Copy text to clipboard";
+ newitem->Default = false;
+ newitem->OnClick = Copy1Click;
+ menu->Items->Add(newitem);
+ if (!strcmp(mod->Name(), "N27U4")) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Copy as &B-Greek Transliteration";
+ newitem->Hint = "Copy text to clipboard as B-Greek Transliteration";
+ newitem->Default = false;
+ newitem->OnClick = CopyasBGreekTransliteration1Click;
+ menu->Items->Add(newitem);
+ }
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Dictionary Lookup";
+ newitem->Hint = "Send text to dictionary key for lookup";
+ newitem->Default = false;
+ newitem->OnClick = DictionaryLookup1Click;
+ menu->Items->Add(newitem);
+}
+
+
+void __fastcall TCommentPanel::CreateWnd() {
+ TPanel::CreateWnd();
+
+ TWinControl *newrtf;
+
+ if (mgr->config->Sections[module->Name()]["ModDrv"] == "HREFCom") {
+// if (mainmgr->config->Sections[mod->Name()]["External"] == "1") {
+ newrtf = new TPanel(this);
+ ((TPanel *)newrtf)->Caption = "Syncronizing to External Viewer";
+ display = new DispExternal();
+ module->Disp(display);
+/*
+ }
+ else {
+ // newrtf = new THTML(this->Handle);
+ // newrtf = new SWDispRTF(this);
+ newrtf = HTML1;
+ newrtf->Visible = true;
+ mod->Disp(*displays.insert(displays.begin(), new HREFDisp((THTML *)newrtf)));
+ // mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf)));
+ }
+*/
+ }
+ else {
+ newrtf = new SWDispRTF(this);
+ display = new RTFDisp((SWDispRTF *)newrtf);
+ module->Disp(display);
+ ((SWDispRTF *)newrtf)->ScrollBars = ssVertical;
+ ((SWDispRTF *)newrtf)->ReadOnly = true;
+ if (mgr->config->Sections[module->Name()]["ModDrv"] == "RawFiles") {
+// ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu3;
+ ((SWDispRTF *)newrtf)->ExpandNewLine = false;
+ }
+// else ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu2;
+ ((SWDispRTF *)newrtf)->OnMouseDown = RTFMouseDown;
+ }
+
+ newrtf->Parent = this;
+ newrtf->Align = alClient;
+
+// mod->SetKey(DefaultVSKey);
+// return 0;
+
+
+}
+__fastcall TCommentPanel::~TCommentPanel() {
+ delete display;
+ if (font)
+ delete font;
+}
+//---------------------------------------------------------------------------
+namespace Commentpanel
+{
+ void __fastcall PACKAGE Register()
+ {
+ TComponentClass classes[1] = {__classid(TCommentPanel)};
+ RegisterComponents("Samples", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TCommentPanel::PopupMenuPopup(TObject *Sender)
+{
+}
+void TCommentPanel::BuildRTFHeader(char *buf, char *font, int max)
+{
+ char buf1[1024], buf2[1024];
+ SectionMap::iterator sit;
+
+ sprintf(buf1, "{\\rtf1\\ansi");
+ if (font)
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f2\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f3\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}", font);
+ else sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ strcat(buf1, buf2);
+
+// if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+// sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red%d\\green%d\\blue%d;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}",
+// atoi((*sit).second["CurrentVSColorRed"].c_str()),
+// atoi((*sit).second["CurrentVSColorGreen"].c_str()),
+// atoi((*sit).second["CurrentVSColorBlue"].c_str()));
+// }
+// else
+ sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}");
+ strcat(buf1, buf2);
+ memset(buf, 0, max);
+ strncpy(buf, buf1, max);
+}
+
+
+void __fastcall TCommentPanel::CopyasBGreekTransliteration1Click(TObject *Sender)
+{
+ char *retbuf;
+ int len;
+ TClipboard *clip = new TClipboard();
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ len = rtf->SelText.Length() * 2;
+ retbuf = new char [ len ];
+ if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) {
+ clip->SetTextBuf(retbuf);
+ }
+ delete clip;
+}
+
+void __fastcall TCommentPanel::Copy1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+ rtf->CopyToClipboard();
+}
+void __fastcall TCommentPanel::DictionaryLookup1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+// DictKeyEdit->Text = Trim(rtf->SelText);
+}
+void __fastcall TCommentPanel::RTFMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y)
+{
+ ((TWinControl *)Sender)->SetFocus();
+}
diff --git a/apps/windoze/CBuilder5/prototype/CommentPanel.h b/apps/windoze/CBuilder5/prototype/CommentPanel.h
new file mode 100644
index 0000000..6fa9145
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/CommentPanel.h
@@ -0,0 +1,39 @@
+//---------------------------------------------------------------------------
+#ifndef CommentPanelH
+#define CommentPanelH
+//---------------------------------------------------------------------------
+#include <SysUtils.hpp>
+#include <Controls.hpp>
+#include <Classes.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+class SWDisplay;
+class SWModule;
+class SWMgr;
+
+
+
+//---------------------------------------------------------------------------
+class PACKAGE TCommentPanel : public TPanel
+{
+private:
+protected:
+public:
+ __fastcall TCommentPanel(TComponent* Owner, SWModule *mod = 0, SWMgr *mgr = 0);
+ __fastcall virtual ~TCommentPanel();
+ SWDisplay *display;
+ SWModule *module;
+ SWMgr *mgr;
+ char *font;
+__published:
+ TPopupMenu *menu;
+ virtual void __fastcall CreateWnd();
+ void __fastcall PopupMenuPopup(TObject *Sender);
+ void __fastcall CopyasBGreekTransliteration1Click(TObject *Sender);
+ void __fastcall Copy1Click(TObject *Sender);
+ void __fastcall DictionaryLookup1Click(TObject *Sender);
+ void __fastcall RTFMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void BuildRTFHeader(char *buf, char *font, int max);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/DeskTopNameForm.cpp b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.cpp
new file mode 100644
index 0000000..c3308b4
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.cpp
@@ -0,0 +1,15 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "DeskTopNameForm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TDeskTopNameFrm *DeskTopNameFrm;
+//---------------------------------------------------------------------------
+__fastcall TDeskTopNameFrm::TDeskTopNameFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/DeskTopNameForm.dfm b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.dfm
new file mode 100644
index 0000000..e64f7bd
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/DeskTopNameForm.h b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.h
new file mode 100644
index 0000000..3ef1549
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DeskTopNameForm.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef DeskTopNameFormH
+#define DeskTopNameFormH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ComCtrls.hpp>
+#include <ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TDeskTopNameFrm : public TForm
+{
+__published: // IDE-managed Components
+ TLabel *Label1;
+ TPanel *Panel1;
+ TButton *Button1;
+ TPanel *Panel2;
+ TEdit *desktopName;
+private: // User declarations
+public: // User declarations
+ __fastcall TDeskTopNameFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TDeskTopNameFrm *DeskTopNameFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/DockCanvas.cpp b/apps/windoze/CBuilder5/prototype/DockCanvas.cpp
new file mode 100644
index 0000000..2abf914
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DockCanvas.cpp
@@ -0,0 +1,16 @@
+//---------------------------------------------------------------------------
+
+#include <vcl.h>
+#pragma hdrstop
+
+#include "DockCanvas.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TDockCanvasFrm *DockCanvasFrm;
+//---------------------------------------------------------------------------
+__fastcall TDockCanvasFrm::TDockCanvasFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/DockCanvas.dfm b/apps/windoze/CBuilder5/prototype/DockCanvas.dfm
new file mode 100644
index 0000000..6e80013
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DockCanvas.dfm
@@ -0,0 +1,18 @@
+object DockCanvasFrm: TDockCanvasFrm
+ Left = 208
+ Top = 180
+ Width = 696
+ Height = 480
+ Caption = 'DockCanvasFrm'
+ Color = clBtnFace
+ UseDockManager = True
+ DockSite = True
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ PixelsPerInch = 96
+ TextHeight = 13
+end
diff --git a/apps/windoze/CBuilder5/prototype/DockCanvas.h b/apps/windoze/CBuilder5/prototype/DockCanvas.h
new file mode 100644
index 0000000..c06c03a
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/DockCanvas.h
@@ -0,0 +1,21 @@
+//---------------------------------------------------------------------------
+
+#ifndef DockCanvasH
+#define DockCanvasH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+//---------------------------------------------------------------------------
+class TDockCanvasFrm : public TForm
+{
+__published: // IDE-managed Components
+private: // User declarations
+public: // User declarations
+ __fastcall TDockCanvasFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TDockCanvasFrm *DockCanvasFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/LDPanel.cpp b/apps/windoze/CBuilder5/prototype/LDPanel.cpp
new file mode 100644
index 0000000..b93af95
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/LDPanel.cpp
@@ -0,0 +1,174 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#include <vcl/clipbrd.hpp>
+#pragma hdrstop
+
+#include "LDPanel.h"
+#pragma package(smart_init)
+#include "swdisprtfchap.h"
+#include <swconfig.h>
+#include <swmodule.h>
+#include "Greek2Greek.h"
+#include <utilfuns.h>
+#include <swmgr.h>
+
+class RTFDisp : public SWDisplay {
+ SWDispRTF *edit;
+public:
+ RTFDisp(SWDispRTF *iedit) { edit = iedit; }
+ RTFDisp() {}
+ char Display(SWModule &imodule) {
+ edit->Display(imodule);
+ }
+};
+
+//---------------------------------------------------------------------------
+// ValidCtrCheck is used to assure that the components created do not have
+// any pure virtual functions.
+//
+
+static inline void ValidCtrCheck(TLDPanel *)
+{
+ new TLDPanel(NULL);
+}
+//---------------------------------------------------------------------------
+__fastcall TLDPanel::TLDPanel(TComponent* Owner, SWModule *mod, SWMgr *imgr)
+ : TPanel(Owner)
+{
+ module = mod;
+ mgr = imgr;
+ this->font = 0;
+ stdstr(&(this->font), font);
+ menu = new TPopupMenu(this);
+ menu->OnPopup = PopupMenuPopup;
+
+ TMenuItem * newitem;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "&Copy";
+ newitem->Hint = "Copy text to clipboard";
+ newitem->Default = false;
+ newitem->OnClick = Copy1Click;
+ menu->Items->Add(newitem);
+ if (!strcmp(mod->Name(), "N27U4")) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Copy as &B-Greek Transliteration";
+ newitem->Hint = "Copy text to clipboard as B-Greek Transliteration";
+ newitem->Default = false;
+ newitem->OnClick = CopyasBGreekTransliteration1Click;
+ menu->Items->Add(newitem);
+ }
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Dictionary Lookup";
+ newitem->Hint = "Send text to dictionary key for lookup";
+ newitem->Default = false;
+ newitem->OnClick = DictionaryLookup1Click;
+ menu->Items->Add(newitem);
+}
+
+
+void __fastcall TLDPanel::CreateWnd() {
+ TPanel::CreateWnd();
+
+ SWDispRTF *newrtf = new SWDispRTF(this);
+
+ newrtf->Parent = this;
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+// newrtf->PopupMenu = PopupMenu2;
+// newrtf->OnMouseDown = RTFMouseDown;
+ display = new RTFDisp(newrtf);
+ module->Disp(display);
+// mod->SetKey(DefaultStrKey);
+
+
+}
+__fastcall TLDPanel::~TLDPanel() {
+ delete display;
+ if (font)
+ delete font;
+}
+//---------------------------------------------------------------------------
+namespace Ldpanel
+{
+ void __fastcall PACKAGE Register()
+ {
+ TComponentClass classes[1] = {__classid(TLDPanel)};
+ RegisterComponents("Samples", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TLDPanel::PopupMenuPopup(TObject *Sender)
+{
+}
+void TLDPanel::BuildRTFHeader(char *buf, char *font, int max)
+{
+ char buf1[1024], buf2[1024];
+ SectionMap::iterator sit;
+
+ sprintf(buf1, "{\\rtf1\\ansi");
+ if (font)
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f2\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f3\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}", font);
+ else sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ strcat(buf1, buf2);
+
+// if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+// sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red%d\\green%d\\blue%d;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}",
+// atoi((*sit).second["CurrentVSColorRed"].c_str()),
+// atoi((*sit).second["CurrentVSColorGreen"].c_str()),
+// atoi((*sit).second["CurrentVSColorBlue"].c_str()));
+// }
+// else
+ sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}");
+ strcat(buf1, buf2);
+ memset(buf, 0, max);
+ strncpy(buf, buf1, max);
+}
+
+
+void __fastcall TLDPanel::CopyasBGreekTransliteration1Click(TObject *Sender)
+{
+ char *retbuf;
+ int len;
+ TClipboard *clip = new TClipboard();
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ len = rtf->SelText.Length() * 2;
+ retbuf = new char [ len ];
+ if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) {
+ clip->SetTextBuf(retbuf);
+ }
+ delete clip;
+}
+
+void __fastcall TLDPanel::Copy1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+ rtf->CopyToClipboard();
+}
+void __fastcall TLDPanel::DictionaryLookup1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+// DictKeyEdit->Text = Trim(rtf->SelText);
+}
+void __fastcall TLDPanel::RTFMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y)
+{
+ ((TWinControl *)Sender)->SetFocus();
+}
diff --git a/apps/windoze/CBuilder5/prototype/LDPanel.h b/apps/windoze/CBuilder5/prototype/LDPanel.h
new file mode 100644
index 0000000..80dcdff
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/LDPanel.h
@@ -0,0 +1,39 @@
+//---------------------------------------------------------------------------
+#ifndef LDPanelH
+#define LDPanelH
+//---------------------------------------------------------------------------
+#include <SysUtils.hpp>
+#include <Controls.hpp>
+#include <Classes.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+class SWDisplay;
+class SWModule;
+class SWMgr;
+
+
+
+//---------------------------------------------------------------------------
+class PACKAGE TLDPanel : public TPanel
+{
+private:
+protected:
+public:
+ __fastcall TLDPanel(TComponent* Owner, SWModule *mod = 0, SWMgr *mgr = 0);
+ __fastcall virtual ~TLDPanel();
+ SWDisplay *display;
+ SWModule *module;
+ SWMgr *mgr;
+ char *font;
+__published:
+ TPopupMenu *menu;
+ virtual void __fastcall CreateWnd();
+ void __fastcall PopupMenuPopup(TObject *Sender);
+ void __fastcall CopyasBGreekTransliteration1Click(TObject *Sender);
+ void __fastcall Copy1Click(TObject *Sender);
+ void __fastcall DictionaryLookup1Click(TObject *Sender);
+ void __fastcall RTFMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void BuildRTFHeader(char *buf, char *font, int max);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/ModInstForm.cpp b/apps/windoze/CBuilder5/prototype/ModInstForm.cpp
new file mode 100644
index 0000000..1763817
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/ModInstForm.cpp
@@ -0,0 +1,14 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "ModInstForm.h"
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TModInstFrm *ModInstFrm;
+//---------------------------------------------------------------------------
+__fastcall TModInstFrm::TModInstFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//--------------------------------------------------------------------------- \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/ModInstForm.dfm b/apps/windoze/CBuilder5/prototype/ModInstForm.dfm
new file mode 100644
index 0000000..41ce498
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/ModInstForm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/ModInstForm.h b/apps/windoze/CBuilder5/prototype/ModInstForm.h
new file mode 100644
index 0000000..f0cb90a
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/ModInstForm.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef ModInstFormH
+#define ModInstFormH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ComCtrls.hpp>
+#include <vcl\ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TModInstFrm : public TForm
+{
+__published: // IDE-managed Components
+ TRichEdit *AboutText;
+ TPanel *Panel1;
+ TButton *Button1;
+ TLabel *ModText;
+private: // User declarations
+public: // User declarations
+ __fastcall TModInstFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TModInstFrm *ModInstFrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/ModTabPanel.cpp b/apps/windoze/CBuilder5/prototype/ModTabPanel.cpp
new file mode 100644
index 0000000..0d39acf
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/ModTabPanel.cpp
@@ -0,0 +1,114 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "ModTabPanel.h"
+#pragma package(smart_init)
+#include <swmgr.h>
+#include "TextPanel.h"
+#include "CommentPanel.h"
+#include "LDPanel.h"
+//---------------------------------------------------------------------------
+// ValidCtrCheck is used to assure that the components created do not have
+// any pure virtual functions.
+//
+
+static inline void ValidCtrCheck(TModTabPanel *)
+{
+ new TModTabPanel(NULL);
+}
+//---------------------------------------------------------------------------
+__fastcall TModTabPanel::TModTabPanel(TComponent* Owner, SWMgr *mgr, char *modType)
+ : TPanel(Owner)
+{
+ this->mgr = mgr;
+ this->modType = modType;
+}
+
+void __fastcall TModTabPanel::CreateWnd() {
+ TPanel::CreateWnd();
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ char *font;
+ this->DragMode = dmAutomatic;
+ this->DragKind = dkDock;
+ this->UseDockManager = true;
+ pageControl = new TPageControl(this);
+ pageControl->Parent = this;
+ pageControl->Align = alClient;
+ pageControl->MultiLine = True;
+ pageControl->ParentFont = False;
+ pageControl->ParentShowHint = False;
+ pageControl->ShowHint = True;
+ pageControl->TabHeight = 14;
+ pageControl->TabOrder = 0;
+ pageControl->OnChange = PageControl1Change;
+ for (it = mgr->Modules.begin(); it != mgr->Modules.end(); it++) {
+ if ((!strcmp((*it).second->Type(), "Biblical Texts")) && (!strcmp(modType.c_str(), "Biblical Texts"))) {
+ font = 0;
+ if ((sit = mgr->config->Sections.find((*it).second->Name())) != mgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ font = (char *)(*eit).second.c_str();
+ }
+ }
+ TTabSheet *newtab = new TTabSheet(this);
+ newtab->Caption = (*it).second->Name();
+ newtab->Hint = (*it).second->Description();
+ newtab->PageControl = pageControl;
+ TTextPanel *panel = new TTextPanel(this, (*it).second, font);
+ panel->Parent = newtab;
+ panel->Align = alClient;
+// CreateTextPane((*it).second, font);
+ }
+ if ((!strcmp((*it).second->Type(), "Commentaries")) && (!strcmp(modType.c_str(), "Commentaries"))) {
+ TTabSheet *newtab = new TTabSheet(this);
+ newtab->Caption = (*it).second->Name();
+ newtab->Hint = (*it).second->Description();
+ newtab->PageControl = pageControl;
+ TCommentPanel *panel = new TCommentPanel(this, (*it).second, mgr);
+ panel->Parent = newtab;
+ panel->Align = alClient;
+// CreateCommentPane((*it).second);
+ }
+ if ((!strcmp((*it).second->Type(), "Lexicons / Dictionaries")) && (!strcmp(modType.c_str(), "Lexicons / Dictionaries"))) {
+ TTabSheet *newtab = new TTabSheet(this);
+ newtab->Caption = (*it).second->Name();
+ newtab->Hint = (*it).second->Description();
+ newtab->PageControl = pageControl;
+ TLDPanel *panel = new TLDPanel(this, (*it).second, mgr);
+ panel->Parent = newtab;
+ panel->Align = alClient;
+// CreateLDPane((*it).second);
+ }
+ }
+}
+//---------------------------------------------------------------------------
+namespace Modtabpanel
+{
+ void __fastcall PACKAGE Register()
+ {
+ TComponentClass classes[1] = {__classid(TModTabPanel)};
+ RegisterComponents("Samples", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TModTabPanel::PageControl1Change(TObject *Sender)
+{
+ RefreshActiveSheet();
+// Form1->ActiveControl = PageControl1;
+}
+
+
+void TModTabPanel::RefreshActiveSheet()
+{
+ ModMap::iterator it;
+
+ it = mgr->Modules.find(pageControl->ActivePage->Caption.c_str());
+ if (it != mgr->Modules.end()) {
+ (*it).second->Display();
+// if (logmodstate)
+// modstates.insert(modstates.begin(), new ModState(pc, pc->ActivePage, (*it).second->KeyText()));
+ }
+}
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/ModTabPanel.h b/apps/windoze/CBuilder5/prototype/ModTabPanel.h
new file mode 100644
index 0000000..9da8db2
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/ModTabPanel.h
@@ -0,0 +1,30 @@
+//---------------------------------------------------------------------------
+#ifndef ModTabPanelH
+#define ModTabPanelH
+//---------------------------------------------------------------------------
+#include <SysUtils.hpp>
+#include <Controls.hpp>
+#include <Classes.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include <string>
+
+class SWMgr;
+//---------------------------------------------------------------------------
+class PACKAGE TModTabPanel : public TPanel
+{
+private:
+protected:
+public:
+ SWMgr *mgr;
+ std::string modType;
+ __fastcall TModTabPanel(TComponent* Owner, SWMgr *mgr = 0, char *modtype = 0);
+ void RefreshActiveSheet();
+ virtual void __fastcall CreateWnd();
+
+__published:
+ TPageControl *pageControl;
+ void __fastcall PageControl1Change(TObject *Sender);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/TextPanel.cpp b/apps/windoze/CBuilder5/prototype/TextPanel.cpp
new file mode 100644
index 0000000..a534e12
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/TextPanel.cpp
@@ -0,0 +1,183 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#include <vcl/clipbrd.hpp>
+#pragma hdrstop
+
+#include "TextPanel.h"
+#pragma package(smart_init)
+#include "swdisprtfchap.h"
+#include <swconfig.h>
+#include <swmodule.h>
+#include "Greek2Greek.h"
+#include <utilfuns.h>
+
+class RTFDisp : public SWDisplay {
+ SWDispRTF *edit;
+public:
+ RTFDisp(SWDispRTF *iedit) { edit = iedit; }
+ RTFDisp() {}
+ char Display(SWModule &imodule) {
+ edit->Display(imodule);
+ }
+};
+
+
+//---------------------------------------------------------------------------
+// ValidCtrCheck is used to assure that the components created do not have
+// any pure virtual functions.
+//
+
+static inline void ValidCtrCheck(TTextPanel *)
+{
+ new TTextPanel(NULL);
+}
+//---------------------------------------------------------------------------
+__fastcall TTextPanel::TTextPanel(TComponent* Owner, SWModule *mod, char *font)
+ : TPanel(Owner)
+{
+ module = mod;
+ this->font = 0;
+ stdstr(&(this->font), font);
+ menu = new TPopupMenu(this);
+ menu->OnPopup = PopupMenuPopup;
+
+ TMenuItem * newitem;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "&Copy";
+ newitem->Hint = "Copy text to clipboard";
+ newitem->Default = false;
+ newitem->OnClick = Copy1Click;
+ menu->Items->Add(newitem);
+ if (!strcmp(mod->Name(), "N27U4")) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Copy as &B-Greek Transliteration";
+ newitem->Hint = "Copy text to clipboard as B-Greek Transliteration";
+ newitem->Default = false;
+ newitem->OnClick = CopyasBGreekTransliteration1Click;
+ menu->Items->Add(newitem);
+ }
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Dictionary Lookup";
+ newitem->Hint = "Send text to dictionary key for lookup";
+ newitem->Default = false;
+ newitem->OnClick = DictionaryLookup1Click;
+ menu->Items->Add(newitem);
+}
+
+
+void __fastcall TTextPanel::CreateWnd() {
+ TPanel::CreateWnd();
+ SWDispRTFChap *newrtf = new SWDispRTFChap(this);
+ char buf[512];
+ SectionMap::iterator sit;
+
+// newtab->Caption = mod->Name();
+// newtab->Hint = mod->Description();
+// newtab->PageControl = PageControl1;
+ newrtf->Parent = this;
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+ newrtf->PopupMenu = menu;
+ newrtf->OnMouseDown = RTFMouseDown;
+
+ BuildRTFHeader(buf, font, 512);
+ newrtf->RTFHeader = buf;
+
+// if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+// newrtf->MarkCurrentVerse = (atoi((*sit).second["AutoVSColor"].c_str())) ? true:false;
+// }
+ display = new RTFDisp(newrtf);
+ module->Disp(display);
+// mod->SetKey(DefaultVSKey);
+
+}
+__fastcall TTextPanel::~TTextPanel() {
+ delete display;
+ if (font)
+ delete font;
+}
+//---------------------------------------------------------------------------
+namespace Textpanel
+{
+ void __fastcall PACKAGE Register()
+ {
+ TComponentClass classes[1] = {__classid(TTextPanel)};
+ RegisterComponents("Samples", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TTextPanel::PopupMenuPopup(TObject *Sender)
+{
+}
+void TTextPanel::BuildRTFHeader(char *buf, char *font, int max)
+{
+ char buf1[1024], buf2[1024];
+ SectionMap::iterator sit;
+
+ sprintf(buf1, "{\\rtf1\\ansi");
+ if (font)
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f2\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f3\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}", font);
+ else sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ strcat(buf1, buf2);
+
+// if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+// sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red%d\\green%d\\blue%d;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}",
+// atoi((*sit).second["CurrentVSColorRed"].c_str()),
+// atoi((*sit).second["CurrentVSColorGreen"].c_str()),
+// atoi((*sit).second["CurrentVSColorBlue"].c_str()));
+// }
+// else
+ sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}");
+ strcat(buf1, buf2);
+ memset(buf, 0, max);
+ strncpy(buf, buf1, max);
+}
+
+
+void __fastcall TTextPanel::CopyasBGreekTransliteration1Click(TObject *Sender)
+{
+ char *retbuf;
+ int len;
+ TClipboard *clip = new TClipboard();
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ len = rtf->SelText.Length() * 2;
+ retbuf = new char [ len ];
+ if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) {
+ clip->SetTextBuf(retbuf);
+ }
+ delete clip;
+}
+
+void __fastcall TTextPanel::Copy1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+ rtf->CopyToClipboard();
+}
+void __fastcall TTextPanel::DictionaryLookup1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+// DictKeyEdit->Text = Trim(rtf->SelText);
+}
+void __fastcall TTextPanel::RTFMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y)
+{
+ ((TWinControl *)Sender)->SetFocus();
+}
diff --git a/apps/windoze/CBuilder5/prototype/TextPanel.h b/apps/windoze/CBuilder5/prototype/TextPanel.h
new file mode 100644
index 0000000..6103088
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/TextPanel.h
@@ -0,0 +1,34 @@
+//---------------------------------------------------------------------------
+#ifndef TextPanelH
+#define TextPanelH
+//---------------------------------------------------------------------------
+#include <SysUtils.hpp>
+#include <Controls.hpp>
+#include <Classes.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+class SWDisplay;
+class SWModule;
+//---------------------------------------------------------------------------
+class PACKAGE TTextPanel : public TPanel
+{
+private:
+protected:
+public:
+ __fastcall TTextPanel(TComponent* Owner, SWModule *mod = 0, char *font = 0);
+ __fastcall virtual ~TTextPanel();
+ SWDisplay *display;
+ SWModule *module;
+ char *font;
+__published:
+ TPopupMenu *menu;
+ virtual void __fastcall CreateWnd();
+ void __fastcall PopupMenuPopup(TObject *Sender);
+ void __fastcall CopyasBGreekTransliteration1Click(TObject *Sender);
+ void __fastcall Copy1Click(TObject *Sender);
+ void __fastcall DictionaryLookup1Click(TObject *Sender);
+ void __fastcall RTFMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void BuildRTFHeader(char *buf, char *font, int max);
+};
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/back.bmp b/apps/windoze/CBuilder5/prototype/back.bmp
new file mode 100644
index 0000000..5284295
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/back.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/biblecsmgr.cpp b/apps/windoze/CBuilder5/prototype/biblecsmgr.cpp
new file mode 100644
index 0000000..5532081
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/biblecsmgr.cpp
@@ -0,0 +1,88 @@
+//---------------------------------------------------------------------------
+#include "BibleCSMGR.h"
+#include <swconfig.h>
+#include <gbfrtf.h>
+#include <rwprtf.h>
+#include <rawgbf.h>
+#include <thmlrtf.h>
+//---------------------------------------------------------------------------
+BibleCSMGR::BibleCSMGR(TModInstFrm *iModInstFrm) : SWMgr(0, 0, false)
+{
+ gbftortf = new GBFRTF();
+ rwptortf = new RWPRTF();
+ thmltortf = new ThMLRTF();
+ ModInstFrm = iModInstFrm;
+ Load();
+}
+
+
+BibleCSMGR::~BibleCSMGR()
+{
+ if (gbftortf)
+ delete gbftortf;
+
+ if (rwptortf)
+ delete rwptortf;
+
+ if (thmltortf)
+ delete thmltortf;
+}
+
+
+void BibleCSMGR::AddRenderFilters(SWModule *module, ConfigEntMap &section)
+{
+ string sourceformat;
+ ConfigEntMap::iterator entry;
+
+ sourceformat = ((entry = section.find("SourceType")) != section.end()) ? (*entry).second : (string)"";
+ // Temporary: To support old module types
+// if (sourceformat.empty()) {
+// try {
+// if (dynamic_cast<RawGBF *>(module))
+// sourceformat = "GBF";
+// }
+// catch ( ... ) {}
+// }
+//
+ if (!stricmp(sourceformat.c_str(), "GBF")) {
+ module->AddRenderFilter(gbftortf);
+ }
+
+ if (!stricmp(module->Name(), "RWP"))
+ module->AddRenderFilter(rwptortf);
+
+ if (!stricmp(sourceformat.c_str(), "THML"))
+ module->AddRenderFilter(thmltortf);
+}
+
+
+char BibleCSMGR::AddModToConfig(int conffd, const char *fname)
+{
+ SWConfig modconf(fname);
+ SectionMap::iterator section;
+ AnsiString abouttext = "";
+ bool logflag;
+ TMemoryStream *RTFStream = new TMemoryStream();
+ char retval;
+
+ section = modconf.Sections.begin();
+
+ ModInstFrm->ModText->Caption = "";
+ ModInstFrm->ModText->Caption = ModInstFrm->ModText->Caption + "Found new module [ " + (*(*section).second.find("Description")).second.c_str() + " ]. Installing...";
+
+ abouttext = abouttext + "{\\fs20\\cf0 " + (*(*section).second.find("About")).second.c_str() + " }";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(abouttext.c_str(), abouttext.Length());
+ RTFStream->Position = 0;
+ ModInstFrm->AboutText->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+
+ ModInstFrm->ShowModal();
+
+ logflag = SWLog::systemlog->log;
+ SWLog::systemlog->log = false;
+ retval = SWMgr::AddModToConfig(conffd, fname);
+ SWLog::systemlog->log = logflag;
+
+ return retval;
+}
diff --git a/apps/windoze/CBuilder5/prototype/biblecsmgr.h b/apps/windoze/CBuilder5/prototype/biblecsmgr.h
new file mode 100644
index 0000000..38f8320
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/biblecsmgr.h
@@ -0,0 +1,23 @@
+//---------------------------------------------------------------------------
+#ifndef biblecsmgrH
+#define biblecsmgrH
+#include <swmgr.h>
+#include "ModInstForm.h"
+//---------------------------------------------------------------------------
+class BibleCSMGR : public SWMgr {
+ TModInstFrm *ModInstFrm;
+ SWFilter *gbftortf;
+ SWFilter *rwptortf;
+ SWFilter *thmltortf;
+
+protected:
+ virtual char AddModToConfig(int conffd, const char *fname);
+ virtual void AddRenderFilters(SWModule *module, ConfigEntMap &section);
+
+public:
+ BibleCSMGR(TModInstFrm *iModInstFrm);
+ virtual ~BibleCSMGR();
+};
+
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/bookmark.bmp b/apps/windoze/CBuilder5/prototype/bookmark.bmp
new file mode 100644
index 0000000..4b6df0c
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/bookmark.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/bookmarkfrm.cpp b/apps/windoze/CBuilder5/prototype/bookmarkfrm.cpp
new file mode 100644
index 0000000..e284b85
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/bookmarkfrm.cpp
@@ -0,0 +1,222 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "bookmarkfrm.h"
+#include <swconfig.h>
+#include <dirent.h>
+#include "mainfrm.h"
+#include "newbmfilefrm.h"
+#include <io.h>
+#include <dir.h>
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TBookmarksfrm *Bookmarksfrm;
+//---------------------------------------------------------------------------
+__fastcall TBookmarksfrm::TBookmarksfrm(TComponent* Owner)
+ : TForm(Owner)
+{
+ SWConfig *bookmarks;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ DIR *dir;
+ struct dirent *ent;
+ string conffile;
+ bmdir = "";
+
+ bmtree->Items->Clear();
+
+ if ((sit = Form1->optionsconf->Sections.find("Bookmarks")) != Form1->optionsconf->Sections.end())
+ bmdir = (*sit).second["Directory"];
+
+// Add Personal Bookmarks first, or if they don't exist, ADD A BLANK BRANCH first in the tree
+// --------------------------------------------------------------------------
+
+ if (bmdir == "")
+ bmdir = "./bookmarks/";
+
+ if (access(bmdir.c_str(), 0)) { // directory does not exist
+ _mkdir(bmdir.c_str());
+ }
+
+ conffile = bmdir + "personal.conf";
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) {
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ else bmtree->Items->AddObject(bmtree->Selected, "Personal Bookmarks", *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ delete bookmarks;
+// --------------------------------------------------------------------------
+
+// Add all other bookmark files ---------------------------------------------
+ if (dir = opendir(bmdir.c_str())) {
+ rewinddir(dir);
+ while ((ent = readdir(dir))) {
+ if ((strcmp(ent->d_name, "personal.conf")) && (strcmp(ent->d_name, "."))&& (strcmp(ent->d_name, ".."))) {
+ conffile = bmdir;
+ conffile += ent->d_name;
+ bookmarks = new SWConfig(conffile.c_str());
+ if ((sit = bookmarks->Sections.find("ROOT")) != bookmarks->Sections.end()) {
+ if ((eit = (*sit).second.begin()) != (*sit).second.end()) { // Currently supports only ONE topsection per file because on save, each topsection designates which file to rewrite
+ node = bmtree->Items->AddObject(bmtree->Selected, (*eit).second.c_str(), *bmfiles.insert(bmfiles.begin(), new String(conffile.c_str())));
+ AddSection(bookmarks, bmtree, node, (*eit).first.c_str());
+ }
+ }
+ delete bookmarks;
+ }
+ }
+ closedir(dir);
+ }
+}
+
+
+__fastcall TBookmarksfrm::~TBookmarksfrm()
+{
+ list <String *>::iterator it;
+
+ SaveBookmarks();
+
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++)
+ delete *it;
+}
+
+
+//---------------------------------------------------------------------------
+
+void TBookmarksfrm::AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section)
+{
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ TTreeNode *node;
+
+ if ((sit = config->Sections.find(section.c_str())) != config->Sections.end()) {
+ for (eit = (*sit).second.begin(); eit != (*sit).second.end(); eit++) {
+ node = tree->Items->AddChild(parent, (*eit).second.c_str());
+ AddSection(config, tree, node, (*eit).first.c_str());
+ }
+ }
+}
+
+
+void __fastcall TBookmarksfrm::bmtreeDragDrop(TObject *Sender, TObject *Source,
+ int X, int Y)
+{
+ bmtree->Selected->MoveTo(bmtree->DropTarget, naAddChildFirst);
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookmarksfrm::bmtreeDragOver(TObject *Sender, TObject *Source,
+ int X, int Y, TDragState State, bool &Accept)
+{
+ Accept = false;
+
+ if (String(Source->ClassName()) == "TTreeView") {
+ if (Source == bmtree) {
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ Accept = true;
+ }
+ }
+ else Accept = true;
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookmarksfrm::bmtreeDblClick(TObject *Sender)
+{
+ if (!bmtree->Selected->getFirstChild()) {
+ Form1->DefaultVSKey = bmtree->Selected->Text.c_str();
+ Form1->TextKeyChanged();
+ }
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookmarksfrm::AddChild1Click(TObject *Sender)
+{
+ bmtree->Selected->Expand(false);
+ bmtree->Items->AddChildFirst(bmtree->Selected, "New Topic")->EditText();
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookmarksfrm::Delete1Click(TObject *Sender)
+{
+ if (bmtree->Selected->Data) {
+ if (strcmp((*(String*)(bmtree->Selected->Data)).c_str(),(bmdir + "personal.conf").c_str())) {
+ bmtree->Selected->Delete();
+ }
+ }
+ else bmtree->Selected->Delete();
+}
+//---------------------------------------------------------------------------
+void __fastcall TBookmarksfrm::Rename1Click(TObject *Sender)
+{
+ bmtree->Selected->EditText();
+}
+//---------------------------------------------------------------------------
+
+void TBookmarksfrm::SaveBookmarks()
+{
+ TTreeNode *tree = 0;
+ SWConfig *bmconf;
+ ConfigEntMap emap;
+ SectionMap::iterator sit;
+ char buf[15];
+ bool personal, other;
+ list <String *>::iterator it;
+ string persfile;
+
+ if (bmtree->Items->Count)
+ tree = bmtree->Items->Item[0];
+
+ if ((sit = Form1->optionsconf->Sections.find("Bookmarks")) != Form1->optionsconf->Sections.end()) {
+ personal = (atoi((*sit).second["AutoSavePersonal"].c_str())) ? true:false;
+ other = (atoi((*sit).second["AutoSaveOther"].c_str())) ? true:false;
+ }
+
+ persfile = bmdir + "personal.conf";
+ for (it = bmfiles.begin(); it != bmfiles.end(); it++) { // delete all bookmark files before saving in case a top level was deleted
+ if (((!strcmp((*it)->c_str(), persfile.c_str())) && personal) || ((strcmp((*it)->c_str(), persfile.c_str())) && other))
+ unlink((*it)->c_str());
+ }
+
+ for (;tree;tree = tree->getNextSibling()) {
+ if (((*((String *)tree->Data) == persfile.c_str()) && personal) || ((*((String *)tree->Data) != persfile.c_str()) && other)) {
+ bmconf = new SWConfig(((String *)tree->Data)->c_str());
+ emap = bmconf->Sections["ROOT"];
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ emap[buf] = tree->Text.c_str();
+ AddSectionToConf(bmconf, buf, tree);
+ bmconf->Sections["ROOT"] = emap;
+ bmconf->Save();
+ }
+ }
+}
+
+
+void TBookmarksfrm::AddSectionToConf(SWConfig *config, String section, TTreeNode *tree)
+{
+ ConfigEntMap sit;
+ char buf[15];
+
+ if (tree = tree->getFirstChild()) {
+ sit = config->Sections[section.c_str()];
+ for (; tree; tree = tree->getNextSibling()) {
+ sprintf(buf, "branch%d", tree->AbsoluteIndex);
+ sit[buf] = tree->Text.c_str();
+ AddSectionToConf(config, buf, tree);
+ }
+ config->Sections[section.c_str()] = sit;
+ }
+}
+
+void __fastcall TBookmarksfrm::NewBookmarkFile1Click(TObject *Sender)
+{
+ if (NewBMfrm->ShowModal() == mrOk) {
+ bmtree->Items->AddObject(bmtree->Items->Item[0], NewBMfrm->bmtitle->Text, *bmfiles.insert(bmfiles.begin(), new String(String(bmdir.c_str()) + NewBMfrm->bmfile->Text + String(".conf"))));
+ }
+}
+//--------------------------------------------------------------------------- \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/bookmarkfrm.dfm b/apps/windoze/CBuilder5/prototype/bookmarkfrm.dfm
new file mode 100644
index 0000000..deb814d
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/bookmarkfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/bookmarkfrm.h b/apps/windoze/CBuilder5/prototype/bookmarkfrm.h
new file mode 100644
index 0000000..4c37796
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/bookmarkfrm.h
@@ -0,0 +1,48 @@
+//---------------------------------------------------------------------------
+#ifndef bookmarkfrmH
+#define bookmarkfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ComCtrls.hpp>
+#include <swconfig.h>
+#include <vcl\Menus.hpp>
+#include <list>
+//---------------------------------------------------------------------------
+class TBookmarksfrm : public TForm
+{
+__published: // IDE-managed Components
+ TTreeView *bmtree;
+ TPopupMenu *BMPopup;
+ TMenuItem *Delete1;
+ TMenuItem *AddChild1;
+ TMenuItem *Rename1;
+ TMenuItem *N1;
+ TMenuItem *NewBookmarkFile1;
+ void __fastcall bmtreeDragDrop(TObject *Sender, TObject *Source, int X, int Y);
+ void __fastcall bmtreeDragOver(TObject *Sender, TObject *Source, int X, int Y,
+ TDragState State, bool &Accept);
+ void __fastcall bmtreeDblClick(TObject *Sender);
+ void __fastcall AddChild1Click(TObject *Sender);
+ void __fastcall Delete1Click(TObject *Sender);
+ void __fastcall Rename1Click(TObject *Sender);
+ void __fastcall NewBookmarkFile1Click(TObject *Sender);
+private: // User declarations
+ void AddSection(SWConfig *config, TTreeView *tree, TTreeNode *parent, String section);
+ list <String *> bmfiles; // so we can delete each display we create
+
+
+public: // User declarations
+ string bmdir;
+ __fastcall TBookmarksfrm(TComponent* Owner);
+ __fastcall ~TBookmarksfrm();
+ void SaveBookmarks();
+ void AddSectionToConf(SWConfig *config, String section, TTreeNode *tree);
+};
+//---------------------------------------------------------------------------
+extern TBookmarksfrm *Bookmarksfrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/bookmarks/personal.conf b/apps/windoze/CBuilder5/prototype/bookmarks/personal.conf
new file mode 100644
index 0000000..9608d37
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/bookmarks/personal.conf
@@ -0,0 +1,7 @@
+
+[ROOT]
+branch0=Personal Bookmarks
+
+[branch0]
+branch1=Ezekiel 1:1
+
diff --git a/apps/windoze/CBuilder5/prototype/desktop.bmp b/apps/windoze/CBuilder5/prototype/desktop.bmp
new file mode 100644
index 0000000..5692668
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/desktop.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/desktop2.bmp b/apps/windoze/CBuilder5/prototype/desktop2.bmp
new file mode 100644
index 0000000..fa1bf08
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/desktop2.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/editentryfrm.cpp b/apps/windoze/CBuilder5/prototype/editentryfrm.cpp
new file mode 100644
index 0000000..e9404f8
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/editentryfrm.cpp
@@ -0,0 +1,332 @@
+#include <vcl.h>
+#pragma hdrstop
+#include <windows.hpp>
+#include <stdlib.h>
+#include <stdio.h>
+#include "editentryfrm.h"
+#include <swdisprtf.h>
+
+const float RulerAdj = 4.0/3.0;
+const int GutterWid = 6;
+//----------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TEditEntry *EditEntry;
+//----------------------------------------------------------------------------
+__fastcall TEditEntry::TEditEntry(TComponent *Owner)
+ : TForm(Owner)
+{
+ ResultBuf = 0;
+}
+
+
+__fastcall TEditEntry::~TEditEntry()
+{
+ if (ResultBuf)
+ delete [] ResultBuf;
+}
+
+
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::SelectionChange(TObject */*Sender*/)
+{
+ char sizebuf[6];
+
+ try {
+ FUpdating = True;
+ FirstInd->Left = int(RichEdit1->Paragraph->FirstIndent*RulerAdj)-
+ 4+GutterWid;
+ LeftInd->Left = int((RichEdit1->Paragraph->LeftIndent+
+ RichEdit1->Paragraph->FirstIndent)*RulerAdj)-
+ 4+GutterWid;
+ RightInd->Left = Ruler->ClientWidth-6-int(
+ (RichEdit1->Paragraph->RightIndent+GutterWid)*RulerAdj);
+
+ BoldButton->Down = RichEdit1->SelAttributes->Style.Contains(fsBold);
+ ItalicButton->Down = RichEdit1->SelAttributes->Style.Contains(fsItalic);
+ UnderlineButton->Down = RichEdit1->SelAttributes->Style.Contains(fsUnderline);
+
+ BulletsButton->Down = bool(RichEdit1->Paragraph->Numbering);
+
+ FontSize->Text = itoa(RichEdit1->SelAttributes->Size, sizebuf, 10);
+
+ switch((int)RichEdit1->Paragraph->Alignment)
+ { case 0: LeftAlign->Down = True; break;
+ case 1: RightAlign->Down = True; break;
+ case 2: CenterAlign->Down = True; break;
+ }
+ }
+ catch (...) {
+ FUpdating = False;
+ }
+ FUpdating = False;
+}
+//----------------------------------------------------------------------------
+TTextAttributes *__fastcall TEditEntry::CurrText(void)
+{
+ return RichEdit1->SelAttributes;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::CheckFileSave(void)
+{
+ if ( RichEdit1->Modified ) {
+ switch(MessageBox(Handle, "Save Changes?","Modify Comment",MB_YESNOCANCEL | MB_ICONQUESTION)) {
+ case ID_YES : ExtractRTF(); break;
+ case ID_CANCEL : Abort(); break;
+ default:
+ if (ResultBuf)
+ delete [] ResultBuf;
+ ResultBuf = 0;
+ break;
+ };
+ }
+}
+
+
+void __fastcall TEditEntry::SetupRuler(void)
+{ int iCtr = 1;
+ char sTmp[201];
+ while (iCtr < 200) {
+ sTmp[iCtr] = 9;
+ iCtr++;
+ sTmp[iCtr] = '|';
+ iCtr++;
+ }
+ Ruler->Caption = (AnsiString)sTmp;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::SetEditRect(void)
+{ TRect Rct = Rect(GutterWid, 0, RichEdit1->ClientWidth-GutterWid,
+ ClientHeight);
+ SendMessage(RichEdit1->Handle, EM_SETRECT, 0, long(&Rct));
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FormCreate(TObject* /*Sender*/)
+{ Application->OnHint = &ShowHint;
+ SetupRuler();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::ShowHint(TObject* /*Sender*/)
+{ StatusBar->SimpleText = Application->Hint;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::EditUndoClick(TObject* /*Sender*/)
+{ if ( RichEdit1->HandleAllocated() )
+ SendMessage(RichEdit1->Handle, EM_UNDO, 0, 0);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::EditCutClick(TObject* /*Sender*/)
+{ RichEdit1->CutToClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::EditCopyClick(TObject* /*Sender*/)
+{ RichEdit1->CopyToClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::EditPasteClick(TObject* /*Sender*/)
+{ RichEdit1->PasteFromClipboard();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::RulerResize(TObject* /*Sender*/)
+{ RulerLine->Width = (int)Ruler->ClientWidth - (RulerLine->Left*2);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FormResize(TObject* Sender)
+{ SetEditRect();
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FormPaint(TObject* /*Sender*/)
+{ SetEditRect();
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::BoldButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ { if ( BoldButton->Down )
+ CurrText()->Style = CurrText()->Style << fsBold;
+ else
+ CurrText()->Style = CurrText()->Style >> fsBold;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::ItalicButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ {
+ if ( ItalicButton->Down )
+ CurrText()->Style = CurrText()->Style << fsItalic;
+ else
+ CurrText()->Style = CurrText()->Style >> fsItalic;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::UnderlineButtonClick(TObject* /*Sender*/)
+{
+ if ( !FUpdating ) {
+ if ( UnderlineButton->Down )
+ CurrText()->Style = CurrText()->Style << fsUnderline;
+ else CurrText()->Style = CurrText()->Style >> fsUnderline;
+ }
+}
+
+
+void __fastcall TEditEntry::FontSizeChange(TObject* /*Sender*/)
+{
+ int fontsize = atoi(FontSize->Text.c_str());
+
+ if ((!FUpdating) && (fontsize)) {
+ if (fontsize < 1) {
+ ShowMessage("Please Enter a Number betweek 1 and 1638");
+ FontSize->Text = 1;
+ }
+ else if (fontsize > 1638) {
+ ShowMessage("Please Enter a Number betweek 1 and 1638");
+ FontSize->Text = 1638;
+ }
+ CurrText()->Size = atoi(FontSize->Text.c_str());
+ }
+}
+
+
+void __fastcall TEditEntry::AlignClick(TObject* Sender)
+{
+ if ( !FUpdating ) {
+ TControl *oAliBtn = (TControl*)(Sender);
+ RichEdit1->Paragraph->Alignment = (TAlignment)oAliBtn->Tag;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::BulletsButtonClick(TObject* /*Sender*/)
+{ if ( !FUpdating )
+ RichEdit1->Paragraph->Numbering = (TNumberingStyle)BulletsButton->Down;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FormCloseQuery(TObject* /*Sender*/,
+ bool & CanClose)
+{ try {
+ CheckFileSave();
+ }
+ catch (...) {
+ CanClose = False;
+ }
+}
+//----------------------------------------------------------------------------
+
+//***************************
+//***Ruler Indent Dragging***
+//***************************
+
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::RulerItemMouseDown(TObject * Sender,
+ TMouseButton Button, TShiftState Shift, int X, int Y)
+{ TLabel * oTmpLabel = (TLabel *)Sender;
+ FDragOfs = oTmpLabel->Width / 2;
+ oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
+ FDragging = True;
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::RulerItemMouseMove(TObject *Sender, TShiftState Shift, int X, int /*Y*/) {
+ if (FDragging) {
+ TLabel *oTmpLabel = (TLabel *)Sender;
+ oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
+ oTmpLabel->Left -= oTmpLabel->Left % 10;
+ }
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FirstIndMouseUp(TObject *Sender, TMouseButton
+ Button, TShiftState Shift, int X, int Y)
+{ FDragging = False;
+ RichEdit1->Paragraph->FirstIndent = int((FirstInd->Left+FDragOfs-GutterWid) / RulerAdj);
+ LeftIndMouseUp(Sender, Button, Shift, X, Y);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::LeftIndMouseUp(TObject *Sender, TMouseButton
+ /*Button*/, TShiftState /*Shift*/, int /*X*/, int /*Y*/)
+{ FDragging = False;
+ RichEdit1->Paragraph->LeftIndent = int((LeftInd->Left+FDragOfs-GutterWid)/
+ RulerAdj)-RichEdit1->Paragraph->FirstIndent;
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::RightIndMouseUp(TObject *Sender, TMouseButton
+ /*Button*/, TShiftState /*Shift*/, int /*X*/, int /*Y*/)
+{ FDragging = False;
+ RichEdit1->Paragraph->RightIndent =
+ int((Ruler->ClientWidth-RightInd->Left+FDragOfs-2) /
+ RulerAdj)-2*GutterWid;
+ SelectionChange(Sender);
+}
+//----------------------------------------------------------------------------
+void __fastcall TEditEntry::FormActivate(TObject *Sender)
+{
+ System::AnsiString newtext, tmptext;
+
+ if (Module) {
+ TMemoryStream *RTFStream = new TMemoryStream();
+ newtext = RTFDisplay->RTFHeader;
+ Module->Error(); // clear error;
+ newtext = newtext + "\\pard \\nowidctlpar \\cf0 ";
+ (char *)*Module; // force key to snap to entry before pulling out the text of the key
+ tmptext = (char *)*Module;
+
+ newtext = newtext + RTFDisplay->RTFVersePre + " " + tmptext + RTFDisplay->RTFVersePost;
+ newtext = newtext + RTFDisplay->RTFTrailer;
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+ RTFStream->Position = 0;
+ RichEdit1->Lines->LoadFromStream(RTFStream);
+ delete RTFStream;
+ }
+ SelectionChange(this);
+ RichEdit1->SetFocus();
+ if (ResultBuf)
+ delete [] ResultBuf;
+ ResultBuf = 0;
+}
+//---------------------------------------------------------------------
+
+void TEditEntry::ExtractRTF()
+{
+ System::AnsiString newtext, tmptext;
+ TMemoryStream *RTFStream = new TMemoryStream();
+ char *tmpbuf, *datastart;
+
+ RTFStream->Clear();
+ RichEdit1->Lines->SaveToStream(RTFStream);
+ RTFStream->Position = 0;
+ if (ResultBuf)
+ delete [] ResultBuf;
+ tmpbuf = new char [ RTFStream->Size + 1];
+ RTFStream->ReadBuffer(tmpbuf, RTFStream->Size);
+ tmpbuf[RTFStream->Size] = 0;
+ strtok(strstr(tmpbuf, "colortbl"), "}");
+ datastart = strtok(NULL, "");
+ ResultBuf = new char [ strlen(datastart) + 2 ];
+ ResultBuf[0] = '{';
+ strcpy(ResultBuf+1, datastart);
+ delete [] tmpbuf;
+ delete RTFStream;
+ //-------- Change all fonts to \f1
+ for (int i = 0; i < strlen(ResultBuf)-4; i++) {
+ if (ResultBuf[i] == '\\') {
+ if (ResultBuf[i+1] == '\\') { // skip a real '\' character
+ i += 1;
+ continue;
+ }
+ if (ResultBuf[i+1] == 'f') {
+ if (isdigit(ResultBuf[i+2])) {
+ ResultBuf[i+2] = '1';
+ if (isdigit(ResultBuf[i+3])) {
+ memmove(&ResultBuf[i+3], &ResultBuf[i+4], strlen(&ResultBuf[i+3]));
+ }
+ }
+ }
+ }
+ }
+}
+
+
+__fastcall TCharsetObject::TCharsetObject(int FCharset)
+ : TObject()
+{
+ Charset = FCharset;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/editentryfrm.dfm b/apps/windoze/CBuilder5/prototype/editentryfrm.dfm
new file mode 100644
index 0000000..3b40fc4
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/editentryfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/editentryfrm.h b/apps/windoze/CBuilder5/prototype/editentryfrm.h
new file mode 100644
index 0000000..058c385
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/editentryfrm.h
@@ -0,0 +1,108 @@
+//----------------------------------------------------------------------------
+//Borland C++Builder
+//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved.
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+#ifndef editentryfrmH
+#define editentryfrmH
+//----------------------------------------------------------------------------
+#include <Outline.hpp>
+#include <Grids.hpp>
+#include <Buttons.hpp>
+#include <ExtCtrls.hpp>
+#include <StdCtrls.hpp>
+#include <ComCtrls.hpp>
+#include <Menus.hpp>
+#include <Dialogs.hpp>
+#include <Forms.hpp>
+#include <Controls.hpp>
+#include <Graphics.hpp>
+#include <Classes.hpp>
+#include <SysUtils.hpp>
+#include <Messages.hpp>
+#include <Windows.hpp>
+#include <System.hpp>
+#include <swmodule.h>
+#include <swdisprtf.h>
+//----------------------------------------------------------------------------
+class TEditEntry : public TForm
+{
+__published:
+ TPanel *SpeedBar;
+ TSpeedButton *UndoButton;
+ TSpeedButton *CutButton;
+ TSpeedButton *CopyButton;
+ TSpeedButton *PasteButton;
+ TBevel *Bevel1;
+ TSpeedButton *BoldButton;
+ TSpeedButton *ItalicButton;
+ TSpeedButton *LeftAlign;
+ TSpeedButton *CenterAlign;
+ TSpeedButton *RightAlign;
+ TSpeedButton *UnderlineButton;
+ TSpeedButton *BulletsButton;
+ TEdit *FontSize;
+ TUpDown *UpDown1;
+ TPanel *Ruler;
+ TLabel *FirstInd;
+ TLabel *LeftInd;
+ TBevel *RulerLine;
+ TLabel *RightInd;
+ TStatusBar *StatusBar;
+ TRichEdit *RichEdit1;
+ TLabel *Label1;
+ void __fastcall SelectionChange(TObject *Sender);
+ void __fastcall AlignClick(TObject *Sender);
+ void __fastcall EditUndoClick(TObject *Sender);
+ void __fastcall EditCutClick(TObject *Sender);
+ void __fastcall EditCopyClick(TObject *Sender);
+ void __fastcall EditPasteClick(TObject *Sender);
+ void __fastcall RulerResize(TObject *Sender);
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall FormResize(TObject *Sender);
+ void __fastcall FormPaint(TObject *Sender);
+ void __fastcall BoldButtonClick(TObject *Sender);
+ void __fastcall FontSizeChange(TObject *Sender);
+ void __fastcall UnderlineButtonClick(TObject *Sender);
+ void __fastcall ItalicButtonClick(TObject *Sender);
+ void __fastcall BulletsButtonClick(TObject *Sender);
+ void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
+ void __fastcall RulerItemMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall RulerItemMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
+ void __fastcall FirstIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall LeftIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall RightIndMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall FormActivate(TObject *Sender);
+
+private:
+ AnsiString FFileName;
+ bool FUpdating;
+ int FDragOfs;
+ bool FDragging;
+ TTextAttributes *__fastcall CurrText(void);
+ void __fastcall CheckFileSave(void);
+ void __fastcall SetupRuler(void);
+ void __fastcall SetEditRect(void);
+ void __fastcall ShowHint(TObject *Sender);
+
+public:
+ SWModule *Module;
+ SWDispRTF *RTFDisplay;
+
+ virtual __fastcall TEditEntry(TComponent *Owner);
+ __fastcall ~TEditEntry();
+ char *ResultBuf;
+ void ExtractRTF();
+};
+//----------------------------------------------------------------------------
+class TCharsetObject : public TObject
+{
+public:
+ int Charset;
+ __fastcall TCharsetObject(int FCharset);
+};
+//----------------------------------------------------------------------------
+extern TEditEntry *EditEntry;
+//----------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/mainfrm.cpp b/apps/windoze/CBuilder5/prototype/mainfrm.cpp
new file mode 100644
index 0000000..cfe753e
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/mainfrm.cpp
@@ -0,0 +1,825 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#include <vcl/clipbrd.hpp>
+#pragma hdrstop
+
+#include "mainfrm.h"
+#include "swdisprtfchap.h"
+#include "searchfrm.h"
+#include "swwinlog.h"
+#include "AboutBoxfrm.h"
+#include "ModInstForm.h"
+#include "biblecsmgr.h"
+#include "Greek2Greek.h"
+#include "bookmarkfrm.h"
+#include "optionfrm.h"
+#include "vrslstfrm.h"
+#include <utilstr.h>
+#include <filemgr.h>
+#include "editentryfrm.h"
+#include "versesel.h"
+#include "ModTabPanel.h"
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TForm1 *Form1;
+//---------------------------------------------------------------------------
+
+
+__fastcall TForm1::TForm1(TComponent* Owner)
+ : TForm(Owner)
+{
+ optionsconf = new SWConfig("./options.conf");
+
+ Lookup->Text = "[ SWORD DDE Lookup ]";
+ Search->Text = "[ SWORD DDE Search ]";
+ Application->OnHint = DisplayHint;
+}
+
+void __fastcall TForm1::DisplayHint(TObject* Sender)
+{
+ StatusBar1->SimpleText = Application->Hint;
+}
+
+//---------------------------------------------------------------------------
+__fastcall TForm1::~TForm1()
+{
+ list <SWDisplay *>::iterator it;
+ int loop;
+
+ if (mainmgr)
+ delete mainmgr;
+ for (it = displays.begin(); it != displays.end(); it++)
+ delete *it;
+ if (layoutconf)
+ delete layoutconf;
+
+ if (optionsconf)
+ delete optionsconf;
+
+// for (loop = 0; loop < 10; loop++) {
+// if (ctrlstates[loop]);
+// delete ctrlstates[loop];
+// }
+}
+//---------------------------------------------------------------------------
+void TForm1::BuildRTFHeader(char *buf, char *font, int max)
+{
+ char buf1[1024], buf2[1024];
+ SectionMap::iterator sit;
+
+ sprintf(buf1, "{\\rtf1\\ansi");
+ if (font)
+ sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f2\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f3\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}", font);
+ else sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}");
+ strcat(buf1, buf2);
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+ sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red%d\\green%d\\blue%d;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}",
+ atoi((*sit).second["CurrentVSColorRed"].c_str()),
+ atoi((*sit).second["CurrentVSColorGreen"].c_str()),
+ atoi((*sit).second["CurrentVSColorBlue"].c_str()));
+ }
+ else sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}");
+ strcat(buf1, buf2);
+ memset(buf, 0, max);
+ strncpy(buf, buf1, max);
+}
+
+char TForm1::CreateTextPane(SWModule *mod, char *font) {
+ TTabSheet *newtab = new TTabSheet(this);
+ SWDispRTFChap *newrtf = new SWDispRTFChap(this);
+ TTextPanel *panel = new TTextPanel(this, mod, font);
+ char buf[512];
+ SectionMap::iterator sit;
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+// newtab->PageControl = PageControl1;
+ panel->Parent = newtab;
+/*
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+ newrtf->PopupMenu = (strcmp(mod->Name(), "N27U4")) ? PopupMenu2 : PopupMenu1;
+ newrtf->OnMouseDown = RTFMouseDown;
+
+ BuildRTFHeader(buf, font, 512);
+ newrtf->RTFHeader = buf;
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+ newrtf->MarkCurrentVerse = (atoi((*sit).second["AutoVSColor"].c_str())) ? true:false;
+ }
+
+ mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf)));
+ mod->SetKey(DefaultVSKey);
+*/
+ return 0;
+}
+//---------------------------------------------------------------------------
+char TForm1::CreateCommentPane(SWModule *mod) {
+ TTabSheet *newtab = new TTabSheet(this);
+ TWinControl *newrtf;
+
+ if (mainmgr->config->Sections[mod->Name()]["ModDrv"] == "HREFCom") {
+// if (mainmgr->config->Sections[mod->Name()]["External"] == "1") {
+ newrtf = new TPanel(this);
+ ((TPanel *)newrtf)->Caption = "Syncronizing to External Viewer";
+ mod->Disp(*displays.insert(displays.begin(), new DispExternal()));
+/*
+ }
+ else {
+ // newrtf = new THTML(this->Handle);
+ // newrtf = new SWDispRTF(this);
+ newrtf = HTML1;
+ newrtf->Visible = true;
+ mod->Disp(*displays.insert(displays.begin(), new HREFDisp((THTML *)newrtf)));
+ // mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf)));
+ }
+*/
+ }
+ else {
+ newrtf = new SWDispRTF(this);
+ mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf)));
+ ((SWDispRTF *)newrtf)->ScrollBars = ssVertical;
+ ((SWDispRTF *)newrtf)->ReadOnly = true;
+ if (mainmgr->config->Sections[mod->Name()]["ModDrv"] == "RawFiles") {
+ ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu3;
+ ((SWDispRTF *)newrtf)->ExpandNewLine = false;
+ }
+ else ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu2;
+ ((SWDispRTF *)newrtf)->OnMouseDown = RTFMouseDown;
+ }
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->PageControl = PageControl2;
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+
+ mod->SetKey(DefaultVSKey);
+ return 0;
+}
+//---------------------------------------------------------------------------
+char TForm1::CreateLDPane(SWModule *mod) {
+ TTabSheet *newtab = new TTabSheet(this);
+ SWDispRTF *newrtf = new SWDispRTF(this);
+
+ newtab->Caption = mod->Name();
+ newtab->Hint = mod->Description();
+ newtab->PageControl = PageControl3;
+ newrtf->Parent = newtab;
+ newrtf->Align = alClient;
+ newrtf->ScrollBars = ssVertical;
+ newrtf->ReadOnly = true;
+ newrtf->PopupMenu = PopupMenu2;
+ newrtf->OnMouseDown = RTFMouseDown;
+
+ mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf)));
+ mod->SetKey(DefaultStrKey);
+ return 0;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::PageControl1Change(TObject *Sender)
+{
+// RefreshActiveSheet(PageControl1);
+// Form1->ActiveControl = PageControl1;
+}
+//---------------------------------------------------------------------------
+void TForm1::RefreshActiveSheet(TPageControl *pc)
+{
+ ModMap::iterator it;
+
+ it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ (*it).second->Display();
+ if (logmodstate)
+ modstates.insert(modstates.begin(), new ModState(pc, pc->ActivePage, (*it).second->KeyText()));
+ }
+}
+
+
+void TForm1::TextKeyChanged()
+{
+ cbBook->ItemIndex = cbBook->Items->IndexOf(DefaultVSKey.books[DefaultVSKey.Testament()-1][DefaultVSKey.Book()-1].name);
+ CHBox->Text = DefaultVSKey.Chapter();
+ VSBox->Text = DefaultVSKey.Verse();
+ freeHandLookup->Text = (const char *)DefaultVSKey;
+ textTabs->RefreshActiveSheet();
+ logmodstate = false; // only log state once
+ RefreshActiveSheet(PageControl2);
+ logmodstate = true;
+}
+
+
+void __fastcall TForm1::btnLookupClick(TObject *Sender)
+{
+ if (!(StrToInt(CHBox->Text)) || (!StrToInt(VSBox->Text)))
+ DefaultVSKey.AutoNormalize(0);
+
+ if (StrToInt(CHBox->Text) < 0)
+ CHBox->Text = StrToInt(CHBox->Text) + 1;
+ if (StrToInt(VSBox->Text) < 0)
+ VSBox->Text = StrToInt(VSBox->Text) + 1;
+
+ DefaultVSKey = (cbBook->Text + " " + CHBox->Text + ":" + VSBox->Text).c_str();
+ TextKeyChanged();
+ DefaultVSKey.AutoNormalize(1);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::PageControl2Change(TObject *Sender)
+{
+ RefreshActiveSheet(PageControl2);
+ Form1->ActiveControl = PageControl2;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::DictKeyEditChange(TObject *Sender)
+{
+ if (DictKeyEdit->Modified) {
+ DefaultStrKey = DictKeyEdit->Text.c_str();
+ RefreshActiveSheet(PageControl3);
+ DictKeyEdit->Modified = false;
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::PageControl3Change(TObject *Sender)
+{
+ RefreshActiveSheet(PageControl3);
+ Form1->ActiveControl = PageControl3;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::NewSearchWindow1Click(TObject *Sender)
+{
+ Form2->Show();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Exit1Click(TObject *Sender)
+{
+ Close();
+}
+
+void __fastcall TForm1::About1Click(TObject *Sender)
+{
+ AboutBox->ShowModal();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+ DictKeyEdit->Text = Trim(rtf->SelText);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::SaveLayout1Click(TObject *Sender)
+{
+ ConfigEntMap sit;
+
+ sit = layoutconf->Sections["Screen"];
+ sit["MainTop"] = IntToStr(Form1->Top).c_str();
+ sit["MainLeft"] = IntToStr(Form1->Left).c_str();
+ sit["MainHeight"] = IntToStr(Form1->Height).c_str();
+ sit["MainWidth"] = IntToStr(Form1->Width).c_str();
+ sit["TextComHeight"] = IntToStr(pnlTextCom->Height).c_str();
+ sit["TextWidth"] = IntToStr(pnlText->Width).c_str();
+ layoutconf->Sections["Screen"] = sit;
+ layoutconf->Save();
+}
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormCreate(TObject *Sender)
+{
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap::iterator eit;
+ AnsiString s1;
+ char *font;
+ int val;
+ int loop;
+ int maxFiles;
+
+ mainmgr = new BibleCSMGR(ModInstFrm);
+// textTabs = new TModTabPanel(this, mainmgr, "Biblical Texts");
+// textTabs->Align = alClient;
+// textTabs->Parent = pnlText;
+// logmodstate = true;
+// freshdict = true;
+// if ((maxFiles = atoi(optionsconf->Sections["System"]["MaxFiles"].c_str()))) {
+// FileMgr::systemFileMgr.maxFiles = maxFiles;
+// }
+
+// DefaultVSKey = TOP;
+// DefaultVSKey = "Genesis 1:1";
+// cbBook->Clear();
+/*
+ while (!DefaultVSKey.Error()) {
+ s1 = (const char *)DefaultVSKey;
+ s1.SetLength(s1.Length() - 4);
+ cbBook->Items->Add(s1);
+ DefaultVSKey.Book(DefaultVSKey.Book() + 1);
+ }
+ cbBook->ItemIndex = cbBook->Items->IndexOf("James");
+
+ DefaultVSKey.Persist(1); // when set to a module, make the module hold on to this actual key and not a copy
+ DefaultVSKey = "James 1:19"; // set to our standard starting verse
+ DefaultStrKey.Persist(1);
+ DefaultStrKey = "";
+ Hint = "";
+ ShowHint = true;
+ Application->ShowHint = true;
+ if (SWLog::systemlog)
+ delete SWLog::systemlog;
+ SWLog::systemlog = new SWWinLog(this->Handle); // set the system logger to our MSWindows specific SWLog class
+ layoutconf = new SWConfig("./layout.conf");
+
+ if ((sit = layoutconf->Sections.find("Screen")) != layoutconf->Sections.end()) {
+ if (val = atoi((*sit).second["MainTop"].c_str()))
+ Form1->Top = val;
+ if (val = atoi((*sit).second["MainLeft"].c_str()))
+ Form1->Left = val;
+ if (val = atoi((*sit).second["MainHeight"].c_str()))
+ Form1->Height = val;
+ if (val = atoi((*sit).second["MainWidth"].c_str()))
+ Form1->Width = val;
+ if (val = atoi((*sit).second["TextComHeight"].c_str()))
+ pnlTextCom->Height = val;
+ if (val = atoi((*sit).second["TextWidth"].c_str()))
+ pnlText->Width = val;
+ }
+
+ for (loop = 0; loop < 10; loop++)
+ ctrlstates.insert(ctrlstates.begin(), 0);
+
+ ImageList1->Add(BackBtnImage->Picture->Bitmap, NULL);
+ ImageList1->Add(SearchBtnImage->Picture->Bitmap, NULL);
+ ImageList2->Add(BookmarkBtnImage->Picture->Bitmap, NULL);
+*/
+}
+
+
+//void __fastcall TForm1::CreateWnd() {
+// TForm::CreateWnd();
+
+/*
+ for (it = mainmgr->Modules.begin(); it != mainmgr->Modules.end(); it++) {
+ if (!strcmp((*it).second->Type(), "Biblical Texts")) {
+ font = 0;
+ if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) {
+ if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) {
+ font = (char *)(*eit).second.c_str();
+ }
+ }
+ CreateTextPane((*it).second, font);
+ }
+ if (!strcmp((*it).second->Type(), "Commentaries"))
+ CreateCommentPane((*it).second);
+ if (!strcmp((*it).second->Type(), "Lexicons / Dictionaries"))
+ CreateLDPane((*it).second);
+ }
+*/
+//}
+
+//---------------------------------------------------------------------------
+void __fastcall TForm1::LookupPokeData(TObject *Sender)
+{
+ char buf[255];
+ char *token;
+ ModMap::iterator it;
+
+ strncpy(buf, Lookup->Text.c_str(), 254);
+ buf[254] = 0;
+ token = strtok(buf, " ");
+ if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) {
+ token = strtok(NULL, "");
+ (*it).second->SetKey(token);
+ Lookup->Text = (const char *)(*(*it).second);
+ }
+ else Lookup->Text = "";
+
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::SearchPokeData(TObject *Sender)
+{
+ char buf[255];
+ char *token;
+ ModMap::iterator it;
+ AnsiString retval = "";
+
+ strncpy(buf, Search->Text.c_str(), 254);
+ buf[254] = 0;
+ token = strtok(buf, " ");
+ if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) {
+ token = strtok(NULL, "");
+ ListKey &results = (*it).second->Search(token, REG_ICASE);
+ while (!results.Error()) {
+ retval = retval + (const char *)results + "; ";
+ results++;
+ }
+ Search->Text = retval;
+ }
+ else Search->Text = "";
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
+{
+ ModMap::iterator it;
+
+ it = mainmgr->Modules.find(PageControl3->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ if (Button == btNext)
+ (*((*it).second))++;
+ else (*((*it).second))--;
+ DictKeyEdit->Text = ((*it).second)->KeyText();
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
+{
+ btnLookupClick(Sender);
+}
+//---------------------------------------------------------------------------
+
+void TForm1::RestoreState(ModState *state)
+{
+ if (state) {
+ state->pc->ActivePage = state->ap;
+// if ((state->pc == PageControl1) || (state->pc == PageControl2)) {
+// DefaultVSKey = state->key;
+// TextKeyChanged();
+// }
+ if (state->pc == PageControl3) {
+ DictKeyEdit->Text = (const char *)state->key;
+ }
+ if (state->pc->ActivePage->ControlCount)
+ Form1->ActiveControl = (TWinControl *)state->pc->ActivePage->Controls[0];
+ }
+}
+
+
+void __fastcall TForm1::BackbtnClick(TObject *Sender)
+{
+ list <ModState *>::iterator it;
+
+ logmodstate = false;
+ it = modstates.begin();
+ if (it != modstates.end()) {
+ it++;
+
+ if (it != modstates.end()) {
+ RestoreState(*it);
+ delete *modstates.begin();
+ modstates.erase(modstates.begin(), it);
+ }
+ }
+ logmodstate = true;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Button1Click(TObject *Sender)
+{
+/*
+ list <ModState *>::iterator it;
+ ListBox1->Clear();
+ for (it = modstates.begin(); it != modstates.end(); it++) {
+ ListBox1->Items->Add((*it)->ap->Caption.c_str());
+ }
+*/
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::CopyasBGreekTransliteration1Click(TObject *Sender)
+{
+ char *retbuf;
+ int len;
+ TClipboard *clip = new TClipboard();
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ len = rtf->SelText.Length() * 2;
+ retbuf = new char [ len ];
+ if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) {
+ clip->SetTextBuf(retbuf);
+ }
+ delete clip;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Copy1Click(TObject *Sender)
+{
+ int wordstart;
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--);
+ rtf->SelStart = (wordstart > -1) ? wordstart: 0;
+ for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++);
+ rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1;
+ }
+ rtf->CopyToClipboard();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BookmarkItemClick(TObject *Sender)
+{
+ TMenuItem *menuchoice = (TMenuItem *)Sender;
+ DefaultVSKey = menuchoice->Caption.c_str();
+ TextKeyChanged();
+}
+
+void __fastcall TForm1::AddBookmark1Click(TObject *Sender)
+{
+// TMenuItem *newitem;
+
+ Bookmarksfrm->bmtree->Items->AddChild(Bookmarksfrm->bmtree->Items->Item[0], (const char *)DefaultVSKey);
+}
+
+void TForm1::AddSectionToMenu(TMenu *menu, TMenuItem *item, TTreeNode *tree)
+{
+ TMenuItem *newitem;
+
+ for (tree = tree->getFirstChild(); tree; tree = tree->getNextSibling()) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = tree->Text;
+ if (!tree->getFirstChild())
+ newitem->OnClick = BookmarkItemClick;
+ item->Add(newitem);
+ AddSectionToMenu(menu, newitem, tree);
+ }
+}
+
+void TForm1::RefreshBookmarksMenu(TMenu *menu, TTreeView *treeview)
+{
+ TMenuItem *newitem;
+ TTreeNode *tree = 0;
+
+ if (treeview->Items->Count)
+ tree = treeview->Items->Item[0];
+
+ while (menu->Items->Count > 3)
+ menu->Items->Delete(3);
+
+ for (;tree;tree = tree->getNextSibling()) {
+ newitem = new TMenuItem(menu);
+ newitem->Caption = tree->Text;
+ menu->Items->Add(newitem);
+ AddSectionToMenu(menu, newitem, tree);
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::BookmarkbtnClick(TObject *Sender)
+{
+ TPoint menup;
+ TPoint point;
+ point.x = 0;
+ point.y = Bookmarkbtn->Height;
+ menup = Bookmarkbtn->ClientToScreen(point);
+ RefreshBookmarksMenu(BookmarkPopup, Bookmarksfrm->bmtree);
+ BookmarkPopup->Popup(menup.x, menup.y);
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::EditBookmarks1Click(TObject *Sender)
+{
+ Bookmarksfrm->Show();
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
+ TShiftState Shift)
+{
+ char buf[5];
+ int val;
+ ModMap::iterator it;
+ TPageControl *pc = textTabs->pageControl;
+
+ if ((Shift.Contains(ssCtrl)) && (!Shift.Contains(ssAlt))) {
+ if ((Key >= '0') && (Key <= '9')) {
+ sprintf(buf, "%c", Key);
+ val = atoi(buf);
+
+ if (!Shift.Contains(ssShift)) {
+ if ((Screen->ActiveControl == PageControl2) || (IsChild(PageControl2->Handle, Screen->ActiveControl->Handle)))
+ pc = PageControl2;
+ if ((Screen->ActiveControl == PageControl3) || (IsChild(PageControl3->Handle, Screen->ActiveControl->Handle)))
+ pc = PageControl3;
+
+ it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str());
+ if (it != mainmgr->Modules.end()) {
+ if (ctrlstates[val])
+ delete ctrlstates[val];
+
+ ctrlstates[val] = new ModState(pc, pc->ActivePage, (*it).second->KeyText());
+ }
+ }
+ else RestoreState(ctrlstates[val]);
+ }
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::Options1Click(TObject *Sender)
+{
+ ModMap::iterator it;
+ SectionMap::iterator sit;
+ ConfigEntMap emap;
+ int color;
+
+ if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) {
+ Optionsfrm->CurrentVSColor->Brush->Color = atoi((*sit).second["CurrentVSColorRed"].c_str())
+ | (atoi((*sit).second["CurrentVSColorGreen"].c_str()) << 8)
+ | (atoi((*sit).second["CurrentVSColorBlue"].c_str()) << 16);
+ Optionsfrm->AutoVSColor->Checked = ((atoi((*sit).second["AutoVSColor"].c_str()))?true:false);
+ }
+
+ if ((sit = optionsconf->Sections.find("Bookmarks")) != optionsconf->Sections.end()) {
+ Optionsfrm->AutoBMPersonal->Checked = ((atoi((*sit).second["AutoSavePersonal"].c_str()))?true:false);
+ Optionsfrm->AutoBMOther->Checked = ((atoi((*sit).second["AutoSaveOther"].c_str()))?true:false);
+ }
+
+ if (Optionsfrm->ShowModal() == mrOk) {
+ emap = optionsconf->Sections["Appearance"];
+ color = Optionsfrm->CurrentVSColor->Brush->Color;
+ emap["CurrentVSColorRed"] = IntToStr(color & 0xFF).c_str();
+ emap["CurrentVSColorGreen"] = IntToStr((color >> 8) & 0xFF).c_str();
+ emap["CurrentVSColorBlue"] = IntToStr((color >> 16) & 0xFF).c_str();
+ emap["AutoVSColor"] = IntToStr((Optionsfrm->AutoVSColor->Checked)?1:0).c_str();
+ optionsconf->Sections["Appearance"] = emap;
+
+ emap = optionsconf->Sections["Bookmarks"];
+ emap["AutoSavePersonal"] = IntToStr((Optionsfrm->AutoBMPersonal->Checked)?1:0).c_str();
+ emap["AutoSaveOther"] = IntToStr((Optionsfrm->AutoBMOther->Checked)?1:0).c_str();
+ optionsconf->Sections["Bookmarks"] = emap;
+
+ optionsconf->Save();
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::cbBookChange(TObject *Sender)
+{
+ CHBox->Text = "1";
+ VSBox->Text = "1";
+ if (Screen->ActiveControl == cbBook)
+ btnLookupClick(Sender);
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm1::PopupMenuPopup(TObject *Sender)
+{
+
+ int versestart, verseend;
+ TMenuItem * newitem;
+ TPopupMenu *menu = (TPopupMenu *)Sender;
+ int staticMenuItemsCount = 0;
+
+ if (menu == PopupMenu1)
+ staticMenuItemsCount = 3;
+ else if (menu == PopupMenu2)
+ staticMenuItemsCount = 2;
+ else if (menu == PopupMenu3)
+ staticMenuItemsCount = 6;
+
+ while (menu->Items->Count > staticMenuItemsCount)
+ menu->Items->Delete(staticMenuItemsCount);
+
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ if (!rtf->SelLength) {
+ for (versestart = rtf->SelStart; ((versestart)&&(rtf->Text[versestart] != '#')); versestart--);
+ if (versestart) {
+ for (verseend = versestart; ((verseend < rtf->Text.Length())&&(rtf->Text[verseend] != '|')); verseend++);
+ if ((verseend < rtf->Text.Length()) && (verseend > rtf->SelStart)) {
+ int len = (verseend - versestart) + 1;
+ char *buf = new char [ len + 1 ];
+ memset(buf, 0 , len + 1);
+ strncpy(buf, &rtf->Text.c_str()[versestart], len - 2); // strip the # and | from the string
+ tmpVerseList = DefaultVSKey.ParseVerseList(buf, DefaultVSKey);
+
+ ModMap::iterator target;
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ char *keytext = 0; // check for and remove return at end of keytext
+ stdstr(&keytext, (*(*target).second).KeyText());
+ if (keytext[strlen(keytext)-1] == '\r')
+ keytext[strlen(keytext)-1] = 0;
+
+ tmpVerseListCaption = String("VerseList from- ") + (*target).first.c_str() + ": " + keytext;
+ delete [] keytext; // ---------------------------------
+ }
+ delete [] buf;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "-";
+ menu->Items->Add(newitem);
+ newitem = new TMenuItem(menu);
+ newitem->Caption = "Create Verse List";
+ newitem->Hint = "Create a New Verse List Window";
+ newitem->Default = true;
+ newitem->OnClick = createVerseList;
+ menu->Items->Add(newitem);
+ versestart = 3;
+ while (!tmpVerseList.Error()) {
+ versestart++;
+ newitem = new TMenuItem(menu);
+ newitem->Caption = (const char *)tmpVerseList;
+ newitem->OnClick = BookmarkItemClick;
+ if (!(versestart%15))
+ newitem->Break = mbBreak;
+ menu->Items->Add(newitem);
+ tmpVerseList++;
+ }
+ }
+ }
+ }
+
+}
+//---------------------------------------------------------------------------
+
+
+void __fastcall TForm1::createVerseList(TObject *Sender)
+{
+ TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList);
+ tmpForm->Caption = tmpVerseListCaption;
+ tmpForm->Show();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::freeHandLookupKeyPress(TObject *Sender, char &Key)
+{
+ if (Key == '\r') {
+ ListKey tmpVerseList = DefaultVSKey.ParseVerseList(freeHandLookup->Text.c_str(), DefaultVSKey);
+ if (tmpVerseList.Count() > 1) {
+ TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList);
+ tmpForm->Caption = "User Verse List";
+ tmpForm->Show();
+ }
+ if (tmpVerseList.Count()) {
+ tmpVerseList = TOP;
+ DefaultVSKey = tmpVerseList;
+ TextKeyChanged();
+ }
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::RTFMouseDown(TObject *Sender, TMouseButton Button,
+ TShiftState Shift, int X, int Y)
+{
+ ((TWinControl *)Sender)->SetFocus();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::EditEntry1Click(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module = 0;
+// EditEntry->RichEdit1->Text = rtf->Text;
+ ModMap::iterator target;
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ EditEntry->Module = module = (*target).second;
+ EditEntry->RTFDisplay = rtf;
+ }
+ else EditEntry->Module = module = 0;
+ EditEntry->ShowModal();
+ if (EditEntry->ResultBuf) {
+ if (module)
+// DictKeyEdit->Text = EditEntry->ResultBuf; // for testing purposes
+ *module << EditEntry->ResultBuf;
+ }
+ RefreshActiveSheet(PageControl2);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::DeleteEntry1Click(TObject *Sender)
+{
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module = 0;
+ ModMap::iterator target;
+
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ module = (*target).second;
+ module->deleteEntry();
+ }
+ RefreshActiveSheet(PageControl2);
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TForm1::LinktoVerse1Click(TObject *Sender)
+{
+ if (VerseSelFrm->ShowModal() == mrOk) {
+ SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
+ SWModule *module = 0;
+ ModMap::iterator target;
+ SWKey *linkkey = new VerseKey(VerseSelFrm->Panel2->Caption.c_str());
+
+ target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ module = (*target).second;
+ *module << linkkey;
+ }
+ RefreshActiveSheet(PageControl2);
+ }
+}
+//---------------------------------------------------------------------------
+
+
+
diff --git a/apps/windoze/CBuilder5/prototype/mainfrm.dfm b/apps/windoze/CBuilder5/prototype/mainfrm.dfm
new file mode 100644
index 0000000..514d39f
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/mainfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/mainfrm.h b/apps/windoze/CBuilder5/prototype/mainfrm.h
new file mode 100644
index 0000000..c24ca52
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/mainfrm.h
@@ -0,0 +1,238 @@
+//---------------------------------------------------------------------------
+#ifndef mainfrmH
+#define mainfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\ComCtrls.hpp>
+#include <swmgr.h>
+#include <swtext.h>
+#include <strkey.h>
+#include <regex.h>
+#include <listkey.h>
+#include "swdisprtfchap.h"
+#include <vcl\Buttons.hpp>
+#include <vcl\Menus.hpp>
+#include <vcl\DdeMan.hpp>
+//#include <NMHTML.hpp>
+#include <OleCtrls.hpp>
+#include <ToolWin.hpp>
+//#include <vcl\isp.hpp>
+#include <shellapi.h>
+#include <Graphics.hpp>
+#include <ImgList.hpp>
+#include <list>
+#include <vector>
+#include "TextPanel.h"
+#include "ModTabPanel.h"
+
+class RTFDisp : public SWDisplay {
+ SWDispRTF *edit;
+public:
+ RTFDisp(SWDispRTF *iedit) { edit = iedit; }
+ RTFDisp() {}
+ char Display(SWModule &imodule) {
+ edit->Display(imodule);
+ }
+};
+
+/*
+class HREFDisp : public SWDisplay {
+ THTML *edit;
+public:
+ HREFDisp(THTML *iedit) { edit = iedit; }
+ HREFDisp() {}
+ char Display(SWModule &imodule) {
+ edit->RequestDoc((char *)imodule);
+ }
+};
+*/
+
+class DispExternal : public SWDisplay {
+public:
+ DispExternal() {}
+ char Display(SWModule &imodule) {
+ SHELLEXECUTEINFO info;
+ info.cbSize = sizeof(SHELLEXECUTEINFO);
+ info.fMask = SEE_MASK_NOCLOSEPROCESS; //SEE_MASK_CLASSNAME;
+ info.hwnd = GetFocus();
+ info.lpVerb = "open";
+ info.lpFile = (char *)imodule;
+ info.lpParameters = NULL;
+ info.lpDirectory = NULL;
+ info.nShow = 0;
+// info.lpClass = ".html";
+ ShellExecuteEx(&info);
+// ShellExecute(edit->Handle, "open", (char *)imodule, NULL, NULL, SW_SHOWNORMAL);
+ }
+};
+
+
+class ModState {
+public:
+ ModState(TPageControl *ipc, TTabSheet *iap, SWKey ikey) { pc = ipc; ap = iap; key = ikey; }
+ ModState();
+ TPageControl *pc;
+ TTabSheet* ap;
+ SWKey key;
+};
+
+//---------------------------------------------------------------------------
+class TForm1 : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *pnlTextCom;
+ TSplitter *Splitter2;
+ TPanel *pnlText;
+ TPanel *pnlComment;
+ TSplitter *Splitter1;
+ TPanel *pnlDict;
+ TPageControl *PageControl2;
+ TStatusBar *StatusBar1;
+ TPageControl *PageControl3;
+
+ TPanel *pnlDictHeader;
+ TLabel *Label1;
+ TRichEdit *DictKeyEdit;
+ TMainMenu *MainMenu1;
+ TMenuItem *Search1;
+ TMenuItem *NewSearchWindow1;
+ TMenuItem *Help1;
+ TMenuItem *About1;
+ TPopupMenu *PopupMenu2;
+ TMenuItem *DictionaryLookup1;
+ TMenuItem *File1;
+ TMenuItem *SaveLayout1;
+ TMenuItem *Exit1;
+ TMenuItem *N1;
+ TDdeServerItem *Search;
+ TDdeServerItem *Lookup;
+ TDdeServerConv *Bible;
+ TPopupMenu *PopupMenu1;
+ TMenuItem *MenuItem1;
+ TMenuItem *Copy1;
+ TMenuItem *CopyasBGreekTransliteration1;
+ TMenuItem *Copy2;
+ TMenuItem *Edit1;
+ TMenuItem *Copy3;
+ TPopupMenu *BookmarkPopup;
+ TMenuItem *AddBookmark1;
+ TMenuItem *N2;
+ TMenuItem *EditBookmarks1;
+ TMenuItem *Options1;
+ TCoolBar *CoolBar1;
+ TImageList *ImageList1;
+ TImage *BackBtnImage;
+ TImage *SearchBtnImage;
+ TToolBar *ToolBar2;
+ TToolButton *ToolButton3;
+ TToolButton *ToolButton4;
+ TPanel *pnlSpeed;
+ TPanel *Panel1;
+ TComboBox *cbBook;
+ TEdit *CHBox;
+ TUpDown *UpDown1;
+ TEdit *VSBox;
+ TUpDown *UpDown2;
+ TSpeedButton *btnLookup;
+ TToolBar *ToolBar1;
+ TImageList *ImageList2;
+ TImage *BookmarkBtnImage;
+ TSpeedButton *Bookmarkbtn;
+ TPopupMenu *PopupMenu3;
+ TMenuItem *MenuItem2;
+ TMenuItem *MenuItem3;
+ TMenuItem *N3;
+ TMenuItem *EditEntry1;
+ TMenuItem *DeleteEntry1;
+ TMenuItem *LinktoVerse1;
+ TUpDown *UpDown3;
+ TComboBox *freeHandLookup;
+ void __fastcall PageControl1Change(TObject *Sender);
+ void __fastcall btnLookupClick(TObject *Sender);
+ void __fastcall PageControl2Change(TObject *Sender);
+
+
+
+ void __fastcall DictKeyEditChange(TObject *Sender);
+ void __fastcall PageControl3Change(TObject *Sender);
+ void __fastcall NewSearchWindow1Click(TObject *Sender);
+
+ void __fastcall Exit1Click(TObject *Sender);
+ void __fastcall About1Click(TObject *Sender);
+ void __fastcall DictionaryLookup1Click(TObject *Sender);
+ void __fastcall SaveLayout1Click(TObject *Sender);
+
+ void __fastcall LookupPokeData(TObject *Sender);
+
+ void __fastcall SearchPokeData(TObject *Sender);
+ void __fastcall UpDown3Click(TObject *Sender, TUDBtnType Button);
+ void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
+
+
+ void __fastcall BackbtnClick(TObject *Sender);
+ void __fastcall Button1Click(TObject *Sender);
+ void __fastcall CopyasBGreekTransliteration1Click(TObject *Sender);
+ void __fastcall Copy1Click(TObject *Sender);
+
+
+
+ void __fastcall AddBookmark1Click(TObject *Sender);
+ void __fastcall BookmarkItemClick(TObject *Sender);
+ void __fastcall BookmarkbtnClick(TObject *Sender);
+ void __fastcall EditBookmarks1Click(TObject *Sender);
+
+ void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
+ void __fastcall Options1Click(TObject *Sender);
+ void __fastcall cbBookChange(TObject *Sender);
+
+ void __fastcall FormCreate(TObject *Sender);
+ void __fastcall DisplayHint(TObject* Sender) ;
+ void __fastcall PopupMenuPopup(TObject *Sender);
+ void __fastcall createVerseList(TObject *Sender);
+ void __fastcall freeHandLookupKeyPress(TObject *Sender, char &Key);
+ void __fastcall RTFMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
+ void __fastcall EditEntry1Click(TObject *Sender);
+ void __fastcall DeleteEntry1Click(TObject *Sender);
+ void __fastcall LinktoVerse1Click(TObject *Sender);
+
+private: // User declarations
+ list <SWDisplay *> displays; // so we can delete each display we create
+ list <ModState *> modstates;
+ vector <ModState *> ctrlstates;
+ bool logmodstate;
+ bool freshdict;
+
+ char CreateTextPane(SWModule *mod, char *font = 0);
+ char CreateCommentPane(SWModule *mod);
+ char CreateLDPane(SWModule *mod);
+ void PushState();
+ void BackState();
+ void ForwardState();
+ void BuildRTFHeader(char *buf, char *font, int max);
+ void AddSectionToMenu(TMenu *menu, TMenuItem *item, TTreeNode *tree);
+
+public: // User declarations
+ TModTabPanel *textTabs;
+ VerseKey DefaultVSKey;
+ SWKey DefaultStrKey;
+ SWMgr *mainmgr;
+ SWConfig *layoutconf;
+ SWConfig *optionsconf;
+ __fastcall TForm1(TComponent* Owner);
+ __fastcall ~TForm1();
+// virtual void __fastcall CreateWnd();
+ void RefreshActiveSheet(TPageControl *ts);
+ void TextKeyChanged(); // updates dependents on TextKeyChanged
+ void RefreshBookmarksMenu(TMenu *menu, TTreeView *tree);
+ void RestoreState(ModState *state);
+ ListKey tmpVerseList;
+ String tmpVerseListCaption;
+};
+//---------------------------------------------------------------------------
+extern TForm1 *Form1;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/newbmfilefrm.cpp b/apps/windoze/CBuilder5/prototype/newbmfilefrm.cpp
new file mode 100644
index 0000000..c611804
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/newbmfilefrm.cpp
@@ -0,0 +1,14 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "newbmfilefrm.h"
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TNewBMfrm *NewBMfrm;
+//---------------------------------------------------------------------------
+__fastcall TNewBMfrm::TNewBMfrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//--------------------------------------------------------------------------- \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/newbmfilefrm.dfm b/apps/windoze/CBuilder5/prototype/newbmfilefrm.dfm
new file mode 100644
index 0000000..1e88bcd
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/newbmfilefrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/newbmfilefrm.h b/apps/windoze/CBuilder5/prototype/newbmfilefrm.h
new file mode 100644
index 0000000..9b4c017
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/newbmfilefrm.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef newbmfilefrmH
+#define newbmfilefrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+//---------------------------------------------------------------------------
+class TNewBMfrm : public TForm
+{
+__published: // IDE-managed Components
+ TLabel *Label1;
+ TEdit *bmfile;
+ TEdit *bmtitle;
+ TLabel *Label2;
+ TButton *Button1;
+ TButton *Button2;
+private: // User declarations
+public: // User declarations
+ __fastcall TNewBMfrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TNewBMfrm *NewBMfrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/optionfrm.cpp b/apps/windoze/CBuilder5/prototype/optionfrm.cpp
new file mode 100644
index 0000000..8af047a
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/optionfrm.cpp
@@ -0,0 +1,20 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "optionfrm.h"
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TOptionsfrm *Optionsfrm;
+//---------------------------------------------------------------------------
+__fastcall TOptionsfrm::TOptionsfrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TOptionsfrm::ChooseColorbtnClick(TObject *Sender)
+{
+ ColorDialog1->Execute();
+ CurrentVSColor->Brush->Color = ColorDialog1->Color;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/optionfrm.dfm b/apps/windoze/CBuilder5/prototype/optionfrm.dfm
new file mode 100644
index 0000000..0b20318
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/optionfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/optionfrm.h b/apps/windoze/CBuilder5/prototype/optionfrm.h
new file mode 100644
index 0000000..1ea8f08
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/optionfrm.h
@@ -0,0 +1,39 @@
+//---------------------------------------------------------------------------
+#ifndef optionfrmH
+#define optionfrmH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include <vcl\Dialogs.hpp>
+//---------------------------------------------------------------------------
+class TOptionsfrm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TGroupBox *GroupBox1;
+ TCheckBox *AutoBMPersonal;
+ TCheckBox *AutoBMOther;
+ TGroupBox *GroupBox2;
+ TCheckBox *AutoVSColor;
+ TShape *CurrentVSColor;
+ TColorDialog *ColorDialog1;
+ TButton *ChooseColorbtn;
+ TPanel *Panel2;
+ TButton *Button1;
+ TPanel *Panel3;
+ TButton *Button2;
+ TLabel *Label1;
+ void __fastcall ChooseColorbtnClick(TObject *Sender);
+
+private: // User declarations
+public: // User declarations
+ __fastcall TOptionsfrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TOptionsfrm *Optionsfrm;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/options.conf b/apps/windoze/CBuilder5/prototype/options.conf
new file mode 100644
index 0000000..db0e4ce
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/options.conf
@@ -0,0 +1,15 @@
+
+[Appearance]
+AutoVSColor=1
+CurrentVSColorBlue=255
+CurrentVSColorGreen=128
+CurrentVSColorRed=0
+
+[Bookmarks]
+AutoSaveOther=1
+AutoSavePersonal=1
+Directory=
+
+[System]
+MaxFiles=40
+
diff --git a/apps/windoze/CBuilder5/prototype/search.bmp b/apps/windoze/CBuilder5/prototype/search.bmp
new file mode 100644
index 0000000..ee693be
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/search.bmp
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/searchfrm.cpp b/apps/windoze/CBuilder5/prototype/searchfrm.cpp
new file mode 100644
index 0000000..c5b29b2
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/searchfrm.cpp
@@ -0,0 +1,95 @@
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "searchfrm.h"
+#include <listkey.h>
+#include "mainfrm.h"
+#include <regex.h>
+
+//---------------------------------------------------------------------------
+#pragma resource "*.dfm"
+TForm2 *Form2;
+//---------------------------------------------------------------------------
+__fastcall TForm2::TForm2(TComponent* Owner)
+ : TForm(Owner)
+{
+ pvrtf = new SWDispRTF(this);
+
+ pvrtf->Parent = plPreview;
+ pvrtf->Align = alClient;
+ pvrtf->ScrollBars = ssVertical;
+ pvrtf->ReadOnly = true;
+// pvrtf->PopupMenu = PopupMenu2;
+
+// mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf)));
+// mod->SetKey(DefaultVSKey);
+// return 0;
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm2::Button1Click(TObject *Sender)
+{
+// ModMap::iterator target;
+ class TWaitCursor {
+ public:
+ TWaitCursor() : oldc(Screen->Cursor) { Screen->Cursor = crHourGlass; }
+ ~TWaitCursor() { Screen->Cursor = oldc; }
+ private:
+ TCursor oldc;
+ } wait; // show hourglass
+
+ Caption = "";
+
+
+ targetpc = Form1->textTabs->pageControl;
+
+ if ((Form1->ActiveControl == Form1->PageControl2) || (IsChild(Form1->PageControl2->Handle, Form1->ActiveControl->Handle)))
+ targetpc = Form1->PageControl2;
+ if ((Form1->ActiveControl == Form1->PageControl3) || (IsChild(Form1->PageControl3->Handle, Form1->ActiveControl->Handle)))
+ targetpc = Form1->PageControl3;
+
+
+ target = Form1->mainmgr->Modules.find(targetpc->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ Caption = Caption + "Searching [" + (*target).first.c_str() + "]...";
+ ListBox1->Clear();
+ int searchType;
+ switch (searchTypeGroup->ItemIndex) {
+ case 0: searchType = -2; break;
+ case 1: searchType = -1; break;
+ case 2: searchType = 0; break;
+ }
+ int searchOptions = (CheckBox2->Checked) ? 0 : REG_ICASE;
+ ListKey &results = (*target).second->Search(SearchText->Text.c_str(), searchType, searchOptions);
+ while (!results.Error()) {
+ ListBox1->Items->Add((const char *)results);
+ results++;
+ }
+// ListBox1->Items->Pack(); // so Count is set correctly (per helpfile)
+ Caption = "";
+ Caption = Caption + "Results from [" + (*target).first.c_str() + "] (" + ListBox1->Items->Count + ((ListBox1->Items->Count == 1) ? " match)" : " matches)");
+ }
+ else Caption = "Error finding target module";
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm2::ListBox1DblClick(TObject *Sender)
+{
+ if (targetpc == Form1->PageControl3) {
+ Form1->DictKeyEdit->Text = ListBox1->Items->Strings[ListBox1->ItemIndex].c_str();
+ }
+ else {
+ Form1->DefaultVSKey = ListBox1->Items->Strings[ListBox1->ItemIndex].c_str();
+ Form1->TextKeyChanged();
+ }
+}
+//---------------------------------------------------------------------------
+void __fastcall TForm2::ListBox1Click(TObject *Sender)
+{
+ if (target != Form1->mainmgr->Modules.end()) {
+ SWKey *savekey = *(*target).second;
+ (*target).second->SetKey(ListBox1->Items->Strings[ListBox1->ItemIndex].c_str());
+ pvrtf->Display(*(*target).second);
+ (*target).second->SetKey(*savekey);
+ }
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/searchfrm.dfm b/apps/windoze/CBuilder5/prototype/searchfrm.dfm
new file mode 100644
index 0000000..9c366d8
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/searchfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/searchfrm.h b/apps/windoze/CBuilder5/prototype/searchfrm.h
new file mode 100644
index 0000000..a50ee44
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/searchfrm.h
@@ -0,0 +1,44 @@
+//---------------------------------------------------------------------------
+#ifndef searchH
+#define searchH
+//---------------------------------------------------------------------------
+#include <vcl\Classes.hpp>
+#include <vcl\Controls.hpp>
+#include <vcl\StdCtrls.hpp>
+#include <vcl\Forms.hpp>
+#include <vcl\ExtCtrls.hpp>
+#include "mainfrm.h"
+#include <swmgr.h>
+//---------------------------------------------------------------------------
+class TForm2 : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *Panel1;
+ TPanel *Panel2;
+ TListBox *ListBox1;
+ TPanel *Panel3;
+ TMemo *SearchText;
+ TPanel *plPreview;
+ TRadioGroup *searchTypeGroup;
+ TGroupBox *GroupBox1;
+ TCheckBox *CheckBox2;
+ TPanel *Panel4;
+ TButton *Button1;
+ TSplitter *Splitter1;
+ void __fastcall Button1Click(TObject *Sender);
+ void __fastcall ListBox1DblClick(TObject *Sender);
+ void __fastcall ListBox1Click(TObject *Sender);
+private: // User declarations
+ SWDispRTF *pvrtf;
+public: // User declarations
+ ModMap::iterator target;
+ TPageControl *targetpc;
+// AnsiString CapText;
+
+ __fastcall TForm2(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern TForm2 *Form2;
+//---------------------------------------------------------------------------
+#endif
+ \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/sword.bpr b/apps/windoze/CBuilder5/prototype/sword.bpr
new file mode 100644
index 0000000..f325f9a
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/sword.bpr
@@ -0,0 +1,124 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="sword.exe"/>
+ <OBJFILES value="sword.obj mainfrm.obj ModInstForm.obj ..\..\swdisprtf.obj
+ ..\..\swdisprtfchap.obj ..\..\swwinlog.obj ..\..\tbdisp.obj searchfrm.obj
+ editentryfrm.obj biblecsmgr.obj bookmarkfrm.obj AboutBoxfrm.obj
+ optionfrm.obj vrslstfrm.obj versesel.obj newbmfilefrm.obj CommentPanel.obj
+ ModTabPanel.obj AppBar.obj BookMarkPanel.obj TextPanel.obj LDPanel.obj
+ DeskTopNameForm.obj DockCanvas.obj"/>
+ <RESFILES value="sword.res"/>
+ <IDLFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES) mainfrm.dfm ModInstForm.dfm searchfrm.dfm editentryfrm.dfm
+ bookmarkfrm.dfm AboutBoxfrm.dfm optionfrm.dfm vrslstfrm.dfm versesel.dfm
+ newbmfilefrm.dfm AppBar.dfm DeskTopNameForm.dfm DockCanvas.dfm"/>
+ <LIBFILES value="swordlib.lib"/>
+ <LIBRARIES value="vclx50.lib vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib vclx50.lib"/>
+ <PACKAGES value="vcl50.bpi vclx50.bpi vcljpg50.bpi vclmid50.bpi vcldb50.bpi vclbde50.bpi
+ bcbsmp50.bpi vcldbx50.bpi qrpt50.bpi teeui50.bpi teedb50.bpi tee50.bpi
+ dss50.bpi ibsmp50.bpi nmfast50.bpi inetdb50.bpi inet50.bpi dclocx50.bpi"/>
+ <PATHCPP value=".;..\..\..\windoze"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
+ <RELEASELIBPATH value="$(BCB)\lib\release"/>
+ <LINKER value="ilink32"/>
+ <USERDEFINES value="_DEBUG"/>
+ <SYSDEFINES value="NO_STRICT;_VIS_NOLIB"/>
+ <MAINSOURCE value="sword.cpp"/>
+ <INCLUDEPATH value="&quot;C:\Program Files\Common Files\Borland Shared\Images\Buttons\&quot;;..\..\..\windoze;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include"/>
+ <LIBPATH value="&quot;C:\Program Files\Common Files\Borland Shared\Images\Buttons\&quot;;$(BCB)\Projects\Lib;&quot;C:\program files\borland\cbuilder4\Lib\&quot;;..\..\..\windoze;$(BCB)\lib\obj;$(BCB)\lib"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ </MACROS>
+ <OPTIONS>
+ <IDLCFLAGS value="-I&quot;..\..\..\..\..\..\..\Program Files\Common Files\Borland Shared\Images\Buttons&quot;
+ -I..\.. -I$(BCB)\include -I$(BCB)\include\vcl -I..\..\..\..\include
+ -src_suffix cpp -boa"/>
+ <CFLAG1 value="-Od -H=c:\PROGRA~1\BORLAND\CBUILD~1\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8
+ -b- -k -y -v -vi- -c -tW -tWM"/>
+ <PFLAGS value="-$Y+ -$W -$O- -v -JPHNE -M"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zi"/>
+ <LFLAGS value="-D&quot;&quot; -aa -Tpe -x -Gn -v"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="c0w32.obj sysinit.obj $(OBJFILES)"/>
+ <ALLRES value="$(RESFILES)"/>
+ <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[HistoryLists\hlIncludePath]
+Count=5
+Item0=C:\Program Files\Common Files\Borland Shared\Images\Buttons\;..\..;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item1=C:\Program Files\Common Files\Borland Shared\Images\Buttons\;..\..\..\windoze;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item2=..\..\..\..\..\..\..\Program Files\Common Files\Borland Shared\Images\Buttons;..\..;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item3=..\..;$(BCB)\include;$(BCB)\include\vcl;..\..\..\..\include
+Item4=$(BCB)\include;$(BCB)\include\vcl;../../../../include
+
+[HistoryLists\hlLibraryPath]
+Count=5
+Item0=C:\Program Files\Common Files\Borland Shared\Images\Buttons\;$(BCB)\Projects\Lib;C:\program files\borland\cbuilder4\Lib\;..\..;$(BCB)\lib\obj;$(BCB)\lib
+Item1=C:\Program Files\Common Files\Borland Shared\Images\Buttons\;$(BCB)\Projects\Lib;C:\program files\borland\cbuilder4\Lib\;..\..\..\windoze;$(BCB)\lib\obj;$(BCB)\lib
+Item2=..\..\..\..\..\..\..\Program Files\Common Files\Borland Shared\Images\Buttons;$(BCB)\Projects\Lib;..\..\..\..\..\..\..\program files\borland\cbuilder4\Lib;..\..;$(BCB)\lib\obj;$(BCB)\lib
+Item3=..\..;$(BCB)\lib\obj;$(BCB)\lib
+Item4=$(BCB)\lib\obj;$(BCB)\lib
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=0
+LinkCGLIB=0
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/sword.cpp b/apps/windoze/CBuilder5/prototype/sword.cpp
new file mode 100644
index 0000000..113f717
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/sword.cpp
@@ -0,0 +1,47 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+USERES("sword.res");
+USEFORM("mainfrm.cpp", Form1);
+USELIB("swordlib.lib");
+USEFORM("ModInstForm.cpp", ModInstFrm);
+USEUNIT("..\..\swdisprtf.cpp");
+USEUNIT("..\..\swdisprtfchap.cpp");
+USEUNIT("..\..\swwinlog.cpp");
+USEUNIT("..\..\tbdisp.cpp");
+USEFORM("searchfrm.cpp", Form2);
+USEFORM("editentryfrm.cpp", EditEntry);
+USEUNIT("biblecsmgr.cpp");
+USEFORM("bookmarkfrm.cpp", Bookmarksfrm);
+USEFORM("AboutBoxfrm.cpp", AboutBox);
+USEFORM("optionfrm.cpp", Optionsfrm);
+USEFORM("vrslstfrm.cpp", VerseListFrm);
+USEFORM("versesel.cpp", VerseSelFrm);
+USEFORM("newbmfilefrm.cpp", NewBMfrm);
+USEUNIT("CommentPanel.cpp");
+USEUNIT("ModTabPanel.cpp");
+USEFORM("AppBar.cpp", AppBarFrm);
+USEUNIT("BookMarkPanel.cpp");
+USEUNIT("TextPanel.cpp");
+USEUNIT("LDPanel.cpp");
+USEFORM("DeskTopNameForm.cpp", DeskTopNameFrm);
+USEFORM("DockCanvas.cpp", DockCanvasFrm);
+//---------------------------------------------------------------------------
+WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
+{
+ try
+ {
+ Application->Initialize();
+ Application->CreateForm(__classid(TAppBarFrm), &AppBarFrm);
+ Application->CreateForm(__classid(TDeskTopNameFrm), &DeskTopNameFrm);
+ Application->CreateForm(__classid(TDockCanvasFrm), &DockCanvasFrm);
+ Application->Run();
+ }
+ catch (Exception &exception)
+ {
+ Application->ShowException(&exception);
+ }
+ return 0;
+}
+//---------------------------------------------------------------------------
+
diff --git a/apps/windoze/CBuilder5/prototype/sword.res b/apps/windoze/CBuilder5/prototype/sword.res
new file mode 100644
index 0000000..32b522d
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/sword.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/swordlib.bpr b/apps/windoze/CBuilder5/prototype/swordlib.bpr
new file mode 100644
index 0000000..3948c15
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/swordlib.bpr
@@ -0,0 +1,168 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!-- C++Builder XML Project -->
+<PROJECT>
+ <MACROS>
+ <VERSION value="BCB.05.03"/>
+ <PROJECT value="swordlib.lib"/>
+ <OBJFILES value="swordlib.obj ..\..\..\..\src\keys\versekey.obj
+ ..\..\..\..\src\keys\swkey.obj ..\..\..\..\src\keys\listkey.obj
+ ..\..\..\..\src\keys\strkey.obj ..\..\..\..\src\mgr\swmgr.obj
+ ..\..\..\..\src\mgr\swconfig.obj
+ ..\..\..\..\src\modules\comments\rawcom\rawcom.obj
+ ..\..\..\..\src\modules\comments\swcom.obj
+ ..\..\..\..\src\modules\common\rawverse.obj
+ ..\..\..\..\src\modules\common\rawstr.obj
+ ..\..\..\..\src\modules\filters\rwprtf.obj
+ ..\..\..\..\src\modules\filters\gbfrtf.obj
+ ..\..\..\..\src\modules\filters\gbfplain.obj
+ ..\..\..\..\src\modules\lexdict\rawld\rawld.obj
+ ..\..\..\..\src\modules\lexdict\swld.obj
+ ..\..\..\..\src\modules\texts\rawgbf\rawgbf.obj
+ ..\..\..\..\src\modules\texts\rawtext\rawtext.obj
+ ..\..\..\..\src\modules\texts\swtext.obj
+ ..\..\..\..\src\modules\swmodule.obj ..\..\tbdisp.obj
+ ..\..\swdisprtfchap.obj ..\..\swwinlog.obj ..\..\swdisprtf.obj
+ ..\..\..\..\src\modules\comments\hrefcom\hrefcom.obj
+ ..\..\..\..\src\mgr\filemgr.obj
+ ..\..\..\..\src\modules\comments\rawfiles\rawfiles.obj
+ ..\..\..\..\src\utilfuns\utilstr.obj ..\..\..\..\src\utilfuns\utilconf.obj
+ ..\..\..\..\src\utilfuns\Greek2Greek.obj
+ ..\..\..\..\src\utilfuns\regex.obj ..\..\..\..\src\frontend\swlog.obj
+ ..\..\..\..\src\frontend\swdisp.obj
+ ..\..\..\..\src\modules\filters\gbfstrongs.obj
+ ..\..\..\..\src\modules\filters\gbffootnotes.obj
+ ..\..\..\..\src\modules\filters\cipherfil.obj
+ ..\..\..\..\src\modules\common\sapphire.obj
+ ..\..\..\..\src\modules\common\swcipher.obj
+ ..\..\..\..\src\mgr\swlocale.obj ..\..\..\..\src\mgr\localemgr.obj
+ ..\..\..\..\src\modules\common\lzsscomprs.obj
+ ..\..\..\..\src\modules\common\zverse.obj
+ ..\..\..\..\src\modules\common\swcomprs.obj
+ ..\..\..\..\src\modules\texts\ztext\ztext.obj
+ ..\..\..\..\src\modules\filters\thmlrtf.obj
+ ..\..\..\..\src\modules\filters\gbfhtml.obj
+ ..\..\..\..\src\modules\filters\gbfthml.obj
+ ..\..\..\..\src\modules\filters\plainfootnotes.obj
+ ..\..\..\..\src\modules\filters\plainhtml.obj
+ ..\..\..\..\src\modules\filters\rtfhtml.obj
+ ..\..\..\..\src\modules\filters\rwphtml.obj
+ ..\..\..\..\src\modules\filters\thmlgbf.obj
+ ..\..\..\..\src\modules\filters\thmlhtml.obj
+ ..\..\..\..\src\modules\filters\thmlplain.obj"/>
+ <RESFILES value=""/>
+ <IDLFILES value=""/>
+ <DEFFILE value=""/>
+ <RESDEPEN value="$(RESFILES)"/>
+ <LIBFILES value=""/>
+ <LIBRARIES value="nmfast50.lib vclx50.lib vcl50.lib"/>
+ <SPARELIBS value="vcl50.lib vclx50.lib nmfast50.lib"/>
+ <PACKAGES value=""/>
+ <PATHCPP value=".;..\..\..\..\src\keys;..\..\..\..\src\mgr;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\common;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts;..\..\..\..\src\modules;..\..\..\windoze;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\utilfuns;..\..\..\..\src\frontend;..\..\..\..\src\modules\texts\ztext"/>
+ <PATHPAS value=".;"/>
+ <PATHRC value=".;"/>
+ <PATHASM value=".;"/>
+ <DEBUGLIBPATH value=""/>
+ <RELEASELIBPATH value=""/>
+ <LINKER value="TLib"/>
+ <USERDEFINES value="_DEBUG"/>
+ <SYSDEFINES value="NO_STRICT;_NO_VCL"/>
+ <MAINSOURCE value="swordlib.cpp"/>
+ <INCLUDEPATH value="..\..\..\windoze;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl"/>
+ <LIBPATH value="..\..\..\windoze;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys"/>
+ <WARNINGS value="-w-par -w-8027 -w-8026"/>
+ <WARNOPTSTR value=""/>
+ <LISTFILE value=""/>
+ </MACROS>
+ <OPTIONS>
+ <CFLAG1 value="-Od -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -RT- -X- -r-
+ -a8 -4 -b- -k -y -v -vi- -c -g0 -tWM"/>
+ <PFLAGS value="-$Y+ -$W -$O- -v -M -JPHNE"/>
+ <RFLAGS value=""/>
+ <AFLAGS value="/mx /w2 /zi"/>
+ <LFLAGS value="/P128"/>
+ </OPTIONS>
+ <LINKER>
+ <ALLOBJ value="$(OBJFILES)"/>
+ <ALLRES value=""/>
+ <ALLLIB value="cg32.lib"/>
+ </LINKER>
+ <IDEOPTIONS>
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+
+[HistoryLists\hlIncludePath]
+Count=13
+Item0=..\..;..\..\..\..\src\modules\texts\ztext;..\..\..\windoze;..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item1=..\..\..\..\src\modules\texts\ztext;..\..;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item2=..\..\..\..\src\modules\texts\ztext;..\..\..\windoze;..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item3=..\..;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item4=..\..;..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item5=..\..\..\..\src\frontend;..\..\..\..\apps;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item6=..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item7=..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item8=..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item9=..\..\..\..\include;..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item10=..\..\..\..\frontend;..\..\..\windoze;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl
+Item11=c:\usr\troy\src\sword\include;c:\usr\troy\src\sword\frontend;c:\usr\troy\src\sword\frontend\windoze;c:\usr\troy\src\sword\utilfuns;c:\usr\troy\src\sword\modules;c:\usr\troy\src\sword\modules\texts;c:\usr\troy\src\sword\modules\texts\rawtext;c:\usr\troy\src\sword\modules\texts\rawgbf;c:\usr\troy\src\sword\modules\lexdict;c:\usr\troy\src\sword\modules\lexdict\rawld;c:\usr\troy\src\sword\modules\filters;c:\usr\troy\src\sword\modules\common;c:\usr\troy\src\sword\modules\comments;c:\usr\troy\src\sword\modules\comments\rawcom;c:\usr\troy\src\sword\mgr;c:\usr\troy\src\sword\keys;$(BCB)\include;$(BCB)\include\vcl
+Item12=c:\usr\src\sword\include;c:\usr\troy\src\sword\frontend;c:\usr\troy\src\sword\frontend\windoze;c:\usr\troy\src\sword\utilfuns;c:\usr\troy\src\sword\modules;c:\usr\troy\src\sword\modules\texts;c:\usr\troy\src\sword\modules\texts\rawtext;c:\usr\troy\src\sword\modules\texts\rawgbf;c:\usr\troy\src\sword\modules\lexdict;c:\usr\troy\src\sword\modules\lexdict\rawld;c:\usr\troy\src\sword\modules\filters;c:\usr\troy\src\sword\modules\common;c:\usr\troy\src\sword\modules\comments;c:\usr\troy\src\sword\modules\comments\rawcom;c:\usr\troy\src\sword\mgr;c:\usr\troy\src\sword\keys;$(BCB)\include;$(BCB)\include\vcl
+
+[HistoryLists\hlDebugSourcePath]
+Count=1
+Item0=$(BCB)\source\vcl
+
+[HistoryLists\hlConditionals]
+Count=2
+Item0=_DEBUG
+Item1=_NO_VCL
+
+[HistoryLists\hlTlibPageSize]
+Count=3
+Item0=0x0080
+Item1=128
+Item2=0x0040
+
+[Debugging]
+DebugSourceDirs=$(BCB)\source\vcl
+
+[Parameters]
+RunParams=
+HostApplication=
+RemoteHost=
+RemotePath=
+RemoteDebug=0
+
+[Compiler]
+ShowInfoMsgs=0
+LinkDebugVcl=1
+LinkCGLIB=0
+
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+ </IDEOPTIONS>
+</PROJECT> \ No newline at end of file
diff --git a/apps/windoze/CBuilder5/prototype/swordlib.cpp b/apps/windoze/CBuilder5/prototype/swordlib.cpp
new file mode 100644
index 0000000..fb5ebe2
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/swordlib.cpp
@@ -0,0 +1,61 @@
+//---------------------------------------------------------------------------
+#include <condefs.h>
+#pragma hdrstop
+USEUNIT("..\..\..\..\src\keys\versekey.cpp");
+USEUNIT("..\..\..\..\src\keys\swkey.cpp");
+USEUNIT("..\..\..\..\src\keys\listkey.cpp");
+USEUNIT("..\..\..\..\src\keys\strkey.cpp");
+USEUNIT("..\..\..\..\src\mgr\swmgr.cpp");
+USEUNIT("..\..\..\..\src\mgr\swconfig.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\rawcom\rawcom.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\swcom.cpp");
+USEUNIT("..\..\..\..\src\modules\common\rawverse.cpp");
+USEUNIT("..\..\..\..\src\modules\common\rawstr.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\rwprtf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfrtf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfplain.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\rawld\rawld.cpp");
+USEUNIT("..\..\..\..\src\modules\lexdict\swld.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\rawgbf\rawgbf.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\rawtext\rawtext.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\swtext.cpp");
+USEUNIT("..\..\..\..\src\modules\swmodule.cpp");
+USEUNIT("..\..\tbdisp.cpp");
+USEUNIT("..\..\swdisprtfchap.cpp");
+USEUNIT("..\..\swwinlog.cpp");
+USEUNIT("..\..\swdisprtf.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\hrefcom\hrefcom.cpp");
+USEUNIT("..\..\..\..\src\mgr\filemgr.cpp");
+USEUNIT("..\..\..\..\src\modules\comments\rawfiles\rawfiles.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\utilstr.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\utilconf.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\Greek2Greek.cpp");
+USEUNIT("..\..\..\..\src\utilfuns\regex.c");
+USEUNIT("..\..\..\..\src\frontend\swlog.cpp");
+USEUNIT("..\..\..\..\src\frontend\swdisp.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfstrongs.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbffootnotes.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\cipherfil.cpp");
+USEUNIT("..\..\..\..\src\modules\common\sapphire.cpp");
+USEUNIT("..\..\..\..\src\modules\common\swcipher.cpp");
+USEUNIT("..\..\..\..\src\mgr\swlocale.cpp");
+USEUNIT("..\..\..\..\src\mgr\localemgr.cpp");
+USEUNIT("..\..\..\..\src\modules\common\lzsscomprs.cpp");
+USEUNIT("..\..\..\..\src\modules\common\zverse.cpp");
+USEUNIT("..\..\..\..\src\modules\common\swcomprs.cpp");
+USEUNIT("..\..\..\..\src\modules\texts\ztext\ztext.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlrtf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\gbfthml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\plainfootnotes.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\plainhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\rtfhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\rwphtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlgbf.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlhtml.cpp");
+USEUNIT("..\..\..\..\src\modules\filters\thmlplain.cpp");
+//---------------------------------------------------------------------------
+#define Library
+
+// To add a file to the library use the Project menu 'Add to Project'.
+
diff --git a/apps/windoze/CBuilder5/prototype/swordprj.bpg b/apps/windoze/CBuilder5/prototype/swordprj.bpg
new file mode 100644
index 0000000..0333c75
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/swordprj.bpg
@@ -0,0 +1,23 @@
+#------------------------------------------------------------------------------
+VERSION = BWS.01
+#------------------------------------------------------------------------------
+!ifndef ROOT
+ROOT = $(MAKEDIR)\..
+!endif
+#------------------------------------------------------------------------------
+MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
+DCC = $(ROOT)\bin\dcc32.exe $**
+BRCC = $(ROOT)\bin\brcc32.exe $**
+#------------------------------------------------------------------------------
+PROJECTS = swordlib.lib sword.exe
+#------------------------------------------------------------------------------
+default: $(PROJECTS)
+#------------------------------------------------------------------------------
+
+swordlib.lib: swordlib.bpr
+ $(MAKE)
+
+sword.exe: sword.bpr
+ $(MAKE)
+
+
diff --git a/apps/windoze/CBuilder5/prototype/versesel.cpp b/apps/windoze/CBuilder5/prototype/versesel.cpp
new file mode 100644
index 0000000..8788580
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/versesel.cpp
@@ -0,0 +1,22 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "versesel.h"
+#include <versekey.h>
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TVerseSelFrm *VerseSelFrm;
+//---------------------------------------------------------------------------
+__fastcall TVerseSelFrm::TVerseSelFrm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TVerseSelFrm::Edit1Change(TObject *Sender)
+{
+ VerseKey trykey = Edit1->Text.c_str();
+ Panel2->Caption = (const char *)trykey;
+}
+//---------------------------------------------------------------------------
diff --git a/apps/windoze/CBuilder5/prototype/versesel.dfm b/apps/windoze/CBuilder5/prototype/versesel.dfm
new file mode 100644
index 0000000..4502433
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/versesel.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/versesel.h b/apps/windoze/CBuilder5/prototype/versesel.h
new file mode 100644
index 0000000..b4c1981
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/versesel.h
@@ -0,0 +1,27 @@
+//---------------------------------------------------------------------------
+#ifndef verseselH
+#define verseselH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+//---------------------------------------------------------------------------
+class TVerseSelFrm : public TForm
+{
+__published: // IDE-managed Components
+ TEdit *Edit1;
+ TPanel *Panel2;
+ TPanel *Panel1;
+ TButton *Button1;
+ TButton *Button2;
+ void __fastcall Edit1Change(TObject *Sender);
+private: // User declarations
+public: // User declarations
+ __fastcall TVerseSelFrm(TComponent* Owner);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TVerseSelFrm *VerseSelFrm;
+//---------------------------------------------------------------------------
+#endif
diff --git a/apps/windoze/CBuilder5/prototype/vrslstfrm.cpp b/apps/windoze/CBuilder5/prototype/vrslstfrm.cpp
new file mode 100644
index 0000000..f20e6a8
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/vrslstfrm.cpp
@@ -0,0 +1,50 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "vrslstfrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TVerseListFrm *VerseListFrm;
+//---------------------------------------------------------------------------
+__fastcall TVerseListFrm::TVerseListFrm(TComponent* Owner, ListKey &iVerseList)
+ : TForm(Owner), verseList(iVerseList)
+{
+ pvrtf = new SWDispRTF(this);
+
+ pvrtf->Parent = plPreview;
+ pvrtf->Align = alClient;
+ pvrtf->ScrollBars = ssVertical;
+ pvrtf->ReadOnly = true;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TVerseListFrm::ListBox1Click(TObject *Sender)
+{
+ ModMap::iterator target;
+ target = Form1->mainmgr->Modules.find(Form1->textTabs->pageControl->ActivePage->Caption.c_str());
+ if (target != Form1->mainmgr->Modules.end()) {
+ SWKey *savekey = *(*target).second;
+ (*target).second->SetKey(ListBox1->Items->Strings[ListBox1->ItemIndex].c_str());
+ pvrtf->Display(*(*target).second);
+ (*target).second->SetKey(*savekey);
+ }
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TVerseListFrm::ListBox1DblClick(TObject *Sender)
+{
+ Form1->DefaultVSKey = ListBox1->Items->Strings[ListBox1->ItemIndex].c_str();
+ Form1->TextKeyChanged();
+}
+//---------------------------------------------------------------------------
+void __fastcall TVerseListFrm::FormShow(TObject *Sender)
+{
+ for (verseList = TOP; (!verseList.Error()); verseList++)
+ ListBox1->Items->Add((const char *)verseList);
+}
+//---------------------------------------------------------------------------
+
+
+
diff --git a/apps/windoze/CBuilder5/prototype/vrslstfrm.dfm b/apps/windoze/CBuilder5/prototype/vrslstfrm.dfm
new file mode 100644
index 0000000..2b2af74
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/vrslstfrm.dfm
Binary files differ
diff --git a/apps/windoze/CBuilder5/prototype/vrslstfrm.h b/apps/windoze/CBuilder5/prototype/vrslstfrm.h
new file mode 100644
index 0000000..7af64b9
--- /dev/null
+++ b/apps/windoze/CBuilder5/prototype/vrslstfrm.h
@@ -0,0 +1,29 @@
+//---------------------------------------------------------------------------
+#ifndef vrslstfrmH
+#define vrslstfrmH
+//---------------------------------------------------------------------------
+#include <Classes.hpp>
+#include <Controls.hpp>
+#include <StdCtrls.hpp>
+#include <Forms.hpp>
+#include <ExtCtrls.hpp>
+#include "mainfrm.h"
+//---------------------------------------------------------------------------
+class TVerseListFrm : public TForm
+{
+__published: // IDE-managed Components
+ TPanel *plPreview;
+ TListBox *ListBox1;
+ void __fastcall ListBox1Click(TObject *Sender);
+ void __fastcall ListBox1DblClick(TObject *Sender);
+ void __fastcall FormShow(TObject *Sender);
+private: // User declarations
+ SWDispRTF *pvrtf;
+ ListKey &verseList;
+public: // User declarations
+ __fastcall TVerseListFrm(TComponent* Owner, ListKey &iVerseList);
+};
+//---------------------------------------------------------------------------
+extern PACKAGE TVerseListFrm *VerseListFrm;
+//---------------------------------------------------------------------------
+#endif