static void Main(string[] args)
    {
      var options = new Options();
      options.Parse(args);
      if (options.HasErrors) {
        options.PrintErrorsAndExit(Console.Out);
      }
      if (options.HelpRequested || options.GeneralArguments.Count > 0)
      {
        options.PrintOptions("");
        Environment.Exit(0);
      }



      LeaderboardDataService.LeaderboardEntitySet leaderboardEntities = new LeaderboardDataService.LeaderboardEntitySet(new Uri("http://leaderboard/odata/LeaderboardDataService.svc"));
      leaderboardEntities.Credentials = CredentialCache.DefaultCredentials;

      var allUses = (from agg in leaderboardEntities.UserAggregations
                       where agg.appid == 555555
                       select agg).ToList();

      var failures = from fail in allUses
                     where FeatureMatch(fail.featureid, options.feature)
                     select fail;

      foreach (var failure in failures)
      {
        Console.WriteLine("User {0} used feature {3} {1} times (code {2})", failure.userid, failure.uses, failure.featureid, options.feature);
        if (failure.featureid < 0) { DecodeFailure(failure.featureid); }
      }
    }
    private static bool FeatureMatch(int featureid, Options.Feature requested)
    {
      switch (requested)
      {
        case Options.Feature.fail:
          return (featureid < 0 || featureid > 40000000);

        case Options.Feature.ccrewrite:
          return 
            (((featureid >> 12) & 7) == 1);

        case Options.Feature.ccdoc:
          return
            (((featureid >> 12) & 7) == 2);

        case Options.Feature.cccheck:
          return
            (((featureid >> 12) & 7) == 3);

        default:
          return false;
      }
    }