From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 8FA595D5 for ; Tue, 11 Jan 2022 08:21:15 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.88,279,1635199200"; d="scan'208,217";a="14951936" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 11 Jan 2022 09:21:13 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 7FDF8E01B8; Tue, 11 Jan 2022 09:21:13 +0100 (CET) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 1D9B1E008D for ; Tue, 11 Jan 2022 09:21:08 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=2ij7=R3=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-PHdr: =?us-ascii?q?A9a23=3ASaXoIhwy1r3omizXCzKkzFBlVkEcU1XcAAcZ59I?= =?us-ascii?q?dhq5Udez7ptK+ZhWZvKg0xw6RFazgqNt8w9LMtK7hXWFSqb2gi1slNKJ2ahkel?= =?us-ascii?q?M8NlBYhCsPWQWfyLfrtcjBoVJ8aDAwt8H60K1VaF9jjbFPOvHKy8SQSGhLiPgZ?= =?us-ascii?q?pO+j5AIHfg9qq2+yo5pHeYxhEiDW5bL9uMR67sRjfus4KjIV4N60/0AHJonxGe?= =?us-ascii?q?+RXwWNnO1eelAvi68mz4ZBu7T1et+ou+MBcX6r6eb84TaFDAzQ9L281/szrugL?= =?us-ascii?q?dQgaJ+3ART38ZkhtMAwjC8RH6QpL8uTb0u+ZhxCWXO9D9QrcpVzS/9KdrUAHnh?= =?us-ascii?q?zsbNzA392HXj9Z/jKNdoBm8oxByzIrZbISTOfZ+fa3de80aRWtaXsZQTCNBBp2?= =?us-ascii?q?zZJYBDuoGJ+ZXspL9rEYKoRawGQWgAeXiwSJKiHDrx603y+QvHx/b0gIuHNwBv?= =?us-ascii?q?2jboc7vO6sOS+241rXEwSnBYv5QxDzz6JLIchckofyUQb9wddDeyU8yHA3Yklq?= =?us-ascii?q?QqYnlPzKJ1uQRrmOW6PBvVea1hG4hsQ1xuSSgxscpionImoIV1kvJ9T1+wIYxJ?= =?us-ascii?q?dy4VFB0bsKkEJtWtiGaLpZ2Td04T2FvoiY6xaQLtJimdycF1Jop3QTQa+Cbc4e?= =?us-ascii?q?W+BLjUv6cLzhkiH54d7yzmgi//FauxOD8WcS50lhEojdbn9fMqH0A2ALe58qZR?= =?us-ascii?q?/Zg/Eqs2TWC2gTd5+9LPE06laTVJ4I9zrM2i5Edv0PDHirsl0X3iq+bbl0k9fa?= =?us-ascii?q?06+TmfrXpuIecN4hxigH7LKsigMq/DvokMgQWWGiU5f6z1Ljn/UHjR7VKlPI2n?= =?us-ascii?q?rHYsJDcP8Qbp7S2DxVb0oY58xq/ADam0MgYnXkaN11JYg6Ij4/sO13WL/D4DOu?= =?us-ascii?q?/g1SxkDhw3fzGP7rhDo3MLnfdjLfhc6xx60lGyAo81dxf5o9bC7EFIPL3QEPxs?= =?us-ascii?q?8bYDhA/PgepwOjnEM1w2p4AVW+LGKOVLb/evFCS6u8hP+WAfoEYtTnlJ/Q46fP?= =?us-ascii?q?ikGU1lUEdcKSmx5cbdWy0Eu57L0ibfXbhhMoKH30QsQokVuPqjUWPUT5NaHa2W?= =?us-ascii?q?KIx/jQ7CY27AYvZXoCth7iB3SenHpJIem9GClaMEXbxd4WZRfgAciWSItVukjA?= =?us-ascii?q?cVLihTZEu1Q22uQPn1bZqKvDY9jAEuZ/sztR46fHfmQs8+DF7F8id1nuCT2Bwn?= =?us-ascii?q?mMGXT8226V/rFRgxFmfzKZ0n+RVGcJS5/NLUAo3LYLSwuJiBtDqXQLBeteISEq?= =?us-ascii?q?4Tdq6ATExSNMxw8YTY0ljAdmiiQrD3yWyDrAPk7yEHpo0/rjH33ftJ8Z9znfG1?= =?us-ascii?q?LU9j1Q9WcRPMnCmhqhj+AfNHI7FiUCZmqmldKgG2y7N7miDwXKUvE5ESA5wTbn?= =?us-ascii?q?FXXcHa0TKt9v540fCQ6aqCbQmKQtB1dWPKrBKa93slVVJXu3vONXYY2Krmme/H?= =?us-ascii?q?wyExr2WbNmiR2JIliHCDgJMxwQM+16CKg54ACq99SaWRjdxExinKxfn7u9WrHK?= =?us-ascii?q?gUlRyzg2ba0kn0KC6rFpdjvWZT7YX36kYkCYnsTR9WlinjPzMDN/Vjg5oeu1na?= =?us-ascii?q?tM44UtbnTbQswV7eIerL6VjmkI2awNzrl/j3BVxC5xdnI4ttnx8n1k6Er6RzF4?= =?us-ascii?q?UL2DQ5pv3ILCCdTiaFPWHc6nSy03T29aQ+74S5bI/sVqx5WlB+WIo9Ghh2NROl?= =?us-ascii?q?X7A9tPNFgVACPoZs24y50E8v7beczUw7IPS1GRxPO+zqDCQgroU?= IronPort-Data: =?us-ascii?q?A9a23=3APhiau6qpbyJCO75k+ZFNn/dpENleBmI8ZBIvgKr?= =?us-ascii?q?LsJaIsI5as4F+vmAaX2zQPP2OYWL3fN9/bYyzph8OsZfdm9YxHFA+pC02Zn8b8?= =?us-ascii?q?sCt6faxfh6hZXvKRiHgZBs6tJtGMoGowPjZ/xYwnz/1WlTahSQ6hfHgqobUUra?= =?us-ascii?q?eYHgoHFY8EU/NtDo68wIHqt4w6TSGK1jV0T/Ci5W31G6Ng1aYAEpMg06wgE8HU?= =?us-ascii?q?MDJhd8tlgdWicanE7PpvyJ94Jo3fcldJpZjK2VeNrbSq+3rlNlV8o5FlirBBO9?= =?us-ascii?q?Jkp6jGqELarvCZE6WjX5HR6Wpgh5DvzE/lKEhO5Lwa28O0WTPxogtjo4V88fsI?= =?us-ascii?q?esqFvWkdOA1aCNjS3QkPK8ZrYWcdGC4td2PwkbGdXr13vgoC1s5aIQc8+AxGmp?= =?us-ascii?q?O8P0ENBgHaQ2FjO+thrfnWq9rnMtLwMzDZd9O5ygwkW6x4fEOG8mZHPWbv7e0x?= =?us-ascii?q?gwYjclLGbPaZtEFQSF+aQzJJRxJIFYeTpwk9NpELFHrK2gD7g+B/P9vpTDHllk?= =?us-ascii?q?pluKwboTBIYnSA5hBwROxuETt+kLVAjU7Pfqj0xyRqyr53quXiUsXQ6oXBOT+7?= =?us-ascii?q?vlukUGezWwVCQQLWB28u/bRt6J3YPoHQ2R8x8bkhfFaGI2XotjBs9mQpW7d+AY?= =?us-ascii?q?bX8tMHuY67gCU16eS5ByWboTBZiAUc8Qo7afaWhRzvmJlXfuwbdCsjFFRYXia6?= =?us-ascii?q?7GfoCj0PHQFa2gYakfoiCMe+9e55tlbYg3nF75e/W3csjExMSn3xyGWoSM+gbQ?= =?us-ascii?q?KkMNN0L+0lbwCqym0qMKPFmbZ+S2ONl+YAshFiEJJqmBmBZU3LRqNEWpBcmS8g?= =?us-ascii?q?Q=3D=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AOiGPd6tWbb6nEw29vuPpoy9n7skDcdV00zEX?= =?us-ascii?q?/kB9WHVpm62j9/xG88516faZslwssRIb+OxoWpPvfZq0z/ccirX5Vo3PYOCJgg?= =?us-ascii?q?aVBbAnxbSn6TztES/z+4dmpMRdWpk7Lsb/SXxzjcOS2njcLz/M+qjkzJyV?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CdAgAoPd1hhyIeaIFaFoNtgR8BZFc6M?= =?us-ascii?q?YRHiQOFRQElgiWDKYYgjwaFJgECTw0DAQMBDSoBDgUBAgQBAYUABAICFzoBBIJ?= =?us-ascii?q?sAh4GAQUzEwECBBUBAQUBAQECAQMDBAETAQEBAQ0LDgg0IoVoDYIiEwwMAwODd?= =?us-ascii?q?wEYCQplIwMUAQYDAgQNARcBFAoXARIagmQBgxYFCkKQV5pBBTyBCoExgQGDTgE?= =?us-ascii?q?DBwcCAxglAYNzgWQNAhQVaxeGDFRKAYJ/CYN9KRCBVUSECAduglgLAQEBAQGBO?= =?us-ascii?q?wEBVoJiF4JOBJAFDjgGLhAPDAszIgEBIDAIIwoLCBwZGwMNBQYCDgwTFgItkWg?= =?us-ascii?q?fJZdolAN6NAeDRoE2BguIFYEcjGuIHINwgUqKP5Ejhk8hlhkggiSGaQIIgQQJg?= =?us-ascii?q?j+UIASFMIFOKoFMAR0MBzMaMEMNBg2CFQEBMgkKVw+SEYE+gSaBdTuFS0AzAgE?= =?us-ascii?q?BNAIGAQoBAQMJhWMBAQUTCwGHMAEB?= X-IPAS-Result: =?us-ascii?q?A0CdAgAoPd1hhyIeaIFaFoNtgR8BZFc6MYRHiQOFRQElgiW?= =?us-ascii?q?DKYYgjwaFJgECTw0DAQMBDSoBDgUBAgQBAYUABAICFzoBBIJsAh4GAQUzEwECB?= =?us-ascii?q?BUBAQUBAQECAQMDBAETAQEBAQ0LDgg0IoVoDYIiEwwMAwODdwEYCQplIwMUAQY?= =?us-ascii?q?DAgQNARcBFAoXARIagmQBgxYFCkKQV5pBBTyBCoExgQGDTgEDBwcCAxglAYNzg?= =?us-ascii?q?WQNAhQVaxeGDFRKAYJ/CYN9KRCBVUSECAduglgLAQEBAQGBOwEBVoJiF4JOBJA?= =?us-ascii?q?FDjgGLhAPDAszIgEBIDAIIwoLCBwZGwMNBQYCDgwTFgItkWgfJZdolAN6NAeDR?= =?us-ascii?q?oE2BguIFYEcjGuIHINwgUqKP5Ejhk8hlhkggiSGaQIIgQQJgj+UIASFMIFOKoF?= =?us-ascii?q?MAR0MBzMaMEMNBg2CFQEBMgkKVw+SEYE+gSaBdTuFS0AzAgEBNAIGAQoBAQMJh?= =?us-ascii?q?WMBAQUTCwGHMAEB?= X-IronPort-AV: E=Sophos;i="5.88,279,1635199200"; d="scan'208,217";a="14951847" X-MGA-submission: =?us-ascii?q?MDGhE1g42UelZFLLWmIMRhnAnOnJyi7yZPY2Nn?= =?us-ascii?q?rmYlwBvWFzoLWQXYVBOINPRwt8VNn57M+3ZiSjtJzGW/sy430xvPALXw?= =?us-ascii?q?jAuH4baJM1h8pScJ8RdMQtz/YXxDCn2br8VmAXM9yTjiFYLwnyx+Y+3q?= =?us-ascii?q?pFP1L/x0Ty2gN5vvvT8D1dBA=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jan 2022 09:21:05 +0100 Received: from set (set.irisa.fr [131.254.10.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id BED98564770; Tue, 11 Jan 2022 09:21:03 +0100 (CET) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 11 Jan 2022 09:20:43 +0100 Message-ID: <87a6g2el9g.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jan 11 09:21:04 2022 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.002054, queueID=130F7564771 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 18643 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSmFudWFyeSAwNCB0byAxMSwNCjIwMjIuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KTmV3IHJl bGVhc2Ugb2YgUFByaW50ICgyMDIyMDEwMykNCkJvZ3VlLCB0aGUgT0NhbWwgR1VJDQpDb2h0dHAg NS4wLjAgYW5kIDIuNS42DQpNdWx0aWNvcmUgT0NhbWw6IERlY2VtYmVyIDIwMjEgYW5kIHRoZSBC aWcgUFINClNldCB1cCBPQ2FtbCAyLjAuMC1iZXRhMTINCk9sZCBDV04NCg0KDQpOZXcgcmVsZWFz ZSBvZiBQUHJpbnQgKDIwMjIwMTAzKQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4t bmV3LXJlbGVhc2Utb2YtcHByaW50LTIwMjIwMTAzLzkwOTcvMT4NCg0KDQpGcmFuw6dvaXMgUG90 dGllciBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgYW0gcGxlYXNlZCB0 byBhbm5vdW5jZSBhIG5ldyByZWxlYXNlIG9mIFBQcmludCwgdGhlIHByZXR0eS1wcmludGluZw0K ICBsaWJyYXJ5LCB3aXRoIFtpbXByb3ZlZCBkb2N1bWVudGF0aW9uXS4NCg0KICBUaGUgZG9jdW1l bnRhdGlvbiBjYW4gYWxzbyBiZSB2aWV3ZWQgb2ZmbGluZToNCg0KICDilIzilIDilIDilIDilIAN CiAg4pSCIG9wYW0gdXBkYXRlDQogIOKUgiBvcGFtIGluc3RhbGwgcHByaW50LjIwMjIwMTAzDQog IOKUgiBvcGFtIGluc3RhbGwgb2RpZw0KICDilIIgb2RpZyBvZG9jICAgICAgICAgICAgICAgICAj IHRoaXMgbWF5IHRha2Ugc29tZSB0aW1lDQogIOKUgiBvZGlnIGRvYyBwcHJpbnQgICAgICAgICAg ICMgdGhpcyBvcGVucyB0aGUgZG9jIGluIHlvdXIgYnJvd3Nlcg0KICDilJTilIDilIDilIDilIAN Cg0KICBIYXBweSBwcmV0dHktcHJpbnRpbmchDQoNCg0KW2ltcHJvdmVkIGRvY3VtZW50YXRpb25d DQo8aHR0cDovL2NhbWJpdW0uaW5yaWEuZnIvfmZwb3R0aWVyL3BwcmludC9kb2MvcHByaW50Lz4N Cg0KDQpCb2d1ZSwgdGhlIE9DYW1sIEdVSQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlz Y3Vzcy5vY2FtbC5vcmcvdC9hbm4tYm9ndWUtdGhlLW9jYW1sLWd1aS85MDk5LzE+DQoNCg0Kc2Fu ZXR0ZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgA0KDQogIEknbSBoYXBweSB0byBhbm5vdW5jZSBhIGJyYW5kIG5ldyB2ZXJzaW9u IG9mIFtCb2d1ZV0sIGEgR1VJIChHcmFwaGljYWwNCiAgVXNlciBJbnRlcmZhY2UpIGxpYnJhcnkg ZW50aXJlbHkgd3JpdHRlbiBpbiBgb2NhbWwnLCB1c2luZyBTREwyIGZvcg0KICBoYXJkd2FyZSBh Y2NlbGVyYXRlZCBncmFwaGljcy4NCg0KICBUaGUgZG9jIGNhbiBiZSBmb3VuZCBbaGVyZV0sIGl0 IHdpbGwgYmUgZW5yaWNoZWQgb3ZlciB0aW1lLg0KDQogIEluc3RhbGwgd2l0aCBgb3BhbSBpbnN0 YWxsIGJvZ3VlJw0KDQogIEluIGFkZGl0aW9uIHRvIHRoZSBsaWJyYXJ5LCB0aGlzIGluc3RhbGxz IGFuIGV4ZWN1dGFibGUgYGJvZ3VleCcgdG8NCiAgc2hvd2Nhc2UgYWJvdXQgNTAgdXNlZnVsIGNv bnN0cnVjdGlvbnMsIHNlZSBgYm9ndWV4IC1oJyBmb3IgdGhlIGxpc3QuDQoNCiAgU29tZSBzY3Jl ZW5zaG90cyBvZiBhIGRlbW8gY29tcGlsZWQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb246DQoNCiAg PGh0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFuZGFyZDExL3VwbG9hZHMvb2NhbWwv b3JpZ2luYWwvMlgvNi82MTlhNmIzYzVkN2E5ODYwZTRjMjRkZjdkOGI5MzE4MTVlOWI5NWExLnBu Zz4NCg0KICA8aHR0cHM6Ly9hd3MxLmRpc2NvdXJzZS1jZG4uY29tL3N0YW5kYXJkMTEvdXBsb2Fk cy9vY2FtbC9vcmlnaW5hbC8yWC8zLzNlNWUwNGQxZGIwMDIyZDQwNzBiN2ZkM2RhYjQ1ZjQzOTk4 MjhlOTAucG5nPg0KDQogIE5vdGUgdGhhdCBtYW55IHdpZGdldHMgYXJlIG5vdCBzaG93biBpbiB0 aGlzIGRlbW86IHRhYmxlcywgbWVudXMsDQogIGRyb3AtZG93biBzZWxlY3QgbGlzdHMsIGtub2Ig YnV0dG9ucyzigKYgSSB3aWxsIGFkZCBtb3JlIGltYWdlcyB0byB0aGUNCiAgZG9jIHdoZW4gSSBo YXZlIHNvbWUgdGltZSENCg0KDQpbQm9ndWVdIDxodHRwczovL2dpdGh1Yi5jb20vc2FuZXR0ZS9i b2d1ZT4NCg0KW2hlcmVdIDxodHRwOi8vc2FuZXR0ZS5naXRodWIuaW8vYm9ndWUvUHJpbmNpcGxl cy5odG1sPg0KDQoNCkNvaHR0cCA1LjAuMCBhbmQgMi41LjYNCuKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hp dmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWNvaHR0cC01LTAtMC1hbmQt Mi01LTYvOTEwOS8xPg0KDQoNCk1hcmNlbGxvIFNlcmkgYW5ub3VuY2VkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBXZSBhcmUgZ2xhZCB0byBhbm5vdW5jZSB0aGUgcmVsZWFzZSBvZiB2ZXJzaW9uIFs1LjAu MF0gYW5kIFsyLjUuNl0gb2YNCiAgY29odHRwIGFuZCBpdHMgZGVwZW5kZW50IHBhY2thZ2VzLg0K DQogIFRoZSBsYXR0ZXIgaXMgYSBidWcgZml4IHJlbGVhc2UgdGhhdCBpbiBwYXJ0aWN1bGFyIGJh Y2twb3J0cyB0aGUNCiAgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB1cGNvbWluZyByZWxlYXNlIDAu MTUgb2YgY29yZSBhbmQgYXN5bmMuDQoNCiAgVGhlIGZpcnN0IGludHJvZHVjZXMgdGhlIGJyZWFr aW5nIGNoYW5nZXMgW2Fubm91bmNlZCBpbiB0aGUgcHJldmlvdXMNCiAgcmVsZWFzZV0uIEkgYXBw ZW5kIHRoZSBjaGFuZ2Vsb2cgYmVsb3csIHdoaWNoIGV4cGxhaW5zIGluIGRldGFpbHMgdGhlDQog IGNoYW5nZXMgYW5kIGVtcGhhc2l6ZXMgdGhlIGJyZWFraW5nIGNoYW5nZXM6DQoNCg0KWzUuMC4w XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvcHVsbC8yMDI0NiNp c3N1ZS0xMDgwOTg2NTEwPg0KDQpbMi41LjZdDQo8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29w YW0tcmVwb3NpdG9yeS9wdWxsLzIwMjQ1I2lzc3VlLTEwODA4MjIyMTU+DQoNClthbm5vdW5jZWQg aW4gdGhlIHByZXZpb3VzIHJlbGVhc2VdDQo8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fu bi1yZWxlYXNlLW9mLWNvaHR0cC00LTAtMC83NTM3Pg0KDQpDb2h0dHAuSGVhZGVyOiBuZXcgaW1w bGVtZW50YXRpb24gKGx5cm0gIzc0NykNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiBO ZXcgaW1wbGVtZW50YXRpb24gb2YgSGVhZGVyIG1vZHVsZXMgdXNpbmcgYW4gYXNzb2NpYXRpdmUg bGlzdA0KICAgIGluc3RlYWQgb2YgYSBtYXAsIHdpdGggb25lIG1ham9yIHNlbWFudGljIGNoYW5n ZSAoZnVuY3Rpb24gYGdldCcsDQogICAgc2VlIGJlbG93KSwgYW5kIHNvbWUgbmV3IGZ1bmN0aW9u cyAoYGNsZWFuX2R1cCcsIGBnZXRfbXVsdGlfY29uY2F0JykNCiAg4oCiIE1vcmUgQWxjb3Rlc3Qg dGVzdHMgYXMgd2VsbCBhcyBmdXp6aW5nIHRlc3RzIGZvciB0aGlzIHBhcnRpY3VsYXINCiAgICBt b2R1bGUuDQoNCg0KUHVycG9zZQ0K4pSE4pSE4pSE4pSE4pSE4pSE4pSEDQoNCiAgVGhlIG5ldyBo ZWFkZXIgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBhc3NvY2lhdGl2ZSBsaXN0IGluc3RlYWQgb2Yg YQ0KICBtYXAgdG8gcmVwcmVzZW50IGhlYWRlcnMgYW5kIGlzIGZvY3VzZWQgb24gcHJlZGljdGFi aWxpdHkgYW5kDQogIGludHVpdGl2aXR5OiBleGNlcHQgZm9yIHNvbWUgc3BlY2lmaWMgYW5kIGRv Y3VtZW50ZWQgZnVuY3Rpb25zLCB0aGUNCiAgaGVhZGVycyBhcmUgYWx3YXlzIGtlcHQgaW4gdHJh bnNtaXNzaW9uIG9yZGVyLCB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcNCiAgZWFzaWVyIGFuZCBpcyBh bHNvIGltcG9ydGFudCBmb3IgW1JGQzcyMzDCpzMuMi4yXSB0aGF0IHN0YXRlcyB0aGF0DQogIG11 bHRpcGxlIHZhbHVlcyBvZiBhIGhlYWRlciBtdXN0IGJlIGtlcHQgaW4gb3JkZXIuDQoNCiAgQWxz bywgdG8gZ2V0IGFuIGludHVpdGl2ZSBmdW5jdGlvbiBiZWhhdmlvdXIsIG5vIGV4dHJhIHdvcmsg dG8gZW5mb3JjZQ0KICBSRkNzIGlzIGRvbmUgYnkgdGhlIGJhc2ljIGZ1bmN0aW9ucy4gRm9yIGV4 YW1wbGUsIFJGQzcyMzDCpzMuMi4yDQogIHJlcXVpcmVzIHRoYXQgYSBzZW5kZXIgZG9lcyBub3Qg c2VuZCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGEgbm9uDQogIGxpc3QtdmFsdWUgaGVhZGVyLiBUaGlz IHBhcnRpY3VsYXIgcnVsZSBjb3VsZCByZXF1aXJlIHRoZSBgSGVhZGVyLmFkZCcNCiAgZnVuY3Rp b24gdG8gcmVtb3ZlIHByZXZpb3VzIHZhbHVlcyBvZiBub24tbGlzdC12YWx1ZSBoZWFkZXJzLCB3 aGljaA0KICBtZWFucyBzb21lIGNoYW5nZXMgb2YgdGhlIGhlYWRlcnMgd291bGQgYmUgb3V0IG9m IGNvbnRyb2wgb2YgdGhlDQogIHVzZXIuIFdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24s IGFuIHVzZXIgaGFzIHRvIGFjdGl2ZWx5IGNhbGwNCiAgZGVkaWNhdGVkIGZ1bmN0aW9ucyB0byBl bmZvcmNlIHN1Y2ggUkZDcyAoaGVyZSBgSGVhZGVyLmNsZWFuX2R1cCcpLg0KDQoNCltSRkM3MjMw wqczLjIuMl0gPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4y LjI+DQoNCg0KU2VtYW50aWMgY2hhbmdlcw0K4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE 4pSE4pSE4pSE4pSE4pSE4pSEDQoNCiAgVHdvIGZ1bmN0aW9ucyBoYXZlIGEgc2VtYW50aWMgY2hh bmdlIDogYGdldCcgYW5kIGB1cGRhdGUnLg0KDQoNCmdldA0K4pSI4pSI4pSIDQoNCiAgICBgZ2V0 JyB3YXMgcHJldmlvdXNseSBkb2luZyBtb3JlIHRoYW4ganVzdCByZXR1cm5zIHRoZSB2YWx1ZQ0K ICBhc3NvY2lhdGVkIHRvIGEga2V5OyBpdCB3YXMgYWxzbyBjaGVja2luZyBpZiB0aGUgc2VhcmNo ZWQgaGVhZGVyIGNvdWxkDQogIGhhdmUgbXVsdGlwbGUgdmFsdWVzOiBpZiBub3QsIHRoZSBsYXN0 IHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGhlYWRlcg0KICB3YXMgcmV0dXJuZWQ7IG90aGVyd2lz ZSwgYWxsIHRoZSBhc3NvY2lhdGVkIHZhbHVlcyB3ZXJlIGNvbmNhdGVuYXRlZA0KICBhbmQgcmV0 dXJuZWQuIFRoaXMgc2VtYW50aWNzIGRvZXMgbm90IG1hdGNoIHRoZSBnbG9iYWwgaWRlYSBiZWhp bmQgdGhlDQogIG5ldyBoZWFkZXIgaW1wbGVtZW50YXRpb24sIGFuZCB3b3VsZCBhbHNvIGJlIHZl cnkgaW5lZmZpY2llbnQuDQoNCiAg4oGDIFRoZSBuZXcgYGdldCcgZnVuY3Rpb24gb25seSByZXR1 cm5zIHRoZSBsYXN0IHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlDQogICAgc2VhcmNoZWQgaGVhZGVy Lg0KICDigYMgYGdldF9tdWx0aV9jb25jYXQnIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIGdl dCBhIHJlc3VsdCBzaW1pbGFyDQogICAgdG8gdGhlIHByZXZpb3VzIGBnZXQnIGZ1bmN0aW9uLg0K DQoNCnVwZGF0ZQ0K4pSI4pSI4pSI4pSI4pSI4pSIDQoNCiAgYHVwZGF0ZScgaXMgYSBwcmV0dHkg bmV3IGZ1bmN0aW9uICgjNzAzKSBhbmQgY2hhbmdlcyBhcmUgbWlub3IgYW5kDQogIHJlbGF0ZWQg dG8gYGdldCcgc2VtYW50aWMgY2hhbmdlcy4NCg0KICDigYMgYHVwZGF0ZSBoIGsgZicgaXMgbm93 IG1vZGlmeWluZyBvbmx5IHRoZSBsYXN0IG9jY3VycmVuY2VzIG9mIHRoZQ0KICAgIGhlYWRlciBg aycgaW5zdGVhZCBvZiBhbGwgaXRzIG9jY3VycmVuY2VzLg0KICDigYMgYSBuZXcgZnVuY3Rpb24g YHVwZGF0ZV9hbGwnIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIGFuZCB3b3JrIG9uIGFsbA0KICAg IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgdXBkYXRlZCBoZWFkZXIuDQoNCg0KTmV3IGZ1bmN0aW9u cyA6DQrilITilITilITilITilITilITilITilITilITilITilITilITilITilITilIQNCg0KICDi gYMgYGNsZWFuX2R1cCcgZW5hYmxlcyB0aGUgdXNlciB0byBjbGVhbiBoZWFkZXJzIHRoYXQgZm9s bG93cyB0aGUNCiAgICBbUkZDNzIzMMKnMy4yLjJdIChubyBkdXBsaWNhdGUsIGV4Y2VwdCBgc2V0 LWNvb2tpZScpDQogIOKBgyBgZ2V0X211bHRpX2NvbmNhdCcgaGFzIGJlZW4gYWRkZWQgdG8gZ2V0 IGEgcmVzdWx0IHNpbWlsYXIgdG8gdGhlDQogICAgcHJldmlvdXMgYGdldCcgZnVuY3Rpb24uDQoN Cg0KW1JGQzcyMzDCpzMuMi4yXSA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAj c2VjdGlvbi0zLjIuMj4NCg0KDQpDb2h0dHAuSGVhZGVyOiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVu dCAobXNlcmksIGFudXJhZ3NvbmkgIzc3OCkNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogICAgKkJy ZWFraW5nKiB0aGUgaGVhZGVycyBhcmUgbm8tbG9uZ2VyIGxvd2VyY2FzZWQgd2hlbiBwYXJzZWQs IHRoZQ0KICBoZWFkZXJzIGtleSBjb21wYXJpc29uIGlzIGNhc2UgaW5zZW5zaXRpdmUgaW5zdGVh ZC4NCg0KDQpjb2h0dHAtbHd0LXVuaXg6IEFkb3B0IG9jYW1sLWNvbmR1aXQgNS4wLjAgKHNtb3Jp bW90byAjNzg3KQ0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgKkJyZWFraW5nKiBgQ29uZHVpdF9sd3RfdW5peC5jb25u ZWN0JydzIGBjdHgnIHBhcmFtIHR5cGUgY2hhZ2VkIGZyb20NCiAgIGBjdHgnIHRvIGBjdHggTGF6 eS50Jw0KDQoNCm90aGVyIGNoYW5nZXMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIOKAoiBjb2h0dHAtbWlyYWdlOiBmaXggZGVwcmVjYXRlZCBmbXQgdXNhZ2Ug KHRtY2dpbGNocmlzdCAjNzgzKQ0KICDigKIgbHd0X2pzb286IFVzZSBsb2dzIGZvciB0aGUgd2Fy bmluZ3MgYW5kIGRvY3VtZW50IGl0IChtc2VyaSAjNzc2KQ0KICDigKIgbHd0OiBVc2UgbG9ncyB0 byB3YXJuIHVzZXJzIGFib3V0IGxlYWtlZCBib2RpZXMgYW5kIGRvY3VtZW50IGl0DQogICAgKG1z ZXJpICM3NzEpDQogIOKAoiBsd3QsIGx3dF91bml4OiBJbXByb3ZlIHVzZSBvZiBsb2dzIGFuZCB0 aGUgZG9jdW1lbnRhdGlvbiwgZml4IGJ1ZyBpbg0KICAgIHRoZSBEZWJ1Zy5lbmFibGVfZGVidWcg ZnVuY3Rpb24gKG1zZXJpICM3NzIpDQogIOKAoiBsd3RfanNvbzogRml4IGV4Y2VwdGlvbiBvbiBj b25uZWN0aW9uIGVycm9ycyBpbiBjaHJvbWUgKG1lZnlsICM3NjEpDQogIOKAoiBsd3RfanNvbzog Rml4IGBMd3Qud2FrZXVwX2V4bicgYEludmFsaWRfYXJnJyBleGNlcHRpb24gd2hlbiBhIGpzDQog ICAgc3RhY2sgb3ZlcmZsb3cgaGFwcGVucyBpbiB0aGUgWEhSIGNvbXBsZXRpb24gaGFuZGxlciAo bWVmeWwgIzc2MikuDQogIOKAoiBsd3RfanNvbzogQWRkIHRlc3Qgc3VpdGUgKG1lZnlsICM3NjQp Lg0KDQogIFdlIHdpc2ggdG8gdGhhbmsgdG8gYWxsIHRoZSB1c2VycyBhbmQgdGhlIGNvbnRyaWJ1 dG9ycyBmb3IgdGhlaXIgaGVscA0KICBsZWFkaW5nIHRvIHRoaXMgcmVsZWFzZS4NCg0KDQpNdWx0 aWNvcmUgT0NhbWw6IERlY2VtYmVyIDIwMjEgYW5kIHRoZSBCaWcgUFINCuKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvbXVs dGljb3JlLW9jYW1sLWRlY2VtYmVyLTIwMjEtYW5kLXRoZS1iaWctcHIvOTExNS8xPg0KDQoNCkFu aWwgTWFkaGF2YXBlZGR5IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg V2VsY29tZSB0byB0aGUgRGVjZW1iZXIgMjAyMSBbTXVsdGljb3JlIE9DYW1sXSBtb250aGx5IHJl cG9ydCEgIFRoZQ0KICBbcHJldmlvdXMgdXBkYXRlc10gYWxvbmcgd2l0aCB0aGlzIHVwZGF0ZSBo YXZlIGJlZW4gY29tcGlsZWQgYnkNCiAgbXlzZWxmLCBAY3RrMjEsIEBrYXljZWVzcmsgYW5kIEBz aGFrdGhpbWFhbi4NCg0KICBXZWxsLCBpdCdzIGZpbmFsbHkgaGVyZSEgQGtheWNlZXNyayBvcGVu ZWQgdGhlIFtNdWx0aWNvcmUgT0NhbWwNCiAgUFIjMTA4MzFdIHRvIHRoZSBtYWluIE9DYW1sIGRl dmVsb3BtZW50IHJlcG9zaXRvcnkgdGhhdCByZXByZXNlbnRzIHRoZQ0KICAibWluaW11bSB2aWFi bGUiIGltcGxlbWVudGF0aW9uIG9mIG11bHRpY29yZSBPQ2FtbCB0aGF0IHdlIGRlY2lkZWQgb24N CiAgaW4gW05vdmVtYmVyJ3MgY29yZSB0ZWFtIHJldmlld10uICBUaGUgYnJhbmNoIHB1c2hlcyB0 aGUgbGltaXRzIG9mDQogIEdpdEh1YidzIHJlbmRlcmluZyBjYXBhYmlsaXR5LCB3aXRoIGFyb3Vu ZCA0MDAwIGNvbW1pdHMuDQoNCiAgT25jZSB0aGUgUFIgd2FzIG9wZW5lZCBqdXN0IGJlZm9yZSBD aHJpc3RtYXMsIHRoZSByZW1haW5pbmcgZWZmb3J0IGhhcw0KICBiZWVuIGZvciBhIG51bWJlciBv ZiBkZXZlbG9wZXJzIHRvIHBvcmUgb3ZlciBbdGhlIGRpZmZdIGFuZCBsb29rIGZvcg0KICBhbnkg dW5leHBlY3RlZCBjaGFuZ2VzIHRoYXQgY3JlcHQgaW4gZHVyaW5nIG11bHRpY29yZSBkZXZlbG9w bWVudC4gQQ0KICBsYXJnZSBudW1iZXIgb2YgY29kZSBjaGFuZ2VzLCBpbXByb3ZlbWVudHMgYW5k IGZpeGVzIGhhdmUgYmVlbiBtZXJnZWQNCiAgaW50byB0aGUgb2NhbWwtbXVsdGljb3JlIHRyZWVz IHNpbmNlIHRoZSBQUiB3YXMgb3BlbmVkIHRvIGZhY2lsaXRhdGUNCiAgdGhpcyB1cHN0cmVhbWlu ZyBwcm9jZXNzLiBXZSdyZSBleHBlY3RpbmcgdG8gaGF2ZSB0aGUgUFIgbWVyZ2VkIGR1cmluZw0K ICBKYW51YXJ5LCBhbmQgdGhlbiB3aWxsIGNvbnRpbnVlIG9udG8gdGhlICJwb3N0LU1WUCIgdGFz a3MgZGVzY3JpYmVkDQogIGxhc3QgbW9udGgsIGJ1dCB3b3JraW5nIGRpcmVjdGx5IGZyb20gb2Nh bWwvb2NhbWwgZnJvbSBub3cgb24uICBXZQ0KICB0aGVyZWZvcmUgcmVtYWluIG9uIHRyYWNrIHRv IHJlbGVhc2UgT0NhbWwgNS4wMCBpbiAyMDIyLg0KDQogIEluIHRoZSBtdWx0aWNvcmUgZWNvc3lz dGVtLCBwcm9ncmVzcyBhbHNvIGNvbnRpbnVlZDoNCiAg4oCiIGBFaW8nIGNvbnRpbnVlcyB0byBp bXByb3ZlIGFzIHRoZSByZWNvbW1lbmRlZCBlZmZlY3RzLWJhc2VkDQogICAgZGlyZWN0LXN0eWxl IElPIGxpYnJhcnkgdG8gdXNlIHdpdGggTXVsdGljb3JlIE9DYW1sLg0KICDigKIgQSBuZXdlciBg ZG9tYWluc2xpYi4wLjQuMCcgaGFzIGJlZW4gcmVsZWFzZWQgdGhhdCBpbmNsdWRlcyBidWcgZml4 ZXMNCiAgICBhbmQgQVBJIGNoYW5nZXMuDQogIOKAoiBUaGUgY29udGludW91cyBiZW5jaG1hcmtp bmcgcGlwZWxpbmUgd2l0aCBmdXJ0aGVyIGludGVncmF0aW9uDQogICAgZW5oYW5jZW1lbnRzIGJl dHdlZW4gU2FuZG1hcmsgYW5kIGN1cnJlbnQtYmVuY2ggaXMgbWFraW5nIHByb2dyZXNzLg0KDQog IFdlIHdvdWxkIGxpa2UgdG8gYWNrbm93bGVkZ2UgdGhlIGZvbGxvd2luZyBleHRlcm5hbCBjb250 cmlidXRvcnMgYXMNCiAgd2VsbDo6DQoNCiAg4oCiIERhbm55IFdpbGxlbXMgKEBkYW5ueXdpbGxl bXMpIGZvciBhbiBPQ2FtbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCiAgICBQaXBwZW5nZXIgYmVu Y2htYXJrIGFuZCByZXBvcnRpbmcgYW4gdW5kZWZpbmVkIGJlaGF2aW91ci4NCiAg4oCiIE1hdHQg UGFsbGlzc2FyZCAoQG1hdHRwYWxsaXNzYXJkKSByZXBvcnRlZCBhbiBpbnN0YWxsYXRpb24gaXNz dWUNCiAgICB3aXRoIGBFaW8nIHdpdGggdmVuZG9yZWQgdXJpbmcuDQogIOKAoiBFZHdpbiBUb3Jv ayAoQGVkd2ludG9yb2spIGZvciBjb250cmlidXRpbmcgYSBQUiB0byBgZG9tYWluc2xpYicgdG8N CiAgICBhbGxvdyB1c2Ugb2YgYSBwZXItY2hhbm5lbCBrZXkuDQoNCiAgQXMgYWx3YXlzLCB0aGUg TXVsdGljb3JlIE9DYW1sIHVwZGF0ZXMgYXJlIGxpc3RlZCBmaXJzdCwgd2hpY2ggY29udGFpbg0K ICB0aGUgdXBzdHJlYW0gZWZmb3J0cywgaW1wcm92ZW1lbnRzLCBmaXhlcywgdGVzdCBzdWl0ZSwg YW5kDQogIGRvY3VtZW50YXRpb24gY2hhbmdlcy4gVGhpcyBpcyBmb2xsb3dlZCBieSB0aGUgZWNv c3lzdGVtIHVwZGF0ZXMgdG8NCiAgYEVpbycsIGBUZXpvcycsIGFuZCBgRG9tYWluc2xpYicuICBU aGUgU2FuZG1hcmssIHNhbmRtYXJrLW5pZ2h0bHkgYW5kDQogIGN1cnJlbnQtYmVuY2ggdGFza3Mg YXJlIGZpbmFsbHkgbGlzdGVkIGZvciB5b3VyIHJlZmVyZW5jZS4NCg0KICAvZWRpdG9y4oCZcyBu b3RlOiBwbGVhc2UgZm9sbG93IHRoZSBhcmNoaXZlIGxpbmsgYWJvdmUgZm9yIHRoZSBmdWxsDQog IGNoYW5nZWxvZy4vDQoNCg0KW011bHRpY29yZSBPQ2FtbF0gPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC1tdWx0aWNvcmUvb2NhbWwtbXVsdGljb3JlPg0KDQpbcHJldmlvdXMgdXBkYXRlc10gPGh0 dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdGFnL211bHRpY29yZS1tb250aGx5Pg0KDQpbTXVsdGlj b3JlIE9DYW1sIFBSIzEwODMxXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL3B1bGwv MTA4MzE+DQoNCltOb3ZlbWJlcidzIGNvcmUgdGVhbSByZXZpZXddDQo8aHR0cHM6Ly9kaXNjdXNz Lm9jYW1sLm9yZy90L211bHRpY29yZS1vY2FtbC1ub3ZlbWJlci0yMDIxLXdpdGgtcmVzdWx0cy1v Zi1jb2RlLXJldmlldy84OTM0I2NvcmUtdGVhbS1jb2RlLXJldmlldy0xPg0KDQpbdGhlIGRpZmZd IDxodHRwOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9wdWxsLzEwODMxLmRpZmY+DQoNCg0KU3TD qXBoYW5lIExhdmVyZ25lIGFza2VkIGFuZCBSb2JpbiBCasO2cmtsaW4gcmVwbGllZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgICAgICAgVG8gY2xhcmlmeSBmb3Ig cmVsYXRpdmUgbmV3YmllcyBsaWtlIG15c2VsZjogdGhpcyB3b3VsZCBiZQ0KICAgICAgICBhIG5l dyB3YXkgdG8gZG8gY29uY3VycmVudCBJL08sIGxpa2UgQXN5bmMgYW5kIEx3dCwgYnV0DQogICAg ICAgIHVubGlrZSB0aG9zZSwgaXQgd291bGRuJ3QgcmVxdWlyZSB0aGUgdXNlIG9mIGEgcHJvbWlz ZQ0KICAgICAgICBtb25hZD8gSW4gb3RoZXIgd29yZHMsIGRvZXMgdGhpcyBtZWFuIHRoYXQgd2Un bGwgaGF2ZSB0aGUNCiAgICAgICAgY2hvaWNlIGJldHdlZW4gQXN5bmMsIEx3dCBhbmQgRWlvIGlu IHRoZSBuZWFyIGZ1dHVyZSBmb3INCiAgICAgICAgb3VyIGNvbmN1cnJlbnQgSS9PIG5lZWRzPw0K DQogIFRoYXQncyBjb3JyZWN0IGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBUaGlzIHByZXNlbnRhdGlv biBwcm92aWRlcyBhbg0KICBpbnRyb2R1Y3Rpb24gdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZWlv Og0KICA8aHR0cHM6Ly93YXRjaC5vY2FtbC5vcmcvdmlkZW9zL3dhdGNoLzc0ZWNlMGE4LTM4MGYt NGUyYS1iZWY1LWM2YmI5MDkyYmU4OT4NCg0KDQpTZXQgdXAgT0NhbWwgMi4wLjAtYmV0YTEyDQri lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L2Fubi1zZXQtdXAtb2NhbWwtMi0wLTAtYmV0YTEyLzkxMjMvMT4NCg0KDQpTb3JhIE1v cmltb3RvIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCkZpeGVkDQrilYzilYzilYzilYzilYwN Cg0KICDigKIgRmFsbGJhY2sgdG8gdGhlIHZlcnNpb24gaW4gd2hpY2ggdGhlIGFzc2V0cyBleGlz dCBpZiBubyBhc3NldHMgZXhpc3QNCiAgICBpbiB0aGUgbGF0ZXN0IG9wYW0gcmVsZWFzZS4NCiAg 4oCiIEluc3RydWN0IEN5Z3dpbiBzZXR1cCB0byB1c2UgInN5cyIgc3ltbGlua3MgZHVyaW5nIHNl dHVwIChwYXJ0aWFsDQogICAgd29ya2Fyb3VuZCBmb3IgYnVnIHdpdGggbmF0aXZlIHN5bWxpbmtz IGluIEN5Z3dpbiBzZXR1cCAtIHNvbWUNCiAgICBkZXBleHRzIG1heSBzdGlsbCBiZSBhZmZlY3Rl ZCkNCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL3NldHVwLW9jYW1sL3JlbGVhc2VzL3Rh Zy92Mi4wLjAtYmV0YTEyPg0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IElmIHlvdSBoYXBwZW4gdG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1lc3NhZ2Vd IGFuZCBJJ2xsIG1haWwNCiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBbdGhlIGFy Y2hpdmVdIG9yIHRoZSBbUlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJZiB5b3Ug YWxzbyB3aXNoIHRvIHJlY2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5IHN1YnNj cmliZQ0KICBbb25saW5lXS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoNCltzZW5kIG1lIGEgbWVz c2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmc+DQoNClt0aGUgYXJj aGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4NCg0KW1JTUyBmZWVkIG9m IHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+ DQoNCltvbmxpbmVdIDxodHRwOi8vbGlzdHMuaWR5bGwub3JnL2xpc3RpbmZvL2NhbWwtbmV3cy13 ZWVrbHkvPg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC8+ DQoNCg== --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of January 04 to 11, 202= 2.

