diff --git a/projects/GKCore/GKCore.csproj b/projects/GKCore/GKCore.csproj
index 034fa9d5c..b57e05496 100644
--- a/projects/GKCore/GKCore.csproj
+++ b/projects/GKCore/GKCore.csproj
@@ -389,6 +389,7 @@
+
diff --git a/projects/GKCore/GKCore/Tools/SyncTool.cs b/projects/GKCore/GKCore/Tools/SyncTool.cs
new file mode 100644
index 000000000..14b1f4a09
--- /dev/null
+++ b/projects/GKCore/GKCore/Tools/SyncTool.cs
@@ -0,0 +1,58 @@
+/*
+ * "GEDKeeper", the personal genealogical database editor.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
+ *
+ * This file is part of "GEDKeeper".
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+using System;
+using GDModel;
+using GDModel.Providers.GEDCOM;
+
+namespace GKCore.Tools
+{
+ public enum RecordStatus
+ {
+ Unknown, // gray
+ Identical, // white
+ Changed, // yellow
+ Deleted, // orange or red
+ Added, // lightblue or cyan
+ }
+
+
+ ///
+ ///
+ ///
+ public class SyncTool
+ {
+ public void LoadOtherFile(GDMTree mainTree, string fileName)
+ {
+ if (mainTree == null)
+ throw new ArgumentNullException("mainTree");
+
+ if (string.IsNullOrEmpty(fileName))
+ throw new ArgumentNullException("fileName");
+
+ using (var extTree = new GDMTree()) {
+ var gedcomProvider = new GEDCOMProvider(extTree);
+ gedcomProvider.LoadFromFile(fileName);
+
+ //
+ }
+ }
+ }
+}
diff --git a/projects/GKv2/GEDKeeper2Sync.sln b/projects/GKv2/GEDKeeper2Sync.sln
new file mode 100644
index 000000000..d99ec7d61
--- /dev/null
+++ b/projects/GKv2/GEDKeeper2Sync.sln
@@ -0,0 +1,503 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.32602.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GEDKeeper2", "GEDKeeper2\GEDKeeper2.csproj", "{19B7D80A-37FD-4E49-9F59-87FA41B677E2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plugins", "plugins", "{F5B0E1E6-6FA7-4EEA-905A-B32125985C14}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTimeLinePlugin", "..\plugins\GKTimeLinePlugin\GKTimeLinePlugin.csproj", "{ECED32B7-1081-48D3-A223-1CB67A2D7016}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTextSearchPlugin", "..\plugins\GKTextSearchPlugin\GKTextSearchPlugin.csproj", "{BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKPedigreeImporterPlugin", "..\plugins\GKPedigreeImporterPlugin\GKPedigreeImporterPlugin.csproj", "{859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKNamesBookPlugin", "..\plugins\GKNamesBookPlugin\GKNamesBookPlugin.csproj", "{182AFE98-D3A5-471A-B9D9-C1C53DD72829}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKFlowInputPlugin", "..\plugins\GKFlowInputPlugin\GKFlowInputPlugin.csproj", "{66B64B00-C457-404E-AA2B-90F18127E394}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKCalculatorPlugin", "..\plugins\GKCalculatorPlugin\GKCalculatorPlugin.csproj", "{782E9338-ECA7-4095-9157-6CA003801F05}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKCalendarPlugin", "..\plugins\GKCalendarPlugin\GKCalendarPlugin.csproj", "{091DFD9D-5599-4EEA-A616-A55FC12E9613}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKLifePlugin", "..\plugins\GKLifePlugin\GKLifePlugin.csproj", "{4A523280-2DEA-43C6-BE11-48BDFF283751}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKNavigatorPlugin", "..\plugins\GKNavigatorPlugin\GKNavigatorPlugin.csproj", "{18E423A1-619C-4ED7-96BE-1BD71EACFCAE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKChroniclePlugin", "..\plugins\GKChroniclePlugin\GKChroniclePlugin.csproj", "{1423A6AE-E85A-4E76-91CA-704A1C59F7DC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKWordsCloudPlugin", "..\plugins\GKWordsCloudPlugin\GKWordsCloudPlugin.csproj", "{0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKHistoryDataPlugin", "..\plugins\GKHistoryDataPlugin\GKHistoryDataPlugin.csproj", "{FCAB4916-791F-4302-90A0-E409410F66BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKStdReports", "..\plugins\GKStdReports\GKStdReports.csproj", "{4D6E49E2-58C4-49C8-8664-C8A89D418927}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKCommunicatorPlugin", "..\GKCommunicator\GKCommunicatorPlugin\GKCommunicatorPlugin.csproj", "{304A9ACA-337E-40BC-AC18-BC3B303CBF6C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GEDmillPlugin", "..\plugins\GEDmill\GEDmillPlugin.csproj", "{658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKBackupPlugin", "..\plugins\GKBackupPlugin\GKBackupPlugin.csproj", "{D0E58F68-8706-4308-924B-BE56A03B3C99}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKGenetixPlugin", "..\GKGenetix\GKGenetixPlugin\GKGenetixPlugin.csproj", "{DF48872B-3E78-409C-B43C-1EFD46B0BBC4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTests", "..\GKTests\GKTests.csproj", "{A8B53A6B-40A6-40BA-A671-03FC911BC37B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKCore", "..\GKCore\GKCore.csproj", "{10D619AF-E1CD-4F4A-9C19-5E434300B48F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKComponents", "GKComponents\GKComponents.csproj", "{EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTray", "GKTray\GKTray.csproj", "{A7004127-46AD-4CA5-AEBC-5D70E64AD68A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locales", "locales", "{4AF8EEE8-8592-420C-B5C5-E6DDBA389BA1}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\locales\Afrikaans.lng = ..\..\locales\Afrikaans.lng
+ ..\..\locales\Belarusian.lng = ..\..\locales\Belarusian.lng
+ ..\..\locales\Chinese Simplified.lng = ..\..\locales\Chinese Simplified.lng
+ ..\..\locales\czech.lng = ..\..\locales\czech.lng
+ ..\..\locales\Dutch.lng = ..\..\locales\Dutch.lng
+ ..\..\locales\English.lng = ..\..\locales\English.lng
+ ..\..\locales\french.lng = ..\..\locales\french.lng
+ ..\..\locales\german.lng = ..\..\locales\german.lng
+ ..\..\locales\Hungarian.lng = ..\..\locales\Hungarian.lng
+ ..\..\locales\Icelandic.lng = ..\..\locales\Icelandic.lng
+ ..\..\locales\italian.lng = ..\..\locales\italian.lng
+ ..\..\locales\Japanese.lng = ..\..\locales\Japanese.lng
+ ..\..\locales\Kazakh (Cyrillic).lng = ..\..\locales\Kazakh (Cyrillic).lng
+ ..\..\locales\polish.lng = ..\..\locales\polish.lng
+ ..\..\locales\Portuguese.lng = ..\..\locales\Portuguese.lng
+ ..\..\locales\russian.lng = ..\..\locales\russian.lng
+ ..\..\locales\Serbian (Latin).lng = ..\..\locales\Serbian (Latin).lng
+ ..\..\locales\Spanish.lng = ..\..\locales\Spanish.lng
+ ..\..\locales\ukrainian.lng = ..\..\locales\ukrainian.lng
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "subprojects", "subprojects", "{BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKMap.Core", "..\GKMap\GKMap.Core\GKMap.Core.csproj", "{D0C39D9D-BED0-418B-9A5E-713176CAF40C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKMap.WinForms", "..\GKMap\GKMap.WinForms\GKMap.WinForms.csproj", "{E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKNetCore", "..\GKCommunicator\GKNetCore\GKNetCore.csproj", "{FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKNetUI", "..\GKCommunicator\GKNetUI\GKNetUI.csproj", "{1D2C209A-6E19-4FCF-BA08-11B8096FCA99}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKGenetix.Core", "..\GKGenetix\GKGenetix.Core\GKGenetix.Core.csproj", "{78659756-B505-403B-9173-0965DF601030}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKGenetix.UI.WinForms", "..\GKGenetix\GKGenetix.UI.WinForms\GKGenetix.UI.WinForms.csproj", "{B9225DE4-BE79-43F8-B84B-BECF360E329A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "themes", "themes", "{E39F7926-7961-4857-B90F-16B63F315D02}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\themes\gk_dark.yaml = ..\..\themes\gk_dark.yaml
+ ..\..\themes\gk_forest.yaml = ..\..\themes\gk_forest.yaml
+ ..\..\themes\gk_light.yaml = ..\..\themes\gk_light.yaml
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTestsUI2", "GKTestsUI2\GKTestsUI2.csproj", "{90BDD163-CEA0-4FCE-BA73-7591B71263CB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GKTreeSyncPlugin", "..\plugins\GKTreeSyncPlugin\GKTreeSyncPlugin.csproj", "{A564097E-CFE8-4098-BAE5-D7693F9AD297}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|x64.ActiveCfg = Debug|x64
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|x64.Build.0 = Debug|x64
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|x86.ActiveCfg = Debug|x86
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Debug|x86.Build.0 = Debug|x86
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|x64.ActiveCfg = Release|x64
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|x64.Build.0 = Release|x64
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|x86.ActiveCfg = Release|x86
+ {19B7D80A-37FD-4E49-9F59-87FA41B677E2}.Release|x86.Build.0 = Release|x86
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|x64.ActiveCfg = Debug|x64
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|x64.Build.0 = Debug|x64
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|x86.ActiveCfg = Debug|x86
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Debug|x86.Build.0 = Debug|x86
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|x64.ActiveCfg = Release|x64
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|x64.Build.0 = Release|x64
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|x86.ActiveCfg = Release|x86
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016}.Release|x86.Build.0 = Release|x86
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|x64.ActiveCfg = Debug|x64
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|x64.Build.0 = Debug|x64
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|x86.ActiveCfg = Debug|x86
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Debug|x86.Build.0 = Debug|x86
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|x64.ActiveCfg = Release|x64
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|x64.Build.0 = Release|x64
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|x86.ActiveCfg = Release|x86
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA}.Release|x86.Build.0 = Release|x86
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|x64.ActiveCfg = Debug|x64
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|x64.Build.0 = Debug|x64
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|x86.ActiveCfg = Debug|x86
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Debug|x86.Build.0 = Debug|x86
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|x64.ActiveCfg = Release|x64
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|x64.Build.0 = Release|x64
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|x86.ActiveCfg = Release|x86
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B}.Release|x86.Build.0 = Release|x86
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|x64.ActiveCfg = Debug|x64
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|x64.Build.0 = Debug|x64
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|x86.ActiveCfg = Debug|x86
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Debug|x86.Build.0 = Debug|x86
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|Any CPU.Build.0 = Release|Any CPU
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|x64.ActiveCfg = Release|x64
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|x64.Build.0 = Release|x64
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|x86.ActiveCfg = Release|x86
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829}.Release|x86.Build.0 = Release|x86
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|x64.ActiveCfg = Debug|x64
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|x64.Build.0 = Debug|x64
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|x86.ActiveCfg = Debug|x86
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Debug|x86.Build.0 = Debug|x86
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|x64.ActiveCfg = Release|x64
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|x64.Build.0 = Release|x64
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|x86.ActiveCfg = Release|x86
+ {66B64B00-C457-404E-AA2B-90F18127E394}.Release|x86.Build.0 = Release|x86
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|x64.ActiveCfg = Debug|x64
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|x64.Build.0 = Debug|x64
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|x86.ActiveCfg = Debug|x86
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Debug|x86.Build.0 = Debug|x86
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|Any CPU.Build.0 = Release|Any CPU
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|x64.ActiveCfg = Release|x64
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|x64.Build.0 = Release|x64
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|x86.ActiveCfg = Release|x86
+ {782E9338-ECA7-4095-9157-6CA003801F05}.Release|x86.Build.0 = Release|x86
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|x64.ActiveCfg = Debug|x64
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|x64.Build.0 = Debug|x64
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|x86.ActiveCfg = Debug|x86
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Debug|x86.Build.0 = Debug|x86
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|Any CPU.Build.0 = Release|Any CPU
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|x64.ActiveCfg = Release|x64
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|x64.Build.0 = Release|x64
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|x86.ActiveCfg = Release|x86
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613}.Release|x86.Build.0 = Release|x86
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|x64.ActiveCfg = Debug|x64
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|x64.Build.0 = Debug|x64
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|x86.ActiveCfg = Debug|x86
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Debug|x86.Build.0 = Debug|x86
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|x64.ActiveCfg = Release|x64
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|x64.Build.0 = Release|x64
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|x86.ActiveCfg = Release|x86
+ {4A523280-2DEA-43C6-BE11-48BDFF283751}.Release|x86.Build.0 = Release|x86
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|x64.ActiveCfg = Debug|x64
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|x64.Build.0 = Debug|x64
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|x86.ActiveCfg = Debug|x86
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Debug|x86.Build.0 = Debug|x86
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|x64.ActiveCfg = Release|x64
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|x64.Build.0 = Release|x64
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|x86.ActiveCfg = Release|x86
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE}.Release|x86.Build.0 = Release|x86
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|x64.ActiveCfg = Debug|x64
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|x64.Build.0 = Debug|x64
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|x86.ActiveCfg = Debug|x86
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Debug|x86.Build.0 = Debug|x86
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|x64.ActiveCfg = Release|x64
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|x64.Build.0 = Release|x64
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|x86.ActiveCfg = Release|x86
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC}.Release|x86.Build.0 = Release|x86
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|x64.ActiveCfg = Debug|x64
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|x64.Build.0 = Debug|x64
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|x86.ActiveCfg = Debug|x86
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Debug|x86.Build.0 = Debug|x86
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|x64.ActiveCfg = Release|x64
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|x64.Build.0 = Release|x64
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|x86.ActiveCfg = Release|x86
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57}.Release|x86.Build.0 = Release|x86
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|x64.ActiveCfg = Debug|x64
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|x64.Build.0 = Debug|x64
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|x86.ActiveCfg = Debug|x86
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Debug|x86.Build.0 = Debug|x86
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|x64.ActiveCfg = Release|x64
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|x64.Build.0 = Release|x64
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|x86.ActiveCfg = Release|x86
+ {FCAB4916-791F-4302-90A0-E409410F66BF}.Release|x86.Build.0 = Release|x86
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|x64.ActiveCfg = Debug|x64
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|x64.Build.0 = Debug|x64
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|x86.ActiveCfg = Debug|x86
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Debug|x86.Build.0 = Debug|x86
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|x64.ActiveCfg = Release|x64
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|x64.Build.0 = Release|x64
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|x86.ActiveCfg = Release|x86
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927}.Release|x86.Build.0 = Release|x86
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|x64.ActiveCfg = Debug|x64
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|x64.Build.0 = Debug|x64
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|x86.ActiveCfg = Debug|x86
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Debug|x86.Build.0 = Debug|x86
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|x64.ActiveCfg = Release|x64
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|x64.Build.0 = Release|x64
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|x86.ActiveCfg = Release|x86
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C}.Release|x86.Build.0 = Release|x86
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|x64.ActiveCfg = Debug|x64
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|x64.Build.0 = Debug|x64
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|x86.ActiveCfg = Debug|x86
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Debug|x86.Build.0 = Debug|x86
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|x64.ActiveCfg = Release|x64
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|x64.Build.0 = Release|x64
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|x86.ActiveCfg = Release|x86
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B}.Release|x86.Build.0 = Release|x86
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|x64.ActiveCfg = Debug|x64
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|x64.Build.0 = Debug|x64
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|x86.ActiveCfg = Debug|x86
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Debug|x86.Build.0 = Debug|x86
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|x64.ActiveCfg = Release|x64
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|x64.Build.0 = Release|x64
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|x86.ActiveCfg = Release|x86
+ {D0E58F68-8706-4308-924B-BE56A03B3C99}.Release|x86.Build.0 = Release|x86
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|x64.ActiveCfg = Debug|x64
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|x64.Build.0 = Debug|x64
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|x86.ActiveCfg = Debug|x86
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Debug|x86.Build.0 = Debug|x86
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|x64.ActiveCfg = Release|x64
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|x64.Build.0 = Release|x64
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|x86.ActiveCfg = Release|x86
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4}.Release|x86.Build.0 = Release|x86
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|x64.ActiveCfg = Debug|x64
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|x64.Build.0 = Debug|x64
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|x86.ActiveCfg = Debug|x86
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Debug|x86.Build.0 = Debug|x86
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|x64.ActiveCfg = Release|x64
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|x64.Build.0 = Release|x64
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|x86.ActiveCfg = Release|x86
+ {A8B53A6B-40A6-40BA-A671-03FC911BC37B}.Release|x86.Build.0 = Release|x86
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|x64.ActiveCfg = Debug|x64
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|x64.Build.0 = Debug|x64
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|x86.ActiveCfg = Debug|x86
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Debug|x86.Build.0 = Debug|x86
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|x64.ActiveCfg = Release|x64
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|x64.Build.0 = Release|x64
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|x86.ActiveCfg = Release|x86
+ {10D619AF-E1CD-4F4A-9C19-5E434300B48F}.Release|x86.Build.0 = Release|x86
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|x64.ActiveCfg = Debug|x64
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|x64.Build.0 = Debug|x64
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|x86.ActiveCfg = Debug|x86
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Debug|x86.Build.0 = Debug|x86
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|x64.ActiveCfg = Release|x64
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|x64.Build.0 = Release|x64
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|x86.ActiveCfg = Release|x86
+ {EF9864C5-4DEC-46E8-BC11-A2E5BB9BB9D4}.Release|x86.Build.0 = Release|x86
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|x64.ActiveCfg = Debug|x64
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|x64.Build.0 = Debug|x64
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|x86.ActiveCfg = Debug|x86
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Debug|x86.Build.0 = Debug|x86
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|x64.ActiveCfg = Release|x64
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|x64.Build.0 = Release|x64
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|x86.ActiveCfg = Release|x86
+ {A7004127-46AD-4CA5-AEBC-5D70E64AD68A}.Release|x86.Build.0 = Release|x86
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|x64.ActiveCfg = Debug|x64
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|x64.Build.0 = Debug|x64
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|x86.ActiveCfg = Debug|x86
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Debug|x86.Build.0 = Debug|x86
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x64.ActiveCfg = Release|x64
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x64.Build.0 = Release|x64
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x86.ActiveCfg = Release|x86
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C}.Release|x86.Build.0 = Release|x86
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|x64.ActiveCfg = Debug|x64
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|x64.Build.0 = Debug|x64
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|x86.ActiveCfg = Debug|x86
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Debug|x86.Build.0 = Debug|x86
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x64.ActiveCfg = Release|x64
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x64.Build.0 = Release|x64
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x86.ActiveCfg = Release|x86
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98}.Release|x86.Build.0 = Release|x86
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|x64.ActiveCfg = Debug|x64
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|x64.Build.0 = Debug|x64
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|x86.ActiveCfg = Debug|x86
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Debug|x86.Build.0 = Debug|x86
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|x64.ActiveCfg = Release|x64
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|x64.Build.0 = Release|x64
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|x86.ActiveCfg = Release|x86
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D}.Release|x86.Build.0 = Release|x86
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|x64.ActiveCfg = Debug|x64
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|x64.Build.0 = Debug|x64
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|x86.ActiveCfg = Debug|x86
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Debug|x86.Build.0 = Debug|x86
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|x64.ActiveCfg = Release|x64
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|x64.Build.0 = Release|x64
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|x86.ActiveCfg = Release|x86
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99}.Release|x86.Build.0 = Release|x86
+ {78659756-B505-403B-9173-0965DF601030}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {78659756-B505-403B-9173-0965DF601030}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {78659756-B505-403B-9173-0965DF601030}.Debug|x64.ActiveCfg = Debug|x64
+ {78659756-B505-403B-9173-0965DF601030}.Debug|x64.Build.0 = Debug|x64
+ {78659756-B505-403B-9173-0965DF601030}.Debug|x86.ActiveCfg = Debug|x86
+ {78659756-B505-403B-9173-0965DF601030}.Debug|x86.Build.0 = Debug|x86
+ {78659756-B505-403B-9173-0965DF601030}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {78659756-B505-403B-9173-0965DF601030}.Release|Any CPU.Build.0 = Release|Any CPU
+ {78659756-B505-403B-9173-0965DF601030}.Release|x64.ActiveCfg = Release|x64
+ {78659756-B505-403B-9173-0965DF601030}.Release|x64.Build.0 = Release|x64
+ {78659756-B505-403B-9173-0965DF601030}.Release|x86.ActiveCfg = Release|x86
+ {78659756-B505-403B-9173-0965DF601030}.Release|x86.Build.0 = Release|x86
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|x64.ActiveCfg = Debug|x64
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|x64.Build.0 = Debug|x64
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|x86.ActiveCfg = Debug|x86
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Debug|x86.Build.0 = Debug|x86
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|x64.ActiveCfg = Release|x64
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|x64.Build.0 = Release|x64
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|x86.ActiveCfg = Release|x86
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A}.Release|x86.Build.0 = Release|x86
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|x64.ActiveCfg = Debug|x64
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|x64.Build.0 = Debug|x64
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|x86.ActiveCfg = Debug|x86
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Debug|x86.Build.0 = Debug|x86
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|x64.ActiveCfg = Release|x64
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|x64.Build.0 = Release|x64
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|x86.ActiveCfg = Release|x86
+ {90BDD163-CEA0-4FCE-BA73-7591B71263CB}.Release|x86.Build.0 = Release|x86
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|x64.Build.0 = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Debug|x86.Build.0 = Debug|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|x64.ActiveCfg = Release|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|x64.Build.0 = Release|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|x86.ActiveCfg = Release|Any CPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {ECED32B7-1081-48D3-A223-1CB67A2D7016} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {BB2FCE6E-DF1F-40CC-9D7E-01CC9BE97EFA} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {859C2F5B-FBF1-4D3B-8442-CF8E44E8B74B} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {182AFE98-D3A5-471A-B9D9-C1C53DD72829} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {66B64B00-C457-404E-AA2B-90F18127E394} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {782E9338-ECA7-4095-9157-6CA003801F05} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {091DFD9D-5599-4EEA-A616-A55FC12E9613} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {4A523280-2DEA-43C6-BE11-48BDFF283751} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {18E423A1-619C-4ED7-96BE-1BD71EACFCAE} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {1423A6AE-E85A-4E76-91CA-704A1C59F7DC} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {0EB24CA5-824B-4507-9C6E-BBBF5DB8BE57} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {FCAB4916-791F-4302-90A0-E409410F66BF} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {4D6E49E2-58C4-49C8-8664-C8A89D418927} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {304A9ACA-337E-40BC-AC18-BC3B303CBF6C} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {658AE6DC-A4FA-4042-A26F-E5B6CC7EF56B} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {D0E58F68-8706-4308-924B-BE56A03B3C99} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {DF48872B-3E78-409C-B43C-1EFD46B0BBC4} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ {D0C39D9D-BED0-418B-9A5E-713176CAF40C} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {E06DEF77-F933-42FB-AFD7-DB2D0D8D6A98} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {FEE68CF6-1D60-4E90-AEF3-6AFA4A8C977D} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {1D2C209A-6E19-4FCF-BA08-11B8096FCA99} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {78659756-B505-403B-9173-0965DF601030} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {B9225DE4-BE79-43F8-B84B-BECF360E329A} = {BBA8D997-B7FB-45FE-86A2-08C01C0AAB4C}
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297} = {F5B0E1E6-6FA7-4EEA-905A-B32125985C14}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1F308521-252A-4B60-8C81-1A2F327B3E47}
+ EndGlobalSection
+EndGlobal
diff --git a/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.cs b/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.cs
new file mode 100644
index 000000000..26e2e4eac
--- /dev/null
+++ b/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.cs
@@ -0,0 +1,103 @@
+/*
+ * "GEDKeeper", the personal genealogical database editor.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
+ *
+ * This file is part of "GEDKeeper".
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+using System;
+using System.Reflection;
+using GKCore;
+using GKCore.Design.Graphics;
+using GKCore.Interfaces;
+using GKCore.Plugins;
+
+[assembly: AssemblyTitle("GKTreeSyncPlugin")]
+[assembly: AssemblyDescription("GEDKeeper Tree Synchronization plugin")]
+[assembly: AssemblyProduct("GEDKeeper")]
+[assembly: AssemblyCopyright("Copyright © 2024 by Sergey V. Zhdanovskih")]
+[assembly: AssemblyVersion("0.1.0.0")]
+[assembly: AssemblyCulture("")]
+
+#if DEBUG
+[assembly: AssemblyConfiguration("Debug")]
+#elif RELEASE
+[assembly: AssemblyConfiguration("Release")]
+#endif
+
+namespace GKTreeSyncPlugin
+{
+ public enum PLS
+ {
+ Title = 1,
+ }
+
+ public sealed class Plugin : WidgetPlugin
+ {
+ private string fDisplayName = "GKTreeSyncPlugin";
+ private ILangMan fLangMan;
+
+ public override string DisplayName { get { return fDisplayName; } }
+ public override ILangMan LangMan { get { return fLangMan; } }
+ public override IImage Icon { get { return null; } }
+ public override PluginCategory Category { get { return PluginCategory.Tool; } }
+
+ private TSForm fForm;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing) {
+ if (fForm != null) fForm.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ public override void Execute()
+ {
+ IBaseWindow curBase = Host.GetCurrentFile();
+ if (curBase == null) return;
+
+ fForm = new TSForm(this, curBase);
+ fForm.Show();
+ }
+
+ public override void OnLanguageChange()
+ {
+ try {
+ fLangMan = Host.CreateLangMan(this);
+ //fDisplayName = fLangMan.LS(PLS.Title);
+
+ if (fForm != null) fForm.SetLocale();
+ } catch (Exception ex) {
+ Logger.WriteError("GKTreeSyncPlugin.OnLanguageChange()", ex);
+ }
+ }
+
+ public override void BaseChanged(IBaseWindow baseWin)
+ {
+ /*if (fForm != null) {
+ fForm.BaseChanged(baseWin);
+ }*/
+ }
+
+ public override void BaseClosed(IBaseWindow baseWin)
+ {
+ /*if (fForm != null) {
+ fForm.BaseChanged(null);
+ }*/
+ }
+ }
+}
diff --git a/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.csproj b/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.csproj
new file mode 100644
index 000000000..ac4ebc0ad
--- /dev/null
+++ b/projects/plugins/GKTreeSyncPlugin/GKTreeSyncPlugin.csproj
@@ -0,0 +1,66 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {A564097E-CFE8-4098-BAE5-D7693F9AD297}
+ Library
+ Properties
+ GKTreeSyncPlugin
+ GKTreeSyncPlugin
+ v4.7.1
+ 512
+ true
+
+
+ true
+ full
+ false
+ ..\..\..\plugins\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\..\plugins\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\libs\BSLib.dll
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ TSForm.cs
+
+
+
+
+ {10d619af-e1cd-4f4a-9c19-5e434300b48f}
+ GKCore
+
+
+ {ef9864c5-4dec-46e8-bc11-a2e5bb9bb9d4}
+ GKComponents
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/plugins/GKTreeSyncPlugin/TSForm.Designer.cs b/projects/plugins/GKTreeSyncPlugin/TSForm.Designer.cs
new file mode 100644
index 000000000..20998e283
--- /dev/null
+++ b/projects/plugins/GKTreeSyncPlugin/TSForm.Designer.cs
@@ -0,0 +1,222 @@
+namespace GKTreeSyncPlugin
+{
+ partial class TSForm
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button btnSelectFile;
+ private System.Windows.Forms.Label lblFile;
+ private System.Windows.Forms.TextBox txtFile;
+ private System.Windows.Forms.ComboBox cmbRecordTypes;
+ private System.Windows.Forms.RadioButton rbSyncSelected;
+ private System.Windows.Forms.RadioButton rbSyncAll;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private GKUI.Components.GKListView gkListView1;
+ private GKUI.Components.GKListView gkListView2;
+ private System.Windows.Forms.ColumnHeader columnHeader1;
+ private System.Windows.Forms.ColumnHeader columnHeader2;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null)) {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.btnSelectFile = new System.Windows.Forms.Button();
+ this.lblFile = new System.Windows.Forms.Label();
+ this.txtFile = new System.Windows.Forms.TextBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cmbRecordTypes = new System.Windows.Forms.ComboBox();
+ this.rbSyncSelected = new System.Windows.Forms.RadioButton();
+ this.rbSyncAll = new System.Windows.Forms.RadioButton();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.gkListView1 = new GKUI.Components.GKListView();
+ this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.gkListView2 = new GKUI.Components.GKListView();
+ this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.panel1.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.btnSelectFile);
+ this.panel1.Controls.Add(this.lblFile);
+ this.panel1.Controls.Add(this.txtFile);
+ this.panel1.Controls.Add(this.groupBox1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panel1.Location = new System.Drawing.Point(0, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(1047, 92);
+ this.panel1.TabIndex = 0;
+ //
+ // btnSelectFile
+ //
+ this.btnSelectFile.Location = new System.Drawing.Point(913, 10);
+ this.btnSelectFile.Name = "btnSelectFile";
+ this.btnSelectFile.Size = new System.Drawing.Size(122, 23);
+ this.btnSelectFile.TabIndex = 3;
+ this.btnSelectFile.Text = "Select file...";
+ this.btnSelectFile.UseVisualStyleBackColor = true;
+ this.btnSelectFile.Click += new System.EventHandler(this.btnSelectFile_ClickAsync);
+ //
+ // lblFile
+ //
+ this.lblFile.AutoSize = true;
+ this.lblFile.Location = new System.Drawing.Point(378, 15);
+ this.lblFile.Name = "lblFile";
+ this.lblFile.Size = new System.Drawing.Size(23, 13);
+ this.lblFile.TabIndex = 2;
+ this.lblFile.Text = "File";
+ //
+ // txtFile
+ //
+ this.txtFile.Location = new System.Drawing.Point(458, 12);
+ this.txtFile.Name = "txtFile";
+ this.txtFile.ReadOnly = true;
+ this.txtFile.Size = new System.Drawing.Size(449, 20);
+ this.txtFile.TabIndex = 1;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.cmbRecordTypes);
+ this.groupBox1.Controls.Add(this.rbSyncSelected);
+ this.groupBox1.Controls.Add(this.rbSyncAll);
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(347, 70);
+ this.groupBox1.TabIndex = 0;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Synchronize records";
+ //
+ // cmbRecordTypes
+ //
+ this.cmbRecordTypes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cmbRecordTypes.FormattingEnabled = true;
+ this.cmbRecordTypes.Location = new System.Drawing.Point(133, 41);
+ this.cmbRecordTypes.Name = "cmbRecordTypes";
+ this.cmbRecordTypes.Size = new System.Drawing.Size(208, 21);
+ this.cmbRecordTypes.TabIndex = 2;
+ //
+ // rbSyncSelected
+ //
+ this.rbSyncSelected.AutoSize = true;
+ this.rbSyncSelected.Location = new System.Drawing.Point(9, 42);
+ this.rbSyncSelected.Name = "rbSyncSelected";
+ this.rbSyncSelected.Size = new System.Drawing.Size(67, 17);
+ this.rbSyncSelected.TabIndex = 1;
+ this.rbSyncSelected.TabStop = true;
+ this.rbSyncSelected.Text = "Selected";
+ this.rbSyncSelected.UseVisualStyleBackColor = true;
+ this.rbSyncSelected.CheckedChanged += new System.EventHandler(this.rbSyncRecords_CheckedChanged);
+ //
+ // rbSyncAll
+ //
+ this.rbSyncAll.AutoSize = true;
+ this.rbSyncAll.Location = new System.Drawing.Point(9, 19);
+ this.rbSyncAll.Name = "rbSyncAll";
+ this.rbSyncAll.Size = new System.Drawing.Size(36, 17);
+ this.rbSyncAll.TabIndex = 0;
+ this.rbSyncAll.TabStop = true;
+ this.rbSyncAll.Text = "All";
+ this.rbSyncAll.UseVisualStyleBackColor = true;
+ this.rbSyncAll.CheckedChanged += new System.EventHandler(this.rbSyncRecords_CheckedChanged);
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.Location = new System.Drawing.Point(0, 92);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.gkListView1);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.gkListView2);
+ this.splitContainer1.Size = new System.Drawing.Size(1047, 536);
+ this.splitContainer1.SplitterDistance = 349;
+ this.splitContainer1.TabIndex = 1;
+ //
+ // gkListView1
+ //
+ this.gkListView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader1});
+ this.gkListView1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gkListView1.FullRowSelect = true;
+ this.gkListView1.HideSelection = false;
+ this.gkListView1.ListMan = null;
+ this.gkListView1.Location = new System.Drawing.Point(0, 0);
+ this.gkListView1.Name = "gkListView1";
+ this.gkListView1.OwnerDraw = true;
+ this.gkListView1.SelectedIndex = -1;
+ this.gkListView1.Size = new System.Drawing.Size(349, 536);
+ this.gkListView1.SortColumn = 0;
+ this.gkListView1.SortOrder = GKCore.Design.BSDTypes.SortOrder.None;
+ this.gkListView1.TabIndex = 0;
+ this.gkListView1.UseCompatibleStateImageBehavior = false;
+ this.gkListView1.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader1
+ //
+ this.columnHeader1.Text = "Record";
+ this.columnHeader1.Width = 400;
+ //
+ // gkListView2
+ //
+ this.gkListView2.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeader2});
+ this.gkListView2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gkListView2.FullRowSelect = true;
+ this.gkListView2.HideSelection = false;
+ this.gkListView2.ListMan = null;
+ this.gkListView2.Location = new System.Drawing.Point(0, 0);
+ this.gkListView2.Name = "gkListView2";
+ this.gkListView2.OwnerDraw = true;
+ this.gkListView2.SelectedIndex = -1;
+ this.gkListView2.Size = new System.Drawing.Size(694, 536);
+ this.gkListView2.SortColumn = 0;
+ this.gkListView2.SortOrder = GKCore.Design.BSDTypes.SortOrder.None;
+ this.gkListView2.TabIndex = 0;
+ this.gkListView2.UseCompatibleStateImageBehavior = false;
+ this.gkListView2.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeader2
+ //
+ this.columnHeader2.Text = "Record";
+ this.columnHeader2.Width = 400;
+ //
+ // TSForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1047, 628);
+ this.Controls.Add(this.splitContainer1);
+ this.Controls.Add(this.panel1);
+ this.Name = "TSForm";
+ this.Text = "TSForm";
+ this.Load += new System.EventHandler(this.TSForm_Load);
+ this.Resize += new System.EventHandler(this.TSForm_Resize);
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+ this.splitContainer1.ResumeLayout(false);
+ this.ResumeLayout(false);
+ }
+ }
+}
diff --git a/projects/plugins/GKTreeSyncPlugin/TSForm.cs b/projects/plugins/GKTreeSyncPlugin/TSForm.cs
new file mode 100644
index 000000000..3811429d7
--- /dev/null
+++ b/projects/plugins/GKTreeSyncPlugin/TSForm.cs
@@ -0,0 +1,88 @@
+/*
+ * "GEDKeeper", the personal genealogical database editor.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
+ *
+ * This file is part of "GEDKeeper".
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+using System;
+using System.Windows.Forms;
+using GDModel;
+using GKCore;
+using GKCore.Interfaces;
+using GKCore.Tools;
+
+namespace GKTreeSyncPlugin
+{
+ public partial class TSForm : Form, ILocalizable
+ {
+ private readonly IBaseWindow fBase;
+ private readonly SyncTool fSyncTool;
+
+ public TSForm()
+ {
+ InitializeComponent();
+ }
+
+ public TSForm(Plugin plugin, IBaseWindow curBase) : this()
+ {
+ for (var rt = GDMRecordType.rtIndividual; rt <= GDMRecordType.rtLocation; rt++) {
+ var name = LangMan.LS(GKData.RecordTypes[(int)rt].Name);
+ cmbRecordTypes.Items.Add(name);
+ }
+
+ fBase = curBase;
+ fSyncTool = new SyncTool();
+ }
+
+ public void SetLocale()
+ {
+ }
+
+ private void TSForm_Load(object sender, EventArgs e)
+ {
+ ResizeSplitter();
+ }
+
+ private void ResizeSplitter()
+ {
+ var diff = splitContainer1.Panel1.Width - splitContainer1.Panel2.Width;
+ splitContainer1.SplitterDistance -= diff / 2;
+ }
+
+ private void TSForm_Resize(object sender, EventArgs e)
+ {
+ ResizeSplitter();
+ }
+
+ private async void btnSelectFile_ClickAsync(object sender, EventArgs e)
+ {
+ string fileName = await AppHost.StdDialogs.GetOpenFile("", "", LangMan.LS(LSID.GEDCOMFilter), 1, GKData.GEDCOM_EXT);
+ if (string.IsNullOrEmpty(fileName)) {
+ txtFile.Text = string.Empty;
+ return;
+ }
+
+ txtFile.Text = fileName;
+ fSyncTool.LoadOtherFile(fBase.Context.Tree, fileName);
+ }
+
+ private void rbSyncRecords_CheckedChanged(object sender, EventArgs e)
+ {
+ cmbRecordTypes.Enabled = !rbSyncAll.Checked;
+ }
+ }
+}