From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver= Authentication-Results: plum; dmarc=fail (p=none dis=none) header.from=polytechnique.org Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=ssw3Y/ZG; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=polytechnique.org header.i=@polytechnique.org header.a=rsa-sha256 header.s=svoboda header.b=YiVJMNVU; dkim-atps=neutral Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id A48D2B80123 for ; Tue, 30 Apr 2024 08:23:10 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=K6AMnLql6caiSSZL3AC+xds0TAdV5jvjyRBGjuJnFMI=; b=ssw3Y/ZGiBIv/4sKuGYEu00aAIekePPdi3acWiL6f1L3hacC/cIl0gED 6uRPMWMaRyTHrnU/WGtlPRGz/MSN5c3Ewq/n9s2Z6wDUAce7XlOCfYzVL 1XgLBpQWEvXMzm4c25A/p41ImQSVz16lIT+bQA/Ia3AmYc49njNFFkhoC g=; Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr designates 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=Pass smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="6.07,241,1708383600"; d="scan'208,217";a="163887478" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 30 Apr 2024 09:23:09 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 79394E0CD0; Tue, 30 Apr 2024 09:23:09 +0200 (CEST) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 0C667E0035 for ; Tue, 30 Apr 2024 09:23:08 +0200 (CEST) IronPort-SDR: 66309c54_3fq20EAghZ/1QdJoTPGCZtRrJQzH3FmiGRLV/pEb27EVYTp Xk9kWo7B8h+vf4p5wZnoxnt/8Fpvn2ZDyuOxUbQ== X-IPAS-Result: =?us-ascii?q?A0FTAwAKnDBmlyIeaIFQAgIGgliBQVsoGQFiVxkaBwhIh?= =?us-ascii?q?FaDT44ZikmGfIpxgVYUgQ8CAxgWBR4UAQMBDS4BDgQBAgQBAQMBAgGEOUYCF?= =?us-ascii?q?ogVAh8GAQQyBw4BAgQBAQEBAwIDAQEBAQEBCAEBBQEBAQIBAQIEBgECEAEBA?= =?us-ascii?q?QEBAQEBNwUQNYVwDYJKLQEjNjVlCQYBAQEBAQEBAQEBAQEBASIBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAggEAYEaAgEIB?= =?us-ascii?q?AYTAQErDRgjAxQBBgMCBA0BNQMBEwEQAhqCZgGCZAMFDAaaQ5s6en8zgQGCD?= =?us-ascii?q?AEBBoEIPgMLAgUBDgkm2gSBYgmBSIgUGgEkSGmEJwmENycPgVVEgUqCPQdvg?= =?us-ascii?q?j8LFwEBAQEYgRkGBQEBBgIIPQmDJYJphRJ9JoFsAYVRVoVogXxIbYIHUYEwb?= =?us-ascii?q?AMDCQEngXuGH4FLSzMyAVUTFws+CRYCFgMbFAQwDwkLJgMqBjYCEgwGBgZZI?= =?us-ascii?q?BYJBCMDCAQDRAMgbxEDBBoECwd1gUSBbQQTRAOBOIcnglODPYIehCBLhQKBe?= =?us-ascii?q?A5mhCkdQAMLbT01FBsonyEEMQKCYQ4LJA8HCCMMD0IBKQEBBR02GSAHAxgBN?= =?us-ascii?q?AIeJAYFBgsCBCySQAIkAQMlB3OOJ44FlE80B4QWgVsGDIh9gSSVa4QFgVaLK?= =?us-ascii?q?JkxIphAIII0hx2BJQmBbGmKAooOdTwEDw0ZhRiBbA0mPIEgMxowQ4IzAQEyC?= =?us-ascii?q?UYcD1eNVRaBDAEIgkOBPi15gXU7oypBBy4CAQEHMAIHAQoBAQMJhWIBAYM+g?= =?us-ascii?q?UgBAQ?= IronPort-PHdr: A9a23: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 3JsBThhL7dzpYDE/win0qtU+ndN2dFO3r8c2EU= IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:IaMOQ6j6KJirRqSYfgwXijWbznBQXucji2hC6mlwRA09TyX4rb HMoB1/73XJYVkqNk3I9ersBEDiexPhHPxOgLX5VI3KNGLbUQCTQ72Kg7GP/xTQXwXAssRd2a 1jf6UWMqyTMXFKyeDg7k2dG9YkqeP3lJxAaN2uqktQcQ== X-Talos-CUID: =?us-ascii?q?9a23=3Ao76zD2r5mZSIubRdl0g115/mUdB4VnDE8HyKH23?= =?us-ascii?q?7CWV3E4LPQniK5ooxxg=3D=3D?= X-Talos-MUID: 9a23:KiBH7QQVar9Id+1iRXSxtQ9eC9lq2pitBUFKlq4rpOOFLR5ZbmI= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.07,241,1708383600"; d="scan'208,217";a="86043109" X-URL-ContentFilter: X-MGA-submission: =?us-ascii?q?MDFyqMLKciRAi1W6Mwz6wReZFXCuOGmBphCfh+?= =?us-ascii?q?8V6XsjkepYEzB1XIjwJUFivEAI/5MtgpuFkOGOo0NK2y7IygEv8gnVPt?= =?us-ascii?q?P18W42/gP57a8eB6Pl2T+Im/RofRUpH2DYE+6Y+vfbjmUu7TCsARDopX?= =?us-ascii?q?HQRfgG/46MUfv95K0DLMN8tw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2024 09:23:01 +0200 Received: from mac-03220211.irisa.fr (mac-03220211.irisa.fr [131.254.21.249]) (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 E66E556482A; Tue, 30 Apr 2024 09:22:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1714461779; bh=iCUb12fq1nXiftCPrvcDyGSJz5HCNiLsnissSNlCyew=; h=From:To:Subject:Date:Message-ID; b=YiVJMNVUT94XFcdFChArKMXUqCX61i/YeiKDFD7PEEA188zNNhzjN3u1ZWboGu/4m lNeN4vyVGX7kMVZnUR6GdtOR5M7kpQvsNnYCrez+h088xlo+V9MLunU9WFMgeG7P/s OJ+NKHR5FtQdn5Bo/oJ0RCRlBjOBixQOJtPckY7M= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 30 Apr 2024 09:22:57 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Apr 30 09:22:59 2024 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499975, queueID=3458756482B 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: 19119 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 ZWsgb2YgQXByaWwgMjMgdG8gMzAsDQoyMDI0Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCk9DQU5OTCAw LjMuMTogYSBmcm9tLXNjcmF0Y2ggZGVlcCBsZWFybmluZyAoaS5lLiBkZW5zZSB0ZW5zb3Igb3B0 aW1pemF0aW9uKSBmcmFtZXdvcmsNCkkgcm91Z2hseSB0cmFuc2xhdGVkIFJlYWwgV29ybGQgT0Nh bWwncyBBc3luYyBjb25jdXJyZW5jeSBjaGFwdGVyIHRvIGVpbw0KVXNpbmcgUHJvcGVydHktQmFz ZWQgVGVzdGluZyB0byBUZXN0IE9DYW1sIDUNCk9DYW1sIEJhY2t0cmFjZXMgb24gVW5jYXVnaHQg RXhjZXB0aW9ucywgYnkgT0NhbWxQcm8NCk9DYW1sIFVzZXJzIG9uIFdpbmRvd3M6IFBsZWFzZSBz aGFyZSB5b3VyIGluc2lnaHRzIG9uIG91ciB1c2VyIHN1cnZleQ0KR3JhcGhxbF9qc29vX2NsaWVu dCAwLjEuMCAtIGxpYnJhcnkgZm9yIEdyYXBoUUwgY2xpZW50cyB1c2luZyBXZWJTb2NrdHMNCmRy ZWFtLWh0bWwgMy4wLjANCkRrQ29kZXIgMC4yIC0gU2NyaXB0aW5nIGluIE9DYW1sDQpPY2FtbC1w cm90b2MtcGx1Z2luIDYuMS4wDQpPdGhlciBPQ2FtbCBOZXdzDQpPbGQgQ1dODQoNCg0KT0NBTk5M IDAuMy4xOiBhIGZyb20tc2NyYXRjaCBkZWVwIGxlYXJuaW5nIChpLmUuIGRlbnNlIHRlbnNvciBv cHRpbWl6YXRpb24pIGZyYW1ld29yaw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg QXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tb2Nhbm5sLTAtMy0x LWEtZnJvbS1zY3JhdGNoLWRlZXAtbGVhcm5pbmctaS1lLWRlbnNlLXRlbnNvci1vcHRpbWl6YXRp b24tZnJhbWV3b3JrLzE0NDkyLzg+DQoNCg0KTHVrYXN6IFN0YWZpbmlhayBhbm5vdW5jZWQNCuKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoaXJkIHRpbWUgdGhlIGNoYXJtLiBPQ0FOTkwgMC4z LjMgaXMgb3V0IG5vdy4gSSBtaWdodCBuZWVkIHRvIGNoYW5nZQ0KICB0aGUgbmFtZSBvZiB0aGUg cHJvamVjdCwgYmVjYXVzZSBvZiB0aGUgbGludCB3YXJuaW5nczogUG9zc2libGUgbmFtZQ0KICBj b2xsaXNpb24gd2l0aCBwYWNrYWdlcyAnT0NBRG1sJywgJ29jYWwnLCAnb2NhbWwnPw0KDQoNCkkg cm91Z2hseSB0cmFuc2xhdGVkIFJlYWwgV29ybGQgT0NhbWwncyBBc3luYyBjb25jdXJyZW5jeSBj aGFwdGVyIHRvIGVpbw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9pLXJvdWdo bHktdHJhbnNsYXRlZC1yZWFsLXdvcmxkLW9jYW1scy1hc3luYy1jb25jdXJyZW5jeS1jaGFwdGVy LXRvLWVpby8xNDU0OC8xPg0KDQoNCkRlbm5pcyBEYW5nIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg UmVwbyBhdA0KICA8aHR0cHM6Ly9naXRodWIuY29tL2RhbmdkZW5uaXMvcndvLWVpby9ibG9iL21h aW4vbGliL3J3b19laW8ubWw+DQoNCiAgSSB3YXMgaW5zcGlyZWQgYnkgVGFyaWRlJ3MgW01ha2Ug YW4gRWlvIHZlcnNpb24gb2YgdGhlIEFzeW5jIGV4YW1wbGVzDQogIGluIFJlYWwgV29ybGQgT0Nh bWxdIHRvIHRyYW5zbGF0ZSB0aGUgQXN5bmMgZXhhbXBsZXMgdG8gZWlvIHRvIHRlc3QNCiAgb3V0 IGVpbydzIGNvbmN1cnJlbmN5IHN0b3J5LiAgV2FybmluZywgaXQncyBhIHJvdWdoIHRyYW5zbGF0 aW9uLiBJDQogIGhhcmRseSBrbm93IE9DYW1sIGFuZCBlaW8gYXMgd2VsbCBhcyBJIGtub3cgbXkg ZGF5LWpvYiBsYW5ndWFnZXMNCiAgOnNtaWxlOiAuDQoNCiAgVGhlcmUgYXJlIHN0aWxsIGEgZmV3 IGV4YW1wbGVzIEkgaGF2ZW4ndCBmaWd1cmVkIG91dC4NCiAgMS4gSSBkb24ndCBrbm93IGhvdyB0 byBpbXBsZW1lbnQgW2Bjb3B5X2Jsb2NrcyddLiBJbiBbdGhpcyBzZWN0aW9uXSwNCiAgICAgdGhl IGV4YW1wbGUgdXNlcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIG9mIHNvbWUgc29ydHMgdG8gdGhl biBjb3B5DQogICAgIGZyb20gcmVhZGVyIHRvIHdyaXRlci4gRm9yIG5vdywgSSd2ZSBsZWZ0IHRo YXQgaW50ZXJtZWRpYXRlIGJ1ZmZlcg0KICAgICBvdXQuDQogIDIuIEkgY2FuJ3QgZmluZCBhbiBg aW50ZXJydXB0JyBvcHRpb24gaW4gYGNvaHR0cC1laW8nIGFzIHdlbGwgYXMNCiAgICAgYGNob2lj ZScgYW5kIGBjaG9vc2UnLiBUaGUgYm9vayBleHBsYWlucyB0aGF0IGNvaHR0cC1hc3luYyBjYW4N CiAgICAgY2FuY2VsIGh0dHAgcmVxdWVzdHMgdmlhIGFuIGBpbnRlcnJ1cHQnIChbc2VlIHNlY3Rp b25dKS4NCiAgMy4gRm9yIFtgbG9nX2RlbGF5cyddLCBJIGhhdmUgeWV0IHRvIHNvbHZlIGhvdyB0 byBhd2FpdCBteSBvd24gYGV2ZXJ5Jw0KICAgICB0aWNrZXIgc3VjaCB0aGF0IEkgY2FuIGF3YWl0 IGl0cyBjb21wbGV0aW9uIGFuZCB0aGVuIGxvZyB0aGUgdGltZXINCiAgICAgYXQgdGhlIGVuZC4N Cg0KDQpbTWFrZSBhbiBFaW8gdmVyc2lvbiBvZiB0aGUgQXN5bmMgZXhhbXBsZXMgaW4gUmVhbCBX b3JsZCBPQ2FtbF0NCjxodHRwczovL2dpdGh1Yi5jb20vdGFyaWRlcy9oYWNrb2NhbWwvaXNzdWVz Lzk+DQoNCltgY29weV9ibG9ja3MnXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5nZGVubmlzL3J3 by1laW8vYmxvYi9hNjY2ZDhhYWFlZDA4ODQyMThkNzA2Zjk0YjZiYWJlZWQ4NWRlYmVhL2xpYi9y d29fZWlvLm1sI0w4OD4NCg0KW3RoaXMgc2VjdGlvbl0NCjxodHRwczovL2Rldi5yZWFsd29ybGRv Y2FtbC5vcmcvY29uY3VycmVudC1wcm9ncmFtbWluZy5odG1sPg0KDQpbc2VlIHNlY3Rpb25dDQo8 aHR0cHM6Ly9kZXYucmVhbHdvcmxkb2NhbWwub3JnL2NvbmN1cnJlbnQtcHJvZ3JhbW1pbmcuaHRt bD4NCg0KW2Bsb2dfZGVsYXlzJ10NCjxodHRwczovL2dpdGh1Yi5jb20vZGFuZ2Rlbm5pcy9yd28t ZWlvL2Jsb2IvYTY2NmQ4YWFhZWQwODg0MjE4ZDcwNmY5NGI2YmFiZWVkODVkZWJlYS9saWIvcndv X2Vpby5tbCNMMzQ4Pg0KDQoNClVzaW5nIFByb3BlcnR5LUJhc2VkIFRlc3RpbmcgdG8gVGVzdCBP Q2FtbCA1DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L2Jsb2ctdXNpbmctcHJvcGVydHktYmFzZWQtdGVzdGluZy10by10ZXN0 LW9jYW1sLTUvMTQ1NTAvMT4NCg0KDQpKYW4gTWlkdGdhYXJkIGFubm91bmNlZA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSADQoNCiAgSGVyZSdzIGEgYmxvZyBwb3N0IGFib3V0IGhvdyB3ZSBoYXZlIGJlZW4gdXNpbmcg cHJvcGVydHktYmFzZWQgdGVzdGluZw0KICB0byB0ZXN0IE9DYW1sIDU6DQogIDxodHRwczovL3Rh cmlkZXMuY29tL2Jsb2cvMjAyNC0wNC0yNC11bmRlci10aGUtaG9vZC1kZXZlbG9waW5nLW11bHRp Y29yZS1wcm9wZXJ0eS1iYXNlZC10ZXN0cy1mb3Itb2NhbWwtNS8+DQoNCg0KT0NhbWwgQmFja3Ry YWNlcyBvbiBVbmNhdWdodCBFeGNlcHRpb25zLCBieSBPQ2FtbFBybw0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlz Y3Vzcy5vY2FtbC5vcmcvdC9ibG9nLW9jYW1sLWJhY2t0cmFjZXMtb24tdW5jYXVnaHQtZXhjZXB0 aW9ucy1ieS1vY2FtbHByby8xNDU1MS8xPg0KDQoNCk9DYW1sUHJvIGFubm91bmNlZA0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGVy ZSdzIGFub3RoZXIgb25lIG9mIG91ciBoZWFkcyB1cCBhYm91dCBvdXIgbGF0ZXN0IGJsb2cgcmVs ZWFzZSENCg0KICBUb2RheSdzIHRvcGljIGlzIGFib3V0IGFuIHVuaW50ZW50aW9uYWxseSBoaWRk ZW4gZmVhdHVyZSBvZiB0aGUgT0NhbWwNCiAgZGV2IGVudmlyb25tbWVudDogW2JhY2t0cmFjZXMg b24gdW5jYXVnaHQgZXhjZXB0aW9uXSENCg0KICBXZSBiZWxpZXZlIHRoaXMgd2lsbCBiZSBvbGQg bmV3cyB0byB0aGUgdmV0ZXJhbiBPQ2FtbCBkZXZzIGJ1dCBjb3VsZA0KICBiZSBvZiBtdWNoIHVz ZSB0byB0aGUgbmV3ZXIgQ2FtZWxlZXJzIG91dCB0aGVyZSENCg0KICBIb3BlZnVsbHksIHlvdSB3 aWxsIGxlYXJuIGEgdGhpbmcgb3IgdHdvIGZyb20gcmVhZGluZyB0aGlzIHNob3J0DQogIGFydGlj bGUsIHdlIHdlbGNvbWUgYWxsIGZlZWRiYWNrIGluIHRoaXMgdmVyeSB0aHJlYWQsIHRoYW5rIHlv dSBmb3INCiAgcmVhZGluZyENCg0KDQpbYmFja3RyYWNlcyBvbiB1bmNhdWdodCBleGNlcHRpb25d DQo8aHR0cHM6Ly9vY2FtbHByby5jb20vYmxvZy8yMDI0XzA0XzI1X29jYW1sX2JhY2t0cmFjZXNf b25fdW5jYXVnaHRfZXhjZXB0aW9ucy8+DQoNCg0KT0NhbWwgVXNlcnMgb24gV2luZG93czogUGxl YXNlIHNoYXJlIHlvdXIgaW5zaWdodHMgb24gb3VyIHVzZXIgc3VydmV5DQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNz Lm9jYW1sLm9yZy90L29jYW1sLXVzZXJzLW9uLXdpbmRvd3MtcGxlYXNlLXNoYXJlLXlvdXItaW5z aWdodHMtb24tb3VyLXVzZXItc3VydmV5LzE0NTU0LzE+DQoNCg0KU3VkaGEgUGFyaW1hbGEgYW5u b3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIANCg0KICBEbyB5b3UgdXNlIE9DYW1sIG9uIFdpbmRvd3M/ IFdlIHdhbnQgdG8gaGVhciBmcm9tIHlvdSEgUGFydGljaXBhdGUgaW4NCiAgb3VyIHVzZXIgc3Vy dmV5IHRvIHNoYXJlIHlvdXIgZXhwZXJpZW5jZXMgd2l0aCB0aGUgT0NhbWwgZGV2ZWxvcG1lbnQN CiAgZW52aXJvbm1lbnQgb24gV2luZG93cy4gWW91ciBmZWVkYmFjayBpcyBpbXBvcnRhbnQgaW4g aGVscGluZyB1cw0KICB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHBhaW4gcG9pbnRzIGFuZCBpZGVu dGlmeSBhcmVhcyBmb3INCiAgaW1wcm92ZW1lbnQuIFdoZXRoZXIgeW91J3JlIGEgc2Vhc29uZWQg T0NhbWwgZGV2ZWxvcGVyIG9yIGp1c3QNCiAgc3RhcnRpbmcgb3V0LCB5b3VyIGlucHV0IGNhbiBt YWtlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4NCg0KICBQbGVhc2Ugc2lnbiB1cCBoZXJlIDxo dHRwczovL2Zvcm1zLmdsZS9TeFJ2TmFFWlhnZWR4cm5SOT4sIGFuZCB3ZSdsbA0KICByZWFjaCBv dXQgdG8geW91Lg0KDQoNCkdyYXBocWxfanNvb19jbGllbnQgMC4xLjAgLSBsaWJyYXJ5IGZvciBH cmFwaFFMIGNsaWVudHMgdXNpbmcgV2ViU29ja3RzDQrilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L2dyYXBocWwtanNvby1jbGllbnQtMC0xLTAtbGlicmFyeS1mb3ItZ3JhcGhxbC1jbGll bnRzLXVzaW5nLXdlYnNvY2t0cy8xNDU1Ny8xPg0KDQoNCkhhbnMgT2xlIFJhZmFlbHNlbiBhbm5v dW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEknbSBnbGFkIHRvIGFubm91 bmNlIHRoZSByZWxlYXNlIG9mIGdyYXBocWxfanNvb19jbGllbnQuDQoNCiAgVGhpcyBpcyB0aGUg Y2xpZW50IHNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtHcmFwaFFMIG92ZXIgV2ViU29ja2V0 DQogIFByb3RvY29sXS4gSXQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB1c2Ugd2l0aCBEcmVhbSwg d2hpY2ggaW1wbGVtZW50cw0KICB0aGUgc2VydmVyIHNpZGUuIFRoaXMgbGlicmFyeSBzdXBwb3J0 cyB3cml0aW5nIGNsaWVudCBjb2RlIGluIE9jYW1sLA0KICB0aGF0IHdpbGwgcnVuIGluIHRoZSBi cm93c2VyLg0KDQogIEl0IGNhbiBiZSBmb3VuZCBbaGVyZV0uDQoNCg0KW0dyYXBoUUwgb3ZlciBX ZWJTb2NrZXQgUHJvdG9jb2xdDQo8aHR0cHM6Ly9naXRodWIuY29tL2VuaXNkZW5qby9ncmFwaHFs LXdzL2Jsb2IvbWFzdGVyL1BST1RPQ09MLm1kPg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHViLmNv bS9oYW5zb2xlL2dyYXBocWxfanNvb19jbGllbnQ+DQoNCg0KZHJlYW0taHRtbCAzLjAuMA0K4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2 ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tZHJlYW0taHRtbC0zLTAtMC8xNDAx My84Pg0KDQoNCllhd2FyIEFtaW4gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBbQU5OXSBkcmVhbS1odG1s IDMuNC4xDQoNCiAgQWRkICdsaXZlcmVsb2FkJyBzdXBwb3J0IGllIGF1dG9tYXRpY2FsbHkgcmVs b2FkaW5nIHRoZSBwYWdlIGluIHRoZQ0KICBicm93c2VyIHdoZW4gdGhlIERyZWFtIHNlcnZlciBy ZXN0YXJ0cy4gVXNlZnVsIHRvIHJ1biB3aXRoIGR1bmUncw0KICB3YXRjaCBtb2RlIGZvciBhIGZh c3QgZGV2IGN5Y2xlLg0KDQogIFRoaXMgaXMgYWRhcHRlZCBmcm9tIERyZWFtJ3Mgb3duIGxpdmVy ZWxvYWQgbWlkZGxld2FyZSBidXQgd2l0aCBhDQogIHNsaWdodGx5IGRpZmZlcmVudCBhcHByb2Fj aC4gRnVsbCBkZXRhaWxzIGluIHRoZSBtb2R1bGUgZG9jdW1lbnRhdGlvbjoNCiAgPGh0dHBzOi8v eWF3YXJhbWluLmdpdGh1Yi5pby9kcmVhbS1odG1sL2RyZWFtLWh0bWwvRHJlYW1faHRtbC9MaXZl cmVsb2FkLz4NCg0KICBXaHkgcmVpbXBsZW1lbnQgdGhpcz8gSXQgc2VlbXMgdGhhdCBEcmVhbSdz IGJ1aWx0LWluIGxpdmVyZWxvYWQgbmVlZHMNCiAgdG8gcGFyc2UgdGhlIEhUTUwgbWFya3VwLCBm aW5kIGl0cyBgaGVhZCcgdGFnLCBhbmQgZHluYW1pY2FsbHkgaW5qZWN0DQogIHRoZSByZWxvYWRl ciBgc2NyaXB0JyBpbnNpZGUuIFNpbmNlIHBhcnNpbmcgSFRNTCBjYW4gYmUgcHJldHR5IHRyaWNr eQ0KICBhbmQgcG90ZW50aWFsbHkgYnVnZ3ksIEkgZGVjaWRlZCB0byBtYW51YWxseSBhZGQgdGhl IHNjcmlwdCBpbiB0aGUNCiAgYGhlYWQnIHRhZyBhcyBhIHN0cm9uZy10eXBlZCBkcmVhbS1odG1s IGBub2RlJzoNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIGhlYWQgW10gWw0KICDilIIgICAu Li4NCiAg4pSCICAgTGl2ZXJlbG9hZC5zY3JpcHQ7DQogIOKUgiAgIC4uLg0KICDilIIgXQ0KICDi lJTilIDilIDilIDilIANCg0KDQpEa0NvZGVyIDAuMiAtIFNjcmlwdGluZyBpbiBPQ2FtbA0K4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0 dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9ka2NvZGVyLTAtMi1zY3JpcHRpbmctaW4tb2NhbWwv MTQ1NjAvMT4NCg0KDQpqYmVja2ZvcmQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJJ20gaGFwcHkgdG8gYW5u b3VuY2UgdGhlIHNlY29uZCByZWxlYXNlIG9mIERrQ29kZXIsIGFuIE9DYW1sDQogIHNjcmlwdGlu ZyB0b29sLg0KDQogIFRoZSBmaXJzdCByZWxlYXNlIHdhcyBhYm91dCAvaW5zdGFsbCBlYXNlLzog YSBjb3VwbGUgY2xpY2tzIGFuZCBmb3VyDQogICg0KSBtaW51dGVzIGxhdGVyIHlvdSBhbmQgeW91 ciBXaW5kb3dzIGFuZCBtYWNPUyB1c2VycyBjYW4gc3RhcnQNCiAgc2NyaXB0aW5nLiBBbGwgdXNl cnMsIGluY2x1ZGluZyBnbGliYy1iYXNlZCBMaW51eCBkZXNrdG9wIHVzZXJzLCBjYW4NCiAgYWxz byB1c2UgdGhlaXIgVW5peCBzaGVsbHMgb3IgV2luZG93cyBQb3dlclNoZWxsLiBPQ2FtbCBkb2Vz ICpub3QqDQogIG5lZWQgdG8gYmUgcHJlLWluc3RhbGxlZC4gSnVzdCBjb3B5IGFuZCBwYXN0ZSB0 d28gbGluZXMgKHlvdSdsbCBzZWUNCiAgc29tZSBpbiB0aGlzIHBvc3QpIGFuZCB5b3VyIHNjcmlw dCBpcyBydW5uaW5nIGFuZCB5b3VyIHByb2plY3QgaXMNCiAgZWRpdGFibGUgd2l0aCBPQ2FtbCBM U1AuDQoNCiAgVGhpcyBzZWNvbmQgcmVsZWFzZSBpcyBhYm91dCAvdGVjaG5pY2FsIGVhc2UvLiBU aGUgdGhyZWUgImJpZyIgaWRlYXMNCiAgaW4gdGhpcyByZWxlYXNlIGFyZToNCg0KICDigKIgWW91 IGRvbid0IHdyaXRlIGJ1aWxkIGZpbGVzLiBJZiB0aGF0IHNvdW5kcyBsaWtlIGAvYmluL3NoJyB0 aGF0IGlzDQogICAgaW50ZW50aW9uYWwuDQogIOKAoiBBbG1vc3QgZXZlcnkgT0NhbWwgZmlsZSBp cyBhIHNjcmlwdCB5b3UgY2FuIHJ1bi4gSWYgdGhhdCBzb3VuZHMgbGlrZQ0KICAgIGhvdyBQeXRo b24gc2NyaXB0cyBhcmUgYWxtb3N0IGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gUHl0aG9uIG1vZHVs ZXMsDQogICAgdGhhdCBpcyBpbnRlbnRpb25hbC4NCiAg4oCiIEFsbW9zdCBldmVyeSBPQ2FtbCBm aWxlIGNhbiBiZSByZWZlcmVuY2VkIHdpdGggYSBmdWxseS1xdWFsaWZpZWQNCiAgICBuYW1lLiBJ ZiB0aGF0IHNvdW5kcyBsaWtlIEphdmEgcGFja2FnZXMgdGhhdCBpcyBpbnRlbnRpb25hbC4NCg0K ICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOg0KDQogIDEuICgqb25lIG9mIG15IG93biBzY3JpcHRz KikgVGhlIGluY29tcGxldGUgYnV0IGdyb3dpbmcgRGtDb2Rlcg0KICAgICBkb2N1bWVudGF0aW9u IGlzIHdyaXR0ZW4gaW4gYSBzY3JpcHQ6DQogICAgIDxodHRwczovL2Rpc2t1di5jb20vZGtzZGsv Y29kZXIvMjAyNC1pbnRyby1zY3JpcHRpbmcvPi4gL1RoZQ0KICAgICBkb2N1bWVudGF0aW9uIGlz IGEgc2lkZS1lZmZlY3Qgb2YgcnVubmluZyB0ZXN0cy4vDQoNCiAgICAgSW4gYSBVbml4IHNoZWxs IG9yIGluIFBvd2VyU2hlbGwsIHRoZSBmb2xsb3dpbmcgd2lsbCBhKSBydW4gdGVzdHMNCiAgICAg dXNpbmcgW3RlenRdLCBiKSBjb2xsZWN0IG91dHB1dHMsIGMpIGdlbmVyYXRlIEhUTUwgZG9jdW1l bnRhdGlvbiwNCiAgICAgYW5kIHRoZW4gZCkgc2VydmUgdGhlIGRvYyBwYWdlIG9uIGEgW3Rpbnlf aHR0cGRdIHdlYnNlcnZlciBmb3IgYQ0KICAgICBxdWljayBwcmV2aWV3Og0KDQogICAgIOKUjOKU gOKUgOKUgOKUgA0KICAgICDilIIgZ2l0IGNsb25lIC0tYnJhbmNoIFYwXzIgaHR0cHM6Ly9naXRs YWIuY29tL2Rpc2t1di9zYW1wbGVzL2RrY29kZXIvRGtIZWxsb1NjcmlwdC5naXQNCiAgICAg4pSC IA0KICAgICDilIIgLi9Ea0hlbGxvU2NyaXB0L2RrIERrUnVuX1YwXzIuUnVuIC0tIERrSGVsbG9T Y3JpcHRfU3RkLlkzM0FydGljbGUgLS1zZXJ2ZQ0KICAgICDilJTilIDilIDilIDilIANCg0KICAg ICBUaGUgZm9sbG93aW5nIHdpbGwgcHJpbnQgbWl4ZWQgTWFya2Rvd24vSFRNTCB0aGF0IEkgY2Fu IHJlbmRlciBhbmQNCiAgICAgcHVibGlzaCB3aXRoIGEgc3RhdGljIHNpdGUgZ2VuZXJhdG9yIHRv IGEgd2Vic2l0ZToNCg0KICAgICDilIzilIDilIDilIDilIANCiAgICAg4pSCIC4vRGtIZWxsb1Nj cmlwdC9kayBEa1J1bl9WMF8yLlJ1biAtLSBEa0hlbGxvU2NyaXB0X1N0ZC5ZMzNBcnRpY2xlIC0t ZG9jIC0tZG9jLWZvcm1hdCBtYXJrZG93bg0KICAgICDilJTilIDilIDilIDilIANCg0KICAyLiAo KnNvbWVvbmUgZWxzZSdzKikgVGhlIEJvZ3VlIGRlbW8gZ2FtZSBTbm9rZSB3cml0dGVuIGJ5IEBz YW5ldHRlDQogICAgIHdhcyAicG9ydGVkIiB0byBEa0NvZGVyLiAvVGhlIHBvcnQgZGlkIG5vdCBj aGFuZ2UgYSBzaW5nbGUgbGluZSBvZg0KICAgICB0aGUgb3JpZ2luYWwgY29kZS8uIEkgZGlkIHJl LWFycmFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUNCiAgICAgKHJlY2FsbCB0aGF0IHRoZXJl IGlzIGEgSmF2YS1saWtlIHBhY2thZ2UgbWVjaGFuaXNtIHVuZGVybmVhdGgNCiAgICAgRGtDb2Rl cikgYW5kIEkgZGlkIGFkZCBhbiBleHRyYSBgLm1sJyBmaWxlLiBSdW46DQoNCiAgICAg4pSM4pSA 4pSA4pSA4pSADQogICAgIOKUgiBnaXQgY2xvbmUgLS1icmFuY2ggVjBfMiBodHRwczovL2dpdGxh Yi5jb20vZGlza3V2L3NhbXBsZXMvZGtjb2Rlci9TYW5ldHRlQm9ndWUuZ2l0DQogICAgIOKUgiAN CiAgICAg4pSCIC4vU2FuZXR0ZUJvZ3VlL2RrIERrUnVuX1YwXzIuUnVuIC0tIFNhbmV0dGVCb2d1 ZV9Tbm9rZS5Tbm9rZQ0KICAgICDilJTilIDilIDilIDilIANCg0KICBUaGUgcmVtYWluaW5nIGl0 ZW1zIGZvciBEa0NvZGVyIGJlZm9yZSBhIDEueCByZWxlYXNlOiBhdXRvLWRvd25sb2FkaW5nDQog IHJlbW90ZSBsaWJyYXJpZXMgKG1vc3RseSBkb25lKSwgbWV0YS9jb2RlZ2VuIHRvb2xzIChpbiBw cm9ncmVzcyksDQogIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIChpbiBkZXNpZ24pLCBhbmQgYSBz ZWN1cml0eSBwb2xpY3kgKGluDQogIGRlc2lnbikuDQoNCiAgQnV0IHJpZ2h0IG5vdyBEa0NvZGVy IGlzIGF0IGEgcmVhc29uYWJsZSBlbm91Z2ggcG9pbnQgdGhhdCBJIGNhbiBub3cNCiAgcmVjb21t ZW5kIHVzaW5nIGl0IGZvciB5b3VyIG93biBzY3JpcHRzLiBXaXRoIHRoZSB1c3VhbCBjYXZlYXRz IHRoYXQNCiAgdGhpcyBpcyBhIDAueCByZWxlYXNlLg0KDQogIC9JJ2QgbGlrZSBzb21lIGZlZWRi YWNrLCBlc3BlY2lhbGx5IG9uIHBhaW4gcG9pbnRzIGFuZCBtaXNzaW5nDQogIG11c3QtaGF2ZSBm ZWF0dXJlcy4vDQoNCg0KW3RlenRdIDxodHRwczovL3YzLm9jYW1sLm9yZy9wL3RlenQvbGF0ZXN0 Pg0KDQpbdGlueV9odHRwZF0gPGh0dHBzOi8vdjMub2NhbWwub3JnL3AvdGlueV9odHRwZC9sYXRl c3Q+DQoNClRlY2ggRGV0YWlscyAoaWYgaW50ZXJlc3RlZCkNCuKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjA0KDQogIFZlcnkgc2ltcGxpc3RpY2FsbHksIERrQ29kZXIgaXMgYSBoaWdoLWxldmVs IGJ1aWxkIHN5c3RlbSB0aGF0DQogIHRyYW5zcGFyZW50bHkgbWFuYWdlcyBsb3dlci1sZXZlbCBi dWlsZCBzeXN0ZW1zICh0b2RheSB0aGF0IGlzIER1bmUpLg0KICBJIHRoaW5rICg/KSBEa0NvZGVy IGlzIHRoZSBmaXJzdCBidWlsZCBzeXN0ZW0gdG8gdXNlIFt0aGUgYGNvZGVwdCcNCiAgT0NhbWwg ZGVwZW5kZW5jeSBhbmFseXplcl0uIEh1Z2UgaHVnZSB0aGFua3MgdG8gQG9jdGFjaHJvbiBmb3Ig dGhhdA0KICB0b29sLg0KDQogIFRoZSByYXRoZXIgYm9yaW5nIGRyaXZlciBwaXBlbGluZSBpczoN Cg0KICAxLiBTZWVkIGEgInVuaXZlcnNlIiBvZiBtb2R1bGVzIHdpdGggdGhlIHNpbmdsZSBgLm1s JyBmaWxlIHRoZSB1c2VyDQogICAgIHdhbnRzIHRvIHJ1biBmcm9tIHRoZSBgLi9kaycgQ0xJLCBv ciBzZWVkIHdpdGggYWxsIHRoZSBgLm1sJyBmaWxlcw0KICAgICBpZiBydW4gdGhyb3VnaCBPQ2Ft bCBMU1AuDQogIDIuIExldCBgY29kZXB0JyBhbmFseXNlIGFueSBtb2R1bGUgcmVmZXJlbmNlcyBp bnNpZGUgdGhlIGN1cnJlbnQNCiAgICAgdW5pdmVyc2UuIEFueSAqbWlzc2luZyBtb2R1bGVzKiBh cmUgbG9jYXRlZCBhbmQgYWRkZWQgdG8gdGhlDQogICAgIHVuaXZlcnNlLiBSaW5zZSBhbmQgcmVw ZWF0IHVudGlsIHRoZXJlIGlzIGEgY2xvc2VkIHVuaXZlcnNlIHdpdGggbm8NCiAgICAgbW9yZSBt aXNzaW5nIG1vZHVsZSByZWZlcmVuY2VzLg0KICAzLiBHZW5lcmF0ZSBhbmQvb3IgaW5jcmVtZW50 YWxseSB1cGRhdGUgdGhlIGJ1aWxkIGZpbGVzLiBFYWNoIGAubWwnDQogICAgIGZpbGUgaXMgbWFw cGVkIHRvIGEgc2luZ2xlIE9DYW1sIGAuY21hJyBsaWJyYXJ5Lg0KICA0LiBSdW4gdGhlIGNob3Nl biBidWlsZCB0b29sIChpZS4gRHVuZSkgYW5kIGV4ZWN1dGUgdGhlIGNvZGUuDQoNCiAgV2hhdCBk b2VzIHRoYXQgcGlwZWxpbmUgZ2l2ZSB1cz8gRXZlbiBpbiB0aGlzIGVhcmx5IDAuMiByZWxlYXNl IHlvdQ0KICBnZXQgc29tZSB1bnVzdWFsIGJlbmVmaXRzOg0KDQogIOKAoiBTdGVwIDI6IFRoZSAq bWlzc2luZyBtb2R1bGVzKiBjYW4gYmUgY3JlYXRlZCBpbXBsaWNpdGx5LiBUaGUgU25va2UNCiAg ICBnYW1lIGhhcyBmb250LCBpbWFnZSBhbmQgc291bmQgYXNzZXRzLiBCeSB1c2luZyBgVHIxQXNz ZXRzLkxvY2FsRGlyJw0KICAgIGluIHRoZSBjb2RlIERrQ29kZXIgYXV0b21hdGljYWxseSBjcmVh dGVzIGEgbW9kdWxlIHRoYXQgaGFzIGFsbCB0aGUNCiAgICBhc3NldHMgKHRoaW5rIFtvY2FtbC1j cnVuY2hdKS4gSWYgYSBzY3JpcHQgZG9lcyBub3QgbmVlZCB0aGUgYXNzZXRzLA0KICAgIHRoZSBg Y29kZXB0JyBhbmFseXNpcyBrbm93cyBpdCBkb2Vzbid0IHVzZSBgVHIxQXNzZXRzJywgYW5kIHRo ZQ0KICAgIGFzc2V0cyB3b24ndCB3YXN0ZSB0aW1lIGdldHRpbmcgYnVpbHQuDQogIOKAoiBTdGVw IDM6IFRoZSAqb25lLXRvLW9uZSAubWwvLmNtYSBjb3JyZXNwb25kZW5jZSogbWVhbnMgRGtDb2Rl ciBjYW4NCiAgICBhcHBseSBhIHVuaXF1ZSBzZXQgb2YgY29tcGlsZXIgZmxhZ3MgdG8gZWFjaCBg Lm1sJyBmaWxlLiBZb3UgZ2V0IHRoZQ0KICAgIEphdmEtbGlrZSBwYWNrYWdlIHN0cnVjdHVyZSBi eSBvcGVuaW5nIGEgdW5pcXVlIHNldCBvZiBtb2R1bGVzIHBlcg0KICAgIGAubWwnIHdpdGggYC1v cGVuJyBmbGFncyAobml0OiBJIGFsc28gdXNlZCBpbXBsaWNpdGx5IGNyZWF0ZWQNCiAgICBkaXJl Y3RvcnkgbW9kdWxlcyB0byBsZXQgeW91IG5hdmlnYXRlIHRoZSBwYWNrYWdlcyBpbiB5b3VyIHNv dXJjZQ0KICAgIGNvZGUpLg0KICDigKIgU3RlcCA0OiBZb3UgY2FuIHRha2UgdGhlIGdlbmVyYXRl ZCBgZHVuZS1wcm9qZWN0JyBhbmQgYGR1bmUnIGZpbGVzLA0KICAgIHR3ZWFrIHRoZW0gYW5kIHJ1 biB0aGVtIG91dHNpZGUgb2YgRGtDb2Rlci4gL1RoYXQgbWVhbnMgeW91IGFyZSBub3QNCiAgICBs b2NrZWQgaW50byBEa0NvZGVyIS8gWW91IGNhbiBhbHRlcm5hdGl2ZWx5IGRvIHdoYXQgSSBkaWQg d2l0aA0KICAgIFNub2tlOiBtYWtlIHlvdXIgcHJvamVjdCBjb21wYXRpYmxlIHdpdGggYm90aCBy ZWd1bGFyIGR1bmUNCiAgICAoL29jYW1sYnVpbGQvZXRjLikgYW5kIERrQ29kZXIuIEVpdGhlciB3 YXksIHlvdSBvbmx5IG5lZWQgdG8gZGVhbA0KICAgIHdpdGggdHdvIGlzc3VlcyB0aGF0IGFyaXNl IGZyb20gRGtDb2RlcidzIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIGFuZA0KICAgIHByZWJ1aWx0IEMg bGlicmFyaWVzOiBhKSBidWlsZCBDIGRlcGVuZGVuY2llcyB5b3Vyc2VsZiwgYW5kIGIpIHRlbGwN CiAgICBEdW5lIHRvIHN3aXRjaCBmcm9tIGJ5dGVjb2RlIG1vZGUgdG8gbmF0aXZlIGNvZGUgbW9k ZS4gSWYgeW91IGFyZSBhDQogICAgbWlsZGx5IGV4cGVyaWVuY2VkIExpbnV4L09DYW1sIHVzZXIg d2hvIHVuZGVyc3RhbmRzIHRoZSB0ZXJtcw0KICAgICJvcGFtIiwgInBrZy1jb25maWciLCAiZGVw ZXh0cyIsIGFuZCAiZHVuZS1jb25maWd1cmF0b3IiLCB0aGlzIGlzIGENCiAgICBsb3cgYmFyLg0K DQogIFNjcmlwdCByZWZlcmVuY2VzOg0KICDigKIgW2h0dHBzOi8vZ2l0bGFiLmNvbS9kaXNrdXYv c2FtcGxlcy9ka2NvZGVyL0RrSGVsbG9TY3JpcHQuZ2l0XQ0KICDigKIgW2h0dHBzOi8vZ2l0bGFi LmNvbS9kaXNrdXYvc2FtcGxlcy9ka2NvZGVyL1NhbmV0dGVCb2d1ZS5naXRdDQoNCg0KW3RoZSBg Y29kZXB0JyBPQ2FtbCBkZXBlbmRlbmN5IGFuYWx5emVyXQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2Ft bC5vcmcvdC9sb2NhbC1vcGVuLXNlZW1zLXRvLWNvbmZ1c2UtZHVuZXMtZGVwZW5kZW5jeS1jeWNs ZS1kZXRlY3Rvci85NTI5LzI/dT1qYmVja2ZvcmQ+DQoNCltvY2FtbC1jcnVuY2hdIDxodHRwczov L3YzLm9jYW1sLm9yZy9wL2NydW5jaC9sYXRlc3Q+DQoNCltodHRwczovL2dpdGxhYi5jb20vZGlz a3V2L3NhbXBsZXMvZGtjb2Rlci9Ea0hlbGxvU2NyaXB0LmdpdF0NCjxodHRwczovL2dpdGxhYi5j b20vZGlza3V2L3NhbXBsZXMvZGtjb2Rlci9Ea0hlbGxvU2NyaXB0LmdpdD4NCg0KW2h0dHBzOi8v Z2l0bGFiLmNvbS9kaXNrdXYvc2FtcGxlcy9ka2NvZGVyL1NhbmV0dGVCb2d1ZS5naXRdDQo8aHR0 cHM6Ly9naXRsYWIuY29tL2Rpc2t1di9zYW1wbGVzL2RrY29kZXIvU2FuZXR0ZUJvZ3VlLmdpdD4N Cg0KDQpPY2FtbC1wcm90b2MtcGx1Z2luIDYuMS4wDQrilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBB cmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vY2FtbC1wcm90b2Mt cGx1Z2luLTYtMS0wLzE0NTY2LzE+DQoNCg0KQW5kZXJzIEZ1Z21hbm4gYW5ub3VuY2VkDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBJJ20gaGFwcHkgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgW09j YW1sLXByb3RvYy1wbHVnaW5dIHZlcnNpb24NCiAgNi4xLjAgT2NhbWwtcHJvdG9jLXBsdWdpbmlz IGEgcGx1Z2luIGZvciBnb29nbGUncyBwcm90b2J1ZiBjb21waWxlcg0KICAoYHByb3RvYycpIHRo YXQgZ2VuZXJhdGVzIGFuIGlkb21hdGljIG9jYW1sIG1hcHBpbmcgYW5kDQogIChkZS0pc2VyaWFs aXphdGlvbiBmdW5jdGlvbnMgYmFzZWQgb24gLnByb3RvIGZpbGVzLiBUaGUgbGlicmFyeSBhaW1z DQogIHRvIGJlIDEwMCUgY29tcGxpYW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm90b2J1ZiBz cGVjaWZpY2F0aW9uLg0KDQogIFRoZSA2LjEuMCAoYW5kIDYuMC4wKSByZWxlYXNlIGludHJvZHVj ZXMgSnNvbiBzZXJpYWxpemF0aW9uIGFuZA0KICBkZXNlcmlhbGl6YXRpb24gYmFzZWQgb24gcHJv dG9idWZmZXJzIGd1aWRlbGluZXMgYW5kIHRoZSBhYmlsaXR5IHRvDQogIGNvcHkgY29tbWVudHMg ZnJvbSAucHJvdG8gaW50byBvY2FtbCBnZW5lcmF0ZWQgY29kZSBmb3IgaW1wcm92ZWQNCiAgZG9j dW1lbnRhdGlvbiBhcyB3ZWxsIGFzIG51bWVyb3VzIGJ1ZyBmaXhlcyBhbmQgb3RoZXIgaW1wcm92 ZW1lbnRzLg0KDQogICpGdWxsIGNoYW5nZWxvZyBzaW5jZSByZWxlYXNlIDUuMC4wKg0KDQoNCltP Y2FtbC1wcm90b2MtcGx1Z2luXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRlcnNmdWdtYW5uL29j YW1sLXByb3RvYy1wbHVnaW4+DQoNCjYuMS4wOiAyMDI0LTA0LTI1DQrilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgRml4IG5hbWUgcmVz b2x1dGlvbiBsZWFkaW5nIHRvIHdyb25nbHkgbWFwcGVkIG5hbWVzDQogIOKAoiBGaXggY29kZWdl biBidWcgY2F1c2luZyB0aGUgcGx1Z2luIHRvIHJlamVjdCB2YWxpZCBwcm90b2J1Zg0KICDigKIg QWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG1lbGFuZ2UgdGhvdWdoIGRpc2FibGluZyBlYWdl cg0KICAgIGV2YWx1YXRpb24gb2Ygc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBmdW5jdGlvbnMg d2hlbiBub3QgdXNpbmcNCiAgICBuYXRpdmUgb3IgYnl0ZWNvZGUgYmFja2VuZHMNCiAg4oCiIEZp eCBtaXNzaW5nIGNmbGFncyB3aGVuIGNvbXBpbGluZyB0ZXN0IGMgc3R1Yg0KICDigKIgTWFrZSBN YXAgdGVzdHMgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIHByb3RvYw0KICDigKIg Rml4IG5lZ2F0aXZlIGludGVnZXIgdGVzdCBmYWlsdWVzIGR1ZSB0byBhIGJ1ZyBpbiBvbGRlciB2 ZXJzaW9ucyBvZg0KICAgIHByb3RvYnVmIChnb29nbGUpIGMgbGliDQoNCg0KNi4wLjA6IDIwMjQt MDQtMTMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jA0KDQril4ogTmV3IGZlYXR1cmVzDQoNCiAg4oCiIEltcGxlbWVudCBqc29uIHNlcmlhbGl6YXRp b24gYW5kIGRlc2VyaWFsaXphdGlvbiAoIzUpDQogIOKAoiBTdXBwb3J0IHNwZWNpYWwganNvbiBt YXBwaW5nIGZvciBnb29nbGUgdHlwZXMgKCM5KQ0KICDigKIgQWRkIGRlcHJlY2F0aW9uIGFubm90 YXRpb25zIGZvciBkZXByZWNhdGVkIGZpZWxkcywgc2VydmljZXMgZXRjICgjOCkNCiAg4oCiIEFk ZCBvcHRpb24gdG8gcHJlZml4IGdlbmVyYXRlZCBmaWxlcyB3aXRoIHRoZWlyIHBhY2thZ2UgbmFt ZQ0KICDigKIgQ29weSBkb2N1bWVudGF0aW9uIGZyb20gcHJvdG8gZmlsZXMgaW50byBnZW5lcmF0 ZWQgb2NhbWwgYmluZGluZ3MNCg0KDQril4ogQnVnIGZpeGVzDQoNCiAg4oCiIEZpeCBmaWxlIG91 dHB1dCBuYW1lIGlmIGZpbGVzIGNvbnRhaW5zIGEgJy0nDQogIOKAoiBSZXNvbHZlIGJ1ZyBmb3Ig UmVxdWVzdC9SZXNwb25zZSBtb2R1bGUgYWxpYXNlcyBsZWFkaW5nIHRvDQogICAgZ2VuZXJhdGlu ZyB1bmNvbXBpbGFibGUgY29kZS4gKCMyMSkNCiAg4oCiIEZpeCBjb2RlZ2VuIGJ1ZyBmb3IgbWVz c2FnZXMgd2l0aG91dCBmaWVsZHMgYW5kIHNldHRpbmcNCiAgICBzaW5nbGV0b25fcmVjb3JkcyA9 IHRydWUgKCMyMCkNCiAg4oCiIEluIFNlcnZpY2VzLCB0aGUgcGFja2FnZSBmaWVsZCBpcyBub3cg Y29ycmVjdGx5IHNldCB0byBOb25lIGlmIHRoZQ0KICAgIHNlcnZpY2UgaWYgbm90IGRlZmluZWQg aW4gYSBwYWNrYWdlIHNjb3BlICgjMjQpDQoNCg0K4peKIE1pc2MgY2hhbmdlcw0KDQogIOKAoiBV bmlmeSBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gc3BlYyBhbmQgb3B0aW1pemUg b25lb2YNCiAgICBoYW5kbGluZw0KICDigKIgU2ltcGxpZnkgdHlwZXMgdXNlZCBpbiBjb2RlIGdl bmVyYXRpb24gdG8gaW1wcm92ZSByZWFkYWlsaXR5DQogIOKAoiAqUmVwbGFjZSBgdmFsIG5hbWUn OiB1bml0IC0+IHN0cmluZycgd2l0aCBgdmFsIG5hbWU6IHVuaXQgLT4gc3RyaW5nJw0KICAgICB3 aGljaCB3aWxsIG9ubHkgcmV0dXJuIHRoZSBmdWxsIHByb3RvYnVmIG5hbWUNCiAg4oCiIE9wdGlt aXplIG1lcmdlIGZ1bmN0aW9ucyBieSBhcHBseWluZyBlYWdlciBldmFsdWF0aW9uDQogIOKAoiBD aGFuZ2Ugc2lnbmF0dXJlIG9mIGB0b19wcm90bycnIHRvIHJldHVybiB1bml0IGFuZCBub3QgYSB3 cml0ZXINCg0KICAoYConIGluZGljYXRlcyBicmVha2luZyBjaGFuZ2UpDQoNCg0K4peKIE5vdGVz DQoNCiAgYE1lc3NhZ2UubmFtZSc6IHVuaXQgLT4gc3RyaW5nJyBoYXMgYmVlbiByZW5hbWVkIHRv IGBNZXNzYWdlLm5hbWU6DQogICAgdW5pdCAtPiBzdHJpbmcnLCBhbmQgaXMgbm93IGNvbnRhaW5z IHRoZSBmdWxseSBxdWFsaWZpZWQgcHJvdG9idWYNCiAgICBtZXNzYWdlIG5hbWUuIEJlZm9yZSB0 aGUgbmFtZSB3YXMgdGhlIG9jYW1sIG1vZHVsZSBuYW1lIG9mIHRoZQ0KICAgIG1lc3NhZ2UuDQoN CiAgYFNlcnZpY2UuTWVzc2FnZScgc2lnbmF0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHJl cGxhY2VkIHdpdGgNCiAgYFNwZWMuTWVzc2FnZScgc2lnbmF0dXJlLiBgU2VydmljZS5NZXNzYWdl JyBpcyBub3cgYW4gYWxpYXMgZm9yDQogIGBTcGVjLk1lc3NhZ2UnIGFuZCB3aWxsIGJlIHJlbW92 ZWQgaW4gZnV0dXJlIHJlbGVhc2VzLg0KDQoNCk90aGVyIE9DYW1sIE5ld3MNCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQpGcm9tIHRoZSBvY2FtbC5v cmcgYmxvZw0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGVyZSBhcmUgbGlua3MgZnJvbSBtYW55IE9DYW1s IGJsb2dzIGFnZ3JlZ2F0ZWQgYXQgW3RoZSBvY2FtbC5vcmcNCiAgYmxvZ10uDQoNCiAg4oCiIFtP Q2FtbCBCYWNrdHJhY2VzIG9uIFVuY2F1Z2h0IEV4Y2VwdGlvbnNdDQogIOKAoiBbVW5kZXIgdGhl IEhvb2Q6IERldmVsb3BpbmcgTXVsdGljb3JlIFByb3BlcnR5LUJhc2VkIFRlc3RzIGZvciBPQ2Ft bA0KICAgIDVdDQoNCg0KW3RoZSBvY2FtbC5vcmcgYmxvZ10gPGh0dHBzOi8vb2NhbWwub3JnL2Js b2cvPg0KDQpbT0NhbWwgQmFja3RyYWNlcyBvbiBVbmNhdWdodCBFeGNlcHRpb25zXQ0KPGh0dHBz Oi8vb2NhbWxwcm8uY29tL2Jsb2cvMjAyNF8wNF8yNV9vY2FtbF9iYWNrdHJhY2VzX29uX3VuY2F1 Z2h0X2V4Y2VwdGlvbnM+DQoNCltVbmRlciB0aGUgSG9vZDogRGV2ZWxvcGluZyBNdWx0aWNvcmUg UHJvcGVydHktQmFzZWQgVGVzdHMgZm9yIE9DYW1sIDVdDQo8aHR0cHM6Ly90YXJpZGVzLmNvbS9i bG9nLzIwMjQtMDQtMjQtdW5kZXItdGhlLWhvb2QtZGV2ZWxvcGluZy1tdWx0aWNvcmUtcHJvcGVy dHktYmFzZWQtdGVzdHMtZm9yLW9jYW1sLTU+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1l IGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29r IGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0K DQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlv dSBtYXkgc3Vic2NyaWJlDQogIHRvIHRoZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBTY2htaXR0 XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2hu aXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQv Y3duLz4NCg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVw b21tZS5uZXQvY3duL2N3bi5yc3M+DQoNCltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBhLmlucmlh LmZyL3N5bXBhL2luZm8vY2FtbC1saXN0Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFu LnBldGl0ZXBvbW1lLm5ldC8+DQoNCg== --=-=-= Content-Type: text/html Content-Disposition: inline OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of April 23 to 30, 2024.

