Consume una unidad de estado sólido al año: el bug de registro de Codex es criticado como 'software defectuoso'

marsbitPublié le 2026-07-02Dernière mise à jour le 2026-07-02

Résumé

El artículo reporta un grave problema en la herramienta de programación Codex de OpenAI: su sistema de registro de logs (bitácoras) escribe aproximadamente 640 TB de datos al año en los discos SSD de los usuarios, agotando prematuramente su vida útil. Esto ocurre porque, por defecto, registra un nivel excesivo de información de depuración (TRACE) en una base de datos SQLite local, realizando constantes operaciones de inserción y borrado que desgastan el disco sin aumentar el tamaño final del archivo. Aunque el problema se conoce desde abril y hay múltiples informes similares, OpenAI solo lo corrigió parcialmente tras hacerse público, reduciendo en un 85% las escrituras. La comunidad critica esta práctica como ejemplo de "software deficiente" que consume recursos del usuario sin consentimiento, y señala que la competencia, como Claude Code, presenta fallos similares. El caso refleja una tendencia preocupante en el desarrollo de software con IA, donde la ineficiencia se enmascara con hardware más potente.

¿'Consumir' una unidad de estado sólido de 1TB en un año?

Codex, la herramienta de programación insignia de OpenAI, está desgastando tu unidad de estado sólido con una escritura de 640 TB al año.

Hace un tiempo, un desarrollador abrió un issue en GitHub. Este issue, ahora marcado como 'Closed' y con el número #28224, lleva el título:

Los registros de feedback de SQLite de Codex pueden escribir 640TB al año, agotando rápidamente la vida útil de las SSD.

Según las mediciones del informante, su SSD principal perdió 37 TB de escritura tras 21 días de funcionamiento continuo. Extrapolando, eso supone unos 640 TB al año, suficientes para acabar con una unidad de consumo con una resistencia total a escritura (TBW) de 600 TB.

Como evidencia, adjuntó dos tablas.

En la evidencia 1, esta base de datos de registros siempre ocupa solo 1.2 GB, aparentemente sin cambios; pero su ID de fila autoincremental ya ha superado los 5.5 mil millones, mientras que las filas realmente retenidas son apenas poco más de 500,000, una diferencia de diez mil veces.

La clave está en que el desgaste del disco se mide por la cantidad total escrita, independientemente de lo que quede ahora: esas 5.5 mil millones de filas se escribieron todas en el disco, y borrarlas no devuelve el desgaste ya incurrido. Así que al revisar el archivo solo ves esas 500,000 filas, pero el disco ya ha soportado la escritura de 5.5 mil millones.

La evidencia 2 revela la distribución de estas 5.5 mil millones de filas: más del 90% es ruido de depuración que ni los propios desarrolladores revisarían. Solo el hecho de copiar cada paquete completo de datos WebSocket supone la mitad.

El culpable es una configuración predeterminada de Level::TRACE, que trata la vida útil de escritura de tu disco como papel de borrador gratuito.

Un comentario muy votado en Hacker News definió la situación:

Este es uno de los ejemplos más notorios de 'software defectuoso' (slopware).

Este usuario también añadió con frustración:

Es realmente trágico. El mundo necesita competencia para Anthropic.

Lo más embarazoso es que el problema no era desconocido.

Desde abril de este año hubo reportes esporádicos, que se arrastraron durante más de dos meses, hasta que los usuarios hicieron sus propios cálculos, escribieron informes y lo llevaron a los titulares de Hacker News para que fuera tomado en serio. Incluso así, esta ronda solo eliminó aproximadamente el 85% de la escritura de registros.

Algunos intentaron solucionarlo por su cuenta, pero descubrieron que no podían: las versiones de escritorio de estas herramientas son de código cerrado.

Otro comentario ingenioso: ¿cómo es que el proceso de revisión no detectó un error tan obvio? Ah, cierto... @codex, revisa esto.

640TB, ¿cómo se llega a esa cifra?

¿Qué representa 640TB?

Las SSD de consumo convencionales tienen una vida útil de escritura (TBW) típica de 150 a 600 TB, suficiente para décadas de uso normal.

Y la función de registro de Codex, que simplemente 'anota lo que hace', puede alcanzar esa cifra en un año.

