From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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=ghFeDGT/; 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=5ae1JPV7; dkim-atps=neutral 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=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by plum.tunbury.org (Postfix) with ESMTPS id 8722548E3C for ; Tue, 10 Dec 2024 13:49:04 +0000 (UTC) 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=GSMgajq7jYjz+2TrGTM1B/uhWC3vgEQDnM+Eo7VuC28=; b=ghFeDGT/M2iJK61kN0CHLZZRtBc1QMvfBI/2n7C1H1eMxmb+RVYj4QVI MRISMO02lpKBX4kiPiCO7v6lJbLMHqbVuCtqKFQl6n5PTm8R7L5+MrSaC XYJJnbclMNJK2NBL5i4XNQpOcRJ5f5sco9JApdaKMX3FsLlVVjjyFMUZi w=; 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:128.93.162.3 ip4:128.93.162.88 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.12,222,1728943200"; d="scan'208,217";a="198428567" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 10 Dec 2024 14:49:03 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 9E247E0D1E; Tue, 10 Dec 2024 14:49:03 +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 5137BE00B6 for ; Tue, 10 Dec 2024 14:48:59 +0100 (CET) IronPort-SDR: 675846ca_AnNUFup+J8lr054KJZyNQJkBEA3DCL//2gEET59AOD4XlYX ABH/N7ML9qHysP0h/L3MAoyikmHDFLZvfmeIg3g== X-IPAS-Result: =?us-ascii?q?A0HDCwAnRlhngSIeaIFaFoJGAoE/WygZAWNaMwcIRASEV?= =?us-ascii?q?lyCc44fgRaQN4p4gVYjgQIDGBYjFAEDAQ0uAQUNAQIEAQEDAQIBhDpGAhY5F?= =?us-ascii?q?YoGAh8GAQQyBw4BAgQBAQEBAwIDAQEBAQEBEAEBBQEBAQIBAQIEBgECEAEBP?= =?us-ascii?q?QVJhXsNSQEBAQECAQYEgWtRcWEEAwY3AQEBAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAgwBGRoBDlwBCAoTAQEjDwYYIwMQBAEGA?= =?us-ascii?q?wIEDQE1FwESFAaCDxRFgh9FAwQBDAaTJJp6Gjd6gTKBAYIMAQEGgQg+AgELA?= =?us-ascii?q?gIDAQ4JJQHaBoFkCYEwGIVrgkkaASpIagKESIQ8Jw+BVUSBFYJyB2+CEi0LF?= =?us-ascii?q?wEBAQEYgSQBAQhFCYMlgmmCJxmCZ3+BboEMgW+CD4M0ElSBXB6DPB0dL0aBD?= =?us-ascii?q?1mBL4oWgUciAyYzMgFVExcLBwVhgRQDLjcxg2CBAzmCEGlJNwINAjaCJCRYg?= =?us-ascii?q?k2DWIE/hGmEWYYmghlOHUADC209NxQbmzEBCTNGAUaBLoEwLw44BgEBKQMQH?= =?us-ascii?q?QcaCQUFARMSBAIEHAIuBAQOFQoLCAMCFxEIBAkOAg4FCC0FAwECCwIUGZJAD?= =?us-ascii?q?gYoBRgNAnWOTI4Rk1KBCjQHhB2BXQYMiBtpgSSVeoEXgm2BV4suhwCSSCKYW?= =?us-ascii?q?SKCNYclDYEYCV+BDx5MlUwGBA8NGYUdgW4LKDxvAQEaAgMJBzMaMEOCMwEBM?= =?us-ascii?q?QEJCjwcD4ghhgsXgjqBHoE+gSaBdTuCbYIItFZCNQIBAQE3AgcBCgEBAwmFR?= =?us-ascii?q?R0BAYFOgTaCF4VRbl0BAQ?= IronPort-PHdr: A9a23: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 idiBiMJiypFR8WHxjNQ24+B IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:7LFtjaAMXB2UPlPlHemR55DYdb4zR+YMi2TDtnoBKiC9F/bzqy nAppomPHPP5Qr5O0tBpTnjAsi9qBrnnPYf3WB7B9iftWfd1FeAHcVL0s/JwjHrGSHyn9Qtt5 tIQuxZE9O1KVB7iK/BkW2F+jsbsby6zJw= X-Talos-CUID: 9a23:7WIHk2NkPhu3ae5DCGo2yEo/AsYeeyOA4nHABFXkImtWV+jA X-Talos-MUID: 9a23:gyuPwwtbndJdFNonCc2ngBNrCPlCs+OVDAMW1qoNpdCnPjVfAmLI X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.12,222,1728943200"; d="scan'208,217";a="198428534" X-MGA-submission: =?us-ascii?q?MDGrriq/Hmi6i4HzuOnHpmWL92Ejc1SFAne3Xz?= =?us-ascii?q?uPyRzqvJWOdpf39qxOn8n1oNwS7AjUoJqoZNdNNzLMMJYwM7xcJyZW9s?= =?us-ascii?q?oPIOrYUrX+xQsZwXmXx18ccErpkTIYUB7pW9MCXV82Odm/BhGoORlfLj?= =?us-ascii?q?NAEJgBJgeiAX2J0q0YEM/XGg=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Dec 2024 14:48:58 +0100 Received: from TM.local (unknown [31.32.212.183]) (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 D458E5648DE; Tue, 10 Dec 2024 14:48:56 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1733838537; bh=9EqlMiP1blRIs+zQTniDKyXMehuZ/P6wd/FEy/eIkIo=; h=From:To:Subject:Date:Message-ID; b=5ae1JPV73wxGMbRWxQH9mPjwSKPvYV0/3VX+hCo3ZqH/nyomwIdlgPKW4U+Ucb8W6 ph1uBN2g/cK9c0g3N5DmgR15g4OWGuKmpHjRQtJiZuOgbzetKTABUMb8bc7K4lLbgU gffY/iyrIkiQq+GN6zWDQ3z2u9M/P5tKfl7qq1yc= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 10 Dec 2024 14:48:56 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Dec 10 14:48:57 2024 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.419851, queueID=5E2025648E6 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: 19227 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 ZWsgb2YgRGVjZW1iZXIgMDMgdG8gMTAsDQoyMDI0Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNClJlbGVh c2Ugb2YgY3BwbyAxLjguMA0KTmV3IHJlbGVhc2VzIG9mIE1lcmxpbiBhbmQgT0NhbWwtTFNQDQpO ZXcgcmVsZWFzZSBvZiBiYWJ5DQpSZWxlYXNlIG9mIFNhdHVybiAxLjANCkR1bmUgZGV2IG1lZXRp bmcNCkR1bmUgMy4xNw0KU3BlYyBhbmQgaW50ZXJmYWNlIHRvIGRlY2xhcmUgZGVwZW5kZW5jaWVz IGluIGFuIE9DYW1sIHNjcmlwdA0KT3RoZXIgT0NhbWwgTmV3cw0KT2xkIENXTg0KDQoNClJlbGVh c2Ugb2YgY3BwbyAxLjguMA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9hbm4tcmVsZWFzZS1vZi1jcHBvLTEtOC0wLzE1NzQ5LzE+DQoNCg0KRnJh bsOnb2lzIFBvdHRpZXIgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIGFt IHBsZWFzZWQgdG8gYW5ub3VuY2UgYSBuZXcgcmVsZWFzZSBvZiBgY3BwbycgKDEuOC4wKSB3aXRo IG9uZSBuZXcNCiAgZmVhdHVyZSBhbmQgb25lIGJ1ZyBmaXg6DQoNCiAg4oGDIEEgc2NvcGUsIGRl bGltaXRlZCBieSBgI3Njb3BlIC4uLiAjZW5kc2NvcGUnLCBsaW1pdHMgdGhlIGVmZmVjdCBvZg0K ICAgIGAjZGVmaW5lJywgYCNkZWYgLi4uICNlbmRkZWYnLCBhbmQgYCN1bmRlZicuDQogIOKBgyBU aGUgY29tbWFuZCBgY3BwbyAtdmVyc2lvbicsIHdoaWNoIHVzZWQgdG8gcHJpbnQgYSBibGFuayBs aW5lLCBoYXMNCiAgICBiZWVuIGZpeGVkLg0KDQogIEZvciBtb3JlIGRldGFpbHMsIHBsZWFzZSBz ZWUgdGhlIFtkb2N1bWVudGF0aW9uXS4NCg0KDQpbZG9jdW1lbnRhdGlvbl0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9vY2FtbC1jb21tdW5pdHkvY3Bwby8+DQoNCg0KTmV3IHJlbGVhc2VzIG9mIE1lcmxp biBhbmQgT0NhbWwtTFNQDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L2Fubi1uZXctcmVsZWFzZXMtb2YtbWVybGluLWFuZC1vY2FtbC1sc3AvMTU3NTIvMT4NCg0KDQp2 ZHMgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0K ICBJIGFtIHBsZWFzZWQgdG8gYW5ub3VuY2UgbmV3IHJlbGVhc2VzIG9mIE1lcmxpbiAoYDUuMy01 MDInIGFuZA0KICBgNC4xOC00MTQnKSBhbmQgT0NhbWwtTFNQIChgMS4yMC4xJyBhbmQgYDEuMjAu MS00LjE0JykuDQoNCiAgVGhlIE1lcmxpbiByZWxlYXNlcyBidW5kbGUgYSBoYW5kZnVsIG9mIGZp eGVzIHdoaWxlIHRoZSBMU1AgcmVsZWFzZXMNCiAgZm9jdXMgb24gYWRkaW5nIG1vcmUgY3VzdG9t IHF1ZXJpZXMuIFRoZXNlIGN1c3RvbSBxdWVyaWVzIHdpbGwgZW5hYmxlDQogIHRhaWxvcmVkIExT UCBjbGllbnRzIHRvIHByb3ZpZGUgdGhlIHNhbWUgcmljaCBPQ2FtbCBlZGl0aW5nIGZlYXR1cmVz DQogIGFzIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIG9yaWdpbmFsIE1lcmxpbiBtb2RlcyBmb3Ig RW1hY3MgYW5kIFZpbS4NCg0KICBMYXRlc3QgcmVsZWFzZXMgb2YgYHZzY29kZS1vY2FtbC1wbGF0 Zm9ybScgYWxyZWFkeSBwcm92aWRlIHR3byBuZXcNCiAgY29tbWFuZHM6IGBDb25zdHJ1Y3QnIGFu ZCBgSnVtcCcgdGhhdCByZXNwZWN0aXZlbHkgcHJvdmlkZSBhIGJldHRlciBVSQ0KICB0byBmaWxs IHR5cGVkIGhvbGVzIHdpdGggdmFsdWVzIGFuZCBqdW1wIHRvIHNwZWNpZmljIHBhcmVudA0KICBu b2Rlcy4gU2VhcmNoIGJ5IHR5cGUvcG9sYXJpdHkgYW5kIGEgY29tbWFuZCB0byBnZXQgdGhlIHR5 cGUgb2YNCiAgZ3Jvd2luZyBhbmQgc2hyaW5raW5nIHNlbGVjdGlvbnMgd2lsbCBhbHNvIGJlIGF2 YWlsYWJsZSBpbiB0aGUgZnV0dXJlLg0KDQogIDxodHRwczovL2dsb2JhbC5kaXNjb3Vyc2UtY2Ru LmNvbS9mbGV4MDIwL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvYy9jMDdkZTMxMzBjOTJjYjE2 MDEyMTU1MzFjNzVlY2MwNTQ1YTk3YjRkLmdpZj4NCg0KDQpNZXJsaW4gY2hhbmdlbG9nDQrilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0K4peKIG1lcmxp biA1LjMNCg0KICDigYMgbWVybGluIGJpbmFyeQ0KICAgIOKAoiBSZXNwZWN0IHRoZSBgRVhDTFVE RV9RVUVSWV9ESVInIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIHdoZW4NCiAgICAgIGxvb2tpbmcg Zm9yIGNtdCBmaWxlcyAoIzE4NTQpDQogICAg4oCiIEZpeCBvY2N1cnJlbmNlcyBidWcgaW4gd2hp Y2ggcmVsYXRpdmUgcGF0aHMgaW4gaW5kZXggZmlsZXMgYXJlDQogICAgICByZXNvbHZlZCBhZ2Fp bnN0IHRoZSBQV0QgcmF0aGVyIHRoYW4gdGhlIFNPVVJDRV9ST09UICgjMTg1NSkNCiAgICDigKIg Rml4IGV4Y2VwdGlvbiBpbiBwb2xhcml0eSBzZWFyY2ggKCMxODU4IGZpeGVzICMxMTEzKQ0KICAg IOKAoiBGaXgganVtcCB0byBgZnVuJyB0YXJnZXRzIG5vdCB3b3JraW5nICgjMTg2MywgZml4ZXMg IzE4NjIpDQogICAg4oCiIEZpeCB0eXBlLWVuY2xvc2luZyByZXN1bHRzIGluc3RhYmlsaXR5LiBU aGlzIHJldmVydHMgc29tZSBvdmVybHkNCiAgICAgIGFnZ3Jlc3NpdmUgZGVkdXBsaWNhdGlvbiB0 aGF0IHNob3VsZCBiZSBkb25lIG9uIHRoZSBjbGllbnQNCiAgICAgIHNpZGUuICgjMTg2NCkNCiAg ICDigKIgRml4IG9jY3VycmVuY2VzIG5vdCB3b3JraW5nIHdoZW4gdGhlIGRlZmluaXRpb24gY29t ZXMgZnJvbSBhDQogICAgICBoaWRkZW4gc291cmNlIGZpbGUgKCMxODY1KQ0KDQoNCk9DYW1sLUxT UCBjaGFuZ2Vsb2cNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjA0KDQril4ogMS4yMC4xDQoNCiAg4peKIEZlYXR1cmVzDQoNCiAgICDigKIg QWRkIGN1c3RvbQ0KICAgICAgW35vY2FtbGxzcC90eXBlU2VhcmNofl0oL29jYW1sLWxzcC1zZXJ2 ZXIvZG9jcy9vY2FtbGxzcC90eXBlU2VhcmNoLXNwZWMubWQpDQogICAgICByZXF1ZXN0ICgjMTM2 OSkNCiAgICDigKIgTWFrZSBNZXJsaW5KdW1wIGNvZGUgYWN0aW9uIGNvbmZpZ3VyYWJsZSAoIzEz NzYpDQogICAg4oCiIEFkZCBjdXN0b20NCiAgICAgIFt+b2NhbWxsc3AvanVtcH5dKC9vY2FtbC1s c3Atc2VydmVyL2RvY3Mvb2NhbWxsc3AvbWVybGluSnVtcC1zcGVjLm1kKQ0KICAgICAgcmVxdWVz dCAoIzEzNzQpDQoNCg0KICDil4ogRml4ZXMNCg0KICAgIOKAoiBGaXggZmQgbGVhayBpbiBydW5u aW5nIGV4dGVybmFsIHByb2Nlc3NlcyBmb3IgcHJlcHJvY2Vzc2luZw0KICAgICAgKCMxMzQ5KQ0K ICAgIOKAoiBGaXggcHJlZml4IHBhcnNpbmcgZm9yIGNvbXBsZXRpb24gb2Ygb2JqZWN0IG1ldGhv ZHMgKCMxMzYzLCBmaXhlcw0KICAgICAgIzEzNTgpDQogICAg4oCiIFJlbW92ZSBzb21lIGR1cGxp Y2F0ZXMgaW4gdGhlIGBzZWxlY3Rpb25SYW5nZScgYW5zd2VycyAoIzEzNjgpDQogICAg4oCiIERl YWN0aXZhdGUgdGhlIGBqdW1wJyBjb2RlIGFjdGlvbnMgYnkgZGVmYXVsdC4gQ2xpZW50cyBjYW4g ZW5hYmxlDQogICAgICB0aGVtIHdpdGggdGhlIGBtZXJsaW5KdW1wQ29kZUFjdGlvbnMnIGNvbmZp Z3VyYXRpb24NCiAgICAgIG9wdGlvbi4gQWx0ZXJuYXRpdmVseSBhIGN1c3RvbSByZXF1ZXN0IGlz IHByb3ZpZGVkIGZvciBhZCBob2MgdXNlDQogICAgICBvZiB0aGUgZmVhdHVyZS4gKCMxNDExKQ0K DQoNCk5ldyByZWxlYXNlIG9mIGJhYnkNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mu b2NhbWwub3JnL3QvbmV3LXJlbGVhc2Utb2YtYmFieS8xNTc1NC8xPg0KDQoNCkZyYW7Dp29pcyBQ b3R0aWVyIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSXQgaXMgbXkgcGxl YXN1cmUgdG8gYW5ub3VuY2UgdGhlIHNlY29uZCByZWxlYXNlIG9mIGBiYWJ5Jy4NCg0KICDilIzi lIDilIDilIDilIANCiAg4pSCIG9wYW0gdXBkYXRlDQogIOKUgiBvcGFtIGluc3RhbGwgYmFieS4y MDI0MTIwNA0KICDilJTilIDilIDilIDilIANCg0KICBgYmFieScgaXMgYW4gT0NhbWwgbGlicmFy eSB0aGF0IG9mZmVycyBwZXJzaXN0ZW50IHNldHMgYW5kIG1hcHMgYmFzZWQNCiAgb24gYmFsYW5j ZWQgYmluYXJ5IHNlYXJjaCB0cmVlcy4gSXQgb2ZmZXJzIHJlcGxhY2VtZW50cyBmb3IgT0NhbWwn cw0KICBgU2V0JyBhbmQgYE1hcCcgbW9kdWxlcy4NCg0KICBIZWlnaHQtYmFsYW5jZWQgYW5kIHdl aWdodC1iYWxhbmNlZCBiaW5hcnkgc2VhcmNoIHRyZWVzIGFyZSBvZmZlcmVkDQogIG91dCBvZiB0 aGUgYm94LiBGdXJ0aGVybW9yZSwgdG8gYWR2YW5jZWQgdXNlcnMsIHRoZSBsaWJyYXJ5IG9mZmVy cyBhDQogIGxpZ2h0d2VpZ2h0IHdheSBvZiBpbXBsZW1lbnRpbmcgb3RoZXIgYmFsYW5jaW5nIHN0 cmF0ZWdpZXMuDQoNCiAgW0RvY3VtZW50YXRpb25dIGlzIGF2YWlsYWJsZSBvbmxpbmUuDQoNCiAg VGhlIGNoYW5nZXMgaW4gdGhpcyByZWxlYXNlIGFyZSBhcyBmb2xsb3dzOg0KDQogIOKAoiBUaGUg bGlicmFyeSBub3cgb2ZmZXJzIGJvdGggc2V0cyBhbmQgbWFwcy4gVGhlIG1vZHVsZXMgYEJhYnku SC5TZXQnDQogICAgYW5kIGBCYWJ5LlcuU2V0JyBjb250aW51ZSB0byBleGlzdCwgYW5kIGFyZSBj b21wYXRpYmxlIHdpdGggT0NhbWwncw0KICAgIGBTZXQnIGxpYnJhcnkuIFRoZSBtb2R1bGVzIGBC YWJ5LkguTWFwJyBhbmQgYEJhYnkuVy5NYXAnIGFwcGVhciwgYW5kDQogICAgYXJlIGNvbXBhdGli bGUgd2l0aCBPQ2FtbCdzIGBNYXAnIGxpYnJhcnkuIEZ1cnRoZXJtb3JlLCB0aGUgZnVuY3RvcnMN CiAgICBgQmFieS5ILk1ha2UnIGFuZCBgQmFieS5XLk1ha2UnIGFwcGVhci4gVGhlc2UgZnVuY3Rv cnMgcHJvZHVjZSBhDQogICAgbW9kdWxlIHRoYXQgY29udGFpbnMgc2V0cywgbWFwcywgYW5kIHR3 byBjb252ZXJzaW9uIGZ1bmN0aW9ucw0KICAgIGJldHdlZW4gc2V0cyBhbmQgbWFwcywgbmFtZWx5 IGBkb21haW4nIGFuZCBgbGlmdCcuDQogIOKAoiBEb2N1bWVudGF0aW9uOiBpbiB0aGUgc2lnbmF0 dXJlIGBPcmRlcmVkVHlwZScsIGNsYXJpZnkgdGhlDQogICAgc3BlY2lmaWNhdGlvbiBvZiB0aGUg ZnVuY3Rpb24gYGNvbXBhcmUnOyB0aGlzIGZ1bmN0aW9uIGRlY2lkZXMgYQ0KICAgIHRvdGFsIHBy ZW9yZGVyIGDiiaQnLg0KICDigKIgRG9jdW1lbnRhdGlvbjogaW4gdGhlIHByZWFtYmxlLCBjbGFy aWZ5IHRoYXQsIG1vc3Qgb2YgdGhlIHRpbWUsIHdlDQogICAgYXNzdW1lIHRoYXQgYOKJpCcgaXMg YSB0b3RhbCBvcmRlcjsgaWYgYW4gb3BlcmF0aW9uIG11c3QgYmUgdW5kZXJzdG9vZA0KICAgIGlu IHRoZSBtb3JlIGdlbmVyYWwgY2FzZSB3aGVyZSBg4omkJyBpcyBhIHRvdGFsIHByZW9yZGVyLCB0 aGVuIHRoaXMgaXMNCiAgICBleHBsaWNpdGx5IGluZGljYXRlZC4NCiAg4oCiIERvY3VtZW50YXRp b246IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgZmluZCcgYW5kIGBmaW5kX29wdCcgaW4N CiAgICBhY2NvcmRhbmNlIHdpdGggdGhlIHByZXZpb3VzIHBvaW50Lg0KICDigKIgQSBudW1iZXIg b2YgaW5jb21wYXRpYmxlIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU7IHNlZSBbdGhlIGNoYW5nZQ0K ICAgIGxvZ10gZm9yIGRldGFpbHMuDQoNCg0KW0RvY3VtZW50YXRpb25dIDxodHRwczovL2NhbWJp dW0uaW5yaWEuZnIvfmZwb3R0aWVyL2JhYnkvZG9jL2JhYnkvPg0KDQpbdGhlIGNoYW5nZSBsb2dd IDxodHRwczovL2dpdGh1Yi5jb20vZnBvdHRpZXIvYmFieS9ibG9iL21haW4vQ0hBTkdFUy5tZD4N Cg0KDQpSZWxlYXNlIG9mIFNhdHVybiAxLjANCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXJlbGVhc2Utb2Ytc2F0dXJuLTEtMC8xNTc2My8x Pg0KDQoNCkNhcmluZSBNb3JlbCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgYW0gdGhyaWxs ZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgW1NhdHVybl0gMS4wIQ0KDQogIFNhdHVybiBp cyBhIGNvbGxlY3Rpb24gb2YgY29uY3VycmVudC1zYWZlIGRhdGEgc3RydWN0dXJlcyBkZXNpZ25l ZCBmb3INCiAgT0NhbWwgNS4gVGhlc2Ugc3RydWN0dXJlcyBoYXZlIGJlZW46DQogIOKAoiB0aG9y b3VnaGx5IHRlc3RlZCB3aXRoIGFtYXppbmcgdG9vbHMgbGlrZSBbU1RNXSAoc2VlIHRoaXMgW2Js b2cNCiAgICBwb3N0XSkgYW5kIFtEU2NoZWNrXSwNCiAg4oCiIGJlbmNobWFya2VkIGZvciBwZXJm b3JtYW5jZSwNCiAg4oCiIG9wdGltaXplZCBmb3IgZWZmaWNpZW5jeSwNCiAg4oCiIGFuZCBldmVu IHZlcmlmaWVkIGluIHNvbWUgY2FzZXMhDQoNCiAgSWYgeW91J3JlIGN1cmlvdXMgYWJvdXQgdGhl IG1vdGl2YXRpb24gYmVoaW5kIFNhdHVybiBhbmQgdGhlDQogIGNoYWxsZW5nZXMgaXQgYWRkcmVz c2VzLCB5b3UgY2FuIHJlYWQgbW9yZSBbaGVyZV0uDQoNCg0KW1NhdHVybl0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9vY2FtbC1tdWx0aWNvcmUvc2F0dXJuPg0KDQpbU1RNXSA8aHR0cHM6Ly9naXRodWIu Y29tL29jYW1sLW11bHRpY29yZS9tdWx0aWNvcmV0ZXN0cz4NCg0KW2Jsb2cgcG9zdF0NCjxodHRw czovL3RhcmlkZXMuY29tL2Jsb2cvMjAyNC0wNC0yNC11bmRlci10aGUtaG9vZC1kZXZlbG9waW5n LW11bHRpY29yZS1wcm9wZXJ0eS1iYXNlZC10ZXN0cy1mb3Itb2NhbWwtNS8+DQoNCltEU2NoZWNr XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLW11bHRpY29yZS9kc2NoZWNrPg0KDQpbaGVyZV0N CjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVsdGljb3JlL3NhdHVybi9ibG9iL21haW4vZG9j L21vdGl2YXRpb24ubWQ+DQoNCldoYXQgQ2FuIFlvdSBEbyB3aXRoIFNhdHVybj8NCuKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIFNhdHVybiBwcm92aWRlcyBhIHZhcmlldHkgb2YgZGF0 YSBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgcXVldWVzLA0KICBzdGFja3MsIGhhc2ggdGFibGVzLCBh bmQgbW9yZS4gQWxsIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlDQogICoqbG9jay1mcmVlKiosICoq bGluZWFyaXphYmxlKiosIGFuZCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdGFrZQ0KICBmdWxs IGFkdmFudGFnZSBvZiBPQ2FtbCA14oCZcyBtdWx0aWNvcmUgY2FwYWJpbGl0aWVzLg0KDQoNCuKX iiBQb3J0YWJsZSBEYXRhIFN0cnVjdHVyZXMNCg0KICBMb2NrLWZyZWVkb20gaXMgYSBwcm9ncmVz cyBwcm9wZXJ0eSB0aGF0IGd1YXJhbnRlZXMgc3lzdGVtLXdpZGUNCiAgcHJvZ3Jlc3MuIFRoaXMg aXMgYSBwb3dlcmZ1bCBhbmQgZGVzaXJhYmxlIGZlYXR1cmUsIHRob3VnaCBpdCBjb21lcyBhdA0K ICB0aGUgY29zdCBvZiBzb21lIG92ZXJoZWFkLiBIb3dldmVyLCBpdCBvZmZlcnMgYSBzaWduaWZp Y2FudCBhZHZhbnRhZ2U6DQogIGxvY2stZnJlZSBkYXRhIHN0cnVjdHVyZXMgYXZvaWQgdGhlIG5l ZWQgZm9yIHNjaGVkdWxlci1zcGVjaWZpYw0KICBibG9ja2luZyBtZWNoYW5pc21zLCBtYWtpbmcg dGhlbSBjb21wYXRpYmxlIHdpdGggYW55IHNjaGVkdWxlciwgc3VjaA0KICBhcyBbRWlvXSBvciBb RG9tYWluc2xpYl0uDQoNCg0KICBbRWlvXSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sLW11bHRp Y29yZS9laW8+DQoNCiAgW0RvbWFpbnNsaWJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwtbXVs dGljb3JlL2RvbWFpbnNsaWI+DQoNCg0K4peKIFJlc3RyaWN0aW9ucw0KDQogIFNhdHVybuKAmXMg ZGF0YSBzdHJ1Y3R1cmVzIGFyZSBub3QgY29tcG9zYWJsZSwgbWVhbmluZyB5b3UgY2Fubm90DQog IGNvbWJpbmUgdGhlbSAoZS5nLiwgdXNlIGBTYXR1cm4uUXVldWUnIGluc2lkZSBgU2F0dXJuLkh0 YmwnKSB3aGlsZQ0KICBwcmVzZXJ2aW5nIHByb3BlcnRpZXMgbGlrZSBsb2NrLWZyZWVkb20gYW5k IGxpbmVhcml6YWJpbGl0eS4NCg0KICBUaGV5IGFyZSBhbHNvIG5vdCBleHRlbnNpYmxlIG91dHNp ZGUgb2YgU2F0dXJuIHdpdGhvdXQgbG9zaW5nIHRoZXNlDQogIHByb3BlcnRpZXMuIEZvciBpbnN0 YW5jZSwgYFNhdHVybi5RdWV1ZScgZG9lcyBub3QgaW5jbHVkZSBhIGBsZW5ndGgnDQogIGZ1bmN0 aW9uIGJlY2F1c2UgaW1wbGVtZW50aW5nIG9uZSB3b3VsZCBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQg b3ZlcmhlYWQNCiAgKHNlZSBgU2F0dXJuLkJvdW5kZWRfcXVldWUnIGZvciBhbiBleGFtcGxlIG9m IHRoaXMNCiAgdHJhZGVvZmYpLiBBdHRlbXB0aW5nIHRvIGFkZCB0aGlzIGZ1bmN0aW9uYWxpdHks IHN1Y2ggYXMgYnkgd3JhcHBpbmcNCiAgdGhlIHF1ZXVlOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0K ICDilIIgdHlwZSAnYSB0ID0ge3NpemU6IGludCBBdG9taWMudDsgcXVldWUgOiAnYSBTYXR1cm4u UXVldWUudH0NCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgd291bGQgcmVzdWx0IGluIGEgc3RydWN0 dXJlIHRoYXQgZWl0aGVyIGxvc2VzIGxvY2stZnJlZWRvbSBvciBpcyBubw0KICBsb25nZXIgbGlu ZWFyaXphYmxlLg0KDQogIElmIHlvdSBuZWVkIGNvbXBvc2FibGUgbG9jay1mcmVlIGRhdGEgc3Ry dWN0dXJlcywgY29uc2lkZXIgZXhwbG9yaW5nDQogIFtrY2FzX2RhdGFdLg0KDQoNCiAgW2tjYXNf ZGF0YV0NCiAgPGh0dHBzOi8vb2NhbWwtbXVsdGljb3JlLmdpdGh1Yi5pby9rY2FzL2RvYy9rY2Fz X2RhdGEvS2Nhc19kYXRhL2luZGV4Lmh0bWw+DQoNCg0KQ2FsbCB0byBBY3Rpb24NCuKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiAqVHJ5IEl0IE91dCo6 IEdpdmUgU2F0dXJuIGEgdHJ5IGluIHlvdXIgcHJvamVjdHMgYW5kIGxldCB1cyBrbm93IGhvdw0K ICAgICBpdCB3b3JrcyBmb3IgeW91LiBJZiB5b3UgZW5jb3VudGVyIGFueSBidWdzIG9yIGlzc3Vl cywgcGxlYXNlDQogICAgIHJlcG9ydCB0aGVtIG9uIG91ciBbR2l0SHViIHJlcG9zaXRvcnldLg0K ICDigKIgKlNoYXJlIFlvdXIgVXNlIENhc2UqOiBBcmUgeW91IGFscmVhZHkgdXNpbmcgU2F0dXJu PyBMZXQgdXMga25vdyBpbg0KICAgICB0aGUgY29tbWVudHMgd2hhdCB5b3UncmUgYnVpbGRpbmcg d2l0aCBpdCENCiAg4oCiICpDb250cmlidXRlKjogV2XigJlkIGxvdmUgdG8gaGF2ZSBtb3JlIGNv bnRyaWJ1dG9ycy4gV2hldGhlciBpdOKAmXMNCiAgICAgaW1wbGVtZW50aW5nIG5ldyBmZWF0dXJl cywgaW1wcm92aW5nIGRvY3VtZW50YXRpb24sIG9yIHN1Z2dlc3RpbmcNCiAgICAgZW5oYW5jZW1l bnRzLCB5b3VyIGNvbnRyaWJ1dGlvbnMgYXJlIHdlbGNvbWUhDQogIOKAoiAqSGVscCBTaGFwZSB0 aGUgRnV0dXJlKjogV2hhdCB3b3VsZCB5b3UgbGlrZSB0byBzZWUgaW4gU2F0dXJuPyBJcw0KICAg ICB0aGVyZSBhIG1pc3NpbmcgZGF0YSBzdHJ1Y3R1cmUgeW91IG5lZWQ/IFNoYXJlIHlvdXIgdGhv dWdodHMgdG8NCiAgICAgaGVscCB1cyBidWlsZCBhIHJvYWRtYXAgZm9yIGZ1dHVyZSBkZXZlbG9w bWVudC4NCg0KICAqVGhhbmsgeW91IGZvciB5b3VyIHN1cHBvcnQhKg0KDQoNCltHaXRIdWIgcmVw b3NpdG9yeV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1tdWx0aWNvcmUvc2F0dXJuPg0KDQoN ClRhbGtzIGFuZCBSZXNvdXJjZXMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIElmIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgYWJv dXQgU2F0dXJuLCBJIGdhdmUgYSB0YWxrIGF0IHRoZSAyMDI0DQogIE9DYW1sIFdvcmtzaG9w4oCU Y2hlY2sgb3V0IHRoZSBzaG9ydCBbcGFwZXJdIGFuZCB0aGUgW3RhbGtdLg0KDQogIFRvIGRpdmUg ZGVlcGVyIGludG8gY29uY3VycmVudC1zYWZlIGRhdGEgc3RydWN0dXJlcywgSSBoaWdobHkNCiAg cmVjb21tZW5kIGhhdmluZyBhIGxvb2sgYXQgW1RoZSBBcnQgb2YgTXVsdGlwcm9jZXNzb3IgUHJv Z3JhbW1pbmddLA0KICB3aGljaCBleHBsb3JlcyB0aGUgZGlmZmVyZW5jZXMgaW4gZGVzaWduIGJl dHdlZW4gbG9jay1iYXNlZCBhbmQNCiAgbG9jay1mcmVlIGRhdGEgc3RydWN0dXJlcy4NCg0KDQpb cGFwZXJdDQo8aHR0cHM6Ly9pY2ZwMjQuc2lncGxhbi5vcmcvZGV0YWlscy9vY2FtbC0yMDI0LXBh cGVycy8xMi9TYXR1cm4tYS1saWJyYXJ5LW9mLXZlcmlmaWVkLWNvbmN1cnJlbnQtZGF0YS1zdHJ1 Y3R1cmVzLWZvci1PQ2FtbC01Pg0KDQpbdGFsa10gPGh0dHBzOi8veW91dHUuYmUvT3VRcWJsQ3hK Mlk/dD0yNDM5OD4NCg0KW1RoZSBBcnQgb2YgTXVsdGlwcm9jZXNzb3IgUHJvZ3JhbW1pbmddDQo8 aHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wdWJsaWNhdGlvbi8yMTM4NzY2NTNfVGhlX0Fy dF9vZl9NdWx0aXByb2Nlc3Nvcl9Qcm9ncmFtbWluZz4NCg0KDQpDb21tZXJjaWFsIFN1cHBvcnQN CuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0K DQogIElmIHlvdeKAmXJlIGludGVyZXN0ZWQgaW4gaW5jb3Jwb3JhdGluZyBTYXR1cm4gaW50byB5 b3VyIGNvbW1lcmNpYWwNCiAgYXBwbGljYXRpb25zLCBUYXJpZGVzIG9mZmVycyBwcm9mZXNzaW9u YWwgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQNCiAgc2VydmljZXMuIEZlZWwgZnJlZSB0byBjb250 YWN0IHVzIGZvciBtb3JlIGRldGFpbHMuDQoNCg0KRHVuZSBkZXYgbWVldGluZw0K4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0 dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tZHVuZS1kZXYtbWVldGluZy8xNDk5NC8xOD4N Cg0KDQpFdGllbm5lIE1hcmFpcyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhpIER1 bmUgZW50aHVzaWFzdHMhIDpzbWlsZToNCg0KICBXZSB3aWxsIGhvbGQgb3VyIHJlZ3VsYXIgRHVu ZSBkZXYgbWVldGluZyBvbiAqV2VkbmVzZGF5LCBEZWNlbWJlciwNCiAgMTF0aCBhdCA5OjAwKiBD RVQuIEFzIHVzdWFsLCB0aGUgc2Vzc2lvbiB3aWxsIGJlIG9uZSBob3VyIGxvbmcuDQoNCiAgV2hl dGhlciB5b3UgYXJlIGEgbWFpbnRhaW5lciwgYSByZWd1bGFyIGNvbnRyaWJ1dG9yLCBhIG5ldyBq b2luZXIgb3INCiAganVzdCBjdXJpb3VzLCB5b3UgYXJlIHdlbGNvbWUgdG8gam9pbjogdGhlc2Ug ZGlzY3Vzc2lvbnMgYXJlIG9wZW5lZCENCiAgVGhlIGdvYWwgb2YgdGhlc2UgbWVldGluZ3MgaXMg dG8gcHJvdmlkZSBhIHBsYWNlIHRvIGRpc2N1c3MgdGhlDQogIG9uZ29pbmcgd29yayB0b2dldGhl ciBhbmQgc3luY2hyb25pc2UgYmV0d2VlbiB0aGUgRHVuZSBkZXZlbG9wZXJzICENCiAgOmNhbWVs Og0KDQoNCjpjYWxlbmRhcjogQWdlbmRhDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYwNCg0KICBUaGUgYWdlbmRhIGlzIGF2YWlsYWJsZSBvbiB0aGVb IG1lZXRpbmcgZGVkaWNhdGVkIHBhZ2VdLiBGZWVsIGZyZWUgdG8NCiAgYXNrIGlmIHlvdSB3YW50 IHRvIGFkZCBtb3JlIGl0ZW1zIGluIGl0Lg0KDQoNClsgbWVldGluZyBkZWRpY2F0ZWQgcGFnZV0N CjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS93aWtpL2Rldi1tZWV0aW5nLTIwMjQtMTIt MTE+DQoNCg0KOmNvbXB1dGVyOiBMaW5rcw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIE1lZXRpbmcgbGluazpbIHpvb21dDQogIOKAoiBD YWxlbmRhciBldmVudDpbIGdvb2dsZSBjYWxlbmRhcl0NCiAg4oCiIFdpa2kgd2l0aCBpbmZvcm1h dGlvbiBhbmQgcHJldmlvdXMgbm90ZXM6WyBHaXRIdWIgV2lraV0NCg0KDQpbIHpvb21dDQo8aHR0 cHM6Ly91czA2d2ViLnpvb20udXMvai84NTA5Njg3Nzc3Nj9wd2Q9Y1dOaFUxZEhRMVpOU2padU9V WkNRMGgyYnk5VWR6MDk+DQoNClsgZ29vZ2xlIGNhbGVuZGFyXQ0KPGh0dHBzOi8vY2FsZW5kYXIu Z29vZ2xlLmNvbS9jYWxlbmRhci9lbWJlZD9zcmM9Y181Y2Q2OThkZjY3ODRlMzg1YjFjZGNkYzFk YmNhMThjMDYxZmFhOTY5NTlhMDQ3ODE1NjZkMzA0ZGM5ZWM3MzE5JTQwZ3JvdXAuY2FsZW5kYXIu Z29vZ2xlLmNvbT4NCg0KWyBHaXRIdWIgV2lraV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9k dW5lL3dpa2kjZGV2LW1lZXRpbmdzPg0KDQoNCkR1bmUgMy4xNw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4t ZHVuZS0zLTE3LzE1NzcwLzE+DQoNCg0KRXRpZW5uZSBNYXJhaXMgYW5ub3VuY2VkDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIANCg0KICBUaGUgRHVuZSB0ZWFtIGlzIGhhcHB5IHRvIGFubm91bmNlIHRoZSByZWxl YXNlIG9mIER1bmUgYDMuMTcuMCchDQogIDp0YWRhOg0KDQogIEFtb25nIHRoZSBsaXN0IG9mIGNo YW5nZXMsIHRoaXMgbWlub3IgcmVsZWFzZSBlbmFibGVzIHRoZSBEdW5lIGNhY2hlDQogIGJ5IGRl ZmF1bHQgZm9yIGtub3duLXNhZmUgb3BlcmF0aW9ucywgYWRkcyBvdXQtb2YtdGhlLWJveCBzdXBw b3J0IGZvcg0KICBgV2FzbV9vZl9vY2FtbCcsIGFkZHMgc3VwcG9ydCBmb3IgdGhlfi1IfiBjb21w aWxlciBmbGFnIGludHJvZHVjZWQgaW4NCiAgT0NhbWwgNS4yLCBhbGxvd3Mgc3BlY2lmeWluZyBj b2RlIGhvc3Rpbmcgc2VydmljZXMgbGlrZSBDb2RlYmVyZyBvcg0KICBHaXRMYWIgb3JnYW5pc2F0 aW9ucywgYW5kIGdpdmVzIHRoZSBwb3NzaWJpbGl0eSB0byBydW4gaW5kaXZpZHVhbA0KICB0ZXN0 cyB3aXRoIGBkdW5lIHJ1bnRlc3QnLg0KDQogIElmIHlvdSBlbmNvdW50ZXIgYSBwcm9ibGVtIHdp dGggdGhpcyByZWxlYXNlLCB5b3UgY2FuIHJlcG9ydCBpdCBvbiB0aGUNCiAgW29jYW1sL2R1bmVd IHJlcG9zaXRvcnkuDQoNCg0KW29jYW1sL2R1bmVdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwv ZHVuZS9pc3N1ZXM+DQoNCkNoYW5nZWxvZw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoN CuKXiiBBZGRlZA0KDQogIOKAoiBNYWtlIE1lcmxpbi9PQ2FtbC1MU1AgYXdhcmUgb2YgImhpZGRl biIgZGVwZW5kZW5jaWVzIHVzZWQgYnkNCiAgICBgKGltcGxpY2l0X3RyYW5zaXRpdmVfZGVwcyBm YWxzZSknIHZpYSB0aGUgYC1IJyBjb21waWxlcg0KICAgIGZsYWcuICgjMTA1MzUsIEB2b29kb29z KQ0KICDigKIgQWRkIHN1cHBvcnQgZm9yIHRoZSAtSCBmbGFnIChpbnRyb2R1Y2VkIGluIE9DYW1s IGNvbXBpbGVyIDUuMikgaW4NCiAgICBkdW5lIChyZXF1aXJlcyBsYW5nIHZlcnNpb25zIDMuMTcp LiBUaGlzIGFkYXB0YXRpb24gZ2l2ZXMgdGhlDQogICAgY29ycmVjdCBzZW1hbnRpY3MgZm9yIGAo aW1wbGljaXRfdHJhbnNpdGl2ZV9kZXBzIGZhbHNlKScuICAoIzEwNjQ0LA0KICAgIGZpeGVzICM5 MzMzLCBvY3NpZ2VuL3R5eG1sIzI3NCwgIzI3MzMsICM0OTYzLCBATUEwMTAwKQ0KICDigKIgQWRk IHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgR2l0bGFiIG9yZ2FuaXphdGlvbiByZXBvc2l0b3JpZXMg aW4NCiAgICBgc291cmNlJyBzdGFuemFzICgjMTA3NjYsIGZpeGVzICM2NzIzLCBASC1BTlNFTikN CiAg4oCiIE5ldyBvcHRpb24gdG8gY29udHJvbCBqc29vIHNvdXJjZW1hcCBnZW5lcmF0aW9uIGlu IGVudiBhbmQNCiAgICBleGVjdXRhYmxlIHN0YW56YSAoIzEwNzc3LCBmaXhlcyAjMTA2NzMsIEBo aHVnbykNCiAg4oCiIE9uZSBjYW4gbm93IGNvbnRyb2wganNvbyBjb21waWxhdGlvbl9tb2RlIGlu c2lkZSBhbiBleGVjdXRhYmxlDQogICAgc3RhbnphICgjMTA3NzcsIGZpeGVzICMxMDY3MywgQGho dWdvKQ0KICDigKIgQWRkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgZGVmYXVsdCB2YWx1ZXMgb2Yg dGhlIGBhdXRob3JzJywNCiAgICBgbWFpbnRhaW5lcnMnLCBhbmQgYGxpY2Vuc2UnIHN0YW56YXMg b2YgdGhlIGBkdW5lLXByb2plY3QnIGZpbGUgdmlhDQogICAgdGhlIGR1bmUgY29uZmlnIGZpbGUu IERlZmF1bHQgdmFsdWVzIGFyZSBzZXQgdXNpbmcgdGhlDQogICAgYChwcm9qZWN0X2RlZmF1bHRz KScgc3RhbnphICgjMTA4MzUsIEBILUFOU0VOKQ0KICDigKIgQWRkIG5hbWVzIHRvIHNvdXJjZSB0 cmVlIGV2ZW50cyBpbiBwZXJmb3JtYW5jZSB0cmFjZXMgKCMxMDg4NCwNCiAgICBAamNoYXZhcnJp KQ0KICDigKIgQWRkIGBjb2RlYmVyZycgYXMgYW4gb3B0aW9uIGZvciBkZWZpbmluZyBwcm9qZWN0 IHNvdXJjZXMgaW4NCiAgICBkdW5lLXByb2plY3QgZmlsZXMuIEZvciBleGFtcGxlLCBgKHNvdXJj ZSAoY29kZWJlcmcNCiAgICB1c2VyL3JlcG8pKScuICgjMTA5MDQsIEBubG9yZGVsbCkNCiAg4oCi IGBkdW5lIHJ1bnRlc3QnIGNhbiBub3cgcnVuIGluZGl2aWR1YWwgdGVzdHMgd2l0aCBgZHVuZSBy dW50ZXN0DQogICAgbXl0ZXN0LnQnICgjMTEwNDEsIEBBbGl6dGVyKS4NCiAg4oCiIFdhc21fb2Zf b2NhbWwgc3VwcG9ydCAoIzExMDkzLCBAdm91aWxsb24pDQogIOKAoiBBZGQgYSBgY29xZGVwX2Zs YWdzJyBmaWVsZCB0byB0aGUgYGNvcScgZmllbGQgb2YgdGhlIGBlbnYnIHN0YW56YSwNCiAgICBh bmQgdG8gdGhlIGBjb3EudGhlb3J5JyBzdGFuemEsIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBgY29x ZGVwJw0KICAgIGZsYWdzLiAoIzExMDk0LCBAcmxlcGlncmUpDQoNCg0K4peKIEZpeGVkDQoNCiAg 4oCiIFNob3cgdGhlIGNvbnRleHQgbmFtZSBmb3IgZXJyb3JzIGhhcHBlbmluZyBpbiBub24tZGVm YXVsdCBjb250ZXh0cy4NCiAgICAoIzEwNDE0LCBmaXhlcyAjMTAzNzgsIEBqY2hhdmFycmkpDQog IOKAoiBDb3JyZWN0bHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgb2YgaW5kZXhlcyBzbyB0aGF0IHRo ZXkgYXJlIHJlYnVpbHQNCiAgICB3aGVuIG5lZWRlZC4gKCMxMDYyMywgQHZvb2Rvb3MpDQogIOKA oiBEb24ndCBkZXBlbmQgb24gY29xLXN0ZGxpYiBiZWluZyBpbnN0YWxsZWQgd2hlbiBleHBhbmRp bmcgdmFyaWFibGVzDQogICAgb2YgdGhlIGBjb3EudmVyc2lvbicgZmFtaWx5ICgjMTA2MzEsIGZp eGVzICMxMDYyOSwgQGdhcmVzKQ0KICDigKIgRXJyb3Igb3V0IGlmIG5vIGZpbGVzIGFyZSBmb3Vu ZCB3aGVuIHVzaW5nIGBjb3B5X2ZpbGVzJy4gKCMxMDY0OSwNCiAgICBAamNoYXZhcnJpKQ0KICDi gKIgUmVfZXhwb3J0IGR1bmUtc2VjdGlvbiBwcml2YXRlIGxpYnJhcnkgaW4gdGhlIGR1bmUtc2l0 ZSBsaWJyYXJ5DQogICAgc3RhbnphLCBpbiBvcmRlciB0byBhdm9pZCBmYWlsdXJlIHdoZW4gZ2Vu ZXJhdGluZyBhbmQgYnVpbGRpbmcgc2l0ZXMNCiAgICBtb2R1bGVzIHdpdGggaW1wbGljaXRfdHJh bnNpdGl2ZV9kZXBzID0gZmFsc2UuICgjMTA2NTAsIGZpeGVzICM5NjYxLA0KICAgIEBNQTAxMDAp DQogIOKAoiBFeHBlY3QgdGVzdCBmaXhlczogc3VwcG9ydCBtdWx0aXBsZSBtb2RlcyBhbmQgZml4 IGRlcGVuZGVuY2llcyB3aGVuDQogICAgdGhlcmUgaXMgYSBjdXN0b20gcnVubmVyICgjMTA2NzEs IEB2b3VpbGxvbikNCiAg4oCiIEluIGEgYChsaWJyYXJ5KScgc3RhbnphIHdpdGggYChleHRyYV9v YmplY3RzKScgYW5kDQogICAgYChmb3JlaWduX3N0dWJzKScsIGF2b2lkIGRvdWJsZSBsaW5raW5n IHRoZSBleHRyYSBvYmplY3QgZmlsZXMgaW4NCiAgICB0aGUgZmluYWwgZXhlY3V0YWJsZS4gICgj MTA3ODMsIGZpeGVzICMxMDc4NSwgQG5vamIpDQogIOKAoiBNYXAgYChyZV9leHBvcnQpJyBsaWJy YXJ5IGRlcGVuZGVuY2llcyB0byB0aGUgYGV4cG9ydHMnIGZpZWxkIGluDQogICAgYE1FVEEnIGZp bGVzLCBhbmQgdmljZS12ZXJzYS4gVGhpcyBmaWVsZCB3YXMgcHJvcG9zZWQgaW4gdG8NCiAgICA8 aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3Byb3Bvc2FsLWEtbmV3LWV4cG9ydHMtZmllbGQt aW4tZmluZGxpYi1tZXRhLWZpbGVzLzEzOTQ3Pi4NCiAgICBUaGUgZmllbGQgaXMgaW5jbHVkZWQg aW4gRHVuZS1nZW5lcmF0ZWQgYE1FVEEnIGZpbGVzIG9ubHkgd2hlbiB0aGUNCiAgICBEdW5lIGxh bmcgdmVyc2lvbiBpcyA+PSAzLjE3LiAgKCMxMDgzMSwgZml4ZXMgIzEwODMwLCBAbm9qYikNCiAg 4oCiIEZpeCBzdGFnZWQgcHBzIHByZXByb2Nlc3NvcnMgb24gV2luZG93cyAod2hpY2ggd2VyZSBu b3Qgd29ya2luZyBhdA0KICAgIGFsbCBwcmV2aW91c2x5KSAoIzEwODY5LCBmaXhlcyAjMTA4Njcs IEBub2piKQ0KICDigKIgRml4IGBkdW5lIGRlc2NyaWJlJyB3aGVuIGFuIGV4ZWN1dGFibGUgaXMg ZGlzYWJsZWQgd2l0aA0KICAgIGBlbmFibGVkX2lmJy4gICgjMTA4ODEsIGZpeGVzICMxMDc3OSwg QG1veW9kaWFsbG8pDQogIOKAoiBGaXggYW4gaXNzdWUgd2hlcmUgQyBzdHVicyB3b3VsZCBiZSBy ZWJ1aWx0IHdoZW5ldmVyIHRoZSBzdGRlcnIgb2YNCiAgICBEdW5lIHdhcyByZWRpcmVjdGVkLiAo IzEwODgzLCBmaXhlcyAjMTA4ODIsIEBub2piKQ0KICDigKIgRml4IHRoZSBVUkwgb3BlbmVkIGJ5 IHRoZSBjb21tYW5kIGBkdW5lIG9jYW1sIGRvYycuICgjMTA4OTcsDQogICAgQGdyaWRidWdzKQ0K ICDigKIgRml4IHRoZSBmaWxlIHJlZmVycmVkIHRvIGluIHRoZSBlcnJvci93YXJuaW5nIG1lc3Nh Z2UgZGlzcGxheWVkIGR1ZQ0KICAgIHRvIHRoZSBkdW5lIGNvbmZpZ3VyYXRpb24gdmVyc2lvbiBu b3Qgc3VwcG9ydGluZyBhIHBhcnRpY3VsYXINCiAgICBjb25maWd1cmF0aW9uIHN0YW56YSBpbiB1 c2UuICgjMTA5MjMsIEBILUFOU0VOKQ0KICDigKIgRml4IGBlbmFibGVkX2lmJyB3aGVuIGl0IHVz ZXMgYGVudicgdmFyaWFibGUuICgjMTA5MzYsIGZpeGVzICMxMDkwNSwNCiAgICBAbW95b2RpYWxs bykNCiAg4oCiIEZpeCBleGVjIC13IGZvciByZWxhdGl2ZSBwYXRocyB3aXRoIOKAk3Jvb3QgYXJn dW1lbnQgKCMxMDk4MiwNCiAgICBAZ3JpZGJ1Z3MpDQogIOKAoiBEbyBub3QgaWdub3JlIHRoZSBg KGxvY2tzIC4uKScgZmllbGQgaW4gdGhlIGB0ZXN0JyBhbmQgYHRlc3RzJw0KICAgIHN0YW56YSAo IzExMDgxLCBAcmdyaW5iZXJnKQ0KICDigKIgVG9sZXJhdGUgZmlsZXMgd2l0aG91dCBleHRlbnNp b24gd2hlbiBnZW5lcmF0aW5nIG1lcmxpbiBydWxlcy4NCiAgICAoIzExMTI4LCBAYW5tb250ZWly bykNCg0KDQril4ogQ2hhbmdlZA0KDQogIOKAoiBSZW1vdmUgYWxsIHJlbW5hbnRzIG9mIHRoZSBl eHBlcmltZW50YWwNCiAgICBgcGF0Y2gtYmFjay1zb3VyY2UtdHJlZScuICgjMTA3NzEsIEByZ3Jp bmJlcmcpDQogIOKAoiBDaGFuZ2UgdGhlIHByZXNldCB2YWx1ZSBmb3IgYXV0aG9yIGFuZCBtYWlu dGFpbmVyIGZpZWxkcyBpbiB0aGUNCiAgICBgZHVuZS1wcm9qZWN0JyBmaWxlIHRvIGVuY291cmFn ZSBpbmNsdWRpbmcgZW1haWxzLiAoIzEwODQ4LA0KICAgIEBwdW5jaGFnYW4pDQogIOKAoiBUd2Vh ayB0aGUgcHJlc2V0IHZhbHVlIGZvciB0YWdzIGluIHRoZSBgZHVuZS1wcm9qZWN0JyBmaWxlIHRv IGhpbnQNCiAgICBhdCB0b3BpY3Mgbm90IGhhdmluZyBhIHNwZWNpYWwgbWVhbmluZy4gKCMxMDg0 OSwgQHB1bmNoYWdhbikNCiAg4oCiIENoYW5nZSBzb21lIGNvbG9ycyB0byBpbXByb3ZlIHJlYWRh YmlsaXR5IGluIGxpZ2h0LW1vZGUgdGVybWluYWxzDQogICAgKCMxMDg5MCwgQGdyaWRidWdzKQ0K ICDigKIgRm9yd2FyZCB0aGUgbGlua2FsbCBmbGFnIHRvIGpzb28gaW4gd2hvbGUgcHJvZ3JhbSBj b21waWxhdGlvbiBhcw0KICAgIHdlbGwgKCMxMDkzNSwgQGhodWdvKQ0KICDigKIgQ29uZmlndXJh dG9yIHVzZXMgYHBrZ2NvbmYnIGFzIHBrZy1jb25maWcgaW1wbGVtZW50YXRpb24gd2hlbg0KICAg IGF2YWlsYWJsZSBhbmQgZm9yd2FyZHMgaXQgdGhlIGB0YXJnZXQnIG9mIGBvY2FtbGMgLWNvbmZp ZycuICgjMTA5MzcsDQogICAgQHBpcmJvKQ0KICDigKIgRW5hYmxlIER1bmUgY2FjaGUgYnkgZGVm YXVsdC4gQWRkIGEgbmV3IER1bmUgY2FjaGUgc2V0dGluZw0KICAgIGBlbmFibGVkLWV4Y2VwdC11 c2VyLXJ1bGVzJywgd2hpY2ggZW5hYmxlcyB0aGUgRHVuZSBjYWNoZSwgYnV0DQogICAgZXhjbHVk ZXMgdXNlci13cml0dGVuIHJ1bGVzIGZyb20gaXQuIFRoaXMgaXMgYSBjb25zZXJ2YXRpdmUgY2hv aWNlDQogICAgdGhhdCBjYW4gYXZvaWQgYnJlYWtpbmcgcnVsZXMgd2hvc2UgZGVwZW5kZW5jaWVz IGFyZSBub3QgY29ycmVjdGx5DQogICAgc3BlY2lmaWVkLiBUaGlzIGlzIHRoZSBjdXJyZW50IGRl ZmF1bHQuICgjMTA5NDQsICMxMDcxMCwgQG5vamIsDQogICAgQEVsZWN0cmVBQVMpDQogIOKAoiBE byBub3QgYWRkIGBkdW5lJyBkZXBlbmRlbmN5IGluIGBkdW5lLXByb2plY3QnIHdoZW4gY3JlYXRp bmcNCiAgICBwcm9qZWN0cyB3aXRoIGBkdW5lIGluaXQgcHJvaicuIFRoZSBEdW5lIGRlcGVuZGVu Y3kgaXMgaW1wbGljaXRlbHkNCiAgICBhZGRlZCB3aGVuIGdlbmVyYXRpbmcgb3BhbSBmaWxlcyAo IzExMTI5LCBATGVvbmlkYXMtZnJvbS1YSVYpDQoNCg0KU3BlYyBhbmQgaW50ZXJmYWNlIHRvIGRl Y2xhcmUgZGVwZW5kZW5jaWVzIGluIGFuIE9DYW1sIHNjcmlwdA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg QXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9zcGVjLWFuZC1pbnRlcmZh Y2UtdG8tZGVjbGFyZS1kZXBlbmRlbmNpZXMtaW4tYW4tb2NhbWwtc2NyaXB0LzE1NzcyLzE+DQoN Cg0KamJlY2tmb3JkIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVGhpcyBpcyB0aGUgZm91cnRoIGFydGljbGUg aW4gdGhlIE1sRnJvbnQgc2VyaWVzLiBJZiB5b3UgYXJlDQogIGludGVyZXN0ZWQgaW4gc2NyaXB0 aW5nIGZyYW1ld29ya3MgdGhhdCBjYW4gZG93bmxvYWQgc291cmNlIGNvZGUgYW5kDQogIGJ5dGVj b2RlLCBhbmQgaW50ZXItb3BlcmF0ZSB3aGlsZSBkb2luZyBzbywgcGxlYXNlIHJlYWQ6DQoNCiAg W2h0dHBzOi8vZGlza3V2LmNvbS9tbGZyb250L292ZXJ2aWV3LTQvXQ0KDQoNCltodHRwczovL2Rp c2t1di5jb20vbWxmcm9udC9vdmVydmlldy00L10NCjxodHRwczovL2Rpc2t1di5jb20vbWxmcm9u dC9vdmVydmlldy00Lz4NCg0KVExEUg0K4pWM4pWM4pWM4pWMDQoNCiAgLyhDcml0aWNhbCwgdmVy YmF0aW0gc25pcHBldHMgZnJvbSBhcnRpY2xlKS8NCg0KICBJIGhhdmUgYW4gb2xkIG9wYW0gcGFj a2FnZSBbRGtTREtGRklPQ2FtbF9TdGRdIHRoYXQgaXMgYSBsb3ctbGV2ZWwNCiAgYnJpZGdlIGJl dHdlZW4gT0NhbWwgYW5kIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcy4gSXQgY2FuIGJlDQog IGV4dHJhb3JkaW5hcmlseSBkaWZmaWN1bHQgdG8gYnVpbGQsIHNvIEkgbWFkZSBpdCBhIG1peCBv ZiBwdXJlIE9DYW1sDQogIHNvdXJjZSBjb2RlIGFuZCBwcmVidWlsdCBsaWJyYXJ5IGRvd25sb2Fk cy4gVG9kYXkgSSdsbCBkZXNjcmliZSBob3cNCiAgZW1iZWRkZWQgT0NhbWwgZGVwZW5kZW5jaWVz IGxpa2UgdGhlIGZvbGxvd2luZyAvc2ltcGxpZmllcyB0aGUgYnVpbGQNCiAgcHJvY2Vzcy86DQoN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBtb2R1bGUgXyA9IERrU0RLRkZJX09DYW1sDQogIOKU giAoKiogVGhlIGJyaWRnZSBiZXR3ZWVuIE9DYW1sIGFuZCBvdGhlciBwcm9ncmFtbWluZyBsYW5n dWFnZXMuDQogIOKUgiANCiAg4pSCICAgICB7WyBgdjEgWw0KICDilIIgICAgICAgICAgIGBzZWMg WyBgc2NoZW1lICJka2NvZGVyIiBdOw0KICDilIIgICAgICAgICAgIGBibGliIFsiaHR0cHM6Ly9n aXRsYWIuY29tL2FwaS92NC9wcm9qZWN0cy82MjcwMzE5NC9wYWNrYWdlcy9nZW5lcmljL0BES01M X1RBUkdFVF9BQklALzIuMS40L0BES01MX1RBUkdFVF9BQklALTQuMTQuMi1Ea1NES0ZGSV9PQ2Ft bC0yLjEuNC1ub25lLmJsaWIuemlwIl07DQogIOKUgiAgICAgICAgICAgYGNsaWIgWyJodHRwczov L2dpdGxhYi5jb20vYXBpL3Y0L3Byb2plY3RzLzYyNzAzMTk0L3BhY2thZ2VzL2dlbmVyaWMvQERL TUxfVEFSR0VUX0FCSUAvMi4xLjQvQERLTUxfVEFSR0VUX0FCSUAtNC4xNC4yLURrU0RLRkZJX09D YW1sLTIuMS40LW5vbmUuY2xpYi56aXAiXQ0KICDilIIgICAgICAgICBdIF19ICopDQogIOKUgiAN CiAg4pSCICgqIEFuZCB1c2Ugd2hhdCB5b3UgaW1wb3J0ZWQgLi4uICopDQogIOKUgiBsZXQgKCkg PQ0KICDilIIgICAgaWdub3JlIChEa1NES0ZGSV9PQ2FtbC5Db20uY3JlYXRlX2MgKCkpDQogIOKU lOKUgOKUgOKUgOKUgA0KDQogIOKAlA0KDQogIE9uZSBzZXQgb2YgZGVzaWducyBJIGNyZWF0ZWQg YXJlIHRoZSBgTWxGcm9udF9BcmNoaXZlJyBwYWNrYWdlDQogIGZvcm1hdHM6DQoNCiAgMS4gYCou YmxpYi56aXAnIC0gVGhpcyBpcyB0aGUgYnl0ZWNvZGUgYXJjaGl2ZS4gSXQgaXMgYSB6aXAgZmls ZQ0KICAgICBjb250YWluaW5nIGAuY21hJywgYC5jbWknIGFuZCBzb21lIG90aGVyIGNyaXRpY2Fs IG1ldGFkYXRhLg0KICAyLiBgKi5jbGliLnppcCcgLSBUaGlzIGlzIHRoZSBDIGxpYnJhcnkgYXJj aGl2ZS4gSXQgaXMgYSB6aXAgZmlsZQ0KICAgICBjb250YWluaW5nIGAuc28nIG9yIGAuZHlsaWIn IG9yIGAuZGxsJyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgYWxzbw0KICAgICB0aGUgY29ycmVzcG9u ZGluZyBzdGF0aWMgbGlicmFyaWVzLg0KICBUaGUgaW1wb3J0YW50IGNvbmNlcHQgaXMgdGhhdCBg Ki5ibGliLnppcCcgYW5kIGAqLmNsaWIuemlwJyBmb3IgT0NhbWwNCiAgYXJlIGFuYWxvZ291cyB0 byBgKi5qYXInIGZpbGVzIGZvciBKYXZhLiBUaGUgZGVzaWduIGlzIGF2YWlsYWJsZSBhdDoNCg0K ICDigKIgRm9ybWF0IG9mIHBhY2thZ2VzOg0KICAgIDxodHRwczovL2dpdGxhYi5jb20vZGlza3V2 L3JlZ2lzdHJpZXMvcHVibGljLXBhY2thZ2VzI2dlbmVyaWMtcmVnaXN0cnktbGF5b3V0Pg0KICDi gKIgQmluYXJpZXMgdG8gdW5wYWNrIHRoZSBwYWNrYWdlczoNCiAgICA8aHR0cHM6Ly9naXRsYWIu Y29tL2RrbWwvYnVpbGQtdG9vbHMvTWxGcm9udF9BcmNoaXZlLy0vcmVsZWFzZXM+DQoNCiAg4oCU DQoNCiAgVGhlIHJlbW90ZSBzcGVjaWZpY2F0aW9uIGRlc2lnbiBpcyBpbiB0aGUgYE1sRnJvbnRf Q29uZmlnJyBsaWJyYXJ5Og0KDQogIOKAoiBjb2RlOiA8aHR0cHM6Ly9naXRsYWIuY29tL2RrbWwv YnVpbGQtdG9vbHMvTWxGcm9udCNtbGZyb250Pg0KICDigKIgb2RvYzoNCiAgICA8aHR0cHM6Ly9k a21sLmdpdGxhYi5pby9idWlsZC10b29scy9NbEZyb250L01sRnJvbnRfQ29uZmlnL01sRnJvbnRf Q29uZmlnL1JlbW90ZVNwZWMvaW5kZXguaHRtbD4NCg0KDQpbRGtTREtGRklPQ2FtbF9TdGRdIDxo dHRwczovL29jYW1sLm9yZy9wL0RrU0RLRkZJT0NhbWxfU3RkL2xhdGVzdD4NCg0KDQpPdGhlciBP Q2FtbCBOZXdzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZANCg0KRnJvbSB0aGUgb2NhbWwub3JnIGJsb2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlcmUgYXJl IGxpbmtzIGZyb20gbWFueSBPQ2FtbCBibG9ncyBhZ2dyZWdhdGVkIGF0IFt0aGUgb2NhbWwub3Jn DQogIGJsb2ddLg0KDQogIOKAoiBbUmVsZWFzZSBvZiBGcmFtYS1DIDMwLjAgKFppbmMpXQ0KICDi gKIgW0lybWluIG9uIE1pcmFnZU9TOiBVbmRlci10aGUtSG9vZCBXaXRoIE5vdGFmc10NCg0KDQpb dGhlIG9jYW1sLm9yZyBibG9nXSA8aHR0cHM6Ly9vY2FtbC5vcmcvYmxvZy8+DQoNCltSZWxlYXNl IG9mIEZyYW1hLUMgMzAuMCAoWmluYyldDQo8aHR0cHM6Ly9mcmFtYS1jLmNvbS9mYy12ZXJzaW9u cy96aW5jLmh0bWw+DQoNCltJcm1pbiBvbiBNaXJhZ2VPUzogVW5kZXItdGhlLUhvb2QgV2l0aCBO b3RhZnNdDQo8aHR0cHM6Ly90YXJpZGVzLmNvbS9ibG9nLzIwMjQtMTItMDQtaXJtaW4tb24tbWly YWdlb3MtdW5kZXItdGhlLWhvb2Qtd2l0aC1ub3RhZnM+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtz ZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2Ug YSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2 ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1h aWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIHRvIHRoZSBbY2FtbC1saXN0XS4NCg0KICBbQWxhbiBT Y2htaXR0XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9s eXRlY2huaXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21t ZS5uZXQvY3duLz4NCg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5w ZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+DQoNCltjYW1sLWxpc3RdIDxodHRwczovL3N5bXBh LmlucmlhLmZyL3N5bXBhL2luZm8vY2FtbC1saXN0Pg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6 Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC8+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 December 03 to 10, 20= 24.