OCANNL 0.3.1: a from-scratch deep learning (i.e. dense tensor optimization) framework

Lukasz Stafiniak announced

Third time the charm. OCANNL 0.3.3 is out now. I might need to change the name of the project, because of the lint warnings: Possible name collision with packages 'OCADml', 'ocal', 'ocaml'?

I roughly translated Real World OCaml's Async concurrency chapter to eio

Dennis Dang announced

Repo at https://github.com/dangdennis/rwo-eio/blob/main/lib/rwo_eio.ml

I was inspired by Taride's Make an Eio version of the Async examples in Real World OCaml to translate the Async examples to eio to test out eio's concurrency story. Warning, it's a rough translation. I hardly know OCaml and eio as well as I know my day-job languages :smile: .

There are still a few examples I haven't figured out.

  1. I don't know how to implement copy_blocks. In this section, the example uses an intermediate buffer of some sorts to then copy from reader to writer. For now, I've left that intermediate buffer out.
  2. I can't find an interrupt option in cohttp-eio as well as choice and choose. The book explains that cohttp-async can cancel http requests via an interrupt (see section).
  3. For log_delays, I have yet to solve how to await my own every ticker such that I can await its completion and then log the timer at the end.

Using Property-Based Testing to Test OCaml 5

Jan Midtgaard announced