Todo comenzó cuando este usuario revisó su disco. Su máquina, encendida continuamente durante 21 días, había escrito 37 TB en su SSD principal.

A ese ritmo, unos 640 TB al año.

Pero lo más absurdo es el método de escritura.

Codex mantiene localmente una base de datos SQLite, logs_2.sqlite, específicamente para registros de feedback. Este usuario la monitoreó durante 15 segundos: se insertaron 36,211 filas, pero el número total de filas retenidas se mantuvo en 681,774 desde el principio hasta el final, sin aumentar.

Por cada fila insertada, otra era eliminada. El conteo de filas constante, pero el disco era reescrito decenas de miles de veces.

A este mecanismo se le conoce como 'insertar y podar' (insert-and-prune).

Y lo más ridículo es lo que registra: una serie de eventos inotify del sistema de archivos.

ld.so.cache fue registrado 128,764 veces, locale.alias 37,982 veces, passwd 23,843 veces.

El mismo archivo, por el mismo programa, registrado cientos de miles de veces.

El ID autoincremental en los registros supera los 5.5 mil millones, mientras que las filas realmente conservadas son solo unas 500,000.

Una diferencia de diez mil veces.

Esto no es un bug, parece que una herramienta de programación con IA está recitando un mantra a su propio disco duro.

El archivo pesa 1GB, pero la escritura es de 640TB

¿Qué tamaño tiene logs_2.sqlite, escribiendo y borrando constantemente? Aproximadamente 1 GB.

Esto lleva al punto más contraintuitivo de todo el asunto: la vida útil de una SSD se mide por la 'cantidad de escritura', no por el 'tamaño del archivo'. Un archivo de 1 GB reescrito 640 veces equivale a 640 TB de escritura para el disco.

SQLite utiliza el mecanismo WAL (Write-Ahead Logging): cada cambio se escribe primero en el archivo -wal, y luego se consolida (checkpoint) en la base principal. Codex realiza decenas de miles de inserciones y eliminaciones cada 15 segundos, cada una pasando por WAL, actualización de índices y checkpoint. La misma área de almacenamiento, sobrescrita una y otra vez.

Una analogía: un cuaderno de 1 GB donde cada día borras y reescribes 1,750 veces, durante un año. El cuaderno es el mismo, pero el papel está gastado.

Esta es también la razón por la que este bug pudo permanecer oculto tanto tiempo: no ocupa espacio, solo quema vida útil.

Revisar el espacio disponible en disco no muestra anomalías, el tamaño del archivo se mantiene estable. Solo al consultar los contadores de salud SMART del disco se puede ver la acumulación silenciosa de escritura.

La causa raíz: una línea RUST_LOG ignorada

¿Por qué se registra tanto?

La respuesta está en una línea de configuración del código fuente de Codex: el 'sink' (receptor) del registro de feedback SQLite se inicializa con Targets::new().with_default(Level::TRACE).

En resumen, el registro está configurado por defecto en el nivel TRACE, el más alto, verboso y que registra todo.

El framework de registro de Codex es 'tracing' del ecosistema Rust, cuya práctica estándar es leer la variable de entorno RUST_LOG. Los usuarios lo intentaron, ajustando RUST_LOG a info, warn, incluso desactivándolo.

Inútil.

with_default(Level::TRACE) fija rígidamente el nivel predeterminado global en TRACE. RUST_LOG no tiene efecto en esta ruta. Crees que has desactivado el registro, pero sigue escribiendo.

Lo más engañoso de este tipo de bug no es que 'olvidaras configurarlo', sino que 'lo configuraste, y lo ignoró'.

Otro dato revelador es una proporción.

Separando los registros retenidos por categoría, TRACE representa el 70.7%, unos 732.5 MB. Sumando los dos flujos de telemetría espejada codex_otel (log_only y trace_safe), se añade otro 25.3%.

El 70% de la escritura es ruido TRACE. Sumando la telemetría espejada, el 96% son detalles irrelevantes que nadie revisaría.

Solo el 4% es contenido realmente significativo.

No es el primero, al menos es el noveno

El informante revisó el repositorio de Codex y descubrió que hay al menos 9 issues sobre 'crecimiento ilimitado de registros'.

#17320, escritura frenética de WAL durante respuestas en flujo, misma causa raíz que esta vez: TRACE ignorando RUST_LOG.

