public UniversalPlatformVersion(string version, string buildVersion,
                                        string versionName, string marketingName,
                                        string codeName, JsonArray contractsArray)
        {
            Version       = version;
            BuildVersion  = buildVersion;
            VersionName   = versionName;
            MarketingName = marketingName;
            CodeName      = codeName;

            if (contractsArray == null)
            {
                return;
            }

            UniversalPlatformContract contract;

            for (uint index = 0; index < contractsArray.Count; index++)
            {
                JsonObject entry = contractsArray.GetObjectAt(index);

                contract = new UniversalPlatformContract(
                    entry["name"].GetString(),
                    entry["version"].GetString()
                    );
                VersionContracts.Add(contract);
                FilteredContracts.Add(contract);
            }
        }
 public bool FitsFilter(string[] keywords)
 {
     FilteredContracts.Clear();
     VersionContracts.ForEach(contract =>
     {
         if (contract.FitsFilter(keywords))
         {
             FilteredContracts.Add(contract);
         }
     });
     if (FilteredContracts.Count == 0)
     {
         VersionContracts.ForEach(contract =>
         {
             FilteredContracts.Add(contract);
         });
     }
     return(keywords.All(key =>
     {
         if (Version.Contains(key, StringComparison.InvariantCultureIgnoreCase))
         {
             return true;
         }
         if (BuildVersion.Contains(key, StringComparison.InvariantCultureIgnoreCase))
         {
             return true;
         }
         if (VersionName.Contains(key, StringComparison.InvariantCultureIgnoreCase))
         {
             return true;
         }
         if (MarketingName.Contains(key, StringComparison.InvariantCultureIgnoreCase))
         {
             return true;
         }
         if (CodeName.Contains(key, StringComparison.InvariantCultureIgnoreCase))
         {
             return true;
         }
         if (FilteredContractsCount(key) > 0)
         {
             return true;
         }
         // No matches, return false
         return false;
     }
                         ));
 }