From 933a61b95485d94db4ad92eb372da2f2cd774b38 Mon Sep 17 00:00:00 2001 From: "kenneth@hexad.dk" Date: Mon, 21 Nov 2011 22:28:20 +0000 Subject: [PATCH] First version of a Windows TrayIcon working against a http server. git-svn-id: https://duplicati.googlecode.com/svn/branches/v2.0@1026 59da171f-624f-0410-aa54-27559c288bec --- Duplicati.sln | 431 ++++++------ .../Duplicati.GUI.TrayIcon.csproj | 137 +++- .../Duplicati.GUI.TrayIcon.csproj.user | 16 + .../GUI/Duplicati.GUI.TrayIcon/Duplicati.snk | Bin 0 -> 596 bytes .../HostedInstanceKeeper.cs | 36 + .../HttpServerConnection.cs | 205 +++++- .../GUI/Duplicati.GUI.TrayIcon/Program.cs | 17 +- .../Properties/Resources.Designer.cs | 177 ++++- .../Properties/Resources.resx | 71 +- .../Resources/Clock05.png | Bin 0 -> 678 bytes .../Resources/Clock15.png | Bin 0 -> 729 bytes .../Resources/Clock30.png | Bin 0 -> 794 bytes .../Resources/Clock60.png | Bin 0 -> 825 bytes .../Resources/CloseMenuIcon.png | Bin 0 -> 661 bytes .../Resources/Delay.png | Bin 0 -> 573 bytes .../Resources/Pause.png | Bin 0 -> 515 bytes .../Duplicati.GUI.TrayIcon/Resources/Play.png | Bin 0 -> 562 bytes .../Resources/SettingsMenuIcon.png | Bin 0 -> 663 bytes .../Resources/StatusMenuIcon.png | Bin 0 -> 667 bytes .../Duplicati.GUI.TrayIcon/Resources/Stop.png | Bin 0 -> 818 bytes .../Resources/Throttle.png | Bin 0 -> 744 bytes .../Resources/TrayNormal.ico | Bin 0 -> 29926 bytes .../Resources/TrayNormalError.ico | Bin 0 -> 46878 bytes .../Resources/TrayNormalPause.ico | Bin 0 -> 29926 bytes .../Resources/TrayNormalWarning.ico | Bin 0 -> 46878 bytes .../Resources/TrayWorking.ico | Bin 0 -> 29926 bytes .../Resources/TrayWorkingPause.ico | Bin 0 -> 29926 bytes .../Resources/WizardMenuIcon.png | Bin 0 -> 660 bytes .../SerializationHelper.cs | 21 + .../Strings/WindowsMainForm.Designer.cs | 81 +++ .../Strings/WindowsMainForm.resx | 126 ++++ .../WindowsMainForm.Designer.cs | 251 +++++++ .../Duplicati.GUI.TrayIcon/WindowsMainForm.cs | 113 ++++ .../WindowsMainForm.resx | 630 ++++++++++++++++++ .../GUI/Duplicati.GUI.TrayIcon/app.config | 7 + Duplicati/GUI/app.config | 6 +- Duplicati/License/Duplicati.License.csproj | 18 +- .../Duplicati.Server.Serialization.csproj | 21 +- .../Duplicati.Server.Serialization/Enums.cs | 67 +- .../IProgressEventData.cs | 17 + .../ISerializableStatus.cs | 14 + .../Implementations/ProgressEventData.cs | 22 + .../Implementations/SerializableStatus.cs | 16 + .../InterfaceResolver.cs | 24 + .../JsonSerializer.cs | 180 +++++ .../Serializer.cs | 46 ++ Duplicati/Server/Duplicati.Server.csproj | 22 +- Duplicati/Server/Duplicati.snk | Bin 0 -> 596 bytes Duplicati/Server/DuplicatiRunner.cs | 106 +-- Duplicati/Server/LiveControls.cs | 16 + Duplicati/Server/Program.cs | 16 +- Duplicati/Server/SerializableStatus.cs | 66 ++ Duplicati/Server/WebServer.cs | 266 ++++++-- Duplicati/Server/app.config | 6 +- 54 files changed, 2841 insertions(+), 407 deletions(-) create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj.user create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.snk create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/HostedInstanceKeeper.cs create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock05.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock15.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock30.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock60.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/CloseMenuIcon.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Delay.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Pause.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Play.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/SettingsMenuIcon.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/StatusMenuIcon.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Stop.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Throttle.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormal.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormalError.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormalPause.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormalWarning.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorking.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorkingPause.ico create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/WizardMenuIcon.png create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/SerializationHelper.cs create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.Designer.cs create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.resx create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.Designer.cs create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.cs create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.resx create mode 100644 Duplicati/GUI/Duplicati.GUI.TrayIcon/app.config create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/IProgressEventData.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/ISerializableStatus.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/Implementations/ProgressEventData.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/Implementations/SerializableStatus.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/InterfaceResolver.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/JsonSerializer.cs create mode 100644 Duplicati/Server/Duplicati.Server.Serialization/Serializer.cs create mode 100644 Duplicati/Server/Duplicati.snk create mode 100644 Duplicati/Server/SerializableStatus.cs diff --git a/Duplicati.sln b/Duplicati.sln index e42f23af3..66cbbb572 100644 --- a/Duplicati.sln +++ b/Duplicati.sln @@ -57,11 +57,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Backend.S EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Server", "Duplicati\Server\Duplicati.Server.csproj", "{19E661D2-C5DA-4F35-B3EE-7586E5734B5F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Server.Serialization", "Duplicati\Server\Duplicati.Server.Serialization\Duplicati.Server.Serialization.csproj", "{33FD1D24-C28F-4C71-933F-98F1586EA76C}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.GUI.TrayIcon", "Duplicati\GUI\Duplicati.GUI.TrayIcon\Duplicati.GUI.TrayIcon.csproj", "{17566860-3D98-4604-AA5B-47661F75609F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Server.Serialization", "Duplicati\Server\Duplicati.Server.Serialization\Duplicati.Server.Serialization.csproj", "{33FD1D24-C28F-4C71-933F-98F1586EA76C}" +EndProject Global + GlobalSection(SubversionScc) = preSolution + Svn-Managed = True + Manager = AnkhSVN - Subversion Support for Visual Studio + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 @@ -69,22 +73,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|x86.ActiveCfg = Debug|x86 - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|x86.Build.0 = Debug|x86 - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.Build.0 = Release|Any CPU - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.ActiveCfg = Release|x86 - {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.Build.0 = Release|x86 - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|x86.ActiveCfg = Debug|x86 - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|x86.Build.0 = Debug|x86 - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.Build.0 = Release|Any CPU - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|x86.ActiveCfg = Release|x86 - {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|x86.Build.0 = Release|x86 {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.Build.0 = Debug|Any CPU {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|x86.ActiveCfg = Debug|x86 @@ -93,140 +81,6 @@ Global {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|Any CPU.Build.0 = Release|Any CPU {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|x86.ActiveCfg = Release|x86 {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|x86.Build.0 = Release|x86 - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|x86.ActiveCfg = Debug|x86 - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|x86.Build.0 = Debug|x86 - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.Build.0 = Release|Any CPU - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|x86.ActiveCfg = Release|x86 - {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|x86.Build.0 = Release|x86 - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|x86.ActiveCfg = Debug|x86 - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|x86.Build.0 = Debug|x86 - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|Any CPU.Build.0 = Release|Any CPU - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|x86.ActiveCfg = Release|x86 - {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|x86.Build.0 = Release|x86 - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|x86.Build.0 = Debug|x86 - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|Any CPU.Build.0 = Release|Any CPU - {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|x86.ActiveCfg = Release|Any CPU - {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|x86.ActiveCfg = Debug|x86 - {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|x86.Build.0 = Debug|x86 - {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|Any CPU.Build.0 = Release|Any CPU - {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|x86.ActiveCfg = Release|x86 - {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|x86.Build.0 = Release|x86 - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|x86.ActiveCfg = Debug|x86 - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|x86.Build.0 = Debug|x86 - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|Any CPU.Build.0 = Release|Any CPU - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|x86.ActiveCfg = Release|x86 - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|x86.Build.0 = Release|x86 - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|x86.ActiveCfg = Debug|x86 - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|x86.Build.0 = Debug|x86 - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.Build.0 = Release|Any CPU - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|x86.ActiveCfg = Release|x86 - {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|x86.Build.0 = Release|x86 - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|x86.ActiveCfg = Debug|x86 - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|x86.Build.0 = Debug|x86 - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.Build.0 = Release|Any CPU - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|x86.ActiveCfg = Release|x86 - {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|x86.Build.0 = Release|x86 - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|x86.ActiveCfg = Debug|x86 - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|x86.Build.0 = Debug|x86 - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|Any CPU.Build.0 = Release|Any CPU - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|x86.ActiveCfg = Release|x86 - {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|x86.Build.0 = Release|x86 - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|x86.ActiveCfg = Debug|x86 - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|x86.Build.0 = Debug|x86 - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|Any CPU.Build.0 = Release|Any CPU - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|x86.ActiveCfg = Release|x86 - {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|x86.Build.0 = Release|x86 - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|x86.ActiveCfg = Debug|x86 - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|x86.Build.0 = Debug|x86 - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|Any CPU.Build.0 = Release|Any CPU - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|x86.ActiveCfg = Release|x86 - {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|x86.Build.0 = Release|x86 - {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|x86.ActiveCfg = Debug|x86 - {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|x86.Build.0 = Debug|x86 - {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|Any CPU.Build.0 = Release|Any CPU - {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|x86.ActiveCfg = Release|x86 - {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|x86.Build.0 = Release|x86 - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|x86.ActiveCfg = Debug|x86 - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|x86.Build.0 = Debug|x86 - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|Any CPU.Build.0 = Release|Any CPU - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|x86.ActiveCfg = Release|x86 - {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|x86.Build.0 = Release|x86 - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|x86.ActiveCfg = Debug|x86 - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|x86.Build.0 = Debug|x86 - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|Any CPU.Build.0 = Release|Any CPU - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|x86.ActiveCfg = Release|x86 - {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|x86.Build.0 = Release|x86 - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|x86.ActiveCfg = Debug|x86 - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|x86.Build.0 = Debug|x86 - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.Build.0 = Release|Any CPU - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|x86.ActiveCfg = Release|x86 - {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|x86.Build.0 = Release|x86 - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|x86.Build.0 = Debug|x86 - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|Any CPU.Build.0 = Release|Any CPU - {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|x86.ActiveCfg = Release|Any CPU - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|x86.ActiveCfg = Debug|x86 - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|x86.Build.0 = Debug|x86 - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.Build.0 = Release|Any CPU - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|x86.ActiveCfg = Release|x86 - {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|x86.Build.0 = Release|x86 - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|x86.ActiveCfg = Debug|x86 - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|x86.Build.0 = Debug|x86 - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|Any CPU.Build.0 = Release|Any CPU - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|x86.ActiveCfg = Release|x86 - {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|x86.Build.0 = Release|x86 {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|Any CPU.Build.0 = Debug|Any CPU {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|x86.ActiveCfg = Debug|x86 @@ -235,38 +89,14 @@ Global {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|Any CPU.Build.0 = Release|Any CPU {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|x86.ActiveCfg = Release|x86 {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|x86.Build.0 = Release|x86 - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|x86.ActiveCfg = Debug|x86 - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|x86.Build.0 = Debug|x86 - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|Any CPU.Build.0 = Release|Any CPU - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|x86.ActiveCfg = Release|x86 - {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|x86.Build.0 = Release|x86 - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|x86.ActiveCfg = Debug|x86 - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|x86.Build.0 = Debug|x86 - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.Build.0 = Release|Any CPU - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|x86.ActiveCfg = Release|x86 - {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|x86.Build.0 = Release|x86 - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|x86.ActiveCfg = Debug|x86 - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|x86.Build.0 = Debug|x86 - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.Build.0 = Release|Any CPU - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|x86.ActiveCfg = Release|x86 - {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|x86.Build.0 = Release|x86 - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|x86.ActiveCfg = Debug|x86 - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|x86.Build.0 = Debug|x86 - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|Any CPU.Build.0 = Release|Any CPU - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|x86.ActiveCfg = Release|x86 - {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|x86.Build.0 = Release|x86 + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|x86.ActiveCfg = Debug|x86 + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|x86.Build.0 = Debug|x86 + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.Build.0 = Release|Any CPU + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|x86.ActiveCfg = Release|x86 + {10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|x86.Build.0 = Release|x86 {FC9B7611-836F-4127-8B44-A7C31F506807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC9B7611-836F-4127-8B44-A7C31F506807}.Debug|Any CPU.Build.0 = Debug|Any CPU {FC9B7611-836F-4127-8B44-A7C31F506807}.Debug|x86.ActiveCfg = Debug|x86 @@ -275,14 +105,180 @@ Global {FC9B7611-836F-4127-8B44-A7C31F506807}.Release|Any CPU.Build.0 = Release|Any CPU {FC9B7611-836F-4127-8B44-A7C31F506807}.Release|x86.ActiveCfg = Release|x86 {FC9B7611-836F-4127-8B44-A7C31F506807}.Release|x86.Build.0 = Release|x86 - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Debug|x86.ActiveCfg = Debug|x86 - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Debug|x86.Build.0 = Debug|x86 - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Release|Any CPU.Build.0 = Release|Any CPU - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Release|x86.ActiveCfg = Release|x86 - {6BA21DCB-1701-4936-B177-3B6D4DE3474E}.Release|x86.Build.0 = Release|x86 + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|x86.ActiveCfg = Debug|x86 + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|x86.Build.0 = Debug|x86 + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|Any CPU.Build.0 = Release|Any CPU + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|x86.ActiveCfg = Release|x86 + {F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|x86.Build.0 = Release|x86 + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|x86.ActiveCfg = Debug|x86 + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|x86.Build.0 = Debug|x86 + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.Build.0 = Release|Any CPU + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|x86.ActiveCfg = Release|x86 + {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|x86.Build.0 = Release|x86 + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|x86.ActiveCfg = Debug|x86 + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Debug|x86.Build.0 = Debug|x86 + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|Any CPU.Build.0 = Release|Any CPU + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|x86.ActiveCfg = Release|x86 + {94484FDB-2EFA-4CF0-9BE6-A561157B4F87}.Release|x86.Build.0 = Release|x86 + {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|x86.ActiveCfg = Debug|x86 + {47FE73E1-0832-44F7-96B9-2580273206C3}.Debug|x86.Build.0 = Debug|x86 + {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|Any CPU.Build.0 = Release|Any CPU + {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|x86.ActiveCfg = Release|x86 + {47FE73E1-0832-44F7-96B9-2580273206C3}.Release|x86.Build.0 = Release|x86 + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|x86.ActiveCfg = Debug|x86 + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|x86.Build.0 = Debug|x86 + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.Build.0 = Release|Any CPU + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|x86.ActiveCfg = Release|x86 + {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|x86.Build.0 = Release|x86 + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|x86.ActiveCfg = Debug|x86 + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Debug|x86.Build.0 = Debug|x86 + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|Any CPU.Build.0 = Release|Any CPU + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|x86.ActiveCfg = Release|x86 + {C03F6DFD-805A-4BE0-9338-64870ADDB4A2}.Release|x86.Build.0 = Release|x86 + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|x86.ActiveCfg = Debug|x86 + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|x86.Build.0 = Debug|x86 + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|Any CPU.Build.0 = Release|Any CPU + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|x86.ActiveCfg = Release|x86 + {81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|x86.Build.0 = Release|x86 + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|x86.ActiveCfg = Debug|x86 + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Debug|x86.Build.0 = Debug|x86 + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|Any CPU.Build.0 = Release|Any CPU + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|x86.ActiveCfg = Release|x86 + {E2AF781D-D1E1-4512-BF2C-D6DA8D0F797F}.Release|x86.Build.0 = Release|x86 + {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|x86.ActiveCfg = Debug|x86 + {BAE27510-8B5D-44B2-B33E-372A98908041}.Debug|x86.Build.0 = Debug|x86 + {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|Any CPU.Build.0 = Release|Any CPU + {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|x86.ActiveCfg = Release|x86 + {BAE27510-8B5D-44B2-B33E-372A98908041}.Release|x86.Build.0 = Release|x86 + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|x86.ActiveCfg = Debug|x86 + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Debug|x86.Build.0 = Debug|x86 + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|Any CPU.Build.0 = Release|Any CPU + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|x86.ActiveCfg = Release|x86 + {1BFAE226-8364-4086-825C-BB83F6F3EE4C}.Release|x86.Build.0 = Release|x86 + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|x86.ActiveCfg = Debug|x86 + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Debug|x86.Build.0 = Debug|x86 + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|Any CPU.Build.0 = Release|Any CPU + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|x86.ActiveCfg = Release|x86 + {B60D0993-B0C5-457A-90D9-DB6EEB33CE47}.Release|x86.Build.0 = Release|x86 + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|x86.ActiveCfg = Debug|x86 + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|x86.Build.0 = Debug|x86 + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.Build.0 = Release|Any CPU + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|x86.ActiveCfg = Release|x86 + {F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|x86.Build.0 = Release|x86 + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|x86.ActiveCfg = Debug|x86 + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|x86.Build.0 = Debug|x86 + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.Build.0 = Release|Any CPU + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|x86.ActiveCfg = Release|x86 + {E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|x86.Build.0 = Release|x86 + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|x86.ActiveCfg = Debug|x86 + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|x86.Build.0 = Debug|x86 + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.Build.0 = Release|Any CPU + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|x86.ActiveCfg = Release|x86 + {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|x86.Build.0 = Release|x86 + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|x86.ActiveCfg = Debug|x86 + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|x86.Build.0 = Debug|x86 + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.Build.0 = Release|Any CPU + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.ActiveCfg = Release|x86 + {0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.Build.0 = Release|x86 + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|x86.ActiveCfg = Debug|x86 + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Debug|x86.Build.0 = Debug|x86 + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|Any CPU.Build.0 = Release|Any CPU + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|x86.ActiveCfg = Release|x86 + {D63E53E4-A458-4C2F-914D-92F715F58ACE}.Release|x86.Build.0 = Release|x86 + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|x86.ActiveCfg = Debug|x86 + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Debug|x86.Build.0 = Debug|x86 + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|Any CPU.Build.0 = Release|Any CPU + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|x86.ActiveCfg = Release|x86 + {4D012CB1-4B92-47F4-89B7-BF80A73A2E99}.Release|x86.Build.0 = Release|x86 + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|x86.ActiveCfg = Debug|x86 + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|x86.Build.0 = Debug|x86 + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.Build.0 = Release|Any CPU + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|x86.ActiveCfg = Release|x86 + {7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|x86.Build.0 = Release|x86 + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|x86.ActiveCfg = Debug|x86 + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|x86.Build.0 = Debug|x86 + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.Build.0 = Release|Any CPU + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|x86.ActiveCfg = Release|x86 + {52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|x86.Build.0 = Release|x86 + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|x86.ActiveCfg = Debug|x86 + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Debug|x86.Build.0 = Debug|x86 + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|Any CPU.Build.0 = Release|Any CPU + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|x86.ActiveCfg = Release|x86 + {C0270709-2A40-43B5-8CF1-69581B9FA2A1}.Release|x86.Build.0 = Release|x86 + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|x86.ActiveCfg = Debug|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Debug|x86.Build.0 = Debug|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|Any CPU.Build.0 = Release|Any CPU + {CCD76347-7DC7-4B42-B7E1-E500E624CAC3}.Release|x86.ActiveCfg = Release|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|x86.ActiveCfg = Debug|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Debug|x86.Build.0 = Debug|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|Any CPU.Build.0 = Release|Any CPU + {42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Release|x86.ActiveCfg = Release|Any CPU {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Debug|x86.ActiveCfg = Debug|x86 @@ -291,6 +287,14 @@ Global {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Release|Any CPU.Build.0 = Release|Any CPU {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Release|x86.ActiveCfg = Release|x86 {FF2BF37C-E502-4C98-BEA0-701671DDFA08}.Release|x86.Build.0 = Release|x86 + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|x86.ActiveCfg = Debug|x86 + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|x86.Build.0 = Debug|x86 + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|Any CPU.Build.0 = Release|Any CPU + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|x86.ActiveCfg = Release|x86 + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|x86.Build.0 = Release|x86 {17566860-3D98-4604-AA5B-47661F75609F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17566860-3D98-4604-AA5B-47661F75609F}.Debug|Any CPU.Build.0 = Debug|Any CPU {17566860-3D98-4604-AA5B-47661F75609F}.Debug|x86.ActiveCfg = Debug|x86 @@ -307,27 +311,34 @@ Global {33FD1D24-C28F-4C71-933F-98F1586EA76C}.Release|Any CPU.Build.0 = Release|Any CPU {33FD1D24-C28F-4C71-933F-98F1586EA76C}.Release|x86.ActiveCfg = Release|x86 {33FD1D24-C28F-4C71-933F-98F1586EA76C}.Release|x86.Build.0 = Release|x86 - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|x86.ActiveCfg = Debug|x86 - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Debug|x86.Build.0 = Debug|x86 - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|Any CPU.Build.0 = Release|Any CPU - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|x86.ActiveCfg = Release|x86 - {19E661D2-C5DA-4F35-B3EE-7586E5734B5F}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = Duplicati\GUI\Duplicati.csproj - Policies = $0 - $0.StandardHeader = $1 - $1.Text = @ Copyright (C) 2011, Kenneth Skovhede\r\n http://www.hexad.dk, opensource@hexad.dk\n \n This library is free software; you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as\n published by the Free Software Foundation; either version 2.1 of the\n License, or (at your option) any later version.\n\n This library is distributed in the hope that it will be useful, but\n WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public\n License along with this library; if not, write to the Free Software\n Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - $1.IncludeInNewFiles = True EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(SubversionScc) = preSolution - Svn-Managed = True - Manager = AnkhSVN - Subversion Support for Visual Studio + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Duplicati\Server\Duplicati.Server.csproj + Policies = $0 + $0.StandardHeader = $1 + $1.Text = @ Copyright (C) 2011, Kenneth Skovhede\r\n http://www.hexad.dk, opensource@hexad.dk\n \n This library is free software; you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as\n published by the Free Software Foundation; either version 2.1 of the\n License, or (at your option) any later version.\n\n This library is distributed in the hope that it will be useful, but\n WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public\n License along with this library; if not, write to the Free Software\n Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + $1.IncludeInNewFiles = True + $0.DotNetNamingPolicy = $2 + $2.DirectoryNamespaceAssociation = None + $2.ResourceNamePolicy = FileFormatDefault + $0.TextStylePolicy = $3 + $3.FileWidth = 120 + $3.EolMarker = Windows + $3.inheritsSet = VisualStudio + $3.inheritsScope = text/plain + $3.scope = text/x-csharp + $0.CSharpFormattingPolicy = $4 + $4.BeforeMethodCallParentheses = False + $4.BeforeConstructorDeclarationParentheses = False + $4.BeforeIndexerDeclarationBracket = False + $4.BeforeDelegateDeclarationParentheses = False + $4.NewParentheses = False + $4.SpacesBeforeBrackets = False + $4.inheritsSet = Mono + $4.inheritsScope = text/x-csharp + $4.scope = text/x-csharp EndGlobalSection EndGlobal diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj index 57760743b..606c39e28 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj @@ -1,4 +1,4 @@ - + Debug @@ -11,6 +11,21 @@ Duplicati.GUI.TrayIcon Duplicati.GUI.TrayIcon 512 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true x86 @@ -35,12 +50,14 @@ bin\Debug - none + full true true true 4 false + DEBUG + true bin\Release @@ -51,6 +68,15 @@ true 4 + + Duplicati.GUI.TrayIcon.Program + + + true + + + Duplicati.snk + @@ -63,17 +89,28 @@ - + + + + True + True + WindowsMainForm.resx + + Form - - MainForm.cs + + WindowsMainForm.cs - - MainForm.cs + + ResXFileCodeGenerator + WindowsMainForm.Designer.cs + + + WindowsMainForm.cs ResXFileCodeGenerator @@ -83,7 +120,10 @@ True Resources.resx + True + + SettingsSingleFileGenerator Settings.Designer.cs @@ -95,11 +135,94 @@ + + {19E661D2-C5DA-4F35-B3EE-7586E5734B5F} + Duplicati.Server + {33FD1D24-C28F-4C71-933F-98F1586EA76C} Duplicati.Server.Serialization + + + False + Microsoft .NET Framework 4 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,67 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\Clock05.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Clock15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Clock30.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Clock60.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\CloseMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Delay.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SettingsMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StatusMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Throttle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayNormal.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayNormalError.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayNormalPause.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayNormalWarning.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayWorking.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayWorkingPause.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\WizardMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock05.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock05.png new file mode 100644 index 0000000000000000000000000000000000000000..6873b0b7f55cdf691be545e74c05119673dbaefd GIT binary patch literal 678 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4LV0FMhJw4NZ$Nk>pEv^p6Qie#V~EA+wZXpG!ifU& zzSow=n@1-H?af%ROl!qSDbZ~?wym2In1gtNbpACu)jRNboo{tG&>ddikb6Q=LPu50 z@uIW6#tPrPC0`#cbzM5OF2(-dM}b-EW((N3yUD8itV3_rD zRW=`|(8-Ccy#_lSR@k_$U}0d;h;ev0H=>GV@&{kAe`H{R$a#p87 zr3^!Z+NIBePO1u1*0ZwO)%|m1T;Sz#KK991|fznv2Izpc<(vC1m4K8#MT%8 z4nLh9{klqH$>R_P*I?%_Ww)#y9!{~%e=qk(xn;L?D zITC$)=Q^LCo5yYPO455rb^n{@vzE5mlD6Hmql*vSo}Y8YI9hi9f|*-oCSF-|X0hwB zE0>C%{<(DFZoXF6GPOH*Igj5v$C+Qh>Eo|!m*dWxIIJ*no?%m$A-ZUL^P!op=jYnJ e`E&n+^u+~-l=sav*~!4bz~JfX=d#Wzp$P!gO&!nx literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock15.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock15.png new file mode 100644 index 0000000000000000000000000000000000000000..78fe0d0ac2c08f8832bac9628dd44d5a9e7ca15a GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4LV0FMhJw4NZ$Nk>pEv^plZmH`V~EA+wZXm~A%POM z_xHZHO`mtN$0gxk>ds5zEgH$vzHQ4IH@RpDD@E_7p6&UuV;#dM zr>^-M__ry}{qiPCspRj41zXeao$_DzR;PpU!OI)v*J94Q?pV#0e0g_;-MZ$@TTZ3! zpSY!-wd12G8^e*WE7C%acO7N;@Zg{4m8&l#I_r+^bYnjJT}I&hQFdvMOwUaNv_&TNHs=FAP(F4;a;Ue-8cV_4RPIZsY3 zF)Mr;#Jp8zdPePnO_wG}Dz)}1Q5bJcB=#S12@U)y~cejk1>dgIrn ztG24K8kx}+YE#ZcdUbx;+&$&IgJ*hF$CWKGY#*4 zIBsFS-0sYr*q1Nv8%;eEdFifv!J815t~UWjf>n`ar(EZ+oHyfJ%Z|Fq9pOw3K}u_v i7%yzGj+*i3{s-yPH}5?6u37*}xD1}IelF{r5}E+qWld24 literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock30.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Clock30.png new file mode 100644 index 0000000000000000000000000000000000000000..ca138602a96a605f37c2cfad8ab91574a803dac7 GIT binary patch literal 794 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 Ye)?R~v(&V31_lNOPgg&ebxsLQ07)n5zyJUM literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Play.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Play.png new file mode 100644 index 0000000000000000000000000000000000000000..f513b25ffc603a326ca834e867d7cea46621daa2 GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7e|ow&hFJ8rPTrdx5-4!A zzS#cWzU{Bud>5)Mcq!7|(A6roh(pY*tSK``gsCa^AFuc9Kdfe9-^`S5sP!u4iAoDI z-;~(={`Ea`v3yUnU5d+h-I-~e&S$KAtSawLt!w?iPf8OS6q07JUS$htc$Dz|__t%r z&38P#t-s@I!dqP>?Q`iB_YX#JpV(iL)YGy`;Yw@Mx^}Djm%EC&yF1pT+^yUc*Y%#` z*ttc{!V9#FKOK(g`k1lRdi#cF4M%?VteHM(uJ9z0HFIA!NE{SpN@=k&ZzykiP|JQl z^W0YMu13@37k4Ykf{Ux!R?w7W0)j*aUmFO5E0p=5~7UajxaOyWeBp^aZRn z5bJrYabBXkBY}nS$&JrbetvFlS^k~PCTg8$iToDF6f6H3w(B)JIId5tvZ=rE{Ml0G zBn|%~=XDHv-TwbCo_y3obk(WrYn|=tIz@ctU;Ab4nzrtE>atgFd%Wy&dTvU7H!x#l zz3SPuO{d-Lh(xB7^>Yb_!ae{0%zmif{+ZdKFUinJSn(Lcs$BMkS}RVii4|f^4&L|I zr*YbasLcDJjHN4EcFieaa9zQDmcO{MXV;{evsY|6Rl4#?{jnnfZVQTj?>?M+;cJpj z6mMzX9Dl>*GR{4X0n>#y?Ynnh_8C*b(_g~BK6}R=U{0T7%y9MKy|90^pJnSAEt{V> V&ob=a#K6G7;OXk;vd$@?2>_Rc1dRXy literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/SettingsMenuIcon.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/SettingsMenuIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0cad0375bb02e4d699e887e5128aedaf73c75e GIT binary patch literal 663 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to;yhg(Lo9lGCs}8QI7+n5 zw=_;a|Ey@z3$F{I2c2TYr2|E{eGhnfNaafeeBx%|*8SpsBYIg#j&q2Bi%P4D^x8dw z0>U4h!p`TNo40fB#v7`EAHJC~%YWW;|M%HFObKOWW^?Dv*fC?-OTU%}`Jzq=r#DSK zdi3b-;^N}m(w~=>et9$V<_*Rnih?wlDjB;~7aS(It~ z<*zu*uKfO$&iKTjDmj>KRP9F^@f7)l+CnP}c)pvv}qMH|JRN1$qfOz4+et z^PR9=`L_W1IyQ%wSt?Vxyu3U!b=C426KZB_bOm_j?wAlXDetEHbe_rfFV=Rw&q@ZR@seO=_lGA}#O^YrsipWpyYFa;k zTIIh7T9y0G{ht2)#g?!ewFzwjY+ZhC7vm1U(qjxr<%oz)dhs^<@uVHQL|0qyiQ3^X zuQuiVO6wzqJ{(NJEpgXYF}}B*Sk9MhvrNO#)$`?osI`~o>~Zywx-#qfir)7(1vdPx zzBVl)JMdifnr{*J%N2CbWu~aysQ$y|#KFP0Sk_IvLRP>b#jEFGplbo`zM6KSs>ImPQyFT$s^{2lZU$npJH!XGbqdz-~Uw*mra_Owv zOA?c^>(%PTI$zgZaF4rR|Kr69h8go_dGVXf7S}G^^EtkNp(Jq4p32|f-u?Mg^P4^3 Xpsr_zPCE+&0|SGntDnm{r-UW|pYJj1 literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/StatusMenuIcon.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/StatusMenuIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..c342475a2c1cb9c1eff00ebf885da78f0afe6e9f GIT binary patch literal 667 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!tol001;Lo9k*Ct3T1IEu9G z-&y|duIP?QQ++)uJl2GXnV4l9mGW+KQC6Ffk+H?pEJ`w2r{`AYdQROkHIYS~Hw1h% z8V>zn*cd41==lEKrt0+ccM&-UbY?%eKd*S-=kxaN3_ZQQtm(x&Cn|8<5^QQtS*yx( zSl-y!Sorbd$CZ^|Pfbn8c=71YpQh;>w|zYDFqZS8$GZP_bk~;7e{=q+o4AXiE-n4f#VxC{?xsE`?9gt?Afz#U%9UGbI+}84kp)a){a(hA6hi^_I9+owg&x+ z^FO>WZBm`{>@Q1H`gDKRY}q|6X8-w_m)A-p7s#|fmOQvIIohWBANLBUn)4Glggi7= zj~x*yKULkZbg9ti&-D?JogT{{ep?${QntiHW#8tVlFS7b1}Zi3FL&uhNgvv$zJ?ES?y&X=|tw&*}!R)y>Zr|zs&?iOeY z51tC5TQ?hC@A6pVs_D8fV5R4+QjzcP=Pua3z4>MNX`8A)oVhg}s}kKO z9$_-tHtj~%hHY#YuCm_Dkv^K#$<8l+!HV7(fL>{n=x$hB96#Fu4IuLx3X{l zSvhlV?6dFlWfj;~zh-!<;gpw~zkZvHpu^guUrTosf461m3y$|+s*@ zcyOn^Kc&lcygTe~DWM4f8RR*2 literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Stop.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/Stop.png new file mode 100644 index 0000000000000000000000000000000000000000..635251190ca973ee4a047a9ec253c401c263afd8 GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toetNn%hFJ8bPWH`+Nfl|E z|GD=2xjWVB#y=HJJ3U&bn9T}c(Yzu*!Ablp`^DY|$9yx*7m2tyZuHKb)tbO6T6%Hr z?p*zYJ%2MXfpWZ)vd9mYhxhbF7l&ZCho^-G~Gb~j;H`n_9 z#FHL%R(Vj-&|KZ&UdA0 z)5DeA;=6C!bI+6LwAi+~Fe_rUxmu0x<9%sIzOVQ>>%?UjFAmoau2T-m&Rh2@bG3n`UO?rZyYrApFj7*)}D%4pJqOvc(!y^l=4-ryEoZ41b+|6U#sNs?9RfO7wo^^ ztSSn&58|)LT2hvF=W=oKytc*qhQCgE-f3)qS^r)4i3T(Q!NGS)5JZP*y*a_kYe|2Y=B zRjX1iH7mxm_-jjv?^m2>->L1r>T-4Yk(aOagYvgu@Os$2z*UV|bs`g6k0{G6-I#fA z3$_U_p8RgX^V#kxjcQv{=afss{*&>=f-dPZntOqxd|c8UfG&+7MJ9y zZqy5%UbXY=Tnl^WvU%NWB^Hfm`0NnZ=7s(%Lbk}J&;B<{ iEXMD%5-M}l z{`>XapO@|7Gx&5^Q&31{Y6B!@}Hr`sllfy^ZuRfC^n4><|%L*Q-zO!J#Es5+A3Q=X|T|C(E3-M&)KKHofY?s~#S7%8PZOX;9byM;-h& z6-pD2SYC2TTI`y&*0YCY?N0sdJ6Us{oSV1#PM>w>tw$a^Z2$4Knz$@&`?keRyU|x@ zOAwc)DpQ20@Qvs3kMGUDzqoAvqPzP&3oLuh{VqpYbc?b^Pt)hoH_b}t2{0|&HPfV|jYTm?g!R^R z)mDAS$`6bEk0^bZZof#!bT#{V!F4rmu9`kNocDsKOe}qV;pi``TJeI73nqQ(bh&U? zsrOHWD--&2zD-g2 zil{`vo`2L+`=-Ua_pV_;xl@O1TaS?83{ F1ORt1R{H<| literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormal.ico b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormal.ico new file mode 100644 index 0000000000000000000000000000000000000000..f4b15562ab4f7a25acef37c929ea13b99b664c2d GIT binary patch literal 29926 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�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
aFfB*jdsmUu$PcDuNWMH_w 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 literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormalWarning.ico b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayNormalWarning.ico new file mode 100644 index 0000000000000000000000000000000000000000..90a9b030e406c30f52dcfb168a58f98cd885d093 GIT binary patch literal 46878 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 T@d;qPpfU(#206Hak%0jKp?St? literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorking.ico b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorking.ico new file mode 100644 index 0000000000000000000000000000000000000000..d04740be3a1effa26d7717987a0d9a323c4618bd GIT binary patch literal 29926 zcmZQzU}WH7Ffb5cU}Run$Y5h&IL5%hpr8QZzhGiu&|_y{kdT1#85tPFxEL4&1R#73 zMh1p|+zbo`1|V}d7*_BxFsSi@^h5a^3=HR_LHZ&56Ko6&Whx;35Pk+L1B0D5Ouqud z3RMP%Wd<<)3Jfa*7#RG*VEPppIye~^zNNwRD==iRFfh~=FfeE^FfbS}Ffb%AfXroK z0D%Sw1!AJ%1_p)(1_p+P1_;H_0AeyUG&C?AIBB)6ql)$d1_qAy^t3V*;j;9O1_p-qwz9gk^k-#t zWiXVUmeJ0@&{39`4iZi)d!Cm5EIsXcTG{jT?+gqb=`fI1R#sL97EbSAU}!HZt4pg( zd!F{JF8x^^NG3h)Imn!}=V^5y7lBllm8CxiIRk7?8raI`d1cS)(w{#|PiuRg_5)-- z$Viac>FMcZX=Qa~X=Pw@($k)&r#;WBOMg~Z@uMuSEUzv-9i%?5Jni{&kOk#w^*_LF z%PZ>uyT3fG?D@00^!~Pv|7HK%o3J3X|3UCaURnCH9}EmX^71mCmF3lyrTy>!(eb~(4a5eyzpVUO8OTNH{Xf#uI{ufX zKTiXjlb2WaJg=@UyyM6B^yeA>JKE~%>Okg{wPoa$m8EC=_}|u+p3(pRM;gREc^P?S zb$N9e|9^aY_Wb$(A02shWnlB4)#X)`ccfSJe=lpx`0=Ccc^b(5KR~8bbo?kw>;KV~ z-v1vIBxT@mD0}|A<44E;vi|-b{r&xIb!E>pK>n?(E34=)tN4)t^6vj1-}CCq!2U{q z_WVUhUPgOH|BwIu9sk>(L+#BgYfJAatLSg*D69XG-qH4~4Q5VW#gC4Tj=c0|6+iOQ zp66xc<$=u4tEgD6 zMn+oOv%I>xI*{n|XKj6TAam+6o;`aG0w6Nu*>eyNBo0#l{Mqy8&)V9+V$YvH2isd$ zR|iu0tPf;(U0vPr=g-<8=BGb@^ZZ#~I>;;#e%1$853;Zh_4le0vUZ zUte9ukBW};XFu}FpS6MIpXc}IJ*(?Tf7S<)ugl2D098An!n%Q@uIxFe%y;%~j zO6L;LHWjE{2y&qUBZ$O?sg%y)K~llMQ4USc=@p=~Tb^E4o?cd#-oTLtYZ*On-~iPI zp!P(1S_4NqINg?|=an^Zq~+D6XJmZuE2{&=b6H*e|NlSIpEq!%KYv!1-;wb>FTH`| zd0HJPwf%1^1ErN46o>ihry$SeE6kyrPEUkeZ+~Rwl!2YbR>_u661AF?j{QmyD0`_NR9qk?I57?hS z@967qYhZugQPI)ytbzS`Uth=byax7X9iRrn19nK*Hn4-D;rX)%9M7LWd-1HVfupYc zMOj-L+$*4_djlf_134I^7Zgs2{sjjlP&gqJm;~hw5N2Rts4iDws4CZIsH@guXs%OZ zXsy>^=x$YKXm8PE=xhaH9fqDZ9fsacEr$LcZHC@X9fk>AnhX2xJYcovf(_@%E zQHx>H1bv2Slk^y-Ptj+XIZ=~g?lf(NnUi%GW=_*%m@`d>VeSk)hW2J7hR#+ahK_bK zhW<`NhRzOChMq1{hPGCFhOTxyhVBk4hW=g)hOQ1aoiHDH)A*@R*C3~}z=2Q!Y8I$c8=FYTY zSUg*sVc{%YhDCGq7?#e{V^}!HfMLlz1BL}NO&Au=wq{r~*P3DJd~1f~3-uXREYxLK zvsjm5-BLY<4a@ZyHm%fS*s)HZVc7x$h82qp7*;JYU|74%fMNX#Lx$xGtr=D+2IURC&e>Nof6M5XGS!`+*z>6#GBr;6sPhyxkErDUiv{Z(9v(p*o z&dOz&I=PHt!Q29dh4U*ImMuzUShXaPVadW$h80W885S+5U|6=Kl40qhT80%%YZ=zA zs%7Zz?q=xj?qTTd?PHiet(jrsgm#80lRFvu`zJ6=oH&VL%9N=L)2Gj1m@#7}!>n0z z80OBM%dmWDGsBXFtqiM{H!`eR(aNx9RV%}~HLVPb7xy!)TG7R@c6B$yx-~rvn>X|_ ztXn&gVd27=3>(%>X4tZ662qpAQyI2yp31Oo%Up&X+vhXPpTB@%;lf1>ix)3pSh8dp z!}8@T7*?!U$*^wS3Wimy)-bGDvyNfs_Qedlb}nMrwR0)M-aShgwrpO(uxIy5hW-22 zF|1p+fnmdjO$?hiZ(-QBZ5zY>{Tmtf?B2?-XU|rK9Xob19N4#(;n0Cq42KSFWjKCp zJHx?)I~a~0*~xJH*nWnSC-*TNIB<~R@Zlp2$BrFiIC1;{!>N;p7|xzK#Bl!HQHB#I zPB5H5f12U!*>emR&L3mAaQ+m-#fxVd&Y!=)aPi_rhHFQKm+`hqZ=gw`0+qds9+`W63;o-x33=bbZWO(-UF~ifRPZ?gkc+T+Z({T~><=P9)bCyDN9NxF@ zaEX!vJ|L&mb@3%k!`LFyKsub)O(ky0mY%f`|qoprfO3@eEkQ z%iSd+B7!0sA{t;)P)7tAX&`uA5DQ)|%@olQ5zzn>IwBwni9}*%Le#%ls;Wa2PPs3*f=EeyD5;TIqpAQBgbIk5yxRwgv6uUF3=JhE4M9>M4ALekA}Nyd z>BoHzNl6h&Nsy$Zp`^(hsCpAaLrV~{Gz39IOG6RW3J#5)pTEB{3(8e+=u3iyCCxuU z)tlRZfFXzgVMEEBm*2NDt^fJ^M|sx6@8{(tL83M``cUZhN7{(QfG?al8$KmXj4lY~f{e*&w2dD_7f8Q4e)GG6=r^JNc*hRo*ge}1lD zk+cNMJ3!QbI_%(u3?%E1KK%Lf$21X3YfFwBKmUBcw!YXBq`=|RX^?wR)mwTAUiCmR>$ylB<9I`T6tvc1e(WzfWgC>ffF5_X-9>OG!z|dQ-t0-~asi{XO5>2c-Vb z&p&@Yt+oWoL)Cve?H}v|g5Fg(`m$bb=PO!$^!uNmt3|xMy*2Lt{PX4LG<~mNpI|Tl zFJSXO9rh0n4i5J5v7GSf?ei}?OM3;`R{#9@Wu^w7>d~KnewOoD`uc)Y_(R+SG9SdX zshjxe`>U^?zPzlGzxDIy&mYepe){?I=g(b|?jY&l;2?%af}^XKQ!-#`ES{QcuowKrIOG~7Lr(ZSKt!49jx+~9K;-}q@J>-O(|et!A+ z=jWgAKmPpuRP7!e9UUDU9SI4~m!~5^yl7|jm(MjU1y6qcv|Z!W%c&YuzW@A`uYKz6 zYRh1ddC|d5sO&@%`(KnMdE>-#N+B(!tx?^wZBLlHQh$-eBXSqobkfUmk|2 z_nx}*=-02`zpj>ai;j+ti59>2X}fofM|5;_0@%FhD2Vwl4@V|MCnh9ByIEF!I<@ib zHaCxi=!EEm;Kp`m4-g|dAv!TSF#)cAe^f$3bV5QxLQLz?M#~OQ4-gx~^#F@Pc+rUo zkKVQ-=}#q~Ha$H( zZT)_5@y5V#=H-(4^=+wmLEEG)TVU!L&U`wvWWgf5V9Anwcfh3^$OjAz7vH~sau*+X z@d8{nKvdI`1dSd1hs>3Ln?ta1G}yQr`gq&uxFq&*Nm#g`hZigyVd07%-k^ReVtf+X zPeq;w1NBisn1O+zy;+N)w;j|6)n}O4tHUs5BBZZ5YqB20%&B?|bEfNp`s9>c0ddJJop!1{vv3|rUegZqQa7aB0EMC%WN`hHv28lv>^4sJJM zIJ(Q2;nZGZhO-BZ8M?b%7<#&08Txu$87B2RGEAP}!Z3HbBg4EI?hI2V`ZLU&>cuc^ zQW(RW837FQW`#1$oF2z8Z&oD3l6j5{3+F~MtXb;Buzjs7!;W=s46Bv|FwC8m%rI|u z8pFIf=?oM4>lkKDD`A*AwU%Mg{8Wa8^RgKh&Z}iuvM`Nd&GHn6#S5|+mM_j`Sh_HW zVeQI%hD8es7?v+7Vpz4TkYVl0QijC~>KT?Usbg5Nyq2M@t&O3#x0hkcq$Y+*6IvLi zOm1hGF|Czh*33qRxpSHsCQO*fFnRJ6hN)Ahf%|JSXU<}nJ$nwrym|8(7R+yBSh}c* zVfm64hLy|O7}lG1bHM$$ zrAwDFEL*mMVdctI;Qrg%wd)wRZ(G2yY11->y}K7P?A^PBVc*_W4Ey%3VOYO@1H;CR z8^L|Ity{M;?B2bBVgJ5O3_Ex3WZ1oX55vBF`xp)$SjKST=wgOb$ComkIic@}OGDu!PR7eyFvkD0biGq>P%rpjuRf!hDk{p#%0gi?5AHM-7xF%Mu-02#MOkH08w10}A{8)D78iHefAH{1AvrnT z{f7_k6jM=ASp?RvqOPv4;t=Fk%iFl+@D5fvIm?5Gx0Hyht3%~AG}P6(%6INtS8mC@ z|KJi^zs(1CFsgt$<`DfF8XC&|+h*D>+2>Px@F2(s2M-2=q%}bD8_G4bH8gB@Sjz=% zw`x4NW#z$xi}vpi*3j0_)`G}uYinzS@9+0pwysj#U&?I%P9ZaYIc+U%Z7q=dSC?yP zYiqlNZP~FuNM2i8TW(&ZhBg#{<#WLt`6lyVM+i$xM+eN%)?EY&-&|b~0GX!)V(98Z zDP3LNMWFc0*45PqOMppzT^Q8W*PWBez%V0QUtd=r1mGlCiGjYZ{%lbC@de3&umOlb z!L!pC7*;3f>+2hUA&MMGus;)&zMTwk0OyGl85kH=$Kz1oT+;&1K&xBg!TnM+BEAKd z0XNQ=JaHlhny~?_n*af7H-P4PKyyBzxgT22ErHAi*#WW(WGBdOP&-8eKEDKMr#K+b zqk`HfAk4tP(A%lcFu7lsVd4aRhAETuA>-lG^cm*P&}ZoBHe%@RGG&<9ZOSmA&x~Q> z1OtXClMEQ9PBdkhHQj(=)?{;rnNv-`gt2Sd;x7-XoCcSlyA;ZR1<_ufcnlkKI zZ^*D?y&1!X6;=#8HzLNPcW*Ld*tf-;;lNfyhC|!T7!L0+VmQ9rh~d;;BZd>ZO&Jbu zLySpxwL36O?009FKG}s~)^vY{NfW~u=FSWTw^^o6iDsBJGoE4byl{rqOI#Q>taM^n zz9@uY>B2~cr3>R2RxXKV*tjx?VdJV$hHdL27Vc5BSHpAZCGa2^pnG0?+fW~}5?S*yg)-mkc zyMST;-WA}s!G;YR7`AQO$gp+mHiqrncYw!p_w3oraQNUdhGR!JGMqTRo#E7}ebD;- z5O^H-$dRKApn4rLc6*-T!ubOX7tSANxP0k2!|(N#AaPkGStS`UG56+)X`*5Q6MK?Gm1Jue7^;+%RAgMO!|dxPmWav( zP3jI)l2NK*?sY1h+PO=;`Qrg=y;P=;-O_RWUFW>lqjrsClZX z7#Zmp7#Qh+NWEf^xDf&v7=f!gqhbbzJaZ!xBNG!75DB79EG&#b;>89g7{I)cfuY#T z#KOV?ge~B}Cxd~ZHqOf&q`?Se6v#v)bMLq+1_p-Kyu7T;%-k$E%FV0Aot!~w2sGDC zpZRl0J;ng7x4^Cfu|b%Dfnh?g9>dg0`V6zD>od%qsSloeoj%zZJoh?zf;q!9(A?{E z1BL~23>X&9u?5eQu3Bus0IGx5E;VG>w91fS`#Mm4W5BRuy(PmgP<^x6kYWE;LxzLf zjKK4rC-xXKoY@aDGmK&O%t(fXa~&BL&WmAKy10gXV|hPm|@G>NQO;oVi~4Q&19H2uZUssqI8CpOA{E@tw>{7wIYjQ-Rf+H zb*u6iHmu5I*t9-}VaKLahHaa38Fp>UW7xMdk73!;Du$ISsu?z|FJaiby^LY&rb>og z+o~9LZmnZDxF?U{$i7^LV+V2=P8`f;*tEW#Ve^J2hF#kl8FuezW7xN6BE!DjQyBK_ zn$NIu4D#IE+}vEzk?~Ox z+}tJ%463|*yu5PZ5qeP}JiKNM3~GFQ3M#H~wtOCO)_mp+4C;bPAt5dSF#&NNe1aAX z3|fLpAx2*A_OWjEqM{BA3|bN*ZvM)mqNbvv5I(5dk^oH}N=iyPGcag^I<7G6%)nqG zB_$1k($dm43=Dqy;I1Kv(A4+E@GfXfn4GmYAUz+Ad9-QDxAySw{;cX#(c2pgFX5`)R1vwNU=K;j@aSRb-kP_x0}P@zt_72gWp59|imMr~0bLOo72M!$kf9~A5|L4!2 z|9|1ah5r{XUZf+w^#8_ zvwQ3RD_5?7;^bdLL&Gsp+D7+7XJ=Q*(W6KI&!4~G-}GtC|GK+O|4-=C{|CVaP&SN4 z7YFf?8M`hW4_{(o1lTm_})|5a7hCCKidHETBeh7B8@EMLCj|AGax{`Yp9 z{-4-yFsLxdO?&oi{l9thW>6k^(%js_4)eqG=`*Y^U%v8h{`~p>ySrlkO`4$pZ_)&V z{}39PjVy*NP6->?O#JK#{Yn3B-MaOE>eOlf8X6j{VeX$ZXKvQz%a{MnnKSo)cc;U@ z$rJVeO`d4*A3`Iuk;Rb3DPbd(_6nKX>ljzuB|r{GZrw{%_i3{eRP@ z82ks*$ZTXWWN}K^$Yv5?gWLvk|EyWF|MmAzsE39B#*LfmL1p~hx%2){o?!8R##95U zILXyMN1;t@Rf#Ui!Ci;iCW3CR_ZQJzf9b>=_3C!89@(SqxbmjXi6+ z{{INj^wCQm7Z`-!5{?et({}wM^@_)uui+^)x>i?TN)8IdZMrI?6 zA&Vo}b7tuOo7}JSzq`Zg-;_zg|GL_>{`dE2|C=!__1~*kul|4d@ZsP6`}hCVRcrm9 z*sJrev(4!Lw8`QBI@@$X{{0Wq53v{7E(jaswwpI^{s*-WX3UrgcmMY7JL)fAzVd(R z(&hhWO|$$zf0hARc-|}nP+0!&>-PMA^~#0+&z?Q|zj@R2|5fGs|5vW)`v2z5oB!|M zzX!#^{|S9@|2x{e{$DtM46JVdzIFdQ+l>Funx>D_Zjjq<-n{jH*|O#TXU&=ocmIwZ zJL^GpGpPQZGsEiNf;k5N7R)jH522CS$YRLi5cd4p2LJlIwg2tkzw!U;*RTJ5`t<1^ z$i4UP-}(3K*|UGIU%v*6gXEq*ee(b1%NHOu;5d2u^y$BqE8720ov4e`evsR4-MamM z#fp`nx(e?8ojZ5cU%h(m-^!J%{?DCh^>5K!gMW+W8vcjS$ZTXWWN`?4;ar1%6MMD) z?b^8%>`qWx`S9Vx|F>`7{(JZC-M_D2zyAOJ{rkUw@j?Duy|U~7 zv`M-+?FYFHRDZ2nwff(@dGq1!-?eLZJ*Zq-y?V|6`LnJ5FPU#hCN}s#XNKPYu6Dcs zcW&PRxepY!|37~G2u>qs&K&-K_|TUBH*a18`3Woz@*fDFJh|_GXRG1=`LpzK+6{8s z?b~<$uUWJ9|NQw2;qKqPdr$rK>o@+bS+nl{!a3IemMt*&w`_soe+Z4tMixUBH~6ec>NU9R%~__6KaFb9S6wQE=YO`R0~ucJlte@}{oA#3$-fKdkNHkFwD*jFB*M_)hp~1g}bM*gpw(9&pc68T2P@V>*pQlfs{5yJd$NzO}d;iUt z;tf)RVL!-ickbN%zkdCOe~T6^hP!|7-hK6;zRtRJ8~!hyZ~cGO5<{GLXFuY=+ z!T+W6^}%>@pU(di#}9zh38xS1gRGpFeMU$vqIoQ^_=D^Ka&4o&WP^$NZZy+3w$jZms`^4s8dQ zGoXC><;$0UpmYH$LnrpS{#!a?_|68}*;NQCChW{Zn zg1vm9{{Pw21OFX7u;bs{S-JnZJG}m1x^(H^`gN24P3Y42KXszdztt;R|Lxkj@c+{% zk3sGMmzk@UH~gDEQS0BzMfzYjEt{|RueU?@|GBe=!R0H+{SO}8`?qW7vj5ALRQ{VW z*#xW>-F}eUK{Mme~B?u)+`puU}#Kf9*1Z{|jd6{$DV+;6JDj z0cwX_ym%HAUjMgknfHG}Pr(0qv(x`i=+gY(-Kze7^~!co8T$X-yLbN|K78mR6l^y+ob;R|C4$&{x6=R`+xNkga05q(cJ-Z8`S;( zmoCL{KRErYS!(ld(<;M%n^qb9htP)q)-N~wzhI`xzd19a|1X?h0j~caK79D^`n3!H zA3b{b4;1J3?%e~875tkuE$Cl=r_ujYr}l%|3*hhv)mNbM{o1vQ|IeR0`tRPoyZ>Ii zcmeVsIRCzS_3Gb_?eoFuas3LA-5`vxALbU2+aT@-r5}X*q51dU`t=+BuU%&IZ}S?% zf1B4B{fE$o|JE)w_`hsX`ajTE2FR_Tv^H~E!oR)_t^X5xT>o7-f9fA7pB_E3`(JOT z&A)YPdO-Q`-^-UTL22kesC)s{VbDAcax*yHK*d4r2~fZ4-~8F(pm@fxALbU2+d%H$ zuwm0bEcy5Ux^?USuU}#Ff7@Ck6ufDr;s5zFt^TiG+4le5y}SR9AKU$ZQn$wc^~(+Z z&z+|If9>jSa5`GLsP=zry~h9bYbX4F^5n^XP(B8wpU02y{eS)HCAdBVl{297=K1r- z|DQj5{QvXk&tP#-yKLc{aIl%^_QUufw?WI#|BDwdfv0~^`46hU)~;Rmf5S@af7{m^ z{@cFZ=s$!u{I_kL;r|s2bpQ2s*!{nD?ef2i7tj8i&}H#&;Vhm16T7wk?b*HZ-@}Iw zLHXj}22ft^w)lTw-`andFJJt(VrlvRo;IC-OBR;?1C@=Sv~u_E-G39h-TzPOvHf>o z|GNLzuV4SSZcXdIMYDDPZ(R$r8-x+|!`!lArOiK(``4`l)nAD6A5{NdyLSEG>eXxi zZ(3#jZ|4TXe>*oA{fE$o|8}f5{J(Ur-oHbKcKipW`v(sm{5yJN=f4$8>;CWDz8Ewn z@bB!IL;tsLo%e6qqLhEj=j;4mG+XcA!r9jURxHr{zkZqiznPOALF&M1{`~pV|7J|o z`oC_e-oJ&j^#3oK?ecHgJl%g=*BHRZy?d5`)64z)_d)6WKPc_5THgGB)+EjU8wkMU8~)q7#ppkn2C+9o;$r#yT#}~NNn>e{eMg5I{aU@Fyh~`c}D+stTTX^k8BSC zHpp#|_VcQLbLY;3yC2klxpL(SxL>est@Z!?TaB>deOnFx@7iGSfB6FE|GRfC{y%@F z^Z$i2b^fnh9Ql9we53z6*BfBf2QqKp7Q_F$HyVJ|?Ac`aA7mCtoD>Xl8>sF9^;2fg zo&$IPwr$(N{YTKa^Y(RC{|;_5{C9Ah(SHby%m(=jlppl}ZCs)EZ^t@)a2W31WbhB< zz5`%=$m)q}e_eF~q|KGXZ`rn})Mj-qjN+Yuo zV%u@5K~_%;8)4=SBfRV#>#hHR`tOStE&exs`V6@HH*eko8bA5JV8O!wyEa(=KeE$! zP-2kVu3x_acIT8S)8OvkvXPrcmIYB8|%-VI}aW|+`Gx@--$g&|4!^N{tuy%*~ntZ;*_wF&BV_J zx$WxJtN&-up7U?Qgo$wXuUWIU7Bn{m8o%AU$?E^fy~cwQgWLuh=b1HY&i~%tKKS_U zym|ApZr{HBZ^n$7|F^7m`geMt(ZAFCjQ>MuWHz!GvN$DdWHa%zx2|^ncj?ll|8wTd z1a*WQWE7a|ez7L9j8D4WrS;L40I6QrLvm zg50uXVe3E8+$gB-t*>uDnZEc%=B zKWo-3(YbTy9tE{4H*ekoil_hm{S!d*;B?0zd#6m93Z5%kym;~d!-tRjpFDZW(az2; zQBZi}!t>|PXY1+dDOtB}-4jrs1~jg9=FFM@$B!TXckI~l|HqDjX%HKPk@@7ZvFbZ< z;>7>+=P&%baN)wgHEY&9Zf|cdnL2eU)^Nw>7f^bdK7G2?v}w~b7A{;=vt-GVdV1o8 z3m4W*ojNUJ+O%m_^XAPX+TGavGML3cdkaA8g<$(5Vf!Uv`zT@iDq%GEfFRJhKp;#)9pg@wK09YZvR2+i8?#GR)hQw!aH~F zd^u%u`+vyV5YSo;+T#8DHi6pNFF|&L@b2Av{!N)u^MC4O1G?ZndzOIe+=|5?)vNWwFx z>4WC#|M&M8{9m!W_Wz;<1^+?o4?yOCM!=KzhrfBN(Z%mSAy0W!2N&x`0@YCmUQ8qpGBQFHuyhprvCq#)8oK?2HA7- z#^wL(*LDBjzHR3Jr%xY)-SO(x%m4j7uKyRz2F?2#pqPE^=*s`gmaTx>f8xZ+|0|Yv z|6jhy5IixfV8E8HXfmbay_`hgg)c?f`vi{GTo%Vn8rm6oY^_u?Qv3<_}Yu8SL z?YMR8^8cw5^ucpmpn1HRQ$7EK=Dk33^H(mP`oD2q2WV~+#q3ijR{vkUdM(`lAp6&> z>ixfAr6C-H<{9VB(D}b^P4|D$+|2#^cmIRN^4G3z`#)={_y6uTW3WF#ems6`%l`#) zBL6R0nD+n5<&)sKxtljG{_kzq`VVpwc+L&U?9(Sv?FWTF$o|c%jsC;%@&$VT_w8Nt z|LWBX|M%@#@_+v9sQ)L9@B9zy%PyRk{eSD`DWLf!uw9_I0Qnh||3Gm9;)CXAS1&IF z&o{!%gwY`TSFKtD_dh88ty$Icf7?1EI0nxl&5Zbe`}WQMb7lnmU%goG|I&py|F2)a z@_*W-u>ae(%m9};*RG!Wf9~vVa9RY}f8yBM|BoKs1J8G_S&{#L^D0BQnK1J~_Jh`x zfZ`s6j~_qrAGF2;GM@n&(>MALn)6t@vJ~v!{rgt^Upznc|M6oxLGy(Fw`}V9zhH*J z|24}~{x6wh_f z+h_itH^cq^`qlaW*DQ4cjjbcpZ3WMV{NKDv|NquC`u{=W?I`9Tn+au~KC$9IXiOaB zcMv{w=+OV=OIrRP+-`({_ir`)4;s%0&n;{*{14(|Q%8!}sT0dl>YoD#4*XxbsEKZ4 z+oz5%1C5o!!++nteg79PsQ-U_w=rGtspCsg+8=xO?)|rLUM=0mW=|Yl3>t%hx4-u7 z+y8RLwATNSu~pDmCvEY*J*)puoH!BQ{@lEI^Xlcxm;c|s)|KXCi#yl5|KGG}6KFgT z-u|98ZMxa9W5@qYn$QAv!}){8|7n4DtaJOnV)-o4I@3R`t*!9>2PhBDnKL)@=+R?; zKx0x9`s@DBnpX0E)^zIODU+K1gUnvLcHN)e-agRDCm?H4@YJbOLH)2*J9qAUv32X# zzo4-?D&fDIH*bEiX3d&a6DCYV@i&SC27m(^F94kf0Xi1~bUp+DoglkG;}nSV zCm`b#3CQO;V+oVwu>&+OlnNe2HRSRV%)BoC8=(a2&D_QZa( z|2uZ<{NLQ%VmWo{H2bYvxBZ(k$@t%N&>C?fFlZmc)Jgg{)q~91xpOCIubKUf88huc zcFmY#@^993gZ~h$kAW?CB=|Km4n>i@dh z9sY0K())kbbpL;IXXyWj>76~@%+91%HtP{t#{{yYvhv@~Gb?DIHf3s%IwqLMdp*^S{zIdML zzoiQd|3k0=3VYF9ga5sq`u`t1xD8%o4Qhw3Sy}n-&Yi2^zR3JJY5zcd!=>{L{x4l% z@Ne-vv;UyB-Q2nJ>=!LsY!B*ZFI#B#Z{=dc{}2pX>uLa6j|yH>yL4gP|7+LIgWJ;k z_AdChXpY|hmgZcW2KP~Yvs`2%3H4j)|hZ^=Bp|Em@o{9Cy+6YTy6 z_iz2%w4vqyibeY1^=hk@nEeN}%@;0QWWRXv5|H`-)-5;tw{fN6zYQx4|1Fwh{cr!? z75{GBxccwv)${*$ZlC>cVz=qP%a@LW*U0VNJ@em|jZOdV-Max^8#i}mFnA3rNIwXJ z%sPJj1Zd4LJbX5;GXJ-A4S0>;|4r-b|AG1&v!+=5U%kBW->Fmk{?D0_07^6e-@bYM z57fs6ufKc!3hXD4eH&L9{s-ybvc~Y=##QFv@Bzgw2p>Fn=-<}0X8(3<0IgLq{I`5j z$iG{+Zv0!mIQ`#_ZBsz&i~lX27yfVSrmBC7=h*+-zh~~h2M_N5n>E?|-}cRQ|5h(? z0j>Fh=-*%nHtWcdqyOg4oexf*ptQPUz1hD#n~gwgi~es|>GTiO2fBXk;{Pj`PyJiD zB>Ml(^@jgJ{es<_4F7Fd750Do=K6oz)*67t_G~hQ>ILinw`0B8|3ilk|DQE$j{TfD zbL~NSZTBX#e+RZ1{RiW%hX1y$HT}PFRp9>(E3E!)UuOsr2g@6R*WT>gV)*aCHkdew z4b{8N@ZauDX5joaefkXhnKNhE@7%fT-@Yy8{|@gkq6!9?wP(*>(3%SSY16>v+y6t` z%>E(T*+w|npmsP+4n`x3LD+}3nf>3na~Eh1(Z0L8+j9H%9sdt*v-o#vukn8fHp0OM z$;0GeG_n|keQ2BIe~_82t!c*f_HC@1aGxu&!FQs(r6pz#?PA4bE))~{a=s_TEuojbR`wziHH zWHvHxYHAjkIB}9Cs7{zO2b6Y+#~?kECQY(zX=wq63C!FF4D9fGM_^)<(y+5wKxTv5 zVIT_?!1s@UNCpN6kA8uQha=TctJ)42Z!*^n>Y8y zym>|c7cWXD3NKq)^?%l^nKy!igL$V;otiprYUY2)K3LGcRO0Z;71jTnnwnFWEn8kc zZA#dG@IFY;zC?6988VJOZL&U!npG>ZKxwId&6+j!vu8&BpFJJ44-OgY|DQJ5;g>xPMpE05)^FXqwSN7o`2U+$8UA0h+z+&$ z=Ks;dYyWRr-~Ru|p{4(yJih<`*wLl`pFe-{f8XvY|3PcyL2CEy1nFN<4_ec=X-(XJ z(AwiQOTGUeJF@owx>b4q_w1VgfA@~I|2wzVfyd5wZL9ykYg^TSP?-)=dvH%4cy9-2 zP1@$QG5_~&Hu}F~z2*O1+Zz8LJ}~G1hLz6XI%mgvga11=rGm$w_G~r;s{^S$vM(3B zwsy^$we?%pMS<2Mf-z`32UM3F+74c$2o^g8S+9t~K6W4nv}U4y#fla6Th~VXhpdAG ztxF>kAI$y_+8a7^=FHR$t1|yX)RB@u`BZZG@a-rkWK9Ua5FZr$n|>sF-w-?Aq7 z|5gGRq-Oof^#2PN%)1d269dkJadC0HbLPxVS-Emm{i;>?@yeAe>u1lNosy7{0M^?8 NJwpkUmr2DSy#Npfn`;07 literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorkingPause.ico b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/TrayWorkingPause.ico new file mode 100644 index 0000000000000000000000000000000000000000..eaad5208bc99cb5976e5ccd95e3ea76264583dd6 GIT binary patch literal 29926 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 MAfS9q4hHE30RJ-y761SM literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/WizardMenuIcon.png b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Resources/WizardMenuIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a72337d3db0b4f664157bac308095f5e8d7080a5 GIT binary patch literal 660 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toqCH(4Lo9k*C*SoB2^2Y6 z|NTyJdP&JFm&G!?&30~=!#Nin<7qy{b=gI}hVvJ*R@IC64fZM%-Yn%`e57iVz)Qsy z?ItICK$7FI&ZC zerJ#V9&zWG&;+gjXG%)T`c8#tP5l#aEOG7EHGe{r z>a@=<{_5*>?a_mTjZ;}B9{Ft3qRir#vcb#n>GPd?_V;zis#jj9Zc7r_5T^CnnrEYz z;7YHpUX6x3)^#7ab&7qJz+w^p;@3U<=N>MOJyz{!Jk5?li$OH(a)yqAQg-K-RZ@2U ze$BnTK23v7vD|O|qq^gTOV*ifa7*rSlvu01u_WSX`ReRDRc1%~dwKW$u&Z5J^=i#e z_r-x;idzgNM4N*Cf9&3W^sM@MO>wR>Yu6O5Tlw()nJixk77x*|d;5gVyt`h;%>4W^ z?Vis1hLss>FHUJ@*!lAJPPgNXOUq3(nS;IWud3pW`1G^p+)hK2DSNKmxBt&+8DSJ9z8m8=8Vrn{yk@X WSDQYc!q33Kz~JfX=d#Wzp$Py_06E?O literal 0 HcmV?d00001 diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/SerializationHelper.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/SerializationHelper.cs new file mode 100644 index 000000000..f572accd7 --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/SerializationHelper.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Duplicati.GUI.TrayIcon +{ + public enum RunnerState + { + Started, + Suspended, + Running, + Stopped, + } + + public enum LiveControlState + { + Running, + Paused + } +} diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.Designer.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.Designer.cs new file mode 100644 index 000000000..eda351cb2 --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.Designer.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.239 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Duplicati.GUI.TrayIcon.Strings { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class WindowsMainForm { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal WindowsMainForm() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.TrayIcon.Strings.WindowsMainForm", typeof(WindowsMainForm).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Pause. + /// + internal static string PauseMenuText { + get { + return ResourceManager.GetString("PauseMenuText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Resume. + /// + internal static string ResumeMenuText { + get { + return ResourceManager.GetString("ResumeMenuText", resourceCulture); + } + } + } +} diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.resx b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.resx new file mode 100644 index 000000000..e88f78c78 --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Strings/WindowsMainForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pause + + + Resume + + \ No newline at end of file diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.Designer.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.Designer.cs new file mode 100644 index 000000000..7767e0e20 --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.Designer.cs @@ -0,0 +1,251 @@ +namespace Duplicati.GUI.TrayIcon +{ + partial class WindowsMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowsMainForm)); + this.label1 = new System.Windows.Forms.Label(); + this.TrayMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.statusToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.wizardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.controlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pauseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pausePeriodToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DelayDuration05Menu = new System.Windows.Forms.ToolStripMenuItem(); + this.DelayDuration15Menu = new System.Windows.Forms.ToolStripMenuItem(); + this.DelayDuration30Menu = new System.Windows.Forms.ToolStripMenuItem(); + this.DelayDuration60Menu = new System.Windows.Forms.ToolStripMenuItem(); + this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.throttleOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TrayIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.TrayMenu.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(8, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(123, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Duplicati dummy window"; + // + // TrayMenu + // + this.TrayMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusToolStripMenuItem, + this.wizardToolStripMenuItem, + this.toolStripSeparator1, + this.optionsToolStripMenuItem, + this.toolStripSeparator2, + this.controlToolStripMenuItem, + this.toolStripSeparator3, + this.quitToolStripMenuItem}); + this.TrayMenu.Name = "TrayMenu"; + this.TrayMenu.Size = new System.Drawing.Size(153, 154); + // + // statusToolStripMenuItem + // + this.statusToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.statusToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.StatusMenuIcon; + this.statusToolStripMenuItem.Name = "statusToolStripMenuItem"; + this.statusToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.statusToolStripMenuItem.Text = "Status"; + this.statusToolStripMenuItem.Click += new System.EventHandler(this.statusToolStripMenuItem_Click); + // + // wizardToolStripMenuItem + // + this.wizardToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.WizardMenuIcon; + this.wizardToolStripMenuItem.Name = "wizardToolStripMenuItem"; + this.wizardToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.wizardToolStripMenuItem.Text = "Wizard..."; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.SettingsMenuIcon; + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.optionsToolStripMenuItem.Text = "Options..."; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6); + // + // controlToolStripMenuItem + // + this.controlToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.pauseToolStripMenuItem, + this.pausePeriodToolStripMenuItem, + this.stopToolStripMenuItem, + this.throttleOptionsToolStripMenuItem}); + this.controlToolStripMenuItem.Name = "controlToolStripMenuItem"; + this.controlToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.controlToolStripMenuItem.Text = "Control"; + // + // pauseToolStripMenuItem + // + this.pauseToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Pause; + this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem"; + this.pauseToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.pauseToolStripMenuItem.Text = "Pause"; + this.pauseToolStripMenuItem.Click += new System.EventHandler(this.pauseToolStripMenuItem_Click); + // + // pausePeriodToolStripMenuItem + // + this.pausePeriodToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DelayDuration05Menu, + this.DelayDuration15Menu, + this.DelayDuration30Menu, + this.DelayDuration60Menu}); + this.pausePeriodToolStripMenuItem.Name = "pausePeriodToolStripMenuItem"; + this.pausePeriodToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.pausePeriodToolStripMenuItem.Text = "Pause period"; + // + // DelayDuration05Menu + // + this.DelayDuration05Menu.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Clock05; + this.DelayDuration05Menu.Name = "DelayDuration05Menu"; + this.DelayDuration05Menu.Size = new System.Drawing.Size(152, 22); + this.DelayDuration05Menu.Tag = "5m"; + this.DelayDuration05Menu.Text = "5 minutes"; + this.DelayDuration05Menu.Click += new System.EventHandler(this.DelayDuration05Menu_Click); + // + // DelayDuration15Menu + // + this.DelayDuration15Menu.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Clock15; + this.DelayDuration15Menu.Name = "DelayDuration15Menu"; + this.DelayDuration15Menu.Size = new System.Drawing.Size(152, 22); + this.DelayDuration15Menu.Tag = "15m"; + this.DelayDuration15Menu.Text = "15 minutes"; + this.DelayDuration15Menu.Click += new System.EventHandler(this.DelayDuration15Menu_Click); + // + // DelayDuration30Menu + // + this.DelayDuration30Menu.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Clock30; + this.DelayDuration30Menu.Name = "DelayDuration30Menu"; + this.DelayDuration30Menu.Size = new System.Drawing.Size(152, 22); + this.DelayDuration30Menu.Tag = "30m"; + this.DelayDuration30Menu.Text = "30 minutes"; + this.DelayDuration30Menu.Click += new System.EventHandler(this.DelayDuration30Menu_Click); + // + // DelayDuration60Menu + // + this.DelayDuration60Menu.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Clock60; + this.DelayDuration60Menu.Name = "DelayDuration60Menu"; + this.DelayDuration60Menu.Size = new System.Drawing.Size(152, 22); + this.DelayDuration60Menu.Tag = "1h"; + this.DelayDuration60Menu.Text = "1 hour"; + this.DelayDuration60Menu.Click += new System.EventHandler(this.DelayDuration60Menu_Click); + // + // stopToolStripMenuItem + // + this.stopToolStripMenuItem.Enabled = false; + this.stopToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Stop; + this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + this.stopToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.stopToolStripMenuItem.Text = "Stop"; + this.stopToolStripMenuItem.Click += new System.EventHandler(this.stopToolStripMenuItem_Click); + // + // throttleOptionsToolStripMenuItem + // + this.throttleOptionsToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.Throttle; + this.throttleOptionsToolStripMenuItem.Name = "throttleOptionsToolStripMenuItem"; + this.throttleOptionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.throttleOptionsToolStripMenuItem.Text = "Throttle options..."; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(149, 6); + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Image = global::Duplicati.GUI.TrayIcon.Properties.Resources.CloseMenuIcon; + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.quitToolStripMenuItem.Text = "Quit"; + // + // TrayIcon + // + this.TrayIcon.ContextMenuStrip = this.TrayMenu; + this.TrayIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("TrayIcon.Icon"))); + // + // WindowsMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(142, 29); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "WindowsMainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Duplicati Control Window"; + this.Load += new System.EventHandler(this.MainForm_Load); + this.TrayMenu.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ContextMenuStrip TrayMenu; + private System.Windows.Forms.ToolStripMenuItem statusToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem wizardToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem controlToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pauseToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pausePeriodToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DelayDuration05Menu; + private System.Windows.Forms.ToolStripMenuItem DelayDuration15Menu; + private System.Windows.Forms.ToolStripMenuItem DelayDuration30Menu; + private System.Windows.Forms.ToolStripMenuItem DelayDuration60Menu; + private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem throttleOptionsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + private System.Windows.Forms.NotifyIcon TrayIcon; + } +} + diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.cs new file mode 100644 index 000000000..0b5cb4657 --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Duplicati.GUI.TrayIcon +{ + public partial class WindowsMainForm : Form + { + private bool m_stateIsPaused = false; + private bool m_hasError = false; + private bool m_hasWarning = false; + + public WindowsMainForm() + { + InitializeComponent(); + } + + private void MainForm_Load(object sender, EventArgs e) + { + BeginInvoke((Action)(() => { this.Visible = false; })); + + TrayIcon.Visible = true; + + Program.Connection.StatusUpdated += new HttpServerConnection.StatusUpdate(Connection_StatusUpdated); + Connection_StatusUpdated(Program.Connection.Status); + } + + void Connection_StatusUpdated(Server.Serialization.ISerializableStatus status) + { + if (this.InvokeRequired) + this.Invoke(new HttpServerConnection.StatusUpdate(Connection_StatusUpdated), status); + else + { + if (status.ActiveScheduleId < 0) + { + if (status.ProgramState == Server.Serialization.LiveControlState.Running) + { + if (m_hasError) + TrayIcon.Icon = Properties.Resources.TrayNormalError; + else if (m_hasWarning) + TrayIcon.Icon = Properties.Resources.TrayNormalWarning; + else + TrayIcon.Icon = Properties.Resources.TrayNormal; + } + else + TrayIcon.Icon = Properties.Resources.TrayNormalPause; + } + else + { + TrayIcon.Icon = + status.ProgramState == Server.Serialization.LiveControlState.Running ? + Properties.Resources.TrayWorking : Properties.Resources.TrayWorkingPause; + } + + if (status.ProgramState == Server.Serialization.LiveControlState.Running) + { + pauseToolStripMenuItem.Image = Properties.Resources.Pause; + pauseToolStripMenuItem.Text = Strings.WindowsMainForm.PauseMenuText; + m_stateIsPaused = false; + } + else + { + pauseToolStripMenuItem.Image = Properties.Resources.Play; + pauseToolStripMenuItem.Text = Strings.WindowsMainForm.ResumeMenuText; + m_stateIsPaused = true; + } + } + } + + private void statusToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + private void pauseToolStripMenuItem_Click(object sender, EventArgs e) + { + if (m_stateIsPaused) + Program.Connection.Resume(); + else + Program.Connection.Pause(); + } + + private void stopToolStripMenuItem_Click(object sender, EventArgs e) + { + Program.Connection.StopBackup(); + } + + private void DelayDuration05Menu_Click(object sender, EventArgs e) + { + Program.Connection.Pause("5m"); + } + + private void DelayDuration15Menu_Click(object sender, EventArgs e) + { + Program.Connection.Pause("15m"); + } + + private void DelayDuration30Menu_Click(object sender, EventArgs e) + { + Program.Connection.Pause("30m"); + } + + private void DelayDuration60Menu_Click(object sender, EventArgs e) + { + Program.Connection.Pause("1h"); + } + } +} diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.resx b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.resx new file mode 100644 index 000000000..df3b7134c --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WindowsMainForm.resx @@ -0,0 +1,630 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 221, 17 + + + 327, 17 + + + + + AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA + BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ + AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm + AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4d3d3d3d3 + d3d3d3d3d3d3d3cAAAAAAIeIiPj4+Pj4+Pj4+Pj4+Pj4+Ph4AAAACHh3JyNiNiNiNiNiNiNiNiNiNniH + cAAACIcnInI2I2I2I2I2I2I2I2I2MiN/cAAAh4JyemJjanJ6cnpyenJ6cnpyY2poiAAAiHIqNjOmMjYj + ajY2JycjajYnpycnhwAAiCcnImJyemOoeHh4eHh4eHh4dyMniAAAh3KnJ6cqNjY4////////////h6an + hwAAiCciejJyY6Jn/4+PiPiI+I+P9ycj9wAAiCJ6JyajYnJ4+P+P+Pj4j4iPh6cmiAAAiHo2NqNjp6Ko + /4+Pj4+PiPiP9yJ69wAAiCYno2NiYnJ3//j4iIiIiIj492OniAAAiCOmJjpjo2p4+PiIiIiIiIiPh6Yy + 9wAAiHJzeHd4d3d3//j/j/j4+Ij49yemiAAAiCpqiP/4///4//+P+Pj4j4+Ph6Yz+AAAiHI3j4j4+IiI + +PiIiPiIiIiP9yNqiAAA96emf/j4+Pj3//j4+Ij4+IiPh6aniAAAiHI6j4+PiPiI+P+P/4//j/iP92On + iAAA9yp2iPj4j4iI/4iIj4j4+Pj496cm+AAAiHp6j4+IiIiI//j4j4j//4iPh6ajiAAA+CcjiPiIiIiI + +P//+Pj4+Pj/9yen+AAAiCp6j////4+I/4iIj4j4+PiPh6ei9wAAiHpjiIiIiIiI//iIj4iIiIj/96Y2 + +AAA+Cenj/+IiPiIj4//////+Pj492p6iAAAiKeniPj/j4iI//+Pj4+Pj4+Ph6en+AAAiHp6j/+IiPj4 + +P///////4iIiHp6iAAA+Cd3j4+I+PiI/4+Pj4+Pj4iIhqh3+AAAiKeoj/j/j4+I////////+I+Id3p6 + iAAAiHeniP+I+PiI/4+Pj4+Pj4iIp6in9wAAiKeKj/j4iPj4////////+IiGiod6+AAAiDqHj/+P+P+I + +Pj4+Pj4/4eoqKiniAAAiGioj4/4/4/4iIiIiIiIeH53d3qK9wAAiKeKj/j/j/j///iPiH6neoqKioh6 + 9wAAiHqIj/+P+P+Pj4iIiIeKiKiHeKin9wAAh6h3j4/4/4//+Pj4iKiod4qKioiKiAAA93d3j///j/j4 + /4j4joeHd4eHiKin9wAAiKh4j4+P////j/iId3eoeoqKh4eKiAAAiDioj///j4+P+PiOuKiIeIiIqKh6 + 9wAA92eIiIiIiIiIiIh4qIiod6ioiId3iAAAiHqKh4eHiHiHjod4iKiIeIiHd3eohwAAD3eoioeKh4qH + h3h3eIioioeHh6eHgAAACIh3p6p6emp6qqqqqqenp6qqp3h4cAAAAIiHh4eHh4h4eIiIh4eHeHh4h4eI + AAAAAACIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/AAAAAA/AADwAAAAAA8AAOAAAAAABwAA4AAAAAAH + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA + AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA + AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAA + AAAABwAA8AAAAAAPAAD8AAAAAD8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAId3d3d3d3d3d3d3eAAAAAeIiHiI + eIh4iHiIeIhwAACHciJyInIiciJyInInhwAIgicnononpypypyejYniACHcqcnI2d3d3d3d3d3oocAhy + ciKnInj///////hyeHAIenJ6cnp4+Pj4iIj/aihwCHJ6cmOmP/+Pj/j4j3NogAh6NiOmMn+IiIiIiI9q + OHAIgmeIiIh///+PiI+PcmiACHOn+PiPiPiI+IiIj2OocAiCd/j4+I//j4j/+P96eIAIemf4+IiPj4j4 + +PiPY6hwCIKo+IiIiPj4+P+I/2pogAh3p//4+I/4+PiP+PhzqHAIinf4iIiPj4j4iIj/aniACHp3/4/4 + j//////4+HeocAiHqPiIj4j4+Pj4+Ih6eIAIenj//4+P/////4j3eniACIeo+Ij4j4+Pj4+IioeocAh6 + iI/4/4//////iH6oqIAIh6j/j4+IiIiHeOeod4hwCHqI//////iIjqioiop4cAh4ePj4+Pj4+HiKh3h4 + qIAIeoj/////+Ih6iHioqIhwCHio+I+I+IiOiKh4h4eocAiKiIiIiOiId3iHeoeHqIAAh3qKinqKioqK + ioiop4gAAAiHd3eHd3d3d3d3d4hwAAAAiIiIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAAAAAAAA//////AA + AA/gAAAHwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAPgAAAH8AAAD/// + //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAACI + iIiIiIiIiIh4AAh3IiIiIiIiIid4gAhycnNnNnNnNjIngAgiNiY2iIiIiPgigAh6Y6On////j4hjgAgj + anYn/4iI+IimgAhqdzd3+Pj4iPgjgAg2j4+I/4+IiIhqgAgjj4+I+Pj/+PgngAh6j4iI+I+I+PimgAin + j4+I//j/iPgjgAh6j4iI+I+I+Pim8Ainj4+I////+Ih6gAh3j4+I/4+PiIengAinj4j4////+IqK8Ah3 + j//4iIiIiGh3gAioj4+P+PiKioqKgAh4j///+IjoeHiogAioj/j4+IioqKiKgAh4iIiIiHiIiIeHgAiK + enp6eoqnp6iogACIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAP///wDAAAMAgAABAIAAAQCAAAEAgAABAIAA + AQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA + AQDAAAMA////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA + AAAId3d3d3d3gAcioqenp6JwB6cnj4+P93AHInKI+IiGcAd4iI+Pj/KACn+Pj4+I9jAHeIiPj/j3oAev + +P+Pj4eAB4j4j//4ioAHf4+P+PiGgAeI//iId6igCo/4+Iioh4AIiIiIh4d4oAh6h3qKioeAAAAAAAAA + AAD//wAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB + AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAvkS8AL5YvAC+a + LwAvnS8ANYk1ADWMNQA/hj8AN484ADiPOAAwkTAAMJUwADaRNgA2lTYAMJgwADCeMAA3kzgAOJQ4ADiZ + OAA5nTkAMKMwADigNwAwqzAAOqE6ADumOwA8ojwAPaY8ADyrPAAxsDEAPbQ9AECLQABdi10AQK9BAEK0 + QgBDu0QATb5NAFukXABZvlkAYY1hAGGQYgBrkGkAdJJyAHWUcwB2lnQAd5h0AHicdgB8n3oAYaphAH6i + fAB7sXkARMREAEjASABUwlQAW8ZbAF/KXwBjxWMAY8xjAGrMagBr0WsAbNpsAHPUcwB22HYAe9V7AHzZ + fACAk30AgaJ/AIDXfwCLi4sAi4uMAI2NjgCFkYEAg5eDAIaShQCIlIQAiZWIAI+PkACRkZIAlJaQAJSU + lQCWmZMAl5qUAJiblQCZnJYAl5eYAJiYmQCbnpgAnJ6YAJqanACdnZ0AhKSFAI+jjwCGsIQAi7OJAJC1 + jwCYoZkAnaCaAJq6mACjp58An5+gAKGhogCjpKAApaaiAKOjpACkpKYAqqamAKOooAClqaEApqikAKio + pACnp6gAp66oAKioqQCrrKgAqqqsAKysrgCyrq0AqrSoALOwrwCurrAAsLCyALWxsQC2tbIAs7O0ALa2 + tgC8tbIAtby1ALq5tQC5uLkAvbq6AL2+ugC+vLwAwreyAMK4swDBubYAxbq2AMG8uQDGvbkAwb+/AMW/ + vADIv7wAgt2CAIrdigCSwpEAmcSXAJ7AnQCF4IUAi+KLAJPkkwClwaIAqcOnAK/HrQCzzrEAvsy8AMPA + vgDIwb4AwM2+AMHBwADFwsEAxcXCAMPDxADGxcYAy8PAAMrEwQDMxcIAyMbFAM3HxADCzcAAzcjGAMnJ + yADNysgAy8zJAM3OywDNzc4A2s3HAN3MxgDSzcoA2M7JAN7OyADP0M0A1dDOAN7QygDa0s0A3tHNAM/P + 0ADR0dEA1tLQANPT1ADV1dUA29XSAN7Y1QDX19gA2dnZANvb3ADc3N0A4dHKAODTzQDk08wA4tTPAOXV + zgDr1s4A7NfOAOzYzwDh1tIA5tfQAOjX0ADm2NIA4drWAOXa1QDo2dMA7drSAO3c0wDp2tQA7tvUAOnc + 1gDu3dUA4tzZAOXd2gDh390A5d/cAOne2QDt39gA8N/XAOXg3QDr4d0A8OHaAPDi3ADx5N4A4+LhAOrk + 4ADs5eEA6ubkAOzn5ADu6OUA6urpAOvs6wDv7+0A8ubgAPLo4gDx6eYA9OrmAPTs5wDw6+gA8u3qAPXu + 6gDz7uwA9O/tAPbw7QD48u8A8vLxAPn08QD5+PcA+fn4AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAMBUIZKSk7L4+Pn4+Pj4+Pj3+Pn46YmWjZKSkpKSkpKSkpKSkpKSkpKRI7hjAAAAAMBULzuSk5um + pqampqSmpJukm6Sbm5eTjZKSk5KSkpKSkpKSkpKSkpI7L6RUAAAAAH9/SjKSk5OTk5OTk5OTk5OTkpOS + k5OTk5OTk5OTk5OTkpOSk5KTk5IylGNjAAAAAADjUykyPJOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OT + k5OTk5OTOzJZbW0AAAAAAAB6uFNKJCIyMzMzMzIyMzIyMzI0MjIjMjMzMjMyMzIzMjMyNDIzL15fbm0A + AAAAAAAAesB6U0tMTExNTFFMTUxRTExMTExMTExMTExMTExMTUxNSkxTU2OfcgAAAAAAAAAAAAB6uMCr + pKCgpJ+goKCkn6CboKCfoKCgoKCgoKCgoKCgoKC3t30AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/AAAAAA/AADwAAAAAA8AAOAAAAAABwAA4AAAAAAH + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA + AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA + AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAA + AAAABwAA8AAAAAAPAAD8AAAAAD8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAAAADCPMAAwkTAAMJYwADCaMAAwnTAAMaIxADGlMQAxqjEAMa0xADKw + MgA1sjUARItEAEWMRQBGlkUATJJLAFWaVABWnlUAXZNcAF6VXABemF0AYJteAGCeXgBGu0YAS79LAEy9 + TABVu1YAYaJfAHmXdwBzm3EAc5p0AHSadAB9kH4Ae5R8AH2XfgB6mHgAfJp6AH6cewB+nXwAYqVgAG+q + bQB0r3IAfaJ+AFHCUQBVx1UAVshWAFrHWgBfw18AWstaAFzMXABnx2YAYcthAGHPYQBoz2gAb8tuAGXS + ZQBo02gAa9ZrAG/TbwBu124AbNpsAHbXdgBy2nIAeNJ4AH3bfQB94H0AhoaGAI2NjQCBlIIAhJKEAIeU + hwCAmoEAgp2DAISYhQCQkJEAk5OUAJWVlgCXl5gAmZmaAJubnACenp8AgaWCAIWghgCDp4QAhqaEAIao + hQCIqoYAiayHAIejiACJpooAiamJAIuqjACMq40Ai6yMAIysjQCZopoAmqiaAJe3lQCetp4AnrybAKOn + nwCgsp4An7egAKGhogClpaYApa2iAKavpACmpqgAqamqAKqqrACtra4AprKmAKiwpQCjvKQApL6kAKm4 + pwCsuakAqr6rALixrgCvr7AAr7uwALGxsQC1t7MAs7O0ALW1tQC7trQAsr+yALy4twC5ubkAvrq5ALu7 + vAC+vb0Awru3AMa6tQDDvLkAxL+9AMi9uQCOzo0AhN6EAJPDkgCSx5EAlMiSAJXRlACd1J0Ant6eAKDf + nwCK4YoAkeSRAJrgmgCiwKAApsKlAKPIowCmyqYAp8OoAKnGqQCpyqoArsqtALLNsQC6w7oAt9G1ALrU + uQDGwL4AysG9AM3BvAC/v8AAwcHBAMXCwgDDw8QAxcXGAMjCwADNxMEAz8fEAMjIxgDHx8gAycnJAM3K + yQDNzMsAzMzMANDFwQDRyMUA1MvHANHNywDUzcoA0s7NANXPzADW0M4A2NHOANXU1ADY09AA2tTRANzW + 0wDa1dQA3djVANrZ2QDf29gA3d3dAODSzQDl1M0A7NfOAOzYzwDi1tEA5tfQAOfZ0wDg2dYA5NrVAOrZ + 0gDs2dEA6dvVAO7b1ADu3dYA4drYAOLd2gDl3tsA6t7YAO/f2ADl4N0A6uDbAO7h2wDp4t0A7uPdAO/k + 3wDw4doA8ePcAPHk3gDj4uEA5OPiAOTk4wDl5eQA6OLgAOrk4ADt5eEA6OfmAOzn5ADu6OQA6urpAO3q + 6QDt7OoA7u7sAPDm4QDx6eUA9OnkAPXs5wDw6+gA8u3qAPXu6QDy7uwA8vDuAPbw7QD48u8A8/HwAPXz + 8QD09PIA+PPwAPj08gAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlK + QkJCQkJCQkJCQkJCQkJCQkJCQkJDbQAAAAAAAABQbW9iYmJiYmJiYmJiYmJiYmJiYmJiZnilSgAAAAAA + bWANAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ2eUAAAAK5tDQECAgICAgICAgICAgICAgICAgICAgICAg2l + eQAApEYBAQICAgICAgIOJSUlJSUlJSUlJRwlHA8CAn5NAACkHAIEAgQCBAIEAhDg/f39+Pj29vb29vbs + EgIEcUoAAKQcAgQEBAQCBAQEEODw7u7W1tbGxsbGxvYSBAKWUAAApEcEBAQEBAQEBAQQ4Pju7u7W1tbO + xsbG6RIEBHFQAAClRwQEBAQEBgQEBhHg+MSysrKIiIiIiMbsFAQGllAAAKVYBgYdb29qb2pqZOD48PDm + 3Nzczs7OzuwUBgSZZwAArVgGBlTs5tzc1Nyr4PjCvLjmuLS0qqrW7BUGBplnAAClWwYGVezWzMzJybLg + +Obm1Pa08ObctNzsFQYGm2sAAK5bCAZV7NzMyMm6iOD31MK+6br29PC07vYWCAiZbQAArlsICFfs1KmH + hIR24P3cwszpxPb097rw7BsICJttAACuWwgIV+zm5tzc1rTg9+bUwva45vDmuPD2GwgIm20AAK5bCwtV + 7NyppKm6fef4wsLE5r6+usS6+OwnCwubbQAArlsXGGHs6dTm5r6l5vj49vb3+Pb29tTm4CgYGJttAACu + WxgrY/jmvK68wq7s+Pf39/f39/fCh32eKSsYm20AAK1bKy6W7Ozg5uDCuOz99/399/39977CwmYvLiub + bQAApVssM5b46cLCwsK47P399/399/33wrxzMjMzLJtnAAClVy43mf3swtTg8Lzg/f39/f39/f3CczY1 + NTUum2cAAKVVNDqb/fb29vb25sK8vK6upYuNjYs/Ojo6OjeYZwAApVE3PZ347Pbw9vb29vaqpap5PT09 + PT0/PT0/N5hQAACkKjlAn/329vbw9vbw9q7srYlAQEBAQEBAQEA7mEoAAKQqO4qg/fb2+Pj29vj2uK6O + ioqKioqKioqKij2YTQAApUY5kqDg4Obg4ODg4OCuj5KSkpKSkpKSkpKSPJZQAACuahqSlJGRkZGRkZGR + kZSTk5OTk5OTk5OTk5IreXkAAACtRho9QUFBQUFBQUFBQUFBQUFBQUFBQUE7K2BnAAAAAAClZxwdHh4e + HR4dHh0eHR0dHR0dHR0dHUZndwAAAAAAAACupYB5gHmAeYB5gHmAeYB5gHmAeYB7gK0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////8AAAD+AAAAfAAAADgAAAAYAAAAGAAAABgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABwAAAA+AAAAfwAAAP/////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA + AAAAAAAAAAEAAAABAAAAAAAAL5EvAC+WLwAvmi8AMowyADWLNQAwkTAAMZQxADSSNAAwmjAAMZ4xADSZ + NAA1nzUAMKEwADClMAA1ojUANqY2ADCpMAAwrTAANqk2ADetNgA7rzsAObM5ADyxPABWklYAW5ZaAFuY + WQBcmFoAX5pfAEi4SABNvE0AZ5tlAG6ibABmtmcAabppAG2/bQBRwFEAVsBWAFbFVgBYxlgAXsZeAF3J + XQBizGIAZcxlAGvRawBs0WwAbdVtAHDRbwB11nUAedZ5AH/bfwB+3H4AhKGBAIK0gACRvY8Al6iVAJuh + nACcpJ0AoaGiAKenqACpqaoArq6uAKu7qQCvvq4AsL+uAK+vsACwsLAAsbaxALW1tgC+t7QAvrm3ALe3 + uAC4uLkAvLy9AIPJggCC24IAid+JAJfBlQCH4IcAjeONAJDjkACjyaIArM6rALDArgCl2KQAqdmoALHC + sACyxLEAysC7AM3DvwC/v8AAwcHCAMPDxADFxMUAycLAAMrFwgDPx8MAycbGAM3HxQDIycYAx8fIAMnJ + yADOy8oAy8zIAM3MygDPz88A1cfBANHKxgDVycQA18zHANjLxgDVzswA2c7JAMnXxwDN1ssAy9rKANrQ + ywDa0c0Az8/QANbS0ADV1NIA1tbVANrV0QDc1dEA2tbUANnZ1wDe2NUA3NrZANvc2gDe3NsA3t7dAOXS + ygDl08wA5dXOAOfY0gDi2tYA6NnTAO3Z0QDp3NYA7t3WAOHb2ADi3NoA5N3ZAOXf3ADq39oA4OHfAOfg + 3QDr4NsA6OHeAPDg2QDw4twA4uLhAOnj4ADq5OEA7OXiAO/p5QDv6ugA8ebhAPHq5gDy7eoA9u7qAPPv + 7AD17+wA9vHuAPjy7gD08vEA+PTyAPn29AD6+PYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJOkE9PT09PT09PT09PT09 + PUI7QgAAAGQ4GQUFBQUFBQUFBQUFBQUFBQUcREkAAEIZAQEBAQEBAQcHBwcHBwcHBwcBHD0AAEcFBwcB + AQEBH2dnZ2dnYWddYTcBB0kAAEILCQEDAwMDIKSdlpWLi4mJiz8LB0kAAEkHCwMDCwMDIKadk4uGhYWF + iz8DB0kAAEkLDRwaHBoZNKaTenVwbmpqi1MNC1oAAEkND2eYmJiYYaaZfo6GdXBullMNDV0AAF0PEGeT + hoaFWKaemZ56np11nVYND10AAF0NFWeTZm5YRaaOb4Z6pKB6nlYSDWcAAF0VEmeZmH6GXaaemZt6np56 + oFYSFWQAAF0VF2eZYWF1RaaZjpiOjn5+pFYXF10AAF0dJXmejo6OZ6ampKCmoKB6eT4kHV0AAF0eKHmb + jn+OZ6ampKampqBdYTUnHl0AAEkkK36cenqOZ6impqampqBkNisrJF0AAEkkL3+cnJygf5F/f39yc3JN + LCwsJF0AAEkpMZGkoJymoKB6ZWFKLzAvMS8wKkkAAEIrS5GcppygnKR5f1FLMzMzMzMzK0gAAEkrTJil + pqWmpaV5UkxOTk5OTk5OK0gAAEghTFVVVVVVVVVUUFBQUFBQUFBMIzwAAHY4IiwuLi4uLiwsLC4sLi4u + LiwiOFsAAAByR0E9PDw8PDxBPTw9PTw9PT1DZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AMAA + AwCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA + AQCAAAEAgAABAIAAAQCAAAEAgAABAMAAAwD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA + AAAAAQAAAAEAAAAAAAAwkjAAMJYwADeSNgAwmzAAR5VGAEeZRgBInUcASZVIAFWUUwBWllUAWJtZAEii + RwBJp0gAVqBVAFSvUwBcp1sAW6FcAF2mXQBcq1sAXqtfAGiWaQBynnIAZ6NnAGmqagBqrmsAZLFlAGe0 + ZgBgv2AAbLJsAGy2bABuuW4AeaZ6AHupewByu3MAdb11AHqzegB5tHoAeL14AGTNZAB0wXUAe8F6AHnG + eQB8xnwActVyAH7RfQCcvpsAp6moAKusqwCrr6wAt7q3AIbBhwCByoEAhsmFAIXOhgCF0IQAgN2AAIXZ + hACK0IoAncGcAJHQkQCS35IAnNecAJvemwChw58AjeKNAL3AuwC52rkAx8e/AMnGxgDIycIAyszFAM7O + ygDZycMA28zGANbOygDE08MA1NHPAN3QygDY0s8A39TPANbS0ADZ09AA2tTRANrW1QDe2NYA3dvaAN/d + 2wDj1c4A4NbRAOPZ1QDl2dQA4NvYAOLc2QDk3dkA4d7cAOjf2wDC4sEA5eDeAOjh3gDt4dwA8ePdAPHk + 3wDt5eEA6+bkAO3o5QDy5+IA8ermAPTq5QDx7OkA9e7qAPPw7gD08O0A+PLvAPXy8AD29PEA+PPwAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAADAWFxcXFxcXFxcXFyAvAAAVAQEBAQgKCgoKCgoB + IQAACgECAQIubmxqZmZqCBgAAAsCBAIEO2pZTkpKZAYYAAARDkdHREhsXGBOTmQHHQAAERNnW1hZZ1xi + bFtnDR0AABMTZ1lITW5cXG5cbw0fAAAaG21NWU1uZGdqXG0PKAAAHSttVFZWb3Nzb01CHCsAAB81bVxi + VnNzc3NIKyc1AAAiPHNubmpNR0A3LSwsNQAAIj5zbW9vX0w5OTg4ODoAACU+YWFhYUM9QUFBQUEzAAAy + JSYmJiYmJiYrIiYlMAAAAAAAAAAAAAAAAAAAAAAA//8AAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB + AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9fX4GeHh5Onp6 + emmAgIF8gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GB + gn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf39/ + gHx4eHlpdnZ3Onp6ewYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhISFBnl5 + enSOjo7klpaX/pKSk/6Ojo7/i4uM/ouLi/+Li4v+i4uM/ouLjP6Li4v/i4uL/ouLi/6Li4v/i4uL/ouL + i/6Li4v/i4uL/ouLi/6Li4z/i4uL/ouLi/6Li4z/i4uM/ouLi/6Li4v/i4uL/ouLjP+Li4z+i4uM/ouL + i/+Li4z+i4uL/oyMjP+Ojo/+jY2O/oWFhuR1dXZ0enp7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACHh4gVjIyNxqSkpf+ZmZr/wMDB/87Ozv/Pz8//0NDQ/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR + 0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR + 0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0v/Y2Nn/1tbW/62trf+Pj4//fn5/xnh4eRYAAAAAAAAAAAAA + AAAAAAAAAAAAAJOTkwaUlJXGpqan/qSkpf6nrqj/X4tf/j+GP/42iDb/NYk1/jWJNf81iTX+NYk1/jWJ + Nf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJ + Nf41iTX/NYk1/jWJNf81iTX+NYk1/jWJNf81iTX+NYk1/jaINv8/hj/+YY1h/rW8tf/U1NT+jIyM/oCA + gMZ9fX4GAAAAAAAAAAAAAAAAAAAAAImJinTFxcX/n5+g/oOXg/41izX/L5Av/i+QL/4wkDD/L5Av/jCQ + MP8vkC/+L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+Q + L/4wkDD/L5Av/i+QL/4wkDD/L5Av/jCQMP8vkC/+L5Av/jCQMP8vkC/+L5Av/jCQMP8vkC/+L5Av/jWM + Nf+Po4/+1NTV/pKSk/96ent0AAAAAAAAAAAAAAAAmpqbB7CwsOSnp6j/maCa/zWNNf8wkTD/MJEw/zCR + MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR + MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR + MP8wkTD/MJEw/zCRMP81jTX/tby1/7Ozs/+Li4zkg4OEBwAAAAAAAAAAl5eYO9PT1P6fn5//XItc/i+S + L/4wkjD/L5Iv/i+SL/4wkjD/L5Iv/jCSMP8vki/+L5Iv/i+SL/4wkjD/L5Iv/i+SL/4wkjD/N5Q3/jmU + Of45lTn/OZQ5/jmUOf45lDn/OZQ5/jmUOf45lDn/OZQ5/jmUOf45lDn/OZQ5/jmUOf85lDn+OZQ5/jmU + Of85lDn+OZQ5/jmUOf80kzT+L5Iv/jCSMP8vki/+YZBi/tra2v+VlZb+gICBOwAAAAAAAAAAnJydatPT + 0/6cnJ3/QItA/i+TL/4wkzD/L5Mv/i+TL/4wkzD/L5Mv/jCTMP8vky/+L5Mv/i+TL/4wkzD/L5Mv/i+T + L/42ljb/i5eI/p6hm/6eoZv/naCa/p2fmf6cn5n/nJ6Y/puemP6bnZf/mp2X/pmclv6ZnJb/mZuV/pib + lf+Ym5X+l5qU/pealP+XmZP+lpmT/pSWkP9rkGn+L5Mv/jCTMP8vky/+QItB/tvb2/+ZmZn+g4OEagAA + AAAAAAAAq6urfc3Nzv+ZmZr/N484/zCVMP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCV + MP8wlTD/MJUw/zCVMP85mDj/o6ef//n6+f/6+vj/+fn4//n5+P/5+fj/+fn3//n59//5+fj/+fn3//n4 + 9//5+Pf/+fj3//n49//5+Pf/+fn3//n49//5+Pf/+fn3/+nq6f90knL/MJUw/zCVMP8wlTD/OI84/9XV + 1v+YmJn/jIyNfQAAAAAAAAAAr6+wf87Ozv6bm5z/N5E3/i+WL/4wljD/L5Yv/i+WL/4wljD/L5Yv/jCW + MP8vli/+L5Yv/i+WL/4wljD/L5Yv/i+WL/45mjj/o6ig/vn5+P706+b/8+ji/vLm4P7y5d//8ePd/vDi + 2/7w4Nr/79/Y/u/e1/7u3dX/7tzU/u3c0//t29P+7tvT/u3b0//t29P+8eXf/urq6f90knL+L5Yv/jCW + MP8vli/+N5E3/tXV1v+ampv+j4+QfwAAAAAAAAAAsbGyf8/Pz/+dnZ7/N5M4/zCYMP8wmDD/MJgw/zCY + MP8wmDD/MJgw/zCYMP8wmDD/MJgw/zCYMP8wmDD/MJgw/zCYMP85mzj/pKmh//n5+P/06+b/8+fi//Lm + 4P/y5N7/8eLb//Dg2f/w39f/7t3V/+7b1P/t2tL/7dnR/+zYz//s187/7NfO/+zXzv/s187/8OLc/+rq + 6f91k3L/MJgw/zCYMP8wmDD/N5M4/9bW1/+dnZ7/kZGSfwAAAAAAAAAAs7Ozf9DQ0f6fn6D/OJQ4/i+Z + L/4wmTD/L5kv/i+ZL/4wmTD/L5kv/jCZMP8vmS/+L5kv/i+ZL/4wmTD/L5kv/i+ZL/45nDj/pamh/vn5 + +P717en/9Orl/vPp4/7z5+H/8uXf/vHj3f7x4tv/8ODZ/u/e1/7u3NX/7tvT/u3Z0f/s2ND+7NfP/uzX + zv/r1s3+8OLc/urq6f91lHP+L5kv/jCZMP8vmS/+OJQ4/tfX1/+fn6D+lJSVfwAAAAAAAAAAtLS1f9HR + 0v6hoaL/OJY4/i+bL/4wmzD/L5sv/i+bL/4wmzD/L5sv/jCbMP8vmy/+L5sv/i+bL/4wmzD/L5sv/i+b + L/45njj/paqi/vn6+f727+v/9ezn/ufe2v7l29f/5NrV/uLX0/7i1tH/4dTP/uDTzf7f0cz/39DK/t7O + yP/dzcf+3czG/t/Nxv/s187+8OPd/urq6v91lHP+L5sv/jCbMP8vmy/+OJY4/tjY2P+hoaP+lpaXfwAA + AAAAAAAAtra2f9LS0/6jo6T/OJg4/i+dL/4wnTD/L50v/jGdMf4xnjH/MZ4x/jGeMf8xnjH+MZ4x/jGe + Mf4xnjH/MZ4x/jGeMf46oDr/pqqi/vn6+P738O3/8erm/s3Gw/7MxMH/y8PA/sjAvf7Hv7v/xr26/sa8 + uf7Fu7f/xbq2/sO5tf/CuLP+wrey/sO3sv/r18/+8ePd/urq6v92lXP+L50v/jCdMP8vnS/+OJg4/tnZ + 2f+kpKX+mJiZfwAAAAAAAAAAt7e4f9PT1P+lpaf/OZo5/zCfMP8wnzD/OKA3/4CTff+IlIX/iJSE/4eT + hP+Gk4P/hpOD/4WSgv+EkYH/hJGB/4SQgP+GkYL/qqem//n6+f/38e3/9u/r//Dp5f/u5+P/7ubh/+3k + 3//s497/6+Hc/+vf2v/q3tj/6dzW/+ja1P/o2dP/59fR/+jX0P/t29P/8eXf/+rr6v92lnT/MJ8w/zCf + MP8wnzD/OZo5/9nZ2v+mpqf/mpqbfwAAAAAAAAAAuLi5f9TU1f6np6j/Opw6/jCgMP4xoDH/PKI8/qOk + oP7r7Ov/6+vq/uvr6v/r6+r+6+vq/uvr6v7r6+r/6uvq/urr6v7n5+b/sa6u/vn6+P738e3/9u/r/vLr + 6P7x6ub/8enl/vDo5P716+f/8+nk/u7k3/7u4t3/7ODb/uzf2f/r3df+6tvV/uvb1P/u3dX+8ubg/urr + 6v93l3T+MKAw/jGgMf8woDD+Opw6/tra2/+oqKn+nJydfwAAAAAAAAAAubm6f9XV1v6pqar/Op06/jCi + MP4xojH/PaM8/qSmov7v7+3/6uLd/urg2//p3tr+6N3Y/ujc1v7n29X/5trU/ubZ0v7j1c//sq2s/vn6 + +P738e3/8uvn/s/Jx/7Nx8X/zcfE/sjCv/7o4d3/39jU/szFwv7Lw8D/x7+8/se+uv/Gvbn+xby4/sa8 + uP/u3tf+8uji/urr6v93mHT+MKIw/jGiMf8wojD+Op06/tvb2/+qqqv+np6ffwAAAAAAAAAAurq7f9bW + 1/+rq6z/Op86/zGkMf8xpDH/PaU8/6Wmov/v7+3/6uDb/+nd1//o29b/59nU/+fY0v/m19D/5dXO/+TT + zP/h0Mn/sq6t//n6+f/38e3/9e/r/+Xe2//j3Nn/49zZ/+Ha1//z7Oj/3dfT/9jSzv/u5uL/7eTg/+3j + 3v/s4tz/6t7Z/8W8uP/u4Nr/8+nl/+rr6v93mXX/MaQx/zGkMf8xpDH/Op86/9vb3P+srK3/n5+hfwAA + AAAAAAAAu7u8f9fX2P6srK7/OqE7/jCmMP4xpjH/Pac8/qano/7v7+3/6+Ld/urf2v/p3tj+6dzX/uja + 1f7n2dP/5tfR/uXWz/7i08v/sq6t/vn6+f738e3/9u/r/vbv6/738Oz/9u/r/vbv6/738Oz/3dfU/tvV + 0f727ur/9e3p/vXs5//06uX+8ufi/sa+uv/v493+9Ovn/urr6v94mnX+MKYw/jGmMf8wpjD+OqE7/tzc + 3P+tra/+oaGifwAAAAAAAAAAvLy9f9jY2P6tra//O6M7/jCoMP4xqDH/Pak8/qaopP7v7+7/7OTg/uvi + 3f/i2dT+4NfS/t/V0P7e087/3tHN/t3Qy/7azcf/s6+u/vr6+f738e3/9O3p/tXPzf7Tzcr/0szJ/s/I + xv7t5uL/3tfV/tvV0v738Oz/9+/r/vbu6v/27ej+8+nl/si/vP/x5uH+9e3p/uvr6v94m3b+MKgw/jGo + Mf8wqDD+O6M7/tzc3f+vr7D+oqKjfwAAAAAAAAAAvb2+f9jY2f+urrD/O6U7/zGqMf8xqjH/Pas8/6eo + pP/v7+7/7ebi/+Xd2f/Cvbr/wry5/8C6t/++uLT/vbaz/721sf+8tLD/sa2s//n6+f/38e3/9O3p/9rT + 0f/X0c7/1tDO/9PNyv/v6OT/3dfU/9vV0v/38Oz/9/Ds//fv6//27+v/9Ozn/8jBvv/y6OP/9u/r/+vr + 6v95nHb/Maox/zGqMf8xqjH/O6U7/93d3f+wsLH/o6OlfwAAAAAAAAAAvb2+f9jY2f6vr7H/O6c7/jCs + MP4xrDH/Pa08/qiopP7v7+7/7ebi/uzk4P/f2dX+3tfT/t3W0v7c1ND/29PO/tvRzP7Yzsn/s7Cv/vn6 + +f738e3/9u/r/vbv6/738Oz/9u/r/vbv6/738Oz/3dfU/tvV0v738Oz/9u/r/vfw7P/38Oz+9O3p/sjC + v//z6ub+9/Ht/uvr6v95nXb+MKww/jGsMf8wrDD+O6c7/t3d3f+wsLL+pKSlfwAAAAAAAAAAvr6+f9nZ + 2f6wsLH/O6g7/jCuMP4xrjH/Pa49/qippf7v7+7/7ebi/u3m4v/s5eH+6+Tg/uvj3/7q4t7/6+Ld/urg + 2/7m29b/tbGw/vn6+f738e3/9e7q/uDa1/7e2NX/3tfV/tzV0v7x6ub/3dfU/tfRz/7r5eH/6uTg/urk + 4P/r5OD+6eLf/sjCv//z7Oj+9/Lv/uvr6v96nnf+MK4w/jGuMf8wrjD+O6g7/t3d3f+xsbP+pKSmfwAA + AAAAAAAAvr6+f9nZ2f+wsLH/O6o8/zGwMf8xsDH/PbA9/6mppf/v7+7/7ebi/+fg3P/Gwb//xcC+/8S/ + vf/AvLn/49vX/9TNyv/Dvbr/s6+v//n6+f/38e3/8+zo/9HLyf/Pycf/zsjG/8rEwf/q5OD/4tzZ/8/J + x//OyMb/y8XC/8rEwv/LxML/ysTB/83Gw//17ur/+PPw/+vr6v96n3j/MbAx/zGwMf8xsDH/O6o8/93d + 3f+xsbP/paWmfwAAAAAAAAAAvr6+f9nZ2f6vr7H/Pq0+/kG3Qf49tj3/RrVG/qusqP7v7+7/7ebi/urj + 3//Uzsv+083K/tLNyv7Qy8j/6OHd/s/Kxv7MxsP/tbGx/vn6+f738e3/9u/r/vXu6v717ur/9O7q/vTt + 6v738Oz/9u/r/vTu6v707er/9O3p/vTt6f/07en+8uvn/vHr5//z7Oj+9PDt/urq6f9+onz+P7c//kK4 + Qv9GuUb+P60//t3d3f+xsbL+pKSmfwAAAAAAAAAAvb2+f9jY2f6vr7D/P68//k6+Tv5Ovk7/Wb5Z/ra2 + sv7x8fD/7+nm/u/p5f/v6OX+7+jl/u7o5P7u6OT/7ujk/tPOy/7Uz8z/u7e3/vr6+f738u7/9/Dt/vfw + 7f738O3/9/Dt/vfw7f738e3/9/Dt/vfx7f738e3/9/Ht/vfx7f/07uv+7Obj/ubg3f/l39z+5+Ph/uLi + 4f9+n3z+Tr5O/k6+Tv9Ovk7+QK9B/t3d3f+wsLL+o6OlfwAAAAAAAAAAvb2+f9jY2f+urq//QLFA/1LB + Uv9SwVL/XcFd/7i4tf/y8vH/8Orn/+3n5P/Y09H/19LQ/9bRz//U0M3/6+Xi/9fT0f/Z1NL/wr+///v7 + +v/48/D/+PLv//jy7//48u//+PLv//jy7//48u//+PLv//jy7//48u//+PLv//jy7//x7On/0s3L/8bB + v//FwL7/yMXE/8rJyP+Bon//UsFS/1LBUv9SwVL/QbFB/9zc3f+vr7D/o6OkfwAAAAAAAAAAvLy9f9fX + 2P6tra7/QLJA/lfEV/5XxFf/YcRh/rq7t/7y8vH/8Ovn/uvm4//Szsz+0c3L/tHMy/7Oy8j/6eTh/tjU + 0f7Z1dP/xMHA/vv7+v749PD/+PLv/vjy7/748+//+PLv/vjy7/748+//+PLv/vjy7/748+//+PLv/vjy + 7//s5uP+s6+v/sjGx//FxMT+v729/qqmpv97sXn+V8RX/lfEV/9XxFf+QrNC/tzc3f+urq/+oaGjfwAA + AAAAAAAAu7u8f9bW1/6rq63/QLRB/lvHW/5bx1v/Zcdl/ry9uf7y8vH/8evo/vDr6P/w6uf+8Orn/vDq + 5/7w6uf/8Orn/tnV0/7a1tT/xsPC/vv7+v759PH/+PLv/vjy7/758/D/+PLv/vjy7/758/D/+PLv/vjy + 7/758/D/+PLv/vjy7//s5+T+vbq6/urq6v/g39/+vry8/oawhP9cx1z+W8db/lvHW/9bx1v+QrRC/tvb + 3P+srK7+oKChfwAAAAAAAAAAurq7f9bW1v+qqqv/QbVB/1/KX/9fyl//acpp/76/u//y8/H/8ezp/+/q + 5//j39z/497b/+Ld2//h3dr/7+nm/9rW1P/a1tT/x8XE//v7+v/59PH/+fPw//nz8P/58/D/+fPw//nz + 8P/58/D/+fPw//nz8P/58/D/+fPw//jz7//t6OX/vru7/+Hh4f/BwL//i7OJ/2HKYf9fyl//X8pf/1/K + X/9fyl//Q7ZD/9vb2/+qqqz/np6gfwAAAAAAAAAAubm6f9XV1f6oqKn/QbdB/mTNZP5kzWT/bc1t/sDB + vv7z8/L/8ezp/uzn5P/Szs3+0s7N/tHOzP7Oy8j/6eTh/t3Z1/7Rzsz/x8XE/vv7+v769/X/+vf0/vr3 + 9P769/T/+vf0/vr39P769/T/+vf0/vr39P769/T/+vf0/vr39P/w7ev+vbu7/sXDw/+RtY/+Zsxm/mTN + ZP9kzWT+ZM1k/mTNZP9kzWT+Q7hE/tra2/+oqKr+nZ2efwAAAAAAAAAAt7e4f9TU1P+mpqf/QbhC/2nQ + af9p0Gn/ctBy/8LDwP/z8/L/8u3q//Hs6f/u6eb/7ejm/+3o5f/t6OX/8ezp//Dr6P/r5uT/ycbG//Hx + 8P/y8vH/8fHx//Hx8f/x8fH/8fHx//Hx8P/x8vH/8fHw//Hx8P/x8fD/8fHw//Hx8P/q6un/t7Sz/5q6 + mP9qz2r/adBp/2nQaf9p0Gn/adBp/2nQaf9p0Gn/RLlF/9ra2v+np6j/m5ucfwAAAAAAAAAAtra3f9LS + 0/6kpKX/QrpC/m3Tbf5t023/dtJ2/sTGwv7z9PP/8u3q/vLt6v/x7er+8u3q/vLt6v7y7er/8e3q/vHt + 6v7w7On/0s7N/s3Kyf7Oysn/zMnH/snGxf7HxMP/x8PC/sfExP7FwsL/rLWp/qbCo/6mw6T/psOk/qXB + o/+jwKH+mcSX/nHScf9t023+bdNt/m3Tbf9t023+bdNt/m3Tbf9t023+RbtF/tnZ2f+kpKb+mZmafwAA + AAAAAAAAtbW1f9HR0v6ioqP/Q7tD/nPVc/5z1XP/e9V7/sfIxf709PT/8+7r/vPu6//z7uv+8+7r/vPu + 6/7z7uv/8+7r/vPu6/7z7uv/8+7r/vPu6/7z7ev/7ejm/tnV0/7RzMr/0MvK/tTR0P7R0ND/kLWP/nPV + c/5z1XP/c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+RrxG/tjY + 2P+ioqP+l5eYfwAAAAAAAAAAs7O0f9DQ0f+goKH/Q7xD/3fYd/932Hf/gNd//8nKxv/09fT/8+7s//Pu + 7P/z7uv/8+7s//Pu7P/z7uz/8+7r//Pu6//z7uz/8+7r//Pu6//z7uv/5eHf/7u5uf/GxMT/xMLC/8G/ + v/+1srL/ksKR/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fY + d/932Hf/R71H/9fX2P+goKH/lJSWfwAAAAAAAAAAsrKyf8/P0P6dnZ7/Q75D/nzafP582nz/hNqE/svM + yf709fT/8+/s/vPv7P/z7uz+8+/s/vPv7P7z7+z/8+7s/vPu7P7z7+z/8+7s/vPu7P7z7uz/5eHf/sfG + xv7o6Oj/4eHh/sjHxv6ewJ3/fdl9/nzafP582nz/fNp8/nzafP982nz+fNp8/nzafP982nz+fNp8/nza + fP982nz+fNp8/nzafP982nz+SL9I/tbW1/+dnZ7+kpKTfwAAAAAAAAAAsLCxf87Oz/6bm5z/RL9E/oDd + gP6B3YH/iNyI/s3Oy/719fT/9PDt/vTv7f/z7+z+9O/t/vTv7f707+3/8+/s/vPv7P707+3/8+/s/vPv + 7P7z7+3/5+Lg/snHx/7i4uL/y8rK/qTCov6C3IL/gN2A/oDdgP6B3YH/gN2A/oHdgf+A3YD+gN2A/oHd + gf+A3YD+gN2A/oHdgf+A3YD+gN2A/oHdgf+A3YD+ScFJ/tXV1f+bm5z+kJCRfwAAAAAAAAAArKytfdHR + 0f+ZmZr/RL9E/4TfhP+F34X/jN6M/8/Qzf/19vX/9fLv//Xx7//18e//9fHv//Xx7//18e//9fHv//Xx + 7//18e//9fHv//Xx7//08e//6ebl/8jGxv/Ozc3/qcOn/4fdh/+F34X/hd+F/4Xfhf+F34X/hd+F/4Xf + hf+F34X/hd+F/4Xfhf+F34X/hd+F/4Xfhf+F34X/hd+F/4Xfhf+F34X/SMBI/9PT1P+ampz/jY2OfQAA + AAAAAAAAnp6fatvb2/6YmJn/RbVG/oXghf6J4Yn/keCQ/tDRzv7z9PP/8/Pz/vP08//z8/P+8/Tz/vPz + 8/7z8/P/8/Pz/vPz8/7z8/P/8/Pz/vPz8/7z8/P/6urq/sLAwP6vx63/i9+L/onhif6J4Yn/ieGJ/onh + if6J4Yn/ieGJ/onhif+J4Yn+ieGJ/onhif+J4Yn+ieGJ/onhif+J4Yn+ieGJ/onhif+F4IX+R7ZH/tLS + 0v+cnJ3+hYWGagAAAAAAAAAAm5ubO9vb2/6cnJz/XKVc/nDbcP6O447/kuKS/r7PvP7Cz8D/ws/A/sLP + wP/Cz8D+ws/A/sLOv/7Bzr//wc6//sHNv/7Bzb//wM2+/sDNvv6/zL3/vcq7/rPOsf6R4pH/juOO/o7j + jv6O447/juOO/o7jjv6O447/juOO/o7jjv+O447+juOO/o7jjv+O447+juOO/o7jjv+O447+juOO/o7j + jv9s2mz+Yaph/sbGxv+enp/+hISFOwAAAAAAAAAAoKCgB7GxsuS3t7f/iJSJ/0XGRf+K44r/kuSS/5Lk + kv+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Lk + kv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lk + kv+S5JL/kuSS/4Xhhf9AxUD/qLSo/6Cgof+UlJXkioqKBwAAAAAAAAAAAAAAAI+PkHTg4OD/kpKS/naV + dv5Fx0b/dd51/pHkkf6V5pX/luaW/pbmlv+W5pb+luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbm + lv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv+W5pb+luaW/pbm + lv+W5pb+luaW/pXmlf+P5I/+cN1w/kDGQP+EpIX+pqan/qenqP9/f4B0AAAAAAAAAAAAAAAAAAAAAKCg + oAaenp/G1tbX/pCQkf6GkYf/WqNb/kS2Rf5Fw0X/RcRF/kXERf9FxEX+RcRF/kXERf5FxEX/RcRF/kXE + Rf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXE + Rf9FxEX+RcRF/kXERf9FxEX+RcRF/kXDRf9EtkT+XKRd/pijmf+enp/+p6eo/o+Pj8aKiosGAAAAAAAA + AAAAAAAAAAAAAAAAAACampoVnZ2dxd/f3/+zs7T/lJSV/4+PkP+Ojo//jo6P/46Oj/+Ojo//jo6P/46O + j/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46O + j/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/4+PkP+UlJX/mJiZ/6Ojo//Dw8T/k5OUxYmJ + ihUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5+fBoyMjHSurq7k19fY/tjY2P7MzMz/x8fH/sbG + x//Gxsf+xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbG + x/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx//Gxsf+xsbH/sbGx//Gxsf+xsbH/sjIyP/Pz9D+0NDQ/qys + rOOHh4d0lZWVBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgoKAGl5eXOpaW + l2ihoaJ8pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6Sk + pH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6Gh + oXyVlZZolpaWOp6engYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAPwA + AAAAPwAA8AAAAAAPAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADwAAAAAA8AAPwA + AAAAPwAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB9fX02ioqKqoaGh+mHh4f9hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aG + h/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaG/YODg+mCgoOqd3d4NgAA + AAAAAAAAAAAAAAAAAAAAAAAAjIyNap2dnvytra7/prKm/561nv+ftp//n7ef/5+3n/+ft5//n7ef/5+3 + n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft6D/r7uw/8HB + wf+VlZX8e3t8agAAAAAAAAAAAAAAAI+Pjzavr6/8maKa/0SLRP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCP + MP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCP + MP8wjzD/RYxG/7rDuv+Xl5j8fHx9NgAAAAAAAAAAr6+vq6enqP9EjET/MJEw/zCRMP8wkTD/MJEw/zCR + MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR + MP8wkTD/MJEw/zCRMP8wkTD/Ro5G/8XFxf+JiYqrAAAAAAAAAAC5ubnph5SH/zCTMP8wkzD/MJMw/zCT + MP8wkzD/MJMw/zCTMP8wkzD/MJMw/0aWRf99m3v/f559/3+dfP9+nHz/fpx7/32be/98mnr/fJp6/3ya + ef97mXn/e5l5/3qYeP95l3f/TJJL/zCTMP8wkzD/sr+y/42NjukAAAAAAAAAALu7vP57lHz/MJUw/zCV + MP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCVMP8wlTD/VZlU/+Pi4f/49fP/9/Tx//fz8P/38u//9/Lv//bx + 7v/28O3/9fDt//bw7f/28O3/9vDt/+7u7P9dk1z/MJUw/zCVMP+jvKT/k5OU/gAAAAAAAAAAvb2+/32X + fv8wlzD/MJcw/zCXMP8wlzD/MJcw/zCXMP8wlzD/MJcw/zCXMP9Wm1T/4+Ph//Tp5P/y5d//8ePc//Dg + 2f/v3tb/7tvT/+3Z0f/s2M//7NfO/+zXzv/s187/7evp/16UXP8wlzD/MJcw/6S+pP+Xl5j/AAAAAAAA + AAC/v8D/gJqB/zCaMP8wmjD/MJow/zCaMP8wmjD/MJow/zCaMP8wmjD/MJow/1adVf/k4+L/9e3o//Tp + 5P/y5+H/8eTe//Di2//v39j/7t3V/+3a0v/s2ND/7NfO/+zXzv/t6+n/XpZc/zCaMP8wmjD/pb+l/5qa + m/8AAAAAAAAAAMHBwv+CnYP/MJww/zCcMP8wnTD/MZ0x/zGdMf8xnTH/MZ0x/zGdMf8xnTH/V59W/+Tj + 4//38Oz/29TQ/8/HxP/NxMH/y8K+/8rAvP/Jvrr/yLy4/8a7tv/HurX/7NjQ/+7r6v9emF3/MJww/zCc + MP+mwab/np6f/wAAAAAAAAAAw8PE/4Wghv8wnzD/MJ8w/3Obcf+osKX/p6+l/6avpP+mrqP/pa6j/6Wt + ov+jp5//5OTj//fw7f/07On/8enl//Dn4//v5eD/7uPd/+3g2//r3tj/6tvV/+rZ0v/u29T/7uzq/1+Z + Xf8wnzD/MJ8w/6fDqP+hoaL/AAAAAAAAAADFxcb/h6OI/zGiMf8xojH/hqWE/+7s6v/s5eL/6+Tg/+rj + 3//q4t3/6eDc/9HKxv/k5OP/9/Dt/+Hb2P/X0c//1M7L/+7m4v/Xz8z/1MvH/9HIxP/RxsL/0MXA/+7e + 1//u7Ov/YJte/zGiMf8xojH/qMSp/6Skpf8AAAAAAAAAAMfHx/+Jpor/MaQx/zGkMf+Gp4T/7ero/+ne + 2f/o29b/59nT/+bX0P/l1M3/zsG8/+Xk4//38O3/7ujk/+nj3//o4t7/8uvn/9XPy//x6OT/8Obh/+/k + 3//SyMT/7+Lb/+7t6/9gnV7/MaQx/zGkMf+pxqn/pqao/wAAAAAAAAAAyMjJ/4qoi/8xpzH/Macx/4eo + hf/u6+n/6+Ld/+Ta1f/j19P/4dXQ/+DSzf/Mwbz/5eXk//fw7f/n4N3/39jV/93W0//v6OX/19DO//fv + 6//27un/9ezn/9XMyP/x5uD/7+7s/2CfX/8xpzH/Macx/6rHqv+oqKr/AAAAAAAAAADJycr/i6qM/zGq + Mf8xqjH/iKqG/+7s6v/o4d3/x8K//8bAvf/DvLn/wru3/7ixrv/l5eT/9/Dt/+ni3//i29j/4NnW//Dp + 5f/X0M7/9/Ds//fv6//27+v/1s7L//Pq5f/v7u3/YaFf/zGqMf8xqjH/qsmr/6qqq/8AAAAAAAAAAMrK + yv+Mq43/Ma0x/zGtMf+Iq4b/7uzq/+3m4v/s5eH/6+Pf/+ri3f/q4Nv/0snG/+Xl5P/38O3/7OXi/+bg + 3f/l3tv/8erm/9XPzP/v6OT/7ujk/+/o5P/Uzcr/9O3o/+/v7f9ho1//Ma0x/zGtMf+ryqv/q6ut/wAA + AAAAAAAAysrK/4ysjf8ysTL/MbAx/4msh//u7Or/6eLe/8XAvv/Ev73/yMPA/9vU0P+7trT/5uXk//fw + 7f/j3dr/29XS/9jSz//w6eX/3NbT/9nT0P/Y0c7/2NHO/9jSz//27+v/8O/t/2KlYP8zsTP/NbI1/6vL + q/+rq63/AAAAAAAAAADJycr/jKyN/0a7Rv9MvUz/l7eV//Du7P/u6OT/6+Xh/+vk4f/r5eH/29XS/8jC + wP/n5uX/9/Ht//fw7P/38Oz/9/Ds//fw7f/38Oz/9/Dt//fw7f/z7en/6uTh/+nj4P/n5uX/b6pt/029 + Tf9Hu0f/q8ur/6qqrP8AAAAAAAAAAMjIyf+LrIz/S79L/1PCU/+evJv/8e/u/+3n5P/Uz83/087N/9bS + z//g2tj/z8vJ/+rq6f/48/D/+PLv//jy7//48u//+PLv//jy7//48u//+PLv/+Pe2/++urn/vLi3/7+8 + vP90r3L/U8JT/0y/TP+qy6v/qamq/wAAAAAAAAAAx8fI/4mriv9Qw1D/Wsda/6LAoP/x8O7/8Orn/+ji + 4P/n4t//6eTh/+Hc2f/Rzcv/6+vq//nz8P/48/D/+PPw//jz8P/58/D/+PPw//jz8P/48u//2NPR/93d + 3f/a2tr/oLKe/1/DX/9ax1r/UcNR/6nLqv+np6j/AAAAAAAAAADFxcb/iKqI/1XHVf9hy2H/psOk//Lw + 7//v6eb/3dnW/9zY1v/f29j/4t3b/8/Lyv/s7Ov/+fTx//nz8P/58/D/+fPw//nz8P/58/D/+fPw//nz + 8P/a1tT/1dTU/6m4p/9nx2b/Ycth/2HLYf9WyFb/qcup/6Skpv8AAAAAAAAAAMTExf+FqYb/Wsta/2jP + aP+qx6j/8/Hw//Dr6P/l4N7/5ODd/+bi3//t6OX/2NTS/+jn5v/19PP/9PTz//T08//09PP/9PTz//T0 + 8//09PL/9PTy/9vZ2f+suan/b8tu/2jPaP9oz2j/aM9o/1zMXP+oy6j/oqKj/wAAAAAAAAAAwsLC/4On + hP9gz2D/b9Nv/67Krf/z8vD/8u3q//Lt6v/y7ev/8u3q//Lt6v/s5+X/2tbU/9rV1P/Tz87/zcnI/87L + yv/DwcH/k8OS/5XJk/+UyJL/kseR/3jReP9v02//b9Nv/2/Tb/9v02//Ys9i/6fKp/+enp//AAAAAAAA + AADAwMD/gaWC/2XSZf9213b/ss2x//Tz8f/z7uv/8+7r//Pu6//z7uv/8+7r//Pu6//z7uv/8u3q/8zJ + yP/Gw8P/xMLC/7W3s/9403j/dtd2/3bXdv9213b/dtd2/3bXdv9213b/dtd2/3bXdv9o02j/psqm/5ub + nP8AAAAAAAAAAL6+vv9+o3//a9Zr/33bff+30bX/9PPy//Pv7P/z7+z/8+/s//Pv7P/z7+z/8+/s//Pv + 7P/y7uv/zszL/+Xl5f/Iycb/js6N/33bff99233/fdt9/33bff99233/fdt9/33bff99233/fdt9/27X + bv+lyqX/l5eY/wAAAAAAAAAAvb29/nyhff9v2W//hN6E/7rUuf/19PP/9PHu//Tx7v/08e7/9PHu//Tx + 7v/08e7/9PHu//Pw7v/Qzs3/zc3L/5XRlP+E3oT/hN6E/4TehP+E3oT/hN6E/4TehP+E3oT/hN6E/4Te + hP+E3oT/ctpy/6PIo/+UlJX+AAAAAAAAAAC+vr/phJiF/2nZaf+K4Yr/u9S6/+bl5f/m5eX/5uXl/+bl + 5f/l5eX/5eXk/+Xl5P/l5OT/5eTk/8jIx/+d1J3/iuGK/4rhiv+K4Yr/iuGK/4rhiv+K4Yr/iuGK/4rh + iv+K4Yr/iuGK/4rhiv9o2Wj/qr6r/5GRkekAAAAAAAAAALOzs6unp6f/VrtX/43jjf+a4Zr/oN+f/6Df + n/+g35//n9+f/5/fn/+f35//n9+e/5/fnv+e3p7/m+Ca/5Hkkf+R5JH/keSR/5Hkkf+R5JH/keSR/5Hk + kf+R5JH/keSR/5Hkkf+R5JH/i+OL/1W9Vf+ysrL/kpKSqwAAAAAAAAAAlpaXNsbGx/yEkoT/V7tX/2/d + b/994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33g + ff994H3/feB9/33gff994H3/feB9/27dbv9UvFX/mqia/5+foPyFhYU2AAAAAAAAAAAAAAAAnJydacXF + xvyjo6P/fZB+/3SadP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP9zmnT/c5p0/3Oa + dP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP90mnT/gZSC/6Ojo/+tra78jY2OaQAAAAAAAAAAAAAAAAAA + AAAAAAAAlZWVNq+vr6q5ubnotbW1/bOztP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP+zs7T/s7O0/7Oz + tP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP2zs7PorKysqpCQkTYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP/////gAAAHwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA + AAGAAAABwAAAA+AAAAf/////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGNjYxBsbGw5cHBxP3FxcT9xcXE/cXFxP3FxcT9xcXE/cXFxP3FxcT9xcXE/cXFxP3Fx + cT9xcXE/cXFxP3BwcT9ra2w5Y2NjEAAAAAAAAAAAAAAAAAAAAABubm8Fi4uMj5+foPivr7D/rq6u/q6u + rv+urq7/rq6u/q6urv+urq7/rq6u/66urv6urq7/rq6u/q6urv+urq7/rq6u/q6urv+xsbH/paWm+H9/ + gI9ra2wFAAAAAAAAAACdnZ6Qm6Cc/luVW/41izX+Mowy/jKMMv4yjDL+Mowy/jKMMv4yjDL+Mowy/jKM + Mv4yjDL+Mowy/jKMMv4yjDL+Mowy/jKMMv41izX+X5lf/rG2sf6CgoOQAAAAAHh4eBCysrP4VpJW/jCR + MP8wkTD/L5Ev/jCRMP8wkTD/L5Ev/jGSMf80kzT/NJM0/zSTNP40kzT/NJI0/jSTNP80kjT/NJI0/jSS + NP8zkjP/L5Ev/l+bX/+rq6z4dnZ3EImJiTm1tbb/NpA2/jCUMP8wlDD/L5Qv/jCUMP8wlDD/L5Qv/meb + Zf/Mzcr/y8zJ/8vMyP7Ky8f/ycrH/snKxv/Iysb/yMnF/sjJxf+XqJX/L5Qv/jaRNv+4uLn/g4OEOZWV + lj+1tbb+M5Qz/i+XL/4vly/+L5cv/i+XL/4vly/+L5cv/m6hbP738u/+8+fh/vHj3f7w4Nn+793W/u3b + 0/7t2dH+7dnQ/u/e1/6vvq7+L5cv/jOUM/65ubn+jY2OP5iYmT+4uLn/NJg0/jCaMP8wmjD/L5ov/jCa + MP8wmjD/L5ov/m+jbf/49PH/8efi/+vg2/7q3Nf/6NnT/ubWz//l08z/5dLK/u7d1f+wv67/L5ov/jSY + NP+8vL3/kZGTP5ubnD+8vLz/NJs0/jKeMv9bmVn/XJlb/lyYWv9bmFn/W5dZ/oShgf/49fP/6eLe/9zV + 0f7a0c3/2c7K/tfMx//VycT/1cfB/u/e1/+wwK7/MJ4w/jSbNP+/v8D/lpaXP56enz++vr/+NZ81/jai + Nv7Iycb+6ubj/urk4v7p4+D+6OLe/svGxP749fP+6uTg/t/Y1f7l3dr+49vW/tvRzf7Zzsn+2MvG/vDi + 3P6xwa/+MKEw/jWfNf7CwsP+mpqbP6CgoT/BwcL/NaM1/jemNv/Ky8j/6t/a/ujc1v/n2NL/5dXO/srA + u//49fP/8uvn/+3m4v7w6eb/29XS/vLq5f/x5+L/2tDL/vHm4f+xwrD/MKUw/jWjNv/ExMX/nZ2eP6Ki + oz/Dw8T/NqY2/jepNv/LzMn/6uLe/tHKxv/Px8P/zcO//r63tP/49fP/5t/c/9XOzP7f2db/3NbT/vfv + 6//27ur/3dXR/vPr5v+yw7D/MKkw/jamNv/Gxsf/n5+hP6Ojoz/ExMX/Nqo2/jetNv/LzMn/7Obi/uXe + 2v/k3Nj/49nV/snCwP/49fP/8erm/+rk4P7v6OT/29XS/vHq5v/x6ub/29XR/vXu6/+yxLD/MK0w/jaq + Nv/Hx8j/oaGiP6OjpD/ExMX+O687/jyzPP7Mzcr+6uTg/s3Hxf7KxcL+29XR/r65t/749fP+7OXi/uLb + 2P7o4d7+5+Dd/uDa1/7f2dX+3tjV/vXv7P6zxbL+ObM5/jywPP7Hx8j+oaGiP6Kioz/Dw8T/SLhI/lbA + Vv/U1NL/7+nm/uPd2v/i3Nn/4dvY/svGxf/59vT/9/Hu//fx7v748e7/9/Hu/vfx7v/17+z/2tXT/tbS + 0P+ru6n/UMBQ/km4Sf/Gxsf/oKChP6CgoT/BwcL+TbxN/l7GXv7W19X+7+rm/uHc2v7g29j+497b/s/M + yv769/X++PLv/vjy7/748+/++PLv/vjy7/7y7On+yMbH/snHx/6CtID+WcZZ/k29Tv7ExMX+nZ2fP56e + nz+/v8D/UcFR/mbMZv/Z2df/7+rn/trW1P/Z1dL/5N/d/s7Lyv/6+Pb/+fXy//n18v759fL/+fXy/vn1 + 8v/08O3/yMfG/pG9j/9izGL/Ysxi/lLBUv/CwsP/mpqcP5ycnT+8vL3/VsVW/nDRb//b3Nr/8u3q/u/r + 6P/v6uj/8ezp/t7a2P/f3t3/3tzb/9za2v7c2tr/zdbL/svayv/J18f/l8GV/mzRbP9r0Wv/a9Fr/ljG + WP+/v8D/l5eYP5mZmj+5ubr+XMlc/nnWef7e393+8+7r/vPu6/7z7uv+8+7r/vPu6/7z7uv+2tbU/srH + x/7HxcT+g8mC/nXWdf511nX+ddZ1/nXWdf511nX+ddZ1/l7JXv68vL3+kpKTP5aWlj+1tbb/Yc1h/oLb + gv/g4d//8+/s/vPv7P/z7+z/8+/s/vPv7P/z7+z/19TT/97d3f6jyaL/f9t//n7cfv9+3H7/ftx+/n7c + fv9+3H7/ftx+/mPOY/+5ubr/jo6PP4uLizm3t7j/Zc1l/ovfi//i4uH/9PLx/vTy8f/08vH/9PLx/vTy + 8f/08vH/19bV/6zOq/6I34j/h+CH/ofgh/+H4If/h+CH/ofgh/+H4If/h+CH/mbNZv+3t7j/hYWGOXx8 + fBC4uLj4ZrZn/o/jj/6p2qj+qtqp/qraqf6q2an+qtmp/qrZqf6p2Kj+pdik/pDjkP6Q45D+kOOQ/pDj + kP6Q45D+kOOQ/pDjkP6Q45D+jOOM/m2/bf6mpqf4e3t8EAAAAACrq6yQm6Oc/me2Z/9s0Wz/bdVt/m3V + bf9t1W3/bdVt/m3Vbf9t1W3/bdVt/23Vbf5t1W3/bdVt/m3Vbf9t1W3/bdVt/m3Vbf9r0Wv/abpp/pyk + nf+QkJGQAAAAAAAAAACAgIAFqqqqj7OztPiwsLH/qqqr/qqqq/+qqqv/qqqr/qqqq/+qqqv/qqqr/6qq + q/6qqqv/qqqr/qqqq/+qqqv/qqqr/qqqq/+vr6//rq6u+J2dnY99fX4FAAAAAAAAAAAAAAAAAAAAAIKC + gxCRkZI5m5ucP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ub + nD+SkpI5hISEEAAAAAAAAAAAAAAAAOAABwCAAAEAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEA4AAHACgA + AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tMDXR0dGR5eXp/eXl6f3l5 + en95eXp/eXl6f3l5en95eXp/eXl6f3l5en95eXl/cXFyZExMTA0AAAAAU1NUDZyendhynnL/Z6Nn/2ej + Z/9no2f/Z6Nn/2ejZ/9no2f/Z6Nn/2ejZ/9no2f/Z6Nn/3mmev+YmpnYU1NTDZWVlWVolmn/MJIw/zCS + MP8wkjD/MJIw/0mVSP9Xl1b/V5dW/1aWVf9WlVT/VZVU/1WUU/83kjb/e6l7/4KCg2Wmpqd/VpZW/zCW + MP8wljD/MJYw/zCWMP+cvpv/9e7q//Tq5f/y5+L/8eTf//Hj3f/v6OT/R5VG/2mqav+QkJF/rKysf1ib + Wf8wmzD/MJsw/zCbMP8wmzD/ncGc/+/m4v/g1tH/3dDL/9vMxv/ZycP/7eHc/0eZRv9qrmv/l5eZf6+v + sH9boVz/VqBV/8rMxf/IycL/x8e//8/Oy//x6ub/49zY/+jf2//f1M//3dDK/+7k4P9InUf/bLJs/56e + n3+zs7N/XaZd/1ynW//s5eL/5dnU/+PVzv/Z09D/8erm/+Pd2f/j3dn/8+vn/+PZ1f/v6OX/SKJH/222 + bf+jo6R/tLS1f16rX/9cq1v/7Ojl/9nSz//Wzsr/1dHP//Hq5v/j3dn/493Z//Ps6P/k3dn/8e3q/0mn + SP9tum7/pqanf7W1tX9ksWX/Z7Rm/+3p5v/Y0s//2tTR/9TRz//y7Oj/6OLe/+7o5P/o4d7/493a/+3q + 5/9Ur1P/dMF1/6amqH+zs7R/bLZs/3vBev/w7Or/3tjW/+Db2P/d29r/+PPw//jy7//48u//+PLv/9bS + 0P+9wLv/YL9g/3zGfP+jo6V/sLCxf2+5b/+GyYX/8e7r/+Hc2v/l4N7/393b//f08v/29PH/9vTx//bz + 8f/Nz8r/ecZ5/2TNZP+ByoH/np6gf6ysrX9yu3P/kdCR//Pw7v/y7ev/8u3r/+vm5P/a1tX/ycbG/6HD + n/+F0IT/ftF9/3LVcv9y1XL/hc6G/5iYmX+oqKh/db11/5zXnP/08vD/9PDt//Tw7f/08O3/4d7c/8TT + w/+F2YT/gN2A/4DdgP+A3YD/gN2A/4rQiv+RkZJ/mZmZZXq1e/+b3pv/w+LC/8Piwv/C4sL/wuLB/7na + uf+S35L/juOO/47jjv+O447/juOO/4zijP+GwYf/h4eIZVtbXA2rrqvYerN6/3i9eP94vXj/eL14/3i9 + eP94vXj/eL14/3i9eP94vXj/eL14/3i9eP95tHr/naGe2FxcXA0AAAAAXl5eDZycnWSpqap/qqqqf6qq + qn+qqqp/qqqqf6qqqn+qqqp/qqqqf6qqqn+pqal/m5ubZGBgYA0AAAAAgAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA== + + + \ No newline at end of file diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/app.config b/Duplicati/GUI/Duplicati.GUI.TrayIcon/app.config new file mode 100644 index 000000000..02451de7f --- /dev/null +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/app.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Duplicati/GUI/app.config b/Duplicati/GUI/app.config index a7d04fa82..34c68c314 100644 --- a/Duplicati/GUI/app.config +++ b/Duplicati/GUI/app.config @@ -1,3 +1,7 @@ - + + + + + diff --git a/Duplicati/License/Duplicati.License.csproj b/Duplicati/License/Duplicati.License.csproj index 715cfa78a..154b6f289 100644 --- a/Duplicati/License/Duplicati.License.csproj +++ b/Duplicati/License/Duplicati.License.csproj @@ -137,8 +137,22 @@ PreserveNewest - - + + PreserveNewest + licenses\SSH.NET\Homepage.txt + + + PreserveNewest + licenses\SSH.NET\License.txt + + + PreserveNewest + licenses\Json.NET\Homepage.txt + + + PreserveNewest + licenses\Json.NET\License.txt + diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Duplicati.Server.Serialization.csproj b/Duplicati/Server/Duplicati.Server.Serialization/Duplicati.Server.Serialization.csproj index 9077652ca..8bc81c354 100644 --- a/Duplicati/Server/Duplicati.Server.Serialization/Duplicati.Server.Serialization.csproj +++ b/Duplicati/Server/Duplicati.Server.Serialization/Duplicati.Server.Serialization.csproj @@ -1,4 +1,4 @@ - + Debug @@ -61,6 +61,12 @@ 4 + + ..\..\..\thirdparty\LightDataModel\LightDatamodel.dll + + + ..\..\..\thirdparty\Json.NET\Newtonsoft.Json.dll + @@ -70,14 +76,15 @@ - - - - - + + + + + + - + diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Enums.cs b/Duplicati/Server/Duplicati.Server.Serialization/Enums.cs index 4eef8b80c..7ce12deba 100755 --- a/Duplicati/Server/Duplicati.Server.Serialization/Enums.cs +++ b/Duplicati/Server/Duplicati.Server.Serialization/Enums.cs @@ -5,11 +5,72 @@ using System.Text; namespace Duplicati.Server.Serialization { - public enum ServiceState + public enum RunnerState { + Started, + Suspended, Running, - Paused, - Suspended + Stopped, } + public enum RunnerResult + { + OK, + Partial, + Warning, + Error + } + + public enum CloseReason + { + None, + ApplicationExitCall, + TaskManagerClosing, + WindowsShutDown, + UserClosing + } + + public enum LiveControlState + { + Running, + Paused + } + + + public enum DuplicatiOperation + { + Backup, + Restore, + List, + Remove + } + + public enum DuplicatiOperationMode + { + Backup, + BackupFull, + BackupIncremental, + Restore, + RestoreControlfiles, + List, + GetBackupSets, + ListCurrentFiles, + ListSourceFolders, + ListActualSignatureFiles, + DeleteAllButNFull, + DeleteAllButN, + DeleteOlderThan, + CleanUp, + CreateFolder, + FindLastFileVersion, + Verify + } + + public static class EnumConverter + { + public static T Convert(Enum o) + { + return (T)Enum.Parse(typeof(T), o.ToString(), false); + } + } } diff --git a/Duplicati/Server/Duplicati.Server.Serialization/IProgressEventData.cs b/Duplicati/Server/Duplicati.Server.Serialization/IProgressEventData.cs new file mode 100644 index 000000000..721b490b5 --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/IProgressEventData.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Duplicati.Server.Serialization +{ + public interface IProgressEventData + { + DuplicatiOperation Operation { get; } + DuplicatiOperationMode Mode { get; } + string Message { get; } + string SubMessage { get; } + int Progress { get; } + int SubProgress { get; } + } +} diff --git a/Duplicati/Server/Duplicati.Server.Serialization/ISerializableStatus.cs b/Duplicati/Server/Duplicati.Server.Serialization/ISerializableStatus.cs new file mode 100644 index 000000000..9d1fb72aa --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/ISerializableStatus.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; + +namespace Duplicati.Server.Serialization +{ + public interface ISerializableStatus + { + RunnerState ActiveBackupState { get; } + long ActiveScheduleId { get; } + LiveControlState ProgramState { get; } + IProgressEventData RunningBackupStatus { get; } + System.Collections.Generic.IList SchedulerQueueIds { get; } + } +} diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Implementations/ProgressEventData.cs b/Duplicati/Server/Duplicati.Server.Serialization/Implementations/ProgressEventData.cs new file mode 100644 index 000000000..4a68de8a7 --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/Implementations/ProgressEventData.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Duplicati.Server.Serialization.Implementations +{ + internal class ProgressEventData : IProgressEventData + { + public DuplicatiOperation Operation { get; set; } + + public DuplicatiOperationMode Mode { get; set; } + + public string Message { get; set; } + + public string SubMessage { get; set; } + + public int Progress { get; set; } + + public int SubProgress { get; set; } + } +} diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Implementations/SerializableStatus.cs b/Duplicati/Server/Duplicati.Server.Serialization/Implementations/SerializableStatus.cs new file mode 100644 index 000000000..3f3b5451b --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/Implementations/SerializableStatus.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Duplicati.Server.Serialization.Implementations +{ + internal class SerializableStatus : ISerializableStatus + { + public RunnerState ActiveBackupState { get; set; } + public long ActiveScheduleId { get; set; } + public LiveControlState ProgramState { get; set; } + public IProgressEventData RunningBackupStatus { get; set; } + public IList SchedulerQueueIds { get; set; } + } +} diff --git a/Duplicati/Server/Duplicati.Server.Serialization/InterfaceResolver.cs b/Duplicati/Server/Duplicati.Server.Serialization/InterfaceResolver.cs new file mode 100644 index 000000000..9f27847e6 --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/InterfaceResolver.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json.Converters; + +namespace Duplicati.Server.Serialization +{ + public class SerializableStatusCreator : CustomCreationConverter + { + public override ISerializableStatus Create(Type objectType) + { + return new Implementations.SerializableStatus(); + } + } + + public class ProgressEventDataCreator : CustomCreationConverter + { + public override IProgressEventData Create(Type objectType) + { + return new Implementations.ProgressEventData(); + } + } +} diff --git a/Duplicati/Server/Duplicati.Server.Serialization/JsonSerializer.cs b/Duplicati/Server/Duplicati.Server.Serialization/JsonSerializer.cs new file mode 100644 index 000000000..46dbf4c86 --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/JsonSerializer.cs @@ -0,0 +1,180 @@ +// Copyright (C) 2011, Kenneth Skovhede +// http://www.hexad.dk, opensource@hexad.dk +// +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +using System; +using System.Linq; +using Newtonsoft.Json.Serialization; +using System.Reflection; +using Newtonsoft.Json; +using System.Globalization; +using System.Collections.Generic; + +namespace Duplicati.Server.Serialization +{ + internal class JsonSerializer : DefaultContractResolver + { + private Dictionary m_ignoreList = GetIgnoreList(); + + private static Dictionary GetIgnoreList() + { + Dictionary lst = new Dictionary(); + lst.Add("Datamodel.ApplicationSettings!RawOptions", null); + + return lst; + } + + private static string MemberInfoAsKey(MemberInfo mi) { return mi.DeclaringType.FullName + "!" + mi.Name; } + + protected override List GetSerializableMembers(Type objectType) + { + return base.GetSerializableMembers(objectType).Where(x => !m_ignoreList.ContainsKey(MemberInfoAsKey(x))).ToList(); + } + + protected override JsonObjectContract CreateObjectContract (Type objectType) + { + if (typeof(System.Data.LightDatamodel.IDataFetcher).IsAssignableFrom(objectType)) + { + //If this type was ever serialized, it would expose the entire internal object cache, and we do NOT want that :) + throw new Exception("Internal error, a non-serializable type was hit"); + } + else if (typeof(System.Data.LightDatamodel.IDataClass).IsAssignableFrom(objectType)) + { + JsonObjectContract joc = new JsonObjectContract(objectType); + + foreach(var pi in objectType.GetProperties( BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance )) + { + var customs = pi.GetCustomAttributes(false); + bool isRef = customs.Select(x => x.GetType()).Contains(typeof(System.Data.LightDatamodel.DataClassAttributes.Affects)); + bool isParent = typeof(System.Data.LightDatamodel.IDataFetcher).IsAssignableFrom(pi.PropertyType); + isRef |= typeof(System.Data.LightDatamodel.IDataClass).IsAssignableFrom(pi.PropertyType); + + joc.Properties.Add(new JsonProperty() { + PropertyName = pi.Name, + PropertyType = pi.PropertyType, + Ignored = isRef || isParent || m_ignoreList.ContainsKey(MemberInfoAsKey(pi)), + UnderlyingName = pi.Name, + Readable = pi.CanRead, + Writable = pi.CanWrite, + ValueProvider = CreateMemberValueProvider(pi) + }); + } + + return joc; + } + else + return base.CreateObjectContract (objectType); + } + + protected override IValueProvider CreateMemberValueProvider(MemberInfo member) + { + if (member.MemberType == System.Reflection.MemberTypes.Property && ((PropertyInfo)member).PropertyType.IsEnum) + return new EnumValueProvider(member); + else if (member.MemberType == System.Reflection.MemberTypes.Field && ((FieldInfo)member).FieldType.IsEnum) + return new EnumValueProvider(member); + else + return base.CreateMemberValueProvider(member); + } + + /// + /// Get and set values for a Enum using reflection. + /// + private class EnumValueProvider : IValueProvider + { + private Type m_enumType; + + private MemberInfo m_member; + + /// + /// Initializes a new instance of the class. + /// + /// The property info. + public EnumValueProvider(MemberInfo mi) + { + if (mi == null) + throw new ArgumentNullException("mi"); + if (mi.MemberType == MemberTypes.Property) + m_enumType = ((PropertyInfo)mi).PropertyType; + else if (mi.MemberType == MemberTypes.Field) + m_enumType = ((FieldInfo)mi).FieldType; + else + throw new ArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo", CultureInfo.InvariantCulture, m_member.Name, "member")); + + m_member = mi; + } + + /// + /// Sets the value. + /// + /// The target to set the value on. + /// The value to set on the target. + public void SetValue(object target, object value) + { + try + { + if (target == null) + throw new ArgumentNullException("target"); + + object parsedValue = value is string ? Enum.Parse(m_enumType, value as String, true) : value; + + switch (m_member.MemberType) + { + case MemberTypes.Field: + ((FieldInfo)m_member).SetValue(target, parsedValue); + break; + case MemberTypes.Property: + ((PropertyInfo)m_member).SetValue(target, parsedValue, null); + break; + default: + throw new ArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo", CultureInfo.InvariantCulture, m_member.Name, "member")); + } + } + catch (Exception ex) + { + throw new JsonSerializationException(string.Format("Error setting value to '{0}' on '{1}'.", CultureInfo.InvariantCulture, m_member.Name, (target == null ? "null" : target.GetType().FullName)), ex); + } + } + + /// + /// Gets the value. + /// + /// The target to get the value from. + /// The value. + public object GetValue(object target) + { + try + { + if (target == null) + throw new ArgumentNullException("target"); + + switch (m_member.MemberType) + { + case MemberTypes.Field: + return ((FieldInfo)m_member).GetValue(target).ToString(); + case MemberTypes.Property: + return ((PropertyInfo)m_member).GetValue(target, null).ToString(); + default: + throw new ArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo", CultureInfo.InvariantCulture, m_member.Name, "member")); + } + } + catch (Exception ex) + { + throw new JsonSerializationException(string.Format("Error getting value to '{0}' on '{1}'.", CultureInfo.InvariantCulture, m_member.Name, (target == null ? "null" : target.GetType().FullName)), ex); + } + } + } + } +} + diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Serializer.cs b/Duplicati/Server/Duplicati.Server.Serialization/Serializer.cs new file mode 100644 index 000000000..9bdbfaa06 --- /dev/null +++ b/Duplicati/Server/Duplicati.Server.Serialization/Serializer.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; + +namespace Duplicati.Server.Serialization +{ + public class Serializer + { + private JsonSerializerSettings m_jsonSettings; + private Formatting m_jsonFormatting = Formatting.Indented; + + public Serializer() + { + m_jsonSettings = new JsonSerializerSettings(); + m_jsonSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + m_jsonSettings.ContractResolver = new JsonSerializer(); + m_jsonSettings.Converters = new JsonConverter[]{ + new SerializableStatusCreator(), + new ProgressEventDataCreator() + }.ToList(); + } + + public void SerializeJson(System.IO.StreamWriter sw, object o) + { + Newtonsoft.Json.JsonSerializer jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(m_jsonSettings); + using (var jsonWriter = new JsonTextWriter(sw)) + { + jsonWriter.Formatting = m_jsonFormatting; + jsonSerializer.Serialize(jsonWriter, o); + jsonWriter.Flush(); + } + } + + public T Deserialize(System.IO.StreamReader sr) + { + Newtonsoft.Json.JsonSerializer jsonSerializer = Newtonsoft.Json.JsonSerializer.Create(m_jsonSettings); + using (var jsonReader = new JsonTextReader(sr)) + { + jsonReader.Culture = System.Globalization.CultureInfo.InvariantCulture; + return jsonSerializer.Deserialize(jsonReader); + } + } + } +} diff --git a/Duplicati/Server/Duplicati.Server.csproj b/Duplicati/Server/Duplicati.Server.csproj index 510ed3d99..4a3c23c44 100644 --- a/Duplicati/Server/Duplicati.Server.csproj +++ b/Duplicati/Server/Duplicati.Server.csproj @@ -1,4 +1,4 @@ - + Debug @@ -54,6 +54,12 @@ true 4 + + true + + + Duplicati.snk + ..\..\thirdparty\HttpServer\HttpServer.dll @@ -64,9 +70,6 @@ ..\..\thirdparty\LightDataModel\LightDatamodel.dll - - ..\..\thirdparty\LitJSON\LitJson.dll - @@ -83,7 +86,6 @@ - @@ -122,9 +124,11 @@ + + @@ -174,10 +178,6 @@ {CCD76347-7DC7-4B42-B7E1-E500E624CAC3} Duplicati.Library.Backend.SkyDrive - - {33FD1D24-C28F-4C71-933F-98F1586EA76C} - Duplicati.Server.Serialization - {1BFAE226-8364-4086-825C-BB83F6F3EE4C} Duplicati.Library.Backend.CloudFiles @@ -242,6 +242,10 @@ {4D012CB1-4B92-47F4-89B7-BF80A73A2E99} Duplicati.License + + {33FD1D24-C28F-4C71-933F-98F1586EA76C} + Duplicati.Server.Serialization + diff --git a/Duplicati/Server/Duplicati.snk b/Duplicati/Server/Duplicati.snk new file mode 100644 index 0000000000000000000000000000000000000000..e0c1e2dd86119728adaeefc5f14f2e597dabceeb GIT binary patch literal 596 zcmZQ)VqjoUVPFUfb~IvOVPIfnU}U&>ZqBFG;TL!xbC@f=sW??FHp%RuD04u?d|@dM zp47GKm!Hl%dFaei`<5*qzAgXqbzUyVi_n}?OMO*3eH|OE?krr| zFEl@9)L*-L?Q8KJPtTajTTV9l{O!|eX~_>-AD#yZ=6m07=(;Lz?67b_fmBH7>6XPy zU(fsaYt6=H^BbXYGcsePe{{ZI&XLwz9=grGu+&OTZN+`>n#aL@H_qHKNL{x|{OX?< z|2?cWgj<|a*&Wn5qtR68+v$gad`lNSIGSM4$`K*nE_8`M(8%hLo?+%X^GU{qHtmys zKah1))%qg*H$8)~{Blp<;-4#gv3~y3w(VO5op^Nq_Qo%mz;QX`zXzj&$<=3DJ8QK~doHe9_tNXtnN&4~oeV$j z^o2{LFP>08&A&p7*^IG!Mnm`8x8Lq$er`8lWi+;b>yXC%XWDAv$p-_y)7-T(lU$#a z#IstS7OnePcICwJ+w3(l+=qQ0gsr@P>rWc{j)4B;9b4MXBe*rpp6LBh{}W&Ed`G$N IQKi@%02MtM!T public class DuplicatiRunner : Duplicati.Library.Main.LiveControl.ILiveControl { - public enum RunnerState + public class ProgressEventData : IProgressEventData { - Started, - Suspended, - Running, - Stopped, + public DuplicatiOperation Operation { get; set; } + public DuplicatiOperationMode Mode { get; set; } + public string Message { get; set; } + public string SubMessage { get; set; } + public int Progress { get; set; } + public int SubProgress { get; set; } } - public enum RunnerResult - { - OK, - Partial, - Warning, - Error - } - - public enum CloseReason - { - None, - ApplicationExitCall, - TaskManagerClosing, - WindowsShutDown, - UserClosing - } - public delegate void ResultEventDelegate(RunnerResult result, string parsedMessage, string message); public event ResultEventDelegate ResultEvent; @@ -64,18 +50,25 @@ namespace Duplicati.Server private const int PERCENT_PR_EXTRA_OPERATION = 2; private int m_extraOperations = 0; - private DuplicatiOperation m_lastPGOperation; - private DuplicatiOperationMode m_lastPGMode; - private int m_lastPGProgress; - private int m_lastPGSubprogress; - private string m_lastPGmessage; - private string m_lastPGSubmessage; + private ProgressEventData m_lastEvent = new ProgressEventData(); private object m_lock = new object(); private CloseReason m_stopReason = CloseReason.None; private Library.Main.LiveControl.ILiveControl m_currentBackupControlInterface; private bool m_isAborted = false; + private RunnerState m_currentRunnerState = RunnerState.Suspended; + + public DuplicatiRunner() + { + ProgressEvent += new ProgressEventDelegate(DuplicatiRunner_ProgressEvent); + } + + void DuplicatiRunner_ProgressEvent(DuplicatiOperation operation, RunnerState state, string message, string submessage, int progress, int subprogress) + { + m_currentRunnerState = state; + } + public void ExecuteTask(IDuplicityTask task) { Dictionary options = new Dictionary(); @@ -92,7 +85,7 @@ namespace Duplicati.Server try { //TODO: Its a bit dirty to set the options after creating the instance - using (Interface i = new Interface(destination, options)) + using (Duplicati.Library.Main.Interface i = new Duplicati.Library.Main.Interface(destination, options)) { lock (m_lock) { @@ -101,8 +94,8 @@ namespace Duplicati.Server } SetupControlInterface(); - - i.OperationProgress += new OperationProgressEvent(Duplicati_OperationProgress); + + i.OperationProgress += new Duplicati.Library.Main.OperationProgressEvent(Duplicati_OperationProgress); switch (task.TaskType) { @@ -184,10 +177,10 @@ namespace Duplicati.Server case DuplicityTaskType.ListBackups: List res = new List(); - foreach (ManifestEntry be in i.GetBackupSets()) + foreach (Duplicati.Library.Main.ManifestEntry be in i.GetBackupSets()) { res.Add(be.Time.ToString()); - foreach (ManifestEntry bei in be.Incrementals) + foreach (Duplicati.Library.Main.ManifestEntry bei in be.Incrementals) res.Add(bei.Time.ToString()); } @@ -309,10 +302,10 @@ namespace Duplicati.Server { if (task.Schedule.Task.KeepFull > 0) { - m_lastPGProgress = 100; - m_lastPGmessage = Strings.DuplicatiRunner.CleaningUpMessage; - m_lastPGSubmessage = ""; - m_lastPGSubprogress = -1; + m_lastEvent.Progress = 100; + m_lastEvent.Message = Strings.DuplicatiRunner.CleaningUpMessage; + m_lastEvent.SubMessage = ""; + m_lastEvent.SubProgress = -1; ReinvokeLastProgressEvent(); m_extraOperations--; @@ -324,10 +317,10 @@ namespace Duplicati.Server if (!string.IsNullOrEmpty(task.Schedule.Task.KeepTime)) { - m_lastPGProgress = 100; - m_lastPGmessage = Strings.DuplicatiRunner.CleaningUpMessage; - m_lastPGSubmessage = ""; - m_lastPGSubprogress = -1; + m_lastEvent.Progress = 100; + m_lastEvent.Message = Strings.DuplicatiRunner.CleaningUpMessage; + m_lastEvent.SubMessage = ""; + m_lastEvent.SubProgress = -1; ReinvokeLastProgressEvent(); m_extraOperations--; @@ -377,18 +370,23 @@ namespace Duplicati.Server task.Schedule.ScheduledRunCompleted(); //Register as completed if not aborted } - void Duplicati_OperationProgress(Interface caller, DuplicatiOperation operation, DuplicatiOperationMode specificmode, int progress, int subprogress, string message, string submessage) + void Duplicati_OperationProgress(Duplicati.Library.Main.Interface caller, Duplicati.Library.Main.DuplicatiOperation operation, Duplicati.Library.Main.DuplicatiOperationMode specificmode, int progress, int subprogress, string message, string submessage) { - m_lastPGOperation = operation; - m_lastPGMode = specificmode; - m_lastPGProgress = progress; - m_lastPGSubprogress = subprogress; - m_lastPGmessage = message; - m_lastPGSubmessage = submessage; + Duplicati_OperationProgress(caller, EnumConverter.Convert(operation), EnumConverter.Convert(specificmode), progress, subprogress, message, submessage); + } + + void Duplicati_OperationProgress(Duplicati.Library.Main.Interface caller, DuplicatiOperation operation, DuplicatiOperationMode specificmode, int progress, int subprogress, string message, string submessage) + { + m_lastEvent.Operation = operation; + m_lastEvent.Mode = specificmode; + m_lastEvent.Progress = progress; + m_lastEvent.SubProgress = subprogress; + m_lastEvent.Message = message; + m_lastEvent.SubMessage = submessage; //If there are extra operations, reserve some space for it by reducing the displayed progress if (m_extraOperations > 0 && progress > 0) - progress = (int)((m_lastPGProgress / 100.0) * (100 - (m_extraOperations * PERCENT_PR_EXTRA_OPERATION))); + progress = (int)((m_lastEvent.Progress / 100.0) * (100 - (m_extraOperations * PERCENT_PR_EXTRA_OPERATION))); if (ProgressEvent != null) try { ProgressEvent(operation, RunnerState.Running, message, submessage, progress, subprogress); } @@ -397,10 +395,9 @@ namespace Duplicati.Server public void ReinvokeLastProgressEvent() { - Duplicati_OperationProgress(null, m_lastPGOperation, m_lastPGMode, m_lastPGProgress, m_lastPGSubprogress, m_lastPGmessage, m_lastPGSubmessage ); + Duplicati_OperationProgress(null, m_lastEvent.Operation, m_lastEvent.Mode, m_lastEvent.Progress, m_lastEvent.SubProgress, m_lastEvent.Message, m_lastEvent.SubMessage ); } - private void PerformBackup(Schedule schedule, bool forceFull, string fullAfter) { if (forceFull) @@ -425,7 +422,7 @@ namespace Duplicati.Server return task.Backups; } - public List ListBackupEntries(Schedule schedule) + public List ListBackupEntries(Schedule schedule) { ListBackupEntriesTask task = new ListBackupEntriesTask(schedule); ExecuteTask(task); @@ -527,6 +524,9 @@ namespace Duplicati.Server m_currentBackupControlInterface.Resume(); } + public RunnerState CurrentState { get { return m_currentRunnerState; } } + public ProgressEventData LastEvent { get { return m_lastEvent; } } + public void Stop() { Stop(CloseReason.None); diff --git a/Duplicati/Server/LiveControls.cs b/Duplicati/Server/LiveControls.cs index d43ad2f5a..62636ca59 100644 --- a/Duplicati/Server/LiveControls.cs +++ b/Duplicati/Server/LiveControls.cs @@ -240,5 +240,21 @@ namespace Duplicati.Server } } } + + /// + /// Suspends the backups for a given period + /// + /// The duration to wait + public void Pause(TimeSpan timeout) + { + lock (m_lock) + { + if (m_state == LiveControlState.Running) + { + Pause(); + m_waitTimer.Change((long)timeout.TotalMilliseconds, System.Threading.Timeout.Infinite); + } + } + } } } diff --git a/Duplicati/Server/Program.cs b/Duplicati/Server/Program.cs index 59d29a83f..4689b49d8 100644 --- a/Duplicati/Server/Program.cs +++ b/Duplicati/Server/Program.cs @@ -83,17 +83,12 @@ namespace Duplicati.Server /// public static WebServer WebServer; - /// - /// The queue for handling events - /// - public static EventQueue Events; - /// /// The main entry point for the application. /// Commandline arguments /// [STAThread] - static void Main(string[] args) + public static void Main(string[] args) { //If we are on Windows, append the bundled "win-tools" programs to the search path //We add it last, to allow the user to override with other versions @@ -262,28 +257,25 @@ namespace Duplicati.Server ApplicationExitEvent = new System.Threading.ManualResetEvent(false); - Events = new EventQueue(); - LiveControl = new LiveControls(new Duplicati.Datamodel.ApplicationSettings(DataConnection)); LiveControl.StateChanged += new EventHandler(LiveControl_StateChanged); LiveControl.ThreadPriorityChanged += new EventHandler(LiveControl_ThreadPriorityChanged); LiveControl.ThrottleSpeedChanged += new EventHandler(LiveControl_ThrottleSpeedChanged); - Runner = new DuplicatiRunner(); WorkThread = new Duplicati.Library.Utility.WorkerThread(new Duplicati.Library.Utility.WorkerThread.ProcessItemDelegate(Runner.ExecuteTask), LiveControl.State == LiveControls.LiveControlState.Paused); Scheduler = new Scheduler(DataConnection, WorkThread, MainLock); - WorkThread.StartingWork += new EventHandler(Events.WorkThread_StartingWork); + /*WorkThread.StartingWork += new EventHandler(Events.WorkThread_StartingWork); WorkThread.CompletedWork += new EventHandler(Events.WorkThread_CompletedWork); WorkThread.WorkQueueChanged += new EventHandler(Events.WorkThread_WorkQueueChanged); Scheduler.NewSchedule += new EventHandler(Events.Scheduler_NewSchedule); Runner.ProgressEvent += new DuplicatiRunner.ProgressEventDelegate(Events.Runner_DuplicatiProgress); DataConnection.AfterDataConnection += new System.Data.LightDatamodel.DataConnectionEventHandler(Events.DataConnection_AfterDataConnection); - + LiveControl.StateChanged += new EventHandler(Events.LiveControl_StateChanged); LiveControl.ThreadPriorityChanged += new EventHandler(Events.LiveControl_ThreadPriorityChanged); - LiveControl.ThrottleSpeedChanged += new EventHandler(Events.LiveControl_ThrottleSpeedChanged); + LiveControl.ThrottleSpeedChanged += new EventHandler(Events.LiveControl_ThrottleSpeedChanged);*/ Program.WebServer = new Server.WebServer(8080); diff --git a/Duplicati/Server/SerializableStatus.cs b/Duplicati/Server/SerializableStatus.cs new file mode 100644 index 000000000..020a6011f --- /dev/null +++ b/Duplicati/Server/SerializableStatus.cs @@ -0,0 +1,66 @@ +#region "Disclaimer / License" +// Copyright (C) 2011, Kenneth Skovhede + +// http://www.hexad.dk, opensource@hexad.dk +// +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#endregion +using System; +using System.Linq; +using System.Collections.Generic; +using Duplicati.Server.Serialization; + +namespace Duplicati.Server +{ + /// + /// This class collects all reportable status properties into a single class that can be exported as JSON + /// + public class SerializableStatus : ISerializableStatus + { + public LiveControlState ProgramState + { + get { return EnumConverter.Convert(Program.LiveControl.State); } + } + + public RunnerState ActiveBackupState + { + get { return Program.Runner.CurrentState; } + } + + public long ActiveScheduleId + { + get + { + IDuplicityTask t = Program.WorkThread.CurrentTask; + if (t == null || t.Schedule == null) + return -1; + else + return t.Schedule.ID; + + } + } + + public IList SchedulerQueueIds + { + get { return Program.Scheduler.Schedule.Select(x => x.ID).ToList(); } + } + + public IProgressEventData RunningBackupStatus + { + get { return Program.Runner.LastEvent; } + } + } +} + diff --git a/Duplicati/Server/WebServer.cs b/Duplicati/Server/WebServer.cs index 825242fa8..bdc1ffa6e 100644 --- a/Duplicati/Server/WebServer.cs +++ b/Duplicati/Server/WebServer.cs @@ -4,13 +4,18 @@ using System.Linq; using System.Text; using HttpServer.MVC; using HttpServer.HttpModules; +using System.IO; +using Duplicati.Server.Serialization; namespace Duplicati.Server { public class WebServer { + /// + /// The single webserver instance + /// private HttpServer.HttpServer m_server; - + public WebServer(int port) { m_server = new HttpServer.HttpServer(); @@ -27,115 +32,258 @@ namespace Duplicati.Server private class BodyWriter : System.IO.StreamWriter, IDisposable { private HttpServer.IHttpResponse m_resp; + + // We override the format provider so all JSON output uses US format + public override IFormatProvider FormatProvider + { + get { return System.Globalization.CultureInfo.InvariantCulture; } + } + public BodyWriter(HttpServer.IHttpResponse resp) - : base(resp.Body, resp.Encoding) + : base(resp.Body, resp.Encoding) { m_resp = resp; } - protected override void Dispose(bool disposing) + protected override void Dispose (bool disposing) { - base.Flush(); - m_resp.ContentLength = base.BaseStream.Length; - m_resp.Send(); - + if (!m_resp.HeadersSent) + { + base.Flush(); + m_resp.ContentLength = base.BaseStream.Length; + m_resp.Send(); + } base.Dispose(disposing); } } private class DynamicHandler : HttpModule { - private delegate void ProcessSub(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session); - + private delegate void ProcessSub(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter writer); + private Server.Serialization.Serializer m_serializer; private readonly Dictionary SUPPORTED_METHODS; public DynamicHandler() { + m_serializer = new Serializer(); SUPPORTED_METHODS = new Dictionary(System.StringComparer.InvariantCultureIgnoreCase); - + + //Make a list of all supported actions + SUPPORTED_METHODS.Add("supported-actions", ListSupportedActions); SUPPORTED_METHODS.Add("list-schedules", ListSchedules); SUPPORTED_METHODS.Add("get-current-state", GetCurrentState); + SUPPORTED_METHODS.Add("list-application-settings", ListApplicationSettings); + SUPPORTED_METHODS.Add("list-installed-backends", GetInstalledBackends); + SUPPORTED_METHODS.Add("list-installed-encryption-modules", ListInstalledEncryptionModules); + SUPPORTED_METHODS.Add("list-installed-compression-modules", ListInstalledCompressionModules); + SUPPORTED_METHODS.Add("list-installed-generic-modules", ListInstalledGenericModules); + SUPPORTED_METHODS.Add("list-options", ListCoreOptions); + SUPPORTED_METHODS.Add("list-recent-completed", ListRecentCompleted); + SUPPORTED_METHODS.Add("get-recent-log-details", GetLogBlob); + SUPPORTED_METHODS.Add("send-command", SendCommand); } - - public override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) + public override bool Process (HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) { + //We use the fake entry point /control.cgi to listen for requests + //This ensures that the rest of the webserver can just serve plain files if (!request.Uri.AbsolutePath.Equals("/control.cgi", StringComparison.InvariantCultureIgnoreCase)) return false; HttpServer.HttpInput input = request.Method.ToUpper() == "POST" ? request.Form : request.QueryString; string action = input["action"].Value ?? ""; - + + //Lookup the actual handler method ProcessSub method; SUPPORTED_METHODS.TryGetValue(action, out method); - if (method == null) - { + if (method == null) { response.Status = System.Net.HttpStatusCode.NotImplemented; response.Reason = "Unsupported action: " + (action == null ? "" : ""); response.Send(); - } - else - { + } else { //Default setup response.Status = System.Net.HttpStatusCode.OK; response.Reason = "OK"; - //response.ContentType = "text/json"; +#if DEBUG response.ContentType = "text/plain"; - - method(request, response, session); +#else + response.ContentType = "text/json"; +#endif + using (BodyWriter bw = new BodyWriter(response)) + { + try + { + method(request, response, session, bw); + } + catch (Exception ex) + { + if (!response.HeadersSent) + { + response.Status = System.Net.HttpStatusCode.InternalServerError; + response.Reason = ex.Message; + response.ContentType = "text/plain"; + bw.WriteLine("Internal error"); +#if DEBUG + bw.Write("Stacktrace: " + ex.ToString()); +#endif + bw.Flush(); + } + } + } } return true; } - private void ListSchedules(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) + private void ReportError(HttpServer.IHttpResponse response, BodyWriter bw, string message) { - using (var b = new BodyWriter(response)) + response.Status = System.Net.HttpStatusCode.InternalServerError; + response.Reason = message; + + OutputObject(bw, new { Error = message }); + } + + private void OutputObject (BodyWriter b, object o) + { + m_serializer.SerializeJson(b, o); + } + + private void ListSupportedActions(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, new { Version = 1, Methods = SUPPORTED_METHODS.Keys }); + } + + private void ListSchedules (HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Program.DataConnection.GetObjects()); + } + + private void GetCurrentState (HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, new SerializableStatus()); + } + + private void GetInstalledBackends(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Duplicati.Library.DynamicLoader.BackendLoader.Backends); + } + + private void ListInstalledEncryptionModules(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Duplicati.Library.DynamicLoader.EncryptionLoader.Modules); + } + + private void ListInstalledCompressionModules(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Duplicati.Library.DynamicLoader.CompressionLoader.Modules); + } + + private void ListInstalledGenericModules(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Duplicati.Library.DynamicLoader.GenericLoader.Modules); + } + + private void ListCoreOptions(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, new Duplicati.Library.Main.Options(new Dictionary()).SupportedCommands); + } + + private void ListRecentCompleted(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + OutputObject(bw, Program.DataConnection.GetObjects("EndTime > ? AND SubAction LIKE ? ORDER BY EndTime DESC", Library.Utility.Timeparser.ParseTimeInterval(new Datamodel.ApplicationSettings(Program.DataConnection).RecentBackupDuration, DateTime.Now, true), "Primary")); + } + + private void GetLogBlob(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + HttpServer.HttpInput input = request.Method.ToUpper() == "POST" ? request.Form : request.QueryString; + long id; + if (!long.TryParse(input["id"].Value, out id)) + ReportError(response, bw, "Invalid or missing log id"); + else { - LitJson.JsonWriter w = new LitJson.JsonWriter(b); - w.WriteArrayStart(); - - foreach (Datamodel.Schedule s in Program.DataConnection.GetObjects()) - { - w.WriteObjectStart(); - - w.WritePropertyName("name"); - w.Write(s.Name); - w.WritePropertyName("id"); - w.Write(s.ID); - - w.WriteObjectEnd(); - } - - w.WriteArrayEnd(); + Datamodel.LogBlob lb = Program.DataConnection.GetObject("LogId = ?", id); + OutputObject(bw, lb); } } - private void GetCurrentState(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) + private void ListApplicationSettings(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) { - using (var b = new BodyWriter(response)) - { - LitJson.JsonWriter w = new LitJson.JsonWriter(b); - - w.WriteObjectStart(); - - w.WritePropertyName("eventid"); - w.Write(Program.Events.CurrentEventId); - - w.WritePropertyName("paused"); - w.Write(Program.LiveControl.State.ToString()); - - w.WritePropertyName("pause-timeout"); - w.Write(0); - - - - w.WriteObjectEnd(); - } + OutputObject(bw, new Datamodel.ApplicationSettings(Program.DataConnection)); } + private void SendCommand(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session, BodyWriter bw) + { + HttpServer.HttpInput input = request.Method.ToUpper() == "POST" ? request.Form : request.QueryString; + + string command = input["command"].Value ?? ""; + long id; + + switch (command.ToLowerInvariant()) + { + case "pause": + if (input.Contains("duration")) + { + TimeSpan ts; + try { ts = Library.Utility.Timeparser.ParseTimeSpan(input["duration"].Value); } + catch (Exception ex) + { + ReportError(response, bw, ex.Message); + return; + } + Program.LiveControl.Pause(ts); + } + else + { + Program.LiveControl.Pause(); + } + + break; + case "resume": + Program.LiveControl.Resume(); + break; + + case "stop": + if (!Program.Runner.IsStopRequested) + Program.Runner.Stop(CloseReason.UserClosing); + break; + + case "abort": + if (!Program.Runner.IsStopRequested) + { + Program.Runner.Stop(CloseReason.UserClosing); + Program.Runner.Stop(CloseReason.UserClosing); + } + break; + + case "run": + case "run-backup": + { + Datamodel.Schedule schedule = null; + if (long.TryParse(input["id"].Value, out id)) + schedule = Program.DataConnection.GetObjectById(id); + + if (schedule == null) + { + ReportError(response, bw, string.Format("No backup found for id: {0}", input["id"].Value)); + return; + } + + if (Library.Utility.Utility.ParseBoolOption(input["full"].ToDictionary(x => x.Name, x => x.Value), "full")) + Program.WorkThread.AddTask(new FullBackupTask(schedule)); + else + Program.WorkThread.AddTask(new IncrementalBackupTask(schedule)); + } + break; + + default: + ReportError(response, bw, string.Format("Unsupported command {0}", command)); + break; + } + + OutputObject(bw, new { Status = "OK" }); + } } } } diff --git a/Duplicati/Server/app.config b/Duplicati/Server/app.config index a7d04fa82..02451de7f 100644 --- a/Duplicati/Server/app.config +++ b/Duplicati/Server/app.config @@ -1,3 +1,7 @@ - + + + + +