#24275, logs_2.sqlite en la versión de escritorio crece descontroladamente.

#22444, WAL crece infinitamente y no libera espacio.

#26374, escribe 0.75 GB al día, sin rotación.

#27911, una base de datos goals_1.sqlite de 4 KB, escrita a 11 MB/s.

#20563, el proceso escribe frenéticamente en disco incluso inactivo.

#27020, actividad de disco al 100% en Windows.

El origen más temprano se remonta a #12969, el PR que introdujo el 'sink' del registro de feedback SQLite configurado en nivel TRACE.

Una base de datos de 4 KB escrita a 11 MB por segundo merecería un artículo por sí sola. Y es un síntoma del mismo producto, del mismo sistema de telemetría que el de los 640 TB.

Esto indica que el sistema de registro y telemetría de Codex, desde el principio, carecía del concepto de 'presupuesto de recursos'.

Toda la industria compite por presupuesto de tokens, longitud de contexto, capacidad del modelo.

Pero casi nadie pregunta: ¿quién controla el presupuesto de disco, memoria, CPU de un Agente que se ejecuta 7x24 en la máquina del usuario?

Se corrigió, pero de manera muy 'OpenAI'

Reportado en GitHub el 14 de junio. El 23 de junio, el informante actualizó: tres PRs fusionados. Según sus propias pruebas en Codex, reducen aproximadamente el 85% del registro, por lo que cerró el issue.

Primero, ese 85%: no es el 100%, y aún no está completamente implementado.

De las tres correcciones, #29432 y #29457 se lanzaron con la versión 0.142.0, eliminando los registros WebSocket línea por línea y objetivos de ruido; la tercera, #29599, desactiva otro tipo de registros redundantes introducidos por puente, y llegará con la versión 0.143.0.

Incluso con las tres implementadas, el 15% restante aún supondría escribir unos 96 TB al año, pasando de 'agotar el disco en un año' a 'agotarlo en seis años'.

Algunos defienden la postura: los registros TRACE se almacenan por diseño para depuración, no es un bug, y son útiles para que OpenAI investigue casos límite.

Pero el problema reside precisamente ahí: usar la vida útil de las SSD de usuarios que pagan, como almacenamiento gratuito para la depuración del fabricante. ¿Los usuarios dieron su consentimiento para eso?

El campo de batalla de la programación: lo que se agota no es solo la SSD

Curiosamente, no solo Codex recibió críticas.

En los comentarios rápidamente añadieron: Claude Code también escribe registros de depuración intensivamente en local, obligando a algunos a enlazar el directorio de registros a un disco en RAM (tmpfs) para salvar sus SSD.

Dos herramientas líderes, la misma clase de problema.

Los comentarios de la comunidad pronto pasaron de un bug específico a cuestionar la calidad general de las herramientas de programación con IA.

Algunos se quejan de que estos agentes mantienen la GPU al máximo, consumen 70 GB de memoria, otros acuñaron un nombre para esta generación de software: software defectuoso (slopware).

La sugerencia original del desarrollador era simple: establecer un límite para la aplicación, que no supere los 3 GB. Solo esa línea, Codex tardó 9 Issues y varios meses en trazarla.

La pregunta es: ¿por qué una empresa que siempre habla de 'AGI' tropieza con un problema que un ingeniero en prácticas podría detectar?

¿Por qué pudo permanecer oculto tanto tiempo? Un comentario dio en el clavo.

Hace una década, con el registro en TRACE, el programa se colgaría al instante y se corregiría el mismo día. Hoy, las CPUs son rápidas, la memoria es grande, los discos son potentes. Este defecto es absorbido silenciosamente por el rendimiento del hardware. El programa funciona, la interfaz responde, el usuario no nota nada, hasta que un día la SSD falla prematuramente.

En los últimos años, el software se llena de código generado por IA, las funciones se acumulan, las capas de abstracción se apilan, el consumo de recursos se dispara, sostenido solo por hardware más rápido cada año.

Así surge un ciclo absurdo: el software se escribe peor, el hardware se fabrica más potente. Los usuarios, con la ilusión de que 'no va más lento', pagan por máquinas nuevas, que apenas sostienen software peor.

Un pequeño bug no derribará a OpenAI. Pero la competencia entre Codex y Claude Code ya se extiende desde la capacidad del modelo hasta la entrada del flujo de trabajo del desarrollador.

