31 Commits

Author SHA1 Message Date
sriramphanib 6c2ee11ccc Sync files delete 2026-04-23 15:49:41 +05:30
sriramphanib 0cfcbe8ed6 ReportData signature change 2026-04-20 04:17:40 +05:30
sriramphanib 9b1a2df4ae dotnet 10 and nuget packages upgrade 2026-04-20 01:43:02 +05:30
sriramphanib 7e41bfb39c dotnet 10 and nuget packages upgrade 2026-04-20 01:23:09 +05:30
sriramphanib 4f5f4c4050 dotnet 10 and nuget packages upgrade 2026-04-20 01:07:56 +05:30
sriramphanib 4a7c3f6a11 removed crm.webapis 2025-03-22 11:51:15 +05:30
sriramphanib 90ce3b9422 correction to solutiion to exclude bprofile 2025-03-22 11:40:00 +05:30
sriramphanib 214eb3d20a Removed bprofile 2025-03-22 11:28:21 +05:30
sriramphanib 4a362d0e4d Removed CSVHelper and moved to excelHelper 2024-08-29 12:45:27 +05:30
sriramphanib b6b2d3df87 removed references 2024-08-28 04:26:01 +05:30
devops.bizgaze 4773a34407 Update 'Bizgaze.Web.Server.publish.sln' 2024-08-26 07:21:13 +00:00
devops.bizgaze 81eaa51cdd removed subscription project 2024-08-26 07:02:05 +00:00
sriramphanib 40715566e7 removed transact.subscriptions 2024-08-26 12:14:46 +05:30
sriramphanib d3d221c1e3 Apilog implementation 2024-08-26 02:42:25 +05:30
devops.bizgaze 46e6d18419 removed unimail project 2024-06-20 10:33:32 +00:00
devops.bizgaze 7dd59766fb removed unimail project 2024-06-20 10:27:52 +00:00
devops.bizgaze f400287da2 removed unimail project 2024-06-20 10:22:50 +00:00
sriramphanib e100baac72 new references references 2023-11-24 18:23:00 +05:30
PrEm Kumar fae2bcbd9b pull all file added 2023-11-07 17:09:00 +05:30
PrEm Kumar 6e32ca5b98 latest clone file 2023-11-07 14:30:18 +05:30
PrEm Kumar a9103704e5 cloneall created 2023-11-07 12:05:05 +05:30
devops.bizgaze 5ca06dfa91 platform automationutilities project reffernce adding 2023-06-20 15:33:07 +05:30
devops.bizgaze 90a2e2d6fa Adding peoplepulse project refference 2023-06-07 11:15:17 +05:30
devops.bizgaze d6601b3b7a adding project refference 2023-05-15 17:46:29 +05:30
devops.bizgaze f17e15c6c7 recommit 2023-05-12 14:25:37 +05:30
devops.bizgaze f35ab8d09a PaymentGatWay project refference adding 2023-05-11 18:30:04 +05:30
devops.bizgaze 4b009f301c new projects added 2023-04-28 14:02:15 +05:30
PrEm Kumar 40a0c7aa64 project ref 2023-04-21 12:56:46 +05:30
PrEm Kumar b6fe157760 final solution 2023-03-29 15:33:27 +05:30
PrEm Kumar ba89b44d21 .net 6 upgrade 2023-03-29 14:55:19 +05:30
PrEm Kumar 3af7d359a1 .net6 project added 2022-09-26 12:39:05 +05:30
32 changed files with 1368 additions and 659 deletions
+5
View File
@@ -0,0 +1,5 @@
/**/obj/
/**/bin/
/**/node_modules/
.vs/
*.uqry
+1
View File
@@ -0,0 +1 @@
cd D:\Dev.6; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd unibase ; ls -d */ | xargs -P10 -I{} git -C {} pull origin 'dev';cd .. ; cd bizgaze; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd ..; cd unidrive; ls -d */ | xargs -P10 -I{} git -C {} pull origin 'dev' ;cd ..;cd unimail; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd..;read -p 'press any key to continue'
-25
View File
@@ -1,25 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29905.134
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Client", "..\interface.web\Web.Client\Web.Client.csproj", "{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2D2D369B-08CB-4BBC-8C18-2386A68264A5}
EndGlobalSection
EndGlobal
-25
View File
@@ -1,25 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29905.134
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Client", "..\interface.web\Web.Client\Web.Client.csproj", "{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2D2D369B-08CB-4BBC-8C18-2386A68264A5}
EndGlobalSection
EndGlobal
-505
View File
@@ -1,505 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29905.134
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CRM", "CRM", "{71816DC1-047F-4FF1-9842-40D31E30B7F6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transact", "Transact", "{83734364-ABEA-42A7-B441-A77CC912CE88}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.publish", "crm\CRM\CRM.publish.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies.publish", "crm.companies\CRM.Company\CRM.Companies.publish.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts.publish", "crm.contacts\CRM.Contacts\CRM.Contacts.publish.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes.publish", "crm.routes\CRM.Routes\CRM.Routes.publish.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.publish", "transact\Transact\Transact.publish.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting.publish", "transact.accounting\Transact.Accounting\Transact.Accounting.publish.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation.publish", "transact.automation\Transact.Automation\Transact.Automation.publish.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons.publish", "transact.coupons\Transact.Coupons\Transact.Coupons.publish.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates.publish", "transact.estimates\Transact.Estimates\Transact.Estimates.publish.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory.publish", "transact.inventory\Transact.Inventory\Transact.Inventory.publish.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices.publish", "transact.invoices\Transact.Invoices\Transact.Invoices.publish.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers.publish", "transact.offers\Transact.Offers\Transact.Offers.publish.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders.publish", "transact.orders\Transact.Orders\Transact.Orders.publish.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments.publish", "transact.payments\Transact.Payments\Transact.Payments.publish.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists.publish", "transact.pricelists\Transact.PriceLists\Transact.PriceLists.publish.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes.publish", "transact.taxes\Transact.Taxes\Transact.Taxes.publish.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets.publish", "transact.wallets\Transact.Wallets\Transact.Wallets.publish.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TM", "TM", "{469BBD1D-EB02-4C13-B82F-709AC951705E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Support", "Support", "{831A3710-0BC8-4B88-8369-CD1F9903A46E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PM", "PM", "{1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM.publish", "pm\PM\PM.publish.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support.publish", "support\Support\Support.publish.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM.publish", "tm\TM\TM.publish.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Paybacks", "Paybacks", "{D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks.publish", "paybacks\Paybacks\Paybacks.publish.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Communications", "Communications", "{068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications.publish", "communications\Communications\Communications.publish.csproj", "{3BD27A14-6304-4634-AEC6-4718AD035CA1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unibase", "Unibase", "{40B7C55B-76EF-4E21-B01A-3C4A649B151F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{487BACE1-BA0C-4BA5-81AB-31149CFDF06F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DbProviders", "DbProviders", "{FC7154FC-65BB-44DD-8034-358862BA64F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider.Publish", "..\unibase\mongdbprovider\MongoDbProvider\MongoDbProvider.Publish.csproj", "{1CE0B249-EDC4-493A-AFE5-495050CA035E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider.Publish", "..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.Publish.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper.Publish", "..\unibase\helpers\ConferenceHelper\ConferenceHelper.Publish.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Publish", "..\unibase\helpers\CsvHelper\CsvHelper.Publish.csproj", "{45053372-51B7-4730-9D6F-656AEE246533}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper.Publish", "..\unibase\helpers\DateHelper\DateHelper.Publish.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper.Publish", "..\unibase\helpers\DeviceHelper\DeviceHelper.Publish.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper.Publish", "..\unibase\helpers\EmailHelper\EmailHelper.Publish.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper.Publish", "..\unibase\helpers\ExcelHelper\ExcelHelper.Publish.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper.Publish", "..\unibase\helpers\FileHelper\FileHelper.Publish.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper.Publish", "..\unibase\helpers\JsonHelper\JsonHelper.Publish.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper.Publish", "..\unibase\helpers\LogHelper\LogHelper.Publish.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper.Publish", "..\unibase\helpers\MemCacheHelper\MemCacheHelper.Publish.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper.Publish", "..\unibase\helpers\PdfHelper\PdfHelper.Publish.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper.Publish", "..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.Publish.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper.Publish", "..\unibase\helpers\ReminderHelper\ReminderHelper.Publish.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper.Publish", "..\unibase\helpers\TokenHelper\TokenHelper.Publish.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper.Publish", "..\unibase\helpers\XmlHelper\XmlHelper.Publish.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{3919BD62-99CE-447C-B185-47878D0BA616}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Publish", "..\unibase\core\Unibase.Core\Unibase.Core.Publish.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Web.Publish", "..\unibase\core\Unibase.Core.Web\Unibase.Core.Web.Publish.csproj", "{59227DCB-E178-41F6-8350-4129F98FE0E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core.Publish", "..\unibase\platform\Platform.Core\Platform.Core.Publish.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership.Publish", "..\unibase\platform\Platform.Membership\Platform.Membership.Publish.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects.Publish", "..\unibase\platform\Platform.Objects\Platform.Objects.Publish.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis.Publish", "..\unibase\platform\Platform.WebApis\Platform.WebApis.Publish.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics.Publish", "..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.Publish.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps.Publish", "..\unibase\platform.apps\Platform.Apps\Platform.Apps.Publish.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation.Publish", "..\unibase\platform.automation\Platform.Automation\Platform.Automation.Publish.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common.Publish", "..\unibase\platform.common\Platform.Common\Platform.Common.Publish.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources.Publish", "..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.Publish.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS.Publish", "..\unibase\platform.gps\Platform.GPS\Platform.GPS.Publish.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations.Publish", "..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.Publish.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates.Publish", "..\unibase\platform.templates\Platform.Templates\Platform.Templates.Publish.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants.Publish", "..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.Publish.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes.Publish", "..\unibase\platform.themes\Platform.Themes\Platform.Themes.Publish.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bizgaze.Server.Web.publish", "..\interface.web\Web.Server\Bizgaze.Server.Web.publish.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UniConnect", "UniConnect", "{A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.Objects.Publish", "..\uniconnect\UniConnect.Objects\UniConnect.Objects.Publish.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.WebApis.Publish", "..\uniconnect\UniConnect.WebApis\UniConnect.WebApis.Publish.csproj", "{2AB114F1-9753-4510-8160-51840B8942A4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts.Publish", "..\unibase\utilities\Conflicts\Conflicts.Publish.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility.Publish", "..\unibase\utilities\AppUtility\AppUtility.Publish.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server.publish", "..\unibase\platform.server\Platform.Server.publish.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Collaboration", "Collaboration", "{458C3C01-1A87-4328-A474-F17D876C4DB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Collaboration.UniCloud.Publish", "..\unidrive\collaboration.providers\Collaboration.Providers\Collaboration.UniCloud.Publish.csproj", "{87802CD7-E365-4423-A458-3BC71CFF9330}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses.publish", "transact.expenses\Transact.Expenses.publish.csproj", "{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPRL", "SPRL", "{15B1D139-3E47-415F-8D8A-D5D532D6E3FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL.Publish", "..\sprl\SPRL.Publish.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Release|Any CPU.Build.0 = Release|Any CPU
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Release|Any CPU.Build.0 = Release|Any CPU
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Release|Any CPU.Build.0 = Release|Any CPU
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Release|Any CPU.Build.0 = Release|Any CPU
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Release|Any CPU.Build.0 = Release|Any CPU
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Release|Any CPU.Build.0 = Release|Any CPU
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Release|Any CPU.Build.0 = Release|Any CPU
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Release|Any CPU.Build.0 = Release|Any CPU
{63B3381A-3155-4740-B819-51BA503FADFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63B3381A-3155-4740-B819-51BA503FADFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63B3381A-3155-4740-B819-51BA503FADFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63B3381A-3155-4740-B819-51BA503FADFE}.Release|Any CPU.Build.0 = Release|Any CPU
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Release|Any CPU.Build.0 = Release|Any CPU
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Release|Any CPU.Build.0 = Release|Any CPU
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Release|Any CPU.Build.0 = Release|Any CPU
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Release|Any CPU.Build.0 = Release|Any CPU
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Release|Any CPU.Build.0 = Release|Any CPU
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Release|Any CPU.Build.0 = Release|Any CPU
{992C3081-47E5-4098-88D2-7438504A1D74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{992C3081-47E5-4098-88D2-7438504A1D74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{992C3081-47E5-4098-88D2-7438504A1D74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{992C3081-47E5-4098-88D2-7438504A1D74}.Release|Any CPU.Build.0 = Release|Any CPU
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Release|Any CPU.Build.0 = Release|Any CPU
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Release|Any CPU.Build.0 = Release|Any CPU
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Release|Any CPU.Build.0 = Release|Any CPU
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Release|Any CPU.Build.0 = Release|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.Build.0 = Release|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.Build.0 = Release|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.Build.0 = Release|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.Build.0 = Release|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.Build.0 = Release|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.Build.0 = Release|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.Build.0 = Release|Any CPU
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Release|Any CPU.Build.0 = Release|Any CPU
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Release|Any CPU.Build.0 = Release|Any CPU
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Release|Any CPU.Build.0 = Release|Any CPU
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Release|Any CPU.Build.0 = Release|Any CPU
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Release|Any CPU.Build.0 = Release|Any CPU
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Release|Any CPU.ActiveCfg = Release|Any CPU
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Release|Any CPU.Build.0 = Release|Any CPU
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Debug|Any CPU.Build.0 = Debug|Any CPU
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Release|Any CPU.ActiveCfg = Release|Any CPU
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Release|Any CPU.Build.0 = Release|Any CPU
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Release|Any CPU.Build.0 = Release|Any CPU
{08919A68-301C-4E41-BFF1-B2764B384726}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08919A68-301C-4E41-BFF1-B2764B384726}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08919A68-301C-4E41-BFF1-B2764B384726}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08919A68-301C-4E41-BFF1-B2764B384726}.Release|Any CPU.Build.0 = Release|Any CPU
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Release|Any CPU.Build.0 = Release|Any CPU
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Release|Any CPU.Build.0 = Release|Any CPU
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Release|Any CPU.Build.0 = Release|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.Build.0 = Release|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.Build.0 = Release|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.Build.0 = Release|Any CPU
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Debug|Any CPU.Build.0 = Debug|Any CPU
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Release|Any CPU.ActiveCfg = Release|Any CPU
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Release|Any CPU.Build.0 = Release|Any CPU
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Release|Any CPU.Build.0 = Release|Any CPU
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Release|Any CPU.Build.0 = Release|Any CPU
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Release|Any CPU.Build.0 = Release|Any CPU
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Release|Any CPU.Build.0 = Release|Any CPU
{F5446654-F684-4357-A862-C4187A448028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5446654-F684-4357-A862-C4187A448028}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5446654-F684-4357-A862-C4187A448028}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5446654-F684-4357-A862-C4187A448028}.Release|Any CPU.Build.0 = Release|Any CPU
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Release|Any CPU.Build.0 = Release|Any CPU
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Release|Any CPU.Build.0 = Release|Any CPU
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Release|Any CPU.Build.0 = Release|Any CPU
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Release|Any CPU.Build.0 = Release|Any CPU
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Release|Any CPU.Build.0 = Release|Any CPU
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Release|Any CPU.Build.0 = Release|Any CPU
{13297F64-43C3-4495-9E99-43D8950FBF47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{13297F64-43C3-4495-9E99-43D8950FBF47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{13297F64-43C3-4495-9E99-43D8950FBF47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{13297F64-43C3-4495-9E99-43D8950FBF47}.Release|Any CPU.Build.0 = Release|Any CPU
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Release|Any CPU.Build.0 = Release|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.Build.0 = Release|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.Build.0 = Release|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.Build.0 = Release|Any CPU
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Release|Any CPU.Build.0 = Release|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.Build.0 = Release|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.Build.0 = Debug|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.ActiveCfg = Release|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.Build.0 = Release|Any CPU
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Release|Any CPU.Build.0 = Release|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{6E2065D9-C472-4D24-BA2F-51D5767F9704} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
{BAF99643-681F-4AF3-8404-13842B1B1BCA} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
{566AD528-55CE-4EAD-BC07-91F333958CE3} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
{7226266C-A6DB-4D51-B5A6-96429DE02E50} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{A34300FD-ACFE-48AB-A556-1200C5FCDF11} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{DD685727-5353-453E-AAAD-C4BCB8E9642F} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{63B3381A-3155-4740-B819-51BA503FADFE} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{9AFC04DC-6700-4BBB-AEBF-808642222B10} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{FA4B2790-9279-4E4F-B209-22B2C99B787F} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{B735FA9D-4E45-4E62-99E0-F92C14B8F267} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{992C3081-47E5-4098-88D2-7438504A1D74} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{ED1E2C14-4794-4157-B812-7160DC3E30C8} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{B6629DD5-26A3-4885-88AE-4B680E4426B8} = {1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}
{3FFC2545-2DE2-40EA-A236-B78165B713EA} = {831A3710-0BC8-4B88-8369-CD1F9903A46E}
{B4A0DC38-F0FD-4809-B615-4CCB25825527} = {469BBD1D-EB02-4C13-B82F-709AC951705E}
{0054CF31-DCE6-494E-9432-A32564C0AB3B} = {D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}
{3BD27A14-6304-4634-AEC6-4718AD035CA1} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{487BACE1-BA0C-4BA5-81AB-31149CFDF06F} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{FC7154FC-65BB-44DD-8034-358862BA64F9} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{1CE0B249-EDC4-493A-AFE5-495050CA035E} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
{35762CBA-B795-4042-85FB-EBE53C8B8A31} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
{90479407-C8B2-40D4-A0D0-4624141D4D2E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{45053372-51B7-4730-9D6F-656AEE246533} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{262A92C1-9500-4D41-984D-8B71E783B3AB} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{B8B89562-E6A1-487A-A91F-4F3943326FF3} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{81B0D49D-106C-4205-A5CD-EC27FEA44936} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{11042DE0-857B-44BE-B68F-11F8C15FFE14} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{F42F6628-3EF0-4151-ACFB-7A82330C4F11} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{08919A68-301C-4E41-BFF1-B2764B384726} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{E435E155-97D5-44A5-BBA0-DDF75A1C451D} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{B54E71A7-D03C-4BBB-981D-126D61B0C318} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{D8CBC053-0EA4-498B-ABEE-9DCC79510235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{3919BD62-99CE-447C-B185-47878D0BA616} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96} = {3919BD62-99CE-447C-B185-47878D0BA616}
{59227DCB-E178-41F6-8350-4129F98FE0E8} = {3919BD62-99CE-447C-B185-47878D0BA616}
{C4FCE46F-E921-4840-9FC0-1F9F617498B3} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{3CDC226D-E97C-4657-BA2E-BA1937587654} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{E8A47D81-2D04-43A5-BB78-46381F0B1F34} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{F5446654-F684-4357-A862-C4187A448028} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{EABE2B10-6578-4556-BC62-6B67CAD2777C} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{F476A1DC-5E10-41F9-A1C1-B967B6F88930} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{D1E2051B-15C1-4DBF-99B2-6C81A4164154} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{9980063C-FCCC-4FA9-96ED-015FE69CC61D} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{13297F64-43C3-4495-9E99-43D8950FBF47} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
{2AB114F1-9753-4510-8160-51840B8942A4} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{61492B23-FA11-4AFE-A883-456FBB78FA10} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{87802CD7-E365-4423-A458-3BC71CFF9330} = {458C3C01-1A87-4328-A474-F17D876C4DB4}
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{0B9D4C82-B613-44C7-8514-74F3C97DD50E} = {15B1D139-3E47-415F-8D8A-D5D532D6E3FC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BC6811BD-16A3-40FB-A127-2E381584DBB6}
EndGlobalSection
EndGlobal
@@ -1,45 +1,45 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29905.134
# Visual Studio Version 18
VisualStudioVersion = 18.5.11619.145
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CRM", "CRM", "{71816DC1-047F-4FF1-9842-40D31E30B7F6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transact", "Transact", "{83734364-ABEA-42A7-B441-A77CC912CE88}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.publish", "crm\CRM\CRM.publish.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM", "..\crm\CRM\CRM.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies.publish", "crm.companies\CRM.Company\CRM.Companies.publish.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies", "..\crm.companies\CRM.Company\CRM.Companies.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts.publish", "crm.contacts\CRM.Contacts\CRM.Contacts.publish.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts", "..\crm.contacts\CRM.Contacts\CRM.Contacts.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes.publish", "crm.routes\CRM.Routes\CRM.Routes.publish.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes", "..\crm.routes\CRM.Routes\CRM.Routes.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.publish", "transact\Transact\Transact.publish.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact", "..\transact\Transact\Transact.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting.publish", "transact.accounting\Transact.Accounting\Transact.Accounting.publish.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting", "..\transact.accounting\Transact.Accounting\Transact.Accounting.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation.publish", "transact.automation\Transact.Automation\Transact.Automation.publish.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation", "..\transact.automation\Transact.Automation\Transact.Automation.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons.publish", "transact.coupons\Transact.Coupons\Transact.Coupons.publish.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons", "..\transact.coupons\Transact.Coupons\Transact.Coupons.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates.publish", "transact.estimates\Transact.Estimates\Transact.Estimates.publish.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates", "..\transact.estimates\Transact.Estimates\Transact.Estimates.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory.publish", "transact.inventory\Transact.Inventory\Transact.Inventory.publish.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory", "..\transact.inventory\Transact.Inventory\Transact.Inventory.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices.publish", "transact.invoices\Transact.Invoices\Transact.Invoices.publish.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices", "..\transact.invoices\Transact.Invoices\Transact.Invoices.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers.publish", "transact.offers\Transact.Offers\Transact.Offers.publish.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers", "..\transact.offers\Transact.Offers\Transact.Offers.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders.publish", "transact.orders\Transact.Orders\Transact.Orders.publish.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders", "..\transact.orders\Transact.Orders\Transact.Orders.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments.publish", "transact.payments\Transact.Payments\Transact.Payments.publish.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments", "..\transact.payments\Transact.Payments\Transact.Payments.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists.publish", "transact.pricelists\Transact.PriceLists\Transact.PriceLists.publish.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists", "..\transact.pricelists\Transact.PriceLists\Transact.PriceLists.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes.publish", "transact.taxes\Transact.Taxes\Transact.Taxes.publish.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes", "..\transact.taxes\Transact.Taxes\Transact.Taxes.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets.publish", "transact.wallets\Transact.Wallets\Transact.Wallets.publish.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets", "..\transact.wallets\Transact.Wallets\Transact.Wallets.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TM", "TM", "{469BBD1D-EB02-4C13-B82F-709AC951705E}"
EndProject
@@ -47,20 +47,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Support", "Support", "{831A
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PM", "PM", "{1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM.publish", "pm\PM\PM.publish.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM", "..\pm\PM\PM.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support.publish", "support\Support\Support.publish.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support", "..\support\Support\Support.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM.publish", "tm\TM\TM.publish.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM", "..\tm\TM\TM.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Paybacks", "Paybacks", "{D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks.publish", "paybacks\Paybacks\Paybacks.publish.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks", "..\paybacks\Paybacks\Paybacks.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Communications", "Communications", "{068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications.publish", "communications\Communications\Communications.publish.csproj", "{3BD27A14-6304-4634-AEC6-4718AD035CA1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unibase", "Unibase", "{40B7C55B-76EF-4E21-B01A-3C4A649B151F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}"
@@ -69,99 +67,157 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{487B
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DbProviders", "DbProviders", "{FC7154FC-65BB-44DD-8034-358862BA64F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider.Publish", "..\unibase\mongdbprovider\MongoDbProvider\MongoDbProvider.Publish.csproj", "{1CE0B249-EDC4-493A-AFE5-495050CA035E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider", "..\..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider.Publish", "..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.Publish.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper", "..\..\unibase\helpers\ConferenceHelper\ConferenceHelper.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper.Publish", "..\unibase\helpers\ConferenceHelper\ConferenceHelper.Publish.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper", "..\..\unibase\helpers\DateHelper\DateHelper.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Publish", "..\unibase\helpers\CsvHelper\CsvHelper.Publish.csproj", "{45053372-51B7-4730-9D6F-656AEE246533}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper", "..\..\unibase\helpers\DeviceHelper\DeviceHelper.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper.Publish", "..\unibase\helpers\DateHelper\DateHelper.Publish.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper", "..\..\unibase\helpers\EmailHelper\EmailHelper.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper.Publish", "..\unibase\helpers\DeviceHelper\DeviceHelper.Publish.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper", "..\..\unibase\helpers\ExcelHelper\ExcelHelper.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper.Publish", "..\unibase\helpers\EmailHelper\EmailHelper.Publish.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper", "..\..\unibase\helpers\FileHelper\FileHelper.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper.Publish", "..\unibase\helpers\ExcelHelper\ExcelHelper.Publish.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper", "..\..\unibase\helpers\JsonHelper\JsonHelper.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper.Publish", "..\unibase\helpers\FileHelper\FileHelper.Publish.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper", "..\..\unibase\helpers\LogHelper\LogHelper.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper.Publish", "..\unibase\helpers\JsonHelper\JsonHelper.Publish.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper", "..\..\unibase\helpers\MemCacheHelper\MemCacheHelper.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper.Publish", "..\unibase\helpers\LogHelper\LogHelper.Publish.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper", "..\..\unibase\helpers\PdfHelper\PdfHelper.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper.Publish", "..\unibase\helpers\MemCacheHelper\MemCacheHelper.Publish.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper", "..\..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper.Publish", "..\unibase\helpers\PdfHelper\PdfHelper.Publish.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper", "..\..\unibase\helpers\ReminderHelper\ReminderHelper.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper.Publish", "..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.Publish.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper", "..\..\unibase\helpers\TokenHelper\TokenHelper.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper.Publish", "..\unibase\helpers\ReminderHelper\ReminderHelper.Publish.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper.Publish", "..\unibase\helpers\TokenHelper\TokenHelper.Publish.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper.Publish", "..\unibase\helpers\XmlHelper\XmlHelper.Publish.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper", "..\..\unibase\helpers\XmlHelper\XmlHelper.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{3919BD62-99CE-447C-B185-47878D0BA616}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Publish", "..\unibase\core\Unibase.Core\Unibase.Core.Publish.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core", "..\..\unibase\core\Unibase.Core\Unibase.Core.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Web.Publish", "..\unibase\core\Unibase.Core.Web\Unibase.Core.Web.Publish.csproj", "{59227DCB-E178-41F6-8350-4129F98FE0E8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core", "..\..\unibase\platform\Platform.Core\Platform.Core.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core.Publish", "..\unibase\platform\Platform.Core\Platform.Core.Publish.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership", "..\..\unibase\platform\Platform.Membership\Platform.Membership.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership.Publish", "..\unibase\platform\Platform.Membership\Platform.Membership.Publish.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects", "..\..\unibase\platform\Platform.Objects\Platform.Objects.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects.Publish", "..\unibase\platform\Platform.Objects\Platform.Objects.Publish.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis", "..\..\unibase\platform\Platform.WebApis\Platform.WebApis.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis.Publish", "..\unibase\platform\Platform.WebApis\Platform.WebApis.Publish.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics", "..\..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics.Publish", "..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.Publish.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps", "..\..\unibase\platform.apps\Platform.Apps\Platform.Apps.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps.Publish", "..\unibase\platform.apps\Platform.Apps\Platform.Apps.Publish.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation", "..\..\unibase\platform.automation\Platform.Automation\Platform.Automation.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation.Publish", "..\unibase\platform.automation\Platform.Automation\Platform.Automation.Publish.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common", "..\..\unibase\platform.common\Platform.Common\Platform.Common.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common.Publish", "..\unibase\platform.common\Platform.Common\Platform.Common.Publish.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources", "..\..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources.Publish", "..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.Publish.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS", "..\..\unibase\platform.gps\Platform.GPS\Platform.GPS.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS.Publish", "..\unibase\platform.gps\Platform.GPS\Platform.GPS.Publish.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations", "..\..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations.Publish", "..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.Publish.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates", "..\..\unibase\platform.templates\Platform.Templates\Platform.Templates.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates.Publish", "..\unibase\platform.templates\Platform.Templates\Platform.Templates.Publish.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants", "..\..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants.Publish", "..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.Publish.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes", "..\..\unibase\platform.themes\Platform.Themes\Platform.Themes.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes.Publish", "..\unibase\platform.themes\Platform.Themes\Platform.Themes.Publish.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bizgaze.Server.Web.publish", "..\interface.web\Web.Server\Bizgaze.Server.Web.publish.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Web.Server", "..\..\interface.web\web.server\Web.Server.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UniConnect", "UniConnect", "{A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.Objects.Publish", "..\uniconnect\UniConnect.Objects\UniConnect.Objects.Publish.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.WebApis.Publish", "..\uniconnect\UniConnect.WebApis\UniConnect.WebApis.Publish.csproj", "{2AB114F1-9753-4510-8160-51840B8942A4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect", "..\..\uniconnect\UniConnect.Objects\UniConnect.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts.Publish", "..\unibase\utilities\Conflicts\Conflicts.Publish.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts", "..\..\unibase\utilities\Conflicts\Conflicts.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility.Publish", "..\unibase\utilities\AppUtility\AppUtility.Publish.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility", "..\..\unibase\utilities\AppUtility\AppUtility.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server.publish", "..\unibase\platform.server\Platform.Server.publish.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Collaboration", "Collaboration", "{458C3C01-1A87-4328-A474-F17D876C4DB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Collaboration.UniCloud.Publish", "..\unidrive\collaboration.providers\Collaboration.Providers\Collaboration.UniCloud.Publish.csproj", "{87802CD7-E365-4423-A458-3BC71CFF9330}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server", "..\..\unibase\platform.server\Platform.Server.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPRL", "SPRL", "{15B1D139-3E47-415F-8D8A-D5D532D6E3FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL.Publish", "..\sprl\SPRL.Publish.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL", "..\..\sprl\SPRL.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses.publish", "transact.expenses\Transact.Expenses\Transact.Expenses.publish.csproj", "{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses", "..\transact.expenses\Transact.Expenses\Transact.Expenses.csproj", "{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Integrations", "Integrations", "{ED213E56-997F-4CBB-8B99-02BBF08BE1A0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integrations.GST", "..\integration.gst\Integrations.GST\Integrations.GST.csproj", "{5726C93D-2B37-45E3-B373-C0E6AB08E35F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integration.Tally", "..\integration.tally\Integration.Tally\Integration.Tally.csproj", "{C311F655-1D8E-443C-93EF-EA462EAB0942}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications", "..\communications\Communications\Communications.csproj", "{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NumberHelper", "..\..\unibase\helpers\NumberHelper\NumberHelper.csproj", "{01CAE981-31DA-47D1-8E2B-7B088075CA23}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Integrations", "..\transact.integrations\Transact.Integrations\Transact.Integrations.csproj", "{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Opportunities", "..\transact.opportunities\Transact.Opportunities\Transact.Opportunities.csproj", "{C607EFD6-A143-46D8-9786-BEEC7DFEF630}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications", "..\..\unibase\platform.communications\Platform.Communications\Platform.Communications.csproj", "{235E8805-3D57-46D7-9E22-8B20C338E5F4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Crypto", "..\..\unibase\platform.crypto\Platform.Crypto\Platform.Crypto.csproj", "{5493DDEA-79BB-413A-857B-87DBC68B946A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RegexHelper", "..\..\unibase\helpers\RegexHelper\RegexHelper.csproj", "{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integrations.Busy", "..\integration.busy\Integrations.Busy.csproj", "{AE937885-BA2B-40F1-BE84-50E673AA22A7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobil", "Mobil", "{F911671F-7D04-4B7D-A867-5F223FD4DEE6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mobil", "..\..\mobil\Mobil.csproj", "{9B58D451-FCB1-41E0-B76D-01234471BD03}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QRCodeHelper", "..\..\unibase\helpers\QRCodeHelper\QRCodeHelper.csproj", "{DCE88449-362C-4EB8-81CB-C6AA528DF555}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignatureHelper", "..\..\unibase\helpers\SignatureHelper\SignatureHelper.csproj", "{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbCacheHelper", "..\..\unibase\helpers\MongoDbCacheHelper\MongoDbCacheHelper.csproj", "{5F425CB4-B3C0-4F2D-8525-4217925F01F5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HybridCacheHelper", "..\..\unibase\helpers\HybridCacheHelper\HybridCacheHelper.csproj", "{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hyperfusion", "Hyperfusion", "{AB246541-45FD-49E6-94D7-BBF11FDD0037}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyperfusion", "..\..\hyperfusion\Hyperfusion.csproj", "{62BB7E71-119B-486B-93CB-B5781F675CE0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharedFileHelper", "..\..\unibase\helpers\SharedFileHelper\SharedFileHelper.csproj", "{458E1994-D914-4648-8621-EB090CAF9925}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Calls", "..\..\unibase\platform.communiations.calls\Platform.Communications.Calls\Platform.Communications.Calls.csproj", "{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Assets", "..\transact.assets\Transact.Assets.csproj", "{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Tasks", "..\..\unibase\platform.communications.tasks\Platform.Communications.Tasks\Platform.Communications.Tasks.csproj", "{867F2EA5-0E61-48E1-A43A-3466F8933E9E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HRMS", "HRMS", "{F4701E48-6341-4A52-B14E-701E2A018044}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HRMS", "..\hrms\HRMS.csproj", "{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payroll", "..\hrms.payroll\Payroll.csproj", "{B250130D-1122-4810-B88C-872971F6254D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiLogHelper", "..\..\unibase\helpers\ApiLogHelper\ApiLogHelper.csproj", "{62CEA450-227B-472E-A31D-3190661A1D4E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider", "..\..\unibase\mongodbprovider\MongoDbProvider\MongoDbProvider.csproj", "{E75EBE63-9F40-4165-AD65-ABFB7D002903}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Visitors", "..\crm.visitors\CRM.Visitors\CRM.Visitors.csproj", "{E2A793FE-C907-4198-9931-D477558F9404}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Subscription", "..\..\unibase\subscription\Platform.Subscription.csproj", "{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Whatsapp", "..\..\unibase\platform.communications.whatsapp\Platform.Communications.Whatsapp.csproj", "{33478621-F177-4777-B595-338E2D2BD780}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.AutomationUtilities", "..\..\unibase\platform.automationutilities\Platform.AutomationUtilities.csproj", "{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LogWriters", "LogWriters", "{E29248C3-E6A4-4574-9CF8-CD807373C589}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlLogWriter", "..\..\unibase\helpers\LogWriters\PgSqlLogWriter\PgSqlLogWriter.csproj", "{73BF26FC-66AF-4FF7-9843-857CC6CAB701}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.QueryExecuter", "..\..\unibase\QueryExecutor\Unibase.QueryExecuter.csproj", "{A2B91B0D-DBAB-46D7-A980-F810835611B7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -253,14 +309,6 @@ Global
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.Build.0 = Release|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.Build.0 = Release|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.Build.0 = Release|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -269,10 +317,6 @@ Global
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.Build.0 = Release|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.Build.0 = Release|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -329,10 +373,6 @@ Global
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.Build.0 = Release|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.Build.0 = Release|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -397,10 +437,6 @@ Global
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.Build.0 = Release|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.Build.0 = Release|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -413,10 +449,6 @@ Global
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.Build.0 = Release|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.Build.0 = Debug|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.ActiveCfg = Release|Any CPU
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.Build.0 = Release|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -425,6 +457,126 @@ Global
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Release|Any CPU.Build.0 = Release|Any CPU
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Release|Any CPU.Build.0 = Release|Any CPU
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Release|Any CPU.Build.0 = Release|Any CPU
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Release|Any CPU.Build.0 = Release|Any CPU
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Release|Any CPU.Build.0 = Release|Any CPU
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Release|Any CPU.Build.0 = Release|Any CPU
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Release|Any CPU.Build.0 = Release|Any CPU
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Release|Any CPU.Build.0 = Release|Any CPU
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Release|Any CPU.Build.0 = Release|Any CPU
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Release|Any CPU.Build.0 = Release|Any CPU
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Release|Any CPU.Build.0 = Release|Any CPU
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Release|Any CPU.Build.0 = Release|Any CPU
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Release|Any CPU.Build.0 = Release|Any CPU
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Release|Any CPU.Build.0 = Release|Any CPU
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Release|Any CPU.Build.0 = Release|Any CPU
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Release|Any CPU.Build.0 = Release|Any CPU
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Release|Any CPU.Build.0 = Release|Any CPU
{458E1994-D914-4648-8621-EB090CAF9925}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{458E1994-D914-4648-8621-EB090CAF9925}.Debug|Any CPU.Build.0 = Debug|Any CPU
{458E1994-D914-4648-8621-EB090CAF9925}.Release|Any CPU.ActiveCfg = Release|Any CPU
{458E1994-D914-4648-8621-EB090CAF9925}.Release|Any CPU.Build.0 = Release|Any CPU
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Release|Any CPU.Build.0 = Release|Any CPU
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Release|Any CPU.Build.0 = Release|Any CPU
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Release|Any CPU.Build.0 = Release|Any CPU
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Release|Any CPU.Build.0 = Release|Any CPU
{B250130D-1122-4810-B88C-872971F6254D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B250130D-1122-4810-B88C-872971F6254D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B250130D-1122-4810-B88C-872971F6254D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B250130D-1122-4810-B88C-872971F6254D}.Release|Any CPU.Build.0 = Release|Any CPU
{62CEA450-227B-472E-A31D-3190661A1D4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62CEA450-227B-472E-A31D-3190661A1D4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62CEA450-227B-472E-A31D-3190661A1D4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62CEA450-227B-472E-A31D-3190661A1D4E}.Release|Any CPU.Build.0 = Release|Any CPU
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Release|Any CPU.Build.0 = Release|Any CPU
{E2A793FE-C907-4198-9931-D477558F9404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E2A793FE-C907-4198-9931-D477558F9404}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E2A793FE-C907-4198-9931-D477558F9404}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E2A793FE-C907-4198-9931-D477558F9404}.Release|Any CPU.Build.0 = Release|Any CPU
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Release|Any CPU.Build.0 = Release|Any CPU
{33478621-F177-4777-B595-338E2D2BD780}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{33478621-F177-4777-B595-338E2D2BD780}.Debug|Any CPU.Build.0 = Debug|Any CPU
{33478621-F177-4777-B595-338E2D2BD780}.Release|Any CPU.ActiveCfg = Release|Any CPU
{33478621-F177-4777-B595-338E2D2BD780}.Release|Any CPU.Build.0 = Release|Any CPU
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Release|Any CPU.Build.0 = Release|Any CPU
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Release|Any CPU.Build.0 = Release|Any CPU
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -451,14 +603,11 @@ Global
{3FFC2545-2DE2-40EA-A236-B78165B713EA} = {831A3710-0BC8-4B88-8369-CD1F9903A46E}
{B4A0DC38-F0FD-4809-B615-4CCB25825527} = {469BBD1D-EB02-4C13-B82F-709AC951705E}
{0054CF31-DCE6-494E-9432-A32564C0AB3B} = {D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}
{3BD27A14-6304-4634-AEC6-4718AD035CA1} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{487BACE1-BA0C-4BA5-81AB-31149CFDF06F} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{FC7154FC-65BB-44DD-8034-358862BA64F9} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{1CE0B249-EDC4-493A-AFE5-495050CA035E} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
{35762CBA-B795-4042-85FB-EBE53C8B8A31} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
{90479407-C8B2-40D4-A0D0-4624141D4D2E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{45053372-51B7-4730-9D6F-656AEE246533} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{262A92C1-9500-4D41-984D-8B71E783B3AB} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
@@ -474,7 +623,6 @@ Global
{D8CBC053-0EA4-498B-ABEE-9DCC79510235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{3919BD62-99CE-447C-B185-47878D0BA616} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96} = {3919BD62-99CE-447C-B185-47878D0BA616}
{59227DCB-E178-41F6-8350-4129F98FE0E8} = {3919BD62-99CE-447C-B185-47878D0BA616}
{C4FCE46F-E921-4840-9FC0-1F9F617498B3} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
@@ -490,14 +638,43 @@ Global
{9980063C-FCCC-4FA9-96ED-015FE69CC61D} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{13297F64-43C3-4495-9E99-43D8950FBF47} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
{2AB114F1-9753-4510-8160-51840B8942A4} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
{61492B23-FA11-4AFE-A883-456FBB78FA10} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{87802CD7-E365-4423-A458-3BC71CFF9330} = {458C3C01-1A87-4328-A474-F17D876C4DB4}
{0B9D4C82-B613-44C7-8514-74F3C97DD50E} = {15B1D139-3E47-415F-8D8A-D5D532D6E3FC}
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{5726C93D-2B37-45E3-B373-C0E6AB08E35F} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
{C311F655-1D8E-443C-93EF-EA462EAB0942} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
{01CAE981-31DA-47D1-8E2B-7B088075CA23} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{C607EFD6-A143-46D8-9786-BEEC7DFEF630} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{235E8805-3D57-46D7-9E22-8B20C338E5F4} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{5493DDEA-79BB-413A-857B-87DBC68B946A} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{AE937885-BA2B-40F1-BE84-50E673AA22A7} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
{9B58D451-FCB1-41E0-B76D-01234471BD03} = {F911671F-7D04-4B7D-A867-5F223FD4DEE6}
{DCE88449-362C-4EB8-81CB-C6AA528DF555} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{5F425CB4-B3C0-4F2D-8525-4217925F01F5} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{62BB7E71-119B-486B-93CB-B5781F675CE0} = {AB246541-45FD-49E6-94D7-BBF11FDD0037}
{458E1994-D914-4648-8621-EB090CAF9925} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6} = {83734364-ABEA-42A7-B441-A77CC912CE88}
{867F2EA5-0E61-48E1-A43A-3466F8933E9E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E} = {F4701E48-6341-4A52-B14E-701E2A018044}
{B250130D-1122-4810-B88C-872971F6254D} = {F4701E48-6341-4A52-B14E-701E2A018044}
{62CEA450-227B-472E-A31D-3190661A1D4E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{E75EBE63-9F40-4165-AD65-ABFB7D002903} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
{E2A793FE-C907-4198-9931-D477558F9404} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{33478621-F177-4777-B595-338E2D2BD780} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
{E29248C3-E6A4-4574-9CF8-CD807373C589} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
{73BF26FC-66AF-4FF7-9843-857CC6CAB701} = {E29248C3-E6A4-4574-9CF8-CD807373C589}
{A2B91B0D-DBAB-46D7-A980-F810835611B7} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BC6811BD-16A3-40FB-A127-2E381584DBB6}
+6
View File
@@ -0,0 +1,6 @@
<Solution>
<Folder Name="/src/">
<Project Path="src/Flo.Installer/Flo.Installer.csproj" />
<Project Path="src/Flo.Manifest.Tool/Flo.Manifest.Tool.csproj" />
</Folder>
</Solution>
+70
View File
@@ -0,0 +1,70 @@
{
"schemaVersion": 1,
"product": "Flo",
"version": "1.0.0",
"channel": "stable",
"releasedAt": "2026-04-20T00:00:00Z",
"minBootstrapperVersion": "1.0.0",
"artifacts": [
{
"id": "postgres",
"version": "16.4",
"platforms": {
"win-x64": {
"url": "https://updates.flo.example/stable/artifacts/postgres-16.4-win-x64.zip",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 157286400,
"archive": "zip",
"installPath": "postgres"
},
"linux-x64": {
"url": "https://updates.flo.example/stable/artifacts/postgres-16.4-linux-x64.tar.gz",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 142606336,
"archive": "tar.gz",
"installPath": "postgres"
}
}
},
{
"id": "ferretdb",
"version": "1.24.0",
"platforms": {
"win-x64": {
"url": "https://updates.flo.example/stable/artifacts/ferretdb-1.24.0-win-x64.zip",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 31457280,
"archive": "zip",
"installPath": "ferretdb"
},
"linux-x64": {
"url": "https://updates.flo.example/stable/artifacts/ferretdb-1.24.0-linux-x64.tar.gz",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 28311552,
"archive": "tar.gz",
"installPath": "ferretdb"
}
}
},
{
"id": "flo-service",
"version": "1.0.0",
"platforms": {
"win-x64": {
"url": "https://updates.flo.example/stable/artifacts/flo-service-1.0.0-win-x64.zip",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 52428800,
"archive": "zip",
"installPath": "service"
},
"linux-x64": {
"url": "https://updates.flo.example/stable/artifacts/flo-service-1.0.0-linux-x64.tar.gz",
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"sizeBytes": 50331648,
"archive": "tar.gz",
"installPath": "service"
}
}
}
]
}
@@ -0,0 +1,56 @@
using System.Security.Cryptography;
namespace Flo.Installer;
internal sealed class ArtifactDownloader(HttpClient http)
{
public async Task DownloadAsync(
Uri url,
string destinationPath,
string expectedSha256,
long expectedSize,
IProgress<DownloadProgress>? progress,
CancellationToken ct)
{
Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!);
using var response = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, ct);
response.EnsureSuccessStatusCode();
await using var source = await response.Content.ReadAsStreamAsync(ct);
await using var destination = File.Create(destinationPath);
using var sha = SHA256.Create();
var buffer = new byte[81920];
long totalRead = 0;
int read;
while ((read = await source.ReadAsync(buffer, ct)) > 0)
{
await destination.WriteAsync(buffer.AsMemory(0, read), ct);
sha.TransformBlock(buffer, 0, read, null, 0);
totalRead += read;
progress?.Report(new DownloadProgress(totalRead, expectedSize));
}
sha.TransformFinalBlock([], 0, 0);
string actualHex = Convert.ToHexString(sha.Hash!).ToLowerInvariant();
if (!string.Equals(actualHex, expectedSha256, StringComparison.OrdinalIgnoreCase))
{
File.Delete(destinationPath);
throw new InvalidOperationException(
$"SHA-256 mismatch for {url}. expected={expectedSha256} actual={actualHex}");
}
if (totalRead != expectedSize)
{
File.Delete(destinationPath);
throw new InvalidOperationException(
$"Size mismatch for {url}. expected={expectedSize} actual={totalRead}");
}
}
}
internal readonly record struct DownloadProgress(long BytesRead, long TotalBytes)
{
public double PercentComplete => TotalBytes > 0 ? (double)BytesRead / TotalBytes * 100.0 : 0.0;
}
@@ -0,0 +1,107 @@
using System.IO.Compression;
using System.Runtime.InteropServices;
namespace Flo.Installer.Commands;
internal static class InstallCommand
{
public static async Task<int> ExecuteAsync(string manifestUrl, string installPath, CancellationToken ct = default)
{
if (TrustedPublicKey.IsPlaceholder)
{
Console.Error.WriteLine(
"Trusted public key is unset. Bake the release public key into TrustedPublicKey.Bytes before running against a real manifest.");
return 2;
}
string rid = DetectRid();
Console.WriteLine($"Platform: {rid}");
Console.WriteLine($"Manifest: {manifestUrl}");
Console.WriteLine($"Install path: {installPath}");
Console.WriteLine();
using var http = new HttpClient { Timeout = TimeSpan.FromMinutes(10) };
var manifestClient = new ManifestClient(http);
var downloader = new ArtifactDownloader(http);
Manifest manifest;
try
{
manifest = await manifestClient.DownloadAndVerifyAsync(new Uri(manifestUrl), TrustedPublicKey.Bytes, ct);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Manifest load failed: {ex.Message}");
return 3;
}
Console.WriteLine($"Verified manifest: {manifest.Product} {manifest.Version} ({manifest.Channel})");
Console.WriteLine();
Directory.CreateDirectory(installPath);
string cacheDir = Path.Combine(installPath, ".cache");
Directory.CreateDirectory(cacheDir);
foreach (var artifact in manifest.Artifacts)
{
if (!artifact.Platforms.TryGetValue(rid, out var platform))
{
Console.WriteLine($"[skip] {artifact.Id}: no entry for {rid}.");
continue;
}
string cacheFile = Path.Combine(cacheDir, $"{artifact.Id}-{artifact.Version}-{rid}.bin");
var progress = new Progress<DownloadProgress>(p =>
Console.Write($"\r[get ] {artifact.Id} {artifact.Version} {p.PercentComplete,6:0.0}% "));
await downloader.DownloadAsync(
new Uri(platform.Url), cacheFile, platform.Sha256, platform.SizeBytes, progress, ct);
Console.WriteLine();
string target = Path.Combine(installPath, platform.InstallPath);
Console.WriteLine($"[inst] {artifact.Id} -> {target}");
Install(cacheFile, target, platform.Archive);
}
Console.WriteLine();
Console.WriteLine("Install complete.");
return 0;
}
private static void Install(string source, string target, string archive)
{
switch (archive)
{
case "zip":
Directory.CreateDirectory(target);
ZipFile.ExtractToDirectory(source, target, overwriteFiles: true);
break;
case "tar.gz":
Directory.CreateDirectory(target);
using (var fs = File.OpenRead(source))
using (var gz = new GZipStream(fs, CompressionMode.Decompress))
System.Formats.Tar.TarFile.ExtractToDirectory(gz, target, overwriteFiles: true);
break;
case "none":
Directory.CreateDirectory(Path.GetDirectoryName(target)!);
File.Copy(source, target, overwrite: true);
break;
default:
throw new InvalidOperationException($"Unknown archive type: {archive}");
}
}
private static string DetectRid()
{
string os = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "win"
: RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "linux"
: throw new PlatformNotSupportedException("Only Windows and Linux are supported.");
string arch = RuntimeInformation.ProcessArchitecture switch
{
Architecture.X64 => "x64",
Architecture.Arm64 => "arm64",
var a => throw new PlatformNotSupportedException($"Unsupported architecture: {a}.")
};
return $"{os}-{arch}";
}
}
@@ -0,0 +1,91 @@
using Flo.Installer.Provisioning;
namespace Flo.Installer.Commands;
internal static class ProvisionCommand
{
private const string DefaultSuperuser = "postgres";
private const string DefaultRole = "flo_app";
private const string DefaultDatabase = "flo";
public static async Task<int> ExecuteAsync(string installPath, CancellationToken ct = default)
{
var paths = new Paths(installPath);
Directory.CreateDirectory(paths.Config);
Directory.CreateDirectory(paths.Logs);
if (!File.Exists(paths.PostgresBin("initdb")))
throw new InvalidOperationException($"Postgres binaries not found at {paths.Postgres}. Run `install` first.");
if (!File.Exists(paths.FerretDbExe()))
throw new InvalidOperationException($"FerretDB binary not found at {paths.FerretDbExe()}. Run `install` first.");
var secretsStore = new SecretsStore(paths.SecretsFile);
FloConfig config;
Dictionary<string, string> secrets;
if (File.Exists(paths.ConfigFile) && secretsStore.Exists())
{
Console.WriteLine("Existing flo.json + secrets.json found — reusing ports and passwords.");
config = FloConfig.Load(paths.ConfigFile);
secrets = new Dictionary<string, string>(secretsStore.Load());
}
else
{
int pgPort = PortScanner.FindFreeLoopbackPort();
int fdPort = PortScanner.FindFreeLoopbackPort();
while (fdPort == pgPort) fdPort = PortScanner.FindFreeLoopbackPort();
config = new FloConfig(
PostgresPort: pgPort,
FerretDbPort: fdPort,
PostgresSuperuser: DefaultSuperuser,
ApplicationDbRole: DefaultRole,
ApplicationDbName: DefaultDatabase);
secrets = new Dictionary<string, string>
{
[$"pg.{config.PostgresSuperuser}"] = PasswordGenerator.Generate(),
[$"pg.{config.ApplicationDbRole}"] = PasswordGenerator.Generate(),
};
config.Save(paths.ConfigFile);
secretsStore.Save(secrets);
Console.WriteLine($"Allocated Postgres port {pgPort}, FerretDB port {fdPort}.");
}
var postgres = new PostgresProvisioner(paths);
if (!postgres.IsInitialized())
{
Console.WriteLine("Running initdb...");
postgres.Initialize(config.PostgresSuperuser, secrets[$"pg.{config.PostgresSuperuser}"]);
Console.WriteLine("initdb complete.");
}
else
{
Console.WriteLine("Postgres data dir already initialized; skipping initdb.");
}
postgres.ConfigurePort(config.PostgresPort);
Console.WriteLine("Starting Postgres temporarily to create role + database...");
await using (var pg = postgres.Start(config.PostgresPort))
{
await HealthCheck.WaitForPortAsync(
"127.0.0.1", config.PostgresPort, TimeSpan.FromSeconds(30), "Postgres", ct);
postgres.EnsureRoleAndDatabase(
config.PostgresPort,
config.PostgresSuperuser, secrets[$"pg.{config.PostgresSuperuser}"],
config.ApplicationDbRole, secrets[$"pg.{config.ApplicationDbRole}"],
config.ApplicationDbName);
Console.WriteLine($"Ensured role '{config.ApplicationDbRole}' and database '{config.ApplicationDbName}'.");
postgres.StopGracefully();
}
Console.WriteLine("Provisioning complete.");
return 0;
}
}
@@ -0,0 +1,69 @@
using System.Runtime.InteropServices;
using Flo.Installer.Provisioning;
namespace Flo.Installer.Commands;
internal static class RunCommand
{
public static async Task<int> ExecuteAsync(string installPath)
{
var paths = new Paths(installPath);
if (!File.Exists(paths.ConfigFile) || !File.Exists(paths.SecretsFile))
{
Console.Error.WriteLine("flo.json or secrets.json missing. Run `provision` first.");
return 1;
}
var config = FloConfig.Load(paths.ConfigFile);
var secrets = new SecretsStore(paths.SecretsFile).Load();
using var cts = new CancellationTokenSource();
Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); };
using var _sigterm = PosixSignalRegistration.Create(PosixSignal.SIGTERM, ctx =>
{
ctx.Cancel = true;
cts.Cancel();
});
var postgres = new PostgresProvisioner(paths);
var ferret = new FerretDbProvisioner(paths);
Console.WriteLine($"Starting Postgres on 127.0.0.1:{config.PostgresPort}...");
await using var pg = postgres.Start(config.PostgresPort);
await HealthCheck.WaitForPortAsync(
"127.0.0.1", config.PostgresPort, TimeSpan.FromSeconds(30), "Postgres", cts.Token);
Console.WriteLine("Postgres healthy.");
Console.WriteLine($"Starting FerretDB on 127.0.0.1:{config.FerretDbPort}...");
await using var fd = ferret.Start(
listenPort: config.FerretDbPort,
postgresPort: config.PostgresPort,
pgUser: config.ApplicationDbRole,
pgPassword: secrets[$"pg.{config.ApplicationDbRole}"],
pgDatabase: config.ApplicationDbName);
await HealthCheck.WaitForPortAsync(
"127.0.0.1", config.FerretDbPort, TimeSpan.FromSeconds(30), "FerretDB", cts.Token);
Console.WriteLine("FerretDB healthy.");
Console.WriteLine();
Console.WriteLine($"Postgres: host=127.0.0.1 port={config.PostgresPort} user={config.ApplicationDbRole} db={config.ApplicationDbName}");
Console.WriteLine($"Mongo URL: mongodb://{config.ApplicationDbRole}:<password>@127.0.0.1:{config.FerretDbPort}/{config.ApplicationDbName}");
Console.WriteLine("(Password is in secrets.json.)");
Console.WriteLine();
Console.WriteLine("Press Ctrl-C to stop.");
try { await Task.Delay(Timeout.Infinite, cts.Token); }
catch (OperationCanceledException) { }
Console.WriteLine();
Console.WriteLine("Shutdown requested. Stopping FerretDB then Postgres...");
try { await fd.StopAsync(TimeSpan.FromSeconds(10)); }
catch (Exception ex) { Console.Error.WriteLine($"FerretDB stop error: {ex.Message}"); }
try { postgres.StopGracefully(); }
catch (Exception ex) { Console.Error.WriteLine($"Postgres graceful stop error: {ex.Message}"); }
return 0;
}
}
@@ -0,0 +1,13 @@
using NSec.Cryptography;
namespace Flo.Installer;
internal static class Ed25519Verifier
{
public static bool Verify(ReadOnlySpan<byte> publicKey, ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature)
{
var algorithm = SignatureAlgorithm.Ed25519;
var key = NSec.Cryptography.PublicKey.Import(algorithm, publicKey, KeyBlobFormat.RawPublicKey);
return algorithm.Verify(key, data, signature);
}
}
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NSec.Cryptography" Version="25.4.0" />
</ItemGroup>
</Project>
+24
View File
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;
namespace Flo.Installer;
public sealed record Manifest(
[property: JsonPropertyName("schemaVersion")] int SchemaVersion,
[property: JsonPropertyName("product")] string Product,
[property: JsonPropertyName("version")] string Version,
[property: JsonPropertyName("channel")] string Channel,
[property: JsonPropertyName("releasedAt")] DateTimeOffset ReleasedAt,
[property: JsonPropertyName("minBootstrapperVersion")] string MinBootstrapperVersion,
[property: JsonPropertyName("artifacts")] IReadOnlyList<Artifact> Artifacts);
public sealed record Artifact(
[property: JsonPropertyName("id")] string Id,
[property: JsonPropertyName("version")] string Version,
[property: JsonPropertyName("platforms")] IReadOnlyDictionary<string, PlatformArtifact> Platforms);
public sealed record PlatformArtifact(
[property: JsonPropertyName("url")] string Url,
[property: JsonPropertyName("sha256")] string Sha256,
[property: JsonPropertyName("sizeBytes")] long SizeBytes,
[property: JsonPropertyName("archive")] string Archive,
[property: JsonPropertyName("installPath")] string InstallPath);
@@ -0,0 +1,25 @@
using System.Text;
using System.Text.Json;
namespace Flo.Installer;
internal sealed class ManifestClient(HttpClient http)
{
public async Task<Manifest> DownloadAndVerifyAsync(
Uri manifestUrl,
ReadOnlyMemory<byte> trustedPublicKey,
CancellationToken ct)
{
var sigUrl = new Uri(manifestUrl + ".sig");
byte[] manifestBytes = await http.GetByteArrayAsync(manifestUrl, ct);
byte[] sigText = await http.GetByteArrayAsync(sigUrl, ct);
byte[] signature = Convert.FromBase64String(Encoding.UTF8.GetString(sigText).Trim());
if (!Ed25519Verifier.Verify(trustedPublicKey.Span, manifestBytes, signature))
throw new InvalidOperationException("Manifest signature verification failed.");
return JsonSerializer.Deserialize<Manifest>(manifestBytes)
?? throw new InvalidOperationException("Manifest deserialized to null.");
}
}
+59
View File
@@ -0,0 +1,59 @@
using Flo.Installer.Commands;
if (args.Length == 0 || args[0] is "--help" or "-h")
{
PrintUsage();
return 0;
}
try
{
return args[0] switch
{
"install" => await InstallCommand.ExecuteAsync(Required(args, "--manifest"), Required(args, "--install")),
"provision" => await ProvisionCommand.ExecuteAsync(Required(args, "--install")),
"setup" => await Setup(args),
"run" => await RunCommand.ExecuteAsync(Required(args, "--install")),
var cmd => Unknown(cmd)
};
}
catch (Exception ex)
{
Console.Error.WriteLine($"Fatal: {ex.Message}");
return 1;
}
static async Task<int> Setup(string[] args)
{
string manifest = Required(args, "--manifest");
string install = Required(args, "--install");
int rc = await InstallCommand.ExecuteAsync(manifest, install);
if (rc != 0) return rc;
return await ProvisionCommand.ExecuteAsync(install);
}
static int Unknown(string cmd)
{
Console.Error.WriteLine($"Unknown command: {cmd}");
PrintUsage();
return 1;
}
static string Required(string[] args, string name)
{
int i = Array.IndexOf(args, name);
if (i < 0 || i + 1 >= args.Length)
throw new ArgumentException($"{name} <value> is required.");
return args[i + 1];
}
static void PrintUsage()
{
Console.WriteLine("Flo Installer");
Console.WriteLine();
Console.WriteLine("Commands:");
Console.WriteLine(" setup --manifest <url> --install <path> download + extract + provision DBs");
Console.WriteLine(" install --manifest <url> --install <path> download + extract only");
Console.WriteLine(" provision --install <path> provision Postgres + FerretDB (idempotent)");
Console.WriteLine(" run --install <path> start Postgres + FerretDB, block on Ctrl-C");
}
@@ -0,0 +1,22 @@
namespace Flo.Installer.Provisioning;
internal sealed class FerretDbProvisioner(Paths paths)
{
public ProcessRunner Start(int listenPort, int postgresPort, string pgUser, string pgPassword, string pgDatabase)
{
Directory.CreateDirectory(paths.FerretDbData);
string pgUrl = $"postgres://{Uri.EscapeDataString(pgUser)}:{Uri.EscapeDataString(pgPassword)}@127.0.0.1:{postgresPort}/{pgDatabase}";
var env = new Dictionary<string, string>
{
["FERRETDB_POSTGRESQL_URL"] = pgUrl,
["FERRETDB_LISTEN_ADDR"] = $"127.0.0.1:{listenPort}",
["FERRETDB_STATE_DIR"] = paths.FerretDbData,
["FERRETDB_TELEMETRY"] = "disable",
["FERRETDB_LOG_LEVEL"] = "info",
};
return ProcessRunner.Start(paths.FerretDbExe(), [], env, name: "ferretdb");
}
}
@@ -0,0 +1,22 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Flo.Installer.Provisioning;
internal sealed record FloConfig(
[property: JsonPropertyName("postgresPort")] int PostgresPort,
[property: JsonPropertyName("ferretDbPort")] int FerretDbPort,
[property: JsonPropertyName("postgresSuperuser")] string PostgresSuperuser,
[property: JsonPropertyName("applicationDbRole")] string ApplicationDbRole,
[property: JsonPropertyName("applicationDbName")] string ApplicationDbName)
{
public static FloConfig Load(string path)
=> JsonSerializer.Deserialize<FloConfig>(File.ReadAllBytes(path))
?? throw new InvalidOperationException($"Could not parse {path}");
public void Save(string path)
{
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
File.WriteAllText(path, JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true }));
}
}
@@ -0,0 +1,34 @@
using System.Net.Sockets;
namespace Flo.Installer.Provisioning;
internal static class HealthCheck
{
public static async Task WaitForPortAsync(
string host,
int port,
TimeSpan timeout,
string description,
CancellationToken ct)
{
var deadline = DateTime.UtcNow + timeout;
Exception? last = null;
while (DateTime.UtcNow < deadline)
{
ct.ThrowIfCancellationRequested();
try
{
using var client = new TcpClient();
await client.ConnectAsync(host, port, ct);
return;
}
catch (SocketException ex)
{
last = ex;
await Task.Delay(500, ct);
}
}
throw new TimeoutException(
$"{description} at {host}:{port} did not become healthy within {timeout.TotalSeconds:0}s. Last error: {last?.Message}");
}
}
@@ -0,0 +1,23 @@
using System.Security.Cryptography;
namespace Flo.Installer.Provisioning;
internal static class PasswordGenerator
{
private const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// Largest multiple of 62 that is <= 256; rejection sampling avoids modulo bias.
private const byte RejectAbove = 247;
public static string Generate(int length = 32)
{
var chars = new char[length];
Span<byte> b = stackalloc byte[1];
for (int i = 0; i < length;)
{
RandomNumberGenerator.Fill(b);
if (b[0] <= RejectAbove)
chars[i++] = Alphabet[b[0] % Alphabet.Length];
}
return new string(chars);
}
}
@@ -0,0 +1,26 @@
using System.Runtime.InteropServices;
namespace Flo.Installer.Provisioning;
internal sealed record Paths(string Install)
{
public string Postgres => Path.Combine(Install, "postgres");
public string FerretDb => Path.Combine(Install, "ferretdb");
public string Service => Path.Combine(Install, "service");
public string DataRoot => Path.Combine(Install, "data");
public string PostgresData => Path.Combine(DataRoot, "postgres");
public string FerretDbData => Path.Combine(DataRoot, "ferretdb");
public string Logs => Path.Combine(Install, "logs");
public string Config => Path.Combine(Install, "config");
public string ConfigFile => Path.Combine(Config, "flo.json");
public string SecretsFile => Path.Combine(Install, "secrets", "secrets.json");
public string PostgresBin(string tool)
{
string name = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? $"{tool}.exe" : tool;
return Path.Combine(Postgres, "bin", name);
}
public string FerretDbExe()
=> Path.Combine(FerretDb, RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "ferretdb.exe" : "ferretdb");
}
@@ -0,0 +1,16 @@
using System.Net;
using System.Net.Sockets;
namespace Flo.Installer.Provisioning;
internal static class PortScanner
{
public static int FindFreeLoopbackPort()
{
using var listener = new TcpListener(IPAddress.Loopback, 0);
listener.Start();
int port = ((IPEndPoint)listener.LocalEndpoint).Port;
listener.Stop();
return port;
}
}
@@ -0,0 +1,164 @@
using System.Diagnostics;
namespace Flo.Installer.Provisioning;
internal sealed class PostgresProvisioner(Paths paths)
{
public bool IsInitialized() => File.Exists(Path.Combine(paths.PostgresData, "PG_VERSION"));
public void Initialize(string superuser, string superuserPassword)
{
Directory.CreateDirectory(paths.PostgresData);
string pwFile = Path.Combine(paths.DataRoot, ".pg-init-pwd.tmp");
File.WriteAllText(pwFile, superuserPassword);
try
{
RunToCompletion(paths.PostgresBin("initdb"),
["--pgdata", paths.PostgresData,
"--username", superuser,
"--pwfile", pwFile,
"--auth-local", "scram-sha-256",
"--auth-host", "scram-sha-256",
"--encoding", "UTF8"],
env: null);
}
finally
{
if (File.Exists(pwFile)) File.Delete(pwFile);
}
}
public void ConfigurePort(int port)
{
string confPath = Path.Combine(paths.PostgresData, "postgresql.conf");
var lines = File.ReadAllLines(confPath).ToList();
SetOrAppend(lines, "listen_addresses", "'127.0.0.1'");
SetOrAppend(lines, "port", port.ToString());
File.WriteAllLines(confPath, lines);
}
public ProcessRunner Start(int port) =>
ProcessRunner.Start(paths.PostgresBin("postgres"),
["-D", paths.PostgresData, "-p", port.ToString()],
env: null,
name: "postgres");
// pg_ctl stop -m fast is the portable graceful shutdown — faster than smart, cleaner than SIGKILL.
public void StopGracefully()
{
RunToCompletion(paths.PostgresBin("pg_ctl"),
["stop", "-D", paths.PostgresData, "-m", "fast", "-w"],
env: null);
}
public void EnsureRoleAndDatabase(
int port,
string superuser,
string superuserPassword,
string role,
string rolePassword,
string database)
{
if (!RoleExists(port, superuser, superuserPassword, role))
{
Psql(port, superuser, superuserPassword, "postgres",
$"CREATE ROLE \"{role}\" LOGIN PASSWORD '{EscapeLiteral(rolePassword)}';");
}
if (!DatabaseExists(port, superuser, superuserPassword, database))
{
Psql(port, superuser, superuserPassword, "postgres",
$"CREATE DATABASE \"{database}\" OWNER \"{role}\";");
}
}
private bool RoleExists(int port, string user, string password, string role)
=> PsqlScalar(port, user, password, "postgres",
$"SELECT 1 FROM pg_roles WHERE rolname = '{EscapeLiteral(role)}';") == "1";
private bool DatabaseExists(int port, string user, string password, string database)
=> PsqlScalar(port, user, password, "postgres",
$"SELECT 1 FROM pg_database WHERE datname = '{EscapeLiteral(database)}';") == "1";
private void Psql(int port, string user, string password, string db, string sql)
{
var (exit, stdout, stderr) = InvokePsql(port, user, password, db, sql, quiet: false);
if (exit != 0)
throw new InvalidOperationException($"psql failed (exit {exit})\nstdout: {stdout}\nstderr: {stderr}");
}
private string PsqlScalar(int port, string user, string password, string db, string sql)
{
var (exit, stdout, stderr) = InvokePsql(port, user, password, db, sql, quiet: true);
if (exit != 0)
throw new InvalidOperationException($"psql scalar failed (exit {exit})\nstdout: {stdout}\nstderr: {stderr}");
return stdout.Trim();
}
private (int exit, string stdout, string stderr) InvokePsql(
int port, string user, string password, string db, string sql, bool quiet)
{
var psi = new ProcessStartInfo(paths.PostgresBin("psql"))
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
psi.ArgumentList.Add("-h"); psi.ArgumentList.Add("127.0.0.1");
psi.ArgumentList.Add("-p"); psi.ArgumentList.Add(port.ToString());
psi.ArgumentList.Add("-U"); psi.ArgumentList.Add(user);
psi.ArgumentList.Add("-d"); psi.ArgumentList.Add(db);
psi.ArgumentList.Add("-v"); psi.ArgumentList.Add("ON_ERROR_STOP=1");
if (quiet)
{
psi.ArgumentList.Add("-At"); // unaligned, tuples-only
}
psi.ArgumentList.Add("-c"); psi.ArgumentList.Add(sql);
psi.Environment["PGPASSWORD"] = password;
using var proc = Process.Start(psi) ?? throw new InvalidOperationException("Failed to start psql");
string stdout = proc.StandardOutput.ReadToEnd();
string stderr = proc.StandardError.ReadToEnd();
proc.WaitForExit();
return (proc.ExitCode, stdout, stderr);
}
private static string EscapeLiteral(string s) => s.Replace("'", "''");
private static void SetOrAppend(List<string> lines, string key, string value)
{
string prefix = key;
int i = lines.FindIndex(l =>
{
string t = l.TrimStart();
return t.StartsWith(prefix + " ") || t.StartsWith(prefix + "\t") || t.StartsWith(prefix + "=");
});
string newLine = $"{key} = {value}";
if (i >= 0) lines[i] = newLine;
else lines.Add(newLine);
}
private static void RunToCompletion(string exe, IReadOnlyList<string> args, IReadOnlyDictionary<string, string>? env)
{
var psi = new ProcessStartInfo(exe)
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
foreach (var a in args) psi.ArgumentList.Add(a);
if (env is not null)
foreach (var kv in env) psi.Environment[kv.Key] = kv.Value;
using var proc = Process.Start(psi) ?? throw new InvalidOperationException($"Failed to start {exe}");
string stdout = proc.StandardOutput.ReadToEnd();
string stderr = proc.StandardError.ReadToEnd();
proc.WaitForExit();
if (proc.ExitCode != 0)
throw new InvalidOperationException(
$"{Path.GetFileName(exe)} failed (exit {proc.ExitCode})\nstdout: {stdout}\nstderr: {stderr}");
}
}
@@ -0,0 +1,63 @@
using System.Diagnostics;
namespace Flo.Installer.Provisioning;
internal sealed class ProcessRunner : IAsyncDisposable
{
private readonly Process _process;
private readonly string _name;
private ProcessRunner(Process process, string name)
{
_process = process;
_name = name;
}
public static ProcessRunner Start(
string executable,
IReadOnlyList<string> args,
IReadOnlyDictionary<string, string>? env,
string name)
{
var psi = new ProcessStartInfo(executable)
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
foreach (var a in args) psi.ArgumentList.Add(a);
if (env is not null)
foreach (var kv in env) psi.Environment[kv.Key] = kv.Value;
var proc = Process.Start(psi) ?? throw new InvalidOperationException($"Failed to start {executable}");
proc.OutputDataReceived += (_, e) => { if (e.Data != null) Console.WriteLine($"[{name}] {e.Data}"); };
proc.ErrorDataReceived += (_, e) => { if (e.Data != null) Console.Error.WriteLine($"[{name}] {e.Data}"); };
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
return new ProcessRunner(proc, name);
}
public bool HasExited => _process.HasExited;
public int ExitCode => _process.ExitCode;
public Process Process => _process;
public async Task StopAsync(TimeSpan timeout)
{
if (_process.HasExited) return;
_process.Kill(entireProcessTree: true);
await _process.WaitForExitAsync().WaitAsync(timeout);
}
public async ValueTask DisposeAsync()
{
if (!_process.HasExited)
{
try { await StopAsync(TimeSpan.FromSeconds(10)); }
catch (Exception ex) { Console.Error.WriteLine($"[{_name}] stop error: {ex.Message}"); }
}
_process.Dispose();
}
}
@@ -0,0 +1,26 @@
using System.Text.Json;
namespace Flo.Installer.Provisioning;
internal sealed class SecretsStore(string path)
{
public bool Exists() => File.Exists(path);
public IReadOnlyDictionary<string, string> Load()
=> JsonSerializer.Deserialize<Dictionary<string, string>>(File.ReadAllBytes(path))
?? throw new InvalidOperationException($"Malformed secrets file: {path}");
public void Save(IReadOnlyDictionary<string, string> secrets)
{
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
File.WriteAllText(path, JsonSerializer.Serialize(secrets, new JsonSerializerOptions { WriteIndented = true }));
RestrictPermissions(path);
}
// Phase 5 will swap this for DPAPI on Windows and real ACLs; Linux keeps the file-mode approach.
private static void RestrictPermissions(string path)
{
if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
File.SetUnixFileMode(path, UnixFileMode.UserRead | UnixFileMode.UserWrite);
}
}
@@ -0,0 +1,13 @@
namespace Flo.Installer;
internal static class TrustedPublicKey
{
// Placeholder. Replace before any real release.
// 1. Generate keypair: dotnet run --project src/Flo.Manifest.Tool -- generate-key --out release-keypair.key
// 2. Export public key: dotnet run --project src/Flo.Manifest.Tool -- export-pubkey --key release-keypair.key
// 3. Paste the printed array literal over the line below and rebuild.
// 4. Move release-keypair.key to offline storage. Never commit it.
public static readonly byte[] Bytes = new byte[32];
public static bool IsPlaceholder => Bytes.All(b => b == 0);
}
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NSec.Cryptography" Version="25.4.0" />
</ItemGroup>
</Project>
+123
View File
@@ -0,0 +1,123 @@
using NSec.Cryptography;
if (args.Length == 0)
{
PrintUsage();
return 0;
}
try
{
return args[0] switch
{
"generate-key" => GenerateKey(args),
"export-pubkey" => ExportPubkey(args),
"sign" => Sign(args),
"verify" => Verify(args),
_ => UnknownCommand()
};
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error: {ex.Message}");
return 1;
}
static int UnknownCommand()
{
Console.Error.WriteLine("Unknown command.");
PrintUsage();
return 1;
}
static int GenerateKey(string[] args)
{
string outPath = RequireArg(args, "--out");
if (File.Exists(outPath))
throw new InvalidOperationException($"{outPath} already exists. Refusing to overwrite a keypair.");
var algorithm = SignatureAlgorithm.Ed25519;
using var key = Key.Create(algorithm, new KeyCreationParameters
{
ExportPolicy = KeyExportPolicies.AllowPlaintextExport
});
byte[] priv = key.Export(KeyBlobFormat.RawPrivateKey);
byte[] pub = key.PublicKey.Export(KeyBlobFormat.RawPublicKey);
File.WriteAllText(outPath, $"{Convert.ToBase64String(priv)}\n{Convert.ToBase64String(pub)}\n");
Console.WriteLine($"Wrote keypair to {outPath}");
Console.WriteLine("Protect this file. Losing it means you cannot ship updates; leaking it means anyone can.");
return 0;
}
static int ExportPubkey(string[] args)
{
string keyPath = RequireArg(args, "--key");
(_, byte[] pub) = LoadKeypair(keyPath);
string literal = string.Join(", ", pub.Select(b => $"0x{b:x2}"));
Console.WriteLine("// Paste into src/Flo.Installer/TrustedPublicKey.cs");
Console.WriteLine($"public static readonly byte[] Bytes = new byte[] {{ {literal} }};");
return 0;
}
static int Sign(string[] args)
{
string manifestPath = RequireArg(args, "--manifest");
string keyPath = RequireArg(args, "--key");
string outPath = RequireArg(args, "--out");
(byte[] priv, _) = LoadKeypair(keyPath);
var algorithm = SignatureAlgorithm.Ed25519;
using var signingKey = Key.Import(algorithm, priv, KeyBlobFormat.RawPrivateKey);
byte[] manifestBytes = File.ReadAllBytes(manifestPath);
byte[] signature = algorithm.Sign(signingKey, manifestBytes);
File.WriteAllText(outPath, Convert.ToBase64String(signature));
Console.WriteLine($"Signed: {manifestPath} -> {outPath}");
return 0;
}
static int Verify(string[] args)
{
string manifestPath = RequireArg(args, "--manifest");
string sigPath = RequireArg(args, "--sig");
string keyPath = RequireArg(args, "--key");
(_, byte[] pub) = LoadKeypair(keyPath);
var algorithm = SignatureAlgorithm.Ed25519;
var pubKey = NSec.Cryptography.PublicKey.Import(algorithm, pub, KeyBlobFormat.RawPublicKey);
byte[] manifestBytes = File.ReadAllBytes(manifestPath);
byte[] signature = Convert.FromBase64String(File.ReadAllText(sigPath).Trim());
bool ok = algorithm.Verify(pubKey, manifestBytes, signature);
Console.WriteLine(ok ? "OK: signature valid." : "FAIL: signature INVALID.");
return ok ? 0 : 2;
}
static (byte[] priv, byte[] pub) LoadKeypair(string path)
{
string[] lines = File.ReadAllLines(path);
if (lines.Length < 2)
throw new InvalidOperationException($"Malformed keypair file: {path}");
return (Convert.FromBase64String(lines[0]), Convert.FromBase64String(lines[1]));
}
static string RequireArg(string[] args, string name)
{
int i = Array.IndexOf(args, name);
if (i < 0 || i + 1 >= args.Length)
throw new ArgumentException($"{name} <value> is required.");
return args[i + 1];
}
static void PrintUsage()
{
Console.WriteLine("Flo.Manifest.Tool (release-side signing helper)");
Console.WriteLine();
Console.WriteLine("Commands:");
Console.WriteLine(" generate-key --out <keypair-file>");
Console.WriteLine(" export-pubkey --key <keypair-file>");
Console.WriteLine(" sign --manifest <path> --key <keypair-file> --out <sig-file>");
Console.WriteLine(" verify --manifest <path> --sig <sig-file> --key <keypair-file>");
}
+1
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.