/// <summary>
        /// Loads the astronaut data from the config node supplied.
        /// </summary>
        /// <returns>A map keyed kerbal name that contains astronaut data.</returns>
        /// <param name="node">The ConfigNode to read data from.</param>
        public static DictionaryValueList <string, AstronautData> Load(ConfigNode node)
        {
            DictionaryValueList <string, AstronautData> crewData = new DictionaryValueList <string, AstronautData>();

            ConfigNode[] astronautNodess = node.GetNodes(AstronautNode);

            foreach (ConfigNode astronautNode in astronautNodess)
            {
                try
                {
                    AstronautData astronautData = new AstronautData();

                    astronautData.name            = astronautNode.GetValue(AstronautNodeName);
                    astronautData.experienceTrait = astronautNode.GetValue(AstronautNodeTrait);
                    astronautData.lastUpdated     = double.Parse(astronautNode.GetValue(AstronautNodeUpdated));
                    astronautData.isExempt        = bool.Parse(astronautNode.GetValue(AstronautNodeExempt));

                    if (astronautNode.HasValue(AstronautNodeCondition))
                    {
                        astronautData.conditionSummary = astronautNode.GetValue(AstronautNodeCondition);
                    }

                    if (astronautNode.HasValue(AstronautNodeDisqualifiers))
                    {
                        astronautData.disqualifiedPreconditions = astronautNode.GetValue(AstronautNodeDisqualifiers);
                    }

                    //Key value pairs
                    astronautData.keyValuePairs = new DictionaryValueList <string, string>();
                    if (astronautNode.HasNode(KeyValueNode))
                    {
                        ConfigNode[] keyValuePairs = astronautNode.GetNodes(KeyValueNode);
                        foreach (ConfigNode keyValue in keyValuePairs)
                        {
                            astronautData.keyValuePairs.Add(keyValue.GetValue(KeyValuePairKey), keyValue.GetValue(KeyValuePairValue));
                        }
                    }

                    //Success/fail counters
                    if (astronautNode.HasNode(ResourceCounterNode))
                    {
                        ConfigNode[] resourceCounterNodes = astronautNode.GetNodes(ResourceCounterNode);
                        ConfigNode   counterNode;
                        string       resourceName = string.Empty;
                        int          count        = 0;
                        bool         isSuccess    = false;
                        for (int index = 0; index < resourceCounterNodes.Length; index++)
                        {
                            counterNode  = resourceCounterNodes[index];
                            resourceName = counterNode.GetValue(ResourceCounterName);
                            int.TryParse(counterNode.GetValue(ResourceCounterValue), out count);
                            isSuccess = false;
                            bool.TryParse(counterNode.GetValue(ResourceCounterIsSuccess), out isSuccess);

                            if (isSuccess)
                            {
                                astronautData.processedResourceSuccesses.Add(resourceName, count);
                            }
                            else
                            {
                                astronautData.processedResourceFailures.Add(resourceName, count);
                            }
                        }
                    }

                    //Roster resources
                    if (astronautNode.HasNode(SnacksRosterResource.RosterResourceNode))
                    {
                        astronautData.rosterResources = SnacksRosterResource.LoadFromAstronautData(astronautNode);
                    }

                    crewData.Add(astronautData.name, astronautData);
                }
                catch (Exception ex)
                {
                    Log("error encountered: " + ex + " skipping kerbal.");
                    continue;
                }
            }

            return(crewData);
        }