En este frente, cambiar rápidamente y responder a las necesidades de los desarrolladores no es un punto a favor, es el precio de entrada.

Referencias:

https://github.com/openai/codex/issues/28224

https://news.ycombinator.com/item?id=48626930

Este artículo proviene del WeChat público '新智元' (Nueva Era de la Inteligencia), autor: ASI启示录

Cryptos en tendance

Questions liées

Q¿Cuál es el principal problema reportado con Codex de OpenAI?

AEl principal problema es que la función de registro de comentarios de Codex escribe aproximadamente 640 TB de datos al año en el disco duro del usuario, utilizando un mecanismo 'insertar y podar' (insert-and-prune) en una base de datos SQLite. Esto agota rápidamente la vida útil de un SSD de consumo, que suele tener un límite de escritura total (TBW) de entre 150 y 600 TB.

Q¿Por qué el archivo de registro `logs_2.sqlite` no crece mucho en tamaño pero aún así daña el SSD?

AEl archivo `logs_2.sqlite` se mantiene alrededor de 1 GB porque usa un mecanismo de 'insertar y podar', donde constantemente se añaden y eliminan filas. Sin embargo, cada operación de escritura (inserción o eliminación) cuenta para el desgaste del SSD, independientemente del tamaño final del archivo. Es como reescribir constantemente las mismas páginas de un cuaderno, desgastándolas aunque el número de páginas no aumente.

Q¿Cuál fue la causa raíz de la generación excesiva de logs en Codex?

ALa causa raíz fue una configuración de código que establecía el nivel de registro por defecto en TRACE (`with_default(Level::TRACE)`), el nivel más detallado. Esta configuración anulaba las variables de entorno como `RUST_LOG`, haciendo que el software registrara grandes cantidades de datos de depuración irrelevantes (como eventos del sistema de archivos) las 24 horas del día, incluso si el usuario intentaba desactivar los logs.

Q¿Cómo respondió OpenAI al problema y cuál fue el resultado?

AOpenAI fusionó tres solicitudes de cambios (pull requests) en el código para abordar el problema. Estas correcciones redujeron aproximadamente un 85% la escritura de logs. Sin embargo, incluso después de las correcciones, se estima que el software aún escribirá unos 96 TB al año, lo que sigue siendo un desgaste significativo para el hardware del usuario.

QSegún el artículo, ¿qué término se utiliza para describir software de baja calidad como el que exhibe este bug?

AEl artículo menciona que en los comentarios de Hacker News, este tipo de software se describe como 'slopware' (una combinación de 'slop', que significa bazofia, y 'software'), traducido en el texto como 'software de baja calidad' o 'software chapucero'. Se critica que, a pesar de los avances en IA, se descuiden aspectos básicos de la ingeniería de software y la gestión de recursos.

Lectures associées

Anthropic crée un « Code pénal » pour les jailbreaks de l'IA : vos requêtes, quatre manières de mourir

Anthropic, la société derrière l'IA Claude, a dévoilé un système de classification strict nommé CJS (Cyber Jailbreak Severity) pour évaluer et contrer les tentatives de "jailbreak" (contournement des garde-fous) de ses modèles. Ce cadre classe les requêtes des utilisateurs en quatre catégories de risque, des activités malveillantes (bloquées) aux activités bénignes (autorisées). Cependant, sa sensibilité excessive entraîne de nombreux faux positifs, bloquant des demandes légitimes comme du débogage. Le système CJS évalue la gravité d'un jailbreak sur quatre axes : le gain de capacité, l'étendue des capacités, la difficulté de weaponisation et la découvrabilité. Un score total de 0 à 10 détermine la réponse appropriée, de l'ignorance à la désactivation du modèle. Ce cadre vise à fournir une métrique objective, mais soulève des questions car Anthropic, qui développe également des modèles avancés comme Mythos réservés à des partenaires, définit seule les règles. Cette initiative intervient après que le modèle Fable 5 a été temporairement retiré suite à une demande de conformité aux contrôles à l'exportation américains, marquant une extension de ces régulations aux API d'IA. Ainsi, le CJS n'est pas seulement un outil technique ; il sert aussi de référence potentielle pour les décisions réglementaires futures, traçant une ligne floue entre sécurité et restriction de l'innovation, où les utilisateurs doivent constamment adapter leur langage pour éviter des blocages injustifiés.