Here's a blog post about how we have been using property-based testing to test OCaml 5: https://tarides.com/blog/2024-04-24-under-the-hood-developing-multicore-property-based-tests-for-ocaml-5/

OCaml Backtraces on Uncaught Exceptions, by OCamlPro

OCamlPro announced

Here's another one of our heads up about our latest blog release!

Today's topic is about an unintentionally hidden feature of the OCaml dev environmment: backtraces on uncaught exception!

We believe this will be old news to the veteran OCaml devs but could be of much use to the newer Cameleers out there!

Hopefully, you will learn a thing or two from reading this short article, we welcome all feedback in this very thread, thank you for reading!

OCaml Users on Windows: Please share your insights on our user survey

Sudha Parimala announced

Do you use OCaml on Windows? We want to hear from you! Participate in our user survey to share your experiences with the OCaml development environment on Windows. Your feedback is important in helping us understand the current pain points and identify areas for improvement. Whether you're a seasoned OCaml developer or just starting out, your input can make a significant difference.

Please sign up here https://forms.gle/SxRvNaEZXgedxrnR9, and we'll reach out to you.

Graphql_jsoo_client 0.1.0 - library for GraphQL clients using WebSockts

Hans Ole Rafaelsen announced

I'm glad to announce the release of graphql_jsoo_client.

