From acb394297b72c7c92f7570e0afa677a4962ba24f Mon Sep 17 00:00:00 2001 From: gbamber Date: Wed, 18 Jan 2017 08:47:20 +0000 Subject: [PATCH] V1.1.1.0 of LazautoUpdate pack. Initial commit. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5674 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../updatepack/locale/updatepacklinux32.po | 434 ++++++ .../updatepack/locale/updatepacklinux64.po | 434 ++++++ .../updatepack/locale/updatepackwin32.po | 434 ++++++ .../updatepack/locale/updatepackwin64.po | 435 ++++++ .../latest_stable/updatepack/readme.txt | 31 + .../latest_stable/updatepack/umainform.lfm | 782 ++++++++++ .../latest_stable/updatepack/umainform.lrj | 78 + .../latest_stable/updatepack/umainform.lrt | 104 ++ .../latest_stable/updatepack/umainform.pas | 1358 +++++++++++++++++ .../latest_stable/updatepack/umemoform.lfm | 63 + .../latest_stable/updatepack/umemoform.lrj | 6 + .../latest_stable/updatepack/umemoform.lrt | 4 + .../latest_stable/updatepack/umemoform.pas | 130 ++ .../latest_stable/updatepack/updatepack.ico | Bin 0 -> 137040 bytes .../latest_stable/updatepack/updatepack.lpi | 277 ++++ .../latest_stable/updatepack/updatepack.lpr | 44 + .../latest_stable/updatepack/updatepack.res | Bin 0 -> 5092 bytes 17 files changed, 4614 insertions(+) create mode 100644 components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux32.po create mode 100644 components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux64.po create mode 100644 components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin32.po create mode 100644 components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin64.po create mode 100644 components/lazautoupdate/latest_stable/updatepack/readme.txt create mode 100644 components/lazautoupdate/latest_stable/updatepack/umainform.lfm create mode 100644 components/lazautoupdate/latest_stable/updatepack/umainform.lrj create mode 100644 components/lazautoupdate/latest_stable/updatepack/umainform.lrt create mode 100644 components/lazautoupdate/latest_stable/updatepack/umainform.pas create mode 100644 components/lazautoupdate/latest_stable/updatepack/umemoform.lfm create mode 100644 components/lazautoupdate/latest_stable/updatepack/umemoform.lrj create mode 100644 components/lazautoupdate/latest_stable/updatepack/umemoform.lrt create mode 100644 components/lazautoupdate/latest_stable/updatepack/umemoform.pas create mode 100644 components/lazautoupdate/latest_stable/updatepack/updatepack.ico create mode 100644 components/lazautoupdate/latest_stable/updatepack/updatepack.lpi create mode 100644 components/lazautoupdate/latest_stable/updatepack/updatepack.lpr create mode 100644 components/lazautoupdate/latest_stable/updatepack/updatepack.res diff --git a/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux32.po b/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux32.po new file mode 100644 index 000000000..e17a74a74 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux32.po @@ -0,0 +1,434 @@ +msgid "of the LazAutoUpdate componentof the LazAutoUpdate component" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: tmainform.caption +msgid "mainform" +msgstr "" + +#: tmainform.chk_debugmode.caption +msgid "Run LazAutoUpdate in Debugging Mode" +msgstr "" + +#: tmainform.chk_overrideuserprefs.caption +msgid "Override user preferences for update schedule" +msgstr "" + +#: tmainform.chk_overrideuserprefs.hint +msgid "Leave this unchecked for the user to set their own schedule" +msgstr "" + +#: tmainform.chk_showdialogs.caption +msgid "Allow LazAutoUpdate to show dialogs" +msgstr "" + +#: tmainform.chk_showupdateincaption.caption +msgid "Show update progress in form caption bar" +msgstr "" + +#: tmainform.chk_usecopytree.caption +msgid "Use CopyTree" +msgstr "" + +#: tmainform.cmb_intervaldate.text +msgid "1" +msgstr "" + +#: tmainform.cmb_intervalday.text +msgid "Monday" +msgstr "" + +#: tmainform.cmb_intervalhour.text +msgid "Midnight" +msgstr "" + +#: tmainform.cmb_intervaltype.text +msgid "Day" +msgstr "" + +#: tmainform.cmb_profile.hint +msgid "List of current profiles" +msgstr "" + +#: tmainform.cmb_profile.text +msgctxt "TMAINFORM.CMB_PROFILE.TEXT" +msgid "Default" +msgstr "" + +#: tmainform.cmd_close.hint +msgid "Close the application" +msgstr "" + +#: tmainform.cmd_deleteprofile.caption +msgid "Delete" +msgstr "" + +#: tmainform.cmd_deleteprofile.hint +msgid "Deletes the current profile" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.caption +msgid "Download Component" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.hint +msgid "" +"Use this to download or update the latest version\n" +"of the LazAutoUpdate component\n" +msgstr "" + +#: tmainform.cmd_makeupdatepack.caption +msgid "Create Update Pack" +msgstr "" + +#: tmainform.cmd_makeupdatepack.hint +msgid "" +"Once you are happy with the profile settings,\n" +"click this to make the files ready to upload\n" +"into your Sourceforge /updates folder\n" +msgstr "" + +#: tmainform.cmd_newprofile.caption +msgid "New" +msgstr "" + +#: tmainform.cmd_newprofile.hint +msgid "Creates a new profile" +msgstr "" + +#: tmainform.cmd_saveprofile.caption +msgid "Save this Profile..." +msgstr "" + +#: tmainform.cmd_saveprofile.hint +msgid "" +"Click to save the current profile settings.\n" +"This profile will show next time you sart this app.\n" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.caption +msgctxt "tmainform.cmd_useappnameversionsini.caption" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.hint +msgctxt "tmainform.cmd_useappnameversionsini.hint" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.caption +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.CAPTION" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.hint +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.HINT" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.edt_appfilename.hint +msgctxt "tmainform.edt_appfilename.hint" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_outputdirectory.hint +msgctxt "TMAINFORM.EDT_OUTPUTDIRECTORY.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_sfprojectname.hint +msgid "" +"This is the project title as displayed by\n" +"Sourceforge in the project URL\n" +msgstr "" + +#: tmainform.edt_updates.text +msgid "updates" +msgstr "" + +#: tmainform.edt_versionsinifile.hint +msgctxt "tmainform.edt_versionsinifile.hint" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.edt_whatsnewtextfile.hint +msgctxt "TMAINFORM.EDT_WHATSNEWTEXTFILE.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_zipfilename.hint +msgctxt "TMAINFORM.EDT_ZIPFILENAME.HINT" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.grp_copytree.caption +msgid "Update a whole directory tree" +msgstr "" + +#: tmainform.grp_dragfiles.caption +msgid "Drag extra files that update to the app directory into this area (double-click to clear)" +msgstr "" + +#: tmainform.grp_lazautoupdater.caption +msgid "LazAutoUpdater Systray" +msgstr "" + +#: tmainform.grp_lazautoupdater.hint +msgid "Properties for the generated lauimport file" +msgstr "" + +#: tmainform.grp_tweaks.caption +msgid "Other LazAutoUpdate Tweaks" +msgstr "" + +#: tmainform.label1.caption +msgid "WhatsNew Textfile" +msgstr "" + +#: tmainform.lbl_appfilename.caption +msgid "Application to update: " +msgstr "" + +#: tmainform.lbl_createwhatsnew.caption +msgid "Create/Edit WhatsNew.txt :" +msgstr "" + +#: tmainform.lbl_intervaldate.caption +msgid "Use Monthdate.." +msgstr "" + +#: tmainform.lbl_intervalday.caption +msgid "Use Weekday.." +msgstr "" + +#: tmainform.lbl_intervaltype.caption +msgid "Check for updates every.." +msgstr "" + +#: tmainform.lbl_newversion.caption +msgid "New Version:" +msgstr "" + +#: tmainform.lbl_outputdirectory.caption +msgid "Output directory:" +msgstr "" + +#: tmainform.lbl_profile.caption +msgid "Profile name" +msgstr "" + +#: tmainform.lbl_sfprojectname.caption +msgid "SourceForge Project Name:" +msgstr "" + +#: tmainform.lbl_sfupdatesdirectory2.caption +msgid "...at..." +msgstr "" + +#: tmainform.lbl_updates.caption +msgid "Updates directory" +msgstr "" + +#: tmainform.lbl_versionsinifile.caption +msgid "versions.ini FileName" +msgstr "" + +#: tmainform.lbl_zipfilename.caption +msgid "Update Zipfile Name:" +msgstr "" + +#: tmainform.mnuoptions.caption +msgid "Options" +msgstr "" + +#: tmainform.mnuoptionsaftercreatepack.caption +msgid "After Create Pack.." +msgstr "" + +#: tmainform.mnuoptionsdisplayfilemanger.caption +msgid "Display file manager" +msgstr "" + +#: tmainform.mnuoptionsshowcodeinfo.caption +msgid "Show Code information" +msgstr "" + +#: tmainform.mnuoptionsshowonlinewebsite.caption +msgid "Show Online website" +msgstr "" + +#: tmainform.mnu_file.caption +msgid "&File" +msgstr "" + +#: tmainform.mnu_fileclose.caption +msgid "E&xit" +msgstr "" + +#: tmainform.mnu_filesaveprofile.caption +msgid "&Save profile" +msgstr "" + +#: tmainform.mnu_help.caption +msgid "&Help" +msgstr "" + +#: tmainform.mnu_helpabout.caption +msgid "About..." +msgstr "" + +#: tmainform.mnu_helpcheckforupdates.caption +msgid "Check for updates..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.caption +msgid "..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.hint +msgid "Edit WhatsNew text file" +msgstr "" + +#: tmainform.spn1.hint +msgctxt "tmainform.spn1.hint" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn2.hint +msgctxt "TMAINFORM.SPN2.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn3.hint +msgctxt "TMAINFORM.SPN3.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn4.hint +msgctxt "TMAINFORM.SPN4.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.tab_advanced.caption +msgid "Advanced" +msgstr "" + +#: tmainform.tab_configure.caption +msgid "Configure" +msgstr "" + +#: tmainform.tab_configure.hint +msgid "" +"Use this page to configure the current profile.\n" +"Type in a different profile name in order to\n" +"make a new profile.\n" +msgstr "" + +#: tmainform.tab_intro.caption +msgid "Introduction" +msgstr "" + +#: tmainform.tab_intro.hint +msgid "Getting Started information" +msgstr "" + +#: tmemoform.caption +msgid "MemoForm" +msgstr "" + +#: tmemoform.cmd_close.caption +msgid "Save and &Close" +msgstr "" + +#: tmemoform.cmd_saveasandclose.caption +msgid "Save as... and &Close" +msgstr "" + +#: tmemoform.selectdirectorydialog1.title +msgid "Select Directory for whatsnew.txt" +msgstr "" + +#: umainform.rscannotdeletedefault +msgid "Sorry, you cannot delete this profile" +msgstr "" + +#: umainform.rsclosewithoutsaving +msgid "Save current profile to disk?" +msgstr "" + +#: umainform.rsconfigapplication +msgid "Application" +msgstr "" + +#: umainform.rsconfigversion +msgid "Version" +msgstr "" + +#: umainform.rscouldnotloca +msgid "Could not locate %s on the server" +msgstr "" + +#: umainform.rsdefaultprofilename +msgctxt "umainform.rsdefaultprofilename" +msgid "Default" +msgstr "" + +#: umainform.rsdownloadisin +msgid "Download is in progress. Please wait" +msgstr "" + +#: umainform.rsnewprofilecreated +msgid "New profile '%s' created successfully" +msgstr "" + +#: umainform.rsprofilesaved +msgid "Profile '%s' saved successfully" +msgstr "" + +#: umainform.rsthesourcefil +msgid "The source files are located in %s" +msgstr "" + +#: umainform.rsuseappnameversionsquestion +msgid "Update VersionsINI to %s.ini?" +msgstr "" + +#: umainform.rsuseappnamezipfilequestion +msgid "Update Zipfile to %s.zip?" +msgstr "" + +#: umainform.rsyourcopyofla +msgid "Your copy of LazAutoUpdate v%s is the latest version." +msgstr "" + diff --git a/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux64.po b/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux64.po new file mode 100644 index 000000000..e17a74a74 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/locale/updatepacklinux64.po @@ -0,0 +1,434 @@ +msgid "of the LazAutoUpdate componentof the LazAutoUpdate component" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: tmainform.caption +msgid "mainform" +msgstr "" + +#: tmainform.chk_debugmode.caption +msgid "Run LazAutoUpdate in Debugging Mode" +msgstr "" + +#: tmainform.chk_overrideuserprefs.caption +msgid "Override user preferences for update schedule" +msgstr "" + +#: tmainform.chk_overrideuserprefs.hint +msgid "Leave this unchecked for the user to set their own schedule" +msgstr "" + +#: tmainform.chk_showdialogs.caption +msgid "Allow LazAutoUpdate to show dialogs" +msgstr "" + +#: tmainform.chk_showupdateincaption.caption +msgid "Show update progress in form caption bar" +msgstr "" + +#: tmainform.chk_usecopytree.caption +msgid "Use CopyTree" +msgstr "" + +#: tmainform.cmb_intervaldate.text +msgid "1" +msgstr "" + +#: tmainform.cmb_intervalday.text +msgid "Monday" +msgstr "" + +#: tmainform.cmb_intervalhour.text +msgid "Midnight" +msgstr "" + +#: tmainform.cmb_intervaltype.text +msgid "Day" +msgstr "" + +#: tmainform.cmb_profile.hint +msgid "List of current profiles" +msgstr "" + +#: tmainform.cmb_profile.text +msgctxt "TMAINFORM.CMB_PROFILE.TEXT" +msgid "Default" +msgstr "" + +#: tmainform.cmd_close.hint +msgid "Close the application" +msgstr "" + +#: tmainform.cmd_deleteprofile.caption +msgid "Delete" +msgstr "" + +#: tmainform.cmd_deleteprofile.hint +msgid "Deletes the current profile" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.caption +msgid "Download Component" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.hint +msgid "" +"Use this to download or update the latest version\n" +"of the LazAutoUpdate component\n" +msgstr "" + +#: tmainform.cmd_makeupdatepack.caption +msgid "Create Update Pack" +msgstr "" + +#: tmainform.cmd_makeupdatepack.hint +msgid "" +"Once you are happy with the profile settings,\n" +"click this to make the files ready to upload\n" +"into your Sourceforge /updates folder\n" +msgstr "" + +#: tmainform.cmd_newprofile.caption +msgid "New" +msgstr "" + +#: tmainform.cmd_newprofile.hint +msgid "Creates a new profile" +msgstr "" + +#: tmainform.cmd_saveprofile.caption +msgid "Save this Profile..." +msgstr "" + +#: tmainform.cmd_saveprofile.hint +msgid "" +"Click to save the current profile settings.\n" +"This profile will show next time you sart this app.\n" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.caption +msgctxt "tmainform.cmd_useappnameversionsini.caption" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.hint +msgctxt "tmainform.cmd_useappnameversionsini.hint" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.caption +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.CAPTION" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.hint +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.HINT" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.edt_appfilename.hint +msgctxt "tmainform.edt_appfilename.hint" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_outputdirectory.hint +msgctxt "TMAINFORM.EDT_OUTPUTDIRECTORY.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_sfprojectname.hint +msgid "" +"This is the project title as displayed by\n" +"Sourceforge in the project URL\n" +msgstr "" + +#: tmainform.edt_updates.text +msgid "updates" +msgstr "" + +#: tmainform.edt_versionsinifile.hint +msgctxt "tmainform.edt_versionsinifile.hint" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.edt_whatsnewtextfile.hint +msgctxt "TMAINFORM.EDT_WHATSNEWTEXTFILE.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_zipfilename.hint +msgctxt "TMAINFORM.EDT_ZIPFILENAME.HINT" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.grp_copytree.caption +msgid "Update a whole directory tree" +msgstr "" + +#: tmainform.grp_dragfiles.caption +msgid "Drag extra files that update to the app directory into this area (double-click to clear)" +msgstr "" + +#: tmainform.grp_lazautoupdater.caption +msgid "LazAutoUpdater Systray" +msgstr "" + +#: tmainform.grp_lazautoupdater.hint +msgid "Properties for the generated lauimport file" +msgstr "" + +#: tmainform.grp_tweaks.caption +msgid "Other LazAutoUpdate Tweaks" +msgstr "" + +#: tmainform.label1.caption +msgid "WhatsNew Textfile" +msgstr "" + +#: tmainform.lbl_appfilename.caption +msgid "Application to update: " +msgstr "" + +#: tmainform.lbl_createwhatsnew.caption +msgid "Create/Edit WhatsNew.txt :" +msgstr "" + +#: tmainform.lbl_intervaldate.caption +msgid "Use Monthdate.." +msgstr "" + +#: tmainform.lbl_intervalday.caption +msgid "Use Weekday.." +msgstr "" + +#: tmainform.lbl_intervaltype.caption +msgid "Check for updates every.." +msgstr "" + +#: tmainform.lbl_newversion.caption +msgid "New Version:" +msgstr "" + +#: tmainform.lbl_outputdirectory.caption +msgid "Output directory:" +msgstr "" + +#: tmainform.lbl_profile.caption +msgid "Profile name" +msgstr "" + +#: tmainform.lbl_sfprojectname.caption +msgid "SourceForge Project Name:" +msgstr "" + +#: tmainform.lbl_sfupdatesdirectory2.caption +msgid "...at..." +msgstr "" + +#: tmainform.lbl_updates.caption +msgid "Updates directory" +msgstr "" + +#: tmainform.lbl_versionsinifile.caption +msgid "versions.ini FileName" +msgstr "" + +#: tmainform.lbl_zipfilename.caption +msgid "Update Zipfile Name:" +msgstr "" + +#: tmainform.mnuoptions.caption +msgid "Options" +msgstr "" + +#: tmainform.mnuoptionsaftercreatepack.caption +msgid "After Create Pack.." +msgstr "" + +#: tmainform.mnuoptionsdisplayfilemanger.caption +msgid "Display file manager" +msgstr "" + +#: tmainform.mnuoptionsshowcodeinfo.caption +msgid "Show Code information" +msgstr "" + +#: tmainform.mnuoptionsshowonlinewebsite.caption +msgid "Show Online website" +msgstr "" + +#: tmainform.mnu_file.caption +msgid "&File" +msgstr "" + +#: tmainform.mnu_fileclose.caption +msgid "E&xit" +msgstr "" + +#: tmainform.mnu_filesaveprofile.caption +msgid "&Save profile" +msgstr "" + +#: tmainform.mnu_help.caption +msgid "&Help" +msgstr "" + +#: tmainform.mnu_helpabout.caption +msgid "About..." +msgstr "" + +#: tmainform.mnu_helpcheckforupdates.caption +msgid "Check for updates..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.caption +msgid "..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.hint +msgid "Edit WhatsNew text file" +msgstr "" + +#: tmainform.spn1.hint +msgctxt "tmainform.spn1.hint" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn2.hint +msgctxt "TMAINFORM.SPN2.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn3.hint +msgctxt "TMAINFORM.SPN3.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn4.hint +msgctxt "TMAINFORM.SPN4.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.tab_advanced.caption +msgid "Advanced" +msgstr "" + +#: tmainform.tab_configure.caption +msgid "Configure" +msgstr "" + +#: tmainform.tab_configure.hint +msgid "" +"Use this page to configure the current profile.\n" +"Type in a different profile name in order to\n" +"make a new profile.\n" +msgstr "" + +#: tmainform.tab_intro.caption +msgid "Introduction" +msgstr "" + +#: tmainform.tab_intro.hint +msgid "Getting Started information" +msgstr "" + +#: tmemoform.caption +msgid "MemoForm" +msgstr "" + +#: tmemoform.cmd_close.caption +msgid "Save and &Close" +msgstr "" + +#: tmemoform.cmd_saveasandclose.caption +msgid "Save as... and &Close" +msgstr "" + +#: tmemoform.selectdirectorydialog1.title +msgid "Select Directory for whatsnew.txt" +msgstr "" + +#: umainform.rscannotdeletedefault +msgid "Sorry, you cannot delete this profile" +msgstr "" + +#: umainform.rsclosewithoutsaving +msgid "Save current profile to disk?" +msgstr "" + +#: umainform.rsconfigapplication +msgid "Application" +msgstr "" + +#: umainform.rsconfigversion +msgid "Version" +msgstr "" + +#: umainform.rscouldnotloca +msgid "Could not locate %s on the server" +msgstr "" + +#: umainform.rsdefaultprofilename +msgctxt "umainform.rsdefaultprofilename" +msgid "Default" +msgstr "" + +#: umainform.rsdownloadisin +msgid "Download is in progress. Please wait" +msgstr "" + +#: umainform.rsnewprofilecreated +msgid "New profile '%s' created successfully" +msgstr "" + +#: umainform.rsprofilesaved +msgid "Profile '%s' saved successfully" +msgstr "" + +#: umainform.rsthesourcefil +msgid "The source files are located in %s" +msgstr "" + +#: umainform.rsuseappnameversionsquestion +msgid "Update VersionsINI to %s.ini?" +msgstr "" + +#: umainform.rsuseappnamezipfilequestion +msgid "Update Zipfile to %s.zip?" +msgstr "" + +#: umainform.rsyourcopyofla +msgid "Your copy of LazAutoUpdate v%s is the latest version." +msgstr "" + diff --git a/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin32.po b/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin32.po new file mode 100644 index 000000000..f9168f527 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin32.po @@ -0,0 +1,434 @@ +msgid "of the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate component" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: tmainform.caption +msgid "mainform" +msgstr "" + +#: tmainform.chk_debugmode.caption +msgid "Run LazAutoUpdate in Debugging Mode" +msgstr "" + +#: tmainform.chk_overrideuserprefs.caption +msgid "Override user preferences for update schedule" +msgstr "" + +#: tmainform.chk_overrideuserprefs.hint +msgid "Leave this unchecked for the user to set their own schedule" +msgstr "" + +#: tmainform.chk_showdialogs.caption +msgid "Allow LazAutoUpdate to show dialogs" +msgstr "" + +#: tmainform.chk_showupdateincaption.caption +msgid "Show update progress in form caption bar" +msgstr "" + +#: tmainform.chk_usecopytree.caption +msgid "Use CopyTree" +msgstr "" + +#: tmainform.cmb_intervaldate.text +msgid "1" +msgstr "" + +#: tmainform.cmb_intervalday.text +msgid "Monday" +msgstr "" + +#: tmainform.cmb_intervalhour.text +msgid "Midnight" +msgstr "" + +#: tmainform.cmb_intervaltype.text +msgid "Day" +msgstr "" + +#: tmainform.cmb_profile.hint +msgid "List of current profiles" +msgstr "" + +#: tmainform.cmb_profile.text +msgctxt "TMAINFORM.CMB_PROFILE.TEXT" +msgid "Default" +msgstr "" + +#: tmainform.cmd_close.hint +msgid "Close the application" +msgstr "" + +#: tmainform.cmd_deleteprofile.caption +msgid "Delete" +msgstr "" + +#: tmainform.cmd_deleteprofile.hint +msgid "Deletes the current profile" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.caption +msgid "Download Component" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.hint +msgid "" +"Use this to download or update the latest version\n" +"of the LazAutoUpdate component\n" +msgstr "" + +#: tmainform.cmd_makeupdatepack.caption +msgid "Create Update Pack" +msgstr "" + +#: tmainform.cmd_makeupdatepack.hint +msgid "" +"Once you are happy with the profile settings,\n" +"click this to make the files ready to upload\n" +"into your Sourceforge /updates folder\n" +msgstr "" + +#: tmainform.cmd_newprofile.caption +msgid "New" +msgstr "" + +#: tmainform.cmd_newprofile.hint +msgid "Creates a new profile" +msgstr "" + +#: tmainform.cmd_saveprofile.caption +msgid "Save this Profile..." +msgstr "" + +#: tmainform.cmd_saveprofile.hint +msgid "" +"Click to save the current profile settings.\n" +"This profile will show next time you sart this app.\n" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.caption +msgctxt "tmainform.cmd_useappnameversionsini.caption" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.hint +msgctxt "tmainform.cmd_useappnameversionsini.hint" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.caption +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.CAPTION" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.hint +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.HINT" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.edt_appfilename.hint +msgctxt "tmainform.edt_appfilename.hint" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_outputdirectory.hint +msgctxt "TMAINFORM.EDT_OUTPUTDIRECTORY.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_sfprojectname.hint +msgid "" +"This is the project title as displayed by\n" +"Sourceforge in the project URL\n" +msgstr "" + +#: tmainform.edt_updates.text +msgid "updates" +msgstr "" + +#: tmainform.edt_versionsinifile.hint +msgctxt "tmainform.edt_versionsinifile.hint" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.edt_whatsnewtextfile.hint +msgctxt "TMAINFORM.EDT_WHATSNEWTEXTFILE.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_zipfilename.hint +msgctxt "TMAINFORM.EDT_ZIPFILENAME.HINT" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.grp_copytree.caption +msgid "Update a whole directory tree" +msgstr "" + +#: tmainform.grp_dragfiles.caption +msgid "Drag extra files that update to the app directory into this area (double-click to clear)" +msgstr "" + +#: tmainform.grp_lazautoupdater.caption +msgid "LazAutoUpdater Systray" +msgstr "" + +#: tmainform.grp_lazautoupdater.hint +msgid "Properties for the generated lauimport file" +msgstr "" + +#: tmainform.grp_tweaks.caption +msgid "Other LazAutoUpdate Tweaks" +msgstr "" + +#: tmainform.label1.caption +msgid "WhatsNew Textfile" +msgstr "" + +#: tmainform.lbl_appfilename.caption +msgid "Application to update: " +msgstr "" + +#: tmainform.lbl_createwhatsnew.caption +msgid "Create/Edit WhatsNew.txt :" +msgstr "" + +#: tmainform.lbl_intervaldate.caption +msgid "Use Monthdate.." +msgstr "" + +#: tmainform.lbl_intervalday.caption +msgid "Use Weekday.." +msgstr "" + +#: tmainform.lbl_intervaltype.caption +msgid "Check for updates every.." +msgstr "" + +#: tmainform.lbl_newversion.caption +msgid "New Version:" +msgstr "" + +#: tmainform.lbl_outputdirectory.caption +msgid "Output directory:" +msgstr "" + +#: tmainform.lbl_profile.caption +msgid "Profile name" +msgstr "" + +#: tmainform.lbl_sfprojectname.caption +msgid "SourceForge Project Name:" +msgstr "" + +#: tmainform.lbl_sfupdatesdirectory2.caption +msgid "...at..." +msgstr "" + +#: tmainform.lbl_updates.caption +msgid "Updates directory" +msgstr "" + +#: tmainform.lbl_versionsinifile.caption +msgid "versions.ini FileName" +msgstr "" + +#: tmainform.lbl_zipfilename.caption +msgid "Update Zipfile Name:" +msgstr "" + +#: tmainform.mnuoptions.caption +msgid "Options" +msgstr "" + +#: tmainform.mnuoptionsaftercreatepack.caption +msgid "After Create Pack.." +msgstr "" + +#: tmainform.mnuoptionsdisplayfilemanger.caption +msgid "Display file manager" +msgstr "" + +#: tmainform.mnuoptionsshowcodeinfo.caption +msgid "Show Code information" +msgstr "" + +#: tmainform.mnuoptionsshowonlinewebsite.caption +msgid "Show Online website" +msgstr "" + +#: tmainform.mnu_file.caption +msgid "&File" +msgstr "" + +#: tmainform.mnu_fileclose.caption +msgid "E&xit" +msgstr "" + +#: tmainform.mnu_filesaveprofile.caption +msgid "&Save profile" +msgstr "" + +#: tmainform.mnu_help.caption +msgid "&Help" +msgstr "" + +#: tmainform.mnu_helpabout.caption +msgid "About..." +msgstr "" + +#: tmainform.mnu_helpcheckforupdates.caption +msgid "Check for updates..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.caption +msgid "..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.hint +msgid "Edit WhatsNew text file" +msgstr "" + +#: tmainform.spn1.hint +msgctxt "tmainform.spn1.hint" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn2.hint +msgctxt "TMAINFORM.SPN2.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn3.hint +msgctxt "TMAINFORM.SPN3.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn4.hint +msgctxt "TMAINFORM.SPN4.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.tab_advanced.caption +msgid "Advanced" +msgstr "" + +#: tmainform.tab_configure.caption +msgid "Configure" +msgstr "" + +#: tmainform.tab_configure.hint +msgid "" +"Use this page to configure the current profile.\n" +"Type in a different profile name in order to\n" +"make a new profile.\n" +msgstr "" + +#: tmainform.tab_intro.caption +msgid "Introduction" +msgstr "" + +#: tmainform.tab_intro.hint +msgid "Getting Started information" +msgstr "" + +#: tmemoform.caption +msgid "MemoForm" +msgstr "" + +#: tmemoform.cmd_close.caption +msgid "Save and &Close" +msgstr "" + +#: tmemoform.cmd_saveasandclose.caption +msgid "Save as... and &Close" +msgstr "" + +#: tmemoform.selectdirectorydialog1.title +msgid "Select Directory for whatsnew.txt" +msgstr "" + +#: umainform.rscannotdeletedefault +msgid "Sorry, you cannot delete this profile" +msgstr "" + +#: umainform.rsclosewithoutsaving +msgid "Save current profile to disk?" +msgstr "" + +#: umainform.rsconfigapplication +msgid "Application" +msgstr "" + +#: umainform.rsconfigversion +msgid "Version" +msgstr "" + +#: umainform.rscouldnotloca +msgid "Could not locate %s on the server" +msgstr "" + +#: umainform.rsdefaultprofilename +msgctxt "umainform.rsdefaultprofilename" +msgid "Default" +msgstr "" + +#: umainform.rsdownloadisin +msgid "Download is in progress. Please wait" +msgstr "" + +#: umainform.rsnewprofilecreated +msgid "New profile '%s' created successfully" +msgstr "" + +#: umainform.rsprofilesaved +msgid "Profile '%s' saved successfully" +msgstr "" + +#: umainform.rsthesourcefil +msgid "The source files are located in %s" +msgstr "" + +#: umainform.rsuseappnameversionsquestion +msgid "Update VersionsINI to %s.ini?" +msgstr "" + +#: umainform.rsuseappnamezipfilequestion +msgid "Update Zipfile to %s.zip?" +msgstr "" + +#: umainform.rsyourcopyofla +msgid "Your copy of LazAutoUpdate v%s is the latest version." +msgstr "" + diff --git a/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin64.po b/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin64.po new file mode 100644 index 000000000..d4d9b7d0d --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/locale/updatepackwin64.po @@ -0,0 +1,435 @@ +msgid "of the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate componentof the LazAutoUpdate component" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: tmainform.caption +msgid "mainform" +msgstr "" + +#: tmainform.chk_debugmode.caption +msgid "Run LazAutoUpdate in Debugging Mode" +msgstr "" + +#: tmainform.chk_overrideuserprefs.caption +msgid "Override user preferences for update schedule" +msgstr "" + +#: tmainform.chk_overrideuserprefs.hint +msgid "Leave this unchecked for the user to set their own schedule" +msgstr "" + +#: tmainform.chk_showdialogs.caption +msgid "Allow LazAutoUpdate to show dialogs" +msgstr "" + +#: tmainform.chk_showupdateincaption.caption +msgid "Show update progress in form caption bar" +msgstr "" + +#: tmainform.chk_usecopytree.caption +msgid "Use CopyTree" +msgstr "" + +#: tmainform.cmb_intervaldate.text +msgid "1" +msgstr "" + +#: tmainform.cmb_intervalday.text +msgid "Monday" +msgstr "" + +#: tmainform.cmb_intervalhour.text +msgid "Midnight" +msgstr "" + +#: tmainform.cmb_intervaltype.text +msgid "Day" +msgstr "" + +#: tmainform.cmb_profile.hint +msgid "List of current profiles" +msgstr "" + +#: tmainform.cmb_profile.text +msgctxt "TMAINFORM.CMB_PROFILE.TEXT" +msgid "Default" +msgstr "" + +#: tmainform.cmd_close.hint +msgid "Close the application" +msgstr "" + +#: tmainform.cmd_deleteprofile.caption +msgid "Delete" +msgstr "" + +#: tmainform.cmd_deleteprofile.hint +msgid "Deletes the current profile" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.caption +msgid "Download Component" +msgstr "" + +#: tmainform.cmd_downloadlazautoupdate.hint +msgid "" +"Use this to download or update the latest version\n" +"of the LazAutoUpdate component\n" +msgstr "" + +#: tmainform.cmd_makeupdatepack.caption +msgid "Create Update Pack" +msgstr "" + +#: tmainform.cmd_makeupdatepack.hint +msgid "" +"Once you are happy with the profile settings,\n" +"click this to make the files ready to upload\n" +"into your Sourceforge /updates folder\n" +msgstr "" + +#: tmainform.cmd_newprofile.caption +msgid "New" +msgstr "" + +#: tmainform.cmd_newprofile.hint +msgid "Creates a new profile" +msgstr "" + +#: tmainform.cmd_saveprofile.caption +msgid "Save this Profile..." +msgstr "" + +#: tmainform.cmd_saveprofile.hint +msgid "" +"Click to save the current profile settings.\n" +"This profile will show next time you sart this app.\n" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.caption +msgctxt "tmainform.cmd_useappnameversionsini.caption" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnameversionsini.hint +msgctxt "tmainform.cmd_useappnameversionsini.hint" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.caption +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.CAPTION" +msgid "Use Appname" +msgstr "" + +#: tmainform.cmd_useappnamezipfilename.hint +msgctxt "TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.HINT" +msgid "" +"Use this to assign a unique value to the\n" +"INI file or Zipfile names\n" +msgstr "" + +#: tmainform.edt_appfilename.hint +msgctxt "tmainform.edt_appfilename.hint" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_outputdirectory.hint +msgctxt "TMAINFORM.EDT_OUTPUTDIRECTORY.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_sfprojectname.hint +msgid "" +"This is the project title as displayed by\n" +"Sourceforge in the project URL\n" +msgstr "" + +#: tmainform.edt_updates.text +msgid "updates" +msgstr "" + +#: tmainform.edt_versionsinifile.hint +msgctxt "tmainform.edt_versionsinifile.hint" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.edt_whatsnewtextfile.hint +msgctxt "TMAINFORM.EDT_WHATSNEWTEXTFILE.HINT" +msgid "" +"Use the directory mini-button.\n" +"You cannot type into the box\n" +msgstr "" + +#: tmainform.edt_zipfilename.hint +msgctxt "TMAINFORM.EDT_ZIPFILENAME.HINT" +msgid "" +"Type the filename \n" +"or use the directory mini-button\n" +"or click the [Use Appname] button\n" +msgstr "" + +#: tmainform.grp_copytree.caption +msgid "Update a whole directory tree" +msgstr "" + +#: tmainform.grp_dragfiles.caption +msgctxt "tmainform.grp_dragfiles.caption" +msgid "Drag extra files that update to the app directory into this area (double-click to clear)" +msgstr "" + +#: tmainform.grp_lazautoupdater.caption +msgid "LazAutoUpdater Systray" +msgstr "" + +#: tmainform.grp_lazautoupdater.hint +msgid "Properties for the generated lauimport file" +msgstr "" + +#: tmainform.grp_tweaks.caption +msgid "Other LazAutoUpdate Tweaks" +msgstr "" + +#: tmainform.label1.caption +msgid "WhatsNew Textfile" +msgstr "" + +#: tmainform.lbl_appfilename.caption +msgid "Application to update: " +msgstr "" + +#: tmainform.lbl_createwhatsnew.caption +msgid "Create/Edit WhatsNew.txt :" +msgstr "" + +#: tmainform.lbl_intervaldate.caption +msgid "Use Monthdate.." +msgstr "" + +#: tmainform.lbl_intervalday.caption +msgid "Use Weekday.." +msgstr "" + +#: tmainform.lbl_intervaltype.caption +msgid "Check for updates every.." +msgstr "" + +#: tmainform.lbl_newversion.caption +msgid "New Version:" +msgstr "" + +#: tmainform.lbl_outputdirectory.caption +msgid "Output directory:" +msgstr "" + +#: tmainform.lbl_profile.caption +msgid "Profile name" +msgstr "" + +#: tmainform.lbl_sfprojectname.caption +msgid "SourceForge Project Name:" +msgstr "" + +#: tmainform.lbl_sfupdatesdirectory2.caption +msgid "...at..." +msgstr "" + +#: tmainform.lbl_updates.caption +msgid "Updates directory" +msgstr "" + +#: tmainform.lbl_versionsinifile.caption +msgid "versions.ini FileName" +msgstr "" + +#: tmainform.lbl_zipfilename.caption +msgid "Update Zipfile Name:" +msgstr "" + +#: tmainform.mnuoptions.caption +msgid "Options" +msgstr "" + +#: tmainform.mnuoptionsaftercreatepack.caption +msgid "After Create Pack.." +msgstr "" + +#: tmainform.mnuoptionsdisplayfilemanger.caption +msgid "Display file manager" +msgstr "" + +#: tmainform.mnuoptionsshowcodeinfo.caption +msgid "Show Code information" +msgstr "" + +#: tmainform.mnuoptionsshowonlinewebsite.caption +msgid "Show Online website" +msgstr "" + +#: tmainform.mnu_file.caption +msgid "&File" +msgstr "" + +#: tmainform.mnu_fileclose.caption +msgid "E&xit" +msgstr "" + +#: tmainform.mnu_filesaveprofile.caption +msgid "&Save profile" +msgstr "" + +#: tmainform.mnu_help.caption +msgid "&Help" +msgstr "" + +#: tmainform.mnu_helpabout.caption +msgid "About..." +msgstr "" + +#: tmainform.mnu_helpcheckforupdates.caption +msgid "Check for updates..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.caption +msgid "..." +msgstr "" + +#: tmainform.spd_whatsnewcreate.hint +msgid "Edit WhatsNew text file" +msgstr "" + +#: tmainform.spn1.hint +msgctxt "tmainform.spn1.hint" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn2.hint +msgctxt "TMAINFORM.SPN2.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn3.hint +msgctxt "TMAINFORM.SPN3.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.spn4.hint +msgctxt "TMAINFORM.SPN4.HINT" +msgid "" +"This is the version number of your updated app.\n" +"It should be greater than the version number\n" +"of the user's installed app in order for an update\n" +"to happen.\n" +msgstr "" + +#: tmainform.tab_advanced.caption +msgid "Advanced" +msgstr "" + +#: tmainform.tab_configure.caption +msgid "Configure" +msgstr "" + +#: tmainform.tab_configure.hint +msgid "" +"Use this page to configure the current profile.\n" +"Type in a different profile name in order to\n" +"make a new profile.\n" +msgstr "" + +#: tmainform.tab_intro.caption +msgid "Introduction" +msgstr "" + +#: tmainform.tab_intro.hint +msgid "Getting Started information" +msgstr "" + +#: tmemoform.caption +msgid "MemoForm" +msgstr "" + +#: tmemoform.cmd_close.caption +msgid "Save and &Close" +msgstr "" + +#: tmemoform.cmd_saveasandclose.caption +msgid "Save as... and &Close" +msgstr "" + +#: tmemoform.selectdirectorydialog1.title +msgid "Select Directory for whatsnew.txt" +msgstr "" + +#: umainform.rscannotdeletedefault +msgid "Sorry, you cannot delete this profile" +msgstr "" + +#: umainform.rsclosewithoutsaving +msgid "Save current profile to disk?" +msgstr "" + +#: umainform.rsconfigapplication +msgid "Application" +msgstr "" + +#: umainform.rsconfigversion +msgid "Version" +msgstr "" + +#: umainform.rscouldnotloca +msgid "Could not locate %s on the server" +msgstr "" + +#: umainform.rsdefaultprofilename +msgctxt "umainform.rsdefaultprofilename" +msgid "Default" +msgstr "" + +#: umainform.rsdownloadisin +msgid "Download is in progress. Please wait" +msgstr "" + +#: umainform.rsnewprofilecreated +msgid "New profile '%s' created successfully" +msgstr "" + +#: umainform.rsprofilesaved +msgid "Profile '%s' saved successfully" +msgstr "" + +#: umainform.rsthesourcefil +msgid "The source files are located in %s" +msgstr "" + +#: umainform.rsuseappnameversionsquestion +msgid "Update VersionsINI to %s.ini?" +msgstr "" + +#: umainform.rsuseappnamezipfilequestion +msgid "Update Zipfile to %s.zip?" +msgstr "" + +#: umainform.rsyourcopyofla +msgid "Your copy of LazAutoUpdate v%s is the latest version." +msgstr "" + diff --git a/components/lazautoupdate/latest_stable/updatepack/readme.txt b/components/lazautoupdate/latest_stable/updatepack/readme.txt new file mode 100644 index 000000000..42f80c249 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/readme.txt @@ -0,0 +1,31 @@ +Update Pack for LazAutoUpdate system Version 0.0.0.0 + +Getting Started + +* If you haven't installed the LazAutoUpdate component to your IDE yet, click the [Install Component] and the source code will be downloaded to a subfolder 'lazautoupdatesource/packagesource' from this one. Use the 'lazupdate.lpk' to install LazAutoUpdate into the 'System' tab of the Lazarus IDE + +* From time to time the component will be updated. Use the [Update Component] button to check and/or download the latest version. + +* This app uses 'profiles' so that you can manage the updating of many SourceForge projects at once. To make a new profile, type its name into the selection box and click the [New] button. + +* To change the 'App to Update', 'Output Directory' and 'WhatsNew TextFile' you need to use the 'directory' mini-buttons. The text cannot be edited directly. + +* The 'versions.ini' and 'SF Project Name' can be edited directly. + +* When the [Create Update Pack] is clicked, the Zip file is created, the versions ini file is created, and both are copied to the specified 'Output directory' - ready for you to upload. Sample Lazarus code is shown for you to copy and paste into your app + +* [Advanced Tab] + +* With CopyTree, you can update not only the application, but many directories and files at once. The directory you select will be cloned to the user's application folder. + + * You can also manually add files and folders to the generated zipfile before uploading it of course. + +* You can drag any extra files (not folders) into a list that should be updated into the user app's directory. + +* Other LazAutoUpdate Tweaks + + * By default, LazAutoUpdate does it's updating silently and unobtrusively, but you can set properties that give the user a more interactive experience. + + * The 'tweaks' setting are stored in each profile, and displayed in the Code window (shown after each 'Create Update') It is up to you to implement them in your application code of course. + +Click the [Configure] tab to continue... \ No newline at end of file diff --git a/components/lazautoupdate/latest_stable/updatepack/umainform.lfm b/components/lazautoupdate/latest_stable/updatepack/umainform.lfm new file mode 100644 index 000000000..e65118932 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umainform.lfm @@ -0,0 +1,782 @@ +object mainform: Tmainform + Left = 727 + Height = 481 + Top = 298 + Width = 587 + AllowDropFiles = True + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = 'mainform' + ClientHeight = 461 + ClientWidth = 587 + DefaultMonitor = dmPrimary + DragMode = dmAutomatic + Font.Height = -12 + Menu = MainMenu1 + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + OnDropFiles = FormDropFiles + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '1.7' + Scaled = True + object cmd_close: TBitBtn + Left = 500 + Height = 30 + Hint = 'Close the application' + Top = 420 + Width = 75 + DefaultCaption = True + Kind = bkClose + ModalResult = 11 + OnClick = mnu_fileCloseClick + TabOrder = 3 + end + object PageControl1: TPageControl + Left = 0 + Height = 412 + Top = 0 + Width = 587 + ActivePage = Tab_advanced + Align = alTop + ParentShowHint = False + TabIndex = 2 + TabOrder = 0 + object tab_intro: TTabSheet + Hint = 'Getting Started information' + Caption = 'Introduction' + ClientHeight = 384 + ClientWidth = 579 + ParentShowHint = False + ShowHint = True + object Memo_intro: TMemo + Left = 0 + Height = 384 + Top = 0 + Width = 579 + HelpType = htKeyword + Align = alClient + Lines.Strings = ( + 'Memo1' + ) + ScrollBars = ssAutoBoth + TabOrder = 0 + end + end + object tab_configure: TTabSheet + Hint = 'Use this page to configure the current profile.'#13#10'Type in a different profile name in order to'#13#10'make a new profile.' + Caption = 'Configure' + ClientHeight = 384 + ClientWidth = 579 + OnContextPopup = tab_configureContextPopup + ParentShowHint = False + ShowHint = True + object lbl_AppFilename: TLabel + Left = 16 + Height = 15 + Top = 48 + Width = 121 + Caption = 'Application to update: ' + ParentColor = False + end + object edt_AppFileName: TFileNameEdit + Left = 148 + Height = 23 + Hint = 'Use the directory mini-button.'#13#10'You cannot type into the box' + Top = 44 + Width = 403 + DialogTitle = 'Application to update' + DialogOptions = [ofPathMustExist, ofFileMustExist, ofNoTestFileCreate, ofEnableSizing, ofViewDetail] + Filter = 'Executable file|*.*;*|Linux Executable|*' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + DirectInput = False + NumGlyphs = 1 + MaxLength = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 1 + OnChange = edt_AppFileNameChange + OnKeyDown = edt_AppFileNameKeyDown + end + object lbl_NewVersion: TLabel + Left = 16 + Height = 15 + Top = 80 + Width = 68 + Caption = 'New Version:' + ParentColor = False + end + object spn1: TSpinEdit + Left = 148 + Height = 23 + Hint = 'This is the version number of your updated app.'#13#10'It should be greater than the version number'#13#10'of the user''s installed app in order for an update'#13#10'to happen.' + Top = 76 + Width = 42 + MaxValue = 99 + OnChange = spn1Change + TabOrder = 2 + end + object spn2: TSpinEdit + Left = 200 + Height = 23 + Hint = 'This is the version number of your updated app.'#13#10'It should be greater than the version number'#13#10'of the user''s installed app in order for an update'#13#10'to happen.' + Top = 76 + Width = 42 + MaxValue = 99 + OnChange = spn2Change + TabOrder = 3 + end + object spn3: TSpinEdit + Left = 252 + Height = 23 + Hint = 'This is the version number of your updated app.'#13#10'It should be greater than the version number'#13#10'of the user''s installed app in order for an update'#13#10'to happen.' + Top = 76 + Width = 42 + MaxValue = 99 + OnChange = spn3Change + TabOrder = 4 + end + object spn4: TSpinEdit + Left = 308 + Height = 23 + Hint = 'This is the version number of your updated app.'#13#10'It should be greater than the version number'#13#10'of the user''s installed app in order for an update'#13#10'to happen.' + Top = 76 + Width = 42 + MaxValue = 99 + OnChange = spn4Change + TabOrder = 5 + end + object edt_OutputDirectory: TDirectoryEdit + Left = 148 + Height = 23 + Hint = 'Use the directory mini-button.'#13#10'You cannot type into the box' + Top = 108 + Width = 404 + ShowHidden = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 6 + OnChange = edt_OutputDirectoryChange + OnKeyDown = edt_OutputDirectoryKeyDown + end + object lbl_outputdirectory: TLabel + Left = 16 + Height = 15 + Top = 116 + Width = 91 + Caption = 'Output directory:' + ParentColor = False + end + object cmb_profile: TComboBox + Left = 148 + Height = 23 + Hint = 'List of current profiles' + Top = 12 + Width = 176 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'Default' + ) + OnClick = cmb_profileClick + OnCloseUp = cmb_profileCloseUp + ParentShowHint = False + ShowHint = True + Style = csDropDownList + TabOrder = 0 + Text = 'Default' + end + object lbl_Profile: TLabel + Left = 16 + Height = 15 + Top = 16 + Width = 67 + Caption = 'Profile name' + ParentColor = False + end + object lbl_versionsinifile: TLabel + Left = 16 + Height = 15 + Top = 144 + Width = 112 + Caption = 'versions.ini FileName' + ParentColor = False + end + object Label1: TLabel + Left = 16 + Height = 15 + Top = 176 + Width = 97 + Caption = 'WhatsNew Textfile' + ParentColor = False + end + object edt_WhatsNewTextFile: TFileNameEdit + Left = 148 + Height = 23 + Hint = 'Use the directory mini-button.'#13#10'You cannot type into the box' + Top = 172 + Width = 204 + DialogOptions = [ofCreatePrompt, ofEnableSizing, ofViewDetail] + Filter = 'WhatsNew Textfile|whatsnew.txt' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 7 + OnChange = edt_WhatsNewTextFileChange + OnKeyDown = edt_WhatsNewTextFileKeyDown + end + object spd_WhatsNewCreate: TSpeedButton + Left = 549 + Height = 22 + Hint = 'Edit WhatsNew text file' + Top = 172 + Width = 23 + Caption = '...' + OnClick = spd_WhatsNewCreateClick + end + object lbl_CreateWhatsNew: TLabel + Left = 380 + Height = 15 + Top = 176 + Width = 141 + Caption = 'Create/Edit WhatsNew.txt :' + ParentColor = False + end + object lbl_SFProjectname: TLabel + Left = 16 + Height = 15 + Top = 208 + Width = 144 + Caption = 'SourceForge Project Name:' + ParentColor = False + end + object edt_SFProjectName: TEdit + Left = 184 + Height = 23 + Hint = 'This is the project title as displayed by'#13#10'Sourceforge in the project URL' + Top = 204 + Width = 367 + OnEditingDone = edt_SFProjectNameEditingDone + ParentShowHint = False + ShowHint = True + TabOrder = 8 + end + object lbl_ZipFileName: TLabel + Left = 16 + Height = 15 + Top = 240 + Width = 112 + Caption = 'Update Zipfile Name:' + ParentColor = False + end + object cmd_DeleteProfile: TButton + Left = 328 + Height = 25 + Hint = 'Deletes the current profile' + Top = 12 + Width = 75 + Caption = 'Delete' + OnClick = cmd_DeleteProfileClick + TabOrder = 9 + end + object cmd_NewProfile: TButton + Left = 412 + Height = 25 + Hint = 'Creates a new profile' + Top = 12 + Width = 75 + Caption = 'New' + OnClick = cmd_NewProfileClick + TabOrder = 10 + end + object cmd_UseAppnameVersionsINI: TButton + Left = 480 + Height = 25 + Hint = 'Use this to assign a unique value to the'#13#10'INI file or Zipfile names' + Top = 140 + Width = 92 + Caption = 'Use Appname' + OnClick = cmd_UseAppnameVersionsINIClick + ParentShowHint = False + ShowHint = True + TabOrder = 11 + end + object cmd_UseAppnameZipfileName: TButton + Left = 480 + Height = 25 + Hint = 'Use this to assign a unique value to the'#13#10'INI file or Zipfile names' + Top = 236 + Width = 92 + Caption = 'Use Appname' + OnClick = cmd_UseAppnameZipfileNameClick + ParentShowHint = False + ShowHint = True + TabOrder = 12 + end + object edt_VersionsINIFile: TFileNameEdit + Left = 148 + Height = 23 + Hint = 'Type the filename '#13#10'or use the directory mini-button'#13#10'or click the [Use Appname] button' + Top = 140 + Width = 304 + Filter = 'INI Files|*.ini' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 13 + OnChange = edt_VersionsINIFileChange + OnEditingDone = edt_VersionsINIFileEditingDone + end + object edt_ZipFileName: TFileNameEdit + Left = 148 + Height = 23 + Hint = 'Type the filename '#13#10'or use the directory mini-button'#13#10'or click the [Use Appname] button' + Top = 236 + Width = 304 + Filter = 'Zip Files|*.zip' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 14 + OnChange = edt_ZipFileNameChange + OnEditingDone = edt_ZipFileNameEditingDone + end + object grp_LazAutoUpdater: TGroupBox + Left = 0 + Height = 117 + Hint = 'Properties for the generated lauimport file' + Top = 267 + Width = 579 + Align = alBottom + Caption = 'LazAutoUpdater Systray' + ClientHeight = 97 + ClientWidth = 575 + TabOrder = 15 + object lbl_IntervalType: TLabel + Left = 8 + Height = 15 + Top = 40 + Width = 133 + Caption = 'Check for updates every..' + ParentColor = False + end + object cmb_IntervalType: TComboBox + Left = 168 + Height = 23 + Top = 36 + Width = 104 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'Day' + 'Week' + 'Month' + ) + OnChange = cmb_IntervalTypeChange + Style = csDropDownList + TabOrder = 0 + Text = 'Day' + end + object lbl_SFUpdatesDirectory2: TLabel + Left = 292 + Height = 15 + Top = 40 + Width = 28 + Caption = '...at...' + ParentColor = False + end + object cmb_IntervalHour: TComboBox + Left = 348 + Height = 23 + Top = 36 + Width = 104 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'Midnight' + '1am' + '2am' + '3am' + '4am' + '5am' + '6am' + '7am' + '8am' + '9am' + '10am' + '11am' + 'Noon' + '1pm' + '2pm' + '3pm' + '4pm' + '5pm' + '6pm' + '7pm' + '8pm' + '9pm' + '10pm' + '11pm' + ) + Style = csDropDownList + TabOrder = 1 + Text = 'Midnight' + end + object lbl_IntervalDay: TLabel + Left = 8 + Height = 15 + Top = 72 + Width = 76 + Caption = 'Use Weekday..' + ParentColor = False + end + object cmb_IntervalDay: TComboBox + Left = 168 + Height = 23 + Top = 68 + Width = 104 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'Monday' + 'Tuesday' + 'Wednesday' + 'Thursday' + 'Friday' + 'Saturday' + 'Sunday' + ) + Style = csDropDownList + TabOrder = 2 + Text = 'Monday' + end + object lbl_IntervalDate: TLabel + Left = 300 + Height = 15 + Top = 76 + Width = 87 + Caption = 'Use Monthdate..' + ParentColor = False + end + object cmb_IntervalDate: TComboBox + Left = 460 + Height = 23 + Top = 68 + Width = 104 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + '1' + '2' + '3' + '4' + '5' + '6' + '7' + '8' + '9' + '10' + '11' + '12' + '13' + '14' + '15' + '16' + '17' + '18' + '19' + '20' + '21' + '22' + '23' + '24' + '25' + '26' + '27' + '28' + '29' + '30' + '31' + ) + Style = csDropDownList + TabOrder = 3 + Text = '1' + end + object chk_overrideUserPrefs: TCheckBox + Left = 8 + Height = 19 + Hint = 'Leave this unchecked for the user to set their own schedule' + Top = 8 + Width = 262 + Caption = 'Override user preferences for update schedule' + OnClick = chk_overrideUserPrefsClick + TabOrder = 4 + end + end + end + object Tab_advanced: TTabSheet + Caption = 'Advanced' + ClientHeight = 384 + ClientWidth = 579 + object grp_CopyTree: TGroupBox + Left = 0 + Height = 65 + Top = 8 + Width = 579 + Caption = 'Update a whole directory tree' + ClientHeight = 45 + ClientWidth = 575 + TabOrder = 0 + object chk_UseCopyTree: TCheckBox + Left = 12 + Height = 19 + Top = 8 + Width = 93 + Caption = 'Use CopyTree' + OnChange = chk_UseCopyTreeChange + TabOrder = 0 + end + object edt_CopyTree: TDirectoryEdit + Left = 120 + Height = 23 + Top = 8 + Width = 420 + ShowHidden = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + TabOrder = 1 + OnChange = edt_CopyTreeChange + OnEditingDone = edt_CopyTreeEditingDone + end + end + object grp_Tweaks: TGroupBox + Left = 0 + Height = 108 + Top = 68 + Width = 579 + Caption = 'Other LazAutoUpdate Tweaks' + ClientHeight = 88 + ClientWidth = 575 + TabOrder = 1 + object chk_ShowUpdateInCaption: TCheckBox + Left = 12 + Height = 19 + Top = 16 + Width = 242 + Caption = 'Show update progress in form caption bar' + OnChange = chk_ShowUpdateInCaptionChange + TabOrder = 0 + end + object chk_ShowDialogs: TCheckBox + Left = 12 + Height = 19 + Top = 52 + Width = 220 + Caption = 'Allow LazAutoUpdate to show dialogs' + OnChange = chk_ShowDialogsChange + TabOrder = 1 + end + object chk_DebugMode: TCheckBox + Left = 292 + Height = 19 + Top = 16 + Width = 234 + Caption = 'Run LazAutoUpdate in Debugging Mode' + OnChange = chk_DebugModeChange + TabOrder = 2 + end + object lbl_Updates: TLabel + Left = 292 + Height = 15 + Top = 56 + Width = 93 + Caption = 'Updates directory' + ParentColor = False + end + object edt_Updates: TEdit + Left = 416 + Height = 23 + Top = 52 + Width = 108 + OnChange = edt_UpdatesChange + TabOrder = 3 + Text = 'updates' + end + end + object grp_dragfiles: TGroupBox + Left = 0 + Height = 200 + Top = 184 + Width = 579 + Align = alBottom + Caption = 'Drag extra files that update to the app directory into this area (double-click to clear)' + ClientHeight = 180 + ClientWidth = 575 + TabOrder = 2 + OnDblClick = grp_dragfilesDblClick + object lst_dragfiles: TListBox + Left = 0 + Height = 180 + Top = 0 + Width = 575 + Align = alClient + ItemHeight = 0 + OnDblClick = lst_dragfilesDblClick + ScrollWidth = 573 + TabOrder = 0 + end + end + end + end + object cmd_SaveProfile: TBitBtn + Left = 356 + Height = 30 + Hint = 'Click to save the current profile settings.'#13#10'This profile will show next time you sart this app.' + Top = 420 + Width = 136 + Caption = 'Save this Profile...' + Kind = bkOK + ModalResult = 1 + OnClick = cmd_SaveProfileClick + ParentShowHint = False + ShowHint = True + TabOrder = 2 + end + object cmd_MakeUpdatePack: TBitBtn + Left = 184 + Height = 30 + Hint = 'Once you are happy with the profile settings,'#13#10'click this to make the files ready to upload'#13#10'into your Sourceforge /updates folder' + Top = 420 + Width = 168 + Caption = 'Create Update Pack' + Default = True + Kind = bkYes + ModalResult = 6 + OnClick = cmd_MakeUpdatePackClick + ParentShowHint = False + ShowHint = True + TabOrder = 1 + end + object cmd_DownloadLazAutoUpdate: TBitBtn + Left = 8 + Height = 30 + Hint = 'Use this to download or update the latest version'#13#10'of the LazAutoUpdate component' + Top = 420 + Width = 176 + Caption = 'Download Component' + Kind = bkHelp + OnClick = cmd_DownloadLazAutoUpdateClick + ParentShowHint = False + ShowHint = True + TabOrder = 4 + end + object LazAutoUpdate1: TLazAutoUpdate + About.Description.Strings = ( + 'A component for updating your application'#13#10'Designed for projects hosted by SourceForge'#13#10#13#10'Main methods:'#13#10'Procedure AutoUpdate'#13#10'Function NewVersionAvailable: Boolean'#13#10'Function DownloadNewVersion: Boolean'#13#10'Function UpdateToNewVersion: Boolean'#13#10'Procedure ShowWhatsNewIfAvailable'#13#10'For troubleshooting, set DebugMode=TRUE' + ) + About.Title = 'About LazAutoUpdate' + About.Height = 450 + About.Width = 400 + About.Font.Color = clNavy + About.Font.Height = -13 + About.BackGroundColor = clWindow + About.Version = '0.1.1' + About.Authorname = 'Gordon Bamber' + About.Organisation = 'Public Domain' + About.AuthorEmail = 'minesadorada@gmail.com' + About.ComponentName = 'Laz Auto-update v0.1.1' + About.LicenseType = abLGPL + OnDebugEvent = LazAutoUpdate1DebugEvent + SFProjectName = 'lazautoupdate' + UpdatesFolder = 'updates' + VersionsININame = 'updatepack.ini' + ShowUpdateInCaption = True + VersionCountLimit = 1000000 + DownloadCountLimit = 10000000 + ZipfileName = 'updatepack.zip' + Left = 424 + Top = 40 + end + object MainMenu1: TMainMenu + Left = 344 + Top = 40 + object mnu_file: TMenuItem + Caption = '&File' + object mnu_fileSaveProfile: TMenuItem + Caption = '&Save profile' + OnClick = mnu_fileSaveProfileClick + end + object mnu_fileClose: TMenuItem + Caption = 'E&xit' + OnClick = mnu_fileCloseClick + end + end + object mnuOptions: TMenuItem + Caption = 'Options' + object mnuoptionsAfterCreatePack: TMenuItem + Caption = 'After Create Pack..' + object mnuoptionsShowCodeInfo: TMenuItem + AutoCheck = True + Caption = 'Show Code information' + ShowAlwaysCheckable = True + OnClick = mnuoptionsShowCodeInfoClick + end + object mnuoptionsDisplayFileManger: TMenuItem + AutoCheck = True + Caption = 'Display file manager' + ShowAlwaysCheckable = True + OnClick = mnuoptionsDisplayFileMangerClick + end + object mnuoptionsShowOnlineWebsite: TMenuItem + AutoCheck = True + Caption = 'Show Online website' + ShowAlwaysCheckable = True + OnClick = mnuoptionsShowOnlineWebsiteClick + end + end + end + object mnu_help: TMenuItem + Caption = '&Help' + object mnu_helpCheckForUpdates: TMenuItem + Caption = 'Check for updates...' + OnClick = mnu_helpCheckForUpdatesClick + end + object mnu_helpAbout: TMenuItem + Caption = 'About...' + OnClick = mnu_helpAboutClick + end + end + end + object EventLog1: TEventLog + AppendContent = False + LogType = ltFile + Active = False + RaiseExceptionOnError = False + DefaultEventType = etInfo + FileName = 'updatepack.log' + CustomLogType = 0 + EventIDOffset = 0 + Paused = False + Left = 512 + Top = 40 + end +end diff --git a/components/lazautoupdate/latest_stable/updatepack/umainform.lrj b/components/lazautoupdate/latest_stable/updatepack/umainform.lrj new file mode 100644 index 000000000..891a4f210 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umainform.lrj @@ -0,0 +1,78 @@ +{"version":1,"strings":[ +{"hash":134533565,"name":"tmainform.caption","sourcebytes":[109,97,105,110,102,111,114,109],"value":"mainform"}, +{"hash":241691054,"name":"tmainform.cmd_close.hint","sourcebytes":[67,108,111,115,101,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110],"value":"Close the application"}, +{"hash":4226318,"name":"tmainform.tab_intro.hint","sourcebytes":[71,101,116,116,105,110,103,32,83,116,97,114,116,101,100,32,105,110,102,111,114,109,97,116,105,111,110],"value":"Getting Started information"}, +{"hash":247404302,"name":"tmainform.tab_intro.caption","sourcebytes":[73,110,116,114,111,100,117,99,116,105,111,110],"value":"Introduction"}, +{"hash":50365982,"name":"tmainform.tab_configure.hint","sourcebytes":[85,115,101,32,116,104,105,115,32,112,97,103,101,32,116,111,32,99,111,110,102,105,103,117,114,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,102,105,108,101,46,13,10,84,121,112,101,32,105,110,32,97,32,100,105,102,102,101,114,101,110,116,32,112,114,111,102,105,108,101,32,110,97,109,101,32,105,110,32,111,114,100,101,114,32,116,111,13,10,109,97,107,101,32,97,32,110,101,119,32,112,114,111,102,105,108,101,46],"value":"Use this page to configure the current profile.\r\nType in a different profile name in order to\r\nmake a new profile."}, +{"hash":80717541,"name":"tmainform.tab_configure.caption","sourcebytes":[67,111,110,102,105,103,117,114,101],"value":"Configure"}, +{"hash":151217792,"name":"tmainform.lbl_appfilename.caption","sourcebytes":[65,112,112,108,105,99,97,116,105,111,110,32,116,111,32,117,112,100,97,116,101,58,32],"value":"Application to update: "}, +{"hash":214972888,"name":"tmainform.edt_appfilename.hint","sourcebytes":[85,115,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,105,110,105,45,98,117,116,116,111,110,46,13,10,89,111,117,32,99,97,110,110,111,116,32,116,121,112,101,32,105,110,116,111,32,116,104,101,32,98,111,120],"value":"Use the directory mini-button.\r\nYou cannot type into the box"}, +{"hash":164983258,"name":"tmainform.lbl_newversion.caption","sourcebytes":[78,101,119,32,86,101,114,115,105,111,110,58],"value":"New Version:"}, +{"hash":156359326,"name":"tmainform.spn1.hint","sourcebytes":[84,104,105,115,32,105,115,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,121,111,117,114,32,117,112,100,97,116,101,100,32,97,112,112,46,13,10,73,116,32,115,104,111,117,108,100,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,13,10,111,102,32,116,104,101,32,117,115,101,114,39,115,32,105,110,115,116,97,108,108,101,100,32,97,112,112,32,105,110,32,111,114,100,101,114,32,102,111,114,32,97,110,32,117,112,100,97,116,101,13,10,116,111,32,104,97,112,112,101,110,46],"value":"This is the version number of your updated app.\r\nIt should be greater than the version number\r\nof the user's installed app in order for an update\r\nto happen."}, +{"hash":156359326,"name":"tmainform.spn2.hint","sourcebytes":[84,104,105,115,32,105,115,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,121,111,117,114,32,117,112,100,97,116,101,100,32,97,112,112,46,13,10,73,116,32,115,104,111,117,108,100,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,13,10,111,102,32,116,104,101,32,117,115,101,114,39,115,32,105,110,115,116,97,108,108,101,100,32,97,112,112,32,105,110,32,111,114,100,101,114,32,102,111,114,32,97,110,32,117,112,100,97,116,101,13,10,116,111,32,104,97,112,112,101,110,46],"value":"This is the version number of your updated app.\r\nIt should be greater than the version number\r\nof the user's installed app in order for an update\r\nto happen."}, +{"hash":156359326,"name":"tmainform.spn3.hint","sourcebytes":[84,104,105,115,32,105,115,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,121,111,117,114,32,117,112,100,97,116,101,100,32,97,112,112,46,13,10,73,116,32,115,104,111,117,108,100,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,13,10,111,102,32,116,104,101,32,117,115,101,114,39,115,32,105,110,115,116,97,108,108,101,100,32,97,112,112,32,105,110,32,111,114,100,101,114,32,102,111,114,32,97,110,32,117,112,100,97,116,101,13,10,116,111,32,104,97,112,112,101,110,46],"value":"This is the version number of your updated app.\r\nIt should be greater than the version number\r\nof the user's installed app in order for an update\r\nto happen."}, +{"hash":156359326,"name":"tmainform.spn4.hint","sourcebytes":[84,104,105,115,32,105,115,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,111,102,32,121,111,117,114,32,117,112,100,97,116,101,100,32,97,112,112,46,13,10,73,116,32,115,104,111,117,108,100,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,13,10,111,102,32,116,104,101,32,117,115,101,114,39,115,32,105,110,115,116,97,108,108,101,100,32,97,112,112,32,105,110,32,111,114,100,101,114,32,102,111,114,32,97,110,32,117,112,100,97,116,101,13,10,116,111,32,104,97,112,112,101,110,46],"value":"This is the version number of your updated app.\r\nIt should be greater than the version number\r\nof the user's installed app in order for an update\r\nto happen."}, +{"hash":214972888,"name":"tmainform.edt_outputdirectory.hint","sourcebytes":[85,115,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,105,110,105,45,98,117,116,116,111,110,46,13,10,89,111,117,32,99,97,110,110,111,116,32,116,121,112,101,32,105,110,116,111,32,116,104,101,32,98,111,120],"value":"Use the directory mini-button.\r\nYou cannot type into the box"}, +{"hash":127603258,"name":"tmainform.lbl_outputdirectory.caption","sourcebytes":[79,117,116,112,117,116,32,100,105,114,101,99,116,111,114,121,58],"value":"Output directory:"}, +{"hash":21999443,"name":"tmainform.cmb_profile.hint","sourcebytes":[76,105,115,116,32,111,102,32,99,117,114,114,101,110,116,32,112,114,111,102,105,108,101,115],"value":"List of current profiles"}, +{"hash":180128884,"name":"tmainform.cmb_profile.text","sourcebytes":[68,101,102,97,117,108,116],"value":"Default"}, +{"hash":118496053,"name":"tmainform.lbl_profile.caption","sourcebytes":[80,114,111,102,105,108,101,32,110,97,109,101],"value":"Profile name"}, +{"hash":55495509,"name":"tmainform.lbl_versionsinifile.caption","sourcebytes":[118,101,114,115,105,111,110,115,46,105,110,105,32,70,105,108,101,78,97,109,101],"value":"versions.ini FileName"}, +{"hash":82555701,"name":"tmainform.label1.caption","sourcebytes":[87,104,97,116,115,78,101,119,32,84,101,120,116,102,105,108,101],"value":"WhatsNew Textfile"}, +{"hash":214972888,"name":"tmainform.edt_whatsnewtextfile.hint","sourcebytes":[85,115,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,105,110,105,45,98,117,116,116,111,110,46,13,10,89,111,117,32,99,97,110,110,111,116,32,116,121,112,101,32,105,110,116,111,32,116,104,101,32,98,111,120],"value":"Use the directory mini-button.\r\nYou cannot type into the box"}, +{"hash":238718917,"name":"tmainform.spd_whatsnewcreate.hint","sourcebytes":[69,100,105,116,32,87,104,97,116,115,78,101,119,32,116,101,120,116,32,102,105,108,101],"value":"Edit WhatsNew text file"}, +{"hash":12558,"name":"tmainform.spd_whatsnewcreate.caption","sourcebytes":[46,46,46],"value":"..."}, +{"hash":100152250,"name":"tmainform.lbl_createwhatsnew.caption","sourcebytes":[67,114,101,97,116,101,47,69,100,105,116,32,87,104,97,116,115,78,101,119,46,116,120,116,32,58],"value":"Create/Edit WhatsNew.txt :"}, +{"hash":115750586,"name":"tmainform.lbl_sfprojectname.caption","sourcebytes":[83,111,117,114,99,101,70,111,114,103,101,32,80,114,111,106,101,99,116,32,78,97,109,101,58],"value":"SourceForge Project Name:"}, +{"hash":211704412,"name":"tmainform.edt_sfprojectname.hint","sourcebytes":[84,104,105,115,32,105,115,32,116,104,101,32,112,114,111,106,101,99,116,32,116,105,116,108,101,32,97,115,32,100,105,115,112,108,97,121,101,100,32,98,121,13,10,83,111,117,114,99,101,102,111,114,103,101,32,105,110,32,116,104,101,32,112,114,111,106,101,99,116,32,85,82,76],"value":"This is the project title as displayed by\r\nSourceforge in the project URL"}, +{"hash":16395530,"name":"tmainform.lbl_zipfilename.caption","sourcebytes":[85,112,100,97,116,101,32,90,105,112,102,105,108,101,32,78,97,109,101,58],"value":"Update Zipfile Name:"}, +{"hash":103972133,"name":"tmainform.cmd_deleteprofile.hint","sourcebytes":[68,101,108,101,116,101,115,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,102,105,108,101],"value":"Deletes the current profile"}, +{"hash":78392485,"name":"tmainform.cmd_deleteprofile.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, +{"hash":260803253,"name":"tmainform.cmd_newprofile.hint","sourcebytes":[67,114,101,97,116,101,115,32,97,32,110,101,119,32,112,114,111,102,105,108,101],"value":"Creates a new profile"}, +{"hash":21703,"name":"tmainform.cmd_newprofile.caption","sourcebytes":[78,101,119],"value":"New"}, +{"hash":14444883,"name":"tmainform.cmd_useappnameversionsini.hint","sourcebytes":[85,115,101,32,116,104,105,115,32,116,111,32,97,115,115,105,103,110,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,116,111,32,116,104,101,13,10,73,78,73,32,102,105,108,101,32,111,114,32,90,105,112,102,105,108,101,32,110,97,109,101,115],"value":"Use this to assign a unique value to the\r\nINI file or Zipfile names"}, +{"hash":137089397,"name":"tmainform.cmd_useappnameversionsini.caption","sourcebytes":[85,115,101,32,65,112,112,110,97,109,101],"value":"Use Appname"}, +{"hash":14444883,"name":"tmainform.cmd_useappnamezipfilename.hint","sourcebytes":[85,115,101,32,116,104,105,115,32,116,111,32,97,115,115,105,103,110,32,97,32,117,110,105,113,117,101,32,118,97,108,117,101,32,116,111,32,116,104,101,13,10,73,78,73,32,102,105,108,101,32,111,114,32,90,105,112,102,105,108,101,32,110,97,109,101,115],"value":"Use this to assign a unique value to the\r\nINI file or Zipfile names"}, +{"hash":137089397,"name":"tmainform.cmd_useappnamezipfilename.caption","sourcebytes":[85,115,101,32,65,112,112,110,97,109,101],"value":"Use Appname"}, +{"hash":99683710,"name":"tmainform.edt_versionsinifile.hint","sourcebytes":[84,121,112,101,32,116,104,101,32,102,105,108,101,110,97,109,101,32,13,10,111,114,32,117,115,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,105,110,105,45,98,117,116,116,111,110,13,10,111,114,32,99,108,105,99,107,32,116,104,101,32,91,85,115,101,32,65,112,112,110,97,109,101,93,32,98,117,116,116,111,110],"value":"Type the filename \r\nor use the directory mini-button\r\nor click the [Use Appname] button"}, +{"hash":99683710,"name":"tmainform.edt_zipfilename.hint","sourcebytes":[84,121,112,101,32,116,104,101,32,102,105,108,101,110,97,109,101,32,13,10,111,114,32,117,115,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,105,110,105,45,98,117,116,116,111,110,13,10,111,114,32,99,108,105,99,107,32,116,104,101,32,91,85,115,101,32,65,112,112,110,97,109,101,93,32,98,117,116,116,111,110],"value":"Type the filename \r\nor use the directory mini-button\r\nor click the [Use Appname] button"}, +{"hash":75642501,"name":"tmainform.grp_lazautoupdater.hint","sourcebytes":[80,114,111,112,101,114,116,105,101,115,32,102,111,114,32,116,104,101,32,103,101,110,101,114,97,116,101,100,32,108,97,117,105,109,112,111,114,116,32,102,105,108,101],"value":"Properties for the generated lauimport file"}, +{"hash":156244057,"name":"tmainform.grp_lazautoupdater.caption","sourcebytes":[76,97,122,65,117,116,111,85,112,100,97,116,101,114,32,83,121,115,116,114,97,121],"value":"LazAutoUpdater Systray"}, +{"hash":13221934,"name":"tmainform.lbl_intervaltype.caption","sourcebytes":[67,104,101,99,107,32,102,111,114,32,117,112,100,97,116,101,115,32,101,118,101,114,121,46,46],"value":"Check for updates every.."}, +{"hash":19081,"name":"tmainform.cmb_intervaltype.text","sourcebytes":[68,97,121],"value":"Day"}, +{"hash":21525534,"name":"tmainform.lbl_sfupdatesdirectory2.caption","sourcebytes":[46,46,46,97,116,46,46,46],"value":"...at..."}, +{"hash":263518404,"name":"tmainform.cmb_intervalhour.text","sourcebytes":[77,105,100,110,105,103,104,116],"value":"Midnight"}, +{"hash":143513582,"name":"tmainform.lbl_intervalday.caption","sourcebytes":[85,115,101,32,87,101,101,107,100,97,121,46,46],"value":"Use Weekday.."}, +{"hash":88492681,"name":"tmainform.cmb_intervalday.text","sourcebytes":[77,111,110,100,97,121],"value":"Monday"}, +{"hash":167558974,"name":"tmainform.lbl_intervaldate.caption","sourcebytes":[85,115,101,32,77,111,110,116,104,100,97,116,101,46,46],"value":"Use Monthdate.."}, +{"hash":49,"name":"tmainform.cmb_intervaldate.text","sourcebytes":[49],"value":"1"}, +{"hash":218454885,"name":"tmainform.chk_overrideuserprefs.hint","sourcebytes":[76,101,97,118,101,32,116,104,105,115,32,117,110,99,104,101,99,107,101,100,32,102,111,114,32,116,104,101,32,117,115,101,114,32,116,111,32,115,101,116,32,116,104,101,105,114,32,111,119,110,32,115,99,104,101,100,117,108,101],"value":"Leave this unchecked for the user to set their own schedule"}, +{"hash":110547701,"name":"tmainform.chk_overrideuserprefs.caption","sourcebytes":[79,118,101,114,114,105,100,101,32,117,115,101,114,32,112,114,101,102,101,114,101,110,99,101,115,32,102,111,114,32,117,112,100,97,116,101,32,115,99,104,101,100,117,108,101],"value":"Override user preferences for update schedule"}, +{"hash":197676484,"name":"tmainform.tab_advanced.caption","sourcebytes":[65,100,118,97,110,99,101,100],"value":"Advanced"}, +{"hash":213139413,"name":"tmainform.grp_copytree.caption","sourcebytes":[85,112,100,97,116,101,32,97,32,119,104,111,108,101,32,100,105,114,101,99,116,111,114,121,32,116,114,101,101],"value":"Update a whole directory tree"}, +{"hash":62376981,"name":"tmainform.chk_usecopytree.caption","sourcebytes":[85,115,101,32,67,111,112,121,84,114,101,101],"value":"Use CopyTree"}, +{"hash":198423891,"name":"tmainform.grp_tweaks.caption","sourcebytes":[79,116,104,101,114,32,76,97,122,65,117,116,111,85,112,100,97,116,101,32,84,119,101,97,107,115],"value":"Other LazAutoUpdate Tweaks"}, +{"hash":80548466,"name":"tmainform.chk_showupdateincaption.caption","sourcebytes":[83,104,111,119,32,117,112,100,97,116,101,32,112,114,111,103,114,101,115,115,32,105,110,32,102,111,114,109,32,99,97,112,116,105,111,110,32,98,97,114],"value":"Show update progress in form caption bar"}, +{"hash":1072851,"name":"tmainform.chk_showdialogs.caption","sourcebytes":[65,108,108,111,119,32,76,97,122,65,117,116,111,85,112,100,97,116,101,32,116,111,32,115,104,111,119,32,100,105,97,108,111,103,115],"value":"Allow LazAutoUpdate to show dialogs"}, +{"hash":242292901,"name":"tmainform.chk_debugmode.caption","sourcebytes":[82,117,110,32,76,97,122,65,117,116,111,85,112,100,97,116,101,32,105,110,32,68,101,98,117,103,103,105,110,103,32,77,111,100,101],"value":"Run LazAutoUpdate in Debugging Mode"}, +{"hash":35895065,"name":"tmainform.lbl_updates.caption","sourcebytes":[85,112,100,97,116,101,115,32,100,105,114,101,99,116,111,114,121],"value":"Updates directory"}, +{"hash":208308915,"name":"tmainform.edt_updates.text","sourcebytes":[117,112,100,97,116,101,115],"value":"updates"}, +{"hash":146567577,"name":"tmainform.grp_dragfiles.caption","sourcebytes":[68,114,97,103,32,101,120,116,114,97,32,102,105,108,101,115,32,116,104,97,116,32,117,112,100,97,116,101,32,116,111,32,116,104,101,32,97,112,112,32,100,105,114,101,99,116,111,114,121,32,105,110,116,111,32,116,104,105,115,32,97,114,101,97,32,40,100,111,117,98,108,101,45,99,108,105,99,107,32,116,111,32,99,108,101,97,114,41],"value":"Drag extra files that update to the app directory into this area (double-click to clear)"}, +{"hash":73725134,"name":"tmainform.cmd_saveprofile.hint","sourcebytes":[67,108,105,99,107,32,116,111,32,115,97,118,101,32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111,102,105,108,101,32,115,101,116,116,105,110,103,115,46,13,10,84,104,105,115,32,112,114,111,102,105,108,101,32,119,105,108,108,32,115,104,111,119,32,110,101,120,116,32,116,105,109,101,32,121,111,117,32,115,97,114,116,32,116,104,105,115,32,97,112,112,46],"value":"Click to save the current profile settings.\r\nThis profile will show next time you sart this app."}, +{"hash":74484190,"name":"tmainform.cmd_saveprofile.caption","sourcebytes":[83,97,118,101,32,116,104,105,115,32,80,114,111,102,105,108,101,46,46,46],"value":"Save this Profile..."}, +{"hash":51944066,"name":"tmainform.cmd_makeupdatepack.hint","sourcebytes":[79,110,99,101,32,121,111,117,32,97,114,101,32,104,97,112,112,121,32,119,105,116,104,32,116,104,101,32,112,114,111,102,105,108,101,32,115,101,116,116,105,110,103,115,44,13,10,99,108,105,99,107,32,116,104,105,115,32,116,111,32,109,97,107,101,32,116,104,101,32,102,105,108,101,115,32,114,101,97,100,121,32,116,111,32,117,112,108,111,97,100,13,10,105,110,116,111,32,121,111,117,114,32,83,111,117,114,99,101,102,111,114,103,101,32,47,117,112,100,97,116,101,115,32,102,111,108,100,101,114],"value":"Once you are happy with the profile settings,\r\nclick this to make the files ready to upload\r\ninto your Sourceforge /updates folder"}, +{"hash":159495611,"name":"tmainform.cmd_makeupdatepack.caption","sourcebytes":[67,114,101,97,116,101,32,85,112,100,97,116,101,32,80,97,99,107],"value":"Create Update Pack"}, +{"hash":236511540,"name":"tmainform.cmd_downloadlazautoupdate.hint","sourcebytes":[85,115,101,32,116,104,105,115,32,116,111,32,100,111,119,110,108,111,97,100,32,111,114,32,117,112,100,97,116,101,32,116,104,101,32,108,97,116,101,115,116,32,118,101,114,115,105,111,110,13,10,111,102,32,116,104,101,32,76,97,122,65,117,116,111,85,112,100,97,116,101,32,99,111,109,112,111,110,101,110,116],"value":"Use this to download or update the latest version\r\nof the LazAutoUpdate component"}, +{"hash":95872804,"name":"tmainform.cmd_downloadlazautoupdate.caption","sourcebytes":[68,111,119,110,108,111,97,100,32,67,111,109,112,111,110,101,110,116],"value":"Download Component"}, +{"hash":2805797,"name":"tmainform.mnu_file.caption","sourcebytes":[38,70,105,108,101],"value":"&File"}, +{"hash":204278133,"name":"tmainform.mnu_filesaveprofile.caption","sourcebytes":[38,83,97,118,101,32,112,114,111,102,105,108,101],"value":"&Save profile"}, +{"hash":4710148,"name":"tmainform.mnu_fileclose.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, +{"hash":108725763,"name":"tmainform.mnuoptions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"}, +{"hash":137811070,"name":"tmainform.mnuoptionsaftercreatepack.caption","sourcebytes":[65,102,116,101,114,32,67,114,101,97,116,101,32,80,97,99,107,46,46],"value":"After Create Pack.."}, +{"hash":180633454,"name":"tmainform.mnuoptionsshowcodeinfo.caption","sourcebytes":[83,104,111,119,32,67,111,100,101,32,105,110,102,111,114,109,97,116,105,111,110],"value":"Show Code information"}, +{"hash":86865586,"name":"tmainform.mnuoptionsdisplayfilemanger.caption","sourcebytes":[68,105,115,112,108,97,121,32,102,105,108,101,32,109,97,110,97,103,101,114],"value":"Display file manager"}, +{"hash":56840901,"name":"tmainform.mnuoptionsshowonlinewebsite.caption","sourcebytes":[83,104,111,119,32,79,110,108,105,110,101,32,119,101,98,115,105,116,101],"value":"Show Online website"}, +{"hash":2812976,"name":"tmainform.mnu_help.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, +{"hash":5395918,"name":"tmainform.mnu_helpcheckforupdates.caption","sourcebytes":[67,104,101,99,107,32,102,111,114,32,117,112,100,97,116,101,115,46,46,46],"value":"Check for updates..."}, +{"hash":158102910,"name":"tmainform.mnu_helpabout.caption","sourcebytes":[65,98,111,117,116,46,46,46],"value":"About..."} +]} diff --git a/components/lazautoupdate/latest_stable/updatepack/umainform.lrt b/components/lazautoupdate/latest_stable/updatepack/umainform.lrt new file mode 100644 index 000000000..e2aad76e6 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umainform.lrt @@ -0,0 +1,104 @@ +TMAINFORM.CAPTION=mainform +TMAINFORM.CMD_CLOSE.HINT=Close the application +TMAINFORM.TAB_INTRO.HINT=Getting Started information +TMAINFORM.TAB_INTRO.CAPTION=Introduction +TMAINFORM.TAB_CONFIGURE.HINT=Use this page to configure the current profile. +Type in a different profile name in order to +make a new profile. +TMAINFORM.TAB_CONFIGURE.CAPTION=Configure +TMAINFORM.LBL_APPFILENAME.CAPTION=Application to update: +TMAINFORM.EDT_APPFILENAME.HINT=Use the directory mini-button. +You cannot type into the box +TMAINFORM.LBL_NEWVERSION.CAPTION=New Version: +TMAINFORM.SPN1.HINT=This is the version number of your updated app. +It should be greater than the version number +of the user's installed app in order for an update +to happen. +TMAINFORM.SPN2.HINT=This is the version number of your updated app. +It should be greater than the version number +of the user's installed app in order for an update +to happen. +TMAINFORM.SPN3.HINT=This is the version number of your updated app. +It should be greater than the version number +of the user's installed app in order for an update +to happen. +TMAINFORM.SPN4.HINT=This is the version number of your updated app. +It should be greater than the version number +of the user's installed app in order for an update +to happen. +TMAINFORM.EDT_OUTPUTDIRECTORY.HINT=Use the directory mini-button. +You cannot type into the box +TMAINFORM.LBL_OUTPUTDIRECTORY.CAPTION=Output directory: +TMAINFORM.CMB_PROFILE.HINT=List of current profiles +TMAINFORM.CMB_PROFILE.TEXT=Default +TMAINFORM.LBL_PROFILE.CAPTION=Profile name +TMAINFORM.LBL_VERSIONSINIFILE.CAPTION=versions.ini FileName +TMAINFORM.LABEL1.CAPTION=WhatsNew Textfile +TMAINFORM.EDT_WHATSNEWTEXTFILE.HINT=Use the directory mini-button. +You cannot type into the box +TMAINFORM.SPD_WHATSNEWCREATE.HINT=Edit WhatsNew text file +TMAINFORM.SPD_WHATSNEWCREATE.CAPTION=... +TMAINFORM.LBL_CREATEWHATSNEW.CAPTION=Create/Edit WhatsNew.txt : +TMAINFORM.LBL_SFPROJECTNAME.CAPTION=SourceForge Project Name: +TMAINFORM.EDT_SFPROJECTNAME.HINT=This is the project title as displayed by +Sourceforge in the project URL +TMAINFORM.LBL_ZIPFILENAME.CAPTION=Update Zipfile Name: +TMAINFORM.CMD_DELETEPROFILE.HINT=Deletes the current profile +TMAINFORM.CMD_DELETEPROFILE.CAPTION=Delete +TMAINFORM.CMD_NEWPROFILE.HINT=Creates a new profile +TMAINFORM.CMD_NEWPROFILE.CAPTION=New +TMAINFORM.CMD_USEAPPNAMEVERSIONSINI.HINT=Use this to assign a unique value to the +INI file or Zipfile names +TMAINFORM.CMD_USEAPPNAMEVERSIONSINI.CAPTION=Use Appname +TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.HINT=Use this to assign a unique value to the +INI file or Zipfile names +TMAINFORM.CMD_USEAPPNAMEZIPFILENAME.CAPTION=Use Appname +TMAINFORM.EDT_VERSIONSINIFILE.HINT=Type the filename +or use the directory mini-button +or click the [Use Appname] button +TMAINFORM.EDT_ZIPFILENAME.HINT=Type the filename +or use the directory mini-button +or click the [Use Appname] button +TMAINFORM.GRP_LAZAUTOUPDATER.HINT=Properties for the generated lauimport file +TMAINFORM.GRP_LAZAUTOUPDATER.CAPTION=LazAutoUpdater Systray +TMAINFORM.LBL_INTERVALTYPE.CAPTION=Check for updates every.. +TMAINFORM.CMB_INTERVALTYPE.TEXT=Day +TMAINFORM.LBL_SFUPDATESDIRECTORY2.CAPTION=...at... +TMAINFORM.CMB_INTERVALHOUR.TEXT=Midnight +TMAINFORM.LBL_INTERVALDAY.CAPTION=Use Weekday.. +TMAINFORM.CMB_INTERVALDAY.TEXT=Monday +TMAINFORM.LBL_INTERVALDATE.CAPTION=Use Monthdate.. +TMAINFORM.CMB_INTERVALDATE.TEXT=1 +TMAINFORM.CHK_OVERRIDEUSERPREFS.HINT=Leave this unchecked for the user to set their own schedule +TMAINFORM.CHK_OVERRIDEUSERPREFS.CAPTION=Override user preferences for update schedule +TMAINFORM.TAB_ADVANCED.CAPTION=Advanced +TMAINFORM.GRP_COPYTREE.CAPTION=Update a whole directory tree +TMAINFORM.CHK_USECOPYTREE.CAPTION=Use CopyTree +TMAINFORM.GRP_TWEAKS.CAPTION=Other LazAutoUpdate Tweaks +TMAINFORM.CHK_SHOWUPDATEINCAPTION.CAPTION=Show update progress in form caption bar +TMAINFORM.CHK_SHOWDIALOGS.CAPTION=Allow LazAutoUpdate to show dialogs +TMAINFORM.CHK_DEBUGMODE.CAPTION=Run LazAutoUpdate in Debugging Mode +TMAINFORM.LBL_UPDATES.CAPTION=Updates directory +TMAINFORM.EDT_UPDATES.TEXT=updates +TMAINFORM.GRP_DRAGFILES.CAPTION=Drag extra files that update to the app directory into this area (double-click to clear) +TMAINFORM.CMD_SAVEPROFILE.HINT=Click to save the current profile settings. +This profile will show next time you sart this app. +TMAINFORM.CMD_SAVEPROFILE.CAPTION=Save this Profile... +TMAINFORM.CMD_MAKEUPDATEPACK.HINT=Once you are happy with the profile settings, +click this to make the files ready to upload +into your Sourceforge /updates folder +TMAINFORM.CMD_MAKEUPDATEPACK.CAPTION=Create Update Pack +TMAINFORM.CMD_DOWNLOADLAZAUTOUPDATE.HINT=Use this to download or update the latest version +of the LazAutoUpdate component +TMAINFORM.CMD_DOWNLOADLAZAUTOUPDATE.CAPTION=Download Component +TMAINFORM.MNU_FILE.CAPTION=&File +TMAINFORM.MNU_FILESAVEPROFILE.CAPTION=&Save profile +TMAINFORM.MNU_FILECLOSE.CAPTION=E&xit +TMAINFORM.MNUOPTIONS.CAPTION=Options +TMAINFORM.MNUOPTIONSAFTERCREATEPACK.CAPTION=After Create Pack.. +TMAINFORM.MNUOPTIONSSHOWCODEINFO.CAPTION=Show Code information +TMAINFORM.MNUOPTIONSDISPLAYFILEMANGER.CAPTION=Display file manager +TMAINFORM.MNUOPTIONSSHOWSFWEBSITE.CAPTION=Show Sourceforge website +TMAINFORM.MNU_HELP.CAPTION=&Help +TMAINFORM.MNU_HELPCHECKFORUPDATES.CAPTION=Check for updates... +TMAINFORM.MNU_HELPABOUT.CAPTION=About... diff --git a/components/lazautoupdate/latest_stable/updatepack/umainform.pas b/components/lazautoupdate/latest_stable/updatepack/umainform.pas new file mode 100644 index 000000000..d3fa10549 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umainform.pas @@ -0,0 +1,1358 @@ +unit umainform; + +{ LazAutoUpdate Pack system + + Copyright (C)2014 Gordon Bamber (minesadorada@charcodelvalle.com) + + This source is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This code 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 General Public License for more + details. + + A copy of the GNU General Public License is available on the World Wide Web + at . You can also obtain it by writing + to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + This application is a partner to the LazAutoUpdate Lazarus visual component. + + If your SourceForge-hosted application uses LazAutoUpdate, then this app + can be used to manage updates throughout the lifetime of your product. + + Developed using Lazarus 1.2.4 and FPC 2.6.4 + OS: Windows 32/64-bit, Linux 32/64-bit + Version as per project setting + Licence: GPL. Contact the author for conditions. + September 2014 +} + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LazUTF8,LazFileUtils,FileUtil, Forms, Controls, Dialogs, + Buttons, Menus, StdCtrls, EditBtn, Spin, ComCtrls, ulazautoupdate, inifiles, + eventlog, umemoform, Zipper, strutils, asyncprocess, lclintf, types; + +type + // Use FillVersionString and FillVersionInteger + // to convert between VString and VIntegers + TVersionRec = record + VString: string; + v1, v2, v3, v4: integer; + end; + // Used as intermediate storage + TProfileRec = record + ProfileName: string; + AppPath: string; + NewVersion: TVersionRec; + OutDir: string; + VersionsINI: string; + WhatsNewPath: string; + SFProjectName: string; + ZipFileName: string; + CopyTree: boolean; + CopyTreeDirectory: string; + SFUpdatesDirectory: string; + ShowUpdatesInCaption: boolean; + ShowDialogs: boolean; + DebugMode: boolean; + OverRideUserPrefs: boolean; + IntervalType: word; + IntervalDay: word; + IntervalDate: word; + IntervalHour: word; + DragFileStringList: TStringList; + end; + { Tmainform } + + Tmainform = class(TForm) + chk_overrideUserPrefs: TCheckBox; + chk_DebugMode: TCheckBox; + chk_ShowDialogs: TCheckBox; + chk_ShowUpdateInCaption: TCheckBox; + chk_UseCopyTree: TCheckBox; + cmb_IntervalDate: TComboBox; + cmb_IntervalDay: TComboBox; + cmb_IntervalHour: TComboBox; + cmb_IntervalType: TComboBox; + cmd_DownloadLazAutoUpdate: TBitBtn; + cmd_UseAppnameVersionsINI: TButton; + cmd_UseAppnameZipfileName: TButton; + cmd_NewProfile: TButton; + cmd_DeleteProfile: TButton; + cmd_MakeUpdatePack: TBitBtn; + cmd_SaveProfile: TBitBtn; + cmd_close: TBitBtn; + cmb_profile: TComboBox; + edt_Updates: TEdit; + edt_CopyTree: TDirectoryEdit; + edt_SFProjectName: TEdit; + edt_ZipFileName: TFileNameEdit; + edt_WhatsNewTextFile: TFileNameEdit; + edt_OutputDirectory: TDirectoryEdit; + edt_AppFileName: TFileNameEdit; + edt_VersionsINIFile: TFileNameEdit; + EventLog1: TEventLog; + grp_LazAutoUpdater: TGroupBox; + grp_dragfiles: TGroupBox; + grp_Tweaks: TGroupBox; + grp_CopyTree: TGroupBox; + Label1: TLabel; + lbl_IntervalDate: TLabel; + lbl_IntervalDay: TLabel; + lbl_IntervalType: TLabel; + lbl_SFUpdatesDirectory2: TLabel; + lbl_Updates: TLabel; + lbl_CreateWhatsNew: TLabel; + lbl_versionsinifile: TLabel; + lbl_Profile: TLabel; + lbl_outputdirectory: TLabel; + LazAutoUpdate1: TLazAutoUpdate; + lbl_AppFilename: TLabel; + lbl_NewVersion: TLabel; + lbl_SFProjectname: TLabel; + lbl_ZipFileName: TLabel; + lst_dragfiles: TListBox; + MainMenu1: TMainMenu; + Memo_intro: TMemo; + mnuoptionsShowOnlineWebsite: TMenuItem; + mnuoptionsDisplayFileManger: TMenuItem; + mnuoptionsShowCodeInfo: TMenuItem; + mnuoptionsAfterCreatePack: TMenuItem; + mnuOptions: TMenuItem; + mnu_helpAbout: TMenuItem; + mnu_helpCheckForUpdates: TMenuItem; + mnu_help: TMenuItem; + mnu_fileSaveProfile: TMenuItem; + mnu_fileClose: TMenuItem; + mnu_file: TMenuItem; + PageControl1: TPageControl; + spd_WhatsNewCreate: TSpeedButton; + spn1: TSpinEdit; + spn2: TSpinEdit; + spn3: TSpinEdit; + spn4: TSpinEdit; + Tab_advanced: TTabSheet; + tab_intro: TTabSheet; + tab_configure: TTabSheet; + procedure chk_DebugModeChange(Sender: TObject); + procedure chk_overrideUserPrefsClick(Sender: TObject); + procedure chk_ShowDialogsChange(Sender: TObject); + procedure chk_ShowUpdateInCaptionChange(Sender: TObject); + procedure chk_UseCopyTreeChange(Sender: TObject); + procedure cmb_IntervalTypeChange(Sender: TObject); + procedure cmb_profileClick(Sender: TObject); + procedure cmb_profileCloseUp(Sender: TObject); + procedure cmd_DownloadLazAutoUpdateClick(Sender: TObject); + procedure cmd_MakeUpdatePackClick(Sender: TObject); + procedure cmd_UseAppnameVersionsINIClick(Sender: TObject); + procedure cmd_DeleteProfileClick(Sender: TObject); + procedure cmd_NewProfileClick(Sender: TObject); + procedure cmd_SaveProfileClick(Sender: TObject); + procedure cmd_UseAppnameZipfileNameClick(Sender: TObject); + procedure edt_AppFileNameChange(Sender: TObject); + procedure edt_AppFileNameKeyDown(Sender: TObject; var Key: word; + Shift: TShiftState); + procedure edt_CopyTreeChange(Sender: TObject); + procedure edt_CopyTreeEditingDone(Sender: TObject); + procedure edt_UpdatesChange(Sender: TObject); + procedure edt_ZipFileNameChange(Sender: TObject); + procedure edt_ZipFileNameEditingDone(Sender: TObject); + procedure edt_VersionsINIFileChange(Sender: TObject); + procedure edt_OutputDirectoryChange(Sender: TObject); + procedure edt_OutputDirectoryKeyDown(Sender: TObject; var Key: word; + Shift: TShiftState); + procedure edt_SFProjectNameEditingDone(Sender: TObject); + procedure edt_WhatsNewTextFileChange(Sender: TObject); + procedure edt_WhatsNewTextFileKeyDown(Sender: TObject; var Key: word; + Shift: TShiftState); + procedure edt_ZipFileNameoldEditingDone(Sender: TObject); + procedure edt_VersionsINIFileEditingDone(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormDropFiles(Sender: TObject; const FileNames: array of string); + procedure FormShow(Sender: TObject); + procedure grp_dragfilesDblClick(Sender: TObject); + procedure LazAutoUpdate1DebugEvent(Sender: TObject; WhereAt, Message: string); + procedure lst_dragfilesDblClick(Sender: TObject); + procedure mnuoptionsDisplayFileMangerClick(Sender: TObject); + procedure mnuoptionsShowCodeInfoClick(Sender: TObject); + procedure mnuoptionsShowOnlineWebsiteClick(Sender: TObject); + procedure mnu_fileCloseClick(Sender: TObject); + procedure mnu_fileSaveProfileClick(Sender: TObject); + procedure mnu_helpAboutClick(Sender: TObject); + procedure mnu_helpCheckForUpdatesClick(Sender: TObject); + procedure spd_WhatsNewCreateClick(Sender: TObject); + procedure spn1Change(Sender: TObject); + procedure spn2Change(Sender: TObject); + procedure spn3Change(Sender: TObject); + procedure spn4Change(Sender: TObject); + procedure tab_configureContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); + private + { private declarations } + AppConfig: TINIFile; // Application config file. Holds current Profile name + ProfileConfig: TINIFile; + // Contains settings for all the saved profiles. Each profile name is a section. + ProfilenameList: TStringList; // Used to populate the combo box + szCurrentProfileName: string; // Name used to Save/Load profiles to the INI file + bCurrentProfileSaved, bComponentDownloaded, bIsVirgin: boolean; + bShowCodeWindow, bShowFileManager, bShowOnlineWebsite, bOverRideUserPrefs,DebugMode: boolean; + // DragFileStringList:TStringList; + procedure ReadProfileFromINI(AProfileName: string); // Writes ProfileRec to disk + procedure WriteProfileToINI(AProfileName: string); // Reads ProfileRec from disk + procedure DeleteCurrentProfile; // Deletes whatever profile is selected (Not DEFAULT) + procedure WriteToGUI(AProfileName: string); // Writes GUI elements to ProfileRec + procedure ReadFromGUI(AProfileName: string); // Reads GUI elements into ProfileRec + // Conversion routines Version String <--> 4 version integers + procedure FillVersionString(var AVersionRec: TVersionRec); + procedure FillVersionInteger(var AVersionRec: TVersionRec); + // Used by 'Create Update Pack' button + function MakeZipfile: boolean; + function MakeINIFile: boolean; + function MakeLAUTrayINIFile: boolean; + procedure DoEnableDisableIntervalCombos; + public + // ProfileRec is working storage for all the elements of the current profile + // Filled from the cfg file at startup or user profile change + // Only written to the cfg file if user chooses to do so + ProfileRec: TProfileRec; + { public declarations } + end; + + +var + mainform: Tmainform; + +implementation + +{$R *.lfm} +const + C_APPCONFIGNAME = 'updatepack.cfg'; + C_PROFILECONFIGNAME = 'updatepackprofiles.cfg'; + C_LAUTRayINI = 'lauimport.ini'; + +resourcestring + rsDefaultProfileName = 'Default'; + rsConfigApplication = 'Application'; + rsConfigVersion = 'Version'; + rsProfileSaved = 'Profile ''%s'' saved successfully'; + rsCloseWithoutSaving = 'Save current profile to disk?'; + rsCannotDeleteDefault = 'Sorry, you cannot delete this profile'; + rsNewProfileCreated = 'New profile ''%s'' created successfully'; + rsUseAppnameVersionsQuestion = 'Update VersionsINI to %s.ini?'; + rsUseAppnameZipfileQuestion = 'Update Zipfile to %s.zip?'; + rsTheSourceFil = 'The source files are located in %s'; + rsCouldNotLoca = 'Could not locate %s on the server'; + rsYourCopyOfLa = 'Your copy of LazAutoUpdate v%s is the latest version.'; + rsDownloadIsIn = 'Download is in progress. Please wait'; + +{TODO: Incorporate more text into here} + +{ Tmainform } + +procedure Tmainform.mnu_fileCloseClick(Sender: TObject); +begin + // Deflower + AppConfig.WriteBool('Current', 'IsVirgin', bIsVirgin); + Close; +end; + +procedure Tmainform.mnu_fileSaveProfileClick(Sender: TObject); +begin + cmd_SaveProfile.Click; +end; + +procedure Tmainform.mnu_helpAboutClick(Sender: TObject); +var + sz: string; +begin + sz := Application.Title + LineEnding + LineEnding; + sz += Format('Version %s', [LazAutoUpdate1.AppVersion]) + LineEnding; + sz += Format('LazAutoUpdate v%s', [LazAutoUpdate1.AutoUpdateVersion]) + LineEnding; + sz += Format('ThreadedDownload v%s', + [LazAutoUpdate1.ThreadDownload.ThreadDownloadVersion]) + LineEnding + LineEnding; + sz += LazAutoUpdate1.LCLVersion + ' + ' + LazAutoUpdate1.FPCVersion + LineEnding; + sz += Format('Last Compiled: %s', [LazAutoUpdate1.LastCompiled]) + LineEnding; + sz += Format('for %s', [LazAutoUpdate1.WidgetSet]); + //sz+=Format('',[]); + MessageDlg(Format('About %s', [Application.Title]), + sz, mtInformation, [mbOK], 0); + +end; + +procedure Tmainform.mnu_helpCheckForUpdatesClick(Sender: TObject); +begin + with LazAutoUpdate1 do + begin + DebugMode := True; // Fire OnDebugEvent and log the results + CopyTree := True; + UpdatesFolder := 'updates'; + ShowUpdateInCaption := True; + SFProjectName := 'lazautoupdate'; + {$IFDEF Win32} + VersionsININame := 'updatepackwin32.ini'; + ZipfileName := 'updatepackwin32.zip'; + {$ENDIF} + {$IFDEF Win64} + VersionsININame := 'updatepackwin64.ini'; + ZipfileName := 'updatepackwin64.zip'; + {$ENDIF} + {$IFDEF Linux64} + VersionsININame := 'updatepacklunux64.ini'; + ZipfileName := 'updatepackl64.zip'; + {$ENDIF} + {$IFDEF Linux32} + VersionsININame := 'updatepacklinux32.ini'; + ZipfileName := 'updatepackl32.zip'; + {$ENDIF} + AutoUpdate; // How simple is that? + DebugMode := False; + end; +end; + +procedure Tmainform.spd_WhatsNewCreateClick(Sender: TObject); +begin + memoform.MemoAction := maShowWhatsNew; + memoform.szWhatsNewPath := ProfileRec.WhatsNewPath; + memoform.ShowModal; + ProfileRec.WhatsNewPath := memoform.szWhatsNewPath; + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.spn1Change(Sender: TObject); +begin + ProfileRec.NewVersion.V1 := spn1.Value; + FillVersionString(ProfileRec.NewVersion); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.spn2Change(Sender: TObject); +begin + ProfileRec.NewVersion.V2 := spn2.Value; + FillVersionString(ProfileRec.NewVersion); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.spn3Change(Sender: TObject); +begin + ProfileRec.NewVersion.V3 := spn3.Value; + FillVersionString(ProfileRec.NewVersion); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.spn4Change(Sender: TObject); +begin + ProfileRec.NewVersion.V4 := spn4.Value; + FillVersionString(ProfileRec.NewVersion); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.tab_configureContextPopup(Sender: TObject; + MousePos: TPoint; var Handled: Boolean); +begin + +end; + +procedure Tmainform.FormCreate(Sender: TObject); +begin + If LowerCase(ParamStr(1))='debug' then DebugMode:=TRUE + else DebugMode:=FALSE; + Caption := Application.Title; + Icon := Application.Icon; + AppConfig := TINIFile.Create(GetAppConfigDir(false) + C_APPCONFIGNAME); + ProfileConfig := TINIFile.Create(GetAppConfigDir(false) + C_PROFILECONFIGNAME); + ProfilenameList := TStringList.Create; + ProfileRec.DragFileStringList := TStringList.Create; + if FileExistsUTF8('readme.txt') then + begin + memo_intro.Lines.LoadFromFile('readme.txt'); + memo_intro.Lines[0] := AnsiReplaceText(memo_intro.Lines[0], + '0.0.0.0', LazAutoUpdate1.AppVersion); + end; + + // Fetch the last saved profile name + with AppConfig do + begin + WriteString('ProgramInfo', rsConfigApplication, Application.Title); + WriteString('ProgramInfo', rsConfigVersion, LazAutoUpdate1.AppVersion); + szCurrentProfileName := ReadString('Current', 'Profilename', rsDefaultProfileName); + bComponentDownloaded := ReadBool('Current', 'LazAutoUpdateDownloaded', False); + bIsVirgin := ReadBool('Current', 'IsVirgin', False); + bShowCodeWindow := ReadBool('Current', 'ShowCodeWindow', True); + bShowFileManager := ReadBool('Current', 'ShowFileManager', False); + bShowOnlineWebsite := ReadBool('Current', 'ShowSFWebsite', False); + end; + mnuoptionsShowCodeInfo.Checked := bShowCodeWindow; + mnuoptionsDisplayFileManger.Checked := bShowFileManager; + mnuoptionsShowOnlineWebsite.Checked := bShowOnlineWebsite; + + // LazAutoupdate - download or update? + if bComponentDownloaded then + cmd_DownloadLazAutoUpdate.Caption := 'Update Component' + else + cmd_DownloadLazAutoUpdate.Caption := 'Download Component'; + + // Read it into ProfileRec + ReadProfileFromINI(szCurrentProfileName); + // Write back to disk (in case this is a virgin run) + WriteProfileToINI(szCurrentProfileName); + bCurrentProfileSaved := True; + + // Fill the GUI controls with contents of ProfileRec + WriteToGUI(szCurrentProfileName); + + // Fill the profiles combo box + ProfileConfig.ReadSections(ProfileNameList); + cmb_profile.Clear; + cmb_profile.Items := ProfileNameList; + cmb_profile.ItemIndex := cmb_profile.Items.IndexOf(szCurrentProfileName); + If LazAutoUpdate1.CreateLocalLauImportFile + then LazAutoUpdate1.RelocateLauImportFile; + if bIsVirgin then + PageControl1.ActivePage := tab_intro + else + PageControl1.ActivePage := tab_configure; + If DebugMode then EventLog1.FileName := ChangeFileExt(ParamStr(0), '.log'); + If DebugMode then if FileExistsUTF8(EventLog1.FileName) then + SysUtils.DeleteFile(EventLog1.FileName); + If DebugMode then EventLog1.AppendContent := True; + If DebugMode then EventLog1.Active := True; + LazAutoUpdate1.DebugMode:=DebugMode; +end; + +procedure Tmainform.FormDestroy(Sender: TObject); +begin + // No memory leaks! + FreeAndNil(ProfileConfig); + FreeAndNil(AppConfig); + FreeAndNil(ProfilenameList); + FreeAndNil(ProfileRec.DragFileStringList); +end; + +procedure Tmainform.FormDropFiles(Sender: TObject; const FileNames: array of string); +// Not allowed: +// 1. The AppPath (already in the zipfile) +// 2. The WhatsNewPath (already in the zipfile) +// 3. Directories (use CopyTree instead) +// 4. Symlinks (both Windows and Linux) +// 5. The updating app - updatehm(.exe) +// ProfileRec.DragFileStringList is the master record +// lst_dragfiles is just for display +var + i: integer; +begin + for i := Low(FileNames) to High(FileNames) do + if ((ProfileRec.DragFileStringList.IndexOf(FileNames[i]) = -1) and + (FileNames[i] <> ProfileRec.AppPath) and (FileNames[i] <> + ProfileRec.WhatsNewPath) and (FileNames[i] <> + LazAutoUpdate1.UpdateExe) and (FileNames[i] <> + LazAutoUpdate1.UpdateExeSilent)) then + if (DirPathExists(FileNames[i]) = True) then + begin // Not allowed to drag a directory into the list + ShowMessage('You dragged a directory. For whole directories, use the CopyTree facility'); + continue; + end + else + if (FileIsSymlink(FileNames[i]) = False) then // Symlinks not allowed + ProfileRec.DragFileStringList.Add(FileNames[i]); + + lst_dragfiles.Items := ProfileRec.DragFileStringList; +end; + +procedure Tmainform.FormShow(Sender: TObject); +begin + LazAutoUpdate1.ShowWhatsNewIfAvailable; + bCurrentProfileSaved := True; +end; + +procedure Tmainform.grp_dragfilesDblClick(Sender: TObject); +begin + ProfileRec.DragFileStringList.Clear; + lst_dragfiles.Items := ProfileRec.DragFileStringList; +end; + +procedure Tmainform.LazAutoUpdate1DebugEvent(Sender: TObject; WhereAt, Message: string); +begin + If DebugMode AND (EventLog1.Active=TRUE) then EventLog1.Log(Format('LazAutoUpdate: Source=%s, Message=%s', [WhereAt, Message])); +end; + +procedure Tmainform.lst_dragfilesDblClick(Sender: TObject); +var + i: integer; +begin + for i := 0 to ProfileRec.DragFileStringList.Count - 1 do + begin + if lst_dragfiles.Selected[i] then + ProfileRec.DragFileStringList.Delete(i); + end; + lst_dragfiles.Items := ProfileRec.DragFileStringList; +end; + +procedure Tmainform.mnuoptionsDisplayFileMangerClick(Sender: TObject); +begin + bShowFileManager := mnuoptionsDisplayFileManger.Checked; + AppConfig.WriteBool('Current', 'ShowFileManager', bShowFileManager); +end; + +procedure Tmainform.mnuoptionsShowCodeInfoClick(Sender: TObject); +begin + bShowCodeWindow := mnuoptionsShowCodeInfo.Checked; + AppConfig.WriteBool('Current', 'ShowCodeWindow', bShowCodeWindow); +end; + +procedure Tmainform.mnuoptionsShowOnlineWebsiteClick(Sender: TObject); +begin + bShowOnlineWebsite := mnuoptionsShowOnlineWebsite.Checked; + AppConfig.WriteBool('Current', 'ShowSFWebsite', bShowOnlineWebsite); +end; + +procedure Tmainform.cmd_SaveProfileClick(Sender: TObject); +begin + AppConfig.WriteString('Current', 'Profilename', szCurrentProfileName); + ReadFromGUI(szCurrentProfileName); + WriteProfileToINI(szCurrentProfileName); + bCurrentProfileSaved := True; + MessageDlg(Application.Title, + Format(rsProfileSaved, [szCurrentProfileName]), + mtInformation, [mbOK], 0); +end; + +procedure Tmainform.cmd_UseAppnameZipfileNameClick(Sender: TObject); +var + sz: string; +begin + sz := ExtractFileNameOnly(ProfileRec.AppPath); + if (MessageDlg(Application.Title, Format(rsUseAppnameZipfileQuestion, [sz]), + mtConfirmation, [mbYes, mbNo], 0) = mrYes) then + begin + ProfileRec.ZipFileName := ProfileRec.OutDir + ChangeFileExt(sz, '.zip'); + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; + end; +end; + +procedure Tmainform.edt_AppFileNameChange(Sender: TObject); +begin + edt_AppFileName.InitialDir := ExtractFileDir(ProfileRec.AppPath); + ProfileRec.AppPath := edt_AppFileName.FileName; + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_AppFileNameKeyDown(Sender: TObject; var Key: word; + Shift: TShiftState); +begin + Key := 0; +end; + +procedure Tmainform.edt_CopyTreeChange(Sender: TObject); +begin + ProfileRec.CopyTreeDirectory := edt_CopyTree.Text; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_CopyTreeEditingDone(Sender: TObject); +begin + ProfileRec.CopyTreeDirectory := edt_CopyTree.Text; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_UpdatesChange(Sender: TObject); +begin + ProfileRec.SFUpdatesDirectory := edt_Updates.Text; + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.edt_ZipFileNameChange(Sender: TObject); +begin + edt_ZipFileName.InitialDir := ExtractFileDir(ProfileRec.ZipFileName); + ProfileRec.ZipFileName := ProfileRec.OutDir + + ExtractFileName(edt_ZipFileName.FileName); + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_ZipFileNameEditingDone(Sender: TObject); +begin + if CompareFileExt(edt_ZipFileName.Text, '.zip', False) <> 0 then + edt_ZipFileName.Text := ChangeFileExt(edt_ZipFileName.Text, '.zip'); + with ProfileRec do + begin + ZipFileName := edt_ZipFileName.Text; + ZipFileName := OutDir + ZipFileName; + end; + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.edt_VersionsINIFileChange(Sender: TObject); +begin + edt_VersionsINIFile.InitialDir := ExtractFileDir(ProfileRec.VersionsINI); + ProfileRec.VersionsINI := ProfileRec.OutDir + + ExtractFileName(edt_VersionsINIFile.FileName); + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_OutputDirectoryChange(Sender: TObject); +begin + ProfileRec.OutDir := AppendPathDelim(edt_OutputDirectory.Directory); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_OutputDirectoryKeyDown(Sender: TObject; + var Key: word; Shift: TShiftState); +begin + Key := 0; +end; + +procedure Tmainform.edt_SFProjectNameEditingDone(Sender: TObject); +begin + ProfileRec.SFProjectName := LowerCase(edt_SFProjectName.Text); + edt_SFProjectName.Text := ProfileRec.SFProjectName; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_WhatsNewTextFileChange(Sender: TObject); +begin + edt_WhatsNewTextFile.InitialDir := ExtractFileDir(ProfileRec.WhatsNewPath); + ProfileRec.WhatsNewPath := edt_WhatsNewTextFile.Filename; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_WhatsNewTextFileKeyDown(Sender: TObject; + var Key: word; Shift: TShiftState); +begin + Key := 0; +end; + +procedure Tmainform.edt_ZipFileNameoldEditingDone(Sender: TObject); +begin + if CompareFileExt(edt_ZipFileName.Text, '.zip', False) <> 0 then + edt_ZipFileName.Text := ChangeFileExt(edt_ZipFileName.Text, '.zip'); + with ProfileRec do + begin + ZipFileName := ExtractFileName(edt_ZipFileName.Text); + ZipFileName := OutDir + ZipFileName; + end; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.edt_VersionsINIFileEditingDone(Sender: TObject); +begin + if CompareFileExt(edt_VersionsINIFile.Text, '.ini', False) <> 0 then + edt_VersionsINIFile.Text := ChangeFileExt(edt_VersionsINIFile.Text, '.ini'); + with ProfileRec do + begin + VersionsINI := ExtractFileName(edt_VersionsINIFile.Text); + VersionsINI := OutDir + VersionsINI; + bCurrentProfileSaved := False; + end; +end; + +procedure Tmainform.FormCloseQuery(Sender: TObject; var CanClose: boolean); +begin + if LazAutoUpdate1.DownloadInprogress then + begin + CanClose := False; + ShowMessage(rsDownloadIsIn); + Exit; + end; + if not bCurrentProfileSaved then + if (MessageDlg(Application.Title, rsCloseWithoutSaving, mtWarning, + [mbYes, mbNo], 0) = mrNo) then + CanClose := True + else + begin + cmd_SaveProfile.Click; + CanClose := True; + end; + if CanClose then + If DebugMode then EventLog1.Active := False; +end; + +procedure Tmainform.cmd_UseAppnameVersionsINIClick(Sender: TObject); +var + sz: string; +begin + sz := ExtractFileNameOnly(ProfileRec.AppPath); + if (MessageDlg(Application.Title, Format(rsUseAppnameVersionsQuestion, [sz]), + mtConfirmation, [mbYes, mbNo], 0) = mrYes) then + begin + ProfileRec.VersionsINI := ProfileRec.OutDir + ChangeFileExt(sz, '.ini'); + WriteToGUI(szCurrentProfileName); + bCurrentProfileSaved := False; + end; +end; + +procedure Tmainform.cmd_DownloadLazAutoUpdateClick(Sender: TObject); +// TODO: Resourcestrings +var + VersionINI: TINIFile; +begin + with LazAutoUpdate1 do + begin + // Set component to download source package + DebugMode := True; // Fire OnDebugEvent and log the results + SFProjectName := 'lazautoupdate'; + CopyTree := True; + VersionsININame := 'lazautoupdatesource.ini'; + UpdatesFolder := 'lazautoupdatesource'; + ZipFileName := 'packagesource.zip'; + ShowUpdateInCaption := True; + VersionINI := TIniFile.Create('new' + VersionsININame); +// VersionINI := TIniFile.Create(VersionsININame); + AppVersion := VersionINI.ReadString('versions', 'GUI', '0.0.0.0'); + VersionINI.Free; + // Enable to debug LazAutoUpdate + // DebugMode:=TRUE; + if NewVersionAvailable then + begin + if DownloadNewVersion then + begin + ShowMessageFmt(rsTheSourceFil, + [ProgramDirectory + UpdatesFolder]); + bComponentDownloaded := True; + AppConfig.WriteBool('Current', 'LazAutoUpdateDownloaded', True); + cmd_DownloadLazAutoUpdate.Caption := 'Update Component'; + end + else + begin + ShowMessageFmt(rsCouldNotLoca, [ZipFileName]); + cmd_DownloadLazAutoUpdate.Caption := 'Download Component'; + end; + end + else + ShowMessageFmt(rsYourCopyOfLa, [GUIOnlineVersion]); + end; + + LazAutoUpdate1.DebugMode := False; + // Reset to this application + LazAutoUpdate1.ResetAppVersion; +end; + +procedure Tmainform.cmb_IntervalTypeChange(Sender: TObject); +begin + DoEnableDisableIntervalCombos; +end; + +procedure Tmainform.cmb_profileClick(Sender: TObject); +begin + szCurrentProfileName := cmb_profile.Items[cmb_profile.ItemIndex]; +// Auto-save current profile + AppConfig.WriteString('Current', 'Profilename', szCurrentProfileName); + ReadFromGUI(szCurrentProfileName); // Read from GUI + WriteProfileToINI(szCurrentProfileName); // Write to disk + bCurrentProfileSaved := True; +end; + +procedure Tmainform.cmb_profileCloseUp(Sender: TObject); +begin + // Read selected profile into ProfileRec and GUI + szCurrentProfileName := cmb_profile.Items[cmb_profile.ItemIndex]; + ReadProfileFromINI(szCurrentProfileName); // Read from disk + WriteToGUI(szCurrentProfileName); // Display in GUI + AppConfig.WriteString('Current', 'Profilename', szCurrentProfileName); + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.DoEnableDisableIntervalCombos; +begin + case cmb_IntervalType.ItemIndex of + 0: + begin + cmb_IntervalDay.Enabled := False; + cmb_IntervalDate.Enabled := False; + end; + 1: + begin + cmb_IntervalDay.Enabled := True; + cmb_IntervalDate.Enabled := False; + end; + 2: + begin + cmb_IntervalDay.Enabled := False; + cmb_IntervalDate.Enabled := True; + end; + end; +end; + +procedure Tmainform.chk_UseCopyTreeChange(Sender: TObject); +begin + ProfileRec.CopyTree := chk_UseCopyTree.Checked; + bCurrentProfileSaved := False; +end; + +procedure Tmainform.chk_ShowUpdateInCaptionChange(Sender: TObject); +begin + ProfileRec.ShowUpdatesInCaption := chk_ShowUpdateInCaption.Checked; + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.chk_ShowDialogsChange(Sender: TObject); +begin + ProfileRec.ShowDialogs := chk_ShowDialogs.Checked; + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.chk_DebugModeChange(Sender: TObject); +begin + ProfileRec.DebugMode := chk_DebugMode.Checked; + bCurrentProfileSaved := False; + +end; + +procedure Tmainform.chk_overrideUserPrefsClick(Sender: TObject); +begin + bOverRideUserPrefs := chk_overrideUserPrefs.Checked; +end; + +procedure Tmainform.cmd_MakeUpdatePackClick(Sender: TObject); +var + sz, szPathentry: string; + i: integer; + fFileManagerProcess: TAsyncProcess; +begin + // Make the versionsini + if ((MakeINIFile = True) and (FileExistsUTF8(ProfileRec.VersionsINI))) then + ShowMessageFmt('VersionsINI ''%s'' is OK', [ProfileRec.VersionsINI]); + // Make the lauimport file + if ((MakeLAUTrayINIFile = True) and + (FileExistsUTF8(ProfileRec.OutDir + C_LAUTRayINI))) then + ShowMessageFmt('TrayNotify INI ''%s'' is OK', [ProfileRec.OutDir + C_LAUTRayINI]); + // Make the zipfile + if ((MakeZipfile = True) and (FileExistsUTF8(ProfileRec.ZipFileName))) then + ShowMessageFmt('Zipfile ''%s'' is OK', [ProfileRec.ZipFileName]) + else + ShowMessage('Unable to create Zipfile. Is the App path and/or WhatsNew path valid?'); + sz := 'Zipfile and INI file are located at:' + LineEnding; + sz += ProfileRec.Outdir + LineEnding + LineEnding; + + sz += '-- Copy and Paste Pascal code --' + LineEnding + LineEnding; + sz += 'Form1.FormCreate(Sender: TObject);' + LineEnding; + sz += 'begin' + LineEnding; + sz += ' LazAutoUpdate1.ProjectType:=auSourceForge;' + LineEnding; + sz += Format(' LazAutoUpdate1.SFProjectName:=''%s'';%s', + [ProfileRec.SFProjectName, LineEnding]); + sz += Format(' LazAutoUpdate1.VersionsININame:=''%s'';%s', + [ExtractFilename(ProfileRec.VersionsINI), LineEnding]); + sz += Format(' LazAutoUpdate1.ZipfileName:=''%s'';%s', + [ExtractFilename(ProfileRec.ZipfileName), LineEnding]); + if ProfileRec.CopyTree = True then + sz += ' LazAutoUpdate1.CopyTree:=True;' + LineEnding + else + if (ProfileRec.DragFileStringList.Count > 0) then + sz += ' LazAutoUpdate1.CopyTree:=True;' + LineEnding + else + sz += ' LazAutoUpdate1.CopyTree:=False;' + LineEnding; + if ProfileRec.ShowUpdatesInCaption = True then + sz += ' LazAutoUpdate1.ShowUpdatesInCaption:=True;' + LineEnding + else + sz += ' LazAutoUpdate1.ShowUpdatesInCaption:=False;' + LineEnding; + if ProfileRec.ShowDialogs = True then + sz += ' LazAutoUpdate1.ShowDialogs:=True;' + LineEnding + else + sz += ' LazAutoUpdate1.ShowDialogs:=False;' + LineEnding; + if ProfileRec.DebugMode = True then + sz += ' LazAutoUpdate1.DebugMode:=True;' + LineEnding + else + sz += ' LazAutoUpdate1.DebugMode:=False;' + LineEnding; + sz += Format(' LazAutoUpdate1.UpdatesFolder:=''%s'';', + [ProfileRec.SFUpdatesDirectory]) + LineEnding; + sz += 'end;' + LineEnding + LineEnding; + sz += Format('The zipfile %s has the structure:', + [ExtractFileName(profilerec.ZipfileName)]) + LineEnding; + sz += '-' + ExtractFilename(ProfileRec.AppPath) + LineEnding; + sz += '-' + ExtractFilename(ProfileRec.WhatsNewPath) + LineEnding; + sz += '-' + C_LAUTRayINI + LineEnding; + if (ProfileRec.DragFileStringList.Count > 0) then + for i := 0 to ProfileRec.DragFileStringList.Count - 1 do + sz += '-' + ExtractFilename(ProfileRec.DragFileStringList[i]) + LineEnding; + // Deal with the copytree folder stuff + if ProfileRec.CopyTree then + begin + i := RPos(PathDelim, ChompPathDelim(ProfileRec.CopyTreeDirectory)); + szPathEntry := MidStr(ProfileRec.CopyTreeDirectory, i + 1, Length( + ProfileRec.CopyTreeDirectory)); + sz += '--' + PathDelim + szPathEntry + LineEnding + LineEnding; + end; + sz += LineEnding + 'This structure will be unzipped into the application directory, and' + + LineEnding; + sz += 'will overwtrite existing files and/or folders of the same name.' + LineEnding; + sz += 'If you want other files or folders to be deployed, then edit the zipfile' + + LineEnding; + sz += '(or drag files into the [Advanced] tab list) before uploading it' + LineEnding; + sz += 'to your SourceForge ''' + profilerec.SFUpdatesDirectory + + ''' folder.' + LineEnding + LineEnding; + sz += '-------------------------' + LineEnding; + sz += 'Type your own notes below' + LineEnding; + memoform.MemoAction := maShowCode; + memoform.szCodeText := sz; + if bShowCodeWindow then + memoform.ShowModal; + fFileManagerProcess := TAsyncProcess.Create(nil); + try + {$IFDEF WINDOWS} + with fFileManagerProcess do + begin + Executable := 'explorer.exe'; + Parameters.Clear; + Parameters.Add('"' + ProfileRec.Outdir + '"'); + if bShowFileManager then + Execute; + end; + if bShowOnlineWebsite then + If LazAutoUpdate1.ProjectType=auSourceForge then + OpenURL('https://sourceforge.net/projects/' + ProfileRec.SFProjectName + '/'); + If LazAutoUpdate1.ProjectType=auGitHubReleaseZip then + OpenURL('https://github.com/' + LazAutoUpdate1.GitHubProjectName + '/' + LazAutoUpdate1.GitHubBranchOrTag + '/'); + If LazAutoUpdate1.ProjectType=auOther then + OpenURL(LazAutoUpdate1.auOtherSourceURL + '/'); + + {$ELSE} + // Use generic linux command + if (FindDefaultExecutablePath('xdg-open') <> '') then + with fFileManagerProcess do + begin + Executable := 'xdg-open'; + Parameters.Clear; + Parameters.Add(ProfileRec.Outdir); + if bShowFileManager then + Execute; + Parameters.Clear; + If LazAutoUpdate1.ProjectType=auSourceForge then + Parameters.Add('https://sourceforge.net/projects/' + ProfileRec.SFProjectName + '/'); + If LazAutoUpdate1.ProjectType=auGitHubReleaseZip then + Parameters.Add('https://github.com/' + LazAutoUpdate1.GitHubProjectName + '/' + LazAutoUpdate1.GitHubBranchOrTag + '/'); + If LazAutoUpdate1.ProjectType=auOther then + Parameters.Add(LazAutoUpdate1.auOtherSourceURL + '/'); + if bShowOnlineWebsite then + Execute; + end; + {$ENDIF} + finally + fFileManagerProcess.Free; + end; +end; + +procedure Tmainform.cmd_DeleteProfileClick(Sender: TObject); +begin + DeleteCurrentProfile; +end; + +procedure Tmainform.cmd_NewProfileClick(Sender: TObject); +Var + szProfileName:String; +begin + szProfileName := ''; + if NOT InputQuery('New Profile Name', + 'Type new profile name here',FALSE,szProfilename) then exit; + if szProfileName = '' then exit; + + // We have a valid profile name... + // Does it already exist? + if (ProfilenameList.IndexOf(szProfilename) = -1) then + // Unique new profile name entered by user + begin + ProfilenameList.Add(szProfilename); + szCurrentProfileName := szProfilename; + ReadFromGUI(szCurrentProfileName); // Read current values into ProfileRec + + AppConfig.WriteString('Current', 'Profilename', szCurrentProfileName); + cmb_profile.Clear; + cmb_profile.Items := ProfileNameList; + // Set last item in list as current + cmb_profile.ItemIndex := cmb_profile.Items.Count - 1; + bCurrentProfileSaved := False; + end; +if (ProfilenameList.IndexOf(cmb_profile.Text) >= 0) then + MessageDlg(Application.Title, + Format(rsNewProfileCreated, [szCurrentProfileName]), + mtInformation, [mbOK], 0); +end; + +procedure Tmainform.DeleteCurrentProfile; +begin + // Cannot delete Default profile + if (szCurrentProfileName = rsDefaultProfileName) then + begin + MessageDlg(Application.Title, + rsCannotDeleteDefault, mtError, [mbOK], 0); + Exit; + end; + // Delete the current profile and load the last one in the list + ProfilenameList.Delete(cmb_profile.ItemIndex); + cmb_profile.Clear; + cmb_profile.Items := ProfileNameList; + cmb_profile.ItemIndex := cmb_profile.Items.Count - 1; + ProfileConfig.EraseSection(szCurrentProfileName); + szCurrentProfileName := cmb_profile.Items[cmb_profile.ItemIndex]; + ReadProfileFromINI(szCurrentProfileName); + WriteToGUI(szCurrentProfileName); // Reads profile from disk first + AppConfig.WriteString('Current', 'Profilename', szCurrentProfileName); + bCurrentProfileSaved := False; +end; + +procedure Tmainform.ReadProfileFromINI(AProfileName: string); +var + i, iNumEntries: integer; +begin + with ProfileRec do + with ProfileConfig do + begin + ProfileName := AProfileName; + AppPath := ReadString(AProfileName, 'AppPath', ProgramDirectory + 'myapp.exe'); + OutDir := CleanAndExpandDirectory(ReadString(AProfileName, 'OutDir', ProgramDirectory)); + NewVersion.VString := ReadString(AProfileName, 'NewVersion', '0.0.0.0'); + FillVersionInteger(NewVersion); + VersionsINI := ReadString(AProfileName, 'VersionsINI', 'versions.ini'); + WhatsNewPath := ReadString(AProfileName, 'WhatsNewPath', + ProgramDirectory + 'whatsnew.txt'); + SFProjectName := ReadString(AProfileName, 'SFProjectName', 'mysfproject'); + ZipFileName := ReadString(AProfileName, 'ZipFileName', + ProgramDirectory + 'myappzipfile.zip'); + CopyTree := ReadBool(AProfileName, 'CopyTree', False); + CopyTreeDirectory := ReadString(AProfileName, 'CopyTreeDirectory', + ProgramDirectory); + SFUpdatesDirectory := ReadString(AProfileName, 'SFUpdatesDirectory', 'updates'); + ShowUpdatesInCaption := ReadBool(AProfileName, 'ShowUpdatesInCaption', False); + ShowDialogs := ReadBool(AProfileName, 'ShowDialogs', False); + DebugMode := ReadBool(AProfileName, 'DebugMode', False); + OverRideUserPrefs := ReadBool(AProfileName, 'OverRideUserPrefs', False); + IntervalType := ReadInteger(AProfileName, 'IntervalType', 0); + IntervalDate := ReadInteger(AProfileName, 'IntervalDate', 0); + IntervalDay := ReadInteger(AProfileName, 'IntervalDay', 0); + IntervalHour := ReadInteger(AProfileName, 'IntervalHour', 9); + DragFileStringList.Clear; + iNumEntries := ReadInteger(AProfileName, 'ExtraFiles', 0); + if (iNumEntries > 0) then + for i := 0 to iNumEntries - 1 do + DragFileStringList.Add( + ReadString(AProfileName, Format('ExtraFile%.3d', [i]), 'invalid file')); + end; +end; + +procedure Tmainform.WriteProfileToINI(AProfileName: string); +var + i, iNumEntries: integer; +begin + with ProfileRec do + with ProfileConfig do + begin + WriteString(AProfileName, 'AppPath', AppPath); + WriteString(AProfileName, 'OutDir', CleanAndExpandDirectory(OutDir)); + WriteString(AProfileName, 'NewVersion', NewVersion.VString); + WriteString(AProfileName, 'VersionsINI', VersionsINI); + WriteString(AProfileName, 'WhatsNewPath', WhatsNewPath); + WriteString(AProfileName, 'SFProjectName', SFProjectName); + WriteString(AProfileName, 'ZipFileName', ZipFileName); + WriteBool(AProfileName, 'CopyTree', CopyTree); + WriteString(AProfileName, 'CopyTreeDirectory', CopyTreeDirectory); + WriteString(AProfileName, 'SFUpdatesDirectory', SFUpdatesDirectory); + WriteBool(AProfileName, 'ShowUpdatesInCaption', ShowUpdatesInCaption); + WriteBool(AProfileName, 'ShowDialogs', ShowDialogs); + WriteBool(AProfileName, 'DebugMode', DebugMode); + WriteBool(AProfileName, 'OverRideUserPrefs', OverRideUserPrefs); + WriteInteger(AProfileName, 'IntervalType', IntervalType); + WriteInteger(AProfileName, 'IntervalDate', IntervalDate); + WriteInteger(AProfileName, 'IntervalDay', IntervalDay); + WriteInteger(AProfileName, 'IntervalHour', IntervalHour); + + // Begin by deleting any existing ExtraFile Entries + iNumEntries := ReadInteger(AProfileName, 'ExtraFiles', 0); + if (iNumEntries > 0) then + for i := 0 to iNumEntries - 1 do + DeleteKey(AProfileName, Format('ExtraFile%.3d', [i])); + + // Now add any current ExtraFile entries (or zero) + if DragFileStringList.Count > 0 then + begin + // Record the number of entries in the list + WriteInteger(AProfileName, 'ExtraFiles', DragFileStringList.Count); + for i := 0 to DragFileStringList.Count - 1 do + begin + WriteString(AProfileName, Format('ExtraFile%.3d', [i]), DragFileStringList[i]); + end; + end + else + WriteInteger(AProfileName, 'ExtraFiles', 0); + end; +end; + +procedure Tmainform.WriteToGUI(AProfileName: string); +// Only the filenames of Versionini and ZipFilename are displayed +// Full paths (with OutputDir) are stored in ProfileRec and Config + +// Full path of WhatsNew.txt is displayed +// as it may not be stored in the OutputDir folder +begin + with ProfileRec do + begin + if AppPath = '' then + ReadProfileFromINI(AProfileName); + edt_AppFileName.Text := AppPath; + spn1.Value := NewVersion.V1; + spn2.Value := NewVersion.V2; + spn3.Value := NewVersion.V3; + spn4.Value := NewVersion.V4; + edt_OutputDirectory.Text := CleanAndExpandDirectory(TrimFilename(OutDir)); + // TODO Linux/Windows + edt_VersionsINIFile.Text := ExtractFileName(VersionsINI); // Strip path info + edt_WhatsNewTextFile.Text := WhatsNewPath; + edt_SFProjectName.Text := SFProjectName; + edt_ZipFileName.Text := ExtractFileName(ZipFileName); // Strip path info + chk_UseCopyTree.Checked := CopyTree; + edt_CopyTree.Text := CopyTreeDirectory; + edt_Updates.Text := SFUpdatesDirectory; + chk_ShowUpdateInCaption.Checked := ShowUpdatesInCaption; + chk_ShowDialogs.Checked := ShowDialogs; + chk_DebugMode.Checked := DebugMode; + chk_overrideUserPrefs.Checked := OverrideUserPrefs; + cmb_IntervalType.ItemIndex := IntervalType; + cmb_IntervalDay.ItemIndex := IntervalDay; + cmb_IntervalDate.ItemIndex := IntervalDate; + cmb_IntervalHour.ItemIndex := IntervalHour; + lst_dragfiles.Items.Clear; + lst_dragfiles.Items := DragFileStringList; + end; +end; + +procedure Tmainform.ReadFromGUI(AProfileName: string); +// Prepend OutputDir to paths of of Versionini and ZipFilename +// So that full path is stored in ProfileRec and Config +// WhatsNew.txt has it's own path +begin + with ProfileRec do + begin + ProfileName := AProfileName; + AppPath := edt_AppFileName.Text; + NewVersion.V1 := spn1.Value; + NewVersion.V2 := spn2.Value; + NewVersion.V3 := spn3.Value; + NewVersion.V4 := spn4.Value; + FillVersionString(NewVersion); + OutDir := CleanAndExpandDirectory(TrimFilename(edt_OutputDirectory.Text)); + // TODO Linux/Windows + VersionsINI := OutDir + edt_VersionsINIFile.Text; // restore path + WhatsNewPath := edt_WhatsNewTextFile.Text; + SFProjectName := edt_SFProjectName.Text; + ZipFileName := OutDir + edt_ZipFileName.Text; // restore path + CopyTree := chk_UseCopyTree.Checked; + CopyTreeDirectory := edt_CopyTree.Text; + SFUpdatesDirectory := edt_Updates.Text; + ShowUpdatesInCaption := chk_ShowUpdateInCaption.Checked; + ShowDialogs := chk_ShowDialogs.Checked; + DebugMode := chk_DebugMode.Checked; + OverrideUserPrefs := chk_overrideUserPrefs.Checked; + IntervalType := cmb_IntervalType.ItemIndex; + IntervalDay := cmb_IntervalDay.ItemIndex; + IntervalDate := cmb_IntervalDate.ItemIndex; + IntervalHour := cmb_IntervalHour.ItemIndex; + end; +end; + +procedure Tmainform.FillVersionString(var AVersionRec: TVersionRec); +begin + AVersionRec.VString := IntToStr(AVersionRec.v1) + '.'; + AVersionRec.VString += IntToStr(AVersionRec.v2) + '.'; + AVersionRec.VString += IntToStr(AVersionRec.v3) + '.'; + AVersionRec.VString += IntToStr(AVersionRec.v4); +end; + +procedure Tmainform.FillVersionInteger(var AVersionRec: TVersionRec); +// Converts a version string '0.1.2.3' into integers +var + i: integer; + s: string; +begin + s := ExtractDelimited(1, AVersionRec.VString, ['.']); + if TryStrToInt(s, i) then + AVersionRec.v1 := i + else + AVersionRec.v1 := 0; + s := ExtractDelimited(2, AVersionRec.VString, ['.']); + if TryStrToInt(s, i) then + AVersionRec.v2 := i + else + AVersionRec.v2 := 0; + s := ExtractDelimited(3, AVersionRec.VString, ['.']); + if TryStrToInt(s, i) then + AVersionRec.v3 := i + else + AVersionRec.v3 := 0; + s := ExtractDelimited(4, AVersionRec.VString, ['.']); + if TryStrToInt(s, i) then + AVersionRec.v4 := i + else + AVersionRec.v4 := 0; +end; + +function Tmainform.MakeZipfile: boolean; + // The ProfileRec elements AppPath and WhatsNewPath contain a full Path + // TODO: Use whitelist of files to put into users app folder +var + AZipper: TZipper; + szPathEntry: string; + i: integer; + ZEntries: TZipFileEntries; + TheFileList: TStringList; +begin + Result := False; + if not FileExistsUTF8(ProfileRec.AppPath) then + exit; + if not FileExistsUTF8(ProfileRec.WhatsNewPath) then + exit; + if FileExistsUTF8(ProfileRec.Zipfilename) then + begin + DeleteFile(ProfileRec.Zipfilename); + Application.ProcessMessages; + if FileExistsUTF8(ProfileRec.Zipfilename) then + If DebugMode then EventLog1.Error('Unable to delete %s', [ProfileRec.Zipfilename]); + end; + + AZipper := TZipper.Create; + try + try + AZipper.Filename := ProfileRec.Zipfilename; + AZipper.Clear; + ZEntries := TZipFileEntries.Create(TZipFileEntry); + + // Add the exe and whatsnew.txt + ZEntries.AddFileEntry(ProfileRec.AppPath, + ExtractFileName(ProfileRec.AppPath)); + ZEntries.AddFileEntry(ProfileRec.WhatsNewPath, ExtractFileName( + ProfileRec.WhatsNewPath)); + ZEntries.AddFileEntry(ProfileRec.OutDir + C_LAUTRayINI, C_LAUTRayINI); + + + // Add any Extra files into the root of the zipfile + if (ProfileRec.DragFileStringList.Count > 0) then + for i := 0 to ProfileRec.DragFileStringList.Count - 1 do + begin + ZEntries.AddFileEntry(ProfileRec.DragFileStringList[i], + ExtractFileName(ProfileRec.DragFileStringList[i])); + end; + if ProfileRec.CopyTree then + begin + // Verify valid directory + if DirPathExists(ProfileRec.CopyTreeDirectory) then + begin + // Construct the path to the directory BELOW CopyTreeDirectory + // If user specifies 'C:\MyFolder\Subfolder' it returns 'C:\MyFolder\' + // If user specifies 'C:\MyFolder' it returns 'C:\' + // If user specifies 'C:\' it returns 'C:\' + i := RPos(PathDelim, ChompPathDelim(ProfileRec.CopyTreeDirectory)); + szPathEntry := LeftStr(ProfileRec.CopyTreeDirectory, i); + + // Use the FileUtils.FindAllFiles function to get everything (files and folders) recursively + TheFileList := TStringList.Create; + try + TheFileList := FindAllFiles(ProfileRec.CopyTreeDirectory); + for i := 0 to TheFileList.Count - 1 do + begin + // Make sure the CopyTreeDirectory files are not in the root of the ZipFile + ZEntries.AddFileEntry(TheFileList[i], CreateRelativePath( + TheFileList[i], szPathEntry)); + end; + finally + TheFileList.Free; + end; + end; + end; + if (ZEntries.Count > 0) then + AZipper.ZipFiles(ZEntries); + except + On E: EZipError do + E.CreateFmt('Zipfile could not be created%sReason: %s', [LineEnding, E.Message]) + end; + Result := True; + finally + FreeAndNil(ZEntries); + AZipper.Free; + end; +end; + +function Tmainform.MakeINIFile: boolean; + // Makes an INI file for the TrayNotify application +var + VersionINI: TINIFile; +begin + Result := False; + VersionINI := TINIFile.Create(ProfileRec.VersionsINI); + try + try + VersionINI.WriteString('versions', 'GUI', ProfileRec.NewVersion.VString); + VersionINI.UpdateFile; + except + On E: Exception do + E.CreateFmt('VersionINI could not be created%sReason: %s', + [LineEnding, E.Message]) + end; + Result := True; + finally + VersionINI.Free; + end; +end; + +function Tmainform.MakeLAUTrayINIFile: boolean; + // Use current ProfileRec +var + LAUTRayINI: TINIFile; + szSectionName: string; +begin + Result := False; + if FileExistsUTF8(ProfileRec.Outdir + C_LAUTRayINI) then + DeleteFile(ProfileRec.Outdir + C_LAUTRayINI); + Application.ProcessMessages; + if FileExistsUTF8(ProfileRec.Outdir + C_LAUTRayINI) then + If DebugMode then EventLog1.Error('Unable to delete %s', [ProfileRec.Outdir + C_LAUTRayINI]); + + LAUTRayINI := TINIFile.Create(ProfileRec.Outdir + C_LAUTRayINI); + try + try + szSectionName := ProfileRec.ProfileName; + LAUTRayINI.WriteString(szSectionName, 'AppPrettyName', szSectionName); + LAUTRayINI.WriteString(szSectionName, 'AppPath', + ExtractFilename(ProfileRec.AppPath)); + LAUTRayINI.WriteString(szSectionName, 'INIPath', + ExtractFilename(ProfileRec.VersionsINI)); + LAUTRayINI.WriteString(szSectionName, 'ZipPath', + ExtractFilename(ProfileRec.ZipFileName)); + LAUTRayINI.WriteString(szSectionName, 'AppVersion', ProfileRec.NewVersion.VString); + LAUTRayINI.WriteString(szSectionName, 'SFProjectName', ProfileRec.SFProjectName); + LAUTRayINI.WriteString(szSectionName, 'SFUpdatesDirectory', + ProfileRec.SFUpdatesDirectory); + if ProfileRec.OverrideUserPrefs then + begin + LAUTRayINI.WriteInteger(szSectionName, 'IntervalType', ProfileRec.IntervalType); + LAUTRayINI.WriteInteger(szSectionName, 'IntervalDay', ProfileRec.IntervalDay); + LAUTRayINI.WriteInteger(szSectionName, 'IntervalDate', ProfileRec.IntervalDate); + LAUTRayINI.WriteInteger(szSectionName, 'IntervalHour', ProfileRec.IntervalHour); + end; + LAUTRayINI.UpdateFile; + except + On E: Exception do + E.CreateFmt('LAUTRayINI could not be created%sReason: %s', + [LineEnding, E.Message]); + end; + Result := True; + finally + LAUTRayINI.Free; + end; +end; + +end. diff --git a/components/lazautoupdate/latest_stable/updatepack/umemoform.lfm b/components/lazautoupdate/latest_stable/updatepack/umemoform.lfm new file mode 100644 index 000000000..bab46b277 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umemoform.lfm @@ -0,0 +1,63 @@ +object MemoForm: TMemoForm + Left = 436 + Height = 586 + Top = 194 + Width = 668 + BorderIcons = [biSystemMenu] + BorderStyle = bsToolWindow + Caption = 'MemoForm' + ClientHeight = 586 + ClientWidth = 668 + OnCreate = FormCreate + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '1.7' + object memo_whatsnew: TMemo + Left = 0 + Height = 514 + Top = 0 + Width = 668 + Align = alTop + Font.CharSet = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -13 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqDraft + Lines.Strings = ( + 'memo_whatsnew' + ) + ParentFont = False + ScrollBars = ssAutoVertical + TabOrder = 0 + WordWrap = False + end + object cmd_Close: TBitBtn + Left = 267 + Height = 30 + Top = 536 + Width = 135 + Caption = 'Save and &Close' + Kind = bkClose + ModalResult = 11 + OnClick = cmd_CloseClick + TabOrder = 1 + end + object cmd_SaveAsAndClose: TBitBtn + Left = 512 + Height = 30 + Top = 536 + Width = 144 + Caption = 'Save as... and &Close' + Kind = bkClose + ModalResult = 11 + OnClick = cmd_SaveAsAndCloseClick + TabOrder = 2 + end + object SelectDirectoryDialog1: TSelectDirectoryDialog + Title = 'Select Directory for whatsnew.txt' + Options = [ofEnableSizing, ofDontAddToRecent, ofViewDetail] + left = 44 + top = 532 + end +end diff --git a/components/lazautoupdate/latest_stable/updatepack/umemoform.lrj b/components/lazautoupdate/latest_stable/updatepack/umemoform.lrj new file mode 100644 index 000000000..e3d86d8c3 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umemoform.lrj @@ -0,0 +1,6 @@ +{"version":1,"strings":[ +{"hash":205771709,"name":"tmemoform.caption","sourcebytes":[77,101,109,111,70,111,114,109],"value":"MemoForm"}, +{"hash":249572213,"name":"tmemoform.cmd_close.caption","sourcebytes":[83,97,118,101,32,97,110,100,32,38,67,108,111,115,101],"value":"Save and &Close"}, +{"hash":265989989,"name":"tmemoform.cmd_saveasandclose.caption","sourcebytes":[83,97,118,101,32,97,115,46,46,46,32,97,110,100,32,38,67,108,111,115,101],"value":"Save as... and &Close"}, +{"hash":143769124,"name":"tmemoform.selectdirectorydialog1.title","sourcebytes":[83,101,108,101,99,116,32,68,105,114,101,99,116,111,114,121,32,102,111,114,32,119,104,97,116,115,110,101,119,46,116,120,116],"value":"Select Directory for whatsnew.txt"} +]} diff --git a/components/lazautoupdate/latest_stable/updatepack/umemoform.lrt b/components/lazautoupdate/latest_stable/updatepack/umemoform.lrt new file mode 100644 index 000000000..437bd1214 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umemoform.lrt @@ -0,0 +1,4 @@ +TMEMOFORM.CAPTION=MemoForm +TMEMOFORM.CMD_CLOSE.CAPTION=Save and &Close +TMEMOFORM.CMD_SAVEASANDCLOSE.CAPTION=Save as... and &Close +TMEMOFORM.SELECTDIRECTORYDIALOG1.TITLE=Select Directory for whatsnew.txt diff --git a/components/lazautoupdate/latest_stable/updatepack/umemoform.pas b/components/lazautoupdate/latest_stable/updatepack/umemoform.pas new file mode 100644 index 000000000..4abe90dc2 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/umemoform.pas @@ -0,0 +1,130 @@ +unit umemoform; + +{ LazAutoUpdate Pack system + + Copyright (C)2014 Gordon Bamber minesadorada@charcodelvalle.com + + This source is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This code 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 General Public License for more + details. + + A copy of the GNU General Public License is available on the World Wide Web + at . You can also obtain it by writing + to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. +} + + +{$mode objfpc}{$H+} + +interface + +uses + SysUtils, LazUTF8,LazFileUtils,FileUtil, Forms, Dialogs, StdCtrls, + Buttons; + +type + TMemoAction = (maShowWhatsNew, maShowCode); + { TMemoForm } + + TMemoForm = class(TForm) + cmd_Close: TBitBtn; + memo_whatsnew: TMemo; + cmd_SaveAsAndClose: TBitBtn; + SelectDirectoryDialog1: TSelectDirectoryDialog; + procedure cmd_CloseClick(Sender: TObject); + procedure cmd_SaveAsAndCloseClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { private declarations } + public + { public declarations } + szWhatsNewPath, szCodeText: string; + MemoAction: TMemoAction; + end; + +var + MemoForm: TMemoForm; + +implementation + +uses umainform; + +{$R *.lfm} + +{ TMemoForm } + +procedure TMemoForm.FormCreate(Sender: TObject); +begin + Icon := Application.Icon; +end; + +procedure TMemoForm.cmd_CloseClick(Sender: TObject); +begin + case MemoAction of + maShowWhatsNew: + memo_whatsnew.Lines.SaveToFile(szWhatsNewPath); + maShowCode: + begin + memo_whatsnew.Lines.SaveToFile(mainform.ProfileRec.ProfileName + '.txt'); + ShowMessageFmt('Code saved as %s', [ProgramDirectory + + mainform.ProfileRec.ProfileName + '.txt']); + end; + end; +end; + +procedure TMemoForm.cmd_SaveAsAndCloseClick(Sender: TObject); +var + sz: string; +begin + case MemoAction of + maShowWhatsNew: + begin + SelectDirectoryDialog1.InitialDir := ExtractFileDir(szWhatsNewPath); + if SelectDirectoryDialog1.Execute then + szWhatsNewPath := AppendPathDelim(SelectDirectoryDialog1.Filename) + + 'whatsnew.txt'; + memo_whatsnew.Lines.SaveToFile(szWhatsNewPath); + end; + maShowCode: + begin + SelectDirectoryDialog1.InitialDir := mainform.ProfileRec.OutDir; + if SelectDirectoryDialog1.Execute then + begin + sz := AppendPathDelim(SelectDirectoryDialog1.Filename) + + mainform.ProfileRec.ProfileName + '.txt'; + memo_whatsnew.Lines.SaveToFile(sz); + ShowMessageFmt('Code saved as %s', [sz]); + end; + end; + end; +end; + +procedure TMemoForm.FormShow(Sender: TObject); +begin + memo_whatsnew.Lines.Clear; + case MemoAction of + maShowWhatsNew: + begin + if FileExistsUTF8(szWhatsNewPath) then + memo_whatsnew.Lines.LoadFromFile(szWhatsNewPath); + Caption := 'Contents of ' + szWhatsNewPath; + end; + maShowCode: + begin + memo_whatsnew.Clear; + memo_whatsnew.Append(szCodeText); + // memo_whatsnew.Lines.AddText(szCodeText); + Caption := 'Code'; + end; + end; +end; + +end. diff --git a/components/lazautoupdate/latest_stable/updatepack/updatepack.ico b/components/lazautoupdate/latest_stable/updatepack/updatepack.ico new file mode 100644 index 0000000000000000000000000000000000000000..4688c5a55d1a47f8f2e6309b22cd3221f73477db GIT binary patch literal 137040 zcmcG!2UJwglQ23n3^^k?BS=ON6p)-GCqY4ifQsad2uPSABZ_1};vkYFN=7m$Ip>^n z95T!>b05F|d;7gT=k0!Hci;JXPT#&$x4OD+S6Arj3j%>}fAsXA+bcULk`M%<1%W`k zxAhhT61lDa!2eZlpIP7D{8Rs}0RP2udU^`%?d|;+vHxpm7Z(@6&dv@nGd%??E-nDG zGc&+oZ|{Gt^M8Vc#bSYzlM`TNc^Q}(83Ov-nt{>2ZXmcP0QkO&0FnZHf$om>|D^Z- z9*jn#fyMbbU~Fg*7`vrC*!36aYi;}&{ql)o;Lma!kP#dJB>27qIvN{*e|Y)tl=Jg* zV6eLr81C==f9bb10YkU2^|du%V`T-H8t4UbqQZa#Zx5iQy6V3*#@X2!Fwk{Nzpob< z=;;DR`ul*T*%{zycNaiz?*Q}Tn4b*5+q{s;o31@%BC1>g)bX)AY}Lo}Zio zM>~7K&G{v;zO)2fUtIy`w`+5GZ627LoCF3tJAt~&3ZSE*0hk;f0_yT|fUbu6{}TOw zL&9J%z~$LFaB_GApi!uQ(U;4Y1wLeY17G9gfTY-1AUiD`$VVW6zb!4m!S?pQb^UL( zn46n_jWe-20^p?L0<`H2!1C4{fZW-=l~LcnbYXjQ^S?#&KSGA}h5)2_i~!Y7EeRH=0dTkI0)l@`0HG!$ zz;+l06mC`jN2vcJSixp35V86lFqwt}8V#?3`J?&&5uN{Cr)vxf__kXFq;C8GN+-(y zcc}m4XKjZAz=yT3fI+<-u!vm#AJh5II${AVP`%v=L{4V|X_Ey228;R6Q2&3y|IzX7 zFIy{U%9n6o40!NPyMGX+}fk# za(BEVE@1TZ!> z2I%PM0OscAfVQ?a@bcwLfRmFGP*qh0?Ck7-nOmQwq@)DE;c!4)TpXya%me1@O@Y}e zJ>X=c4Y=4F0uJVjfWBlR;QDk0xH?`0kgLA|L~Q-R#vTtHJ(6X@>j0MMuNz}Z?Qa6Fd<98DzxXY19# zTD=NzG#Lw=F8u_~Rx5zhkGVj^9BeF z4F#S&c>=`V+O&W0z9obK2W=|A#ac0NwN(qCkR!mwat?4d`vpK94FTxmao}PxS<+ zqHhj=d}{FA-`#_ZVDST1%9`_PZ#w&f2!qYK80BAXh&}F83jua20@W1S<@2ysWv*pT z1A?F_CQyD8IK6;Izf_U;vx>rF!e>*h(!^^S6VYWWheTY#c!lzx%-g#$f6wpm-ZU&9 zy7H#@MRxcKu6+@w@_)7_G)YxX^Bl2k_H8&#W7~JdmJ$B-j=%erZhEEwfn37%_=m+2 z!l&C0b|jWR!uvxBvfimY1?5qOc0Z0xiy0%BSI1L2pHoC9NLa9Io#h-f%BdJ z;5x$@)90h+aMYns3+02&TkSB{gwK7w5h50Fzc9pMnc}fRZ=QuDBoAs6(CT{$xvxULnWQzoRAm=s59xZU7_Lt zM{6W|dm7%$eh9zhZwifN;=-ktar&f|C)8L&H*fNdT^=oG8h=e8fo4VNMLVUoENIQm zUG6g*PM#YZ3nXcyvE|&`zk1wTNP{JY?+K`vTXHIGP#5778ZN_Fzfpolj%{`-L_h@H zY+7w_-wd?PD&?9cl3=y?g8kmNZQuEq(JI5-=YGjVIlHzWgY}|C*wotO$88eZ6HXKP#j+>6o`lloJtg{X9di9okL@)>231sCHgxmY5>zQRep2wo zz(=E+8a0-wC>0~-h@ExPvO7kCxuNl(dv^#&f_0sjIc3`T)FCAXElWL1U747V z&jZ^g^Ho?`N>RQ~3J&S?K$Rw4P`UaOrpIQt9K9|49W}n1w#exGg+pxl6HNkHhqaty zqL##_DDmUF%gmwbP!}%H32Cf}m223=rq1%Ik5qM#ojEg~UAtKNXD;No@uNpf^uOd^ zT5Q0gfA2=g-V|3EJ<*lpOiVn28kxzptU5A)V|(?E11iqF90Dik91fmX1YE2{PwNR^ z#&JQm_Z8Lox}G+JJ`#N?81CL$i-d6q#iRU+e^WFO;DDy|G zORv_+O-mu zo~?@hLe&7_D^hI2b7r#(b zUwBI@5x?7Pw~>s}`I4;`=^r{T7$UjU!`mjoN9d`mG>SLh_*kJCoS$}q{h>jz%oML; zl6J;Ls6V+pqYfF;!pMz9Qy!H3DPePhktXV>{TtvS6hN?8$U zVV2j?{sGOYuC0pEQX8UAx8^C238R&eq}ttZI@522^*GPWmXE{hdBF}~vT?lm0-CDY zab>ep?#YzU-Y;S4;6-7$OzewrF1MI*SD_603whVYnM*Jc?Bn!e{whm`QQxQ!vHAv& z^iqG}&AYU>r#n)zH$6nM*;0DD65`?6oNc*`#6sOUjR~>8@BC^6TS^v^N`6zNP)I=F znC?zKNPx#j@Zy@NK;9KMxO*R{e{*_R4BO(pdH8Beh&u2S`;A~u%(K7{aFl?Jf`x@* z{&HHq2pgfiz{JKHN@uj^*J>7`zy4k+KN1pw{SMnF%-#Mc;oPMLgE|ZhllvIla0;ZT>tEk zCgG}egVU1Q?h&5xl^8;xJ1kZ`(MdCyTao_YhQiXN|2x!0mx(W}@C~&G;b0}1>1TEpngWdq5NoQ~H^VcOR_L0|gW<_4!r&kgG5p^u z1kLTrtY5g66Hx)Av>k`WG3_uhqC@9*W)y*sEZb~<(JI()XqTIwYa>5`x_7!lvs`=b zu_D^!;J@C&#ua5CFVkgI0>NdGP-Ye|EuWoZiCTgcCp4JD-{OY=p}zgGVn_8zcRA|( zRy%QVFBpFhoc9qdrVcQ?tf6El_1PzPUWm^32fgCJ^T&zV zdTV{=O^Ll(b>QVMvdM0eu{m-yacPMi6}Z0&p4q-QVXN~YDt%Y@WzWR(eTe)LAX6~m zP$;Y?>LyDhZ5IEu&*Q5wyC&mnZZI3S(_-`2IC}{$1-T$hM8X@9t-s)~tWMXa=!!C` zxf`hxMxwqv1x5FJr%0Z#EEx>ftwzX|zB3l5or_pv5g~?PS@P}dtEK9;vXiZL&rA#~ zzgsUqX5XQURH+-WS!cGU2}|S|rnJsh%I}NjLf-L_VOfZ4mG&v%jDx;5XvxR2=f4fU z4OjVyS`-Cus!r$l0bUWfK zYdvFVP!ISPuV|-F1R+$ZU%B_1%I!Tt8dIvnBz$Vk#<{0K5-&>?B5AgJImWhL{Os1W zv@IC(*5N9}$FSdAKY5-$Fcg~Aw`XhL^x=MG40A|SVxk3ohANCsu;qsO%Kp4oR!*18 zZ7M{#{qwie+~#LHvCKA*o}hdc$T%!^lZt>#VH4i5qeOK@=`RNpm1^ataVP7P=Oi@e zIiK4he#}S1dy`v-W(%hzPrTx0i;!i`^aq z{>g?o-t1>qzh%Xf;4m2_dmf&iK-&EB643Xty%)v?OJr;=$p5^0>wpZ?mjn&a6Po%z z>*NC7a5QJS123oAdDxm~_B_`;aBr@IXza-PlTaS_!YKHuJ#g(p8Iou|4S+|X`v)b% z6&PEB(BRL!p|e3y34`mz@GOfD8oQUHcRVyT^{;wpFqF|tv_Daa{^40O@%Z=d*eGZA zfW(Ww{zc97##rC!mQ zUq?Gl*tWZ_8U+f4p;S&UJa$Ppco(r-mB_OtV1DbgSDVMwbo1-;L#*cCZJX9^NRx@EycLE9&@gJS=mZTE6^Q8F;lv&FR<|lvm+>erzM zJa^3-oHmg9?#krbY}v}*mGnd)M=gv5(;+M$fL|*pontxFv>T4LYKsr~(QMrl$818o z)_*G}f2Fiv*529d4<|}O$eI%+AIZ?SFzEz2a=eZGT@`EY;L`wTQDa{=grlPbyu*Wo zN3DxnDg%g{A+%ji;nQ57f;J1q5Ut1x4YLsfV}s{B2Lx(gd9QgIYr?o#dvj#E-6QI_ew zXQI8vX(sVCyKq@L`L)gx#+ATE9T-nmfp%VfXem33d3$Fwd%^Wp@X%w7-G*@`t%bQp znapDkGlzNKQ(xq1%+kIa%-tS${?fW>P}Yq_ z38|BDn2EGS;A^zn-;Eo#`22`k(HT*HXzW%qr7Zc!i;=s1ncU45qbJ}3`ltieP$3Ar z^+FXxtgG7c8LBu>Xryycmhny-_nuum6(gT)*Wz2tJK79B;~bRya9@Q}TIzk0CXEcb z^VTy6e{_>1Icmg0Z!Xs)+C~;dx7WIn4N{oKJ*$=nRO)%8#A|&f-(&S9V)ySYs~K87 z@>wWlxdGcfU^S?<`5VE`L8$%&`-kqddc&M z>ier)^DiKIKe#$PDqO~VK%sJ)ZP=cu%6>d*#;gU_%)oUws91}N2w#_rC$DRK$uE+W@%@GW+9BLC7!c=#4l{Fo>Puou(#=l(3Bb9Gk;JwM# zx9J_5U=%WccfKHEi>2yW%o$hb;-Mm>37t1@w|0EMsN88wRP)Hiid3~Bk-TLdIYzYW z-9|3icfW#PllSIbbJ^dYEmoJwpVbDfB2^-FHMw7g7T z@%>9m-celtiL1V5v-7|WldG2JHE~4PaDSTZe&eo-#-eSh0x#=p-8OP^Xar^0> zygLc)zOd&S$b_-kd^k9kb0P8L|t_D@O z^C9}TZiD4~uRyX}-}5fTfP*|%Hu>{LrdK;yH7yV4K4B>m5iSK01+Zi3&zT`|-wUNl zQPU`eD99iEIrq~h12(FsEIujIYOtq4kq?Q0Z%XatZ%^#28F`BqX`E;UUI;OMU2`2J zJ`Q{`Xngt7cd&W+yzYblyj4|efL=iA`QC?3*V zGwIX6l?A(R2WH?2`m9Au)I#N5^z_0uiUo$3Lud>v=x=+?@48Ye1*R{QB|epJDK=k4 zxNn$fy+|pM&`y_PD*e5|_dcz8J9@7zHj0E9k%O!vv>K zK1KMy^fvdCc{u4Dhgu7g{mP7&p8+cxPv#)y<&Rx%APh6;i?DZeT_iiuNn>Z;)B!JY z6vY0GnGWzcTbdEYtxyE@1Y(2NVvK;*D3e&r7wtdM{r!7oHe%?9?LRDVTTZr0Z#rmf z?{^A|OmCg?^Jqt0OyXIXZDXWMQYCTjTU@YjM{g=xPAwfZQ3YCH!p7OiJ3iXJ#Q$_5 ztGV0PE%oOb++GYm!PkG-x%hcZ3tA9--7pMqYh0I zw!|xmwL6!Xi^~4t!CiUXbLvWat1-xqD2MR2&xZno=Fky!$%C%k-G;THM%oK=6k4$f zTawHc9J3UlxEm7@^sspYW(v;TxRcwQSj_o2B-SA8dgP4@qsCwroI-NndDx&Ke1a&F zDXRDFM|m1P@x|W`6Z{TBnNJPb$Dl~TL*1=*AM@NS-Ta_Y!iMj&u6SaumuWr|mbnJ+ zI?sY{T-_ShVV#fXS8K{Qj}4_W(v(h9WL$^nA2GMPqyyY%MkB zGU$SC-=V{}x0acm4@4kWmt5m^b9QL`SbQMN?xPz9ma0Z^+BDpjprvOIDORaM)p6MG z+PN0u`i*s#zG_35&}EdyIJtEH;ESbvx`sx%D!-Z}C~EoI9=P^CIJn(ia3{hbps+KG zC?LM1Dcr=YtZ2w0($dL>P@!a`Ed$18e!tCY>j-CsWCBb=yJg|arkz$FF`gXf6{!|y z7)((_v#b@Nafe-~b?clfA!IdOcsc0fWama$SXi94J^0&QxSyMM()5J{z599DB8_o? zb3BN5$};C^lm|u(^XLa%-=N8#=3?!TP@COB9ASP`ml!NK$x=OmV*Jhtk>(1j<;L)z zRUHcD$Tos+;1T307z@Es1QonW?T#Z?d42wArZKV?({|icp`-UbcyF%j=I&>1sqqH} z?mXn>Ew!p?dHn6LNONaPe!l#s@h`(Um>{KbtW+IBPIBcHn8oDMaI^eFC{>{DtTR8` z|K{PXAor~7+rL-5ntYxTL!|FhZr|sWmkbxS6o?k?l`zi*gcHXmV}Baf`Ety zrm#Bs66}X2a4+{^8#GG>pgzqnXG^-Sc+J+_G~~7l&-*>#1~}*2ZkTgx$<6z?0v|5D z{;pk`6Pbw@_in0<@$eUUhkq)CY47%_e}BLC;c7X$rSkbz@0(U6ZUKyhJS8aTSR);cu|l(3bAvq zTgmipwX4wlz#?CUB3b;fQ?`6AnQ&?16y|o2QMTf0@a^K1kh431C3L#6jlf4n9VB;x zt6#nBP4OdAq1cdEzjqCgs2&bXUT`7LpW{ezfz+{j!>G%!#kH{W!@Au)w{v69jDYLc zS=Q68l0ul)uy-!aK5UV;y!Z%d^ULJg6mAiE8D;BgIce(&%l`Bh@^qilDjc;%|CRe! z*go&~buB*TkIdhno-#bn7YUZ3z0)2XXMIXB3jHU$UFqdG<*{<{Qw9+9YTwbWRTgoM zk7(CxDs#|JAr4E2X~+-mmZ4a&OB@#@x@Z0`s3v%MHkrlT;e0`!G7RM(^5sje%D-m&8|nUTVSl9hnoJgXt~8%-)mBYp59PwYgn!QjJo%0GZV8 z-4}IB$MG4kz0QdO7O$*i_Jp35*#;~w-W!|##Kd~Y!}l^2crnSGLAN`&Wrre-LdsTH zD);p4riwDFo)k;)4i`M@4`&nK){@aP((8K@f^#vxSg(u(f804(UG}dF37`E^&&t5X z;8o4K_06`eOLbjN17=_ZrK}w&?lMW7gEf zJbv26kl31!?cc0d2bTZ?DkvQO1V59=kHvozZh5&?M6Ti|ny)%0X71j_gcyp=DUtWt zuDR2Cupgjw(vHy$&W*@Oh&$zpi25Tb2Cu-8ZRE3ZEd<;4ZCcNXG;6v|tT%2h<=`#r zMhIIKyyjIt2ky;hv6rGMsh=q-?pW8HBp@r(VXvyDL_VX5eNqAiOPjmwZK=*?GTg5@ z^-Uj_Kbw^-kgWyFGm%_kKVQXB{fZ=62{%y+EFW^g?bx5DfkTwR=N8DO=FEyP< z!53^k1d8dx8JKI{bHL*|smg5n^tst`^j07mR9fD0lXr~^(vWI}cf4=-ex~Bneu^e+ z8Q#(xD8p8~qQ9hbn|g${ZA6vH58IKt%{aS~sCx}2IUYq3yMDm!pH%7@1Xeqev+Xan zvWBGBqSUf~$TSTqfLAr!Kx2@0ZDMvYM6L_z)%*pum_kXUoG9PYF;9l>7Q;{4+l)?P zbeh+w3GaYj)Ehvmi9wTlzgHO% zF?=4j&Rv+Az6+h*oeIg%Db#Xs+mGhM{c?K{n$#B|_+Xkb zs7*7c*#DwOV)dH~ogWar3E?eH8MqAsXtqa45aLVxNwF8wGGSTe&K=&!%}NQ400wEe z%=XsORg7GgH$WO;UF}mSKaEBbTP267+3a75vk%Wj&$^-l!`&BK;8`s&Hn~7fv?mr7q9H9D+@W`vkxu8rm(S5;HB1nfOB$=HH;!* zWdw}`r7F0IU?6y$@fF_-BX*yg7U6_h3Jqd}OD*6(Tke0m5Ln0XWWXNFZRbe%U(OI+ zZRYeRM&{u}q`S##f2%f*iII2T`nY^5`J=g?>nHb62?Xc$Z zW4RR|HX3Mt%pO-z;L95Z)wpBlYL3rp>#6Asx1jN@8hzcurqLF}4R;k8Y*nOG_?w<^ z*|B#M^8z!q+l`jLJ*Ngg0<~Rtg<->8cgx^IOTN&_z%<{839Ia9_RH;NOS{L%mlnTq z#LLhIyM60r&q=ogVfWq$?4ZjQ3DYLYN`o|)rb>fOT?5592Nhnu&9_rXVdGNzsHg(c z^^=uM6VIz6Htc<~q}S^xjbD~4OZBl%mQ~LVL8^@R1Y`#QgfY$L%viBG{t;+O|2}Ni zuCdmX{`3(^5%%}$9(h*qgk|&n^S5VFxcKRWo^;;wN#1>^vSm#2Q7npzflPWsoL=6m z_A|5ews%JYOfGv0l9m0sx43Bq{zhy{0A5XUryrCF^0yGK8uw2Yq};p#QKXv>*RVyI ztXX9Q;UsC#l+-Tr`>hV>Sgst%{`o8KyY?Qhs3e6h(B*uq5vX`IgRB&&DF&$IeC~Pj zJ4zuYzAf+XSsY*$Z$@qoYC7(@5{bUOSS$xdrmXj`vKrlmonD-3s4n3M`SVy_aCs8t zF=>dg4}Jp+@_-28k#GWbdSvbunCJ|vMNFC*^OU&UP@SS0j#TJ}gYUE^F6fG)l`7t+ zUX9rUMTj3C^oIAmink-uVWx8D#&RTc0p9qgCYkknDuu#1di#Fk6WZOsJBTkc$t=7Z ztf!0~x`;9dSlF->>dm`Tt8iw2ZlTk{N=ojGc8vwjmmYNRF)DCTu*)lq;UOiN8c<-1 zVv*XV2vfx(-F#2-Dor=UcRt~)fK?8{*cQ&|GiqRpsaXHT<77hlYfuWRjO(an`0R~! zZ0j2*+<_9O-=)0wv+&e1JzZ;KN^aI4zrZ|M;^@$3zfET_`zfOO9R6N;P2eM!yjgo^ z{Y>8>uggylBl6Ev{4d$YL3J*Q?RM_s7V{&}FL{=?tW4?*y2`T=A_xaSw!G9Qq(G^@pn&B;{28Rrvrxqr{% z=vYm|{+Ga^G-6c^Mv1nT%-^B{M;f0Q8d&j&$uwQV?Q9M7 zZL>ga)OKZh9c+Gf}tlucua z`d8p5AGU?!Ah2`?|1b8D{|Wijx%avVywX{^@i^rjsUqsr--wq)hMW6KduX52V=Xb4 z!F~%L=Kdx0cyZ%aZB{dp#&T_Ox)w>2DRI7#pHLINj@x7KI>Bd^Iy*Q8)w>!eB}0U+ zj0*MHPo!BAZCBH;7sVPmBa(Qp@y?8;zM(AZ`+8csPMbNVfvWbsXkUH(2N934b<-{J zq-g7+mUOmL*cot92yA@6ltXHR*rg9}A&rhbgAL88a zoFjeN50}dUW4J*EK+DXJ-+Xbg3wNi1hnGX?@~p*A?xY|SPGh*izvf}r-4y_?KYHa2 za_{HmkLJ%7>>V^aY<8*VWnmLPhb-Y<0!y82&zA1}3dm%5)J`}?*RC|KAUdK{#N&U0 z%Fsv8)tX3K8mBnjbL+?5Ve;ZufrPHI8!=HtiHfmP5GeK4lp)bkJS;(?ChZa>h;!?Q z#JjwVR^n;WHBK{BrnN3C-@r{jeKFkdT&-k&@rKSO_?EQdKBy{58$Y2slu$k&>-`@4 zN?Bet1&<;|?G>&AxN7LhHi@|8VZ1Fqs&pBxml?J+=`W%Xt8x`_N699aCSz zD{MmkE6imGQ+ledpzN+`L28BV?3XF8Q2IwigeRs7ei%Kwi)ljw#Ps%cg3cbA{>br9 z%R#n&_f!`6E+$Uj24M3?w*9P*_I37|D5E&HUJGHG zCB2Uz`V)?p*R*Lk3cp~gpr}EDR`sq_pb4~R+{}0WRwQ-{lcHtO|MOJGq49cqh61^v z`uZyg49R2hZSnPkSBXBKhw#}U1mT>^d*vZb$6JZ&a8(9O^{h<`&W5Knc7d7%FXMI< z46PypDO+#%qKPgO#l)+G*O=E3k(u5$BN>M0fG$M+%MI%aBOE?t(ZZ7IP$AE+O>)wF z6wt4uZ}7-$H-^*EZoY<54zP83CP5^*a$>BI$qljjDZ9j}fW#>e3`(R}zf{`0NaBMc z61xr(PE5<5)c+t{APrJzJ-kE*a3>T_ts^?a=<2_w&1^P!pn?jaK52-Y$KzHRHwQP7$_my0Ezm#OoGkV4PGzRX10b%aK zYih(NY>a25KZZKVyHn~f)_t>jNLMkDRfOFW1To&L$oeC^bc0iC91(~B!=)zfOYZaY zW>qzeyUG{2)i{Nb8(WwD@F`EJTz{7$4tU#3vs%*q@dy3ll~;G@m;zaqOQDdxc=|f14G5HBEz9-?Jp`NcHeeS| zz^HfwT0qY(YCuSiY2Z)1_j|B`(n#nNMDD)4SMsl=jylYxzGBhXt{y9nnixi5Ob^Om z&HCQr9hG*fXZg76bE>NaXXIhRmR116!t2rW5Ub>XL7lw^Gq2lY$UdELgRXDCQgU8) zF4N!ueG*5yf9ui7LDj4*Mc47j!&@2~Wn}Ci?D$sWB5!_5{4njaXuShBbyf1Sm9qu% zxj;Q?(FaRR!GUze*fR~gX_Tz!)o|tbnVrKy;})SvAj(2nZqlt2wsa+LSBTNr?c1g` z++-c>hrd&bgz8I*Q016|X73h1h%9>hMpKmHCm?T>!V=T7apLR)lTF<@2=F4@)p=%u zE<0*Q>zGVl7DRc49=OyyWjwkM3em*F5% z@DqO&c?0sl53kK3Wsa85r-17+Eb71Yl8F*th%$4AF$XnK!IweBr_@JxKJzcpjDNtz zN>=AVy4h;QO0oWE*GUldUkkFFN&I29x>*MVw$>HVVL|*$o#6E^5rIEX?MbYvzQXUd z5IOywh_y`prkL2l;Mn2=7RMqdhshH;`lnBQrtM?ijD6@IOtiYs#!kJ8f?Uaxl}i-g z%BMuM!ntt*OR$)yt{~(h6sP`!Gm`!xczkNAC`~!3g}5uR><0zBo*wpNOtI{F4sB~R zZbEb{9^y^6P9u8VmjXGP+x(gJ*XegdtJ&Kfw-l8@FyDEyQqVYE>(K%H;`j4gi||y1 ziD!DY@MzY^1NyyDJm>Lp#f(!>CJK6?2~vVCC*yVWtfZ{Ew?Wwp@re~h19y;(#JxlIor_FOxYL$+|#RU!JG z$n!+1c^;ZNI!7_b_yHkcC#9+a2SZX!pBMz ztOmNe6i=K$HE-gcag_){%3T(ua>sVYoh#_(qo8h&{op(x&k<|u29I%2EJ&YN|DG0H zECF(Z!s+ssUiivv8O13>oj0D-e z;62B+TR`D5UGdAPacimMZ`R7dYaOYHaJ2|&HADOyC?`3=1dl-7%qS_#zY8OEH%=D{ z@u0lmTq|aJb)4aX7i=ICQD{nF<9pzNY&eWe>Hzz>z~W6e%MDHoV9wuk7{%vF9`e{P z<6GPt;y}ch+U9#9u!{-go^q@Ow2*&LEq5CjD~75r6E z(b@G2r9lrpTuAxXK@~-QXo6yg8rWLU_nzTXg*?c`a9#YM-}>L75Q71owA^`Bd+vK+-@hHjS4QW zA_g&1y}EVFS;wJH5BwC^ z;qH}fcD?usA9+BGID@s|At+(v>2&?_(Gx`1&@|I~`75eTK8y3?J2<*6&wo~xcX1@Q z)%D~QRk%pPotCDKq{VH;KwF2N;$z%mxEw4gcfsQf-Fw8p%t4w^B6J2HRAh1YDnggW zM2j1=0a@PF8&EVK=X!U!;2lE}3F5_PrzT>6ISctP5yCZ8dBFX+IWt5yIkZ*kpm9R= zyl!)Hc#N?izTa9WD;tlnQ(K+=uqpa9cF^#}1DvnSUYrhhX8RlC9*__n$+?4lUJe*o zc9J0&qdS1unHp;4SNNNF2teK1P2H> znEV_#{PLARCV^H=gV0{nVOKe4FqX^*?P|L@{%$j#u%Y#KRmUHn5d()93xDB<;y zsP<%d&kvjsi@%f#;d>y9hD+Y6kP0+TY+sUy-wuO_@8T;H*(3V*fAS`d+GDb0IBtX1 z;m@JULukLz<8;zLSI?|scnIXUK$^H;!b13(uKeh40vUNQ8%dn3t15P2zD_3E!H2DNYyn?pcfNf%--DGEyjJMI5Vyl5Zp&uKJ z$u8PAJ{?BFEElkYXIFxLGU_;-cCtc2g%$L&vf)->esM~!3G!&b>Bk>dEo>c$OaW1i z5t~{3Y1z}j(dVU}yBnvDv$!O8n^%0)Zm`DRC`WB*(QVO6T*n8yn?hXF>NE-;LEz*@ zIpU@E$bpLF0@F(%20^CsM~z6XlwYx&n^b@C*&TO~oZ!+H9UTZqlyWo&& zqT+jZ+N_6zdx|wuK@}w7qxS6W_8fIYhTH!@(}jpOAXjgzodom49AU0||V3g=uCwAL9th8Lpf7(M1uBV4Te zL0WzIeA1&_Ulx=K;!Y5sA!i@+!DPM}743OnfLPDb@FWkaM`!Vz=l-B^KHtlB=`bF) zsQpq>G4k+>QvOge;x$i7<>j|nV=3S6uDM2(?A7rakCS*9%-j9SCjsam{)jnq#U3=@fFGdL+RYHXMG$(P2;blLW;CjTI<^ zWntcr5}%O|HQ%^%jSa{Lf*$S3MSQ7Abs;Vl4Z5i)EZ5fFZnd4T%aP2ZZw+Yo^`7Y4)lg&+YPsM&pjl^e$MCj&*t_YHZ%u? zW{Kw-m_&%qi`zjWRqjsW)n0oa#vXDUCsgIVE>9Y?@&$2!`l5sX`Zf=7GgFL4u^~@k zmfefVBYM<{dJ*@!7G(sL!Y#~aBua1SW{;Obmd5Uz#F1V<%R30<`cy%};{M{aM@-!s zcsrmR4hf5o@6F3uwj87i@Blv}rH}5^KPL~G+rTfI0}qC?-NsP)pQnq8FJjJDg65X=u%b0OBr)`shD80e(ZIy*gFfI>I^b^-ekWY+x||>z>>NMr{_wmmcXaiN zL@EHZ4lQP(0>=^#?~WXdY)W7`H*m&GZ+F;a^!k|El=EU9kQcO9Rcsix;7x^&_oOk+ zA*IdvkS6bvI-U$Eon*W^T)GUZ2Gj-$@Vq&V)h%{0XH)r{cCQoK0UFY%F#5mQ?P4Y1#5^C zOCq5{+BD(zS&@zShhn~Ci7-uk+~*A;Z3wVfDoE-pG5b*s+l$|PD}AuVZ(ig`E0MQT z9j_LHMoE4VpcjxceG(x#_6fH;;TA<)lZbSH*D*pabtI!%iO}tp9AN>D4#*q*9yx26 z&uLQCmMUt9?~BKD#l@})8nJt)psS#yNv~gMkmO<~go0S+YRKW>Ho3LmQP{u5_q3`N6XkV*X`#<>A0jSF62LptaYVZ7@|?I0GRQoKxz< z;cWOm0vA=KU&jo$5`nOKgXRmsb*AD92+l`*rNhfFjS-g^m5;Ztj{MU4TQLIs5rho; zkwD}6p1OrqtDA=_D+n5E{D54WmdOExXLJX#svPukNss$;u<@a!lftnbpW-iMlWyHT zfw*A3OiMDMNA-^%=eLwoM@J|R!Jh5*#X@CqM|dF=B%x2QFa@~K)~7>BkWWut-j}L~ zS>3q@5HP}H2|`ohuB}k^ACR@Ss9H%PR+292Pk)l1ybKb&err{++iE=?WU3qp-|xru zIT|5uov9EK*wUoSJ8_WnZ=L2fS*FtCs-3AkwFzcyb#& zbyF%(%+?0r{IV0-@V#?7EB9Pr^#^t;XIYGg-2rlbn*jM@1NR=T23>hSjUIbnBL7{} zy@lzdXoi}p(jsJxaRy*A_cooyxRy(Vg z5-Z3>h2SD+62jFNbPTt#j%ino*`W4TPgd$NH6&b*Ndt3NlJy(O+J#mu3-W^HjENiF zj|#uZKTTCMd8_ua3Gy!QjE1J^@=~jHvD|$dzxP4PNmmHE|?0%#yimpjq;;FYs6PpQf%5R~in{xI~>p zIGlPQK`Mkn`4`2Hf+Y9>JCn*DcZGZqR`UA-nOc3n)bF4OYvZD1W9o>w2iP)lh97gW zv*r+hjzI5FZ4;BA!^v|#D7*%y754WWXVK|i7aMY;wV*8_-_4CwvEW|H(vbv52(`+c zpFL(7VXl#uIr{wB6%{8SRe(+bm_CIY zVI)vb`Re9#tF|h1(*K5eE}T=7XCMq`sNPn+%V+J-u+7;u7FA-+yxC49x%+eFTJ{oO zwnsgf4UdWwf^;WS*u}Lf18{>6$FY&Q+?OAU#LF2r5(%uNkwR_%7e!YY7ggT{cbBER zq*)p%Ndc){LPA7PQ50zbX%IwmgHVBo4(SpEM3F|MmXeb0UJwcCj?I_%)BSqmcjtf3 z%$zx9A>KMN%SI;JlzM>48@w0W*W4G`KCM|A=a2q8l9@<};e)@$Y0Ju93>haeYSbt! zS&SO^6-zM@9k|wUXG*LbEw`TDG4`9{pxdM3Ipu+-B;55)gWSub>Z%=kj(c#f=Xb*o zz`WZ3e;0LFTq0oJ4T18JyUp4#;6}13jZJJa9c-sUMFEToT+KW?-gOAjyz4|!_I3To zWwAEUEWz|}FC~=4gi108^zoDA2ASNWdsQ|=c!2p_Y-3x2LIfiBe!b6Xo}#MNrID)XLp#qb!E zzWi3@E3SIkN%_ooDhif>g_;6duI>2f-gR9TpYYbVq7!uBo9oppfAQy)hgTrrBw!O< zJZ2~3($gFf1vH^xVWf=HFH)`(y~m4KYLn4A;rk7W`aa2r$ z$E}@q211o&hUK7MLXs)g5*>PY$3@m+BZ(wUV7V-YRl*T(!ACa+uAj<>` zS+b;RdT}ibjIJy_D!6#~^OZU?47mg7Ew z0Vz)sz;=KNZF))3EMUyw5Y29kg_k-_=FS+$-|1dZ>(SZVT75n#9xbH$A^HTUjVg~kL(ovX>r6Ry;0jbxqXfO{Z^0)8@*f@cf?+{Z$f?$)HsA0>#bMPfGmv%3pPL2jL>9Z-2Ls z0IN_pP7r&i@|^(Jj>ip3Wug0tFW+hKXC`CLZ__kUI>kMO)!@iMF5SNt<{q;!6+p?LbPwqEV}2aq z$m+a!<~`ayRwtoIK$f;LI`DY>UE*7Hx5x-XZEpz_{#e3H%QGOOY2`3SiDz~@e`S(% zvz+8eN;y=-p@XF6N!ic5P=F$}NgMmuNt&}^HM6k^%)lxtz^%ne_14~wf=DfD7%xpX zZs4$BDw|g{p_^5KFNDRN{MLs~>JU`F^V$&L`z@HZCEzQ=u9igELJGrb7i}Zo;dtDK z%}^T{;+MIq?_6y}u*_XR9@^RV3#PN`!@aK`K9??op45JH#9I*vOA{w9)v>*SXHd2< zluA_R!P+0v0x}X+DkBOqb3F9upSWr$;%!P)&59Hem|q*fILL86qw-m5@@G?t4G37~ zuZ$J~V&E6Kl1x-vqij`$)Mhbya)@k264uWAj;<>B3i$2w#KZM+P!S9eOkWo10&6e_ zbPpgk>D-~g^6r~FH@9k4iRUWq85U|~GnB0l0*~g$xIly8nDSShVH}Iaxr?y84$;Un3lN0q zRDxmIOwvig~eX*%=JVH+qa97}{em4>oS-SnOwp5wTYTgO`> zdndTBH)ubm)o&Xf#}=Dk%XSVWdAUBwTiGC0|H=1Z($9V=i=M4-$oac=PN+;}j1DVCMCT z7t&le|N6?YKaHsHP}p*HY$T^{FL1I%e0H8)lK#R;reSn9sH1?P|5p}I~PJsh8`0GHY*DSmcv-$0iQv+2{kE6Ca zb))60$WPHB3LpV`SZ@vJ_BUnND5xfxM_T7(Tkgw=2q#oN)g!Q; z>_Y!wQkgekEOrdAYt(%&09ON06O#1rB%@f2P~*rU7aBHUYV#h}7>VrMcR$2g6rQGO zcbd@a&`53;a+y(4u(Djc3Znq#1x%7)MGc)6^+NBZ&BO3L3NF z78OJ?A~2erB*%w|}#y0BHpSK=*l`Ws4 zV)KLr%SfqL9ML*TeP6DRTFOOp`~*$>-dDl*3BRs3uP2FS|Kb~_6rw0EFQIoLp5YUV3ae;Du)q;^L5Oo?#Ot%|2BQk>aEPZ#>~+Ksvmq0)|OA$gn` zoT2SC1NY7(R-v_Gvo_AYW8D_qw100%0-^zt{HW`0IC>*E{~Q@GGre{a849QYmdV}Z zj{Epfl?jqv^(zT!uUaDg2M@4PYJa3mKX~_vw1^=BFhDIJ1MBbkAdv`e>@MJa2!2nl z6?`cH7{arI5zUxg<$$-k0kzyGm|}?Hj&bBBEAb1q*6G8+y+!a<{Lt(SMB6P z@fKchiEiVOUrrcZ0c^BhCH$yV(BKa;??Qf*ev$laI>B^H1xWQy+vSBzl2h5O0zEl0 zOL&PcFR;sIH@bxjb~K4EzmlebSzZ(4^9AMy$Ac!{}Ew+0JYw5mXJM+3ZKe@r9T!D@hOw>0Y8Z)s|$9(~|3UQxy(Q?RiK<@c$QS#`bVf8Yv zw61iqj5#ZRh_F18>gH7fMVItR!WU8*mX&(e{b>=G-K*!{!m-{HS3JhC{EsdoLb0+u zWco+QN2D)6sw~#{wqw#S&ZxhlU13kZPI1yve0l7{#SGa0>XsAq3jC>DvV*SR6HQSC z*n_<`5m2W=?Gj{*%DO}L#hlYo=ULSUhR#HhA%u++7Og0ujfk2_hXB9#j7@^9g3aEo z+!;A~IsJhw@G#Feu)y+azgxBbZXj;`!IaTh! z|A=&C%5fV2TqcSiKru|kML#G6maHw&nD=)Ff(7Cg7-829Sz16PU_w2u3A5@$|nAk&Kt1eRoTn?Ly^mTA1hJ zu#pT*R|KZ3_q>)#P!^>h?F7B6ny&pYO69w{@3(DJp|Usns%!nH=c!B|2sigl^GJqF zPmn?YMlY>$Vr>x?O*7Ogcfv@ujr=+Hv!je5Y2y0xw$lSEIGC>^YKTQ1`dFIlTPf?7 zS1hQiGP^6>Ri>6m@qXopGJG^Rr=VIl=;JbYThO?OL9WbE{mwU<^%ZPt`3n?^E zNp!&&gxlK?7^}XaVINp6NC(#kN4Q9bJY}q60N!~TEOE-A|MU2;ANrS2dT2{OAT$K_ zfJ9x`w%h5+d{(7u>?j=MGR#5=+dUiIR+M4ak4RE9`!WVwja-7c*T}J=jzQ)w6jawu z58M5>Odmya#R#4vYLBXjP^p!jR|kC_45ysfcmHttRJ0>aPG*%RS4+o&&<#SuYjSAL z9^^e01Y0y|JFm_&9fldB8Z#8(!p+?LM5JzbyNxxLhtrTfyujQ*OjUNE-6gI{E6*{l z);lOn{-_M6C%tA(Lfjyr1)b~)RCvCABc#J9sj;)$7xb6LtUS%GuM*_`&-_~NFa(v6 zZ~g2Rcq(C73zm>B+lr;BVm(V05(sv$`3vph`DznF^%PC4noO6c;QxSW0^KVaIXJIQ z#n{TCTfvwu;k#$0Q&3L(+azY_CZ4u>7D-v>{et?T2t_bMJw?$>TBcgVvpVgpOV-s8 zQj!=OaF0gkqy3N$Sr{twUgXQ_XXH*4zLqHFdcay< zxMHGtXbfr7be7Bl$!Y+aR5Bk)r%BN@Tl&Y8dQ^h)p!~-_IFNzcJ)BDU(OwB@mA;1H zFiHZ&2;yoctnJ<#^&~oL@m8Yah(Ta4q=HB^8^@W3Sgcj9_)k_N0I3j|Yp2^?B{NTV z9QnFnOm6|+o6*Z0`(i|#EG zvqWb1U8PGCL{|--f6@Kv-e6gAE48Z~mV*RQm;k~RnKBJFeSh}-vxwy|2U=zNIAxDC zj`GV58@mAwL6UJdj&EwtI@|?~ibSL8$ljUV6fvib!BNE8-3Y{CUl#gLaDS0~Nhien zdM4Y>Z2k|Q!GGzxa%`!c z)JT%UXl44*m$pHwsDK{)&v1zLS?>_U?iUou;Y6rd)gX-xPoZbGzEr!yEAZQ%(^K;_|FiS!bAP1p`e2ffeTow#{+E1fhJNHfamB4bZPIzPGCrvjX?L6WA&%rMS zPMvxnH~MG2LjX8J;xTE8f^UMtJeVGG<8KIs2myE*?>OfvktY*+y6IPV{=xLx1|=Wm zb2v1jJNNBfMCk4O-QNoYoodsZIbzGUDR`wL4cb0OjNgO8`X)NWfbyVrlKHWV&!?gI zhHDV|K%Cu{?IwopU|%FC%sd!|mg9FSPQ1N2uZ1kd|C1Nr9vTWT$rVzVp*V~@yE1Q} zEEK%5YgaB-8wZ43fT^HwV?3j5v-FdxtOCd6H~kwQ`ZDG72)KY03UdQZUw7m!-;J03 zHj-Dx`kn4&J>h5gz!k2YIHTD?kdMNoKD%^X|Dc+_Zyc{#y(X)(4P8F3n?{v7oiKbw z{`^%xRz~xvF#+3FJqq!vxM_P9I>smpxczto;gJWv_AS$w|e)+ zntrtQecHo!wSv%(CAp7CdmW(ApA)0?Ed_k}n@>BY-A@nj zk{xje$bBRD_~h$DoH^q@poMGZ=kZB7GQ$s_6p>I%AY(cgVh+@l{wK~trxS}M-2K@N zVGA{Q_p6?qk)8D^vT%>%3!(iC@4oUIu>?OO9MI~D0kmlg8dl4w6J-kk(Wom>B9$TQ zP4~mu^Yh61G~bVWWp=j#G&HnNhsomlX}E=7(Uc`K18<*DRyhdHX9y=r@$eg!w8u=m z4NII6y#|zEv(@>+fEJp&6C3o~XVl*(6E3j5a~^0gWT4sgH!Bt2WeXv z4{Xco&X?&=T^D%ogDnZQydXMsM}X)(lbgjE|4@y6-*@R|smlWo?Py87J#_-u(ajYi-Aj zC;ukVuwHO??o!;?q?}$!SjV0`KtGFQB~n#l4MKA$n9fh)q50YDVCvV%G!5>uVRzev z-v6$LF@uQDr>>#8vGU1Hw)#4(d%Y!Pa(ki$@|?MNr)c*9t$;1ShZ)E%@~Cbq6OB|Y zsiBz*6Ipa?O@Ea9C{e-&gMZ(wx!`oMLLW_j8(Rv=@~ z^bYCL_VZkIM*+j*5(u?Y(EE2u7!yZa%3;y{sZzf)@!~i@(+N31#jq}!k^bYA@HTb* zK3>#=&*DuM=sn(7F8#r}8(9X0fG^df3xTv`DNdHG=o;yc)dNlss}pkk=0?gjlsu%= z)xMVdFwHLE8;tm0xm`hO|Aqd^88U5vR&3utD~*KMpY_UcQxTCNwm00Lzs;*Z58UwE zf97WqV9~trws}qB2=F$lBZ;b0pNc#cERj@Y78%KQ#3Fd71t4qKBDew!1W{kpLeC5h zMeG7ml!@O&W_yYd(54~ii;{=TRqPUv$bEi&f1=z(Fj!|e%i48_Z;aZn?wYVC?$E|d7~0{ z!BG`Yqd(vJ?*{6-_RK@IQ14Nk19CbrQ;MV`6ei%9c=0`1qAK`_A&jbE^^&adDJ&c0 z!El*p&iD~&l*a+>KN$|>P3%Dv>rKDR{nE=9SKP7>I{R(=7=5@vx-^uv#Y(UDtjb1f z-M}}EimxfydS1K?n@4l%vS#>XS6(%aG@u_6G=nePzrH~721>-h?>$G>A#F8CE;#># zAY&xadgSEz)^FMZ$ZK{4porWt$Y#ets6mFPif` zuya<%$ftx-A;P8`Y58Kx@jxqtU@vy_!Ie`lCS+%bIT)vlEh3}4z!i}{M@bWYQ6Bne z^gb@yI`d`AqkekhP9|8pK=3I8|Y z0fJ!-WL{I20_+b9ZnhD19<|Mq~W!T?Wpp3aHh%d=tA)xOZ`9XvfYb0dq|I=I3>eTk1 zCpvc%A8mEu&5eLzCy1U(xX9C9y7qcYdadxehdc;=CyfA*+~-b58atLGWmk|~-SuYdk@g7iIYg+POC?}rx zSgIK6f!IG^z&ybPkPjPH( z4+Z;E312tn+2g_2@l!w)m8vA*aN(8?FolvgLfN1_AWGmOuOb^T*^K|&|B`ghICVgX zvu(UdgGF_T%N(!E!cE}&Dx~k_{xdO1-qp5S@CO=vTbm$=Xf9lJI)D2=DZazY;$SD&X!5ul`1?=KKS2U>GAC0L%K(qj76Mpjt@|tyF{{QK zen>W2on6x^|4hmDr^*(b0-%qRJEu&HOql=bw%${!D%73@*re!gId>n2Mc$^MX1s?$ z4RfCU=h0z>qkP~#K32q_VTHz7Xno%(BD&@e{N$37MViCUd5{Lyq(uwN3@&|G>(y;y ziy5xg$^*f-GxE8`q8C>`pHFkiDi)r}?TvX%_yDz=5O^W|Z3fLejFU}SlEr|hAY$zq zHzLDV=<3R$G8vnU3>`@myC*-5khtsw*JmFD#MngJUs@iSykQ8J1(X0$2v?|eSog`vrmc0modK(Iy8Clnw7s!liZa$X70UjKf5ZUS6B#X6a9sR zRYwQUm%c7B@FT}s>D2t z*-EweG{6cIe)>n-FB9FUe#_G?yA10aG5`@D6Ty20EolK4(`|Cb?wU@9fbm?z0>7)< zP5)$#9+?ff0jcOac@G_Og$ueOScH_gBJ#v(+OMcti9`(1>FiKQy-JDO-C}YmpOh86 z!wIwH9`4Rn9y1U-8vI=N>Q*)48ZGDdP08^RKd$&|CcNeO-Tvi^H7RB65nBW1$LhSz zk-=JbHcZ`>uz#H)0)W%2-!*h?D8iZ#{^wewy**#}X^~qo@QsNVzz`M%;CnZdqA`E@ zZyC#>7~cAtrV|1PLHnJpm5((`wLsSrMCIh;ifs`r#4z19 zh#!!+T#3|<<6pWHmZI8RRQ>k3G1eCM0z!9c8qygzkiQwf=iQz^_b1P)2Co{c^5R*$ z?s4hkm!t%0JhIri2>y`3x});UJAU6&8JBp?VFZ`VzM@MMUNdDMC*4{F*AtuT1U8^J z>73tLF1nyp|!~Lt_ZQMJAES z6N>KYZJQ9|so`|an5pD0K&l(ilyD3bW#)$Z8=hVVU$ zK0xVm48vHCd>;tiCFcHE=Mf|%ov9Qa)W{=^&b1Su=0s27wS>X-x!0=1#n&uyb~32x zj@FP1x%xobINel=Rzct;xw31BQ^+`c?WmZLb&KOQo4=BOxxjq z+h^!Q`l)Bg2L;dp!W#{O7+NL3lQ?Ne1mU?NY{hZU>LCp6bNA06p|&O$KV~(2_K0%N z?o;ETRIP6w8eOhFvdvuOh|@Y~Do57N(vW{819CgCHybqlJ-urs-x%3V9 z?zcW5ZkG0Qiq^UdyV(#w8 zOpM53FG9gj7opHWS&Eaaz+#fDNCx_6;{6HT1*fW?(QUWH6=&Hl2Q1qDq;N4+e*30G zg}25Q@+kbgIS60^8jw>}~QJ8!f{wz6f|Fhso8^x{}?W#rlREB5}8BgA$1S%_^E;B#wA?gb~lsXje#a$;os z?|RxEWHS6$cRenR;i_XF!!iZ&!@urJXb7NU?Am<3>lgX^twUD{wJjRKmj$D(2OUz5 zGNL8zwFl*?G<|Mg;D>XG+oe55@F|Yc0*)=|_QtuFEL7b7CIAl>y<~|fra~na?Tpbn z_7gr9xutg+g4c5iq&s?a@%GAVtAzYA5^(|j?fnHJIQ+-%90gTVTg{hgEn@BV6ci`5 zJ)eL1xd?q#<$iuG;~UJo8=(6)M?8fSIyYp;LxM7SzMx0jKcs%ZnnudawH4{VfC?pN z82d3=V-lb$%^}_@opYnrxXn|KqF)>=nhl~e`5mUJD6Xow$o$;g+%JIy`b%3*(8_@y zYb4cWg^1BC1V*b9J_^3R?xa~=#y(w`LXAFnwKQv5cCoBGJvFK62PCg9Rxlrar3fzEL8~)7s2O0 zQfWKgG=~!gTy66P`hJhwJ_^=c+fDJcp+Fa%zc~DFfN`ZZctjF?4jg<7DeLI^@z3AS zYro?_H^@6{-J&@Jy4#)7R^~Ci&ryoG9#*k@cJ^T+LGCbPx!JVj2uuy_{dZOwKM^