marsbitIl y a 25 mins

Anthropic crée un « Code pénal » pour les jailbreaks de l'IA : vos requêtes, quatre manières de mourir

marsbitIl y a 25 mins

2,4k étoiles en un clin d'œil : avec une seule commande, l'IA apprend à trouver ses propres compétences

Le projet « skills » de Vercel, une sorte de gestionnaire de paquets « npm » pour les agents d'IA, connaît un succès fulgurant avec 24 000 étoiles sur GitHub. Il permet aux développeurs d'ajouter des compétences (skills) à leurs assistants IA (comme Claude Code, Cursor) via une simple commande : `npx skills add <package>`. Ces paquets encapsulent des connaissances spécifiques (bonnes pratiques React, conventions d'équipe) dans un dossier contenant un fichier SKILL.md et éventuellement des scripts. La plateforme skills.sh propose un répertoire et un classement des paquets les plus populaires, comme « find-skills » (2,3 millions d'installations). Cette « compétence » permet à l'IA de rechercher et d'installer automatiquement d'autres skills pertinents en fonction d'une demande utilisateur, agissant comme un moteur de recherche de capacités. Cependant, cette commodité s'accompagne de risques de sécurité majeurs. Des audits (comme celui de Snyk « ToxicSkills ») révèlent qu'une part significative des skills tiers contient des vulnérabilités ou des charges malveillantes, pouvant conduire à des injections de prompt, des fuites de clés ou l'exécution de code arbitraire. Contrairement à npm, les skills mélangent instructions, code et accès système, amplifiant les menaces. En somme, Vercel réplique dans l'ère de l'IA sa stratégie réussie avec Next.js : simplifier et standardiser des flux complexes en une commande. Mais l'écosystème naissant des compétences d'IA hérite aussi des pièges classiques des gestionnaires de paquets, nécessitant une vigilance accrue quant à la source et aux permissions des paquets installés.

marsbitIl y a 30 mins

2,4k étoiles en un clin d'œil : avec une seule commande, l'IA apprend à trouver ses propres compétences

marsbitIl y a 30 mins

Le développeur Claude livre enfin « Fable 5 Fén Jué » pour vous apprendre à briser le déficit d'information avec le modèle

Fable 5, depuis son lancement, a connu un parcours tumultueux, passant des attentes élevées à une interdiction par le gouvernement américain. Aujourd’hui, l’accent est remis sur la productivité. Thariq Shihipar, ingénieur chez Claude Code, a publié un guide détaillé pour utiliser efficacement Fable 5. Le cœur du problème : l’écart d’information entre l’utilisateur et le modèle. Thariq appelle cela les « inconnues » – la différence entre les instructions données (la « carte ») et la réalité de la tâche (le « territoire »). La qualité du travail dépend de notre capacité à réduire ces inconnues. Il identifie quatre types d’inconnues : - Les **connues connues** : ce que nous spécifions clairement. - Les **connues inconnues** : ce que nous savons ne pas savoir. - Les **inconnues connues** : ce qui est évident pour nous mais pas explicité. - Les **inconnues inconnues** : ce que nous ignorons totalement. Le guide propose des méthodes pour les découvrir à chaque étape : **Avant l’implémentation** : - **Scan des angles morts** : Demander à Claude d’identifier les « inconnues inconnues ». - **Brainstorming et prototypage** : Explorer des idées visuelles ou fonctionnelles pour clarifier les attentes. - **Contre-interrogatoire** : Laisser Claude poser des questions pour éliminer les ambiguïtés. - **Références** : Fournir du code ou des exemples concrets comme modèles. - **Plan d’implémentation** : Faire rédiger un plan par Claude pour valider l’approche. **Pendant l’implémentation** : - **Notes d’implémentation** : Maintenir un fichier pour documenter les décisions et écarts. **Après l’implémentation** : - **Documentation explicative** : Créer un résumé clair pour faciliter les revues et l’approbation. - **Test de compréhension** : Se faire interroger par Claude pour s’assurer de maîtriser les changements. Thariq illustre cette approche avec la création de la vidéo de lancement de Fable, entièrement éditée par Claude Code. Il a dû découvrir ses « inconnues » en matière de montage et d’étalonnage pour guider efficacement le modèle. En conclusion, plus le modèle est puissant, plus une méthode structurée pour identifier et réduire les inconnues devient cruciale. Chaque prototype, brainstorming ou question est une opportunité d’aligner la « carte » et le « territoire » avant de s’engager profondément dans la réalisation.

