@Override
	public int reportFake(@Nonnull GamePlayer player, @Nonnull Status[] tweets) throws RemoteException
	{
		tweetsProvider.delay();
		final GamePlayerData playerData = getGamePlayerData(player);
		try {
			if (tweets.length < MIN_FAKE_TWEETS_BATCH) throw new IllegalArgumentException("Invalid fake tweeets size");

			final List<Long> ids = new ArrayList<>();
			GamePlayerData source = null;
			for (Status tweet : tweets) {
				if (tweet == null) throw new NullPointerException(TWEET_FIELD);
				if (source == null) source = getGamePlayerData(tweet.getSource(), false);
				else if (!source.getId().equals(tweet.getSource())) throw new IllegalArgumentException("Not all tweets from the same source");
				if (ids.contains(tweet.getId())) throw new IllegalArgumentException("Tweet repeated");
				ids.add(tweet.getId());
				tweetsProvider.registerFakeTweet(tweet, source.player, source.hash);
			}
			assert source != null;
			if (source.getId().equals(player.getId())) throw new IllegalArgumentException("You cannot report yourself!");
			final boolean isBanned = source.isBanned;
			source.isBanned = true;
			final int playerScore = isBanned ? ALREADY_BANNED_SCORE : FIRST_BANNED_SCORE;
			return playerData.addAndGet(playerScore);
		} catch (IllegalArgumentException e) {
			playerData.banned();
			throw e;
		}
	}