New release of PPrint (20220103)

Fran=C3=A7ois Pottier announced

I am pleased to announce a new release of PPrint, the pretty-printing libra= ry, with i= mproved documentation.

The documentation can also be viewed offline:

opam update
opam install pprint.20220103
opam install odig
odig odoc                 # this may take some time
odig doc pprint           # this opens the doc in your browser

Happy pretty-printing!

Bogue, the OCaml GUI

sanette announced

I'm happy to announce a brand new version of Bogue, a GUI (Graphical User Interface) library entirely written in ocaml, using SDL2 for h= ardware accelerated graphics.

The doc can be found here, it will be enriched over time.

Install with opam install bogue

In addition to the library, this installs an executable boguex= to showcase about 50 useful constructions, see boguex -h for the list.

Some screenshots of a demo compiled with the latest version:

3D"619a6b3c5d7a=

3D"3e5e04d1db00=

Note that many widgets are not shown in this demo: tables, menus, drop-down= select lists, knob buttons,… I will add more images to the doc when I have some time!

Cohttp 5.0.0 and 2.5.6

Marcello Seri announced

We are glad to announce the release of version 5.0.0 and 2.5.6 of cohttp and its dependent packages.

The latter is a bug fix release that in particular backports the compatibil= ity with the upcoming release 0.15 of core and async.

