Changeset 1115


Ignore:
Timestamp:
Jan 28, 2010, 4:31:53 PM (12 years ago)
Author:
arnold
Message:

P2P stuff enhanced with peersAtPlay certification, so all certificates, which are necessary for using the p2p system will be checked and - in case of doubt - installed in the background before initializing the p2p system.
Furthermore the SimpleSnalNG was banned from the P2PBase, so you can only initialize the p2p system with the newer SnalNG, which supports certificates.

The lib is required by all developers, so I'm adding it explicitly to the repository.

override-bad-extension: opa.vs.uni-due.de.cer
override-bad-extension: pap.cer
override-bad-extension: pap0001.p12
override-bad-extension: ServerCA.cer
override-bad-extension: Bootstrapper.dll
override-bad-extension: Bootstrapper.pdb
override-bad-extension: CertServices.dll
override-bad-extension: CertServices.pdb
override-bad-extension: FullMeshDHT.dll
override-bad-extension: FullMeshDHT.pdb
override-bad-extension: FullMeshOverlay.dll
override-bad-extension: FullMeshOverlay.pdb
override-bad-extension: Gears4Net.dll
override-bad-extension: Gears4Net.pdb
override-bad-extension: LinkManager.dll
override-bad-extension: LinkManager.pdb
override-bad-extension: NetGearsTCP.dll
override-bad-extension: NetGearsTCP.pdb
override-bad-extension: PeersAtPlayBase.dll
override-bad-extension: PeersAtPlayBase.pdb
override-bad-extension: Stun.dll
override-bad-extension: Stun.pdb
override-bad-extension: Util.dll
override-bad-extension: Util.pdb