;OOMAo_eC7mtIzXGLJyZ0wi8HK7z;+?1!PqB&Yd>dPwvb=LdyNm zoa(V-BV|(gxbi0KRpt0uW&XKnAXZNC{z5qa%S{dfF18e7hyk4AtU)4iQT!@CuE+cxl&!LX8Hx;ILw z_Wm1@8!L0f@Vk*HYVG@BkG{&kc>Gs}M82=O&Yc%R+JSym#}FCa4h%>ZaggPw{~fJ- zVW8dr#q>+Mzvykc?zgl0-{nF7C?Z<@2*TyK0fQjiU|gvcX%Rp4Yt{QjfW*@)PhUou z6tx!bwy@9Uqq%gWM#gw823$16u7$uabKv%9#kJ*e{0#t}XQ*TEtmiO^77^SKyTo|t zop}!$ym8R4gxNZbpb+T&xOX9)e%#$Qb4EG(%Z24Kq?pE&rM=QHFtHZw`kah^247q%LMA z7TZN`r<|Wk1<`=z7ec;m5cqCGcE^KFW!~eg?##ij=%;>OVdv6T3|ixj4|JKA{a*Ml zFy+${%O}$piTAUDuie$gq_OFQ>z0bY)oVBjh{*qYSvjrG_`MDna00^jokms z-O{(A`9rm0!k#~#2ai5zc5R*Cm_d!uUsn9JmFt^3Qkf`hTP^x=y@}2+IW%^@(jC`4 z=C~6aaG>dF?U)&ePue9r6i!FJ_!mUr#Lw#2j2QLc7BMdo%?>w!t(v zSw)#P3lug`2kc&Q{FNoqzR)0LQhHZZkF&|+&V8au6X_l$))%CE}rik>|{wpzAb zu^v=?%2Xw$T}%KuFqDnTCclq$6`_oMd4zmBvCyEPnCClG)alc&lEflgyzOi+VS8F^*|D$>` zL{c*ZpSHhu9c+^BgL!F4{N*6u^mdOsCqjJt^lNVRvzbX=2DZ*Q%M_HP{HLntvJg-C z&QI=;Ca&E`z}GK&$QiLBuDMDBov6^Nv<{EIbkRJ+N~3FjPNZYV(dYX+mu>gz2P(l; zIobJY=R~Ur=nprv<1sUrNJ`;0hLm^D)!Gn|yIMLfjb5B1^}A`zv3GcPRK~O+O4>-k zVss>tzo;$0r)ZiS3P1>&W&~j>F$c zpwbhwTZLWQ>}LbWyw`tC7d30ULbk(7N&BJwBkYMhVU-NDdw1SxNXj_ietilX8ArAy z`e1bG!pKS9TC?`q(A;=`afoFq3L|`ktZ%+3@>1oICPR;}YM~%9Es#X9-we>dm%@t% zl{|%g2D!--2NBD;FEu$X$q@K82+l=RKMU6Nm&)#`U@=_;l}lW)pc41q_!D>L!|e+S z_ew^NGy0bda?E;WM@ednk3AKr%?wtIp&cN6ymC7c@RDK6Gh5Z%^^SAb`@H^}Z+u6- z5-0~NG>t8=(g_1+1GyzRqN6;Y`ih+_KJpoEK5+#GukD$NPNt7+#&?;90`x#BOABr_ zguLYd5vUfXl(BJnA*7Uju-CZV+kxP+9j#<5b@eY3e!l?odGlJD7Kl~^A~qHBGdn~M zTMyu}us|k}>)=ES?&!uWfDqZvP2NvDVJvHx#Dak9INg@*7iZS)pg!)?HSSC>=Sq0 zN6D2$P#)TKoF63GMPNAVOYqjSy|J>B@$)+PV^dWJLzn^}nrgfCYx&P3$%tjY`Y^+k zFmajQwAT#!?4IrZOj*GoF*2uD5(9h+KJ}zU!FP<#+$}eC$NjCM^Ev9T2K>z7z5Nzt zS3+mMrZ*Lq>wJ#ow?3!N1mokjWy`e|i2XV;*k-rJGX_4Mg+A2x_4H`<)~mmt_m>%e zmM82`d6XqQ4o!2slGt0(ZDf2z0!|`ot^)pD@hN8yNx1&#cMZm;$JJuN9}Nq%Un*o4 zBvECP>3{^t#=z$3sHnDxdcyOUC#z*R%aTqrW3MlQRJ!uiO~v#r9aE72E#9y^J@6t^ zVfLM}981tTOV}ny?G0Ry(Uu$8U4HxhRIcEug>%8x3kh1r+ zg0K*lE~b`#Q_-pQ@LcgSZTMK%6ncKywP8@kxKiq5ShCAjO{}Frz=uZmtKR8?iBY#4 zQtpS}GK8toSSzn;i;AF_1P$%--t9FpVPQURfLX_ST;P!K+LybQLgH zmMwYeo0WN#2)xf|>rbe+wM=s8n?^>lFz@@}XBJeu)kD;W_sQ+Q-KO|T?L+h0%$$8( zjd4+8Aol4ByIw)ep3ptBZ^oj1!_GE$b~Se@u6KlBUpQP360T7BUkiV5}lD=RiL9|Coa z^!vWfVF2ERr!1={nL)l1?sdXz^uHV|2LX`(h&f{&n--!#M>?VBQMYOYff?lKau=xa zAdqL%qm~zCGx+yO@gu`kXrH&LeZEeM~G}^|uF@kB(AG@(jsPDGaWPzuuTQtZ}(VxU<%E?b^&oB`Y`xg|oYWl0{u=$nQLl67kJ$ zpD0l05Pv?|sJ`2(Z0vqr)jRUUQZ*J$bF*rjd9yPEOJhd;a5NgxREwz&nVpO88HTz= zKT8Y_xT{3EY$#njgd*7zywo((UuQ^q=e#{nOxoQ*UM0`AB61nlj5hKFLGEj^4=)}k zU4laEN7F*@?FP&&s|-W$;!=p3x0hNgSdrtRl2G{Ade2I0T8~TbZxf>gh7$=Ow4%2T zlb(f8a*ymbxC?3cVRW-FNjwDCZ>8zSfOcBbU_xn{>VmG91~Xg#RkIHK&KLE`CHLH( z!iq(F_5CEn8y6lp*kK&-$)Ic4IOIu+z+}H}%vW0BCp*@U&+2({O!^pLy|Ud zoX69n_&`(qqqlZ`mM1_<*a1-B&zxY%Mz3Dc3pKi@1&9QsjOAtR;`L<2B6Oxcd_j%) zJR$Dyn{L}EoV{6xO-(>kZY-B=FTCzxG(~d0-`c_0O5a%HiaP-zVo!7c=T=J^Kvn!! z=Z`I)gj>WWRZ4Aej&$VHHIXoN5r3XKTj9gI5w7sPj^Ycqk2_bCbt!Uo?8~Q2kQoDY@;(2w@!WCx^vs}QN}kOERdU(6c_5!yq+b<9ioj!g zyvriu3)I^y7*-O^HtQ^C`KL?TrCnM;r|J;~*rMYoa6^a51a^lja@vSfOIu2H(7-I~ zxTWc>8uttOj>7QIZQ;5)38sC`KMHP%u5fT0-r9ysJnR((%%sTX!HfPZ_~gAld_G$0 zu&JI0_n>XRuIOgeDlw`c(YK~MbIb7C%Mne`iQaX^pxjcSvy}d{4dR}&22U{eg(_n* zRx|`7b~#$3J5H3R&NLXGdX`siGQbeO;$ zXRn_{#^d~v|bD^MukZ`tcSzI$YbG~xm>|E)4CTv30; zH5rvA-`A==-x_g)zd^Rj2mYcgLZAN&}{`LFOVYS5-5iv^ei z)8?i994Y}#@0Cg|>P^qod(lR$QKJ4Cxe;$->w$>?EbVx3904@oE)36Tcp0qsQouK0 zzNt>r({{wLc;^pfPbAXWtn4bOyk7PT1#=igrS4S44eidriG-~bGdGun^$Ys&z3b7a z0KU@BG?o~}EySwqg6E@Y?3Q*OPl@-Co5+5+Fii4V-80_}RI%-YFUM@2>#8+Oyr zEWsiN1-;4U{u}dNW=;(z+p$&N0O0N$V{!+W#Yfj z)|ry`!ReeIZGIzM1O>`i7$eU<{m-BUZ)vr%ZCz-T{9W%vWr`eYN*Q&2+7W6?H{#$k~}C4EAAQ z0V>_)d3L)ECw@3kPc;UCg4dtqzGILGETMUL2N8Zx<>hM;{*0rosw}b>o|`S*o^|%h ztvXVNd7xm6sSC;FP`;UwZ+gy@c8|(%c|iCdLqrk1<9jNFc+3bz0_WwNgTo$TZT7d7 ze|{wX9vtsedna&ZEWY=1_zK^=vuKYR)_J^n%~^x`J79HwpXR;gi3(KPRqF*hQD8V2>L|p&>iy zn=lxDzP|MQnI5#GSsS-bKBM{)Q-$aLzr z>=Arz_hlka3d|Q5r<^G2cfMuHb*cE3_^PMqK%d#A*=U=%u1~VzZC5l+&Lh|AJyY!8 z{P8IN2J4@fX^?_mP?{|jkT107v_WEyAP^f_H@vG6c@+=N;c%()J6ymJm2u=-C3nHw zYP^vOx9?-s$uP>ynqU9#?SJKOK1pOQ^m_elcE4Q=Cjew)a$e zD5RCY9qF}4_>8)<$EsR_F;}2=5qL1+=xT~8&32214U+A$QkO9RziZ?C)%dw;Q84!1 zAxoa-wT<<6G&}S97r(D}UIK4oepqT(RF?}0MO6L#R0Q6rk5?QuM3CfU+B2xcQbsQ+ zFFBqn&@J(XFGkZ*@nm!_MvR5u3;tgE%}ti{^v{`;QP9gZo)C=ET9qXV*!1mld&!$c zlRf{Lo4<4EA&Q5OBaaottu0Cxhn>dSO;6r>Hnh%hYQ=^chVpWtwZ7sOMMsCW)(-iP zuUuPY_nI4qgodHKz3wIY>*7NS>Lcewd%GZJgMJZMS=E%=FOY{h-P>PWjrU>`wg5LS z$@O^5WCTGOo!8n zS$o5Ln|&CHXdMGc+M`*hr8nG^=bcBzC$tL%Gw#EBJ>=j3rtzJglwKZiXyCa?+Y##| z+;T)Jo+{@jAv_XoVm7OKLl~#ok^QY=#UzYtHo{)7yCPX6#USRs!p6IuOc(1 zv7a=5O=;PYMdKEy(3m^!;7u*qNUi&hYlR&F5`SdpUExn_Sl4bMl5Fu4fg1nzvqrKL z{{3_$=U?6G;cv&9p_m_N$+OxP7NFszLrvv|*->wE&TNXhaw`sDEN}|flGpj6?7TwR z$Ee)C8MCBtm_`9bB|K;q?qA1n9CrQuz!k)Gd3Y#g!Z7imRMCJeK?M_f^6t?UBj9hH z=}II*I2$}l;i7J7Z5>xY-xsSVM;rW!`P;u!dlPV-7>k)_)6Sv?__~FP5{S@W3F;~y zTgX(BHJz}e?5k^kV_2ZHiOK+M88J-;OS--3FWVYNRE)o{Gujk1n3DZU46L~B1dg^t z8ZyeLz=3J?k}At)cjwz`=v8x*mj>yN*tgpP+BwYn|EVMaKyMXz%Gur$icJ?Hgce2u z4}L{&W)cx^)i-@?N|onqDiaz)6a0dv6js#tepaNI{-aham_Fb-B)b%$JMUZmK*khI zjPxMP{kO3d!mX+$y@paY`#R+iY$IoIqeRjmKa8LE-61pYB!&4z206Hnh56RG)Nm@IBZk`|9IN}#*lRHy4cBPbCpo)dk8QV zYixWT1I|mE4=m*x``|jbnN`4f3DDTVJ8a5IZW9gvV0)$wqP#6yaPX!X-7;L&SwKJl zhvTN72Z=TRQjhp40u!X8rBqZ*->yzgRm?@#V%2R z=aKUEw+dcqI=&KQ^Bt!xab29vzCB}5J8$_ZyzenN7hCe;7s|u9lM!CVREWxRb*eu% z;5rf1;e2rex5;wq<5;4~^S^eA^nD!zK4A*aK3!8@R-#Pn2TzK$3;46Z>9(pJeOe}x zWqUk&U-tJY$pYJ&JnN$ev254*EL}n9$N9T&ivH#G8j(9BY_&w(_Xza>p6;&rp%UKn z31?=0=nCmsR$o=lE* z3nNoQxk{&}yc(lQY0({2mK&KjQ{4MM_O1f1iu7xP-Q7Xkfpl{(+2Sc;q$GpvfND=sQc_#MzhHF-IY$U!~d?=GGe)cdE%z^GjjoGs=v& z+w(T)`fD}o=%>#<*x^gN8YOG%D1Nj*Yg1LcxZ6ShS##c9ICW^*>-`E9KZQ4#uJ}Uh zpDjUJ4Xa14u(p4=S2fz*w7IEs=~Ms2A9~zA;ECh;l?xv%tzGNzq8??2+l>fX5V_mDL%YN|hb#F{ zsoS)aT6g17y?oRvFN#rn^XTCgP2W+oc8|Ss&8^97qwziKO{-UBQQ+x21|<({J+SSi z;&uh^*kLMK>V_UGUeDW8>*BJ%;;fsR`*y8axzyD6hDD2*_p5ShaHELZqu$2YpWa?% zP~sW0uw?bMqaDoEioAcWK67>{m4D)F2lpK`r*zVUqTz~`k#D;lIOJ+W5v8vrzEyd* zeOA;Mv2Kw*)ta90h}mhZTcn9@nRQ;t>h)#+l!+^Urb_7xW6LE>m)%&X(S3Y!r8@3Q z9yWSta#Gst{q8wMW;LHNziHS*RjlS8rf>T?XoyFg zncH&dDcy9F3`QYV^AH=Iy7)RQ#mdBp`I|!Ki@N)hT+j=BmG^eC(FoL@_bu^{kj( zibK|1oHx-*{r%JFt7Z@Jx%j#5yr zvgpo7Rn)dh)<;fV`B8RBsYTg#*IKN3+-%|Q@U*4@`uwmuRp2(vA_1~*!iDUyOnMA z+2G|S+0zyAN1T_t&N+2gW$qS*5Z<_OzXvJ#8`TH7Eg@U^{YC*-@xbXFC`LB*cwAKi9! zf=RWiiqXfXtkP?LG@;A;iH8*4h&z-oQmlw}klK`yTZ*U_+hAF0=^sz56l6{J9DVbl zh}zJ`CqJp2oVoaqAqrL1j&F}{61`>e>4uA5Ju;m1SHFrXj|TQXHh!sh|1#I-wwu)d z?bsoUN)&Ut=A^H*PY2Pu6LPmqo>o~$){gd_@pk1yL0U2xYsIwDGV^tJU7y) z_MGXeI?r4#RPVRw@YSL%lOOr0-R#qUR{a&?lF23K1mB*l@<*)7=*ztZ6+0t2SM=@6 z2cfD(0+QA^A3k3;S#%wowyWDfO?)BwT&%shZOjxUX~UwM8x>nQHMo>^QW0&JImd3a z9#LvSholFJor)`&RPeV9(vA*Q3@Np=eyhs(5?QVOQ*W>6v8`-SY~`e({Y%eIvAcK2 zyY1(|Cih~_x4-P5G0eaAp9^Qb9`pQ9eXj_!k0oBZP3p9-p8|!Az3`{3N*|wHHLFKf zI1{?u|G+D6FE8zW@5at}lg8KwgU$gh_Kkj9X}}@V=+RZ8WRorRD<^A453Xc6Jf=pe zp?V5y2QPHJGQ}#^p_tpoBQG{eqw9}Zf^TR}8QMqX+}8KXjs0hQ!PxP+xTmNHD9VlAJscrvw+*a{edSa59_EZNup58XX>G2$;t})7zW0xQLOq^8PJ!wwyS;ZdiN@&}9N%aw)mM-(E z^?R?OT5Q2|&EyYK`?%{f-)vpIQ~TV_Eq8i0GS@ukKj3lgGn)0zcwZdU?49i9pIfHv zE7#P_wy(`!#l_Czz$5J%Dwuf;3cX(T;mQ69PsYD8hl8(o+NY!1nQJ9$i*=$)E_5v3 zyjWL<$Vrb*sm-o5XrU-bx5UR9F1u=#tt=f?N!;{pf}2!PD&8PFu&*kNJ85gZHy5V$ z3pzSUQ(Vefeni*U;V0n9g(u&gy&%akJl4QB3(}N<5j#M~T|3z!@zTq|x`*qaV zrD*2AVdv7jiQqu-FgSP-clokmg^A$`I>8YUlS`|LJ6sE@l+-zT_9&I2Yb{Etlr%oo zDQZ!`u}(%x^X}PwDt1h({ASyv@TdqIg+FJgw)B}I?!Kw`nVzoCTD;u2{DaTY4F{Gq zDi+u3pHT{7s-}%f+@JC^?siS9P729mi=NxEWy_2qq6>dda9CL{dQZ293s1nprq_*? zwt3WgrMT3Ya$RrjeAGg{Sh*sOD$x~+UkL7feeKMK6)q{XQs|>-+DYNmwW<@vJtmr- z_ZZ$lwDsNfzfRU39PYFtq;raf=ARE5mALS>hkjXY|K;;9bkysF70lC*YUo5o=+@aW z_4Opj$>(<{d@en)Y!Sm<-8C$)T)7f;D5|4uanil2(SxSNI8>2Vx)MGtsmS^{r~lm9 zaP1w1;q}dQ;ud!A^y$X35BzZ8rM!g{3qUPO>sT*PWtn&_A);CaKW3lRfd#KUUR+Xy*ZHef{CsP6%VyZ+NxE% zl#PVwR=Plo-FQI)A&@>VSV$e*Nb^2PTX?(v%?HEg}O;^ z%m-^m%pbX1RPxMNX^*G{yPG}v@Q=~ZTSe+m+jX<+pCz7tTu?S?@yYHM3hjD&ycpjo z$+e|cQ28F)dq0_FP_IG@qh!NUMLNYhCq2+BRrJZbcfAw4l!%(3XWPH5T@jOrqBnd* zLp~WE))!Cu+*W+}?@Do+*Z0&~Vc4=%@}P-rKRi(|3aT}%RZ;22r$v{v4)Wh{xuU}P zsB860B-c_fx-?qhb6jZ6d*vY5ep-j(Zya8>`~Aw~T?&60Db+02O{?Xh(fvL}cKfGy zucDXVswv>lR^}vKZy7YKG4`YQgd+b_;l2OmKS+Tk@lEuZfk2>68oi$jEqV%IXXI)v9hu%n@)Vp=lL2Y+*^Y0<1)A`2!biSeBS=| z_wywn;E|3sW5(Dqrog*`si|pYY^%#;vN}?!R0*Vp{RS2m7LBmq1lwlmly=<6+S*zJ z_p9>tW@cu!QC>ArB@+{q@?0*LpG_~)b>ins<9~w#mbYNr&6+hU!8YsUQ8;o;d*oNbLJKpj!D2RW@wl&VVgY0oEfsUAf zbXZq#P7QU`23295$gB^{7wA9VQ22V7fq9yZmt*+@r@FweA-3AUMGUN*aNGv_9YDRX zKLpz`pvl;uDV0d(g67L)(nV6KBpTbL0!gJya6Vcll`h0}^Feb!Gf?g%Y)9e#LD=@d zHXL=ZZrJ144EwEE->|L2zJ_B6^T#nGO%MLlg@WmVBFmEPoP952j%|HVb6{W!dt|%= zvEL2bq1a9Wp7Vh1GSC{(CeSvS)N&_iHz>)kMLlJrJ^=2z(ZRR)RJG-$Y==81A>Sk{q(Jk{$sawYHWVv$2vKx3!iE zWM_kY8|jIENpb?eF$uq0%OuB{P{uK9+>i1OLvIeC{C%irH|p2{eb@*-mV@Sk#)JBS zLO}M=PXqAQ5LA<6L^hw0KS}&=T`l0wF_moy7%PLcLAIb^$g@A>I|&#>gEjz{1h!{j zbTAcb$uY*z&Q^ND*~S(9hJc$0{iSnH0P)bOg4wdkCkpevFSHrNV!A(I?~4jcmQ zXMF%|17B-F3qj*R9DCR=AgoAQqAm5XTaooSQ*8L(LN@Q#X5embZ(rHQ#zqBl(*wCc zZk@4343;c_yw?Kr9l(39wP4?=c)Q3V84>M9qX=hxY+8HZR2U8{L zXr@dZ&6TJVsIy3!I*XO5i-j_E1$DtbAM<(sov-8T`98is9OZ-=DSu*}@iS}s)YC%e zwxgBkoUIM?!Ag1pJ_3G1b_Dz#1b=$~_*U?|8a#8H;FuH+vIl8#>|(wCPY*JbA;ZtJ zTtF)9J0UAK$Swjj0didixo&3JvQLM7A9a+8&UjjAC%1u3hZw2+%^0;eNyU!wjIdOp z?ot)%X{AEFZB%KHgE~byYtTs71~kUKA&vKHM3a3Q)6~{YXp(nh8t>VNM&tZ&{La_) zw^yTH)~eJ)rb69NPFD*RK}T3G+M%AdM)fJ!MD>HOS+mD(mU=hstR<%fT@Yf1>+ZOOnwc~D5RROOdj_NcKc+U23O3|S$XjO++w5h8W zZRxH}TYKuzwq824ovDuw?dYRR34M8sVW-mj5{#jF5qq>J>n`cy27%B zj6bJi&i2^T3U-}_H)FJ}6L1E0jB8?lUD`EJm-Y5BKZR&H>Pqe!7B=upX`Kph_}FKISbSI!etir0GF=u8@TGZ3ZECk&Xa`VBZ47d16)Q0FODQ_Zu@D z=KO3UIycjZ&fvaNlMU(kL_<1?@(ztQ5cG(3YA5uIea7bQIuskODa4R|&;|BG zoJVjh3Nuh5U(+TpoFt}~()B>_2U5Ww#G&1D(e42tANW0ejtS6#a{o_#fg;B_)^SiZ zw6!_+-O=t|$d_h9F6-G(BDX&5Cf2(VXoPPF86kIrf9-0iN_}nBA>$^3thYesY>$k? z{^4xD26TLaA)THI>}D~x#&l(&FDYKf_z?rzH`IW34bn$E(M6om zro|yGX*B#oFZd?b*Y+mL6lSPIZA==!be5Q0u|^*g{YH)p2Z2Av7Nn~|lOc!B*jhs- zjX3}1ya0C3V~PJC{se!|aSrXQi>(3TACJL~fE;41WU>Uv<)E{L;gvu`_4kZ>M>7@V zaH@#68ZNmOwYHA==ly1Z*lxA?RUP8uYVkm`{T^%0m}IUdU6lC zlZ^6jEHS043r*oKOz7+kWB3^(_y$A783WomP#-yl9z+d@&7?Q$nf`Qmpa;qW(xVwRJM8U zyW7jer+iJCJP(DPu%Bn#2RSxCjBP=iA~^QyQ&JTBUn9ucn9efh^Udh`5_7t}!W^~> zjMj^QwV0l4u>i&vz}13YCR)&|ofhK<0FA>r0SaZ4-Z3bO1MZ7SfV-t+&z(^z7J;VU|s!!`W z>!6R(41Ev{^fOhEvno@Ff%0chbIk{~GRY~lpL2u5kO}t{*cXh4oWgKyhOIL6pxke) z18nyt*q@*>A#nC}B& zyjnUN#C;$PcUx<4t^_^!-TDVbc#MN%J=)X~ZSlf(80YrDewTx#*=c_RjkjS2JT8O2 zI^;6JyBXx92i)108q<++roi2tF3uOxjb&oGv&w@0SZ_&>;-!$i6z^e|(yLuEU@imR zGJ3a&#}j80D%0e1`FZb^4mOXU6u}oD?)f9{aj-PKh+OD6#{=EmHdlMc*QKxCXEhxU50VNJJLEJQ>6Ohw|d6sm2nGCqg z=s}z{aJPYt+0x5hwywqHreDEk> zk8LPu3fi*KPGWw{PhagV#&DqXs?^W6AuSElhEFu6q@iYXWP+H^&a#A@WORF#HT@9> z`E9YIr#tK*PkVZ`+n!!0+0&c74v@72u>Y6dA8-I3naL5ypo4`(Tvi5Ut|yHL)ctn9 zqreyQ_d3Zz;P*NBe!AU`9>&|!{dG3TTde5vA{m{YVM&L^ijX6k!WS6PEPqYJKMf%s zgy<`gw^7q4*0R+80r2NBqqU&1*!N`}U_bB+#sWpwOW;!OE-sMKjaX~Cx6YOxZf3bT(DOtG*t`?H+T#S7 zIstnp$T*#xA@g5|_AxK1yfL4zlN_M~PT=2>o+UWaldTT)V3R%FSz`;|W{sF2rDKyV zDQTFwU;{DXx|nlli17|pAt&%PZ14(WAtxcfqmbiX$a5WN416lDJ!!!?^)I9YLLU!& z^7<=|_q-lsGGp&3Has7wr~FS_BVZ3dH>I^E#Y5+J4n|%y&XUf|l+x8DHgtQnJ^iuK z0lwamo+dcK=AG%~ZWmzh0$HZfUKi*9Xx}eP;O{k4lC!|~EAYN zIpHtRFHmG2coN9pcby~s8ShMwx4Y1@L|1yT%M~(nqnCSJ=~WUw-<3wMu@z`9w!bQ+@tDptZ@C@Z zp66)S(*zfKyww@`tP>@#aiFV9?dZ%bE7*brHepU1BaAUW*_=9w)QEMUjlSwfJBjE# z`UQd?fNa;m#)iYb+@J%E3=9l-4w2^!e##%$&GUE63wZMYZ=<2F>z&N>E(Yn=PhspM zBpS3J2y<$^O=<6N3pz1PMi&>_(#;i)bZ>(*Y{HeEYg);?ymZ-fN?&W0{W!~d;vru%WO^l*ziJ=x(wPZK@p*-lU3 z589nZdpw~F1*0uf#AKpbovK$VNu^5`r6NTX2|~&sMMXs_S)wRau26!MYnLVMMpek& zvOeLf3iK#}b+KUe^Zgm^;eE7^+xaxX13KVAe{OcCyBl2T#&RdRu)rQUffel@YJnJO zigCkMseS-sB!0RoA8jS#v%p;F7eLln-zcmxvViRCaNdn}{m8KaA=l^i@vwan_~{AT zUurKhIR@-Mg#!Bs%LWu3qDR~MnA5&dQaU-qjxH~8q}yv;>HbC!dbrh-9`Eo1_Nnx2 zr#C&@1>$W1Y4H$as#Ly22F{r=mv)G0(?nSAxs-=PnEDoqCxu$>3&+e7a9 zu)%6SFdr0RKKDa_y$<-`HS}|AEzI|~(N+076#CjltWFC8^xj{8oaiWN=`uD zhah)eOE3lG2OOHg2c+i$-_;MK&Eu9!i}~KDe}c88Xos(^>IaNrAb(ZE`WtQ9(hGJ! z(uz*abOiRU$niaZJ=(gZH9g$c8u4f8if{{e8&UeE;CtczAQLR!bvNx$u zyJp$uga5QPqx~!gmdArFK6E$E8#>@Y7Z*E22ka3Gq_nA<8I5vnfw?0!LQX}V292LX z=Es0P)}Bh&aXyG+2adx$X9zyO=e)7t_faQ5cY$y(9RynKrQhIr5cIRXsT$&z7W7s` zNh7S_^BH?Ly0r#AF3tyS^rb(yaeMvf;dVc?z3?b9OzVeYpOZe6FI$|P%#~^HTnG8u z1{ts%9zrI6ZuO-vvBPJMDU(Ygou zbDv-jXc?#n?9qhB+`nTS$mr{_-{;tadKb7EYu;d<+8V0}db+8bIqe>11^soTi%Z<; z=4x-~HMh-|9&Bxcc7nDQE^VGB!fVe+%iRV-J6yfCkId5xER?S)((Z1IDS^rJf) zTGREF-gJI}D;=3+PlZd2MBDTCf3pIziZH&*$eEof7G8{p6F z^G~I%*cKAqgsjSxD)viZpIPTvFLj$#r|r}1@@_L^^9N*df3rW`+th}V*Za}6<=%95 zz8f7HZ%^9?NHAt@h<>4lkPG7CwO2k(B}ug_#EkV|?si zP=`6{>SJXgTJNi){E_`W^Rz6?h_(-u(&0%?bZ&tMU0czbZm(}ccQ*zA|1{bhi1rmO zg*Z0(WwFn!2fSamdRdwfVUo8DAggYpow$iSeP+bKGeESbOAD7BtgWhuR^| zvd{I>Z}b9Ka2(hT;x$B_Kzf{;LkD=xKwH+~SHT@Q0tssc}2 zdRq!So|)%CS7KY!&9(k?Cl2k{6bOAzqj+o!naYzzjUZ$bBtSx!J8eOnCVWJmif|+HU6;u zK;R!lcQ$fcz7H)KBK_gm6_&mfD_Vp`buh|NHg`6q$}KrAkZ!FHpzEvr>B3?kIx@wT z5{Fo0?XxL$$M_2SUSDnHzYzyc0vDbqT8?c`kP(R2loy5%5Nsd$MKk#RU_4AezqO9) zTlPPlMH;js+=LPa+kiJWI=`qjU0dl7+YbW%!E`$=7&;vC-Kf1=%ik9NbUo_cT02+y zu>5YX4}v@c>FRQSIy2v!4vcrEt$k%Qr;Q%^1F96DU7y?ynmz*dJT}PBAx?&!dSa`F zJdpc?1@Qqw+-KWId69E-1`t^vR6 zLZG+7bZY~)-;une4S#$56%`d|`3Sq*Wo_u>EHCt}9Vsrtf(F|+ zM=pqYqE_`%Y(*v)fDfKe7JLA|tH7`j@_-`9`O2a!ey%;pT5KBQr&a$G+kS6p6Rg)0 z(XL?*bOJnGTpB=ER|e6IwIKrjH`j$?`+cdM>+f&>><3DfC`PB3!Efd!FUa)znh?6W zB8bi}_M;38;S`t!I+CW`h)e!M@RiFa7y<9ld#Y0##CXu-`p4A_`z#B;7>#- zZ;-oQqg!pX>It^LDA16$^|zrzlica-qBeASc@SM&&3uM}!szzgE9L z-LL0&>j)fkl^M%(btvpBgf7Jd(doIqv~P?HZR#PV@oriatSk5caxm4q4j;gIKn%A0 z{Hz`@3hVmrhhHS2Az8LAF;{hQiK5=zMe_9i8q?iIEPps=YaNHq#J%fVYks z`vC3>YzFarZ|s3zUEt5_M)UQ@I)nT9-5a_nqno>algn)TAqJ|nD3JU5c64|O#wQj9 z(xuo?y0S71{QVqijaY=n{r0pAnC2xzmholS*~OS(Iz7*y_K$O?_+D0m58%E4?32(p zy8_(!nPYyJQ7Gr_9K#`>eC2_>o)6g90rs{sk=YdAR`ot{t~tP}Db}uH?b>KJIyt8e zonHc<6brtV|6J+_Klr=rK)93U*X6jPEn+|@om(7C$7c9aVw4lD3^$_=ChElY>7}Fo z8o2Xw1Uxr15ZIf;kMle1^3xYoj{C5DmDcHL6`&9C?MudGouj#|RhEhw5{=Tj1e`MY2ZP|#{cDA71 zBV6hD>;O6&9ZKhywuKJ-I<%mlJ;BlamcF2)tG0Zygv`$`4Wl!QLg>hJKS~(lNU>q2 zc-B}|hyfmYjh+E}&I6ZX+Y!X?ASwr4lxuF7=Md3%tj)gP$yjSW>lFL`sUCRdy^k#& znADn1%@3xtOPG&ekDSeZ&vAjCJ_d5j^W2hfI=eWGPRtELEcT=g-DEVxrWx_r3}W?X zj0y63!8l+)gku1<@{R{8^4KwAe*@g(=cS`@t4*uA6pp-aMVL9_4dx_g1kmXPVW__? zd_ciyb}w7fZde<0Bjt&6;F86Q3ZzoI61kW)BL4kb>L`J7^5c7dg=?pEv&vsvA^%hJ zL+Q|DKiWFLk!H8n&xirATb>u#0phU$XZZhmay~m$gxB=q9xW@eSwBC`dY{?%53$Dc znGrJDJJtujKLq%LG~)HTs4LHY0OyJ9D|pPu z)u36t;QKMYG{;Auw)A(TgH!zBbC7$?4@ccxfBxv$yin3_Qumv%sZgdQZ5r(@SDoIL z&AzFQpQR7=YgCY{UD@S*67oMjI}~}KFU57Yq2cx|gnj_yhA|twXF_;yX?O0&^BTdg ztQ8mL`k*g$alMnbw(5N@rvv60R<;#U;xG^78$on@Zd*DzFaLCSRxnkqP`W_4l*Cx+ zrjg!Xt>4}J_Zkz33dXZ=-yqWyxaatsFgiFj05QOs7Wx_z&kHkdE=Dcy!j}2nV?#j} za`Xc;V!zBn6oN87bL@{qpMPCfYuYo$myXN~rDJp2rV{kvSUyO(R;2=ApKhCFOO>D_ zv-7Uo*`!gS)RkW6_uMwBUo~HH%p!BfVs;oEo*qIwhk3$I#nj1IO~430L#;vBY4sk4*>ZVQceI04v!~o=ep>%Xs+kBHrbEQJX!`-}T zo;=ta{vLe*_WRq%`RCb|ugUw!OyCb(_KfkvbA;A3SlSr4)fM^yn6Kw&i01%PU*N9} zACT*O5XT0N5x8CteaPL6e<1pOO9PB)`(St4KPiX~P3OAuN7K956)N^@i$#$y?Vl2o zD=#+s8iihGVfg^&y=LWd)ZN1{SN`)W<3rOzY43yp+SJ>LCOc~hcFXwLnHih`o=bp# zc&4%79LE9D$9-_UnU9vrJ-)vSe94No7Kr^mw109i9hee|Sd%}hTA|E$!D4i%G*@11 z^?n`vx&68g>rkkzHZAGnk}J>omFvIPhX}arn-D}>2f5SYHpb+SwRw!6t6__~z#i{M zmv#sKI=ntOw;Ygje`90g8kpyI!o8pQ{vq%sYdc%fu91H5|G~6xQV9Hj{1oA8_+7AP zTXZsNlq)Y&JKBD?dgbv0JO*jdxE?L<&wf*Wd421(`z8g${)1>oln*Tr6;UUQ1u}l< z2fhOK8$bi$|BZohrCjhA*7_h%sN-s^Ie_ow7&6IGlj3?f(yr0|lr%mVgz=_)P@Ssf zzZ(uxEwwy(;XF|utP1-YUe7VPy-l9HJBm*h_QOckjDanJ-?HD z1pGR`Z?-D?d9*qEU;48>%I@5Ue?`BM4P zKh_6?T509UQ-0)^?`wfi0`QOP=}c3cH8b#cFw^JfMEE_kj_luac}6Uw@9(3na+dM$ zi08PM1)9;8fnJm_tWCa2y>{jAhJT=?rd<3i>)}epF@6mF{_dnvr;1!WeTyvRy=TYJ zHng#i8_oC9%jg5R7-?Pw{?mZJD{Q|W{C`gGkrU?p@q1&;_daI)dzorbY=~IEe|w}a z<(GKezOd!a&r`V?HqI9>lR{+ZFBU#8ncG&PSW#Nv-z#5y);gh5#f#Bse+#*I>*kA~qMC?~s$8xGauX7r;D%0BD z9(nS%sFRaW2girJ%HrQe&6Fu7!X?l0batSPeZ2)8U_FqB*7o$sv#oi_A^kVO=JguNRi8XOeeIe!w5^Y`5g9b7 zOO?u$%5@DHk0}^6tVd(pNWRLOqfUc-%YkEwu3GJ{mYr97;(B>dY^a3#TcnQx)c+fH zKP%n;=NA8Y&8M4gqkwe$CposHHC>%(V{b3$fREhN&PpfW?M}y?w>2x3qdDRBa@Ut1 z-sHV@9ojsmjg&^Vwxr=c78K8?~+&lkMja=9rf-4{#ZjW z%T-Ijf4zXe7kH76D#CweZi_tq!1`4y(1H$*a@Qd*FF)hDvLy>|%&DiNQT}Ao%Zt|c zaL04m)->F@c?SO079#fl4!o{6xA7m23&6iqI{q_Vv}sjmM_S+AgEpXCd8stUzcb@M z##cffhD~!E3+DBnAr`IVE?Zt6e%5udUEQ*@J+mCXWxq_x;`x#d+v>XRZm@sgZ}l(! zSkE&RIe<0#e>Gs|IgbCbUI70#>G)4`(V>+c9cf)R4_em)<;qE!?Y%nYKGW};6J}3g zmRe-dOogN^RB58WEaSKIYkv3bs&4Luia+bjc;q2+%LTT&Ho^`0pA|*Pnq}C(#L{8} z@E5}e%!9|70iN-`*bO0srodzn5H;xi8h#)W2mXlT{OlfZ=Wh)f0pr}}e-(IM&_i3@EFJ#|PWT3DJ6l=< zeG>3z9gu?<|GHJmQ?R&|T-VD}=I?Y3=WXfO6~{T>r!C0`N|$7U}qpb!dfeF51xQF0RDouI=V27cKAXF4uMP zmY36YE4#YWC~r#&fsXaEH=-X=XHIlrC9lI#3N`pz_Lo4e(!uoNZ~K1@$yoDU-GP7xjc>WmHiZcSx%k? zP4mSsq@U~cmCKfvyB&-_=j=-Yunyd$fsp@U{^thpcgSPzKMj5b1zsPHXTB~m{=LLa zXlalo%5#SQ;oQ&XhtrfmTl(7Ad0w*fHEHp~d1g7SfxLK~Z(h8~`r_B$g`pA31RDp@}f>p4|AI<-Q zj&8ZmBju-E{arP%k|!`$wR$X)dII;ZC`)6>fg{efY$c#MxV`=M%ioQIl$EQKQJ&5hV^Hniyq>Mz2JW~0{@Kzf`15=E>XO|a?6Z=gWA=;;5$UBFT8s% z^L4rHn>SOV4d2lAF#+}kYDXpHe)7sZt{?D6oQ}cR-#}S&0e{%?JLLVQ{4U5`)_s4W z2R(5|oO^R)6BjCSjKnTST4*Tx3D8i>eGRq0WhIOiE;k%Q)NxthShq?c; zfeu;9kw+fY(0|W~Cwb2GakG@WzK#8ZgmHpp!4kX=s-e*L!!z9Y&b(D~jQh#`{ul72 z2>iEm4%pcg-)BZ2kaODjL7}ucvK?*t&J-xo|7LmRCR10VmKl7{>E!**>%VyHVRlEa zjI!jBMNb!tZ)#7?O6BFQhjC#)u?FK}3y}KMA{!5KVTv@F=O!5o`b_Ycb`Pab)c z`i6KmItcH2mQ&VSqS_1iuj=GN<6R9ha(^cy%{KY*{ps4^)3T0kdJZ_z-B1_&kpwyNdk%*?!)(a+ke*RD^&(_iuT; zzI|Hk$GGoa{zhZkJ0HFT`739D|7y+w!i^dr2e3vT)L+0qVRR2l7~Au^kw)E``NAPD z%!UTKe8Fet`RTmw{n~FTHLHG6c3yH>8`%->Hp{v;CZ{@BXY(p2`)@l&cNgOFI?OxF z^fAkb{aDKvi8UP+QAbYCd*XE7f4-V^ojC>s>Z;HbPh+8P!TvvSY%kh5zBlch(C535 zmWFbn;BVYaBS-!U3;$w8i{@DV*W@zT--+}at5F5??SQ}+|sB=8;+p?}+ zdJGurYAB2YaDBU{45Xy#k>8DS^NqP-p832=t?GI5#eO^U_20VBeY%3mAp83f#&+

U~gI>Dre?s2ZJeT)-U2_xahL+}8KXjdxBL0{`ypW7r2w_7({~ zV9%660zXHVOrfJor_#}7g-2$vG4LTbsn)GU2bWCFkq16s7~{U&=bJg8bB=WsX4`Wt z3-UdJc5v+A{EO#g2ifWf<8$!MpS`tIw7(bjtPjAy1nRlMKA?kH6N>HVLfc1nr2}(D z3D_TtnL)>53y)-m+FxK_1oN+qL3X`p*-$Odx~KK+^u;~d%aG@|t($G0^%Q3NzbGqa zI(*J#q2I-Ee|7+JegloPxLa0cm<)Aj-*5=nL$gJdlnoozrB$_*)z6ezl&$Y=73WW(j(CX#O~1 z{B2EFPl`YsW?KXvPrS6%sspg^;`g&F0(4*%$AM6zhBQCehPFm^6!KBF|C6ic(WzDQ z3x&L_v#y&cUaZ(Rmpf;0k1uoy?UL&pj~Dg{#y5`&sa@Yv&dC*X1Ru+BpZojcJTT9r zuO`^OU#t3Ue-!qt3&6iFbnXrJH@itRg*E3p5swZpnke9Zdd)&Qy>?N7X-J2E`^St` zjVhH2RHkO5{J#^rbjgwwGiFGE>MgJ=AW!xM2j-3u=3k@nZj^A7#_8)j5BF*t@J;i3 zjODlfK?k}EaR53v%*BW{_QQLDr$y57n3;5D-C{bsVM&4M@QS%v?6YM<^#YgKR6{jO znP`8m$7=QJ(81Wb1+KF|vREHYY)?m`r(n*tukc(+4{59P{@&khw3W2J6~ltu2mFOK zf;=X~abQM(Oo#&qF*b2(^?W)Pw~WqjiUGwIh{~1ucaGH2!n8nTrSr0B)_9T{=@Hv@ zZuooIN(!Z}^g6$78$)N~mI}7Ncg9e`#)iVy1iz257{6BadKCo2g5C=qs16?>j0toQ zHKS$d4pt7>_GQLklj`+7koXCFd zk3PPzd8MF#Z2Jf2j}>fd2Huy!w#GIG*~bIFACm9or6=G+1ReOqYeahC-N$P&54n5N z0HH6y_J48PYPz(2?Ke|o*LF0p1HLg_fHHEsR|WnZZOcLxux{WiWS`qTKkEF&t*c=B zON9P@0@n8|Y3EGs&6=j?`**!t)Tx>mEiTuo`yz);#hdxVe+a(k}s+Vo3N%f?@>0gsC4@bh`xxl!<$Cs)oT z9$Q`A!bGd&+1<0Zn}R6F8)kaL(TiE(s2X$xp8 zUEjOyr_!Qv!?V~vk0%cA+2yD5#B#Z|XEU*_oL;+t_D+wY^?d@UubuwC{d~>3Lw*Lf z^41Cb%YlvyI$+$0CbpIkKbOE`R_8Xx(AC|W=*GV7baVd>x_Kbsr%{i#ff@K0!#*a>(EZReQ4KDA+Em!)(Mm;U5a+DSo~9XNN+pKfpy?2{63GH@S2+S zc#d}fW1lv*51Fn8eeJpZp9y=Gy1}aobl`Tn4vg?fiv^gsVjZ}?cZ(qN5foy_rmG31!j zyE=ahT>$SDp#yta2STtusXu($YUp>;G>oUOSs>^=>%iTU2kG9aLv;W2;s5uIHgy?c(o2%qw_iy=A+sFO$9{NZG}xOtV(H{zUt{Q%?t(GaeE}1IKAKgBwDup_(GiLcQR_#|Ae+r0rC47|L6Z8 z2T$n1eU5`16WWBaXZ z)b$*7K2N?OV9&U7oD%#z#_xIE1J8ME9}z+G+5>lcLu!k)TAcT?o}--y(O%8}dC;>7 z05ajZgHe#rYt9dY_0)xa!XV_w(Vg*K)sfwVb>^p6FA&DblaD0PgLB7)Sj+K%@nGy< z-n&CD@2AqMKkiaix`*ShQPz9X%X)b)SUeB9e5wk((ZmV%126_C0c@?XM6W=CFJ#2({TT7$MJrK zfTFKU5)qY2FnbD`D!f`xa{?3*>5cMjXGL7RM1+IL~-+{)8|d!DCa`leP(Cb*yi^wvF@nZ6hNn zre_=UUF@Kn214$_b9J20ruq4E;NJ)I+sxbi44l7KC*;TPpmBj7tb<(t5^@CiR9*+i zc|vy^eSD))Msqvh`viC=AHNG_&y>MJ&V6j@G+~^X$Cub%*;nv*JNL(~@4-3*UW^xZjM4KZjS=w_Oa ze*#{ogY>@EuK#||zXTxHDxeO~g~QN=lytwqb{A&USkQ+Ee0y}Tt2vGHv!pX7BddD$|?K}zDg;>n}u5|qXj*KPiNd~21n}%;{ z{7&twy+RqsL9r+|666Hp_v!uj_Zvt6Sn;}4RgetC-!%^gbpiDUp|4qgBDTXoeLx*S z{OxO3kQu1vZ_vd5So}`{|4HCK3H&F4|0M8D5}?$-D2240)J-zp7@X-u3KuQ<_ryy+ zF8S|q6d(Uvf^d1J8$Jp@D^yIsAvyIpqlT!|uzsEw0 zG95AlnW`5U%5p3s%EXSqP$qT+hBC1uFqHi`IdgqrFe$HNFdUWn_w2`LK<1wrPL3{$*yl-IsQVQv+H-Zobi^Y1y>cXH<6;UTje!=YsnAda&LL^<1Wc7Fu_l|?|5&7a{oa|6L{mIev_GU{Ij z1qYt=@3G)-lm9(d=KC`-EF5QISj4|)VknZ2|3yHkJ`+Pi^_dvT9zTTYGgYX}#buI6 zq;U9e1*wM_1*R3B0a04<83ih*U!TTtWcqQc$TDtE!z_&(zDT&?-^+y>GD_zQQWVnK z$_M%SYYb_NK~W$@1r_}NOZ_SG`|S9AmQ47TLGiSA8~%TrLsi7PyGr0YO%?I2t{VKE z-n4HvspH!{n*9AXkQm=^)Wh$M@hv}P{+=IXQ;Wat!{2rM9`Ahoo|?e?GT+QUw-s$O zLfZndA1RYcr%9!f#WI<6HMSc-n?Uh6-UwPJl}KW6&1}eE4DO2n*?<~?YV!B(zvnv; z3n~+CH-Co}?NkHKR?I)zGK<@3WhF_pwwCO-wUQihkeZ%xwlu!%W}$!6+oIK74-1{! zE|x~u9Hpig?4;sTw${=kHrCREkjEa}yBXyyLzz(^FV-2@OZBwxzWfrl!tDmWWr3MG zc=Z9_Gi5T%cxx-k9!H7k8E;X``(b7c-ggkGe(ET~yT(Pz)YU>6&pxYu9^la6b6;!q z&k>fYDP6?M)X7|lI+`ngZfCCkm!EmFCoYzT*KA~x<5n`sew4c%GFT4k4*BXr7pkS{ zLqVbY*83G%&)H_tZWmxZ*~&_`)ydNMysxOmpWFs+>i~O=&$IlSQf&K{w6;qt+T2r{ z68h=Vu7SFg6sbqM2kBBGj<@#Kp$*-%Xhla&S`gBVhPyRPiLg|m4(6(#1I?Q}cNgp5 zvXWUIhfeH<3}R4cCs0cl7ncHm3nIS)V9Zf>RkYm_yo>=h@eUS7XM@ZdzUhQEM>;i3 znHSWY;<{_mo*{a4WSjw=o@z+vW*X7Oxkhw#p)p;LHldqKP3Xo_W4gM?m@dyZrt`Cn z=*%=jIzG{m_6^miZGCiUS$Int>)AM^yF@J|+*I{%50P%Nwbb&ML}IxUbuR)7LFVS> zs^9u8r2Mv>bq;mbMf?50L#%_;?6|*a?&{){HJMFr|}I zjOoBgL)y_#kLColpa{qz%vAk@tA)W0=-UzS!9HTJg@uJCVohnZ=X?1DMUK^|t0Cmx zO@?}XOq)OKV5XW9<=i-Bb!Q#gH_VvM%`&GO%S3c(HJ^6FN0bMAw%|=;0HJ&^Ixq^)Ty{60k*-Zr+8V2Tb`lv}gJ0MW-lE}) zUD!9GJ%uI%#vSGAp!}&0mL?~{jMe@guu@jc6)lY$ARAL zb)>iZK>Ho(-2o79^Gj*>aXD{5uag|t)VtY`C-gaKyYK}N}I9O%&&XL_FK zLNE8YfKOL?y*Hh3oUxyN?%TJoQ1**mF7$Z2Gu_|dNS7De(!LR5iVoAEP9n7wALFJ^ zt)!Bpz$pg)z?yTWg2;g1I}2HIeCy+ErgJ{rSea(|Yt!y13pzjFmhNtFrN=wm>Df*X zdcNC(UhMJAlb-Byr$J%O$;rGP={BuOW?D7KTc%8X1Dn#i@n(76n^89EdA`e&o+i4} zgLpT(y3~OVjg!*q&W3nrrACUcVWXE)OUr}cc`k4>27ccu@B!NC^HmCUZh&tKeEEK3;KSWSf%uy-RVtJu3*A~Ys*^Td zTkn>8xv2MXf;auK*^{oty3oW`3;>38QJ>s#k@X(_ zLqjSSPj92I{%)Xc)07efUpoaRs`aab(f8X5B%wR*1t`fzzGod3>T0t?E|gQ&uWn3Vc7H$ z+RizmPue#l^V9)cR~6K;wVwKmA$HAE_Ka|(i%b1cZZO?k7fQF*hsaIy`b)lR`&mvE z%a)*PYlAX)y16cduC55AW79lnL9h{YKq4O=B zS3yoIrc-l#>FUZ5y1pjto2X8;!u{rPPP!4{t&@efYpX)(!jeErjC8=a!opN{g|QO=r_G|H7OEDfQ{E5hi?%5S4X^V(4HVnx2I9;nu? z_yvELmWR=?>8)u=TQjT+t50?!<1=XgSmbeaa>F0L*K{`0Toa_DoU*=~l#b8xrwhy4 z(#4p9(Yldt_(nzEu|FqV;4!hYeIWQdC=*Fp>!@fJWra_%Z~hH&B@+Kg9iGW(t(+QIbOfGzvFk)0kt}nbFA}h zbXz(+&7T$onqci;y%Z};i=AkrkCT%V=fzq6aK5aS*vzAiX1&j|+ZfT2>49{5LEBtu z(`awfs9QP5HaX$DEjiu$y>y_rk5P{GonF|MPRtFV&3)}D7=F;vMCS_dAHm;_&eC`s zK=-RU8MRy-pskb=*8|_em=#LL=e7lfe?iLzxZ+zKdB^VhH7b5_UxhM-p9>T#TI7p* zvhX~oE$trVL;WR9QoQsUzCin9So zyhM(;LyTF@j|-P&DWhW9!fQX0S!!6XDoyQVlckQFc-}WLfTnrt^LwRJ;NLd^Ya_(E zEbpGOv#?OcTH3!RxS)SGx(ywe9GWAUw@}W~#_Vm*e9Zi1E~j>tg2loj@S#nWt5YXO zeLNo&n5FE@^<>}QH!*}(ce3JVG*cW*^^T+cHpqp_fYb3+nA|k}v)TdYfk{W5=)ns#>8; zzRF-3@q0WMML1_ED<}T)I=5w@7xgezBM zeTTO9M;^@I)e-&}e;*yS*sjKEpVxMCrj32Qzo2!!J@dqi{jrOFqc85usjTeh7Ikza zZz8ROj?2O|+UNqjZ75Ql?{SExP zWyYWFAK#YU+Q+;Bt&MP{4ZXa-puz5w9|ARCj$myIU^>N)Z zgWb$YrFtb&tx=iA`^mnzHmCawdQQ|dckDCEL0`RYj{L0a?t%6j@G~$e=;LPb|3dq< zlxB4`(fG9L|H}Ig_$aC^ZcqV{A_z!JFQoV0cGD|KNF%)$A^}1OB|sqbj)-(Y@Ie6S z2vP*;3L*k3miJKJLlE?#PY^65+2nlxGsz6Qo84py=;G?jna=fWIJRj##io0a$b_2}A6ch+S`X#y>XaiI)n z!y4TGVZ3(B?H0EbC*#Ut9;UThheaUnE__a(u$@EPEXitMZyNYgH*zx_K%*l)pQz4_ z!((-7KR*MSbl*NQo@PeaQ@X3kulWA;;4x2ZJEy5m#yNRzMs?NsVM5&DU1O3Fhw$-< z$BE9s;6;_qh{x*H1<`G)mvu4g*LvJw{y(5e@9iVws4~c!`2Q`&zCqAWWqmBg%{U;- z*|1?_UI_SyVhl-rY?>UWeT)?QqkHF0w5ttuvp%y@TAxqr)4fYGy?29m`^X_QR&Lpl z-VUwU-u zOaor(P7AZ6qZRPq4v4S4 zziK#*OAKkX{NxmTi)+xK_luhUM|xYCXe__KGM^U3d-2%+(BI!(5Bg}_(EgAdHzUQC zS7L>F7;`{Z$_UnNou@P|NT@T#-@VoLcf~WIN&fN?X&QOARSs)b{=GS6!t*dT(54~T z+4ywJ^S|w$%W^UJ{k3F20pIG_;tJB0#wJH<)CnCeowqa?Ak`;#u$0a#mr>t83SWLr zI_#V_lCr~miNCv<$Ie7gW4R;q%Y`_Gx$Y+QiEd`Y`CAv|wQd=}WFH@FtKj$s9EY7T zjdh_Th>axbg36n9In%WF$TSzD_{Np*{5Pb{4x#1vhT9za=6hP9#I z_AhH~cvD7(y)Q!he_btnD;I45Y4mFJF%JI)R26Ah(X;y{Q zt^s{|ku73U+L;^Ex~b(Vy#B5ZQaNbUZ2vjDBaf_Fpu*FdY?XY(>O8Z07QLPk%pr_v7=#)foh&&F1HwaN#+5x1XXi%p7fRp5K}-HV6b6_u^B~ShQz%fr%hR@PI~fe7vmbl zyiuG&948^Z0mnH)oQt;7x&1rnYhci|m0!fL-#(L`5=O4EtkT zy*w(=zGlzVSA_A9W4;LS4S);I*x-LDeGdFW#-K*Lfm17H!cWAn4&Q2jra2Dy+wi7y zjEtVgH}bYZZ;RUHxr2r8gKse&aEuSeSY({^r%j9(&zO&l|H$w8x5wwwm=LELeB0hm zwbiqKqKn!_X1p7VVJq~%Q2`D$j4Q{_A;*7e#4BYSJidIsx0((C&u?~8fCAWW4X{z!mtjA^;)xW0%FKKncm{JZ06NYIXSLdMU$xU{FGSt=ne*?TY?? zAP}Ge4;v8)fUi)+5Cgzv5HJW%V#b7zxf75GSOxMX)C9vO@BHZy)StkRIN1&x`ujSkxMG3; zTnC{eaa{z)DiRol>vpo~I-($o2?aO-harB%jd3CzK{=rI?TqmI*Ka%r&zKLq2F<>O zY=6YW`+Tk`kLT$hYtHU3)Lg);XwtI>><64+Ll%v7Z8!O5}jO!;xnklBo4^k{hv8tbwXjwlc##}Kj%v1p%>H1O%X21~s+gue!IM@%8oX2|3B|N8KJ9=yj#QZ_saLAtv?nhg#KF0|(&9 zMD~?-qqB3}>B6E$-}sA5Jm~y<5Bgx1yMPPu&KM_Joo&-Fd9b+xzMXaHGQ0mqgaljw z&H!JNGRQE{wvOA@dx+~pADKeN>rsKe7jykA?oW&wg!NGPf=qL#i%a0UzrmMoY?IM# z_^AK5R|cPT_G$O0pAW#leV>ee*dwFwcgWzg?Mqiydegaio^)`$8|I>I>r4Di6v=X@ zn_;0L=g>bpNKoMRbeZj)@=!CyTZNABo%f-CuJ?xzKKr8w z!7n?QerI3wGokP~2f_FJ;fJAuPr7h?Iuw5DA@tkH5c=gX{Ll9W(SNoC(B)-*bZ~+P zEf{K3Uo11NjS2Aj8f`cN{nMN53EF%=aUb9riwO&oAItMG|9xSyUHx(Rlz*`%kZ$e_ zrMpKW=>CaF_>)IL?INJE zGex4@0Xxi(1$0WOY&np5AEU4 zrVpQ$Z3SMYwVPk@q)%53rW?DH=)Z?kp+D%TX7Y9HtJRL3ZAftKu{QAxSsVAD3Ba7V zc_8^wU8wgC=!XL-bhSE8@Q0opX{|`|bGQxtkKj7U(FUzPcH(`-??t?iCS-e=|F$yA zwc(THG4QQTrQ7gj{o#;yDvr0-sypkgPTU?QYvZ0&JtOc@-3Q@2y1&t9_Pxp=_)1zR zVq|XLpbeX#KjSB8-Pm^oWo(l@t#8g6;!yv=!f5(-d%EBodlUY#EfL$Nq2e|Xx1&?X zXKCN!NJ++bd$Z`u`Xt(2Cdd4*i6SgOb^&8}CXa{O8o>ZsxaErUR#ECGNeAg^x|Ijtp+mRz{b$@UyUVbf}8#&o>m% zv6=By4eqOvEESI}xx)>-9z#s9_+5-4E7OBw1wMCR5w-ovqH=p3Q z$$negrX{G9>(TZ3C%TWg?jwscRO)1Zz4Oa+Xl|@yL%f&W4Lrw%%J&feH;VOiSX?Tz zs5`YVoi40`e;)kXl&LR#LAh@AKICU^&6vSbSzF`AwMX@Gx*T);M*Vt7bt%jLcx3@? z9v(y)F2;Z2owh1EI$H9x;&)q`yZNP86W!>{tGRS`X}$_2``c>NUDU~ZU@xhB65@G? z=XFV0XYPZ6y}Qx)WFM&>bshNl@RS6?e4QdRKz0Z^cSZfe#{V0z7W`n#uwXj5Acsya z%$4Z){M=TbOZHb0d8TIuw%Aq(l-kF-$N5-EykZ^N()VYj(>Q+%1^hj~fXyY4WCGi}do)6s9AfyW%WLs?MmlWO z?I_O6?izG9hJ1)`*Dl({r8nll>voNfp?4?4M@fn747A_RY?DzC;-peus*oSMHuIQ!82?pj-jb8MuEdUO&{)pUy{0yjZi20k@aR`JKy|3=Vs;9 z`E)tnHAcJd6<@p6g@c>PS(`4S3|Eui@cimQAL0H&l+`K~hk6LQgS(mhPI%_UIwmIu zQi_iQWy+nYYG|-@Ud-QIma1`#;{GUt46&S$!hd6Ouw8wEo8=o#bB|5xw`-T{V(`(5 zG&!+N{QfD0tx~UU+IZErlFSs$?e@2Kg){wKpc&FYdp ztl6ePcy`4Gq&w=5m>6tVb70yl8g2d6{RK4jyLir|e{Z1<@mM_#bg)p7u?=wuSzqOH zrm$;Pm$`LB9NXN&*Wl5&19*fj)yZH0{H%W4Hz^-6>c$Fj>Nr-NHsb#oU~EP_j&Gkj zoZgx7$c9e69NUqq*E>8Wkh;L$Of0*4bdE|Hws(CkS&p&C^pyI&BQyX%Ij)BPdTUq= z?87I+#&}AL)T_H@UkwjyGl8$VvP9#3&H8cMwbjr027P-s%jZ5FEwijibv8{B^;J*V zK5Sf|&2PtHkI#0pEm44rt<+a6lZoGThhD7|_!g98YSq7Ur;b|d=KJWaDI-<#Io|2k z(aHSnc@N(@(s#4E{{H^$p38ADxK%wWNwE7qw_!19ql%oQX7}t%-MdNUjRt7;Y3KWE zVQIcpPQCuDsGw$fY;Qj%(5@!K$*4qKXZ2(F86=F7Sw1)o8>WvpFNf{S3XQaFL1kl~ zqrZA!Eb7~CtoLfjrqNMyr}YiVBO`ejvC8qlfm{--1jBE7Qdz0>kk(7 zYc0)k7&s`;&G_E#$-oNQyAignTQyS04jpL!szn;}m}gi@y!4FlzP5Taoxiew3voQx zs%VdgInIXLTGLrQKiy$K=rC{7`^T47(N~9e3bwgypQ}tInJFsA%6YsW;@jxEC3AOa zv79;|$0Yt7HrLCt!xb14KTpD3xVnD293x)cSUflP&%U{ct|Hd_wKMNM7TH>ulb5sO zWAU)vF56FUEKMf7kA8$5SF653Ewu$UD+@-*tnMFOQc2f7I6`a_$+la61+k4C+hMQB zjZ(l~=60rYf2)>s(={*MK`*1g%k0;kmBsY$5045qcY2E4(T-O#wKeaT^qIb6(XZ=M5o@T$UDvqzavVW`4hDN)&Z|IlruC-2x z|1HFKhg}`p%fA2mG@20Zd>{AvH*9zG)Rb+Zq7*0n0eDBeUF2$OkNxw;BVP4R z`swOdg8p}J{71zul8?pM^laaJ4z_XYOVb<11l!%sb2a%9c8?hlr}91Ag7~MFm1ASn zFVn%GsKDLy!+cNE2jfE=?=4CT{d3*ORN7HBk`6DaqJ3yv^@IXiUNA&4BhKf+2w%&) zdG026@P1j9W~VRvzs0_b?N!qp^uyrWRFvy#JfpzfcuRqY>FELwlY{y0CM)s&FUNSC zn(AO+^VB-<|AC5Nc+?okMl=(H-H{<15nXRGGdd|)feH3slG#|*BeNvI-bt=zJ|>zm zAw@Nh%$r1WC-qb`FKaE8!Yw^AN1Mj=i|1S5Kgq?AFQiKHuk(4){7Ouf^cT#q3?G?e ziS1Q3%VIM+wvR*gf&igIQ8B6!7!5fU`&xPN z<(jyzyPqneEdQ7pZ&kZ6*}85;wyk1mhK*w0Q0v-hah5e>BCLMP2zI^+ z4B^XI51RvB4B9TaT|2h%hz{_&R2pja`?5?s#nCCQu#xei>sx&g=fIEd?3W?_1KZE| z(X~y8{jkK7_Kb0ckB4<_VUX=F(BmTXD1F@PgT8()EF_?^AkgOStLgTNv-1&?VkgH} z2!U+~>|M@;Ar3(p)tn1QOonjSl!U=XCJZqcLSZ)&jCc+Ku($A}DY4eI$pNlxGqRd( zoOJAq_Q2m=J|fuq_dVl08?J4MpgRYF=g+nvr(+Q#fN6+E;(Vri$76x@KA65(8%oQw zoD?|$_IIGe4o&kb>N;T!XZ*-Ot3Qv;2%zgbhXAiV33eUHz^flBQBj;Z_3Yk}dUorG z|Ck-g*0cw$t@M=ge>sM-;Q8<2B>LB;XsRCJ*^n)>;kof;;@r5pTt0?PpkJZf`oW{MXzUkvbZEG&ANu_Uh=7I8?(Z#nifr+nuUK#C@{#Wuo|2MWb>m$^2b$c!y zpA|#-epdH!FHBPJgA6artM7~t!}@wYeYK@fD~-?a6y}-KWobKR%x$s0&o<=J!c=!f zl+5Fj@?4qR$E(-K0GmJ0FVCXSHWW(qdTA)|{X0{i9xqU=?;z>CHXK<^I&^uygT(jg z`a*hd8s-|ktnOi*$zAM&A)a<+ucdh_&SNe1<5i6`F4KhjABGt*fA1=+I5&qT>VS`mF%FpsJJH2Cc6rEm_E0HGbK%W2RG7Aes zn$1xu%kBoe)d@p=vF7@yKC$jo;Gdu9p@{NxUoXnfbvOO?opEvW-t=^Vs#0amo-v-g z_Ouu%m9a7CqtZX3e3rd`N~%;&tW!B%oh73o-cH9w`S~8EH}{k$(7p<+@quhnw^$#i z+>hg8y`_AyT*VM?vIGX;3!OR$q}Qt(y*(y@HjRp<{yn=A_hC<9XypYusPL}O4Wyx7 zwx5ggi#$wj?kZ1|*2G=}?rt|=GqGI8T-1h^Rn~Outw2@6ZnsUFiQ8d zydugkbT_%WV^lotDjO=$ywo6RUp&WYd6XB8i}t1sm`heZufFeQGEhZ6>k{r@Ch@Gv z3Z_&~>-R!Q3p5vBEfuF{mmrKx0|1V_H%`vwI`bX^>QY zS&EzzJZ%?=@(WxI)@&RWP5UP2Yoq|X=4(-m1yzv{C|qN{PA_$Rfwqs!miU!1)t<%L z*Ou~3DR1TwPep=@nM{CDE1yCcq54NIUVI|e)ZU*3IRigab%Rq)>u!H%{uTrIp=fA$0Bh*DD!Qo zC=~J*4NsHK@0plS_@8+SJSrQm!K$t084Vx2F&8lsRH-aAMv}p8AD2(#_4lERw^L)pS#5f_G zzhrE&${6?zuJMxcVJduF?!?*!(z!!($54TrQM0y-x)it=OkOuU;UW7HsuS0L5p&k! z`E84)QjPCjb@eNy`_OqJa-XT9}~k|enLAlCF1q z8hC#7{tvgB(XY2}(6^@!)4Pi+>n26H-#~xA3SO;iV!HH!av9X6hx=#pFgJs<72(cT z=VwOVS~n)==T#%q?#vn*c(Y7y^<|N(!NF`Ny=0VqEW2`LIlAscMhB1q=w%Q-&)T+; zLXNow%q(DhX+Ruyo~FUz%zky9u7gfC`p~f-8~euTLR?m)PS;UKQ+JM@1>>U&|kq?IF`WEDxPo8q=U0Ps!Jzzc2Gfc zhnLMDQ@#GcUg||#XOE|qU|cN3dicG&H?B)#=)GGvrF|Y-f4cThS~ITr zXN=u)=271=90yv@%!v5RG`dS6m*VNL_SVQ^b-JP`)qkTSr+`j63%E!om z79_(vX6CpE*W + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N Value="True"/> + <OutDir Value="locale"/> + </i18n> + <VersionInfo> + <UseVersionInfo Value="True"/> + <MajorVersionNr Value="1"/> + <MinorVersionNr Value="1"/> + <RevisionNr Value="1"/> + <StringTable Comments="Updated Jan 2017" FileDescription="Companion to LazAutoUpdate component" InternalName="updatepack" LegalCopyright="(c)2015 minesadorada@charcodelvalle.com" OriginalFilename="updatepack" ProductName="Lazarus/FPC" ProductVersion="2.6.4"/> + </VersionInfo> + <BuildModes Count="5"> + <Item1 Name="Win32Debug" Default="True"/> + <Item2 Name="Win32 Release"> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="compiled\updatepackcompiled\win32\updatepackwin32"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <TargetCPU Value="i386"/> + <TargetOS Value="win32"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <Debugging> + <GenerateDebugInfo Value="False"/> + </Debugging> + <LinkSmart Value="True"/> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dWin32"/> + </Other> + </CompilerOptions> + </Item2> + <Item3 Name="Win64 Release"> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="compiled\updatepackcompiled\win64\updatepackwin64"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <TargetCPU Value="x86_64"/> + <TargetOS Value="win64"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <Debugging> + <GenerateDebugInfo Value="False"/> + </Debugging> + <LinkSmart Value="True"/> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dWin64"/> + </Other> + </CompilerOptions> + </Item3> + <Item4 Name="Linux 64 release"> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="compiled\updatepackcompiled\linux64\updatepacklinux64"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <TargetCPU Value="x86_64"/> + <TargetOS Value="linux"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <Debugging> + <GenerateDebugInfo Value="False"/> + </Debugging> + <LinkSmart Value="True"/> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <ConfigFile> + <ConfigFilePath Value=""/> + </ConfigFile> + <CustomOptions Value="-dLinux64"/> + </Other> + </CompilerOptions> + </Item4> + <Item5 Name="Linux 32 release"> + <MacroValues Count="1"> + <Macro1 Name="LCLWidgetType" Value="gtk2"/> + </MacroValues> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="compiled\updatepackcompiled\linux32\updatepacklinux32"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <TargetCPU Value="i386"/> + <TargetOS Value="linux"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <LinkSmart Value="True"/> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <ConfigFile> + <ConfigFilePath Value="\etc\fpc-2.6.2.cfg"/> + </ConfigFile> + <CustomOptions Value="-FLC:\NewPascal\cross\lib\i386-linux\ld-linux.so.2"/> + </Other> + </CompilerOptions> + </Item5> + <SharedMatrixOptions Count="1"> + <Item1 ID="142892904074" Modes="Linux 32 release" Type="IDEMacro" MacroName="LCLWidgetType" Value="gtk2"/> + </SharedMatrixOptions> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <DestinationDirectory Value="$(ProjPath)\published\"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lpr|lfm|lrs|lpi|lpk|xml|sh|po)"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <CommandLineParams Value="debug"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="FCL"/> + </Item1> + <Item2> + <PackageName Value="lazupdate"/> + </Item2> + <Item3> + <PackageName Value="LCL"/> + </Item3> + </RequiredPackages> + <Units Count="3"> + <Unit0> + <Filename Value="updatepack.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="umainform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="mainform"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit1> + <Unit2> + <Filename Value="umemoform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MemoForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit2> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="compiled\updatepackcompiled\win32debug\updatepackwin32"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <IncludeAssertionCode Value="True"/> + </SyntaxOptions> + </Parsing> + <CodeGeneration> + <Checks> + <IOChecks Value="True"/> + <RangeChecks Value="True"/> + <OverflowChecks Value="True"/> + <StackChecks Value="True"/> + </Checks> + <VerifyObjMethodCallValidity Value="True"/> + <TargetCPU Value="i386"/> + <TargetOS Value="win32"/> + </CodeGeneration> + <Linking> + <Debugging> + <UseHeaptrc Value="True"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dWin32"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/lazautoupdate/latest_stable/updatepack/updatepack.lpr b/components/lazautoupdate/latest_stable/updatepack/updatepack.lpr new file mode 100644 index 000000000..286257ef0 --- /dev/null +++ b/components/lazautoupdate/latest_stable/updatepack/updatepack.lpr @@ -0,0 +1,44 @@ +program updatepack; +{Note to self, Code Template: type newpascal then CTRL-J} +{$ifdef Linux} + {$ifdef FPC_CROSSCOMPILING} + {$ifdef CPUARM} + //if GUI on RPi, then uncomment + //{$linklib GLESv2} + {$endif} + {$linklib libc_nonshared.a} + {$endif} +{$endif} + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, umainform, umemoform; + +{$R *.res} +Const + {$IFDEF WINDOWS} + C_OS = 'win'; + {$ELSE} + C_OS = 'linux'; + {$ENDIF} + {$IFDEF CPU32} + C_BITNESS = '32'; + {$ELSE} + C_BITNESS = '64'; + {$ENDIF} + C_PFX = C_OS + C_BITNESS; +begin + Application.Title:='LazAutoUpdate Update Pack'; + Application.Title:=Application.Title + ' (' + C_PFX + ' edition)'; + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(Tmainform, mainform); + Application.CreateForm(TMemoForm, MemoForm); + Application.Run; +end. + diff --git a/components/lazautoupdate/latest_stable/updatepack/updatepack.res b/components/lazautoupdate/latest_stable/updatepack/updatepack.res new file mode 100644 index 0000000000000000000000000000000000000000..17ef74590eb66ff2e2cdbc4da20d4de1bf5d317e GIT binary patch literal 5092 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 literal 0 HcmV?d00001