positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative positive negative