Release of cppo 1.8.0

Fran=C3=A7ois Pottier announced

I am pleased to announce a new release of cppo (1.8.0) with on= e new feature and one bug fix:

  • A scope, delimited by #scope ... #endscope, limits the eff= ect of #define, #def ... #enddef, and #unde= f.
  • The command cppo -version, which used to print a blank lin= e, has been fixed.

For more details, please see the documentation.

New releases of Merlin and OCaml-LSP

vds announced

I am pleased to announce new releases of Merlin (5.3-502 and <= code>4.18-414) and OCaml-LSP (1.20.1 and 1.20.1-= 4.14).=20

The Merlin releases bundle a handful of fixes while the LSP releases focus = on adding more custom queries. These custom queries will enable tailored LS= P clients to provide the same rich OCaml editing features as the one provid= ed by the original Merlin modes for Emacs and Vim.

Latest releases of vscode-ocaml-platform already provide two n= ew commands: Construct and Jump that respectively= provide a better UI to fill typed holes with values and jump to specific p= arent nodes. Search by type/polarity and a command to get the type of growi= ng and shrinking selections will also be available in the future.

3D"c07de3130c92c=

Merlin changelog

  • merlin 5.3
    • merlin binary
      • Respect the EXCLUDE_QUERY_DIR configuration directive when= looking for cmt files (#1854)
      • Fix occurrences bug in which relative paths in index files are resolved= against the PWD rather than the SOURCE_ROOT (#1855)
      • Fix exception in polarity search (#1858 fixes #1113)
      • Fix jump to fun targets not working (#1863, fixes #1862)
      • Fix type-enclosing results instability. This reverts some overly aggressive deduplication that should be done on the client side. (#1864)
      • Fix occurrences not working when the definition comes from a hidden sou= rce file (#1865)

OCaml-LSP changelog

  • 1.20.1
    • Features
      • Add custom [~ocamllsp/typeSearch~](/ocaml-lsp-server/docs/ocamllsp/typeSearch-spec.md)= request (#1369)
      • Make MerlinJump code action configurable (#1376)
      • Add custom [~ocamllsp/jump~](/ocaml-lsp-server/docs/ocamllsp/merlinJump= -spec.md) request (#1374)
    • Fixes
      • Fix fd leak in running external processes for preprocessing (#1349)
      • Fix prefix parsing for completion of object methods (#1363, fixes #1358= )
      • Remove some duplicates in the selectionRange answers (#136= 8)
      • Deactivate the jump code actions by default. Clients can e= nable them with the merlinJumpCodeActions configuration option. Alternatively = a custom request is provided for ad hoc use of the feature. (#1411)

New release of baby

Fran=C3=A7ois Pottier announced

It is my pleasure to announce the second release of baby.

opam update
opam install baby.20241204

baby is an OCaml library that offers persistent sets and maps = based on balanced binary search trees. It offers replacements for OCaml's <= code>Set and Map modules.

Height-balanced and weight-balanced binary search trees are offered out of = the box. Furthermore, to advanced users, the library offers a lightweight w= ay of implementing other balancing strategies.

Documentation= is available online.

The changes in this release are as follows:

  • The library now offers both sets and maps. The modules Baby.H.Set= and Baby.W.Set continue to exist, and are compatible w= ith OCaml's Set library. The modules Baby.H.Map a= nd Baby.W.Map appear, and are compatible with OCaml's Ma= p library. Furthermore, the functors Baby.H.Make and Baby.W.Make appear. These functors produce a module that contain= s sets, maps, and two conversion functions between sets and maps, namely domain and lift.
  • Documentation: in the signature OrderedType, clarify the s= pecification of the function compare; this function decides a = total preorder =E2=89=A4.
  • Documentation: in the preamble, clarify that, most of the time, we assu= me that =E2=89=A4 is a total order; if an operation must be un= derstood in the more general case where =E2=89=A4 is a total p= reorder, then this is explicitly indicated.
  • Documentation: update the documentation of find and = find_opt in accordance with the previous point.
  • A number of incompatible changes have been made; see the change log for deta= ils.

Release of Saturn 1.0

Carine Morel announced

I am thrilled to announce the release of Saturn 1.0!

Saturn is a collection of concurrent-safe data structures designed for OCam= l 5. These structures have been:

  • thoroughly tested with amazing tools like STM (see this blog post) and DScheck,
  • benchmarked for performance,
  • optimized for efficiency,
  • and even verified in some cases!

If you're curious about the motivation behind Saturn and the challenges it = addresses, you can read more here.

What Can You Do with Saturn?

Saturn provides a variety of data structures, including queues, stacks, has= h tables, and more. All of these structures are lock-free, linearizable, and specifically designed to take full advantage = of OCaml 5=E2=80=99s multicore capabilities.

  • Portable Data Structures

    Lock-freedom is a progress property that guarantees system-wide progress. T= his is a powerful and desirable feature, though it comes at the cost of som= e overhead. However, it offers a significant advantage: lock-free data stru= ctures avoid the need for scheduler-specific blocking mechanisms, making th= em compatible with any scheduler, such as Eio or Domainslib.

  • Restrictions

    Saturn=E2=80=99s data structures are not composable, meaning you cannot com= bine them (e.g., use Saturn.Queue inside Saturn.Htbl) while preserving properties like lock-freedom and linearizability.

    They are also not extensible outside of Saturn without losing these propert= ies. For instance, Saturn.Queue does not include a lengt= h function because implementing one would introduce significant over= head (see Saturn.Bounded_queue for an example of this tradeoff= ). Attempting to add this functionality, such as by wrapping the queue:

    type 'a t =3D {size: int=
     Atomic.t; queue : 'a Saturn.Queue.t}
    

    would result in a structure that either loses lock-freedom or is no longer = linearizable.

    If you need composable lock-free data structures, consider exploring kcas_data.

Call to Action

  • Try It Out: Give Saturn a try in your projects and let us know h= ow it works for you. If you encounter any bugs or issues, please report the= m on our GitHub repos= itory.
  • Share Your Use Case: Are you already using Saturn? Let us know i= n the comments what you're building with it!
  • Contribute: We=E2=80=99d love to have more contributors. Whether= it=E2=80=99s implementing new features, improving documentation, or sugges= ting enhancements, your contributions are welcome!
  • Help Shape the Future: What would you like to see in Saturn? Is = there a missing data structure you need? Share your thoughts to help us bui= ld a roadmap for future development.

Thank you for your support!

Talks and Resources

If you want to learn more about Saturn, I gave a talk at the 2024 OCaml Wor= kshop=E2=80=94check out the short paper and the talk.

To dive deeper into concurrent-safe data structures, I highly recommend hav= ing a look at The Art of Multiprocessor Programmi= ng, which explores the differences in design between lock-based and loc= k-free data structures.

Commercial Support

If you=E2=80=99re interested in incorporating Saturn into your commercial a= pplications, Tarides offers professional development and support services. = Feel free to contact us for more details.

Dune dev meeting

Etienne Marais announced

Hi Dune enthusiasts! :smile:=20=20

We will hold our regular Dune dev meeting on Wednesday, December, 11th a= t 9:00 CET. As usual, the session will be one hour long.

Whether you are a maintainer, a regular contributor, a new joiner or just c= urious, you are welcome to join: these discussions are opened! The goal of = these meetings is to provide a place to discuss the ongoing work together a= nd synchronise between the Dune developers ! :camel:=20

:calendar: Agenda

The agenda is available on the meeting dedicated page. Feel free to ask if y= ou want to add more items in it.

:computer: Links

Dune 3.17

Etienne Marais announced

The Dune team is happy to announce the release of Dune 3.17.0!= :tada:=20

Among the list of changes, this minor release enables the Dune cache by def= ault for known-safe operations, adds out-of-the-box support for Wasm_= of_ocaml, adds support for the~-H~ compiler flag introduced in OCaml= 5.2, allows specifying code hosting services like Codeberg or GitLab organ= isations, and gives the possibility to run individual tests with dune= runtest.

If you encounter a problem with this release, you can report it on the ocaml/dune repository.

Changelog

  • Added
    • Make Merlin/OCaml-LSP aware of "hidden" dependencies used by (implicit_transitive_deps false) via the -H compi= ler flag. (#10535, @voodoos)
    • Add support for the -H flag (introduced in OCaml compiler 5.2) in dune (requires lang versions 3.17). This adaptation gives the correct semantics for (implicit_transitive_deps false). (#10644, fixes #9333, ocsigen/tyxml#274, #2733, #4963, @MA0100)
    • Add support for specifying Gitlab organization repositories in so= urce stanzas (#10766, fixes #6723, @H-ANSEN)
    • New option to control jsoo sourcemap generation in env and executable s= tanza (#10777, fixes #10673, @hhugo)
    • One can now control jsoo compilation_mode inside an executable stanza (#10777, fixes #10673, @hhugo)
    • Add support for specifying default values of the authors, = maintainers, and license stanzas of the dune-project file via the = dune config file. Default values are set using the (project_defaults) stanza (#10835, @H= -ANSEN)
    • Add names to source tree events in performance traces (#10884, @jchavar= ri)
    • Add codeberg as an option for defining project sources in = dune-project files. For example, (source (codeberg user/repo)). (#10904, @n= lordell)
    • dune runtest can now run individual tests with dune = runtest mytest.t (#11041, @Alizter).
    • Wasm_of_ocaml support (#11093, @vouillon)
    • Add a coqdep_flags field to the coq field of = the env stanza, and to the coq.theory stanza, allowing to configure coqdep f= lags. (#11094, @rlepigre)
  • Fixed
    • Show the context name for errors happening in non-default contexts. (#10414, fixes #10378, @jchavarri)
    • Correctly declare dependencies of indexes so that they are rebuilt when needed. (#10623, @voodoos)
    • Don't depend on coq-stdlib being installed when expanding variables of the coq.version family (#10631, fixes #10629, @gares)
    • Error out if no files are found when using copy_files. (#1= 0649, @jchavarri)
    • Re_export dune-section private library in the dune-site library stanza, in order to avoid failure when generating and building sites modules with implicit_transitive_deps =3D false. (#10650, fixes #9661, @MA0100)
    • Expect test fixes: support multiple modes and fix dependencies when the= re is a custom runner (#10671, @vouillon)
    • In a (library) stanza with (extra_objects) an= d (foreign_stubs), avoid double linking the extra object files in the final executable. (#10783, fixes #10785, @nojb)
    • Map (re_export) library dependencies to the exports<= /code> field in META files, and vice-versa. This field was proposed in to https://discuss.ocaml.org/t/proposal-a-new-exports-fi= eld-in-findlib-meta-files/13947. The field is included in Dune-generated META files only when t= he Dune lang version is >=3D 3.17. (#10831, fixes #10830, @nojb)
    • Fix staged pps preprocessors on Windows (which were not working at all previously) (#10869, fixes #10867, @nojb)
    • Fix dune describe when an executable is disabled with enabled_if. (#10881, fixes #10779, @moyodiallo)
    • Fix an issue where C stubs would be rebuilt whenever the stderr of Dune= was redirected. (#10883, fixes #10882, @nojb)
    • Fix the URL opened by the command dune ocaml doc. (#10897,= @gridbugs)
    • Fix the file referred to in the error/warning message displayed due to = the dune configuration version not supporting a particular configuration stanza in use. (#10923, @H-ANSEN)
    • Fix enabled_if when it uses env variable. (#1= 0936, fixes #10905, @moyodiallo)
    • Fix exec -w for relative paths with –root argument (#10982, @gri= dbugs)
    • Do not ignore the (locks ..) field in the test and tests stanza (#11081, @rgrinberg)
    • Tolerate files without extension when generating merlin rules. (#11128, @anmonteiro)
  • Changed
    • Remove all remnants of the experimental patch-back-source-tree. (#10771, @rgrinberg)
    • Change the preset value for author and maintainer fields in the dune-project file to encourage including emails. (#10848, @pun= chagan)
    • Tweak the preset value for tags in the dune-project file t= o hint at topics not having a special meaning. (#10849, @punchagan)
    • Change some colors to improve readability in light-mode terminals (#10890, @gridbugs)
    • Forward the linkall flag to jsoo in whole program compilation as well (= #10935, @hhugo)
    • Configurator uses pkgconf as pkg-config implementation whe= n available and forwards it the target of ocamlc -config. (#1= 0937, @pirbo)
    • Enable Dune cache by default. Add a new Dune cache setting enabled-except-user-rules, which enables the Dune cache, but e= xcludes user-written rules from it. This is a conservative choice that can avoid breaking rules whose dependencies are not correctly specified. This is the current default. (#10944, #10710, @nojb, @ElectreAAS)
    • Do not add dune dependency in dune-project wh= en creating projects with dune init proj. The Dune dependency is implicitely added when = generating opam files (#11129, @Leonidas-from-XIV)

Spec and interface to declare dependencies in an OCaml script<= /h2>

jbeckford announced

This is the fourth article in the MlFront series. If you are interested in = scripting frameworks that can download source code and bytecode, and inter-= operate while doing so, please read:

https://diskuv.com/mlfro= nt/overview-4/

TLDR

(Critical, verbatim snippets from article)

I have an old opam package DkSDKFFIOCaml_Std that is a low-level bridge between OCaml and= other programming languages. It can be extraordinarily difficult to build,= so I made it a mix of pure OCaml source code and prebuilt library download= s. Today I'll describe how embedded OCaml dependencies like the following <= i>simplifies the build process:

module _ =3D DkSDKFFI_OCaml
(** The bridge between =
OCaml and other programming languages.

    {[ `v1 [
          `sec [ `scheme<=
/span> "dkcoder" ];
          `blib<=
/span> ["https://gitlab.com/api/v4/projects/62703194/packages/generic/@DKML_TARGET_ABI@/=
2.1.4/@DKML_TARGET_ABI@-4.14.2-DkSDKFFI_OCaml-2.1.4-none.blib.zip"];
          `clib<=
/span> ["https://gitlab.com/api/v4/projects/62703194/packages/generic/@DKML_TARGET_ABI@/=
2.1.4/@DKML_TARGET_ABI@-4.14.2-DkSDKFFI_OCaml-2.1.4-none.clib.zip"]
        ] ]} *)

(* And use what you imported ... *)
let () =3D
   ignore (DkSDKFFI_OCaml.Com.create_c ())

One set of designs I created are the MlFront_Archive package f= ormats:

  1. *.blib.zip - This is the bytecode archive. It is a zip fil= e containing .cma, .cmi and some other critical m= etadata.
  2. *.clib.zip - This is the C library archive. It is a zip fi= le containing .so or .dylib or .dll = shared libraries, and also the corresponding static libraries.

The important concept is that *.blib.zip and *.clib.zip<= /code> for OCaml are analogous to *.jar files for Java. The de= sign is available at:

The remote specification design is in the MlFront_Config libra= ry:

Other OCaml News

From the ocaml.org blog

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 to the= caml-list.

--=-=-=--