marsbitIl y a 34 mins

Le développeur Claude livre enfin « Fable 5 Fén Jué » pour vous apprendre à briser le déficit d'information avec le modèle

marsbitIl y a 34 mins

Les tokens dévorent 30% des salaires, la facture IA de la Silicon Valley devient incontrôlable

Les coûts liés aux jetons (tokens) d'IA, représentant désormais 30 % de la masse salariale chez certains acteurs comme SemiAnalysis, illustrent la transformation radicale de la productivité dans les services spécialisés. Si cette dépense achète une efficacité plusieurs fois supérieure au travail humain pour des tâches comme l'analyse de données, d'autres géants technologiques comme Uber ou Microsoft font face à des factures d'IA explosives et à un retour sur investissement encore incertain. Le paradoxe actuel est frappant : les investissements en IA explosent (7400 milliards de dollars en 2024), tandis que les réductions de coûts se poursuivent. Pourtant, l'impact économique mesurable reste limité. La thèse centrale de l'article est que cette phase de construction d'infrastructure précède toujours l'arrivée des bénéfices. L'optimisme repose sur une baisse structurelle des coûts. Grâce aux progrès matériels (ex: GB300 NVL72, +32x de débit) et logiciels (optimisations logicielles multipliant les performances par 14), le prix réel du traitement des jetons s'effondre. Chez SemiAnalysis, un coût affiché de 5$/million de tokens est ramené à 0.99$ grâce à un cache efficace et un ratio entrée/sortie favorable. Cette déflation devrait se poursuivre, rendant l'IA de plus en plus accessible. Le choix pour les entreprises est désormais clair : adopter dès maintenant ces outils pour gagner un avantage concurrentiel décisif, ou attendre et risquer de prendre un retard considérable.

marsbitIl y a 35 mins

Les tokens dévorent 30% des salaires, la facture IA de la Silicon Valley devient incontrôlable

marsbitIl y a 35 mins

Trading

Spot

Articles tendance

Comment acheter T

Bienvenue sur HTX.com ! Nous vous permettons d'acheter Threshold Network Token (T) de manière simple et pratique. Suivez notre guide étape par étape pour commencer votre parcours crypto.Étape 1 : Création de votre compte HTXUtilisez votre adresse e-mail ou votre numéro de téléphone pour ouvrir un compte sur HTX gratuitement. L'inscription se fait en toute simplicité et débloque toutes les fonctionnalités.Créer mon compteÉtape 2 : Choix du mode de paiement (rubrique Acheter des cryptosCarte de crédit/débit : utilisez votre carte Visa ou Mastercard pour acheter instantanément Threshold Network Token (T).Solde :utilisez les fonds du solde de votre compte HTX pour trader en toute simplicité.Prestataire tiers :pour accroître la commodité d'utilisation, nous avons ajouté des modes de paiement populaires tels que Google Pay et Apple Pay.P2P :tradez directement avec d'autres utilisateurs sur HTX.OTC (de gré à gré) : nous offrons des services personnalisés et des taux de change compétitifs aux traders.Étape 3 : stockage de vos Threshold Network Token (T)Après avoir acheté vos Threshold Network Token (T), stockez-les sur votre compte HTX. Vous pouvez également les envoyer ailleurs via un transfert sur la blockchain ou les utiliser pour trader d'autres cryptos.Étape 4 : tradez des Threshold Network Token (T)Tradez facilement Threshold Network Token (T) sur le marché Spot de HTX. Il vous suffit d'accéder à votre compte, de sélectionner la paire de trading, d'exécuter vos trades et de les suivre en temps réel. Nous offrons une expérience conviviale aux débutants comme aux traders chevronnés.

579 vues totalesPublié le 2024.12.10Mis à jour le 2026.06.02

Comment acheter T

Discussions

Bienvenue dans la Communauté HTX. Ici, vous pouvez vous tenir informé(e) des derniers développements de la plateforme et accéder à des analyses de marché professionnelles. Les opinions des utilisateurs sur le prix de T (T) sont présentées ci-dessous.

活动图片