diff options
Diffstat (limited to 'linden/indra/newview/installers/windows/installer_template.nsi')
-rw-r--r-- | linden/indra/newview/installers/windows/installer_template.nsi | 256 |
1 files changed, 131 insertions, 125 deletions
diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi index ec4fd85..c795507 100644 --- a/linden/indra/newview/installers/windows/installer_template.nsi +++ b/linden/indra/newview/installers/windows/installer_template.nsi | |||
@@ -69,6 +69,7 @@ DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate) | |||
69 | DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) | 69 | DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) |
70 | !endif | 70 | !endif |
71 | 71 | ||
72 | |||
72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 73 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
73 | ;;; Variables | 74 | ;;; Variables |
74 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 75 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
@@ -78,131 +79,9 @@ Var INSTFLAGS | |||
78 | Var LANGFLAGS | 79 | Var LANGFLAGS |
79 | Var INSTSHORTCUT | 80 | Var INSTSHORTCUT |
80 | 81 | ||
81 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 82 | ;;; Function definitions should go before file includes, because the NSIS package |
82 | ;;; Sections | 83 | ;;; is a single stream of bytecodes + file data. So if your function definitions are at |
83 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 84 | ;;; the end of the file it has to decompress the whole thing before it can call a function. JC |
84 | Section "" ; (default section) | ||
85 | |||
86 | SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well) | ||
87 | |||
88 | ; Start with some default values. | ||
89 | StrCpy $INSTFLAGS "${INSTFLAGS}" | ||
90 | StrCpy $INSTPROG "${INSTNAME}" | ||
91 | StrCpy $INSTEXE "${INSTEXE}" | ||
92 | StrCpy $INSTSHORTCUT "${SHORTCUT}" | ||
93 | |||
94 | IfSilent +2 | ||
95 | Goto NOT_SILENT | ||
96 | Call CheckStartupParams ; Figure out where, what and how to install. | ||
97 | NOT_SILENT: | ||
98 | Call CheckWindowsVersion ; warn if on Windows 98/ME | ||
99 | Call CheckIfAdministrator ; Make sure the user can install/uninstall | ||
100 | Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version | ||
101 | Call CloseSecondLife ; Make sure we're not running | ||
102 | Call RemoveNSIS ; Check for old NSIS install to remove | ||
103 | |||
104 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
105 | ;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers. | ||
106 | ;Call RemoveCacheFiles ; Installing over removes potentially corrupted | ||
107 | ; VFS and cache files. | ||
108 | |||
109 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
110 | ;;; Need to clean out shader files from previous installs to fix DEV-5663 | ||
111 | Call RemoveOldShaders | ||
112 | |||
113 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
114 | ;;; Need to clean out old XUI files that predate skinning | ||
115 | Call RemoveOldXUI | ||
116 | |||
117 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
118 | ;;; Clear out old releasenotes.txt files. These are now on the public wiki. | ||
119 | Call RemoveOldReleaseNotes | ||
120 | |||
121 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
122 | ;;; Files | ||
123 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
124 | ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py | ||
125 | %%INSTALL_FILES%% | ||
126 | |||
127 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
128 | ; If this is a silent update, we don't need to re-create these shortcuts or registry entries. | ||
129 | IfSilent POST_INSTALL | ||
130 | |||
131 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
132 | ; Shortcuts in start menu | ||
133 | CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" | ||
134 | SetOutPath "$INSTDIR" | ||
135 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ | ||
136 | "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
137 | |||
138 | !ifdef MUSEUM | ||
139 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \ | ||
140 | |||
141 | "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
142 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \ | ||
143 | |||
144 | "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
145 | !endif | ||
146 | |||
147 | WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \ | ||
148 | "InternetShortcut" "URL" \ | ||
149 | "http://www.secondlife.com/registration/" | ||
150 | WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ | ||
151 | "InternetShortcut" "URL" \ | ||
152 | "http://www.secondlife.com/account/" | ||
153 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \ | ||
154 | "$INSTDIR\lsl_guide.html" | ||
155 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ | ||
156 | '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' | ||
157 | |||
158 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
159 | ; Other shortcuts | ||
160 | SetOutPath "$INSTDIR" | ||
161 | CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
162 | CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
163 | CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ | ||
164 | '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' | ||
165 | |||
166 | !ifdef MUSEUM | ||
167 | CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
168 | |||
169 | CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
170 | |||
171 | CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
172 | |||
173 | CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
174 | |||
175 | !endif | ||
176 | |||
177 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
178 | ; Write registry | ||
179 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" | ||
180 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" | ||
181 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" | ||
182 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" | ||
183 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" | ||
184 | WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" | ||
185 | WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"' | ||
186 | |||
187 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
188 | ; Write URL registry info | ||
189 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" | ||
190 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" | ||
191 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' | ||
192 | WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' | ||
193 | |||
194 | Goto WRITE_UNINST | ||
195 | |||
196 | POST_INSTALL: | ||
197 | ; Run a post-executable script if necessary. | ||
198 | Call PostInstallExe | ||
199 | |||
200 | WRITE_UNINST: | ||
201 | ; write out uninstaller | ||
202 | WriteUninstaller "$INSTDIR\uninst.exe" | ||
203 | |||
204 | ; end of default section | ||
205 | SectionEnd | ||
206 | 85 | ||
207 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 86 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
208 | ; PostInstallExe | 87 | ; PostInstallExe |
@@ -981,4 +860,131 @@ Function un.onInit | |||
981 | 860 | ||
982 | FunctionEnd | 861 | FunctionEnd |
983 | 862 | ||
863 | |||
864 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
865 | ;;; Sections | ||
866 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
867 | Section "" ; (default section) | ||
868 | |||
869 | SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well) | ||
870 | |||
871 | ; Start with some default values. | ||
872 | StrCpy $INSTFLAGS "${INSTFLAGS}" | ||
873 | StrCpy $INSTPROG "${INSTNAME}" | ||
874 | StrCpy $INSTEXE "${INSTEXE}" | ||
875 | StrCpy $INSTSHORTCUT "${SHORTCUT}" | ||
876 | |||
877 | IfSilent +2 | ||
878 | Goto NOT_SILENT | ||
879 | Call CheckStartupParams ; Figure out where, what and how to install. | ||
880 | NOT_SILENT: | ||
881 | Call CheckWindowsVersion ; warn if on Windows 98/ME | ||
882 | Call CheckIfAdministrator ; Make sure the user can install/uninstall | ||
883 | Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version | ||
884 | Call CloseSecondLife ; Make sure we're not running | ||
885 | Call RemoveNSIS ; Check for old NSIS install to remove | ||
886 | |||
887 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
888 | ;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers. | ||
889 | ;Call RemoveCacheFiles ; Installing over removes potentially corrupted | ||
890 | ; VFS and cache files. | ||
891 | |||
892 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
893 | ;;; Need to clean out shader files from previous installs to fix DEV-5663 | ||
894 | Call RemoveOldShaders | ||
895 | |||
896 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
897 | ;;; Need to clean out old XUI files that predate skinning | ||
898 | Call RemoveOldXUI | ||
899 | |||
900 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
901 | ;;; Clear out old releasenotes.txt files. These are now on the public wiki. | ||
902 | Call RemoveOldReleaseNotes | ||
903 | |||
904 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
905 | ;;; Files | ||
906 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
907 | ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py | ||
908 | %%INSTALL_FILES%% | ||
909 | |||
910 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
911 | ; If this is a silent update, we don't need to re-create these shortcuts or registry entries. | ||
912 | IfSilent POST_INSTALL | ||
913 | |||
914 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
915 | ; Shortcuts in start menu | ||
916 | CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" | ||
917 | SetOutPath "$INSTDIR" | ||
918 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ | ||
919 | "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
920 | |||
921 | !ifdef MUSEUM | ||
922 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \ | ||
923 | |||
924 | "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
925 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \ | ||
926 | |||
927 | "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
928 | !endif | ||
929 | |||
930 | WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \ | ||
931 | "InternetShortcut" "URL" \ | ||
932 | "http://www.secondlife.com/registration/" | ||
933 | WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ | ||
934 | "InternetShortcut" "URL" \ | ||
935 | "http://www.secondlife.com/account/" | ||
936 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \ | ||
937 | "$INSTDIR\lsl_guide.html" | ||
938 | CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ | ||
939 | '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' | ||
940 | |||
941 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
942 | ; Other shortcuts | ||
943 | SetOutPath "$INSTDIR" | ||
944 | CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
945 | CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" | ||
946 | CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ | ||
947 | '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' | ||
948 | |||
949 | !ifdef MUSEUM | ||
950 | CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
951 | |||
952 | CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
953 | |||
954 | CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" | ||
955 | |||
956 | CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" | ||
957 | |||
958 | !endif | ||
959 | |||
960 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
961 | ; Write registry | ||
962 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" | ||
963 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" | ||
964 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" | ||
965 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" | ||
966 | WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" | ||
967 | WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" | ||
968 | WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"' | ||
969 | |||
970 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
971 | ; Write URL registry info | ||
972 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" | ||
973 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" | ||
974 | WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' | ||
975 | WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' | ||
976 | |||
977 | Goto WRITE_UNINST | ||
978 | |||
979 | POST_INSTALL: | ||
980 | ; Run a post-executable script if necessary. | ||
981 | Call PostInstallExe | ||
982 | |||
983 | WRITE_UNINST: | ||
984 | ; write out uninstaller | ||
985 | WriteUninstaller "$INSTDIR\uninst.exe" | ||
986 | |||
987 | ; end of default section | ||
988 | SectionEnd | ||
989 | |||
984 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 990 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |