diff --git a/.gitignore b/.gitignore index 0386e03..843ae7b 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,7 @@ pgadmin4.log /mac-build /src-build /dist +/win-build +runtime/Makefile.Debug +runtime/Makefile.Release +runtime/release/ diff --git a/Make.bat b/Make.bat new file mode 100755 index 0000000..ba33ad1 --- /dev/null +++ b/Make.bat @@ -0,0 +1,449 @@ +@ECHO off +SETLOCAL +REM +REM **************************************************************** +SET WD=%CD% +SET "PGBUILDPATH=%WD%\win-build" +SET CMDOPTION="" +IF "%1" == "clean" SET CMDOPTION="VALID" +IF "%1" == "x86" SET CMDOPTION="VALID" +IF "%1" == "amd64" SET CMDOPTION="VALID" + +IF NOT %CMDOPTION%=="VALID" ( GOTO USAGE ) +SET ARCHITECTURE=%1 + +IF "%ARCHITECTURE%"=="clean" ( + GOTO CLEAN_RELEASE + goto:exit +) + +REM Main Functions + +call :SET_PGADMIN4_ENVIRONMENT +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CLEAN_RELEASE + +call :CREATE_VIRTUAL_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_RUNTIME_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_PYTHON_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CLEANUP_ENV +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +call :CREATE_INSTALLER +IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + +CD %WD% +goto:EXIT +REM Main function Ends + +:SET_PGADMIN4_ENVIRONMENT + REM Check os architecture x86 or amd64 + SET RegQry=HKLM\Hardware\Description\System\CentralProcessor\0 + REG.exe Query %RegQry% > checkOS.txt + Find /i "x86" < CheckOS.txt > StringCheck.txt + SET OSTYPE="" + IF %ERRORLEVEL% == 0 ( + SET OSTYPE=x86 + ) else ( + SET OSTYPE=amd64 + ) + DEL CheckOS.txt StringCheck.txt + SET OSVALUE="" + IF "%OSTYPE%"=="x86" ( + IF "%ARCHITECTURE%"=="amd64" ( + ECHO ARCHITECTURE - %ARCHITECTURE% cannot be run on 32 bit machine + goto:exit + ) + OSVALUE=%OSTYPE% + ) + + REM Check IF its is windows 32 bit machine and selected architecture is x86 + IF %OSVALUE%=="x86" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27123" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\System32\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\Qt5.5.1\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + goto SKIPARCVALIDATION + ) + + REM Check IF its is windows 64 bit machine and selected architecture is x86 or amd64 + IF "%ARCHITECTURE%"=="x86" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\Qt5.5.1\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files (x86)\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files (x86)\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC" + ) + + IF "%ARCHITECTURE%"=="amd64" ( + IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27-x64" + IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\System32\python27.dll" + IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\5.5\msvc2013" + IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files\PostgreSQL\9.5" + IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files\Inno Setup 5" + IF "%VCDIR%" == "" SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + ) + + :SKIPARCVALIDATION + REM SET the variables IF not availalbe in windows enviroment + SET VCVAR=%VCDIR%\vcvarsall.bat + SET VCNMAKE=%VCDIR%\bin\nmake.exe + SET QMAKE=%QTDIR%\bin\qmake.exe + SET VIRTUALENV=ve_python + SET TARGETINSTALLER=%WD%\dist + + FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_RELEASE=%%a + FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_REVISION_VERSION=%%a + FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_SUFFIX_VERSION=%%a + REM remove single quote from the string + SET APP_SUFFIX_VERSION=%APP_SUFFIX_VERSION:'=% + SET APP_NAME="" + FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a + SET INSTALLERNAME=%APP_NAME%-v%APP_RELEASE%.%APP_REVISION_VERSION%-%APP_SUFFIX_VERSION%-%ARCHITECTURE%.exe + + SET PGADMIN4_VERSION=v%APP_RELEASE% + SET PGADMIN4_APP_VERSION=%APP_RELEASE%.%APP_REVISION_VERSION% + + ECHO **************************************************************** + ECHO S U M M A R Y + ECHO **************************************************************** + ECHO Target mode = %ARCHITECTURE% + ECHO INNOTOOL = %INNOTOOL% + ECHO VCDIR = %VCDIR% + ECHO NMAKE = %VCNMAKE% + ECHO QTDIR = %QTDIR% + ECHO QMAKE = %QMAKE% + ECHO PYTHON_HOME = %PYTHON_HOME% + ECHO PYTHON_DLL = %PYTHON_DLL% + ECHO PGDIR = %PGDIR% + ECHO **************************************************************** + + REM Check IF path SET in enviroments really exist or not ? + IF NOT EXIST "%INNOTOOL%" GOTO err_handle_inno + IF NOT EXIST "%VCDIR%" GOTO err_handle_visualstudio + IF NOT EXIST "%VCVAR%" GOTO err_handle_visualstudio + IF NOT EXIST "%VCNMAKE%" GOTO err_handle_visualstudio + IF NOT EXIST "%QTDIR%" GOTO err_handle_qt + IF NOT EXIST "%QMAKE%" GOTO err_handle_qt + IF NOT EXIST "%PYTHON_HOME%" GOTO err_handle_python + IF NOT EXIST "%PYTHON_DLL%" GOTO err_handle_python + IF NOT EXIST "%PGDIR%" GOTO err_handle_pg + + REM Check for QT and VC dependences + FOR /L %%G IN (15,1,19) DO "%VCDIR%\bin\cl.exe" /? 2>&1 | findstr /C:"Version %%G" > nul && SET MSVC_MAJOR_VERSION=%%G && GOTO QT_MSVC + + :QT_MSVC + IF %MSVC_MAJOR_VERSION%==19 SET QT_MSVC_PATH=msvc2015 + IF %MSVC_MAJOR_VERSION%==18 SET QT_MSVC_PATH=msvc2013 + IF %MSVC_MAJOR_VERSION%==17 SET QT_MSVC_PATH=msvc2012 + IF %MSVC_MAJOR_VERSION%==16 SET QT_MSVC_PATH=msvc2010 + IF %MSVC_MAJOR_VERSION%==15 SET QT_MSVC_PATH=msvc2008 + + REM on 64 bit machine if x86 is selected and QTDIR is set to 64 bit is should not allow + IF "%OSTYPE%"=="amd64" ( + IF "%ARCHITECTURE%"=="x86" ( + echo "%QTDIR%" | findstr /C:"_64" > nul && ( GOTO err_handle_qt_compactissue ) + ) + ) + + IF "%ARCHITECTURE%"=="amd64" ( + SET QT_MSVC_PATH=%QT_MSVC_PATH%_64 + ) + + IF NOT EXIST "%QTDIR%\..\%QT_MSVC_PATH%" GOTO err_handle_qt_mismatch + + REM get Python version ex. 2.7.1 will get as 27 + for /f "tokens=1 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print sys.version.split(' ')[0]"') DO SET PYTHON_MAJOR=%%G + for /f "tokens=2 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print sys.version.split(' ')[0]"') DO SET PYTHON_MINOR=%%G + SET "PYTHON_VERSION=%PYTHON_MAJOR%%PYTHON_MINOR%" + + IF NOT EXIST "%PYTHON_HOME%\Scripts\virtualenv.exe" GOTO err_handle_pythonvirtualenv + + SET REQUIRMENTTXT="" + IF "%PYTHON_MAJOR%"=="2" SET REQUIRMENTTXT=requirements_py2.txt + IF "%PYTHON_MAJOR%"=="3" SET REQUIRMENTTXT=requirements_py3.txt + IF %REQUIRMENTTXT% == "" GOTO err_handle_pythonversion + SET PATH=%PGDIR%;%PGDIR%\bin;%PATH% +goto:EXIT + + +:CLEAN_RELEASE + ECHO Calling Clean Release... + IF EXIST "%PGBUILDPATH%" rmdir /s /q "%PGBUILDPATH%" > nul + for /R "%WD%" %%f in (*.pyc) do DEL /q "%%f" > nul + IF EXIST "%WD%\pkg\win32\Output" rmdir /s /q "%WD%\pkg\win32\Output" > nul + DEL /q "%WD%\pkg\win32\installer.iss" > nul + CD %WD% +GOTO:EOF + +:CREATE_VIRTUAL_ENV + ECHO Creating Virtual Enviroment... + IF NOT EXIST "%PGBUILDPATH%" MKDIR "%PGBUILDPATH%" + + CD "%PGBUILDPATH%" + "%PYTHON_HOME%\Scripts\virtualenv.exe" "%VIRTUALENV%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + ECHO Activating Virtual Enviroment - %PGBUILDPATH%\%VIRTUALENV%\Scripts\activate... + CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\activate" + SET PATH=%PGDIR%\bin;%PATH% + + ECHO Installing dependencies... + pip install -r "%WD%\%REQUIRMENTTXT%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM This is required because windows only work with 2.6.1 version + pip install psycopg2 -U + ECHO Virtual Enviroment created successfully. + + ECHO Deactivating Virtual Enviroment - %PGBUILDPATH%\%VIRTUALENV%\Scripts\deactivate... + CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\deactivate" + + CD %WD% +GOTO:EOF + +:CREATE_RUNTIME_ENV + ECHO Compiling source code... + MKDIR "%PGBUILDPATH%\runtime" > nul + + REM --- Processing WEB --- + CD "%WD%" + CD web + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%WD%\web" "%PGBUILDPATH%\web" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + REM Clean up .pyc, pgadmin4.db, config_local.py + for /R "%PGBUILDPATH%\web" %%f in (*.pyc) do DEL /q "%%f" + DEL /s "%PGBUILDPATH%\web\pgadmin4.db" > nul + DEL /s "%PGBUILDPATH%\web\config_local.py" > nul + ECHO SERVER_MODE = False > "%PGBUILDPATH%\web\config_local.py" + ECHO HELP_PATH = '../../../docs/en_US/html/' >> "%PGBUILDPATH%\web\config_local.py" + ECHO MINIFY_HTML = False >> "%PGBUILDPATH%\web\config_local.py" + REM Compile doc folder + MKDIR "%PGBUILDPATH%\docs\en_US\html" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM compile docs - web + "%PGBUILDPATH%\%VIRTUALENV%\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%PGBUILDPATH%\docs\en_US\html" + + REM --- Processing RUNTIME --- + CD "%WD%" + CD runtime + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCVAR%" %ARCHITECTURE% + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO Calling - call "%VCVAR%" %ARCHITECTURE% + + call "%QMAKE%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCNMAKE%" clean + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + call "%VCNMAKE%" + IF ERRORLEVEL 1 GOTO ERR_HANDLER + REM Copy binary to Release Folder + copy "%WD%\runtime\release\pgAdmin4.exe" "%PGBUILDPATH%\runtime" + IF ERRORLEVEL 1 GOTO ERR_HANDLER + + REM Copy QTP dependences + copy "%QTDIR%\bin\icudt54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\icuin54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\icuuc54.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Core.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Sql.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Gui.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Qml.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5OpenGL.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Quick.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Sensors.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Widgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebKit.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Network.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Multimedia.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebChannel.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5Positioning.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5PrintSupport.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5WebKitWidgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + copy "%QTDIR%\bin\Qt5MultimediaWidgets.dll" "%PGBUILDPATH%\runtime" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + MKDIR "%PGBUILDPATH%\runtime\platforms" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + copy "%QTDIR%\plugins\platforms\qwindows.dll" "%PGBUILDPATH%\runtime\platforms" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO [Paths] > "%PGBUILDPATH%\runtime\qt.conf" + ECHO Plugins=plugins >> "%PGBUILDPATH%\runtime\qt.conf" + ECHO Runtime source code built successfully. + + CD %WD% +GOTO:EOF + +:CREATE_PYTHON_ENV + copy %PYTHON_DLL% "%PGBUILDPATH%\runtime" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%PYTHON_HOME%\DLLs" "%PGBUILDPATH%\%VIRTUALENV%\DLLs" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + XCOPY /S /I /E /H /Y "%PYTHON_HOME%\Lib" "%PGBUILDPATH%\%VIRTUALENV%\Lib" > nul + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + CD %WD% +GOTO:EOF + +:CREATE_INSTALLER + ECHO Preparing for creation of windows installer... + IF NOT EXIST "%TARGETINSTALLER%" MKDIR "%TARGETINSTALLER%" + + copy "%WD%\pkg\win32\Resources\pgAdmin4.ico" "%PGBUILDPATH%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + REM search and replace string from config.py and copy to config_local.py + CD "%WD%" + CD pkg + CD win32 + + "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_NAME -r """%APP_NAME%""" + "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_FULLVERSION -r """%PGADMIN4_APP_VERSION%""" + "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss.in_stage3" "-s" MYAPP_VERSION -r """%PGADMIN4_VERSION%""" + + set ARCMODE= + IF "%ARCHITECTURE%"=="amd64" ( + set ARCMODE="x64" + ) + "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage3" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_ARCHITECTURESMODE -r """%ARCMODE%""" + DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul + ECHO Creating windows installer... using INNO tool + ECHO "%INNOTOOL%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" + CALL "%INNOTOOL%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + ECHO move "%WD%\pkg\win32\Output\Setup.exe" "%TARGETINSTALLER%\%INSTALLERNAME%" + MOVE "%WD%\pkg\win32\Output\Setup.exe" "%TARGETINSTALLER%\%INSTALLERNAME%" + IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% + + ECHO "Location - %TARGETINSTALLER%\%INSTALLERNAME%" + ECHO Installer generated successfully. + GOTO CLEAN_RELEASE + CD %WD% +GOTO:EOF + +:CLEANUP_ENV + rd "%PGBUILDPATH%\%VIRTUALENV%\Include" /S /Q + rd "%PGBUILDPATH%\%VIRTUALENV%\Scripts" /S /Q + DEL /s "%PGBUILDPATH%\%VIRTUALENV%\pip-selfcheck.json" + + ECHO Cleaned up private environment successfully. + CD %WD% +GOTO:EOF + +:err_handle_inno + ECHO %INNOTOOL% does not exist + ECHO Please Install Innotool and SET INNOTOOL enviroment Variable. + ECHO SET "INNOTOOL=" + exit /B 1 +goto EXIT + +:err_handle_visualstudio + ECHO %VCDIR% does not exist, or + ECHO %VCVAR% does not exist, or + ECHO %VCNMAKE% does not exist. + ECHO Please Install Microsoft Visual studio and SET the VCDIR enviroment Variable. + ECHO SET "VCDIR%=" + ECHO SET "VCVAR%=" + ECHO SET "VCNMAKE%=" + exit /B 1 +goto EXIT + +:err_handle_python + ECHO %PYTHON_HOME% does not exist, or + ECHO PYTHON_VERSION is not SET, or + ECHO %PYTHON_DLL% does not exist. + ECHO Please install Python and SET the PYTHON_HOME enviroment Variable. + ECHO SET "PYTHON_VERSION=" + ECHO SET "PYTHON_HOME=" + ECHO SET "PYTHON_DLL=" + exit /B 1 +goto EXIT + +:err_handle_qt + ECHO %QTDIR% does not exist. + ECHO Please Install QT SDK and SET the QTDIR enviroment variable. + ECHO SET "QTDIR=" + exit /B 1 +goto EXIT + +:err_handle_qt_mismatch + ECHO %QTDIR%\..\%QT_MSVC_PATH%" does not match with your current Visual Studio, version %QT_MSVC_PATH% + ECHO Your current QT installation willraise a linking error with an MSVC version mismatch. + ECHO Please use a valid QT installation with a folder %QT_MSVC_PATH%. You can use the Qt Maintenance + ECHO Tool to add or remove compiler kits. + exit /B 1 +goto EXIT + +:err_handle_qt_compactissue + ECHO %QTDIR%" does support the current architecture selected %ARCHITECTURE% + ECHO Please use a valid QT installation with a folder %QT_MSVC_PATH%. You can use the Qt Maintenance + ECHO Tool to add or remove compiler kits. + exit /B 1 +goto EXIT + +:err_handle_pg + ECHO %PGDIR% does not exist. + ECHO Please Install Postgres and SET enviroment Variable + ECHO SET "PGDIR=" + exit /B 1 +goto EXIT + +:err_handle_pythonversion + ECHO Python version supported Above 2.6, 2.xx and 3.xx only + exit /B 1 +goto EXIT + +:err_handle_pythonvirtualenv + ECHO Python virtualenv is missing @ location - %PYTHON_HOME%\Scripts\virtualenv.exe + exit /B 1 +goto EXIT + +:ERR_HANDLER + ECHO. + ECHO Aborting build! + CD %WD% + exit /B 1 +GOTO:EOF + +:USAGE + ECHO Invalid command line options.... + ECHO Usage: "Make.bat " + ECHO. + exit /B 1 +GOTO EXIT + +:EXIT + endlocal + exit /B 0 diff --git a/pkg/win32/README.txt b/pkg/win32/README.txt new file mode 100755 index 0000000..b66addb --- /dev/null +++ b/pkg/win32/README.txt @@ -0,0 +1,46 @@ +Building pgAdmin windows installer on windows +================================= + +To generate a pgAdmin 4 installer for Windows bit, the following packages must be installed: + +1. Python installation + - Python 2.6 or above from https://www.python.org/ + +2. QT installation + - Qt 4.6 through 5.5 from http://www.qt.io/ + +3. PostgreSQL installation + - PostgreSQL 9.1 or above from http://www.postgresql.org/ + +4. Inno Setup Installer + - 5.0 and above from http://www.jrsoftware.org/isdl.php + +5. Microsoft visual studio (2008 and above) + +Building: Depending upon the archicture of the OS(x86|amd64) set then environment variables. + +1. Set the PYTHON environment variable to the Python root installation directory, e.g. for x86 + + SET "PYTHON_HOME=C:\Python27" + SET "PYTHON_DLL=C:\Windows\System32\python27.dll" + +2. Set the QTDIR environment variable to the QT root installation directory, e.g. for x86 + + SET "QTDIR=C:\Qt\Qt5.5.1\5.5\msvc2013" + +3. Set the PGDIR environment variable to the PostgreSQL installation directory, e.g. for x86 + + SET "PGDIR=C:\Program Files\PostgreSQL\9.5" + +4. Set the Inno Setup Installer environment variable to the Inno root installation directory, e.g. for x86 + + SET "INNOTOOL=C:\Program Files\Inno Setup 5" + +5. Set the Miscrosoft Visual studio environment variable to the Visual studio root installation directory, e.g. for x86 + + SET "VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC" + +6. To build, go to pgAdmin4 source root directory and execute "Make.bat x86|amd64". Based on x86|amd64, this will + create the python virtual environment and install all the required python modules mentioned in the + requirements file using pip, build the runtime code and finally create the windows installer x86|amd64 in ./dist directory + diff --git a/pkg/win32/Resources/SplashScreen.bmp b/pkg/win32/Resources/SplashScreen.bmp new file mode 100755 index 0000000000000000000000000000000000000000..c2407307ef3ba7d4093c7a0762cd94cbc84316cc GIT binary patch literal 196662 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 z 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 P38)fKC7?>+J(R$|!7~Vf literal 0 HcmV?d00001 diff --git a/pkg/win32/Resources/license.rtf b/pkg/win32/Resources/license.rtf new file mode 100755 index 0000000000000000000000000000000000000000..40555108fa0575040cd3d8bb06da301fea2dd2a6 GIT binary patch literal 1262 zcmaKq&2HN|5QV$WQw+N5E!;p>|IrmK(J=u@R7EO90BvZCve|2kDn-W#g1mc&a+0=- zb|aEQ&6zXb@V;@rn>VT-&Ggv}+j;yxZd%=SQPbO_+1SINdERvLn|}&FT{P=yN$hav z%y#GDRq`L8VhnF^nSYpp-0A1URNv~o9S*wpAhkL)>u5@UEcoL)l-eDz6JvYu7LKEy z!3MQwaImfEa8-Q^tr@*D>!a7;cV>jqcK)QCo-U0ap|zW1D5882>abf=>YjCuh9ZJ*chIdh&_-JMHxP4z^D9UbizCoV_)zZn3)Z_`$+!d#fj> zX9~UbW^?v4IYd;bsD|BCE@X6ezqcpTZ^54|Jl~I?hCwR_h*|CTLDJ~)^2|B_X9W}- z=rt`Qh!x2)kShx16-jfvO7SA&Wgc!NB{?i8WQ;5_3X%gUZlENUyn!XJAY~OzSLeQ@@2JjYAl9MYcroXZ}WyKX_Tu3M@zGM>Pq+%jOc`bo2 zCx5k|=PeT;_)>l&6-7HKU;?B(se@x8882p2Z@|uZf9-2U1olP?An7#|G<_;mav|7) zWel6d+M-TYkA{C^_)lUJge6N5?F}*#Nk&*MCU)q$A_(D+=4Y_LJ_{}pbj~DNksMz= z4u$1q#_;?rEm+EFm8?*OJh}`NkXu28n8re;5wWDsNCjnGVMp|G(t8Gnq_1&4DXeHk z>msEUAXkns3V4ZNn0N^bB3PIOs{gay01_V*Uu5iR8h{8d<*@?fgcXt&q)6xtVU{JY i@Ws?+N@RdQ3+yDJVR(4Lmy+|81$JSQ;!OPE;>AzwW`ocG literal 0 HcmV?d00001 diff --git a/pkg/win32/Resources/pgAdmin4.ico b/pkg/win32/Resources/pgAdmin4.ico new file mode 100755 index 0000000000000000000000000000000000000000..3fcebafdc9c16dedaf800066f84a3fb91a226ec1 GIT binary patch literal 35147 zcmXV11ymbNv`!#UC{SEm+})vgaCg_>R-_auMFSM~;_mKJ+_hM7cPQ@e@bbU+a!$@> zlkD9|&diK|xgS|&a_W$P?0DyoC0Du8I z{`Y-r*rnS)0f0~yC26$xMDJmjqRGlgsQvfpe@`St*umgiu_XYYgd-~4AN3jQ>ClS(W3mS8W^>pUpYtX+@@p27uTn&h@b*(t zpl^8aP*DU5s#{oRqe^AnM&10(TAo4In=%14iq{*8JALF?<$(X$h^Z^-kN4W7CqX}} z;i?$VA6sYbzr6!W0tlE=R4=#f2a4h{stCYdSrf}otr8t&TfXLCwR`NU!E=vvY84*? ze8NO9eZRj5t^{e|)1^Rj(!dDtdR};b_|H72@)7&N^wyi^#jxxf&C=Dc*_VHLJ_~oK zgy{_}LLSxJK;!H_N&0ZL6odepvV@cFXit3BLH3x0Est?OpVeVE6E)RE&D#{@taskH zBf~t+k4K1)yJSo8L?=TQuAWTpuK{F!L;C>_bkP+K(L{FA0D{rx3$;b=19{VpHe=Vc zYbfa>&QkM7$M1P#o^;&z;+_#59>nW+!g9ors&jJp4-wJw_ue#HCtMNXo#hVWb=3$! zW3r-dvQs}bQsRWU!&`Th=Z){@;%AZ%ByTTE)L3b``e0Hgiz>gfeZLL{o13~Nxe+QPWSO zVkyQ+C;0^+XlND@{G)h$gJ1QO=lkdL8G1Vj-RN4voy^v|ulB)ux#KPR?YOmY+K#K( zMXyaPN``GLuWe3yZ?r9HBsqdOz9LcQ_phPbgP8Q#gVLdU3>T7x8nP0VsPtg0-BLz2 z5(+lN#Ow$-%ul~-AwB7KG>a|gTK&L(WYBa%H3svT@G3&}5Q&Q|cW+20 zneitT=?VPpjY{0{U2V87W2K$c`;&B@3yUtYYzikK#4i5lyCo+7PU1Ywhg!{;l$MvJ>HxbfPPp1@YpKjiF{Zl8w zeJ`CSMIs{^>;>+1U@cV^U#(c4=I`%R2;hA;?tJkr5<0VbSwT?IPo!}^F<)>wEw-f1 zQde4@z?kn?SKAm_R+|`E*4y&hjGA4w7tw8j8O&H_Y_xv+NmQZ+u{hMSUhyC&gDR)~ z5!tP99h28>8B|be77KW}Ln7-p*w@w5gXWCB=}qX{Ztdrt$-EjYg4pS>LT^%?qlYy#cTHGKnj^BGjP7a+_bFU$K>_Wc9)u zU&>>;iPNxv-4|-DGi6&RTg{T6(Er4QiD7_6FuJW?Kg(V&vJD*K22Byi`GRQPt}<7) zk9X2c(P^IVq{kV{lGaL3S-&QXpi*oA#*?TM{-p6GP%!I+l8Q#5Geh=oHpb z-+Gcxu91NgiJ!22F^M3vtK&vZmq|U>tx@Tk5>H^!u)YfkVGL0t46zQT67mnUcMrGZ z6dZDPYrbkseMS%S>s7j|2rVIz_VXW`r$UFTtne)^E%2Nm*VcwAU;iCju$!;(ZjBbC zX^AA#6tkA-Q3YG;bwK~ze=}_q9@#b@&5@$}=shbuElt{P4a9^#cK{!moaMoDbykZc? zMj36Gq=UVs{R-`_!=o&@xIn-c(ILSUiC`j0+zdZeD2PH7(5^yrpKoZn7J(>4w{Cp7 z$M%>aQnjw?(}(8iiy5nW`-&-qaMy)UTcC;vKqgn@7_T2V&fiWA-M^k|lmO5(@+r^fp#)_azPxL^F(9!N{p<`jj? z7;}^4i3IEy!`Ci_4P{OKxk(~l^X<5hu5lQ5TCQtc%+4+Ls4>V@ZT1SYNX1O={3efj zZ(8@+?KEt5?2fQlzeJm+ih^aDZIC$T)1IR+nWf!*_ujAxXAHj$++>leuIlkDYLEy# z);%6b<(-7_QpX?;+}F^Trw9cf28Ug*b_nL(OF>4%$0q#rx%LJV6wb^*WrK(IZ~1#5 z6;Go^4U)-nG2qVUIbs#373V|5KsIVcFB?M*k!glSE33MgSd2}mp>f4O!z{RF@Q6W)c4ABuegjEW- zLz&01SG{BYZ+{P^*?!)`rsUZyJ-IF3xcxO{Be~Oj5LNZq^4V=FpiAazBF55Vo><6J z*Cne~36@1Bo=8wszV2i__!x?BoivJM;gOm_zG!db`}*_ypSsGoaEju{IuEA`h1C<% z6&qe^PPUp5io0Pae@ACO8_qkv-4$r30Hoe*S^Qjc6-+x7^3HR=r?VC-X+}GB-1D7L zF_$Uv#ks!efb>K8(gL=)`V?^frYK#1xh#aG7QfB$^W^yVVve5zpF_nKr^6;s%IMud z9suMO5HS9HKP4!QvOC5PPJh5ZaHZu^#+%SsbeUrJSq^S9D-^-+j69{9zI5}#4@ z1-zHqFY!|Q18rG1{rM$zpWU@R*Zl)1UpZFBYpOX&CW|BX^f#Fw3K`Ut&e#3YkOUL@ zW!)Dk4&p3vCiqROO~j&o``y(t^|x>z#r2tXhnq?>(}kXjp3PMYB(5f+iSjm+Z6XJu z^|Uq~VMWAiUR%1pZ0U)1oBBr&EQm1{_FwP>3@HF;jGdB{r zhWgTlZ*T(>@e;ki>qHn`+FM_?0*TOX>{Rp?1wI1DLe?{yq&^8d4;>bMgtJHV;AN_y z6T5-(HN#V>AX9B5uGcSvpa~+Z!#)-F$L7m;lt~Pk9!f!z-fv;V(tRP4%M}g|UAYbi zg1J^NQ$g`o1~F?H^-`bsi3zB{^`1v)1^d9OZ`63Z9;cr%n-u|=n3$gI4+RxDP3tDl za{bt22Lxf>z7`qYBFfTB5r(Jk#G#FJ=W;}n<~-keE;lBzC()?Bo;QkAI5e1e&E%(( z%f6#x!@a7Dn|x}K1T^uXVa(YY)>$8kvimG5jqne%&^_tlu@{PSkA2ynTQc9zg?{s> z<=l_utK8P7@ND_lGJh#iy8Q3=R@YFMPI2-1r`e8Dj!M*Qq1^*iN_<#IkFqz?dB404-48^We zCG~xS^6PsK3lW)H+6)!y%ME1i_P*TdKFKz4U`N%lys@e8}euzpF@m5<~e~EwlmPu8~2JNgXZfs z09!!NSrHO!{S7InS=eAWylPAx4qOxtwB&2FlQs__cM>PSt4~!_zu_uM+gSK#nMys0 z(Q2ibU*`^YiQw>wSUwxLn|D1|MD=^Nmm4Jk$fUR|zKQD!jd`~!8(FzRbfV^K3$@}o z^$0#&g)dak7qOFwPk{Ah;7-tF;I=zfa{3BTL2NxU_e!$`HxX1n`&%>q3se2*2nx`M zot++WT<%^kKYcgC-r}uE&C`Y&F}Uv4_baBPs-Ivc*WbO&T50S{6N0sX!w;|y%G4*1 zqb9d0jDN|UNuq!fi)MOmPg*fLcs)KB^#JAtLSq4gv&ODPoH%E!Xh*|l4pHdA;A0B4N^ zr&Fp`Bn!YGP231TGr!@={`$?G)jxNB0J8!I9*uA*8ba^Ge{k$m`*A<}rvKfIE4<@Z zzilxqtBGwFr?-JA4_Kiyx@}_XnhL_e#1y>{NzhyUy?iJ6Teyz+>0q|96v3})nI7AQ$4J1Zf=%} zdj3Yr=0-A3EEndg4#cXk820>~e-ja|a?-mPrTuG((BQ@Dx;XFCwr%$*qQSK13?4#V zfo26f&;TBouTmC=1vRQ)UxMFT)ML7QcRlK3WxqgMSh4)Yl~a5IxEg|g_ocjKkUW(4 zQ=5uGlkGVBc#JcuP?6t)t)Eyv2>SBIcl@R~ow(9=1=cub#{KXKSotYU>US(+c6J`R z_S?t(GK}NsO9Tie<+9dfTTo`@wfk?%mN^!dRBa}@is-1QsBnZA5%z~(Dtu>kMnw^c zUQ!|eA0g`c=&>-zv9O1c%Zpv)>=NSGgL;1`vwz|LTG_`^-YTpuv9p%dfK6wdSSWtnMc>GXpNp z+1xMMy`J1mBCIZ7g^w1X2_z7iP^+oAriT(AF6#L8Z1EgL36&u(wx-rTxBN=;nHF>o z!ww*{?BQRs7|eRj&zMwVt;3RqMWBgDbA|v+k9_z}2)up=L`_^Rx9n_|yJs!(x6J2U ztD>w}_k8x>=WzP{-|rBQI8jlIpA2c2_OB8$?x@%WS723zbtrOI0G&%LFn%2Xb~g$F z^@tPn``0o)u?bIi0I>OZX4zhd8;sL*ejgS8ZxFVrzn7wl1s`~Ru8wY?CBt{Vhx?3o zbyoV{l&q0YJV~-iIzo;2cqafCag)W_eppi~79mLfaFppBmyHO&zbs0MPS}LO(GXxr zA#l*l9{^DE2UHF`w?+W=#gf%3{vN!(jcT;odwJRz@k=G2u$dJ6cUyTj#_?ak$b<=f zjs;o#?1FepFYxHz9@-)hO27ZesJJ}>Mn+BE(1;(6lU3Mf(#BFWYS;I|1k;y@$K*{N zE%sHGd{uZ;s)AYF@EoH|y+Nr23LZWxpi7_eh^|R(qu8eLZI+#j*JgK0)WKb_#S6fgF zGKg$UtJ~csB5hZLsq0lF*!*q0&Dp|pRHeR;9Q3ZVBUT*Mrzp2RlcvYZv@Zu1LmxVSPVxJ)ri?mX1g!5A1o?IHCO+re{VvsOdYjYx{g3k))=nWR zDb|O-Q*NjC`2it}Ly|zaWOO*|O06O(fWUS{tL|qGXBq(9 zH3%_!HJ|xf6t{V=!bxuAilUNj>o)6ibkO9kL_2H&TH^$DXKS)y>BXy%> z!a1R`HA0EXhvRaRo-jb?97teIz5=)RU0h<*7QAMb%bZF1HDdmF9zd|z>)T&|q5 z2b(NQ+|DC5zh##y3#YNBmRcM@Z*yzh0y1YE!Z{5+3Vd_mwoLi_2~d(R#)cTQRM_hs0UD<-ggF2* zAYke1&QQACWIAUyN*#zAEW6L3ye@Kvb(J#oFp%-IHE{B7i{FTT_euhcXawolL+!MH z?q1oEu8TUUsRwAueBHTXe}ipOsBk)TPvG!a`F{3ynXbx#_u~>+w#LbHr!Q^5UeyA* zQ~-5{Ohp@wijg{1RME3cjKYbCXS-gnIQr1LeDAzVzeh4?K`r`c&6!oMmPjtpf}gr?h}*UnK?lC%NSm%& z=(mTukonqtJeyy%8d}8Poo?oYYVP_FYF;*MYL507RdzQCj7NhQ9L@1}P}*`aN;)Sz z9}#O#vVE@s9v$x|Cnpun`opLVCuWhdd62;Tsmqa&oN{3$xae1R5M2Of=lS_U4Vh>@ zwgvma$iI>DbcW>6xK0RmoYsk(OZh;Nar&EZDaz@jK%3Ke1tQb7it|2~E%9edQXTVrj9s8DDJ;h3%kqZQn2C!Jt~H@rS)bvjQa z{fU!p(gok+84{2%p?X_i)fuC;P&~ z6=%Dm!&VCB=mmgO-ztd{RTcaAmpPR)y zjX4^{`(L@wia|Yh$Xgx72|@b68&SrWZ1@RI#Q{^Jk59g1Lx*k}8{zW~;f+t@xJv#; zO9j%(6gXLSb)uBY#hLi-s5GjrXCh2=?khaL(%A~5;L1|#w!`Bd_s)UG zRCeOU((4w1lpAYtie|b!k)4U>#a)ekx_~*5_fIBEv(7?eY<=bjQ5V!p?!*t)6t($E zrFy}9Ui5;3g1^^<%t34fpb5xrPNVQ+4_>Uw3qoeyW!o$hoBt?!=kwWfrqR#L4}T(9 zY4I{_@e-s0yzy$|!oX6iQ$OOjg_%|2Nt^HWFUFLM6rR=$2-U-WcoWGSJ&mtX!C0a) z<*W?-F-MUDGBoAjmp46`3+|g!N_n(fB^{jwyT#yiOBA*mdBy+u5u??Bt>-9lt9V@N z@tUi*8umNH6_hDu^2CANc%b~z2R-8-=W=yj%#(-RV+q=Xbds(QE;qhg+Fw83NJU+T zDN21P-^GlHprD|{JxKgnV{*p&o_&O>@L5+qJVoe8t~03vpszsniF@DPo9y*&kV07F zOqc_X4h`;J>ozBve5?E_AjAycI^*}D-z!kQfmAJw)f<7J*T=eSIQ2b)rHiHIo-x#j z=9AJ|VK07o9RAz7Q{-g&vWB-I&Payp&)`9|%FWDIT@@>=AYW&m6MXf#W7YQW2|bJb z7?JAazDzM5DdF}0P(c)3hpub)SQ3iyrD|mb{l@tsbZc6s!})~?;VWG>@IQapwwE9f z)zrQ;{SN8|>W7RKmur2>AMcN1Hr-AbZaX8BEw(2n!13=UH*a#<^DDlDQB4QnY%`de zK=CCtA6BeaS|L3Z8AGNLlGJ`-whwVX`y4ZJ*CU3yl&fkyE*>sWKrS!vQb zpXrgn^STmJfEo%)%C`X$u^WYOlkOh_$2jFgQ)2nkNJtM%bf$4+C7??xHjuayGjQ{d zn4ky(?L{nSQh(c+2>nkmn{j`b=or^n1PuMKe0aSr3T!_Ry1wny$ecSA(O&s+zMs`O zcB-lDgfu14L)nD8amMS?tu^bxd?G*{l56NyMFkNkFQ`>1ZXoBlba8iY>M)g&K>{EA z3<+5W14qt(%2`=_@3lTSuv84<`5^B)P*UFg!UE`+V@n`u@=|7cCLQx|??)w=XEzrl z`l0)}RN`^{y2KMYOu&j<_Zq7hS0O5%vudDdm?CnzN^Y3)Q$j9S3a*1+a<2Z-@1Og{ zz9hWWv>5NIF`Ji+`|i3WKJa?$kT{fm)ohr*=I$Qh;N`a#goKyFrGvG5=K9R$?9J2o zREg~yD>EEHVA^%!EH6QuO8TpMsu){wwZpvtMM7U;))oz6R#_0C@u*)3QO=)le%`SR!W<0ngUq>>5jH_+IIkuM5!N z&wVuiFNe4}TdB4!t6Q%*-B7G@M210;TPI@`+qWO@$>1|jG)Gs>q)w@+0qsqIR}Qyo zco?C*diT!^;taWUPu^I7REWLeJ(@Zd*LE zRaM6ij^1`2q@BKRhiFZWgFHan_S;Lc<8KGg5=pKQzgx0;l-SJx!jJuP@SV+0(s$YT z0ML~i-0hoC#G0}k0E4opi-y;UbGAGrc-%lO-8dakL5a`V<5%KGL8Bh~C524gdx7?7Kcvt&rr9)nSET18z8HrvGdlWjE(7YtPm_GnHBNVq>QUQ;rq4p_q&JXLYj5OCU^Yz;czCa9s$qRn(+Hd4G zLe$V;nx)$`V9>zfstRS0DB#_9!EuaPEXzUnxF`zx7R*z<1&lb?rFPn&KO^b#~cTY;0*n&SrP zxkxkW&;MbP=O3#TK6iY@toN37`ZnHVagB-JX05^DMxVS!TUX$D4{?sZkBUlf9 zc%$q&!9(^l3`*hkc`QT<5Ct1)Ffh#-vMJNHdO|2cYqUV`7j~>k#ZIU6`go^S?prb%QNUO&-3I_A20KwvV~!Lxnz$Qfn0&7^i%`vF5}t5StY zaUm7~|ArkrWRzgi!oj-ym02qJ$b?CcT+Q2jxWmdMff`K|D^G;Gv|hC2k>wVTXnHfNnw?oxP?c}e zK01?}7f|y?xpdQ8Y49*C&Y?Zf{q`vj zT|&e$XAirpSP9h#D`bMxeTy2YwA! ziX{z3ri!~jS88vS{csBSzPFN?zXCrze8oXfR+~?Fcr-UZ&~C|cJcdaHf)|&#YvO*D zsi66NT8fNPs&|ed-1#cH)niU`-2lM#7`x`*11qT9Nf5`Q#{4ZacDh}78lnT5zXLu~ zltHdu*xAirwJ00k%doYc6}xE`+*FV|kkppwRwN!UV5f4_*kp?xCC3?O<4JwtK=FtT zA&|IErHV+VHO5Hg?$whsBNgN53?9lt-HAWKP|zg-Vo&k6d4Uii`c^z8*QILaPqc)Pr8wCz({L^OcvvDO7d zh4@)#)*&GaHZfLAi7QO`zKbjE3Wq`l83QUdZZ=if<~u8$Rf($eovuO(=TfRE4^G-0 zeM#pqQDz32BUv7iw0snX6xz7t30gM92ebJVcuVn@0u_${b_7}Vd({JJZ|k66Wd6M z`Q}U1!g&meSbp&x`?=PUzzpm{>8*$aj3|J}>4eXfv?|yVIkOSU|6x~=Z9Bx_ zWFk@SRf>C}ChUXO8hHEyRqg%)mS9#aZ!+{j8&mKG-LK-a>?vC!jlk|8LZQPDxWyUH z8Uk4f6Kd;LrH^ieaI@5(X^Jz75{-hA7yX3-wdyT62mH0>DB+x|1+?CjM-RApk)Z$} zlQ?|7D&{CpP&Irax-AVyM>$F0+-a<9aclMm@gTJ`MQn5hxi6N~$qeE2b>_y!)s2rn zo7{_&6!D2UwoOkPv2@F3ErWNKT6S&{b6`Ag9agzc5e!(D3Le=lWQ#L4zB&naeTjrIe4%W zUgvX0G>T#E?@VLqyxa%05~&xnD4e~Y_!yxqrr zT|2d@k|1UVZCm9WUfC3ysDrH)gs~TGw8T9@m+p#kk)V$GICMz~2^I8gTVs-aT`N;`3%1Q2{c^Dilr@wqfCqL`MVy3edmd(IA_K>-mm&X6NRX-ogTNGb zGD}Z4pxv%osIXjpN^Tip2ccKHmge^ZxyAQ(x|%nZ`yT#eDcatmfG^}mox&8fN@YpcG7sPSzKjL<|jW}J^0Lf!%!@H90h^#>njf9 z%#41qGz2WD@?Tpa8h{-wLgFqka6IQIMBXCJV@2e&XHSnI;K zIMjU6Ei9GKj_+39|n2oLb`F<$ftbOUMV*FNJrDHfn z^GvVb;%ev+DjWM@%jTI3ClY36x=xCTfn*v&YH|@wb@xEaKfXwYoE@!=qPR-}jEkv_ zix6u)1l|p^h2>N*gbrhg6A92RphgqR%UTd?Q^0XX{LshV-dV)e!;D2@C|@UG)4srE zd(VlKefW{DZ{s_I+>xQE2!~nP$+U5t5hj43REX%aqSo1n*THMg{;j5D^Yh_WW`?rB zdrNu7!n>G(ubNXjoEfgw0ioRUAHI;gR+I0Of<=IN=ZS#*t8qFh1zr~T-MJz%=$+T9 zh!G~(#pQa$xKw09Wp?f5B>H3SCWdny=l#b~ zmX8P?HhoQwzOCz@c4n8K2+09*@#5V6qoztPXhZy*VdG|Fo{|6w35h-y4Cr;X;6yaM zO_rj7J@-AuQ-rS0|5e$x_fpitBxb;+oBJs{Dn$(Ka>6AwBDSAj2h}G&!fhOOx)@_q zC+48)ywI8`x!y>xyDI{$?a=Mu2Zjz;ajT9InUSG#T~lX@xNaz=@|+8ilsg|31Ru9C zv*WVy@%{J#hj2|5(*eAo>?HGnovSQ_9dzI8@Oco_9xT-+6S-+aBk#NjMo{FkDW!+E zKd@1Eq@7{TkiNFjfJwt_i>OH_R1+jnVK}`xKPmMU8%a`ACcpql1>Vpn>DDp#9{Udz z!S%hCZ}VI8(0M8V$qxQQ_GIZChXHY!H`g*o-4dpUtf(M2%?0(Y_kzm5;TSPJQdB>% zkZ9hws?fWm5pR$+dKWYC34DFmAMprqK4L|+djun&8s#*r*4v=YLtXCkX_YX0AfQX{ zr5cTZqKvfeTA;?o(>OJq;|R5G{Ex8~opoIdv*EXzVn<3F@9O?9U*BCf=(886%tR#J z-|kK4?$x8E-kEqI4TP!$*m?HP`Z{&O_!gqESzjW&si@au>^dYed?c`~qRCy;554T} zfxpTEa*?ttzh7>-li{Jw0CS!Cn{0wkyQ0~#dQ=Z0cQMArqbssl!#I9f&fDPzOb`0q zgUj%tEZnPof03tN95}LSw0i_tT4xuZ46`iaN=KF$eaP-`*Zk$)qlD*rt+LEj8o7l) zC;k$RAHtcW5Kd3{b)(JjT$M6b$ne_%x1N;RfjW&^?uVglJo2#h=4wZ?|J-&5d(|O- z`<`v~?q1oBq>QUK7h1jO%FzFjk(2VUFdoJaQ&u#}+j+Nt)eKgKU{wq-)wQG~2JB99 z#m$M`4ITCUrF@&UKk7fxop!!PWhbh zS2Ba!-@g|OQ+vSg#=3z7WM zf$E@jU8Y1bJBmlg+wq;;LeLK)6xM|FHYqK{|$O@sloCr4OA_M0$ z$8;5JIZ!sa4jlRpg!!-~0M6O4tI=YXSf_=O9eVtbD*lmy#B(^QS~Mq67@A?GHg>N~ zo{=Rh>HV9@8KRJhky_8K9?eO+do1}SsgX|CUVU5swsWtidie3z-!U}0V$@{P?sh*q zy=zUAbgFlJrPMtTwNQD5Pf{wfGtrRoMrD|i`Bd7J4UfqcsG%^&wvKzDd~G@qom5D* z0hnp2RD%WcTq=2Sm;Sc=NyxBJY<Bi&4^nX?Rug}=mH{_ndANiXL*~YU?gN2$ zwC>l^y*SL++O5GXjadJ=Y`+B6#|$WvHI+`s*pDPPsM(Mg`f0+9A`&peNWq;;#cQ() z6E`Jy2B6C}0rnTujG+9B**y3~tEOWp@6;FfA=CXH#Y2>u)u^?iiAj2K%xp+%BCY(6 zL>O=6`zJhR#-ZNuSTgGixwdqwj@sW7VG=)o)B?(UIm@zEUEsQSHuz$eH3idc%PDs) z$|k-PZv7$(`HvVEbXfu_p36tI9K)v+FfXUyzYq2y?YWE&W z`4v%@^lG)|{rAU4=xeDtv3h2QyrQ-`eGH0^;L_I%vFXiR-5#+I*W+(}Nf~ zFCR@WmubL3%1BVabVXNyT%KCP$4;?NpAV9K&SYh|?67B`!=VNc0{N z{?PqdW*=r-ifMT)HR;PeG3}3{9KK+~?c)%mVWV{m3=U4>@^TjGvH}5+vymHsDCReQ zUPR!pj9t!~FgatsE$RWY#j9n>h4NE{7s5}G2C{CX_Uo;2|Jdw9?>6w_(=<3FNQ}ey zQrbk+i@0AaC)rC1fZ>YOq6Dvju47}Q+dRJaR-5*LYl6#V2uee-DbH$a1WN~Jibh{j zV==T#74vo+IzPqWdXA|XB#3`SU(p-$=&an*&k07iw8MefuL|>#(`M^3cQ2|FK8Wa@ z69O^FplHTzrL`W)-%6IzEFdEk1J+F*!U(Q#-j)tHFbD3{qrlCIJpAI-)Cc22Ba*61 zcNG-WiVhU-_F@R-7+q)byYFo1wK)qc(QV4e05w2HWdTnyszNsa*Y5+(hB<|j&{vCB zm;Spjx3#pNxs*#h+>q1Q`7{3_xZfkm=*rs4%C%dC37PKM=s(9?_Pe zyI5?fe}xF+Fd~|D5+Y={2sql3@#4N}5#=zsY*-elN!UZS{0}>pW$oML!_a&^FAp z$}(o|F0(__PJkf!ua+AKKA3IdeSzS2Kc_e30q^f+S)wSyv;a7TCQK$ev=9>1;V!Ej z{1k0O{*2?N9ermG7R~2HCTN*t-%%{=0l!kG~qV(?5+#A_(sLK#d&) zSIw%Y`l~+7_kn=)TvV!k9}QKLO` z=n@_mDnmSTg{h}%2UsgsqIV{#>vL!HP!>BA(`b|BJjgf}O*{wkxfgxC{|+KC>DqAd z5x7qef6z8%{MDGIVq@*O?)y3(%ou&~YAFoBjTA|5%62bDXo=rZp15hX3Q(gEAMSJT z{;=)ENdpmKau;d25hZ5(NAjM#i%;d-miGr7nr#!WtC?i|x8$Iy_xSb;VLe{NYH43P zF`;Fusl#1hL9Bo8*&BNGof2!csRyqR;57p}Ku`z1fC)Nwt)yC9z~ zX4hM)pi_38jcO*Fy)r7yV7vPg?ljC<5vaUly*QW4!y+OV%-HwJLfalN^xav$w zU(o@|8oiU!|a=_&ie8>d!WnFx~jft71D9i1Jg^(dwoxhcJjC| zF9Z)-w^x^hld05YAnFrOfhTh;gREE93Tb}V)#(VG@|gd&kbb6NzvA;>TGWYvON&wd zPOSf&s~42ad9XZ$!<7G{A1?RH30BLzNv>}|=o_97RGPt60bf5<&n$j;Kh3;_mkStS z+AGst^m=}zH9MD05*#X0e<=cD0K@s3+F5jce%6+8=)?vfdf9V{9TxxPJWloAqZ@>{ zA=+OAH=GE^P+*&Pn30EO4O{bMXTqq5Z!f?P|&JBGaP%+$r}EJpbBHNlFd&gKR6oD6cZ z{)8b#td@R+3CY)ztR!TVy3@V^gq0lvE>eq9s#X&fN=`e;6Q^CDO-cNHcdF`s0t|vg zi`Z`1jizHfR-4wqYU?Fl`Mq+ou^Y zCyE&I+io$=H zA$++`S#x#feW9YMT6@U?mr?n5C|+;lx@5KerM&xR3=oI1<0PY|KNE|_NY#o=V}#$r z!(0*oVA1U8XLFoq#kV#eY4WVPB!^Jv;UmSJHy2UTrP5!gJfLlBIHYXp(N29SKn$Ew zesYAAtW~_B5@>&ix7JY8P#YqsTz}ML5lgr}!X!_3G%3BQH_!ZZT21i#Uf)J&Oeg7s zU2aGj$HdR%!agPVlg~Vnws|t&ZL=E>^-0I@c!gxHd$>$dF_qM0Qa7k$nM@4qIJd&` z-4#EverSM9hQZ^T@vdkO$N9E*y50e4o|v6p4=a2*a70it#av4?4G6RJx|-U;*;BB0 zL{#0GDFJW+t@v7vlT#jSkP%f#*!Es|WPaa%X9QgNyBIx)%jMU&$3nVcJOv-c#i*^P zR_yux7EI1G%sQeWur~^JBR`tPzRy}&X1$L?e&&BYgr~~%t@VKbPmiTa zH4C=H%B*x9n_f72MKp9IJXcrl>oI>J$}kWrj18pys`xslr%&l`b;m5ttSKRpHz9CH z#Nk_}1Eb#SS|{fwICo1IJQIKY8L<7zI9Z{DtV-8fQ|$~=9A}TxvoSP#2N!}sZ;VdF zpg2B^8%5~w@`EXv(M*m#Pnwu|ycKWaRy_HcTD5KXb(7=q2m0NSU&qAE{yA!@s_)$= zk+Zq)`_$Muy()Xk+G(o^4N_0A5?McTw2Qh$NtJ?MA3=}W4W`k@k7Q}i?;q{=_)mrZ7zPJ1fw&=0m&Gl7XaGd$Eyd_3#R{)gqPp5{hRye;1~{9 zW&L#1+E!MYV?D6m!`UxM-#ZlbWn|0wq5a}Ht#b!@@6yi_omB<1$>TbyA!dH(Wen&M zx!yLprH!F8MnHX>XdY@KKb#PIy`}{<`A-tI9Q~ZUPL&6NyxM<*oEm*~8eLCYmd)SQ z_@t>bin7tV+R#7BOow7Fqi5o^!+mCmqrLag_!6to8y2|Zi{(|Ib7%%cbDkZFt%n87xg zprOn87qWyM;k1@52nW0VclJ1_;@rCY>Rk2bR^#RQ1-3#TU4O=X!RPUCcPAs2p4tm; z$=sxP4YTpUR#GhkbOLAjnuWITA>XlS&xJ660eS+dMQ3KQpv~-E*h3j%b_&z9C!zJS zSAE$7=bN&h>^gcuI}>s#??z&9*{e^vaHc;=`1D$tJ>6nKrlbj*>0S{r{6N|nJ=f+fLacq+ewgY0wY|0aP7!_P`CF~K zGCI-t)PObAZ5?9D!6JQO`8H&aW`<|IgXx7Q-$0CI*2&c$NKV$p^+f;-@Piu-e-T`o zo)&6`*T(|b!?Sg3ZHj)eHk7_7>;0Lql^k5yGg{4A*{k2OmBQ#FdQo(-GSOg41>)@G z73!*cz8^Wm=#36rl^#zseOUPI<}}%6D%v|Qz{~^Sd}R4(ezw2LwbS49glB=Z8*spq z)<6a5v7k}#hFW$BRmS|+du7+K`d^bf-aB0 zDAwv?`r3vFo|*0yU>#jVHMY(j`QY6WjFMAm`h{9*BQZ2U*SMW@785pM{_N)1PJU@Qrya8SE)-UrVOxktbdGne zqw>9+FNEy=_Kb$8&~&8A7o`-deQv$4mgTc>JVLfMmJp{bf|~hBB0kS0-FR^bB1F2e zP4aEhe>>?pLZ|cj&R;F`9|F_bPalso8qZH%fAx|wXmOGrDof&4RNGn6v^>YeUim&5 z3b)QjYiS50M#qasXrGvRB@~V7^u2ulrLV)KP4y)q3eSe`ULOi`l1nN=_I{i48F&56 zQg|*wjPOHBilSwvnw&p>B!Up?#7VaoM>E1ia$@+dHPM{E`>YXp&N^I5TXjX}Z*li; z^f>x`=IBUpWXTHf84JBn0tfISILxJma!WZWD?jgT*Q>%RI;!f|oto)pT zOMj*U7D2VL9RDd)=>@Mp+`;s&YrQNhYXLpatrPj=2`YI0pQ|RP@5-{q=-`3?)>I%_ z-Zktnb7Mqn;~qAZl}@$TgQx?#7yN2l z>X=#2Z7YnB4P<~a+zc3j3n{y4*8Z9s7BUkKMrRG<IT%>F?r~<@){a*fg0Il31uL|=k2)r>!A6YBIxY{Jp_3v}!kSh94cK6v? zQ0R5&-8d#Q%X&-MCyPs+b4;TWx`?+alrV1(wf|}EO5keD-v3o1%aCGhgE00XOO~-! z$THUPBYU!qea)J|&6>&*B9S7Zy(E!JtB5wOT9i_>@3&jGd*A=}dGm5h+syC(nfdkk zJkERH_q^wM&N`Ubo`3 zN+uJzBq{1QYl8@RgBR-ac%1@fSB^D_wRZNjPVwr0=viN#R;h!A>#q*FFuLu%ZU(*= zgXQ{9?>KCgez@_A3tlNk1^GrJBXaW$y84ci7;oHaP@EI>{KKKmUO&5=t&L5+m)L$; z^4{m_Dl-RH8Y-@d5KV76vDrkq9=e4KEp0FU-g@mq$q?@${R4k+C~f=RZ&ci`!rk7w zeS}OwXn~>k)o{_XL+vMiYW3)p$<@w*#=jfv_c{K2R^OFxI~cUnKn3~m1;)4gNJhSJ zRn(Zu8{s!pM*BfutB3iDN9S0cQry$8%;D7A7WeKvk2<0>%;;5zgU_b_*z)|L%%VM0 z_P5W}(HYia0Dr$y+lzf|D^Hwczeae(m zKex!)@0}BAlk`Mue88Du@q@Jr_Do-tiX6Iu$Iqw#GyfbvVoBz>jqzQ2%M^AP*eUg1 z7wtCIAE)2mIB&;+^X=F9Z&2}RFRMEwWK7Sj+g-x)evo--lymRKpDk8xC|o>1XG?iP zNTgji<1WqQ+DvJlI^)Td(;EU;Txw=|ZRK&Zjv1O>8<%#o`N^gtYx|t&*9X0eOBYwo zKjhJUhMWIWdP90FWd7^yk5&Oif z_9x|iHGF;NwUH67(kkdU+c!7slF_Ln-Dl-ktZhDx9$Gmzmsjtmw!Jtz`L_k8Iy3Oi z=0Ns~Wb;PI^ubh=hgY=L-Vu_$(Sgwz_42ghRcCshTUlta`Dwe{){fiMLYCnpKRIJUC{IJxLsjd>&_O-beyGxFDFd*i1b{)Xz9|Wy|7p+SdTTlW=S&59whkg zND$?m@X;L;w6FY@e)H*PZpFAcJ?c5(?qj_*AC9-`EwihOI&aB_vsykCS*6~SM~w{x zHlOB`cv-Cm%F0{a><}KJqfw1pQ$f9(yJtari)V4$vlFcP^V`K38H|Z(jTn9yYH^d# zt!SZ&g&xl5h4FbKZDYi{O8t|=EFI4m zGSqMyFWc^>=Pr-rC#n7UUt;}su_JCS$4U;vN=C3NDKkz+X2IO`bKC5p zzOlRWrukpfUgT(GXt?}>k8OVDP}y$Pb80#KWr=-E549s18YLrUpAdBPRUgKmA2BxB zamRf%Fx{DE&0RX5SUI|1{#o6)o@2T{9k(fux5s9F?@WAad3moMJ;Xa4mby-M^R$pm ztDgTn1@%_$p7>_(!DyXAe=GOq4)nc@JB|~bhsayCmQUS^rJql8GB7qyGS+a?Q#dLK zDGT1$Vp!|ttNB`swL4Q0cI*k>!`nOOElZwvjCNjDUZ+)yr(3+9ZS}~Xu2oUkX6idr znGUk%*E)|jv>j3rsbX@`IPK)AQ7*>_A$@26FF5+7OhP#UEd-9hf5 zZGyV%>af#i&TM=PhM68AiSPYDR`!Uzyp^Sc&w3Brv=7#)E1Qo!zpdZGpBJiS7#kW^ zwop`;!}=D|`ttQ9Jp+?kJ*-46`IMDDhvKsTFmHF7mx7uo`OC%!Z5Fg_ws&uVll}#T zX5-p+`OJQar|jIBp+62d_WX~1qvp=YTr?~2n(U3=a;&Yb4{MCmV(?vIrl++*@e$5u0r;qd!b4w8WDtIrNqlS`Sk z^y~MGdN=!cs(GsMqnY8#?4l`mmrq@??1+m^%XM9LotBN`_3f|bf)$$1Zk77Nwxu}_ zD+g^A7`$68-UQ-;?>ddvj9l4uQ4UI_RS?*|k2TU_$BMeT&UZ%O`5r6EJXU{A^Qrbg zB|zt_OS9dY705KZvbW@_hCZf(ueEg;tHC=PlRYMPQg0N;uHC0JSJPqXnzi8@Ei`kN zX8$^0xl^ddF|T#|COE2t7I_8VL2ZQ&TlP)3aI;hL0B1MPvo?L^K0LWLG~&m%dNVb} z_+HBB==*1lOKo$3SN9RAi^XeIR#wc8 z?l~?zyT5sBS#AEQ$XxBd6D#y0lY8%tpa;nUxbyes6P7w)RN_QUT`Iy8Un|Q!zsmG_2 zF`=q*^s@&6iHokrP8iy0=^UIBeH}q}ubbCmjun+19dW2^2aRXe!Z^!UwK8q7g6|0X z#Lb<+7V0_?XVw&mcz2w)@T<1BoNx3#YAk9*oQqZ-+~z7LVh--UyQZD3&{}4ALiXe3 zguWwoX@&;RF2wo9fu072-m)LB(+W&Uvw-344mMNi;ElVILOmQxz>c=>DnwAp2p-ky&LB}@Fe+4^DdSMiP#wgS} z(cp=Soe`t#`+P*jf9@o?dOB*+nU<4R9tvGl`Ki=$Y{x;$jN7JT_0_oG{)b_Ob@N_}}jB%azD_$^y-G-&5AIv;?&-Ln*s`5>6yG~o#bB6{Y~Q8%B_CWV&!y>PJjnf4xeBU4 zmWr8&p5E169Znw_(Y4*?RZ+-%?nVaG{)Qd>L_)`%*CGTtyZ02fAAM3@xw(^J&WJ&F zud*-P^!{b}g=H-sx)hkGyS0{^<}tpXsR+e!_&oO4y%8QR=GUCe7S=pPkrww#~p4K3Vrwr9Z@@x>zh6BoU!QVJ`24@>0K8F zO<$q^L}lWD>5m-y7(O@uy?pt_q&^c@E7>P*8%u=9nJITtmfIHVnVFe<=1yLG29+&p zja{<4%9Q2`{%XF{mhn0)(>3+lFY=ip)7g2Ml15I< z9F-x1e2V{=w}E~|qq4KVuK15xC$^tgXm+x&{qWxvpK85+v^;Lak%N|yR@NI;ME6#? z`uk6dOzJw#QSqr})}PDn4)R$i6JFd!>3RQ({csR|VrlZ`+1cw`O$%N7R1*bJn)r>Fq{?6VGehT8jUSjOjytS>hA{WiDK-uW z%v$p?q0JIT(QQnwQcBP9eS21kC$ zF0nl5+=TX5hNr($^tn4ncn#dQTl-*Gv|w$TTH7{ltaYOncujWoWMqg1G+JL&A2(B{ zYyX%;Ef38$o6;9Pavj@WB4?kdxJkZ)y1e-=6W=ag`_J{5u>Y5Wf=xYLvKfQ3DLpa{ zqr(I0a9Uk=%@W0Px$jd#bqhDOA0i%n<+_=0g=79T^%)>=c-xuH+PaRCzwB~ft8KH@ zyp%)7TTL8Z^y&6W4^NfjM1kLSb;Xx*BR`*B*m>f`z|JZ9t>$aKZ*P{HxWFt_2=8t} zmk!{;i7n()4_yfvc!C58Ubj=~{7l$)C^=sDJ+aPS+am#>@lP`?788D%|bZ764J(zTc7d7x`yTP$b zZSXU3yjhy_ra4W~IX)2A!vQ(~`jI*Mf+&6v2C?o4h*l0;M~%x4(J3jO*vWxRi~59pEs zU3g%w`6k29v*Com=(N3n2u%UI^t!QYtYHU>;VcDfk-+yPzxN%|VY1$ug5?cYWR zI5StajsHqJHwS7jZ5quyG~LaV73Wu?zb?(Wv2p*Y=OU44o={LCaJsOmPTIM7T-o+3 z6aVTlBN2;(FbBndioVA1fR;T4S!ohWy*UliPxJ7!JjPU2iL$W%BzFEM{y_iPtPgR_ zb=|3r(r;_9ni1fPwBg!pHpKP(0?9tr(Zt(SN}jqOMpvan2-4KmT`^JPjh@9=}+`KfPVVP z)_?U6G{}P%_je&rB_!)PSyNw2ax~J{j_7}ZcNP9g;%UD*;P8TuR)D9ZXD@FV(|S}IY?jfZQ}tv>-40{#TAUqXAPs;WvGZ9hOefLH8`hs@>8 zO{4#*#h)ZYKjXcj9G?HC1&y*8YZBl-uHT@2fOg`S`_u6`w7jgiJTLRTz}hL)euxQXFm4R^L=U_gAgZj$E6)F1 zMg5*y9%W2n=a8Ki;BbMd6bhJkAx}VmRleZd?_c3gq(7vDd2{s<83G(HGBJTJ4AzO( z?Ntj2lA$qEq4T6yheGtytjhQwROS@H{=p`3lSP z_2DF$?sM-9@pvW9Nmgl5t|%)tmiCwBS?{~27|X+RL3`8Ip2Krx>o|4}r%klwQ zptB1Bu73th0FcZci+lL#^>2Up+zjXPP;uU;D&li)%(_}Sry-ATf!-p9{F4V~v>9{V zX$;A!oR5i&#erE3zF*gvbkB7AcqYR8K2sqmp|!xWi_Jl6t8Y}+e+Bx9hyBQxxU#h& zn@g2>Y<`gCk(X}f%+(!}zS8P!vK9C97jNYhCvrn(iXm%Lt0|S)WE!A*4O{ zt$wP%Jwd;5kcYWXZyjk6x7ltDCO!T&lM)rkT;HQnqwjUyDNIIUIONW=8vbrwwAQ|7 zwo9EIGyhWx&Q=!l*3W@GL!iq8Yun))rQcr>?*I-KW`7jlKJt4Fnrh=A`9tT^Yvylvj-{_Y`AV^dvf+d*%haw5P6@ zcd-2_Mnt;o#=hx{$BjeSgR&CPi2u}~?ms-!#@`f*PY5KOk@r6$deFa4z3igGg;^2-}qkE^itk|TUs9yi;i z#`YziOO1X}!}cTFk?b+hc>?QQ!v@9Y;WRf-D}IBxI654R*R$(I^Wg5)ZUdbzk&Ohq zx?w$bSAPj?&QGk&;&k;j%p)@?f_dv}4;!Fbf0GSM@)Y!k0cyk~?iG13Q+r z6G#@_*r&;!)0iMv%)yljf$k|Q&STuJ?)f^u+GB8^>CBPrAsO^O(vQjd5X;z{SO$Cl z+IRax?|51vPAd8qC&gU)Vn0%R9~d=?i^J)30e&`Y{DQ0xES-ciI?$Pw`BDB(?0HNK z^Zw2@;@+2Ti6`i+5)VcA+-KYM*>5P)y3%YGVzZ}|;RicU<@{gs*Yv`Kd$sgZ^vb_FxXl-b0dPe7% zd`Qyawe3GzD~c(BZZAL^zyR_W$$n~VT<$sf^yDK^Y@h5#?*9KrOR^{Sg&S*o*2RM) zV?v)<6aB9NWH)pML^MU#Nz?bpY%hCuDRw1&|G&BhZNvw32FQn?IKg-0q0eg%OQJuV zWG7mRH`tP`bPe%~@A_ju>$*q&EyW8-r<2cJSD(Lnk9=+#lXPEwb|mpD#ZW-AKcL+g z8MKjXXS=gHO{Rm^=7sB3R#w{nh4<>4lcnBVCN(OEjhi%N*OHAub~R`>!}_!F2ef^l z17c`i)%I%LYhD{S$u>FzN$^!j|JHuqw9l%{on!xDQlS4yev z$_A1_++;h&|9tPCZ6x;aZEl3e{fjRU?sboi_ce{?>Mb)HwkasSjx)}Q|pOVIa=UJUeaYmt_RDgHiArAL}Y60jyvXSUKTEc%J z-X>q4^4NZM#_ahlE6hc{@gwWwlaI@-3Hbm-Gv!?Ejn*?^*jLI+;x7s~Rsd?OyYwE= zHO@i{^cjo(m(hkpx8)+nhHze9B>^tVspbODlkwaKa1JmJ(5s@NLIv$v!Ug?b2p>~~ zc#H&dlF&7L@KQYcgg(?t@?dX}{Cf4soLvup`wOfMMYaU-)R$Ou9QvOE^apJ<{I1%x zOMj-b4WO9g7{FY>vM(?P?XP&&2W`9BW72!L-yNU^&<1P=>;$X^%m569|M44IeSiZX z7;}jRBm*cn@)oTRT2sJsKyMmTnl|ZcJmae|?7H)Mv8{yH{!81k!M2K5{k)1N%l50? z8du*p=CQ4WkfL7|wcr4@mF4k-^cmS+Ay1vIc!li0-`Z6Atj6QjXnXN^zI2~!+kg4Y zwHTjI&$$+O*w0ceJtn;DUw!SD$4zPYUplcZ#^YLFx(~dm)Pf#%exS38w~L(@)oCdM z)B#`XwCas=q0`^|10N_t?j0@8`y7`4DfL}xVQzp}BqAGlAb?wezd3rtuMz)=#UlOq zmmU>1rA#fLST zGS=VegRyr9KfErHUVHAE?69|f_9FCI^>@Z@$~zeQaG=v=F^98uOLYS{8%LTlR#W+U0Ia@1%cs0(ZM@uP$^$^BSG7W|gS2@@9pg)LB$f zaTT9uBj9t6^~LJ3O?V2a$PDuIF)Y3-oLm z`9kD}P@FnF{tfblqBK9m+`0MIZpkh|zJ>JcI=~tL>GL6gI?p8NM7+6bXJVL_fX)vA zoiE538?mU;60z~{l&FAWnittF>G2`Rr&s&xwQVuq}KHi^(>kjm^o_g`4h?twix& z=Zjm}SO)O}*;xspUJ|TpEXEqi?E}$LRaJQmKAgC=?{0H)8GMTvigD|MpKifU&nCN= z@{=`fv~M;z;U_zn_9{Cqo^r~c@UAt$688KP_~sOAo5JD8byviD!^tMCJs&o12V5CR z5n``9Cs;q3;z&)YUnAK}F+&)5RC_WQ^Q4?YE3^u9Erov`@)Ux){3Lg?{cO&L%X!~J z9FFQO8q38}y#m>((1~P=gN-UK0Oxl#Tto-X)D?>De>Zo;W#ZunNasySwo?5M<>PAi zm;OvOE0p7+zLbN2PnU_gf2R|HzYBOf;vReq>G$cH_Lq2w@&wY)=p4qqd{nQGPBc=? zkm8R-C)vXR4ki+uZPVIo0GiZ*qewbm%;BQA8sVpNz}=&k@^`7xL8#}bJ5EEfB6@yv z|4g=ql=A14Gs*f8|B>u@Zr`Z|{ym7zitEy26gS72htE=TZD?GUE}U^`y6BqpKh>I0 ztc2oJBqJzqN9O^#eX*pf>M+)Tli@8Y%LR6BS9QM|hsL738O1GX=P)RLk{a`Ztp}-% zpOqQlPpdy^&k&b^e@gY()Q|i@oW)m|Gh3^J_Q#@}j7V$#qI&UD9KcpOhk`kg-$wDm zy5a+_m$tLMYjv$aP5cxKN{I@hS}ykNV;zR$TxZwLw{vr%oC)C}Uz6?;Uh=C*u8@CR zS3Ls7%!%KKX9>tBedT_mdVZiC`D4me90zWS)6R{5^+ZT}#^IE1DR)LW%nw*=%IQ$f zmG+i+t6KMbUq@nRxR$Ng2}3*&wkS(0$x6=er~Hhdw7?U%DNeZ|^x0i;?RX|f1IeT0 zNMCjjDMvwgN%n+#TC;T_TtDfS&K~g`)eKQzlD|~D!O3;9lTn+Oi23&f{%xSKP8*8G zB$}iA9N8KGvNNd`g=9iwwX1}S zl!FL%z4mqOso!PbhYl71H~HPY@;`rgSKEh>9*@SM8a1|l1^g@htiEfSqo1uYn|rUV zqv;49Xo4FV$C@Ax#JEFVz{+n$@m%qFCQ+4~r_;K(~RP zjW>Y?WkG5FbHq)>Bv)(4m+3RvGO*`SFYt!V1AOoEsIv7&6dQ^Se#GibX_-c2kp7PF zu@#{P%7xawmJaBTnz37-QldYH``oXhwez`m8nwSBz-uSMSt=+g%nF0txC>nw6&L)d z!uP%*doHLJ=H(-E3G{)4a@LgJwL!fF$!MzCaYA19)uS8YthD$H=y?Oow~I7x?m8_k ztrh4R37=sD@SKFfU_|}{?r8(a9{&;V$_WI5UbtQcKl`jmRB4WWm++Zlj|X5^*_Y&J zz0UiT@-FvdQZnLHQK*~p_%hB&ykEoqU>JnPBrF_5TNBcFYKWt#A+{i!3L*)7zd=hr zA`bxBFF?LN2e_>NkB@%7)nm4#I0c0zlmT3vLcKXY{DnWvyJcE@$Whcm#)W#`@y|_9 zT8Mepu&o;!PAC)(LT%0KPYrUshQ7ot?#v z0orJt$nK#1{-G#4eU^jKdI9%7Vi>}lkMHMk{iWN&oJ`g9xRA5LvVujB>vqurF8<(I z7rbA|y$`+@XQ#%UM!se&#_z_hg+x-)89K=iJSlJEb50`UMi`T?$gR;M#aR;} zlkQ39!N^9Td>H}R{oHpEXzfED-^BXcpe|$=$qz|-!kb;#X9tS!bM!mFhM+nXvX5)Z zZB@`Rm7!WRl0hUl;n$cZzx6l7*kAQLeMgVhox{tGOD)N4^0UacB3+Rj>1Tqt{1{(b zVuoe507I$$lbRiEJC157j=vHkSn0Uq~p<&tShBP@J7HDdCORb=cxh zQCHxE+OOltC+t9dhhwPc-RGdw9d#aIFI=u9p '{#MyAppFullVersion}' then + begin + MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK); + Result := False; + end + else + begin + Result := True; + end + end + else + begin + Result := True; + end + + Splash.Close; +end; + +// End of program \ No newline at end of file diff --git a/pkg/win32/replace.py b/pkg/win32/replace.py new file mode 100755 index 0000000..3ec67e1 --- /dev/null +++ b/pkg/win32/replace.py @@ -0,0 +1,34 @@ +import fileinput +import sys, getopt + +# Store input and output file names +infile='' +outfile='' +searchExp='' +replaceExp='' +# Read command line args +myopts, args = getopt.getopt(sys.argv[1:],"i:o:s:r:") +############################### +# o == option +# a == argument passed to the o +############################### +for o, a in myopts: + if o == '-i': + infile=a + elif o == '-o': + outfile=a + elif o == '-s': + searchExp=a + elif o == '-r': + replaceExp=a + else: + print("Usage: %s -i input -o output" % sys.argv[0]) + +# Display input and output file name passed as the args + +f1 = open(infile, 'r') +f2 = open(outfile, 'w') +for line in f1: + f2.write(line.replace(searchExp,replaceExp)) +f1.close() +f2.close()