From 34803dbebd36f0a274ef73026139da48a960956a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20J=C3=BCrgens?= Date: Sun, 31 Jul 2022 18:11:15 +0200 Subject: [PATCH] revert changes --- assets/setup.nsi | 72 ++++++++++++++++ assets/setup.nsi.minimal | 104 ----------------------- assets/setup.nsi.orig | 176 --------------------------------------- mk.py | 10 +-- 4 files changed, 76 insertions(+), 286 deletions(-) delete mode 100644 assets/setup.nsi.minimal delete mode 100644 assets/setup.nsi.orig diff --git a/assets/setup.nsi b/assets/setup.nsi index 5a32299..beaf800 100644 --- a/assets/setup.nsi +++ b/assets/setup.nsi @@ -1,3 +1,8 @@ +!include "MUI2.nsh" +!include "LogicLib.nsh" +!addplugindir . +!addplugindir x86-ansi + !define APPNAME "LibreWolf" !define PROGNAME "librewolf" !define EXECUTABLE "${PROGNAME}.exe" @@ -15,8 +20,66 @@ RequestExecutionLevel admin # Pages +!define MUI_ABORTWARNING + +!define MUI_WELCOMEPAGE_TITLE "Welcome to the LibreWolf Setup" +!define MUI_WELCOMEPAGE_TEXT "This setup will guide you through the installation of LibreWolf.$\r$\n$\r$\n\ +If you don't have it installed already, this will also install the latest Visual C++ Redistributable.$\r$\n$\r$\n\ +Click Next to continue." +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_LANGUAGE "English" + Section + # Make sure LibreWolf is closed before the installation + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 + ${If} $R0 = 0 + IfSilent 0 +4 + DetailPrint "${APPNAME} is still running, aborting because of silent install." + SetErrorlevel 2 + Abort + + DetailPrint "${APPNAME} is still running" + MessageBox MB_OKCANCEL "LibreWolf is still running and has to be closed for the setup to continue." IDOK continue IDCANCEL break +break: + SetErrorlevel 1 + Abort +continue: + DetailPrint "Closing ${APPNAME} gracefully..." + nsProcess::_CloseProcess "${EXECUTABLE}" + Pop $R0 + Sleep 2000 + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 + ${If} $R0 = 0 + DetailPrint "Failed to close ${APPNAME}, killing it..." + nsProcess::_KillProcess "${EXECUTABLE}" + Sleep 2000 + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 + ${If} $R0 = 0 + DetailPrint "Failed to kill ${APPNAME}, aborting" + MessageBox MB_ICONSTOP "LibreWolf is still running and can't be closed by the installer. Please close it manually and try again." + SetErrorlevel 2 + Abort + ${EndIf} + ${EndIf} + ${EndIf} + + # Install Visual C++ Redistributable (only if not silent) + IfSilent +4 0 + InitPluginsDir + File /oname=$PLUGINSDIR\vc_redist.x64.exe vc_redist.x64.exe + ExecWait "$PLUGINSDIR\vc_redist.x64.exe /install /quiet /norestart" + # Copy files SetOutPath $INSTDIR File /r librewolf\*.* @@ -81,6 +144,15 @@ SectionEnd # Uninstaller section "Uninstall" + # Kill LibreWolf if it is still running + nsProcess::_FindProcess "${EXECUTABLE}" + Pop $R0 + ${If} $R0 = 0 + DetailPrint "${APPNAME} is still running, killing it..." + nsProcess::_KillProcess "${EXECUTABLE}" + Sleep 2000 + ${EndIf} + # Remove Start Menu launcher delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" delete "$SMPROGRAMS\${COMPANYNAME}\Uninstall.lnk" diff --git a/assets/setup.nsi.minimal b/assets/setup.nsi.minimal deleted file mode 100644 index 5a32299..0000000 --- a/assets/setup.nsi.minimal +++ /dev/null @@ -1,104 +0,0 @@ -!define APPNAME "LibreWolf" -!define PROGNAME "librewolf" -!define EXECUTABLE "${PROGNAME}.exe" -!define PROG_VERSION "pkg_version" -!define COMPANYNAME "LibreWolf" -!define ESTIMATED_SIZE 190000 -!define MUI_ICON "librewolf.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "banner.bmp" - -Name "${APPNAME}" -OutFile "${PROGNAME}-${PROG_VERSION}.en-US.win64-setup.exe" -InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" -InstallDir $PROGRAMFILES64\${APPNAME} -RequestExecutionLevel admin - -# Pages - -Section - - # Copy files - SetOutPath $INSTDIR - File /r librewolf\*.* - - # Start Menu - createDirectory "$SMPROGRAMS\${COMPANYNAME}" - createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\${PROGNAME}.exe" "" "$INSTDIR\${MUI_ICON}" - createShortCut "$SMPROGRAMS\${COMPANYNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "" - - # Uninstaller - writeUninstaller "$INSTDIR\uninstall.exe" - - # Registry information for add/remove programs - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" "${APPNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${MUI_ICON}$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "${COMPANYNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "${PROG_VERSION}" - # There is no option for modifying or repairing the install - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1 - # Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" ${ESTIMATED_SIZE} - - - # - # Registry information to let Windows pick us up in the list of available browsers - # - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf" "" "LibreWolf" - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationDescription" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationIcon" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationName" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".htm" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".html" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".pdf" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\Startmenu" "StartMenuInternet" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\URLAssociations" "http" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\URLAssociations" "https" "LibreWolfHTM" - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\DefaultIcon" "" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\shell\open\command" "" "$INSTDIR\librewolf.exe" - - WriteRegStr HKLM "Software\RegisteredApplications" "LibreWolf" "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" - - WriteRegStr HKLM "Software\Classes\LibreWolfHTM" "" "LibreWolf Handler" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM" "AppUserModelId" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "AppUserModelId" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationIcon" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationName" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationDescription" "Start the LibreWolf Browser" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationCompany" "LibreWolf Community" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\DefaultIcon" "" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\shell\open\command" "" "$\"$INSTDIR\librewolf.exe$\" -osint -url $\"%1$\"" - -SectionEnd - - -# Uninstaller -section "Uninstall" - - # Remove Start Menu launcher - delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" - delete "$SMPROGRAMS\${COMPANYNAME}\Uninstall.lnk" - # Try to remove the Start Menu folder - this will only happen if it is empty - rmDir "$SMPROGRAMS\${COMPANYNAME}" - - # Remove files - rmDir /r $INSTDIR - - # Remove uninstaller information from the registry - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" - - # - # Windows default browser integration - # - - DeleteRegKey HKLM "Software\Clients\StartMenuInternet\LibreWolf" - DeleteRegKey HKLM "Software\RegisteredApplications" - DeleteRegKey HKLM "Software\Classes\LibreWolfHTM" - -sectionEnd diff --git a/assets/setup.nsi.orig b/assets/setup.nsi.orig deleted file mode 100644 index beaf800..0000000 --- a/assets/setup.nsi.orig +++ /dev/null @@ -1,176 +0,0 @@ -!include "MUI2.nsh" -!include "LogicLib.nsh" -!addplugindir . -!addplugindir x86-ansi - -!define APPNAME "LibreWolf" -!define PROGNAME "librewolf" -!define EXECUTABLE "${PROGNAME}.exe" -!define PROG_VERSION "pkg_version" -!define COMPANYNAME "LibreWolf" -!define ESTIMATED_SIZE 190000 -!define MUI_ICON "librewolf.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "banner.bmp" - -Name "${APPNAME}" -OutFile "${PROGNAME}-${PROG_VERSION}.en-US.win64-setup.exe" -InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" -InstallDir $PROGRAMFILES64\${APPNAME} -RequestExecutionLevel admin - -# Pages - -!define MUI_ABORTWARNING - -!define MUI_WELCOMEPAGE_TITLE "Welcome to the LibreWolf Setup" -!define MUI_WELCOMEPAGE_TEXT "This setup will guide you through the installation of LibreWolf.$\r$\n$\r$\n\ -If you don't have it installed already, this will also install the latest Visual C++ Redistributable.$\r$\n$\r$\n\ -Click Next to continue." -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH - -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -!insertmacro MUI_LANGUAGE "English" - -Section - - # Make sure LibreWolf is closed before the installation - nsProcess::_FindProcess "${EXECUTABLE}" - Pop $R0 - ${If} $R0 = 0 - IfSilent 0 +4 - DetailPrint "${APPNAME} is still running, aborting because of silent install." - SetErrorlevel 2 - Abort - - DetailPrint "${APPNAME} is still running" - MessageBox MB_OKCANCEL "LibreWolf is still running and has to be closed for the setup to continue." IDOK continue IDCANCEL break -break: - SetErrorlevel 1 - Abort -continue: - DetailPrint "Closing ${APPNAME} gracefully..." - nsProcess::_CloseProcess "${EXECUTABLE}" - Pop $R0 - Sleep 2000 - nsProcess::_FindProcess "${EXECUTABLE}" - Pop $R0 - ${If} $R0 = 0 - DetailPrint "Failed to close ${APPNAME}, killing it..." - nsProcess::_KillProcess "${EXECUTABLE}" - Sleep 2000 - nsProcess::_FindProcess "${EXECUTABLE}" - Pop $R0 - ${If} $R0 = 0 - DetailPrint "Failed to kill ${APPNAME}, aborting" - MessageBox MB_ICONSTOP "LibreWolf is still running and can't be closed by the installer. Please close it manually and try again." - SetErrorlevel 2 - Abort - ${EndIf} - ${EndIf} - ${EndIf} - - # Install Visual C++ Redistributable (only if not silent) - IfSilent +4 0 - InitPluginsDir - File /oname=$PLUGINSDIR\vc_redist.x64.exe vc_redist.x64.exe - ExecWait "$PLUGINSDIR\vc_redist.x64.exe /install /quiet /norestart" - - # Copy files - SetOutPath $INSTDIR - File /r librewolf\*.* - - # Start Menu - createDirectory "$SMPROGRAMS\${COMPANYNAME}" - createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\${PROGNAME}.exe" "" "$INSTDIR\${MUI_ICON}" - createShortCut "$SMPROGRAMS\${COMPANYNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "" - - # Uninstaller - writeUninstaller "$INSTDIR\uninstall.exe" - - # Registry information for add/remove programs - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" "${APPNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${MUI_ICON}$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "${COMPANYNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "${PROG_VERSION}" - # There is no option for modifying or repairing the install - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1 - # Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" ${ESTIMATED_SIZE} - - - # - # Registry information to let Windows pick us up in the list of available browsers - # - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf" "" "LibreWolf" - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationDescription" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationIcon" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" "ApplicationName" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".htm" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".html" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\FileAssociations" ".pdf" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\Startmenu" "StartMenuInternet" "LibreWolf" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\URLAssociations" "http" "LibreWolfHTM" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\Capabilities\URLAssociations" "https" "LibreWolfHTM" - - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\DefaultIcon" "" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Clients\StartMenuInternet\LibreWolf\shell\open\command" "" "$INSTDIR\librewolf.exe" - - WriteRegStr HKLM "Software\RegisteredApplications" "LibreWolf" "Software\Clients\StartMenuInternet\LibreWolf\Capabilities" - - WriteRegStr HKLM "Software\Classes\LibreWolfHTM" "" "LibreWolf Handler" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM" "AppUserModelId" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "AppUserModelId" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationIcon" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationName" "LibreWolf" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationDescription" "Start the LibreWolf Browser" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\Application" "ApplicationCompany" "LibreWolf Community" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\DefaultIcon" "" "$INSTDIR\librewolf.exe,0" - WriteRegStr HKLM "Software\Classes\LibreWolfHTM\shell\open\command" "" "$\"$INSTDIR\librewolf.exe$\" -osint -url $\"%1$\"" - -SectionEnd - - -# Uninstaller -section "Uninstall" - - # Kill LibreWolf if it is still running - nsProcess::_FindProcess "${EXECUTABLE}" - Pop $R0 - ${If} $R0 = 0 - DetailPrint "${APPNAME} is still running, killing it..." - nsProcess::_KillProcess "${EXECUTABLE}" - Sleep 2000 - ${EndIf} - - # Remove Start Menu launcher - delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" - delete "$SMPROGRAMS\${COMPANYNAME}\Uninstall.lnk" - # Try to remove the Start Menu folder - this will only happen if it is empty - rmDir "$SMPROGRAMS\${COMPANYNAME}" - - # Remove files - rmDir /r $INSTDIR - - # Remove uninstaller information from the registry - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" - - # - # Windows default browser integration - # - - DeleteRegKey HKLM "Software\Clients\StartMenuInternet\LibreWolf" - DeleteRegKey HKLM "Software\RegisteredApplications" - DeleteRegKey HKLM "Software\Classes\LibreWolfHTM" - -sectionEnd diff --git a/mk.py b/mk.py index 8049aa4..c865a02 100644 --- a/mk.py +++ b/mk.py @@ -97,10 +97,9 @@ def build(debug=False): # patches for windows only patch('../assets/package-manifest.patch') + #patch('../assets/disable-verify-mar.patch') patch('../assets/tryfix-reslink-fail.patch') - - # patch('../assets/disable-verify-mar.patch') - # patch('../assets/fix-l10n-package-cmd.patch') + patch('../assets/fix-l10n-package-cmd.patch') # perform the build and package. exec('./mach build') @@ -165,14 +164,13 @@ def artifacts(): # With that out of the way, we need to create the main nsis setup. os.chdir('work') exec("mkdir x86-ansi") - #exec("wget -q -O ./x86-ansi/nsProcess.dll https://shorsh.de/upload/we7v/nsProcess.dll") # suspect? - exec("( cd x86-ansi ; unzip ../../assets/nsProcess.zip )") + exec("wget -q -O ./x86-ansi/nsProcess.dll https://shorsh.de/upload/we7v/nsProcess.dll") exec("wget -q -O ./vc_redist.x64.exe https://aka.ms/vs/17/release/vc_redist.x64.exe") setupname = 'librewolf-{}.en-US.win64-setup.exe'.format(full_version) exec('sed \"s/pkg_version/{}/g\" < ../assets/setup.nsi > tmp.nsi'.format(full_version)) exec('cp -v ../assets/librewolf.ico .') exec('cp -v ../assets/banner.bmp .') - exec('~/.mozbuild/nsis/makensis.exe -V1 tmp.nsi') + exec('makensis-3.01.exe -V1 tmp.nsi') exec('rm -rf tmp.nsi librewolf.ico banner.bmp x86-ansi') exec("mv {} ..".format(setupname)) os.chdir('..')