From 5108446e84257dbbda2c2afe949e3e3486dc8f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= Date: Mon, 9 Jun 2025 20:31:03 +0200 Subject: [PATCH 1/6] use msaccess-vcs for source export --- .Copy2AddInFolder.cmd | 1 - .CreateWorkingFileFormAddInFolder.cmd | 19 - .gitattributes | 42 + .gitignore | 24 +- access-add-in/ACLibFilterFormWizard.accda | Bin 1523712 -> 0 bytes source/codelib/base/defGlobal.bas | 92 - source/codelib/readme.md | 10 - source/dbs-properties.json | 204 ++ source/documents.json | 20 + source/forms/frmFilterFormWizard.bas | 1088 +++++++ source/forms/frmFilterFormWizard.cls | 755 +++++ source/forms/frmFilterFormWizard.json | 28 + .../forms/frmFilterFormWizard_SF_Controls.bas | 577 ++++ .../forms/frmFilterFormWizard_SF_Controls.cls | 358 +++ source/frmFilterFormWizard.frm | Bin 204528 -> 0 bytes source/frmFilterFormWizard_SF_Controls.frm | Bin 129282 -> 0 bytes source/macros/Autoexec.bas | 18 + .../ACLibGitHubImporter.cls | 56 +- .../AppFileCodeModulTransfer.cls | 46 +- .../base => modules}/ApplicationHandler.cls | 76 +- .../ApplicationHandler_AppFile.cls | 40 +- ...ApplicationHandler_ExtensionCollection.cls | 4 +- .../ApplicationHandler_Version.cls | 36 +- .../shared => modules}/CodeModuleWriter.cls | 32 +- .../{codelib/file => modules}/FileTools.bas | 64 +- .../FilterControlManagerCodeBuilder.cls | 51 +- .../{ => modules}/FilterFormCodeImporter.cls | 60 +- .../FilterStringBuilderCodeBuilder.cls | 59 +- .../shared => modules}/FormDesigner.cls | 56 +- .../{ => modules}/IFilterFormCodeBuilder.cls | 10 +- .../localization => modules}/L10nDict.cls | 72 +- .../localization => modules}/L10nTools.bas | 4 +- source/{codelib/data => modules}/SqlTools.cls | 172 +- .../text => modules}/StringCollection.cls | 34 +- .../{codelib/text => modules}/StringTools.bas | 46 +- .../addins/shared => modules}/VbeTools.cls | 8 +- .../api/winapi => modules}/WinApiFileInfo.cls | 18 +- .../winapi => modules}/WinApiLayoutTools.cls | 6 +- .../winapi => modules}/WinApiShortcutMenu.cls | 66 +- .../winapi => modules}/WinApiWindowTools.cls | 22 +- .../_AccessCodeLib_license.bas} | 6 +- source/{ => modules}/_config_Application.bas | 35 +- .../base => modules}/_initApplication.bas | 2 +- .../base => modules}/modApplication.bas | 10 +- .../base => modules}/modErrorHandler.bas | 46 +- .../modWinApi_Mouse.bas} | 8 +- .../modWizardCodeModulesData.bas | 10 +- source/{ => modules}/modWizardTools.bas | 4 +- source/nav-pane-groups.json | 24 + source/proj-properties.json | 9 + source/project.json | 10 + source/queries/L10n_Overview.bas | 102 + source/queries/L10n_Overview.sql | 7 + source/tables/L10n_Dict.xml | 497 +++ source/tables/USysRegInfo.txt | 6 + source/tables/tabRelationalOperators.xml | 38 + source/tables/tabSqlFieldDataTypes.xml | 19 + source/tables/tabSqlLangFormat.xml | 27 + source/tables/usys_AppFiles.xml | 2677 +++++++++++++++++ source/tbldefs/L10n_Dict.sql | 6 + source/tbldefs/L10n_Dict.xml | 93 + source/tbldefs/USysRegInfo.sql | 6 + source/tbldefs/USysRegInfo.xml | 123 + source/tbldefs/tabFilterControls.sql | 12 + source/tbldefs/tabFilterControls.xml | 238 ++ source/tbldefs/tabRelationalOperators.sql | 5 + source/tbldefs/tabRelationalOperators.xml | 102 + source/tbldefs/tabSqlFieldDataTypes.sql | 4 + source/tbldefs/tabSqlFieldDataTypes.xml | 86 + source/tbldefs/tabSqlLangFormat.sql | 6 + source/tbldefs/tabSqlLangFormat.xml | 135 + source/tbldefs/usys_AppFiles.sql | 7 + source/tbldefs/usys_AppFiles.xml | 155 + source/themes/Office.thmx | Bin 0 -> 3330 bytes source/vbe-project.json | 17 + source/vbe-references.json | 16 + source/vcs-options.json | 81 + 77 files changed, 8174 insertions(+), 729 deletions(-) delete mode 100644 .Copy2AddInFolder.cmd delete mode 100644 .CreateWorkingFileFormAddInFolder.cmd create mode 100644 .gitattributes delete mode 100644 access-add-in/ACLibFilterFormWizard.accda delete mode 100644 source/codelib/base/defGlobal.bas delete mode 100644 source/codelib/readme.md create mode 100644 source/dbs-properties.json create mode 100644 source/documents.json create mode 100644 source/forms/frmFilterFormWizard.bas create mode 100644 source/forms/frmFilterFormWizard.cls create mode 100644 source/forms/frmFilterFormWizard.json create mode 100644 source/forms/frmFilterFormWizard_SF_Controls.bas create mode 100644 source/forms/frmFilterFormWizard_SF_Controls.cls delete mode 100644 source/frmFilterFormWizard.frm delete mode 100644 source/frmFilterFormWizard_SF_Controls.frm create mode 100644 source/macros/Autoexec.bas rename source/{codelib/_codelib/addins/shared => modules}/ACLibGitHubImporter.cls (98%) rename source/{codelib/_codelib/addins/shared => modules}/AppFileCodeModulTransfer.cls (98%) rename source/{codelib/base => modules}/ApplicationHandler.cls (99%) rename source/{codelib/base => modules}/ApplicationHandler_AppFile.cls (97%) rename source/{codelib/base => modules}/ApplicationHandler_ExtensionCollection.cls (99%) rename source/{codelib/base => modules}/ApplicationHandler_Version.cls (98%) rename source/{codelib/_codelib/addins/shared => modules}/CodeModuleWriter.cls (97%) rename source/{codelib/file => modules}/FileTools.bas (98%) rename source/{ => modules}/FilterControlManagerCodeBuilder.cls (92%) rename source/{ => modules}/FilterFormCodeImporter.cls (94%) rename source/{ => modules}/FilterStringBuilderCodeBuilder.cls (93%) rename source/{codelib/_codelib/addins/shared => modules}/FormDesigner.cls (97%) rename source/{ => modules}/IFilterFormCodeBuilder.cls (87%) rename source/{codelib/localization => modules}/L10nDict.cls (98%) rename source/{codelib/localization => modules}/L10nTools.bas (97%) rename source/{codelib/data => modules}/SqlTools.cls (98%) rename source/{codelib/text => modules}/StringCollection.cls (98%) rename source/{codelib/text => modules}/StringTools.bas (98%) rename source/{codelib/_codelib/addins/shared => modules}/VbeTools.cls (99%) rename source/{codelib/api/winapi => modules}/WinApiFileInfo.cls (99%) rename source/{codelib/api/winapi => modules}/WinApiLayoutTools.cls (99%) rename source/{codelib/api/winapi => modules}/WinApiShortcutMenu.cls (97%) rename source/{codelib/api/winapi => modules}/WinApiWindowTools.cls (89%) rename source/{codelib/_codelib/license.bas => modules/_AccessCodeLib_license.bas} (98%) rename source/{ => modules}/_config_Application.bas (83%) rename source/{codelib/base => modules}/_initApplication.bas (97%) rename source/{codelib/base => modules}/modApplication.bas (97%) rename source/{codelib/base => modules}/modErrorHandler.bas (98%) rename source/{codelib/api/winapi/modWinAPI_Mouse.bas => modules/modWinApi_Mouse.bas} (97%) rename source/{codelib/_codelib/addins/shared => modules}/modWizardCodeModulesData.bas (95%) rename source/{ => modules}/modWizardTools.bas (90%) create mode 100644 source/nav-pane-groups.json create mode 100644 source/proj-properties.json create mode 100644 source/project.json create mode 100644 source/queries/L10n_Overview.bas create mode 100644 source/queries/L10n_Overview.sql create mode 100644 source/tables/L10n_Dict.xml create mode 100644 source/tables/USysRegInfo.txt create mode 100644 source/tables/tabRelationalOperators.xml create mode 100644 source/tables/tabSqlFieldDataTypes.xml create mode 100644 source/tables/tabSqlLangFormat.xml create mode 100644 source/tables/usys_AppFiles.xml create mode 100644 source/tbldefs/L10n_Dict.sql create mode 100644 source/tbldefs/L10n_Dict.xml create mode 100644 source/tbldefs/USysRegInfo.sql create mode 100644 source/tbldefs/USysRegInfo.xml create mode 100644 source/tbldefs/tabFilterControls.sql create mode 100644 source/tbldefs/tabFilterControls.xml create mode 100644 source/tbldefs/tabRelationalOperators.sql create mode 100644 source/tbldefs/tabRelationalOperators.xml create mode 100644 source/tbldefs/tabSqlFieldDataTypes.sql create mode 100644 source/tbldefs/tabSqlFieldDataTypes.xml create mode 100644 source/tbldefs/tabSqlLangFormat.sql create mode 100644 source/tbldefs/tabSqlLangFormat.xml create mode 100644 source/tbldefs/usys_AppFiles.sql create mode 100644 source/tbldefs/usys_AppFiles.xml create mode 100644 source/themes/Office.thmx create mode 100644 source/vbe-project.json create mode 100644 source/vbe-references.json create mode 100644 source/vcs-options.json diff --git a/.Copy2AddInFolder.cmd b/.Copy2AddInFolder.cmd deleted file mode 100644 index eca5efe..0000000 --- a/.Copy2AddInFolder.cmd +++ /dev/null @@ -1 +0,0 @@ -copy ACLibFilterFormWizard.accdb .\access-add-in\ACLibFilterFormWizard.accda diff --git a/.CreateWorkingFileFormAddInFolder.cmd b/.CreateWorkingFileFormAddInFolder.cmd deleted file mode 100644 index 48222c7..0000000 --- a/.CreateWorkingFileFormAddInFolder.cmd +++ /dev/null @@ -1,19 +0,0 @@ -@echo off - -if exist .\ACLibFilterFormWizard.accdb ( -set /p CopyFile=ACLibFilterFormWizard.accdb exists .. overwrite with access-add-in\ACLibFilterFormWizard.accda? [Y/N]: -) else ( -set CopyFile=Y -) - -if /I %CopyFile% == Y ( - echo File is copied ... -) else ( - echo Batch is cancelled - pause - exit -) - -copy .\access-add-in\ACLibFilterFormWizard.accda ACLibFilterFormWizard.accdb - -timeout 2 \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f65a117 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,42 @@ +# gitattributes template for Microsoft Access database source files +# Source: https://github.com/joyfullservice/msaccess-vcs-integration +# + +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Ensure that source files use CRLF for newlines, in case they are downloaded +# in a compressed archive directly from GitHub. (Otherwise class modules may +# not be imported correctly. See issue #150 for more details.) +############################################################################### +# Most source files use this extension +*.bas text eol=crlf +# Class modules +*.cls text eol=crlf +# Some object definitions +*.xml text eol=crlf +# SQL output +*.sql text eol=crlf +# Forms 2.0 form definitions (rarely used) +*.frm text eol=crlf +# Common source file +*.json text eol=crlf + +############################################################################### +# Clarify that the source language is VBA (Auto-detection not always accurate) +# https://github.com/github/linguist/blob/master/docs/overrides.md +############################################################################### +*.bas linguist-language=VBA +*.cls linguist-language=VBA +*.twin linguist-language=VBA + +# Git files +*.gitattributes text +*.gitattributes linguist-language=gitattributes + +# Ignore files (like .npmignore or .gitignore) +*.*ignore text +*.*ignore export-ignore diff --git a/.gitignore b/.gitignore index c6f3b71..fe82cce 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,23 @@ -/*.accdb +# gitattributes template for Microsoft Access database source files +# Website: https://github.com/joyfullservice/msaccess-vcs-addin +# + +# Ignore Microsoft Access database binary files (Build these from source) +*.accda +*.accdb +*.mdb + +# Ignore database lock files +*.laccdb +*.ldb + +# The local VCS index file is paired with the binary database file +# and should not be comitted to version control. +vcs-index.json + +# Ignore any dotenv files (used for external database connections) +*.env + +# Ignore log files generated by the VCS Add-in +# Comment out the following line if you wish to include log files in git. +*.log diff --git a/access-add-in/ACLibFilterFormWizard.accda b/access-add-in/ACLibFilterFormWizard.accda deleted file mode 100644 index 749e95a4f09680500f9a49794c51a97e90b5be67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1523712 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

76!ul7hrb1ttZ%%>-b&~~W<>6Xurg7Q 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%0A7zJV-r5FC-A`dgf3!03) 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 diff --git a/source/codelib/base/defGlobal.bas b/source/codelib/base/defGlobal.bas deleted file mode 100644 index 255920f..0000000 --- a/source/codelib/base/defGlobal.bas +++ /dev/null @@ -1,92 +0,0 @@ -Attribute VB_Name = "defGlobal" -Attribute VB_Description = "Allgemeine Konstanten und Eigenschaften" -'--------------------------------------------------------------------------------------- -' Modul: defGlobal -'--------------------------------------------------------------------------------------- -'/** -'

-' Allgemeine Konstanten und Eigenschaften -' -' -' \ingroup base -'**/ -'--------------------------------------------------------------------------------------- -' -' base/defGlobal.bas -' _codelib/license.bas -' base/modApplication.bas -' -'--------------------------------------------------------------------------------------- -' -Option Explicit -Option Compare Text -Option Private Module - -'--------------------------------------------------------------------------------------- -' -' Konstanten -' - - -'--------------------------------------------------------------------------------------- -' -' Hilfs-Variablen -' - - -'--------------------------------------------------------------------------------------- -' -' Hilfs-Prozeduren -' - -' -' Private Hilfsvariablen für die Prozeduren -' -Private m_ApplicationName As String 'Zwischenspeicher für Anwendungsnamen, falls - 'CurrentApplication.ApplicationName nicht läuft - -'--------------------------------------------------------------------------------------- -' Property: CurrentApplicationName -'--------------------------------------------------------------------------------------- -'/** -' -' Name der aktuellen Anwendung -' -' String -' -' Verwendet CurrentApplication.ApplicationName -' -'**/ -'--------------------------------------------------------------------------------------- -Public Property Get CurrentApplicationName() As String -' incl. emergency error handler if CurrentApplication is not instantiated - -On Error GoTo HandleErr - - CurrentApplicationName = CurrentApplication.ApplicationName - -ExitHere: - Exit Property - -HandleErr: - CurrentApplicationName = GetApplicationNameFromDb - Resume ExitHere - -End Property - -Private Function GetApplicationNameFromDb() As String - - If Len(m_ApplicationName) = 0 Then -On Error Resume Next -'1. Value from title property - m_ApplicationName = CodeDb.Properties("AppTitle").Value - If Len(m_ApplicationName) = 0 Then -'2. Value from file name - m_ApplicationName = CodeDb.Name - m_ApplicationName = Left$(m_ApplicationName, InStrRev(m_ApplicationName, ".") - 1) - End If - End If - - GetApplicationNameFromDb = m_ApplicationName - -End Function diff --git a/source/codelib/readme.md b/source/codelib/readme.md deleted file mode 100644 index a5c7e2a..0000000 --- a/source/codelib/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -Shared files from access-codelib.net - -### License -BSD (see [_codelib/license.bas](https://github.com/AccessCodeLib/FilterFormWizard/blob/master/source/codelib/_codelib/license.bas)) - -### Source -* Subversion: https://svn.access-codelib.net/svn/codelib/ -* GitHub: https://github.com/AccessCodeLib/AccessCodeLib - - diff --git a/source/dbs-properties.json b/source/dbs-properties.json new file mode 100644 index 0000000..0c04d79 --- /dev/null +++ b/source/dbs-properties.json @@ -0,0 +1,204 @@ +{ + "Info": { + "Class": "clsDbProperty", + "Description": "Database Properties (DAO)" + }, + "Items": { + "AccessVersion": { + "Value": "09.50", + "Type": 10 + }, + "AllowBuiltInToolbars": { + "Value": true, + "Type": 1 + }, + "AllowDatasheetSchema": { + "Value": false, + "Type": 1 + }, + "AllowFullMenus": { + "Value": true, + "Type": 1 + }, + "AllowShortcutMenus": { + "Value": true, + "Type": 1 + }, + "AllowSpecialKeys": { + "Value": true, + "Type": 1 + }, + "AllowToolbarChanges": { + "Value": true, + "Type": 1 + }, + "ANSI Query Mode": { + "Value": 0, + "Type": 4 + }, + "AppTitle": { + "Value": "Access Code Library - FilterForm Wizard", + "Type": 10 + }, + "Auto Compact": { + "Value": 0, + "Type": 4 + }, + "Build": { + "Value": 231, + "Type": 4 + }, + "CheckTruncatedNumFields": { + "Value": 1, + "Type": 4 + }, + "Clear Cache on Close": { + "Value": 0, + "Type": 4 + }, + "CollatingOrder": { + "Value": 1033, + "Type": 3 + }, + "Connect": { + "Value": "", + "Type": 12 + }, + "DesignMasterID": { + "Value": "", + "Type": 15 + }, + "DesignWithData": { + "Value": false, + "Type": 1 + }, + "HasOfflineLists": { + "Value": 70, + "Type": 3 + }, + "Name": { + "Value": "rel:ACLibFilterFormWizard.accdb", + "Type": 12 + }, + "NavPane Category": { + "Value": 0, + "Type": 4 + }, + "NavPane Closed": { + "Value": 0, + "Type": 4 + }, + "NavPane Sort By": { + "Value": 1, + "Type": 4 + }, + "NavPane View By": { + "Value": 0, + "Type": 4 + }, + "NavPane Width": { + "Value": 794, + "Type": 4 + }, + "Never Cache": { + "Value": 0, + "Type": 4 + }, + "Perform Name AutoCorrect": { + "Value": 0, + "Type": 4 + }, + "Picture Property Storage Format": { + "Value": 1, + "Type": 4 + }, + "ProjVer": { + "Value": 142, + "Type": 3 + }, + "QueryTimeout": { + "Value": 60, + "Type": 3 + }, + "RecordsAffected": { + "Value": 0, + "Type": 4 + }, + "ReplicaID": { + "Value": "", + "Type": 15 + }, + "Show Navigation Pane Search Bar": { + "Value": 1, + "Type": 4 + }, + "Show Values in Indexed": { + "Value": 1, + "Type": 4 + }, + "Show Values in Non-Indexed": { + "Value": 1, + "Type": 4 + }, + "Show Values in Remote": { + "Value": 0, + "Type": 4 + }, + "Show Values Limit": { + "Value": 1000, + "Type": 4 + }, + "ShowDocumentTabs": { + "Value": true, + "Type": 1 + }, + "StartUpShowDBWindow": { + "Value": true, + "Type": 1 + }, + "StartUpShowStatusBar": { + "Value": true, + "Type": 1 + }, + "Theme Resource Name": { + "Value": "Office", + "Type": 10 + }, + "Themed Form Controls": { + "Value": 1, + "Type": 4 + }, + "Track Name AutoCorrect Info": { + "Value": 0, + "Type": 4 + }, + "Transactions": { + "Value": true, + "Type": 1 + }, + "Updatable": { + "Value": true, + "Type": 1 + }, + "Use Microsoft Access 2007 compatible cache": { + "Value": 0, + "Type": 4 + }, + "UseAppIconForFrmRpt": { + "Value": false, + "Type": 1 + }, + "UseMDIMode": { + "Value": 1, + "Type": 2 + }, + "Version": { + "Value": "14.0", + "Type": 12 + }, + "WebDesignMode": { + "Value": 0, + "Type": 2 + } + } +} diff --git a/source/documents.json b/source/documents.json new file mode 100644 index 0000000..3498ada --- /dev/null +++ b/source/documents.json @@ -0,0 +1,20 @@ +{ + "Info": { + "Class": "clsDbDocument", + "Description": "Database Documents Properties (DAO)" + }, + "Items": { + "Databases": { + "SummaryInfo": { + "Author": "Josef Pötzl", + "Category": "ACLib Wizard", + "Comments": "Filter-Formulare mit Klasse", + "Company": "access-codelib.net", + "Hyperlink base": "access-codelib.net", + "Manager": "Josef Pötzl", + "Subject": "ACLib Wizard", + "Title": "ACLib FilterForm Wizard" + } + } + } +} diff --git a/source/forms/frmFilterFormWizard.bas b/source/forms/frmFilterFormWizard.bas new file mode 100644 index 0000000..d5a3dc7 --- /dev/null +++ b/source/forms/frmFilterFormWizard.bas @@ -0,0 +1,1088 @@ +Version =20 +VersionRequired =20 +Begin Form + AllowFilters = NotDefault + RecordSelectors = NotDefault + ShortcutMenu = NotDefault + AutoCenter = NotDefault + NavigationButtons = NotDefault + AllowDeletions = NotDefault + AllowAdditions = NotDefault + KeyPreview = NotDefault + DefaultView =0 + ScrollBars =0 + TabularFamily =119 + PictureAlignment =2 + DatasheetGridlinesBehavior =3 + Cycle =1 + GridY =10 + Width =10771 + DatasheetFontHeight =10 + ItemSuffix =136 + Left =2835 + Top =1470 + Right =13605 + Bottom =7823 + RecSrcDt = Begin + 0x668d2cd46a58e440 + End + Caption ="ACLib FilterForm Wizard" + OnCurrent ="[Event Procedure]" + OnOpen ="[Event Procedure]" + DatasheetFontName ="Arial" + FilterOnLoad =0 + ShowPageMargins =0 + AllowLayoutView =0 + DatasheetGridlinesColor12 =12632256 + Begin + Begin Label + BackStyle =0 + FontName ="Tahoma" + End + Begin Rectangle + SpecialEffect =3 + BackStyle =0 + BorderLineStyle =0 + Width =850 + Height =850 + End + Begin Line + BorderLineStyle =0 + Width =1701 + End + Begin Image + BackStyle =0 + OldBorderStyle =0 + BorderLineStyle =0 + SizeMode =3 + PictureAlignment =2 + Width =1701 + Height =1701 + BorderThemeColorIndex =3 + BorderShade =90.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin CommandButton + Width =1701 + Height =283 + FontSize =8 + FontWeight =400 + ForeColor =-2147483630 + FontName ="Tahoma" + BorderLineStyle =0 + End + Begin OptionButton + BorderLineStyle =0 + LabelX =230 + LabelY =-30 + BorderThemeColorIndex =3 + BorderShade =90.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin CheckBox + SpecialEffect =2 + BorderLineStyle =0 + LabelX =230 + LabelY =-30 + End + Begin OptionGroup + SpecialEffect =3 + BorderLineStyle =0 + Width =1701 + Height =1701 + End + Begin TextBox + FELineBreak = NotDefault + SpecialEffect =2 + OldBorderStyle =0 + BorderLineStyle =0 + Width =1701 + LabelX =-1701 + FontName ="Tahoma" + AsianLineBreak =255 + End + Begin ComboBox + SpecialEffect =2 + BorderLineStyle =0 + Width =1701 + LabelX =-1701 + FontName ="Tahoma" + End + Begin Subform + BorderLineStyle =0 + Width =1701 + Height =1701 + BorderThemeColorIndex =3 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + BorderShade =90.0 + ShowPageHeaderAndPageFooter =1 + End + Begin ToggleButton + Width =283 + Height =283 + FontSize =8 + FontWeight =400 + ForeColor =-2147483630 + FontName ="Tahoma" + BorderLineStyle =0 + End + Begin Section + CanGrow = NotDefault + Height =6362 + BackColor =-2147483633 + Name ="Detailbereich" + Begin + Begin Label + OldBorderStyle =1 + BorderWidth =1 + OverlapFlags =93 + TextFontCharSet =2 + TextAlign =1 + TextFontFamily =2 + Left =2345 + Top =5394 + Width =295 + Height =295 + FontSize =16 + ForeColor =5026082 + Name ="labCopyModulFilterStringBuilder" + FontName ="Marlett" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + LayoutCachedLeft =2345 + LayoutCachedTop =5394 + LayoutCachedWidth =2640 + LayoutCachedHeight =5689 + End + Begin Label + OldBorderStyle =1 + BorderWidth =1 + OverlapFlags =93 + TextFontCharSet =2 + TextAlign =1 + TextFontFamily =2 + Left =2345 + Top =4710 + Width =295 + Height =295 + FontSize =16 + ForeColor =5026082 + Name ="labCopyModulFilterControlManager" + FontName ="Marlett" + VerticalAnchor =1 + LayoutCachedLeft =2345 + LayoutCachedTop =4710 + LayoutCachedWidth =2640 + LayoutCachedHeight =5005 + End + Begin Label + OldBorderStyle =1 + BorderWidth =1 + OverlapFlags =93 + TextFontCharSet =2 + TextAlign =1 + TextFontFamily =2 + Left =2345 + Top =5769 + Width =295 + Height =295 + FontSize =16 + ForeColor =5026082 + Name ="labCopyModulSqlTools" + FontName ="Marlett" + VerticalAnchor =1 + LayoutCachedLeft =2345 + LayoutCachedTop =5769 + LayoutCachedWidth =2640 + LayoutCachedHeight =6064 + End + Begin Label + OldBorderStyle =1 + BorderWidth =1 + OverlapFlags =93 + TextFontCharSet =2 + TextAlign =1 + TextFontFamily =2 + Left =2345 + Top =4371 + Width =295 + Height =295 + FontSize =16 + ForeColor =5026082 + Name ="labCopyModules" + FontName ="Marlett" + VerticalAnchor =1 + LayoutCachedLeft =2345 + LayoutCachedTop =4371 + LayoutCachedWidth =2640 + LayoutCachedHeight =4666 + End + Begin Line + OverlapFlags =85 + SpecialEffect =2 + Left =2748 + Top =4210 + Width =0 + Height =2098 + Name ="Linie49" + VerticalAnchor =1 + LayoutCachedLeft =2748 + LayoutCachedTop =4210 + LayoutCachedWidth =2748 + LayoutCachedHeight =6308 + End + Begin TextBox + AllowAutoCorrect = NotDefault + SpecialEffect =0 + OverlapFlags =85 + BackStyle =0 + IMESentenceMode =3 + Width =0 + Height =0 + Name ="sysFirst" + + End + Begin CommandButton + Enabled = NotDefault + TabStop = NotDefault + OverlapFlags =93 + Left =7426 + Top =5832 + Width =3072 + Height =375 + FontSize =10 + TabIndex =18 + Name ="cmdAddFilterCodeToForm" + Caption ="Insert Form Code" + OnClick ="[Event Procedure]" + FontName ="Verdana" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =7426 + LayoutCachedTop =5832 + LayoutCachedWidth =10498 + LayoutCachedHeight =6207 + Overlaps =1 + End + Begin Label + OverlapFlags =85 + Left =315 + Top =4740 + Width =1991 + Height =255 + FontSize =9 + Name ="labCaptionCopyModulFilterControlManager" + Caption ="FilterControlManager" + VerticalAnchor =1 + LayoutCachedLeft =315 + LayoutCachedTop =4740 + LayoutCachedWidth =2306 + LayoutCachedHeight =4995 + End + Begin Label + OverlapFlags =85 + Left =315 + Top =5419 + Width =1991 + Height =255 + FontSize =9 + Name ="labCaptionCopyModulFilterStringBuilder" + Caption ="FilterStringBuilder" + VerticalAnchor =1 + LayoutCachedLeft =315 + LayoutCachedTop =5419 + LayoutCachedWidth =2306 + LayoutCachedHeight =5674 + End + Begin Label + OverlapFlags =85 + Left =315 + Top =5794 + Width =1991 + Height =255 + FontSize =9 + Name ="labCaptionCopyModulSqlTools" + Caption ="SqlTools" + VerticalAnchor =1 + LayoutCachedLeft =315 + LayoutCachedTop =5794 + LayoutCachedWidth =2306 + LayoutCachedHeight =6049 + End + Begin CommandButton + Transparent = NotDefault + OverlapFlags =215 + Left =2345 + Top =5394 + Width =295 + Height =295 + TabIndex =15 + Name ="cmdCopyModulFilterStringBuilder" + Caption ="Befehl69" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + + LayoutCachedLeft =2345 + LayoutCachedTop =5394 + LayoutCachedWidth =2640 + LayoutCachedHeight =5689 + Overlaps =1 + End + Begin CommandButton + Transparent = NotDefault + OverlapFlags =215 + Left =2345 + Top =4710 + Width =295 + Height =295 + TabIndex =11 + Name ="cmdCopyModulFilterControlManager" + Caption ="Befehl69" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + + LayoutCachedLeft =2345 + LayoutCachedTop =4710 + LayoutCachedWidth =2640 + LayoutCachedHeight =5005 + Overlaps =1 + End + Begin CommandButton + Transparent = NotDefault + OverlapFlags =215 + Left =2345 + Top =5769 + Width =295 + Height =295 + TabIndex =17 + Name ="cmdCopyModulSqlTools" + Caption ="Befehl69" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + + LayoutCachedLeft =2345 + LayoutCachedTop =5769 + LayoutCachedWidth =2640 + LayoutCachedHeight =6064 + Overlaps =1 + End + Begin Label + FontUnderline = NotDefault + OverlapFlags =93 + Left =84 + Top =4393 + Width =2145 + Height =255 + FontSize =9 + FontWeight =700 + ForeColor =16737792 + Name ="labCopyCaption" + Caption ="Install classes:" + OnMouseDown ="[Event Procedure]" + OnMouseMove ="[Event Procedure]" + Tag ="LANG:" + VerticalAnchor =1 + LayoutCachedLeft =84 + LayoutCachedTop =4393 + LayoutCachedWidth =2229 + LayoutCachedHeight =4648 + End + Begin CommandButton + Transparent = NotDefault + OverlapFlags =223 + Left =2345 + Top =4371 + Width =295 + Height =295 + TabIndex =9 + Name ="cmdCopyModules" + Caption ="Befehl69" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + + LayoutCachedLeft =2345 + LayoutCachedTop =4371 + LayoutCachedWidth =2640 + LayoutCachedHeight =4666 + Overlaps =1 + End + Begin ComboBox + LimitToList = NotDefault + OverlapFlags =85 + IMESentenceMode =3 + Left =2003 + Top =165 + Width =3402 + Height =285 + FontSize =10 + TabIndex =3 + Name ="cbxFormName" + RowSourceType ="Table/Query" + AfterUpdate ="[Event Procedure]" + FontName ="Verdana" + OnGotFocus ="[Event Procedure]" + + LayoutCachedLeft =2003 + LayoutCachedTop =165 + LayoutCachedWidth =5405 + LayoutCachedHeight =450 + Begin + Begin Label + OverlapFlags =85 + Left =77 + Top =165 + Width =1920 + Height =285 + FontSize =10 + Name ="labSelectForm" + Caption ="Filter form:" + FontName ="Verdana" + Tag ="LANG:" + LayoutCachedLeft =77 + LayoutCachedTop =165 + LayoutCachedWidth =1997 + LayoutCachedHeight =450 + End + End + End + Begin Subform + Enabled = NotDefault + OverlapFlags =87 + SpecialEffect =3 + Left =84 + Top =895 + Width =10605 + Height =3255 + TabIndex =7 + BorderColor =-2147483630 + Name ="sfrFilterControls" + SourceObject ="Form.frmFilterFormWizard_SF_Controls" + HorizontalAnchor =2 + VerticalAnchor =2 + + LayoutCachedLeft =84 + LayoutCachedTop =895 + LayoutCachedWidth =10689 + LayoutCachedHeight =4150 + BorderThemeColorIndex =-1 + BorderShade =100.0 + Begin + Begin Label + OverlapFlags =93 + Left =84 + Top =610 + Width =1920 + Height =285 + FontSize =10 + Name ="labFilterControls" + Caption ="Filter controls:" + Tag ="LANG:" + LayoutCachedLeft =84 + LayoutCachedTop =610 + LayoutCachedWidth =2004 + LayoutCachedHeight =895 + End + End + End + Begin OptionGroup + Enabled = NotDefault + OverlapFlags =93 + Left =3120 + Top =4705 + Width =3742 + Height =1304 + TabIndex =10 + Name ="ApplyFilterMethodOptions" + AfterUpdate ="[Event Procedure]" + DefaultValue ="0" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =3120 + LayoutCachedTop =4705 + LayoutCachedWidth =6862 + LayoutCachedHeight =6009 + Begin + Begin Label + BackStyle =1 + OverlapFlags =215 + TextAlign =2 + Left =3240 + Top =4590 + Width =1536 + Height =240 + BackColor =-2147483633 + Name ="labUseFilterMethodOptions" + Caption ="ApplyFilter method" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =3240 + LayoutCachedTop =4590 + LayoutCachedWidth =4776 + LayoutCachedHeight =4830 + End + Begin OptionButton + OverlapFlags =87 + Left =3270 + Top =4977 + OptionValue =0 + Name ="ApplyFilterMethodOptions_Opt0" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =3270 + LayoutCachedTop =4977 + LayoutCachedWidth =3530 + LayoutCachedHeight =5217 + Begin + Begin Label + OverlapFlags =247 + Left =3495 + Top =4945 + Width =3075 + Height =240 + Name ="labUseFilterMethodOptions0" + Caption ="insert sample code" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =3495 + LayoutCachedTop =4945 + LayoutCachedWidth =6570 + LayoutCachedHeight =5185 + End + End + End + Begin OptionButton + OverlapFlags =87 + Left =3270 + Top =5287 + TabIndex =1 + OptionValue =1 + Name ="ApplyFilterMethodOptions_Opt1" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =3270 + LayoutCachedTop =5287 + LayoutCachedWidth =3530 + LayoutCachedHeight =5527 + Begin + Begin Label + OverlapFlags =247 + Left =3499 + Top =5260 + Width =3049 + Height =240 + Name ="labUseFilterMethodOptions1" + Caption ="filter current form" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =3499 + LayoutCachedTop =5260 + LayoutCachedWidth =6548 + LayoutCachedHeight =5500 + End + End + End + Begin OptionButton + OverlapFlags =87 + Left =3270 + Top =5630 + TabIndex =2 + OptionValue =2 + Name ="ApplyFilterMethodOptions_Opt2" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =3270 + LayoutCachedTop =5630 + LayoutCachedWidth =3530 + LayoutCachedHeight =5870 + Begin + Begin Label + OverlapFlags =247 + Left =3499 + Top =5600 + Width =1114 + Height =240 + Name ="labUseFilterMethodOptions3" + Caption ="Subform" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =3499 + LayoutCachedTop =5600 + LayoutCachedWidth =4613 + LayoutCachedHeight =5840 + End + End + End + End + End + Begin ComboBox + Enabled = NotDefault + RowSourceTypeInt =1 + OverlapFlags =247 + IMESentenceMode =3 + ListWidth =3402 + Left =4613 + Top =5600 + Width =2061 + TabIndex =16 + Name ="cbxApplyFilterSubForm" + RowSourceType ="Value List" + ColumnWidths ="3402" + AfterUpdate ="[Event Procedure]" + OnGotFocus ="[Event Procedure]" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =4613 + LayoutCachedTop =5600 + LayoutCachedWidth =6674 + LayoutCachedHeight =5840 + End + Begin Label + OverlapFlags =215 + TextAlign =3 + Left =1176 + Top =4183 + Width =1548 + Height =210 + FontSize =7 + Name ="labCodeInstalled" + Caption ="already installed" + FontName ="Small Fonts" + Tag ="LANG:" + VerticalAnchor =1 + LayoutCachedLeft =1176 + LayoutCachedTop =4183 + LayoutCachedWidth =2724 + LayoutCachedHeight =4393 + End + Begin OptionGroup + Enabled = NotDefault + OverlapFlags =223 + Left =7260 + Top =4720 + Width =3458 + Height =1574 + TabIndex =12 + Name ="FormCodeOptions" + AfterUpdate ="[Event Procedure]" + DefaultValue ="1" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =7260 + LayoutCachedTop =4720 + LayoutCachedWidth =10718 + LayoutCachedHeight =6294 + Begin + Begin Label + BackStyle =1 + OverlapFlags =215 + Left =7376 + Top =4590 + Width =1395 + Height =240 + BackColor =-2147483633 + Name ="labFormCodeOptions" + Caption ="Filter code" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =7376 + LayoutCachedTop =4590 + LayoutCachedWidth =8771 + LayoutCachedHeight =4830 + End + Begin OptionButton + OverlapFlags =87 + Left =7365 + Top =4937 + OptionValue =1 + Name ="FormCodeOptions_Opt1" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =7365 + LayoutCachedTop =4937 + LayoutCachedWidth =7625 + LayoutCachedHeight =5177 + Begin + Begin Label + OverlapFlags =247 + Left =7594 + Top =4905 + Width =2948 + Height =240 + Name ="labFormCodeOptions1" + Caption ="FilterControlManager methods" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =7594 + LayoutCachedTop =4905 + LayoutCachedWidth =10542 + LayoutCachedHeight =5145 + End + End + End + Begin OptionButton + OverlapFlags =87 + Left =7365 + Top =5517 + TabIndex =1 + OptionValue =2 + Name ="FormCodeOptions_Opt2" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =7365 + LayoutCachedTop =5517 + LayoutCachedWidth =7625 + LayoutCachedHeight =5757 + Begin + Begin Label + OverlapFlags =247 + Left =7594 + Top =5490 + Width =2948 + Height =240 + Name ="Label130" + Caption ="FilterStringBuilder methods" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =7594 + LayoutCachedTop =5490 + LayoutCachedWidth =10542 + LayoutCachedHeight =5730 + End + End + End + End + End + Begin ComboBox + OverlapFlags =87 + IMESentenceMode =3 + ColumnCount =4 + Left =8831 + Top =4195 + Width =1836 + TabIndex =8 + Name ="cbxSqlLang" + RowSourceType ="Table/Query" + RowSource ="SELECT tabSqlLangFormat.SqlLang, tabSqlLangFormat.SqlDateFormat, tabSqlLangForma" + "t.SqlBooleanTrueString, tabSqlLangFormat.SqlWildCardString FROM tabSqlLangFormat" + " ORDER BY tabSqlLangFormat.SqlLang;" + ColumnWidths ="1701;0;0;0" + StatusBarText ="Select SQL dialect" + DefaultValue ="\"Jet/DAO\"" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + + LayoutCachedLeft =8831 + LayoutCachedTop =4195 + LayoutCachedWidth =10667 + LayoutCachedHeight =4435 + Begin + Begin Label + OverlapFlags =93 + TextAlign =3 + Left =7766 + Top =4195 + Width =1065 + Height =240 + RightMargin =29 + Name ="labSqlLang" + Caption ="SQL dialect:" + Tag ="LANG:" + HorizontalAnchor =1 + VerticalAnchor =1 + LayoutCachedLeft =7766 + LayoutCachedTop =4195 + LayoutCachedWidth =8831 + LayoutCachedHeight =4435 + End + End + End + Begin ComboBox + Enabled = NotDefault + RowSourceTypeInt =1 + OverlapFlags =87 + IMESentenceMode =3 + ListWidth =2268 + Left =8423 + Top =308 + Width =1659 + TabIndex =4 + Name ="cbxRemoveFilterCtl" + RowSourceType ="Value List" + + LayoutCachedLeft =8423 + LayoutCachedTop =308 + LayoutCachedWidth =10082 + LayoutCachedHeight =548 + Begin + Begin Label + OverlapFlags =93 + TextAlign =3 + Left =5496 + Top =312 + Width =2925 + Height =240 + RightMargin =29 + Name ="labRemoveFilterCtl" + Caption ="CommandButton \"Remove Filter\":" + Tag ="LANG:" + LayoutCachedLeft =5496 + LayoutCachedTop =312 + LayoutCachedWidth =8421 + LayoutCachedHeight =552 + End + End + End + Begin ComboBox + Enabled = NotDefault + RowSourceTypeInt =1 + OverlapFlags =87 + IMESentenceMode =3 + Left =8423 + Top =24 + Width =1659 + TabIndex =1 + Name ="cbxApplyFilterCtl" + RowSourceType ="Value List" + ColumnWidths ="2268" + + LayoutCachedLeft =8423 + LayoutCachedTop =24 + LayoutCachedWidth =10082 + LayoutCachedHeight =264 + Begin + Begin Label + OverlapFlags =93 + TextAlign =3 + Left =5496 + Top =28 + Width =2925 + Height =240 + RightMargin =29 + Name ="labUseFilterCtl" + Caption ="CommandButton \"Apply Filter\":" + Tag ="LANG:" + LayoutCachedLeft =5496 + LayoutCachedTop =28 + LayoutCachedWidth =8421 + LayoutCachedHeight =268 + End + End + End + Begin ComboBox + Enabled = NotDefault + RowSourceTypeInt =1 + OverlapFlags =87 + IMESentenceMode =3 + ListWidth =2268 + Left =8424 + Top =598 + Width =1659 + TabIndex =6 + Name ="cbxAutoFilterCtl" + RowSourceType ="Value List" + + LayoutCachedLeft =8424 + LayoutCachedTop =598 + LayoutCachedWidth =10083 + LayoutCachedHeight =838 + Begin + Begin Label + OverlapFlags =93 + TextAlign =3 + Left =5497 + Top =602 + Width =2925 + Height =240 + RightMargin =29 + Name ="labAutoFilterCtl" + Caption ="AutoFilter Checkbox:" + Tag ="LANG:" + LayoutCachedLeft =5497 + LayoutCachedTop =602 + LayoutCachedWidth =8422 + LayoutCachedHeight =842 + End + End + End + Begin Label + FontUnderline = NotDefault + OverlapFlags =85 + TextAlign =1 + Left =56 + Top =6122 + Width =2568 + Height =240 + ForeColor =16737792 + Name ="labCheckVersion" + Caption ="Check wizard version" + OnClick ="[Event Procedure]" + OnMouseMove ="[Event Procedure]" + Tag ="unchecked|LANG:" + VerticalAnchor =1 + LayoutCachedLeft =56 + LayoutCachedTop =6122 + LayoutCachedWidth =2624 + LayoutCachedHeight =6362 + End + Begin CommandButton + Enabled = NotDefault + OverlapFlags =87 + Left =2004 + Top =595 + Width =3402 + Height =284 + FontSize =7 + TabIndex =5 + Name ="cmdFillFilterControlsFromDataSource" + Caption ="Fill list with names from data source" + StatusBarText ="Please select the data form in the 'ApplyFilter method' option" + OnClick ="[Event Procedure]" + Tag ="LANG:" + ControlTipText ="Please select the data form in the 'ApplyFilter method' option" + + LayoutCachedLeft =2004 + LayoutCachedTop =595 + LayoutCachedWidth =5406 + LayoutCachedHeight =879 + BackColor =-2147483633 + Overlaps =1 + End + Begin ComboBox + LimitToList = NotDefault + TabStop = NotDefault + RowSourceTypeInt =1 + SpecialEffect =0 + OldBorderStyle =0 + OverlapFlags =85 + TextAlign =2 + IMESentenceMode =3 + Left =10128 + Top =24 + Width =561 + Height =228 + TabIndex =2 + BackColor =14151142 + Name ="cbxLangCode" + RowSourceType ="Value List" + RowSource ="\"DE\";\"EN\"" + AfterUpdate ="[Event Procedure]" + HorizontalAnchor =1 + + LayoutCachedLeft =10128 + LayoutCachedTop =24 + LayoutCachedWidth =10689 + LayoutCachedHeight =252 + End + Begin CheckBox + Enabled = NotDefault + OverlapFlags =215 + Left =7605 + Top =5191 + TabIndex =14 + Name ="cbUseFilterControlTagConverter" + DefaultValue ="False" + + LayoutCachedLeft =7605 + LayoutCachedTop =5191 + LayoutCachedWidth =7865 + LayoutCachedHeight =5431 + Begin + Begin Label + OverlapFlags =247 + Left =7833 + Top =5160 + Width =2760 + Height =240 + Name ="Label132" + Caption ="Filter definition in tag property" + Tag ="LANG:" + LayoutCachedLeft =7833 + LayoutCachedTop =5160 + LayoutCachedWidth =10593 + LayoutCachedHeight =5400 + End + End + End + Begin Label + OldBorderStyle =1 + BorderWidth =1 + OverlapFlags =95 + TextFontCharSet =2 + TextAlign =1 + TextFontFamily =2 + Left =2345 + Top =5019 + Width =295 + Height =295 + FontSize =16 + ForeColor =5026082 + Name ="labCopyModulFilterControltagConverter" + FontName ="Marlett" + VerticalAnchor =1 + LayoutCachedLeft =2345 + LayoutCachedTop =5019 + LayoutCachedWidth =2640 + LayoutCachedHeight =5314 + End + Begin Label + OverlapFlags =85 + TextAlign =3 + Left =315 + Top =5044 + Width =1991 + Height =255 + TopMargin =14 + Name ="labCaptionCopyModulFilterControlTagConverter" + Caption ="FilterControlTagConverter" + VerticalAnchor =1 + LayoutCachedLeft =315 + LayoutCachedTop =5044 + LayoutCachedWidth =2306 + LayoutCachedHeight =5299 + End + Begin CommandButton + Transparent = NotDefault + OverlapFlags =215 + Left =2345 + Top =5019 + Width =295 + Height =295 + TabIndex =13 + Name ="cmdCopyModulFilterControlTagConverter" + Caption ="Befehl69" + OnClick ="[Event Procedure]" + VerticalAnchor =1 + + LayoutCachedLeft =2345 + LayoutCachedTop =5019 + LayoutCachedWidth =2640 + LayoutCachedHeight =5314 + Overlaps =1 + End + End + End + End +End +CodeBehindForm +' See "frmFilterFormWizard.cls" diff --git a/source/forms/frmFilterFormWizard.cls b/source/forms/frmFilterFormWizard.cls new file mode 100644 index 0000000..6aac5e0 --- /dev/null +++ b/source/forms/frmFilterFormWizard.cls @@ -0,0 +1,755 @@ +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = True +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +'--------------------------------------------------------------------------------------- +' Form: frmFilterFormWizard +'--------------------------------------------------------------------------------------- +'/** +' \author Josef Poetzl +' +' Wizard form for filter code import +' +' +'**/ +'------------------------------------------------------------------------------------ +' +Option Compare Database +Option Explicit + +Private m_OpenModules As Long +Private m_CodeModulImporter As AppFileCodeModulTransfer + +Private Const SubFormApplyFilterOption As Long = 2 +Private Const FILTERFORMWIZARD_TEXT_CREATENEW As String = "" + +Private WithEvents m_L10nDict As L10nDict +Attribute m_L10nDict.VB_VarHelpID = -1 + +Private Property Get SourceDb() As DAO.Database + Set SourceDb = CurrentDb +End Property + +Private Property Get CodeModulImporter() As AppFileCodeModulTransfer + If m_CodeModulImporter Is Nothing Then + Set m_CodeModulImporter = New AppFileCodeModulTransfer + m_CodeModulImporter.UseVbComponentsImport = APPLICATION_FILTERCODEMODULE_USEVBCOMPONENTSIMPORT + End If + Set CodeModulImporter = m_CodeModulImporter +End Property + +Private Sub cbxFormName_AfterUpdate() + + Dim FormName As String + Dim FormSelected As Boolean + Dim FormRef As Form + + RefreshAddFilterButtonEnableMode + + FormName = Nz(Me.cbxFormName.Value, vbNullString) + FormSelected = (Len(FormName) > 0) + + Me.sfrFilterControls.Enabled = FormSelected + Me.cbxApplyFilterCtl.Enabled = FormSelected + Me.cbxRemoveFilterCtl.Enabled = FormSelected + Me.cbxAutoFilterCtl.Enabled = FormSelected + + Me.ApplyFilterMethodOptions.Enabled = FormSelected + With Me.cbxApplyFilterSubForm + .Enabled = FormSelected And (Me.ApplyFilterMethodOptions = SubFormApplyFilterOption) + .Value = Null + End With + + With Me.FormCodeOptions + .Enabled = FormSelected + Me.cbUseFilterControlTagConverter.Enabled = FormSelected And (.Value = 1) + End With + + If Not FormSelected Then + Me.cbxFormName.RowSource = vbNullString + Me.sfrFilterControls.Form.InitFilterForm Nothing + Me.cbxApplyFilterSubForm.RowSource = vbNullString + Exit Sub + End If + + Set FormRef = GetFilterFormRef + + LoadControlsFromForm FormRef + +End Sub + +Private Sub RefreshAddFilterButtonEnableMode() + + Dim EnableBtn As Boolean + + EnableBtn = (Len(Nz(Me.cbxFormName.Value, vbNullString)) > 0) + + If EnableBtn Then + If Me.ApplyFilterMethodOptions.Value = 2 Then + EnableBtn = (Len(Nz(Me.cbxApplyFilterSubForm.Value, vbNullString)) > 0) + End If + End If + + Me.cmdAddFilterCodeToForm.Enabled = EnableBtn + +End Sub + +Private Function GetFilterFormRef() As Form + + Dim FormName As String + + FormName = Nz(Me.cbxFormName.Value, vbNullString) + If Len(FormName) = 0 Then + Set GetFilterFormRef = Nothing + Exit Function + End If + + OpenFormIfClosed FormName + Set GetFilterFormRef = Application.Forms(FormName) + +End Function + +Private Sub OpenFormIfClosed(ByVal FormName As String) + If Not CurrentProject.AllForms(FormName).IsLoaded Then + DoCmd.OpenForm FormName, acDesign, , , , acHidden + End If +End Sub + +Private Sub cbxFormName_GotFocus() + LoadForms +End Sub + +Private Sub LoadForms() + Me.cbxFormName.RowSource = "Select Name FROM [" & SourceDb.Name & "].MSysObjects where Type = -32768 Order By Name" +End Sub + +Private Sub cbxLangCode_AfterUpdate() + With Me.cbxLangCode + If IsNull(.Value) Then + .Value = "EN" + End If + L10n.LangCode = .Value + End With +End Sub + +Private Sub cbxApplyFilterSubForm_AfterUpdate() + SetFillFilterControlsFromDataSourceMode + RefreshAddFilterButtonEnableMode +End Sub + +Private Sub cbxApplyFilterSubForm_GotFocus() + RefreshSubFormList +End Sub + +Private Sub RefreshSubFormList() + + Dim frm As Form + Dim ctl As Control + + Me.cbxApplyFilterSubForm.RowSource = vbNullString + + Set frm = GetFilterFormRef + If frm Is Nothing Then + Exit Sub + End If + + For Each ctl In frm.Controls + Select Case ctl.ControlType + Case AcControlType.acSubform + Me.cbxApplyFilterSubForm.AddItem ctl.Name + End Select + Next + +End Sub + +Private Sub AddFilterCodeToForm(ByVal ImporterRef As IFilterFormCodeBuilder) + + Dim FormName As String + Dim ApplyFilterCtlName As String + Dim RemoveFilterCtlName As String + Dim AutoFilterCtlName As String + Dim FilterControlTagConverterMode As Long + + FormName = Nz(Me.cbxFormName.Value, vbNullString) + If Len(FormName) = 0 Then + MsgBox "Bitte zuerst Formular auswählen!", , CurrentApplication.ApplicationName + Exit Sub + End If + + ApplyFilterCtlName = Nz(Me.cbxApplyFilterCtl.Value, vbNullString) + RemoveFilterCtlName = Nz(Me.cbxRemoveFilterCtl.Value, vbNullString) + AutoFilterCtlName = Nz(Me.cbxAutoFilterCtl.Value, vbNullString) + + AddChangeFilterControlsToForm FormName, ApplyFilterCtlName, RemoveFilterCtlName, AutoFilterCtlName + + If Me.FormCodeOptions.Value = 1 Then + FilterControlTagConverterMode = Abs(Nz(Me.cbUseFilterControlTagConverter.Value, 0)) + Else + FilterControlTagConverterMode = 0 + End If + + With New FilterFormCodeImporter + + Set .Importer = ImporterRef + + If AddControlsToImporter(.Self, FormName, FilterControlTagConverterMode <> 0) Then ' New Controls added to Header + If FilterControlTagConverterMode = 1 Then + FilterControlTagConverterMode = 2 'use Me.Section(acHeader).Controls + End If + End If + + .WriteToForm FormName, _ + Nz(Me.ApplyFilterMethodOptions.Value, 0), _ + Nz(Me.cbxApplyFilterSubForm.Value, vbNullString), _ + Nz(Me.cbxSqlLang.Column(1), vbNullString), _ + Nz(Me.cbxSqlLang.Column(2), vbNullString), _ + Nz(Me.cbxSqlLang.Column(3), vbNullString), _ + GetCheckedControlName(ApplyFilterCtlName), _ + GetCheckedControlName(RemoveFilterCtlName), _ + GetCheckedControlName(AutoFilterCtlName), _ + FilterControlTagConverterMode + + End With + + CheckModules + + Me.SetFocus + +End Sub + +Private Property Get FilterFormWizardText_CreateNew() As String + FilterFormWizardText_CreateNew = L10n.Text(FILTERFORMWIZARD_TEXT_CREATENEW) +End Property + + +Private Sub AddChangeFilterControlsToForm(ByVal FilterFormName As String, ByRef ApplyFilterCtlName As String, ByRef RemoveFilterCtlName As String, ByRef AutoFilterCtlName As String) + + Dim SaveForm As Boolean + + If ApplyFilterCtlName = FilterFormWizardText_CreateNew Then + ApplyFilterCtlName = "cmdApplyFilter" + AddChangeFilterControlToForm FilterFormName, ApplyFilterCtlName, acCommandButton, L10n.Text("Filter anwenden") + SaveForm = True + End If + + If RemoveFilterCtlName = FilterFormWizardText_CreateNew Then + RemoveFilterCtlName = "cmdRemoveFilter" + AddChangeFilterControlToForm FilterFormName, RemoveFilterCtlName, acCommandButton, L10n.Text("Filter löschen") + SaveForm = True + End If + + If AutoFilterCtlName = FilterFormWizardText_CreateNew Then + AutoFilterCtlName = "cbAutoFilter" + AddChangeFilterControlToForm FilterFormName, AutoFilterCtlName, acCheckBox, L10n.Text("Autofilter"), True + SaveForm = True + End If + + If SaveForm Then + DoCmd.Save acForm, FilterFormName + End If + +End Sub + +Private Sub AddChangeFilterControlToForm(ByVal FilterFormName As String, _ + ByRef ControlName As String, _ + ByVal ControlType As AcControlType, _ + ByVal ControlCaption As String, _ + Optional ByVal DefaultValue As Variant) + + Const DistanceBetweenControls As Long = 72 + + Dim InsertLabelControl As Boolean + + Select Case ControlType + Case AcControlType.acCommandButton, AcControlType.acOptionButton, AcControlType.acLabel + InsertLabelControl = False + Case Else + InsertLabelControl = True + End Select + + With New FormDesigner + .FormName = FilterFormName + With .AddControl(ControlType, ControlName, acHeader, , , , , DistanceBetweenControls, InsertLabelControl, ControlCaption) + If Not InsertLabelControl Then + .Caption = ControlCaption + End If + ControlName = .Name + If Not IsMissing(DefaultValue) Then + .DefaultValue = DefaultValue + End If + End With + End With + +End Sub + +Private Function AddControlsToImporter(ByVal Importer As FilterFormCodeImporter, ByVal FilterFormName As String, ByVal UseFilterDefinitionInTagProperty As Boolean) As Boolean + AddControlsToImporter = Me.sfrFilterControls.Form.AddControlsToImporter(Importer, FilterFormName, UseFilterDefinitionInTagProperty) +End Function + +Private Sub cmdAddFilterCodeToForm_Click() + + Select Case Me.FormCodeOptions.Value + Case 1 + AddFilterCodeToForm New FilterControlManagerCodeBuilder + Case 2 + AddFilterCodeToForm New FilterStringBuilderCodeBuilder + End Select + +End Sub + +Private Sub cmdFillFilterControlsFromDataSource_Click() + + Dim FilterFormName As String + Dim SubFormName As String + + FilterFormName = Nz(Me.cbxFormName.Value, vbNullString) + If Len(FilterFormName) = 0 Then Exit Sub + + Select Case Me.ApplyFilterMethodOptions.Value + Case 1 + ' keine weiteren Anpassungen + Case 2 + SubFormName = Nz(Me.cbxApplyFilterSubForm.Value, vbNullString) + If Len(SubFormName) = 0 Then Exit Sub + Case Else + Exit Sub + End Select + + If Not CurrentProject.AllForms(FilterFormName).IsLoaded Then + DoCmd.OpenForm FilterFormName, acDesign, , , , acWindowNormal + End If + + With Application.Forms(FilterFormName) + Select Case Me.ApplyFilterMethodOptions.Value + Case 1 + FillFilterControlsFromDataSource .RecordSource + Case 2 + FillFilterControlsFromDataSource .Controls(SubFormName).Form.RecordSource + End Select + + End With + +End Sub + +Private Sub FillFilterControlsFromDataSource(ByVal DataSource As String) + + Dim fld As DAO.Field + + If Len(DataSource) = 0 Then + MsgBox "Es ist keine Datenquelle eingestellt!", vbExclamation, "Filter aus Datenfelder erzeugen" + Exit Sub + End If + + With CurrentDb.OpenRecordset(DataSource) + For Each fld In .Fields + AddFilterControlFromDataField fld + Next + .Close + End With + +End Sub + +Private Sub AddFilterControlFromDataField(ByVal DataField As DAO.Field) + Me.sfrFilterControls.Form.InsertFilterRecord DataField.Name, DataField.Type +End Sub + +Private Sub Form_Current() + CheckModules True, True +End Sub + +Private Sub OpenReplaceModulesContextMenu(ByRef MenuControlRef As Control, ByVal X As Single, ByVal Y As Single) + + Dim mnu As WinApiShortcutMenu + Dim SelectedMenuItem As Long + + Set mnu = New WinApiShortcutMenu + + With mnu + .ControlSection = acDetail + Set .AccessForm = Me + Set .MenuControl = MenuControlRef + + .AddMenuItem 3, L10n.Text("Update code modules in the add-in from the SCC repository (master).") + .AddMenuItem 4, L10n.Text("Update code modules in the add-in from the SCC repository (draft).") + .AddMenuItem 0, "", MF_SEPARATOR + .AddMenuItem 1, L10n.Text("Replace all code modules (existing modules are overwritten)") + .AddMenuItem 2, L10n.Text("Replace all code modules except 'SqlTools' (SqlTools remains unchanged)") + + End With + + SelectedMenuItem = mnu.OpenMenu(X, Y) + Select Case SelectedMenuItem + Case 1 + ReplaceAllModules True + Case 2 + ReplaceAllModules False + Case 3 + RefreshCodeModulesFromSccRepo False + Case 4 + RefreshCodeModulesFromSccRepo True + Case Else + ' + End Select + + Set mnu = Nothing + +End Sub + +Private Sub ReplaceAllModules(Optional ByVal WithSqlTools As Boolean = False) + + Dim ModulesReplaced As Boolean + +On Error Resume Next + + With CodeModulImporter + If WithSqlTools Then + ModulesReplaced = .ReplaceCodeModules("SqlTools", "StringCollection", "FilterStringBuilder", "FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager", "FilterControlTagConverter") + Else + ModulesReplaced = .ReplaceCodeModules("StringCollection", "FilterStringBuilder", "FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager", "FilterControlTagConverter") + End If + End With + + If ModulesReplaced Then + + SetModulCopyControls "CopyModulSqlTools", True + SetModulCopyControls "CopyModulFilterStringBuilder", True + SetModulCopyControls "CopyModulFilterControlManager", True + SetModulCopyControls "CopyModules", True + + If m_OpenModules = 0 Then + MsgBox "Codemodule wurden aktualisiert.", , CurrentApplication.ApplicationName + End If + + m_OpenModules = 0 + + End If + +End Sub + +Private Sub Form_Open(ByRef Cancel As Integer) + Me.cbxLangCode.Value = L10n.LangCode + L10n.TranslateControls Me.Controls + Set m_L10nDict = L10n + SetFormCaption +End Sub + +Private Sub SetFormCaption() + Me.Caption = "ACLib FilterForm Wizard " & ChrW(&H25AA) & " Version " & CurrentApplication.Version & " (" & L10n.Text("Filter Classes") & ": SCC-Rev. " & SccRev & ")" +End Sub + +Private Sub FormCodeOptions_AfterUpdate() + + With Me.cbUseFilterControlTagConverter + .Enabled = (Me.FormCodeOptions.Value = 1) + If Not .Enabled Then + .Value = False + End If + End With + +End Sub + +Private Sub labCheckVersion_Click() + + Select Case L10n.ControlTag(Me.labCheckVersion.Tag) + Case "unchecked" + SetNewVersionInfo + Case "NewVersionExists" + OpenDownloadSource + Case Else + ' + End Select + +End Sub + +Private Sub labCheckVersion_MouseMove(ByRef Button As Integer, ByRef Shift As Integer, ByRef X As Single, ByRef Y As Single) + If L10n.ControlTag(Me.labCheckVersion.Tag) <> "VersionUptodate" Then + modWinApi_Mouse.MouseCursor IDC_HAND + End If +End Sub + +Private Sub labCopyCaption_MouseDown(ByRef Button As Integer, ByRef Shift As Integer, ByRef X As Single, ByRef Y As Single) + + If Button = 1 Or Button = 2 Then + OpenReplaceModulesContextMenu Me.labCopyCaption, X, Y + End If + +End Sub + +Private Sub CheckModules(Optional ByVal WithControlManager As Boolean = True, Optional ByVal WithTagConverter As Boolean = False) + + Dim CheckOk As Boolean + +On Error Resume Next + + m_OpenModules = 0 + + With CodeModulImporter + CheckOk = .CheckCodeModules("SqlTools") + m_OpenModules = m_OpenModules + 1 + CheckOk + SetModulCopyControls "CopyModulSqlTools", CheckOk + + CheckOk = .CheckCodeModules("StringCollection", "FilterStringBuilder") + m_OpenModules = m_OpenModules + 1 + CheckOk + SetModulCopyControls "CopyModulFilterStringBuilder", CheckOk + + If WithControlManager Then + CheckOk = .CheckCodeModules("FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager") + m_OpenModules = m_OpenModules + 1 + CheckOk + SetModulCopyControls "CopyModulFilterControlManager", CheckOk + + If WithTagConverter Then + CheckOk = .CheckCodeModules("FilterControlTagConverter") + m_OpenModules = m_OpenModules + 1 + CheckOk + SetModulCopyControls "CopyModulFilterControlTagConverter", CheckOk + End If + + End If + + CheckOk = (m_OpenModules = 0) + SetModulCopyControls "CopyModules", CheckOk + End With + +End Sub + +Private Sub cmdCopyModulSqlTools_Click() + + CodeModulImporter.TransferCodeModules "SqlTools" + m_OpenModules = m_OpenModules - 1 + SetModulCopyControls "CopyModulSqlTools", True + +End Sub + +Private Sub cmdCopyModulFilterControlManager_Click() + + With CodeModulImporter + .TransferCodeModules "FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager" + m_OpenModules = m_OpenModules - 1 + If Not .CheckCodeModules("StringCollection", "FilterStringBuilder") Then + cmdCopyModulFilterStringBuilder_Click + End If + SetModulCopyControls "CopyModulFilterControlManager", True + End With + +End Sub + +Private Sub cmdCopyModulFilterControlTagConverter_Click() + + With CodeModulImporter + .TransferCodeModules "FilterControlTagConverter" + m_OpenModules = m_OpenModules - 1 + If Not .CheckCodeModules("FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager") Then + cmdCopyModulFilterControlManager_Click + End If + SetModulCopyControls "CopyModulFilterControlTagConverter", True + End With + +End Sub + +Private Sub cmdCopyModulFilterStringBuilder_Click() + + With CodeModulImporter + .TransferCodeModules "StringCollection", "FilterStringBuilder" + m_OpenModules = m_OpenModules - 1 + If Not .CheckCodeModules("SqlTools") Then + cmdCopyModulSqlTools_Click + End If + SetModulCopyControls "CopyModulFilterStringBuilder", True + End With + +End Sub + +Private Sub cmdCopyModules_Click() + + CodeModulImporter.TransferCodeModules "SqlTools", "StringCollection", "FilterStringBuilder", "FilterControlEventBridge", "FilterControl", "FilterControlCollection", "FilterControlManager", "FilterControlTagConverter" + SetModulCopyControls "CopyModulSqlTools", True + SetModulCopyControls "CopyModulFilterStringBuilder", True + SetModulCopyControls "CopyModulFilterControlManager", True + SetModulCopyControls "CopyModulFilterControlTagConverter", True + SetModulCopyControls "CopyModules", True + m_OpenModules = 0 + +End Sub + +Private Sub SetModulCopyControls(ByVal ModulCodeName As String, ByVal Exists As Boolean) + + Dim ModuleCodeCaption As String + Dim BorderStyle As Long + +On Error Resume Next + + If Exists Then Me.sysFirst.SetFocus + Me.Controls("cmd" & ModulCodeName).Enabled = Not Exists + If Exists Then + ModuleCodeCaption = "b" + BorderStyle = 0 + Else + ModuleCodeCaption = vbNullString + BorderStyle = 1 + End If + With Me.Controls("lab" & ModulCodeName) + .Caption = ModuleCodeCaption + .BorderStyle = BorderStyle + End With + + If ModulCodeName <> "CopyModules" And m_OpenModules = 0 Then + SetModulCopyControls "CopyModules", True + End If + +End Sub + +Private Sub labCopyCaption_MouseMove(ByRef Button As Integer, ByRef Shift As Integer, ByRef X As Single, ByRef Y As Single) + modWinApi_Mouse.MouseCursor IDC_HAND +End Sub + +Private Sub m_L10nDict_LanguageChanged() + If Nz(Me.cbxLangCode.Value, vbNullString) <> L10n.LangCode Then + Me.cbxLangCode.Value = L10n.LangCode + End If + SetFormCaption + L10n.TranslateControls Me.Controls + + If Len(Me.cbxFormName.Value) > 0 Then + LoadControlsFromForm GetFilterFormRef + End If +End Sub + +Private Sub ApplyFilterMethodOptions_AfterUpdate() + + With Me.cbxApplyFilterSubForm + .Enabled = (Me.ApplyFilterMethodOptions = SubFormApplyFilterOption) + If .Enabled = False Then .Value = Null + End With + + SetFillFilterControlsFromDataSourceMode + + RefreshAddFilterButtonEnableMode + +End Sub + +Private Sub SetFillFilterControlsFromDataSourceMode() + + With Me.cmdFillFilterControlsFromDataSource + Select Case Me.ApplyFilterMethodOptions + Case 1 + .Enabled = True + Case 2 + .Enabled = (Len(Nz(Me.cbxApplyFilterSubForm.Value, vbNullString)) > 0) + Case Else + .Enabled = False + End Select + + If .Enabled Then + .ControlTipText = vbNullString + Else + .ControlTipText = L10n.Text("Please set the data form in the 'ApplyFilter method' option first!") + End If + End With + +End Sub + +Private Sub LoadControlsFromForm(ByVal FormRef As Form) + + Dim ctl As Control + + ClearFilterCtlCombobox Me.cbxApplyFilterCtl + ClearFilterCtlCombobox Me.cbxRemoveFilterCtl + ClearFilterCtlCombobox Me.cbxAutoFilterCtl + + If FormRef Is Nothing Then + Exit Sub + End If + + Me.cbxApplyFilterCtl.AddItem FilterFormWizardText_CreateNew + Me.cbxRemoveFilterCtl.AddItem FilterFormWizardText_CreateNew + Me.cbxAutoFilterCtl.AddItem FilterFormWizardText_CreateNew + + For Each ctl In FormRef.Controls + Select Case ctl.ControlType + Case AcControlType.acCommandButton + + Me.cbxApplyFilterCtl.AddItem ctl.Name + Me.cbxRemoveFilterCtl.AddItem ctl.Name + + Case AcControlType.acCheckBox, AcControlType.acToggleButton + + Me.cbxAutoFilterCtl.AddItem ctl.Name + + End Select + Next + + Me.sfrFilterControls.Form.InitFilterForm FormRef + +End Sub + +Private Sub ClearFilterCtlCombobox(ByVal CbxRef As ComboBox) + With CbxRef + .RowSource = vbNullString + .Value = Null + End With +End Sub + +Private Sub SetNewVersionInfo() + + Dim AhProcParams(1) As Variant + Dim AhResumeMode As ApplicationHandlerResumeModes + Dim AhResumeMessage As Variant + + Call CurrentApplication.CallExtensionProcedure("AppVersion", "NewVersionExists", AhResumeMode, AhResumeMessage, AhProcParams) + + If AhResumeMode <> AppResumeMode_Completed Then + If AhResumeMode = AppResumeMode_Error Then + If Len(AhResumeMessage) > 0 Then + MsgBox AhResumeMessage, vbExclamation, "Error during version check" + End If + End If + Exit Sub + End If + + With Me.labCheckVersion + If AhResumeMessage = False Then + .Caption = L10n.Text("Current version is installed") + .Tag = "VersionUptodate" '& L10n.LangSeparatorChar '& "LANG:Wizard-Version prüfen" + .ForeColor = 0 + .FontUnderline = False + ElseIf AhResumeMessage = True Then + .Caption = FormatText("Neue Version ({0}) verfügbar", AhProcParams(0)) + .ControlTipText = AhProcParams(1) + .Tag = "NewVersionExists" '& L10n.LangSeparatorChar & "LANG:Wizard-Version prüfen" + Else + + End If + End With + +End Sub + +Private Sub OpenDownloadSource() + Application.FollowHyperlink APPLICATION_DOWNLOADSOURCE, , True, False +End Sub + +Private Function GetCheckedControlName(ByVal ControlNameToCheck As String) As String + GetCheckedControlName = Replace(ControlNameToCheck, " ", "_") +End Function + +Private Sub RefreshCodeModulesFromSccRepo(ByVal UseDraft As Boolean) + + With New ACLibGitHubImporter + + If UseDraft Then + .BranchName = "draft" + End If + + If .RevisionString(True) = SccRevMin Then + If MsgBox("All modules are already up to date." & vbNewLine & "Still re-insert?", vbYesNo + vbDefaultButton2, CurrentApplication.ApplicationName) <> vbYes Then + Exit Sub + End If + End If + + .UpdateCodeModules + + End With + + MsgBox "Code has been updated", , CurrentApplication.ApplicationName + + SetFormCaption + +End Sub diff --git a/source/forms/frmFilterFormWizard.json b/source/forms/frmFilterFormWizard.json new file mode 100644 index 0000000..4cdda2e --- /dev/null +++ b/source/forms/frmFilterFormWizard.json @@ -0,0 +1,28 @@ +{ + "Info": { + "Class": "clsDbForm", + "Description": "frmFilterFormWizard Print Settings" + }, + "Items": { + "Printer": { + "Orientation": "Portrait", + "PaperSize": "A4" + }, + "Margins": { + "LeftMargin": 1.0097, + "TopMargin": 1.0097, + "RightMargin": 1.0097, + "BotMargin": 1.0097, + "DataOnly": false, + "Width": 5, + "Height": 3, + "DefaultSize": true, + "Columns": 1, + "ColumnSpacing": 0.25, + "RowSpacing": 0, + "ItemLayout": "Horizontal Columns", + "FastPrint": 1, + "Datasheet": 1 + } + } +} diff --git a/source/forms/frmFilterFormWizard_SF_Controls.bas b/source/forms/frmFilterFormWizard_SF_Controls.bas new file mode 100644 index 0000000..0ea8dfe --- /dev/null +++ b/source/forms/frmFilterFormWizard_SF_Controls.bas @@ -0,0 +1,577 @@ +Version =20 +VersionRequired =20 +Begin Form + NavigationButtons = NotDefault + AllowDesignChanges = NotDefault + ScrollBars =2 + PictureAlignment =2 + DatasheetGridlinesBehavior =3 + GridY =10 + Width =10050 + DatasheetFontHeight =11 + ItemSuffix =33 + Left =3300 + Top =3443 + Right =13635 + Bottom =6428 + RecSrcDt = Begin + 0xc4d680b8ef58e440 + End + RecordSource ="tabFilterControls" + OnCurrent ="[Event Procedure]" + DatasheetFontName ="Calibri" + OnLoad ="[Event Procedure]" + FilterOnLoad =0 + OrderByOnLoad =0 + OrderByOnLoad =0 + DatasheetBackColor12 =-2147483643 + ShowPageMargins =0 + DatasheetAlternateBackColor =16053492 + DatasheetGridlinesColor12 =15062992 + FitToScreen =1 + Begin + Begin Label + BackStyle =0 + FontSize =11 + FontName ="Calibri" + ThemeFontIndex =1 + BackThemeColorIndex =1 + BorderThemeColorIndex =1 + ForeThemeColorIndex =2 + ForeTint =60.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin CommandButton + Width =1701 + Height =283 + FontSize =11 + FontWeight =400 + FontName ="Calibri" + ForeThemeColorIndex =2 + ForeShade =50.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + BackColor =-2147483633 + BorderLineStyle =0 + BorderThemeColorIndex =3 + BorderShade =90.0 + ThemeFontIndex =1 + End + Begin OptionButton + BorderLineStyle =0 + LabelX =230 + LabelY =-30 + BorderThemeColorIndex =3 + BorderShade =90.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin CheckBox + BorderLineStyle =0 + LabelX =230 + LabelY =-30 + BorderThemeColorIndex =3 + BorderShade =90.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin OptionGroup + SpecialEffect =3 + BorderLineStyle =0 + Width =1701 + Height =1701 + BorderThemeColorIndex =3 + BorderShade =90.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin TextBox + FELineBreak = NotDefault + BorderLineStyle =0 + Width =1701 + LabelX =-1701 + FontSize =11 + FontName ="Calibri" + AsianLineBreak =1 + BackThemeColorIndex =1 + BorderThemeColorIndex =3 + BorderShade =90.0 + ThemeFontIndex =1 + ForeThemeColorIndex =2 + ForeShade =50.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin ComboBox + BorderLineStyle =0 + Width =1701 + LabelX =-1701 + FontSize =11 + FontName ="Calibri" + AllowValueListEdits =1 + InheritValueList =1 + ThemeFontIndex =1 + BackThemeColorIndex =1 + BorderThemeColorIndex =3 + BorderShade =90.0 + ForeThemeColorIndex =2 + ForeShade =50.0 + GridlineThemeColorIndex =1 + GridlineShade =65.0 + End + Begin FormHeader + Height =285 + Name ="Formularkopf" + AlternateBackThemeColorIndex =1 + AlternateBackShade =95.0 + BackThemeColorIndex =2 + BackTint =20.0 + Begin + Begin Label + OverlapFlags =85 + Left =5831 + Width =2040 + Height =285 + FontSize =10 + Name ="labControl" + Caption ="Control" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =5831 + LayoutCachedWidth =7871 + LayoutCachedHeight =285 + ThemeFontIndex =-1 + End + Begin Label + OverlapFlags =85 + Left =56 + Width =2157 + Height =285 + FontSize =10 + Name ="labDataField" + Caption ="Data field" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =56 + LayoutCachedWidth =2213 + LayoutCachedHeight =285 + ThemeFontIndex =-1 + End + Begin Label + OverlapFlags =85 + Left =3746 + Width =1815 + Height =285 + FontSize =10 + Name ="labRelaionalOperator" + Caption ="Relational operator" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =3746 + LayoutCachedWidth =5561 + LayoutCachedHeight =285 + ThemeFontIndex =-1 + End + Begin Label + OverlapFlags =85 + Left =2268 + Width =1380 + Height =285 + FontSize =10 + Name ="labDataType" + Caption ="Data type" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =2268 + LayoutCachedWidth =3648 + LayoutCachedHeight =285 + ThemeFontIndex =-1 + End + Begin Label + OverlapFlags =85 + Left =7875 + Width =2175 + Height =285 + FontSize =10 + Name ="labControl2" + Caption ="Other controls" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =7875 + LayoutCachedWidth =10050 + LayoutCachedHeight =285 + ThemeFontIndex =-1 + End + End + End + Begin Section + Height =642 + Name ="Detailbereich" + AlternateBackThemeColorIndex =1 + AlternateBackShade =97.0 + BackThemeColorIndex =1 + Begin + Begin ComboBox + RowSourceTypeInt =1 + OverlapFlags =85 + IMESentenceMode =3 + ListWidth =3402 + Left =5831 + Top =29 + Width =2041 + Height =285 + FontSize =10 + TabIndex =3 + ConditionalFormat = Begin + 0x0100000090000000010000000100000000000000000000001700000000000000 , + 0x00000000ffffff00000000000000000000000000000000000000000000000000 , + 0x0000000000000000000000000000000000000000000000000000000000000000 , + 0x5b006300620043007200650061007400650043006f006e00740072006f006c00 , + 0x5d003d00540072007500650000000000 + End + Name ="fcControl" + ControlSource ="Control" + RowSourceType ="Value List" + ColumnWidths ="3402" + FontName ="Tahoma" + AllowValueListEdits =0 + + LayoutCachedLeft =5831 + LayoutCachedTop =29 + LayoutCachedWidth =7872 + LayoutCachedHeight =314 + ThemeFontIndex =-1 + ConditionalFormat14 = Begin + 0x01000100000001000000000000000000000000000000ffffff00160000005b00 , + 0x6300620043007200650061007400650043006f006e00740072006f006c005d00 , + 0x3d005400720075006500000000000000000000000000000000000000000000 + End + End + Begin ComboBox + LimitToList = NotDefault + OverlapFlags =85 + IMESentenceMode =3 + ColumnCount =2 + Left =3746 + Top =29 + Width =1803 + Height =285 + FontSize =10 + TabIndex =2 + BoundColumn =1 + Name ="fcRelationalOperator" + ControlSource ="RelationalOperator" + RowSourceType ="Table/Query" + RowSource ="SELECT tabRelationalOperators.RelationalOperator, tabRelationalOperators.Relatio" + "nalOperatorCode FROM tabRelationalOperators ORDER BY tabRelationalOperators.Orde" + "rPos;" + ColumnWidths ="1134;0" + FontName ="Tahoma" + AllowValueListEdits =0 + + LayoutCachedLeft =3746 + LayoutCachedTop =29 + LayoutCachedWidth =5549 + LayoutCachedHeight =314 + ThemeFontIndex =-1 + End + Begin ComboBox + OverlapFlags =85 + IMESentenceMode =3 + ColumnCount =2 + Left =2268 + Top =29 + Width =1353 + Height =285 + FontSize =10 + TabIndex =1 + BoundColumn =1 + Name ="fcDataType" + ControlSource ="DataType" + RowSourceType ="Table/Query" + RowSource ="SELECT tabSqlFieldDataTypes.SqlFieldDataType, tabSqlFieldDataTypes.SqlFieldDataT" + "ypeCode FROM tabSqlFieldDataTypes ORDER BY tabSqlFieldDataTypes.SqlFieldDataType" + ";" + ColumnWidths ="1134;0" + FontName ="Tahoma" + AllowValueListEdits =0 + + LayoutCachedLeft =2268 + LayoutCachedTop =29 + LayoutCachedWidth =3621 + LayoutCachedHeight =314 + ThemeFontIndex =-1 + End + Begin CheckBox + OverlapFlags =85 + Left =5465 + Top =390 + TabIndex =7 + Name ="fcRelationalOperatorNot" + ControlSource ="RelationalOperatorNot" + DefaultValue ="False" + + LayoutCachedLeft =5465 + LayoutCachedTop =390 + LayoutCachedWidth =5725 + LayoutCachedHeight =630 + Begin + Begin Label + OverlapFlags =127 + Left =5135 + Top =360 + Width =330 + Height =240 + FontSize =8 + Name ="labRelationalOperatorNot" + Caption ="Not" + FontName ="Tahoma" + LayoutCachedLeft =5135 + LayoutCachedTop =360 + LayoutCachedWidth =5465 + LayoutCachedHeight =600 + ThemeFontIndex =-1 + End + End + End + Begin CheckBox + OverlapFlags =85 + Left =4181 + Top =390 + TabIndex =5 + Name ="fcWildCardSuffix" + ControlSource ="WildCardSuffix" + DefaultValue ="False" + + LayoutCachedLeft =4181 + LayoutCachedTop =390 + LayoutCachedWidth =4441 + LayoutCachedHeight =630 + Begin + Begin Label + OverlapFlags =119 + Left =3746 + Top =360 + Width =435 + Height =240 + FontSize =8 + Name ="labWildCardSuffix" + Caption ="xxx*" + FontName ="Tahoma" + LayoutCachedLeft =3746 + LayoutCachedTop =360 + LayoutCachedWidth =4181 + LayoutCachedHeight =600 + ThemeFontIndex =-1 + End + End + End + Begin CheckBox + OverlapFlags =247 + Left =4886 + Top =390 + TabIndex =6 + Name ="fcWildCardPrefix" + ControlSource ="WildCardPrefix" + DefaultValue ="False" + + LayoutCachedLeft =4886 + LayoutCachedTop =390 + LayoutCachedWidth =5146 + LayoutCachedHeight =630 + Begin + Begin Label + OverlapFlags =119 + Left =4451 + Top =360 + Width =435 + Height =240 + FontSize =8 + Name ="labWildCardPrefix" + Caption ="*xxx" + FontName ="Tahoma" + LayoutCachedLeft =4451 + LayoutCachedTop =360 + LayoutCachedWidth =4886 + LayoutCachedHeight =600 + ThemeFontIndex =-1 + End + End + End + Begin TextBox + OverlapFlags =85 + IMESentenceMode =3 + Left =56 + Top =29 + Width =2160 + Height =285 + FontSize =10 + Name ="fcDataField" + ControlSource ="DataField" + FontName ="Tahoma" + + LayoutCachedLeft =56 + LayoutCachedTop =29 + LayoutCachedWidth =2216 + LayoutCachedHeight =314 + ThemeFontIndex =-1 + End + Begin TextBox + OverlapFlags =85 + IMESentenceMode =3 + Left =7938 + Top =29 + Width =2056 + Height =285 + FontSize =10 + TabIndex =4 + Name ="fcControl2" + ControlSource ="Control2" + StatusBarText ="Mehrere Steuerelemente mit Komma trennen" + FontName ="Tahoma" + ConditionalFormat = Begin + 0x0100000090000000010000000100000000000000000000001700000000000000 , + 0x00000000ffffff00000000000000000000000000000000000000000000000000 , + 0x0000000000000000000000000000000000000000000000000000000000000000 , + 0x5b006300620043007200650061007400650043006f006e00740072006f006c00 , + 0x5d003d00540072007500650000000000 + End + HorizontalAnchor =2 + + LayoutCachedLeft =7938 + LayoutCachedTop =29 + LayoutCachedWidth =9994 + LayoutCachedHeight =314 + ThemeFontIndex =-1 + ConditionalFormat14 = Begin + 0x01000100000001000000000000000000000000000000ffffff00160000005b00 , + 0x6300620043007200650061007400650043006f006e00740072006f006c005d00 , + 0x3d005400720075006500000000000000000000000000000000000000000000 + End + End + Begin CheckBox + OverlapFlags =93 + Left =6222 + Top =390 + TabIndex =8 + Name ="cbCreateControl" + ControlSource ="CreateControl" + AfterUpdate ="[Event Procedure]" + DefaultValue ="False" + + LayoutCachedLeft =6222 + LayoutCachedTop =390 + LayoutCachedWidth =6482 + LayoutCachedHeight =630 + Begin + Begin Label + OverlapFlags =255 + Left =5831 + Top =360 + Width =414 + Height =240 + FontSize =8 + Name ="labCreateControl" + Caption ="New" + FontName ="Tahoma" + Tag ="LANG:" + LayoutCachedLeft =5831 + LayoutCachedTop =360 + LayoutCachedWidth =6245 + LayoutCachedHeight =600 + ThemeFontIndex =-1 + ForeThemeColorIndex =0 + ForeTint =100.0 + End + End + End + Begin OptionGroup + TabStop = NotDefault + SpecialEffect =0 + OldBorderStyle =0 + OverlapFlags =247 + Left =5839 + Top =336 + Width =4137 + Height =300 + TabIndex =9 + Name ="ogNewControlType" + ControlSource ="ControlType" + OnEnter ="[Event Procedure]" + + LayoutCachedLeft =5839 + LayoutCachedTop =336 + LayoutCachedWidth =9976 + LayoutCachedHeight =636 + Begin + Begin OptionButton + OverlapFlags =119 + Left =6689 + Top =396 + OptionValue =109 + Name ="ogfldTextbox" + + LayoutCachedLeft =6689 + LayoutCachedTop =396 + LayoutCachedWidth =6949 + LayoutCachedHeight =636 + Begin + Begin Label + OverlapFlags =247 + Left =6919 + Top =336 + Width =876 + Height =300 + Name ="labCreateTextbox" + Caption ="TextBox" + LayoutCachedLeft =6919 + LayoutCachedTop =336 + LayoutCachedWidth =7795 + LayoutCachedHeight =636 + End + End + End + Begin OptionButton + OverlapFlags =119 + Left =7992 + Top =396 + TabIndex =1 + OptionValue =111 + Name ="ogfldCombobox" + + LayoutCachedLeft =7992 + LayoutCachedTop =396 + LayoutCachedWidth =8252 + LayoutCachedHeight =636 + Begin + Begin Label + OverlapFlags =247 + Left =8219 + Top =336 + Width =1032 + Height =300 + Name ="labCreateCombobox" + Caption ="ComboBox" + LayoutCachedLeft =8219 + LayoutCachedTop =336 + LayoutCachedWidth =9251 + LayoutCachedHeight =636 + End + End + End + End + End + End + End + Begin FormFooter + Height =0 + Name ="Formularfuß" + AlternateBackThemeColorIndex =1 + AlternateBackShade =95.0 + BackThemeColorIndex =1 + End + End +End +CodeBehindForm +' See "frmFilterFormWizard_SF_Controls.cls" diff --git a/source/forms/frmFilterFormWizard_SF_Controls.cls b/source/forms/frmFilterFormWizard_SF_Controls.cls new file mode 100644 index 0000000..33bc2e7 --- /dev/null +++ b/source/forms/frmFilterFormWizard_SF_Controls.cls @@ -0,0 +1,358 @@ +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = True +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +'--------------------------------------------------------------------------------------- +' Form: frmFilterFormWizard_SF_Controls +'--------------------------------------------------------------------------------------- +'/** +' \author Josef Poetzl +' +' Wizard form subform for FilterControls import +' +' +'**/ +'--------------------------------------------------------------------------------------- +' +Option Compare Database +Option Explicit + +#Const ADODB_EARLYBINDING = 0 + +#If ADODB_EARLYBINDING = 1 Then + +#Else + Public Enum CursorTypeEnum + adOpenKeyset = 1 + End Enum + + Public Enum CursorLocationEnum + adUseClient = 3 + End Enum + + Public Enum LockTypeEnum + adLockOptimistic = 3 + End Enum +#End If + +Private WithEvents m_LngDict As L10nDict +Attribute m_LngDict.VB_VarHelpID = -1 + +Public Sub InitFilterForm(ByVal FrmRef As Form) + + InitDataSource + LoadControlsFromForm FrmRef + +End Sub + +Private Sub InitDataSource() + +#If ADODB_EARLYBINDING = 1 Then + Dim rst As ADODB.Recordset +#Else + Dim rst As Object +#End If + + Set rst = CreateObject("ADODB.Recordset") + rst.CursorLocation = adUseClient + rst.Open "select * from tabFilterControls", CodeProject.Connection, adOpenKeyset, adLockOptimistic + Set rst.ActiveConnection = Nothing + + Set Me.Recordset = rst + +End Sub + +Private Sub LoadControlsFromForm(ByVal FrmRef As Form) + + Dim ctl As Control + + Me.fcControl.RowSource = vbNullString + + If FrmRef Is Nothing Then + Exit Sub + End If + + For Each ctl In FrmRef.Controls + Select Case ctl.ControlType + Case AcControlType.acTextBox, AcControlType.acComboBox, _ + AcControlType.acCheckBox, AcControlType.acListBox, _ + AcControlType.acOptionButton, AcControlType.acOptionGroup, _ + AcControlType.acToggleButton + + Me.fcControl.AddItem ctl.Name + + End Select + Next + +End Sub + +Public Function AddControlsToImporter(ByVal Importer As FilterFormCodeImporter, ByVal FilterFormName As String, ByVal UseFilterDefinitionInTagProperty As Boolean) As Boolean + +#If ADODB_EARLYBINDING = 1 Then + Dim rst As ADODB.Recordset +#Else + Dim rst As Object +#End If + + Dim RelOp As String + Dim UseBetweenRelOp As Boolean + Dim FilterCtl As Control + Dim FrmDsgnr As FormDesigner + + Set rst = Me.Recordset.Clone + If rst.RecordCount = 0 Then + Exit Function + End If + + Dim DataFieldName As String + Dim ControlName As String, ControlName2 As String + + Dim SaveForm As Boolean + + If UseFilterDefinitionInTagProperty Then + Set FrmDsgnr = New FormDesigner + FrmDsgnr.FormName = FilterFormName + End If + + With rst + Do While Not .EOF + + RelOp = Nz(.Fields("RelationalOperator"), vbNullString) + UseBetweenRelOp = (RelOp = "SQL_Between") + + If UseFilterDefinitionInTagProperty Then + RelOp = GetRelationalOperatorKey(RelOp) + If .Fields("WildCardSuffix") = True Then + RelOp = RelOp & "*" + End If + If .Fields("WildCardPrefix") = True Then + RelOp = "*" & RelOp + End If + If .Fields("RelationalOperatorNot") = True Then + RelOp = "Not " & RelOp + End If + Else + If .Fields("WildCardSuffix") = True Then + RelOp = RelOp & " + SQL_Add_WildCardSuffix" + End If + If .Fields("WildCardPrefix") = True Then + RelOp = RelOp & " + SQL_Add_WildCardPrefix" + End If + If .Fields("RelationalOperatorNot") = True Then + RelOp = "SQL_Not + " & RelOp + End If + End If + + DataFieldName = Nz(.Fields("DataField").Value, vbNullString) + + If .Fields("CreateControl").Value = True Then + Set FilterCtl = InsertFormControl(FilterFormName, Nz(.Fields("ControlType").Value, acTextBox), DataFieldName, UseBetweenRelOp, ControlName, ControlName2, UseFilterDefinitionInTagProperty) + SaveForm = True + AddControlsToImporter = True + Else + ControlName = Nz(.Fields("Control").Value, vbNullString) + ControlName2 = Nz(.Fields("Control2"), vbNullString) + If UseFilterDefinitionInTagProperty Then + Set FilterCtl = FrmDsgnr.Form.Controls(ControlName) + End If + End If + + If UseFilterDefinitionInTagProperty Then + FilterCtl.Tag = GetFilterControlTag(Nz(.Fields("DataType").Value, vbNullString), RelOp, DataFieldName, ControlName2) + SaveForm = True + Else + ControlName = GetCheckedControlName(ControlName) + ControlName2 = GetCheckedControlName(ControlName2) + Importer.AddFilterControlDefinition DataFieldName, _ + Nz(.Fields("DataType"), vbNullString), _ + RelOp, _ + ControlName, _ + ControlName2 + End If + + Set FilterCtl = Nothing + ControlName = vbNullString + ControlName2 = vbNullString + .MoveNext + + Loop + End With + + If UseFilterDefinitionInTagProperty Then + Set FrmDsgnr = Nothing + End If + + If SaveForm Then + DoCmd.Save acForm, FilterFormName + End If + +End Function + +Private Function GetFilterControlTag(ByVal DataTypeText As String, ByVal RelOpText As String, ByVal DataFieldName As String, ByVal ControlName2 As String) As String + + Dim ControlTag As String + Const SeparatorChar As String = "|" + + ControlTag = Replace(DataTypeText, "SQL_", vbNullString) & SeparatorChar & RelOpText & SeparatorChar & DataFieldName & SeparatorChar & ControlName2 + + Do While Right(ControlTag, 1) = SeparatorChar + ControlTag = Left(ControlTag, Len(ControlTag) - 1) + Loop + + GetFilterControlTag = ControlTag + +End Function + +Private Function GetRelationalOperatorKey(ByVal RelationalOperatorCode As String) As String + With CodeProject.Connection.Execute("select RelationalOperator from tabRelationalOperators where RelationalOperatorCode = '" & Replace(RelationalOperatorCode, "'", "''") & "'") + If Not .EOF Then + GetRelationalOperatorKey = .Fields(0).Value + End If + .Close + End With +End Function + +Private Function InsertFormControl(ByVal FilterFormName As String, ByVal ControlType As AcControlType, ByVal DataFieldName As String, ByVal UseBetweenRelOp As Boolean, ByRef ControlName As String, ByRef Control2Name As String, ByVal UseFilterDefinitionInTagProperty As Boolean) As Control + + Const DistanceBetweenControls As Long = 72 + + Dim FilterCtl As Control + Dim LabCtl As Control + + Dim ControlCaption As String, Control2Caption As String + Dim CreateControl2 As Boolean + + ControlCaption = DataFieldName + If StrComp(Left(DataFieldName, 1), UCase(Left(DataFieldName, 1)), vbBinaryCompare) <> 0 Then + DataFieldName = UCase(Left(DataFieldName, 1)) & Mid(DataFieldName, 2) + End If + ControlName = GetCheckedControlName("fctl" & DataFieldName) + + With New FormDesigner + + .FormName = FilterFormName + + If UseBetweenRelOp Then + CreateControl2 = True + Control2Caption = ControlCaption & " bis" + If UseFilterDefinitionInTagProperty Then + Control2Name = "x" & ControlName & "Max" + Else + Control2Name = ControlName & "Max" + ControlName = ControlName & "Min" + End If + ControlCaption = ControlCaption & " von" + End If + + Set FilterCtl = .AddControl(ControlType, ControlName, acHeader, , , , , DistanceBetweenControls, True, ControlCaption) + ControlName = FilterCtl.Name + If CreateControl2 Then + Set LabCtl = FilterCtl.Controls(0) + Control2Name = .AddControl(ControlType, Control2Name, acHeader, LabCtl.Left + LabCtl.Width + DistanceBetweenControls, LabCtl.Top, , , DistanceBetweenControls, True, Control2Caption).Name + End If + + End With + + Set InsertFormControl = FilterCtl + +End Function + +Private Sub cbCreateControl_AfterUpdate() + + Dim CreateNewControl As Boolean + + CreateNewControl = Me.cbCreateControl.Value + + With Me.ogNewControlType + .TabStop = Nz(.Value, False) + If CreateNewControl Then + .Value = acTextBox + Else + .Value = Null + End If + + End With + +End Sub + +Private Sub Form_Current() + Me.ogNewControlType.TabStop = Nz(Me.cbCreateControl.Value) +End Sub + +Private Sub Form_Load() + L10n.TranslateControls Me.Controls + Set m_LngDict = L10n +End Sub + +Private Sub m_LngDict_DictionaryRefreshed() + L10n.TranslateControls Me.Controls +End Sub + +Private Sub ogNewControlType_Enter() + Me.ogNewControlType.Locked = (Me.cbCreateControl.Value = False) +End Sub + +Private Function GetCheckedControlName(ByVal ControlNameToCheck As String) As String + GetCheckedControlName = Replace(ControlNameToCheck, " ", "_") +End Function + +Public Sub InsertFilterRecord(ByVal DataFieldName As String, ByVal DataFieldType As DAO.DataTypeEnum) + + Dim FieldDataType As SqlFieldDataType + + Select Case DataFieldType + Case DAO.DataTypeEnum.dbBinary, DAO.DataTypeEnum.dbGUID, DAO.DataTypeEnum.dbVarBinary + Exit Sub + Case 101 ' 101 = DAO.DataTypeEnum.dbAttachment + Exit Sub + End Select + + FieldDataType = ConvertDaoDataTypeToSqlFieldDataType(DataFieldType) + + With Me.Recordset + .AddNew + .Fields("DataField").Value = DataFieldName + .Fields("DataType").Value = ConvertSqlFieldDataTypeToString(FieldDataType) + If FieldDataType = SQL_Text Then + .Fields("RelationalOperator").Value = "SQL_Like" + .Fields("WildCardSuffix").Value = True + Else + .Fields("RelationalOperator").Value = "SQL_Equal" + .Fields("WildCardSuffix").Value = False + End If + .Fields("CreateControl").Value = True + .Fields("ControlType").Value = acTextBox + .Fields("WildCardPrefix").Value = False + .Fields("RelationalOperatorNot").Value = False + .Update + End With + +End Sub + +Private Function ConvertDaoDataTypeToSqlFieldDataType(ByVal DT As DAO.DataTypeEnum) As SqlFieldDataType + + Select Case DT + Case DAO.DataTypeEnum.dbBigInt, DAO.DataTypeEnum.dbByte, DAO.DataTypeEnum.dbDecimal, DAO.DataTypeEnum.dbCurrency, DAO.DataTypeEnum.dbDouble, DAO.DataTypeEnum.dbFloat, DAO.DataTypeEnum.dbInteger, DAO.DataTypeEnum.dbLong, DAO.DataTypeEnum.dbNumeric, DAO.DataTypeEnum.dbSingle + ConvertDaoDataTypeToSqlFieldDataType = SqlFieldDataType.SQL_Numeric + Case DAO.DataTypeEnum.dbDate, DAO.DataTypeEnum.dbTime + ConvertDaoDataTypeToSqlFieldDataType = SqlFieldDataType.SQL_Date + Case DAO.DataTypeEnum.dbBoolean + ConvertDaoDataTypeToSqlFieldDataType = SqlFieldDataType.SQL_Boolean + Case Else + ConvertDaoDataTypeToSqlFieldDataType = SqlFieldDataType.SQL_Text + End Select + +End Function + +Private Function ConvertSqlFieldDataTypeToString(ByVal DT As SqlFieldDataType) As String + Select Case DT + Case SqlFieldDataType.SQL_Text + ConvertSqlFieldDataTypeToString = "SQL_Text" + Case SqlFieldDataType.SQL_Numeric + ConvertSqlFieldDataTypeToString = "SQL_Numeric" + Case SqlFieldDataType.SQL_Date + ConvertSqlFieldDataTypeToString = "SQL_Date" + Case SqlFieldDataType.SQL_Boolean + ConvertSqlFieldDataTypeToString = "SQL_Boolean" + End Select +End Function diff --git a/source/frmFilterFormWizard.frm b/source/frmFilterFormWizard.frm deleted file mode 100644 index f6a049ee1badc779e0b61b1024c9ab10056ba2dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204528 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 diff --git a/source/frmFilterFormWizard_SF_Controls.frm b/source/frmFilterFormWizard_SF_Controls.frm deleted file mode 100644 index 8cbfab20dbf4b9aa306b699a66ce6bf31274750c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129282 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\015\012<codelib><file>" +End +Begin + Comment ="_AXL:base/Autoexec.macro</file></codelib>CheckApplicationStartUpMethod()" +End diff --git a/source/codelib/_codelib/addins/shared/ACLibGitHubImporter.cls b/source/modules/ACLibGitHubImporter.cls similarity index 98% rename from source/codelib/_codelib/addins/shared/ACLibGitHubImporter.cls rename to source/modules/ACLibGitHubImporter.cls index 61acbc9..18e23b4 100644 --- a/source/codelib/_codelib/addins/shared/ACLibGitHubImporter.cls +++ b/source/modules/ACLibGitHubImporter.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -126,24 +126,24 @@ End Property ' Sub: UpdateCodeModules '--------------------------------------------------------------------------------------- Public Sub UpdateCodeModules() - + Dim SelectSql As String Dim IsFirstRecord As Boolean - + SelectSql = "select id, url from usys_Appfiles where url > ''" - + With CreateObject("ADODB.Recordset") .CursorLocation = 3 'adUseClient .Open SelectSql, CodeProject.Connection, 1, 1 ' 1 = adOpenKeyset, 1 = adLockReadOnly Set .ActiveConnection = Nothing - + IsFirstRecord = True Do While Not .EOF UpdateCodeModuleInTable .Fields(0).Value, .Fields(1).Value, IsFirstRecord If IsFirstRecord Then IsFirstRecord = False .MoveNext Loop - + .Close End With @@ -153,11 +153,11 @@ End Sub Private Sub UpdateCodeModuleInTable(ByVal ModuleName As String, ByVal ACLibPath As String, Optional ByVal Requery As Boolean = False) Dim TempFile As String - - + + TempFile = FileTools.TempPath & ModuleName & FileTools.GetFileExtension(ACLibPath, True) DownloadACLibFileFromWeb ACLibPath, TempFile - + CurrentApplication.SaveAppFile ModuleName, TempFile, False, "SccRev", Me.RevisionString(Requery) Kill TempFile @@ -169,21 +169,21 @@ Friend Sub DownloadACLibFileFromWeb(ByVal ACLibPath As String, ByVal TargetFileP DownLoadUrl = FillRepositoryData(GitHubContentBaseUrl) DownLoadUrl = Replace(DownLoadUrl, "{path}", ACLibPath) - + DownloadFileFromWeb DownLoadUrl, TargetFilePath End Sub Private Function FillRepositoryData(ByVal StringWithPlaceHolder As String) As String - + Dim TempValue As String - + TempValue = Replace(StringWithPlaceHolder, "{owner}", RepositoryOwner) TempValue = Replace(TempValue, "{repo}", RepositoryName) TempValue = Replace(TempValue, "{branch}", BranchName) - + FillRepositoryData = TempValue - + End Function Private Function GetLastCommitFromWeb() As Date @@ -194,20 +194,20 @@ Private Function GetLastCommitFromWeb() As Date Dim CommitUrl As String Dim LastCommitInfo As String - + CommitUrl = FillRepositoryData(GitHubApiBaseUrl) & "commits/" & BranchName Const RevisionTag As String = "Revision " Dim JsonString As String JsonString = GetJsonString(CommitUrl) - + Dim LastCommitPos As Long LastCommitPos = InStr(1, JsonString, """committer"":") LastCommitPos = InStr(LastCommitPos, JsonString, """date"":") + Len("date"": """) '"date": "2023-05-14T09:34:04Z" LastCommitInfo = Mid(JsonString, LastCommitPos, Len("2023-05-14T09:34:04")) - + GetLastCommitFromWeb = CDate(Replace(LastCommitInfo, "T", " ")) End Function @@ -218,13 +218,13 @@ Friend Function GetJsonString(ByVal ApiUrl As String) As String Dim ApiAuthToken As String Dim json As Object Dim xml As Object 'MSXML2.XMLHTTP6 - + ApiUrl = FillRepositoryData(ApiUrl) - + ApiAuthToken = GitHubApiAuthorizationToken Set xml = CreateObject("MSXML2.XMLHTTP.6.0") - + xml.Open "GET", ApiUrl, False If Len(ApiAuthToken) > 0 Then xml.setRequestHeader "Authorization", ApiAuthToken @@ -235,7 +235,7 @@ Friend Function GetJsonString(ByVal ApiUrl As String) As String DoEvents Wend ApiResponse = xml.responseText - + GetJsonString = ApiResponse End Function @@ -245,7 +245,7 @@ Private Sub OpenIEandLoadHtmlDoc(ByVal Url As String, ByRef IE As Object, ByRef Dim TimeOut As Long Dim RunInTimeOut As Boolean Dim ErrHdlCnt As Long - + Dim ErrNumber As Long Dim ErrDescription As String @@ -263,16 +263,16 @@ On Error Resume Next On Error GoTo 0 Err.Raise ErrNumber, "ACLibWebImporter.OpenIEandLoadHtmlDoc", ErrDescription End If - + On Error GoTo 0 - + With IE TimeOut = Timer + 10 Do While .Busy And (Not RunInTimeOut) DoEvents If Timer > TimeOut Then RunInTimeOut = True Loop - + If Not RunInTimeOut Then .Visible = 0 .navigate Url @@ -282,7 +282,7 @@ On Error GoTo 0 If Timer > TimeOut Then RunInTimeOut = True Loop End If - + If RunInTimeOut Then On Error Resume Next IE.Quit @@ -290,9 +290,9 @@ On Error GoTo 0 On Error GoTo 0 Err.Raise vbObjectError, "OpenIEandLoadHtmlDoc", "Time-Out beim Laden von '" & Url & "'" End If - + Set HtmlDoc = IE.Document - + End With End Sub diff --git a/source/codelib/_codelib/addins/shared/AppFileCodeModulTransfer.cls b/source/modules/AppFileCodeModulTransfer.cls similarity index 98% rename from source/codelib/_codelib/addins/shared/AppFileCodeModulTransfer.cls rename to source/modules/AppFileCodeModulTransfer.cls index 41b4f0f..5c83592 100644 --- a/source/codelib/_codelib/addins/shared/AppFileCodeModulTransfer.cls +++ b/source/modules/AppFileCodeModulTransfer.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -64,7 +64,7 @@ End Property ' '--------------------------------------------------------------------------------------- Public Sub TransferCodeModules(ParamArray CodeModulNames() As Variant) - + Dim i As Long Dim ArrSize As Long @@ -86,11 +86,11 @@ End Sub ' '--------------------------------------------------------------------------------------- Public Function ReplaceCodeModules(ParamArray CodeModulNames() As Variant) As Boolean - + Dim i As Long Dim ArrSize As Long Dim vbp As Object 'VBProject - + 'VBProject of the application: Set vbp = VbeTools.CurrentVbProject @@ -98,19 +98,19 @@ Public Function ReplaceCodeModules(ParamArray CodeModulNames() As Variant) As Bo If Not (vbp Is Nothing) Then ArrSize = UBound(CodeModulNames) For i = 0 To ArrSize - + If CheckCodeModule(CodeModulNames(i)) And (UseVbComponentsImport = False) Then - 'Modul löschen + 'Modul löschen vbp.VBComponents.Remove vbp.VBComponents(CodeModulNames(i)) End If - + 'Module aktualisieren TransferCodeModul CurrentProject, acModule, CodeModulNames(i) - + Next ReplaceCodeModules = True End If - + Set vbp = Nothing End Function @@ -129,7 +129,7 @@ End Function ' '--------------------------------------------------------------------------------------- Public Function CheckCodeModules(ParamArray CodeModulNames() As Variant) As Boolean - + Dim i As Long Dim ModulesExists As Boolean Dim ArrSize As Long @@ -139,7 +139,7 @@ Public Function CheckCodeModules(ParamArray CodeModulNames() As Variant) As Bool For i = 0 To ArrSize ModulesExists = ModulesExists And CheckCodeModule(CodeModulNames(i), False) Next - + CheckCodeModules = ModulesExists End Function @@ -160,7 +160,7 @@ End Function '--------------------------------------------------------------------------------------- Public Function CheckCodeModule(ByVal CodeModulName As String, _ Optional ByVal TransferMissingModule As Boolean = False) As Boolean - + Dim rst As DAO.Recordset Dim IsMissing As Boolean @@ -168,12 +168,12 @@ Public Function CheckCodeModule(ByVal CodeModulName As String, _ IsMissing = rst.EOF rst.Close Set rst = Nothing - + If IsMissing And TransferMissingModule Then TransferCodeModul CurrentProject, acModule, CodeModulName IsMissing = False End If - + CheckCodeModule = Not IsMissing End Function @@ -194,7 +194,7 @@ Public Sub TransferCodeModul(ByVal TargetProject As Access.CurrentProject, _ ByVal ObjType As AcObjectType, ByVal CodeModulName As String) Dim FileName As String - + FileName = FileTools.GetNewTempFileName CurrentApplication.CreateAppFile CodeModulName, FileName If UseVbComponentsImport And ObjType = acModule Then @@ -215,12 +215,12 @@ Public Sub TransferCodeModul(ByVal TargetProject As Access.CurrentProject, _ TargetProject.Application.LoadFromText ObjType, CodeModulName, FileName End If Kill FileName - - + + End Sub Private Sub ConvertToSaveAsTextFile(ByVal FilePath As String) - + Const SEARCHSTRING_ATTRIBUTNAME_BEGIN As String = "Attribute VB_Name = """ Dim Pos As Long @@ -233,23 +233,23 @@ Private Sub ConvertToSaveAsTextFile(ByVal FilePath As String) CheckString = String$(LOF(FileNumber), 0) Get FileNumber, , CheckString Close FileNumber - + Pos = InStr(1, CheckString, SEARCHSTRING_ATTRIBUTNAME_BEGIN) If Pos <= 1 Then Exit Sub End If - + CheckString = Mid(CheckString, Pos) - + NewFile = FilePath & "_SaT" FileNumber = FreeFile Open NewFile For Binary Access Write As FileNumber Put FileNumber, , CheckString Close FileNumber - + Kill FilePath Name NewFile As FilePath - + End Sub Private Property Get CurrentCodeModulWriter() As CodeModuleWriter diff --git a/source/codelib/base/ApplicationHandler.cls b/source/modules/ApplicationHandler.cls similarity index 99% rename from source/codelib/base/ApplicationHandler.cls rename to source/modules/ApplicationHandler.cls index 85b4446..9306eba 100644 --- a/source/codelib/base/ApplicationHandler.cls +++ b/source/modules/ApplicationHandler.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -66,12 +66,12 @@ Private Const SYSCOLOR_COLOR_APPWORKSPACE As Long = 12 Private Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _ ByVal HWnd1 As Long, ByVal HWnd2 As Long, _ ByVal Lpsz1 As String, ByVal Lpsz2 As String) As Long - + Private Declare PtrSafe Function CreateSolidBrush Lib "gdi32.dll" (ByVal CrColor As Long) As Long Private Declare PtrSafe Function SetClassLong Lib "user32" Alias "SetClassLongA" ( _ ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long - + Private Declare PtrSafe Function RedrawWindow Lib "user32" ( _ ByVal Hwnd As Long, LprcUpdate As Any, _ ByVal HrgnUpdate As Long, ByVal FuRedraw As Long) As Long @@ -83,12 +83,12 @@ Private Declare PtrSafe Function GetSysColor Lib "user32" (ByVal NumIndex As Lon Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _ ByVal HWnd1 As Long, ByVal HWnd2 As Long, _ ByVal Lpsz1 As String, ByVal Lpsz2 As String) As Long - + Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal CrColor As Long) As Long Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" ( _ ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long - + Private Declare Function RedrawWindow Lib "user32" ( _ ByVal Hwnd As Long, LprcUpdate As Any, _ ByVal HrgnUpdate As Long, ByVal FuRedraw As Long) As Long @@ -141,12 +141,12 @@ Public Event ExtensionProcedureCall(ByVal Key As String, ByVal ProcedureName As Public Event AppFileBeforeCreateFile( _ ByVal sFileID As String, ByVal sFileName As String, _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant) - + Public Event AppFileBeforeSaveFile( _ ByVal sFileID As String, ByVal sFileName As String, ByVal SaveVersion As Boolean, _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant, _ ByVal ExtFieldName As String, ByVal ExtFieldValue As Variant) - + Public Event UpdateApplication( _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant) @@ -158,7 +158,7 @@ Public Event NewVersionExists( _ Public Event BeforeOpenStartForm( _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant) - + Public Event BeforeStartApplication( _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant) @@ -184,28 +184,28 @@ On Error Resume Next End Sub Public Sub Dispose(Optional ByRef ResumeMode As ApplicationHandlerResumeModes, Optional ByRef ResumeMessage As Variant) - + Dim TempResumeMode As ApplicationHandlerResumeModes Dim TempResumeMessage As Variant - + On Error Resume Next - + RaiseEvent BeforeDispose(TempResumeMode, TempResumeMessage) If TempResumeMode = AppResumeMode_Cancel Then ResumeMode = TempResumeMode ResumeMessage = TempResumeMessage Exit Sub End If - + Set m_AppDb = Nothing - + m_Disposed = True - + RaiseEvent AfterDispose(TempResumeMode, TempResumeMessage) - + ResumeMode = AppResumeMode_Completed ResumeMessage = TempResumeMessage - + End Sub '--------------------------------------------------------------------------------------- @@ -223,11 +223,11 @@ End Sub ' '--------------------------------------------------------------------------------------- Public Function Start(Optional ByRef ResumeMessage As Variant) As Boolean - + Dim CurrentStartFormName As String Dim EventResumeMode As ApplicationHandlerResumeModes Dim EventResumeMessage As Variant - + 'Event interface for application start ' ... enables e.g. the execution of a login process RaiseEvent BeforeStartApplication(EventResumeMode, EventResumeMessage) @@ -257,7 +257,7 @@ Public Function Start(Optional ByRef ResumeMessage As Variant) As Boolean Exit Function End If End If - + 'Event interface for start form '... allows changing the start form by means of extensions ' e.g. if a user-specific form is to be opened @@ -274,7 +274,7 @@ Public Function Start(Optional ByRef ResumeMessage As Variant) As Boolean Case Else CurrentStartFormName = Me.ApplicationStartFormName End Select - + If Len(CurrentStartFormName) > 0 Then DoCmd.OpenForm CurrentStartFormName End If @@ -357,9 +357,9 @@ Public Property Get Version() As String '**/ m_APPLICATIONVERSION = "" End If - + Version = m_APPLICATIONVERSION - + End Property Public Property Let Version(ByVal AppVersion As String) @@ -440,7 +440,7 @@ Friend Sub SetAppIcon(ByVal AppIconFile As String, Optional ByVal UseAppIconForF SetAppDbProperty DBPROPNAME_APPICON, dbText, AppIconFile SetAppDbProperty DBPROPNAME_USE_APPICON_FOR_FRMRPT, dbBoolean, UseAppIconForFrmRpt Else - '1. Prüfen ob AppFile-Erweiterung vorhanden ist + '1. Prüfen ob AppFile-Erweiterung vorhanden ist RaiseEvent CheckExtension(EXTENSION_KEY_APPFILE, CheckVar) If CheckVar Then CheckVar = CreateAppFile("AppIcon", AppIconFile) @@ -478,10 +478,10 @@ Public Sub SetApplicationProperty(ByVal PropName As String, ByVal PropValue As V End Sub Private Sub SetAppDbProperty(ByVal PropName As String, ByVal PropType As Long, ByVal PropValue As Variant) - + Dim db As DAO.Database Dim PropCol As DAO.Properties - + Set db = AppDb Set PropCol = db.Properties If DbPropertyExists(PropCol, PropName) Then @@ -499,13 +499,13 @@ Private Sub SetAppDbProperty(ByVal PropName As String, ByVal PropType As Long, B End Sub Private Sub DeleteAppDbProperty(ByVal PropName As String) - + Dim db As DAO.Database Dim PropCol As DAO.Properties Set db = AppDb Set PropCol = db.Properties - + If DbPropertyExists(PropCol, PropName) Then PropCol.Delete PropName End If @@ -513,7 +513,7 @@ Private Sub DeleteAppDbProperty(ByVal PropName As String) End Sub Private Function DbPropertyExists(ByRef PropCol As DAO.Properties, ByVal PropName As String) As Boolean - + Dim Prop As DAO.Property For Each Prop In PropCol @@ -531,7 +531,7 @@ Private Sub WriteApplicationLogEntry(ByVal Msg As String) Dim FileNo As Long LogFile = CurrentProject.Path & "\" & LOG_FILE - + FileNo = FreeFile Open LogFile For Append As FileNo Print #FileNo, Msg @@ -548,7 +548,7 @@ Public Sub WriteLog(ByVal Msg As String, _ Dim EventResumeMessage As Variant RaiseEvent NewAppLog(LogType, Msg, Args, ResumeMode, EventResumeMessage) - + If ResumeMode = 0 And (WriteToFileIfNoEventResponse Or WriteLogToFileIfNoEventResponse Or LogType = AppLogType_Error) Then 'no one has reacted or reported an abort => WriteApplicationLogEntry Msg = Now() & ": " & Msg @@ -652,7 +652,7 @@ Public Function NewerAppVersionExists() As Boolean Dim ResumeMode As ApplicationHandlerResumeModes Dim ResumeMessage As Boolean - + RaiseEvent NewVersionExists(ResumeMode, ResumeMessage) NewerAppVersionExists = ResumeMessage @@ -661,7 +661,7 @@ End Function Private Function CheckVersionUpdate() As Boolean ' True = Update required - + Dim EventResumeMode As ApplicationHandlerResumeModes Dim EventResumeMessage As Variant @@ -710,17 +710,17 @@ Public Function GetExtensionInstance(ByVal ExtensionKey As String, Optional ByVa RaiseEvent ExtensionInstance(ExtensionKey, InstanceKey, ExtRef) Set GetExtensionInstance = ExtRef - + End Function Public Function GetExtensionProperty(ByVal ExtensionKey As String, ByVal PropertyName As String, _ Optional ByVal ValueIfMissing As Variant = Empty) As Variant - + Dim EventResumeMode As ApplicationHandlerResumeModes Dim EventResumeMessage As Variant RaiseEvent ExtensionPropertyLookup(ExtensionKey, PropertyName, EventResumeMode, EventResumeMessage) - + If EventResumeMode = AppResumeMode_Completed Then GetExtensionProperty = EventResumeMessage Else @@ -731,7 +731,7 @@ End Function Public Function UpdateApplication() As Boolean ' True = Close application - + ' => Outsourced to extension: this makes the usage more flexible ' and everyone can choose which update method to follow @@ -764,7 +764,7 @@ End Function Public Sub CallExtensionProcedure(ByVal Key As String, ByVal ProcedureName As String, _ ByRef ResumeMode As ApplicationHandlerResumeModes, ByRef ResumeMessage As Variant, _ ByRef Params() As Variant) - + RaiseEvent ExtensionProcedureCall(Key, ProcedureName, ResumeMode, ResumeMessage, Params) - + End Sub diff --git a/source/codelib/base/ApplicationHandler_AppFile.cls b/source/modules/ApplicationHandler_AppFile.cls similarity index 97% rename from source/codelib/base/ApplicationHandler_AppFile.cls rename to source/modules/ApplicationHandler_AppFile.cls index c6cdddf..49979eb 100644 --- a/source/codelib/base/ApplicationHandler_AppFile.cls +++ b/source/modules/ApplicationHandler_AppFile.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -7,7 +7,7 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False -Attribute VB_Description = "Erweiterung für ApplicationHandler-Klasse: Anwendungsspezifische Dateien verwalten" +Attribute VB_Description = "Erweiterung für ApplicationHandler-Klasse: Anwendungsspezifische Dateien verwalten" '--------------------------------------------------------------------------------------- ' Class: base.ApplicationHandler_File '--------------------------------------------------------------------------------------- @@ -108,10 +108,10 @@ Private Sub GetExtensionPropertyLookup(ByVal PropertyName As String, _ Select Case PropertyName Case EXTENSION_PROPERTY_APPFILETABLENAME ResumeMessage = TABLE_APPFILES - + Case Else 'Property wurde nicht erkannt ResumeMode = AppResumeMode_Error - + End Select End Sub @@ -149,34 +149,34 @@ Public Function CreateAppFile(ByVal FileID As String, ByVal FileName As String, With CodeDb.OpenRecordset(SelectSql) If Not .EOF Then - + Set fld = .Fields(0) FieldSize = fld.FieldSize - + If FieldSize > 0 Then ReDim Binfile(FieldSize - 1) Binfile = fld.GetChunk(0, FieldSize) CreateFileFromByteArray FileName, Binfile CreateAppFile = True End If - + End If .Close End With - + End Function Private Sub CreateFileFromByteArray(ByVal FileName As String, ByRef Binfile() As Byte) - + Dim FileNo As Integer - + FileTools.CreateDirectoryIfMissing FileTools.GetDirFromFullFileName(FileName) FileNo = FreeFile Open FileName For Binary As #FileNo Put #FileNo, , Binfile() Close #FileNo - + End Sub '--------------------------------------------------------------------------------------- @@ -207,7 +207,7 @@ Public Function SaveAppFile(ByVal FileID As String, ByVal FileName As String, _ Dim Version As String Dim FileInfo As WinApiFileInfo Dim SelectSql As String - + On Error GoTo HandleErr FileNo = FreeFile @@ -250,20 +250,20 @@ On Error GoTo HandleErr End If rst.Fields(TABLE_FIELD_VERSION) = Version End If - + If Len(ExtFieldName) > 0 Then rst.Fields(ExtFieldName).Value = ExtFieldValue End If - + rst.Update rst.Close Set rst = Nothing - + SaveAppFile = True ExitHere: Exit Function - + HandleErr: Dim TabCreateErrCnt As Long Dim ErrNumber As Long, ErrDescription As String @@ -284,7 +284,7 @@ HandleErr: End Function Private Function CreateAppFileTable() As Boolean - + Dim CreateTableSql As String CreateTableSql = "create table " & TABLE_APPFILES & " ( " & TABLE_FIELD_ID & " varchar(20) primary key, " & _ @@ -309,10 +309,10 @@ Private Sub m_ApplicationHandler_AppFileBeforeCreateFile(ByVal FileID As String, Completed = CreateAppFile(FileID, FileName) If Completed Then ResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Completed - Else 'Fehler rückmelden + Else 'Fehler rückmelden ResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Error End If - + End Sub ' AppFileBeforeSaveFile @@ -329,5 +329,5 @@ Private Sub m_ApplicationHandler_AppFileBeforeSaveFile(ByVal FileID As String, B Else 'resume error ResumeMode = ApplicationHandlerResumeModes.AppResumeMode_Error End If - + End Sub diff --git a/source/codelib/base/ApplicationHandler_ExtensionCollection.cls b/source/modules/ApplicationHandler_ExtensionCollection.cls similarity index 99% rename from source/codelib/base/ApplicationHandler_ExtensionCollection.cls rename to source/modules/ApplicationHandler_ExtensionCollection.cls index 66233f5..eb765b0 100644 --- a/source/codelib/base/ApplicationHandler_ExtensionCollection.cls +++ b/source/modules/ApplicationHandler_ExtensionCollection.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -88,7 +88,7 @@ Public Sub Add(ByVal ExtensionRef As Object) End Sub Public Sub Dispose() - + Dim MaxCnt As Long Dim CheckCnt As Long diff --git a/source/codelib/base/ApplicationHandler_Version.cls b/source/modules/ApplicationHandler_Version.cls similarity index 98% rename from source/codelib/base/ApplicationHandler_Version.cls rename to source/modules/ApplicationHandler_Version.cls index 6299eb5..dacb8fb 100644 --- a/source/codelib/base/ApplicationHandler_Version.cls +++ b/source/modules/ApplicationHandler_Version.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -80,11 +80,11 @@ Private Sub m_ApplicationHandler_ExtensionProcedureCall(ByVal ExtensionKeyToChec If ExtensionKeyToCheck <> EXTENSION_KEY Then Exit Sub End If - + On Error GoTo HandleErr - + ResumeMode = AppResumeMode_Completed - + Select Case ProcedureName Case "NewVersionExists" ResumeMessage = NewVersionExists(ProcParams(0), ProcParams(1)) @@ -93,11 +93,11 @@ On Error GoTo HandleErr End Select Exit Sub - + HandleErr: ResumeMode = AppResumeMode_Error ResumeMessage = Err.Description - + End Sub 'ExtensionPropertyLookup @@ -120,7 +120,7 @@ End Sub Public Function NewVersionExists(Optional ByRef NewVersion As Variant, Optional ByRef VersionRemarks As Variant) As Boolean NewVersionExists = (CheckVersion(NewVersion, VersionRemarks) = VerState_Newer) - + End Function @@ -135,11 +135,11 @@ Private Sub GetExtensionPropertyLookup(ByVal PropertyName As String, _ ResumeMode = AppResumeMode_Completed Select Case PropertyName - + Case Else 'Property was not recognized ResumeMode = AppResumeMode_Error ResumeMessage = "Property '" & PropertyName & "' is not supported" - + End Select End Sub @@ -162,10 +162,10 @@ Public Function CheckVersion(Optional ByRef NewVersion As Variant, Optional ByRe Dim DownloadVersion As String Dim DownloadVersionRemarks As String - + DownloadVersion = GetVersionFromDownloadSource(XmlVersionCheckFile, DownloadVersionRemarks) CheckVersion = CompareVersions(m_ApplicationHandler.Version, DownloadVersion) - + If CheckVersion = VerState_Newer Then NewVersion = DownloadVersion VersionRemarks = DownloadVersionRemarks @@ -184,13 +184,13 @@ End Property Private Function GetVersionFromDownloadSource(ByVal XmlFile As String, ByRef VersionRemarks As String) As String Dim XmlDoc As Object ' MSXML2.DOMDocument60 - + Set XmlDoc = CreateObject("MSXML.DOMDocument") 'New MSXML2.DOMDocument60 XmlDoc.async = False If Not XmlDoc.Load(XmlFile) Then Err.Raise XmlDoc.parseError.errorCode, , XmlDoc.parseError.Reason End If - + GetVersionFromDownloadSource = XmlDoc.getElementsByTagName("version").Item(0).Text VersionRemarks = XmlDoc.getElementsByTagName("remarks").Item(0).Text @@ -204,7 +204,7 @@ Private Function GetVersionNumbers(ByVal VersionString As String) As Long() VersionNumberStrings = Split(VersionString, ".") ReDim VersionNumbers(UBound(VersionNumberStrings)) - + Dim i As Long For i = LBound(VersionNumberStrings) To UBound(VersionNumberStrings) VersionNumbers(i) = Val(VersionNumberStrings(i)) @@ -218,18 +218,18 @@ Private Function CompareVersions(ByVal BaseVersion As String, ByVal NewVersion A Dim BaseVersionNumbers() As Long Dim NewVersionNumbers() As Long - + BaseVersionNumbers = GetVersionNumbers(BaseVersion) NewVersionNumbers = GetVersionNumbers(NewVersion) - + Dim i As Long - + Dim MaxIndex As Long MaxIndex = UBound(NewVersionNumbers) If UBound(BaseVersionNumbers) < MaxIndex Then MaxIndex = UBound(BaseVersionNumbers) End If - + For i = LBound(NewVersionNumbers) To MaxIndex If BaseVersionNumbers(i) <> NewVersionNumbers(i) Then CompareVersions = -1 + 2 * Abs(BaseVersionNumbers(i) > NewVersionNumbers(i)) diff --git a/source/codelib/_codelib/addins/shared/CodeModuleWriter.cls b/source/modules/CodeModuleWriter.cls similarity index 97% rename from source/codelib/_codelib/addins/shared/CodeModuleWriter.cls rename to source/modules/CodeModuleWriter.cls index 8fb4d24..1a93992 100644 --- a/source/codelib/_codelib/addins/shared/CodeModuleWriter.cls +++ b/source/modules/CodeModuleWriter.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -38,14 +38,14 @@ Option Explicit #Else Private m_CodeModule As Object Private m_CurrentVbProject As Object - + Public Enum vbext_ProcKind vbext_pk_Proc = 0 vbext_pk_Let = 1 vbext_pk_Set = 2 vbext_pk_Get = 3 End Enum - + Public Enum vbext_ComponentType vbext_ct_StdModule = 1 vbext_ct_ClassModule = 2 @@ -69,7 +69,7 @@ Public Property Get CodeModule() As Object #End If Set CodeModule = m_CodeModule - + End Property #If VBIDE_EARLYBINDING Then @@ -95,7 +95,7 @@ Public Sub AddCodeToEventProcedure(ByVal EventName As String, ByVal ObjectName A Dim ProcEndLine As Long Dim CodeCheckLineStart As Long Dim CodeCheckLineEnd As Long - + StartLine = FindEventProcedureBodyLine(EventName, ObjectName, ProcEndLine) If StartLine < 0 Then @@ -105,11 +105,11 @@ Public Sub AddCodeToEventProcedure(ByVal EventName As String, ByVal ObjectName A CodeCheckLineEnd = ProcEndLine CodeExists = m_CodeModule.Find(Code, CodeCheckLineStart, 0, CodeCheckLineEnd, 0, True) End If - + If Not CodeExists Then m_CodeModule.InsertLines StartLine + 1, vbNewLine & Code End If - + End Sub Private Function FindEventProcedureBodyLine(ByVal EventName As String, ByVal ObjectName As String, _ @@ -164,7 +164,7 @@ Friend Property Get CurrentVbProject() As Object If m_CurrentVbProject Is Nothing Then Set m_CurrentVbProject = VbeTools.CurrentVbProject End If - + Set CurrentVbProject = m_CurrentVbProject End Property @@ -194,19 +194,19 @@ Public Sub ImportVbComponent(ByVal ComponentType As vbext_ComponentType, ByVal C End If Next - If CodeModuleExists Then ' überprüfen, ob Typen übereinstimmen + If CodeModuleExists Then ' überprüfen, ob Typen übereinstimmen If vbc.Type <> ComponentType Then VbcCol.Remove vbc Set vbc = Nothing CodeModuleExists = False End If End If - + If Not CodeModuleExists Then Set vbc = VbcCol.Add(ComponentType) vbc.Name = CodeModulName End If - + Set cm = vbc.CodeModule cm.DeleteLines 1, cm.CountOfLines cm.AddFromFile ImportFile @@ -218,8 +218,8 @@ Public Sub ImportVbComponent(ByVal ComponentType As vbext_ComponentType, ByVal C 'End DeleteClassHeaderLinesFromCodeModul cm End If - - 'Leerzeilen am Ende säubern + + 'Leerzeilen am Ende säubern Do While Len(Trim$(cm.Lines(cm.CountOfLines, 1))) = 0 And cm.CountOfLines > 1 cm.DeleteLines cm.CountOfLines Loop @@ -240,10 +240,10 @@ Private Function GetComponentTypeFromFile(ByVal FilePath As String) As vbext_Com CheckString = String$(LOF(FileNumber), 0) Get FileNumber, , CheckString Close FileNumber - - 'Pos von VB_Name ermitteln (= Kennzeichen für Standardmodul oder Klasse) + + 'Pos von VB_Name ermitteln (= Kennzeichen für Standardmodul oder Klasse) Pos = InStr(1, CheckString, SEARCHSTRING_ATTRIBUTNAME_BEGIN) - + 'Typ bestimmen If Pos > 0 Then CmType = vbext_ComponentType.vbext_ct_StdModule diff --git a/source/codelib/file/FileTools.bas b/source/modules/FileTools.bas similarity index 98% rename from source/codelib/file/FileTools.bas rename to source/modules/FileTools.bas index b12fcdd..9fd2547 100644 --- a/source/codelib/file/FileTools.bas +++ b/source/modules/FileTools.bas @@ -1,5 +1,5 @@ -Attribute VB_Name = "FileTools" -Attribute VB_Description = "Funktionen für Dateioperationen" +Attribute VB_Name = "FileTools" +Attribute VB_Description = "Funktionen für Dateioperationen" '--------------------------------------------------------------------------------------- ' Package: file.FileTools '--------------------------------------------------------------------------------------- @@ -24,14 +24,14 @@ Option Explicit Option Private Module #If USELOCALIZATION_DE = 1 Then -Private Const SELECTBOX_FILE_DIALOG_TITLE As String = "Datei auswählen" -Private Const SELECTBOX_FOLDER_DIALOG_TITLE As String = "Ordner auswählen" -Private Const SELECTBOX_OPENTITLE As String = "auswählen" +Private Const SELECTBOX_FILE_DIALOG_TITLE As String = "Datei auswählen" +Private Const SELECTBOX_FOLDER_DIALOG_TITLE As String = "Ordner auswählen" +Private Const SELECTBOX_OPENTITLE As String = "auswählen" Private Const FILTERSTRING_ALL_FILES As String = "Alle Dateien (*.*)" #Else Private Const SELECTBOX_FILE_DIALOG_TITLE As String = "Select file" Private Const SELECTBOX_FOLDER_DIALOG_TITLE As String = "Select folder" -Private Const SELECTBOX_OPENTITLE As String = "auswählen" +Private Const SELECTBOX_OPENTITLE As String = "auswählen" Private Const FILTERSTRING_ALL_FILES As String = "All Files (*.*)" #End If @@ -57,7 +57,7 @@ Private Declare PtrSafe Function API_GetTempFilename Lib "kernel32" Alias "GetTe ByVal lpPrefixString As String, _ ByVal wUnique As Long, _ ByVal lpTempFileName As String) As Long - + Private Declare PtrSafe Function API_ShellExecuteA Lib "shell32.dll" ( _ ByVal Hwnd As LongPtr, _ ByVal lOperation As String, _ @@ -162,13 +162,13 @@ Private Function WizHook_GetFileName( _ ' 2: Eigenschaften ' 3: Liste ' 4: Miniaturansicht -' 5: Große Symbole +' 5: Große Symbole ' 6: Kleine Symbole 'flags 4: Set Current Dir -' 8: Mehrfachauswahl möglich +' 8: Mehrfachauswahl möglich ' 32: Ordnerauswahldialog -' 64: Wert im Parameter "View" berücksichtigen +' 64: Wert im Parameter "View" berücksichtigen Dim SelectedFileString As String Dim WizHookRetVal As Long @@ -214,25 +214,25 @@ End Function ' '--------------------------------------------------------------------------------------- Public Function UncPath(ByVal Path As String, Optional ByVal IgnoreErrors As Boolean = True) As String - + Dim UNC As String * 512 - + If VBA.Len(Path) = 1 Then Path = Path & ":" - + If WNetGetConnection(VBA.Left$(Path, 2), UNC, VBA.Len(UNC)) Then - + If IgnoreErrors Then UncPath = Path Else Err.Raise 5 ' Invalid procedure call or argument End If - + Else UncPath = VBA.Left$(UNC, VBA.InStr(UNC, vbNullChar) - 1) & VBA.Mid$(Path, 3) - + End If - + End Function '--------------------------------------------------------------------------------------- @@ -282,7 +282,7 @@ Public Function GetNewTempFileName(Optional ByVal PathToUse As String = "", _ Optional ByVal FileExtension As String = "") As String Dim NewTempFileName As String - + If Len(PathToUse) = 0 Then PathToUse = TempPath End If @@ -513,7 +513,7 @@ Public Function DirExists(ByVal FullPath As String) As Boolean DirExists = (VBA.Dir$(FullPath, vbDirectory Or vbReadOnly Or vbHidden Or vbSystem) = ".") VBA.Dir$ "\" ' Avoiding error: issue #109 - + End Function '--------------------------------------------------------------------------------------- @@ -664,7 +664,7 @@ Public Function GetRelativPathFromFullPath(ByVal FullPath As String, _ Optional ByVal DisableDecreaseBaseDir As Boolean = False) As String Dim RelativPath As String - + If FullPath = BaseDir Then GetRelativPathFromFullPath = "." Exit Function @@ -675,7 +675,7 @@ Public Function GetRelativPathFromFullPath(ByVal FullPath As String, _ GetRelativPathFromFullPath = "." Exit Function End If - + If Not DisableDecreaseBaseDir Then RelativPath = TryGetRelativPathWithDecreaseBaseDir(FullPath, BaseDir, EnableRelativePrefix) Else @@ -690,7 +690,7 @@ Public Function GetRelativPathFromFullPath(ByVal FullPath As String, _ End If End If End If - + GetRelativPathFromFullPath = RelativPath End Function @@ -701,7 +701,7 @@ Private Function TryGetRelativPathWithDecreaseBaseDir(ByVal FullPath As String, Dim DecreaseCounter As Long Dim Pos As Long Dim i As Long - + RelativPath = BaseDir Do While InStr(1, FullPath, RelativPath) = 0 @@ -713,7 +713,7 @@ Private Function TryGetRelativPathWithDecreaseBaseDir(ByVal FullPath As String, Exit Do End If Loop - + If Len(RelativPath) > 0 Then RelativPath = Replace(FullPath, RelativPath, vbNullString) For i = 1 To DecreaseCounter @@ -854,7 +854,7 @@ Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode A Dim FileNotFoundErrorText As String If Len(VBA.Dir(FilePath)) = 0 Then - + #If USELOCALIZATION = 1 Then FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath) #Else @@ -865,7 +865,7 @@ Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode A End If OpenFile = ShellExecute(FilePath, "open") - + End Function '--------------------------------------------------------------------------------------- @@ -887,7 +887,7 @@ Public Function OpenFilePath(ByVal FolderPath As String) As Boolean Dim FolderNotFoundErrorText As String If Len(VBA.Dir(FolderPath, vbDirectory)) = 0 Then - + #If USELOCALIZATION = 1 Then FolderNotFoundErrorText = Replace(L10n.Text(FolderNotFoundErrorTextTemplate), "{FolderPath}", FolderPath) #Else @@ -898,7 +898,7 @@ Public Function OpenFilePath(ByVal FolderPath As String) As Boolean End If OpenFilePath = ShellExecute(FolderPath, "open") - + End Function Private Function ShellExecute(ByVal FilePath As String, _ @@ -917,7 +917,7 @@ Private Function ShellExecute(ByVal FilePath As String, _ DeskWin = Application.hWndAccessApp Ret = API_ShellExecuteA(DeskWin, ApiOperation, FilePath, vbNullString, vbNullString, vbNormalFocus) End If - + If Ret = SE_ERR_NOTFOUND Then #If USELOCALIZATION = 1 Then FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath) @@ -930,16 +930,16 @@ Private Function ShellExecute(ByVal FilePath As String, _ ElseIf Ret = SE_ERR_NOASSOC Then ShellExecute = False Exit Function -' ToDo: "Öffnen mit"-Dialog verwenden: +' ToDo: "Öffnen mit"-Dialog verwenden: 'Wenn die Dateierweiterung noch nicht bekannt ist... - 'wird der "Öffnen mit..."-Dialog angezeigt. + 'wird der "Öffnen mit..."-Dialog angezeigt. ' Directory = Space$(260) ' Ret = GetSystemDirectory(Directory, Len(Directory)) ' Directory = Left$(Directory, Ret) ' Call ShellExecuteA(DeskWin, vbNullString, "RUNDLL32.EXE", "shell32.dll, OpenAs_RunDLL " & _ ' FilePath, Directory, vbNormalFocus) End If - + ShellExecute = True End Function diff --git a/source/FilterControlManagerCodeBuilder.cls b/source/modules/FilterControlManagerCodeBuilder.cls similarity index 92% rename from source/FilterControlManagerCodeBuilder.cls rename to source/modules/FilterControlManagerCodeBuilder.cls index 1a47568..7a5855e 100644 --- a/source/FilterControlManagerCodeBuilder.cls +++ b/source/modules/FilterControlManagerCodeBuilder.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -17,15 +17,6 @@ Attribute VB_Exposed = False ' Josef Poetzl ' '--------------------------------------------------------------------------------------- - -'--------------------------------------------------------------------------------------- -' -' %AppFolder%/source/FilterControlManagerCodeBuilder.cls -' _codelib/license.bas -' %AppFolder%/source/IFilterFormCodeBuilder.cls -' _codelib/addins/shared/AppFileCodeModulTransfer.cls -' -'--------------------------------------------------------------------------------------- ' Option Compare Database Option Explicit @@ -58,24 +49,24 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ Optional ByVal RemoveFilterCtlName As String, _ Optional ByVal AutoFilterCtlName As String, _ Optional ByVal FilterControlTagConverterMode As Long = 0) As String - + Dim Code As String Code = _ "Private Sub m_FilterControlManager_FilterStringChanged(ByVal NewFilterString As String)" & vbNewLine & _ " ApplyFilter NewFilterString" & vbNewLine & _ "End Sub" & vbNewLine - + If Len(ApplyFilterCtlName) > 0 Then Code = Code & vbNewLine & _ "Private Sub m_FilterControlManager_FilterValuesChanged()" & vbNewLine & _ " SetApplyFilterSignal" & vbNewLine & _ "End Sub" & vbNewLine - + Code = Code & vbNewLine & _ "Private Sub SetApplyFilterSignal()" & vbNewLine & _ "' " & L10n.Text("Notwendigen Klick auf ""Filter anwenden"" signalisieren") & vbNewLine - + If Len(AutoFilterCtlName) > 0 Then Code = Code & _ " If Me." & AutoFilterCtlName & ".Value = False Then" & vbNewLine & _ @@ -85,10 +76,10 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ Code = Code & _ " Me." & ApplyFilterCtlName & ".FontBold = True" & vbNewLine End If - + Code = Code & _ "End Sub" & vbNewLine - + End If Code = Code & vbNewLine & _ @@ -99,7 +90,7 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ " Set m_FilterControlManager = New FilterControlManager" & vbNewLine & _ " m_FilterControlManager.ConfigSqlFormat """ & SqlDateFormat & """, """ & SqlBooleanTrueString & """, """ & SqlWildCardString & """" & vbNewLine & _ " InitFilterControls" & vbNewLine - + If Len(AutoFilterCtlName) Then Code = Code & " m_FilterControlManager.AutoFilterOn = Nz(Me." & AutoFilterCtlName & ".Value, False)" & vbNewLine Else @@ -115,7 +106,7 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ Code = Code & vbNewLine & _ GetInitFilterControlsCode(FilterControlCodeLines, FilterControlTagConverterMode <> 0, FilterControlTagConverterMode = 2) - + Code = Code & vbNewLine & _ GetRemoveFilterCode() @@ -124,22 +115,22 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ End Property Private Function GetInitFilterControlsCode(ByVal FilterControlCodeLines As String, ByVal UseFilterControlTagConverter As Boolean, ByVal UseHeaderControls As Boolean) As String - + Dim Code As String Dim ControlsCollectionCode As String Code = _ "Private Sub InitFilterControls()" & vbNewLine & _ vbNewLine - + If UseFilterControlTagConverter Then - + If UseHeaderControls Then ControlsCollectionCode = "Me.Section(acHeader).Controls" Else ControlsCollectionCode = "Me.Controls" End If - + Code = Code & _ " With New FilterControlTagConverter" & vbNewLine & _ " .AddFilterControls FilterControlManager.FilterControls, " & ControlsCollectionCode & vbNewLine & _ @@ -152,11 +143,11 @@ Private Function GetInitFilterControlsCode(ByVal FilterControlCodeLines As Strin vbNewLine & _ " End With" & vbNewLine End If - + Code = Code & _ vbNewLine & _ "End Sub" & vbNewLine - + GetInitFilterControlsCode = Code End Function @@ -188,13 +179,13 @@ End Function Private Function IFilterFormCodeBuilder_GetFilterControlCodeLine(ByVal DataField As String, ByVal DataType As String, ByVal RelationalOperator As String, _ ByVal Control As String, ByVal Control2 As String) As String - + Dim FcLine As String CheckControlRefCode Control FcLine = "Add """ & DataField & """, " & DataType & ", " & RelationalOperator & ", " & Control - + If Len(Control2) > 0 Then CheckControlRefCode Control2 FcLine = FcLine & ", " & Control2 @@ -213,9 +204,9 @@ Private Function IFilterFormCodeBuilder_GetMultiFilterControlCodeLine(ByVal Data For i = LBound(ControlArray) To UBound(ControlArray) CheckControlRefCode ControlArray(i) Next - + FcLine = "AddMultiControlCriteria """ & DataField & """, " & DataType & ", " & RelationalOperator & ", Null, " & Join(ControlArray, ", ") - + IFilterFormCodeBuilder_GetMultiFilterControlCodeLine = FcLine End Function @@ -239,8 +230,8 @@ Private Function GetRemoveFilterCode() As String Dim Code As String Code = "Private Sub RemoveFilter()" & vbNewLine & _ - "' FilterControlManager.RemoveFilter ""1=0"" ' 1=0 .. " & L10n.Text("damit nach dem Entfernen der Filterwerte keine Datensätze angezeigt werden") & vbNewLine & _ - " FilterControlManager.RemoveFilter ' " & L10n.Text("ohne Parameterübergabe werden alle Datensätze angezeigt") & vbNewLine & _ + "' FilterControlManager.RemoveFilter ""1=0"" ' 1=0 .. " & L10n.Text("damit nach dem Entfernen der Filterwerte keine Datensätze angezeigt werden") & vbNewLine & _ + " FilterControlManager.RemoveFilter ' " & L10n.Text("ohne Parameterübergabe werden alle Datensätze angezeigt") & vbNewLine & _ "End Sub" & vbNewLine GetRemoveFilterCode = Code diff --git a/source/FilterFormCodeImporter.cls b/source/modules/FilterFormCodeImporter.cls similarity index 94% rename from source/FilterFormCodeImporter.cls rename to source/modules/FilterFormCodeImporter.cls index f21dd8c..9e0ed7c 100644 --- a/source/FilterFormCodeImporter.cls +++ b/source/modules/FilterFormCodeImporter.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -17,16 +17,6 @@ Attribute VB_Exposed = False ' Josef Poetzl ' '--------------------------------------------------------------------------------------- - -'--------------------------------------------------------------------------------------- -' -' %AppFolder%/source/FilterFormCodeImporter.cls -' _codelib/license.bas -' _codelib/addins/shared/CodeModuleWriter.cls -' _codelib/addins/shared/AppFileCodeModulTransfer.cls -' %AppFolder%/source/IFilterFormCodeBuilder.cls -' -'--------------------------------------------------------------------------------------- ' Option Compare Database Option Explicit @@ -72,9 +62,9 @@ Friend Sub WriteToForm(ByVal FormName As String, _ Optional ByVal RemoveFilterCtlName As String, _ Optional ByVal AutoFilterCtlName As String, _ Optional ByVal FilterControlTagConverterMode As Long = 0) - + CheckRequiredCodeModules CodeModulImporter - + If CurrentProject.AllForms(FormName).IsLoaded Then DoCmd.Close acForm, FormName End If @@ -111,56 +101,56 @@ Private Sub AddCodeToForm(ByVal FrmRef As Form, _ With New CodeModuleWriter .Load "Form_" & FrmRef.Name - + TempCode = DeclarationCode If Len(TempCode) > 0 Then TempCode = TempCode & vbNewLine End If - + TempCode = TempCode & _ ClassInitalisationCode(KindOfApplyFilterMethode, ApplyFilterMethodeSubFormName, _ SqlDateFormat, SqlBooleanTrueString, SqlWildCardString, _ ApplyFilterCtlName, RemoveFilterCtlName, AutoFilterCtlName, FilterControlTagConverterMode) .AddCode TempCode - + TempCode = FormLoadCode If Len(TempCode) > 0 Then .AddCodeToEventProcedure "Load", "Form", TempCode End If - + TempCode = FormUnLoadCode If Len(TempCode) > 0 Then .AddCodeToEventProcedure "Unload", "Form", TempCode End If - + If Len(ApplyFilterCtlName) > 0 Then TempCode = ApplyFilterCtlCode If Len(TempCode) > 0 Then .AddCodeToEventProcedure "Click", ApplyFilterCtlName, TempCode End If End If - + If Len(AutoFilterCtlName) > 0 Then TempCode = AutoFilterCtlCode(AutoFilterCtlName) If Len(TempCode) > 0 Then .AddCodeToEventProcedure "Click", AutoFilterCtlName, TempCode End If End If - + If Len(RemoveFilterCtlName) > 0 Then TempCode = RemoveFilterCtlCode If Len(TempCode) > 0 Then .AddCodeToEventProcedure "Click", RemoveFilterCtlName, TempCode End If End If - + TempCode = FilterControlValueChangedEventFunction(ApplyFilterCtlName, AutoFilterCtlName) If Len(TempCode) > 0 Then .AddCode TempCode InsertFilterControlValueChangedEventFunction FrmRef End If - + End With End Sub @@ -188,7 +178,7 @@ Private Property Get ClassInitalisationCode( _ ByVal RemoveFilterCtlName As String, _ ByVal AutoFilterCtlName As String, _ ByVal FilterControlTagConverterMode As Long) As String - + ClassInitalisationCode = m_Importer.ClassInitalisationCode( _ GetApplyFilterMethodeCode(KindOfApplyFilterMethode, ApplyFilterMethodeSubFormName, ApplyFilterCtlName, False), _ GetFilterControlCodeLines, m_FilterControlNames, _ @@ -202,11 +192,11 @@ Private Function GetApplyFilterMethodeCode( _ ByVal ApplyFilterMethodeSubFormName As String, _ ByVal ApplyFilterCtlName As String, _ ByVal AddDebugLine As Boolean) As String - + Dim MethodeCode As String Dim SufFormRefCode As String Dim LinePrefix As String - + Select Case KindOfApplyFilterMethode Case 0 LinePrefix = "'" @@ -225,25 +215,25 @@ Private Function GetApplyFilterMethodeCode( _ MethodeCode = _ "Private Sub ApplyFilter(ByVal NewFilterString As String)" & vbNewLine - + If AddDebugLine Then MethodeCode = MethodeCode & vbNewLine & _ " Debug.Print ""FilterText:""; NewFilterString" & vbNewLine End If - + MethodeCode = MethodeCode & _ vbNewLine & _ LinePrefix & " With Me" & SufFormRefCode & vbNewLine & _ LinePrefix & " .Filter = NewFilterString" & vbNewLine & _ LinePrefix & " .FilterOn = (Len(.Filter) > 0)" & vbNewLine & _ LinePrefix & " End With" & vbNewLine - - + + If Len(ApplyFilterCtlName) > 0 Then MethodeCode = MethodeCode & vbNewLine & _ " Me." & ApplyFilterCtlName & ".FontBold = False" & vbNewLine End If - + MethodeCode = MethodeCode & vbNewLine & _ "End Sub" @@ -291,7 +281,7 @@ Private Property Get FilterControlValueChangedEventFunction(ByVal ApplyFilterCtl End Property Private Sub InsertFilterControlValueChangedEventFunction(ByVal FormRef As Form) - + Dim FcltName As Variant Dim ctl As Control @@ -301,17 +291,17 @@ Private Sub InsertFilterControlValueChangedEventFunction(ByVal FormRef As Form) ctl.AfterUpdate = "=FilterControlValueChanged()" End If Next - + End Sub Public Sub AddFilterControlDefinition(ByVal DataField As String, ByVal DataType As String, ByVal RelationalOperator As String, _ ByVal Control As String, ByVal Control2 As String) - + Dim ControlArray() As String If Len(Control2) > 0 Then If Not (RelationalOperator Like "*SQL_Between*") Then - ' Control + Control2 werden nur bei Between benötigt => Rest: MultiFilterControlCodeLine + ' Control + Control2 werden nur bei Between benötigt => Rest: MultiFilterControlCodeLine If Len(Control) > 0 Then If Len(Control2) > 0 Then Control2 = "," & Control2 @@ -335,7 +325,7 @@ Public Sub AddFilterControlDefinition(ByVal DataField As String, ByVal DataType If Len(Control2) > 0 Then m_FilterControlNames.Add Control2 End If - + m_FilterControlLines.Add GetFilterControlCodeLine(DataField, DataType, RelationalOperator, Control, Control2) End Sub diff --git a/source/FilterStringBuilderCodeBuilder.cls b/source/modules/FilterStringBuilderCodeBuilder.cls similarity index 93% rename from source/FilterStringBuilderCodeBuilder.cls rename to source/modules/FilterStringBuilderCodeBuilder.cls index 94b0e3a..ff7f366 100644 --- a/source/FilterStringBuilderCodeBuilder.cls +++ b/source/modules/FilterStringBuilderCodeBuilder.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -17,15 +17,6 @@ Attribute VB_Exposed = False ' Josef Poetzl ' '--------------------------------------------------------------------------------------- - -'--------------------------------------------------------------------------------------- -' -' %AppFolder%/source/FilterStringBuilderCodeBuilder.cls -' _codelib/license.bas -' %AppFolder%/source/IFilterFormCodeBuilder.cls -' _codelib/addins/shared/AppFileCodeModulTransfer.cls -' -'--------------------------------------------------------------------------------------- ' Option Compare Database Option Explicit @@ -57,11 +48,11 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ Optional ByVal RemoveFilterCtlName As String, _ Optional ByVal AutoFilterCtlName As String, _ Optional ByVal FilterControlTagConverterMode As Long = 0) As String - + Dim Code As String Code = GetRefreshFilterCode() & vbNewLine - + Code = Code & vbNewLine & _ ApplyFilterMethodeCode & vbNewLine @@ -78,7 +69,7 @@ Private Property Get IFilterFormCodeBuilder_ClassInitalisationCode( _ " End With" & vbNewLine & _ vbNewLine & _ "End Function" & vbNewLine - + Code = Code & vbNewLine & _ GetRemoveFilterCode(ApplyFilterCtlName, FilterControlNames) @@ -106,7 +97,7 @@ Private Function GetRemoveFilterCode(ByVal ApplyFilterCtlName As String, ByVal F " RemoveFilterValues" & vbNewLine & _ "' ApplyFilter ""0=1"" ' " & L10n.Text("Don't show records") & vbNewLine & _ " ApplyFilter vbNullString ' " & L10n.Text("Show all records") & vbNewLine - + If Len(ApplyFilterCtlName) > 0 Then Code = Code & _ " Me." & ApplyFilterCtlName & ".FontBold = False" & vbNewLine @@ -114,7 +105,7 @@ Private Function GetRemoveFilterCode(ByVal ApplyFilterCtlName As String, ByVal F Code = Code & _ "End Sub" & vbNewLine - + Code = Code & vbNewLine & GetRemoveFilterValuesCode(FilterControlNames) GetRemoveFilterCode = Code @@ -122,7 +113,7 @@ Private Function GetRemoveFilterCode(ByVal ApplyFilterCtlName As String, ByVal F End Function Private Function GetRemoveFilterValuesCode(ByVal FilterControlNames As StringCollection) As String - + Dim Code As String Code = "Private Sub RemoveFilterValues()" & vbNewLine & _ @@ -131,30 +122,30 @@ Private Function GetRemoveFilterValuesCode(ByVal FilterControlNames As StringCol " fctl.Value = Null" & vbNewLine & _ " Next" & vbNewLine & _ "End Sub" & vbNewLine - + Code = Code & vbNewLine & GetGetFilterControlsCode(FilterControlNames) GetRemoveFilterValuesCode = Code - + End Function Private Function GetGetFilterControlsCode(ByVal FilterControlNames As StringCollection) As String - + Dim Code As String Code = "Private Function GetFilterControls() As Collection" & vbNewLine & _ " Dim fctlCol As Collection" & vbNewLine & vbNewLine & _ " Set fctlCol = New Collection" & vbNewLine & _ " '" & L10n.Text("Add filter controls") & ":" & vbNewLine - + Code = Code & FilterControlNames.ToString(vbNewLine, " fctlCol.Add Me.", , True) & vbNewLine - + Code = Code & _ " Set GetFilterControls = fctlCol" & vbNewLine & _ "End Function" '& vbNewLine - + GetGetFilterControlsCode = Code - + End Function @@ -184,13 +175,13 @@ End Function Private Function IFilterFormCodeBuilder_GetFilterControlCodeLine(ByVal DataField As String, ByVal DataType As String, ByVal RelationalOperator As String, _ ByVal Control As String, ByVal Control2 As String) As String - + Dim FcLine As String CheckControlRefCode Control FcLine = "Add """ & DataField & """, " & DataType & ", " & RelationalOperator & ", " & Control - + If Len(Control2) > 0 Then CheckControlRefCode Control2 FcLine = FcLine & ", " & Control2 @@ -209,7 +200,7 @@ Private Function IFilterFormCodeBuilder_GetMultiFilterControlCodeLine(ByVal Data For i = LBound(ControlArray) To UBound(ControlArray) CheckControlRefCode ControlArray(i) Next - + FcLine = "Add """ & DataField & """, " & DataType & ", , " & RelationalOperator & ", Array(" & Join(ControlArray, ", ") & "), , Null" IFilterFormCodeBuilder_GetMultiFilterControlCodeLine = FcLine @@ -233,38 +224,38 @@ Private Function GetControlValueChangedCode(ByVal ApplyFilterCtlName As String, Dim Code As String Dim ApplyFilterCtlLine As String - + If Len(ApplyFilterCtlName) + Len(AutoFilterCtlName) = 0 Then GetControlValueChangedCode = vbNullString Exit Function End If Code = "Private Function FilterControlValueChanged()" & vbNewLine - + If Len(ApplyFilterCtlName) > 0 Then ApplyFilterCtlLine = " Me." & ApplyFilterCtlName & ".FontBold = True" & vbNewLine End If - + If Len(AutoFilterCtlName) > 0 Then Code = Code & _ " If Me." & AutoFilterCtlName & ".Value = True Then" & vbNewLine & _ " RefreshFilter" & vbNewLine - + If Len(ApplyFilterCtlName) > 0 Then Code = Code & _ " Else" & vbNewLine & _ " " & ApplyFilterCtlLine End If - + Code = Code & _ " End If" & vbNewLine Else Code = Code & ApplyFilterCtlLine End If - + Code = Code & _ "End Function" - + GetControlValueChangedCode = Code - + End Function diff --git a/source/codelib/_codelib/addins/shared/FormDesigner.cls b/source/modules/FormDesigner.cls similarity index 97% rename from source/codelib/_codelib/addins/shared/FormDesigner.cls rename to source/modules/FormDesigner.cls index b2d0d37..5e457ca 100644 --- a/source/codelib/_codelib/addins/shared/FormDesigner.cls +++ b/source/modules/FormDesigner.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -51,22 +51,22 @@ Public Property Let FormName(ByVal NewValue As String) End Property Private Function GetFormInDesignMode(ByVal FormName As String) As Form - + Dim FormIsLoaded As Boolean - + FormIsLoaded = CurrentProject.AllForms(FormName).IsLoaded - + If FormIsLoaded Then If Application.Forms(FormName).CurrentView <> 0 Then DoCmd.Close acForm, FormName FormIsLoaded = False End If End If - + If Not FormIsLoaded Then DoCmd.OpenForm FormName, acDesign, , , , acWindowNormal End If - + Set GetFormInDesignMode = Application.Forms(FormName) End Function @@ -76,58 +76,58 @@ Public Function AddControl(ByVal ControlType As AcControlType, ByVal ControlName Optional ByVal ControlWidth As Variant, Optional ByVal ControlHeight As Variant, _ Optional ByVal DistanceBetweenControls As Long = 72, _ Optional ByVal InsertLabelControl As Boolean = True, Optional ByVal LabelControlCaption As String) As Control - + Dim ctl As Control Dim LabelCtl As Label - + Dim NextFreeLeftPos As Long, NextFreeTopPos As Long If IsMissing(LeftPos) Or IsMissing(TopPos) Then FindNextControlPos Section, NextFreeLeftPos, NextFreeTopPos, DistanceBetweenControls If IsMissing(LeftPos) Then LeftPos = NextFreeLeftPos If IsMissing(TopPos) Then TopPos = NextFreeTopPos End If - + Set ctl = Application.CreateControl(m_Form.Name, ControlType, Section, , , LeftPos, TopPos, ControlWidth, ControlHeight) - + If Len(ControlName) > 0 Then ControlName = GetCheckedControlName(ControlName) ctl.Name = ControlName End If - + Set AddControl = ctl - + If InsertLabelControl Then - + If Len(LabelControlCaption) = 0 Then LabelControlCaption = ControlName End If - + Set LabelCtl = Application.CreateControl(m_Form.Name, acLabel, Section, ctl.Name, , LeftPos, TopPos, ctl.Width, ctl.Height) LabelCtl.Name = GetCheckedControlName("lab" & ctl.Name) LabelCtl.Caption = LabelControlCaption ctl.Top = LabelCtl.Top + LabelCtl.Height End If - + End Function Private Function GetCheckedControlName(ByVal ControlName As String) As String - + Dim CheckedControlName As String Dim i As Long - + CheckedControlName = ControlName Do While ControlExists(CheckedControlName) i = i + 1 CheckedControlName = ControlName & i Loop - + GetCheckedControlName = CheckedControlName - + End Function Private Function ControlExists(ByVal ControlName As String) As Boolean - + Dim ctl As Control For Each ctl In m_Form.Controls If ctl.Name = ControlName Then @@ -144,9 +144,9 @@ Private Sub FindNextControlPos(ByVal ControlSection As AcSection, ByRef LeftPos Dim MinLeft As Long Dim MaxTop As Long Dim ErrCnt As Long - + On Error GoTo HandleErr - + If m_Form.Section(ControlSection).Controls.Count > 0 Then MinLeft = m_Form.InsideWidth For Each ctl In m_Form.Section(ControlSection).Controls @@ -158,19 +158,19 @@ On Error GoTo HandleErr End If Next End If - + If MinLeft = 0 Then MinLeft = DistanceBetweenControls End If LeftPos = MinLeft - + TopPos = MaxTop + DistanceBetweenControls Exit Sub - + HandleErr: If Err.Number = 2462 Then 'auf Section kann nicht zugegriffen werden - + Select Case ControlSection Case acHeader, acFooter m_Form.SetFocus @@ -178,12 +178,12 @@ HandleErr: Case acPageHeader, acPageFooter DoCmd.RunCommand acCmdPageHdrFtr End Select - + If ErrCnt < 2 Then ErrCnt = ErrCnt + 1 Resume End If - + End If Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext diff --git a/source/IFilterFormCodeBuilder.cls b/source/modules/IFilterFormCodeBuilder.cls similarity index 87% rename from source/IFilterFormCodeBuilder.cls rename to source/modules/IFilterFormCodeBuilder.cls index a48fc80..46abd62 100644 --- a/source/IFilterFormCodeBuilder.cls +++ b/source/modules/IFilterFormCodeBuilder.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -17,14 +17,6 @@ Attribute VB_Exposed = False ' Josef Poetzl ' '--------------------------------------------------------------------------------------- - -'--------------------------------------------------------------------------------------- -' -' %AppFolder%/source/IFilterFormCodeBuilder.cls -' _codelib/license.bas -' _codelib/addins/shared/AppFileCodeModulTransfer.cls -' -'--------------------------------------------------------------------------------------- ' Option Compare Database Option Explicit diff --git a/source/codelib/localization/L10nDict.cls b/source/modules/L10nDict.cls similarity index 98% rename from source/codelib/localization/L10nDict.cls rename to source/modules/L10nDict.cls index 9858e10..d9eb7c6 100644 --- a/source/codelib/localization/L10nDict.cls +++ b/source/modules/L10nDict.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -77,11 +77,11 @@ Private Sub FillDict() Dim rst As DAO.Recordset Dim Key As DAO.Field Dim Msg As DAO.Field - + Set m_Dict = CreateObject("Scripting.Dictionary") - + On Error GoTo HandleErr - + Set rst = CodeDb.OpenRecordset("select KeyText, LngText from " & LngDictTableName & " where " & SqlTools.BuildCriteria("LangCode", SQL_Text, SQL_Equal, LangCode), dbOpenForwardOnly) With rst Set Key = .Fields("KeyText") @@ -94,11 +94,11 @@ On Error GoTo HandleErr rst.MoveNext Loop End With - + rst.Close - + RaiseEvent DictionaryRefreshed - + Exit Sub HandleErr: @@ -114,21 +114,21 @@ End Sub Friend Function CreateL10nDictTable() As Boolean Dim CreateTableDDL As String - + On Error GoTo HandleErr - + CreateTableDDL = "create table " & LngDictTableName & "(" & _ " LangCode varchar(2), KeyText varchar(255), LngText varchar(255)" & _ ", CONSTRAINT PK_" & LngDictTableName & " PRIMARY KEY (LangCode, KeyText)" & _ ")" - + CodeProject.Connection.Execute CreateTableDDL Application.RefreshDatabaseWindow - + CreateL10nDictTable = True - + Exit Function - + HandleErr: CreateL10nDictTable = False @@ -176,9 +176,9 @@ End Property Public Function GetUserLanguageID() As Long Dim AccApp As Object - + Set AccApp = Application - + On Error GoTo AccAppInterFaceErr GetUserLanguageID = AccApp.LanguageSettings.LanguageID(2) @@ -206,14 +206,14 @@ Public Function ControlTag(ByVal TagText As String) As String End Function Private Sub AddTextToTable(ByVal BaseText As String) - + Dim LngText As String - + LngText = BaseText If m_LangCode <> BaseLangCode Then LngText = m_LangCode & ":" & LngText End If - + With CodeDb.OpenRecordset(LngDictTableName, dbOpenTable, dbAppendOnly) .AddNew .Fields("LangCode").Value = LangCode @@ -222,13 +222,13 @@ Private Sub AddTextToTable(ByVal BaseText As String) .Update .Close End With - + End Sub Public Sub TranslateControls(ByVal ControlList As Controls) Dim ctl As Control - + For Each ctl In ControlList TranslateControl ctl Next @@ -247,11 +247,11 @@ Private Sub TranslateControl(ByVal CtlRef As Control) TextKeySeparatorString = Chr(1) TagText = CtlRef.Tag - + If Len(TagText) = 0 Then Exit Sub End If - + Pos = InStr(1, TagText, LangSeparatorChar & "LANG:") If Pos > 0 Then TagTextPrefix = Left(TagText, Pos) @@ -275,9 +275,9 @@ Private Sub TranslateControl(ByVal CtlRef As Control) End If End If End With - + SetControlText CtlRef, ControlTextKeys - + End Sub Private Function GetControlTextKeys(ByVal CtlRef As Control) As String() @@ -290,7 +290,7 @@ Private Function GetControlTextKeys(ByVal CtlRef As Control) As String() With CtlRef ControlTipText = .ControlTipText - + Select Case .ControlType Case AcControlType.acLabel CaptionText = .Caption @@ -304,12 +304,12 @@ Private Function GetControlTextKeys(ByVal CtlRef As Control) As String() StatusBarText = .StatusBarText End Select End With - + ControlTextKeys(0) = CaptionText ControlTextKeys(1) = ControlTipText ControlTextKeys(2) = StatusBarText ControlTextKeys(3) = FormatText - + GetControlTextKeys = ControlTextKeys End Function @@ -320,19 +320,19 @@ Private Sub SetControlText(ByVal CtlRef As Control, ByRef ControlTextKeys() As S If Len(ControlTextKeys(0)) > 0 Then .Caption = Text(ControlTextKeys(0)) End If - + If Len(ControlTextKeys(1)) > 0 Then .ControlTipText = Text(ControlTextKeys(1)) End If - + If Len(ControlTextKeys(2)) > 0 Then .StatusBarText = Text(ControlTextKeys(2)) End If - + If Len(ControlTextKeys(3)) > 0 Then .Format = Text(ControlTextKeys(3)) End If - + End With End Sub @@ -342,15 +342,15 @@ Public Function MsgBox(ByVal Prompt As Variant, _ Optional ByVal Title As Variant, _ Optional ByVal HelpFile As Variant, _ Optional ByVal Context As Variant) As VbMsgBoxResult - + If Not IsMissing(Prompt) Then Prompt = Me.Text(Prompt) End If - + If Not IsMissing(Title) Then Title = Me.Text(Title) End If - + MsgBox = VBA.MsgBox(Prompt, Buttons, Title, HelpFile, Context) End Function @@ -365,11 +365,11 @@ Public Function InputBox(ByVal Prompt As Variant, _ If Not IsMissing(Prompt) Then Prompt = Me.Text(Prompt) End If - + If Not IsMissing(Title) Then Title = Me.Text(Title) End If - + InputBox = VBA.InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context) End Function diff --git a/source/codelib/localization/L10nTools.bas b/source/modules/L10nTools.bas similarity index 97% rename from source/codelib/localization/L10nTools.bas rename to source/modules/L10nTools.bas index 8c54552..b8c056e 100644 --- a/source/codelib/localization/L10nTools.bas +++ b/source/modules/L10nTools.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "L10nTools" +Attribute VB_Name = "L10nTools" '--------------------------------------------------------------------------------------- ' Package: localization.L10nTools '--------------------------------------------------------------------------------------- @@ -6,7 +6,7 @@ Attribute VB_Name = "L10nTools" ' Localization (L10n) Functions ' ' Author: -' Josef Pötzl +' Josef Pötzl ' ' Remarks: ' Use compiler constant L10nMsgBoxReplacement to overwrite MsgBox and InPutBox functions. diff --git a/source/codelib/data/SqlTools.cls b/source/modules/SqlTools.cls similarity index 98% rename from source/codelib/data/SqlTools.cls rename to source/modules/SqlTools.cls index d054208..a3c855b 100644 --- a/source/codelib/data/SqlTools.cls +++ b/source/modules/SqlTools.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -51,7 +51,7 @@ Private Const SQL_DEFAULT_BOOLTRUESTRING As String = "" ' "" => SqlBooleanTrueSt ' Enter value to disable (e.g. "True or 1") Private Const SQL_DEFAULT_WILDCARD As String = "%" ' % = default value, ' set required variations via SqlWildCardString - + Private Const SqlAndConcatString As String = " And " Private Const SqlOrConcatString As String = " Or " @@ -137,7 +137,7 @@ End Function Public Function NewInstance(ByVal NewSqlDateFormat As String, _ ByVal NewSqlBooleanTrueString As String, _ ByVal NewSqlWildCardString As String) As SqlTools - + Dim NewInst As SqlTools Set NewInst = New SqlTools @@ -266,31 +266,31 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As Dim FilterValueString As String Dim OperatorString As String Dim Criteria As String - + If (RelationalOperator And [_IgnoreAll]) = [_IgnoreAll] Then Exit Function End If - + If IsMissing(IgnoreValue) Then If Not DisableIgnoreNullValue Then DisableIgnoreNullValue = True End If IgnoreValue = Null End If - + ' Special cases (part 1): If Not IsArray(FilterValue) Then - + If FilterValue = "{NULL}" Or FilterValue = "{LEER}" Or FilterValue = "{EMPTY}" Then FilterValue = Null DisableIgnoreNullValue = True End If - + If FilterValue2 = "{NULL}" Or FilterValue2 = "{LEER}" Or FilterValue2 = "{EMPTY}" Then FilterValue2 = Null DisableIgnoreNullValue = True End If - + If (RelationalOperator And SQL_AllowSqlDirect) = SQL_AllowSqlDirect Then If FilterValue Like "{*@*}" Then ' Idee von Ulrich: Anwender schreibt SQL-Ausdruck Criteria = Replace(Mid(FilterValue, 2, Len(FilterValue) - 2), "@", FieldName) @@ -301,42 +301,42 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As Exit Function End If End If - + End If - + If NullFilterOrEmptyFilter(FieldName, FieldDataType, RelationalOperator, Nz(FilterValue, FilterValue2), IgnoreValue, Criteria, DisableIgnoreNullValue) Then BuildCriteria = Criteria Exit Function End If - + If (RelationalOperator And SQL_SplitValueToArray) = SQL_SplitValueToArray Then If InStr(1, FilterValue, ";") > 0 Then FilterValue = Split(CharTrim(FilterValue, ";"), ";") End If RelationalOperator = RelationalOperator Xor SQL_SplitValueToArray End If - + 'Special cases (part 2): If Not IsArray(FilterValue) Then - + If FieldDataType = SQL_Numeric Or FieldDataType = SQL_Date Then - + If FilterValue = "*" And RelationalOperator = SQL_Equal Then BuildCriteria = BuildCriteria(FieldName, FieldDataType, SQL_Not, Null, Null, 0, True) Exit Function End If - + If IsNull(FilterValue2) Then If TryBuildNumericSpecialCasesCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, DisableIgnoreNullValue, Criteria) Then BuildCriteria = Criteria Exit Function End If End If - + ConfigNumericSpecials RelationalOperator, FilterValue, FilterValue2 - + End If - + End If If TryBuildInCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria) Then @@ -387,7 +387,7 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As BuildCriteria = FieldName & OperatorString & FilterValueString Exit Function End If - + OperatorString = GetRelationalOperatorString(RelationalOperator) Criteria = FieldName & " " & OperatorString & " " & FilterValueString @@ -420,7 +420,7 @@ End Function '--------------------------------------------------------------------------------------- Public Function ConvertToSqlText(ByVal Value As Variant, _ ByVal FieldDataType As SqlFieldDataType) As String - + Select Case FieldDataType Case SqlFieldDataType.SQL_Text ConvertToSqlText = TextToSqlText(Value) @@ -433,7 +433,7 @@ Public Function ConvertToSqlText(ByVal Value As Variant, _ Case Else Err.Raise vbObjectError, "SqlTools.ConvertToSqlText", "FieldDataType '" & FieldDataType & "' not supported" End Select - + End Function '--------------------------------------------------------------------------------------- @@ -458,19 +458,19 @@ End Function Public Function TextToSqlText(ByVal Value As Variant, _ Optional ByVal Delimiter As String = SQL_DEFAULT_TEXTDELIMITER, _ Optional ByVal WithoutLeftRightDelim As Boolean = False) As String - + Dim Result As String - + If IsNull(Value) Then TextToSqlText = ResultTextIfNull Exit Function End If - + Result = Replace$(Value, Delimiter, Delimiter & Delimiter) If Not WithoutLeftRightDelim Then Result = Delimiter & Result & Delimiter End If - + TextToSqlText = Result End Function @@ -496,7 +496,7 @@ Public Function DateToSqlText(ByVal Value As Variant, _ DateToSqlText = ResultTextIfNull Exit Function End If - + If Not IsDate(Value) Then Err.Raise vbObjectError, "SqlTools.DateToSqlText", "Der Wert '" & Value & "' vom Parameter Value ist kein Datumswert!" End If @@ -507,7 +507,7 @@ Public Function DateToSqlText(ByVal Value As Variant, _ Err.Raise SqlToolsErrorNumbers.ERRNR_NOCONFIG, "DateToSqlText", "date format is not defined" End If End If - + DateToSqlText = VBA.Format$(Value, FormatString) End Function @@ -537,26 +537,26 @@ Public Function NumberToSqlText(ByVal Value As Variant) As String NumberToSqlText = ResultTextIfNull Exit Function End If - + Value = ConvertToNumeric(Value) - + Result = Trim$(Str$(Value)) If Left(Result, 1) = "." Then Result = "0" & Result End If - + NumberToSqlText = Result - + End Function Friend Function ConvertToNumeric(ByVal Value As Variant) As Variant - + Const CheckNumber As Double = 1.23 - + Dim CheckText As String Dim DecimalSeparatorToReplace As String Dim NewDecimalSeparator As String - + If IsNull(Value) Then ConvertToNumeric = Null Exit Function @@ -564,7 +564,7 @@ Friend Function ConvertToNumeric(ByVal Value As Variant) As Variant ConvertToNumeric = Null Exit Function End If - + CheckText = CStr(CheckNumber) If InStr(1, CheckText, ",") > 0 Then DecimalSeparatorToReplace = "." @@ -573,16 +573,16 @@ Friend Function ConvertToNumeric(ByVal Value As Variant) As Variant DecimalSeparatorToReplace = "," NewDecimalSeparator = "." End If - + If InStr(1, Value, DecimalSeparatorToReplace) > 0 Then Value = Replace(Value, DecimalSeparatorToReplace, NewDecimalSeparator) Do While Value Like "*" & NewDecimalSeparator & "*" & NewDecimalSeparator & "*" Value = Replace(Value, NewDecimalSeparator, vbNullString, 1, 1) Loop End If - + ConvertToNumeric = CDbl(Value) - + End Function '--------------------------------------------------------------------------------------- @@ -618,7 +618,7 @@ Public Function BooleanToSqlText(ByVal Value As Variant, _ Else BooleanToSqlText = "0" End If - + End Function Private Function ConfigNumericSpecials( _ @@ -633,7 +633,7 @@ Private Function ConfigNumericSpecials( _ RelationalOperator = RelationalOperator Or SQL_LessThan FilterValue = Mid(FilterValue, 2) End If - + If Left(FilterValue, 1) = ">" Then If ((RelationalOperator And SQL_Equal) = SQL_Equal) Then RelationalOperator = RelationalOperator - SQL_Equal @@ -646,7 +646,7 @@ Private Function ConfigNumericSpecials( _ RelationalOperator = RelationalOperator Or SQL_Equal FilterValue = Mid(FilterValue, 2) End If - + If Right(FilterValue, 1) = "*" Then RelationalOperator = RelationalOperator Or SQL_Add_WildCardSuffix ElseIf Right(FilterValue2, 1) = "*" Then @@ -656,7 +656,7 @@ Private Function ConfigNumericSpecials( _ End Function Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteValue As Boolean = False) As Double - + Dim TestString As String Dim KommaPos As Long Dim digits As Long @@ -664,18 +664,18 @@ Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteVa Const AdditionalDecDigit As String = "1" Const AdditionalDecDigitKorr As Double = 0.1 - + TestString = Trim(CStr(ConvertToNumeric(Replace(CStr(Z), "*", AdditionalDecDigit)))) - + If Left(TestString, 1) = "-" And (Not AddToAbsoluteValue) Then GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) Exit Function End If - + If Left(TestString, 1) = "-" Then IsNegativ = True End If - + KommaPos = InStrRev(TestString, DecimalMarker) If KommaPos = 0 Then ' next integer If AddToAbsoluteValue And IsNegativ Then @@ -685,31 +685,31 @@ Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteVa End If Exit Function End If - + digits = Len(TestString) - KommaPos - 1 - + If Left(TestString, 1) = "-" Then IsNegativ = True End If - + If AddToAbsoluteValue And IsNegativ Then GetNextDigitNumber = CDbl(TestString) + AdditionalDecDigitKorr / 10 ^ digits - AdditionalDecDigitKorr / 10 ^ (digits - 1) Else GetNextDigitNumber = CDbl(TestString) + (1 - AdditionalDecDigitKorr) / 10 ^ digits End If - + End Function Private Property Get DecimalMarker() As String Static DecChar As String Dim X As String - + If Len(DecChar) = 0 Then X = Trim(CStr(1.2)) DecChar = Mid(X, 2, 1) End If - + DecimalMarker = DecChar End Property @@ -717,17 +717,17 @@ End Property Private Function CharTrim(ByVal ValueToTrim As String, ByVal TrimChar As String) As String Dim TrimString As String - + TrimString = " " & TrimChar Do While InStr(1, ValueToTrim, TrimString) ValueToTrim = Replace(ValueToTrim, TrimString, TrimChar) Loop - + TrimString = TrimChar & " " Do While InStr(1, ValueToTrim, TrimString) ValueToTrim = Replace(ValueToTrim, TrimString, TrimChar) Loop - + CharTrim = ValueToTrim End Function @@ -736,7 +736,7 @@ Friend Function GetRelationalOperatorString(ByRef RelationalOperator As SqlRelat Dim OperatorString As String Dim op As SqlRelationalOperators - + If (RelationalOperator And SQL_In) = SQL_In Then OperatorString = OperatorString & "In" If (RelationalOperator And SQL_Not) = SQL_Not Then @@ -745,14 +745,14 @@ Friend Function GetRelationalOperatorString(ByRef RelationalOperator As SqlRelat GetRelationalOperatorString = OperatorString Exit Function End If - + If (RelationalOperator And SQL_Not) = SQL_Not Then - + op = RelationalOperator Xor SQL_Not - - If op = SqlRelationalOperators.SQL_Equal Then ' => "=" zu "<>" .. null berücksichtigen? + + If op = SqlRelationalOperators.SQL_Equal Then ' => "=" zu "<>" .. null berücksichtigen? RelationalOperator = SQL_LessThan + SQL_GreaterThan - ElseIf op = SQL_GreaterThan + SQL_LessThan Then ' => "<>" zu "=" .. null berücksichtigen? + ElseIf op = SQL_GreaterThan + SQL_LessThan Then ' => "<>" zu "=" .. null berücksichtigen? RelationalOperator = SQL_Equal Else RelationalOperator = RelationalOperator Xor SQL_Not @@ -775,7 +775,7 @@ Friend Function GetRelationalOperatorString(ByRef RelationalOperator As SqlRelat If (RelationalOperator And SQL_LessThan) = SQL_LessThan Then OperatorString = OperatorString & "<" End If - + If (RelationalOperator And SQL_GreaterThan) = SQL_GreaterThan Then OperatorString = OperatorString & ">" End If @@ -862,13 +862,13 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String, Dim CriteriaBuild As Boolean Dim TempArr() As String - + Const FilterValue2 As Variant = Null If VarType(FilterValue) = vbString Then FilterValue = Trim(FilterValue) End If - + If FilterValue Like "[0-9]*..*[0-9]*" Or FilterValue Like "[+-][0-9]*..*[0-9]*" Then TempArr = Split(FilterValue, "..") Criteria = BuildCriteria(FieldName, FieldDataType, SQL_Between, Trim(TempArr(0)), Trim(TempArr(1)), IgnoreValue, DisableIgnoreNullValue) @@ -882,7 +882,7 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String, FilterValue = Replace(FilterValue, "--", "-{M}") FilterValue = Replace(FilterValue, "-", "..") FilterValue = Replace(FilterValue, "{M}", "-") - + TempArr = Split(FilterValue, "..") Criteria = BuildCriteria(FieldName, FieldDataType, SQL_Between, Trim(TempArr(0)), Trim(TempArr(1)), IgnoreValue, DisableIgnoreNullValue) CriteriaBuild = True @@ -892,7 +892,7 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String, CriteriaBuild = True End If End If - + TryBuildNumericSpecialCasesCriteria = CriteriaBuild End Function @@ -904,9 +904,9 @@ Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDat ByRef Criteria As String) As Boolean Dim itm As Variant Dim ItmCriteria As String - + Dim arrFilterValue() As Variant - + If Not IsArray(FilterValue) Then Exit Function End If @@ -961,7 +961,7 @@ Private Function TryBuildInCriteria(ByRef FieldName As String, ByVal FieldDataTy End If If Len(FilterValueString) > 0 Then - + If RemoveNullFromInValueString(FilterValueString) Then Criteria = FieldName & " Is Null" If Len(FilterValueString) > 0 Then @@ -970,7 +970,7 @@ Private Function TryBuildInCriteria(ByRef FieldName As String, ByVal FieldDataTy Else Criteria = FieldName & OperatorString & "(" & FilterValueString & ")" End If - + End If TryBuildInCriteria = True @@ -983,15 +983,15 @@ Private Function TryBuildBetweenCriteria(ByRef FieldName As String, ByVal FieldD ByRef FilterValue2 As Variant, _ ByRef IgnoreValue As Variant, _ ByRef Criteria As String) As Boolean - + Dim Criteria1 As String Dim Criteria2 As String - + If (RelationalOperator And SQL_Between) = False Then TryBuildBetweenCriteria = False Exit Function End If - + If (RelationalOperator And SQL_Not) = SQL_Not Then 'Reverse condition Criteria1 = BuildCriteria(FieldName, FieldDataType, SQL_LessThan, FilterValue, , IgnoreValue, False) Criteria2 = BuildCriteria(FieldName, FieldDataType, SQL_GreaterThan, FilterValue2, , IgnoreValue, False) @@ -999,7 +999,7 @@ Private Function TryBuildBetweenCriteria(ByRef FieldName As String, ByVal FieldD TryBuildBetweenCriteria = True Exit Function End If - + If FieldDataType = SQL_Numeric Then If FilterValue2 Like "<=*" Then 'cut away FilterValue2 = Mid(FilterValue2, 3) @@ -1052,7 +1052,7 @@ Private Function NullFilterOrEmptyFilter(ByVal FieldName As String, ByVal FieldD ByVal Value As Variant, ByVal IgnoreValue As Variant, _ ByRef NullFilterString As String, _ Optional ByVal DisableIgnoreNullValue As Boolean = False) As Boolean - + If IsObject(IgnoreValue) Then If IgnoreValue Is Nothing Then If IsNull(Value) Then @@ -1068,7 +1068,7 @@ Private Function NullFilterOrEmptyFilter(ByVal FieldName As String, ByVal FieldD Exit Function End If End If - + If IsNull(Value) Then If DisableIgnoreNullValue Then NullFilterString = FieldName & " Is Null" @@ -1098,7 +1098,7 @@ On Error Resume Next Else NullFilterOrEmptyFilter = ValuesAreEqual(FieldDataType, Value, IgnoreValue) End If - + If (RelationalOperator And SQL_Not) = SQL_Not Then NullFilterString = Replace(NullFilterString, "Is Null", "Is Not Null") End If @@ -1106,7 +1106,7 @@ On Error Resume Next End Function Private Function ValuesAreEqual(ByVal FieldDataType As SqlFieldDataType, ByVal Value As Variant, ByVal Value2 As Variant) As Boolean - + If IsArray(Value2) Then ValuesAreEqual = ArrayContains(FieldDataType, Value2, Value) ElseIf IsNull(Value) Then @@ -1131,7 +1131,7 @@ Private Function ValuesAreEqual(ByVal FieldDataType As SqlFieldDataType, ByVal V End Function Private Function ArrayContains(ByVal FieldDataType As SqlFieldDataType, ByVal ArrayToCheck As Variant, ByVal SearchValue As Variant) As Boolean - + Dim i As Long If IsNull(SearchValue) Then @@ -1151,7 +1151,7 @@ Private Function ArrayContains(ByVal FieldDataType As SqlFieldDataType, ByVal Ar End Function Private Function ArrayContainsNull(ByVal ArrayToCheck As Variant) As Boolean - + Dim i As Long For i = LBound(ArrayToCheck) To UBound(ArrayToCheck) @@ -1167,7 +1167,7 @@ End Function Private Function GetValueArrayString(ByVal Value As Variant, ByVal FieldDataType As SqlFieldDataType, _ ByVal Delimiter As String, ByVal IgnoreValue As Variant) As String - + Dim i As Long Dim s As String @@ -1196,22 +1196,22 @@ Private Function RemoveNullFromInValueString(ByRef ValueString As String) As Boo Const NullCheckString As String = ",Null," Dim TestString As String - + TestString = "," & ValueString & "," If Not (InStr(1, TestString, NullCheckString) > 0) Then RemoveNullFromInValueString = False Exit Function End If - + TestString = Replace(TestString, NullCheckString, ",") - + If Len(TestString) > 1 Then ValueString = Mid(TestString, 2, Len(TestString) - 2) Else ValueString = vbNullString End If - + RemoveNullFromInValueString = True End Function diff --git a/source/codelib/text/StringCollection.cls b/source/modules/StringCollection.cls similarity index 98% rename from source/codelib/text/StringCollection.cls rename to source/modules/StringCollection.cls index 83b8d10..ed75168 100644 --- a/source/codelib/text/StringCollection.cls +++ b/source/modules/StringCollection.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -71,7 +71,7 @@ Public Sub AddFromArray(ByRef ArrayToAdd As Variant, Optional ByVal ItemStringFo End Sub Public Sub AddFromCollection(ByVal CollectionRef As Object, Optional ByVal ItemStringFormat As String = vbNullString) -'Object, damit alle Collections mit Enumarable- u. Item(index)-Interface durchlaufen werden können +'Object, damit alle Collections mit Enumarable- u. Item(index)-Interface durchlaufen werden können Dim itm As Variant @@ -86,7 +86,7 @@ Public Function ToString(Optional ByVal Delimiter As String = ", ", _ Optional ByVal ItemSuffix As String = vbNullString, _ Optional ByVal IgnoreEmptyValue As Boolean = False, _ Optional ByVal IgnoreDuplicateValues As Boolean = False) As String - + Dim s As String s = VBA.Join(ToStringArray(IgnoreEmptyValue, IgnoreDuplicateValues), ItemSuffix & Delimiter & ItemPrefix) @@ -109,7 +109,7 @@ Public Function ToStringArray(Optional ByVal IgnoreEmptyValue As Boolean = False ToStringArray = ItemArray Exit Function End If - + If IgnoreEmptyValue Then If IgnoreDuplicateValues Then ToStringArray = RemoveDuplicateValues(GetArrayWithoutEmptyValues()) @@ -129,7 +129,7 @@ Public Function ToStringArray(Optional ByVal IgnoreEmptyValue As Boolean = False Else ToStringArray = ItemArray End If - + End Function Private Function GetArrayWithoutEmptyValues() As String() @@ -154,17 +154,17 @@ Private Function GetArrayWithoutEmptyValues() As String() ItemArray(ItemIndex) = itm End If Next - + If ItemIndex = -1 Then Erase ItemArray GetArrayWithoutEmptyValues = ItemArray Exit Function End If - + If ItemIndex < (m_Items.Count - 1) Then ReDim Preserve ItemArray(0 To ItemIndex) End If - + GetArrayWithoutEmptyValues = ItemArray End Function @@ -182,9 +182,9 @@ Private Function RemoveDuplicateValues(ByRef ArrayToCheck() As String) As String RemoveDuplicateValues = ArrayToCheck Exit Function End If - + ReDim ItemArray(MaxArrayIndex) - + ItemIndex = -1 For Each ArrayItem In ArrayToCheck If Not ValueExistsInArray(ItemArray, ArrayItem, ItemIndex) Then @@ -192,28 +192,28 @@ Private Function RemoveDuplicateValues(ByRef ArrayToCheck() As String) As String ItemArray(ItemIndex) = ArrayItem End If Next - + If ItemIndex < (m_Items.Count - 1) Then ReDim Preserve ItemArray(0 To ItemIndex) End If - + RemoveDuplicateValues = ItemArray - + End Function Private Function ValueExistsInArray(ByRef ArrayToCheck() As String, ByVal ValueToCheck As String, ByVal CheckUntilArrayIndex As Long) As Boolean - + Dim i As Long - + If CheckUntilArrayIndex < 0 Then Exit Function End If - + For i = LBound(ArrayToCheck) To CheckUntilArrayIndex If StrComp(ArrayToCheck(i), ValueToCheck, vbBinaryCompare) = 0 Then ValueExistsInArray = True Exit Function End If Next - + End Function diff --git a/source/codelib/text/StringTools.bas b/source/modules/StringTools.bas similarity index 98% rename from source/codelib/text/StringTools.bas rename to source/modules/StringTools.bas index 3255050..2670a0a 100644 --- a/source/codelib/text/StringTools.bas +++ b/source/modules/StringTools.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "StringTools" +Attribute VB_Name = "StringTools" Attribute VB_Description = "String-Hilfsfunktionen" '--------------------------------------------------------------------------------------- ' Package: text.StringTools @@ -59,22 +59,22 @@ End Enum ' '--------------------------------------------------------------------------------------- Public Function IsNullOrEmpty(ByVal ValueToTest As Variant, Optional ByVal IgnoreSpaces As Boolean = False) As Boolean - + Dim TempValue As String - + If IsNull(ValueToTest) Then IsNullOrEmpty = True Exit Function End If - + TempValue = CStr(ValueToTest) - + If IgnoreSpaces Then TempValue = Trim$(TempValue) End If - + IsNullOrEmpty = (Len(TempValue) = 0) - + End Function '--------------------------------------------------------------------------------------- @@ -96,17 +96,17 @@ Public Function FormatText(ByVal FormatString As String, ParamArray Args() As Va Dim Arg As Variant Dim Temp As String Dim i As Long - + #If USELOCALIZATION = 1 Then FormatString = L10n.Text(FormatString) #End If - + Temp = FormatString For Each Arg In Args Temp = Replace(Temp, "{" & i & "}", CStr(Arg)) i = i + 1 Next - + FormatText = Temp End Function @@ -141,15 +141,15 @@ Public Function FormatX(ByVal Expression As Variant, Optional ByVal FormatString Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1) As String Dim Hours As Long - + If Not IsDate(Expression) Then - If IsNumeric(Expression) Then ' falls Zeitberechnung übergeben wird, ohne auf CDate zu konvertieren + If IsNumeric(Expression) Then ' falls Zeitberechnung übergeben wird, ohne auf CDate zu konvertieren If InStr(1, Replace(FormatString, "[hh]", "[h]"), "[h]") > 0 Then Expression = CDate(Expression) End If End If End If - + If IsDate(Expression) Then If InStr(1, FormatString, "[h", vbTextCompare) > 0 Then Hours = Fix(Round(CDate(Expression) * 24, 1)) @@ -162,7 +162,7 @@ Public Function FormatX(ByVal Expression As Variant, Optional ByVal FormatString End If End If End If - + FormatX = VBA.Format$(Expression, FormatString, FirstDayOfWeek, FirstWeekOfYear) End Function @@ -320,7 +320,7 @@ End Function ' '--------------------------------------------------------------------------------------- Public Function Trim(ByVal Value As String, Optional ByVal TrimType As TrimOption = TrimOption.TrimBoth) As String - + Select Case TrimType Case TrimOption.TrimBoth Trim = VBA.Trim$(Value) @@ -335,7 +335,7 @@ Public Function Trim(ByVal Value As String, Optional ByVal TrimType As TrimOptio Trim = Value Exit Function End Select - + End Function '--------------------------------------------------------------------------------------- @@ -402,7 +402,7 @@ Public Function Replicate(ByVal Value As String, ByVal Number As Long) As String Dim ValueLen As Long Dim TempString As String Dim i As Long - + If Number = 0 Then Replicate = vbNullString Exit Function @@ -410,9 +410,9 @@ Public Function Replicate(ByVal Value As String, ByVal Number As Long) As String Replicate = Value Exit Function End If - + ValueLen = Len(Value) - + If ValueLen = 0 Then Replicate = vbNullString Exit Function @@ -420,13 +420,13 @@ Public Function Replicate(ByVal Value As String, ByVal Number As Long) As String Replicate = String$(Number, Value) Exit Function End If - + TempString = String$(Number * ValueLen, Chr(0)) - + For i = 1 To Number Mid$(TempString, (i - 1) * ValueLen + 1, ValueLen) = Value Next - + Replicate = TempString - + End Function diff --git a/source/codelib/_codelib/addins/shared/VbeTools.cls b/source/modules/VbeTools.cls similarity index 99% rename from source/codelib/_codelib/addins/shared/VbeTools.cls rename to source/modules/VbeTools.cls index 477a780..2e8971b 100644 --- a/source/codelib/_codelib/addins/shared/VbeTools.cls +++ b/source/modules/VbeTools.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -82,7 +82,7 @@ Friend Property Get FindVbProject(ByVal FilePath As String) As Object End If Next End If - + Set FindVbProject = Proj End Property @@ -138,7 +138,7 @@ Public Function CodeModuleExists(ByVal CodeModulName As String, Optional VbProje If VbProjectToScan Is Nothing Then Set VbProjectToScan = CurrentVbProject End If - + Set VbcCol = VbProjectToScan.VBComponents For Each vbc In VbcCol If vbc.Name = CodeModulName Then @@ -146,5 +146,5 @@ Public Function CodeModuleExists(ByVal CodeModulName As String, Optional VbProje Exit For End If Next - + End Function diff --git a/source/codelib/api/winapi/WinApiFileInfo.cls b/source/modules/WinApiFileInfo.cls similarity index 99% rename from source/codelib/api/winapi/WinApiFileInfo.cls rename to source/modules/WinApiFileInfo.cls index 36a9c7b..9f597fd 100644 --- a/source/codelib/api/winapi/WinApiFileInfo.cls +++ b/source/modules/WinApiFileInfo.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -141,38 +141,38 @@ Private Function GetVersion(ByVal FilePath As String, _ GetVersion = False Exit Function End If - + ReDim BufferString(Size) Ret = GetFileVersionInfo(FilePath, 0&, Size, BufferString(0)) If Ret = 0 Then GetVersion = False Exit Function End If - + Ret = VerQueryValue(BufferString(0), "\", VerPointer, VerBufLen) If Ret = 0 Then GetVersion = False Exit Function End If - + Call MoveMemory(FileInfo, VerPointer, Len(FileInfo)) - + With FileInfo - + GetFileInfo.FileVersion = _ Trim$(Str$((.dwFileVersionMS And &HFFFF0000) \ &H10000)) & "." & _ Trim$(Str$(.dwFileVersionMS And &HFFFF&)) & "." & _ Trim$(Str$((.dwFileVersionLS And &HFFFF0000) \ &H10000)) & "." & _ Trim$(Str$(.dwFileVersionLS And &HFFFF&)) - + GetFileInfo.ProductVersion = _ Trim$(Str$((.dwProductVersionMS And &HFFFF0000) \ &H10000)) & "." & _ Trim$(Str$(.dwProductVersionMS And &HFFFF&)) & "." & _ Trim$(Str$((.dwProductVersionLS And &HFFFF0000) \ &H10000)) & "." & _ Trim$(Str$(.dwProductVersionLS And &HFFFF&)) - + End With - + GetVersion = True End Function diff --git a/source/codelib/api/winapi/WinApiLayoutTools.cls b/source/modules/WinApiLayoutTools.cls similarity index 99% rename from source/codelib/api/winapi/WinApiLayoutTools.cls rename to source/modules/WinApiLayoutTools.cls index ef80de9..3647fdb 100644 --- a/source/codelib/api/winapi/WinApiLayoutTools.cls +++ b/source/modules/WinApiLayoutTools.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -110,9 +110,9 @@ Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal DC As Long, ByVal Inde ' '--------------------------------------------------------------------------------------- Public Sub SetBackColor(ByVal Hwnd As LongPtr, ByVal Color As Long) - + Dim NewBrush As LongPtr - + 'Create Brush NewBrush = CreateSolidBrush(Color) 'Assign Brush diff --git a/source/codelib/api/winapi/WinApiShortcutMenu.cls b/source/modules/WinApiShortcutMenu.cls similarity index 97% rename from source/codelib/api/winapi/WinApiShortcutMenu.cls rename to source/modules/WinApiShortcutMenu.cls index c3cd540..9aa31a8 100644 --- a/source/codelib/api/winapi/WinApiShortcutMenu.cls +++ b/source/modules/WinApiShortcutMenu.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -20,7 +20,7 @@ Attribute VB_Exposed = False ' ' Remarks: '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -' | Adapted variant from API example by Jörg Ostendorp of AEK10 +' | Adapted variant from API example by Jörg Ostendorp of AEK10 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' '--------------------------------------------------------------------------------------- @@ -132,14 +132,14 @@ Private Declare PtrSafe Function GetWindowRect _ ByVal Hwnd As LongPtr, _ ByRef lpRect As RECT _ ) As LongPtr - + Private Declare PtrSafe Function SetMenuDefaultItem _ Lib "user32" ( _ ByVal hMenu As LongPtr, _ ByVal uItem As LongPtr, _ ByVal fByPos As LongPtr _ ) As LongPtr - + #Else Private m_Helper As Long 'Auxiliary window handle @@ -223,7 +223,7 @@ Private Declare Function GetWindowRect _ ByVal Hwnd As Long, _ ByRef lpRect As RECT _ ) As Long - + Private Declare Function SetMenuDefaultItem _ Lib "user32" ( _ ByVal hMenu As Long, _ @@ -232,7 +232,7 @@ Private Declare Function SetMenuDefaultItem _ ) As Long #End If - + 'Message Private Const WM_COMMAND As Long = &H111 Private Const WM_MOUSELEAVE As Long = &H2A3 @@ -316,7 +316,7 @@ Public Property Get MenuControl() As Access.Control End Property Public Property Set MenuControl(ByRef MnuCtl As Access.Control) - + #If VBA7 Then Dim lngSectionHwnd As LongPtr #Else @@ -325,7 +325,7 @@ Public Property Set MenuControl(ByRef MnuCtl As Access.Control) Dim ParentObj As Object Set m_MenuControl = MnuCtl - + Set ParentObj = m_MenuControl.Parent If TypeOf ParentObj Is Access.Page Then Set ParentObj = ParentObj.Parent.Parent @@ -333,23 +333,23 @@ Public Property Set MenuControl(ByRef MnuCtl As Access.Control) If m_AccessForm Is Nothing Then Set m_AccessForm = ParentObj End If - + Select Case m_Section Case 0 'Detailbereich lngSectionHwnd = WindowTools.GetDetailSection(ParentObj.Hwnd) Case 1 'Kopf lngSectionHwnd = WindowTools.GetHeaderSection(ParentObj.Hwnd) - Case 2 ' Fuß + Case 2 ' Fuß lngSectionHwnd = WindowTools.GetFooterSection(ParentObj.Hwnd) Case Else lngSectionHwnd = WindowTools.GetDetailSection(ParentObj.Hwnd) End Select Set ParentObj = Nothing - + 'DoCmd.Restore '??? wozu ??? 'Hilfsfenster am Ursprung des Detailbereichs erstellen zur Positionsbestimmung 'wenn das Formular gescrollt wird - + m_Helper = CreateWindowEx(0, _ "Static", _ "Helper", _ @@ -357,9 +357,9 @@ Public Property Set MenuControl(ByRef MnuCtl As Access.Control) 0, 0, 0, 0, _ lngSectionHwnd, _ 0, 0, 0) - 'Wenn die Buttons nicht im Detailbereich sondern im Header oder Footer eingefügt werden, + 'Wenn die Buttons nicht im Detailbereich sondern im Header oder Footer eingefügt werden, 'kann auf das Hilsfenter verzichtet werden. Da diese Bereiche nicht gescrollt werden - 'können, können Sie auch direkt zur Positionsbestimmung des Kontextmenüs herangezogen + 'können, können Sie auch direkt zur Positionsbestimmung des Kontextmenüs herangezogen 'werden ' => ??? wie ? @@ -390,10 +390,10 @@ Public Sub AddMenuItem(ByVal MenuItemNumber As Long, ByVal ItemText As String, _ Optional ByVal ItemType As MenuItemStyle = MF_STRING, _ Optional ByVal SubMenu As Long = 0, _ Optional ByVal DefaultItem As Boolean = False) - + m_ItemCnt = m_ItemCnt + 1 ReDim Preserve m_MenuItems(m_ItemCnt) - + With m_MenuItems(m_ItemCnt) .ItemNumber = MenuItemNumber .ItemText = ItemText @@ -408,7 +408,7 @@ End Sub ' Function: OpenMenu '--------------------------------------------------------------------------------------- ' -' Öffnet das Popup-Menü +' Öffnet das Popup-Menü ' ' Parameters: ' X - desired X position ... can be omitted if Control was specified @@ -436,19 +436,19 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin Dim ButtonTop As Long Dim XPos As Long Dim YPos As Long - + Dim ParentObj As Object Dim AccFormRect As RECT 'Otherwise, nothing is displayed when ENTER is pressed: DoEvents - + 'Create empty menu MenuHwnd = CreatePopupMenu - + 'Add entries Dim i As Long - + For i = 1 To m_ItemCnt With m_MenuItems(i) If .SubMenu > 0 Then @@ -464,17 +464,17 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin Else AppendMenu MenuHwnd, .ItemType, .ItemNumber, .ItemText End If - + If .DefaultItem Then SetMenuDefaultItem MenuHwnd, .ItemNumber - 1, &H400& - + End With - + Next i 'Determine position '- Auxiliary window (~section window) absolute GetWindowRect m_Helper, RcHelper - + If m_MenuControl Is Nothing Then GetWindowRect m_AccessForm.Hwnd, AccFormRect ButtonLeft = LayoutTools.GetPixelFromTwips(X) + AccFormRect.Left @@ -487,9 +487,9 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin '- calc with each other XPos = RcHelper.Left + ButtonLeft - 1 YPos = RcHelper.Top + ButtonTop - + 'Show menu - + If m_MenuControl Is Nothing Then Set ParentObj = m_AccessForm Else @@ -498,25 +498,25 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin Set ParentObj = ParentObj.Parent.Parent End If End If - + TrackPopupMenu MenuHwnd, TPM_BOTTOMALIGN, XPos, YPos, _ ByVal 0&, ParentObj.Hwnd, ByVal 0& - + 'Message-Loop (Attention: for normal forms Application.hWndAccessApp, for POPUPS Form.Hwnd) - + If m_AccessForm.PopUp = True Then Hwnd = m_AccessForm.Hwnd Else Hwnd = Application.hWndAccessApp End If - + Dim RepeatGetMessage As Boolean Do ' Security sleep in case there are problems with windows message. (WM_MOUSELEAVE] RepeatGetMessage = False GetMessage Message, Hwnd, ByVal 0&, ByVal 0& TranslateMessage Message DispatchMessage Message - + 'Evaluate message If Message.Message = WM_COMMAND Then OpenMenu = Message.wParam @@ -526,7 +526,7 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin OpenMenu = 0 End If Loop While RepeatGetMessage - + 'Destroy menu DestroyMenu MenuHwnd diff --git a/source/codelib/api/winapi/WinApiWindowTools.cls b/source/modules/WinApiWindowTools.cls similarity index 89% rename from source/codelib/api/winapi/WinApiWindowTools.cls rename to source/modules/WinApiWindowTools.cls index 084dd7e..ef1e5cc 100644 --- a/source/codelib/api/winapi/WinApiWindowTools.cls +++ b/source/modules/WinApiWindowTools.cls @@ -1,4 +1,4 @@ -VERSION 1.0 CLASS +VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END @@ -19,7 +19,7 @@ Attribute VB_Exposed = False ' Source info: '--------------------------------------------------------------------------------------- '| The procedures GetMDI, GetHeaderSection, GetDetailSection, GetFooterSection and GetControl -'| are taken from the AEK10 lecture by Jörg Ostendorp +'| are taken from the AEK10 lecture by Jörg Ostendorp '--------------------------------------------------------------------------------------- ' '--------------------------------------------------------------------------------------- @@ -149,15 +149,15 @@ End Function Public Function GetControl(ByRef FormRef As Access.Form, ByVal Hwnd As LongPtr, _ ByVal ClassName As String, ByVal ControlName As String) As LongPtr - 'Exitieren mehrere Controls der gleichen Klasse auf einem Formular, z.B. TabControls, besteht das Problem, daß + 'Exitieren mehrere Controls der gleichen Klasse auf einem Formular, z.B. TabControls, besteht das Problem, daß 'deren Reihenfolge nicht definiert ist (anders also als bei den Sektionsfenstern) 'In diesem Fall kann man alle Kindfenster dieser Klasse in einer Schleife durchlaufen - 'und z.B. prüfen, ob die Position des Fensters des zurückgegebenen Handles - 'mit der des Access-Steuerelementes übereinstimmt. - 'Nachfolgend wird hierfür die undokumentierte Funktion accHittest verwendet. + 'und z.B. prüfen, ob die Position des Fensters des zurückgegebenen Handles + 'mit der des Access-Steuerelementes übereinstimmt. + 'Nachfolgend wird hierfür die undokumentierte Funktion accHittest verwendet. 'Dieser werden als Parameter die Screenkoordinaten der linken oberen Ecke eines - 'Steuerelementes übergeben. Befindet sich dort ein Objekt, erhält man dieses als Rückgabewert. - 'Ist der Name des Objektes identisch mit dem übergebenen Steuerelementnamen, so + 'Steuerelementes übergeben. Befindet sich dort ein Objekt, erhält man dieses als Rückgabewert. + 'Ist der Name des Objektes identisch mit dem übergebenen Steuerelementnamen, so 'hat man das Handle ermittelt: On Error Resume Next @@ -169,11 +169,11 @@ On Error Resume Next h = 0 Do - 'Erstes (h=0)/nächstes (h<>0) Control auf dem Sektionsfenster ermitteln + 'Erstes (h=0)/nächstes (h<>0) Control auf dem Sektionsfenster ermitteln h = FindWindowEx(Hwnd, h, ClassName, vbNullString) 'Bildschirmkoordinaten dieses Controls ermitteln - 'dafür die Punktkoordinaten aus dem letzten Durchlauf zurücksetzen, sonst wird addiert! + 'dafür die Punktkoordinaten aus dem letzten Durchlauf zurücksetzen, sonst wird addiert! pt.X = 0 pt.Y = 0 ClientToScreen h, pt @@ -187,7 +187,7 @@ On Error Resume Next End If Loop While h <> 0 - 'Handle zurückgeben + 'Handle zurückgeben GetControl = h End Function diff --git a/source/codelib/_codelib/license.bas b/source/modules/_AccessCodeLib_license.bas similarity index 98% rename from source/codelib/_codelib/license.bas rename to source/modules/_AccessCodeLib_license.bas index 9f34738..a5dab1a 100644 --- a/source/codelib/_codelib/license.bas +++ b/source/modules/_AccessCodeLib_license.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "_AccessCodeLib_license" +Attribute VB_Name = "_AccessCodeLib_license" '--------------------------------------------------------------------------------------- ' access-codelib.net Lizenz '--------------------------------------------------------------------------------------- @@ -53,9 +53,9 @@ Option Compare Text Option Explicit Public Function GetAccessCodeLibLicense() As String - + On Error Resume Next - + GetAccessCodeLibLicense = _ "Copyright (c) access-codelib.net" & vbNewLine & _ "All rights reserved." & vbNewLine & vbNewLine & _ diff --git a/source/_config_Application.bas b/source/modules/_config_Application.bas similarity index 83% rename from source/_config_Application.bas rename to source/modules/_config_Application.bas index 679a128..c372263 100644 --- a/source/_config_Application.bas +++ b/source/modules/_config_Application.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "_config_Application" +Attribute VB_Name = "_config_Application" '--------------------------------------------------------------------------------------- ' Modul: _initApplication '--------------------------------------------------------------------------------------- @@ -6,22 +6,6 @@ Attribute VB_Name = "_config_Application" ' Application configuration ' '--------------------------------------------------------------------------------------- - -'--------------------------------------------------------------------------------------- -' -' %AppFolder%/source/_config_Application.bas -' base/_config_Application.bas -' _codelib/license.bas -' %AppFolder%/source/defGlobal_ACLibFilterFormWizard.bas -' base/_initApplication.bas -' base/modApplication.bas -' base/ApplicationHandler.cls -' base/ApplicationHandler_AppFile.cls -' _codelib/addins/shared/AppFileCodeModulTransfer.cls -' base/modErrorHandler.bas -' localization/L10nTools.bas -' -'--------------------------------------------------------------------------------------- ' ' Don't forget: set USELOCALIZATION = 1 as Compiler argument in Project properties ' @@ -31,8 +15,7 @@ Option Explicit Option Private Module 'Version -Private Const APPLICATION_VERSION As String = "1.8.4" '2024-01 - +Private Const APPLICATION_VERSION As String = "1.8.5" '2025-06 #Const USE_CLASS_APPLICATIONHANDLER_APPFILE = 1 #Const USE_CLASS_APPLICATIONHANDLER_VERSION = 1 @@ -80,24 +63,24 @@ On Error GoTo HandleErr End If With CurrentAppHandlerRef - + 'To be on the safe side, set AccDb Set .AppDb = CodeDb 'must point to CodeDb, 'as this application is used as an add-in - + 'Application name .ApplicationName = APPLICATION_NAME .ApplicationFullName = APPLICATION_FULLNAME .ApplicationTitle = APPLICATION_TITLE - + 'Version .Version = APPLICATION_VERSION - + 'Form called at the end of CurrentApplication.Start .ApplicationStartFormName = ApplicationStartFormName - + End With - + '---------------------------------------------------------------------------- ' Extensions: ' @@ -105,7 +88,7 @@ On Error GoTo HandleErr With m_Extensions Set .ApplicationHandler = CurrentAppHandlerRef .Add New ApplicationHandler_AppFile - + #If USE_CLASS_APPLICATIONHANDLER_VERSION = 1 Then Dim AppHdlVersion As ApplicationHandler_Version Set AppHdlVersion = New ApplicationHandler_Version diff --git a/source/codelib/base/_initApplication.bas b/source/modules/_initApplication.bas similarity index 97% rename from source/codelib/base/_initApplication.bas rename to source/modules/_initApplication.bas index 3db9603..72dd547 100644 --- a/source/codelib/base/_initApplication.bas +++ b/source/modules/_initApplication.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "_initApplication" +Attribute VB_Name = "_initApplication" '--------------------------------------------------------------------------------------- ' Package: base._initApplication '--------------------------------------------------------------------------------------- diff --git a/source/codelib/base/modApplication.bas b/source/modules/modApplication.bas similarity index 97% rename from source/codelib/base/modApplication.bas rename to source/modules/modApplication.bas index c8a3e42..1cb71d9 100644 --- a/source/codelib/base/modApplication.bas +++ b/source/modules/modApplication.bas @@ -1,5 +1,5 @@ -Attribute VB_Name = "modApplication" -Attribute VB_Description = "Standard-Prozeduren für die Arbeit mit ApplicationHandler" +Attribute VB_Name = "modApplication" +Attribute VB_Description = "Standard-Prozeduren für die Arbeit mit ApplicationHandler" '--------------------------------------------------------------------------------------- ' Package: base.modApplication '--------------------------------------------------------------------------------------- @@ -121,13 +121,13 @@ Public Sub DisposeCurrentApplicationHandler() Dim CheckCnt As Long, MaxCnt As Long On Error Resume Next - + If Not m_ApplicationHandler Is Nothing Then m_ApplicationHandler.Dispose End If - + Set m_ApplicationHandler = Nothing - + End Sub diff --git a/source/codelib/base/modErrorHandler.bas b/source/modules/modErrorHandler.bas similarity index 98% rename from source/codelib/base/modErrorHandler.bas rename to source/modules/modErrorHandler.bas index 326f2d4..895214d 100644 --- a/source/codelib/base/modErrorHandler.bas +++ b/source/modules/modErrorHandler.bas @@ -1,5 +1,5 @@ -Attribute VB_Name = "modErrorHandler" -Attribute VB_Description = "Prozeduren für die Fehlerbehandlung" +Attribute VB_Name = "modErrorHandler" +Attribute VB_Description = "Prozeduren für die Fehlerbehandlung" '--------------------------------------------------------------------------------------- ' Package: base.modErrorHandler '--------------------------------------------------------------------------------------- @@ -169,7 +169,7 @@ Public Function HandleError(ByVal ErrNumber As Long, ByVal ErrSource As String, If ErrHandlerMode = ACLibErrorHandlerMode.[_aclibErr_default] Then ErrHandlerMode = m_DefaultErrorHandlerMode End If - + HandleError = ProcHandleError(ErrNumber, ErrSource, ErrDescription, ErrHandlerMode) End Function @@ -182,23 +182,23 @@ Private Function ProcHandleError(ByRef ErrNumber As Long, ByRef ErrSource As Str Dim NewErrSource As String Dim NewErrDescription As String Dim CurrentErrSource As String - + NewErrDescription = Err.Description CurrentErrSource = Err.Source - + On Error Resume Next - + NewErrSource = ErrSource If Len(NewErrSource) = 0 Then NewErrSource = CurrentErrSource ElseIf CurrentErrSource <> GetApplicationVbProjectName Then NewErrSource = NewErrSource & ERRORSOURCE_DELIMITERSYMBOL & CurrentErrSource End If - + If Len(ErrDescription) > 0 Then NewErrDescription = ErrDescription End If - + 'Output to file If (ErrHandlerMode And ACLibErrorHandlerMode.aclibErrFile) Then PrintToFile ErrNumber, NewErrSource, NewErrDescription @@ -225,22 +225,22 @@ On Error GoTo 0 End Function Public Sub ShowErrorMessage(ByVal ErrNumber As Long, ByRef ErrSource As String, ByRef ErrDescription As String) - + Dim ErrMsgBoxTitle As String Dim Pos As Long Dim TempString As String On Error Resume Next - + Const LineBreakPos As Long = 50 - + Pos = InStr(1, ErrSource, ERRORSOURCE_DELIMITERSYMBOL, vbBinaryCompare) If Pos > 1 Then ErrMsgBoxTitle = Left$(ErrSource, Pos - 1) Else ErrMsgBoxTitle = ErrSource End If - + If Len(ErrSource) > LineBreakPos Then Pos = InStr(LineBreakPos, ErrSource, ERRORSOURCE_DELIMITERSYMBOL) If Pos > 0 Then @@ -252,7 +252,7 @@ On Error Resume Next ErrSource = TempString & ErrSource End If End If - + VBA.MsgBox "Error " & ErrNumber & ": " & vbNewLine & ErrDescription & vbNewLine & vbNewLine & "(" & ErrSource & ")", _ vbCritical + vbSystemModal + vbMsgBoxSetForeground, ErrMsgBoxTitle @@ -260,16 +260,16 @@ End Sub Private Sub PrintToFile(ByRef ErrNumber As Long, ByRef ErrSource As String, _ ByRef ErrDescription As String) - + Dim FileSource As String Dim f As Long Dim WriteToFile As Boolean Dim PathToErrLogFile As String - + On Error Resume Next - + WriteToFile = True - + FileSource = "[" & ErrSource & "]" PathToErrLogFile = ErrorHandlerLogFile If Len(PathToErrLogFile) = 0 Then @@ -281,18 +281,18 @@ On Error Resume Next "yyyy-mm-tt hh:nn:ss "); FileSource; _ " Error "; CStr(ErrNumber); ": "; ErrDescription Close #f - + End Sub Private Function GetApplicationVbProjectName() As String - + Static VbProjectName As String - + Dim DbFile As String Dim vbp As Object - + On Error Resume Next - + If Len(VbProjectName) = 0 Then VbProjectName = Access.VBE.ActiveVBProject.Name DbFile = CurrentDb.Name @@ -306,5 +306,5 @@ On Error Resume Next End If End If GetApplicationVbProjectName = VbProjectName - + End Function diff --git a/source/codelib/api/winapi/modWinAPI_Mouse.bas b/source/modules/modWinApi_Mouse.bas similarity index 97% rename from source/codelib/api/winapi/modWinAPI_Mouse.bas rename to source/modules/modWinApi_Mouse.bas index 6feae17..fe91893 100644 --- a/source/codelib/api/winapi/modWinAPI_Mouse.bas +++ b/source/modules/modWinApi_Mouse.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "modWinApi_Mouse" +Attribute VB_Name = "modWinApi_Mouse" '--------------------------------------------------------------------------------------- ' Package: api.winapi.modWinApi_Mouse '--------------------------------------------------------------------------------------- @@ -55,10 +55,10 @@ End Enum ' '--------------------------------------------------------------------------------------- Public Sub MouseCursor(ByVal CursorType As IDC_MouseCursor) - + Dim CursorPtr As LongPtr - + CursorPtr = LoadCursorBynum(0&, CursorType) SetCursor CursorPtr - + End Sub diff --git a/source/codelib/_codelib/addins/shared/modWizardCodeModulesData.bas b/source/modules/modWizardCodeModulesData.bas similarity index 95% rename from source/codelib/_codelib/addins/shared/modWizardCodeModulesData.bas rename to source/modules/modWizardCodeModulesData.bas index f323e7e..c325f38 100644 --- a/source/codelib/_codelib/addins/shared/modWizardCodeModulesData.bas +++ b/source/modules/modWizardCodeModulesData.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "modWizardCodeModulesData" +Attribute VB_Name = "modWizardCodeModulesData" '--------------------------------------------------------------------------------------- ' Package: _codelib.addins.shared.modWizardCodeModulesData '--------------------------------------------------------------------------------------- @@ -22,23 +22,23 @@ Option Explicit Option Private Module Public Property Get SccRev() As String - + With CodeDb.OpenRecordset("select max(SccRev) from usys_AppFiles") If Not .EOF Then SccRev = Nz(.Fields(0).Value, 0) End If .Close End With - + End Property Public Property Get SccRevMin() As String - + With CodeDb.OpenRecordset("select Min(SccRev) from usys_AppFiles") If Not .EOF Then SccRevMin = Nz(.Fields(0).Value, "0") End If .Close End With - + End Property diff --git a/source/modWizardTools.bas b/source/modules/modWizardTools.bas similarity index 90% rename from source/modWizardTools.bas rename to source/modules/modWizardTools.bas index 44f8b84..581b518 100644 --- a/source/modWizardTools.bas +++ b/source/modules/modWizardTools.bas @@ -1,4 +1,4 @@ -Attribute VB_Name = "modWizardTools" +Attribute VB_Name = "modWizardTools" Option Compare Database Option Explicit @@ -6,7 +6,7 @@ Public Function CheckApplicationStartUpMethod() If CurrentDb.Name Like "*.accda" Then MsgBox "The add-in must be installed into the Access add-in directory using the add-in manager. Afterwards it has to be started via the menu entry '" & APPLICATION_NAME & "'.", _ vbExclamation, APPLICATION_NAME & ": Incorrect start" - + Application.Quit End If End Function diff --git a/source/nav-pane-groups.json b/source/nav-pane-groups.json new file mode 100644 index 0000000..5dff1ef --- /dev/null +++ b/source/nav-pane-groups.json @@ -0,0 +1,24 @@ +{ + "Info": { + "Class": "clsDbNavPaneGroup", + "Description": "Navigation Pane Custom Groups" + }, + "Items": { + "Categories": [ + { + "Name": "Benutzerdefiniert", + "Flags": 0, + "Position": 2, + "Groups": [ + { + "Name": "Benutzerdefinierte Gruppe 1", + "Flags": 0, + "Position": 2, + "Objects": [ + ] + } + ] + } + ] + } +} diff --git a/source/proj-properties.json b/source/proj-properties.json new file mode 100644 index 0000000..a113700 --- /dev/null +++ b/source/proj-properties.json @@ -0,0 +1,9 @@ +{ + "Info": { + "Class": "clsDbProjProperty", + "Description": "Project Properties (Access)" + }, + "Items": { + "VCS Source Path": "\\source" + } +} diff --git a/source/project.json b/source/project.json new file mode 100644 index 0000000..00e38af --- /dev/null +++ b/source/project.json @@ -0,0 +1,10 @@ +{ + "Info": { + "Class": "clsDbProject", + "Description": "Project" + }, + "Items": { + "FileFormat": 12, + "RemovePersonalInformation": false + } +} diff --git a/source/queries/L10n_Overview.bas b/source/queries/L10n_Overview.bas new file mode 100644 index 0000000..1d11f7b --- /dev/null +++ b/source/queries/L10n_Overview.bas @@ -0,0 +1,102 @@ +Operation =6 +Option =0 +Begin InputTables + Name ="L10n_Dict" +End +Begin OutputColumns + Expression ="L10n_Dict.KeyText" + GroupLevel =2 + Expression ="L10n_Dict.LangCode" + GroupLevel =1 + Alias ="MaxOfLngText" + Expression ="Max(L10n_Dict.LngText)" +End +Begin Groups + Expression ="L10n_Dict.KeyText" + GroupLevel =2 + Expression ="L10n_Dict.LangCode" + GroupLevel =1 +End +dbBoolean "ReturnsRecords" ="-1" +dbInteger "ODBCTimeout" ="60" +dbByte "RecordsetType" ="0" +dbBoolean "OrderByOn" ="0" +dbByte "Orientation" ="0" +dbByte "DefaultView" ="2" +dbBoolean "FilterOnLoad" ="0" +dbBoolean "OrderByOnLoad" ="-1" +dbBoolean "TotalsRow" ="0" +Begin + Begin + dbText "Name" ="DE" + dbLong "AggregateType" ="-1" + dbInteger "ColumnWidth" ="5565" + dbBoolean "ColumnHidden" ="0" + dbInteger "ColumnOrder" ="3" + End + Begin + dbText "Name" ="EN" + dbLong "AggregateType" ="-1" + dbInteger "ColumnWidth" ="5190" + dbBoolean "ColumnHidden" ="0" + dbInteger "ColumnOrder" ="2" + End + Begin + dbText "Name" ="EN.KeyText" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="EN.LangCode" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="DE.LangCode" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="DE.KeyText" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="L10n_Dict.LangCode" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="L10n_Dict.KeyText" + dbLong "AggregateType" ="-1" + dbInteger "ColumnOrder" ="1" + dbInteger "ColumnWidth" ="5985" + dbBoolean "ColumnHidden" ="0" + End + Begin + dbText "Name" ="L10n_Dict.LngText" + dbLong "AggregateType" ="-1" + End + Begin + dbText "Name" ="PIVOT" + dbLong "AggregateType" ="-1" + End +End +Begin + State =0 + Left =0 + Top =40 + Right =1595 + Bottom =836 + Left =-1 + Top =-1 + Right =1571 + Bottom =309 + Left =0 + Top =0 + ColumnsShown =559 + Begin + Left =61 + Top =66 + Right =205 + Bottom =210 + Top =0 + Name ="L10n_Dict" + Name ="" + End +End diff --git a/source/queries/L10n_Overview.sql b/source/queries/L10n_Overview.sql new file mode 100644 index 0000000..edeaae3 --- /dev/null +++ b/source/queries/L10n_Overview.sql @@ -0,0 +1,7 @@ +TRANSFORM Max(L10n_Dict.LngText) AS MaxOfLngText +SELECT + L10n_Dict.KeyText +FROM + L10n_Dict +GROUP BY + L10n_Dict.KeyText PIVOT L10n_Dict.LangCode; diff --git a/source/tables/L10n_Dict.xml b/source/tables/L10n_Dict.xml new file mode 100644 index 0000000..164c1ff --- /dev/null +++ b/source/tables/L10n_Dict.xml @@ -0,0 +1,497 @@ + + + + DE + <Create new> + <Neu erstellen> + + + DE + ACLib FilterForm Wizard + ACLib FilterForm Wizard + + + DE + ACLib FilterForm Wizard: Incorrect start + ACLib FilterForm Wizard: Fehlerhafter Start + + + DE + Add filter controls + Filter-Steuerelemente anfügen + + + DE + All modules are already up to date. +Still re-insert? + Es sind bereits alle Module auf dem neuesten Stand. +Trotzdem neu einlesen? + + + DE + already installed + bereits installiert + + + DE + ApplyFilter method + ApplyFilter-Methode + + + DE + AutoFilter Checkbox: + AutoFilter-Checkbox: + + + DE + Check wizard version + Wizard-Version prüfen + + + DE + Code has been updated + Codemodule wurden aktualisiert + + + DE + CommandButton "Apply Filter": + CommandButton "Filter anwenden": + + + DE + CommandButton "Remove Filter": + CommandButton "Filter löschen": + + + DE + Control + Steuerelement + + + DE + Current version is installed + Aktuelle Version ist installiert + + + DE + Data field + Datenfeld + + + DE + Data type + Datentyp + + + DE + Don't show records + Anzeige leeren + + + DE + Error during version check + Fehler bei Versionsprüfung + + + DE + Fill list with names from data source + FilterControl-Liste mit Namen aus Datenquelle füllen + + + DE + Filter Classes + Filter-Klassen + + + DE + Filter code + Filter-Variante + + + DE + Filter controls: + Filter-Controls: + + + DE + filter current form + aktuelles Formular filtern + + + DE + Filter definition in tag property + Filter-Definition in Tag-Eigenschaft + + + DE + Filter form: + Filter-Formular: + + + DE + FilterControlManager methods + FilterControlManager-Methoden + + + DE + FilterStringBuilder methods + FilterStringBuilder-Methoden + + + DE + Insert Form Code + Formular-Code einfügen + + + DE + insert sample code + auskommentierten Beispiel-Code einfügen + + + DE + Install classes: + Klassen installieren: + + + DE + New + Neu + + + DE + New version ({0}) available + Neue Version ({0}) verfügbar + + + DE + or with checkbox: + oder z. B. mittels Checkbox: + + + DE + Other controls + weitere Steuerelemente + + + DE + Please select the data form in the "ApplyFilter method" option + Bitte wählen Sie die Datenform in der Option "ApplyFilter method" aus + + + DE + Please select the data form in the 'ApplyFilter method' option + Bitte wählen Sie die Datenform in der Option "ApplyFilter method" aus + + + DE + Please set the data form in the 'ApplyFilter method' option first! + Bitte zuerst in der 'ApplyFilter-Methode'-Option das Datenformular einstellen! + + + DE + Relational operator + Vergleichsoperator + + + DE + Replace all code modules (existing modules are overwritten) + Alle Codemodule erneuern (vorhandene Module werden überschrieben) + + + DE + Replace all code modules except 'SqlTools' (SqlTools remains unchanged) + Alle Codemodule außer 'SqlTools' erneuern (SqlTools bleibt unverändert) + + + DE + Select SQL dialect + SQL-Dialekt auswählen + + + DE + Show all records + Alle Datensätze anzeigen + + + DE + show 'apply filter' is required + Notwendigen Klick auf "Filter anwenden" signalisieren + + + DE + SQL dialect: + SQL-Dialekt: + + + DE + Subform + Unterformular + + + DE + The add-in must be installed into the Access add-in directory using the add-in manager. Afterwards it has to be started via the menu entry 'ACLib FilterForm Wizard'. + Das Add-In muss mit dem Add-In-Manager ins Access-Add-In-Verzeichnis installiert werden. Anschließend ist es über den Menü-Eintrag "ACLib FilterForm Wizard" zu starten. + + + DE + Update code modules in the add-in from the SCC repository (draft). + Codemodule in Add-In aus SCC-Repository aktualisieren (draft). + + + DE + Update code modules in the add-in from the SCC repository (master). + Codemodule in Add-In aus SCC-Repository aktualisieren (master). + + + DE + without parameter transfer all records are displayed + ohne Parameterübergabe werden alle Datensätze angezeigt + + + EN + <Create new> + <Create new> + + + EN + ACLib FilterForm Wizard + ACLib FilterForm Wizard + + + EN + ACLib FilterForm Wizard: Incorrect start + ACLib FilterForm Wizard: Incorrect start + + + EN + Add filter controls + Add filter controls + + + EN + All modules are already up to date. +Still re-insert? + All modules are already up to date. +Still re-insert? + + + EN + already installed + already installed + + + EN + ApplyFilter method + ApplyFilter method + + + EN + AutoFilter Checkbox: + AutoFilter Checkbox: + + + EN + Check wizard version + Check wizard version + + + EN + Code has been updated + Code has been updated + + + EN + CommandButton "Apply Filter": + CommandButton "Apply Filter": + + + EN + CommandButton "Remove Filter": + CommandButton "Remove Filter": + + + EN + Control + Control + + + EN + Current version is installed + Current version is installed + + + EN + Data field + Data field + + + EN + Data type + Data type + + + EN + Don't show records + Don't show records + + + EN + Error during version check + Error during version check + + + EN + Fill list with names from data source + Fill list with names from data source + + + EN + Filter Classes + Filter Classes + + + EN + Filter code + Filter code + + + EN + Filter controls: + Filter controls: + + + EN + filter current form + filter current form + + + EN + Filter definition in tag property + Filter definition in tag property + + + EN + Filter form: + Filter form: + + + EN + FilterControlManager methods + FilterControlManager methods + + + EN + FilterStringBuilder methods + FilterStringBuilder methods + + + EN + Insert Form Code + Insert Form Code + + + EN + insert sample code + insert sample code + + + EN + Install classes: + Install classes: + + + EN + New + New + + + EN + New version ({0}) available + New version ({0}) available + + + EN + or with checkbox: + or with checkbox: + + + EN + Other controls + Other controls + + + EN + Please select the data form in the "ApplyFilter method" option + Please select the data form in the "ApplyFilter method" option + + + EN + Please select the data form in the 'ApplyFilter method' option + Please select the data form in the 'ApplyFilter method' option + + + EN + Please set the data form in the 'ApplyFilter method' option first! + Please set the data form in the 'ApplyFilter method' option first! + + + EN + Relational operator + Relational operator + + + EN + Replace all code modules (existing modules are overwritten) + Replace all code modules (existing modules are overwritten) + + + EN + Replace all code modules except 'SqlTools' (SqlTools remains unchanged) + Replace all code modules except 'SqlTools' (SqlTools remains unchanged) + + + EN + Select SQL dialect + Select SQL dialect + + + EN + Show all records + Show all records + + + EN + show 'apply filter' is required + show 'apply filter' is required + + + EN + SQL dialect: + SQL dialect: + + + EN + Subform + Subform + + + EN + The add-in must be installed into the Access add-in directory using the add-in manager. Afterwards it has to be started via the menu entry 'ACLib FilterForm Wizard'. + The add-in must be installed into the Access add-in directory using the add-in manager. Afterwards it has to be started via the menu entry 'ACLib FilterForm Wizard'. + + + EN + Update code modules in the add-in from the SCC repository (draft). + Update code modules in the add-in from the SCC repository (draft). + + + EN + Update code modules in the add-in from the SCC repository (master). + Update code modules in the add-in from the SCC repository (master). + + + EN + without parameter transfer all records are displayed + without parameter transfer all records are displayed + + diff --git a/source/tables/USysRegInfo.txt b/source/tables/USysRegInfo.txt new file mode 100644 index 0000000..7489800 --- /dev/null +++ b/source/tables/USysRegInfo.txt @@ -0,0 +1,6 @@ +Subkey Type ValName Value +HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 0 +HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 1 Expression =StartApplication() +HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 1 Library |ACCDIR\\ACLibFilterFormWizard.accda +HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 4 BitmapID 339 +HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 4 Version 1 diff --git a/source/tables/tabRelationalOperators.xml b/source/tables/tabRelationalOperators.xml new file mode 100644 index 0000000..8d0e234 --- /dev/null +++ b/source/tables/tabRelationalOperators.xml @@ -0,0 +1,38 @@ + + + + <= + SQL_Equal + SQL_LessThan + 2 + + + <> + SQL_LessThan + SQL_GreaterThan + 4 + + + = + SQL_Equal + 1 + + + >= + SQL_Equal + SQL_GreaterThan + 3 + + + Between + SQL_Between + 6 + + + In (…) + SQL_In + 7 + + + Like + SQL_Like + 5 + + diff --git a/source/tables/tabSqlFieldDataTypes.xml b/source/tables/tabSqlFieldDataTypes.xml new file mode 100644 index 0000000..2c302b7 --- /dev/null +++ b/source/tables/tabSqlFieldDataTypes.xml @@ -0,0 +1,19 @@ + + + + Boolean + SQL_Boolean + + + Date + SQL_Date + + + Numeric + SQL_Numeric + + + Text + SQL_Text + + diff --git a/source/tables/tabSqlLangFormat.xml b/source/tables/tabSqlLangFormat.xml new file mode 100644 index 0000000..07353b0 --- /dev/null +++ b/source/tables/tabSqlLangFormat.xml @@ -0,0 +1,27 @@ + + + + Jet/ADODB + \#yyyy-mm-dd hh:nn:ss\# + True + % + + + Jet/DAO + \#yyyy-mm-dd hh:nn:ss\# + True + * + + + MySQL + 'yyyy-mm-dd hh:nn:ss' + 1 + % + + + T-SQL (SQL Server) + 'yyyymmdd hh:nn:ss' + 1 + % + + diff --git a/source/tables/usys_AppFiles.xml b/source/tables/usys_AppFiles.xml new file mode 100644 index 0000000..9b54675 --- /dev/null +++ b/source/tables/usys_AppFiles.xml @@ -0,0 +1,2677 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AppIcon + AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAgEAAAP9eXgAA6AAAJ5sAAP//AAAAAIAAeVywAAAA +/wD/AP8AAICAAAD//wCAgIAA0L7gAJsAmwD///8AAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAB3AAAAAAAAAAAAAAAAAAB8wHAAAAAAAAAAAAAAAAB3/9wMAAAAAAAAAAAA +AAB3/93M0HAAAAAAAAAAAAB3/9wADN0HAAAAAAAAAAB3/9wADdDN0HAAAAAAAAB3 +/9wADd3dDN0HAAAAAAAgcNwADd3d3dDN0LuwAAAAIHAADd3czd3dDAAAqgAAACBw +Dd3czd3d3dALuwqgAAAgBw3d3d3d3d3dALuwoAAAIQdw3d3d3dzN0NALuwAAACEQ +dw3d0AzN0A0FAADAAAAhEQdw3QiA3QUFANAAAAAAIREQdwCICABQAADdADREACER +EAcIgIgFBVVQAAMwAAAhERCwCAiIAFVVAAAzAzMwIREQuggIiAVVUFAAMDMzACER +ELsICIBQAAAFDwMzMAAhERC6sAgAAAAAAFBQAAAAIREQu6sABQAAAAAFAAAAACER +ELq6oKBQAAAAUFAAAAAgAAC7q6CgBQAABQAFCqAAAN8Au7ugoACQ4FAAALCqAA8N +8LAAAKAAkO4AAAC7CqBg8NAA3wCgAJDu4AAAu7CgZg8ADw3woACZDuAAAAuwoAYA +AADw3wAACZDgAAAAsACAAAAADwDwAACZAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAD//P////B////AP///AB///AAP//AAB//AAAP/AAAAfwAA +AD8AAAAfAAAADwAAAA8AAAAfAAAAHwAAAEMAAAABAAAAAAAAAgAAAAIBAAAQAwAA ++AcAAfx/AAD4JwAAEQMAAgOBAAIHgAACA4AAAgPABgMD4R8Dh/Mfk8//n////w== + + + + FilterControl + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlckNvbnRyb2wiDQpBdHRy +aWJ1dGUgVkJfR2xvYmFsTmFtZVNwYWNlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9D +cmVhdGFibGUgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX1ByZWRlY2xhcmVkSWQgPSBG +YWxzZQ0KQXR0cmlidXRlIFZCX0V4cG9zZWQgPSBGYWxzZQ0KJy0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBLbGFzc2U6IEZpbHRlckNv +bnRyb2wNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N +CicvKioNCicgXGF1dGhvciAgICAgICBKb3NlZiBQb2V0emwNCicgPHN1bW1hcnk+ +DQonIEZvcm11bGFyLVN0ZXVlcmVsZW1lbnQgbWl0IEZpbHRlcmVpbnN0ZWxsdW5n +ZW4NCicgPC9zdW1tYXJ5Pg0KJyA8cmVtYXJrcz5XaXJkIGluIEZpbHRlckNvbnRy +b2xDb2xsZWN0aW9uIHVuZCBGaWx0ZXJDb250cm9sTWFuYWdlciB2ZXJ3ZW5kZXQ8 +L3JlbWFya3M+DQonIFxpbmdyb3VwIGRhdGENCicqKi8NCictLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCic8Y29kZWxpYj4NCicgIDxmaWxl +PmZvcm0vZmlsdGVyL0ZpbHRlckNvbnRyb2wuY2xzPC9maWxlPg0KJyAgPGxpY2Vu +c2U+X2NvZGVsaWIvbGljZW5zZS5iYXM8L2xpY2Vuc2U+DQonICA8dXNlPmRhdGEv +U3FsVG9vbHMuY2xzPC91c2U+DQonICA8dXNlPmZvcm0vZmlsdGVyL0ZpbHRlckNv +bnRyb2xFdmVudEJyaWRnZS5jbHM8L3VzZT4NCic8L2NvZGVsaWI+DQonLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQpPcHRpb24gQ29t +cGFyZSBEYXRhYmFzZQ0KT3B0aW9uIEV4cGxpY2l0DQoNClByaXZhdGUgbV9FdmVu +dEJyaWRnZSBBcyBGaWx0ZXJDb250cm9sRXZlbnRCcmlkZ2UNCkF0dHJpYnV0ZSBt +X0V2ZW50QnJpZGdlLlZCX1ZhckhlbHBJRCA9IC0xDQoNClByaXZhdGUgbV9EYXRh +RmllbGQgQXMgU3RyaW5nDQpQcml2YXRlIG1fRGF0YVR5cGUgQXMgU3FsRmllbGRE +YXRhVHlwZQ0KUHJpdmF0ZSBtX1JlbGF0aW9uYWxPcGVyYXRvciBBcyBTcWxSZWxh +dGlvbmFsT3BlcmF0b3JzDQpQcml2YXRlIG1fSWdub3JlVmFsdWUgQXMgVmFyaWFu +dA0KDQpQcml2YXRlIG1fQ29udHJvbCBBcyBDb250cm9sDQpQcml2YXRlIFdpdGhF +dmVudHMgbV9UZXh0Ym94IEFzIFRleHRCb3gNCkF0dHJpYnV0ZSBtX1RleHRib3gu +VkJfVmFySGVscElEID0gLTENClByaXZhdGUgV2l0aEV2ZW50cyBtX0NvbWJvQm94 +IEFzIENvbWJvQm94DQpBdHRyaWJ1dGUgbV9Db21ib0JveC5WQl9WYXJIZWxwSUQg +PSAtMQ0KUHJpdmF0ZSBXaXRoRXZlbnRzIG1fTGlzdEJveCBBcyBMaXN0Qm94DQpB +dHRyaWJ1dGUgbV9MaXN0Qm94LlZCX1ZhckhlbHBJRCA9IC0xDQpQcml2YXRlIFdp +dGhFdmVudHMgbV9Ub2dnbGVCdXR0b24gQXMgVG9nZ2xlQnV0dG9uDQpBdHRyaWJ1 +dGUgbV9Ub2dnbGVCdXR0b24uVkJfVmFySGVscElEID0gLTENClByaXZhdGUgV2l0 +aEV2ZW50cyBtX0NoZWNrQm94IEFzIENoZWNrQm94DQpBdHRyaWJ1dGUgbV9DaGVj +a0JveC5WQl9WYXJIZWxwSUQgPSAtMQ0KUHJpdmF0ZSBXaXRoRXZlbnRzIG1fT3B0 +aW9uQnV0dG9uIEFzIE9wdGlvbkJ1dHRvbg0KQXR0cmlidXRlIG1fT3B0aW9uQnV0 +dG9uLlZCX1ZhckhlbHBJRCA9IC0xDQpQcml2YXRlIFdpdGhFdmVudHMgbV9PcHRp +b25Hcm91cCBBcyBPcHRpb25Hcm91cA0KQXR0cmlidXRlIG1fT3B0aW9uR3JvdXAu +VkJfVmFySGVscElEID0gLTENCg0KUHJpdmF0ZSBDb25zdCBFdmVudFByb2NlZHVy +ZVByb3BlcnR5VGFnIEFzIFN0cmluZyA9ICJbRXZlbnQgUHJvY2VkdXJlXSINCg0K +UHJpdmF0ZSBtX0ZpbHRlckNvbnRyb2wyIEFzIEZpbHRlckNvbnRyb2wNClByaXZh +dGUgbV9TdWJGaWx0ZXJDb250cm9scyBBcyBDb2xsZWN0aW9uDQoNClB1YmxpYyBE +aXNhYmxlUmVtb3ZlRmlsdGVyVmFsdWUgQXMgQm9vbGVhbg0KDQpQcml2YXRlIFN1 +YiBJbml0Q29udHJvbCgpDQoNCiAgIFJlbW92ZVdpdGhFdmVudHNDb250cm9sUmVm +cw0KDQogICBJZiBUeXBlT2YgbV9Db250cm9sLlBhcmVudCBJcyBPcHRpb25Hcm91 +cCBUaGVuDQogICAgICAnRXJlaWduaXNiZWhhbmRsdW5nIGJlaSBDb250cm9sIG5p +Y2h0IG32Z2xpY2ggPT4gbV9PcHRpb25Hcm91cC5BZnRlclVwZGF0ZSBwcvxmZW4N +CiAgICAgIFNldCBtX09wdGlvbkdyb3VwID0gbV9Db250cm9sLlBhcmVudA0KICAg +ICAgQ2hlY2tBZnRlclVwZGF0ZUV2ZW50SGFuZGxlciBtX09wdGlvbkdyb3VwDQog +ICAgICBFeGl0IFN1Yg0KICAgRW5kIElmDQoNCiAgIFNlbGVjdCBDYXNlIG1fQ29u +dHJvbC5Db250cm9sVHlwZQ0KICAgICAgQ2FzZSBhY1RleHRCb3gNCiAgICAgICAg +IFNldCBtX1RleHRib3ggPSBtX0NvbnRyb2wNCiAgICAgIENhc2UgYWNDb21ib0Jv +eA0KICAgICAgICAgU2V0IG1fQ29tYm9Cb3ggPSBtX0NvbnRyb2wNCiAgICAgIENh +c2UgYWNMaXN0Qm94DQogICAgICAgICBTZXQgbV9MaXN0Qm94ID0gbV9Db250cm9s +DQogICAgICBDYXNlIGFjVG9nZ2xlQnV0dG9uDQogICAgICAgICBTZXQgbV9Ub2dn +bGVCdXR0b24gPSBtX0NvbnRyb2wNCiAgICAgIENhc2UgYWNPcHRpb25CdXR0b24N +CiAgICAgICAgIFNldCBtX09wdGlvbkJ1dHRvbiA9IG1fQ29udHJvbA0KICAgICAg +Q2FzZSBhY0NoZWNrQm94DQogICAgICAgICBTZXQgbV9DaGVja0JveCA9IG1fQ29u +dHJvbA0KICAgICAgQ2FzZSBhY09wdGlvbkdyb3VwDQogICAgICAgICBTZXQgbV9P +cHRpb25Hcm91cCA9IG1fQ29udHJvbA0KICAgICAgQ2FzZSBFbHNlDQogICANCiAg +IEVuZCBTZWxlY3QNCiAgIA0KICAgQ2hlY2tBZnRlclVwZGF0ZUV2ZW50SGFuZGxl +ciBtX0NvbnRyb2wNCg0KRW5kIFN1Yg0KDQpQcml2YXRlIFN1YiBDaGVja0FmdGVy +VXBkYXRlRXZlbnRIYW5kbGVyKEJ5VmFsIENvbnRyb2xUb0NoZWNrIEFzIENvbnRy +b2wpDQoNCiAgIElmIExlbihDb250cm9sVG9DaGVjay5BZnRlclVwZGF0ZSkgPSAw +IFRoZW4NCiAgICAgIENvbnRyb2xUb0NoZWNrLkFmdGVyVXBkYXRlID0gRXZlbnRQ +cm9jZWR1cmVQcm9wZXJ0eVRhZw0KICAgRW5kIElmDQoNCkVuZCBTdWINCg0KUHJp +dmF0ZSBTdWIgUmVtb3ZlV2l0aEV2ZW50c0NvbnRyb2xSZWZzKCkNCiAgIFNldCBt +X1RleHRib3ggPSBOb3RoaW5nDQogICBTZXQgbV9Db21ib0JveCA9IE5vdGhpbmcN +CiAgIFNldCBtX0xpc3RCb3ggPSBOb3RoaW5nDQogICBTZXQgbV9Ub2dnbGVCdXR0 +b24gPSBOb3RoaW5nDQogICBTZXQgbV9DaGVja0JveCA9IE5vdGhpbmcNCiAgIFNl +dCBtX09wdGlvbkJ1dHRvbiA9IE5vdGhpbmcNCiAgIFNldCBtX09wdGlvbkdyb3Vw +ID0gTm90aGluZw0KRW5kIFN1Yg0KDQpQcml2YXRlIFN1YiBDbGFzc19Jbml0aWFs +aXplKCkNCiAgIG1fSWdub3JlVmFsdWUgPSBOdWxsDQpFbmQgU3ViDQoNClByaXZh +dGUgU3ViIENsYXNzX1Rlcm1pbmF0ZSgpDQogICBEaXNwb3NlDQpFbmQgU3ViDQoN +CkZyaWVuZCBTdWIgRGlzcG9zZSgpDQogICBTZXQgbV9FdmVudEJyaWRnZSA9IE5v +dGhpbmcNCiAgIFNldCBtX1N1YkZpbHRlckNvbnRyb2xzID0gTm90aGluZw0KICAg +U2V0IG1fRmlsdGVyQ29udHJvbDIgPSBOb3RoaW5nDQogICBTZXQgbV9Db250cm9s +ID0gTm90aGluZw0KRW5kIFN1Yg0KDQpGcmllbmQgUHJvcGVydHkgR2V0IEV2ZW50 +QnJpZGdlKCkgQXMgRmlsdGVyQ29udHJvbEV2ZW50QnJpZGdlDQogICBTZXQgRXZl +bnRCcmlkZ2UgPSBtX0V2ZW50QnJpZGdlDQpFbmQgUHJvcGVydHkNCg0KRnJpZW5k +IFByb3BlcnR5IFNldCBFdmVudEJyaWRnZShCeVZhbCBOZXdSZWYgQXMgRmlsdGVy +Q29udHJvbEV2ZW50QnJpZGdlKQ0KDQogICBTZXQgbV9FdmVudEJyaWRnZSA9IE5l +d1JlZg0KDQogICBJZiBOb3QgKG1fRmlsdGVyQ29udHJvbDIgSXMgTm90aGluZykg +VGhlbg0KICAgICAgU2V0IG1fRmlsdGVyQ29udHJvbDIuRXZlbnRCcmlkZ2UgPSBt +X0V2ZW50QnJpZGdlDQogICBFbmQgSWYNCg0KICAgSWYgbV9TdWJGaWx0ZXJDb250 +cm9scyBJcyBOb3RoaW5nIFRoZW4gRXhpdCBQcm9wZXJ0eQ0KICAgSWYgbV9TdWJG +aWx0ZXJDb250cm9scy5Db3VudCA9IDAgVGhlbiBFeGl0IFByb3BlcnR5DQogICAN +CiAgIERpbSBmYyBBcyBGaWx0ZXJDb250cm9sDQogICBGb3IgRWFjaCBmYyBJbiBt +X1N1YkZpbHRlckNvbnRyb2xzDQogICAgICBTZXQgZmMuRXZlbnRCcmlkZ2UgPSBt +X0V2ZW50QnJpZGdlDQogICBOZXh0DQoNCkVuZCBQcm9wZXJ0eQ0KDQpQcml2YXRl +IFN1YiBSYWlzZUZpbHRlclZhbHVlQ2hhbmdlZCgpDQogICBJZiBtX0V2ZW50QnJp +ZGdlIElzIE5vdGhpbmcgVGhlbiBFeGl0IFN1Yg0KICAgbV9FdmVudEJyaWRnZS5S +YWlzZUZpbHRlclZhbHVlQ2hhbmdlZCBNZQ0KRW5kIFN1Yg0KDQpQdWJsaWMgUHJv +cGVydHkgR2V0IFNlbGYoKSBBcyBGaWx0ZXJDb250cm9sDQogICBTZXQgU2VsZiA9 +IE1lDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IEdldCBDb250cm9s +KCkgQXMgQ29udHJvbA0KICAgU2V0IENvbnRyb2wgPSBtX0NvbnRyb2wNCkVuZCBQ +cm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVydHkgU2V0IENvbnRyb2woQnlWYWwgTmV3 +UmVmIEFzIENvbnRyb2wpDQogICBTZXQgbV9Db250cm9sID0gTmV3UmVmDQogICBJ +bml0Q29udHJvbA0KRW5kIFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQg +Q29udHJvbDIoKSBBcyBDb250cm9sDQogICBJZiBtX0ZpbHRlckNvbnRyb2wyIElz +IE5vdGhpbmcgVGhlbg0KICAgICAgU2V0IENvbnRyb2wyID0gTm90aGluZw0KICAg +RWxzZQ0KICAgICAgU2V0IENvbnRyb2wyID0gbV9GaWx0ZXJDb250cm9sMi5Db250 +cm9sDQogICBFbmQgSWYNCkVuZCBQcm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVydHkg +U2V0IENvbnRyb2wyKEJ5VmFsIE5ld1JlZiBBcyBDb250cm9sKQ0KICAgU2V0IG1f +RmlsdGVyQ29udHJvbDIgPSBOZXcgRmlsdGVyQ29udHJvbA0KICAgV2l0aCBtX0Zp +bHRlckNvbnRyb2wyDQogICAgICBTZXQgLkNvbnRyb2wgPSBOZXdSZWYNCiAgICAg +IFNldCAuRXZlbnRCcmlkZ2UgPSBtX0V2ZW50QnJpZGdlDQogICBFbmQgV2l0aA0K +RW5kIFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQgU3ViQ29udHJvbHMo +KSBBcyBDb2xsZWN0aW9uDQogICBJZiBtX1N1YkZpbHRlckNvbnRyb2xzIElzIE5v +dGhpbmcgVGhlbg0KICAgICAgU2V0IFN1YkNvbnRyb2xzID0gTm90aGluZw0KICAg +RWxzZQ0KICAgICAgU2V0IFN1YkNvbnRyb2xzID0gbV9TdWJGaWx0ZXJDb250cm9s +cw0KICAgRW5kIElmDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFN1YiBTZXRTdWJD +b250cm9scyhCeVZhbCBTdWJDb250cm9sQXJyYXkgQXMgVmFyaWFudCkNCg0KICAg +RGltIGN0bCBBcyBWYXJpYW50DQoNCiAgIFNldCBtX1N1YkZpbHRlckNvbnRyb2xz +ID0gTmV3IENvbGxlY3Rpb24NCiAgIEZvciBFYWNoIGN0bCBJbiBTdWJDb250cm9s +QXJyYXkNCiAgICAgIFdpdGggTmV3IEZpbHRlckNvbnRyb2wNCiAgICAgICAgIFNl +dCAuQ29udHJvbCA9IGN0bA0KICAgICAgICAgU2V0IC5FdmVudEJyaWRnZSA9IG1f +RXZlbnRCcmlkZ2UNCiAgICAgICAgIC5JZ25vcmVWYWx1ZSA9IG1fSWdub3JlVmFs +dWUNCiAgICAgICAgIG1fU3ViRmlsdGVyQ29udHJvbHMuQWRkIC5TZWxmDQogICAg +ICBFbmQgV2l0aA0KICAgTmV4dA0KDQpFbmQgU3ViDQoNClB1YmxpYyBQcm9wZXJ0 +eSBHZXQgRGF0YUZpZWxkKCkgQXMgU3RyaW5nDQogICBEYXRhRmllbGQgPSBtX0Rh +dGFGaWVsZA0KRW5kIFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBMZXQgRGF0 +YUZpZWxkKEJ5VmFsIE5ld1ZhbHVlIEFzIFN0cmluZykNCiAgIG1fRGF0YUZpZWxk +ID0gTmV3VmFsdWUNCkVuZCBQcm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVydHkgR2V0 +IERhdGFUeXBlKCkgQXMgU3FsRmllbGREYXRhVHlwZQ0KICAgRGF0YVR5cGUgPSBt +X0RhdGFUeXBlDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IExldCBE +YXRhVHlwZShCeVZhbCBOZXdWYWx1ZSBBcyBTcWxGaWVsZERhdGFUeXBlKQ0KICAg +bV9EYXRhVHlwZSA9IE5ld1ZhbHVlDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFBy +b3BlcnR5IEdldCBSZWxhdGlvbmFsT3BlcmF0b3IoKSBBcyBTcWxSZWxhdGlvbmFs +T3BlcmF0b3JzDQogICBSZWxhdGlvbmFsT3BlcmF0b3IgPSBtX1JlbGF0aW9uYWxP +cGVyYXRvcg0KRW5kIFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBMZXQgUmVs +YXRpb25hbE9wZXJhdG9yKEJ5VmFsIE5ld1ZhbHVlIEFzIFNxbFJlbGF0aW9uYWxP +cGVyYXRvcnMpDQogICBtX1JlbGF0aW9uYWxPcGVyYXRvciA9IE5ld1ZhbHVlDQpF +bmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IEdldCBJZ25vcmVWYWx1ZSgp +IEFzIFZhcmlhbnQNCiAgIElnbm9yZVZhbHVlID0gbV9JZ25vcmVWYWx1ZQ0KRW5k +IFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBMZXQgSWdub3JlVmFsdWUoQnlW +YWwgTmV3VmFsdWUgQXMgVmFyaWFudCkNCiAgIG1fSWdub3JlVmFsdWUgPSBOZXdW +YWx1ZQ0KRW5kIFByb3BlcnR5DQoNClByaXZhdGUgRnVuY3Rpb24gR2V0Q2hlY2tl +ZElnbm9yZVZhbHVlKCkgQXMgVmFyaWFudA0KICAgSWYgSXNBcnJheShtX0lnbm9y +ZVZhbHVlKSBUaGVuDQogICAgICBHZXRDaGVja2VkSWdub3JlVmFsdWUgPSBtX0ln +bm9yZVZhbHVlKExCb3VuZChtX0lnbm9yZVZhbHVlKSkNCiAgIEVsc2UNCiAgICAg +IEdldENoZWNrZWRJZ25vcmVWYWx1ZSA9IG1fSWdub3JlVmFsdWUNCiAgIEVuZCBJ +Zg0KRW5kIEZ1bmN0aW9uDQoNClB1YmxpYyBGdW5jdGlvbiBDcml0ZXJpYVN0cmlu +ZyhCeVZhbCBTcWxUb29sc1JlZiBBcyBTcWxUb29scykgQXMgU3RyaW5nDQogICAN +CiAgIElmIG1fU3ViRmlsdGVyQ29udHJvbHMgSXMgTm90aGluZyBUaGVuDQogICAg +ICBDcml0ZXJpYVN0cmluZyA9IFNxbFRvb2xzUmVmLkJ1aWxkQ3JpdGVyaWEobV9E +YXRhRmllbGQsIG1fRGF0YVR5cGUsIG1fUmVsYXRpb25hbE9wZXJhdG9yLCBHZXRD +b250cm9sVmFsdWUoQ29udHJvbCksIEdldENvbnRyb2xWYWx1ZShDb250cm9sMiks +IElnbm9yZVZhbHVlLCBGYWxzZSkNCiAgIEVsc2UNCiAgICAgIENyaXRlcmlhU3Ry +aW5nID0gU3FsVG9vbHNSZWYuQnVpbGRDcml0ZXJpYShtX0RhdGFGaWVsZCwgbV9E +YXRhVHlwZSwgbV9SZWxhdGlvbmFsT3BlcmF0b3IsIEdldFN1YkNvbnRyb2xzVmFs +dWVzLCAsIElnbm9yZVZhbHVlLCBGYWxzZSkNCiAgIEVuZCBJZg0KDQpFbmQgRnVu +Y3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBHZXRTdWJDb250cm9sc1ZhbHVlcygp +IEFzIFZhcmlhbnQoKQ0KICAgDQogICBEaW0gZmMgQXMgRmlsdGVyQ29udHJvbA0K +ICAgRGltIGkgQXMgTG9uZw0KICAgRGltIFZhbHVlcygpIEFzIFZhcmlhbnQNCiAg +IFJlRGltIFZhbHVlcygwIFRvIChtX1N1YkZpbHRlckNvbnRyb2xzLkNvdW50IC0g +MSkpDQoNCiAgIEZvciBFYWNoIGZjIEluIG1fU3ViRmlsdGVyQ29udHJvbHMNCiAg +ICAgIFNlbGVjdCBDYXNlIGZjLkNvbnRyb2wuQ29udHJvbFR5cGUNCiAgICAgICAg +IENhc2UgYWNDaGVja0JveCwgYWNUb2dnbGVCdXR0b24sIGFjT3B0aW9uQnV0dG9u +DQogICAgICAgICAgICBJZiBUeXBlT2YgZmMuQ29udHJvbC5QYXJlbnQgSXMgT3B0 +aW9uR3JvdXAgVGhlbg0KICAgICAgICAgICAgICAgSWYgZmMuQ29udHJvbC5PcHRp +b25WYWx1ZSA9IGZjLkNvbnRyb2wuUGFyZW50LlZhbHVlIFRoZW4NCiAgICAgICAg +ICAgICAgICAgIFZhbHVlcyhpKSA9IGZjLkNvbnRyb2wuVGFnDQogICAgICAgICAg +ICAgICBFbHNlDQogICAgICAgICAgICAgICAgICBWYWx1ZXMoaSkgPSBHZXRDaGVj +a2VkSWdub3JlVmFsdWUNCiAgICAgICAgICAgICAgIEVuZCBJZg0KICAgICAgICAg +ICAgRWxzZQ0KICAgICAgICAgICAgICAgSWYgZmMuQ29udHJvbC5WYWx1ZSA9IFRy +dWUgVGhlbg0KICAgICAgICAgICAgICAgICAgVmFsdWVzKGkpID0gZmMuQ29udHJv +bC5UYWcNCiAgICAgICAgICAgICAgIEVsc2UNCiAgICAgICAgICAgICAgICAgIFZh +bHVlcyhpKSA9IEdldENoZWNrZWRJZ25vcmVWYWx1ZQ0KICAgICAgICAgICAgICAg +RW5kIElmDQogICAgICAgICAgICBFbmQgSWYNCiAgICAgICAgIENhc2UgRWxzZQ0K +ICAgICAgICAgICAgVmFsdWVzKGkpID0gZmMuQ29udHJvbC5WYWx1ZQ0KICAgICAg +RW5kIFNlbGVjdA0KICAgICAgaSA9IGkgKyAxDQogICBOZXh0DQoNCiAgIEdldFN1 +YkNvbnRyb2xzVmFsdWVzID0gVmFsdWVzDQoNCkVuZCBGdW5jdGlvbg0KDQpQcml2 +YXRlIEZ1bmN0aW9uIEdldENvbnRyb2xWYWx1ZShCeVZhbCBDb250cm9sUmVmIEFz +IENvbnRyb2wpIEFzIFZhcmlhbnQNCiAgIA0KICAgSWYgQ29udHJvbFJlZiBJcyBO +b3RoaW5nIFRoZW4NCiAgICAgIEdldENvbnRyb2xWYWx1ZSA9IE51bGwNCiAgICAg +IEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KICAgDQogICBJZiBUeXBlT2YgQ29u +dHJvbFJlZiBJcyBMaXN0Qm94IFRoZW4NCiAgICAgIEdldENvbnRyb2xWYWx1ZSA9 +IEdldExpc3RCb3hGaWx0ZXJWYWx1ZShDb250cm9sUmVmKQ0KICAgICAgRXhpdCBG +dW5jdGlvbg0KICAgRW5kIElmDQoNCiAgIEdldENvbnRyb2xWYWx1ZSA9IENvbnRy +b2xSZWYuVmFsdWUNCiAgIA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rp +b24gR2V0TGlzdEJveEZpbHRlclZhbHVlKEJ5VmFsIExpc3RCb3hSZWYgQXMgTGlz +dEJveCkgQXMgVmFyaWFudA0KICAgDQogICBJZiBMaXN0Qm94UmVmLk11bHRpU2Vs +ZWN0ID4gMCBUaGVuDQogICAgICBHZXRMaXN0Qm94RmlsdGVyVmFsdWUgPSBHZXRT +ZWxlY3RlZExpc3Rib3hJdGVtQXJyYXkoTGlzdEJveFJlZiwgTGlzdEJveFJlZi5C +b3VuZENvbHVtbiAtIDEpDQogICBFbHNlDQogICAgICBHZXRMaXN0Qm94RmlsdGVy +VmFsdWUgPSBMaXN0Qm94UmVmLlZhbHVlDQogICBFbmQgSWYNCiAgIA0KRW5kIEZ1 +bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gR2V0U2VsZWN0ZWRMaXN0Ym94SXRl +bUFycmF5KEJ5VmFsIExpc3RCb3hSZWYgQXMgTGlzdEJveCwgQnlWYWwgQ29sdW1u +SW5kZXggQXMgTG9uZykgQXMgVmFyaWFudCgpDQogICANCiAgIERpbSBJdGVtQXJy +YXkoKSBBcyBWYXJpYW50DQogICBEaW0gTWF4QXJySW5kZXggQXMgTG9uZw0KICAg +RGltIFNlbGVjdGVkSXRlbXMgQXMgW19JdGVtc1NlbGVjdGVkXQ0KDQogICBTZXQg +U2VsZWN0ZWRJdGVtcyA9IExpc3RCb3hSZWYuSXRlbXNTZWxlY3RlZA0KICAgTWF4 +QXJySW5kZXggPSBTZWxlY3RlZEl0ZW1zLkNvdW50IC0gMQ0KICAgSWYgTWF4QXJy +SW5kZXggPCAwIFRoZW4NCiAgICAgIEdldFNlbGVjdGVkTGlzdGJveEl0ZW1BcnJh +eSA9IEl0ZW1BcnJheQ0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQoN +CiAgIFJlRGltIEl0ZW1BcnJheShNYXhBcnJJbmRleCkNCiAgIERpbSBpIEFzIExv +bmcNCg0KICAgRm9yIGkgPSAwIFRvIE1heEFyckluZGV4DQogICAgICBJdGVtQXJy +YXkoaSkgPSBMaXN0Qm94UmVmLkNvbHVtbihDb2x1bW5JbmRleCwgU2VsZWN0ZWRJ +dGVtcy5JdGVtKGkpKQ0KICAgTmV4dA0KDQogICBHZXRTZWxlY3RlZExpc3Rib3hJ +dGVtQXJyYXkgPSBJdGVtQXJyYXkNCg0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUg +U3ViIG1fQ2hlY2tCb3hfQWZ0ZXJVcGRhdGUoKQ0KICAgUmFpc2VGaWx0ZXJWYWx1 +ZUNoYW5nZWQNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgbV9Db21ib0JveF9BZnRl +clVwZGF0ZSgpDQogICBSYWlzZUZpbHRlclZhbHVlQ2hhbmdlZA0KRW5kIFN1Yg0K +DQpQcml2YXRlIFN1YiBtX0xpc3RCb3hfQWZ0ZXJVcGRhdGUoKQ0KICAgUmFpc2VG +aWx0ZXJWYWx1ZUNoYW5nZWQNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgbV9PcHRp +b25CdXR0b25fQWZ0ZXJVcGRhdGUoKQ0KICAgUmFpc2VGaWx0ZXJWYWx1ZUNoYW5n +ZWQNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgbV9PcHRpb25Hcm91cF9BZnRlclVw +ZGF0ZSgpDQogICBSYWlzZUZpbHRlclZhbHVlQ2hhbmdlZA0KRW5kIFN1Yg0KDQpQ +cml2YXRlIFN1YiBtX1RleHRib3hfQWZ0ZXJVcGRhdGUoKQ0KICAgUmFpc2VGaWx0 +ZXJWYWx1ZUNoYW5nZWQNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgbV9Ub2dnbGVC +dXR0b25fQWZ0ZXJVcGRhdGUoKQ0KICAgUmFpc2VGaWx0ZXJWYWx1ZUNoYW5nZWQN +CkVuZCBTdWINCg0KUHVibGljIFN1YiBSZW1vdmVGaWx0ZXJWYWx1ZShPcHRpb25h +bCBCeVZhbCBSYWlzZUZpbHRlclZhbHVlQ2hhbmdlZEV2ZW50IEFzIEJvb2xlYW4g +PSBUcnVlKQ0KDQogICBJZiBOb3QgKG1fQ29udHJvbCBJcyBOb3RoaW5nKSBUaGVu +DQoNCiAgICAgIFNlbGVjdCBDYXNlIG1fQ29udHJvbC5Db250cm9sVHlwZQ0KICAg +ICAgICAgQ2FzZSBhY0NoZWNrQm94LCBhY1RvZ2dsZUJ1dHRvbiwgYWNPcHRpb25C +dXR0b24NCiAgICAgICAgICAgIElmIFR5cGVPZiBtX0NvbnRyb2wuUGFyZW50IElz +IE9wdGlvbkdyb3VwIFRoZW4NCiAgICAgICAgICAgICAgIG1fQ29udHJvbC5QYXJl +bnQuVmFsdWUgPSBHZXRDaGVja2VkSWdub3JlVmFsdWUNCiAgICAgICAgICAgIEVs +c2UNCiAgICAgICAgICAgICAgIG1fQ29udHJvbC5WYWx1ZSA9IEZhbHNlDQogICAg +ICAgICAgICBFbmQgSWYNCiAgICAgICAgIENhc2UgYWNDb21ib0JveA0KICAgICAg +ICAgICAgSWYgSXNBcnJheShtX0NvbnRyb2wuVmFsdWUpIFRoZW4NCiAgICAgICAg +ICAgICAgIFJlbW92ZU11bHRpVmFsdWVTZWxlY3Rpb24gbV9Db250cm9sDQogICAg +ICAgICAgICBFbHNlSWYgbV9Db250cm9sLlZhbHVlID0gR2V0Q2hlY2tlZElnbm9y +ZVZhbHVlIFRoZW4NCiAgICAgICAgICAgIEVsc2VJZiBOb3QgKElzTnVsbChtX0Nv +bnRyb2wuVmFsdWUpIEFuZCBJc051bGwoR2V0Q2hlY2tlZElnbm9yZVZhbHVlKSkg +VGhlbg0KICAgICAgICAgICAgICAgbV9Db250cm9sLlZhbHVlID0gR2V0Q2hlY2tl +ZElnbm9yZVZhbHVlDQogICAgICAgICAgICBFbmQgSWYNCiAgICAgICAgIENhc2Ug +YWNMaXN0Qm94DQogICAgICAgICAgICBSZW1vdmVMaXN0Ym94U2VsZWN0aW9uIG1f +Q29udHJvbA0KICAgICAgICAgQ2FzZSBFbHNlDQogICAgICAgICAgICBtX0NvbnRy +b2wuVmFsdWUgPSBHZXRDaGVja2VkSWdub3JlVmFsdWUNCiAgICAgIEVuZCBTZWxl +Y3QNCiAgIEVuZCBJZg0KDQogICBJZiBOb3QgKG1fRmlsdGVyQ29udHJvbDIgSXMg +Tm90aGluZykgVGhlbg0KICAgICAgbV9GaWx0ZXJDb250cm9sMi5SZW1vdmVGaWx0 +ZXJWYWx1ZSBGYWxzZQ0KICAgRW5kIElmDQoNCiAgIElmIE5vdCAobV9TdWJGaWx0 +ZXJDb250cm9scyBJcyBOb3RoaW5nKSBUaGVuDQogICAgICBEaW0gZmMgQXMgRmls +dGVyQ29udHJvbA0KICAgICAgRm9yIEVhY2ggZmMgSW4gbV9TdWJGaWx0ZXJDb250 +cm9scw0KICAgICAgICAgZmMuUmVtb3ZlRmlsdGVyVmFsdWUgRmFsc2UNCiAgICAg +IE5leHQNCiAgIEVuZCBJZg0KDQogICBJZiBSYWlzZUZpbHRlclZhbHVlQ2hhbmdl +ZEV2ZW50IFRoZW4NCiAgICAgIFJhaXNlRmlsdGVyVmFsdWVDaGFuZ2VkDQogICBF +bmQgSWYNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgUmVtb3ZlTGlzdGJveFNlbGVj +dGlvbihCeVZhbCBMaXN0Qm94UmVmIEFzIExpc3RCb3gpDQogICANCiAgIERpbSBJ +dGVtIEFzIFZhcmlhbnQNCg0KICAgV2l0aCBMaXN0Qm94UmVmDQogICAgICBJZiBJ +c0FycmF5KC5WYWx1ZSkgVGhlbg0KICAgICAgICAgUmVtb3ZlTXVsdGlWYWx1ZVNl +bGVjdGlvbiBMaXN0Qm94UmVmDQogICAgICBFbHNlSWYgLk11bHRpU2VsZWN0ID0g +MSBUaGVuDQogICAgICAgICBGb3IgRWFjaCBJdGVtIEluIC5JdGVtc1NlbGVjdGVk +DQogICAgICAgICAgICAuU2VsZWN0ZWQoSXRlbSkgPSBGYWxzZQ0KICAgICAgICAg +TmV4dA0KICAgICAgRWxzZQ0KICAgICAgICAgLlZhbHVlID0gR2V0Q2hlY2tlZEln +bm9yZVZhbHVlDQogICAgICBFbmQgSWYNCiAgIEVuZCBXaXRoDQogICANCkVuZCBT +dWINCg0KUHJpdmF0ZSBTdWIgUmVtb3ZlTXVsdGlWYWx1ZVNlbGVjdGlvbihCeVZh +bCBNdWx0aVZhbHVlQ29udHJvbCBBcyBDb250cm9sKQ0KJyBBdXN3YWhsIGluIE11 +bHRpVmFsdWUtTGlzdGJveC9Db21ib2JveCBsZWVyZW4NCg0KICAgRGltIEZvcm1S +ZWYgQXMgRm9ybQ0KICAgRGltIHJzTVYgQXMgREFPLlJlY29yZHNldDINCg0KICAg +SWYgTm90IElzQXJyYXkoTXVsdGlWYWx1ZUNvbnRyb2wuVmFsdWUpIFRoZW4NCiAg +ICAgIEV4aXQgU3ViDQogICBFbmQgSWYNCiAgIA0KJyAgIE11bHRpVmFsdWVDb250 +cm9sLlZhbHVlID0gQXJyYXkoKSAnIEF1Z3VzdCAyMDE5OiBs5HVmdCBudW4gbmlj +aHQgbWVociA9PiBNZW1vcnkgb3ZlcmZsb3cgPT4gVW13ZWcg/GJlciBSZWNvcmRz +ZXQgZ2VoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JyAoZnVua3Rpb25pZXJ0ZSBub2NoIGJlaSBPZmZpY2UgMTkwMiBidWlsZCAxMTMy +OC4yMDM2OCwgV2luZG93cyAxMC4wLjEwNTg2IEJ1aWxkIDEwNTg2KQ0KICAgDQog +ICBTZXQgRm9ybVJlZiA9IG1fQ29udHJvbC5QYXJlbnQNCiAgIFNldCByc01WID0g +Rm9ybVJlZi5SZWNvcmRzZXQuRmllbGRzKE11bHRpVmFsdWVDb250cm9sLkNvbnRy +b2xTb3VyY2UpLlZhbHVlDQogICBXaXRoIHJzTVYNCiAgICAgIERvIFdoaWxlIE5v +dCAuRU9GDQogICAgICAgICAuRGVsZXRlDQogICAgICAgICAuUmVxdWVyeQ0KICAg +ICAgTG9vcA0KICAgRW5kIFdpdGgNCg0KICAgRm9ybVJlZi5EaXJ0eSA9IEZhbHNl +DQogICBNdWx0aVZhbHVlQ29udHJvbC5SZXF1ZXJ5DQogICANCkVuZCBTdWINCg== + + 20250609094839 + form/filter/FilterControl.cls + + + FilterControlCollection + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlckNvbnRyb2xDb2xsZWN0 +aW9uIg0KQXR0cmlidXRlIFZCX0dsb2JhbE5hbWVTcGFjZSA9IEZhbHNlDQpBdHRy +aWJ1dGUgVkJfQ3JlYXRhYmxlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9QcmVkZWNs +YXJlZElkID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9FeHBvc2VkID0gRmFsc2UNCict +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgS2xhc3Nl +OiBGaWx0ZXJDb250cm9sQ29sbGVjdGlvbg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLQ0KJy8qKg0KJyBcYXV0aG9yICAgICAgIEpvc2Vm +IFBvZXR6bA0KJyA8c3VtbWFyeT4NCicgU2FtbWx1bmcgdm9uIEZvcm11bGFyLVN0 +ZXVlcmVsZW1lbnRlbiB6dXIgRmlsdGVyZXJzdGVsbHVuZw0KJyA8L3N1bW1hcnk+ +DQonIDxyZW1hcmtzPldpcmQgaW4gRmlsdGVyQ29udHJvbE1hbmFnZXIgdmVyd2Vu +ZGV0PC9yZW1hcmtzPg0KJyBcaW5ncm91cCBkYXRhDQonKiovDQonLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonPGNvZGVsaWI+DQonICA8 +ZmlsZT5mb3JtL2ZpbHRlci9GaWx0ZXJDb250cm9sQ29sbGVjdGlvbi5jbHM8L2Zp +bGU+DQonICA8bGljZW5zZT5fY29kZWxpYi9saWNlbnNlLmJhczwvbGljZW5zZT4N +CicgIDx1c2U+Zm9ybS9maWx0ZXIvRmlsdGVyQ29udHJvbC5jbHM8L3VzZT4NCicg +IDx1c2U+Zm9ybS9maWx0ZXIvRmlsdGVyQ29udHJvbEV2ZW50QnJpZGdlLmNsczwv +dXNlPg0KJyAgPHVzZT5kYXRhL0ZpbHRlclN0cmluZ0J1aWxkZXIuY2xzPC91c2U+ +DQonICA8dXNlPmRhdGEvU3FsVG9vbHMuY2xzPC91c2U+DQonICA8dGVzdD5fdGVz +dC9mb3JtL2ZpbHRlci9GaWx0ZXJDb250cm9sQ29sbGVjdGlvblRlc3RzLmNsczwv +dGVzdD4NCic8L2NvZGVsaWI+DQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tDQonDQpPcHRpb24gQ29tcGFyZSBEYXRhYmFzZQ0KT3B0aW9u +IEV4cGxpY2l0DQoNClByaXZhdGUgbV9GaWx0ZXJDb250cm9scyBBcyBDb2xsZWN0 +aW9uDQpQcml2YXRlIFdpdGhFdmVudHMgbV9FdmVudEJyaWRnZSBBcyBGaWx0ZXJD +b250cm9sRXZlbnRCcmlkZ2UNCkF0dHJpYnV0ZSBtX0V2ZW50QnJpZGdlLlZCX1Zh +ckhlbHBJRCA9IC0xDQpQcml2YXRlIG1fSXRlbUNvbmNhdE9wZXJhdG9yIEFzIFNx +bExvZ2ljYWxPcGVyYXRvcg0KDQpQcml2YXRlIG1fU3FsUHJlZml4IEFzIFN0cmlu +Zw0KUHJpdmF0ZSBtX1NxbFN1ZmZpeCBBcyBTdHJpbmcNClByaXZhdGUgbV9Db25k +aXRpb25QcmVmaXggQXMgU3RyaW5nDQpQcml2YXRlIG1fSWdub3JlU3FsUHJlU3Vm +Zml4SWZFbXB0eUZpbHRlciBBcyBCb29sZWFuDQoNClByaXZhdGUgQ29uc3QgbV9X +aGVyZVJlcGxhY2VtZW50VGV4dCBBcyBTdHJpbmcgPSAiW1doZXJlU3RhdGVtZW50 +XSINCg0KUHVibGljIEV2ZW50IEZpbHRlclZhbHVlc0NoYW5nZWQoKQ0KUHVibGlj +IEV2ZW50IEZpbHRlclZhbHVlUmVxdWVzdChCeVZhbCBGaWx0ZXJWYWx1ZUNvZGUg +QXMgU3RyaW5nLCBCeVJlZiBGaWx0ZXJWYWx1ZSBBcyBTdHJpbmcpDQoNClByaXZh +dGUgU3ViIENsYXNzX0luaXRpYWxpemUoKQ0KICAgU2V0IG1fRmlsdGVyQ29udHJv +bHMgPSBOZXcgQ29sbGVjdGlvbg0KICAgU2V0IG1fRXZlbnRCcmlkZ2UgPSBOZXcg +RmlsdGVyQ29udHJvbEV2ZW50QnJpZGdlDQogICBtX0l0ZW1Db25jYXRPcGVyYXRv +ciA9IFNxbExvZ2ljYWxPcGVyYXRvci5TUUxfQW5kDQpFbmQgU3ViDQoNCkZyaWVu +ZCBQcm9wZXJ0eSBHZXQgRXZlbnRCcmlkZ2UoKSBBcyBGaWx0ZXJDb250cm9sRXZl +bnRCcmlkZ2UNCiAgIFNldCBFdmVudEJyaWRnZSA9IG1fRXZlbnRCcmlkZ2UNCkVu +ZCBQcm9wZXJ0eQ0KDQpGcmllbmQgUHJvcGVydHkgU2V0IEV2ZW50QnJpZGdlKEJ5 +VmFsIE5ld1JlZiBBcyBGaWx0ZXJDb250cm9sRXZlbnRCcmlkZ2UpDQoNCiAgIFNl +dCBtX0V2ZW50QnJpZGdlID0gTmV3UmVmDQogICANCiAgIERpbSBmYyBBcyBGaWx0 +ZXJDb250cm9sDQogICBGb3IgRWFjaCBmYyBJbiBtX0ZpbHRlckNvbnRyb2xzDQog +ICAgICBTZXQgZmMuRXZlbnRCcmlkZ2UgPSBtX0V2ZW50QnJpZGdlDQogICBOZXh0 +DQoNCkVuZCBQcm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVydHkgR2V0IFNlbGYoKSBB +cyBGaWx0ZXJDb250cm9sQ29sbGVjdGlvbg0KICAgU2V0IFNlbGYgPSBNZQ0KRW5k +IFByb3BlcnR5DQoNClB1YmxpYyBGdW5jdGlvbiBBZGQoQnlWYWwgRGF0YUZpZWxk +TmFtZSBBcyBTdHJpbmcsIEJ5VmFsIERhdGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5 +cGUsIF8NCiAgICAgICAgICAgICAgIEJ5VmFsIFJlbGF0aW9uYWxPcGVyYXRvciBB +cyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBfDQogICAgICAgICAgICAgICBCeVZh +bCBDb250cm9sUmVmIEFzIENvbnRyb2wsIF8NCiAgICAgIE9wdGlvbmFsIEJ5VmFs +IENvbnRyb2wyUmVmIEFzIENvbnRyb2wgPSBOb3RoaW5nLCBfDQogICAgICBPcHRp +b25hbCBCeVZhbCBJZ25vcmVWYWx1ZSBBcyBWYXJpYW50ID0gTnVsbCkgQXMgRmls +dGVyQ29udHJvbA0KICAgDQogICBXaXRoIE5ldyBGaWx0ZXJDb250cm9sDQogICAg +ICBTZXQgLkV2ZW50QnJpZGdlID0gbV9FdmVudEJyaWRnZQ0KICAgICAgU2V0IC5D +b250cm9sID0gQ29udHJvbFJlZg0KICAgICAgLkRhdGFGaWVsZCA9IERhdGFGaWVs +ZE5hbWUNCiAgICAgIC5EYXRhVHlwZSA9IERhdGFUeXBlDQogICAgICAuUmVsYXRp +b25hbE9wZXJhdG9yID0gUmVsYXRpb25hbE9wZXJhdG9yDQogICAgICBJZiBOb3Qg +KENvbnRyb2wyUmVmIElzIE5vdGhpbmcpIFRoZW4NCiAgICAgICAgIFNldCAuQ29u +dHJvbDIgPSBDb250cm9sMlJlZg0KICAgICAgRW5kIElmDQogICAgICAuSWdub3Jl +VmFsdWUgPSBJZ25vcmVWYWx1ZQ0KICAgICAgbV9GaWx0ZXJDb250cm9scy5BZGQg +LlNlbGYNCiAgICAgIFNldCBBZGQgPSAuU2VsZg0KICAgRW5kIFdpdGgNCiAgIA0K +RW5kIEZ1bmN0aW9uDQoNClB1YmxpYyBGdW5jdGlvbiBBZGRHcm91cChPcHRpb25h +bCBCeVZhbCBDb25jYXRPcGVyYXRvciBBcyBTcWxMb2dpY2FsT3BlcmF0b3IgPSBT +cWxMb2dpY2FsT3BlcmF0b3IuU1FMX09yKSBBcyBGaWx0ZXJDb250cm9sQ29sbGVj +dGlvbg0KICAgDQogICBXaXRoIE5ldyBGaWx0ZXJDb250cm9sQ29sbGVjdGlvbg0K +ICAgICAgLkl0ZW1Db25jYXRPcGVyYXRvciA9IENvbmNhdE9wZXJhdG9yDQogICAg +ICBTZXQgLkV2ZW50QnJpZGdlID0gbV9FdmVudEJyaWRnZQ0KICAgICAgbV9GaWx0 +ZXJDb250cm9scy5BZGQgLlNlbGYNCiAgICAgIFNldCBBZGRHcm91cCA9IC5TZWxm +DQogICBFbmQgV2l0aA0KDQpFbmQgRnVuY3Rpb24NCg0KUHVibGljIFByb3BlcnR5 +IEdldCBJdGVtQ29uY2F0T3BlcmF0b3IoKSBBcyBTcWxMb2dpY2FsT3BlcmF0b3IN +CiAgIEl0ZW1Db25jYXRPcGVyYXRvciA9IG1fSXRlbUNvbmNhdE9wZXJhdG9yDQpF +bmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IExldCBJdGVtQ29uY2F0T3Bl +cmF0b3IoQnlWYWwgTmV3VmFsdWUgQXMgU3FsTG9naWNhbE9wZXJhdG9yKQ0KICAg +bV9JdGVtQ29uY2F0T3BlcmF0b3IgPSBOZXdWYWx1ZQ0KRW5kIFByb3BlcnR5DQoN +ClB1YmxpYyBTdWIgQWRkTXVsdGlDb250cm9sQ3JpdGVyaWEoIF8NCiAgICAgICAg +ICAgICAgIEJ5VmFsIERhdGFGaWVsZE5hbWUgQXMgU3RyaW5nLCBCeVZhbCBEYXRh +VHlwZSBBcyBTcWxGaWVsZERhdGFUeXBlLCBfDQogICAgICAgICAgICAgICBCeVZh +bCBSZWxhdGlvbmFsT3BlcmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycywg +Xw0KICAgICAgICAgICAgICAgQnlWYWwgSWdub3JlVmFsdWUgQXMgVmFyaWFudCwg +Xw0KICAgICAgICAgICAgICAgUGFyYW1BcnJheSBDb250cm9scygpIEFzIFZhcmlh +bnQpDQogICANCiAgIFdpdGggTmV3IEZpbHRlckNvbnRyb2wNCiAgICAgIFNldCAu +RXZlbnRCcmlkZ2UgPSBtX0V2ZW50QnJpZGdlDQogICAgICAuRGF0YUZpZWxkID0g +RGF0YUZpZWxkTmFtZQ0KICAgICAgLkRhdGFUeXBlID0gRGF0YVR5cGUNCiAgICAg +IC5SZWxhdGlvbmFsT3BlcmF0b3IgPSBSZWxhdGlvbmFsT3BlcmF0b3INCiAgICAg +IC5JZ25vcmVWYWx1ZSA9IElnbm9yZVZhbHVlDQogICAgICAuU2V0U3ViQ29udHJv +bHMgQ29udHJvbHMNCiAgICAgIG1fRmlsdGVyQ29udHJvbHMuQWRkIC5TZWxmDQog +ICBFbmQgV2l0aA0KICAgDQpFbmQgU3ViDQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQg +SXRlbXMoKSBBcyBDb2xsZWN0aW9uDQogICBTZXQgSXRlbXMgPSBtX0ZpbHRlckNv +bnRyb2xzDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFN1YiBSZW1vdmVGaWx0ZXJW +YWx1ZXMoT3B0aW9uYWwgQnlWYWwgUmFpc2VGaWx0ZXJWYWx1ZXNDaGFuZ2VkRXZl +bnQgQXMgQm9vbGVhbiA9IFRydWUpDQogICANCiAgIERpbSBmYyBBcyBPYmplY3Qg +JyBGaWx0ZXJDb250cm9sIG9kZXIgRmlsdGVyQ29udHJvbENvbGxlY3Rpb24NCiAg +IEZvciBFYWNoIGZjIEluIEl0ZW1zDQogICAgICBJZiBUeXBlT2YgZmMgSXMgRmls +dGVyQ29udHJvbENvbGxlY3Rpb24gVGhlbg0KICAgICAgICAgZmMuUmVtb3ZlRmls +dGVyVmFsdWVzIEZhbHNlDQogICAgICBFbHNlDQogICAgICAgICBmYy5SZW1vdmVG +aWx0ZXJWYWx1ZSBGYWxzZQ0KICAgICAgRW5kIElmDQogICBOZXh0DQogICANCiAg +IElmIFJhaXNlRmlsdGVyVmFsdWVzQ2hhbmdlZEV2ZW50IFRoZW4NCiAgICAgIFJh +aXNlRXZlbnQgRmlsdGVyVmFsdWVzQ2hhbmdlZA0KICAgRW5kIElmDQogICANCkVu +ZCBTdWINCg0KUHVibGljIFN1YiBSZW1vdmVDb250cm9scyhPcHRpb25hbCBCeVZh +bCBSYWlzZUZpbHRlclZhbHVlc0NoYW5nZWRFdmVudCBBcyBCb29sZWFuID0gVHJ1 +ZSkNCiAgIA0KICAgU2V0IG1fRmlsdGVyQ29udHJvbHMgPSBOb3RoaW5nDQogICBT +ZXQgbV9GaWx0ZXJDb250cm9scyA9IE5ldyBDb2xsZWN0aW9uDQogICANCiAgIElm +IFJhaXNlRmlsdGVyVmFsdWVzQ2hhbmdlZEV2ZW50IFRoZW4NCiAgICAgIFJhaXNl +RXZlbnQgRmlsdGVyVmFsdWVzQ2hhbmdlZA0KICAgRW5kIElmDQogICANCkVuZCBT +dWINCg0KUHJpdmF0ZSBTdWIgbV9FdmVudEJyaWRnZV9GaWx0ZXJWYWx1ZVJlcXVl +c3QoQnlWYWwgRmlsdGVyVmFsdWVDb2RlIEFzIFN0cmluZywgQnlSZWYgRmlsdGVy +VmFsdWUgQXMgU3RyaW5nKQ0KICAgUmFpc2VFdmVudCBGaWx0ZXJWYWx1ZVJlcXVl +c3QoRmlsdGVyVmFsdWVDb2RlLCBGaWx0ZXJWYWx1ZSkNCkVuZCBTdWINCg0KUHJp +dmF0ZSBTdWIgbV9FdmVudEJyaWRnZV9GaWx0ZXJWYWx1ZXNDaGFuZ2VkKEJ5VmFs +IEZpbHRlckNvbnRyb2xSZWYgQXMgRmlsdGVyQ29udHJvbCkNCiAgIFJhaXNlRXZl +bnQgRmlsdGVyVmFsdWVzQ2hhbmdlZA0KRW5kIFN1Yg0KDQpQdWJsaWMgU3ViIENs +ZWFyKCkNCg0KICAgU2V0IG1fRXZlbnRCcmlkZ2UgPSBOb3RoaW5nDQogICBTZXQg +bV9GaWx0ZXJDb250cm9scyA9IE5vdGhpbmcNCiAgIFNldCBtX0ZpbHRlckNvbnRy +b2xzID0gTmV3IENvbGxlY3Rpb24NCiAgIFNldCBtX0V2ZW50QnJpZGdlID0gTmV3 +IEZpbHRlckNvbnRyb2xFdmVudEJyaWRnZQ0KICAgDQpFbmQgU3ViDQoNClB1Ymxp +YyBGdW5jdGlvbiBDcml0ZXJpYVN0cmluZyhCeVZhbCBTcWxUb29sc1JlZiBBcyBT +cWxUb29scykgQXMgU3RyaW5nDQogICANCiAgIERpbSBmYyBBcyBPYmplY3QgJyBz +Y2j2bmVyIHfkcmUgQXMgRmlsdGVyQ29udHJvbCBrb21pbmllcnQgbWl0IEZpbHRl +ckNvbnRyb2xDb2xsZWN0aW9uIGltcGxlbWVudHMgRmlsdGVyQ29udHJvbA0KICAg +ICAgICAgICAgICAgICAgICAnIC4uIGFiZXIgSW1wbGVtZW50cyBpc3QgYXVzIEVy +ZmFocnVuZyBtaXQgVm9yc2ljaHQgenUgZ2VuaWXfZW4sIHdlbm4gQ29kZS9JbnRl +cmZhY2UgaW4gQWNjZXNzL1ZCQSBnZeRuZGVydCB3aXJkLg0KDQogICBXaXRoIE5l +dyBGaWx0ZXJTdHJpbmdCdWlsZGVyDQogICAgICAuQ29uZmlnU3FsU3RhdGVtZW50 +IEluc2VydEV2ZW50VmFsdWVzKG1fU3FsUHJlZml4KSwgSW5zZXJ0RXZlbnRWYWx1 +ZXMobV9TcWxTdWZmaXgpLCBtX0NvbmRpdGlvblByZWZpeCwgbV9JZ25vcmVTcWxQ +cmVTdWZmaXhJZkVtcHR5RmlsdGVyDQogICAgICBGb3IgRWFjaCBmYyBJbiBtX0Zp +bHRlckNvbnRyb2xzDQogICAgICAgICAuQWRkQ3JpdGVyaWEgZmMuQ3JpdGVyaWFT +dHJpbmcoU3FsVG9vbHNSZWYpDQogICAgICBOZXh0DQogICAgICBDcml0ZXJpYVN0 +cmluZyA9IC5Ub1N0cmluZyhtX0l0ZW1Db25jYXRPcGVyYXRvcikNCiAgIEVuZCBX +aXRoDQoNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIEluc2VydEV2 +ZW50VmFsdWVzKEJ5VmFsIFN0cmluZ1RvQ2hlY2sgQXMgU3RyaW5nKSBBcyBTdHJp +bmcNCg0KICAgRGltIENoZWNrU3RyaW5nQXJyYXkoKSBBcyBTdHJpbmcNCiAgIA0K +ICAgSWYgTGVuKFN0cmluZ1RvQ2hlY2spID0gMCBUaGVuDQogICAgICBFeGl0IEZ1 +bmN0aW9uDQogICBFbmQgSWYNCiAgIA0KICAgQ2hlY2tTdHJpbmdBcnJheSA9IFNw +bGl0KFN0cmluZ1RvQ2hlY2ssICJbRXZlbnRWYWx1ZSgiLCAsIHZiVGV4dENvbXBh +cmUpDQogICANCiAgIERpbSBpIEFzIExvbmcNCiAgIERpbSBBcnJheVNpemUgQXMg +TG9uZw0KICAgDQogICBBcnJheVNpemUgPSBVQm91bmQoQ2hlY2tTdHJpbmdBcnJh +eSkNCiAgIA0KICAgSWYgQXJyYXlTaXplID0gMCBUaGVuDQogICAgICBJbnNlcnRF +dmVudFZhbHVlcyA9IFN0cmluZ1RvQ2hlY2sNCiAgICAgIEV4aXQgRnVuY3Rpb24N +CiAgIEVuZCBJZg0KICAgDQogICBEaW0gRmlsdGVyVmFsdWVDb2RlIEFzIFN0cmlu +Zw0KICAgRGltIEZpbHRlclZhbHVlIEFzIFN0cmluZw0KICAgRGltIFBvcyBBcyBT +dHJpbmcNCiAgIERpbSBUZW1wU3RyaW5nIEFzIFN0cmluZw0KICAgDQogICBGb3Ig +aSA9IDEgVG8gQXJyYXlTaXplDQogICANCiAgICAgIFBvcyA9IEluU3RyKDEsIENo +ZWNrU3RyaW5nQXJyYXkoaSksICIpIikNCiAgICAgIEZpbHRlclZhbHVlQ29kZSA9 +IExlZnQoQ2hlY2tTdHJpbmdBcnJheShpKSwgUG9zIC0gMSkNCiAgICAgIA0KICAg +ICAgUG9zID0gSW5TdHIoUG9zLCBDaGVja1N0cmluZ0FycmF5KGkpLCAiXSIpDQog +ICAgICANCiAgICAgIFRlbXBTdHJpbmcgPSBNaWQoQ2hlY2tTdHJpbmdBcnJheShp +KSwgUG9zICsgMSkNCiAgICAgIA0KICAgICAgRmlsdGVyVmFsdWUgPSAiTnVsbCIN +CiAgICAgIFJhaXNlRXZlbnQgRmlsdGVyVmFsdWVSZXF1ZXN0KEZpbHRlclZhbHVl +Q29kZSwgRmlsdGVyVmFsdWUpDQogICAgICBJZiBGaWx0ZXJWYWx1ZSA9ICJOdWxs +IiBUaGVuDQogICAgICAgICBtX0V2ZW50QnJpZGdlLlJhaXNlRmlsdGVyVmFsdWVS +ZXF1ZXN0IEZpbHRlclZhbHVlQ29kZSwgRmlsdGVyVmFsdWUNCiAgICAgIEVuZCBJ +Zg0KICAgICAgDQogICAgICBDaGVja1N0cmluZ0FycmF5KGkpID0gRmlsdGVyVmFs +dWUgJiBUZW1wU3RyaW5nDQogICAgICANCiAgIE5leHQNCiAgIA0KICAgSW5zZXJ0 +RXZlbnRWYWx1ZXMgPSBKb2luKENoZWNrU3RyaW5nQXJyYXksIHZiTnVsbFN0cmlu +ZykNCg0KRW5kIEZ1bmN0aW9uDQoNClB1YmxpYyBGdW5jdGlvbiBBZGRTdWJTZWxl +Y3RDcml0ZXJpYSggXw0KICAgICAgICAgICAgICAgQnlWYWwgRmllbGROYW1lIEFz +IFN0cmluZywgXw0KICAgICAgICAgICAgICAgQnlWYWwgUmVsYXRpb25hbE9wZXJh +dG9yIEFzIFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMsIF8NCiAgICAgICAgICAgICAg +IEJ5VmFsIFNlbGVjdEZyb21UZXh0IEFzIFN0cmluZywgXw0KICAgICAgICAgICAg +ICAgT3B0aW9uYWwgQnlWYWwgSWdub3JlSWZTdWJTZWxlY3RIYXNOb0NyaXRlcmlh +IEFzIEJvb2xlYW4gPSBGYWxzZSwgXw0KICAgICAgICAgICAgICAgT3B0aW9uYWwg +QnlWYWwgVXNlV2hlcmVSZXBsYWNlbWVudFRleHRJbkZyb21UZXh0IEFzIEJvb2xl +YW4gPSBGYWxzZSwgXw0KICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgU3Vi +U2VsZWN0Q29uY2F0T3BlcmF0b3IgQXMgU3FsTG9naWNhbE9wZXJhdG9yID0gU3Fs +TG9naWNhbE9wZXJhdG9yLlNRTF9BbmQgXw0KICAgICAgKSBBcyBGaWx0ZXJDb250 +cm9sQ29sbGVjdGlvbg0KICAgICAgDQogICBEaW0gU3FsUHJlZml4IEFzIFN0cmlu +Zw0KICAgRGltIFNxbFN1ZmZpeCBBcyBTdHJpbmcNCiAgIERpbSBXaGVyZVJlcGxh +Y2VtZW50UG9zIEFzIExvbmcNCiAgIERpbSBDb25kaXRpb25QcmVmaXggQXMgU3Ry +aW5nDQogICANCiAgIFNxbFByZWZpeCA9IEZpZWxkTmFtZSAmICIgIiAmIFNxbFRv +b2xzLkdldFJlbGF0aW9uYWxPcGVyYXRvclN0cmluZyhSZWxhdGlvbmFsT3BlcmF0 +b3IpICYgIiAoIg0KICAgU3FsU3VmZml4ID0gIikiDQogICBDb25kaXRpb25QcmVm +aXggPSAiIFdoZXJlICINCiAgIA0KICAgSWYgVXNlV2hlcmVSZXBsYWNlbWVudFRl +eHRJbkZyb21UZXh0IFRoZW4NCiAgICAgIFdoZXJlUmVwbGFjZW1lbnRQb3MgPSBJ +blN0cigxLCBTZWxlY3RGcm9tVGV4dCwgbV9XaGVyZVJlcGxhY2VtZW50VGV4dCwg +dmJUZXh0Q29tcGFyZSkNCiAgIEVuZCBJZg0KICAgDQogICBJZiBXaGVyZVJlcGxh +Y2VtZW50UG9zID4gMCBUaGVuDQogICAgICBTcWxQcmVmaXggPSBTcWxQcmVmaXgg +JiBUcmltJChMZWZ0KFNlbGVjdEZyb21UZXh0LCBXaGVyZVJlcGxhY2VtZW50UG9z +IC0gMSkpDQogICAgICBTcWxTdWZmaXggPSAiKSAiICYgVHJpbSQoTWlkJChTZWxl +Y3RGcm9tVGV4dCwgV2hlcmVSZXBsYWNlbWVudFBvcyArIExlbihtX1doZXJlUmVw +bGFjZW1lbnRUZXh0KSArIDEpKSAmIFNxbFN1ZmZpeA0KICAgICAgQ29uZGl0aW9u +UHJlZml4ID0gQ29uZGl0aW9uUHJlZml4ICYgIigiDQogICBFbHNlDQogICAgICBT +cWxQcmVmaXggPSBTcWxQcmVmaXggJiBTZWxlY3RGcm9tVGV4dA0KICAgRW5kIElm +DQogICANCiAgIFdpdGggTmV3IEZpbHRlckNvbnRyb2xDb2xsZWN0aW9uDQogICAg +ICAuSXRlbUNvbmNhdE9wZXJhdG9yID0gU3ViU2VsZWN0Q29uY2F0T3BlcmF0b3IN +CiAgICAgIC5Db25maWdTcWxTdGF0ZW1lbnQgU3FsUHJlZml4Oj1TcWxQcmVmaXgs +IFNxbFN1ZmZpeDo9U3FsU3VmZml4LCBfDQogICAgICAgICAgICAgICAgICAgICAg +ICAgIENvbmRpdGlvblByZWZpeDo9Q29uZGl0aW9uUHJlZml4LCBJZ25vcmVTcWxQ +cmVTdWZmaXhJZkVtcHR5RmlsdGVyOj1JZ25vcmVJZlN1YlNlbGVjdEhhc05vQ3Jp +dGVyaWENCiAgICAgIA0KICAgICAgU2V0IC5FdmVudEJyaWRnZSA9IG1fRXZlbnRC +cmlkZ2UNCiAgICAgIG1fRmlsdGVyQ29udHJvbHMuQWRkIC5TZWxmDQogICAgICBT +ZXQgQWRkU3ViU2VsZWN0Q3JpdGVyaWEgPSAuU2VsZg0KICAgRW5kIFdpdGgNCiAg +IA0KRW5kIEZ1bmN0aW9uDQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQgV2hlcmVSZXBs +YWNlbWVudFRleHQoKSBBcyBTdHJpbmcNCiAgIFdoZXJlUmVwbGFjZW1lbnRUZXh0 +ID0gbV9XaGVyZVJlcGxhY2VtZW50VGV4dA0KRW5kIFByb3BlcnR5DQoNClB1Ymxp +YyBGdW5jdGlvbiBBZGRFeGlzdHNDcml0ZXJpYSggXw0KICAgICAgICAgICAgICAg +ICAgICAgICAgQnlWYWwgU2VsZWN0RnJvbVRleHQgQXMgU3RyaW5nLCBfDQogICAg +ICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBJZ25vcmVJZkV4aXN0c1N0YXRlbWVu +dEhhc05vQ3JpdGVyaWEgQXMgQm9vbGVhbiA9IEZhbHNlLCBfDQogICAgICAgICAg +ICAgICBPcHRpb25hbCBCeVZhbCBTdWJTZWxlY3RDb25jYXRPcGVyYXRvciBBcyBT +cWxMb2dpY2FsT3BlcmF0b3IgPSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX0FuZCwg +Xw0KICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgVXNlTm90RXhpc3RzIEFz +IEJvb2xlYW4gPSBGYWxzZSwgXw0KICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlW +YWwgVXNlV2hlcmVSZXBsYWNlbWVudFRleHRJbkZyb21UZXh0IEFzIEJvb2xlYW4g +PSBGYWxzZSBfDQogICAgICApIEFzIEZpbHRlckNvbnRyb2xDb2xsZWN0aW9uDQoN +CiAgIERpbSBTcWxQcmVmaXggQXMgU3RyaW5nDQogICBEaW0gU3FsU3VmZml4IEFz +IFN0cmluZw0KICAgRGltIFdoZXJlUmVwbGFjZW1lbnRQb3MgQXMgTG9uZw0KICAg +RGltIENvbmRpdGlvblByZWZpeCBBcyBTdHJpbmcNCiAgIENvbmRpdGlvblByZWZp +eCA9ICIgV2hlcmUgIg0KICAgDQogICBTcWxQcmVmaXggPSAiRXhpc3RzICgiDQog +ICBTcWxTdWZmaXggPSAiKSINCiAgIElmIFVzZU5vdEV4aXN0cyBUaGVuIFNxbFBy +ZWZpeCA9ICJOb3QgIiAmIFNxbFByZWZpeA0KICAgDQogICBJZiBVc2VXaGVyZVJl +cGxhY2VtZW50VGV4dEluRnJvbVRleHQgVGhlbg0KICAgICAgV2hlcmVSZXBsYWNl +bWVudFBvcyA9IEluU3RyKDEsIFNlbGVjdEZyb21UZXh0LCBtX1doZXJlUmVwbGFj +ZW1lbnRUZXh0LCB2YlRleHRDb21wYXJlKQ0KICAgRW5kIElmDQogICANCiAgIElm +IFdoZXJlUmVwbGFjZW1lbnRQb3MgPiAwIFRoZW4NCiAgICAgIFNxbFByZWZpeCA9 +IFNxbFByZWZpeCAmIFRyaW0kKExlZnQoU2VsZWN0RnJvbVRleHQsIFdoZXJlUmVw +bGFjZW1lbnRQb3MgLSAxKSkNCiAgICAgIFNxbFN1ZmZpeCA9ICIpICIgJiBUcmlt +JChNaWQkKFNlbGVjdEZyb21UZXh0LCBXaGVyZVJlcGxhY2VtZW50UG9zICsgTGVu +KG1fV2hlcmVSZXBsYWNlbWVudFRleHQpICsgMSkpICYgU3FsU3VmZml4DQogICAg +ICBDb25kaXRpb25QcmVmaXggPSBDb25kaXRpb25QcmVmaXggJiAiKCINCiAgIEVs +c2UNCiAgICAgIFNxbFByZWZpeCA9IFNxbFByZWZpeCAmIFNlbGVjdEZyb21UZXh0 +DQogICBFbmQgSWYNCg0KICAgV2l0aCBOZXcgRmlsdGVyQ29udHJvbENvbGxlY3Rp +b24NCiAgICAgIC5JdGVtQ29uY2F0T3BlcmF0b3IgPSBTdWJTZWxlY3RDb25jYXRP +cGVyYXRvcg0KICAgICAgLkNvbmZpZ1NxbFN0YXRlbWVudCBTcWxQcmVmaXg6PVNx +bFByZWZpeCwgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICBTcWxTdWZmaXg6 +PVNxbFN1ZmZpeCwgQ29uZGl0aW9uUHJlZml4Oj1Db25kaXRpb25QcmVmaXgsIEln +bm9yZVNxbFByZVN1ZmZpeElmRW1wdHlGaWx0ZXI6PUlnbm9yZUlmRXhpc3RzU3Rh +dGVtZW50SGFzTm9Dcml0ZXJpYQ0KICAgICAgDQogICAgICBTZXQgLkV2ZW50QnJp +ZGdlID0gbV9FdmVudEJyaWRnZQ0KICAgICAgbV9GaWx0ZXJDb250cm9scy5BZGQg +LlNlbGYNCiAgICAgIFNldCBBZGRFeGlzdHNDcml0ZXJpYSA9IC5TZWxmDQogICBF +bmQgV2l0aA0KDQpFbmQgRnVuY3Rpb24NCg0KRnJpZW5kIFN1YiBDb25maWdTcWxT +dGF0ZW1lbnQoQnlWYWwgU3FsUHJlZml4IEFzIFN0cmluZywgQnlWYWwgU3FsU3Vm +Zml4IEFzIFN0cmluZywgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +QnlWYWwgQ29uZGl0aW9uUHJlZml4IEFzIFN0cmluZywgXw0KICAgICAgICAgICAg +ICAgICAgICAgT3B0aW9uYWwgQnlWYWwgSWdub3JlU3FsUHJlU3VmZml4SWZFbXB0 +eUZpbHRlciBBcyBCb29sZWFuID0gRmFsc2UpDQogICANCiAgIG1fU3FsUHJlZml4 +ID0gU3FsUHJlZml4DQogICBtX1NxbFN1ZmZpeCA9IFNxbFN1ZmZpeA0KICAgbV9D +b25kaXRpb25QcmVmaXggPSBDb25kaXRpb25QcmVmaXgNCiAgIG1fSWdub3JlU3Fs +UHJlU3VmZml4SWZFbXB0eUZpbHRlciA9IElnbm9yZVNxbFByZVN1ZmZpeElmRW1w +dHlGaWx0ZXINCg0KRW5kIFN1Yg0K + + 20250609094839 + form/filter/FilterControlCollection.cls + + + FilterControlEventBridge + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlckNvbnRyb2xFdmVudEJy +aWRnZSINCkF0dHJpYnV0ZSBWQl9HbG9iYWxOYW1lU3BhY2UgPSBGYWxzZQ0KQXR0 +cmlidXRlIFZCX0NyZWF0YWJsZSA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfUHJlZGVj +bGFyZWRJZCA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfRXhwb3NlZCA9IEZhbHNlDQon +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonIEtsYXNz +ZTogRmlsdGVyQ29udHJvbEV2ZW50QnJpZGdlDQonLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonLyoqDQonIFxhdXRob3IgICAgICAgSm9z +ZWYgUG9ldHpsDQonIDxzdW1tYXJ5Pg0KJyBIaWxmc2tsYXNzZSB6dXIgV2VpdGVy +Z2FiZSB2b24gRXJlaWduaXNzZW4NCicgPC9zdW1tYXJ5Pg0KJyA8cmVtYXJrcz5X +aXJkIGb8ciBGaWx0ZXJDb250cm9sQ29sbGVjdGlvbiBiZW72dGlndDwvcmVtYXJr +cz4NCicgXGluZ3JvdXAgZGF0YQ0KJyoqLw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLQ0KJzxjb2RlbGliPg0KJyAgPGZpbGU+Zm9ybS9m +aWx0ZXIvRmlsdGVyQ29udHJvbEV2ZW50QnJpZGdlLmNsczwvZmlsZT4NCicgIDxs +aWNlbnNlPl9jb2RlbGliL2xpY2Vuc2UuYmFzPC9saWNlbnNlPg0KJyAgPHVzZT5m +b3JtL2ZpbHRlci9GaWx0ZXJDb250cm9sLmNsczwvdXNlPg0KJzwvY29kZWxpYj4N +CictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCk9w +dGlvbiBDb21wYXJlIERhdGFiYXNlDQpPcHRpb24gRXhwbGljaXQNCg0KUHVibGlj +IEV2ZW50IEZpbHRlclZhbHVlc0NoYW5nZWQoQnlWYWwgRmlsdGVyQ29udHJvbFJl +ZiBBcyBGaWx0ZXJDb250cm9sKQ0KUHVibGljIEV2ZW50IEZpbHRlclZhbHVlUmVx +dWVzdChCeVZhbCBGaWx0ZXJWYWx1ZUNvZGUgQXMgU3RyaW5nLCBCeVJlZiBGaWx0 +ZXJWYWx1ZSBBcyBTdHJpbmcpDQoNCkZyaWVuZCBTdWIgUmFpc2VGaWx0ZXJWYWx1 +ZUNoYW5nZWQoQnlWYWwgRmlsdGVyQ29udHJvbFJlZiBBcyBGaWx0ZXJDb250cm9s +KQ0KICAgUmFpc2VFdmVudCBGaWx0ZXJWYWx1ZXNDaGFuZ2VkKEZpbHRlckNvbnRy +b2xSZWYpDQpFbmQgU3ViDQoNCkZyaWVuZCBTdWIgUmFpc2VGaWx0ZXJWYWx1ZVJl +cXVlc3QoQnlWYWwgRmlsdGVyVmFsdWVDb2RlIEFzIFN0cmluZywgQnlSZWYgRmls +dGVyVmFsdWUgQXMgU3RyaW5nKQ0KICAgUmFpc2VFdmVudCBGaWx0ZXJWYWx1ZVJl +cXVlc3QoRmlsdGVyVmFsdWVDb2RlLCBGaWx0ZXJWYWx1ZSkNCkVuZCBTdWINCg== + + 20250609094839 + form/filter/FilterControlEventBridge.cls + + + FilterControlManager + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlckNvbnRyb2xNYW5hZ2Vy +Ig0KQXR0cmlidXRlIFZCX0dsb2JhbE5hbWVTcGFjZSA9IEZhbHNlDQpBdHRyaWJ1 +dGUgVkJfQ3JlYXRhYmxlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9QcmVkZWNsYXJl +ZElkID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9FeHBvc2VkID0gRmFsc2UNCictLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgS2xhc3NlOiBG +aWx0ZXJDb250cm9sTWFuYWdlcg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLQ0KJy8qKg0KJyBcYXV0aG9yICAgICAgIEpvc2VmIFBvZXR6 +bA0KJyA8c3VtbWFyeT4NCicgRmlsdGVyc3RyaW5nIG1pdCBGb3JtdWxhci1TdGV1 +ZXJlbGVtZW50ZW4gZXJzdGVsbGVuDQonIDwvc3VtbWFyeT4NCicgPHJlbWFya3M+ +PC9yZW1hcmtzPg0KJyBcaW5ncm91cCBkYXRhDQonKiovDQonLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonPGNvZGVsaWI+DQonICA8Zmls +ZT5mb3JtL2ZpbHRlci9GaWx0ZXJDb250cm9sTWFuYWdlci5jbHM8L2ZpbGU+DQon +ICA8bGljZW5zZT5fY29kZWxpYi9saWNlbnNlLmJhczwvbGljZW5zZT4NCicgIDx1 +c2U+Zm9ybS9maWx0ZXIvRmlsdGVyQ29udHJvbENvbGxlY3Rpb24uY2xzPC91c2U+ +DQonICA8dXNlPmRhdGEvRmlsdGVyU3RyaW5nQnVpbGRlci5jbHM8L3VzZT4NCic8 +L2NvZGVsaWI+DQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tDQonDQpPcHRpb24gQ29tcGFyZSBEYXRhYmFzZQ0KT3B0aW9uIEV4cGxpY2l0 +DQoNClByaXZhdGUgbV9TcWxUb29sIEFzIFNxbFRvb2xzDQpQcml2YXRlIFdpdGhF +dmVudHMgbV9GaWx0ZXJDb250cm9scyBBcyBGaWx0ZXJDb250cm9sQ29sbGVjdGlv +bg0KQXR0cmlidXRlIG1fRmlsdGVyQ29udHJvbHMuVkJfVmFySGVscElEID0gLTEN +ClByaXZhdGUgbV9BdXRvRmlsdGVyTW9kZU9uIEFzIEJvb2xlYW4NCg0KUHVibGlj +IEV2ZW50IEZpbHRlclN0cmluZ0NoYW5nZWQoQnlWYWwgTmV3RmlsdGVyU3RyaW5n +IEFzIFN0cmluZykNClB1YmxpYyBFdmVudCBGaWx0ZXJWYWx1ZXNDaGFuZ2VkKCkN +ClB1YmxpYyBFdmVudCBGaWx0ZXJWYWx1ZVJlcXVlc3QoQnlWYWwgRmlsdGVyVmFs +dWVDb2RlIEFzIFN0cmluZywgQnlSZWYgRmlsdGVyVmFsdWUgQXMgU3RyaW5nKQ0K +DQpQcml2YXRlIFN1YiBDbGFzc19Jbml0aWFsaXplKCkNCiAgIFNldCBtX0ZpbHRl +ckNvbnRyb2xzID0gTmV3IEZpbHRlckNvbnRyb2xDb2xsZWN0aW9uDQpFbmQgU3Vi +DQoNClByaXZhdGUgU3ViIENsYXNzX1Rlcm1pbmF0ZSgpDQogICBTZXQgbV9GaWx0 +ZXJDb250cm9scyA9IE5vdGhpbmcNCkVuZCBTdWINCg0KRnJpZW5kIFByb3BlcnR5 +IEdldCBTcWxUb29sKCkgQXMgU3FsVG9vbHMNCiAgIElmIG1fU3FsVG9vbCBJcyBO +b3RoaW5nIFRoZW4NCiAgICAgIFNldCBtX1NxbFRvb2wgPSBTcWxUb29scy5DbG9u +ZQ0KICAgRW5kIElmDQogICBTZXQgU3FsVG9vbCA9IG1fU3FsVG9vbA0KRW5kIFBy +b3BlcnR5DQoNCkZyaWVuZCBQcm9wZXJ0eSBTZXQgU3FsVG9vbChCeVZhbCBOZXdS +ZWYgQXMgU3FsVG9vbHMpDQogICBTZXQgbV9TcWxUb29sID0gTmV3UmVmDQpFbmQg +UHJvcGVydHkNCg0KRnJpZW5kIFN1YiBDb25maWdTcWxGb3JtYXQoQnlWYWwgU3Fs +RGF0ZUZvcm1hdCBBcyBTdHJpbmcsIF8NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgIEJ5VmFsIFNxbEJvb2xlYW5UcnVlU3RyaW5nIEFzIFN0cmluZywgXw0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgQnlWYWwgU3FsV2lsZENhcmRTdHJpbmcg +QXMgU3RyaW5nKQ0KICAgDQogICBJZiBtX1NxbFRvb2wgSXMgTm90aGluZyBUaGVu +DQogICAgICBTZXQgbV9TcWxUb29sID0gU3FsVG9vbHMuTmV3SW5zdGFuY2UoU3Fs +RGF0ZUZvcm1hdCwgU3FsQm9vbGVhblRydWVTdHJpbmcsIFNxbFdpbGRDYXJkU3Ry +aW5nKQ0KICAgICAgRXhpdCBTdWINCiAgIEVuZCBJZg0KDQogICBXaXRoIFNxbFRv +b2wNCiAgICAgIC5TcWxEYXRlRm9ybWF0ID0gU3FsRGF0ZUZvcm1hdA0KICAgICAg +LlNxbEJvb2xlYW5UcnVlU3RyaW5nID0gU3FsQm9vbGVhblRydWVTdHJpbmcNCiAg +ICAgIC5TcWxXaWxkQ2FyZFN0cmluZyA9IFNxbFdpbGRDYXJkU3RyaW5nDQogICBF +bmQgV2l0aA0KDQpFbmQgU3ViDQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQgRmlsdGVy +Q29udHJvbHMoKSBBcyBGaWx0ZXJDb250cm9sQ29sbGVjdGlvbg0KICAgU2V0IEZp +bHRlckNvbnRyb2xzID0gbV9GaWx0ZXJDb250cm9scw0KRW5kIFByb3BlcnR5DQoN +ClB1YmxpYyBGdW5jdGlvbiBDcmVhdGVGaWx0ZXJTdHJpbmcoKSBBcyBTdHJpbmcN +CiAgIA0KICAgQ3JlYXRlRmlsdGVyU3RyaW5nID0gRmlsdGVyQ29udHJvbHMuQ3Jp +dGVyaWFTdHJpbmcoU3FsVG9vbCkNCg0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUg +U3ViIG1fRmlsdGVyQ29udHJvbHNfRmlsdGVyVmFsdWVSZXF1ZXN0KEJ5VmFsIEZp +bHRlclZhbHVlQ29kZSBBcyBTdHJpbmcsIEJ5UmVmIEZpbHRlclZhbHVlIEFzIFN0 +cmluZykNCiAgIFJhaXNlRXZlbnQgRmlsdGVyVmFsdWVSZXF1ZXN0KEZpbHRlclZh +bHVlQ29kZSwgRmlsdGVyVmFsdWUpDQpFbmQgU3ViDQoNClByaXZhdGUgU3ViIG1f +RmlsdGVyQ29udHJvbHNfRmlsdGVyVmFsdWVzQ2hhbmdlZCgpDQogICBSYWlzZUV2 +ZW50IEZpbHRlclZhbHVlc0NoYW5nZWQNCiAgIFVzZUF1dG9GaWx0ZXJNb2RlDQpF +bmQgU3ViDQoNClB1YmxpYyBQcm9wZXJ0eSBHZXQgQXV0b0ZpbHRlck9uKCkgQXMg +Qm9vbGVhbg0KICAgQXV0b0ZpbHRlck9uID0gbV9BdXRvRmlsdGVyTW9kZU9uDQpF +bmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IExldCBBdXRvRmlsdGVyT24o +QnlWYWwgTmV3VmFsdWUgQXMgQm9vbGVhbikNCiAgIG1fQXV0b0ZpbHRlck1vZGVP +biA9IE5ld1ZhbHVlDQogICBVc2VBdXRvRmlsdGVyTW9kZQ0KRW5kIFByb3BlcnR5 +DQoNClB1YmxpYyBTdWIgVXNlQXV0b0ZpbHRlck1vZGUoKQ0KICAgSWYgbV9BdXRv +RmlsdGVyTW9kZU9uIFRoZW4NCiAgICAgIEFwcGx5RmlsdGVyDQogICBFbmQgSWYN +CkVuZCBTdWINCg0KUHVibGljIFN1YiBVc2VGaWx0ZXIoKQ0KJyBERVBSRUNBVEVE +IC0tPiBOZXc6IEFwcGx5RmlsdGVyDQogICBTdG9wDQogICBBcHBseUZpbHRlcg0K +RW5kIFN1Yg0KDQpQdWJsaWMgU3ViIEFwcGx5RmlsdGVyKCkNCiAgIA0KICAgRGlt +IE5ld0ZpbHRlclN0cmluZyBBcyBTdHJpbmcNCiAgIE5ld0ZpbHRlclN0cmluZyA9 +IENyZWF0ZUZpbHRlclN0cmluZw0KICAgDQogICBSYWlzZUV2ZW50IEZpbHRlclN0 +cmluZ0NoYW5nZWQoTmV3RmlsdGVyU3RyaW5nKQ0KICAgDQpFbmQgU3ViDQoNClB1 +YmxpYyBTdWIgUmVtb3ZlRmlsdGVyKE9wdGlvbmFsIEJ5VmFsIE5ld0ZpbHRlclN0 +cmluZyBBcyBTdHJpbmcgPSB2Yk51bGxTdHJpbmcpDQogICANCiAgIEZpbHRlckNv +bnRyb2xzLlJlbW92ZUZpbHRlclZhbHVlcyBGYWxzZQ0KICAgUmFpc2VFdmVudCBG +aWx0ZXJTdHJpbmdDaGFuZ2VkKE5ld0ZpbHRlclN0cmluZykNCiAgIA0KRW5kIFN1 +Yg0K + + 20250609094839 + form/filter/FilterControlManager.cls + + + FilterControlTagConverter + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlckNvbnRyb2xUYWdDb252 +ZXJ0ZXIiDQpBdHRyaWJ1dGUgVkJfR2xvYmFsTmFtZVNwYWNlID0gRmFsc2UNCkF0 +dHJpYnV0ZSBWQl9DcmVhdGFibGUgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX1ByZWRl +Y2xhcmVkSWQgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX0V4cG9zZWQgPSBGYWxzZQ0K +Jy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBLbGFz +c2U6IEZpbHRlckNvbnRyb2xUYWdDb252ZXJ0ZXINCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicvKioNCicgXGF1dGhvciAgICAgICBK +b3NlZiBQb2V0emwNCicgPHN1bW1hcnk+DQonIEhpbGZza2xhc3NlIHp1bSBCZWb8 +bGxlbiBkZXIgRmlsdGVyQ29udHJvbHMgKGb8ciBkZW4gRmlsdGVyQ29udHJvbE1h +bmFnZXIpIPxiZXIgQ29udHJvbC1UYWctV2VydGUNCicgPC9zdW1tYXJ5Pg0KJyA8 +cmVtYXJrcz48L3JlbWFya3M+DQonIFxpbmdyb3VwIGRhdGENCicqKi8NCictLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCic8Y29kZWxpYj4N +CicgIDxmaWxlPmZvcm0vZmlsdGVyL0ZpbHRlckNvbnRyb2xUYWdDb252ZXJ0ZXIu +Y2xzPC9maWxlPg0KJyAgPGxpY2Vuc2U+X2NvZGVsaWIvbGljZW5zZS5iYXM8L2xp +Y2Vuc2U+DQonICA8dXNlPmZvcm0vZmlsdGVyL0ZpbHRlckNvbnRyb2xDb2xsZWN0 +aW9uLmNsczwvdXNlPg0KJyAgPHVzZT5kYXRhL1NxbFRvb2xzLmNsczwvdXNlPg0K +JzwvY29kZWxpYj4NCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0NCicNCk9wdGlvbiBDb21wYXJlIERhdGFiYXNlDQpPcHRpb24gRXhwbGlj +aXQNCg0KUHJpdmF0ZSBDb25zdCBEZWZhdWx0RmlsdGVyQ29udHJvbE5hbWVQcmVm +aXggQXMgU3RyaW5nID0gImZjdGwiDQpQcml2YXRlIENvbnN0IERlZmF1bHRGaWx0 +ZXJDb250cm9sVGFnVmFsdWVTZXBhcmF0b3IgQXMgU3RyaW5nID0gInwiDQoNClBy +aXZhdGUgQ29uc3QgREVGX0RlZmF1bHROdW1lcmljUmVsYXRpb25hbE9wZXJhdG9y +IEFzIExvbmcgPSBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLlNRTF9FcXVhbA0KUHJp +dmF0ZSBDb25zdCBERUZfRGVmYXVsdFRleHRSZWxhdGlvbmFsT3BlcmF0b3IgQXMg +TG9uZyA9IFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMuU1FMX0xpa2UgKyBTcWxSZWxh +dGlvbmFsT3BlcmF0b3JzLlNRTF9BZGRfV2lsZENhcmRTdWZmaXgNClByaXZhdGUg +Q29uc3QgREVGX0RlZmF1bHREYXRlUmVsYXRpb25hbE9wZXJhdG9yIEFzIExvbmcg +PSBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLlNRTF9FcXVhbA0KUHJpdmF0ZSBDb25z +dCBERUZfRGVmYXVsdEJvb2xlYW5SZWxhdGlvbmFsT3BlcmF0b3IgQXMgTG9uZyA9 +IFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMuU1FMX0VxdWFsDQoNClByaXZhdGUgbV9G +aWx0ZXJDb250cm9sTmFtZVByZWZpeCBBcyBTdHJpbmcNClByaXZhdGUgbV9GaWx0 +ZXJDb250cm9sVGFnVmFsdWVTZXBhcmF0b3IgQXMgU3RyaW5nDQoNClByaXZhdGUg +bV9EZWZhdWx0TnVtZXJpY1JlbGF0aW9uYWxPcGVyYXRvciBBcyBTcWxSZWxhdGlv +bmFsT3BlcmF0b3JzDQpQcml2YXRlIG1fRGVmYXVsdFRleHRSZWxhdGlvbmFsT3Bl +cmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycw0KUHJpdmF0ZSBtX0RlZmF1 +bHREYXRlUmVsYXRpb25hbE9wZXJhdG9yIEFzIFNxbFJlbGF0aW9uYWxPcGVyYXRv +cnMNClByaXZhdGUgbV9EZWZhdWx0Qm9vbGVhblJlbGF0aW9uYWxPcGVyYXRvciBB +cyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzDQoNClByaXZhdGUgbV9EYXRhU291cmNl +UmVjb3Jkc2V0IEFzIE9iamVjdCAnIHdlZ2VuIERBTyB1bmQgQURPREINCg0KUHJp +dmF0ZSBUeXBlIEZjdGxEZWYNCiAgIERhdGFGaWVsZE5hbWUgQXMgU3RyaW5nDQog +ICBEYXRhVHlwZSBBcyBTcWxGaWVsZERhdGFUeXBlDQogICBSZWxhdGlvbmFsT3Bl +cmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycw0KICAgSWdub3JlVmFsdWUg +QXMgVmFyaWFudA0KICAgRmlsdGVyQ29udHJvbDJOYW1lIEFzIFN0cmluZw0KRW5k +IFR5cGUNCg0KUHJpdmF0ZSBTdWIgQ2xhc3NfSW5pdGlhbGl6ZSgpDQoNCiAgIG1f +RmlsdGVyQ29udHJvbE5hbWVQcmVmaXggPSBEZWZhdWx0RmlsdGVyQ29udHJvbE5h +bWVQcmVmaXgNCiAgIG1fRmlsdGVyQ29udHJvbFRhZ1ZhbHVlU2VwYXJhdG9yID0g +RGVmYXVsdEZpbHRlckNvbnRyb2xUYWdWYWx1ZVNlcGFyYXRvcg0KICAgDQogICBt +X0RlZmF1bHROdW1lcmljUmVsYXRpb25hbE9wZXJhdG9yID0gREVGX0RlZmF1bHRO +dW1lcmljUmVsYXRpb25hbE9wZXJhdG9yDQogICBtX0RlZmF1bHRUZXh0UmVsYXRp +b25hbE9wZXJhdG9yID0gREVGX0RlZmF1bHRUZXh0UmVsYXRpb25hbE9wZXJhdG9y +DQogICBtX0RlZmF1bHREYXRlUmVsYXRpb25hbE9wZXJhdG9yID0gREVGX0RlZmF1 +bHREYXRlUmVsYXRpb25hbE9wZXJhdG9yDQogICBtX0RlZmF1bHRCb29sZWFuUmVs +YXRpb25hbE9wZXJhdG9yID0gREVGX0RlZmF1bHRCb29sZWFuUmVsYXRpb25hbE9w +ZXJhdG9yDQogICANCkVuZCBTdWINCg0KUHVibGljIFN1YiBBZGRGaWx0ZXJDb250 +cm9scyhCeVZhbCBGY3RsQ29sIEFzIEZpbHRlckNvbnRyb2xDb2xsZWN0aW9uLCBC +eVZhbCBDb250cm9sc1JlZiBBcyBPYmplY3QsIE9wdGlvbmFsIEJ5VmFsIERhdGFT +b3VyY2VSZWNvcmRzZXQgQXMgT2JqZWN0ID0gTm90aGluZykNCiAgIA0KICAgRGlt +IGN0bCBBcyBDb250cm9sDQogICANCiAgIFNldCBtX0RhdGFTb3VyY2VSZWNvcmRz +ZXQgPSBEYXRhU291cmNlUmVjb3Jkc2V0DQogICANCiAgIEZvciBFYWNoIGN0bCBJ +biBDb250cm9sc1JlZg0KICAgICAgSWYgY3RsLk5hbWUgTGlrZSBtX0ZpbHRlckNv +bnRyb2xOYW1lUHJlZml4ICYgIioiIFRoZW4NCiAgICAgICAgIEFkZEZpbHRlckNv +bnRyb2wgRmN0bENvbCwgY3RsDQogICAgICBFbmQgSWYNCiAgIE5leHQNCiAgIA0K +ICAgU2V0IG1fRGF0YVNvdXJjZVJlY29yZHNldCA9IE5vdGhpbmcNCiAgIA0KRW5k +IFN1Yg0KDQpQcml2YXRlIFN1YiBBZGRGaWx0ZXJDb250cm9sKEJ5VmFsIEZjdGxD +b2wgQXMgRmlsdGVyQ29udHJvbENvbGxlY3Rpb24sIEJ5VmFsIEZpbHRlckNvbnRy +b2xSZWYgQXMgQ29udHJvbCkNCiAgIA0KICAgRGltIEZjRGVmIEFzIEZjdGxEZWYN +CiAgIERpbSBGaWx0ZXJDb250cm9sMiBBcyBDb250cm9sDQogICANCiAgIEZjRGVm +ID0gR2V0RmlsdGVyQ29udHJvbERlZmluaXRpb24oRmlsdGVyQ29udHJvbFJlZikN +CiAgIA0KICAgV2l0aCBGY0RlZg0KICAgICAgDQogICAgICBJZiBMZW4oLkZpbHRl +ckNvbnRyb2wyTmFtZSkgPiAwIFRoZW4NCiAgICAgICAgIFNldCBGaWx0ZXJDb250 +cm9sMiA9IEZpbHRlckNvbnRyb2xSZWYuUGFyZW50LkZvcm0uQ29udHJvbHMoLkZp +bHRlckNvbnRyb2wyTmFtZSkNCiAgICAgIEVsc2UNCiAgICAgICAgIFNldCBGaWx0 +ZXJDb250cm9sMiA9IE5vdGhpbmcNCiAgICAgIEVuZCBJZg0KICAgICAgDQogICAg +ICBGY3RsQ29sLkFkZCAuRGF0YUZpZWxkTmFtZSwgLkRhdGFUeXBlLCAuUmVsYXRp +b25hbE9wZXJhdG9yLCBGaWx0ZXJDb250cm9sUmVmLCBGaWx0ZXJDb250cm9sMiwg +Lklnbm9yZVZhbHVlDQogICAgICANCiAgIEVuZCBXaXRoDQogICANCkVuZCBTdWIN +Cg0KUHJpdmF0ZSBGdW5jdGlvbiBHZXRGaWx0ZXJDb250cm9sRGVmaW5pdGlvbihC +eVZhbCBGaWx0ZXJDb250cm9sUmVmIEFzIENvbnRyb2wpIEFzIEZjdGxEZWYNCiAg +IA0KICAgRGltIEZjRGVmIEFzIEZjdGxEZWYNCiAgIA0KICAgRGltIFRhZ1ZhbHVl +cygpIEFzIFN0cmluZw0KICAgDQogICBJZiBMZW4oRmlsdGVyQ29udHJvbFJlZi5U +YWcpID4gMCBUaGVuDQogICAgICBUYWdWYWx1ZXMgPSBTcGxpdChGaWx0ZXJDb250 +cm9sUmVmLlRhZywgbV9GaWx0ZXJDb250cm9sVGFnVmFsdWVTZXBhcmF0b3IpDQog +ICAgICBGaWxsRmlsdGVyQ29udHJvbERlZmluaXRpb25Gcm9tVGFnQXJyYXkgRmNE +ZWYsIFRhZ1ZhbHVlcw0KICAgRW5kIElmDQogICANCiAgIElmIExlbihGY0RlZi5E +YXRhRmllbGROYW1lKSA9IDAgVGhlbg0KICAgICAgRmNEZWYuRGF0YUZpZWxkTmFt +ZSA9IE1pZChGaWx0ZXJDb250cm9sUmVmLk5hbWUsIExlbihtX0ZpbHRlckNvbnRy +b2xOYW1lUHJlZml4KSArIDEpDQogICAgICBJZiBMZW4oRmNEZWYuRGF0YUZpZWxk +TmFtZSkgPSAwIFRoZW4NCiAgICAgICAgIEVyci5SYWlzZSB2Yk9iamVjdEVycm9y +LCAiRmlsdGVyQ29udHJvbFRhZ0NvbnZlcnRlci5HZXRGaWx0ZXJDb250cm9sRGVm +aW5pdGlvbiIsICJEYXRhRmllbGROYW1lIGlzIG5vdCBhdmFpbGFibGUiDQogICAg +ICBFbmQgSWYNCiAgIEVuZCBJZg0KICAgICAgDQogICBJZiBGY0RlZi5EYXRhVHlw +ZSA9IDAgVGhlbg0KICAgICAgSWYgTm90IFRyeUdldERhdGFUeXBlRnJvbURhdGFT +b3VyY2UoRmNEZWYuRGF0YUZpZWxkTmFtZSwgRmNEZWYuRGF0YVR5cGUpIFRoZW4N +CiAgICAgICAgIEVyci5SYWlzZSB2Yk9iamVjdEVycm9yLCAiRmlsdGVyQ29udHJv +bFRhZ0NvbnZlcnRlci5HZXRGaWx0ZXJDb250cm9sRGVmaW5pdGlvbiIsICJEYXRh +VHlwZSBpcyBub3QgYXZhaWxhYmxlIg0KICAgICAgRW5kIElmDQogICBFbmQgSWYN +CiAgIA0KICAgSWYgRmNEZWYuUmVsYXRpb25hbE9wZXJhdG9yID0gMCBUaGVuDQog +ICAgICBGY0RlZi5SZWxhdGlvbmFsT3BlcmF0b3IgPSBHZXREZWZhdWx0UmVsYXRp +b25hbE9wZXJhdG9yKEZjRGVmLkRhdGFUeXBlKQ0KICAgRW5kIElmDQogICANCiAg +IElmIElzRW1wdHkoRmNEZWYuSWdub3JlVmFsdWUpIFRoZW4NCiAgICAgIEZjRGVm +Lklnbm9yZVZhbHVlID0gTnVsbA0KICAgRW5kIElmDQogICANCiAgIEdldEZpbHRl +ckNvbnRyb2xEZWZpbml0aW9uID0gRmNEZWYNCiAgIA0KRW5kIEZ1bmN0aW9uDQoN +ClByaXZhdGUgRnVuY3Rpb24gVHJ5R2V0RGF0YVR5cGVGcm9tRGF0YVNvdXJjZShC +eVZhbCBGaWVsZE5hbWUgQXMgU3RyaW5nLCBCeVJlZiBGaWVsZERhdGFUeXBlIEFz +IFNxbEZpZWxkRGF0YVR5cGUpIEFzIEJvb2xlYW4NCiAgIA0KICAgSWYgbV9EYXRh +U291cmNlUmVjb3Jkc2V0IElzIE5vdGhpbmcgVGhlbg0KICAgICAgVHJ5R2V0RGF0 +YVR5cGVGcm9tRGF0YVNvdXJjZSA9IEZhbHNlDQogICAgICBFeGl0IEZ1bmN0aW9u +DQogICBFbmQgSWYNCiAgIA0KICAgRXJyLlJhaXNlIHZiT2JqZWN0RXJyb3IsICJU +cnlHZXREYXRhVHlwZUZyb21EYXRhU291cmNlIiwgIk5vdCBpbXBsZW1lbnRlZCB5 +ZXQiDQogICANCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIEdldERl +ZmF1bHRSZWxhdGlvbmFsT3BlcmF0b3IoQnlWYWwgRmllbGREYXRhVHlwZSBBcyBT +cWxGaWVsZERhdGFUeXBlKSBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzDQoNCiAg +IFNlbGVjdCBDYXNlIEZpZWxkRGF0YVR5cGUNCiAgICAgIENhc2UgU3FsRmllbGRE +YXRhVHlwZS5TUUxfTnVtZXJpYw0KICAgICAgICAgR2V0RGVmYXVsdFJlbGF0aW9u +YWxPcGVyYXRvciA9IG1fRGVmYXVsdE51bWVyaWNSZWxhdGlvbmFsT3BlcmF0b3IN +CiAgICAgIENhc2UgU3FsRmllbGREYXRhVHlwZS5TUUxfVGV4dA0KICAgICAgICAg +R2V0RGVmYXVsdFJlbGF0aW9uYWxPcGVyYXRvciA9IG1fRGVmYXVsdFRleHRSZWxh +dGlvbmFsT3BlcmF0b3INCiAgICAgIENhc2UgU3FsRmllbGREYXRhVHlwZS5TUUxf +RGF0ZQ0KICAgICAgICAgR2V0RGVmYXVsdFJlbGF0aW9uYWxPcGVyYXRvciA9IG1f +RGVmYXVsdERhdGVSZWxhdGlvbmFsT3BlcmF0b3INCiAgICAgIENhc2UgU3FsRmll +bGREYXRhVHlwZS5TUUxfQm9vbGVhbg0KICAgICAgICAgR2V0RGVmYXVsdFJlbGF0 +aW9uYWxPcGVyYXRvciA9IG1fRGVmYXVsdEJvb2xlYW5SZWxhdGlvbmFsT3BlcmF0 +b3INCiAgICAgIENhc2UgRWxzZQ0KICAgICAgICAgIEVyci5SYWlzZSB2Yk9iamVj +dEVycm9yLCAiRmlsdGVyQ29udHJvbFRhZ0NvbnZlcnRlci5HZXRGaWx0ZXJDb250 +cm9sRGVmaW5pdGlvbiIsICJEYXRhVHlwZSAnIiAmIEZpZWxkRGF0YVR5cGUgJiAi +JyBpcyBub3Qgc3VwcG9ydGVkIg0KICAgRW5kIFNlbGVjdA0KICAgDQpFbmQgRnVu +Y3Rpb24NCg0KUHJpdmF0ZSBTdWIgRmlsbEZpbHRlckNvbnRyb2xEZWZpbml0aW9u +RnJvbVRhZ0FycmF5KEJ5UmVmIEZjRGVmIEFzIEZjdGxEZWYsIEJ5UmVmIFRhZ1Zh +bHVlcygpIEFzIFN0cmluZykNCicgPERhdGFUeXBlPnw8UmVsYXRpb25hbE9wZXJh +dG9yPnw8RmllbGROYW1lPnw8Q29udHJvbDJOYW1lPnw8SWdub3JlVmFsdWU+DQon +DQonIFNhbXBsZXM6DQonICAgIER8YmV0d2VlbnxJbnZvaWNlRGF0ZXx4ZmN0bElu +dm9pY2VEYXRlX01heA0KJyAgICBOfD49DQonICAgIFR8Kmxpa2UqDQonICAgIFQN +CiAgIA0KICAgRGltIE1heEFycmF5SW5kZXggQXMgTG9uZw0KICAgDQogICBNYXhB +cnJheUluZGV4ID0gVUJvdW5kKFRhZ1ZhbHVlcykNCiAgIA0KICAgSWYgTGVuKFRh +Z1ZhbHVlcygwKSkgPiAwIFRoZW4NCiAgICAgIFNldERhdGFUeXBlRnJvbVRhZ1Zh +bHVlIEZjRGVmLkRhdGFUeXBlLCBUYWdWYWx1ZXMoMCkNCiAgIEVuZCBJZg0KICAg +SWYgTWF4QXJyYXlJbmRleCA9IDAgVGhlbiBFeGl0IFN1Yg0KICAgDQogICBJZiBM +ZW4oVGFnVmFsdWVzKDEpKSA+IDAgVGhlbg0KICAgICAgU2V0UmVsYXRpb25hbE9w +ZXJhdG9yRnJvbVRhZ1ZhbHVlIEZjRGVmLlJlbGF0aW9uYWxPcGVyYXRvciwgVGFn +VmFsdWVzKDEpDQogICBFbmQgSWYNCiAgIElmIE1heEFycmF5SW5kZXggPSAxIFRo +ZW4gRXhpdCBTdWINCiAgIA0KICAgSWYgTGVuKFRhZ1ZhbHVlcygyKSkgPiAwIFRo +ZW4NCiAgICAgIEZjRGVmLkRhdGFGaWVsZE5hbWUgPSBUYWdWYWx1ZXMoMikNCiAg +IEVuZCBJZg0KICAgSWYgTWF4QXJyYXlJbmRleCA9IDIgVGhlbiBFeGl0IFN1Yg0K +ICAgDQogICBJZiBMZW4oVGFnVmFsdWVzKDMpKSA+IDAgVGhlbg0KICAgICAgRmNE +ZWYuRmlsdGVyQ29udHJvbDJOYW1lID0gVGFnVmFsdWVzKDMpDQogICBFbmQgSWYN +CiAgIElmIE1heEFycmF5SW5kZXggPSAzIFRoZW4gRXhpdCBTdWINCiAgIA0KICAg +RXJyLlJhaXNlIHZiT2JqZWN0RXJyb3IsICJGaWxsRmlsdGVyQ29udHJvbERlZmlu +aXRpb25Gcm9tVGFnQXJyYXkiLCAiTnVsbFZhbHVlIGlzIG5vdCBpbXBsZW1lbnRl +ZCB5ZXQiDQogICANCkVuZCBTdWINCg0KUHJpdmF0ZSBGdW5jdGlvbiBTZXREYXRh +VHlwZUZyb21UYWdWYWx1ZShCeVJlZiBGY0RlZkRhdGFUeXBlIEFzIFNxbEZpZWxk +RGF0YVR5cGUsIEJ5VmFsIFRhZ1ZhbHVlIEFzIFN0cmluZykgQXMgQm9vbGVhbg0K +ICAgDQogICBTZXREYXRhVHlwZUZyb21UYWdWYWx1ZSA9IFRydWUNCg0KICAgU2Vs +ZWN0IENhc2UgVGFnVmFsdWUNCiAgICAgIENhc2UgIk4iLCAiTnVtZXJpYyINCiAg +ICAgICAgIEZjRGVmRGF0YVR5cGUgPSBTUUxfTnVtZXJpYw0KICAgICAgQ2FzZSAi +VCIsICJUZXh0Ig0KICAgICAgICAgRmNEZWZEYXRhVHlwZSA9IFNRTF9UZXh0DQog +ICAgICBDYXNlICJEIiwgIkRhdGUiDQogICAgICAgICBGY0RlZkRhdGFUeXBlID0g +U1FMX0RhdGUNCiAgICAgIENhc2UgIkIiLCAiQm9vbGVhbiIsICJCb29sIg0KICAg +ICAgICAgRmNEZWZEYXRhVHlwZSA9IFNRTF9Cb29sZWFuDQogICAgICBDYXNlIEVs +c2UNCiAgICAgICAgIFNldERhdGFUeXBlRnJvbVRhZ1ZhbHVlID0gRmFsc2UNCiAg +IEVuZCBTZWxlY3QNCiAgIA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rp +b24gU2V0UmVsYXRpb25hbE9wZXJhdG9yRnJvbVRhZ1ZhbHVlKEJ5UmVmIEZjRGVm +UmVsYXRpb25hbE9wZXJhdG9yIEFzIFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMsIEJ5 +VmFsIFRhZ1ZhbHVlIEFzIFN0cmluZykgQXMgQm9vbGVhbg0KDQogICBEaW0gaSBB +cyBMb25nDQoNCiAgIFNldFJlbGF0aW9uYWxPcGVyYXRvckZyb21UYWdWYWx1ZSA9 +IFRydWUNCiAgIA0KICAgSWYgVGFnVmFsdWUgTGlrZSAiTm90KiIgVGhlbg0KICAg +ICAgRmNEZWZSZWxhdGlvbmFsT3BlcmF0b3IgPSBTUUxfTm90DQogICAgICBUYWdW +YWx1ZSA9IE1pZChUYWdWYWx1ZSwgTGVuKCJOT1QiKSArIDEpDQogICBFbmQgSWYN +CiAgIA0KICAgSWYgVGFnVmFsdWUgTGlrZSAiKmJldHdlZW4qIiBUaGVuDQogICAg +ICBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciA9IEZjRGVmUmVsYXRpb25hbE9wZXJh +dG9yICsgU1FMX0JldHdlZW4NCiAgICAgIElmIFRhZ1ZhbHVlIExpa2UgIipiZXR3 +ZWVuWypdKiIgVGhlbiAnIFNvbmRlcmZhbGwgZvxyIERhdHVtc3dlcnRlDQogICAg +ICAgICBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciA9IEZjRGVmUmVsYXRpb25hbE9w +ZXJhdG9yICsgU1FMX0FkZF9XaWxkQ2FyZFN1ZmZpeA0KICAgICAgRW5kIElmDQog +ICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbHNlSWYgVGFnVmFsdWUgTGlrZSAiKmxp +a2UqIiBUaGVuDQogICAgICBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciA9IEZjRGVm +UmVsYXRpb25hbE9wZXJhdG9yICsgU1FMX0xpa2UNCiAgICAgIElmIFRhZ1ZhbHVl +IExpa2UgIipsaWtlWypdKiIgVGhlbg0KICAgICAgICAgRmNEZWZSZWxhdGlvbmFs +T3BlcmF0b3IgPSBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciArIFNRTF9BZGRfV2ls +ZENhcmRTdWZmaXgNCiAgICAgIEVuZCBJZg0KICAgICAgSWYgVGFnVmFsdWUgTGlr +ZSAiKlsqXWxpa2UqIiBUaGVuDQogICAgICAgICBGY0RlZlJlbGF0aW9uYWxPcGVy +YXRvciA9IEZjRGVmUmVsYXRpb25hbE9wZXJhdG9yICsgU1FMX0FkZF9XaWxkQ2Fy +ZFByZWZpeA0KICAgICAgRW5kIElmDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBF +bHNlSWYgVGFnVmFsdWUgTGlrZSAiKkluKiIgVGhlbg0KICAgICAgRmNEZWZSZWxh +dGlvbmFsT3BlcmF0b3IgPSBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciArIFNRTF9J +bg0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQogICANCiAgIEZvciBp +ID0gMSBUbyBMZW4oVGFnVmFsdWUpDQogICAgICBTZWxlY3QgQ2FzZSBNaWQoVGFn +VmFsdWUsIGksIDEpDQogICAgICAgICBDYXNlICI9Ig0KICAgICAgICAgICAgRmNE +ZWZSZWxhdGlvbmFsT3BlcmF0b3IgPSBGY0RlZlJlbGF0aW9uYWxPcGVyYXRvciBP +ciBTUUxfRXF1YWwNCiAgICAgICAgIENhc2UgIjwiDQogICAgICAgICAgICBGY0Rl +ZlJlbGF0aW9uYWxPcGVyYXRvciA9IEZjRGVmUmVsYXRpb25hbE9wZXJhdG9yIE9y +IFNRTF9MZXNzVGhhbg0KICAgICAgICAgQ2FzZSAiPiINCiAgICAgICAgICAgIEZj +RGVmUmVsYXRpb25hbE9wZXJhdG9yID0gRmNEZWZSZWxhdGlvbmFsT3BlcmF0b3Ig +T3IgU1FMX0dyZWF0ZXJUaGFuDQogICAgICBFbmQgU2VsZWN0DQogICBOZXh0DQog +ICANCiAgIElmIEZjRGVmUmVsYXRpb25hbE9wZXJhdG9yID0gMCBUaGVuDQogICAg +ICBTZXRSZWxhdGlvbmFsT3BlcmF0b3JGcm9tVGFnVmFsdWUgPSBGYWxzZQ0KICAg +RW5kIElmDQoNCkVuZCBGdW5jdGlvbg0K + + 20250609094839 + form/filter/FilterControlTagConverter.cls + + + FilterStringBuilder + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIkZpbHRlclN0cmluZ0J1aWxkZXIi +DQpBdHRyaWJ1dGUgVkJfR2xvYmFsTmFtZVNwYWNlID0gRmFsc2UNCkF0dHJpYnV0 +ZSBWQl9DcmVhdGFibGUgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX1ByZWRlY2xhcmVk +SWQgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX0V4cG9zZWQgPSBGYWxzZQ0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBDbGFzczogZGF0 +YS5zcWwuRmlsdGVyU3RyaW5nQnVpbGRlcg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBDcmVhdGUgU1FMIGNyaXRlcmlhIChm +aWx0ZXIpIGV4cHJlc3Npb24NCicNCicgQXV0aG9yOg0KJyAgICAgSm9zZWYgUG9l +dHpsDQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +DQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCic8 +Y29kZWxpYj4NCicgIDxmaWxlPmRhdGEvRmlsdGVyU3RyaW5nQnVpbGRlci5jbHM8 +L2ZpbGU+DQonICA8bGljZW5zZT5fY29kZWxpYi9saWNlbnNlLmJhczwvbGljZW5z +ZT4NCicgIDx1c2U+dGV4dC9TdHJpbmdDb2xsZWN0aW9uLmNsczwvdXNlPg0KJyAg +PHVzZT5kYXRhL1NxbFRvb2xzLmNsczwvdXNlPg0KJyAgPHRlc3Q+X3Rlc3QvZGF0 +YS9GaWx0ZXJTdHJpbmdCdWlsZGVyVGVzdHMuY2xzPC90ZXN0Pg0KJzwvY29kZWxp +Yj4NCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicN +Ck9wdGlvbiBDb21wYXJlIFRleHQNCk9wdGlvbiBFeHBsaWNpdA0KDQpQcml2YXRl +IG1fSXRlbXMgQXMgU3RyaW5nQ29sbGVjdGlvbg0KUHJpdmF0ZSBtX1NxbFRvb2wg +QXMgU3FsVG9vbHMNClByaXZhdGUgbV9EZWZhdWx0Q29uY2F0T3BlcmF0b3IgQXMg +U3FsTG9naWNhbE9wZXJhdG9yDQoNClByaXZhdGUgbV9Db25kaXRpb25Hcm91cHMg +QXMgQ29sbGVjdGlvbg0KDQpQcml2YXRlIG1fU3FsUHJlZml4IEFzIFN0cmluZw0K +UHJpdmF0ZSBtX1NxbFN1ZmZpeCBBcyBTdHJpbmcNClByaXZhdGUgbV9Db25kaXRp +b25QcmVmaXggQXMgU3RyaW5nDQpQcml2YXRlIG1fSWdub3JlU3FsUHJlU3VmZml4 +SWZFbXB0eUZpbHRlciBBcyBCb29sZWFuDQoNClByaXZhdGUgQ29uc3QgV2hlcmVS +ZXBsYWNlbWVudFRleHQgQXMgU3RyaW5nID0gIltXaGVyZVN0YXRlbWVudF0iDQoN +ClByaXZhdGUgU3ViIENsYXNzX0luaXRpYWxpemUoKQ0KICAgU2V0IG1fSXRlbXMg +PSBOZXcgU3RyaW5nQ29sbGVjdGlvbg0KICAgbV9EZWZhdWx0Q29uY2F0T3BlcmF0 +b3IgPSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX0FuZA0KRW5kIFN1Yg0KDQpQcml2 +YXRlIFN1YiBDbGFzc19UZXJtaW5hdGUoKQ0KICAgU2V0IG1fSXRlbXMgPSBOb3Ro +aW5nDQpFbmQgU3ViDQoNCicjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj +IyMjDQonIEdyb3VwOiBDbGFzcyBzdXBwb3J0DQoNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgUHJvcGVydHk6IFNlbGYNCictLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgUmVmZXJl +bmNlIHRvIE1lIChjdXJyZW50IGluc3RhbmNlIG9mIEZpbHRlclN0cmluZ0J1aWxk +ZXIgY2xhc3MpDQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tDQpQdWJsaWMgUHJvcGVydHkgR2V0IFNlbGYoKSBBcyBGaWx0ZXJTdHJp +bmdCdWlsZGVyDQogICBTZXQgU2VsZiA9IE1lDQpFbmQgUHJvcGVydHkNCg0KJyMj +IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCicgR3JvdXA6IENvbmZp +Zw0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQon +IFByb3BlcnR5OiBEZWZhdWx0Q29uY2F0T3BlcmF0b3INCictLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgVGhlIGRlZmF1bHQgY29u +Y2F0IG9wZXJhdG9yIGZvciB0aGUgaW5zdGFuY2UNCicNCictLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClB1YmxpYyBQcm9wZXJ0eSBHZXQg +RGVmYXVsdENvbmNhdE9wZXJhdG9yKCkgQXMgU3FsTG9naWNhbE9wZXJhdG9yDQog +ICBEZWZhdWx0Q29uY2F0T3BlcmF0b3IgPSBtX0RlZmF1bHRDb25jYXRPcGVyYXRv +cg0KRW5kIFByb3BlcnR5DQoNClB1YmxpYyBQcm9wZXJ0eSBMZXQgRGVmYXVsdENv +bmNhdE9wZXJhdG9yKEJ5VmFsIE5ld1ZhbHVlIEFzIFNxbExvZ2ljYWxPcGVyYXRv +cikNCiAgIG1fRGVmYXVsdENvbmNhdE9wZXJhdG9yID0gTmV3VmFsdWUNCkVuZCBQ +cm9wZXJ0eQ0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tDQonIFByb3BlcnR5OiBTcWxUb29sDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIFNxbFRvb2xzIGluc3RhbmNlIHRvIGJl +IHVzZWQgKGlmIG5vdCBzZXQsIGNsb25lIG9mIGdsb2JhbCBTcWxUb29scyBpbnN0 +YW5jZSBpcyB1c2VkKQ0KJw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLQ0KRnJpZW5kIFByb3BlcnR5IEdldCBTcWxUb29sKCkgQXMgU3Fs +VG9vbHMNCiAgIElmIG1fU3FsVG9vbCBJcyBOb3RoaW5nIFRoZW4NCiAgICAgIFNl +dCBtX1NxbFRvb2wgPSBTcWxUb29scy5DbG9uZQ0KICAgRW5kIElmDQogICBTZXQg +U3FsVG9vbCA9IG1fU3FsVG9vbA0KRW5kIFByb3BlcnR5DQoNCkZyaWVuZCBQcm9w +ZXJ0eSBTZXQgU3FsVG9vbChCeVZhbCBOZXdSZWYgQXMgU3FsVG9vbHMpDQogICBT +ZXQgbV9TcWxUb29sID0gTmV3UmVmDQpFbmQgUHJvcGVydHkNCg0KJy0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBGdW5jdGlvbjogU2Vs +ZWN0U3FsRGlhbGVjdA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KJw0KJyBDb25maWcgc3FsIHRleHQgb3V0cHV0IGZvcm1hdCBmb3Ig +c3BlY2lmaWMgc3FsIGRpYWxlY3QNCicNCicgUGFyYW1ldGVyczoNCicNCicgICAg +IFVzZURpYWxlY3QgLSBzcWwgZGlhbGVjdCAuLiB1c2Ugc2V0dGluZyBvZiBkaWFs +ZWN0IChhcyBiYXNlKQ0KJyAgICAgU3FsRGF0ZUZvcm1hdCAtIG91dHB1dCBzdHJp +bmcgZm9ybWF0IGZvciBkYXRlIHZhbHVlcw0KJyAgICAgU3FsQm9vbGVhblRydWVT +dHJpbmcgLSBvdXRwdXQgc3RyaW5nIGZvcm1hdCBmb3IgYm9vbGVhbiB2YWx1ZXMN +CicgICAgIFNxbFdpbGRDYXJkU3RyaW5nIC0gd2lsZGNhcmQgc3RyaW5nIChlLmcu +ICogLi4gZGFvLCAlIC4uIFQtU1FMKQ0KJw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJpZW5kIFN1YiBTZWxlY3RTcWxEaWFsZWN0 +KEJ5VmFsIFVzZURpYWxlY3QgQXMgU3FsRGlhbGVjdCwgXw0KICAgICAgICAgICAg +ICAgICAgIE9wdGlvbmFsIEJ5VmFsIFNxbERhdGVGb3JtYXQgQXMgU3RyaW5nLCBf +DQogICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgU3FsQm9vbGVhblRy +dWVTdHJpbmcgQXMgU3RyaW5nLCBfDQogICAgICAgICAgICAgICAgICAgT3B0aW9u +YWwgQnlWYWwgU3FsV2lsZENhcmRTdHJpbmcgQXMgU3RyaW5nKQ0KICAgDQogICBT +ZXQgbV9TcWxUb29sID0gU3FsVG9vbHMuRnJvbURpYWxlY3QoVXNlRGlhbGVjdCwg +U3FsRGF0ZUZvcm1hdCwgU3FsQm9vbGVhblRydWVTdHJpbmcsIFNxbFdpbGRDYXJk +U3RyaW5nKQ0KDQpFbmQgU3ViDQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IENvbmZpZ1NxbEZvcm1hdA0KJy0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBDb25m +aWcgc3FsIHRleHQgb3V0cHV0IGZvcm1hdCBmb3Igc3BlY2lmaWMgc3FsIGRpYWxl +Y3QNCicNCicgUGFyYW1ldGVyczoNCicNCicgICAgIFNxbERhdGVGb3JtYXQgLSBv +dXRwdXQgc3RyaW5nIGZvcm1hdCBmb3IgZGF0ZSB2YWx1ZXMNCicgICAgIFNxbEJv +b2xlYW5UcnVlU3RyaW5nIC0gb3V0cHV0IHN0cmluZyBmb3JtYXQgZm9yIGJvb2xl +YW4gdmFsdWVzDQonICAgICBTcWxXaWxkQ2FyZFN0cmluZyAtIHdpbGRjYXJkIHN0 +cmluZyAoZS5nLiAqIC4uIGRhbywgJSAuLiBULVNRTCkNCicNCictLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZyaWVuZCBTdWIgQ29uZmln +U3FsRm9ybWF0KEJ5VmFsIFNxbERhdGVGb3JtYXQgQXMgU3RyaW5nLCBfDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICBCeVZhbCBTcWxCb29sZWFuVHJ1ZVN0cmlu +ZyBBcyBTdHJpbmcsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFs +IFNxbFdpbGRDYXJkU3RyaW5nIEFzIFN0cmluZykNCiAgIA0KICAgSWYgbV9TcWxU +b29sIElzIE5vdGhpbmcgVGhlbg0KICAgICAgU2V0IG1fU3FsVG9vbCA9IFNxbFRv +b2xzLk5ld0luc3RhbmNlKFNxbERhdGVGb3JtYXQsIFNxbEJvb2xlYW5UcnVlU3Ry +aW5nLCBTcWxXaWxkQ2FyZFN0cmluZykNCiAgICAgIEV4aXQgU3ViDQogICBFbmQg +SWYNCg0KICAgV2l0aCBtX1NxbFRvb2wNCiAgICAgIC5TcWxEYXRlRm9ybWF0ID0g +U3FsRGF0ZUZvcm1hdA0KICAgICAgLlNxbEJvb2xlYW5UcnVlU3RyaW5nID0gU3Fs +Qm9vbGVhblRydWVTdHJpbmcNCiAgICAgIC5TcWxXaWxkQ2FyZFN0cmluZyA9IFNx +bFdpbGRDYXJkU3RyaW5nDQogICBFbmQgV2l0aA0KDQpFbmQgU3ViDQoNCictLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246 +IENvbmZpZ1NxbFN0YXRlbWVudA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLQ0KJw0KJyBBdXhpbGlhcnkgZnVuY3Rpb24gZm9yIHNldHRp +bmcgU1FMIHRleHRzIGlmIHRoaXMgY2xhc3MgaXMgdXNlZCBpbiBvdGhlciBmaWx0 +ZXIgYnVpbGRlciBjbGFzc2VzLg0KJyAoZS5nLiBpbiBmb3JtLmZpbHRlci5GaWx0 +ZXJDb250cm9sQ29sbGVjdGlvbikNCicNCicgUGFyYW1ldGVyczoNCicNCicgICAg +IFNxbFByZWZpeCAtIElzIHBsYWNlZCBiZWZvcmUgdGhlIEZpbHRlclN0cmluZyBm +b3IgVG9TdHJpbmcgb3V0cHV0IChUb1N0cmluZyA9IG1fU3FsUHJlZml4ICYgRmls +dGVyU3RyaW5nICYgbV9TcWxTdWZmaXgpDQonICAgICBTcWxTdWZmaXggLSBJcyBw +bGFjZWQgYWZ0ZXIgdGhlIEZpbHRlclN0cmluZyBmb3IgVG9TdHJpbmcgb3V0cHV0 +IChUb1N0cmluZyA9IG1fU3FsUHJlZml4ICYgRmlsdGVyU3RyaW5nICYgbV9TcWxT +dWZmaXgpDQonICAgICBDb25kaXRpb25QcmVmaXggLSBJcyBwbGFjZWQgYmVmb3Jl +IHRoZSBmaWx0ZXIgY29uZGl0aW9uIChidXQgb25seSBpZiB0aGUgZmlsdGVyIGNv +bmRpdGlvbiBpcyA+ICIiKS4NCicgICAgIElnbm9yZVNxbFByZVN1ZmZpeElmRW1w +dHlGaWx0ZXIgLSBUcnVlOiBTcWxQcmVmaXggKyBTcWxTdWZmaXggYXJlIG5vdCBz +ZXQgZm9yIGVtcHR5IEZpbHRlclN0cmluZw0KJw0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJpZW5kIFN1YiBDb25maWdTcWxTdGF0 +ZW1lbnQoQnlWYWwgU3FsUHJlZml4IEFzIFN0cmluZywgQnlWYWwgU3FsU3VmZml4 +IEFzIFN0cmluZywgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlW +YWwgQ29uZGl0aW9uUHJlZml4IEFzIFN0cmluZywgXw0KICAgICAgICAgICAgICAg +ICAgICAgT3B0aW9uYWwgQnlWYWwgSWdub3JlU3FsUHJlU3VmZml4SWZFbXB0eUZp +bHRlciBBcyBCb29sZWFuID0gRmFsc2UpDQogICBtX1NxbFByZWZpeCA9IFNxbFBy +ZWZpeA0KICAgbV9TcWxTdWZmaXggPSBTcWxTdWZmaXgNCiAgIG1fQ29uZGl0aW9u +UHJlZml4ID0gQ29uZGl0aW9uUHJlZml4DQogICBtX0lnbm9yZVNxbFByZVN1ZmZp +eElmRW1wdHlGaWx0ZXIgPSBJZ25vcmVTcWxQcmVTdWZmaXhJZkVtcHR5RmlsdGVy +DQoNCkVuZCBTdWINCg0KJyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj +IyMNCicgR3JvdXA6IEJ1aWxkIENyaXRlcmlhDQoNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IEFkZA0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBBZGQgZmls +dGVyIGNyaXRlcmlhIGRlZmluaXRpb24NCicgKHVzZXM6IGRhdGEuU3FsVG9vbHMu +QnVpbGRDcml0ZXJpYSkNCicNCicgUGFyYW1ldGVyczoNCicNCicgICAgIEZpZWxk +TmFtZSAgICAgICAgICAgIC0gRmllbGQgbmFtZSBpbiB0aGUgZGF0YSBzb3VyY2Ug +dG8gYmUgZmlsdGVyZWQNCicgICAgIFJlbGF0aW9uYWxPcGVyYXRvciAgIC0gUmVs +YXRpb25hbCBvcGVyYXRvciAoPSwgPD0sIGV0Yy4pDQonICAgICBWYWx1ZSAgICAg +ICAgICAgICAgICAtIEZpbHRlciB2YWx1ZSAoY2FuIGJlIGEgc2luZ2xlIHZhbHVl +IG9yIGFuIGFycmF5IG9mIHZhbHVlcykNCicgICAgIFZhbHVlMiAgICAgICAgICAg +ICAgIC0gT3B0aW9uYWwgMm5kIGZpbHRlciB2YWx1ZSAoZm9yIEJldHdlZW4pDQon +ICAgICBJZ25vcmVWYWx1ZSAgICAgICAgICAtIFRoZSB2YWx1ZSBmb3Igd2hpY2gg +bm8gZmlsdGVyIGNvbmRpdGlvbiBpcyB0byBiZSBjcmVhdGVkLiAoQXJyYXkgdHJh +bnNmZXIgb2YgdmFsdWVzIHBvc3NpYmxlKSwgRGVmYXVsdDogTnVsbA0KJw0KJy0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIFN1 +YiBBZGQoQnlWYWwgRmllbGROYW1lIEFzIFN0cmluZywgQnlWYWwgRmllbGREYXRh +VHlwZSBBcyBTcWxGaWVsZERhdGFUeXBlLCBfDQogICAgICAgICAgICAgICBCeVZh +bCBSZWxhdGlvbmFsT3BlcmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycywg +Xw0KICAgICAgICAgICAgICAgQnlWYWwgVmFsdWUgQXMgVmFyaWFudCwgXw0KICAg +ICAgT3B0aW9uYWwgQnlWYWwgVmFsdWUyIEFzIFZhcmlhbnQgPSBOdWxsLCBfDQog +ICAgICBPcHRpb25hbCBCeVZhbCBJZ25vcmVWYWx1ZSBBcyBWYXJpYW50ID0gTnVs +bCkNCg0KICAgQWRkQ3JpdGVyaWEgU3FsVG9vbC5CdWlsZENyaXRlcmlhKEZpZWxk +TmFtZSwgRmllbGREYXRhVHlwZSwgUmVsYXRpb25hbE9wZXJhdG9yLCBWYWx1ZSwg +VmFsdWUyLCBJZ25vcmVWYWx1ZSkNCg0KRW5kIFN1Yg0KDQonLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonIEZ1bmN0aW9uOiBBZGRDcml0 +ZXJpYQ0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K +Jw0KJyBBZGQgZmlsdGVyIGNyaXRlcmlhIChTdHJpbmcpDQonDQonIFBhcmFtZXRl +cnM6DQonDQonICAgICBDcml0ZXJpYSAtIENyaXRlcmlhIHN0cmluZyB0byBhcHBl +bmQNCicNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N +ClB1YmxpYyBTdWIgQWRkQ3JpdGVyaWEoQnlWYWwgQ3JpdGVyaWEgQXMgU3RyaW5n +KQ0KICAgSWYgTGVuKENyaXRlcmlhKSA9IDAgVGhlbiBFeGl0IFN1Yg0KICAgbV9J +dGVtcy5BZGQgQ3JpdGVyaWENCkVuZCBTdWINCg0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBGdW5jdGlvbjogTmV3Q29uZGl0aW9u +R3JvdXANCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N +CicNCicgTmV3IGZpbHRlciBjb25kaXRpb24gZ3JvdXAgLSBlLmcuIGZvciBPciBn +cm91cDogKCBhID0gMSBhbmQgKHggPSAyIG9yIHggPj0gMTApICkNCicNCicgUGFy +YW1ldGVyczoNCicNCicgICAgIENvbmNhdE9wZXJhdG9yIC0gW1NRTF9BbmQgKGRl +ZmF1bHQpLCBTUUxfT3IsIFNRTF9Db21tYVNlcGFyYXRvcl0gLi4gdmFsaWQgd2l0 +aGluIHRoZSBuZXcgZ3JvdXANCicNCicgUmV0dXJuczoNCicNCicgICAgIEZpbHRl +clN0cmluZ0J1aWxkZXIgaW5zdGFuY2UgZm9yIG5ldyBncm91cA0KJw0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0 +aW9uIE5ld0NvbmRpdGlvbkdyb3VwKEJ5VmFsIENvbmNhdE9wZXJhdG9yIEFzIFNx +bExvZ2ljYWxPcGVyYXRvcikgQXMgRmlsdGVyU3RyaW5nQnVpbGRlcg0KDQogICBE +aW0gTmV3QnVpbGRlciBBcyBGaWx0ZXJTdHJpbmdCdWlsZGVyDQogICANCiAgIFNl +dCBOZXdCdWlsZGVyID0gTmV3IEZpbHRlclN0cmluZ0J1aWxkZXINCiAgIFNldCBO +ZXdCdWlsZGVyLlNxbFRvb2wgPSBtX1NxbFRvb2wNCiAgIE5ld0J1aWxkZXIuRGVm +YXVsdENvbmNhdE9wZXJhdG9yID0gQ29uY2F0T3BlcmF0b3INCiAgIA0KICAgQ29u +ZGl0aW9uR3JvdXBzLkFkZCBOZXdCdWlsZGVyDQogICANCiAgIFNldCBOZXdDb25k +aXRpb25Hcm91cCA9IE5ld0J1aWxkZXINCiAgIA0KRW5kIEZ1bmN0aW9uDQoNClBy +aXZhdGUgRnVuY3Rpb24gQXBwZW5kRmlsdGVyR3JvdXBzU3RyaW5nKEJ5VmFsIEJh +c2VGaWx0ZXJTdHJpbmcgQXMgU3RyaW5nLCBCeVZhbCBDb25jYXRPcGVyYXRvciBB +cyBTcWxMb2dpY2FsT3BlcmF0b3IsIF8NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIE9wdGlvbmFsIEJ5VmFsIElnbm9yZUR1cGxpY2F0ZUZpbHRlcnMg +QXMgQm9vbGVhbiA9IEZhbHNlKSBBcyBTdHJpbmcNCiAgIA0KICAgRGltIENvbmRQ +cmVmaXggQXMgU3RyaW5nDQogICBEaW0gQ29uZFN1ZmZpeCBBcyBTdHJpbmcNCiAg +IA0KICAgSWYgbV9Db25kaXRpb25Hcm91cHMgSXMgTm90aGluZyBUaGVuDQogICAg +ICBBcHBlbmRGaWx0ZXJHcm91cHNTdHJpbmcgPSBCYXNlRmlsdGVyU3RyaW5nDQog +ICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQgSWYNCiAgIA0KICAgSWYgbV9Db25k +aXRpb25Hcm91cHMuQ291bnQgPSAwIFRoZW4NCiAgICAgIEFwcGVuZEZpbHRlckdy +b3Vwc1N0cmluZyA9IEJhc2VGaWx0ZXJTdHJpbmcNCiAgICAgIEV4aXQgRnVuY3Rp +b24NCiAgIEVuZCBJZg0KICAgDQogICBJZiBDb25jYXRPcGVyYXRvciA8PiBTUUxf +Q29tbWFTZXBhcmF0b3IgVGhlbg0KICAgICAgQ29uZFByZWZpeCA9ICIoIg0KICAg +ICAgQ29uZFN1ZmZpeCA9ICIpIg0KICAgRW5kIElmDQogICANCiAgIERpbSBGU0Ig +QXMgRmlsdGVyU3RyaW5nQnVpbGRlcg0KICAgDQogICBXaXRoIE5ldyBTdHJpbmdD +b2xsZWN0aW9uDQogICANCiAgICAgIC5BZGQgQmFzZUZpbHRlclN0cmluZw0KICAg +ICAgDQogICAgICBGb3IgRWFjaCBGU0IgSW4gbV9Db25kaXRpb25Hcm91cHMNCiAg +ICAgICAgIC5BZGQgRlNCLlRvU3RyaW5nKCkNCiAgICAgIE5leHQNCg0KICAgICAg +QXBwZW5kRmlsdGVyR3JvdXBzU3RyaW5nID0gLlRvU3RyaW5nKEdldENvbmNhdE9w +ZXJhdG9yU3RyaW5nKENvbmNhdE9wZXJhdG9yKSwgQ29uZFByZWZpeCwgQ29uZFN1 +ZmZpeCwgVHJ1ZSwgSWdub3JlRHVwbGljYXRlRmlsdGVycykNCiAgICAgIA0KICAg +RW5kIFdpdGgNCiAgIA0KRW5kIEZ1bmN0aW9uDQoNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IEFkZFN1YlNlbGVj +dENyaXRlcmlhDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tDQonDQonIE5ldyBmaWx0ZXIgY29uZGl0aW9uIGdyb3VwIGZvciBhIHN1YiBz +ZWxlY3QgLSBlLmcuICggYSA9IDEgYW5kIHggSW4gKHNlbGVjdCBuICBmcm9tIHRh +YjEyMykgKQ0KJw0KJyBQYXJhbWV0ZXJzOg0KJw0KJyAgICAgRmllbGROYW1lIC0g +RGF0YSBmaWVsZCBuYW1lIHRvIGNvbXBhcmUNCicgICAgIFJlbGF0aW9uYWxPcGVy +YXRvciAtIFJlbGF0aW9uYWwgb3BlcmF0b3IgZm9yIHN1YiBzZWxlY3Q6IHVzdWFs +bHkgSW4oLi4uKQ0KJyAgICAgU2VsZWN0RnJvbVRleHQgLSBTcWwgdGV4dCBmb3Ig +c3ViIHNlbGVjdCAod2l0aG91dCB3aGVyZSwgZXhjZXB0IFVzZVdoZXJlUmVwbGFj +ZW1lbnRUZXh0SW5Gcm9tVGV4dCBpcyB1c2VkKQ0KJyAgICAgSWdub3JlSWZTdWJT +ZWxlY3RIYXNOb0NyaXRlcmlhIC0gVHJ1ZSA9IElnbm9yZSBzdWJzZWxlY3QgY3Jp +dGVyaW9uIGlmIG5vIGZpbHRlciB2YWx1ZXMgd2VyZSB0cmFuc2ZlcnJlZA0KJyAg +ICAgVXNlV2hlcmVSZXBsYWNlbWVudFRleHRJbkZyb21UZXh0IC0gUmVwbGFjZSBb +V2hlcmVdIHdpdGggV2hlcmUgY29uZGl0aW9uIHN0cmluZyAuLi4gaXMgcmVxdWly +ZWQgZm9yIEdyb3VwIEJ5LVNRTCwgZm9yIGV4YW1wbGUuDQonICAgICBTdWJTZWxl +Y3RDb25jYXRPcGVyYXRvciAtIFtTUUxfQW5kIChkZWZhdWx0KSwgU1FMX09yLCBT +UUxfQ29tbWFTZXBhcmF0b3JdIC4uIHZhbGlkIHdpdGhpbiB0aGUgbmV3IGdyb3Vw +DQonDQonIFJldHVybnM6DQonDQonICAgICBGaWx0ZXJTdHJpbmdCdWlsZGVyIGlu +c3RhbmNlIGZvciBuZXcgc3ViIHNlbGVjdCBncm91cA0KJw0KJy0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0aW9uIEFk +ZFN1YlNlbGVjdENyaXRlcmlhKCBfDQogICAgICAgICAgICAgICBCeVZhbCBGaWVs +ZE5hbWUgQXMgU3RyaW5nLCBfDQogICAgICAgICAgICAgICBCeVZhbCBSZWxhdGlv +bmFsT3BlcmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycywgXw0KICAgICAg +ICAgICAgICAgQnlWYWwgU2VsZWN0RnJvbVRleHQgQXMgU3RyaW5nLCBfDQogICAg +ICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBJZ25vcmVJZlN1YlNlbGVjdEhhc05v +Q3JpdGVyaWEgQXMgQm9vbGVhbiA9IEZhbHNlLCBfDQogICAgICAgICAgICAgICBP +cHRpb25hbCBCeVZhbCBVc2VXaGVyZVJlcGxhY2VtZW50VGV4dEluRnJvbVRleHQg +QXMgQm9vbGVhbiA9IEZhbHNlLCBfDQogICAgICAgICAgICAgICBPcHRpb25hbCBC +eVZhbCBTdWJTZWxlY3RDb25jYXRPcGVyYXRvciBBcyBTcWxMb2dpY2FsT3BlcmF0 +b3IgPSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX0FuZCBfDQogICAgICApIEFzIEZp +bHRlclN0cmluZ0J1aWxkZXINCg0KICAgRGltIE5ld0J1aWxkZXIgQXMgRmlsdGVy +U3RyaW5nQnVpbGRlcg0KICAgRGltIFNxbFByZWZpeCBBcyBTdHJpbmcNCiAgIERp +bSBTcWxTdWZmaXggQXMgU3RyaW5nDQogICBEaW0gV2hlcmVSZXBsYWNlbWVudFBv +cyBBcyBMb25nDQogICANCiAgIFNxbFByZWZpeCA9IEZpZWxkTmFtZSAmICIgIiAm +IFNxbFRvb2xzLkdldFJlbGF0aW9uYWxPcGVyYXRvclN0cmluZyhSZWxhdGlvbmFs +T3BlcmF0b3IpICYgIiAoIg0KICAgU3FsU3VmZml4ID0gIikiDQogICBJZiBVc2VX +aGVyZVJlcGxhY2VtZW50VGV4dEluRnJvbVRleHQgVGhlbg0KICAgICAgV2hlcmVS +ZXBsYWNlbWVudFBvcyA9IEluU3RyKDEsIFNlbGVjdEZyb21UZXh0LCBXaGVyZVJl +cGxhY2VtZW50VGV4dCwgdmJUZXh0Q29tcGFyZSkNCiAgIEVuZCBJZg0KICAgDQog +ICBJZiBXaGVyZVJlcGxhY2VtZW50UG9zID4gMCBUaGVuDQogICAgICBTcWxQcmVm +aXggPSBTcWxQcmVmaXggJiBUcmltJChMZWZ0KFNlbGVjdEZyb21UZXh0LCBXaGVy +ZVJlcGxhY2VtZW50UG9zIC0gMSkpDQogICAgICBTcWxTdWZmaXggPSAiICIgJiBU +cmltJChNaWQkKFNlbGVjdEZyb21UZXh0LCBXaGVyZVJlcGxhY2VtZW50UG9zICsg +TGVuKFdoZXJlUmVwbGFjZW1lbnRUZXh0KSkpICYgU3FsU3VmZml4DQogICBFbHNl +DQogICAgICBTcWxQcmVmaXggPSBTcWxQcmVmaXggJiBTZWxlY3RGcm9tVGV4dA0K +ICAgRW5kIElmDQogICANCiAgIFNldCBOZXdCdWlsZGVyID0gTmV3IEZpbHRlclN0 +cmluZ0J1aWxkZXINCiAgIE5ld0J1aWxkZXIuRGVmYXVsdENvbmNhdE9wZXJhdG9y +ID0gU3ViU2VsZWN0Q29uY2F0T3BlcmF0b3INCiAgIFNldCBOZXdCdWlsZGVyLlNx +bFRvb2wgPSBtX1NxbFRvb2wNCiAgIA0KICAgTmV3QnVpbGRlci5Db25maWdTcWxT +dGF0ZW1lbnQgU3FsUHJlZml4Oj1TcWxQcmVmaXgsIFNxbFN1ZmZpeDo9U3FsU3Vm +Zml4LCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRp +b25QcmVmaXg6PSIgV2hlcmUgIiwgSWdub3JlU3FsUHJlU3VmZml4SWZFbXB0eUZp +bHRlcjo9SWdub3JlSWZTdWJTZWxlY3RIYXNOb0NyaXRlcmlhDQogICBDb25kaXRp +b25Hcm91cHMuQWRkIE5ld0J1aWxkZXINCiAgIA0KICAgU2V0IEFkZFN1YlNlbGVj +dENyaXRlcmlhID0gTmV3QnVpbGRlcg0KICAgDQpFbmQgRnVuY3Rpb24NCg0KJy0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBGdW5jdGlv +bjogQWRkRXhpc3RzQ3JpdGVyaWENCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0NCicNCicgTmV3IGZpbHRlciBjb25kaXRpb24gZ3JvdXAg +Zm9yIGEgZXhpdHMgc3ViIHNlbGVjdCAtIGUuZy4gKCBhID0gMSBhbmQgZXhpc3Rz +IChzZWxlY3QgKiBmcm9tIHRhYjEyMyB3aGVyZSB0ID0gYSBhbmQgeSA9IDEyMykg +KQ0KJw0KJyBQYXJhbWV0ZXJzOg0KJw0KJyAgICAgU2VsZWN0RnJvbVRleHQgLSBT +cWwgdGV4dCBmb3Igc3ViIHNlbGVjdCAod2l0aG91dCB3aGVyZSwgZXhjZXB0IFVz +ZVdoZXJlUmVwbGFjZW1lbnRUZXh0SW5Gcm9tVGV4dCBpcyB1c2VkKQ0KJyAgICAg +SWdub3JlSWZFeGlzdHNTdGF0ZW1lbnRIYXNOb0NyaXRlcmlhIC0gVHJ1ZSA9IEln +bm9yZSBzdWJzZWxlY3QgY3JpdGVyaW9uIGlmIG5vIGZpbHRlciB2YWx1ZXMgd2Vy +ZSB0cmFuc2ZlcnJlZA0KJyAgICAgU3ViU2VsZWN0Q29uY2F0T3BlcmF0b3IgLSBb +U1FMX0FuZCAoZGVmYXVsdCksIFNRTF9PciwgU1FMX0NvbW1hU2VwYXJhdG9yXSAu +LiB2YWxpZCB3aXRoaW4gdGhlIG5ldyBncm91cA0KJyAgICAgVXNlTm90RXhpc3Rz +IC0gdXNlIG5vdCBleGlzdHMgKC4uKTogZGVmYXVsdDogZmFsc2UgPSBleGlzdHMg +KC4uLikNCicNCicgUmV0dXJuczoNCicNCicgICAgIEZpbHRlclN0cmluZ0J1aWxk +ZXIgaW5zdGFuY2UgZm9yIG5ldyBleGlzdHMgZ3JvdXANCicNCictLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClB1YmxpYyBGdW5jdGlvbiBB +ZGRFeGlzdHNDcml0ZXJpYSggXw0KICAgICAgICAgICAgICAgICAgICAgICAgQnlW +YWwgU2VsZWN0RnJvbVRleHQgQXMgU3RyaW5nLCBfDQogICAgICAgICAgICAgICBP +cHRpb25hbCBCeVZhbCBJZ25vcmVJZkV4aXN0c1N0YXRlbWVudEhhc05vQ3JpdGVy +aWEgQXMgQm9vbGVhbiA9IEZhbHNlLCBfDQogICAgICAgICAgICAgICBPcHRpb25h +bCBCeVZhbCBTdWJTZWxlY3RDb25jYXRPcGVyYXRvciBBcyBTcWxMb2dpY2FsT3Bl +cmF0b3IgPSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX0FuZCwgXw0KICAgICAgICAg +ICAgICAgT3B0aW9uYWwgQnlWYWwgVXNlTm90RXhpc3RzIEFzIEJvb2xlYW4gPSBG +YWxzZSwgXw0KICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgVXNlV2hlcmVS +ZXBsYWNlbWVudFRleHRJbkZyb21UZXh0IEFzIEJvb2xlYW4gPSBGYWxzZSBfDQog +ICAgICApIEFzIEZpbHRlclN0cmluZ0J1aWxkZXINCg0KICAgRGltIE5ld0J1aWxk +ZXIgQXMgRmlsdGVyU3RyaW5nQnVpbGRlcg0KICAgRGltIEV4aXN0c1NxbFByZWZp +eCBBcyBTdHJpbmcNCiAgIERpbSBXaGVyZVJlcGxhY2VtZW50UG9zIEFzIExvbmcN +CiAgIERpbSBFeGlzdHNTcWxTdWZmaXggQXMgU3RyaW5nDQogICANCiAgIEV4aXN0 +c1NxbFByZWZpeCA9ICJFeGlzdHMgKCINCiAgIElmIFVzZU5vdEV4aXN0cyBUaGVu +IEV4aXN0c1NxbFByZWZpeCA9ICJOb3QgIiAmIEV4aXN0c1NxbFByZWZpeA0KDQog +ICBJZiBVc2VXaGVyZVJlcGxhY2VtZW50VGV4dEluRnJvbVRleHQgVGhlbg0KICAg +ICAgV2hlcmVSZXBsYWNlbWVudFBvcyA9IEluU3RyKDEsIFNlbGVjdEZyb21UZXh0 +LCBXaGVyZVJlcGxhY2VtZW50VGV4dCwgdmJUZXh0Q29tcGFyZSkNCiAgIEVuZCBJ +Zg0KDQogICBJZiBXaGVyZVJlcGxhY2VtZW50UG9zID4gMCBUaGVuDQogICAgICBF +eGlzdHNTcWxTdWZmaXggPSAiICIgJiBUcmltJChNaWQkKFNlbGVjdEZyb21UZXh0 +LCBXaGVyZVJlcGxhY2VtZW50UG9zICsgTGVuKFdoZXJlUmVwbGFjZW1lbnRUZXh0 +KSkpICYgIikiDQogICAgICBTZWxlY3RGcm9tVGV4dCA9IFRyaW0kKExlZnQoU2Vs +ZWN0RnJvbVRleHQsIFdoZXJlUmVwbGFjZW1lbnRQb3MgLSAxKSkNCiAgIEVsc2UN +CiAgICAgIEV4aXN0c1NxbFN1ZmZpeCA9ICIpIg0KICAgRW5kIElmDQogICANCiAg +IFNldCBOZXdCdWlsZGVyID0gTmV3IEZpbHRlclN0cmluZ0J1aWxkZXINCiAgIE5l +d0J1aWxkZXIuRGVmYXVsdENvbmNhdE9wZXJhdG9yID0gU3ViU2VsZWN0Q29uY2F0 +T3BlcmF0b3INCiAgIFNldCBOZXdCdWlsZGVyLlNxbFRvb2wgPSBtX1NxbFRvb2wN +Cg0KICAgTmV3QnVpbGRlci5Db25maWdTcWxTdGF0ZW1lbnQgU3FsUHJlZml4Oj1F +eGlzdHNTcWxQcmVmaXggJiBTZWxlY3RGcm9tVGV4dCwgXw0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgU3FsU3VmZml4Oj1FeGlzdHNTcWxTdWZmaXgs +IENvbmRpdGlvblByZWZpeDo9IiBXaGVyZSAiLCBJZ25vcmVTcWxQcmVTdWZmaXhJ +ZkVtcHR5RmlsdGVyOj1JZ25vcmVJZkV4aXN0c1N0YXRlbWVudEhhc05vQ3JpdGVy +aWENCg0KICAgQ29uZGl0aW9uR3JvdXBzLkFkZCBOZXdCdWlsZGVyDQoNCiAgIFNl +dCBBZGRFeGlzdHNDcml0ZXJpYSA9IE5ld0J1aWxkZXINCiAgIA0KRW5kIEZ1bmN0 +aW9uDQoNCicjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQonIEdy +b3VwOiBPdXRwdXQNCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KJyBGdW5jdGlvbjogVG9TdHJpbmcNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgT3V0cHV0IGNyaXRlcmlhIHRv +IFN0cmluZw0KJw0KJyBQYXJhbWV0ZXJzOg0KJw0KJyAgICAgQ29uY2F0T3BlcmF0 +b3IgLSBbU1FMX0FuZCAoZGVmYXVsdCksIFNRTF9PciwgU1FMX0NvbW1hU2VwYXJh +dG9yXQ0KJyAgICAgSWdub3JlRHVwbGljYXRlRmlsdGVycyAtIERvIG5vdCBvdXRw +dXQgZHVwbGljYXRlIGZpbHRlciBjcml0ZXJpYQ0KJw0KJyBSZXR1cm5zOg0KJw0K +JyAgICAgQ3JpdGVyaWEvZmlsdGVyIHN0cmluZw0KJw0KJy0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0aW9uIFRvU3Ry +aW5nKE9wdGlvbmFsIEJ5VmFsIENvbmNhdE9wZXJhdG9yIEFzIFNxbExvZ2ljYWxP +cGVyYXRvciA9IFNxbExvZ2ljYWxPcGVyYXRvci5bX1NRTF9EZWZhdWx0XSwgXw0K +ICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFsIElnbm9yZUR1 +cGxpY2F0ZUZpbHRlcnMgQXMgQm9vbGVhbiA9IEZhbHNlKSBBcyBTdHJpbmcNCiAg +IA0KICAgRGltIEZpbHRlclN0cmluZyBBcyBTdHJpbmcNCiAgIERpbSBJdGVtUHJl +Zml4IEFzIFN0cmluZw0KICAgRGltIEl0ZW1TdWZmaXggQXMgU3RyaW5nDQoNCiAg +IElmIENvbmNhdE9wZXJhdG9yID0gU3FsTG9naWNhbE9wZXJhdG9yLltfU1FMX0Rl +ZmF1bHRdIFRoZW4NCiAgICAgIENvbmNhdE9wZXJhdG9yID0gRGVmYXVsdENvbmNh +dE9wZXJhdG9yDQogICBFbmQgSWYNCiAgIA0KICAgSWYgQ29uY2F0T3BlcmF0b3Ig +PD4gU1FMX0NvbW1hU2VwYXJhdG9yIFRoZW4NCiAgICAgIEl0ZW1QcmVmaXggPSAi +KCINCiAgICAgIEl0ZW1TdWZmaXggPSAiKSINCiAgIEVuZCBJZg0KICAgDQogICBG +aWx0ZXJTdHJpbmcgPSBtX0l0ZW1zLlRvU3RyaW5nKEdldENvbmNhdE9wZXJhdG9y +U3RyaW5nKENvbmNhdE9wZXJhdG9yKSwgSXRlbVByZWZpeCwgSXRlbVN1ZmZpeCwg +LCBJZ25vcmVEdXBsaWNhdGVGaWx0ZXJzKQ0KICAgRmlsdGVyU3RyaW5nID0gQXBw +ZW5kRmlsdGVyR3JvdXBzU3RyaW5nKEZpbHRlclN0cmluZywgQ29uY2F0T3BlcmF0 +b3IsIElnbm9yZUR1cGxpY2F0ZUZpbHRlcnMpDQogICBJZiBMZW4oRmlsdGVyU3Ry +aW5nKSA+IDAgVGhlbg0KICAgICAgRmlsdGVyU3RyaW5nID0gbV9Db25kaXRpb25Q +cmVmaXggJiBGaWx0ZXJTdHJpbmcNCiAgIEVuZCBJZg0KICAgDQogICBJZiBtX0ln +bm9yZVNxbFByZVN1ZmZpeElmRW1wdHlGaWx0ZXIgVGhlbg0KICAgSWYgTGVuKEZp +bHRlclN0cmluZykgPSAwIFRoZW4NCiAgICAgIFRvU3RyaW5nID0gdmJOdWxsU3Ry +aW5nDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQgSWYNCiAgIEVuZCBJZg0K +ICAgDQogICBUb1N0cmluZyA9IG1fU3FsUHJlZml4ICYgRmlsdGVyU3RyaW5nICYg +bV9TcWxTdWZmaXgNCiAgIA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rp +b24gR2V0Q29uY2F0T3BlcmF0b3JTdHJpbmcoQnlWYWwgQ29uY2F0T3BlcmF0b3Ig +QXMgU3FsTG9naWNhbE9wZXJhdG9yKSBBcyBTdHJpbmcNCg0KICAgU2VsZWN0IENh +c2UgQ29uY2F0T3BlcmF0b3INCiAgICAgIENhc2UgU3FsTG9naWNhbE9wZXJhdG9y +LlNRTF9BbmQNCiAgICAgICAgIEdldENvbmNhdE9wZXJhdG9yU3RyaW5nID0gIiBB +bmQgIg0KICAgICAgQ2FzZSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX09yDQogICAg +ICAgICBHZXRDb25jYXRPcGVyYXRvclN0cmluZyA9ICIgT3IgIg0KICAgICAgQ2Fz +ZSBTcWxMb2dpY2FsT3BlcmF0b3IuU1FMX0NvbW1hU2VwYXJhdG9yDQogICAgICAg +ICBHZXRDb25jYXRPcGVyYXRvclN0cmluZyA9ICIsICINCiAgICAgIENhc2UgRWxz +ZQ0KICAgICAgICAgDQogICBFbmQgU2VsZWN0DQogDQpFbmQgRnVuY3Rpb24NCg0K +UHJpdmF0ZSBQcm9wZXJ0eSBHZXQgQ29uZGl0aW9uR3JvdXBzKCkgQXMgQ29sbGVj +dGlvbg0KICAgSWYgbV9Db25kaXRpb25Hcm91cHMgSXMgTm90aGluZyBUaGVuDQog +ICAgICBTZXQgbV9Db25kaXRpb25Hcm91cHMgPSBOZXcgQ29sbGVjdGlvbg0KICAg +RW5kIElmDQogICBTZXQgQ29uZGl0aW9uR3JvdXBzID0gbV9Db25kaXRpb25Hcm91 +cHMNCkVuZCBQcm9wZXJ0eQ0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tDQonIFByb3BlcnR5OiBXaGVyZVJlcGxhY2VtZW50VGV4dFBs +YWNlaG9sZGVyDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tDQonDQonIFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHRleHQgdXNlZCBpbiBT +UUwgc3Vic2VsZWN0cyB0byBkeW5hbWljYWxseSBpbnNlcnQgdGhlIFdIRVJFIGNv +bmRpdGlvbi4NCicgVXNlZCBpbiBBZGRTdWJTZWxlY3RDcml0ZXJpYSBhbmQgQWRk +RXhpc3RzQ3JpdGVyaWEgdG8gcmVwbGFjZSAiW1doZXJlU3RhdGVtZW50XSIgaW4g +dGhlIFNRTCB0ZXh0DQonIHdpdGggdGhlIGFjdHVhbCBnZW5lcmF0ZWQgZmlsdGVy +IGNvbmRpdGlvbi4NCicNCicgRXhhbXBsZToNCicgICBTRUxFQ1QgLi4uIEZST00g +Li4uIFtXaGVyZVN0YXRlbWVudF0gLi4uDQonDQonLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQdWJsaWMgUHJvcGVydHkgR2V0IFdoZXJl +UmVwbGFjZW1lbnRUZXh0UGxhY2Vob2xkZXIoKSBBcyBTdHJpbmcNCiAgICBXaGVy +ZVJlcGxhY2VtZW50VGV4dFBsYWNlaG9sZGVyID0gV2hlcmVSZXBsYWNlbWVudFRl +eHQNCkVuZCBQcm9wZXJ0eQ== + + 20250609094839 + data/FilterStringBuilder.cls + + + SqlTools + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIlNxbFRvb2xzIg0KQXR0cmlidXRl +IFZCX0dsb2JhbE5hbWVTcGFjZSA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfQ3JlYXRh +YmxlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9QcmVkZWNsYXJlZElkID0gVHJ1ZQ0K +QXR0cmlidXRlIFZCX0V4cG9zZWQgPSBGYWxzZQ0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBDbGFzczogZGF0YS5zcWwuU3FsVG9v +bHMNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicN +CicgRnVuY3Rpb25zIHRvIGJ1aWxkIHNxbCBzdHJpbmdzDQonDQonIEF1dGhvcjoN +CicgICAgIEpvc2VmIFBvZXR6bA0KJw0KJyBSZW1hcmtzOg0KJyAgICAgIkF0dHJp +YnV0ZSBWQl9QcmVkZWNsYXJlZElkID0gVHJ1ZSIgdG8gZW5hYmxlIHVzaW5nIFNx +bFRvb2xzIHdpdGhvdXQgZXhwbGljaXQgaW5zdGFudGlhdGlvbi4NCicNCicgV2Fy +bmluZzoNCicNCid8ICAgIERvbid0IGZvcmdldCB0byBzZXQgcGFyYW1ldGVycyBm +b3IgZGF0ZSBmb3JtYXQsIGJvb2xlYW4gYW5kIHdpbGRjYXJkIGZvciB0aGUgREJN +Uy4NCicNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N +Cg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJzxj +b2RlbGliPg0KJyAgPGZpbGU+ZGF0YS9TcWxUb29scy5jbHM8L2ZpbGU+DQonICA8 +bGljZW5zZT5fY29kZWxpYi9saWNlbnNlLmJhczwvbGljZW5zZT4NCicgIDxyZXBs +YWNlPmRhdGEvU3FsVG9vbHMuYmFzPC9yZXBsYWNlPg0KJyAgPHRlc3Q+X3Rlc3Qv +ZGF0YS9TcWxUb29sc1Rlc3RzLmNsczwvdGVzdD4NCicgIDx0ZXN0Pl90ZXN0L2Rh +dGEvU3FsVG9vbHNCdWlsZENyaXRlcmlhVGVzdHMuY2xzPC90ZXN0Pg0KJzwvY29k +ZWxpYj4NCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N +CicNCk9wdGlvbiBDb21wYXJlIFRleHQNCk9wdGlvbiBFeHBsaWNpdA0KDQpQcml2 +YXRlIEVudW0gU3FsVG9vbHNFcnJvck51bWJlcnMNCiAgIEVSUk5SX05PQ09ORklH +ID0gdmJPYmplY3RFcnJvciArIDENCkVuZCBFbnVtDQoNCicgRGVmYXVsdCB2YWx1 +ZXMgZm9yIG1ldGhvZCBwYXJhbWV0ZXJzDQpQcml2YXRlIENvbnN0IFNRTF9ERUZB +VUxUX1RFWFRERUxJTUlURVIgQXMgU3RyaW5nID0gIiciDQpQcml2YXRlIENvbnN0 +IFNRTF9ERUZBVUxUX0RBVEVGT1JNQVQgQXMgU3RyaW5nID0gIiIgICAgICcgIiIg +PT4gU3FsRGF0ZUZvcm1hdCBwcm9wZXJ0eSB3aWxsIHVzZS4NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBU +byBkaXNhYmxlLCBlbnRlciB2YWx1ZSAoZS5nLiAiXCN5eXl5LW1tXC1kZFwjIiks +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICcgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUg +ZGVmYXVsdCBlbnRyeS4NClByaXZhdGUgQ29uc3QgU1FMX0RFRkFVTFRfQk9PTFRS +VUVTVFJJTkcgQXMgU3RyaW5nID0gIiIgJyAiIiA9PiBTcWxCb29sZWFuVHJ1ZVN0 +cmluZyBpcyB1c2VkLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAnIEVudGVyIHZhbHVlIHRvIGRpc2FibGUg +KGUuZy4gIlRydWUgb3IgMSIpDQpQcml2YXRlIENvbnN0IFNRTF9ERUZBVUxUX1dJ +TERDQVJEIEFzIFN0cmluZyA9ICIlIiAgICAgICcgJSA9IGRlZmF1bHQgdmFsdWUs +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICcgc2V0IHJlcXVpcmVkIHZhcmlhdGlvbnMgdmlhIFNxbFdpbGRD +YXJkU3RyaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICANClByaXZhdGUgQ29uc3QgU3FsQW5kQ29uY2F0U3RyaW5n +IEFzIFN0cmluZyA9ICIgQW5kICINClByaXZhdGUgQ29uc3QgU3FsT3JDb25jYXRT +dHJpbmcgQXMgU3RyaW5nID0gIiBPciAiDQoNClByaXZhdGUgVHlwZSBTcWxGb3Jt +YXRTZXR0aW5ncw0KICAgU3FsRGF0ZUZvcm1hdCBBcyBTdHJpbmcNCiAgIFNxbEJv +b2xlYW5UcnVlU3RyaW5nIEFzIFN0cmluZw0KICAgU3FsV2lsZENhcmRTdHJpbmcg +QXMgU3RyaW5nDQpFbmQgVHlwZQ0KDQpQcml2YXRlIG1fU3FsRm9ybWF0IEFzIFNx +bEZvcm1hdFNldHRpbmdzDQoNClByaXZhdGUgQ29uc3QgUmVzdWx0VGV4dElmTnVs +bCBBcyBTdHJpbmcgPSAiTnVsbCINCg0KUHVibGljIEVudW0gU3FsUmVsYXRpb25h +bE9wZXJhdG9ycw0KICAgW19JZ25vcmVBbGxdID0gJkg4MDAwMDAwMA0KICAgU1FM +X05vdCA9IDENCiAgIFNRTF9FcXVhbCA9IDINCiAgIFNRTF9MZXNzVGhhbiA9IDQN +CiAgIFNRTF9HcmVhdGVyVGhhbiA9IDgNCiAgIFNRTF9MaWtlID0gMjU2DQogICBT +UUxfQmV0d2VlbiA9IDUxMg0KICAgU1FMX0luID0gMTAyNA0KICAgU1FMX0FkZF9X +aWxkQ2FyZFN1ZmZpeCA9IDIwNDgNCiAgIFNRTF9BZGRfV2lsZENhcmRQcmVmaXgg +PSA0MDk2DQogICBTUUxfU3BsaXRWYWx1ZVRvQXJyYXkgPSA4MTkyDQogICBTUUxf +QWxsb3dTcWxEaXJlY3QgPSAxNjM4NA0KICAgU1FMX1VzZUxpa2VCZWhhdmlvciA9 +IDY1NTM2DQpFbmQgRW51bQ0KDQpQdWJsaWMgRW51bSBTcWxGaWVsZERhdGFUeXBl +DQogICBTUUxfQm9vbGVhbiA9IDENCiAgIFNRTF9OdW1lcmljID0gMg0KICAgU1FM +X1RleHQgPSAzDQogICBTUUxfRGF0ZSA9IDQNCkVuZCBFbnVtDQoNClB1YmxpYyBF +bnVtIFNxbExvZ2ljYWxPcGVyYXRvcg0KICAgW19TUUxfRGVmYXVsdF0gPSAwDQog +ICBTUUxfQW5kID0gMQ0KICAgU1FMX09yID0gMg0KICAgU1FMX0NvbW1hU2VwYXJh +dG9yID0gMw0KRW5kIEVudW0NCg0KUHVibGljIEVudW0gU3FsRGlhbGVjdA0KICAg +U1FMX0N1c3RvbSA9IDANCiAgIFNRTF9EQU8gPSAxDQogICBTUUxfVFNRTCA9IDIN +CkVuZCBFbnVtDQoNCicjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj +DQonIEdyb3VwOiBDbGFzcyBzdXBwb3J0DQoNCictLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IFNlbGVjdERpYWxlY3QN +CictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicg +Q3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggYmFzaWMgc2V0dGluZ3Mgb2YgdGhl +IHNlbGVjdGVkIGRpYWxlY3QNCicNCicgUGFyYW1ldGVyczoNCicNCicgICAgIFVz +ZURpYWxlY3QgLSB1c2Ugc2V0dGluZyBvZiBkaWFsZWN0IChhcyBiYXNlKQ0KJyAg +ICAgTmV3U3FsRGF0ZUZvcm1hdCAtIHVzZSB0aGlzIGRhdGUgZm9ybWF0IGluc3Rl +YWQgb2YgYmFzZSBkaWFsZWN0DQonICAgICBOZXdTcWxCb29sZWFuVHJ1ZVN0cmlu +ZyAtIHVzZSB0aGlzIHRleHQgZm9yIHRydWUgaW5zdGVhZCBvZiBiYXNlIGRpYWxl +Y3QNCicgICAgIE5ld1NxbFdpbGRDYXJkU3RyaW5nIC0gdXNlIHRoaXMgd2lsZGNh +cmQgc3RyaW5nIGluc3RlYWQgb2YgYmFzZSBkaWFsZWN0DQonDQonIFJldHVybnM6 +DQonDQonICAgICBTcWxUb29scyBpbnN0YW5jZSB3aXRoIGNvbmZpZyBmb3JtIGJh +c2UNCicNCicgU2VlIEFsc286DQonICAgICBOZXdJbnN0YW5jZQ0KJw0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0 +aW9uIEZyb21EaWFsZWN0KEJ5VmFsIFVzZURpYWxlY3QgQXMgU3FsRGlhbGVjdCwg +Xw0KICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgTmV3U3FsRGF0 +ZUZvcm1hdCBBcyBTdHJpbmcgPSBTUUxfREVGQVVMVF9EQVRFRk9STUFULCBfDQog +ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBOZXdTcWxCb29sZWFu +VHJ1ZVN0cmluZyBBcyBTdHJpbmcgPSBTUUxfREVGQVVMVF9CT09MVFJVRVNUUklO +RywgXw0KICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgTmV3U3Fs +V2lsZENhcmRTdHJpbmcgQXMgU3RyaW5nID0gU1FMX0RFRkFVTFRfV0lMRENBUkQp +IEFzIFNxbFRvb2xzDQoNCiAgIERpbSBOZXdTbHFUb29sc0luc3RhbmNlIEFzIFNx +bFRvb2xzDQogICANCiAgIFNlbGVjdCBDYXNlIFVzZURpYWxlY3QNCiAgICAgIENh +c2UgU3FsRGlhbGVjdC5TUUxfREFPDQogICAgICAgICBTZXQgTmV3U2xxVG9vbHNJ +bnN0YW5jZSA9IE1lLkRBTw0KICAgICAgQ2FzZSBTcWxEaWFsZWN0LlNRTF9UU1FM +DQogICAgICAgICBTZXQgTmV3U2xxVG9vbHNJbnN0YW5jZSA9IE1lLlRTcWwNCiAg +ICAgIENhc2UgRWxzZQ0KICAgICAgICAgU2V0IE5ld1NscVRvb2xzSW5zdGFuY2Ug +PSBNZS5DbG9uZQ0KICAgRW5kIFNlbGVjdA0KDQogICBJZiBMZW4oTmV3U3FsRGF0 +ZUZvcm1hdCkgPiAwIFRoZW4gTmV3U2xxVG9vbHNJbnN0YW5jZS5TcWxEYXRlRm9y +bWF0ID0gTmV3U3FsRGF0ZUZvcm1hdA0KICAgSWYgTGVuKE5ld1NxbEJvb2xlYW5U +cnVlU3RyaW5nKSA+IDAgVGhlbiBOZXdTbHFUb29sc0luc3RhbmNlLlNxbEJvb2xl +YW5UcnVlU3RyaW5nID0gTmV3U3FsQm9vbGVhblRydWVTdHJpbmcNCiAgIElmIExl +bihOZXdTcWxXaWxkQ2FyZFN0cmluZykgPiAwIFRoZW4gTmV3U2xxVG9vbHNJbnN0 +YW5jZS5TcWxXaWxkQ2FyZFN0cmluZyA9IE5ld1NxbFdpbGRDYXJkU3RyaW5nDQoN +CiAgIFNldCBGcm9tRGlhbGVjdCA9IE5ld1NscVRvb2xzSW5zdGFuY2UNCg0KRW5k +IEZ1bmN0aW9uDQoNCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KJyBGdW5jdGlvbjogQ2xvbmUNCictLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgQ3JlYXRlIGEgbmV3IGluc3RhbmNl +IHdpdGggYmFzaWMgc2V0dGluZ3Mgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UuDQon +DQonIFBhcmFtZXRlcnM6DQonDQonICAgICBOZXdTcWxEYXRlRm9ybWF0IC0gdXNl +IHRoaXMgZGF0ZSBmb3JtYXQgaW5zdGVhZCBvZiBiYXNlIGluc3RhbmNlDQonICAg +ICBOZXdTcWxCb29sZWFuVHJ1ZVN0cmluZyAtIHVzZSB0aGlzIHRleHQgZm9yIHRy +dWUgaW5zdGVhZCBvZiBiYXNlIGluc3RhbmNlDQonICAgICBOZXdTcWxXaWxkQ2Fy +ZFN0cmluZyAtIHVzZSB0aGlzIHdpbGRjYXJkIHN0cmluZyBpbnN0ZWFkIG9mIGJh +c2UgaW5zdGFuY2UNCicNCicgUmV0dXJuczoNCicNCicgICAgIFNxbFRvb2xzIGlu +c3RhbmNlIHdpdGggY29uZmlnIGZvcm0gYmFzZQ0KJw0KJyBTZWUgQWxzbzoNCicg +ICAgIE5ld0luc3RhbmNlDQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tDQpQdWJsaWMgRnVuY3Rpb24gQ2xvbmUoT3B0aW9uYWwgQnlW +YWwgTmV3U3FsRGF0ZUZvcm1hdCBBcyBTdHJpbmcgPSBTUUxfREVGQVVMVF9EQVRF +Rk9STUFULCBfDQogICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwg +TmV3U3FsQm9vbGVhblRydWVTdHJpbmcgQXMgU3RyaW5nID0gU1FMX0RFRkFVTFRf +Qk9PTFRSVUVTVFJJTkcsIF8NCiAgICAgICAgICAgICAgICAgICAgICBPcHRpb25h +bCBCeVZhbCBOZXdTcWxXaWxkQ2FyZFN0cmluZyBBcyBTdHJpbmcgPSBTUUxfREVG +QVVMVF9XSUxEQ0FSRCkgQXMgU3FsVG9vbHMNCg0KICAgSWYgTGVuKE5ld1NxbERh +dGVGb3JtYXQpID0gMCBUaGVuIE5ld1NxbERhdGVGb3JtYXQgPSBNZS5TcWxEYXRl +Rm9ybWF0DQogICBJZiBMZW4oTmV3U3FsQm9vbGVhblRydWVTdHJpbmcpID0gMCBU +aGVuIE5ld1NxbEJvb2xlYW5UcnVlU3RyaW5nID0gTWUuU3FsQm9vbGVhblRydWVT +dHJpbmcNCiAgIElmIExlbihOZXdTcWxXaWxkQ2FyZFN0cmluZykgPSAwIFRoZW4g +TmV3U3FsV2lsZENhcmRTdHJpbmcgPSBNZS5TcWxXaWxkQ2FyZFN0cmluZw0KDQog +ICBTZXQgQ2xvbmUgPSBOZXdJbnN0YW5jZShOZXdTcWxEYXRlRm9ybWF0LCBOZXdT +cWxCb29sZWFuVHJ1ZVN0cmluZywgTmV3U3FsV2lsZENhcmRTdHJpbmcpDQoNCkVu +ZCBGdW5jdGlvbg0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tDQonIEZ1bmN0aW9uOiBOZXdJbnN0YW5jZQ0KJy0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBDcmVhdGUgYSBuZXcgaW5z +dGFuY2UNCicNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0NClB1YmxpYyBGdW5jdGlvbiBOZXdJbnN0YW5jZShCeVZhbCBOZXdTcWxEYXRl +Rm9ybWF0IEFzIFN0cmluZywgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IEJ5VmFsIE5ld1NxbEJvb2xlYW5UcnVlU3RyaW5nIEFzIFN0cmluZywgXw0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFsIE5ld1NxbFdpbGRDYXJkU3Ry +aW5nIEFzIFN0cmluZykgQXMgU3FsVG9vbHMNCiAgIA0KICAgRGltIE5ld0luc3Qg +QXMgU3FsVG9vbHMNCg0KICAgU2V0IE5ld0luc3QgPSBOZXcgU3FsVG9vbHMNCiAg +IFdpdGggTmV3SW5zdA0KICAgICAgLlNxbERhdGVGb3JtYXQgPSBOZXdTcWxEYXRl +Rm9ybWF0DQogICAgICAuU3FsQm9vbGVhblRydWVTdHJpbmcgPSBOZXdTcWxCb29s +ZWFuVHJ1ZVN0cmluZw0KICAgICAgLlNxbFdpbGRDYXJkU3RyaW5nID0gTmV3U3Fs +V2lsZENhcmRTdHJpbmcNCiAgIEVuZCBXaXRoDQoNCiAgIFNldCBOZXdJbnN0YW5j +ZSA9IE5ld0luc3QNCg0KRW5kIEZ1bmN0aW9uDQoNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IEluaXRTcWxEaWFs +ZWN0DQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQon +DQonIENvbmZpZyBzcWwgdGV4dCBvdXRwdXQgZm9ybWF0IGZvciBzcGVjaWZpYyBz +cWwgZGlhbGVjdA0KJw0KJyBQYXJhbWV0ZXJzOg0KJw0KJyAgICAgU3FsRGF0ZUZv +cm1hdCAtIG91dHB1dCBzdHJpbmcgZm9ybWF0IGZvciBkYXRlIHZhbHVlcw0KJyAg +ICAgU3FsQm9vbGVhblRydWVTdHJpbmcgLSBvdXRwdXQgc3RyaW5nIGZvcm1hdCBm +b3IgYm9vbGVhbiB2YWx1ZXMNCicgICAgIFNxbFdpbGRDYXJkU3RyaW5nIC0gd2ls +ZGNhcmQgc3RyaW5nIChlLmcuICogLi4gZGFvLCAlIC4uIFQtU1FMKQ0KJw0KJy0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJpZW5kIFN1 +YiBJbml0U3FsRGlhbGVjdChCeVZhbCBVc2VEaWFsZWN0IEFzIFNxbERpYWxlY3Qs +IF8NCiAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFsIE5ld1NxbERh +dGVGb3JtYXQgQXMgU3RyaW5nID0gU1FMX0RFRkFVTFRfREFURUZPUk1BVCwgXw0K +ICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgTmV3U3FsQm9vbGVh +blRydWVTdHJpbmcgQXMgU3RyaW5nID0gU1FMX0RFRkFVTFRfQk9PTFRSVUVTVFJJ +TkcsIF8NCiAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFsIE5ld1Nx +bFdpbGRDYXJkU3RyaW5nIEFzIFN0cmluZyA9IFNRTF9ERUZBVUxUX1dJTERDQVJE +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICBEaW0gU3FsRm9ybWF0 +IEFzIFNxbEZvcm1hdFNldHRpbmdzDQogICANCiAgIFNlbGVjdCBDYXNlIFVzZURp +YWxlY3QNCiAgICAgIENhc2UgU3FsRGlhbGVjdC5TUUxfREFPDQogICAgICAgICBT +cWxGb3JtYXQgPSBEYW9TcWxGb3JtYXQNCiAgICAgIENhc2UgU3FsRGlhbGVjdC5T +UUxfVFNRTA0KICAgICAgICAgU3FsRm9ybWF0ID0gVFNxbFNxbEZvcm1hdA0KICAg +ICAgQ2FzZSBFbHNlDQogICAgICAgICAnIHNldCBub3RoaW5nID0+IHVzZSBOZXdT +cWwqIHBhcmFtZXRlcg0KICAgRW5kIFNlbGVjdA0KDQogICBJZiBMZW4oTmV3U3Fs +RGF0ZUZvcm1hdCkgPiAwIFRoZW4gU3FsRm9ybWF0LlNxbERhdGVGb3JtYXQgPSBO +ZXdTcWxEYXRlRm9ybWF0DQogICBJZiBMZW4oTmV3U3FsQm9vbGVhblRydWVTdHJp +bmcpID4gMCBUaGVuIFNxbEZvcm1hdC5TcWxCb29sZWFuVHJ1ZVN0cmluZyA9IE5l +d1NxbEJvb2xlYW5UcnVlU3RyaW5nDQogICBJZiBMZW4oTmV3U3FsV2lsZENhcmRT +dHJpbmcpID4gMCBUaGVuIFNxbEZvcm1hdC5TcWxXaWxkQ2FyZFN0cmluZyA9IE5l +d1NxbFdpbGRDYXJkU3RyaW5nDQoNCiAgIEluaXRTcWxGb3JtYXQgU3FsRm9ybWF0 +LlNxbERhdGVGb3JtYXQsIFNxbEZvcm1hdC5TcWxCb29sZWFuVHJ1ZVN0cmluZywg +U3FsRm9ybWF0LlNxbFdpbGRDYXJkU3RyaW5nDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICANCg0KRW5kIFN1Yg0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tDQonIEZ1bmN0aW9uOiBJbml0U3FsRm9ybWF0DQonLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIENvbmZp +ZyBzcWwgdGV4dCBvdXRwdXQgZm9ybWF0IGZvciBzcGVjaWZpYyBzcWwgZGlhbGVj +dA0KJw0KJyBQYXJhbWV0ZXJzOg0KJw0KJyAgICAgU3FsRGF0ZUZvcm1hdCAtIG91 +dHB1dCBzdHJpbmcgZm9ybWF0IGZvciBkYXRlIHZhbHVlcw0KJyAgICAgU3FsQm9v +bGVhblRydWVTdHJpbmcgLSBvdXRwdXQgc3RyaW5nIGZvcm1hdCBmb3IgYm9vbGVh +biB2YWx1ZXMNCicgICAgIFNxbFdpbGRDYXJkU3RyaW5nIC0gd2lsZGNhcmQgc3Ry +aW5nIChlLmcuICogLi4gZGFvLCAlIC4uIFQtU1FMKQ0KJw0KJy0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJpZW5kIFN1YiBJbml0U3Fs +Rm9ybWF0KEJ5VmFsIFNxbERhdGVGb3JtYXQgQXMgU3RyaW5nLCBfDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICBCeVZhbCBTcWxCb29sZWFuVHJ1ZVN0cmluZyBB +cyBTdHJpbmcsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFsIFNx +bFdpbGRDYXJkU3RyaW5nIEFzIFN0cmluZykNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgIA0KICAgTWUuU3FsRGF0ZUZvcm1hdCA9IFNxbERhdGVGb3JtYXQNCiAg +IE1lLlNxbEJvb2xlYW5UcnVlU3RyaW5nID0gU3FsQm9vbGVhblRydWVTdHJpbmcN +CiAgIE1lLlNxbFdpbGRDYXJkU3RyaW5nID0gU3FsV2lsZENhcmRTdHJpbmcNCg0K +RW5kIFN1Yg0KDQonIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0K +JyBHcm91cDogU1FMIGRpYWxlY3QgcHJlZmVyZW5jZXMNCg0KJy0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBQcm9wZXJ0eTogREFPDQon +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIFNx +bFRvb2xzIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIERBTy1TUUwgKEpldC9BQ0Up +DQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQ +dWJsaWMgUHJvcGVydHkgR2V0IERBTygpIEFzIFNxbFRvb2xzDQogICBXaXRoIERh +b1NxbEZvcm1hdA0KICAgICAgU2V0IERBTyA9IE1lLk5ld0luc3RhbmNlKC5TcWxE +YXRlRm9ybWF0LCAuU3FsQm9vbGVhblRydWVTdHJpbmcsIC5TcWxXaWxkQ2FyZFN0 +cmluZykNCiAgIEVuZCBXaXRoDQpFbmQgUHJvcGVydHkNCg0KUHJpdmF0ZSBQcm9w +ZXJ0eSBHZXQgRGFvU3FsRm9ybWF0KCkgQXMgU3FsRm9ybWF0U2V0dGluZ3MNCg0K +ICAgRGltIFNxbEZvcm1hdCBBcyBTcWxGb3JtYXRTZXR0aW5ncw0KICAgDQogICBT +cWxGb3JtYXQuU3FsRGF0ZUZvcm1hdCA9ICJcI3l5eXktbW0tZGQgaGg6bm46c3Nc +IyINCiAgIFNxbEZvcm1hdC5TcWxCb29sZWFuVHJ1ZVN0cmluZyA9ICJUcnVlIg0K +ICAgU3FsRm9ybWF0LlNxbFdpbGRDYXJkU3RyaW5nID0gIioiDQogICANCiAgIERh +b1NxbEZvcm1hdCA9IFNxbEZvcm1hdA0KDQpFbmQgUHJvcGVydHkNCg0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBQcm9wZXJ0eTog +VFNxbA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K +Jw0KJyBTcWxUb29scyBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBULVNRTA0KJw0K +Jy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGlj +IFByb3BlcnR5IEdldCBUU3FsKCkgQXMgU3FsVG9vbHMNCiAgIFdpdGggVFNxbFNx +bEZvcm1hdA0KICAgICAgU2V0IFRTcWwgPSBNZS5OZXdJbnN0YW5jZSguU3FsRGF0 +ZUZvcm1hdCwgLlNxbEJvb2xlYW5UcnVlU3RyaW5nLCAuU3FsV2lsZENhcmRTdHJp +bmcpDQogICBFbmQgV2l0aA0KRW5kIFByb3BlcnR5DQoNClByaXZhdGUgUHJvcGVy +dHkgR2V0IFRTcWxTcWxGb3JtYXQoKSBBcyBTcWxGb3JtYXRTZXR0aW5ncw0KDQog +ICBEaW0gU3FsRm9ybWF0IEFzIFNxbEZvcm1hdFNldHRpbmdzDQogICANCiAgIFNx +bEZvcm1hdC5TcWxEYXRlRm9ybWF0ID0gIid5eXl5bW1kZCBoaDpubjpzcyciDQog +ICBTcWxGb3JtYXQuU3FsQm9vbGVhblRydWVTdHJpbmcgPSAiMSINCiAgIFNxbEZv +cm1hdC5TcWxXaWxkQ2FyZFN0cmluZyA9ICIlIg0KICAgDQogICBUU3FsU3FsRm9y +bWF0ID0gU3FsRm9ybWF0DQoNCkVuZCBQcm9wZXJ0eQ0KDQonIENvbmZpZ3VyYXRp +b24gZm9yIFNRTCBkaWFsZWN0DQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0NCicgUHJvcGVydHk6IFNxbFdpbGRDYXJkU3RyaW5nDQon +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIFdp +bGRjYXJkIGNoYXJhY3RlciBmb3IgbGlrZQ0KJw0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIFByb3BlcnR5IEdldCBTcWxX +aWxkQ2FyZFN0cmluZygpIEFzIFN0cmluZw0KICAgSWYgTGVuKG1fU3FsRm9ybWF0 +LlNxbFdpbGRDYXJkU3RyaW5nKSA+IDAgVGhlbg0KICAgICAgU3FsV2lsZENhcmRT +dHJpbmcgPSBtX1NxbEZvcm1hdC5TcWxXaWxkQ2FyZFN0cmluZw0KICAgRWxzZQ0K +ICAgICAgU3FsV2lsZENhcmRTdHJpbmcgPSBTUUxfREVGQVVMVF9XSUxEQ0FSRA0K +ICAgRW5kIElmDQpFbmQgUHJvcGVydHkNCg0KUHVibGljIFByb3BlcnR5IExldCBT +cWxXaWxkQ2FyZFN0cmluZyhCeVZhbCBOZXdWYWx1ZSBBcyBTdHJpbmcpDQogICBt +X1NxbEZvcm1hdC5TcWxXaWxkQ2FyZFN0cmluZyA9IE5ld1ZhbHVlDQpFbmQgUHJv +cGVydHkNCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LQ0KJyBQcm9wZXJ0eTogU3FsRGF0ZUZvcm1hdA0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBGb3JtYXQgZm9yIGRhdGUgdmFs +dWVzDQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +DQpQdWJsaWMgUHJvcGVydHkgR2V0IFNxbERhdGVGb3JtYXQoKSBBcyBTdHJpbmcN +CiAgIElmIExlbihtX1NxbEZvcm1hdC5TcWxEYXRlRm9ybWF0KSA+IDAgVGhlbg0K +ICAgICAgU3FsRGF0ZUZvcm1hdCA9IG1fU3FsRm9ybWF0LlNxbERhdGVGb3JtYXQN +CiAgIEVsc2UNCiAgICAgIFNxbERhdGVGb3JtYXQgPSBTUUxfREVGQVVMVF9EQVRF +Rk9STUFUDQogICBFbmQgSWYNCkVuZCBQcm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVy +dHkgTGV0IFNxbERhdGVGb3JtYXQoQnlWYWwgTmV3VmFsdWUgQXMgU3RyaW5nKQ0K +ICAgbV9TcWxGb3JtYXQuU3FsRGF0ZUZvcm1hdCA9IE5ld1ZhbHVlDQpFbmQgUHJv +cGVydHkNCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LQ0KJyBQcm9wZXJ0eTogU3FsQm9vbGVhblRydWVTdHJpbmcNCictLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgQm9vbGVhbiBzdHJp +bmcgaW4gU1FMIHN0YXRlbWVudA0KJw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIFByb3BlcnR5IEdldCBTcWxCb29sZWFu +VHJ1ZVN0cmluZygpIEFzIFN0cmluZw0KICAgSWYgTGVuKG1fU3FsRm9ybWF0LlNx +bEJvb2xlYW5UcnVlU3RyaW5nKSA+IDAgVGhlbg0KICAgICAgU3FsQm9vbGVhblRy +dWVTdHJpbmcgPSBtX1NxbEZvcm1hdC5TcWxCb29sZWFuVHJ1ZVN0cmluZw0KICAg +RWxzZQ0KICAgICAgU3FsQm9vbGVhblRydWVTdHJpbmcgPSBTUUxfREVGQVVMVF9C +T09MVFJVRVNUUklORw0KICAgRW5kIElmDQpFbmQgUHJvcGVydHkNCg0KUHVibGlj +IFByb3BlcnR5IExldCBTcWxCb29sZWFuVHJ1ZVN0cmluZyhCeVZhbCBOZXdWYWx1 +ZSBBcyBTdHJpbmcpDQogICBtX1NxbEZvcm1hdC5TcWxCb29sZWFuVHJ1ZVN0cmlu +ZyA9IE5ld1ZhbHVlDQpFbmQgUHJvcGVydHkNCg0KJyMjIyMjIyMjIyMjIyMjIyMj +IyMjIyMjIyMjIyMjIyMjIyMNCicgR3JvdXA6IEJ1aWxkQ3JpdGVyaWENCg0KJy0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBGdW5jdGlv +bjogQnVpbGRDcml0ZXJpYQ0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLQ0KJw0KJyBDcmVhdGUgU1FMIGNyaXRlcmlhIHN0cmluZw0KJw0K +JyBQYXJhbWV0ZXJzOg0KJyAgICAgRmllbGROYW1lICAgICAgICAgICAgLSBGaWVs +ZCBuYW1lIGluIHRoZSBkYXRhIHNvdXJjZSB0byBiZSBmaWx0ZXJlZA0KJyAgICAg +UmVsYXRpb25hbE9wZXJhdG9yICAgLSBSZWxhdGlvbmFsIG9wZXJhdG9yICg9LCA8 +PSwgZXRjLikNCicgICAgIEZpbHRlclZhbHVlICAgICAgICAgIC0gRmlsdGVyIHZh +bHVlIChjYW4gYmUgYSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVz +KQ0KJyAgICAgRmlsdGVyVmFsdWUyICAgICAgICAgLSBPcHRpb25hbCAybmQgZmls +dGVyIHZhbHVlIChmb3IgQmV0d2VlbikNCicgICAgIElnbm9yZVZhbHVlICAgICAg +ICAgIC0gVGhlIHZhbHVlIGZvciB3aGljaCBubyBmaWx0ZXIgY29uZGl0aW9uIGlz +IHRvIGJlIGNyZWF0ZWQuIChBcnJheSB0cmFuc2ZlciBvZiB2YWx1ZXMgcG9zc2li +bGUpDQonDQonIFJldHVybnM6DQonICAgICBTUUwgY3JpdGVyaWEgc3RyaW5nDQon +DQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQdWJs +aWMgRnVuY3Rpb24gQnVpbGRDcml0ZXJpYShCeVZhbCBGaWVsZE5hbWUgQXMgU3Ry +aW5nLCBCeVZhbCBGaWVsZERhdGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5cGUsIF8N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFsIFJlbGF0aW9uYWxP +cGVyYXRvciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBfDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBCeVZhbCBGaWx0ZXJWYWx1ZSBBcyBWYXJpYW50 +LCBfDQogICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBGaWx0ZXJW +YWx1ZTIgQXMgVmFyaWFudCA9IE51bGwsIF8NCiAgICAgICAgICAgICAgICAgICAg +IE9wdGlvbmFsIEJ5VmFsIElnbm9yZVZhbHVlIEFzIFZhcmlhbnQsIF8NCiAgICAg +ICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFsIERpc2FibGVJZ25vcmVOdWxs +VmFsdWUgQXMgQm9vbGVhbiA9IEZhbHNlKSBBcyBTdHJpbmcNCg0KICAgRGltIEZp +bHRlclZhbHVlU3RyaW5nIEFzIFN0cmluZw0KICAgRGltIE9wZXJhdG9yU3RyaW5n +IEFzIFN0cmluZw0KICAgRGltIENyaXRlcmlhIEFzIFN0cmluZw0KICAgDQogICBJ +ZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBbX0lnbm9yZUFsbF0pID0gW19JZ25v +cmVBbGxdIFRoZW4NCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KICAg +DQogICBJZiBJc01pc3NpbmcoSWdub3JlVmFsdWUpIFRoZW4NCiAgICAgIElmIE5v +dCBEaXNhYmxlSWdub3JlTnVsbFZhbHVlIFRoZW4NCiAgICAgICAgIERpc2FibGVJ +Z25vcmVOdWxsVmFsdWUgPSBUcnVlDQogICAgICBFbmQgSWYNCiAgICAgIElnbm9y +ZVZhbHVlID0gTnVsbA0KICAgRW5kIElmDQogICANCiAgICcgU3BlY2lhbCBjYXNl +cyAocGFydCAxKToNCiAgIElmIE5vdCBJc0FycmF5KEZpbHRlclZhbHVlKSBUaGVu +DQogICANCiAgICAgIElmIEZpbHRlclZhbHVlID0gIntOVUxMfSIgT3IgRmlsdGVy +VmFsdWUgPSAie0xFRVJ9IiBPciBGaWx0ZXJWYWx1ZSA9ICJ7RU1QVFl9IiBUaGVu +DQogICAgICAgICBGaWx0ZXJWYWx1ZSA9IE51bGwNCiAgICAgICAgIERpc2FibGVJ +Z25vcmVOdWxsVmFsdWUgPSBUcnVlDQogICAgICBFbmQgSWYNCiAgICAgIA0KICAg +ICAgSWYgRmlsdGVyVmFsdWUyID0gIntOVUxMfSIgT3IgRmlsdGVyVmFsdWUyID0g +IntMRUVSfSIgT3IgRmlsdGVyVmFsdWUyID0gIntFTVBUWX0iIFRoZW4NCiAgICAg +ICAgIEZpbHRlclZhbHVlMiA9IE51bGwNCiAgICAgICAgIERpc2FibGVJZ25vcmVO +dWxsVmFsdWUgPSBUcnVlDQogICAgICBFbmQgSWYNCiAgICAgIA0KICAgICAgSWYg +KFJlbGF0aW9uYWxPcGVyYXRvciBBbmQgU1FMX0FsbG93U3FsRGlyZWN0KSA9IFNR +TF9BbGxvd1NxbERpcmVjdCBUaGVuDQogICAgICAgICBJZiBGaWx0ZXJWYWx1ZSBM +aWtlICJ7KkAqfSIgVGhlbiAnIElkZWUgdm9uIFVscmljaDogQW53ZW5kZXIgc2No +cmVpYnQgU1FMLUF1c2RydWNrDQogICAgICAgICAgICBDcml0ZXJpYSA9IFJlcGxh +Y2UoTWlkKEZpbHRlclZhbHVlLCAyLCBMZW4oRmlsdGVyVmFsdWUpIC0gMiksICJA +IiwgRmllbGROYW1lKQ0KICAgICAgICAgICAgSWYgKFJlbGF0aW9uYWxPcGVyYXRv +ciBBbmQgU1FMX05vdCkgPSBTUUxfTm90IFRoZW4NCiAgICAgICAgICAgICAgIENy +aXRlcmlhID0gIk5vdCAiICYgQ3JpdGVyaWENCiAgICAgICAgICAgIEVuZCBJZg0K +ICAgICAgICAgICAgQnVpbGRDcml0ZXJpYSA9IENyaXRlcmlhDQogICAgICAgICAg +ICBFeGl0IEZ1bmN0aW9uDQogICAgICAgICBFbmQgSWYNCiAgICAgIEVuZCBJZg0K +ICAgICAgDQogICBFbmQgSWYNCiAgIA0KICAgSWYgTnVsbEZpbHRlck9yRW1wdHlG +aWx0ZXIoRmllbGROYW1lLCBGaWVsZERhdGFUeXBlLCBSZWxhdGlvbmFsT3BlcmF0 +b3IsIE56KEZpbHRlclZhbHVlLCBGaWx0ZXJWYWx1ZTIpLCBJZ25vcmVWYWx1ZSwg +Q3JpdGVyaWEsIERpc2FibGVJZ25vcmVOdWxsVmFsdWUpIFRoZW4NCiAgICAgIEJ1 +aWxkQ3JpdGVyaWEgPSBDcml0ZXJpYQ0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAg +RW5kIElmDQogICANCiAgIElmIFRyeUJ1aWxkU3BsaXRUb0FycmF5Q3JpdGVyaWEo +RmllbGROYW1lLCBGaWVsZERhdGFUeXBlLCBSZWxhdGlvbmFsT3BlcmF0b3IsIEZp +bHRlclZhbHVlLCBJZ25vcmVWYWx1ZSwgQ3JpdGVyaWEpIFRoZW4NCiAgICAgIEJ1 +aWxkQ3JpdGVyaWEgPSBDcml0ZXJpYQ0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAg +RW5kIElmDQogICANCiAgICdTcGVjaWFsIGNhc2VzIChwYXJ0IDIpOg0KICAgSWYg +Tm90IElzQXJyYXkoRmlsdGVyVmFsdWUpIFRoZW4NCiAgICAgDQogICAgICBJZiBG +aWVsZERhdGFUeXBlID0gU1FMX051bWVyaWMgT3IgRmllbGREYXRhVHlwZSA9IFNR +TF9EYXRlIFRoZW4NCiAgICAgIA0KICAgICAgICAgSWYgRmlsdGVyVmFsdWUgPSAi +KiIgQW5kIFJlbGF0aW9uYWxPcGVyYXRvciA9IFNRTF9FcXVhbCBUaGVuDQogICAg +ICAgICAgICBCdWlsZENyaXRlcmlhID0gQnVpbGRDcml0ZXJpYShGaWVsZE5hbWUs +IEZpZWxkRGF0YVR5cGUsIFNRTF9Ob3QsIE51bGwsIE51bGwsIDAsIFRydWUpDQog +ICAgICAgICAgICBFeGl0IEZ1bmN0aW9uDQogICAgICAgICBFbmQgSWYNCiAgICAg +ICAgIA0KICAgICAgICAgSWYgSXNOdWxsKEZpbHRlclZhbHVlMikgVGhlbg0KICAg +ICAgICAgICAgSWYgVHJ5QnVpbGROdW1lcmljU3BlY2lhbENhc2VzQ3JpdGVyaWEo +RmllbGROYW1lLCBGaWVsZERhdGFUeXBlLCBSZWxhdGlvbmFsT3BlcmF0b3IsIEZp +bHRlclZhbHVlLCBJZ25vcmVWYWx1ZSwgRGlzYWJsZUlnbm9yZU51bGxWYWx1ZSwg +Q3JpdGVyaWEpIFRoZW4NCiAgICAgICAgICAgICAgIEJ1aWxkQ3JpdGVyaWEgPSBD +cml0ZXJpYQ0KICAgICAgICAgICAgICAgRXhpdCBGdW5jdGlvbg0KICAgICAgICAg +ICAgRW5kIElmDQogICAgICAgICBFbmQgSWYNCiAgICAgICAgIA0KICAgICAgICAg +Q29uZmlnTnVtZXJpY1NwZWNpYWxzIFJlbGF0aW9uYWxPcGVyYXRvciwgRmlsdGVy +VmFsdWUsIEZpbHRlclZhbHVlMg0KICAgICAgICAgDQogICAgICBFbmQgSWYNCiAg +ICAgIA0KICAgRW5kIElmDQoNCiAgIElmIFRyeUJ1aWxkSW5Dcml0ZXJpYShGaWVs +ZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFJlbGF0aW9uYWxPcGVyYXRvciwgRmlsdGVy +VmFsdWUsIElnbm9yZVZhbHVlLCBDcml0ZXJpYSkgVGhlbg0KICAgICAgQnVpbGRD +cml0ZXJpYSA9IENyaXRlcmlhDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQg +SWYNCg0KICAgSWYgVHJ5QnVpbGRBcnJheUNyaXRlcmlhKEZpZWxkTmFtZSwgRmll +bGREYXRhVHlwZSwgUmVsYXRpb25hbE9wZXJhdG9yLCBGaWx0ZXJWYWx1ZSwgSWdu +b3JlVmFsdWUsIENyaXRlcmlhKSBUaGVuDQogICAgICBCdWlsZENyaXRlcmlhID0g +Q3JpdGVyaWENCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KDQogICBJ +ZiBUcnlCdWlsZEJldHdlZW5Dcml0ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5 +cGUsIFJlbGF0aW9uYWxPcGVyYXRvciwgRmlsdGVyVmFsdWUsIEZpbHRlclZhbHVl +MiwgSWdub3JlVmFsdWUsIENyaXRlcmlhKSBUaGVuDQogICAgICBCdWlsZENyaXRl +cmlhID0gQ3JpdGVyaWENCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0K +DQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfTGlrZSkgPSBTUUxf +TGlrZSBPciAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfVXNlTGlrZUJlaGF2 +aW9yKSA9IFNRTF9Vc2VMaWtlQmVoYXZpb3IgVGhlbg0KICAgICAgSWYgU3FsV2ls +ZENhcmRTdHJpbmcgPD4gIioiIFRoZW4NCiAgICAgICAgIElmIEluU3RyKDEsIEZp +bHRlclZhbHVlLCAiKiIpID4gMCBUaGVuDQogICAgICAgICAgICBGaWx0ZXJWYWx1 +ZSA9IFJlcGxhY2UoRmlsdGVyVmFsdWUsICJbKl0iLCAiQEBAfHx8U1RBUnx8fEBA +QCIpDQogICAgICAgICAgICBGaWx0ZXJWYWx1ZSA9IFJlcGxhY2UoRmlsdGVyVmFs +dWUsICIqIiwgU3FsV2lsZENhcmRTdHJpbmcpDQogICAgICAgICAgICBGaWx0ZXJW +YWx1ZSA9IFJlcGxhY2UoRmlsdGVyVmFsdWUsICJAQEB8fHxTVEFSfHx8QEBAIiwg +IioiKQ0KICAgICAgICAgRW5kIElmDQogICAgICBFbmQgSWYNCiAgIEVuZCBJZg0K +DQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfQWRkX1dpbGRDYXJk +U3VmZml4KSA9IFNRTF9BZGRfV2lsZENhcmRTdWZmaXggVGhlbg0KICAgICAgSWYg +VHJ5QnVpbGRXaWxkQ2FyZFN1ZmZpeE9yUHJlQnVpbGRQYXJhbXMoRmllbGROYW1l +LCBGaWVsZERhdGFUeXBlLCBSZWxhdGlvbmFsT3BlcmF0b3IsIEZpbHRlclZhbHVl +LCBGaWx0ZXJWYWx1ZTIsIElnbm9yZVZhbHVlLCBDcml0ZXJpYSkgVGhlbg0KICAg +ICAgICAgQnVpbGRDcml0ZXJpYSA9IENyaXRlcmlhDQogICAgICAgICBFeGl0IEZ1 +bmN0aW9uDQogICAgICBFbmQgSWYNCiAgIEVuZCBJZg0KDQogICBJZiAoUmVsYXRp +b25hbE9wZXJhdG9yIEFuZCBTUUxfQWRkX1dpbGRDYXJkUHJlZml4KSA9IFNRTF9B +ZGRfV2lsZENhcmRQcmVmaXggVGhlbg0KICAgICAgSWYgKFJlbGF0aW9uYWxPcGVy +YXRvciBBbmQgU1FMX0xpa2UpID0gU1FMX0xpa2UgT3IgKFJlbGF0aW9uYWxPcGVy +YXRvciBBbmQgU1FMX1VzZUxpa2VCZWhhdmlvcikgPSBTUUxfVXNlTGlrZUJlaGF2 +aW9yIFRoZW4NCiAgICAgICAgIEZpbHRlclZhbHVlID0gU3FsV2lsZENhcmRTdHJp +bmcgJiBGaWx0ZXJWYWx1ZQ0KICAgICAgRW5kIElmDQogICBFbmQgSWYNCg0KICAg +RmlsdGVyVmFsdWVTdHJpbmcgPSBDb252ZXJ0VG9TcWxUZXh0KEZpbHRlclZhbHVl +LCBGaWVsZERhdGFUeXBlKQ0KDQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFu +ZCBTUUxfTGlrZSkgPSBTUUxfTGlrZSBUaGVuDQogICAgICBPcGVyYXRvclN0cmlu +ZyA9ICIgTGlrZSAiDQogICAgICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBT +UUxfTm90KSA9IFNRTF9Ob3QgVGhlbg0KICAgICAgICAgT3BlcmF0b3JTdHJpbmcg +PSAiIE5vdCIgJiBPcGVyYXRvclN0cmluZw0KICAgICAgRW5kIElmDQogICAgICBC +dWlsZENyaXRlcmlhID0gRmllbGROYW1lICYgT3BlcmF0b3JTdHJpbmcgJiBGaWx0 +ZXJWYWx1ZVN0cmluZw0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQog +ICANCiAgIE9wZXJhdG9yU3RyaW5nID0gR2V0UmVsYXRpb25hbE9wZXJhdG9yU3Ry +aW5nKFJlbGF0aW9uYWxPcGVyYXRvcikNCg0KICAgQ3JpdGVyaWEgPSBGaWVsZE5h +bWUgJiAiICIgJiBPcGVyYXRvclN0cmluZyAmICIgIiAmIEZpbHRlclZhbHVlU3Ry +aW5nDQoNCiAgIElmIChSZWxhdGlvbmFsT3BlcmF0b3IgQW5kIFNRTF9Ob3QpID0g +U1FMX05vdCBUaGVuDQogICAgICAnPzogd2lsbCB0aGlzIGxpbmUgYmUgcmVhY2hl +ZD8NCiAgICAgIENyaXRlcmlhID0gIk5vdCAiICYgQ3JpdGVyaWENCiAgIEVuZCBJ +Zg0KDQogICBCdWlsZENyaXRlcmlhID0gQ3JpdGVyaWENCg0KRW5kIEZ1bmN0aW9u +DQoNCicjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQonIEdyb3Vw +OiBDb252ZXJ0IHRvIFNRTA0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tDQonIEZ1bmN0aW9uOiBDb252ZXJ0VG9TcWxUZXh0DQonLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIENvbnZl +cnQgdmFsdWVzIHRvIHN0cmluZyBmb3IgU1FMIHN0YXRlbWVudCBhc3NlbWJsZWQg +YnkgVkJBLg0KJw0KJyBQYXJhbWV0ZXJzOg0KJyAgICAgVmFsdWUgICAgICAgICAg +LSBWYWx1ZSB0byBjb252ZXJ0DQonICAgICBGaWVsZERhdGFUeXBlICAtIERhdGEg +dHlwZSBvZiB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkDQonDQonIFJldHVybnM6 +DQonICAgICBTdHJpbmcgICAtIFNRTCBjb25mb3JtIHN0cmluZw0KJw0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0 +aW9uIENvbnZlcnRUb1NxbFRleHQoQnlWYWwgVmFsdWUgQXMgVmFyaWFudCwgXw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlWYWwgRmllbGREYXRh +VHlwZSBBcyBTcWxGaWVsZERhdGFUeXBlKSBBcyBTdHJpbmcNCiAgICAgICAgICAg +ICAgICAgICAgIA0KICAgU2VsZWN0IENhc2UgRmllbGREYXRhVHlwZQ0KICAgICAg +Q2FzZSBTcWxGaWVsZERhdGFUeXBlLlNRTF9UZXh0DQogICAgICAgICBDb252ZXJ0 +VG9TcWxUZXh0ID0gVGV4dFRvU3FsVGV4dChWYWx1ZSkNCiAgICAgIENhc2UgU3Fs +RmllbGREYXRhVHlwZS5TUUxfTnVtZXJpYw0KICAgICAgICAgQ29udmVydFRvU3Fs +VGV4dCA9IE51bWJlclRvU3FsVGV4dChWYWx1ZSkNCiAgICAgIENhc2UgU3FsRmll +bGREYXRhVHlwZS5TUUxfRGF0ZQ0KICAgICAgICAgQ29udmVydFRvU3FsVGV4dCA9 +IERhdGVUb1NxbFRleHQoVmFsdWUpDQogICAgICBDYXNlIFNxbEZpZWxkRGF0YVR5 +cGUuU1FMX0Jvb2xlYW4NCiAgICAgICAgIENvbnZlcnRUb1NxbFRleHQgPSBCb29s +ZWFuVG9TcWxUZXh0KFZhbHVlKQ0KICAgICAgQ2FzZSBFbHNlDQogICAgICAgICBF +cnIuUmFpc2UgdmJPYmplY3RFcnJvciwgIlNxbFRvb2xzLkNvbnZlcnRUb1NxbFRl +eHQiLCAiRmllbGREYXRhVHlwZSAnIiAmIEZpZWxkRGF0YVR5cGUgJiAiJyBub3Qg +c3VwcG9ydGVkIg0KICAgRW5kIFNlbGVjdA0KICAgDQpFbmQgRnVuY3Rpb24NCg0K +Jy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBGdW5j +dGlvbjogVGV4dFRvU3FsVGV4dA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLQ0KJw0KJyBQcmVwYXJlIHRleHQgZm9yIFNRTCBzdGF0ZW1l +bnQNCicNCicgUGFyYW1ldGVyczoNCicgICAgIFZhbHVlICAgICAgICAgICAgICAg +ICAgIC0gVmFsdWUgdG8gY29udmVydA0KJyAgICAgRGVsaW1pdGVyICAgICAgICAg +ICAgICAgLSBEZWxpbWl0ZXIgZm9yIHRleHQgdmFsdWVzLiAoSW4gbW9zdCBEQk1T +ICcgaXMgdXNlZCBhcyBhIGRlbGltaXRlcikuDQonICAgICBXaXRob3V0TGVmdFJp +Z2h0RGVsaW0gICAtIE9ubHkgZG91YmxlIHRoZSBib3VuZGFyeSBkcmF3aW5nIHdp +dGhpbiB0aGUgdmFsdWVzLCBidXQgZG8gbm90IHNldCB0aGUgYm91bmRhcnkuDQon +DQonIFJldHVybnM6DQonICAgICBTdHJpbmcNCicNCicgRXhhbXBsZToNCicgICAg +ICAgIHN0clNRTCA9ICJzZWxlY3QgLi4uIGZyb20gdGFiZWxsZSB3aGVyZSBGZWxk +ID0gIiAmIFRleHRUb1NxbFRleHQoImFiJ2NkIikNCicgICAgID0+IHN0clNRTCA9 +ICJzZWxlY3QgLi4uIGZyb20gdGFiZWxsZSB3aGVyZSBGZWxkID0gJ2FiJydjZCci +DQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQ +dWJsaWMgRnVuY3Rpb24gVGV4dFRvU3FsVGV4dChCeVZhbCBWYWx1ZSBBcyBWYXJp +YW50LCBfDQogICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBEZWxp +bWl0ZXIgQXMgU3RyaW5nID0gU1FMX0RFRkFVTFRfVEVYVERFTElNSVRFUiwgXw0K +ICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgV2l0aG91dExlZnRS +aWdodERlbGltIEFzIEJvb2xlYW4gPSBGYWxzZSkgQXMgU3RyaW5nDQogICANCiAg +IERpbSBSZXN1bHQgQXMgU3RyaW5nDQogICANCiAgIElmIElzTnVsbChWYWx1ZSkg +VGhlbg0KICAgICAgVGV4dFRvU3FsVGV4dCA9IFJlc3VsdFRleHRJZk51bGwNCiAg +ICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KICAgDQogICBSZXN1bHQgPSBS +ZXBsYWNlJChWYWx1ZSwgRGVsaW1pdGVyLCBEZWxpbWl0ZXIgJiBEZWxpbWl0ZXIp +DQogICBJZiBOb3QgV2l0aG91dExlZnRSaWdodERlbGltIFRoZW4NCiAgICAgIFJl +c3VsdCA9IERlbGltaXRlciAmIFJlc3VsdCAmIERlbGltaXRlcg0KICAgRW5kIElm +DQogICANCiAgIFRleHRUb1NxbFRleHQgPSBSZXN1bHQNCg0KRW5kIEZ1bmN0aW9u +DQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicg +RnVuY3Rpb246IERhdGVUb1NxbFRleHQNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0NCicNCicgQ29udmVydCBkYXRlIHZhbHVlIHRvIHN0 +cmluZyBmb3IgU1FMIHN0YXRlbWVudCBhc3NlbWJsZWQgYnkgVkJBLg0KJw0KJyBQ +YXJhbWV0ZXJzOg0KJyAgICAgVmFsdWUgICAgICAgICAgLSBWYWx1ZSB0byBjb252 +ZXJ0DQonICAgICBGb3JtYXRTdHJpbmcgICAtIERhdGUgZm9ybWF0IChkZXBlbmRz +IG9uIERCTVMhKQ0KJw0KJyBSZXR1cm5zOg0KJyAgICAgU3RyaW5nDQonDQonLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQdWJsaWMgRnVu +Y3Rpb24gRGF0ZVRvU3FsVGV4dChCeVZhbCBWYWx1ZSBBcyBWYXJpYW50LCBfDQog +ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBGb3JtYXRTdHJpbmcg +QXMgU3RyaW5nID0gU1FMX0RFRkFVTFRfREFURUZPUk1BVCkgQXMgU3RyaW5nDQoN +CiAgIElmIElzTnVsbChWYWx1ZSkgVGhlbg0KICAgICAgRGF0ZVRvU3FsVGV4dCA9 +IFJlc3VsdFRleHRJZk51bGwNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJ +Zg0KICAgDQogICBJZiBOb3QgSXNEYXRlKFZhbHVlKSBUaGVuDQogICAgICBFcnIu +UmFpc2UgdmJPYmplY3RFcnJvciwgIlNxbFRvb2xzLkRhdGVUb1NxbFRleHQiLCAi +RGVyIFdlcnQgJyIgJiBWYWx1ZSAmICInIHZvbSBQYXJhbWV0ZXIgVmFsdWUgaXN0 +IGtlaW4gRGF0dW1zd2VydCEiDQogICBFbmQgSWYNCg0KICAgSWYgTGVuKEZvcm1h +dFN0cmluZykgPSAwIFRoZW4NCiAgICAgIEZvcm1hdFN0cmluZyA9IFNxbERhdGVG +b3JtYXQNCiAgICAgIElmIExlbihGb3JtYXRTdHJpbmcpID0gMCBUaGVuDQogICAg +ICAgICBFcnIuUmFpc2UgU3FsVG9vbHNFcnJvck51bWJlcnMuRVJSTlJfTk9DT05G +SUcsICJEYXRlVG9TcWxUZXh0IiwgImRhdGUgZm9ybWF0IGlzIG5vdCBkZWZpbmVk +Ig0KICAgICAgRW5kIElmDQogICBFbmQgSWYNCiAgIA0KICAgRGF0ZVRvU3FsVGV4 +dCA9IFZCQS5Gb3JtYXQkKFZhbHVlLCBGb3JtYXRTdHJpbmcpDQoNCkVuZCBGdW5j +dGlvbg0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +DQonIEZ1bmN0aW9uOiBOdW1iZXJUb1NxbFRleHQNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgQ29udmVydCBudW1lcmljIHZh +bHVlIHRvIHN0cmluZyBmb3IgU1FMIHN0YXRlbWVudCBhc3NlbWJsZWQgYnkgVkJB +Lg0KJw0KJyBQYXJhbWV0ZXJzOg0KJyAgICAgVmFsdWUgICAgICAgICAgLSBWYWx1 +ZSB0byBjb252ZXJ0DQonICAgICBGb3JtYXRTdHJpbmcgICAtIERhdGUgZm9ybWF0 +IChkZXBlbmRzIG9uIERCTVMhKQ0KJw0KJyBSZXR1cm5zOg0KJyAgICAgU3RyaW5n +DQonDQonIFJlbWFya3M6DQonICAgICBTdHIgZnVuY3Rpb24gZW5zdXJlcyAiLiIu +DQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpQ +dWJsaWMgRnVuY3Rpb24gTnVtYmVyVG9TcWxUZXh0KEJ5VmFsIFZhbHVlIEFzIFZh +cmlhbnQpIEFzIFN0cmluZw0KDQogICBEaW0gUmVzdWx0IEFzIFN0cmluZw0KDQog +ICBJZiBJc051bGwoVmFsdWUpIFRoZW4NCiAgICAgIE51bWJlclRvU3FsVGV4dCA9 +IFJlc3VsdFRleHRJZk51bGwNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJ +Zg0KICAgDQogICBWYWx1ZSA9IENvbnZlcnRUb051bWVyaWMoVmFsdWUpDQogICAN +CiAgIFJlc3VsdCA9IFRyaW0kKFN0ciQoVmFsdWUpKQ0KICAgSWYgTGVmdChSZXN1 +bHQsIDEpID0gIi4iIFRoZW4NCiAgICAgIFJlc3VsdCA9ICIwIiAmIFJlc3VsdA0K +ICAgRW5kIElmDQogICANCiAgIE51bWJlclRvU3FsVGV4dCA9IFJlc3VsdA0KICAg +DQpFbmQgRnVuY3Rpb24NCg0KRnJpZW5kIEZ1bmN0aW9uIENvbnZlcnRUb051bWVy +aWMoQnlWYWwgVmFsdWUgQXMgVmFyaWFudCkgQXMgVmFyaWFudA0KICAgDQogICBD +b25zdCBDaGVja051bWJlciBBcyBEb3VibGUgPSAxLjIzDQogICANCiAgIERpbSBD +aGVja1RleHQgQXMgU3RyaW5nDQogICBEaW0gRGVjaW1hbFNlcGFyYXRvclRvUmVw +bGFjZSBBcyBTdHJpbmcNCiAgIERpbSBOZXdEZWNpbWFsU2VwYXJhdG9yIEFzIFN0 +cmluZw0KICAgDQogICBJZiBJc051bGwoVmFsdWUpIFRoZW4NCiAgICAgIENvbnZl +cnRUb051bWVyaWMgPSBOdWxsDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbHNl +SWYgQ1N0cihWYWx1ZSkgPSB2Yk51bGxTdHJpbmcgVGhlbg0KICAgICAgQ29udmVy +dFRvTnVtZXJpYyA9IE51bGwNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJ +Zg0KICAgDQogICBDaGVja1RleHQgPSBDU3RyKENoZWNrTnVtYmVyKQ0KICAgSWYg +SW5TdHIoMSwgQ2hlY2tUZXh0LCAiLCIpID4gMCBUaGVuDQogICAgICBEZWNpbWFs +U2VwYXJhdG9yVG9SZXBsYWNlID0gIi4iDQogICAgICBOZXdEZWNpbWFsU2VwYXJh +dG9yID0gIiwiDQogICBFbHNlDQogICAgICBEZWNpbWFsU2VwYXJhdG9yVG9SZXBs +YWNlID0gIiwiDQogICAgICBOZXdEZWNpbWFsU2VwYXJhdG9yID0gIi4iDQogICBF +bmQgSWYNCiAgIA0KICAgSWYgSW5TdHIoMSwgVmFsdWUsIERlY2ltYWxTZXBhcmF0 +b3JUb1JlcGxhY2UpID4gMCBUaGVuDQogICAgICAgVmFsdWUgPSBSZXBsYWNlKFZh +bHVlLCBEZWNpbWFsU2VwYXJhdG9yVG9SZXBsYWNlLCBOZXdEZWNpbWFsU2VwYXJh +dG9yKQ0KICAgICAgIERvIFdoaWxlIFZhbHVlIExpa2UgIioiICYgTmV3RGVjaW1h +bFNlcGFyYXRvciAmICIqIiAmIE5ld0RlY2ltYWxTZXBhcmF0b3IgJiAiKiINCiAg +ICAgICAgICBWYWx1ZSA9IFJlcGxhY2UoVmFsdWUsIE5ld0RlY2ltYWxTZXBhcmF0 +b3IsIHZiTnVsbFN0cmluZywgMSwgMSkNCiAgICAgICBMb29wDQogICAgRW5kIElm +DQogICANCiAgIENvbnZlcnRUb051bWVyaWMgPSBDRGJsKFZhbHVlKQ0KICAgDQpF +bmQgRnVuY3Rpb24NCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KJyBGdW5jdGlvbjogQm9vbGVhblRvU3FsVGV4dA0KJy0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBQcmVwYXJlIEJv +b2xlYW4gZm9yIFNRTCB0ZXh0DQonDQonIFBhcmFtZXRlcnM6DQonICAgICBWYWx1 +ZSAgICAgICAgICAtIFZhbHVlIHRvIGNvbnZlcnQNCicgICAgIFRydWVTdHJpbmcg +ICAtICAgU3RyaW5nIGZvciB0cnVlIHZhbHVlIChvcHRpb25hbCkNCicNCicgUmV0 +dXJuczoNCicgICAgIFN0cmluZw0KJw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIEZ1bmN0aW9uIEJvb2xlYW5Ub1NxbFRl +eHQoQnlWYWwgVmFsdWUgQXMgVmFyaWFudCwgXw0KICAgICAgICAgICAgICAgICAg +ICAgICAgT3B0aW9uYWwgQnlWYWwgVHJ1ZVN0cmluZyBBcyBTdHJpbmcgPSBTUUxf +REVGQVVMVF9CT09MVFJVRVNUUklORykgQXMgU3RyaW5nDQoNCiAgIElmIElzTnVs +bChWYWx1ZSkgVGhlbg0KICAgICAgQm9vbGVhblRvU3FsVGV4dCA9IFJlc3VsdFRl +eHRJZk51bGwNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KDQogICBJ +ZiBDQm9vbChWYWx1ZSkgPSBUcnVlIFRoZW4gJyBDQm9vbChWYWx1ZSkgdG8gcmFp +c2UgZXJyb3IgMTMgKHR5cGUgbWlzbWF0Y2gpIGlmIFZhbHVlIGlzIG5vdCBhIGJv +b2xlYW4NCiAgICAgIElmIExlbihUcnVlU3RyaW5nKSA9IDAgVGhlbg0KICAgICAg +ICAgVHJ1ZVN0cmluZyA9IFNxbEJvb2xlYW5UcnVlU3RyaW5nDQogICAgICAgICBJ +ZiBMZW4oVHJ1ZVN0cmluZykgPSAwIFRoZW4NCiAgICAgICAgICAgIEVyci5SYWlz +ZSBTcWxUb29sc0Vycm9yTnVtYmVycy5FUlJOUl9OT0NPTkZJRywgIkJvb2xlYW5U +b1NxbFRleHQiLCAiYm9vbGVhbiBzdHJpbmcgZm9yIHRydWUgaXMgbm90IGRlZmlu +ZWQiDQogICAgICAgICBFbmQgSWYNCiAgICAgIEVuZCBJZg0KICAgICAgQm9vbGVh +blRvU3FsVGV4dCA9IFRydWVTdHJpbmcNCiAgIEVsc2UNCiAgICAgIEJvb2xlYW5U +b1NxbFRleHQgPSAiMCINCiAgIEVuZCBJZg0KICAgDQpFbmQgRnVuY3Rpb24NCg0K +UHJpdmF0ZSBGdW5jdGlvbiBDb25maWdOdW1lcmljU3BlY2lhbHMoIF8NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIFJlbGF0aW9uYWxPcGVyYXRv +ciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBfDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBCeVJlZiBGaWx0ZXJWYWx1ZSBBcyBWYXJpYW50LCBfDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBGaWx0ZXJWYWx1ZTIg +QXMgVmFyaWFudCkNCg0KICAgSWYgTGVmdChGaWx0ZXJWYWx1ZSwgMSkgPSAiPCIg +VGhlbg0KICAgICAgSWYgKChSZWxhdGlvbmFsT3BlcmF0b3IgQW5kIFNRTF9FcXVh +bCkgPSBTUUxfRXF1YWwpIFRoZW4NCiAgICAgICAgIFJlbGF0aW9uYWxPcGVyYXRv +ciA9IFJlbGF0aW9uYWxPcGVyYXRvciAtIFNRTF9FcXVhbA0KICAgICAgRW5kIElm +DQogICAgICBSZWxhdGlvbmFsT3BlcmF0b3IgPSBSZWxhdGlvbmFsT3BlcmF0b3Ig +T3IgU1FMX0xlc3NUaGFuDQogICAgICBGaWx0ZXJWYWx1ZSA9IE1pZChGaWx0ZXJW +YWx1ZSwgMikNCiAgIEVuZCBJZg0KICAgDQogICBJZiBMZWZ0KEZpbHRlclZhbHVl +LCAxKSA9ICI+IiBUaGVuDQogICAgICBJZiAoKFJlbGF0aW9uYWxPcGVyYXRvciBB +bmQgU1FMX0VxdWFsKSA9IFNRTF9FcXVhbCkgVGhlbg0KICAgICAgICAgUmVsYXRp +b25hbE9wZXJhdG9yID0gUmVsYXRpb25hbE9wZXJhdG9yIC0gU1FMX0VxdWFsDQog +ICAgICBFbmQgSWYNCiAgICAgIFJlbGF0aW9uYWxPcGVyYXRvciA9IFJlbGF0aW9u +YWxPcGVyYXRvciBPciBTUUxfR3JlYXRlclRoYW4NCiAgICAgIEZpbHRlclZhbHVl +ID0gTWlkKEZpbHRlclZhbHVlLCAyKQ0KICAgRW5kIElmDQoNCiAgIElmIExlZnQo +RmlsdGVyVmFsdWUsIDEpID0gIj0iIFRoZW4NCiAgICAgIFJlbGF0aW9uYWxPcGVy +YXRvciA9IFJlbGF0aW9uYWxPcGVyYXRvciBPciBTUUxfRXF1YWwNCiAgICAgIEZp +bHRlclZhbHVlID0gTWlkKEZpbHRlclZhbHVlLCAyKQ0KICAgRW5kIElmDQogICAN +CiAgIElmIFJpZ2h0KEZpbHRlclZhbHVlLCAxKSA9ICIqIiBUaGVuDQogICAgICBS +ZWxhdGlvbmFsT3BlcmF0b3IgPSBSZWxhdGlvbmFsT3BlcmF0b3IgT3IgU1FMX0Fk +ZF9XaWxkQ2FyZFN1ZmZpeA0KICAgRWxzZUlmIFJpZ2h0KEZpbHRlclZhbHVlMiwg +MSkgPSAiKiIgVGhlbg0KICAgICAgUmVsYXRpb25hbE9wZXJhdG9yID0gUmVsYXRp +b25hbE9wZXJhdG9yIE9yIFNRTF9BZGRfV2lsZENhcmRTdWZmaXgNCiAgIEVuZCBJ +Zg0KDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBHZXROZXh0RGln +aXROdW1iZXIoQnlWYWwgTnVtVmFsdWUgQXMgVmFyaWFudCwgT3B0aW9uYWwgQWRk +VG9BYnNvbHV0ZVZhbHVlIEFzIEJvb2xlYW4gPSBGYWxzZSkgQXMgRG91YmxlDQog +ICANCiAgIERpbSBUZXN0U3RyaW5nIEFzIFN0cmluZw0KICAgRGltIERlY1NpZ25Q +b3MgQXMgTG9uZw0KICAgRGltIERpZ2l0cyBBcyBMb25nDQogICBEaW0gSXNOZWdh +dGl2IEFzIEJvb2xlYW4NCg0KICAgQ29uc3QgQWRkaXRpb25hbERlY0RpZ2l0IEFz +IFN0cmluZyA9ICIxIg0KICAgQ29uc3QgQWRkaXRpb25hbERlY0RpZ2l0S29yciBB +cyBEb3VibGUgPSAwLjENCiAgIA0KICAgVGVzdFN0cmluZyA9IFRyaW0oQ1N0cihD +b252ZXJ0VG9OdW1lcmljKFJlcGxhY2UoQ1N0cihOdW1WYWx1ZSksICIqIiwgQWRk +aXRpb25hbERlY0RpZ2l0KSkpKQ0KICAgDQogICBJZiBMZWZ0KFRlc3RTdHJpbmcs +IDEpID0gIi0iIEFuZCAoTm90IEFkZFRvQWJzb2x1dGVWYWx1ZSkgVGhlbg0KICAg +ICAgR2V0TmV4dERpZ2l0TnVtYmVyID0gQ0RibChSZXBsYWNlKENTdHIoTnVtVmFs +dWUpLCAiKiIsIHZiTnVsbFN0cmluZykpDQogICAgICBFeGl0IEZ1bmN0aW9uDQog +ICBFbmQgSWYNCiAgIA0KICAgSWYgTGVmdChUZXN0U3RyaW5nLCAxKSA9ICItIiBU +aGVuDQogICAgICBJc05lZ2F0aXYgPSBUcnVlDQogICBFbmQgSWYNCiAgIA0KICAg +RGVjU2lnblBvcyA9IEluU3RyUmV2KFRlc3RTdHJpbmcsIERlY2ltYWxNYXJrZXIp +DQogICBJZiBEZWNTaWduUG9zID0gMCBUaGVuICcgbmV4dCBpbnRlZ2VyDQogICAg +ICBJZiBBZGRUb0Fic29sdXRlVmFsdWUgQW5kIElzTmVnYXRpdiBUaGVuDQogICAg +ICAgICBHZXROZXh0RGlnaXROdW1iZXIgPSBDRGJsKFJlcGxhY2UoQ1N0cihOdW1W +YWx1ZSksICIqIiwgdmJOdWxsU3RyaW5nKSkgLSAxDQogICAgICBFbHNlDQogICAg +ICAgICBHZXROZXh0RGlnaXROdW1iZXIgPSBDRGJsKFJlcGxhY2UoQ1N0cihOdW1W +YWx1ZSksICIqIiwgdmJOdWxsU3RyaW5nKSkgKyAxDQogICAgICBFbmQgSWYNCiAg +ICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KICAgDQogICBEaWdpdHMgPSBM +ZW4oVGVzdFN0cmluZykgLSBEZWNTaWduUG9zIC0gMQ0KICAgDQogICBJZiBMZWZ0 +KFRlc3RTdHJpbmcsIDEpID0gIi0iIFRoZW4NCiAgICAgIElzTmVnYXRpdiA9IFRy +dWUNCiAgIEVuZCBJZg0KICAgDQogICBJZiBBZGRUb0Fic29sdXRlVmFsdWUgQW5k +IElzTmVnYXRpdiBUaGVuDQogICAgICBHZXROZXh0RGlnaXROdW1iZXIgPSBDRGJs +KFRlc3RTdHJpbmcpICsgQWRkaXRpb25hbERlY0RpZ2l0S29yciAvIDEwIF4gRGln +aXRzIC0gQWRkaXRpb25hbERlY0RpZ2l0S29yciAvIDEwIF4gKERpZ2l0cyAtIDEp +DQogICBFbHNlDQogICAgICBHZXROZXh0RGlnaXROdW1iZXIgPSBDRGJsKFRlc3RT +dHJpbmcpICsgKDEgLSBBZGRpdGlvbmFsRGVjRGlnaXRLb3JyKSAvIDEwIF4gRGln +aXRzDQogICBFbmQgSWYNCiAgIA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgUHJv +cGVydHkgR2V0IERlY2ltYWxNYXJrZXIoKSBBcyBTdHJpbmcNCg0KICAgU3RhdGlj +IERlY0NoYXIgQXMgU3RyaW5nDQogICBEaW0gQ2hlY2tTdHJpbmcgQXMgU3RyaW5n +DQogICANCiAgIElmIExlbihEZWNDaGFyKSA9IDAgVGhlbg0KICAgICAgQ2hlY2tT +dHJpbmcgPSBUcmltKENTdHIoMS4yKSkNCiAgICAgIERlY0NoYXIgPSBNaWQoQ2hl +Y2tTdHJpbmcsIDIsIDEpDQogICBFbmQgSWYNCiAgIA0KICAgRGVjaW1hbE1hcmtl +ciA9IERlY0NoYXINCg0KRW5kIFByb3BlcnR5DQoNClByaXZhdGUgRnVuY3Rpb24g +Q2hhclRyaW0oQnlWYWwgVmFsdWVUb1RyaW0gQXMgU3RyaW5nLCBCeVZhbCBUcmlt +Q2hhciBBcyBTdHJpbmcpIEFzIFN0cmluZw0KDQogICBEaW0gVHJpbVN0cmluZyBB +cyBTdHJpbmcNCiAgIA0KICAgVHJpbVN0cmluZyA9ICIgIiAmIFRyaW1DaGFyDQog +ICBEbyBXaGlsZSBJblN0cigxLCBWYWx1ZVRvVHJpbSwgVHJpbVN0cmluZykNCiAg +ICAgIFZhbHVlVG9UcmltID0gUmVwbGFjZShWYWx1ZVRvVHJpbSwgVHJpbVN0cmlu +ZywgVHJpbUNoYXIpDQogICBMb29wDQogICANCiAgIFRyaW1TdHJpbmcgPSBUcmlt +Q2hhciAmICIgIg0KICAgRG8gV2hpbGUgSW5TdHIoMSwgVmFsdWVUb1RyaW0sIFRy +aW1TdHJpbmcpDQogICAgICBWYWx1ZVRvVHJpbSA9IFJlcGxhY2UoVmFsdWVUb1Ry +aW0sIFRyaW1TdHJpbmcsIFRyaW1DaGFyKQ0KICAgTG9vcA0KICAgDQogICBDaGFy +VHJpbSA9IFZhbHVlVG9UcmltDQoNCkVuZCBGdW5jdGlvbg0KDQpGcmllbmQgRnVu +Y3Rpb24gR2V0UmVsYXRpb25hbE9wZXJhdG9yU3RyaW5nKEJ5UmVmIFJlbGF0aW9u +YWxPcGVyYXRvciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzKSBBcyBTdHJpbmcN +Cg0KICAgRGltIE9wZXJhdG9yU3RyaW5nIEFzIFN0cmluZw0KICAgRGltIG9wIEFz +IFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMNCiAgIA0KICAgSWYgKFJlbGF0aW9uYWxP +cGVyYXRvciBBbmQgU1FMX0luKSA9IFNRTF9JbiBUaGVuDQogICAgICBPcGVyYXRv +clN0cmluZyA9IE9wZXJhdG9yU3RyaW5nICYgIkluIg0KICAgICAgSWYgKFJlbGF0 +aW9uYWxPcGVyYXRvciBBbmQgU1FMX05vdCkgPSBTUUxfTm90IFRoZW4NCiAgICAg +ICAgIE9wZXJhdG9yU3RyaW5nID0gIk5vdCAiICYgT3BlcmF0b3JTdHJpbmcNCiAg +ICAgIEVuZCBJZg0KICAgICAgR2V0UmVsYXRpb25hbE9wZXJhdG9yU3RyaW5nID0g +T3BlcmF0b3JTdHJpbmcNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0K +ICAgDQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfTm90KSA9IFNR +TF9Ob3QgVGhlbg0KICAgICAgDQogICAgICBvcCA9IFJlbGF0aW9uYWxPcGVyYXRv +ciBYb3IgU1FMX05vdA0KICAgICAgDQogICAgICBJZiBvcCA9IFNxbFJlbGF0aW9u +YWxPcGVyYXRvcnMuU1FMX0VxdWFsIFRoZW4gJyA9PiAiPSIgenUgIjw+IiAuLiBu +dWxsIGJlcvxja3NpY2h0aWdlbj8NCiAgICAgICAgIFJlbGF0aW9uYWxPcGVyYXRv +ciA9IFNRTF9MZXNzVGhhbiArIFNRTF9HcmVhdGVyVGhhbg0KICAgICAgRWxzZUlm +IG9wID0gU1FMX0dyZWF0ZXJUaGFuICsgU1FMX0xlc3NUaGFuIFRoZW4gJyA9PiAi +PD4iIHp1ICI9IiAuLiBudWxsIGJlcvxja3NpY2h0aWdlbj8NCiAgICAgICAgIFJl +bGF0aW9uYWxPcGVyYXRvciA9IFNRTF9FcXVhbA0KICAgICAgRWxzZQ0KICAgICAg +ICAgUmVsYXRpb25hbE9wZXJhdG9yID0gUmVsYXRpb25hbE9wZXJhdG9yIFhvciBT +UUxfTm90DQogICAgICAgICBJZiAob3AgQW5kIFNRTF9FcXVhbCkgPSBTUUxfRXF1 +YWwgVGhlbg0KICAgICAgICAgICAgUmVsYXRpb25hbE9wZXJhdG9yID0gUmVsYXRp +b25hbE9wZXJhdG9yIFhvciBTUUxfRXF1YWwNCiAgICAgICAgIEVsc2UNCiAgICAg +ICAgICAgIFJlbGF0aW9uYWxPcGVyYXRvciA9IFJlbGF0aW9uYWxPcGVyYXRvciBP +ciBTUUxfRXF1YWwNCiAgICAgICAgIEVuZCBJZg0KICAgICAgICAgSWYgKG9wIEFu +ZCBTUUxfTGVzc1RoYW4pID0gU1FMX0xlc3NUaGFuIFRoZW4NCiAgICAgICAgICAg +IFJlbGF0aW9uYWxPcGVyYXRvciA9IFJlbGF0aW9uYWxPcGVyYXRvciBYb3IgU1FM +X0xlc3NUaGFuDQogICAgICAgICAgICBSZWxhdGlvbmFsT3BlcmF0b3IgPSBSZWxh +dGlvbmFsT3BlcmF0b3IgT3IgU1FMX0dyZWF0ZXJUaGFuDQogICAgICAgICBFbmQg +SWYNCiAgICAgICAgIElmIChvcCBBbmQgU1FMX0dyZWF0ZXJUaGFuKSA9IFNRTF9H +cmVhdGVyVGhhbiBUaGVuDQogICAgICAgICAgICBSZWxhdGlvbmFsT3BlcmF0b3Ig +PSBSZWxhdGlvbmFsT3BlcmF0b3IgWG9yIFNRTF9HcmVhdGVyVGhhbg0KICAgICAg +ICAgICAgUmVsYXRpb25hbE9wZXJhdG9yID0gUmVsYXRpb25hbE9wZXJhdG9yIE9y +IFNRTF9MZXNzVGhhbg0KICAgICAgICAgRW5kIElmDQogICAgICBFbmQgSWYNCiAg +IEVuZCBJZg0KDQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfTGVz +c1RoYW4pID0gU1FMX0xlc3NUaGFuIFRoZW4NCiAgICAgIE9wZXJhdG9yU3RyaW5n +ID0gT3BlcmF0b3JTdHJpbmcgJiAiPCINCiAgIEVuZCBJZg0KICAgDQogICBJZiAo +UmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfR3JlYXRlclRoYW4pID0gU1FMX0dy +ZWF0ZXJUaGFuIFRoZW4NCiAgICAgIE9wZXJhdG9yU3RyaW5nID0gT3BlcmF0b3JT +dHJpbmcgJiAiPiINCiAgIEVuZCBJZg0KDQogICBJZiAoUmVsYXRpb25hbE9wZXJh +dG9yIEFuZCBTUUxfRXF1YWwpID0gU1FMX0VxdWFsIFRoZW4NCiAgICAgIE9wZXJh +dG9yU3RyaW5nID0gT3BlcmF0b3JTdHJpbmcgJiAiPSINCiAgIEVuZCBJZg0KDQog +ICBHZXRSZWxhdGlvbmFsT3BlcmF0b3JTdHJpbmcgPSBPcGVyYXRvclN0cmluZw0K +DQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBUcnlCdWlsZFdpbGRD +YXJkU3VmZml4T3JQcmVCdWlsZFBhcmFtcyhCeVZhbCBGaWVsZE5hbWUgQXMgU3Ry +aW5nLCBCeVZhbCBGaWVsZERhdGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5cGUsIF8N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIFJl +bGF0aW9uYWxPcGVyYXRvciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBfDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBGaWx0 +ZXJWYWx1ZSBBcyBWYXJpYW50LCBfDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBCeVJlZiBGaWx0ZXJWYWx1ZTIgQXMgVmFyaWFudCwgXw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlSZWYgSWdu +b3JlVmFsdWUgQXMgVmFyaWFudCwgXw0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgQnlSZWYgQ3JpdGVyaWEgQXMgU3RyaW5nKSBBcyBCb29s +ZWFuDQoNCiAgIERpbSBDcml0ZXJpYTEgQXMgU3RyaW5nDQogICBEaW0gQ3JpdGVy +aWEyIEFzIFN0cmluZw0KDQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBT +UUxfTGlrZSkgPSBTUUxfTGlrZSBPciAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBT +UUxfVXNlTGlrZUJlaGF2aW9yKSA9IFNRTF9Vc2VMaWtlQmVoYXZpb3IgVGhlbg0K +ICAgICAgRmlsdGVyVmFsdWUgPSBGaWx0ZXJWYWx1ZSAmIFNxbFdpbGRDYXJkU3Ry +aW5nDQogICBFbHNlSWYgRmllbGREYXRhVHlwZSA9IFNRTF9EYXRlIFRoZW4NCiAg +ICAgIElmIChSZWxhdGlvbmFsT3BlcmF0b3IgQW5kIFNRTF9MZXNzVGhhbikgPSAw +IFRoZW4gJyBubyA8IHRoZXJlZm9yZTogID4sID49IG9yIG9ubHkgPQ0KICAgICAg +ICAgSWYgKFJlbGF0aW9uYWxPcGVyYXRvciBBbmQgU1FMX0dyZWF0ZXJUaGFuKSA9 +IFNRTF9HcmVhdGVyVGhhbiBUaGVuDQogICAgICAgICAgICAnIGNoYW5nZSBub3Ro +aW5nIC4uLiA+PSBEYXRhVmFsdWUgIC8gU1FMX0FkZF9XaWxkQ2FyZFN1ZmZpeCBp +cyBub3QgbG9naWNhbA0KICAgICAgICAgRWxzZSAnIENvbnNpZGVyIHRoZSB3aG9s +ZSBkYXkgLi4uIEZpZWxkTmFtZSA+PSBEYXRlVmFsdWUgYW5kIEZpZWxkTmFtZSA8 +IERhdGVBZGQoImQiLCAxLCBGaWx0ZXJWYWx1ZSkpDQogICAgICAgICAgICBDcml0 +ZXJpYSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBGaWVsZERhdGFUeXBlLCBT +UUxfR3JlYXRlclRoYW4gKyBTUUxfRXF1YWwsIEZpbHRlclZhbHVlLCAsICwgRmFs +c2UpICYgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNxbEFuZENvbmNh +dFN0cmluZyAmIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZENy +aXRlcmlhKEZpZWxkTmFtZSwgRmllbGREYXRhVHlwZSwgU1FMX0xlc3NUaGFuLCBE +YXRlQWRkKCJkIiwgMSwgQ0RhdGUoQ0xuZyhDRGF0ZShGaWx0ZXJWYWx1ZSkpKSks +ICwgLCBGYWxzZSkNCiAgICAgICAgICAgIFRyeUJ1aWxkV2lsZENhcmRTdWZmaXhP +clByZUJ1aWxkUGFyYW1zID0gVHJ1ZQ0KICAgICAgICAgICAgRXhpdCBGdW5jdGlv +bg0KICAgICAgICAgRW5kIElmDQogICAgICBFbHNlDQogICAgICAgICBJZiAoUmVs +YXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfRXF1YWwpID0gU1FMX0VxdWFsIFRoZW4N +CiAgICAgICAgICAgIFJlbGF0aW9uYWxPcGVyYXRvciA9IFJlbGF0aW9uYWxPcGVy +YXRvciAtIFNRTF9FcXVhbA0KICAgICAgICAgRW5kIElmDQogICAgICAgICBGaWx0 +ZXJWYWx1ZSA9IERhdGVBZGQoImQiLCAxLCBDRGF0ZShDTG5nKENEYXRlKEZpbHRl +clZhbHVlKSkpKQ0KICAgICAgRW5kIElmDQogICBFbHNlSWYgRmllbGREYXRhVHlw +ZSA9IFNRTF9OdW1lcmljIFRoZW4NCiAgICAgIElmIChSZWxhdGlvbmFsT3BlcmF0 +b3IgQW5kIFNRTF9MZXNzVGhhbikgPSAwIFRoZW4gJyBubyA8IGRhaGVyOiAgPiwg +Pj0gb3Igb25seSA9DQogICAgICAgICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFu +ZCBTUUxfR3JlYXRlclRoYW4pID0gU1FMX0dyZWF0ZXJUaGFuIFRoZW4NCiAgICAg +ICAgICAgIElmIEZpbHRlclZhbHVlIExpa2UgIipbLC5dKlsqXSIgVGhlbg0KICAg +ICAgICAgICAgICAgRmlsdGVyVmFsdWUgPSBSZXBsYWNlKEZpbHRlclZhbHVlLCAi +KiIsIDApDQogICAgICAgICAgICBFbHNlSWYgRmlsdGVyVmFsdWUgTGlrZSAiKlsq +XSIgVGhlbg0KICAgICAgICAgICAgICAgRmlsdGVyVmFsdWUgPSBSZXBsYWNlKEZp +bHRlclZhbHVlLCAiKiIsIHZiTnVsbFN0cmluZykNCiAgICAgICAgICAgIEVuZCBJ +Zg0KICAgICAgICAgICAgJyBjaGFuZ2Ugbm90aGluZyA9PiA+PSBOdW1iZXIgIC8g +U1FMX0FkZF9XaWxkQ2FyZFN1ZmZpeCBpcyBub3QgbG9naWNhbA0KICAgICAgICAg +RWxzZSAnIENvbnNpZGVyIGZvbGxvd2luZyBkZWNpbWFsIHZhbHVlcyAuLi4gRmll +bGROYW1lID49IE51bWJlciBhbmQgRmllbGROYW1lIDwgKE51bWJlciArIHgpDQog +ICAgICAgICAgICBJZiBGaWx0ZXJWYWx1ZSBMaWtlICItKlsqXSIgVGhlbg0KICAg +ICAgICAgICAgICAgSWYgRmlsdGVyVmFsdWUgTGlrZSAiKlssLl0qWypdIiBUaGVu +DQogICAgICAgICAgICAgICAgICBGaWx0ZXJWYWx1ZTIgPSBSZXBsYWNlKEZpbHRl +clZhbHVlLCAiKiIsIDApDQogICAgICAgICAgICAgICBFbHNlDQogICAgICAgICAg +ICAgICAgICBGaWx0ZXJWYWx1ZTIgPSBSZXBsYWNlKEZpbHRlclZhbHVlLCAiKiIs +IHZiTnVsbFN0cmluZykNCiAgICAgICAgICAgICAgIEVuZCBJZg0KICAgICAgICAg +ICAgICAgQ3JpdGVyaWExID0gQnVpbGRDcml0ZXJpYShGaWVsZE5hbWUsIEZpZWxk +RGF0YVR5cGUsIFNRTF9HcmVhdGVyVGhhbiwgR2V0TmV4dERpZ2l0TnVtYmVyKEZp +bHRlclZhbHVlLCBUcnVlKSwgLCBOdWxsLCBGYWxzZSkNCiAgICAgICAgICAgICAg +IENyaXRlcmlhMiA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBGaWVsZERhdGFU +eXBlLCBTUUxfTGVzc1RoYW4gKyBTUUxfRXF1YWwsIEZpbHRlclZhbHVlMiwgLCBO +dWxsLCBGYWxzZSkNCiAgICAgICAgICAgIEVsc2UNCiAgICAgICAgICAgICAgIENy +aXRlcmlhMSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBGaWVsZERhdGFUeXBl +LCBTUUxfR3JlYXRlclRoYW4gKyBTUUxfRXF1YWwsIEZpbHRlclZhbHVlLCAsIE51 +bGwsIEZhbHNlKQ0KICAgICAgICAgICAgICAgQ3JpdGVyaWEyID0gQnVpbGRDcml0 +ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFNRTF9MZXNzVGhhbiwgR2V0 +TmV4dERpZ2l0TnVtYmVyKEZpbHRlclZhbHVlKSwgLCBOdWxsLCBGYWxzZSkNCiAg +ICAgICAgICAgIEVuZCBJZg0KICAgICAgICAgICAgQ3JpdGVyaWEgPSBDcml0ZXJp +YTEgJiBTcWxBbmRDb25jYXRTdHJpbmcgJiBDcml0ZXJpYTINCiAgICAgICAgICAg +IFRyeUJ1aWxkV2lsZENhcmRTdWZmaXhPclByZUJ1aWxkUGFyYW1zID0gVHJ1ZQ0K +ICAgICAgICAgICAgRXhpdCBGdW5jdGlvbg0KICAgICAgICAgRW5kIElmDQogICAg +ICBFbHNlDQogICAgICAgICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxf +RXF1YWwpID0gU1FMX0VxdWFsIFRoZW4NCiAgICAgICAgICAgIFJlbGF0aW9uYWxP +cGVyYXRvciA9IFJlbGF0aW9uYWxPcGVyYXRvciAtIFNRTF9FcXVhbA0KICAgICAg +ICAgRW5kIElmDQogICAgICAgICBGaWx0ZXJWYWx1ZSA9IEdldE5leHREaWdpdE51 +bWJlcihGaWx0ZXJWYWx1ZSkNCiAgICAgIEVuZCBJZg0KICAgRW5kIElmDQoNCkVu +ZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIFRyeUJ1aWxkTnVtZXJpY1Nw +ZWNpYWxDYXNlc0NyaXRlcmlhKEJ5UmVmIEZpZWxkTmFtZSBBcyBTdHJpbmcsIEJ5 +VmFsIEZpZWxkRGF0YVR5cGUgQXMgU3FsRmllbGREYXRhVHlwZSwgXw0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlSZWYgUmVsYXRpb25h +bE9wZXJhdG9yIEFzIFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMsIF8NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIEZpbHRlclZhbHVl +IEFzIFZhcmlhbnQsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIEJ5UmVmIElnbm9yZVZhbHVlIEFzIFZhcmlhbnQsIF8NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIERpc2FibGVJZ25v +cmVOdWxsVmFsdWUgQXMgQm9vbGVhbiwgXw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgQnlSZWYgQ3JpdGVyaWEgQXMgU3RyaW5nKSBBcyBC +b29sZWFuDQoNCiAgIERpbSBDcml0ZXJpYUJ1aWxkIEFzIEJvb2xlYW4NCiAgIERp +bSBUZW1wQXJyKCkgQXMgU3RyaW5nDQogICANCiAgIENvbnN0IEZpbHRlclZhbHVl +MiBBcyBWYXJpYW50ID0gTnVsbA0KDQogICBJZiBWYXJUeXBlKEZpbHRlclZhbHVl +KSA9IHZiU3RyaW5nIFRoZW4NCiAgICAgIEZpbHRlclZhbHVlID0gVHJpbShGaWx0 +ZXJWYWx1ZSkNCiAgIEVuZCBJZg0KICAgDQogICBJZiBGaWx0ZXJWYWx1ZSBMaWtl +ICJbMC05XSouLipbMC05XSoiIE9yIEZpbHRlclZhbHVlIExpa2UgIlsrLV1bMC05 +XSouLipbMC05XSoiIFRoZW4NCiAgICAgIFRlbXBBcnIgPSBTcGxpdChGaWx0ZXJW +YWx1ZSwgIi4uIikNCiAgICAgIENyaXRlcmlhID0gQnVpbGRDcml0ZXJpYShGaWVs +ZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFNRTF9CZXR3ZWVuLCBUcmltKFRlbXBBcnIo +MCkpLCBUcmltKFRlbXBBcnIoMSkpLCBJZ25vcmVWYWx1ZSwgRGlzYWJsZUlnbm9y +ZU51bGxWYWx1ZSkNCiAgICAgIENyaXRlcmlhQnVpbGQgPSBUcnVlDQogICBFbHNl +SWYgRmlsdGVyVmFsdWUgTGlrZSAiWzAtOV0qLSpbMC05XSoiIE9yIEZpbHRlclZh +bHVlIExpa2UgIlsrLV1bMC05XSotKlswLTldKiIgVGhlbiAgICAnIGNvbnZlcnQg +dG8gYS4uYg0KICAgICAgSWYgTGVmdChGaWx0ZXJWYWx1ZSwgMSkgPSAiLSIgVGhl +bg0KICAgICAgICAgRmlsdGVyVmFsdWUgPSAie019IiAmIE1pZChGaWx0ZXJWYWx1 +ZSwgMikNCiAgICAgIEVuZCBJZg0KICAgICAgRmlsdGVyVmFsdWUgPSBSZXBsYWNl +KEZpbHRlclZhbHVlLCAiICAiLCAiICIpDQogICAgICBGaWx0ZXJWYWx1ZSA9IFJl +cGxhY2UoRmlsdGVyVmFsdWUsICItIC0iLCAiLS0iKQ0KICAgICAgRmlsdGVyVmFs +dWUgPSBSZXBsYWNlKEZpbHRlclZhbHVlLCAiLS0iLCAiLXtNfSIpDQogICAgICBG +aWx0ZXJWYWx1ZSA9IFJlcGxhY2UoRmlsdGVyVmFsdWUsICItIiwgIi4uIikNCiAg +ICAgIEZpbHRlclZhbHVlID0gUmVwbGFjZShGaWx0ZXJWYWx1ZSwgIntNfSIsICIt +IikNCiAgICAgIA0KICAgICAgVGVtcEFyciA9IFNwbGl0KEZpbHRlclZhbHVlLCAi +Li4iKQ0KICAgICAgQ3JpdGVyaWEgPSBCdWlsZENyaXRlcmlhKEZpZWxkTmFtZSwg +RmllbGREYXRhVHlwZSwgU1FMX0JldHdlZW4sIFRyaW0oVGVtcEFycigwKSksIFRy +aW0oVGVtcEFycigxKSksIElnbm9yZVZhbHVlLCBEaXNhYmxlSWdub3JlTnVsbFZh +bHVlKQ0KICAgICAgQ3JpdGVyaWFCdWlsZCA9IFRydWUNCiAgIEVsc2VJZiBGaWx0 +ZXJWYWx1ZSBMaWtlICIqWzAtOV0iICYgRGVjaW1hbE1hcmtlciAmICIqWypdIiBU +aGVuDQogICAgICBJZiAoUmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfQWRkX1dp +bGRDYXJkU3VmZml4KSA9IDAgVGhlbg0KICAgICAgICAgQ3JpdGVyaWEgPSBCdWls +ZENyaXRlcmlhKEZpZWxkTmFtZSwgRmllbGREYXRhVHlwZSwgUmVsYXRpb25hbE9w +ZXJhdG9yICsgU1FMX0FkZF9XaWxkQ2FyZFN1ZmZpeCwgRmlsdGVyVmFsdWUsIEZp +bHRlclZhbHVlMiwgSWdub3JlVmFsdWUsIERpc2FibGVJZ25vcmVOdWxsVmFsdWUp +DQogICAgICAgICBDcml0ZXJpYUJ1aWxkID0gVHJ1ZQ0KICAgICAgRW5kIElmDQog +ICBFbmQgSWYNCiAgIA0KICAgVHJ5QnVpbGROdW1lcmljU3BlY2lhbENhc2VzQ3Jp +dGVyaWEgPSBDcml0ZXJpYUJ1aWxkDQoNCkVuZCBGdW5jdGlvbg0KDQoNClByaXZh +dGUgRnVuY3Rpb24gVHJ5QnVpbGRTcGxpdFRvQXJyYXlDcml0ZXJpYShCeVJlZiBG +aWVsZE5hbWUgQXMgU3RyaW5nLCBCeVZhbCBGaWVsZERhdGFUeXBlIEFzIFNxbEZp +ZWxkRGF0YVR5cGUsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIEJ5UmVmIFJlbGF0aW9uYWxPcGVyYXRvciBBcyBTcWxSZWxhdGlvbmFs +T3BlcmF0b3JzLCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBCeVJlZiBGaWx0ZXJWYWx1ZSBBcyBWYXJpYW50LCBfDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBJZ25vcmVWYWx1ZSBB +cyBWYXJpYW50LCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBCeVJlZiBDcml0ZXJpYSBBcyBTdHJpbmcpIEFzIEJvb2xlYW4NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgRGltIFZhbHVlU3BsaXR0ZWQg +QXMgQm9vbGVhbg0KICAgRGltIENyaXRlcmlhQ29uY2F0U3RyaW5nIEFzIFN0cmlu +Zw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICBJZiAoUmVsYXRpb25h +bE9wZXJhdG9yIEFuZCBTUUxfU3BsaXRWYWx1ZVRvQXJyYXkpID0gU1FMX1NwbGl0 +VmFsdWVUb0FycmF5IFRoZW4NCiAgICAgIA0KICAgICAgUmVsYXRpb25hbE9wZXJh +dG9yID0gUmVsYXRpb25hbE9wZXJhdG9yIFhvciBTUUxfU3BsaXRWYWx1ZVRvQXJy +YXkNCiAgICAgIA0KICAgICAgSWYgSW5TdHIoMSwgRmlsdGVyVmFsdWUsIFNxbE9y +Q29uY2F0U3RyaW5nLCB2YlRleHRDb21wYXJlKSA+IDAgVGhlbg0KICAgICAgICAg +RmlsdGVyVmFsdWUgPSBSZXBsYWNlKEZpbHRlclZhbHVlLCBTcWxPckNvbmNhdFN0 +cmluZywgIjsiKQ0KICAgICAgRW5kIElmDQogICAgICANCiAgICAgIElmIEluU3Ry +KDEsIEZpbHRlclZhbHVlLCBTcWxBbmRDb25jYXRTdHJpbmcsIHZiVGV4dENvbXBh +cmUpID4gMCBUaGVuDQogICAgICAgICBGaWx0ZXJWYWx1ZSA9IFJlcGxhY2UoRmls +dGVyVmFsdWUsIFNxbEFuZENvbmNhdFN0cmluZywgIisiKQ0KICAgICAgRW5kIElm +DQogICAgICANCiAgICAgIElmIEluU3RyKDEsIEZpbHRlclZhbHVlLCAiOyIpID4g +MCBUaGVuDQogICAgICAgICBJZiBJblN0cigxLCBGaWx0ZXJWYWx1ZSwgIisiKSA+ +IDAgVGhlbg0KICAgICAgICAgICAgUmVsYXRpb25hbE9wZXJhdG9yID0gUmVsYXRp +b25hbE9wZXJhdG9yIE9yIFNRTF9TcGxpdFZhbHVlVG9BcnJheQ0KICAgICAgICAg +RW5kIElmDQogICAgICAgICBDcml0ZXJpYUNvbmNhdFN0cmluZyA9IFNxbE9yQ29u +Y2F0U3RyaW5nDQogICAgICAgICBGaWx0ZXJWYWx1ZSA9IFNwbGl0KENoYXJUcmlt +KEZpbHRlclZhbHVlLCAiOyIpLCAiOyIpDQogICAgICAgICBWYWx1ZVNwbGl0dGVk +ID0gVHJ1ZQ0KICAgICAgRWxzZUlmIEluU3RyKDEsIEZpbHRlclZhbHVlLCAiKyIp +ID4gMCBUaGVuDQogICAgICAgICBDcml0ZXJpYUNvbmNhdFN0cmluZyA9IFNxbEFu +ZENvbmNhdFN0cmluZw0KICAgICAgICAgRmlsdGVyVmFsdWUgPSBTcGxpdChDaGFy +VHJpbShGaWx0ZXJWYWx1ZSwgIisiKSwgIisiKQ0KICAgICAgICAgVmFsdWVTcGxp +dHRlZCA9IFRydWUNCiAgICAgIEVuZCBJZg0KICAgRW5kIElmDQogICANCiAgIElm +IFZhbHVlU3BsaXR0ZWQgVGhlbg0KICAgDQogICAgICBJZiBDcml0ZXJpYUNvbmNh +dFN0cmluZyA9IFNxbE9yQ29uY2F0U3RyaW5nIFRoZW4NCiAgICAgIElmIFRyeUJ1 +aWxkSW5Dcml0ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFJlbGF0aW9u +YWxPcGVyYXRvciwgRmlsdGVyVmFsdWUsIElnbm9yZVZhbHVlLCBDcml0ZXJpYSkg +VGhlbg0KICAgICAgICAgRXhpdCBGdW5jdGlvbg0KICAgICAgRW5kIElmDQogICAg +ICBFbmQgSWYNCiAgIA0KICAgICAgVHJ5QnVpbGRTcGxpdFRvQXJyYXlDcml0ZXJp +YSA9IFRyeUJ1aWxkQXJyYXlDcml0ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5 +cGUsIFJlbGF0aW9uYWxPcGVyYXRvciwgRmlsdGVyVmFsdWUsIElnbm9yZVZhbHVl +LCBDcml0ZXJpYSwgQ3JpdGVyaWFDb25jYXRTdHJpbmcpDQogICANCiAgIEVuZCBJ +Zg0KICAgDQpFbmQgRnVuY3Rpb24NCg0KDQpQcml2YXRlIEZ1bmN0aW9uIFRyeUJ1 +aWxkQXJyYXlDcml0ZXJpYShCeVJlZiBGaWVsZE5hbWUgQXMgU3RyaW5nLCBCeVZh +bCBGaWVsZERhdGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5cGUsIF8NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIFJlbGF0aW9uYWxP +cGVyYXRvciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBfDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBGaWx0ZXJWYWx1ZSBB +cyBWYXJpYW50LCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBCeVJlZiBJZ25vcmVWYWx1ZSBBcyBWYXJpYW50LCBfDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBDcml0ZXJpYSBBcyBT +dHJpbmcsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFs +IEJ5VmFsIENyaXRlcmlhQ29uY2F0U3RyaW5nIEFzIFN0cmluZyA9IFNxbE9yQ29u +Y2F0U3RyaW5nKSBBcyBCb29sZWFuDQogICBEaW0gaXRtIEFzIFZhcmlhbnQNCiAg +IERpbSBJdG1Dcml0ZXJpYSBBcyBTdHJpbmcNCiAgIA0KICAgRGltIGFyckZpbHRl +clZhbHVlKCkgQXMgVmFyaWFudA0KICAgDQogICBJZiBOb3QgSXNBcnJheShGaWx0 +ZXJWYWx1ZSkgVGhlbg0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQoN +CiAgICdDb25uZWN0IGNyaXRlcmlhIHZpYSBPcg0KICAgRm9yIEVhY2ggaXRtIElu +IEZpbHRlclZhbHVlDQogICAgICBJdG1Dcml0ZXJpYSA9IEJ1aWxkQ3JpdGVyaWEo +RmllbGROYW1lLCBGaWVsZERhdGFUeXBlLCBSZWxhdGlvbmFsT3BlcmF0b3IsIGl0 +bSwgLCBJZ25vcmVWYWx1ZSwgRmFsc2UpDQogICAgICBJZiBMZW4oSXRtQ3JpdGVy +aWEpID4gMCBUaGVuDQogICAgICAgICBDcml0ZXJpYSA9IENyaXRlcmlhICYgQ3Jp +dGVyaWFDb25jYXRTdHJpbmcgJiBJdG1Dcml0ZXJpYQ0KICAgICAgRW5kIElmDQog +ICBOZXh0DQogICBJZiBMZW4oQ3JpdGVyaWEpID4gMCBUaGVuDQogICAgICBDcml0 +ZXJpYSA9IE1pZChDcml0ZXJpYSwgTGVuKENyaXRlcmlhQ29uY2F0U3RyaW5nKSAr +IDEpICcgMS4gT3Igd2Vnc2NobmVpZGVuDQogICBFbmQgSWYNCg0KICAgVHJ5QnVp +bGRBcnJheUNyaXRlcmlhID0gVHJ1ZQ0KDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0 +ZSBGdW5jdGlvbiBUcnlCdWlsZEluQ3JpdGVyaWEoQnlSZWYgRmllbGROYW1lIEFz +IFN0cmluZywgQnlWYWwgRmllbGREYXRhVHlwZSBBcyBTcWxGaWVsZERhdGFUeXBl +LCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBS +ZWxhdGlvbmFsT3BlcmF0b3IgQXMgU3FsUmVsYXRpb25hbE9wZXJhdG9ycywgXw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlSZWYgRmlsdGVy +VmFsdWUgQXMgVmFyaWFudCwgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgQnlSZWYgSWdub3JlVmFsdWUgQXMgVmFyaWFudCwgXw0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlSZWYgQ3JpdGVyaWEgQXMg +U3RyaW5nKSBBcyBCb29sZWFuDQoNCiAgIERpbSBPcGVyYXRvclN0cmluZyBBcyBT +dHJpbmcNCiAgIERpbSBGaWx0ZXJWYWx1ZVN0cmluZyBBcyBTdHJpbmcNCg0KICAg +SWYgKFJlbGF0aW9uYWxPcGVyYXRvciBBbmQgU1FMX0luKSA9IDAgVGhlbg0KICAg +ICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQoNCiAgIElmIElzQXJyYXkoRmls +dGVyVmFsdWUpIFRoZW4NCiAgICAgIEZpbHRlclZhbHVlU3RyaW5nID0gR2V0VmFs +dWVBcnJheVN0cmluZyhGaWx0ZXJWYWx1ZSwgRmllbGREYXRhVHlwZSwgIiwiLCBJ +Z25vcmVWYWx1ZSkNCiAgIEVsc2VJZiBWYXJUeXBlKEZpbHRlclZhbHVlKSA9IHZi +U3RyaW5nIFRoZW4NCiAgICAgIElmIEZpZWxkRGF0YVR5cGUgPSBTUUxfVGV4dCBU +aGVuDQogICAgICAgICBJZiBMZWZ0KEZpbHRlclZhbHVlLCAxKSA9ICInIiBUaGVu +ICcgSXMgYWxyZWFkeSBhcyBTUUwgdGV4dCBpbiB0aGUgRmlsdGVyU3RyaW5nDQog +ICAgICAgICAgICBGaWx0ZXJWYWx1ZVN0cmluZyA9IEZpbHRlclZhbHVlDQogICAg +ICAgICBFbHNlDQogICAgICAgICAgICBGaWx0ZXJWYWx1ZVN0cmluZyA9IENvbnZl +cnRUb1NxbFRleHQoRmlsdGVyVmFsdWUsIEZpZWxkRGF0YVR5cGUpDQogICAgICAg +ICBFbmQgSWYNCiAgICAgIEVsc2UNCiAgICAgICAgIEZpbHRlclZhbHVlU3RyaW5n +ID0gRmlsdGVyVmFsdWUgJyBWYWx1ZSBpcyBhbHJlYWR5IGluIHRoZSBsaXN0aW5n +IGFzIGEgc3RyaW5nDQogICAgICBFbmQgSWYNCiAgIEVsc2UNCiAgICAgIEZpbHRl +clZhbHVlU3RyaW5nID0gQ29udmVydFRvU3FsVGV4dChGaWx0ZXJWYWx1ZSwgRmll +bGREYXRhVHlwZSkNCiAgIEVuZCBJZg0KDQogICBPcGVyYXRvclN0cmluZyA9ICIg +SW4gIg0KICAgSWYgKFJlbGF0aW9uYWxPcGVyYXRvciBBbmQgU1FMX05vdCkgPSBT +UUxfTm90IFRoZW4NCiAgICAgIE9wZXJhdG9yU3RyaW5nID0gIiBOb3QiICYgT3Bl +cmF0b3JTdHJpbmcNCiAgIEVuZCBJZg0KDQogICBJZiBMZW4oRmlsdGVyVmFsdWVT +dHJpbmcpID4gMCBUaGVuDQogICANCiAgICAgIElmIFJlbW92ZU51bGxGcm9tSW5W +YWx1ZVN0cmluZyhGaWx0ZXJWYWx1ZVN0cmluZykgVGhlbg0KICAgICAgICAgQ3Jp +dGVyaWEgPSBGaWVsZE5hbWUgJiAiIElzIE51bGwiDQogICAgICAgICBJZiBMZW4o +RmlsdGVyVmFsdWVTdHJpbmcpID4gMCBUaGVuDQogICAgICAgICAgICBDcml0ZXJp +YSA9IENyaXRlcmlhICYgIiBPciAiICYgRmllbGROYW1lICYgT3BlcmF0b3JTdHJp +bmcgJiAiKCIgJiBGaWx0ZXJWYWx1ZVN0cmluZyAmICIpIg0KICAgICAgICAgRW5k +IElmDQogICAgICBFbHNlDQogICAgICAgICBDcml0ZXJpYSA9IEZpZWxkTmFtZSAm +IE9wZXJhdG9yU3RyaW5nICYgIigiICYgRmlsdGVyVmFsdWVTdHJpbmcgJiAiKSIN +CiAgICAgIEVuZCBJZg0KICAgIA0KICAgRW5kIElmDQoNCiAgIFRyeUJ1aWxkSW5D +cml0ZXJpYSA9IFRydWUNCg0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rp +b24gVHJ5QnVpbGRCZXR3ZWVuQ3JpdGVyaWEoQnlSZWYgRmllbGROYW1lIEFzIFN0 +cmluZywgQnlWYWwgRmllbGREYXRhVHlwZSBBcyBTcWxGaWVsZERhdGFUeXBlLCBf +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVm +IFJlbGF0aW9uYWxPcGVyYXRvciBBcyBTcWxSZWxhdGlvbmFsT3BlcmF0b3JzLCBf +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVm +IEZpbHRlclZhbHVlIEFzIFZhcmlhbnQsIF8NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgQnlSZWYgRmlsdGVyVmFsdWUyIEFzIFZhcmlh +bnQsIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +QnlSZWYgSWdub3JlVmFsdWUgQXMgVmFyaWFudCwgXw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBDcml0ZXJpYSBBcyBTdHJp +bmcpIEFzIEJvb2xlYW4NCiAgIA0KICAgRGltIENyaXRlcmlhMSBBcyBTdHJpbmcN +CiAgIERpbSBDcml0ZXJpYTIgQXMgU3RyaW5nDQogICANCiAgIElmIChSZWxhdGlv +bmFsT3BlcmF0b3IgQW5kIFNRTF9CZXR3ZWVuKSA9IEZhbHNlIFRoZW4NCiAgICAg +IFRyeUJ1aWxkQmV0d2VlbkNyaXRlcmlhID0gRmFsc2UNCiAgICAgIEV4aXQgRnVu +Y3Rpb24NCiAgIEVuZCBJZg0KICAgDQogICBJZiAoUmVsYXRpb25hbE9wZXJhdG9y +IEFuZCBTUUxfTm90KSA9IFNRTF9Ob3QgVGhlbiAnUmV2ZXJzZSBjb25kaXRpb24N +CiAgICAgIENyaXRlcmlhMSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBGaWVs +ZERhdGFUeXBlLCBTUUxfTGVzc1RoYW4sIEZpbHRlclZhbHVlLCAsIElnbm9yZVZh +bHVlLCBGYWxzZSkNCiAgICAgIENyaXRlcmlhMiA9IEJ1aWxkQ3JpdGVyaWEoRmll +bGROYW1lLCBGaWVsZERhdGFUeXBlLCBTUUxfR3JlYXRlclRoYW4sIEZpbHRlclZh +bHVlMiwgLCBJZ25vcmVWYWx1ZSwgRmFsc2UpDQogICAgICBDcml0ZXJpYSA9IENy +aXRlcmlhMSAmIFNxbEFuZENvbmNhdFN0cmluZyAmIENyaXRlcmlhMg0KICAgICAg +VHJ5QnVpbGRCZXR3ZWVuQ3JpdGVyaWEgPSBUcnVlDQogICAgICBFeGl0IEZ1bmN0 +aW9uDQogICBFbmQgSWYNCiAgIA0KICAgSWYgRmllbGREYXRhVHlwZSA9IFNRTF9O +dW1lcmljIFRoZW4NCiAgICAgIElmIEZpbHRlclZhbHVlMiBMaWtlICI8PSoiIFRo +ZW4gJ2N1dCBhd2F5DQogICAgICAgICBGaWx0ZXJWYWx1ZTIgPSBNaWQoRmlsdGVy +VmFsdWUyLCAzKQ0KICAgICAgRWxzZUlmIEZpbHRlclZhbHVlMiBMaWtlICI8KiIg +VGhlbg0KICAgICAgICAgRmlsdGVyVmFsdWUyID0gTWlkKEZpbHRlclZhbHVlMiwg +MikNCiAgICAgICAgIENyaXRlcmlhMSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1l +LCBGaWVsZERhdGFUeXBlLCBTUUxfR3JlYXRlclRoYW4gKyBTUUxfRXF1YWwsIEZp +bHRlclZhbHVlLCAsIE51bGwsIEZhbHNlKQ0KICAgICAgICAgQ3JpdGVyaWEyID0g +QnVpbGRDcml0ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFNRTF9MZXNz +VGhhbiwgRmlsdGVyVmFsdWUyLCAsIE51bGwsIEZhbHNlKQ0KICAgICAgICAgQ3Jp +dGVyaWEgPSBDcml0ZXJpYTEgJiBTcWxBbmRDb25jYXRTdHJpbmcgJiBDcml0ZXJp +YTINCiAgICAgICAgIFRyeUJ1aWxkQmV0d2VlbkNyaXRlcmlhID0gVHJ1ZQ0KICAg +ICAgICAgRXhpdCBGdW5jdGlvbg0KICAgICAgRW5kIElmDQogICBFbmQgSWYNCg0K +ICAgSWYgSXNOdWxsKEZpbHRlclZhbHVlMikgT3IgSXNNaXNzaW5nKEZpbHRlclZh +bHVlMikgT3IgVmFsdWVzQXJlRXF1YWwoRmllbGREYXRhVHlwZSwgRmlsdGVyVmFs +dWUyLCBJZ25vcmVWYWx1ZSkgVGhlbg0KICAgICAgUmVsYXRpb25hbE9wZXJhdG9y +ID0gU1FMX0dyZWF0ZXJUaGFuICsgU1FMX0VxdWFsDQogICBFbHNlSWYgSXNOdWxs +KEZpbHRlclZhbHVlKSBPciBWYWx1ZXNBcmVFcXVhbChGaWVsZERhdGFUeXBlLCBG +aWx0ZXJWYWx1ZSwgSWdub3JlVmFsdWUpIFRoZW4NCiAgICAgIFJlbGF0aW9uYWxP +cGVyYXRvciA9IFNRTF9MZXNzVGhhbiArIFNRTF9FcXVhbA0KICAgICAgRmlsdGVy +VmFsdWUgPSBGaWx0ZXJWYWx1ZTINCiAgICAgIEZpbHRlclZhbHVlMiA9IEdldENo +ZWNrZWRJZ25vcmVWYWx1ZShJZ25vcmVWYWx1ZSkNCiAgIEVsc2VJZiAoRmllbGRE +YXRhVHlwZSBBbmQgU1FMX0RhdGUpID0gU1FMX0RhdGUgQW5kIChSZWxhdGlvbmFs +T3BlcmF0b3IgQW5kIFNRTF9BZGRfV2lsZENhcmRTdWZmaXgpIFRoZW4NCiAgICAg +IENyaXRlcmlhMSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBGaWVsZERhdGFU +eXBlLCBTUUxfR3JlYXRlclRoYW4gKyBTUUxfRXF1YWwsIEZpbHRlclZhbHVlLCAs +IE51bGwsIEZhbHNlKQ0KICAgICAgQ3JpdGVyaWEyID0gQnVpbGRDcml0ZXJpYShG +aWVsZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFNRTF9MZXNzVGhhbiArIFNRTF9FcXVh +bCArIFNRTF9BZGRfV2lsZENhcmRTdWZmaXgsIEZpbHRlclZhbHVlMiwgLCBOdWxs +LCBGYWxzZSkNCiAgICAgIENyaXRlcmlhID0gQ3JpdGVyaWExICYgU3FsQW5kQ29u +Y2F0U3RyaW5nICYgQ3JpdGVyaWEyDQogICAgICBUcnlCdWlsZEJldHdlZW5Dcml0 +ZXJpYSA9IFRydWUNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVsc2VJZiAoRmll +bGREYXRhVHlwZSBBbmQgU1FMX051bWVyaWMpID0gU1FMX051bWVyaWMgQW5kIChS +ZWxhdGlvbmFsT3BlcmF0b3IgQW5kIFNRTF9BZGRfV2lsZENhcmRTdWZmaXgpIFRo +ZW4NCiAgICAgIENyaXRlcmlhMSA9IEJ1aWxkQ3JpdGVyaWEoRmllbGROYW1lLCBG +aWVsZERhdGFUeXBlLCBTUUxfR3JlYXRlclRoYW4gKyBTUUxfRXF1YWwsIEZpbHRl +clZhbHVlLCAsIE51bGwsIEZhbHNlKQ0KICAgICAgQ3JpdGVyaWEyID0gQnVpbGRD +cml0ZXJpYShGaWVsZE5hbWUsIEZpZWxkRGF0YVR5cGUsIFNRTF9MZXNzVGhhbiAr +IFNRTF9FcXVhbCArIFNRTF9BZGRfV2lsZENhcmRTdWZmaXgsIEZpbHRlclZhbHVl +MiwgLCBOdWxsLCBGYWxzZSkNCiAgICAgIENyaXRlcmlhID0gQ3JpdGVyaWExICYg +U3FsQW5kQ29uY2F0U3RyaW5nICYgQ3JpdGVyaWEyDQogICAgICBUcnlCdWlsZEJl +dHdlZW5Dcml0ZXJpYSA9IFRydWUNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVs +c2UNCiAgICAgIENyaXRlcmlhID0gRmllbGROYW1lICYgIiBCZXR3ZWVuICIgJiBD +b252ZXJ0VG9TcWxUZXh0KEZpbHRlclZhbHVlLCBGaWVsZERhdGFUeXBlKSAmIFNx +bEFuZENvbmNhdFN0cmluZyAmIENvbnZlcnRUb1NxbFRleHQoRmlsdGVyVmFsdWUy +LCBGaWVsZERhdGFUeXBlKQ0KICAgICAgVHJ5QnVpbGRCZXR3ZWVuQ3JpdGVyaWEg +PSBUcnVlDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQgSWYNCg0KRW5kIEZ1 +bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gR2V0Q2hlY2tlZElnbm9yZVZhbHVl +KEJ5VmFsIElnbm9yZVZhbHVlIEFzIFZhcmlhbnQpIEFzIFZhcmlhbnQNCiAgIElm +IElzQXJyYXkoSWdub3JlVmFsdWUpIFRoZW4NCiAgICAgIEdldENoZWNrZWRJZ25v +cmVWYWx1ZSA9IElnbm9yZVZhbHVlKExCb3VuZChJZ25vcmVWYWx1ZSkpDQogICBF +bHNlDQogICAgICBHZXRDaGVja2VkSWdub3JlVmFsdWUgPSBJZ25vcmVWYWx1ZQ0K +ICAgRW5kIElmDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBOdWxs +RmlsdGVyT3JFbXB0eUZpbHRlcihCeVZhbCBGaWVsZE5hbWUgQXMgU3RyaW5nLCBC +eVZhbCBGaWVsZERhdGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5cGUsIF8NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlWYWwgUmVsYXRp +b25hbE9wZXJhdG9yIEFzIFNxbFJlbGF0aW9uYWxPcGVyYXRvcnMsIF8NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlWYWwgVmFsdWUg +QXMgVmFyaWFudCwgQnlWYWwgSWdub3JlVmFsdWUgQXMgVmFyaWFudCwgXw0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVJlZiBOdWxs +RmlsdGVyU3RyaW5nIEFzIFN0cmluZywgXw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBPcHRpb25hbCBCeVZhbCBEaXNhYmxlSWdub3JlTnVsbFZhbHVl +IEFzIEJvb2xlYW4gPSBGYWxzZSkgQXMgQm9vbGVhbg0KICAgDQogICBJZiBJc09i +amVjdChJZ25vcmVWYWx1ZSkgVGhlbg0KICAgSWYgSWdub3JlVmFsdWUgSXMgTm90 +aGluZyBUaGVuDQogICAgICBJZiBJc051bGwoVmFsdWUpIFRoZW4NCiAgICAgICAg +IElmIChSZWxhdGlvbmFsT3BlcmF0b3IgQW5kIFNRTF9Ob3QpID0gU1FMX05vdCBU +aGVuDQogICAgICAgICAgICBOdWxsRmlsdGVyU3RyaW5nID0gRmllbGROYW1lICYg +IiBJcyBOb3QgTnVsbCINCiAgICAgICAgIEVsc2UNCiAgICAgICAgICAgIE51bGxG +aWx0ZXJTdHJpbmcgPSBGaWVsZE5hbWUgJiAiIElzIE51bGwiDQogICAgICAgICBF +bmQgSWYNCiAgICAgICAgIE51bGxGaWx0ZXJPckVtcHR5RmlsdGVyID0gVHJ1ZQ0K +ICAgICAgRWxzZQ0KICAgICAgICAgTnVsbEZpbHRlck9yRW1wdHlGaWx0ZXIgPSBG +YWxzZQ0KICAgICAgRW5kIElmDQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQg +SWYNCiAgIEVuZCBJZg0KICAgDQogICBJZiBJc051bGwoVmFsdWUpIFRoZW4NCiAg +ICAgIElmIERpc2FibGVJZ25vcmVOdWxsVmFsdWUgVGhlbg0KICAgICAgICAgTnVs +bEZpbHRlclN0cmluZyA9IEZpZWxkTmFtZSAmICIgSXMgTnVsbCINCiAgICAgIEVs +c2VJZiBOb3QgVmFsdWVzQXJlRXF1YWwoRmllbGREYXRhVHlwZSwgVmFsdWUsIEln +bm9yZVZhbHVlKSBUaGVuDQogICAgICAgICBOdWxsRmlsdGVyU3RyaW5nID0gRmll +bGROYW1lICYgIiBJcyBOdWxsIg0KICAgICAgRW5kIElmDQogICAgICBOdWxsRmls +dGVyT3JFbXB0eUZpbHRlciA9IFRydWUNCiAgIEVsc2VJZiBJc0FycmF5KFZhbHVl +KSBUaGVuDQogICAgICBEaW0gQ2hlY2tBcnJheSgpIEFzIFZhcmlhbnQNCk9uIEVy +cm9yIFJlc3VtZSBOZXh0DQogICAgICBDaGVja0FycmF5ID0gVmFsdWUNCiAgICAg +IElmIEVyci5OdW1iZXIgPSAwIFRoZW4NCiAgICAgIElmICgwIC8gMSkgKyAoTm90 +IE5vdCBDaGVja0FycmF5KSA9IDAgVGhlbg0KICAgICAgICAgTnVsbEZpbHRlck9y +RW1wdHlGaWx0ZXIgPSBUcnVlDQogICAgICAgICBFeGl0IEZ1bmN0aW9uDQogICAg +ICBFbmQgSWYNCiAgICAgIEVsc2UNCiAgICAgICAgIEVyci5DbGVhcg0KICAgICAg +ICAgRGltIEFycmF5U2l6ZSBBcyBMb25nDQogICAgICAgICBBcnJheVNpemUgPSBV +Qm91bmQoVmFsdWUpDQogICAgICAgICBJZiBFcnIuTnVtYmVyIDw+IDAgVGhlbg0K +ICAgICAgICAgICAgRXJyLkNsZWFyDQogICAgICAgICAgICBOdWxsRmlsdGVyT3JF +bXB0eUZpbHRlciA9IFRydWUNCiAgICAgICAgICAgIEV4aXQgRnVuY3Rpb24NCiAg +ICAgICAgIEVuZCBJZg0KICAgICAgRW5kIElmDQogICBFbHNlDQogICAgICBOdWxs +RmlsdGVyT3JFbXB0eUZpbHRlciA9IFZhbHVlc0FyZUVxdWFsKEZpZWxkRGF0YVR5 +cGUsIFZhbHVlLCBJZ25vcmVWYWx1ZSkNCiAgIEVuZCBJZg0KICAgDQogICBJZiAo +UmVsYXRpb25hbE9wZXJhdG9yIEFuZCBTUUxfTm90KSA9IFNRTF9Ob3QgVGhlbg0K +ICAgICAgICAgTnVsbEZpbHRlclN0cmluZyA9IFJlcGxhY2UoTnVsbEZpbHRlclN0 +cmluZywgIklzIE51bGwiLCAiSXMgTm90IE51bGwiKQ0KICAgRW5kIElmDQoNCkVu +ZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIFZhbHVlc0FyZUVxdWFsKEJ5 +VmFsIEZpZWxkRGF0YVR5cGUgQXMgU3FsRmllbGREYXRhVHlwZSwgQnlWYWwgVmFs +dWUgQXMgVmFyaWFudCwgQnlWYWwgVmFsdWUyIEFzIFZhcmlhbnQpIEFzIEJvb2xl +YW4NCiAgIA0KICAgSWYgSXNBcnJheShWYWx1ZTIpIFRoZW4NCiAgICAgIFZhbHVl +c0FyZUVxdWFsID0gQXJyYXlDb250YWlucyhGaWVsZERhdGFUeXBlLCBWYWx1ZTIs +IFZhbHVlKQ0KICAgRWxzZUlmIElzTnVsbChWYWx1ZSkgVGhlbg0KICAgICAgVmFs +dWVzQXJlRXF1YWwgPSBJc051bGwoVmFsdWUyKQ0KICAgRWxzZUlmIElzTnVsbChW +YWx1ZTIpIFRoZW4NCiAgICAgIFZhbHVlc0FyZUVxdWFsID0gRmFsc2UNCiAgIEVs +c2UNCiAgICAgIFNlbGVjdCBDYXNlIEZpZWxkRGF0YVR5cGUNCiAgICAgICAgIENh +c2UgU3FsRmllbGREYXRhVHlwZS5TUUxfVGV4dA0KICAgICAgICAgICAgVmFsdWVz +QXJlRXF1YWwgPSAoVkJBLlN0ckNvbXAoVmFsdWUsIFZhbHVlMiwgdmJUZXh0Q29t +cGFyZSkgPSAwKQ0KICAgICAgICAgQ2FzZSBTcWxGaWVsZERhdGFUeXBlLlNRTF9O +dW1lcmljDQogICAgICAgICAgICBWYWx1ZXNBcmVFcXVhbCA9IChDRGJsKFZhbHVl +KSA9IENEYmwoVmFsdWUyKSkNCiAgICAgICAgIENhc2UgU3FsRmllbGREYXRhVHlw +ZS5TUUxfRGF0ZQ0KICAgICAgICAgICAgVmFsdWVzQXJlRXF1YWwgPSAoQ0RhdGUo +VmFsdWUpID0gQ0RhdGUoVmFsdWUyKSkNCiAgICAgICAgIENhc2UgU3FsRmllbGRE +YXRhVHlwZS5TUUxfQm9vbGVhbg0KICAgICAgICAgICAgVmFsdWVzQXJlRXF1YWwg +PSAoQ0Jvb2woVmFsdWUpID0gQ0Jvb2woVmFsdWUyKSkNCiAgICAgICAgIENhc2Ug +RWxzZQ0KICAgICAgICAgICAgVmFsdWVzQXJlRXF1YWwgPSAoVmFsdWUgPSBWYWx1 +ZTIpDQogICAgICBFbmQgU2VsZWN0DQogICBFbmQgSWYNCg0KRW5kIEZ1bmN0aW9u +DQoNClByaXZhdGUgRnVuY3Rpb24gQXJyYXlDb250YWlucyhCeVZhbCBGaWVsZERh +dGFUeXBlIEFzIFNxbEZpZWxkRGF0YVR5cGUsIEJ5VmFsIEFycmF5VG9DaGVjayBB +cyBWYXJpYW50LCBCeVZhbCBTZWFyY2hWYWx1ZSBBcyBWYXJpYW50KSBBcyBCb29s +ZWFuDQogICANCiAgIERpbSBpIEFzIExvbmcNCg0KICAgSWYgSXNOdWxsKFNlYXJj +aFZhbHVlKSBUaGVuDQogICAgICBBcnJheUNvbnRhaW5zID0gQXJyYXlDb250YWlu +c051bGwoQXJyYXlUb0NoZWNrKQ0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5k +IElmDQoNCiAgIEZvciBpID0gTEJvdW5kKEFycmF5VG9DaGVjaykgVG8gVUJvdW5k +KEFycmF5VG9DaGVjaykNCiAgICAgIElmIFZhbHVlc0FyZUVxdWFsKEZpZWxkRGF0 +YVR5cGUsIEFycmF5VG9DaGVjayhpKSwgU2VhcmNoVmFsdWUpIFRoZW4NCiAgICAg +ICAgIEFycmF5Q29udGFpbnMgPSBUcnVlDQogICAgICAgICBFeGl0IEZ1bmN0aW9u +DQogICAgICBFbmQgSWYNCiAgIE5leHQNCg0KICAgQXJyYXlDb250YWlucyA9IEZh +bHNlDQoNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIEFycmF5Q29u +dGFpbnNOdWxsKEJ5VmFsIEFycmF5VG9DaGVjayBBcyBWYXJpYW50KSBBcyBCb29s +ZWFuDQogICANCiAgIERpbSBpIEFzIExvbmcNCg0KICAgRm9yIGkgPSBMQm91bmQo +QXJyYXlUb0NoZWNrKSBUbyBVQm91bmQoQXJyYXlUb0NoZWNrKQ0KICAgICAgSWYg +SXNOdWxsKEFycmF5VG9DaGVjayhpKSkgVGhlbg0KICAgICAgICAgQXJyYXlDb250 +YWluc051bGwgPSBUcnVlDQogICAgICAgICBFeGl0IEZ1bmN0aW9uDQogICAgICBF +bmQgSWYNCiAgIE5leHQNCg0KICAgQXJyYXlDb250YWluc051bGwgPSBGYWxzZQ0K +DQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBHZXRWYWx1ZUFycmF5 +U3RyaW5nKEJ5VmFsIFZhbHVlIEFzIFZhcmlhbnQsIEJ5VmFsIEZpZWxkRGF0YVR5 +cGUgQXMgU3FsRmllbGREYXRhVHlwZSwgXw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIEJ5VmFsIERlbGltaXRlciBBcyBTdHJpbmcsIEJ5VmFs +IElnbm9yZVZhbHVlIEFzIFZhcmlhbnQpIEFzIFN0cmluZw0KICAgDQogICBEaW0g +aSBBcyBMb25nDQogICBEaW0gcyBBcyBTdHJpbmcNCg0KICAgRm9yIGkgPSBMQm91 +bmQoVmFsdWUpIFRvIFVCb3VuZChWYWx1ZSkNCiAgICAgIElmIElzQXJyYXkoSWdu +b3JlVmFsdWUpIFRoZW4NCiAgICAgICAgIElmIEFycmF5Q29udGFpbnMoRmllbGRE +YXRhVHlwZSwgSWdub3JlVmFsdWUsIFZhbHVlKGkpKSBUaGVuDQogICAgICAgICBF +bHNlDQogICAgICAgICAgICBzID0gcyAmIERlbGltaXRlciAmIENvbnZlcnRUb1Nx +bFRleHQoVmFsdWUoaSksIEZpZWxkRGF0YVR5cGUpDQogICAgICAgICBFbmQgSWYN +CiAgICAgIEVsc2UNCiAgICAgICAgIElmIFZhbHVlKGkpID0gSWdub3JlVmFsdWUg +VGhlbg0KICAgICAgICAgRWxzZUlmIElzTnVsbChWYWx1ZShpKSkgQW5kIElzTnVs +bChJZ25vcmVWYWx1ZSkgVGhlbg0KICAgICAgICAgRWxzZQ0KICAgICAgICAgICAg +cyA9IHMgJiBEZWxpbWl0ZXIgJiBDb252ZXJ0VG9TcWxUZXh0KFZhbHVlKGkpLCBG +aWVsZERhdGFUeXBlKQ0KICAgICAgICAgRW5kIElmDQogICAgICBFbmQgSWYNCiAg +IE5leHQNCiAgIElmIExlbihzKSA+IDAgQW5kIExlbihEZWxpbWl0ZXIpID4gMCBU +aGVuDQogICAgICBzID0gTWlkKHMsIExlbihEZWxpbWl0ZXIpICsgMSkNCiAgIEVu +ZCBJZg0KICAgR2V0VmFsdWVBcnJheVN0cmluZyA9IHMNCg0KRW5kIEZ1bmN0aW9u +DQoNClByaXZhdGUgRnVuY3Rpb24gUmVtb3ZlTnVsbEZyb21JblZhbHVlU3RyaW5n +KEJ5UmVmIFZhbHVlU3RyaW5nIEFzIFN0cmluZykgQXMgQm9vbGVhbg0KDQogICBD +b25zdCBOdWxsQ2hlY2tTdHJpbmcgQXMgU3RyaW5nID0gIixOdWxsLCINCiAgIERp +bSBUZXN0U3RyaW5nIEFzIFN0cmluZw0KICAgDQogICBUZXN0U3RyaW5nID0gIiwi +ICYgVmFsdWVTdHJpbmcgJiAiLCINCg0KICAgSWYgTm90IChJblN0cigxLCBUZXN0 +U3RyaW5nLCBOdWxsQ2hlY2tTdHJpbmcpID4gMCkgVGhlbg0KICAgICAgUmVtb3Zl +TnVsbEZyb21JblZhbHVlU3RyaW5nID0gRmFsc2UNCiAgICAgIEV4aXQgRnVuY3Rp +b24NCiAgIEVuZCBJZg0KICAgDQogICBUZXN0U3RyaW5nID0gUmVwbGFjZShUZXN0 +U3RyaW5nLCBOdWxsQ2hlY2tTdHJpbmcsICIsIikNCiAgIA0KICAgSWYgTGVuKFRl +c3RTdHJpbmcpID4gMSBUaGVuDQogICAgICBWYWx1ZVN0cmluZyA9IE1pZChUZXN0 +U3RyaW5nLCAyLCBMZW4oVGVzdFN0cmluZykgLSAyKQ0KICAgRWxzZQ0KICAgICAg +VmFsdWVTdHJpbmcgPSB2Yk51bGxTdHJpbmcNCiAgIEVuZCBJZg0KICAgDQogICBS +ZW1vdmVOdWxsRnJvbUluVmFsdWVTdHJpbmcgPSBUcnVlDQoNCkVuZCBGdW5jdGlv +bg0K + + 20250609094839 + data/SqlTools.cls + + + StringCollection + VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVl +DQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIlN0cmluZ0NvbGxlY3Rpb24iDQpB +dHRyaWJ1dGUgVkJfR2xvYmFsTmFtZVNwYWNlID0gRmFsc2UNCkF0dHJpYnV0ZSBW +Ql9DcmVhdGFibGUgPSBGYWxzZQ0KQXR0cmlidXRlIFZCX1ByZWRlY2xhcmVkSWQg +PSBGYWxzZQ0KQXR0cmlidXRlIFZCX0V4cG9zZWQgPSBGYWxzZQ0KJy0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJyBDbGFzczogdGV4dC5T +dHJpbmdDb2xsZWN0aW9uDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tDQonDQonIENvbGxlY3Rpb24gZm9yIHN0cmluZ3MNCicNCicgQXV0 +aG9yOg0KJyAgICAgSm9zZWYgUG9ldHpsDQonDQonLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0NCic8Y29kZWxpYj4NCicgIDxmaWxlPnRleHQvU3Ry +aW5nQ29sbGVjdGlvbi5jbHM8L2ZpbGU+DQonICA8bGljZW5zZT5fY29kZWxpYi9s +aWNlbnNlLmJhczwvbGljZW5zZT4NCicgIDx0ZXN0Pl90ZXN0L3RleHQvU3RyaW5n +Q29sbGVjdGlvblRlc3RzLmNsczwvdGVzdD4NCic8L2NvZGVsaWI+DQonLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQpPcHRpb24gQ29t +cGFyZSBUZXh0DQpPcHRpb24gRXhwbGljaXQNCg0KUHJpdmF0ZSBtX0l0ZW1zIEFz +IENvbGxlY3Rpb24NCg0KUHJpdmF0ZSBTdWIgQ2xhc3NfSW5pdGlhbGl6ZSgpDQog +ICBTZXQgbV9JdGVtcyA9IE5ldyBDb2xsZWN0aW9uDQpFbmQgU3ViDQoNClByaXZh +dGUgU3ViIENsYXNzX1Rlcm1pbmF0ZSgpDQogICBTZXQgbV9JdGVtcyA9IE5vdGhp +bmcNCkVuZCBTdWINCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KJyBQcm9wZXJ0eTogU2VsZg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBSZWZlcmVuY2UgdG8gc2VsZiAoTWUp +DQonDQonIFJlbWFya3M6DQonICAgICBVc2VmdWwgZm9yIHdpdGgtYmxvY2sNCicN +CicgUmV0dXJuczoNCicgICAgIERhdGFiYXNlLlN0cmluZ0NvbGxlY3Rpb24NCicN +CictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClB1Ymxp +YyBQcm9wZXJ0eSBHZXQgU2VsZigpIEFzIFN0cmluZ0NvbGxlY3Rpb24NCiAgIFNl +dCBTZWxmID0gTWUNCkVuZCBQcm9wZXJ0eQ0KDQonLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonIFByb3BlcnR5OiBJdGVtcw0KJy0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBDb2xsZWN0 +aW9uIHdpdGggaXRlbXMNCicNCicgUmV0dXJuczoNCicgICAgIFZCQS5Db2xsZWN0 +aW9uDQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +DQpQdWJsaWMgUHJvcGVydHkgR2V0IEl0ZW1zKCkgQXMgQ29sbGVjdGlvbg0KICAg +U2V0IEl0ZW1zID0gbV9JdGVtcw0KRW5kIFByb3BlcnR5DQoNCictLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgUHJvcGVydHk6IEl0ZW0N +CictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicg +SXRlbSBvZiBDb2xsZWN0aW9uDQonDQonIFBhcmFtZXRlcnM6DQonICAgICBJbmRl +eCAtIChWYXJpYW50KQ0KJw0KJyBSZXR1cm5zOg0KJyAgICAgSXRlbSBzdHJpbmcg +LSAoU3RyaW5nKQ0KJw0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQ0KUHVibGljIFByb3BlcnR5IEdldCBJdGVtKEJ5VmFsIEluZGV4IEFz +IFZhcmlhbnQpIEFzIFN0cmluZw0KICAgSXRlbSA9IG1fSXRlbXMuSXRlbShJbmRl +eCkNCkVuZCBQcm9wZXJ0eQ0KDQpQdWJsaWMgUHJvcGVydHkgTGV0IEl0ZW0oQnlW +YWwgSW5kZXggQXMgVmFyaWFudCwgQnlWYWwgTmV3VmFsdWUgQXMgU3RyaW5nKQ0K +QXR0cmlidXRlIEl0ZW0uVkJfVXNlck1lbUlkID0gMA0KICAgbV9JdGVtcy5BZGQg +TmV3VmFsdWUsICwgLCBJbmRleA0KICAgbV9JdGVtcy5SZW1vdmUgSW5kZXgNCkVu +ZCBQcm9wZXJ0eQ0KDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tDQonIFN1YjogQWRkDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tDQonDQonIEFkZCBzdHJpbmcgdG8gY29sbGVjdGlvbg0KJw0K +JyBQYXJhbWV0ZXJzOg0KJyAgICAgSXRlbSB0byBhZGQgLSAoU3RyaW5nKQ0KJw0K +Jy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGlj +IFN1YiBBZGQoQnlWYWwgSXRlbSBBcyBTdHJpbmcpDQogICBtX0l0ZW1zLkFkZCBJ +dGVtDQpFbmQgU3ViDQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0NCicgU3ViOiBBZGRGcm9tQXJyYXkNCictLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicNCicgQWRkIGl0ZW1zIGZvcm0gYW4g +YXJyYXkgdG8gY29sbGVjdGlvbg0KJw0KJyBQYXJhbWV0ZXJzOg0KJyAgICAgQXJy +YXlUb0FkZCAtIChWYXJpYW50KQ0KJyAgICAgSXRlbVN0cmluZ0Zvcm1hdCAtIChT +dHJpbmcpIEZvcm1hdCBlYWNoIGl0ZW0gb2YgQXJyYXkgd2l0aCBJdGVtU3RyaW5n +Rm9ybWF0IGJlZm9yZSBhZGQgdG8gY29sbGVjdGlvbg0KJw0KJy0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KUHVibGljIFN1YiBBZGRGcm9t +QXJyYXkoQnlSZWYgQXJyYXlUb0FkZCBBcyBWYXJpYW50LCBPcHRpb25hbCBCeVZh +bCBJdGVtU3RyaW5nRm9ybWF0IEFzIFN0cmluZyA9IHZiTnVsbFN0cmluZykNCg0K +ICAgRGltIGkgQXMgTG9uZw0KDQogICBGb3IgaSA9IExCb3VuZChBcnJheVRvQWRk +KSBUbyBVQm91bmQoQXJyYXlUb0FkZCkNCiAgICAgIG1fSXRlbXMuQWRkIEZvcm1h +dChBcnJheVRvQWRkKGkpLCBJdGVtU3RyaW5nRm9ybWF0KQ0KICAgTmV4dA0KDQpF +bmQgU3ViDQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0NCicgU3ViOiBBZGRGcm9tQ29sbGVjdGlvbg0KJy0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJw0KJyBBZGQgaXRlbXMgZm9ybSBhIGNv +bGxlY3Rpb24gdG8gc3RyaW5nIGNvbGxlY3Rpb24NCicNCicgUGFyYW1ldGVyczoN +CicgICAgIENvbGxlY3Rpb25Ub0FwcGVuZCAtIChPYmplY3QpIC4uIHNvIHRoYXQg +YWxsIGNvbGxlY3Rpb25zIHdpdGggRW51bWFyYWJsZSBhbmQgSXRlbShpbmRleCkg +aW50ZXJmYWNlIGNhbiBiZSBydW4gdGhyb3VnaA0KJyAgICAgSXRlbVN0cmluZ0Zv +cm1hdCAgIC0gKFN0cmluZykgRm9ybWF0IGVhY2ggaXRlbSBvZiBjb2xsZWN0aW9u +IHdpdGggSXRlbVN0cmluZ0Zvcm1hdCBiZWZvcmUgYWRkIHRvIGNvbGxlY3Rpb24N +CicNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClB1 +YmxpYyBTdWIgQWRkRnJvbUNvbGxlY3Rpb24oQnlWYWwgQ29sbGVjdGlvblRvQXBw +ZW5kIEFzIE9iamVjdCwgT3B0aW9uYWwgQnlWYWwgSXRlbVN0cmluZ0Zvcm1hdCBB +cyBTdHJpbmcgPSB2Yk51bGxTdHJpbmcpDQoNCiAgIERpbSBpdG0gQXMgVmFyaWFu +dA0KDQogICBGb3IgRWFjaCBpdG0gSW4gQ29sbGVjdGlvblRvQXBwZW5kDQogICAg +ICBtX0l0ZW1zLkFkZCBGb3JtYXQoaXRtLCBJdGVtU3RyaW5nRm9ybWF0KQ0KICAg +TmV4dA0KDQpFbmQgU3ViDQoNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0NCicgRnVuY3Rpb246IFRvU3RyaW5nDQonLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQonDQonIFJldHVybiBDb2xsZWN0 +aW9uIGl0ZW1zIGFzIGpvaW5lZCBTdHJpbmcNCicNCicgUGFyYW1ldGVyczoNCicg +ICAgIERlbGltaXRlciAgICAgICAgICAgICAtIChTdHJpbmcpIEV4YW1wbGU6ICIs +ICIgPT4gIkl0ZW0xLCBJdGVtMiwgSXRlbTMiDQonICAgICBJdGVtUHJlZml4ICAg +ICAgICAgICAgLSAoU3RyaW5nKSBQcmVmaXggZm9yIGVhY2ggaXRlbQ0KJyAgICAg +SXRlbVN1ZmZpeCAgICAgICAgICAgIC0gKFN0cmluZykgU3VmZml4IGZvciBlYWNo +IGl0ZW0NCicgICAgIElnbm9yZUVtcHR5VmFsdWUgICAgICAtIChCb29sZWFuKSBk +b24ndCBvdXRwdXQgYW4gZW1wdHkgaXRlbQ0KJyAgICAgSWdub3JlRHVwbGljYXRl +VmFsdWVzIC0gKEJvb2xlYW4pIFRydWUgPSBkb24ndCBvdXRwdXQgZHVwbGljYXRl +IGl0ZW1zDQonDQonIFJldHVybnM6DQonICAgICBTdHJpbmcNCicNCictLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClB1YmxpYyBGdW5jdGlv +biBUb1N0cmluZyhPcHRpb25hbCBCeVZhbCBEZWxpbWl0ZXIgQXMgU3RyaW5nID0g +IiwgIiwgXw0KICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFs +IEl0ZW1QcmVmaXggQXMgU3RyaW5nID0gdmJOdWxsU3RyaW5nLCBfDQogICAgICAg +ICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgSXRlbVN1ZmZpeCBBcyBT +dHJpbmcgPSB2Yk51bGxTdHJpbmcsIF8NCiAgICAgICAgICAgICAgICAgICAgICAg +ICBPcHRpb25hbCBCeVZhbCBJZ25vcmVFbXB0eVZhbHVlIEFzIEJvb2xlYW4gPSBG +YWxzZSwgXw0KICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIEJ5VmFs +IElnbm9yZUR1cGxpY2F0ZVZhbHVlcyBBcyBCb29sZWFuID0gRmFsc2UpIEFzIFN0 +cmluZw0KICAgDQogICBEaW0gcyBBcyBTdHJpbmcNCg0KICAgcyA9IFZCQS5Kb2lu +KFRvU3RyaW5nQXJyYXkoSWdub3JlRW1wdHlWYWx1ZSwgSWdub3JlRHVwbGljYXRl +VmFsdWVzKSwgSXRlbVN1ZmZpeCAmIERlbGltaXRlciAmIEl0ZW1QcmVmaXgpDQog +ICBJZiBMZW4ocykgPiAwIFRoZW4gcyA9IEl0ZW1QcmVmaXggJiBzICYgSXRlbVN1 +ZmZpeA0KDQogICBUb1N0cmluZyA9IHMNCg0KRW5kIEZ1bmN0aW9uDQoNCictLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCicgRnVuY3Rpb246 +IFRvU3RyaW5nQXJyYXkNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0NCicNCicgUmV0dXJuIENvbGxlY3Rpb24gaXRlbXMgYXMgU3RyaW5n +IGFycmF5DQonDQonIFBhcmFtZXRlcnM6DQonICAgICBJZ25vcmVFbXB0eVZhbHVl +ICAgICAgLSAoQm9vbGVhbikgZG9uJ3Qgb3V0cHV0IGFuIGVtcHR5IGl0ZW0NCicg +ICAgIElnbm9yZUR1cGxpY2F0ZVZhbHVlcyAtIChCb29sZWFuKSBUcnVlID0gZG9u +J3Qgb3V0cHV0IGR1cGxpY2F0ZSBpdGVtcw0KJw0KJyBSZXR1cm5zOg0KJyAgICAg +U3RyaW5nIGFycmF5DQonDQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tDQpQdWJsaWMgRnVuY3Rpb24gVG9TdHJpbmdBcnJheShPcHRpb25h +bCBCeVZhbCBJZ25vcmVFbXB0eVZhbHVlIEFzIEJvb2xlYW4gPSBGYWxzZSwgXw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwgQnlWYWwgSWdu +b3JlRHVwbGljYXRlVmFsdWVzIEFzIEJvb2xlYW4gPSBGYWxzZSkgQXMgU3RyaW5n +KCkNCg0KICAgRGltIEl0ZW1BcnJheSgpIEFzIFN0cmluZw0KICAgRGltIE1heEFy +cmF5SW5kZXggQXMgTG9uZw0KICAgRGltIGkgQXMgTG9uZw0KDQogICBNYXhBcnJh +eUluZGV4ID0gbV9JdGVtcy5Db3VudCAtIDENCg0KICAgSWYgTWF4QXJyYXlJbmRl +eCA8IDAgVGhlbg0KICAgICAgVG9TdHJpbmdBcnJheSA9IEl0ZW1BcnJheQ0KICAg +ICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQogICANCiAgIElmIElnbm9yZUVt +cHR5VmFsdWUgVGhlbg0KICAgICAgSWYgSWdub3JlRHVwbGljYXRlVmFsdWVzIFRo +ZW4NCiAgICAgICAgIFRvU3RyaW5nQXJyYXkgPSBSZW1vdmVEdXBsaWNhdGVWYWx1 +ZXMoR2V0QXJyYXlXaXRob3V0RW1wdHlWYWx1ZXMoKSkNCiAgICAgIEVsc2UNCiAg +ICAgICAgIFRvU3RyaW5nQXJyYXkgPSBHZXRBcnJheVdpdGhvdXRFbXB0eVZhbHVl +cygpDQogICAgICBFbmQgSWYNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJ +Zg0KDQogICBSZURpbSBJdGVtQXJyYXkoMCBUbyBNYXhBcnJheUluZGV4KQ0KICAg +Rm9yIGkgPSAwIFRvIE1heEFycmF5SW5kZXgNCiAgICAgIEl0ZW1BcnJheShpKSA9 +IG1fSXRlbXMuSXRlbShpICsgMSkNCiAgIE5leHQNCg0KICAgSWYgSWdub3JlRHVw +bGljYXRlVmFsdWVzIFRoZW4NCiAgICAgIFRvU3RyaW5nQXJyYXkgPSBSZW1vdmVE +dXBsaWNhdGVWYWx1ZXMoSXRlbUFycmF5KQ0KICAgRWxzZQ0KICAgICAgVG9TdHJp +bmdBcnJheSA9IEl0ZW1BcnJheQ0KICAgRW5kIElmDQogICANCkVuZCBGdW5jdGlv +bg0KDQpQcml2YXRlIEZ1bmN0aW9uIEdldEFycmF5V2l0aG91dEVtcHR5VmFsdWVz +KCkgQXMgU3RyaW5nKCkNCg0KICAgRGltIEl0ZW1BcnJheSgpIEFzIFN0cmluZw0K +ICAgRGltIE1heEFycmF5SW5kZXggQXMgTG9uZw0KICAgRGltIEl0ZW1JbmRleCBB +cyBMb25nDQogICBEaW0gaXRtIEFzIFZhcmlhbnQNCg0KICAgTWF4QXJyYXlJbmRl +eCA9IG1fSXRlbXMuQ291bnQgLSAxDQoNCiAgIElmIE1heEFycmF5SW5kZXggPCAw +IFRoZW4NCiAgICAgIEdldEFycmF5V2l0aG91dEVtcHR5VmFsdWVzID0gSXRlbUFy +cmF5DQogICAgICBFeGl0IEZ1bmN0aW9uDQogICBFbmQgSWYNCg0KICAgUmVEaW0g +SXRlbUFycmF5KDAgVG8gTWF4QXJyYXlJbmRleCkNCiAgIEl0ZW1JbmRleCA9IC0x +DQogICBGb3IgRWFjaCBpdG0gSW4gbV9JdGVtcw0KICAgICAgSWYgTGVuKGl0bSkg +PiAwIFRoZW4NCiAgICAgICAgIEl0ZW1JbmRleCA9IEl0ZW1JbmRleCArIDENCiAg +ICAgICAgIEl0ZW1BcnJheShJdGVtSW5kZXgpID0gaXRtDQogICAgICBFbmQgSWYN +CiAgIE5leHQNCiAgIA0KICAgSWYgSXRlbUluZGV4ID0gLTEgVGhlbg0KICAgICAg +RXJhc2UgSXRlbUFycmF5DQogICAgICBHZXRBcnJheVdpdGhvdXRFbXB0eVZhbHVl +cyA9IEl0ZW1BcnJheQ0KICAgICAgRXhpdCBGdW5jdGlvbg0KICAgRW5kIElmDQog +ICANCiAgIElmIEl0ZW1JbmRleCA8IChtX0l0ZW1zLkNvdW50IC0gMSkgVGhlbg0K +ICAgICAgUmVEaW0gUHJlc2VydmUgSXRlbUFycmF5KDAgVG8gSXRlbUluZGV4KQ0K +ICAgRW5kIElmDQogICANCiAgIEdldEFycmF5V2l0aG91dEVtcHR5VmFsdWVzID0g +SXRlbUFycmF5DQoNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIFJl +bW92ZUR1cGxpY2F0ZVZhbHVlcyhCeVJlZiBBcnJheVRvQ2hlY2soKSBBcyBTdHJp +bmcpIEFzIFN0cmluZygpDQoNCiAgIERpbSBJdGVtQXJyYXkoKSBBcyBTdHJpbmcN +CiAgIERpbSBNYXhBcnJheUluZGV4IEFzIExvbmcNCiAgIERpbSBJdGVtSW5kZXgg +QXMgTG9uZw0KICAgRGltIEFycmF5SXRlbSBBcyBWYXJpYW50DQoNCiAgIE1heEFy +cmF5SW5kZXggPSBVQm91bmQoQXJyYXlUb0NoZWNrKQ0KDQogICBJZiBNYXhBcnJh +eUluZGV4ID0gMCBUaGVuDQogICAgICBSZW1vdmVEdXBsaWNhdGVWYWx1ZXMgPSBB +cnJheVRvQ2hlY2sNCiAgICAgIEV4aXQgRnVuY3Rpb24NCiAgIEVuZCBJZg0KICAg +DQogICBSZURpbSBJdGVtQXJyYXkoTWF4QXJyYXlJbmRleCkNCiAgIA0KICAgSXRl +bUluZGV4ID0gLTENCiAgIEZvciBFYWNoIEFycmF5SXRlbSBJbiBBcnJheVRvQ2hl +Y2sNCiAgICAgIElmIE5vdCBWYWx1ZUV4aXN0c0luQXJyYXkoSXRlbUFycmF5LCBB +cnJheUl0ZW0sIEl0ZW1JbmRleCkgVGhlbg0KICAgICAgICAgSXRlbUluZGV4ID0g +SXRlbUluZGV4ICsgMQ0KICAgICAgICAgSXRlbUFycmF5KEl0ZW1JbmRleCkgPSBB +cnJheUl0ZW0NCiAgICAgIEVuZCBJZg0KICAgTmV4dA0KICAgDQogICBJZiBJdGVt +SW5kZXggPCAobV9JdGVtcy5Db3VudCAtIDEpIFRoZW4NCiAgICAgIFJlRGltIFBy +ZXNlcnZlIEl0ZW1BcnJheSgwIFRvIEl0ZW1JbmRleCkNCiAgIEVuZCBJZg0KICAg +DQogICBSZW1vdmVEdXBsaWNhdGVWYWx1ZXMgPSBJdGVtQXJyYXkNCiAgIA0KRW5k +IEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gVmFsdWVFeGlzdHNJbkFycmF5 +KEJ5UmVmIEFycmF5VG9DaGVjaygpIEFzIFN0cmluZywgQnlWYWwgVmFsdWVUb0No +ZWNrIEFzIFN0cmluZywgQnlWYWwgQ2hlY2tVbnRpbEFycmF5SW5kZXggQXMgTG9u +ZykgQXMgQm9vbGVhbg0KICAgDQogICBEaW0gaSBBcyBMb25nDQogICANCiAgIElm +IENoZWNrVW50aWxBcnJheUluZGV4IDwgMCBUaGVuDQogICAgICBFeGl0IEZ1bmN0 +aW9uDQogICBFbmQgSWYNCiAgIA0KICAgRm9yIGkgPSBMQm91bmQoQXJyYXlUb0No +ZWNrKSBUbyBDaGVja1VudGlsQXJyYXlJbmRleA0KICAgICAgSWYgU3RyQ29tcChB +cnJheVRvQ2hlY2soaSksIFZhbHVlVG9DaGVjaywgdmJCaW5hcnlDb21wYXJlKSA9 +IDAgVGhlbg0KICAgICAgICAgVmFsdWVFeGlzdHNJbkFycmF5ID0gVHJ1ZQ0KICAg +ICAgICAgRXhpdCBGdW5jdGlvbg0KICAgICAgRW5kIElmDQogICBOZXh0DQogICAN +CkVuZCBGdW5jdGlvbg0K + + 20250609094839 + text/StringCollection.cls + + + diff --git a/source/tbldefs/L10n_Dict.sql b/source/tbldefs/L10n_Dict.sql new file mode 100644 index 0000000..e9b8f9a --- /dev/null +++ b/source/tbldefs/L10n_Dict.sql @@ -0,0 +1,6 @@ +CREATE TABLE [L10n_Dict] ( + [LangCode] VARCHAR (2), + [KeyText] VARCHAR (255), + [LngText] VARCHAR (255), + CONSTRAINT [PK_L10n_Dict] PRIMARY KEY ([LangCode], [KeyText]) +) diff --git a/source/tbldefs/L10n_Dict.xml b/source/tbldefs/L10n_Dict.xml new file mode 100644 index 0000000..429fb56 --- /dev/null +++ b/source/tbldefs/L10n_Dict.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/USysRegInfo.sql b/source/tbldefs/USysRegInfo.sql new file mode 100644 index 0000000..35e1b05 --- /dev/null +++ b/source/tbldefs/USysRegInfo.sql @@ -0,0 +1,6 @@ +CREATE TABLE [USysRegInfo] ( + [Subkey] VARCHAR (255), + [Type] LONG, + [ValName] VARCHAR (255), + [Value] VARCHAR (255) +) diff --git a/source/tbldefs/USysRegInfo.xml b/source/tbldefs/USysRegInfo.xml new file mode 100644 index 0000000..703a2c7 --- /dev/null +++ b/source/tbldefs/USysRegInfo.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/tabFilterControls.sql b/source/tbldefs/tabFilterControls.sql new file mode 100644 index 0000000..109aab4 --- /dev/null +++ b/source/tbldefs/tabFilterControls.sql @@ -0,0 +1,12 @@ +CREATE TABLE [tabFilterControls] ( + [DataField] VARCHAR (255), + [DataType] VARCHAR (255), + [RelationalOperator] VARCHAR (255), + [Control] VARCHAR (255), + [Control2] VARCHAR (255), + [WildCardSuffix] BIT, + [WildCardPrefix] BIT, + [RelationalOperatorNot] BIT, + [CreateControl] BIT, + [ControlType] LONG +) diff --git a/source/tbldefs/tabFilterControls.xml b/source/tbldefs/tabFilterControls.xml new file mode 100644 index 0000000..cd6bd6c --- /dev/null +++ b/source/tbldefs/tabFilterControls.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/tabRelationalOperators.sql b/source/tbldefs/tabRelationalOperators.sql new file mode 100644 index 0000000..17d01e2 --- /dev/null +++ b/source/tbldefs/tabRelationalOperators.sql @@ -0,0 +1,5 @@ +CREATE TABLE [tabRelationalOperators] ( + [RelationalOperator] VARCHAR (20) CONSTRAINT [PrimaryKey] PRIMARY KEY UNIQUE NOT NULL, + [RelationalOperatorCode] VARCHAR (255), + [OrderPos] BYTE +) diff --git a/source/tbldefs/tabRelationalOperators.xml b/source/tbldefs/tabRelationalOperators.xml new file mode 100644 index 0000000..2f185a5 --- /dev/null +++ b/source/tbldefs/tabRelationalOperators.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/tabSqlFieldDataTypes.sql b/source/tbldefs/tabSqlFieldDataTypes.sql new file mode 100644 index 0000000..fbff215 --- /dev/null +++ b/source/tbldefs/tabSqlFieldDataTypes.sql @@ -0,0 +1,4 @@ +CREATE TABLE [tabSqlFieldDataTypes] ( + [SqlFieldDataType] VARCHAR (20) CONSTRAINT [PrimaryKey] PRIMARY KEY UNIQUE NOT NULL, + [SqlFieldDataTypeCode] VARCHAR (255) +) diff --git a/source/tbldefs/tabSqlFieldDataTypes.xml b/source/tbldefs/tabSqlFieldDataTypes.xml new file mode 100644 index 0000000..c9de816 --- /dev/null +++ b/source/tbldefs/tabSqlFieldDataTypes.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/tabSqlLangFormat.sql b/source/tbldefs/tabSqlLangFormat.sql new file mode 100644 index 0000000..4dc3127 --- /dev/null +++ b/source/tbldefs/tabSqlLangFormat.sql @@ -0,0 +1,6 @@ +CREATE TABLE [tabSqlLangFormat] ( + [SqlLang] VARCHAR (20) CONSTRAINT [PrimaryKey] PRIMARY KEY UNIQUE NOT NULL, + [SqlDateFormat] VARCHAR (255), + [SqlBooleanTrueString] VARCHAR (255), + [SqlWildCardString] VARCHAR (255) +) diff --git a/source/tbldefs/tabSqlLangFormat.xml b/source/tbldefs/tabSqlLangFormat.xml new file mode 100644 index 0000000..3eb9dfa --- /dev/null +++ b/source/tbldefs/tabSqlLangFormat.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tbldefs/usys_AppFiles.sql b/source/tbldefs/usys_AppFiles.sql new file mode 100644 index 0000000..48091bb --- /dev/null +++ b/source/tbldefs/usys_AppFiles.sql @@ -0,0 +1,7 @@ +CREATE TABLE [usys_AppFiles] ( + [id] VARCHAR (255) CONSTRAINT [PrimaryKey] PRIMARY KEY UNIQUE NOT NULL, + [version] VARCHAR (10), + [file] LONGBINARY, + [SccRev] VARCHAR (50), + [url] VARCHAR (255) +) diff --git a/source/tbldefs/usys_AppFiles.xml b/source/tbldefs/usys_AppFiles.xml new file mode 100644 index 0000000..1a47b1a --- /dev/null +++ b/source/tbldefs/usys_AppFiles.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/themes/Office.thmx b/source/themes/Office.thmx new file mode 100644 index 0000000000000000000000000000000000000000..5773f1cf753062e8cf0d62bae8354211673889f2 GIT binary patch literal 3330 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 literal 0 HcmV?d00001 diff --git a/source/vbe-project.json b/source/vbe-project.json new file mode 100644 index 0000000..486cb26 --- /dev/null +++ b/source/vbe-project.json @@ -0,0 +1,17 @@ +{ + "Info": { + "Class": "clsDbVbeProject", + "Description": "VBE Project" + }, + "Items": { + "Name": "ACLibFilterFormWizard", + "Description": "Assistent für die Erstellung von Filterformularen", + "FileName": "ACLibFilterFormWizard.accdb", + "HelpFile": "", + "HelpContextId": 0, + "ConditionalCompilationArguments": "USELOCALIZATION = 1 : L10nMsgBoxReplacement = 1", + "Mode": 0, + "Protection": 0, + "Type": 100 + } +} diff --git a/source/vbe-references.json b/source/vbe-references.json new file mode 100644 index 0000000..3acd933 --- /dev/null +++ b/source/vbe-references.json @@ -0,0 +1,16 @@ +{ + "Info": { + "Class": "clsDbVbeReference", + "Description": "VBE References" + }, + "Items": { + "DAO": { + "GUID": "{4AC9E1DA-5BAD-4AC7-86E3-24F4CDCECA28}", + "Version": "12.0" + }, + "VBIDE": { + "GUID": "{0002E157-0000-0000-C000-000000000046}", + "Version": "5.3" + } + } +} diff --git a/source/vcs-options.json b/source/vcs-options.json new file mode 100644 index 0000000..8beb876 --- /dev/null +++ b/source/vcs-options.json @@ -0,0 +1,81 @@ +{ + "Info": { + "AddinVersion": "4.1.2-jp.2", + "AccessVersion": "16.0 64-bit" + }, + "Options": { + "ExportFolder": "\\source", + "ShowDebug": false, + "UseFastSave": true, + "UseMergeBuild": false, + "UseGitIntegration": false, + "SavePrintVars": true, + "ExportPrintSettings": { + "Orientation": true, + "PaperSize": true, + "Duplex": false, + "PrintQuality": false, + "DisplayFrequency": false, + "Collate": false, + "Resolution": false, + "DisplayFlags": false, + "Color": false, + "Copies": false, + "ICMMethod": false, + "DefaultSource": false, + "Scale": false, + "ICMIntent": false, + "FormName": false, + "PaperLength": false, + "DitherType": false, + "MediaType": false, + "PaperWidth": false, + "TTOption": false + }, + "SaveQuerySQL": true, + "FormatSQL": true, + "ForceImportOriginalQuerySQL": false, + "SaveTableSQL": true, + "SplitLayoutFromVBA": true, + "StripPublishOption": true, + "SanitizeColors": 1, + "SanitizeLevel": 2, + "ExtractThemeFiles": false, + "TablesToExportData": { + "L10n_Dict": { + "Format": "XML Format" + }, + "tabRelationalOperators": { + "Format": "XML Format" + }, + "tabSqlFieldDataTypes": { + "Format": "XML Format" + }, + "tabSqlLangFormat": { + "Format": "XML Format" + }, + "usys_AppFiles": { + "Format": "XML Format" + }, + "USysRegInfo": { + "Format": "Tab Delimited" + }, + "USysRibbons": { + "Format": "Tab Delimited" + } + }, + "SchemaExports": { + }, + "RunBeforeExport": "", + "RunAfterExport": "", + "RunBeforeBuild": "", + "RunAfterBuild": "", + "RunBeforeMerge": "", + "RunAfterMerge": "", + "ShowVCSLegacy": true, + "HashAlgorithm": "SHA256", + "UseShortHash": true, + "BreakOnError": false, + "PreserveRubberDuckID": false + } +} From 4f6183a2df12e5aee423382c7b1c5e4beda416c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= Date: Mon, 9 Jun 2025 20:34:57 +0200 Subject: [PATCH 2/6] + add workflow files --- .github/workflows/build-accdb.yml | 50 ++++++++++++ .github/workflows/build-release-zip-file.yml | 83 ++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 .github/workflows/build-accdb.yml create mode 100644 .github/workflows/build-release-zip-file.yml diff --git a/.github/workflows/build-accdb.yml b/.github/workflows/build-accdb.yml new file mode 100644 index 0000000..cb1fd74 --- /dev/null +++ b/.github/workflows/build-accdb.yml @@ -0,0 +1,50 @@ +name: Build-accdb (on push, pull) + +on: + push: + branches: + - main + - feature/** + - bugfix/** + paths: + - 'source/**' + pull_request: + branches: + - main + workflow_dispatch: + +permissions: + contents: write + id-token: write + attestations: write + +jobs: + build: + runs-on: [self-hosted, Windows, Office] + + steps: + - name: "Checkout code for release tag" + uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name }} + + - name: "Build Access file (accdb/accde)" + id: build_access_file + uses: AccessCodeLib/msaccess-vcs-build@main + with: + source-dir: "source" + target-dir: "access-add-in" + timeout-minutes: 10 + + - name: "Upload Build Artifact" + uses: actions/upload-artifact@v4 + id: "upload" + with: + name: "Install files" + path: "./access-add-in/*" + if-no-files-found: warn + - name: "Attestation" + uses: actions/attest-build-provenance@v2 + with: + subject-name: "Install files" + subject-digest: sha256:${{ steps.upload.outputs.artifact-digest }} diff --git a/.github/workflows/build-release-zip-file.yml b/.github/workflows/build-release-zip-file.yml new file mode 100644 index 0000000..7eba80f --- /dev/null +++ b/.github/workflows/build-release-zip-file.yml @@ -0,0 +1,83 @@ +name: Build-install-zip-file (on release) + +on: + release: + types: [published] + +permissions: + contents: write + id-token: write + attestations: write + +jobs: + build: + runs-on: [self-hosted, Windows, Office] + + steps: + - name: "Checkout code for release tag" + uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name }} + + - name: "Build Access file (accdb/accde)" + id: build_access_file + uses: AccessCodeLib/msaccess-vcs-build@main + with: + source-dir: "source" + target-dir: "access-add-in" + file-name: "ACLibFilterFormWizard.accda" + timeout-minutes: 10 + + - name: "Create versioned ZIP file" + run: | + $zipName = "ACLibImportWizard_${{ github.event.release.tag_name }}.zip" + Compress-Archive -Path .\access-add-in\* -DestinationPath $zipName + echo "ZIP_NAME=$zipName" | Out-File -FilePath $env:GITHUB_ENV -Append + + - name: "Upload ZIP to GitHub Release" + uses: softprops/action-gh-release@v1 + with: + files: ${{ env.ZIP_NAME }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: "Calculate SHA256 of ZIP" + id: hash + shell: pwsh + run: | + $zipName = "${{ env.ZIP_NAME }}" + $hash = Get-FileHash -Algorithm SHA256 -Path $zipName + $digest = "sha256:$($hash.Hash.ToLower())" + echo "ZIP_DIGEST=$digest" | Out-File -FilePath $env:GITHUB_ENV -Append + echo "digest=$digest" >> $env:GITHUB_OUTPUT + + - name: "Attestation" + uses: actions/attest-build-provenance@v2 + id: attestation + with: + subject-name: "${{ env.ZIP_NAME }}" + subject-digest: "${{ steps.hash.outputs.digest }}" + + - name: "Update release description with attestation URL" + shell: pwsh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + TAG: ${{ github.event.release.tag_name }} + run: | + $ErrorActionPreference = "Stop" + + # get current release notes + $oldBody = gh release view $env:TAG --repo $env:REPO --json body --template "{{.body}}" + + # build Attestation URL + $attestationId = "${{ steps.attestation.outputs.attestation-id }}" + $attestationUrl = "https://github.com/$($env:REPO)/attestations/$attestationId" + + # join release notes with Attestation url + $newBody = "$oldBody`n`nAttestation: $attestationUrl" + + # save release notes + gh release edit $env:TAG --repo $env:REPO --notes "$newBody" + + From dc825c8782a3f3be07e848b543a1195f7686e380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= <115746022+josef-poetzl@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:36:36 +0200 Subject: [PATCH 3/6] Update build-release-zip-file.yml --- .github/workflows/build-release-zip-file.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-release-zip-file.yml b/.github/workflows/build-release-zip-file.yml index 7eba80f..ae73c08 100644 --- a/.github/workflows/build-release-zip-file.yml +++ b/.github/workflows/build-release-zip-file.yml @@ -30,7 +30,7 @@ jobs: - name: "Create versioned ZIP file" run: | - $zipName = "ACLibImportWizard_${{ github.event.release.tag_name }}.zip" + $zipName = "ACLibFilterFormWizard_${{ github.event.release.tag_name }}.zip" Compress-Archive -Path .\access-add-in\* -DestinationPath $zipName echo "ZIP_NAME=$zipName" | Out-File -FilePath $env:GITHUB_ENV -Append From e51a066f5cfa62afb67f1d18abd26870caadcb89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= Date: Mon, 9 Jun 2025 20:44:20 +0200 Subject: [PATCH 4/6] update CodeLib modules --- source/modules/FileTools.bas | 48 +++- source/modules/SqlTools.cls | 273 +++++++++++++++++++---- source/modules/StringCollection.cls | 107 ++++++++- source/modules/WinApiShortcutMenu.cls | 8 +- source/modules/modMSAccessVcsSupport.bas | 12 + source/vcs-options.json | 2 +- 6 files changed, 394 insertions(+), 56 deletions(-) create mode 100644 source/modules/modMSAccessVcsSupport.bas diff --git a/source/modules/FileTools.bas b/source/modules/FileTools.bas index 9fd2547..d5bf826 100644 --- a/source/modules/FileTools.bas +++ b/source/modules/FileTools.bas @@ -58,7 +58,7 @@ Private Declare PtrSafe Function API_GetTempFilename Lib "kernel32" Alias "GetTe ByVal wUnique As Long, _ ByVal lpTempFileName As String) As Long -Private Declare PtrSafe Function API_ShellExecuteA Lib "shell32.dll" ( _ +Private Declare PtrSafe Function API_ShellExecuteA Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal Hwnd As LongPtr, _ ByVal lOperation As String, _ ByVal lpFile As String, _ @@ -81,7 +81,7 @@ Private Declare Function API_GetTempFilename Lib "kernel32" Alias "GetTempFileNa ByVal wUnique As Long, _ ByVal lpTempFileName As String) As Long -Private Declare Function API_ShellExecuteA Lib "shell32.dll" ( _ +Private Declare Function API_ShellExecuteA Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal Hwnd As Long, _ ByVal lOperation As String, _ ByVal lpFile As String, _ @@ -848,26 +848,60 @@ End Function ' Boolean ' '--------------------------------------------------------------------------------------- -Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode As Boolean = False) As Boolean +Public Function OpenFile(ByVal FilePath As String, Optional ByVal ReadOnlyMode As Boolean = False, _ + Optional ByVal DefaultFileFolderIfFileNameOnly As String = vbNullString) As Boolean Const FileNotFoundErrorTextTemplate As String = "File '{FilePath}' not found." Dim FileNotFoundErrorText As String + Dim FilePath2Open As String - If Len(VBA.Dir(FilePath)) = 0 Then + If Len(DefaultFileFolderIfFileNameOnly) > 0 Then + FilePath2Open = BuildFullFileName(FilePath, DefaultFileFolderIfFileNameOnly) + Else + FilePath2Open = FilePath + End If + + If Len(VBA.Dir(FilePath2Open)) = 0 Then #If USELOCALIZATION = 1 Then - FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath) + FileNotFoundErrorText = Replace(L10n.Text(FileNotFoundErrorTextTemplate), "{FilePath}", FilePath2Open) #Else - FileNotFoundErrorText = Replace(FileNotFoundErrorTextTemplate, "{FilePath}", FilePath) + FileNotFoundErrorText = Replace(FileNotFoundErrorTextTemplate, "{FilePath}", FilePath2Open) #End If Err.Raise VbaErrNo_FileNotFound, "FileTools.OpenFile", FileNotFoundErrorText Exit Function End If - OpenFile = ShellExecute(FilePath, "open") + OpenFile = ShellExecute(FilePath2Open, "open") End Function +Public Function BuildFullFileName(ByVal FileName As String, ByVal DefaultFileFolderIfFileNameOnly As String) As String + + If Len(DefaultFileFolderIfFileNameOnly) = 0 Then + BuildFullFileName = FileName + Exit Function + End If + + If Left(FileName, 2) = "\\" Then 'Win-Share + BuildFullFileName = FileName + Exit Function + End If + + If Mid(FileName, 2, 1) = ":" Then 'Laufwerksbuchstabe + BuildFullFileName = FileName + Exit Function + End If + + If Left(FileName, 1) <> "\" And Right(DefaultFileFolderIfFileNameOnly, 1) <> "\" Then + DefaultFileFolderIfFileNameOnly = DefaultFileFolderIfFileNameOnly & "\" + End If + + BuildFullFileName = DefaultFileFolderIfFileNameOnly & FileName + +End Function + + '--------------------------------------------------------------------------------------- ' Function: OpenFilePath '--------------------------------------------------------------------------------------- diff --git a/source/modules/SqlTools.cls b/source/modules/SqlTools.cls index a3c855b..997606c 100644 --- a/source/modules/SqlTools.cls +++ b/source/modules/SqlTools.cls @@ -55,9 +55,13 @@ Private Const SQL_DEFAULT_WILDCARD As String = "%" ' % = default value, Private Const SqlAndConcatString As String = " And " Private Const SqlOrConcatString As String = " Or " -Private m_SqlDateFormat As String -Private m_SqlBooleanTrueString As String -Private m_SqlWildCardString As String +Private Type SqlFormatSettings + SqlDateFormat As String + SqlBooleanTrueString As String + SqlWildCardString As String +End Type + +Private m_SqlFormat As SqlFormatSettings Private Const ResultTextIfNull As String = "Null" @@ -91,9 +95,61 @@ Public Enum SqlLogicalOperator SQL_CommaSeparator = 3 End Enum +Public Enum SqlDialect + SQL_Custom = 0 + SQL_DAO = 1 + SQL_TSQL = 2 +End Enum + '################################## ' Group: Class support +'--------------------------------------------------------------------------------------- +' Function: SelectDialect +'--------------------------------------------------------------------------------------- +' +' Create a new instance with basic settings of the selected dialect +' +' Parameters: +' +' UseDialect - use setting of dialect (as base) +' NewSqlDateFormat - use this date format instead of base dialect +' NewSqlBooleanTrueString - use this text for true instead of base dialect +' NewSqlWildCardString - use this wildcard string instead of base dialect +' +' Returns: +' +' SqlTools instance with config form base +' +' See Also: +' NewInstance +' +'--------------------------------------------------------------------------------------- +Public Function FromDialect(ByVal UseDialect As SqlDialect, _ + Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DATEFORMAT, _ + Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _ + Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD) As SqlTools + + Dim NewSlqToolsInstance As SqlTools + + Select Case UseDialect + Case SqlDialect.SQL_DAO + Set NewSlqToolsInstance = Me.DAO + Case SqlDialect.SQL_TSQL + Set NewSlqToolsInstance = Me.TSql + Case Else + Set NewSlqToolsInstance = Me.Clone + End Select + + If Len(NewSqlDateFormat) > 0 Then NewSlqToolsInstance.SqlDateFormat = NewSqlDateFormat + If Len(NewSqlBooleanTrueString) > 0 Then NewSlqToolsInstance.SqlBooleanTrueString = NewSqlBooleanTrueString + If Len(NewSqlWildCardString) > 0 Then NewSlqToolsInstance.SqlWildCardString = NewSqlWildCardString + + Set FromDialect = NewSlqToolsInstance + +End Function + + '--------------------------------------------------------------------------------------- ' Function: Clone '--------------------------------------------------------------------------------------- @@ -118,7 +174,6 @@ Public Function Clone(Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DA Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _ Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD) As SqlTools - If Len(NewSqlDateFormat) = 0 Then NewSqlDateFormat = Me.SqlDateFormat If Len(NewSqlBooleanTrueString) = 0 Then NewSqlBooleanTrueString = Me.SqlBooleanTrueString If Len(NewSqlWildCardString) = 0 Then NewSqlWildCardString = Me.SqlWildCardString @@ -151,6 +206,66 @@ Public Function NewInstance(ByVal NewSqlDateFormat As String, _ End Function +'--------------------------------------------------------------------------------------- +' Function: InitSqlDialect +'--------------------------------------------------------------------------------------- +' +' Config sql text output format for specific sql dialect +' +' Parameters: +' +' SqlDateFormat - output string format for date values +' SqlBooleanTrueString - output string format for boolean values +' SqlWildCardString - wildcard string (e.g. * .. dao, % .. T-SQL) +' +'--------------------------------------------------------------------------------------- +Friend Sub InitSqlDialect(ByVal UseDialect As SqlDialect, _ + Optional ByVal NewSqlDateFormat As String = SQL_DEFAULT_DATEFORMAT, _ + Optional ByVal NewSqlBooleanTrueString As String = SQL_DEFAULT_BOOLTRUESTRING, _ + Optional ByVal NewSqlWildCardString As String = SQL_DEFAULT_WILDCARD) + + Dim SqlFormat As SqlFormatSettings + + Select Case UseDialect + Case SqlDialect.SQL_DAO + SqlFormat = DaoSqlFormat + Case SqlDialect.SQL_TSQL + SqlFormat = TSqlSqlFormat + Case Else + ' set nothing => use NewSql* parameter + End Select + + If Len(NewSqlDateFormat) > 0 Then SqlFormat.SqlDateFormat = NewSqlDateFormat + If Len(NewSqlBooleanTrueString) > 0 Then SqlFormat.SqlBooleanTrueString = NewSqlBooleanTrueString + If Len(NewSqlWildCardString) > 0 Then SqlFormat.SqlWildCardString = NewSqlWildCardString + + InitSqlFormat SqlFormat.SqlDateFormat, SqlFormat.SqlBooleanTrueString, SqlFormat.SqlWildCardString + + +End Sub + +'--------------------------------------------------------------------------------------- +' Function: InitSqlFormat +'--------------------------------------------------------------------------------------- +' +' Config sql text output format for specific sql dialect +' +' Parameters: +' +' SqlDateFormat - output string format for date values +' SqlBooleanTrueString - output string format for boolean values +' SqlWildCardString - wildcard string (e.g. * .. dao, % .. T-SQL) +' +'--------------------------------------------------------------------------------------- +Friend Sub InitSqlFormat(ByVal SqlDateFormat As String, _ + ByVal SqlBooleanTrueString As String, _ + ByVal SqlWildCardString As String) + + Me.SqlDateFormat = SqlDateFormat + Me.SqlBooleanTrueString = SqlBooleanTrueString + Me.SqlWildCardString = SqlWildCardString + +End Sub '################################## ' Group: SQL dialect preferences @@ -163,7 +278,21 @@ End Function ' '--------------------------------------------------------------------------------------- Public Property Get DAO() As SqlTools - Set DAO = Me.NewInstance("\#yyyy-mm-dd hh:nn:ss\#", "True", "*") + With DaoSqlFormat + Set DAO = Me.NewInstance(.SqlDateFormat, .SqlBooleanTrueString, .SqlWildCardString) + End With +End Property + +Private Property Get DaoSqlFormat() As SqlFormatSettings + + Dim SqlFormat As SqlFormatSettings + + SqlFormat.SqlDateFormat = "\#yyyy-mm-dd hh:nn:ss\#" + SqlFormat.SqlBooleanTrueString = "True" + SqlFormat.SqlWildCardString = "*" + + DaoSqlFormat = SqlFormat + End Property '--------------------------------------------------------------------------------------- @@ -174,7 +303,21 @@ End Property ' '--------------------------------------------------------------------------------------- Public Property Get TSql() As SqlTools - Set TSql = Me.NewInstance("'yyyymmdd hh:nn:ss'", "1", "%") + With TSqlSqlFormat + Set TSql = Me.NewInstance(.SqlDateFormat, .SqlBooleanTrueString, .SqlWildCardString) + End With +End Property + +Private Property Get TSqlSqlFormat() As SqlFormatSettings + + Dim SqlFormat As SqlFormatSettings + + SqlFormat.SqlDateFormat = "'yyyymmdd hh:nn:ss'" + SqlFormat.SqlBooleanTrueString = "1" + SqlFormat.SqlWildCardString = "%" + + TSqlSqlFormat = SqlFormat + End Property ' Configuration for SQL dialect @@ -187,15 +330,15 @@ End Property ' '--------------------------------------------------------------------------------------- Public Property Get SqlWildCardString() As String - If Len(m_SqlWildCardString) > 0 Then - SqlWildCardString = m_SqlWildCardString + If Len(m_SqlFormat.SqlWildCardString) > 0 Then + SqlWildCardString = m_SqlFormat.SqlWildCardString Else SqlWildCardString = SQL_DEFAULT_WILDCARD End If End Property Public Property Let SqlWildCardString(ByVal NewValue As String) - m_SqlWildCardString = NewValue + m_SqlFormat.SqlWildCardString = NewValue End Property '--------------------------------------------------------------------------------------- @@ -206,15 +349,15 @@ End Property ' '--------------------------------------------------------------------------------------- Public Property Get SqlDateFormat() As String - If Len(m_SqlDateFormat) > 0 Then - SqlDateFormat = m_SqlDateFormat + If Len(m_SqlFormat.SqlDateFormat) > 0 Then + SqlDateFormat = m_SqlFormat.SqlDateFormat Else SqlDateFormat = SQL_DEFAULT_DATEFORMAT End If End Property Public Property Let SqlDateFormat(ByVal NewValue As String) - m_SqlDateFormat = NewValue + m_SqlFormat.SqlDateFormat = NewValue End Property '--------------------------------------------------------------------------------------- @@ -225,15 +368,15 @@ End Property ' '--------------------------------------------------------------------------------------- Public Property Get SqlBooleanTrueString() As String - If Len(m_SqlBooleanTrueString) > 0 Then - SqlBooleanTrueString = m_SqlBooleanTrueString + If Len(m_SqlFormat.SqlBooleanTrueString) > 0 Then + SqlBooleanTrueString = m_SqlFormat.SqlBooleanTrueString Else SqlBooleanTrueString = SQL_DEFAULT_BOOLTRUESTRING End If End Property Public Property Let SqlBooleanTrueString(ByVal NewValue As String) - m_SqlBooleanTrueString = NewValue + m_SqlFormat.SqlBooleanTrueString = NewValue End Property '################################## @@ -309,11 +452,9 @@ Public Function BuildCriteria(ByVal FieldName As String, ByVal FieldDataType As Exit Function End If - If (RelationalOperator And SQL_SplitValueToArray) = SQL_SplitValueToArray Then - If InStr(1, FilterValue, ";") > 0 Then - FilterValue = Split(CharTrim(FilterValue, ";"), ";") - End If - RelationalOperator = RelationalOperator Xor SQL_SplitValueToArray + If TryBuildSplitToArrayCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria) Then + BuildCriteria = Criteria + Exit Function End If 'Special cases (part 2): @@ -655,20 +796,20 @@ Private Function ConfigNumericSpecials( _ End Function -Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteValue As Boolean = False) As Double +Private Function GetNextDigitNumber(ByVal NumValue As Variant, Optional AddToAbsoluteValue As Boolean = False) As Double Dim TestString As String - Dim KommaPos As Long - Dim digits As Long + Dim DecSignPos As Long + Dim Digits As Long Dim IsNegativ As Boolean Const AdditionalDecDigit As String = "1" Const AdditionalDecDigitKorr As Double = 0.1 - TestString = Trim(CStr(ConvertToNumeric(Replace(CStr(Z), "*", AdditionalDecDigit)))) + TestString = Trim(CStr(ConvertToNumeric(Replace(CStr(NumValue), "*", AdditionalDecDigit)))) If Left(TestString, 1) = "-" And (Not AddToAbsoluteValue) Then - GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) + GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString)) Exit Function End If @@ -676,26 +817,26 @@ Private Function GetNextDigitNumber(ByVal Z As Variant, Optional AddToAbsoluteVa IsNegativ = True End If - KommaPos = InStrRev(TestString, DecimalMarker) - If KommaPos = 0 Then ' next integer + DecSignPos = InStrRev(TestString, DecimalMarker) + If DecSignPos = 0 Then ' next integer If AddToAbsoluteValue And IsNegativ Then - GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) - 1 + GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString)) - 1 Else - GetNextDigitNumber = CDbl(Replace(CStr(Z), "*", vbNullString)) + 1 + GetNextDigitNumber = CDbl(Replace(CStr(NumValue), "*", vbNullString)) + 1 End If Exit Function End If - digits = Len(TestString) - KommaPos - 1 + Digits = Len(TestString) - DecSignPos - 1 If Left(TestString, 1) = "-" Then IsNegativ = True End If If AddToAbsoluteValue And IsNegativ Then - GetNextDigitNumber = CDbl(TestString) + AdditionalDecDigitKorr / 10 ^ digits - AdditionalDecDigitKorr / 10 ^ (digits - 1) + GetNextDigitNumber = CDbl(TestString) + AdditionalDecDigitKorr / 10 ^ Digits - AdditionalDecDigitKorr / 10 ^ (Digits - 1) Else - GetNextDigitNumber = CDbl(TestString) + (1 - AdditionalDecDigitKorr) / 10 ^ digits + GetNextDigitNumber = CDbl(TestString) + (1 - AdditionalDecDigitKorr) / 10 ^ Digits End If End Function @@ -703,11 +844,11 @@ End Function Private Property Get DecimalMarker() As String Static DecChar As String - Dim X As String + Dim CheckString As String If Len(DecChar) = 0 Then - X = Trim(CStr(1.2)) - DecChar = Mid(X, 2, 1) + CheckString = Trim(CStr(1.2)) + DecChar = Mid(CheckString, 2, 1) End If DecimalMarker = DecChar @@ -807,7 +948,7 @@ Private Function TryBuildWildCardSuffixOrPreBuildParams(ByVal FieldName As Strin Else ' Consider the whole day ... FieldName >= DateValue and FieldName < DateAdd("d", 1, FilterValue)) Criteria = BuildCriteria(FieldName, FieldDataType, SQL_GreaterThan + SQL_Equal, FilterValue, , , False) & _ SqlAndConcatString & _ - BuildCriteria(FieldName, FieldDataType, SQL_LessThan, DateAdd("d", 1, CDate(CLng(FilterValue))), , , False) + BuildCriteria(FieldName, FieldDataType, SQL_LessThan, DateAdd("d", 1, CDate(CLng(CDate(FilterValue)))), , , False) TryBuildWildCardSuffixOrPreBuildParams = True Exit Function End If @@ -815,7 +956,7 @@ Private Function TryBuildWildCardSuffixOrPreBuildParams(ByVal FieldName As Strin If (RelationalOperator And SQL_Equal) = SQL_Equal Then RelationalOperator = RelationalOperator - SQL_Equal End If - FilterValue = DateAdd("d", 1, CDate(CLng(FilterValue))) + FilterValue = DateAdd("d", 1, CDate(CLng(CDate(FilterValue)))) End If ElseIf FieldDataType = SQL_Numeric Then If (RelationalOperator And SQL_LessThan) = 0 Then ' no < daher: >, >= or only = @@ -897,11 +1038,63 @@ Private Function TryBuildNumericSpecialCasesCriteria(ByRef FieldName As String, End Function -Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _ + +Private Function TryBuildSplitToArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _ ByRef RelationalOperator As SqlRelationalOperators, _ ByRef FilterValue As Variant, _ ByRef IgnoreValue As Variant, _ ByRef Criteria As String) As Boolean + + Dim ValueSplitted As Boolean + Dim CriteriaConcatString As String + + If (RelationalOperator And SQL_SplitValueToArray) = SQL_SplitValueToArray Then + + RelationalOperator = RelationalOperator Xor SQL_SplitValueToArray + + If InStr(1, FilterValue, SqlOrConcatString, vbTextCompare) > 0 Then + FilterValue = Replace(FilterValue, SqlOrConcatString, ";") + End If + + If InStr(1, FilterValue, SqlAndConcatString, vbTextCompare) > 0 Then + FilterValue = Replace(FilterValue, SqlAndConcatString, "+") + End If + + If InStr(1, FilterValue, ";") > 0 Then + If InStr(1, FilterValue, "+") > 0 Then + RelationalOperator = RelationalOperator Or SQL_SplitValueToArray + End If + CriteriaConcatString = SqlOrConcatString + FilterValue = Split(CharTrim(FilterValue, ";"), ";") + ValueSplitted = True + ElseIf InStr(1, FilterValue, "+") > 0 Then + CriteriaConcatString = SqlAndConcatString + FilterValue = Split(CharTrim(FilterValue, "+"), "+") + ValueSplitted = True + End If + End If + + If ValueSplitted Then + + If CriteriaConcatString = SqlOrConcatString Then + If TryBuildInCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria) Then + Exit Function + End If + End If + + TryBuildSplitToArrayCriteria = TryBuildArrayCriteria(FieldName, FieldDataType, RelationalOperator, FilterValue, IgnoreValue, Criteria, CriteriaConcatString) + + End If + +End Function + + +Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDataType As SqlFieldDataType, _ + ByRef RelationalOperator As SqlRelationalOperators, _ + ByRef FilterValue As Variant, _ + ByRef IgnoreValue As Variant, _ + ByRef Criteria As String, _ + Optional ByVal CriteriaConcatString As String = SqlOrConcatString) As Boolean Dim itm As Variant Dim ItmCriteria As String @@ -915,11 +1108,11 @@ Private Function TryBuildArrayCriteria(ByRef FieldName As String, ByVal FieldDat For Each itm In FilterValue ItmCriteria = BuildCriteria(FieldName, FieldDataType, RelationalOperator, itm, , IgnoreValue, False) If Len(ItmCriteria) > 0 Then - Criteria = Criteria & SqlOrConcatString & ItmCriteria + Criteria = Criteria & CriteriaConcatString & ItmCriteria End If Next If Len(Criteria) > 0 Then - Criteria = Mid(Criteria, Len(SqlOrConcatString) + 1) ' 1. Or wegschneiden + Criteria = Mid(Criteria, Len(CriteriaConcatString) + 1) ' 1. Or wegschneiden End If TryBuildArrayCriteria = True diff --git a/source/modules/StringCollection.cls b/source/modules/StringCollection.cls index ed75168..34133ec 100644 --- a/source/modules/StringCollection.cls +++ b/source/modules/StringCollection.cls @@ -11,7 +11,7 @@ Attribute VB_Exposed = False ' Class: text.StringCollection '--------------------------------------------------------------------------------------- ' -' Collection functions for strings +' Collection for strings ' ' Author: ' Josef Poetzl @@ -39,27 +39,85 @@ Private Sub Class_Terminate() Set m_Items = Nothing End Sub +'--------------------------------------------------------------------------------------- +' Property: Self +'--------------------------------------------------------------------------------------- +' +' Reference to self (Me) +' +' Remarks: +' Useful for with-block +' +' Returns: +' Database.StringCollection +' +'--------------------------------------------------------------------------------------- Public Property Get Self() As StringCollection Set Self = Me End Property +'--------------------------------------------------------------------------------------- +' Property: Items +'--------------------------------------------------------------------------------------- +' +' Collection with items +' +' Returns: +' VBA.Collection +' +'--------------------------------------------------------------------------------------- Public Property Get Items() As Collection Set Items = m_Items End Property +'--------------------------------------------------------------------------------------- +' Property: Item +'--------------------------------------------------------------------------------------- +' +' Item of Collection +' +' Parameters: +' Index - (Variant) +' +' Returns: +' Item string - (String) +' +'--------------------------------------------------------------------------------------- Public Property Get Item(ByVal Index As Variant) As String Item = m_Items.Item(Index) End Property Public Property Let Item(ByVal Index As Variant, ByVal NewValue As String) +Attribute Item.VB_UserMemId = 0 m_Items.Add NewValue, , , Index m_Items.Remove Index End Property +'--------------------------------------------------------------------------------------- +' Sub: Add +'--------------------------------------------------------------------------------------- +' +' Add string to collection +' +' Parameters: +' Item to add - (String) +' +'--------------------------------------------------------------------------------------- Public Sub Add(ByVal Item As String) m_Items.Add Item End Sub +'--------------------------------------------------------------------------------------- +' Sub: AddFromArray +'--------------------------------------------------------------------------------------- +' +' Add items form an array to collection +' +' Parameters: +' ArrayToAdd - (Variant) +' ItemStringFormat - (String) Format each item of Array with ItemStringFormat before add to collection +' +'--------------------------------------------------------------------------------------- Public Sub AddFromArray(ByRef ArrayToAdd As Variant, Optional ByVal ItemStringFormat As String = vbNullString) Dim i As Long @@ -70,17 +128,44 @@ Public Sub AddFromArray(ByRef ArrayToAdd As Variant, Optional ByVal ItemStringFo End Sub -Public Sub AddFromCollection(ByVal CollectionRef As Object, Optional ByVal ItemStringFormat As String = vbNullString) -'Object, damit alle Collections mit Enumarable- u. Item(index)-Interface durchlaufen werden können +'--------------------------------------------------------------------------------------- +' Sub: AddFromCollection +'--------------------------------------------------------------------------------------- +' +' Add items form a collection to string collection +' +' Parameters: +' CollectionToAppend - (Object) .. so that all collections with Enumarable and Item(index) interface can be run through +' ItemStringFormat - (String) Format each item of collection with ItemStringFormat before add to collection +' +'--------------------------------------------------------------------------------------- +Public Sub AddFromCollection(ByVal CollectionToAppend As Object, Optional ByVal ItemStringFormat As String = vbNullString) Dim itm As Variant - For Each itm In CollectionRef + For Each itm In CollectionToAppend m_Items.Add Format(itm, ItemStringFormat) Next End Sub +'--------------------------------------------------------------------------------------- +' Function: ToString +'--------------------------------------------------------------------------------------- +' +' Return Collection items as joined String +' +' Parameters: +' Delimiter - (String) Example: ", " => "Item1, Item2, Item3" +' ItemPrefix - (String) Prefix for each item +' ItemSuffix - (String) Suffix for each item +' IgnoreEmptyValue - (Boolean) don't output an empty item +' IgnoreDuplicateValues - (Boolean) True = don't output duplicate items +' +' Returns: +' String +' +'--------------------------------------------------------------------------------------- Public Function ToString(Optional ByVal Delimiter As String = ", ", _ Optional ByVal ItemPrefix As String = vbNullString, _ Optional ByVal ItemSuffix As String = vbNullString, _ @@ -96,6 +181,20 @@ Public Function ToString(Optional ByVal Delimiter As String = ", ", _ End Function +'--------------------------------------------------------------------------------------- +' Function: ToStringArray +'--------------------------------------------------------------------------------------- +' +' Return Collection items as String array +' +' Parameters: +' IgnoreEmptyValue - (Boolean) don't output an empty item +' IgnoreDuplicateValues - (Boolean) True = don't output duplicate items +' +' Returns: +' String array +' +'--------------------------------------------------------------------------------------- Public Function ToStringArray(Optional ByVal IgnoreEmptyValue As Boolean = False, _ Optional ByVal IgnoreDuplicateValues As Boolean = False) As String() diff --git a/source/modules/WinApiShortcutMenu.cls b/source/modules/WinApiShortcutMenu.cls index 9aa31a8..d2c52a3 100644 --- a/source/modules/WinApiShortcutMenu.cls +++ b/source/modules/WinApiShortcutMenu.cls @@ -42,7 +42,7 @@ Private Type POINTAPI Y As Long End Type -Private Type RECT +Private Type Rect Left As Long Top As Long Right As Long @@ -130,7 +130,7 @@ Private Declare PtrSafe Function TranslateMessage _ Private Declare PtrSafe Function GetWindowRect _ Lib "user32.dll" ( _ ByVal Hwnd As LongPtr, _ - ByRef lpRect As RECT _ + ByRef lpRect As Rect _ ) As LongPtr Private Declare PtrSafe Function SetMenuDefaultItem _ @@ -431,14 +431,14 @@ Public Function OpenMenu(Optional ByVal X As Single = 0, Optional ByVal Y As Sin #End If Dim Message As APIMSG - Dim RcHelper As RECT + Dim RcHelper As Rect Dim ButtonLeft As Long Dim ButtonTop As Long Dim XPos As Long Dim YPos As Long Dim ParentObj As Object - Dim AccFormRect As RECT + Dim AccFormRect As Rect 'Otherwise, nothing is displayed when ENTER is pressed: DoEvents diff --git a/source/modules/modMSAccessVcsSupport.bas b/source/modules/modMSAccessVcsSupport.bas new file mode 100644 index 0000000..a717eb8 --- /dev/null +++ b/source/modules/modMSAccessVcsSupport.bas @@ -0,0 +1,12 @@ +Attribute VB_Name = "modMSAccessVcsSupport" +Option Compare Database +Option Explicit + +Public Sub VcsRunBeforeExport() + + With New ACLibGitHubImporter + .BranchName = "master" + .UpdateCodeModules + End With + +End Sub diff --git a/source/vcs-options.json b/source/vcs-options.json index 8beb876..3844971 100644 --- a/source/vcs-options.json +++ b/source/vcs-options.json @@ -66,7 +66,7 @@ }, "SchemaExports": { }, - "RunBeforeExport": "", + "RunBeforeExport": "VcsRunBeforeExport", "RunAfterExport": "", "RunBeforeBuild": "", "RunAfterBuild": "", From 5643d74531c6d6201158f0b9ff44374a6fa475b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= <115746022+josef-poetzl@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:51:45 +0200 Subject: [PATCH 5/6] Update build-accdb.yml --- .github/workflows/build-accdb.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-accdb.yml b/.github/workflows/build-accdb.yml index cb1fd74..13a85eb 100644 --- a/.github/workflows/build-accdb.yml +++ b/.github/workflows/build-accdb.yml @@ -34,6 +34,7 @@ jobs: with: source-dir: "source" target-dir: "access-add-in" + file-name: "ACLibFilterFormWizard.accda" timeout-minutes: 10 - name: "Upload Build Artifact" From 502c71d7ce7e5ebace4c9fdb1afc169941a8b41f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20P=C3=B6tzl?= Date: Mon, 9 Jun 2025 20:55:22 +0200 Subject: [PATCH 6/6] fix table data USysRegInfo --- source/tables/USysRegInfo.txt | 6 ------ source/tables/USysRegInfo.xml | 31 +++++++++++++++++++++++++++++++ source/vcs-options.json | 2 +- 3 files changed, 32 insertions(+), 7 deletions(-) delete mode 100644 source/tables/USysRegInfo.txt create mode 100644 source/tables/USysRegInfo.xml diff --git a/source/tables/USysRegInfo.txt b/source/tables/USysRegInfo.txt deleted file mode 100644 index 7489800..0000000 --- a/source/tables/USysRegInfo.txt +++ /dev/null @@ -1,6 +0,0 @@ -Subkey Type ValName Value -HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 0 -HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 1 Expression =StartApplication() -HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 1 Library |ACCDIR\\ACLibFilterFormWizard.accda -HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 4 BitmapID 339 -HKEY_CURRENT_ACCESS_PROFILE\\Menu Add-Ins\\ACLib FilterForm Wizard 4 Version 1 diff --git a/source/tables/USysRegInfo.xml b/source/tables/USysRegInfo.xml new file mode 100644 index 0000000..40e2460 --- /dev/null +++ b/source/tables/USysRegInfo.xml @@ -0,0 +1,31 @@ + + + + HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\ACLib FilterForm Wizard + 4 + BitmapID + 339 + + + HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\ACLib FilterForm Wizard + 0 + + + HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\ACLib FilterForm Wizard + 1 + Library + |ACCDIR\ACLibFilterFormWizard.accda + + + HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\ACLib FilterForm Wizard + 1 + Expression + =StartApplication() + + + HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\ACLib FilterForm Wizard + 4 + Version + 1 + + diff --git a/source/vcs-options.json b/source/vcs-options.json index 3844971..46325c9 100644 --- a/source/vcs-options.json +++ b/source/vcs-options.json @@ -58,7 +58,7 @@ "Format": "XML Format" }, "USysRegInfo": { - "Format": "Tab Delimited" + "Format": "XML Format" }, "USysRibbons": { "Format": "Tab Delimited"

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