Location:
trunk
Files:
12 added
6 deleted
46 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/PeerToPeerBase/P2PPeer.cs

    r1107 r1115  
    213213                this.p2pBase.AllowLoggingToMonitor = this.settings.Log2Monitor;
    214214
    215                 this.p2pBase.Initialize(this.settings.P2PPeerName, this.settings.P2PWorldName,
    216                     this.settings.P2PUseNatTraversal,
    217                     (P2PLinkManagerType)this.settings.P2PLinkMngrType, (P2PBootstrapperType)this.settings.P2PBSType,
    218                     (P2POverlayType)this.settings.P2POverlType, (P2PDHTType)this.settings.P2PDhtType);
    219                 this.PeerStarted = this.p2pBase.SynchStart();
    220 
    221                 if (this.PeerStarted)
    222                 {
    223                     this.settings.PeerStatusChanged(P2PPeerSettings.PeerStatus.Online);
    224                     GuiLogMessage("Successfully joined the P2P System", NotificationLevel.Info);
     215                if (CheckAndInstallPAPCertificates())
     216                {
     217                    this.p2pBase.Initialize(PAPCertificate.CERTIFIED_PEER_NAME, this.settings.P2PWorldName,
     218                        (P2PLinkManagerType)this.settings.P2PLinkMngrType, (P2PBootstrapperType)this.settings.P2PBSType,
     219                        (P2POverlayType)this.settings.P2POverlType, (P2PDHTType)this.settings.P2PDhtType);
     220                    this.PeerStarted = this.p2pBase.SynchStart();
     221
     222                    if (this.PeerStarted)
     223                    {
     224                        this.settings.PeerStatusChanged(P2PPeerSettings.PeerStatus.Online);
     225                    }
     226                    string joiningStatus = this.PeerStarted == true ? "successful" : "canceled";
     227                    GuiLogMessage("Status of joining the P2P System: " + joiningStatus, NotificationLevel.Info);
    225228                }
    226229                else
    227230                {
    228                     this.settings.PeerStatusChanged(P2PPeerSettings.PeerStatus.Error);
    229                     GuiLogMessage("Joining to P2P System failed!", NotificationLevel.Error);
     231                    GuiLogMessage("Because not all p2p certificates were installed, you can't start the p2p system!", NotificationLevel.Error);
    230232                }
    231233            }
     
    259261                GuiLogMessage("Peer is already stopped!", NotificationLevel.Info);
    260262            }
     263        }
     264
     265        /// <summary>
     266        /// Checks if all certificates for using the pap p2p system are installed.
     267        /// Otherwise it tries to install the missing certificates. If all operations
     268        /// succeed, return value is true. Only when value is true, you can try
     269        /// to initialize the PAP System.
     270        /// </summary>
     271        /// <returns>If all operations succeed, return value is true. Only when value
     272        /// is true, you can try to initialize the PAP System.</returns>
     273        private bool CheckAndInstallPAPCertificates()
     274        {
     275            bool retValue = false;
     276
     277            // get exe directory, because there resides the certificate directory
     278            System.Reflection.Assembly assemb = System.Reflection.Assembly.GetEntryAssembly();
     279            string applicationDir = System.IO.Path.GetDirectoryName(assemb.Location);
     280            // check if all necessary certs are installed
     281            GuiLogMessage("Check installation of all certificates, which are necessary to run the p2p system", NotificationLevel.Info);
     282            List<PAPCertificate.PAP_Certificates> lstMissingCerts = PAPCertificate.CheckAvailabilityOfPAPCertificates(applicationDir);
     283            if (lstMissingCerts.Count == 0)
     284            {
     285                GuiLogMessage("All neccessary p2p certificates are installed.", NotificationLevel.Info);
     286                retValue = true;
     287            }
     288            else
     289            {
     290                StringBuilder sbMissingCerts = new StringBuilder();
     291                for (int i = 0; i < lstMissingCerts.Count; i++)
     292                {
     293                    sbMissingCerts.AppendLine(Enum.GetName(typeof(PAPCertificate.PAP_Certificates),lstMissingCerts[i]));
     294                }
     295                GuiLogMessage("Following certificates are missing. They will be installed now.\n" + sbMissingCerts.ToString(), NotificationLevel.Info);
     296
     297                // try/catch neccessary because the CT-Editor doesn't support the whole exception display process (e.g. shows only "unknown error.")
     298                try
     299                {
     300                    if (PAPCertificate.InstallMissingCertificates(lstMissingCerts, applicationDir))
     301                    {
     302                        GuiLogMessage("Installation of all missing certificates was successful.", NotificationLevel.Info);
     303                        retValue = true;
     304                    }
     305                    else
     306                    {
     307                        GuiLogMessage("No/not all missing certificates were installed successful.", NotificationLevel.Error);
     308                    }
     309                }
     310                catch (Exception ex)
     311                {
     312                    GuiLogMessage("Error occured while installing certificates. Exception: " + ex.ToString(), NotificationLevel.Error);
     313                }
     314            }
     315            return retValue;
    261316        }
    262317
  • trunk/CrypPlugins/PeerToPeerBase/P2PPeerSettings.cs

    r1107 r1115  
    5555        public void BtnStart()
    5656        {
    57             if (P2PPeerName != null && P2PWorldName != null)
     57            if (P2PWorldName != null)
    5858            {
    5959                this.p2pPeer.StartPeer();
     
    8787        #region Setting-Fields
    8888
    89         private string p2pPeerName;
    90         [TaskPane("P2P Peer Name", "P2P Name of the Peer.", null, 0, false, DisplayLevel.Beginner, ControlType.TextBox)]
    91         public string P2PPeerName
    92         {
    93             get { return this.p2pPeerName; }
    94             set
    95             {
    96                 if (value != this.p2pPeerName)
    97                 {
    98                     this.p2pPeerName = value;
    99                     OnPropertyChanged("P2PPeerName");
    100                     HasChanges = true;
    101                 }
    102             }
    103         }
     89        //private string p2pPeerName;
     90        //[TaskPane("P2P Peer Name", "P2P Name of the Peer.", null, 0, false, DisplayLevel.Beginner, ControlType.TextBox)]
     91        //public string P2PPeerName
     92        //{
     93        //    get { return this.p2pPeerName; }
     94        //    set
     95        //    {
     96        //        if (value != this.p2pPeerName)
     97        //        {
     98        //            this.p2pPeerName = value;
     99        //            OnPropertyChanged("P2PPeerName");
     100        //            HasChanges = true;
     101        //        }
     102        //    }
     103        //}
    104104
    105105        private string p2pWorldName;
     
    119119        }
    120120
    121         private bool p2pUseNatTraversal = false;
    122         [TaskPane("Use NAT Traversal", "Activate/Deactivate NAT-Traversal (tunneling connections through NATs " +
    123             "and Firewalls, necessary to work in different networks in the same world)", "P2P Settings", 0, false,
    124             DisplayLevel.Beginner, ControlType.CheckBox)]
    125         public bool P2PUseNatTraversal
    126         {
    127             get { return this.p2pUseNatTraversal; }
    128             set
    129             {
    130                 if (value != this.p2pUseNatTraversal)
    131                 {
    132                     this.p2pUseNatTraversal = value;
    133                     OnPropertyChanged("P2PUseNatTraversal");
    134                     HasChanges = true;
    135                 }
    136             }
    137         }
     121        //private bool p2pUseNatTraversal = false;
     122        //[TaskPane("Use NAT Traversal", "Activate/Deactivate NAT-Traversal (tunneling connections through NATs " +
     123        //    "and Firewalls, necessary to work in different networks in the same world)", "P2P Expert Settings", 0, false,
     124        //    DisplayLevel.Beginner, ControlType.CheckBox)]
     125        //public bool P2PUseNatTraversal
     126        //{
     127        //    get { return this.p2pUseNatTraversal; }
     128        //    set
     129        //    {
     130        //        if (value != this.p2pUseNatTraversal)
     131        //        {
     132        //            this.p2pUseNatTraversal = value;
     133        //            OnPropertyChanged("P2PUseNatTraversal");
     134        //            HasChanges = true;
     135        //        }
     136        //    }
     137        //}
    138138
    139139        private bool log2Monitor = true;
    140         [TaskPane("Log2Monitor", "Logs all p2p actions to the PeersAtPlay LogMonitor", "P2P Settings", 1, false,
     140        [TaskPane("Log2Monitor", "Logs all p2p actions to the PeersAtPlay LogMonitor", "P2P Expert Settings", 1, false,
    141141            DisplayLevel.Beginner, ControlType.CheckBox)]
    142142        public bool Log2Monitor
     
    155155
    156156        private P2PLinkManagerType p2pLinkManagerType = P2PLinkManagerType.Snal;
    157         [TaskPane("LinkManager-Type", "Select the LinkManager-Type", "P2P Settings", 2, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Snal" })]
     157        [TaskPane("LinkManager-Type", "Select the LinkManager-Type", "P2P Expert Settings", 2, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Snal" })]
    158158        public int P2PLinkMngrType
    159159        {
     
    171171
    172172        private P2PBootstrapperType p2pBSType = P2PBootstrapperType.LocalMachineBootstrapper;
    173         [TaskPane("Bootstrapper-Type", "Select the Bootstrapper-Type", "P2P Settings", 3, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "LocalMachineBootstrapper", "IrcBootstrapper" })]
     173        [TaskPane("Bootstrapper-Type", "Select the Bootstrapper-Type", "P2P Expert Settings", 3, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "LocalMachineBootstrapper", "IrcBootstrapper" })]
    174174        public int P2PBSType
    175175        {
     
    187187
    188188        private P2POverlayType p2pOverlayType = P2POverlayType.FullMeshOverlay;
    189         [TaskPane("Overlay-Type", "Select the Overlay-Type", "P2P Settings", 4, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "FullMeshOverlay" })]
     189        [TaskPane("Overlay-Type", "Select the Overlay-Type", "P2P Expert Settings", 4, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "FullMeshOverlay" })]
    190190        public int P2POverlType
    191191        {
     
    203203
    204204        private P2PDHTType p2pDhtType = P2PDHTType.FullMeshDHT;
    205         [TaskPane("DHT-Type", "Select the DHT-Type", "P2P Settings", 5, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "FullMeshDHT" })]
     205        [TaskPane("DHT-Type", "Select the DHT-Type", "P2P Expert Settings", 5, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "FullMeshDHT" })]
    206206        public int P2PDhtType
    207207        {
  • trunk/CrypPlugins/PeerToPeerBase/PeerToPeerBase.cs

    r1107 r1115  
    3131using PeersAtPlay;
    3232using PeersAtPlay.Util.Logging;
     33using Gears4Net;
    3334
    3435/* - Synchronous functions successfully tested (store, retrieve)
     
    4445 *   If this versioning system will be abolished, the SynchStore method must
    4546 *   be change!
     47 * - Everything switched to SnalNG, SimpleSnal isn't used anymore, because
     48 *   certification stuff runs now
    4649 *
    4750 * TODO:
     51 * - Delete UseNatTraversal-Flag and insert CertificateCheck and CertificateSetup
    4852 * - Testing asynchronous methods incl. EventHandlers
    4953 */
     
    118122        }
    119123
    120         private bool useNatTraversal = true;
    121         /// <summary>
    122         /// Initialization value = true!
    123         /// When you want to use NAT-Traversal (tunneling the P2P
    124         /// connection through NATs and Firewalls), you have to
    125         /// set this flag to true, before initializing this peer
    126         /// ATTENTION: At present you have to install two certificates
    127         /// manually on each workstation, where you want to use P2P@CT2,
    128         /// and set a static PeerName (pap0001) and P2PWorldName (TestBruteforcingWorld)
    129         /// TODO: Automatize the certificate stuff and implement a chance
    130         /// to choose own PeerNames and P2PWorldNames
    131         /// </summary>
    132         public bool UseNatTraversal
    133         {
    134             get { return this.useNatTraversal; }
    135             set { this.useNatTraversal = value; }
    136         }
    137 
    138124        private IDHT dht;
    139125        private IP2PLinkManager linkmanager;
     
    173159        /// <param name="overlayType"></param>
    174160        /// <param name="dhtType"></param>
    175         public void Initialize(string sUserName, string sWorldName, bool bolUseNatTraversal, P2PLinkManagerType linkManagerType, P2PBootstrapperType bsType, P2POverlayType overlayType, P2PDHTType dhtType)
    176         {
    177             this.UseNatTraversal = bolUseNatTraversal;
    178 
     161        public void Initialize(string sUserName, string sWorldName, P2PLinkManagerType linkManagerType, P2PBootstrapperType bsType, P2POverlayType overlayType, P2PDHTType dhtType)
     162        {
    179163            #region Setting LinkManager, Bootstrapper, Overlay and DHT to the specified types
    180164            switch (linkManagerType)
    181165            {
    182166                case P2PLinkManagerType.Snal:
    183                     //snal = secure network abstraction layer
    184                     if (UseNatTraversal)
    185                     {
    186                         if (bsType == P2PBootstrapperType.LocalMachineBootstrapper)
    187                             throw (new Exception("It's mindless to activate NAT traversal, but use the LocalMachineBootstrapper."));
    188 
    189                         LogToMonitor("Init LinkMgr: Using NAT Traversal stuff");
    190                         // NAT-Traversal stuff needs a different Snal-Version
    191                         this.linkmanager = new PeersAtPlay.P2PLink.SnalNG.Snal();
    192 
    193                         ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.ConnectInternal = false;
    194                         ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.LocalReceivingPort = 0;
    195                         ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.UseLocalAddressDetection = false;
    196                     }
    197                     else
    198                     {
    199                         this.linkmanager = new PeersAtPlay.P2PLink.SimpleSnalNG.Snal();
    200                     }
     167                    if (bsType == P2PBootstrapperType.LocalMachineBootstrapper)
     168                        throw (new Exception("It's mindless to activate NAT traversal, but use the LocalMachineBootstrapper."));
     169
     170                    LogToMonitor("Init LinkMgr: Using NAT Traversal stuff");
     171                    // NAT-Traversal stuff needs a different Snal-Version
     172                    this.linkmanager = new PeersAtPlay.P2PLink.SnalNG.Snal(new STAScheduler("crypt"));
     173
     174                    ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.ConnectInternal = true;
     175                    ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.LocalReceivingPort = 0;
     176                    ((PeersAtPlay.P2PLink.SnalNG.Snal)this.linkmanager).Settings.UseLocalAddressDetection = false;
    201177                    break;
    202178                default:
     
    210186                    break;
    211187                case P2PBootstrapperType.IrcBootstrapper:
    212                     if (UseNatTraversal)
    213                     {
    214                         LogToMonitor("Init Bootstrapper: Using NAT Traversal stuff");
    215                         PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.DelaySymmetricResponse = true;
    216                         PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.IncludeSymmetricInResponse = false;
    217                         PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.SymmetricResponseDelay = 6000;
    218                     }
    219                     else
    220                     {
    221                         PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.IncludeSymmetricInResponse = true;
    222                         PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.DelaySymmetricResponse = false;
    223                     }
     188                    // setup nat traversal stuff
     189                    LogToMonitor("Init Bootstrapper: Using NAT Traversal stuff");
     190                    PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.DelaySymmetricResponse = true;
     191                    PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.IncludeSymmetricInResponse = false;
     192                    PeersAtPlay.P2POverlay.Bootstrapper.IrcBootstrapper.Settings.SymmetricResponseDelay = 6000;
     193
    224194                    this.bootstrapper = new IrcBootstrapper();
    225195                    break;
  • trunk/CrypPlugins/PeerToPeerBase/PeerToPeerBase.csproj

    r1090 r1115  
    5252      <HintPath>dlls\Debug\Gears4Net.dll</HintPath>
    5353    </Reference>
     54    <Reference Include="LinkManager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
     55      <SpecificVersion>False</SpecificVersion>
     56      <HintPath>dlls\Debug\LinkManager.dll</HintPath>
     57    </Reference>
    5458    <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
    5559      <SpecificVersion>False</SpecificVersion>
     
    6973    <Reference Include="PresentationFramework">
    7074      <RequiredTargetFramework>3.0</RequiredTargetFramework>
    71     </Reference>
    72     <Reference Include="SimpleSnalNG, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
    73       <SpecificVersion>False</SpecificVersion>
    74       <HintPath>dlls\Debug\SimpleSnalNG.dll</HintPath>
    7575    </Reference>
    7676    <Reference Include="Stun, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
     
    118118      <Name>KeySearcher</Name>
    119119    </ProjectReference>
     120    <ProjectReference Include="..\PeerToPeerCertificates\PeerToPeerCertificates.csproj">
     121      <Project>{7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}</Project>
     122      <Name>PeerToPeerCertificates</Name>
     123    </ProjectReference>
    120124  </ItemGroup>
    121125  <ItemGroup>
  • trunk/CrypPlugins/PeerToPeerPublisher/P2PPublisherBase.cs

    r1107 r1115  
    185185                    {
    186186                        GuiLogging("ALREADY REGISTERED peer with ID " + sender, NotificationLevel.Info);
     187                        // only for testing reasons
     188                        this.p2pControl.SendToPeer(PubSubMessageType.RegisteringAccepted, sender);
    187189                    }
    188190                    break;
  • trunk/CrypPlugins/PeerToPeerSubscriber/P2PSubscriberBase.cs

    r1100 r1115  
    105105        public void Start(string sTopic, long checkPublishersAvailability, long publishersReplyTimespan)
    106106        {
    107             this.p2pControl.OnPayloadMessageReceived += new P2PPayloadMessageReceived(p2pControl_OnPayloadMessageReceived);
    108             this.p2pControl.OnSystemMessageReceived += new P2PSystemMessageReceived(p2pControl_OnSystemMessageReceived);
    109 
    110107            this.sTopic = sTopic;
    111108            this.checkPublishersAvailability = checkPublishersAvailability;
     
    116113        private void Register()
    117114        {
     115            // Unfortunately you have to register this events every time, because this events will be deregistered, when
     116            // Publisher/Manager sends a Unregister/Stop-Message... There isn't any possibility to check,
     117            // whether the Events are already registered (if(dings != null) or anything else).
     118            this.p2pControl.OnPayloadMessageReceived += new P2PPayloadMessageReceived(p2pControl_OnPayloadMessageReceived);
     119            this.p2pControl.OnSystemMessageReceived += new P2PSystemMessageReceived(p2pControl_OnSystemMessageReceived);
     120
    118121            // because CheckPublishersAvailability checks this value, set it for the first time here...
    119122            // if bolStopped = true, the Timer for Checking Publishers liveliness doesn't start
     
    138141            }
    139142            SendMessage(pubId, PubSubMessageType.Register);
    140             if (this.timeoutForPublishersRegAccept == null)
    141                 this.timeoutForPublishersRegAccept = new Timer(OnTimeoutRegisteringAccepted, null, this.publisherReplyTimespan, this.publisherReplyTimespan);
    142143            this.started = true;
    143144        }
     
    232233                        timerRegisteringNotPossible = null;
    233234                    }
     235                    // start waiting interval for RegAccept Message
     236                    if (this.timeoutForPublishersRegAccept == null)
     237                        this.timeoutForPublishersRegAccept = new Timer(OnTimeoutRegisteringAccepted, null, this.publisherReplyTimespan, this.publisherReplyTimespan);
    234238                    break;
    235239                case PubSubMessageType.Alive:
     
    238242                case PubSubMessageType.Unregister:
    239243                case PubSubMessageType.Stop:
    240 
    241244                case PubSubMessageType.Solution:
    242245                    break;
     
    251254            this.p2pControl.SendToPeer(msgType, pubPeerId);
    252255
    253             // don't show every single alive message
    254             if (msgType != PubSubMessageType.Alive)
    255                 GuiLogging(msgType.ToString() + " message sent to Publisher", NotificationLevel.Debug);
     256            GuiLogging(msgType.ToString() + " message sent to Publisher", NotificationLevel.Debug);
    256257        }
    257258
     
    341342        private void OnTimeoutRegisteringAccepted(object state)
    342343        {
    343             GuiLogging("TIMEOUT: Waiting for registering accepted message from publisher!", NotificationLevel.Warning);
     344            GuiLogging("TIMEOUT: Waiting for registering accepted message from publisher!", NotificationLevel.Debug);
    344345            // try to register again
    345346            Register();
  • trunk/CrypTool 2.0.sln

    r1097 r1115  
    175175Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LengthOf", "CrypPlugins\LengthOf\LengthOf.csproj", "{3ECF3335-7331-4E1A-942F-3340CDEC3EB9}"
    176176EndProject
     177Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CLK", "CrypPlugins\CLK\CLK.csproj", "{1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}"
     178EndProject
     179Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transposition", "CrypPlugins\Transposition\Transposition.csproj", "{37D80203-C651-4396-8F5B-D67B7EC62763}"
     180EndProject
     181Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranspositionAnalyser", "CrypPlugins\TranspositionAnalyser\TranspositionAnalyser.csproj", "{D5B859A7-73AB-4BFE-A1FB-11BB104B210C}"
     182EndProject
     183Project("{8BC9CEB9-8B4A-11D0-8D11-00A0C91BC942}") = "CrypWin.exe", "CrypWin\bin\Debug\CrypWin.exe", "{0AFD1E1B-6503-46E0-8F53-A22058C7CEA1}"
     184EndProject
     185Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleEditor", "CrypPlugins\SimpleEditor\SimpleEditor.csproj", "{C7507435-D076-406C-8F8F-0DBBDFB17D9A}"
     186EndProject
     187Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeySearcher_IControl", "CrypPlugins\KeySearcher_IControl\KeySearcher_IControl.csproj", "{246DF46E-C05E-42A3-AA3D-47807FE4E929}"
     188EndProject
     189Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CubeAttackController", "CrypPlugins\CubeAttackController\CubeAttackController.csproj", "{2100AC2F-3F2B-48A2-AF42-87EC52C8A703}"
     190EndProject
     191Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTremove", "CrypPlugins\PeerToPeer_DHTremove\PeerToPeer_DHTremove.csproj", "{D7940152-CBCF-4A65-96BB-6BEDB20DED7E}"
     192EndProject
     193Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PeerToPeer", "PeerToPeer", "{775BB529-52BD-4B18-A092-E4EA70E53838}"
     194EndProject
     195Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTretrieve", "CrypPlugins\PeerToPeer_DHTretrieve\PeerToPeer_DHTretrieve.csproj", "{AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}"
     196EndProject
     197Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTstore", "CrypPlugins\PeerToPeer_DHTstore\PeerToPeer_DHTstore.csproj", "{0FEE94EF-C54B-496D-AA98-7E4682B2280B}"
     198EndProject
    177199Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerBase", "CrypPlugins\PeerToPeerBase\PeerToPeerBase.csproj", "{A7CD30E7-5381-40CF-BB78-268EC998CCB3}"
    178200EndProject
    179 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTstore", "CrypPlugins\PeerToPeer_DHTstore\PeerToPeer_DHTstore.csproj", "{0FEE94EF-C54B-496D-AA98-7E4682B2280B}"
    180 EndProject
    181 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CLK", "CrypPlugins\CLK\CLK.csproj", "{1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}"
    182 EndProject
    183 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTremove", "CrypPlugins\PeerToPeer_DHTremove\PeerToPeer_DHTremove.csproj", "{D7940152-CBCF-4A65-96BB-6BEDB20DED7E}"
    184 EndProject
    185 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeer_DHTretrieve", "CrypPlugins\PeerToPeer_DHTretrieve\PeerToPeer_DHTretrieve.csproj", "{AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}"
    186 EndProject
    187 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transposition", "CrypPlugins\Transposition\Transposition.csproj", "{37D80203-C651-4396-8F5B-D67B7EC62763}"
    188 EndProject
    189 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranspositionAnalyser", "CrypPlugins\TranspositionAnalyser\TranspositionAnalyser.csproj", "{D5B859A7-73AB-4BFE-A1FB-11BB104B210C}"
    190 EndProject
    191 Project("{8BC9CEB9-8B4A-11D0-8D11-00A0C91BC942}") = "CrypWin.exe", "CrypWin\bin\Debug\CrypWin.exe", "{0AFD1E1B-6503-46E0-8F53-A22058C7CEA1}"
    192 EndProject
    193 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleEditor", "CrypPlugins\SimpleEditor\SimpleEditor.csproj", "{C7507435-D076-406C-8F8F-0DBBDFB17D9A}"
     201Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerCertificates", "CrypPlugins\PeerToPeerCertificates\PeerToPeerCertificates.csproj", "{7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}"
    194202EndProject
    195203Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerManager", "CrypPlugins\PeerToPeerManager\PeerToPeerManager.csproj", "{81A16361-0F1F-4A82-9B52-E14759C3FEFD}"
    196204EndProject
     205Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerWorker", "CrypPlugins\PeerToPeerWorker\PeerToPeerWorker.csproj", "{4B0393E8-CB51-4E75-B1DA-951DDFF7D837}"
     206EndProject
    197207Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerPublisher", "CrypPlugins\PeerToPeerPublisher\PeerToPeerPublisher.csproj", "{A1E7F287-DFC1-44C2-A681-C62DF46B43C5}"
    198208EndProject
    199209Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeerToPeerSubscriber", "CrypPlugins\PeerToPeerSubscriber\PeerToPeerSubscriber.csproj", "{612FEE87-F51F-4BE6-81D1-F91EA4A5DD43}"
    200 EndProject
    201 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeySearcher_IControl", "CrypPlugins\KeySearcher_IControl\KeySearcher_IControl.csproj", "{246DF46E-C05E-42A3-AA3D-47807FE4E929}"
    202 EndProject
    203 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CubeAttackController", "CrypPlugins\CubeAttackController\CubeAttackController.csproj", "{2100AC2F-3F2B-48A2-AF42-87EC52C8A703}"
    204210EndProject
    205211Global
     
    10231029                {3ECF3335-7331-4E1A-942F-3340CDEC3EB9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    10241030                {3ECF3335-7331-4E1A-942F-3340CDEC3EB9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1025                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1026                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1027                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1028                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1029                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1030                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|.NET.ActiveCfg = Release|Any CPU
    1031                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1032                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Any CPU.Build.0 = Release|Any CPU
    1033                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1034                 {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1035                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1036                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1037                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1038                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1039                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1040                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|.NET.ActiveCfg = Release|Any CPU
    1041                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1042                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Any CPU.Build.0 = Release|Any CPU
    1043                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1044                 {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    10451031                {1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}.Debug|.NET.ActiveCfg = Debug|Any CPU
    10461032                {1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     
    10531039                {1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    10541040                {1B04DDAA-3DA9-4AC9-85C0-E819C790CA34}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1055                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1056                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1057                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1058                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1059                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1060                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|.NET.ActiveCfg = Release|Any CPU
    1061                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1062                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Any CPU.Build.0 = Release|Any CPU
    1063                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1064                 {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1065                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1066                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1067                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1068                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1069                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1070                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|.NET.ActiveCfg = Release|Any CPU
    1071                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1072                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Any CPU.Build.0 = Release|Any CPU
    1073                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1074                 {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    10751041                {37D80203-C651-4396-8F5B-D67B7EC62763}.Debug|.NET.ActiveCfg = Debug|Any CPU
    10761042                {37D80203-C651-4396-8F5B-D67B7EC62763}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     
    11091075                {C7507435-D076-406C-8F8F-0DBBDFB17D9A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    11101076                {C7507435-D076-406C-8F8F-0DBBDFB17D9A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1077                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1078                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1079                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1080                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1081                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1082                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|.NET.ActiveCfg = Release|Any CPU
     1083                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1084                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Any CPU.Build.0 = Release|Any CPU
     1085                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1086                {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1087                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1088                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1089                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1090                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1091                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1092                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|.NET.ActiveCfg = Release|Any CPU
     1093                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1094                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Any CPU.Build.0 = Release|Any CPU
     1095                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1096                {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1097                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1098                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1099                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1100                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1101                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1102                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|.NET.ActiveCfg = Release|Any CPU
     1103                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1104                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Any CPU.Build.0 = Release|Any CPU
     1105                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1106                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1107                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1108                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1109                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1110                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1111                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1112                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|.NET.ActiveCfg = Release|Any CPU
     1113                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1114                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Any CPU.Build.0 = Release|Any CPU
     1115                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1116                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1117                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1118                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1119                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1120                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1121                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1122                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|.NET.ActiveCfg = Release|Any CPU
     1123                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1124                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Any CPU.Build.0 = Release|Any CPU
     1125                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1126                {0FEE94EF-C54B-496D-AA98-7E4682B2280B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1127                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1128                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1129                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1130                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1131                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1132                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|.NET.ActiveCfg = Release|Any CPU
     1133                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1134                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Any CPU.Build.0 = Release|Any CPU
     1135                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1136                {A7CD30E7-5381-40CF-BB78-268EC998CCB3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1137                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1138                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1139                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1140                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1141                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1142                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Release|.NET.ActiveCfg = Release|Any CPU
     1143                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1144                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Release|Any CPU.Build.0 = Release|Any CPU
     1145                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1146                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    11111147                {81A16361-0F1F-4A82-9B52-E14759C3FEFD}.Debug|.NET.ActiveCfg = Debug|Any CPU
    11121148                {81A16361-0F1F-4A82-9B52-E14759C3FEFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     
    11191155                {81A16361-0F1F-4A82-9B52-E14759C3FEFD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    11201156                {81A16361-0F1F-4A82-9B52-E14759C3FEFD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
     1157                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Debug|.NET.ActiveCfg = Debug|Any CPU
     1158                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     1159                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Debug|Any CPU.Build.0 = Debug|Any CPU
     1160                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
     1161                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
     1162                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Release|.NET.ActiveCfg = Release|Any CPU
     1163                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Release|Any CPU.ActiveCfg = Release|Any CPU
     1164                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Release|Any CPU.Build.0 = Release|Any CPU
     1165                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
     1166                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    11211167                {A1E7F287-DFC1-44C2-A681-C62DF46B43C5}.Debug|.NET.ActiveCfg = Debug|Any CPU
    11221168                {A1E7F287-DFC1-44C2-A681-C62DF46B43C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     
    11391185                {612FEE87-F51F-4BE6-81D1-F91EA4A5DD43}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    11401186                {612FEE87-F51F-4BE6-81D1-F91EA4A5DD43}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1141                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1142                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1143                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1144                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1145                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1146                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|.NET.ActiveCfg = Release|Any CPU
    1147                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1148                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Any CPU.Build.0 = Release|Any CPU
    1149                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1150                 {246DF46E-C05E-42A3-AA3D-47807FE4E929}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    1151                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|.NET.ActiveCfg = Debug|Any CPU
    1152                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    1153                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Any CPU.Build.0 = Debug|Any CPU
    1154                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
    1155                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
    1156                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|.NET.ActiveCfg = Release|Any CPU
    1157                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Any CPU.ActiveCfg = Release|Any CPU
    1158                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Any CPU.Build.0 = Release|Any CPU
    1159                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
    1160                 {2100AC2F-3F2B-48A2-AF42-87EC52C8A703}.Release|Mixed Platforms.Build.0 = Release|Any CPU
    11611187        EndGlobalSection
    11621188        GlobalSection(SolutionProperties) = preSolution
    11631189                HideSolutionNode = FALSE
    11641190        EndGlobalSection
     1191        GlobalSection(NestedProjects) = preSolution
     1192                {D7940152-CBCF-4A65-96BB-6BEDB20DED7E} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1193                {AA14E2EC-E9D7-4AC4-AE69-25007D555E9B} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1194                {0FEE94EF-C54B-496D-AA98-7E4682B2280B} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1195                {A7CD30E7-5381-40CF-BB78-268EC998CCB3} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1196                {7BED5C93-30BE-47BE-BC4A-16453F5DE9EA} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1197                {81A16361-0F1F-4A82-9B52-E14759C3FEFD} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1198                {4B0393E8-CB51-4E75-B1DA-951DDFF7D837} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1199                {A1E7F287-DFC1-44C2-A681-C62DF46B43C5} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1200                {612FEE87-F51F-4BE6-81D1-F91EA4A5DD43} = {775BB529-52BD-4B18-A092-E4EA70E53838}
     1201        EndGlobalSection
    11651202EndGlobal
Note: See TracChangeset for help on using the changeset viewer.