diff --git a/autobuild.xml b/autobuild.xml
index ff9768828b92997fc0c10bba14c4587fe09966bd..bf52db0031a8f7e1e41c3b6fe7ec8b158efae95c 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -819,6 +819,38 @@
         <key>version</key>
         <string>0.10.6.314267</string>
       </map>
+      <key>innosetup</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1997-2023 Jordan Russell. All rights reserved.</string>
+        <key>description</key>
+        <string>Innosetup installer framework</string>
+        <key>license</key>
+        <string>MIT</string>
+        <key>license_file</key>
+        <string>LICENSES/innosetup.txt</string>
+        <key>name</key>
+        <string>innosetup</string>
+        <key>platforms</key>
+        <map>
+          <key>windows64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>46b82a3209dfa4bc6b65aa655eebdbd4ecaed1e1cc33e0a3b77d36475d5fa3ccd3fdc220c803ba91fa19b3e94b3bda2fa459cabab2620946af28f170d8aaa76c</string>
+              <key>hash_algorithm</key>
+              <string>blake2b</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/212/packages/generic/innosetup/6.2.2.2143/innosetup-6.2.2-windows64-2143.tar.zst</string>
+            </map>
+            <key>name</key>
+            <string>windows64</string>
+          </map>
+        </map>
+        <key>version</key>
+        <string>6.2.2</string>
+      </map>
       <key>jpegencoderbasic</key>
       <map>
         <key>copyright</key>
@@ -2079,38 +2111,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <key>version</key>
         <string>4.10.0000.32327.5fc3fe7c.558436</string>
       </map>
-      <key>squirrel</key>
-      <map>
-        <key>copyright</key>
-        <string>Copyright (c) 2012 GitHub, Inc.</string>
-        <key>description</key>
-        <string>Squirrel installer framework</string>
-        <key>license</key>
-        <string>MIT</string>
-        <key>license_file</key>
-        <string>LICENSES/squirrel.txt</string>
-        <key>name</key>
-        <string>squirrel</string>
-        <key>platforms</key>
-        <map>
-          <key>windows64</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>6ebc2d8934207911406aea18de8eac46bcd18cc4b6f6e2c24b936cac2d7f0abe94fc17e274f5567dc4280ace5a4e8accac658edb0cdf0623348fc72678c999cd</string>
-              <key>hash_algorithm</key>
-              <string>blake2b</string>
-              <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/197/packages/generic/squirrel/2.9.42.1850/squirrel-2.9.42-windows64-1850.tar.zst</string>
-            </map>
-            <key>name</key>
-            <string>windows64</string>
-          </map>
-        </map>
-        <key>version</key>
-        <string>2.9.42</string>
-      </map>
       <key>threejs</key>
       <map>
         <key>copyright</key>
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 222017c55fec6ba54f142a10add144ba03d0cefd..3a6784d5afee188b414b7e131f511a28b5fa9958 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -85,6 +85,68 @@ if(WINDOWS)
     if(TARGET al::discord-gamesdk)
       list(APPEND release_files discord_game_sdk.dll)
     endif()
+
+    #*******************************
+    # Copy MS C runtime dlls, required for packaging.
+    if (MSVC80)
+        set(MSVC_VER 80)
+    elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
+        MESSAGE(STATUS "MSVC_VERSION ${MSVC_VERSION}")
+    elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12
+        set(MSVC_VER 120)
+    elseif (MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) # Visual Studio 2017
+        set(MSVC_VER 140)
+    elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019
+        set(MSVC_VER 140)
+    elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) # Visual Studio 2022
+        set(MSVC_VER 140)
+    else (MSVC80)
+        MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")
+    endif (MSVC80)
+
+    if(ADDRESS_SIZE EQUAL 32)
+        # this folder contains the 32bit DLLs.. (yes really!)
+        set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64")
+    else(ADDRESS_SIZE EQUAL 32)
+        # this folder contains the 64bit DLLs.. (yes really!)
+        set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32")
+    endif(ADDRESS_SIZE EQUAL 32)
+
+    # Having a string containing the system registry path is a start, but to
+    # get CMake to actually read the registry, we must engage some other
+    # operation.
+    get_filename_component(registry_path "${registry_find_path}" ABSOLUTE)
+
+    # These are candidate DLL names. Empirically, VS versions before 2015 have
+    # msvcp*.dll and msvcr*.dll. VS 2017 has msvcp*.dll and vcruntime*.dll.
+    # Check each of them.
+    foreach(release_msvc_file
+            concrt${MSVC_VER}.dll
+            msvcp${MSVC_VER}.dll
+            msvcp${MSVC_VER}_1.dll
+            msvcp${MSVC_VER}_2.dll
+            msvcp${MSVC_VER}_atomic_wait.dll
+            msvcp${MSVC_VER}_codecvt_ids.dll
+            vccorlib${MSVC_VER}.dll
+            vcruntime${MSVC_VER}.dll
+            vcruntime${MSVC_VER}_1.dll
+            )
+        if(EXISTS "${registry_path}/${release_msvc_file}")
+            to_staging_dirs(
+                ${registry_path}
+                third_party_targets
+                ${release_msvc_file})
+        else()
+            # This isn't a WARNING because, as noted above, every VS version
+            # we've observed has only a subset of the specified DLL names.
+            MESSAGE(STATUS "Redist lib ${release_msvc_file} not found")
+        endif()
+    endforeach()
+    MESSAGE(STATUS "Will copy redist files for MSVC ${MSVC_VER}:")
+    foreach(target ${third_party_targets})
+        MESSAGE(STATUS "${target}")
+    endforeach()
+
 elseif(DARWIN)
     set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(slvoice_files SLVoice)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 92f667cb7814029cc03c049df87f48ecb8c24145..89325f65a3de4f96d3c924c9636f696d189bbf46 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -53,6 +53,10 @@ include(LLPrimitive)
 # Viewer Branding Assets
 use_prebuilt_binary(branding)
 
+if(WINDOWS)
+  use_prebuilt_binary(innosetup)
+endif()
+
 if( LLPHYSICSEXTENSIONS_SRC_DIR )
 if (NOT HAVOK_TPV)
    # When using HAVOK_TPV, the library is precompiled, so no need for this
diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
deleted file mode 100644
index 30f9349111d117a99d4af183bfb11607286239b0..0000000000000000000000000000000000000000
--- a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
-
-This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details.
-
-James Cook
-September 2008
diff --git a/indra/newview/installers/windows/install_template.iss b/indra/newview/installers/windows/install_template.iss
new file mode 100644
index 0000000000000000000000000000000000000000..18c74a43280fe62626827f76de3881d1ea920c8d
--- /dev/null
+++ b/indra/newview/installers/windows/install_template.iss
@@ -0,0 +1,109 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+;#define MyAppName "Alchemy Viewer"
+;#define MyAppNameShort "AlchemyViewer"
+;#define MyAppVersion "7.0.0.4545"
+;#define MyAppExeName "MyProg.exe"
+;#define ViewerSrcDir ""
+
+%%INST_VARS%%
+
+#define MyAppPublisher "Alchemy Development Group"
+#define MyAppURL "https://www.alchemyviewer.org"
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{564993A0-36C3-4C9C-83FA-336EAB720367}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+AppVerName={#MyAppName} {#MyAppVersion} 
+;AppVerName={#MyAppName} {#MyAppVersion}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+AppCopyright=Copyright (C) 2013-2023 {#MyAppPublisher}
+DefaultDirName={autopf}\{#MyAppNameShort}
+DisableProgramGroupPage=yes
+;LicenseFile={#ViewerSrcDir}\..\..\doc\LGPL-license.txt
+; Uncomment the following line to run in non administrative install mode (install for current user only.)
+;PrivilegesRequired=lowest
+PrivilegesRequiredOverridesAllowed=commandline
+OutputDir=.
+OutputBaseFilename={#MyAppInstFile}
+SetupIconFile={#ViewerSrcDir}\installers\windows\install_icon.ico
+Compression=lzma2
+SolidCompression=yes
+WizardStyle=modern
+ArchitecturesAllowed=x64
+ArchitecturesInstallIn64BitMode=x64
+MinVersion=10.0
+AppMutex=AlchemyAppMutex,Global\AlchemyAppMutex
+VersionInfoCompany={#MyAppPublisher}
+VersionInfoVersion={#MyAppVersion}
+DisableWelcomePage=no
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+Name: "armenian"; MessagesFile: "compiler:Languages\Armenian.isl"
+Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
+Name: "bulgarian"; MessagesFile: "compiler:Languages\Bulgarian.isl"
+Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
+Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl"
+Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
+Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
+Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
+Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
+Name: "french"; MessagesFile: "compiler:Languages\French.isl"
+Name: "german"; MessagesFile: "compiler:Languages\German.isl"
+Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
+Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
+Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl"
+Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
+Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
+Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
+Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
+Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
+Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
+Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
+Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
+Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
+Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl"
+Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
+
+[Tasks]
+Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+
+[Files]
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+%%INSTALL_FILES%%
+
+[InstallDelete]
+Type: files; Name: "{app}\app_settings"
+Type: files; Name: "{app}\llplugin"
+Type: files; Name: "{app}\skins"
+
+[Icons]
+Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
+
+[Run]
+Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
+
+[Registry]
+Root: HKA; Subkey: "Software\Classes\secondlife"; ValueType: "string"; ValueData: "URL:Second Life"; Flags: uninsdeletekey
+Root: HKA; Subkey: "Software\Classes\secondlife"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""
+Root: HKA; Subkey: "Software\Classes\secondlife\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0"
+Root: HKA; Subkey: "Software\Classes\secondlife\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1"""
+
+Root: HKA; Subkey: "Software\Classes\x-grid-info"; ValueType: "string"; ValueData: "URL:Hypergrid"; Flags: uninsdeletekey
+Root: HKA; Subkey: "Software\Classes\x-grid-info"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""
+Root: HKA; Subkey: "Software\Classes\x-grid-info\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0"
+Root: HKA; Subkey: "Software\Classes\x-grid-info\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1"""
+
+Root: HKA; Subkey: "Software\Classes\x-grid-location-info"; ValueType: "string"; ValueData: "URL:Hypergrid"; Flags: uninsdeletekey
+Root: HKA; Subkey: "Software\Classes\x-grid-location-info"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""
+Root: HKA; Subkey: "Software\Classes\x-grid-location-info\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0"
+Root: HKA; Subkey: "Software\Classes\x-grid-location-info\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1"""
\ No newline at end of file
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
deleted file mode 100644
index c782c901c37d4fb4b38fc7470f06a3467295694e..0000000000000000000000000000000000000000
--- a/indra/newview/installers/windows/installer_template.nsi
+++ /dev/null
@@ -1,868 +0,0 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Second Life setup.nsi
-;; Copyright 2004-2015, Linden Research, Inc.
-;;
-;; This library is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU Lesser General Public
-;; License as published by the Free Software Foundation;
-;; version 2.1 of the License only.
-;;
-;; This library is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; Lesser General Public License for more details.
-;;
-;; You should have received a copy of the GNU Lesser General Public
-;; License along with this library; if not, write to the Free Software
-;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-;;
-;; Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-;;
-;; NSIS 3 or higher required for Unicode support
-;;
-;; Author: James Cook, TankMaster Finesmith, Don Kjer, Callum Prentice
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Compiler flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Unicode true
-SetOverwrite on				# Overwrite files
-SetCompress auto			# Compress if saves space
-SetCompressor /solid lzma	# Compress whole installer as one block
-SetDatablockOptimize off	# Only saves us 0.1%, not worth it
-XPStyle on                  # Add an XP manifest to the installer
-RequestExecutionLevel admin	# For when we write to Program Files
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Project flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-# This placeholder is replaced by viewer_manifest.py
-%%VERSION%%
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; - language files - one for each language (or flavor thereof)
-;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the 
-;; application directory so we have to add a path to these include files)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Ansariel notes: "Under certain circumstances the installer will fall back
-;; to the first defined (aka default) language version. So you want to include
-;; en-us as first language file."
-!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
-
-# Danish and Polish no longer supported by the viewer itself
-##!include "%%SOURCE%%\installers\windows\lang_da.nsi"
-!include "%%SOURCE%%\installers\windows\lang_de.nsi"
-!include "%%SOURCE%%\installers\windows\lang_es.nsi"
-!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
-!include "%%SOURCE%%\installers\windows\lang_it.nsi"
-##!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ru.nsi"
-!include "%%SOURCE%%\installers\windows\lang_tr.nsi"
-!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
-
-# *TODO: Move these into the language files themselves
-##LangString LanguageCode ${LANG_DANISH}   "da"
-LangString LanguageCode ${LANG_GERMAN}   "de"
-LangString LanguageCode ${LANG_ENGLISH}  "en"
-LangString LanguageCode ${LANG_SPANISH}  "es"
-LangString LanguageCode ${LANG_FRENCH}   "fr"
-LangString LanguageCode ${LANG_JAPANESE} "ja"
-LangString LanguageCode ${LANG_ITALIAN}  "it"
-##LangString LanguageCode ${LANG_POLISH}   "pl"
-LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
-LangString LanguageCode ${LANG_RUSSIAN}  "ru"
-LangString LanguageCode ${LANG_TURKISH}  "tr"
-LangString LanguageCode ${LANG_TRADCHINESE}  "zh"
-
-# This placeholder is replaced by viewer_manifest.py
-%%INST_VARS%%
-
-Name ${INSTNAME}
-
-SubCaption 0 $(LicenseSubTitleSetup)	# Override "license agreement" text
-
-!define MUI_ICON   "%%SOURCE%%\installers\windows\install_icon.ico"
-!define MUI_UNICON "%%SOURCE%%\installers\windows\uninstall_icon.ico"
-
-BrandingText " "						# Bottom of window text
-Icon          "${MUI_ICON}"
-UninstallIcon "${MUI_UNICON}"
-WindowIcon on							# Show our icon in left corner
-BGGradient off							# No big background window
-CRCCheck on								# Make sure CRC is OK
-InstProgressFlags smooth colored		# New colored smooth look
-SetOverwrite on							# Overwrite files by default
-AutoCloseWindow true					# After all files install, close window
-
-# Registry key paths, ours and Microsoft's
-!define LINDEN_KEY      "SOFTWARE\Alchemy Development Group"
-!define INSTNAME_KEY    "${LINDEN_KEY}\${INSTNAME}"
-!define MSCURRVER_KEY   "SOFTWARE\Microsoft\Windows\CurrentVersion"
-!define MSNTCURRVER_KEY "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
-!define MSUNINSTALL_KEY "${MSCURRVER_KEY}\Uninstall\${INSTNAME}"
-
-# from http://nsis.sourceforge.net/Docs/MultiUser/Readme.html
-### Highest level permitted for user: Admin for Admin, Standard for Standard
-##!define MULTIUSER_EXECUTIONLEVEL Highest
-!define MULTIUSER_EXECUTIONLEVEL Admin
-!define MULTIUSER_MUI
-### Look for /AllUsers or /CurrentUser switches
-##!define MULTIUSER_INSTALLMODE_COMMANDLINE
-# appended to $PROGRAMFILES, as affected by MULTIUSER_USE_PROGRAMFILES64
-!define MULTIUSER_INSTALLMODE_INSTDIR "${INSTNAME}"
-# expands to !define MULTIUSER_USE_PROGRAMFILES64 or nothing
-%%PROGRAMFILES%%
-# should make MultiUser.nsh initialization read existing INSTDIR from registry
-## SL-10506: don't
-##!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${INSTNAME_KEY}"
-##!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME ""
-# Don't set MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY and
-# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME to cause the installer to
-# write $MultiUser.InstallMode to the registry, because when the user installs
-# multiple viewers with the same channel (same ${INSTNAME}, hence same
-# ${INSTNAME_KEY}), the registry entry is overwritten. Instead we'll write a
-# little file into the install directory -- see .onInstSuccess and un.onInit.
-!include MultiUser.nsh
-!include MUI2.nsh
-!define MUI_BGCOLOR FFFFFF
-!insertmacro MUI_FUNCTION_GUIINIT
-
-UninstallText $(UninstallTextMsg)
-DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
-##!insertmacro MULTIUSER_PAGE_INSTALLMODE
-!define MUI_PAGE_CUSTOMFUNCTION_PRE dirPre
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Var INSTNAME
-Var INSTEXE
-Var VIEWER_EXE
-Var INSTSHORTCUT
-Var COMMANDLINE         # Command line passed to this installer, set in .onInit
-Var SHORTCUT_LANG_PARAM # "--set InstallLanguage de", Passes language to viewer
-Var SKIP_DIALOGS        # Set from command line in  .onInit. autoinstall GUI and the defaults.
-Var SKIP_AUTORUN		# Skip automatic launch of the viewer after install
-
-# Function definitions should go before file includes, because calls to
-# DLLs like LangDLL trigger an implicit file include, so if that call is at
-# the end of this script NSIS has to decompress the whole installer before 
-# it can call the DLL function. JC
-
-!include "FileFunc.nsh"     # For GetParameters, GetOptions
-!insertmacro GetParameters
-!insertmacro GetOptions
-!include WinVer.nsh			# For OS and SP detection
-!include 'LogicLib.nsh'     # for value comparison
-!include "x64.nsh"			# for 64bit detection
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Pre-directory page callback
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function dirPre
-    StrCmp $SKIP_DIALOGS "true" 0 +2
-	Abort
-
-FunctionEnd    
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Prep Installer Section
-;;
-;; Note: to add new languages, add a language file include to the list 
-;; at the top of this file, add an entry to the menu and then add an 
-;; entry to the language ID selector below
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInit
-!insertmacro MULTIUSER_INIT
-
-%%ENGAGEREGISTRY%%
-
-# SL-10506: Setting MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY and
-# MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME should
-# read the current location of the install for this version into INSTDIR.
-# However, SL-10506 complains about the resulting behavior, so the logic below
-# is adapted from before we introduced MultiUser.nsh.
-
-# if $0 is empty, this is the first time for this viewer name
-ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" ""
-
-# viewer with this name was installed before
-${If} $0 != ""
-	# use the value we got from registry as install location
-    StrCpy $INSTDIR $0
-${EndIf}
-
-Call CheckCPUFlags							# Make sure we have SSE2 support
-Call CheckWindowsVersion					# Don't install On unsupported systems
-    Push $0
-    ${GetParameters} $COMMANDLINE			# Get our command line
-
-    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
-    IfErrors +2 0	# If error jump past setting SKIP_DIALOGS
-        StrCpy $SKIP_DIALOGS "true"
-
-	${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0
-	IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN
-		StrCpy $SKIP_AUTORUN "true"
-
-    ${GetOptions} $COMMANDLINE "/LANGID=" $0	# /LANGID=1033 implies US English
-
-# If no language (error), then proceed
-    IfErrors lbl_configure_default_lang
-# No error means we got a language, so use it
-    StrCpy $LANGUAGE $0
-    Goto lbl_return
-
-lbl_configure_default_lang:
-# If we currently have a version of SL installed, default to the language of that install
-# Otherwise don't change $LANGUAGE and it will default to the OS UI language.
-    ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage"
-    IfErrors +2 0	# If error skip the copy instruction 
-	StrCpy $LANGUAGE $0
-
-# For silent installs, no language prompt, use default
-    IfSilent 0 +3
-    StrCpy $SKIP_AUTORUN "true"
-    Goto lbl_return
-    StrCmp $SKIP_DIALOGS "true" lbl_return
-  
-	Push ""
-# Use separate file so labels can be UTF-16 but we can still merge changes into this ASCII file. JC
-    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
-    
-	Push A	# A means auto count languages for the auto count to work the first empty push (Push "") must remain
-	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
-	Pop $0
-	StrCmp $0 "cancel" 0 +2
-		Abort
-    StrCpy $LANGUAGE $0
-
-# Save language in registry		
-	WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage" $LANGUAGE
-lbl_return:
-    Pop $0
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Prep Uninstaller Section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.onInit
-    # Save $INSTDIR -- it appears to have the correct value before
-    # MULTIUSER_UNINIT, but then gets munged by MULTIUSER_UNINIT?!
-    Push $INSTDIR
-    !insertmacro MULTIUSER_UNINIT
-    Pop $INSTDIR
-
-    # Now read InstallMode.txt from $INSTDIR
-    Push $0
-    ClearErrors
-    FileOpen $0 "$INSTDIR\InstallMode.txt" r
-    IfErrors skipread
-    FileRead $0 $MultiUser.InstallMode
-    FileClose $0
-skipread:
-    Pop $0
-
-%%ENGAGEREGISTRY%%
-
-# Read language from registry and set for uninstaller. Key will be removed on successful uninstall
-	ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage"
-    IfErrors lbl_end
-	StrCpy $LANGUAGE $0
-lbl_end:
-
-##  MessageBox MB_OK "After restoring:$\n$$INSTDIR = '$INSTDIR'$\n$$MultiUser.InstallMode = '$MultiUser.InstallMode'$\n$$LANGUAGE = '$LANGUAGE'"
-
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Checks for CPU valid (must have SSE2 support)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckCPUFlags
-    Push $1
-    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
-    IntCmp $1 1 OK_SSE2
-    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2
-    Quit
-
-  OK_SSE2:
-    Pop $1
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure this computer meets the minimum system requirements.
-;; Currently: Windows Vista SP2
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckWindowsVersion
-  ${If} ${AtMostWin2003}
-    MessageBox MB_OK $(CheckWindowsVersionMB)
-    Quit
-  ${EndIf}
-
-  ${If} ${IsWinVista}
-  ${AndIfNot} ${IsServicePack} 2
-    MessageBox MB_OK $(CheckWindowsVersionMB)
-    Quit
-  ${EndIf}
-
-  ${If} ${IsWin2008}
-  ${AndIfNot} ${IsServicePack} 2
-    MessageBox MB_OK $(CheckWindowsVersionMB)
-    Quit
-  ${EndIf}
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Install Section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section ""
-
-# SetShellVarContext is set by MultiUser.nsh initialization.
-
-# Start with some default values.
-StrCpy $INSTNAME "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $VIEWER_EXE "${VIEWER_EXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-
-Call CheckIfAdministrator		# Make sure the user can install/uninstall
-Call CloseSecondLife			# Make sure Second Life not currently running
-
-ClearErrors
-
-INSTALL_FILES_START:
-
-Call RemoveProgFilesOnInst		# Remove existing files to prevent certain errors when running the new version of the viewer
-
-# This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
-%%INSTALL_FILES%%
-
-IfErrors 0 INSTALL_FILES_DONE
-  StrCmp $SKIP_DIALOGS "true" INSTALL_FILES_DONE
-	MessageBox MB_ABORTRETRYIGNORE $(ErrorSecondLifeInstallRetry) IDABORT INSTALL_FILES_CANCEL IDRETRY INSTALL_FILES_START
-    # MB_ABORTRETRYIGNORE does not accept IDIGNORE
-    Goto INSTALL_FILES_DONE
-
-INSTALL_FILES_CANCEL:
-  # We are quiting, cleanup.
-  # Silence warnings from RemoveProgFilesOnInst.
-  StrCpy $SKIP_DIALOGS "true"
-  Call RemoveProgFilesOnInst
-  MessageBox MB_OK $(ErrorSecondLifeInstallSupport)
-  Quit
-
-INSTALL_FILES_DONE:
-
-# Pass the installer's language to the client to use as a default
-StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
-
-# Shortcuts in start menu
-CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
-SetOutPath "$INSTDIR"
-CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
-				"$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE"
-
-
-WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
-				"InternetShortcut" "URL" \
-				"http://join.secondlife.com/"
-WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
-				"InternetShortcut" "URL" \
-				"http://www.secondlife.com/account/"
-WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
-				"InternetShortcut" "URL" \
-                "http://wiki.secondlife.com/wiki/LSL_Portal"
-CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
-				'"$INSTDIR\uninst.exe"' ''
-
-# Other shortcuts
-SetOutPath "$INSTDIR"
-CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
-        "$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE"
-CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
-        "$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE"
-CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
-				'"$INSTDIR\uninst.exe"' ''
-
-# Write registry
-WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "" "$INSTDIR"
-WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Version" "${VERSION_LONG}"
-WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Shortcut" "$INSTSHORTCUT"
-WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Exe" "$VIEWER_EXE"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "Publisher" "Alchemy Development Group"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLInfoAbout" "https://alchemyviewer.org/pages/about.html"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLUpdateInfo" "https://alchemyviewer.org/pages/downloads.html"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "HelpLink" "https://alchemyviewer.org/"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayName" "$INSTNAME"
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"'
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayVersion" "${VERSION_LONG}"
-WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x0001D500"		# ~117 MB
-
-# from FS:Ansariel
-WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayIcon" '"$INSTDIR\$VIEWER_EXE"'
-
-# Write URL registry info
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"'
-
-# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
-# MAINT-8305: On SLURL click, directly invoke the viewer, not the launcher.
-WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"'
-
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-info" "(default)" "URL:Hypergrid"
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-info" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-info\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"'
-
-# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"'
-
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "(default)" "URL:Hypergrid"
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"'
-
-# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"'
-
-WriteRegStr HKEY_CLASSES_ROOT "Applications\$INSTEXE" "IsHostApp" ""
-##WriteRegStr HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}" "NoStartPage" ""
-
-# Write out uninstaller
-WriteUninstaller "$INSTDIR\uninst.exe"
-
-SectionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Uninstall Section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section Uninstall
-
-# Start with some default values.
-StrCpy $INSTNAME "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $VIEWER_EXE "${VIEWER_EXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-
-# SetShellVarContext per the mode saved at install time in registry at
-# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY
-# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME
-# Couldn't get NSIS to expand $MultiUser.InstallMode into the function name at Call time
-${If} $MultiUser.InstallMode == 'AllUsers'
-##MessageBox MB_OK "Uninstalling for all users"
-  Call un.MultiUser.InstallMode.AllUsers
-${Else}
-##MessageBox MB_OK "Uninstalling for current user"
-  Call un.MultiUser.InstallMode.CurrentUser
-${EndIf}
-
-# Make sure we're not running
-Call un.CloseSecondLife
-
-# Clean up registry keys and subkeys (these should all be !defines somewhere)
-DeleteRegKey SHELL_CONTEXT "${INSTNAME_KEY}"
-DeleteRegKey SHELL_CONTEXT "${MSCURRVER_KEY}\Uninstall\$INSTNAME"
-# BUG-2707 Remove entry that disabled SEHOP
-DeleteRegKey SHELL_CONTEXT "${MSNTCURRVER_KEY}\Image File Execution Options\$VIEWER_EXE"
-DeleteRegKey HKEY_CLASSES_ROOT "Applications\$INSTEXE"
-DeleteRegKey HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}"
-
-# Clean up shortcuts
-Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
-RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
-
-Delete "$DESKTOP\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
-
-# Remove the main installation directory
-Call un.ProgramFiles
-
-# Clean up cache and log files, but leave them in-place for non AGNI installs.
-Call un.UserSettingsFiles
-
-SectionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure the user can install
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckIfAdministrator
-    DetailPrint $(CheckAdministratorInstDP)
-    UserInfo::GetAccountType
-    Pop $R0
-    StrCmp $R0 "Admin" lbl_is_admin
-        MessageBox MB_OK $(CheckAdministratorInstMB)
-        Quit
-lbl_is_admin:
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Close the program, if running. Modifies no variables.
-;; Allows user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CloseSecondLife
-  Push $0
-  FindWindow $0 "Alchemy" ""
-  IntCmp $0 0 DONE
-  
-  StrCmp $SKIP_DIALOGS "true" CLOSE
-    MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
-
-  CANCEL_INSTALL:
-    Quit
-
-  CLOSE:
-    DetailPrint $(CloseSecondLifeInstDP)
-    SendMessage $0 16 0 0
-
-  LOOP:
-	  FindWindow $0 "Alchemy" ""
-	  IntCmp $0 0 SLEEP
-	  Sleep 500
-	  Goto LOOP
-	  
-  SLEEP:
-    # Second life window just closed, but program might not be fully done yet
-    # and OS might have not released some locks, wait a bit more to make sure
-    # all file handles were released.
-	# If something still isn't unlocked, it will trigger a notification from
-	# RemoveProgFilesOnInst
-    Sleep 1000
-  DONE:
-    Pop $0
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Close the program, if running. Modifies no variables.
-;; Allows user to bail out of uninstall process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CloseSecondLife
-  Push $0
-  FindWindow $0 "Alchemy" ""
-  IntCmp $0 0 DONE
-  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
-
-  CANCEL_UNINSTALL:
-    Quit
-
-  CLOSE:
-    DetailPrint $(CloseSecondLifeUnInstDP)
-    SendMessage $0 16 0 0
-
-  LOOP:
-	  FindWindow $0 "Alchemy" ""
-	  IntCmp $0 0 DONE
-	  Sleep 500
-	  Goto LOOP
-
-  DONE:
-    Pop $0
-    Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Delete files on install if previous install exists to prevent undesired behavior
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveProgFilesOnInst
-
-# We do not remove whole pervious install folder on install, since
-# there is a chance that viewer was installed into some important
-# folder by intent or accident
-# RMDir /r $INSTDIR is especially unsafe if user installed somewhere
-# like Program Files
-
-# Set retry counter. All integers are strings.
-Push $0
-StrCpy $0 0
-
-ClearErrors
-
-PREINSTALL_REMOVE:
-
-# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575
-Delete "$INSTDIR\$INSTEXE"
-Delete "$INSTDIR\$VIEWER_EXE"
-
-# Remove old shader files first so fallbacks will work. See DEV-5663
-RMDir /r "$INSTDIR\app_settings\shaders"
-
-# Remove folders to clean up files removed during development
-RMDir /r "$INSTDIR\app_settings"
-RMDir /r "$INSTDIR\skins"
-RMDir /r "$INSTDIR\vmp_icons"
-
-# Remove llplugin, plugins can crash or malfunction if they
-# find modules from different versions
-RMDir /r "$INSTDIR\llplugin"
-
-IntOp $0 $0 + 1
-
-IfErrors 0 PREINSTALL_DONE
-  IntCmp $0 1 PREINSTALL_REMOVE #try again once
-    StrCmp $SKIP_DIALOGS "true" PREINSTALL_DONE
-      MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALL_FAIL IDRETRY PREINSTALL_REMOVE
-      # MB_ABORTRETRYIGNORE does not accept IDIGNORE
-      Goto PREINSTALL_DONE
-
-PREINSTALL_FAIL:
-    Quit
-
-PREINSTALL_DONE:
-
-# We are no longer including release notes with the viewer, so remove them.
-Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
-Delete "$INSTDIR\releasenotes.txt"
-
-Pop $0
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Delete files in \Users\<User>\AppData\
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.UserSettingsFiles
-
-# Ask if user wants to keep data files or not
-MessageBox MB_YESNO|MB_ICONQUESTION $(RemoveDataFilesMB) IDYES Remove IDNO Keep
-
-Remove:
-Push $0
-Push $1
-Push $2
-
-  DetailPrint "Deleting Alchemy data files"
-
-  StrCpy $0 0	# Index number used to iterate via EnumRegKey
-
-  LOOP:
-    EnumRegKey $1 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList" $0
-    StrCmp $1 "" DONE               # No more users
-
-    ReadRegStr $2 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList\$1" "ProfileImagePath" 
-    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
-
-# Required since ProfileImagePath is of type REG_EXPAND_SZ
-    ExpandEnvStrings $2 $2
-
-# Delete files in \Users\<User>\AppData\Roaming\AlchemyNext
-# Remove all settings files but leave any other .txt files to preserve the chat logs
-;    RMDir /r "$2\AppData\Roaming\AlchemyNext\logs"
-    RMDir /r "$2\AppData\Roaming\AlchemyNext\browser_profile"
-    RMDir /r "$2\AppData\Roaming\AlchemyNext\user_settings"
-    Delete  "$2\AppData\Roaming\AlchemyNext\*.xml"
-    Delete  "$2\AppData\Roaming\AlchemyNext\*.bmp"
-    Delete  "$2\AppData\Roaming\AlchemyNext\search_history.txt"
-    Delete  "$2\AppData\Roaming\AlchemyNext\plugin_cookies.txt"
-    Delete  "$2\AppData\Roaming\AlchemyNext\typed_locations.txt"
-# Delete files in \Users\<User>\AppData\Local\AlchemyNext
-    RmDir /r  "$2\AppData\Local\AlchemyNext"							#Delete the cache folder
-
-  CONTINUE:
-    IntOp $0 $0 + 1
-    Goto LOOP
-  DONE:
-
-Pop $2
-Pop $1
-Pop $0
-
-# Delete files in ProgramData\Secondlife
-Push $0
-  ReadRegStr $0 SHELL_CONTEXT "${MSCURRVER_KEY}\Explorer\Shell Folders" "Common AppData"
-  StrCmp $0 "" +2
-  RMDir /r "$0\Alchemy"
-Pop $0
-
-Keep:
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Delete the installed files
-;; This deletes the uninstall executable, but it works because it is copied to temp directory before running
-;;
-;; Note:  You must list all files here, because we only want to delete our files,
-;; not things users left in the program directory.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.ProgramFiles
-
-# This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
-%%DELETE_FILES%%
-
-# our InstallMode.txt
-Delete "$INSTDIR\InstallMode.txt"
-
-# Optional/obsolete files.  Delete won't fail if they don't exist.
-Delete "$INSTDIR\autorun.bat"
-Delete "$INSTDIR\dronesettings.ini"
-Delete "$INSTDIR\message_template.msg"
-Delete "$INSTDIR\newview.pdb"
-Delete "$INSTDIR\newview.map"
-Delete "$INSTDIR\Alchemy.pdb"
-Delete "$INSTDIR\Alchemy.map"
-Delete "$INSTDIR\comm.dat"
-Delete "$INSTDIR\*.glsl"
-Delete "$INSTDIR\motions\*.lla"
-Delete "$INSTDIR\trial\*.html"
-Delete "$INSTDIR\newview.exe"
-Delete "$INSTDIR\Alchemy.exe"
-
-# MAINT-3099 workaround - prevent these log files, if present, from causing a user alert
-Delete "$INSTDIR\VivoxVoiceService-*.log"
-
-# Remove entire help directory
-RMDir /r  "$INSTDIR\help"
-
-Delete "$INSTDIR\uninst.exe"
-RMDir "$INSTDIR"
-
-IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
-
-FOLDERFOUND:
-  MessageBox MB_OK $(DeleteProgramFilesMB) /SD IDOK IDOK NOFOLDER
-
-NOFOLDER:
-
-MessageBox MB_YESNO $(DeleteRegistryKeysMB) IDYES DeleteKeys IDNO NoDelete
-
-DeleteKeys:
-  DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\x-grid-location-info"
-  DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\secondlife"
-  DeleteRegKey HKEY_CLASSES_ROOT "x-grid-location-info"
-  DeleteRegKey HKEY_CLASSES_ROOT "x-grid-info"
-  DeleteRegKey HKEY_CLASSES_ROOT "secondlife"
-
-NoDelete:
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; After install completes, launch app
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInstSuccess
-        Push $0
-        FileOpen $0 "$INSTDIR\InstallMode.txt" w
-        # No newline -- this is for our use, not for users to read.
-        FileWrite $0 "$MultiUser.InstallMode"
-        FileClose $0
-        Pop $0
-
-        Push $R0
-        Push $0
-        ;; MAINT-7812: Only write nsis.winstall file with /marker switch
-        ${GetParameters} $R0
-        ${GetOptionsS} $R0 "/marker" $0
-        ;; If no /marker switch, skip to ClearErrors
-        IfErrors +4 0
-        ;; $EXEDIR is where we find the installer file
-        ;; Put a marker file there so VMP will know we're done
-        ;; and it can delete the download directory next time.
-        ;; http://nsis.sourceforge.net/Write_text_to_a_file
-        FileOpen $0 "$EXEDIR\nsis.winstall" w
-        FileWrite $0 "NSIS done$\n"
-        FileClose $0
-
-        ClearErrors
-        Pop $0
-        Pop $R0
-
-        Call CheckWindowsServPack		# Warn if not on the latest SP before asking to launch.
-        StrCmp $SKIP_AUTORUN "true" +2;
-        # Assumes SetOutPath $INSTDIR
-        # Run INSTEXE (our updater), passing VIEWER_EXE plus the command-line
-        # arguments built into our shortcuts. This gives the updater a chance
-        # to verify that the viewer we just installed is appropriate for the
-        # running system -- or, if not, to download and install a different
-        # viewer. For instance, if a user running 32-bit Windows installs a
-        # 64-bit viewer, it cannot run on this system. But since the updater
-        # is a 32-bit executable even in the 64-bit viewer package, the
-        # updater can detect the problem and adapt accordingly.
-        # Once everything is in order, the updater will run the specified
-        # viewer with the specified params.
-        # Quote the updater executable and the viewer executable because each
-        # must be a distinct command-line token, but DO NOT quote the language
-        # string because it must decompose into separate command-line tokens.
-        Exec '"$INSTDIR\$INSTEXE" precheck "$INSTDIR\$VIEWER_EXE" $SHORTCUT_LANG_PARAM'
-# 
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Recommend Upgrading to Service Pack 1 for Windows 7, if not present
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckWindowsServPack
-  ${If} ${IsWin7}
-  ${AndIfNot} ${IsServicePack} 1
-    MessageBox MB_OK $(CheckWindowsServPackMB)
-    DetailPrint $(UseLatestServPackDP)
-    Return
-  ${EndIf}
-
-  ${If} ${IsWin2008R2}
-  ${AndIfNot} ${IsServicePack} 1
-    MessageBox MB_OK $(CheckWindowsServPackMB)
-    DetailPrint $(UseLatestServPackDP)
-    Return
-  ${EndIf}
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Clobber user files - TEST ONLY
-;; This is here for testing, DO NOT USE UNLESS YOU KNOW WHAT YOU ARE TESTING FOR!
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;Function ClobberUserFilesTESTONLY
-
-;Push $0
-;Push $1
-;Push $2
-;
-;    StrCpy $0 0	# Index number used to iterate via EnumRegKey
-;
-;  LOOP:
-;    EnumRegKey $1 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList" $0
-;    StrCmp $1 "" DONE               # no more users
-;
-;    ReadRegStr $2 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList\$1" "ProfileImagePath"
-;    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
-;
-;# Required since ProfileImagePath is of type REG_EXPAND_SZ
-;    ExpandEnvStrings $2 $2
-;
-;    RMDir /r "$2\Application Data\SecondLife\"
-;
-;  CONTINUE:
-;    IntOp $0 $0 + 1
-;    Goto LOOP
-;  DONE:
-;
-;Pop $2
-;Pop $1
-;Pop $0
-;
-;# Copy files in Documents and Settings\All Users\SecondLife
-;Push $0
-;    ReadRegStr $0 SHELL_CONTEXT "${MSCURRVER_KEY}\Explorer\Shell Folders" "Common AppData"
-;    StrCmp $0 "" +2
-;    RMDir /r "$2\Application Data\SecondLife\"
-;Pop $0
-;
-;FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi
deleted file mode 100644
index 73f23086be22efa016f61757a0246ad56a929a6c..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_da.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi
deleted file mode 100644
index f67a09f84c6f81d44099fcfab04729e8af9e0850..0000000000000000000000000000000000000000
--- a/indra/newview/installers/windows/lang_de.nsi
+++ /dev/null
@@ -1,90 +0,0 @@
-; First is default
-LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf"
-
-; Language selection dialog
-LangString InstallerLanguageTitle  ${LANG_GERMAN} "Installationssprache"
-LangString SelectInstallerLanguage  ${LANG_GERMAN} "Bitte wählen Sie die Installationssprache"
-
-; subtitle on license text caption (setup new version or update current one
-LangString LicenseSubTitleUpdate ${LANG_GERMAN} " Update"
-LangString LicenseSubTitleSetup ${LANG_GERMAN} " Setup"
-
-LangString MULTIUSER_TEXT_INSTALLMODE_TITLE ${LANG_GERMAN} "Installationsmodus"
-LangString MULTIUSER_TEXT_INSTALLMODE_SUBTITLE ${LANG_GERMAN} "Für alle Benutzer (erfordert Administratorrechte) oder nur für den aktuellen Benutzer installieren?"
-LangString MULTIUSER_INNERTEXT_INSTALLMODE_TOP ${LANG_GERMAN} "Wenn Sie dieses Installationsprogram mit Administratorrechten ausführen, können Sie auswählen, ob die Installation (beispielsweise) in c:\Programme oder unter AppData\Lokaler Ordner des aktuellen Benutzers erfolgen soll."
-LangString MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS ${LANG_GERMAN} "Für alle Benutzer installieren"
-LangString MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER ${LANG_GERMAN} "Nur für den aktuellen Benutzer installieren"
-
-; installation directory text
-LangString DirectoryChooseTitle ${LANG_GERMAN} "Installations-Ordner"
-LangString DirectoryChooseUpdate ${LANG_GERMAN} "Wählen Sie den Second Life Ordner für dieses Update:"
-LangString DirectoryChooseSetup ${LANG_GERMAN} "Pfad in dem Second Life installiert werden soll:"
-
-LangString MUI_TEXT_DIRECTORY_TITLE ${LANG_GERMAN} "Installationsverzeichnis"
-LangString MUI_TEXT_DIRECTORY_SUBTITLE ${LANG_GERMAN} "Wählen Sie das Verzeichnis aus, in dem Second Life installiert werden soll:"
-
-LangString MUI_TEXT_INSTALLING_TITLE ${LANG_GERMAN} "Second Life wird installiert..."
-LangString MUI_TEXT_INSTALLING_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wird im Verzeichnis $INSTDIR installiert"
-
-LangString MUI_TEXT_FINISH_TITLE ${LANG_GERMAN} "Second Life wird installiert"
-LangString MUI_TEXT_FINISH_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wurde im Verzeichnis $INSTDIR installiert."
-
-LangString MUI_TEXT_ABORT_TITLE ${LANG_GERMAN} "Installation abgebrochen"
-LangString MUI_TEXT_ABORT_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wird nicht im Verzeichnis $INSTDIR installiert."
-
-; CheckStartupParams message box
-LangString CheckStartupParamsMB ${LANG_GERMAN} "Konnte Programm '$INSTNAME' nicht finden. Stilles Update fehlgeschlagen."
-
-; installation success dialog
-LangString InstSuccesssQuestion ${LANG_GERMAN} "Second Life starten?"
-
-; remove old NSIS version
-LangString RemoveOldNSISVersion ${LANG_GERMAN} "Überprüfe alte Version ..."
-
-; check windows version
-LangString CheckWindowsVersionDP ${LANG_GERMAN} "Überprüfung der Windows Version ..."
-LangString CheckWindowsVersionMB ${LANG_GERMAN} 'Second Life unterstützt nur Windows Vista.$\n$\nDer Versuch es auf Windows $R0 zu installieren, könnte zu unvorhersehbaren Abstürzen und Datenverlust führen.$\n$\nTrotzdem installieren?'
-LangString CheckWindowsServPackMB ${LANG_GERMAN} "Wir empfehlen, das neueste Service Pack für Ihr Betriebssystem zu installieren, um Second Life auszuführen.$\nDies unterstützt die Leistung und Stabilität des Programms."
-LangString UseLatestServPackDP ${LANG_GERMAN} "Bitte verwenden Sie Windows Update, um das neueste Service Pack zu installieren."
-
-; checkifadministrator function (install)
-LangString CheckAdministratorInstDP ${LANG_GERMAN} "Überprüfung der Installations-Berechtigungen ..."
-LangString CheckAdministratorInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life installieren zu können.'
-
-; checkifadministrator function (uninstall)
-LangString CheckAdministratorUnInstDP ${LANG_GERMAN} "Überprüfung der Entfernungs-Berechtigungen ..."
-LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life entfernen zu können..'
-
-; checkifalreadycurrent
-LangString CheckIfCurrentMB ${LANG_GERMAN} "Anscheinend ist Second Life ${VERSION_LONG} bereits installiert.$\n$\nWürden Sie es gerne erneut installieren?"
-
-; checkcpuflags
-LangString MissingSSE2 ${LANG_GERMAN} "Dieses Gerät verfügt möglicherweise nicht über eine CPU mit SSE2-Unterstützung, die für Second Life ${VERSION_LONG} benötigt wird. Möchten Sie fortfahren?"
-
-; closesecondlife function (install)
-LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..."
-LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Second Life kann nicht installiert oder ersetzt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um die Installation abzubrechen."
-LangString CloseSecondLifeInstRM ${LANG_GERMAN} "Second Life failed to remove some files from a previous install."
-
-; closesecondlife function (uninstall)
-LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..."
-LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Second Life kann nicht entfernt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um abzubrechen."
-
-; CheckNetworkConnection
-LangString CheckNetworkConnectionDP ${LANG_GERMAN} "Prüfe Netzwerkverbindung..."
-
-; error during installation
-LangString ErrorSecondLifeInstallRetry ${LANG_GERMAN} "Second Life konnte nicht korrekt installiert werden, einige Dateien wurden eventuell nicht korrekt von der Installationroutine kopiert."
-LangString ErrorSecondLifeInstallSupport ${LANG_GERMAN} "Bitte laden Sie den Viewer erneut von https://secondlife.com/support/downloads/ und versuchen Sie die Installation erneut. Sollte das Problem weiterhin bestehen, dann kontaktieren Sie unseren Support unter https://support.secondlife.com."
-
-; ask to remove user's data files
-LangString RemoveDataFilesMB ${LANG_GERMAN} "Möchten Sie alle anderen zu Second Life gehörigen Dateien ebenfalls ENTFERNEN?$\n$\nWir empfehlen, die Einstellungen und Cache-Dateien zu behalten, wenn Sie andere Versionen von Second Life installiert haben oder eine Deinstallation durchführen, um Second Life auf eine neuere Version zu aktualisieren."
-
-; delete program files
-LangString DeleteProgramFilesMB ${LANG_GERMAN} "Es existieren weiterhin Dateien in Ihrem SecondLife Programm Ordner.$\n$\nDies sind möglicherweise Dateien, die sie modifiziert oder bewegt haben:$\n$INSTDIR$\n$\nMöchten Sie diese ebenfalls löschen?"
-
-; uninstall text
-LangString UninstallTextMsg ${LANG_GERMAN} "Dies wird Second Life ${VERSION_LONG} von Ihrem System entfernen."
-
-; ask to remove registry keys that still might be needed by other viewers that are installed
-LangString DeleteRegistryKeysMB ${LANG_GERMAN} "Möchten Sie die Registrierungsschlüssel der Anwendung entfernen?$\n$\nWir empfehlen, die Registrierungsschlüssel zu behalten, wenn Sie andere Versionen von Second Life installiert haben."
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
deleted file mode 100644
index 9d00f1b4c0c2389604174f9343cf20fccea9288f..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_en-us.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi
deleted file mode 100644
index 364cc9f67e2f9aa7b05498d848d38b56ab22e429..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_es.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi
deleted file mode 100644
index 2f34c0c87a1552dd0632baf63dd53cc9bf1edf7b..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_fr.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi
deleted file mode 100644
index 51214d3a9ce88d5a594a6ab02ea3b8f4b09af8e2..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_it.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi
deleted file mode 100644
index 296703d1a3e94080fe18709d1e5ac3031887cde7..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_ja.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi
deleted file mode 100644
index 299645bbb78010298d43366cfa5dd3299081a096..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_pl.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi
deleted file mode 100644
index 542c8654b5bffbe4d6f57a90c878c329ce7eb997..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_pt-br.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi
deleted file mode 100644
index 4e53a4957d49d2cf9b11df0b1ac0849a3101dfaa..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_ru.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi
deleted file mode 100644
index bae5029ad1ce56a2fd347c95de656848400c052e..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_tr.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
deleted file mode 100644
index 7922d9df5228d652bf08955f00c0eb62b6794965..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/lang_zh.nsi and /dev/null differ
diff --git a/indra/newview/installers/windows/language_menu.nsi b/indra/newview/installers/windows/language_menu.nsi
deleted file mode 100644
index 2f426a0f47c92aac0b8e17441243802da7ab79e7..0000000000000000000000000000000000000000
Binary files a/indra/newview/installers/windows/language_menu.nsi and /dev/null differ
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 47dad6cacf212d67e4a976ea59bd4b84dfb45190..fb126caed380a62e72d61b27880cb084ef74f063 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -471,6 +471,18 @@ def construct(self):
                 else:
                     self.path(src="fmod.dll", dst="fmod.dll")
 
+            # These need to be installed as a SxS assembly, currently a 'private' assembly.
+            # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
+            self.path("concrt140.dll")
+            self.path("msvcp140.dll")
+            self.path("msvcp140_1.dll")
+            self.path("msvcp140_2.dll")
+            self.path("msvcp140_atomic_wait.dll")
+            self.path("msvcp140_codecvt_ids.dll")
+            self.path("vccorlib140.dll")
+            self.path("vcruntime140.dll")
+            self.path("vcruntime140_1.dll")
+
             # SLVoice executable
             with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
                 self.path("SLVoice.exe")
@@ -614,14 +626,10 @@ def wpath(path):
         out_path = None
         for pkg_file in dest_files:
             rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,''))
-            installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file)))
+            installed_dir = wpath(os.path.join('{app}', os.path.dirname(rel_file)))
             pkg_file = wpath(os.path.normpath(pkg_file))
-            if installed_dir != out_path:
-                if install:
-                    out_path = installed_dir
-                    result += 'SetOutPath ' + out_path + '\n'
             if install:
-                result += 'File ' + pkg_file + '\n'
+                result += 'Source: "' + pkg_file + '"; DestDir: "' + installed_dir + '"; Flags: ignoreversion \n'
             else:
                 result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
 
@@ -653,20 +661,12 @@ def package_finish(self):
             'final_exe' : self.final_exe(),
             'flags':'',
             'app_name':self.app_name(),
-            'app_name_oneword':self.app_name_oneword()
+            'app_name_oneword':self.app_name_oneword(),
+            'src_dir':self.get_src_prefix()
             }
 
         installer_file = self.installer_base_name() + '_Setup.exe'
-        substitution_strings['installer_file'] = installer_file
-        
-        version_vars = """
-        !define INSTEXE "SLVersionChecker.exe"
-        !define VERSION "%(version_short)s"
-        !define VERSION_LONG "%(version)s"
-        !define VERSION_DASHES "%(version_dashes)s"
-        !define VERSION_REGISTRY "%(version_registry)s"
-        !define VIEWER_EXE "%(final_exe)s"
-        """ % substitution_strings
+        substitution_strings['installer_file'] = self.installer_base_name() + '_Setup'
         
         if self.channel_type() == 'release':
             substitution_strings['caption'] = CHANNEL_VENDOR_BASE
@@ -674,30 +674,21 @@ def package_finish(self):
             substitution_strings['caption'] = self.app_name() + ' ${VERSION}'
 
         inst_vars_template = """
-            OutFile "%(installer_file)s"
-            !define INSTNAME   "%(app_name_oneword)s"
-            !define SHORTCUT   "%(app_name)s"
-            !define URLNAME   "secondlife"
-            Caption "%(caption)s"
+#define MyAppName "%(app_name)s"
+#define MyAppNameShort "%(app_name_oneword)s"
+#define MyAppVersion "%(version)s"
+#define MyAppExeName "%(final_exe)s"
+#define ViewerSrcDir "%(src_dir)s"
+#define MyAppInstFile "%(installer_file)s"
             """
 
-        if(self.address_size == 64):
-            engage_registry="SetRegView 64"
-            program_files="!define MULTIUSER_USE_PROGRAMFILES64"
-        else:
-            engage_registry="SetRegView 32"
-            program_files=""
-
-        tempfile = "alchemy_setup_tmp.nsi"
+        tempfile = "alchemy_setup_tmp.iss"
         # the following replaces strings in the nsi template
         # it also does python-style % substitution
-        self.replace_in("installers/windows/installer_template.nsi", tempfile, {
-                "%%VERSION%%":version_vars,
+        self.replace_in("installers/windows/install_template.iss", tempfile, {
                 "%%SOURCE%%":self.get_src_prefix(),
                 "%%INST_VARS%%":inst_vars_template % substitution_strings,
                 "%%INSTALL_FILES%%":self.nsi_file_commands(True),
-                "%%PROGRAMFILES%%":program_files,
-                "%%ENGAGEREGISTRY%%":engage_registry,
                 "%%DELETE_FILES%%":self.nsi_file_commands(False)})
 
         # If we're on a build machine, sign the code using our Authenticode certificate. JC
@@ -705,33 +696,26 @@ def package_finish(self):
         # Unlike the viewer binary, the VMP filenames are invariant with respect to version, os, etc.
         for exe in (
             self.final_exe(),
-            "SLVersionChecker.exe",
             "llplugin/dullahan_host.exe",
             ):
             self.sign(exe)
             
-        # Check two paths, one for Program Files, and one for Program Files (x86).
-        # Yay 64bit windows.
-        for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)':
-            NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles)
-            if os.path.exists(NSIS_path):
-                break
-        installer_created=False
-        nsis_attempts=3
-        nsis_retry_wait=15
-        for attempt in range(nsis_attempts):
+        inno_path = os.path.join(self.args['build'], os.pardir, 'packages', 'innosetup', 'iscc.exe')
+        iscc_attempts=3
+        iscc_retry_wait=15
+        for attempt in range(iscc_attempts):
             try:
-                self.run_command([NSIS_path, '/V2', self.dst_path_of(tempfile)])
+                self.run_command([inno_path, self.dst_path_of(tempfile)])
             except ManifestError as err:
-                if attempt+1 < nsis_attempts:
-                    print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr)
-                    time.sleep(nsis_retry_wait)
-                    nsis_retry_wait*=2
+                if attempt+1 < iscc_attempts:
+                    print("iscc failed, waiting %d seconds before retrying" % iscc_retry_wait, file=sys.stderr)
+                    time.sleep(iscc_retry_wait)
+                    iscc_retry_wait*=2
             else:
-                # NSIS worked! Done!
+                # ISCC worked! Done!
                 break
         else:
-            print("Maximum nsis attempts exceeded; giving up", file=sys.stderr)
+            print("Maximum iscc attempts exceeded; giving up", file=sys.stderr)
             raise
 
         self.sign(installer_file)