The first introduces the breaking changes announced in the previous release. I append the changelog below, which explains in details the changes and emphasizes the breaking changes:

Cohttp.Header: new implementation (lyrm #747)

  • New implementation of Header modules using an associative list instead = of a map, with one major semantic change (function get, see be= low), and some new functions (clean_dup, get_multi_conca= t)
  • More Alcotest tests as well as fuzzing tests for this particular module= .
Purpose

The new header implementation uses an associative list instead of a map to = represent headers and is focused on predictability and intuitivity: except = for some specific and documented functions, the headers are always kept in = transmission order, which makes debugging easier and is also important for = RFC7230=C2=A7= 3.2.2 that states that multiple values of a header must be kept in orde= r.

Also, to get an intuitive function behaviour, no extra work to enforce RFCs= is done by the basic functions. For example, RFC7230=C2=A73.2.2 requires t= hat a sender does not send multiple values for a non list-value header. Thi= s particular rule could require the Header.add function to rem= ove previous values of non-list-value headers, which means some changes of = the headers would be out of control of the user. With the current implement= ation, an user has to actively call dedicated functions to enforce such RFC= s (here Header.clean_dup).

Semantic changes

Two functions have a semantic change : get and update.

get

get was previously doing more than just returns the value as= sociated to a key; it was also checking if the searched header could have multiple values: if not, the last value associat= ed to the header was returned; otherwise, all the associated values were concatenated and returned. This semantics do= es not match the global idea behind the new header implementation, and would also be very inefficient.

  • The new get function only returns the last value associate= d to the searched header.
  • get_multi_concat function has been added to get a result s= imilar to the previous get function.
update

update is a pretty new function (#703) and changes are minor a= nd related to get semantic changes.

  • update h k f is now modifying only the last occurrences of= the header k instead of all its occurrences.
  • a new function update_all function has been added and work= on all the occurrences of the updated header.
New functions :
  • clean_dup enables the user to clean headers that follows = the RFC7230= =C2=A73.2.2 (no duplicate, except set-cookie)
  • get_multi_concat has been added to get a result similar to= the previous get function.

Cohttp.Header: performance improvement (mseri, anurag= soni #778)

Breaking the headers are no-longer lowercased when parsed, the hea= ders key comparison is case insensitive instead.

cohttp-lwt-unix: Adopt ocaml-conduit 5.0.0 (smorimoto= #787)

Breaking Conduit_lwt_unix.connect's ctx pa= ram type chaged from ctx to ctx Lazy.t

other changes

  • cohttp-mirage: fix deprecated fmt usage (tmcgilchrist #783)
  • lwt_jsoo: Use logs for the warnings and document it (mseri #776)
  • lwt: Use logs to warn users about leaked bodies and document it (mseri = #771)
  • lwt, lwt_unix: Improve use of logs and the documentation, fix bug in th= e Debug.enable_debug function (mseri #772)
  • lwt_jsoo: Fix exception on connection errors in chrome (mefyl #761)
  • lwt_jsoo: Fix Lwt.wakeup_exn Invalid_arg exce= ption when a js stack overflow happens in the XHR completion handler (mefyl #762).
  • lwt_jsoo: Add test suite (mefyl #764).

We wish to thank to all the users and the contributors for their help leadi= ng to this release.

Multicore OCaml: December 2021 and the Big PR

Anil Madhavapeddy announced

Welcome to the December 2021 Multicore OCaml monthly report! The previous up= dates along with this update have been compiled by myself, @ctk21, @kayceesrk and @shakthimaan.

Well, it's finally here! @kayceesrk opened the Multicore OCaml PR#10831 to the main OCaml development repository that represents the "minimum viabl= e" implementation of multicore OCaml that we decided on in Novemb= er's core team review. The branch pushes the limits of GitHub's rendering capability, with around = 4000 commits.

Once the PR was opened just before Christmas, the remaining effort has been= for a number of developers to pore over the diff and = look for any unexpected changes that crept in during multicore development. A large number of code changes, improvements and fix= es have been merged into the ocaml-multicore trees since the PR was opened to facilitate this upstreamin= g process. We're expecting to have the PR merged during January, and then will continue onto the "post-MVP" tasks des= cribed last month, but working directly from ocaml/ocaml from now on. We therefore remain on track to release OCam= l 5.00 in 2022.

In the multicore ecosystem, progress also continued:

  • Eio continues to improve as the recommended effects-based = direct-style IO library to use with Multicore OCaml.
  • A newer domainslib.0.4.0 has been released that includes b= ug fixes and API changes.
  • The continuous benchmarking pipeline with further integration enhanceme= nts between Sandmark and current-bench is making progress.

We would like to acknowledge the following external contributors as well::

  • Danny Willems (@dannywillems) for an OCaml implementation of the Pippen= ger benchmark and reporting an undefined behaviour.
  • Matt Pallissard (@mattpallissard) reported an installation issue with <= code>Eio with vendored uring.
  • Edwin Torok (@edwintorok) for contributing a PR to domainslib to allow use of a per-channel key.

As always, the Multicore OCaml updates are listed first, which contain the = upstream efforts, improvements, fixes, test suite, and documentation changes. This is followed by the ecosystem up= dates to Eio, Tezos, and Domainslib. The Sandmark, sandmark-nightly and current-bench tasks are finally listed f= or your reference.

editor=E2=80=99s note: please follow the archive link above for the full= changelog.

St=C3=A9phane Lavergne asked and Robin Bj=C3=B6rklin = replied

To clarify for relative newbies like myself: this would be a new way to do = concurrent I/O, like Async and Lwt, but unlike those, it wouldn't require the use of a promise monad? In other word= s, does this mean that we'll have the choice between Async, Lwt and Eio in the near future for our concurrent I/O= needs?

That's correct as far as I can tell. This presentation provides an introduc= tion to the current state of eio: https://watch.ocaml.org/videos/watch/74ece0a8-380f-4e2a-bef5-c6b= b9092be89

Set up OCaml 2.0.0-beta12

Sora Morimoto announced

Fixed

  • Fallback to the version in which the assets exist if no assets exist in= the latest opam release.
  • Instruct Cygwin setup to use "sys" symlinks during setup (partial worka= round for bug with native symlinks in Cygwin setup - some depexts may still= be affected)

https://github.com/ocaml/setup-ocaml/releases/tag/v2.0.0-beta12

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe online.

--=-=-=--