This is the client side implementation of the GraphQL over WebSocket Protocol. It is mainly intended for use with Dream, which implements the server side. This library supports writing client code in Ocaml, that will run in the browser.

It can be found here.

dream-html 3.0.0

Yawar Amin announced

[ANN] dream-html 3.4.1

Add 'livereload' support ie automatically reloading the page in the browser when the Dream server restarts. Useful to run with dune's watch mode for a fast dev cycle.

This is adapted from Dream's own livereload middleware but with a slightly different approach. Full details in the module documentation: https://yawaramin.github.io/dream-html/dream-html/Dream_html/Livereload/

Why reimplement this? It seems that Dream's built-in livereload needs to parse the HTML markup, find its head tag, and dynamically inject the reloader script inside. Since parsing HTML can be pretty tricky and potentially buggy, I decided to manually add the script in the head tag as a strong-typed dream-html node:

head [] [
  ...
  Livereload.script;
  ...
]

DkCoder 0.2 - Scripting in OCaml

jbeckford announced

I'm happy to announce the second release of DkCoder, an OCaml scripting tool.

The first release was about install ease: a couple clicks and four (4) minutes later you and your Windows and macOS users can start scripting. All users, including glibc-based Linux desktop users, can also use their Unix shells or Windows PowerShell. OCaml does not need to be pre-installed. Just copy and paste two lines (you'll see some in this post) and your script is running and your project is editable with OCaml LSP.

This second release is about technical ease. The three "big" ideas in this release are:

  • You don't write build files. If that sounds like /bin/sh that is intentional.
  • Almost every OCaml file is a script you can run. If that sounds like how Python scripts are almost indistinguishable from Python modules, that is intentional.
  • Almost every OCaml file can be referenced with a fully-qualified name. If that sounds like Java packages that is intentional.

Here are some examples:

  1. (one of my own scripts) The incomplete but growing DkCoder documentation is written in a script: https://diskuv.com/dksdk/coder/2024-intro-scripting/. The documentation is a side-effect of running tests.

    In a Unix shell or in PowerShell, the following will a) run tests using tezt, b) collect outputs, c) generate HTML documentation, and then d) serve the doc page on a tiny_httpd webserver for a quick preview:

    git clone --branch V0_2 https://gitlab.com/diskuv/samples/dkcoder/DkHelloScript.git
    
    ./DkHelloScript/dk DkRun_V0_2.Run -- DkHelloScript_Std.Y33Article --serve
    

    The following will print mixed Markdown/HTML that I can render and publish with a static site generator to a website:

    ./DkHelloScript/dk DkRun_V0_2.Run -- DkHelloScript_Std.Y33Article --doc --doc-format markdown
    
  2. (someone else's) The Bogue demo game Snoke written by @sanette was "ported" to DkCoder. The port did not change a single line of the original code. I did re-arrange the directory structure (recall that there is a Java-like package mechanism underneath DkCoder) and I did add an extra .ml file. Run:

    git clone --branch V0_2 https://gitlab.com/diskuv/samples/dkcoder/SanetteBogue.git
    
    ./SanetteBogue/dk DkRun_V0_2.Run -- SanetteBogue_Snoke.Snoke
    

The remaining items for DkCoder before a 1.x release: auto-downloading remote libraries (mostly done), meta/codegen tools (in progress), conditional compilation (in design), and a security policy (in design).

But right now DkCoder is at a reasonable enough point that I can now recommend using it for your own scripts. With the usual caveats that this is a 0.x release.

I'd like some feedback, especially on pain points and missing must-have features.

Tech Details (if interested)

Very simplistically, DkCoder is a high-level build system that transparently manages lower-level build systems (today that is Dune). I think (?) DkCoder is the first build system to use the codept OCaml dependency analyzer. Huge huge thanks to @octachron for that tool.

The rather boring driver pipeline is:

  1. Seed a "universe" of modules with the single .ml file the user wants to run from the ./dk CLI, or seed with all the .ml files if run through OCaml LSP.
  2. Let codept analyse any module references inside the current universe. Any missing modules are located and added to the universe. Rinse and repeat until there is a closed universe with no more missing module references.
  3. Generate and/or incrementally update the build files. Each .ml file is mapped to a single OCaml .cma library.
  4. Run the chosen build tool (ie. Dune) and execute the code.

What does that pipeline give us? Even in this early 0.2 release you get some unusual benefits:

  • Step 2: The missing modules can be created implicitly. The Snoke game has font, image and sound assets. By using Tr1Assets.LocalDir in the code DkCoder automatically creates a module that has all the assets (think ocaml-crunch). If a script does not need the assets, the codept analysis knows it doesn't use Tr1Assets, and the assets won't waste time getting built.
  • Step 3: The one-to-one .ml/.cma correspondence means DkCoder can apply a unique set of compiler flags to each .ml file. You get the Java-like package structure by opening a unique set of modules per .ml with -open flags (nit: I also used implicitly created directory modules to let you navigate the packages in your source code).
  • Step 4: You can take the generated dune-project and dune files, tweak them and run them outside of DkCoder. That means you are not locked into DkCoder! You can alternatively do what I did with Snoke: make your project compatible with both regular dune (/ocamlbuild/etc.) and DkCoder. Either way, you only need to deal with two issues that arise from DkCoder's bytecode compilation and prebuilt C libraries: a) build C dependencies yourself, and b) tell Dune to switch from bytecode mode to native code mode. If you are a mildly experienced Linux/OCaml user who understands the terms "opam", "pkg-config", "depexts", and "dune-configurator", this is a low bar.

Script references:

Ocaml-protoc-plugin 6.1.0

Anders Fugmann announced

I'm happy to announce the release of Ocaml-protoc-plugin version 6.1.0 Ocaml-protoc-pluginis a plugin for google's protobuf compiler (protoc) that generates an idomatic ocaml mapping and (de-)serialization functions based on .proto files. The library aims to be 100% compliant implementation of the protobuf specification.

The 6.1.0 (and 6.0.0) release introduces Json serialization and deserialization based on protobuffers guidelines and the ability to copy comments from .proto into ocaml generated code for improved documentation as well as numerous bug fixes and other improvements.

Full changelog since release 5.0.0

6.1.0: 2024-04-25

  • Fix name resolution leading to wrongly mapped names
  • Fix codegen bug causing the plugin to reject valid protobuf
  • Add preliminary support for melange though disabling eager evaluation of serialize and deserialize functions when not using native or bytecode backends
  • Fix missing cflags when compiling test c stub
  • Make Map tests compatible with older versions of protoc
  • Fix negative integer test failues due to a bug in older versions of protobuf (google) c lib

6.0.0: 2024-04-13

  • New features
    • Implement json serialization and deserialization (#5)
    • Support special json mapping for google types (#9)
    • Add deprecation annotations for deprecated fields, services etc (#8)
    • Add option to prefix generated files with their package name
    • Copy documentation from proto files into generated ocaml bindings
  • Bug fixes
    • Fix file output name if files contains a '-'
    • Resolve bug for Request/Response module aliases leading to generating uncompilable code. (#21)
    • Fix codegen bug for messages without fields and setting singleton_records = true (#20)
    • In Services, the package field is now correctly set to None if the service if not defined in a package scope (#24)
  • Misc changes
    • Unify serialization and deserialization spec and optimize oneof handling
    • Simplify types used in code generation to improve readaility
    • *Replace val name': unit -> string with val name: unit -> string which will only return the full protobuf name
    • Optimize merge functions by applying eager evaluation
    • Change signature of to_proto' to return unit and not a writer

    (* indicates breaking change)

  • Notes

    Message.name': unit -> string has been renamed to Message.name: unit -> string, and is now contains the fully qualified protobuf message name. Before the name was the ocaml module name of the message.

    Service.Message signature has been deprecated and replaced with Spec.Message signature. Service.Message is now an alias for Spec.Message and will be removed in future releases.

Other OCaml News

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 look at the archive or the RSS feed of the archives.

If you also wish to receive it every week by mail, you may subscribe to the caml-list.

--=-=-=--