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=crmv84mO; 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=Zf+TBMR/; 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 B1B89B80123 for ; Tue, 21 May 2024 14:07:26 +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=rbxm3cn5hxk5OS1xm727gJzQwErEr0L2HQ2b1GPOOZg=; b=crmv84mOGkj8JyLpueyHjMgIUhalYEuclVYoNjHtFS2l7NIJ29rOev1J nivX+SC405ND38XsFWuMkBh2xwfv9NiA4kyNkCpcQWoCRCQfi1Yx87biZ HHW997X3piwAL9kYVAU45o15Qc3EJfyuri0ZsoDF2wLbl0lKlxVuvaT+T 4=; 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.08,177,1712613600"; d="scan'208,217";a="166661573" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 21 May 2024 15:07:25 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 43F9CE0CD0; Tue, 21 May 2024 15:07:25 +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 6909DE00B6 for ; Tue, 21 May 2024 15:07:23 +0200 (CEST) IronPort-SDR: 664c9c88_pqle9rxErHYlrYnSOsjjZ0fphRibmMjHBvqWzc0hw0CnNrr vaLD9FBTPiYY/qA1LWFU3SSjf/EPfajkq6WaOfQ== X-IPAS-Result: =?us-ascii?q?A0FlBABQm0xmkCIeaIFQCoQZgQMZAWJaMwcISIRWg0+OG?= =?us-ascii?q?4EWkDCIQYIwgWqBEQMYFiMUAQMBDS4BDgQBAgQBAQMBAgGEOUYCFoguAh8GA?= =?us-ascii?q?QQ0EwECBAEBAQEDAgMBAQEBAQEIAQEFAQEBAgEBAgQGAQIQAQEBAQEBIB4QD?= =?us-ascii?q?ieFdA2CSi4jURpRDQMCAgMDAwYBAQEBAQEBAQEBAQEBASIBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAggEAR0/AT8BAgYEB?= =?us-ascii?q?hMBATgYIwMUAQYDAgQNATUDARMBEhQGAYJlAYJkAwUMBpI7mzt6fzOBAYIMA?= =?us-ascii?q?QEGgQg+AwsCAgMBDgklAdoEgWMJgUiIFBoBJEhpAoQHHgmENycPgVVEgRU1g?= =?us-ascii?q?j0Hb4FQAW4LFwEBAQEYQkYRCwEBTQmDJYJpgWqEISaBXQGFSVZ+gw1nDBQoL?= =?us-ascii?q?22BCi8YD1GCIgMEBQMUgSsCeAIGFoEWAw9LWQ9ZdUYUQg6BTIgVgUtLMyETA?= =?us-ascii?q?VUTFws+CRYCFgMbFAQwDwkLJioGOQISDAYGBlk0CQQjAwgEA0IDIHERAwQaB?= =?us-ascii?q?AsHdYE8gWkEE0QDgTeHHYJTgzuCHoQeS4RzgXYOYYgbgXOBR0YdQAMLbT01F?= =?us-ascii?q?BsopBwENQKCdA4KAS0IXwEaDhAJCA4CIAIuCAUEMAoVBBkNBQkDEjUIAwIJI?= =?us-ascii?q?A+SMA4GJAQlBZ0hlE80B4QWgVsGDIgUaYEklWuEBYFWiyiZMSKYQCCBCIEsg?= =?us-ascii?q?kAzhCoKgRsJglWVBjwEhU2BfCM8bwEdAQsHMxowIiGCMwEzCRYwHA+OLRaDW?= =?us-ascii?q?BAxfYEmgXU7gWhZxWBBNQIBATcCBwEKAQEDCYViAQGDPoFIAQE?= IronPort-PHdr: A9a23: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 DciCjQdn3dxag== IronPort-Data: A9a23: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 vRAI5TzOahdFH1s5Q== IronPort-HdrOrdr: A9a23:1++JOqpMmRI9v+kB4PW9LhsaV5oWeYIsimQD101hICG9E/bo9P xG+c5w6faaslgssR0b9OxoW5PhfZq/z/9ICOAqVN/IYOCMggSVxe9ZgbfK8nnJJGnV9+JW16 tsGpIOauHYPBxdlsi/xAG5Fr8bsb26GU2T9ILj80s= X-Talos-CUID: =?us-ascii?q?9a23=3AgdTMZmob0aM9lipm3fUqA0LmUfxiQHbMkC/dH2y?= =?us-ascii?q?pFkBNVua8c3jPoooxxg=3D=3D?= X-Talos-MUID: 9a23:XVbBWgUBSdz2NAzq/BTnoC9GMMp12PyREm5Xnso5itSZMAUlbg== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.08,177,1712613600"; d="scan'208,217";a="87562854" X-URL-ContentFilter: X-MGA-submission: =?us-ascii?q?MDFXN8ykGZ0rpeI83K6cLhsCEO7yOnBFfla1eG?= =?us-ascii?q?0E4J+KyDsrf6ug7jn6wJfhtpEdTt7HKAqnBU/C986oF1vOHDQaU3A3Jc?= =?us-ascii?q?p5BZuVHmvabbC5wgq2bTlzP7wI5j4WZGRxhP6vdZRISWk+zVpmR5hm+c?= =?us-ascii?q?hiW89SrUCHMP2deGtVjsmOLA=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; 21 May 2024 15:07:21 +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 A72335647FE; Tue, 21 May 2024 15:07:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1716296839; bh=AldhN+MbG1c58JnEqlDZ89VthadCx9feqpSl2tyXuVY=; h=From:To:Subject:Date:Message-ID; b=Zf+TBMR/6Q8Y2siQZ77UqOLkMafFSy9u6qgIS7ihxcy8U8b7zwcUz5EkU7/sob4OC ZTyONzu7oo0ia4iMzL0/D3kngXxDrTomfKuSWs3bPOu1fPJ4Xzzgz1r7AYGCfpYhuS FdPCPT3FhBXQ+0GMPTHHT37So2xLzz+vuwXJAf2U= From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 21 May 2024 15:07:17 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue May 21 15:07:20 2024 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499064, queueID=DF1CB5647FF 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: 19133 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 ZWsgb2YgTWF5IDE0IHRvIDIxLA0KMjAyNC4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpXZSBXYW50IFlv dXIgRmVlZGJhY2sgb24gdGhlIG9kb2MgRGV2ZWxvcGVyIEV4cGVyaWVuY2UNCldpbmRvd3MgY29t cGlsZXIgc3VwcG9ydCBpbiBvcGFtIDIuMi4wfmJldGEyDQpPQ2FtbCBXb3Jrc2hvcCAyMDI0IGF0 IElDRlAg4oCTIGFubm91bmNlbWVudCBhbmQgY2FsbCBmb3IgcHJvcG9zYWxzDQpPZG9jIHN5bnRh eCBjaGVhdHNoZWV0DQpEa0NvZGVyIDAuMiAtIFNjcmlwdGluZyBpbiBPQ2FtbA0KSW1hbmRyYSBT eXNNTCBUcmFuc3BpbGVyIEludGVybnNoaXAgT3Bwb3J0dW5pdHkhDQpCYW0gLSBBIHByb3BlcnR5 LWJhc2VkIHRlc3Rpbmcgd2l0aCBpbnRlcm5hbCBzaHJpbmtpbmcNClN0aXRjaCAtIE5vdGUgTWFu YWdpbmcgZm9yIFVub3JnYW5pemVkIE1pbmltYWxpc3RzDQo3IE9DYW1sIEdvdGNoYXMNClVzaW5n IE9DYW1sIG9uIHdpbmRvd3Mgd2l0aCBXU0wNCk90aGVyIE9DYW1sIE5ld3MNCk9sZCBDV04NCg0K DQpXZSBXYW50IFlvdXIgRmVlZGJhY2sgb24gdGhlIG9kb2MgRGV2ZWxvcGVyIEV4cGVyaWVuY2UN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFy Y2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvd2Utd2FudC15b3VyLWZlZWRi YWNrLW9uLXRoZS1vZG9jLWRldmVsb3Blci1leHBlcmllbmNlLzE0NjQ2LzE+DQoNCg0KU2FiaW5l IFNjaG1hbHR6IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGV5IGFsbCwg8J+n ofCfkKsNCg0KICB0aGUgZG9jdW1lbnRhdGlvbiB0ZWFtIGF0IFtUYXJpZGVzXSBpcyBsb29raW5n IGZvciBpbnB1dCBhbmQgZmVlZGJhY2sNCiAgb24gb2RvYy4NCg0KICBJIHdvdWxkIGJlIHN1cGVy IGhhcHB5IGlmIGV2ZXJ5b25lIHdobyB1c2VzIG9kb2Mgb3Igd291bGQgdXNlIG9kb2MgaWYNCiAg aXQgd29ya2VkIGZvciB0aGVtIGNhbiBkcm9wIGFuIGFuc3dlciBpbiB0aGlzIGZlZWRiYWNrIGZv cm06DQoNCiAgPGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zvcm1zL2QvZS8xRkFJcFFMU2ZwWkhs bmJRaldvbEFoS0p2bjQxYVQ1UUpjN0diN3VaSlNkdFRUN01aZUFkeU1vdy92aWV3Zm9ybT91c3A9 c2ZfbGluaz4NCg0KDQpbVGFyaWRlc10gPGh0dHBzOi8vdGFyaWRlcy5jb20+DQoNCg0KV2luZG93 cyBjb21waWxlciBzdXBwb3J0IGluIG9wYW0gMi4yLjB+YmV0YTINCuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvd2luZG93cy1j b21waWxlci1zdXBwb3J0LWluLW9wYW0tMi0yLTAtYmV0YTIvMTQ2NDgvMT4NCg0KDQpEYXZpZCBB bGxzb3BwIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgT24gYmVoYWxmIG9mIHRoZSBlbnRp cmUgb3BhbSB0ZWFtLCBidXQgYWxzbyB3aXRoIGEgcGVyc29uYWwgc2Vuc2Ugb2YNCiAgcmVsaWVm LCBJJ20gdmVyeSBwbGVhc2VkIHRvIGFubm91bmNlIHRoYXQgdGhlIHByb2Nlc3Mgb2YgdXBzdHJl YW1pbmcNCiAgc3VwcG9ydCBmb3IgV2luZG93cyBPQ2FtbCB0byBvcGFtLXJlcG9zaXRvcnkgaW4N CiAgW29jYW1sL29wYW0tcmVwb3NpdG9yeSMyNTg2MV0gZmluYWxseSBzdGFydGVkIG9uIEZyaWRh eSENCg0KICBUaGVyZSdzIGEgZnVsbCBbYmxvZyBwb3N0XSB3aXRoIGRldGFpbHMgb24gaG93IHlv dSBjYW4gdHJ5IHRoaXMgb3V0DQogIG5vdyB3aXRoIG9wYW0gMi4yLjB+YmV0YTIuIFRoZSBUTDtE UiwgYXNzdW1pbmcgeW91IGhhdmUgd2luZ2V0IG9uIHlvdXINCiAgV2luZG93cyBzeXN0ZW0gKG9w ZW4gdGhlIE1pY3Jvc29mdCBTdG9yZSBhcHAgYW5kIGluc3RhbGwgdGhlIFtBcHANCiAgSW5zdGFs bGVyXSBwYWNrYWdlIGZyb20gTWljcm9zb2Z0IGlmIHlvdSBkb24ndCkgdGhlbiB5b3UgY2FuIGlz c3VlOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgd2luZ2V0IGluc3RhbGwgR2l0LkdpdA0K ICDilJTilIDilIDilIDilIANCg0KICBpZiB5b3UgZG9uJ3QgaGF2ZSBHaXQgZm9yIFdpbmRvd3Mg YW5kOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgd2luZ2V0IGluc3RhbGwgb3BhbQ0KICDi lJTilIDilIDilIDilIANCg0KICBpZiB5b3UgZG9uJ3QgeWV0IGhhdmUgdGhlIDIuMi4wfmJldGEy IGJpbmFyeS4gKllvdSBtdXN0IHRoZW4gbGF1bmNoIGENCiAgZnJlc2ggQ29tbWFuZCBQcm9tcHQg LyBQb3dlclNoZWxsIHNlc3Npb24qLiBGb3IgdGhlcmUsIHlvdSBjYW4gdGhlbg0KICBydW46DQoN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIGluaXQgZ2l0K2h0dHBzOi8vZ2l0aHViLmNv bS9kcmEyNy9vcGFtLXJlcG9zaXRvcnkuZ2l0I3dpbmRvd3MtaW5pdGlhbA0KICDilJTilIDilIDi lIDilIANCg0KICBvcg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BhbSBpbml0IC1hIC0t bm8tZ2l0LWxvY2F0aW9uIC0tY3lnd2luLWludGVybmFsLWluc3RhbGwgZ2l0K2h0dHBzOi8vZ2l0 aHViLmNvbS9kcmEyNy9vcGFtLXJlcG9zaXRvcnkuZ2l0I3dpbmRvd3MtaW5pdGlhbA0KICDilJTi lIDilIDilIDilIANCg0KICBpZiB5b3UnZCBsaWtlIHRvIGJlIGFza2VkIGZld2VyIHF1ZXN0aW9u cy4gKlRoZXJlIGlzIGEga25vd24gYW5kIGJpZw0KICBwYXVzZSB3aGVuIHVwZGF0aW5nIHRoZSBy ZXBvc2l0b3J5Ki4gSG93ZXZlciwgYWZ0ZXIgYSBsaXR0bGUgYml0IG9mDQogIHRpbWUgKGNvZmZl ZSwgb3IgW2Egc3dvcmQgYmF0dGxlXSwgaWYgdGhhdCdzIHlvdXIgdGhpbmcpLCB5b3Ugc2hvdWxk DQogIHRoZW4gYmUgZmFjZWQgd2l0aCBhIGZ1bGx5IGluaXRpYWxpc2VkIG9wYW0gd2l0aA0KICBv Y2FtbC1iYXNlLWNvbXBpbGVyLjUuMi4wIGluc3RhbGxlZCBmb3IgdGhlIG1pbmd3LXc2NCBhbWQ2 NCBwb3J0IG9mDQogIG5hdGl2ZSBXaW5kb3dzIG9wYW0uDQoNCiAgVGhpbmdzIHdpdGggZGVwZXh0 cyB3aWxsIGxpa2VseSBub3Qgd29yazogdGhlIGJsb2cgcG9zdCBjb250YWlucw0KICBkZXRhaWxz IG9uIGhvdyB0byBnZXQgc3RhcnRlZCB3aXRoIFBScywgYnV0IGlzc3VlcyBhcmUgYWxzbyBoZWxw ZnVsLg0KDQogIFRoZSBibG9nIHBvc3QgY292ZXJzIHdoYXQgd2UgcmVnYXJkIGFzIHRoZSAiZGVm YXVsdCB1c2UgY2FzZSIgLSB0aGF0DQogIGlzIGEgbmF0aXZlIFdpbmRvd3MgdXNlciBleHBlY3Rp bmcgdG8gdXNlIHRoaXMgbmV3IE9DYW1sIHRoaW5nIHRoZXkNCiAgaGVhcmQgYWJvdXQgbmF0aXZl bHkuIGkuZS4gbm90IHJ1bm5pbmcgaW4gV1NMIG9yIEN5Z3dpbiBvciBNU1lTMiBvcg0KICBhbnkg b3RoZXIgImFyZSB5b3Ugc3VyZSBjYW4ndCBqdXN0IGluc3RhbGwgTGludXggb24gdGhhdD8iIGFw cHJvYWNoLg0KDQogIEhvd2V2ZXIsIGFsbCB0aGUgb3RoZXIgdXNlIGNhc2VzIG1hdHRlciB0b28h IFlvdSdyZSBtZWFudCB0byBiZSBhYmxlDQogIHRvIHJ1biBuYXRpdmUgV2luZG93cyBvcGFtIGZy b20geW91ciBvd24gQ3lnd2luIG9yIE1TWVMyIG1pbnR0eSBiYXNoDQogIHRlcm1pbmFsOyB3ZSBh cmUgYWltaW5nIGZvciB0aGUgb3BhbSAyLjIuMCBiaW5hcnkgdG8gYmUgYSBkcm9wLWluDQogIHJl cGxhY2VtZW50IChhcGFydCBmcm9tIHNldHRpbmcgYG9zLWRpc3RyaWJ1dGlvbicgdG8gYCJjeWd3 aW5wb3J0cyInKQ0KICBmb3IgIk9DYW1sIGZvciBXaW5kb3dzIiBmb3IgbGVnYWN5IHVzZSB3aXRo IFt0aGUgInN1bnNldCIgcmVwb3NpdG9yeV07DQogIHlvdSdyZSBtZWFudCB0byBiZSBhYmxlIHRv IHByb3ZpZGUgeW91ciBvd24gQ3lnd2luIG9yIE1TWVMyDQogIGluc3RhbGxhdGlvbiBpZiB5b3Ug cmVhbGx5IG5lZWQgdG8gKGFuZCB5b3UgcmVhbGx5IG1pZ2h0ISkuIEJ1dCB3ZSBkbw0KICBuZWVk IGhlbHAgdGVzdGluZyBhbGwgb2YgaXQg8J+Zgg0KDQogIFdlIGFudGljaXBhdGUgb25lIGZ1cnRo ZXIgYmV0YSBvZiBvcGFtIDIuMi4wIGJ5IHRoZSBlbmQgb2YgdGhlDQogIG1vbnRoLiBGcm9tIHRo ZSBXaW5kb3dzIHBlcnNwZWN0aXZlLCB0aGlzIHdpbGwgZml4IGEga25vd24gYnVnIGluIHRoZQ0K ICBlbnZpcm9ubWVudCB2YXJpYWJsZSBoYW5kbGluZyAoc2VlIFtvY2FtbC9vcGFtIzU4MzhdKSBi dXQgd2lsbCBhbHNvDQogIGhvcGVmdWxseSBzdHJhaWdodGVuIG91dCB0aGUgYmVoYXZpb3VyIG9m IGBvcGFtIGluaXQnIGZvciBzb21lIG9mDQogIHRoZXNlICJub24tZGVmYXVsdCIgdXNlIGNhc2Vz LiBXZSdyZSB0aGVuIGhvcGluZyB0byByb2NrZXQgdG93YXJkcyBhDQogIHJlbGVhc2UgY2FuZGlk YXRlIGluIEp1bmUg8J+agA0KDQogIEhhcHB5IFdpbmRvd3MgaGFja2luZyEgUGxlYXNlIG9wZW4g aXNzdWVzOyBwbGVhc2UgYXNrIGZvciBmdXJ0aGVyDQogIGhlbHA7IHBsZWFzZSBoYXZlIGZ1biEN Cg0KICBEYXZpZCwgb24gYmVoYWxmIG9mIHRoZSBvcGFtIHRlYW0uDQoNCg0KW29jYW1sL29wYW0t cmVwb3NpdG9yeSMyNTg2MV0NCjxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb3BhbS1yZXBvc2l0 b3J5L3B1bGwvMjU4NjE+DQoNCltibG9nIHBvc3RdIDxodHRwczovL29wYW0ub2NhbWwub3JnL2Js b2cvb3BhbS0yLTItMC13aW5kb3dzLz4NCg0KW0FwcCBJbnN0YWxsZXJdIDxodHRwczovL2FwcHMu bWljcm9zb2Z0LmNvbS9kZXRhaWwvOW5ibGdnaDRubnMxPg0KDQpbYSBzd29yZCBiYXR0bGVdIDxo dHRwczovL3hrY2QuY29tLzMwMy8+DQoNClt0aGUgInN1bnNldCIgcmVwb3NpdG9yeV0NCjxodHRw czovL2dpdGh1Yi5jb20vb2NhbWwtb3BhbS9vcGFtLXJlcG9zaXRvcnktbWluZ3c+DQoNCltvY2Ft bC9vcGFtIzU4MzhdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb3BhbS9pc3N1ZXMvNTgzOD4N Cg0KDQpPQ2FtbCBXb3Jrc2hvcCAyMDI0IGF0IElDRlAg4oCTIGFubm91bmNlbWVudCBhbmQgY2Fs bCBmb3IgcHJvcG9zYWxzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0K ICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L29jYW1sLXdvcmtzaG9wLTIwMjQtYXQtaWNm cC1hbm5vdW5jZW1lbnQtYW5kLWNhbGwtZm9yLXByb3Bvc2Fscy8xNDM3MS82Pg0KDQoNCkNvbnRp bnVpbmcgdGhpcyB0aHJlYWQsIFNvbmphIEhlaW56ZSBzYWlkDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBPbmUg bW9yZSB1cGRhdGUsIHRoaXMgdGltZSBhYm91dCBoeWJyaWQgbW9kYWxpdGllczogV2Ugbm93IGhh dmUgdGhlDQogIGNvbmZpcm1hdGlvbiBmcm9tIHNpZ3BsYW4gKHRoZSBvcmdhbml6ZXJzIGJlaGlu ZCBJQ0ZQKSB0aGF0IHdlJ2xsIGhhdmUNCiAgdGhlIHNhbWUgaHlicmlkIG1vZGFsaXRpZXMgYXMg bGFzdCB5ZWFyIDp0YWRhOiBTbyBpbiBwYXJ0aWN1bGFyLA0KICBzcGVha2VycyBjYW4gZ2l2ZSB0 YWxrcyByZW1vdGVseSB2aWEgYSBab29tIGNhbGwuIFdlJ2xsIGFsc28gbWFrZSBzdXJlDQogIHRo aXMgdGltZSB0aGF0IHRoZSByZW1vdGUgc3BlYWtlciBjYW4gc2VlIHRoZSBhdWRpZW5jZSBvdmVy IHRoZQ0KICBjYWxsLiBUbyBwcm9tb3RlIGEgZ29vZCBhdG1vc3BoZXJlLCBjb21tdW5pY2F0aW9u IGFuZCBlbmdhZ2VtZW50LCB3ZQ0KICBkbyBwcmVmZXIgdG8gaGF2ZSBtb3N0IHRhbGtzIGluLXBl cnNvbiwgYnV0IHJlbW90ZSB0YWxrcyB3aWxsIGJlIG1vc3QNCiAgd2VsY29tZSBhcyB3ZWxsLiBT bywgZG9uJ3QgaGVzaXRhdGUgdG8gc3VibWl0IGEgdGFsayBldmVuIGlmIHlvdSBjYW4ndA0KICBt YWtlIGl0IGluIHBlcnNvbi4NCg0KICBDaGVlcnMsIEBBcm1hw6tsIGFuZCBAcGl0YWcNCg0KICBQ RDogT25jZSB0aGUgdGltZSBjb21lcyBjbG9zZXIsIHdlJ2xsIGdpdmUgZGV0YWlsIG9uIHlvdXR1 YmUgbGl2ZSBhbmQNCiAgZGlzY29yZCBsaW5rcyBmb3IgcmVtb3RlIGF0dGVuZGFuY2UgYXMgd2Vs bA0KDQoNCkd1aWxsYXVtZSBNdW5jaC1NYWNjYWdub25pIHRoZW4gYWRkZWQNCuKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoYW5rcywg dGhpcyB1cGRhdGUgYWJvdXQgaHlicmlkaXR5IHNob3VsZCBhbHNvIGJlIHRydWUgZm9yIHRoZSBN TA0KICB3b3Jrc2hvcC4NCg0KDQpPZG9jIHN5bnRheCBjaGVhdHNoZWV0DQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0K ICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vZG9jLXN5bnRh eC1jaGVhdHNoZWV0LzE0NjU4LzE+DQoNCg0KUGF1bC1FbGxpb3QgYW5ub3VuY2VkDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBIZWxsbyENCg0KICBJJ20gaGFwcHkgdG8gYW5ub3VuY2UgdGhlIGFkZGl0aW9uIG9mIGEg W2NoZWF0c2hlZXRdIGZvciBvZG9jJ3MNCiAgc3ludGF4IQ0KDQogIEkgaG9wZSBpdCB3aWxsIG1h a2UgaXQgbGVzcyBwYWluZnVsIHRvIGxlYXJuIG9yIHJlZnJlc2ggeW91cnNlbGYgb24NCiAgdGhl IHRvcGljLiBUaGUgW2Z1bGwgc3ludGF4IHJlZmVyZW5jZV0gaXMgc3RpbGwgdXNlZnVsIHRvIGhh dmUgc29tZQ0KICBkZXRhaWxzLg0KDQogIEhhdmUge2IgZnVufSA6c2xpZ2h0X3NtaWxlOiAhDQoN Cg0KW2NoZWF0c2hlZXRdIDxodHRwczovL29jYW1sLmdpdGh1Yi5pby9vZG9jL2NoZWF0c2hlZXQu aHRtbD4NCg0KW2Z1bGwgc3ludGF4IHJlZmVyZW5jZV0NCjxodHRwczovL29jYW1sLmdpdGh1Yi5p by9vZG9jL29kb2NfZm9yX2F1dGhvcnMuaHRtbD4NCg0KDQpEa0NvZGVyIDAuMiAtIFNjcmlwdGlu ZyBpbiBPQ2FtbA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAg QXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9ka2NvZGVyLTAtMi1zY3Jp cHRpbmctaW4tb2NhbWwvMTQ1NjAvMj4NCg0KDQpqYmVja2ZvcmQgYW5ub3VuY2VkDQrilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBU aGUgMC4zIHZlcnNpb24gaXMgbm93IGF2YWlsYWJsZS4gSXQgaGFzIGEgcHVibGljbHkgYWNjZXNz aWJsZQ0KICA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2t1di9ka2NvZGVyPiBzbyBpc3N1ZXMgY2Fu IGJlIGZpbGVkLCBhbmQNCiAgYGNvaHR0cCA2LjAuMH5iZXRhMicgaXMgbm93IGJ1bmRsZWQuDQoN CiAgTW9zdCBpbXBvcnRhbnQsIDAuMyB3YXMgc3VmZmljaWVudCB0byBidWlsZCB0aGUgcmVhbCBw cm9kdWN0aW9uDQogIHNlcnZpY2UNCiAgPGh0dHBzOi8vZ2l0bGFiLmNvbS9kaXNrdXYvc2FtcGxl cy9kZXZvcHMvRGtTdWJzY3JpYmVXZWJob29rPi4gSXQgaGFzDQogIGEgRG9ja2VyZmlsZSBhbmQg RG9ja2VyIENvbXBvc2UgZm9yIGVhc3kgZGVwbG95bWVudCB0byBwcm9kdWN0aW9uLCBhbmQNCiAg dGhlIERvY2tlciBjb250YWluZXIgaXMgYmFzZWQgb24gR29vZ2xlJ3MNCiAgPGh0dHBzOi8vZ2l0 aHViLmNvbS9Hb29nbGVDb250YWluZXJUb29scy9kaXN0cm9sZXNzI3JlYWRtZT4gZm9yIGENCiAg InNtYWxsIiBzaXplICh3ZWxsLCAxMDBNQiBpcyBub3Qgc21hbGwgYnV0IGl0IGlzIG5vdCBiaWcg ZWl0aGVyKS4gVGhlDQogIG9ubHkgZXhlY3V0YWJsZSBpbiB0aGUgY29udGFpbmVyIGlzIGBvY2Ft bHJ1bngnIChubyBgL2Jpbi9zaCcsDQogIGV0Yy4pLiBJbiBhbiBpZGVhbCB3b3JsZCB3aGVyZSBJ IGhhZCBtb3JlIHRpbWUgdGhlIHNlcnZpY2Ugd291bGQgYmUNCiAgZW1iZWRkZWQgaW5zaWRlIE1p cmFnZU9TIGluc3RlYWQuDQoNCg0KSW1hbmRyYSBTeXNNTCBUcmFuc3BpbGVyIEludGVybnNoaXAg T3Bwb3J0dW5pdHkhDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZl Og0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2ltYW5kcmEtc3lzbWwtdHJhbnNwaWxl ci1pbnRlcm5zaGlwLW9wcG9ydHVuaXR5LzE0NjYwLzE+DQoNCg0KQmVuIEJlbGxpY2sgYW5ub3Vu Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBJIHdhbnRlZCB0byBzaGFyZSBhbiBvcHBvcnR1bml0eSBmb3IgYSBz dW1tZXIgaW50ZXJuc2hpcCB3aXRoIEltYW5kcmEhDQoNCiAgSWYgeW91J3JlIHNvbWVvbmUgd2l0 aCBhbiBpbnRlcmVzdCBpbiB3cml0aW5nIHByb2R1Y3Rpb24gT0NhbWwgb3INCiAgdXNpbmcgYSBi YXR0bGUtd29ybiBhdXRvbWF0ZWQgdGhlb3JlbSBwcm92ZXIgaW4gYW4gaW5kdXN0cnkgc2V0dGlu ZywNCiAgcGxlYXNlIGFwcGx5IQ0KDQogIEl0IGlzIGJhc2VkIGluIEF1c3RpbiwgVFguDQoNCiAg WW91IGNhbiBmaW5kIG1vcmUgZGV0YWlscyBhbmQgYXBwbHkgW2hlcmVdLg0KDQogIFRoYW5rcyEN Cg0KDQpbaGVyZV0gPGh0dHBzOi8vYXBwbHkud29ya2FibGUuY29tL2ltYW5kcmEvai8xNTM5MkE0 NDQ1Lz4NCg0KDQpCYW0gLSBBIHByb3BlcnR5LWJhc2VkIHRlc3Rpbmcgd2l0aCBpbnRlcm5hbCBz aHJpbmtpbmcNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWJhbS1h LXByb3BlcnR5LWJhc2VkLXRlc3Rpbmctd2l0aC1pbnRlcm5hbC1zaHJpbmtpbmcvMTQ2NjEvMT4N Cg0KDQpGcmFuw6dvaXMgVGhpcsOpIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBh bSBleGNpdGVkIHRvIGludHJvZHVjZSAqQmFtKiwgYSByb2J1c3QgYW5kIHZlcnNhdGlsZSBwcm9w ZXJ0eS1iYXNlZA0KICB0ZXN0aW5nIChQQlQpIGxpYnJhcnkuIEJhbSBzaW1wbGlmaWVzIHRoZSBw cm9jZXNzIG9mIHRlc3RpbmcNCiAgcHJvcGVydGllcyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIHJh bmRvbWx5IGdlbmVyYXRlZCB2YWx1ZXMsIG1ha2luZyBpdA0KICBlYXNpZXIgdG8gaWRlbnRpZnkg YW5kIGRlYnVnIGlzc3VlcyBpbiB5b3VyIGNvZGUuDQoNCg0KS2V5IEZlYXR1cmVzDQrilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICDigKIgKk1vbmFkLWxpa2UgR2VuZXJh dG9ycyo6IENyZWF0ZSBuZXcgZ2VuZXJhdG9ycyBlYXNpbHkgd2l0aCBhDQogICAgIG1vbmFkLWxp a2UgcGF0dGVybiB0aGF0IHdvcmtzIHNlYW1sZXNzbHkgd2l0aCBzaHJpbmtpbmcgbWVjaGFuaXNt cy4NCiAg4oCiICpQUFggU3VwcG9ydCo6IEF1dG9tYXRpY2FsbHkgZGVyaXZlIGdlbmVyYXRvcnMg YmFzZWQgb24gdHlwZQ0KICAgICBkZXNjcmlwdGlvbnMuIFRoZSBjdXN0b21pemFibGUgZGVyaXZl ciBlbnN1cmVzIHNtb290aCBpbnRlZ3JhdGlvbg0KICAgICBpbnRvIHlvdXIgY29kZWJhc2UuDQog IOKAoiAqVGV6dCBJbnRlZ3JhdGlvbio6IEludGVncmF0ZXMgd2l0aCB0aGUgVGV6dCB0ZXN0IGZy YW1ld29yaywNCiAgICAgcHJvdmlkaW5nIGEgdXNlci1mcmllbmRseSBleHBlcmllbmNlLCBlc3Bl Y2lhbGx5IG5vdGFibGUgaW4NCiAgICAgZGVidWdnaW5nIHNjZW5hcmlvcy4NCiAg4oCiICpJbnRl cm5hbCBTaHJpbmtpbmcqOiBWYXJpb3VzIGRlZmF1bHQgc2hyaW5raW5nIHN0cmF0ZWdpZXMgaGVs cA0KICAgICBlZmZpY2llbnRseSBwaW5wb2ludCBtaW5pbWFsIGNvdW50ZXJleGFtcGxlcy4gSW50 ZXJuYWwgc2hyaW5raW5nDQogICAgIGVuc3VyZXMgdGhhdCBvbmx5ICdzbWFsbGVyJyB2YWx1ZXMg YXJlIHVzZWQgZHVyaW5nIHRoZSBwcm9jZXNzLCBhbmQNCiAgICAgdGhpcyBpcyBkb25lIGluIGEg d2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBtb25hZC1saWtlDQogICAgIG9wZXJhdG9y cy4NCiAg4oCiICpDdXN0b20gU2hyaW5raW5nKjogRGVmaW5lIGN1c3RvbSBzaHJpbmtlcnMgdGhh dCB3b3JrIHdlbGwgd2l0aCB0aGUNCiAgICAgZXhpc3Rpbmcgc2hyaW5raW5nIHN0cmF0ZWdpZXMu DQoNCg0KSW5zdGFsbGF0aW9uDQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwN Cg0KICBZb3UgY2FuIGluc3RhbGwgQmFtIHVzaW5nIG9wYW06DQoNCiAg4pSM4pSA4pSA4pSA4pSA DQogIOKUgiBvcGFtIGluc3RhbGwgYmFtIHRlenQtYmFtDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoN CkdldHRpbmcgc3RhcnRlZA0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWMDQoNCiAgSGVyZSBpcyBhbiBleGFtcGxlIHRvIGdldCB5b3Ugc3RhcnRlZDoNCg0KICDi lIzilIDilIDilIDilIANCiAg4pSCIG9wZW4gVGV6dF9iYW0NCiAg4pSCIA0KICDilIIgdHlwZSB0 ID0gRm9vIG9mIHthOiBpbnQ7IGI6IHN0cmluZ30gfCBCYXIgb2YgaW50IGxpc3QgW0BAZGVyaXZp bmcgZ2VuXQ0KICDilIIgKCoqIFRoZSBkZXJpdmVyIGNyZWF0ZXMgYSB2YWx1ZSBbdmFsIGdlbiA6 IHQgQmFtLlN0ZC50XS4gKikNCiAg4pSCIA0KICDilIIgbGV0IHJlZ2lzdGVyICgpID0NCiAg4pSC ICAgbGV0IHByb3BlcnR5ID0gZnVuY3Rpb24NCiAg4pSCICAgICB8IEZvbyB7YTsgYn0gLT4NCiAg 4pSCICAgICAgICAgaWYgYSA+IDFfMDAwICYmIFN0cmluZy5jb250YWlucyBiICd6JyB0aGVuDQog IOKUgiAgICAgICAgICAgRXJyb3IgKGBGYWlsICJBIGNvdW50ZXItZXhhbXBsZSB3YXMgZm91bmQi KQ0KICDilIIgICAgICAgICBlbHNlIE9rICgpDQogIOKUgiAgICAgfCBCYXIgWzE7IDI7IDM7IDRd IC0+DQogIOKUgiAgICAgICAgIEVycm9yIGBCYWRfdmFsdWUNCiAg4pSCICAgICB8IEJhciBfIC0+ DQogIOKUgiAgICAgICAgIE9rICgpDQogIOKUgiAgIGluICANCiAg4pSCICAgUGJ0LnJlZ2lzdGVy IH5fX0ZJTEVfXyB+dGl0bGU6IlNpbXBsZSBleGFtcGxlIG9mIGJhbSIgfnRhZ3M6WyJiYW0iOyAi c2ltcGxlIl0NCiAg4pSCICAgICB+Z2VuIH5wcm9wZXJ0eSAoKQ0KICDilIIgDQogIOKUgiBsZXQg XyA9IA0KICDilIIgICAgIHJlZ2lzdGVyICgpOw0KICDilIIgICAgIFRlc3QucnVuICgpDQogIOKU lOKUgOKUgOKUgOKUgA0KDQogIFRoZXJlIGFyZSBzZXZlcmFsIG1vcmUgZGV0YWlsZWQgW2V4YW1w bGVzXSBpbiB0aGUgcmVwb3NpdG9yeSB0byBzaG93DQogIHlvdSBhcm91bmQgdGhlIGxpYnJhcnku DQoNCg0KW2V4YW1wbGVzXSA8aHR0cHM6Ly9naXRodWIuY29tL2ZyYW5jb2lzdGhpcmUvYmFtL3Ry ZWUvbWFzdGVyL2V4YW1wbGU+DQoNCg0KQ29udHJpYnV0aW9ucw0K4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgQ29udHJpYnV0aW9ucyBmcm9tIHRoZSBjb21tdW5p dHkgYXJlIHdlbGNvbWUhIElmIHlvdSBoYXZlIGlkZWFzLCBidWcNCiAgcmVwb3J0cywgb3IgaW1w cm92ZW1lbnRzLCBmZWVsIGZyZWUgdG8gc2hhcmUgdGhlbSENCg0KDQpLYWthZHUgYXNrZWQgYW5k IEZyYW7Dp29pcyBUaGlyw6kgcmVwbGllZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgICAgICAgQ2FuIGl0IGJlIGNvbXBh cmVkIHRvIDxodHRwczovL2dpdGh1Yi5jb20vYy1jdWJlL3FjaGVjay8+DQogICAgICAgID8NCg0K ICBNeSB3b3JrIGFyb3VuZCAvQmFtLyBzdGFydGVkIGFmdGVyIHVzaW5nICJRQ2hlY2siIGFuZCBl c3BlY2lhbGx5DQogICJRQ2hlY2syIiBxdWl0ZSBhIGxvdCBmb3IgdGhlIFRlem9zIHByb2plY3Qu DQoNCiAgV2l0aCByZXNwZWN0IHRvIFFDaGVjaywgUUNoZWNrMiBjYW1lIHdpdGggImludGVncmF0 ZWQiIHNocmlua2luZw0KICBhbGxvd2luZyB0byBkZXJpdmUgYXV0b21hdGljYWxseSBzaHJpbmtl cnMgZm9yIGdlbmVyYXRvcnMuIFRoaXMgYWltIHRvDQogIHNpbXBsaWZ5IGRlYnVnZ2luZyB3aGVu IGEgY291bnRlci1leGFtcGxlIGlzIGZvdW5kLCBzbyB0aGF0IGEgc21hbGxlcg0KICBleGFtcGxl IGlzIHJlcG9ydGVkIHRvIHRoZSB1c2VyLg0KDQogIEhvd2V2ZXIsIHRoaXMgY2FtZSB3aXRoIGEg Y29zdDoNCiAg4oCiIFBlcmZvcm1hbmNlLXdpc2UsIHRoZXJlIHdhcyBhIHJlZ3Jlc3Npb24gZnJv bSAiUUNoZWNrIiwgZXNwZWNpYWxseQ0KICAgIHRoZSB0aW1lIHRha2VuIHRvIHJlcG9ydCBhIGNv dW50ZXItZXhhbXBsZSBiZWNhdXNlIHRoZSBzaHJpbmtpbmcNCiAgICBwcm9jZXNzIHdhcyB0YWtp bmcgYSBsb3Qgb2YgdGltZQ0KICDigKIgQXQgc29tZSBwb2ludCwgd2UgZXZlbiBmYWNlZCBhbiBp c3N1ZSB3ZXJlIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcw0KICAgIG5ldmVyIGVuZGVkLiBXZSBzdGFy dGVkIHRvIGltcGxlbWVudCBhbiBhZC1ob2Mgc2hyaW5rZXIgYnV0IGl0IHdhcw0KICAgIG5vdCB3 b3JraW5nIGVpdGhlciBhbmQgd2UgbmV2ZXIgcmVhbGx5IGZpZ3VyZWQgb3V0LiBUaGUgc29sdXRp b24gd2FzDQogICAgdG8gZGVhY3RpdmF0ZSBzaHJpbmtpbmcNCiAg4oCiIFRoZXJlIGFyZSBvdGhl ciBVWCBjb25zaWRlcmF0aW9uczogZGVidWdnaW5nIGNhbiBiZSB0ZWRpb3VzDQogICAgKGVzcGVj aWFsbHkgImhlbGxvIiBkZWJ1Z2dpbmcpDQoNCiAgU28gYmFzaWNhbGx5IC9CYW0vIHN0YXJ0ZWQg YXMgYW4gZXhwZXJpbWVudCB0byB1bmRlcnN0YW5kIHNocmlua2luZw0KICBhbmQgY29tZSB1cCB3 aXRoIHNvbWV0aGluZyBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgY29tcG9zZQ0KICBiZXR0ZXIu IFRoaXMgaXMgd2h5IC9iYW0vIHJlbGllcyBtYWlubHkgb24gbW9uYWRpYyBvcGVyYXRvcnMuDQoN CiAgVGhpcyBtYWtlcyB0aGUgd3JpdGluZyBvZiBnZW5lcmF0b3JzIGVhc2llciwgdGhlIHNocmlu a2luZyBpcw0KICAvaW50ZXJuYWwvIGVuc3VyaW5nIHRoZSBzaHJpbmtpbmcgd29uJ3QgY3JlYXRl IG5ldyB2YWx1ZS4gSWYgeW91IHVzZQ0KICB0aGUgbW9uZGljIG9wZXJhdG9yIG9mIFFDaGVjazIs IGxhc3QgdGltZSBJIGNoZWNrZWQgaXQgd2FzIG5vdCB0aGUNCiAgY2FzZS4gVGhpcyBpcyB3aHkg dG8gY3JlYXRlIGEgZ2VuZXJhdG9yIGZvciBhIHBhaXIsIGl0IGlzIHJlY29tbWVuZGVkDQogIHRv IHVzZSBgdHVwMicgaW5zdGVhZCBvZiBtb25hZGljIG9wZXJhdG9ycy4NCg0KICBVc2luZyBtb25h ZGljLW9wZXJhdG9ycyBhbGxvd3MgeW91IGFsc28gdG8gaGF2ZSBhIHNtYWxsZXIga2VybmVsIHRo YXQNCiAgaXMgaG9wZWZ1bGx5IGVhc2llciB0byBtYWludGFpbi4NCg0KICBJIGFsc28gZGV2ZWxv cHBlZCB0aGUgaW50ZWdyYXRpb24gb2YgL2JhbS8gd2l0aCBUZXp0IGluIGEgd2F5IHRvIGF2b2lk DQogIGN1cnJlbnRseSBwaXRmYWxscyB3ZSBoYWQgd2l0aCBgUUNoZWNrMic6DQogIOKAoiBZb3Ug Y2FuIGVhc2lseSBjb250cm9sIHRoZSBzdG9wcGluZyBjb25kaXRpb24gb2YgdGhlIHRlc3QNCiAg 4oCiIFRoZSB0ZXN0IGNhbiBiZSBlYXNpbHkgcnVuIGluIHBhcmFsbGVsIG9yIGluIGEgbG9vcCBt b2RlIHRvIGhlbHAgeW91DQogICAgZmluZCBhIGNvdW50ZXItZXhhbXBsZSBxdWlja2VyDQogIOKA oiBUaGUgcnVubmVyIGNhbiBmYWlsIGlmIG5vdCBlbm91Z2ggdmFsdWVzIHdlcmUgZ2VuZXJhdGVk IG9yIGV4ZWN1dGlvbg0KICAgIHdhcyB0b28gbG9uZyAobGlrZWx5IGR1ZSB0byBhIHJlZ3Jlc3Np b24pDQogIOKAoiBJdCBjYXB0dXJlcyB0aGUgb3V0cHV0LCBzbyB0aGF0IG9ubHkgdGhlIG9uZSBm b3IgdGhlIGNvdW50ZXItZXhhbXBsZQ0KICAgIHByaW50ZWQgaXMgc2hvd24uIFRoaXMgaXMgdmVy eSBoYW5keSBkdXJpbmcgZGVidWdnaW5nLiBPdGhlcndpc2UsIGl0DQogICAgaXMgcXVpdGUgdGVk aW91cyB0byB1bmRlcnN0YW5kIHdoaWNoIGxpbmUgY29tZXMgZnJvbSB3aGljaCBhdHRlbXB0DQog IOKAoiBJdCBpcyBlYXN5IHRvIG9wdC1vdXQgZnJvbSBzaHJpbmtpbmcgaWYgaXQgdGFrZXMgdG9v IG11Y2ggdGltZS4gQ2FuDQogICAgYmUgdXNlZnVsIGZvciBhIENJLiBTaHJpbmtpbmcgb25seSBu ZWVkcyB0byBiZSBleGVjdXRlZCBsb2NhbGx5DQogICAgKGFzc3VtaW5nIHRoZSBwcm9wZXJ0eSBp cyBkZXRlcm1pbmlzdGljKSB3aXRoIGEgZ2l2ZW4gc2VlZA0KDQogIEkgYWxzbyBoYWQgc29tZSBm dW4gdHJ5aW5nIHRvIGRlZmluZSBzaHJpbmtpbmcgc3RyYXRlZ2llcyBhbGxvd2luZyB5b3UNCiAg dG8gc2tpcCBlbGVtZW50cyBpbiBhIGxpc3QuIFRoaXMgaXMgdmVyeSBoYW5keSB3aGVuIHlvdXIg cHJvcGVydHkgaXMNCiAgYWJvdXQgcnVubmluZyBhIHNjZW5hcmlvIG1hZGUgb2YgYSBsaXN0IG9m IGFjdGlvbnMgKGEgdXNlLWNhc2UgdmVyeQ0KICBjbG9zZSB0byB0aGUgbW9ub2xpdGggbGlicmFy eSBmcm9tIEZyYW7Dp29pcyBQb3R0aWVyKS4gIEluIGdlbmVyYWwgdGhlDQogIGluaXRpYWwgY291 bnRlci1leGFtcGxlIGNvbnRhaW5zIHN1cGVyZmx1b3VzIGFjdGlvbnMuIFN1Y2ggYSBzdHJhdGVn eQ0KICBhbGxvd3MgeW91IHRvIHJlbW92ZSB0aGVtIHRvIGVhc3kgdGhlIGRlYnVnZ2luZy4NCg0K ICBJIGRvbid0IGhhdmUgY29uY3JldGUgZGF0YSB0byBjb21wYXJlIEJhbSB3aXRoIFFDaGVjazIg YXQgdGhlDQogIG1vbWVudC4gTGV0IG1lIGtub3cgaWYgeW91IGhhdmUgaWRlYXMgdG8gbWFrZSBh biBvYmplY3RpdmUgY29tcGFyaXNvbg0KICBiZXR3ZWVuIHRob3NlIHR3byBsaWJyYXJpZXMuDQoN Cg0KU3RpdGNoIC0gTm90ZSBNYW5hZ2luZyBmb3IgVW5vcmdhbml6ZWQgTWluaW1hbGlzdHMNCuKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvc3RpdGNoLW5vdGUtbWFuYWdpbmctZm9yLXVub3JnYW5p emVkLW1pbmltYWxpc3RzLzE0NjY0LzE+DQoNCg0KTWFyYyBDb3F1YW5kIGFubm91bmNlZA0K4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSADQoNCiAgSGV5IGV2ZXJ5b25lIQ0KDQogIEkgd2FudGVkIHRvIHNoYXJlIGEgY2xpIHRv b2wgYnVpbHQgaW4gT0NhbWwgSSd2ZSBiZWVuIHdvcmtpbmcgb24sIHRoYXQNCiAgd2FzIG9ubHkg cG9zc2libGUgd2l0aCB0aGUgaGVscCBvZiB0aGUgY29tbXVuaXR5LiA6c2xpZ2h0X3NtaWxlOg0K DQogIFRoZSB0b29sIGlzIGNhbGxlZCBzdGl0Y2gsIGFuZCBpcyBhIG1pbmltYWwgbm90ZS1tYW5h Z2luZyB0b29sIHRoYXQNCiAgYWltcyB0byBiZSBhIGdvb2QgdW5peCBjaXRpemVuLiBJdCBhbGxv d3MgeW91IHRvIHRha2Ugbm90ZXMgaW4NCiAgd2hhdGV2ZXIgZm9ybWF0L2VkaXRvciB5b3Ugd2Fu dCB3aGlsZSBzcGVuZGluZyBtaW5pbWFsIHRpbWUgb3JnYW5pemluZw0KICB0aGVtLg0KDQogIEkg YnVpbHQgaXQgdXNpbmcgQ21kbGluZXIsIE5vdHR5IGFuZCBTaGV4cC4gSSdtIGRyYWZ0aW5nIGEg bG9uZ2VyDQogIHdyaXRldXAgdG8gc2hhcmUgdGhlIGNoYWxsZW5nZXMgYW5kIGdlbmVyYWwgZXhw ZXJpZW5jZSwgYnV0IGluIHNob3J0DQogIGFsbCB0aHJlZSBsaWJyYXJpZXMgd2VyZSBhIGJpdCBz aG9ydCBvbiBleGFtcGxlcyBidXQgdWx0aW1hdGVseQ0KICBleGNlbGxlbnQgYW5kIHZlcnkgZWFz eSB0byB3b3JrIHdpdGguIEFmdGVyd2FyZCwgcGFja2FnaW5nIGV2ZXJ5dGhpbmcNCiAgdHVybmVk IG91dCB0byBiZSBhIGJpdCBoYXJkZXIuDQoNCiAgU29tZSBzY3JlZW5zaG90czogW292ZXJ2aWV3 XSwgW3RvZG9dLCBbZnVsbC1ub3Rlc10uDQoNCiAgQW5kIGxpbmsgdG8gcmVwbzoNCg0KICA8aHR0 cHM6Ly9naXQubWNjZC5zcGFjZS9wdWIvc3RpdGNoL2Fib3V0Lz4NCg0KICBJdCdzIHN0aWxsIGlu IGl0J3MgZWFybHkgZGF5cyBhbmQgdGhlIGNvZGUtYmFzZSBpcyBhIGJpdCBtZXNzeS4gQnV0IEkN CiAgdXNlIGl0IGFzIG15IGRhaWx5IGRyaXZlciBmb3Igbm90ZXMuIDpzbGlnaHRfc21pbGU6DQoN Cg0KW292ZXJ2aWV3XSA8aHR0cHM6Ly9ibG9icy5tY2NkLnNwYWNlL3N0aXRjaC9ub3Rlcy12aWV3 LnBuZz4NCg0KW3RvZG9dIDxodHRwczovL2Jsb2JzLm1jY2Quc3BhY2Uvc3RpdGNoL3RvZG8tdmll dy5wbmc+DQoNCltmdWxsLW5vdGVzXSA8aHR0cHM6Ly9ibG9icy5tY2NkLnNwYWNlL3N0aXRjaC9m dWxsLW5vdGVzLXZpZXcucG5nPg0KDQoNCjcgT0NhbWwgR290Y2hhcw0K4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlz Y3Vzcy5vY2FtbC5vcmcvdC9ibG9nLTctb2NhbWwtZ290Y2hhcy8xNDY2Ny8xPg0KDQoNCkRtaXRy aWkgS292YW5pa292IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGkg ZXZlcnlvbmUhIDp3YXZlOg0KDQogIEkndmUgYmVlbiB1c2luZyBPQ2FtbCBmb3IgYSB3aGlsZSwg YW5kIEknbSBxdWl0ZSBlbmpveWluZyB0aGUNCiAgbGFuZ3VhZ2UuIEluIG15IG5vdC1zby1sb25n IGpvdXJuZXksIEkgZGlzY292ZXJlZCBhIGZldyBzdXJwcmlzaW5nDQogIE9DYW1sIGJlaGF2aW91 cnMsIHNvIEkgZGVjaWRlZCB0byBzaGFyZSB0aGVtIHdpdGggZXZlcnlvbmUgaW4gYSBibG9nDQog IHBvc3QuDQoNCiAg4oCiIFs3IE9DYW1sIEdvdGNoYXNdDQoNCiAgSSBob3BlIGl0IHJlZHVjZXMg ZnJ1c3RyYXRpb24gZm9yIG5ld2NvbWVycyB3aGVuIHRoZXkgc2VlIHNvbWV0aGluZw0KICB1bmV4 cGVjdGVkIGZvciB0aGUgZmlyc3QgdGltZSENCg0KDQpbNyBPQ2FtbCBHb3RjaGFzXSA8aHR0cHM6 Ly9kZXYudG8vY2hzaGVyc2gvNy1vY2FtbC1nb3RjaGFzLTIwN2U+DQoNCg0KVXNpbmcgT0NhbWwg b24gd2luZG93cyB3aXRoIFdTTA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ DQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9ibG9nLXVzaW5n LW9jYW1sLW9uLXdpbmRvd3Mtd2l0aC13c2wvMTQ2NzEvMT4NCg0KDQpQaXppZUR1c3QgYW5ub3Vu Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIANCg0KICBXaGVuIEkgZ290IHN0YXJ0ZWQgaW4gT0NhbWwsIG15IHNldHVwIHdhcyBiYXNp Y2FsbHkgYSBkdWFsIGJvb3Qgb2YNCiAgV2luZG93cyAxMSBhbmQgVWJ1bnR1LiBJIGhhZCBhIGZl dyBpc3N1ZXMgc2V0dGluZyB1cCBPQ2FtbCBvbiB3aW5kb3dzDQogIGF0IHRoZSB0aW1lIGFuZCBz dGFydGVkIGxvb2tpbmcgdXAgV1NMIGFuZCBpZiBpdCB3YXMgYSBnb29kDQogIGFsdGVybmF0aXZl IChJIHJlYWxseSBkaXNsaWtlZCBoYXZpbmcgdG8gZHVhbCBib290IGFsd2F5cykuIFNvIEkgd3Jv dGUNCiAgdGhpcyBhcnRpY2xlIGRldGFpbGluZyBleGFjdGx5IGhvdyBJIHNldHVwIE9DYW1sIG9u IFdTTCBhbmQgaGF2ZSBiZWVuDQogIHVzaW5nIGl0IGZvciB0aGUgcGFzdCAxMiBtb250aHMgd2l0 aCBubyBpc3N1ZXMuIFNvIGlmIHlvdSBhcmUgbG9va2luZw0KICB0byBnZXQgc3RhcnRlZCB3aXRo IHByb2dyYW1taW5nIGluIE9DYW1sIG9uIHdpbmRvd3MsIHRoaXMgYXJ0aWNsZSBpcw0KICBmb3Ig eW91Lg0KDQogIFtIb3cgdG8gc2V0dXAgT0NhbWwgb24gV2luZG93cyB3aXRoIFdTTF0NCg0KICBO b3RlOiBgb3BhbSAyLjInIG1ha2VzIGl0IGEgYnJlZXplIHVzaW5nIE9DYW1sIG9uIHdpbmRvd3Mg bmF0aXZlbHkgc28NCiAgaWYgeW91IGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBhYm91dCB1 c2luZyBPQ2FtbCB3aXRob3V0IFdTTCB5b3UNCiAgc2hvdWxkIGNoZWNrIGl0IG91dC4NCg0KDQpb SG93IHRvIHNldHVwIE9DYW1sIG9uIFdpbmRvd3Mgd2l0aCBXU0xdDQo8aHR0cHM6Ly90YXJpZGVz LmNvbS9ibG9nLzIwMjQtMDUtMDgtaG93LXRvLXNldHVwLW9jYW1sLW9uLXdpbmRvd3Mtd2l0aC13 c2wvPg0KDQoNCk90aGVyIE9DYW1sIE5ld3MNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQpGcm9tIHRoZSBvY2FtbC5vcmcgYmxvZw0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSADQoNCiAgSGVyZSBhcmUgbGlua3MgZnJvbSBtYW55IE9DYW1sIGJsb2dzIGFnZ3JlZ2F0ZWQg YXQgW3RoZSBvY2FtbC5vcmcNCiAgYmxvZ10uDQoNCiAg4oCiIFtUaGUgTWlyYWdlT1MgcmV0cmVh dCAyMDI0XQ0KICDigKIgW1RoZSBPQ2FtbCA1LjIgUmVsZWFzZTogRmVhdHVyZXMgYW5kIEZpeGVz IV0NCiAg4oCiIFtCZXRhIHJlbGVhc2Ugb2YgRnJhbWEtQyAyOS4wfmJldGEgKENvcHBlcildDQog IOKAoiBbQnllIE9wYW0sIEhlbGxvIE5peF0NCiAg4oCiIFtIb3cgdG8gU2V0dXAgT0NhbWwgb24g V2luZG93cyB3aXRoIFdTTF0NCiAg4oCiIFtBbm5vdW5jaW5nIERCQ2FtbCwgU2lsbywgU2VyZGUg UG9zdGdyZXMgYW5kIGEgbmV3IGRyaXZlciBmb3INCiAgICBwb3N0Z3Jlc10NCiAg4oCiIFtGaXhp bmcgYW5kIE9wdGltaXppbmcgdGhlIEdudUNPQk9MIFByZXByb2Nlc3Nvcl0NCg0KDQpbdGhlIG9j YW1sLm9yZyBibG9nXSA8aHR0cHM6Ly9vY2FtbC5vcmcvYmxvZy8+DQoNCltUaGUgTWlyYWdlT1Mg cmV0cmVhdCAyMDI0XQ0KPGh0dHBzOi8vaGFubmVzLnJvYnVyLmNvb3AvUG9zdHMvUmV0cmVhdDIw MjQ+DQoNCltUaGUgT0NhbWwgNS4yIFJlbGVhc2U6IEZlYXR1cmVzIGFuZCBGaXhlcyFdDQo8aHR0 cHM6Ly90YXJpZGVzLmNvbS9ibG9nLzIwMjQtMDUtMTUtdGhlLW9jYW1sLTUtMi1yZWxlYXNlLWZl YXR1cmVzLWFuZC1maXhlcz4NCg0KW0JldGEgcmVsZWFzZSBvZiBGcmFtYS1DIDI5LjB+YmV0YSAo Q29wcGVyKV0NCjxodHRwczovL2ZyYW1hLWMuY29tL2ZjLXZlcnNpb25zL2NvcHBlci5odG1sPg0K DQpbQnllIE9wYW0sIEhlbGxvIE5peF0NCjxodHRwczovL3ByaXZlci5kZXYvYmxvZy9vY2FtbC9i eWUtb3BhbS1oZWxsby1uaXgvPg0KDQpbSG93IHRvIFNldHVwIE9DYW1sIG9uIFdpbmRvd3Mgd2l0 aCBXU0xdDQo8aHR0cHM6Ly90YXJpZGVzLmNvbS9ibG9nLzIwMjQtMDUtMDgtaG93LXRvLXNldHVw LW9jYW1sLW9uLXdpbmRvd3Mtd2l0aC13c2w+DQoNCltBbm5vdW5jaW5nIERCQ2FtbCwgU2lsbywg U2VyZGUgUG9zdGdyZXMgYW5kIGEgbmV3IGRyaXZlciBmb3IgcG9zdGdyZXNdDQo8aHR0cHM6Ly9w cml2ZXIuZGV2L2Jsb2cvZGJjYW1sL2RiY2FtbC1wcm9qZWN0Lz4NCg0KW0ZpeGluZyBhbmQgT3B0 aW1pemluZyB0aGUgR251Q09CT0wgUHJlcHJvY2Vzc29yXQ0KPGh0dHBzOi8vb2NhbWxwcm8uY29t L2Jsb2cvMjAyNF8wNF8zMF9maXhpbmdfYW5kX29wdGltaXppbmdfZ251Y29ib2w+DQoNCg0KT2xk IENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEg Q1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5 b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBv ZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBl dmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIHRvIHRoZSBbY2FtbC1saXN0 XS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoNCltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzph bGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8v YWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4NCg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10g PGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duL2N3bi5yc3M+DQoNCltjYW1sLWxpc3Rd IDxodHRwczovL3N5bXBhLmlucmlhLmZyL3N5bXBhL2luZm8vY2FtbC1saXN0Pg0KDQpbQWxhbiBT Y2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC8+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 May 14 to 21, 2024.

We Want Your Feedback on the odoc Developer Experience

Sabine Schmaltz announced

Hey all, =F0=9F=A7=A1=F0=9F=90=AB

the documentation team at Tarides is lo= oking for input and feedback on odoc.

I would be super happy if everyone who uses odoc or would use odoc if it wo= rked for them can drop an answer in this feedback form:

https://docs.google.com/= forms/d/e/1FAIpQLSfpZHlnbQjWolAhKJvn41aT5QJc7Gb7uZJSdtTT7MZeAdyMow/viewform= ?usp=3Dsf_link

Windows compiler support in opam 2.2.0~beta2

David Allsopp announced

On behalf of the entire opam team, but also with a personal sense of relief= , I'm very pleased to announce that the process of upstreaming support for = Windows OCaml to opam-repository in ocaml/opam-repository#25861 finally started on= Friday!

There's a full = blog post with details on how you can try this out now with opam 2.2.0~= beta2. The TL;DR, assuming you have winget on your Windows system (open the= Microsoft Store app and install the App Installer package from Microsoft if you don't)= then you can issue:

winget install Git.Git

if you don't have Git for Windows and:

winget install opam

if you don't yet have the 2.2.0~beta2 binary. You must then launch a fre= sh Command Prompt / PowerShell session. For there, you can then run:

opam init git+https://github.com/dra27/opam-repository.git#windows-initial

or

opam init -a --no-git-location --cygwin-internal-install git+https://github=
.com/dra27/opam-repository.git#windows-initial

if you'd like to be asked fewer questions. There is a known and big paus= e when updating the repository. However, after a little bit of time (co= ffee, or a sword battle, if that's yo= ur thing), you should then be faced with a fully initialised opam with ocam= l-base-compiler.5.2.0 installed for the mingw-w64 amd64 port of native Wind= ows opam.

Things with depexts will likely not work: the blog post contains details on= how to get started with PRs, but issues are also helpful.

The blog post covers what we regard as the "default use case" - that is a n= ative Windows user expecting to use this new OCaml thing they heard about n= atively. i.e. not running in WSL or Cygwin or MSYS2 or any other "are you s= ure can't just install Linux on that?" approach.

However, all the other use cases matter too! You're meant to be able to run= native Windows opam from your own Cygwin or MSYS2 mintty bash terminal; we= are aiming for the opam 2.2.0 binary to be a drop-in replacement (apart fr= om setting os-distribution to "cygwinports") for = "OCaml for Windows" for legacy use with the "sunset" repository; you're meant to b= e able to provide your own Cygwin or MSYS2 installation if you really need = to (and you really might!). But we do need help testing all of it =F0=9F=99= =82

We anticipate one further beta of opam 2.2.0 by the end of the month. From = the Windows perspective, this will fix a known bug in the environment varia= ble handling (see oca= ml/opam#5838) but will also hopefully straighten out the behaviour of <= code>opam init for some of these "non-default" use cases. We're then= hoping to rocket towards a release candidate in June =F0=9F=9A=80

Happy Windows hacking! Please open issues; please ask for further help; ple= ase have fun!

David, on behalf of the opam team.

OCaml Workshop 2024 at ICFP – announcement and call for= proposals

Continuing this thread, Sonja Heinze said

One more update, this time about hybrid modalities: We now have the confirm= ation from sigplan (the organizers behind ICFP) that we'll have the same hy= brid modalities as last year :tada: So in particular, speakers can give tal= ks remotely via a Zoom call. We'll also make sure this time that the remote= speaker can see the audience over the call. To promote a good atmosphere, = communication and engagement, we do prefer to have most talks in-person, bu= t remote talks will be most welcome as well. So, don't hesitate to submit a= talk even if you can't make it in person.

Cheers, @Arma=C3=ABl and @pitag

PD: Once the time comes closer, we'll give detail on youtube live and disco= rd links for remote attendance as well

Guillaume Munch-Maccagnoni then added

Thanks, this update about hybridity should also be true for the ML workshop.

Odoc syntax cheatsheet

Paul-Elliot announced

Hello!

I'm happy to announce the addition of a cheatsheet for odoc's syntax!

I hope it will make it less painful to learn or refresh yourself on the top= ic. The full= syntax reference is still useful to have some details.

Have {b fun} :slight_smile: !

DkCoder 0.2 - Scripting in OCaml

jbeckford announced

The 0.3 version is now available. It has a publicly accessible https://github.com/diskuv/dkcoder so = issues can be filed, and cohttp 6.0.0~beta2 is now bundled.

Most important, 0.3 was sufficient to build the real production service https:= //gitlab.com/diskuv/samples/devops/DkSubscribeWebhook. It has a Dockerf= ile and Docker Compose for easy deployment to production, and the Docker co= ntainer is based on Google's https://github.com/GoogleContainerTools/distroless#= readme for a "small" size (well, 100MB is not small but it is not big e= ither). The only executable in the container is ocamlrunx (no = /bin/sh, etc.). In an ideal world where I had more time the se= rvice would be embedded inside MirageOS instead.

Imandra SysML Transpiler Internship Opportunity!

Ben Bellick announced

I wanted to share an opportunity for a summer internship with Imandra!

If you're someone with an interest in writing production OCaml or using a b= attle-worn automated theorem prover in an industry setting, please apply!

It is based in Austin, TX.=20

You can find more details and apply here.=20

Thanks!

Bam - A property-based testing with internal shrinking

Fran=C3=A7ois Thir=C3=A9 announced

I am excited to introduce Bam, a robust and versatile property-based= testing (PBT) library. Bam simplifies the process of testing properties ac= ross a wide range of randomly generated values, making it easier to identif= y and debug issues in your code.

Key Features

  • Monad-like Generators: Create new generators easily with a monad= -like pattern that works seamlessly with shrinking mechanisms.
  • PPX Support: Automatically derive generators based on type descr= iptions. The customizable deriver ensures smooth integration into your code= base.
  • Tezt Integration: Integrates with the Tezt test framework, provi= ding a user-friendly experience, especially notable in debugging scenarios.=
  • Internal Shrinking: Various default shrinking strategies help ef= ficiently pinpoint minimal counterexamples. Internal shrinking ensures that= only 'smaller' values are used during the process, and this is done in a w= ay that is compatible with the monad-like operators.
  • Custom Shrinking: Define custom shrinkers that work well with th= e existing shrinking strategies.

Installation

You can install Bam using opam:

opam install bam tezt-bam

Getting started

Here is an example to get you started:

open Tezt_bam

type t =3D Foo of {a: int; b: string} | Bar of int list [@@deriving gen]=

(** The deriver creates=
 a value [val =
gen : t Bam.Std.t]. *)

let register () =3D
  let property =3D function
    | Foo=
 {a; b} ->
        if a >=
 1_000 && String.contains b 'z'<=
/span> then
          Error<=
/span> (`Fail "A counter-example was found")
        else Ok ()
    | Bar=
 [1; 2; 3; 4] ->
        Error `Bad_value<=
/span>
    | Bar=
 _ ->
        Ok ()
  in=20=20
  Pbt.register ~__FILE__ ~title:<=
span style=3D"color: #ca3400;">"Simple example of bam" ~tags:["bam"; "simple"]
    ~gen ~property ()

let _ =3D=20
    register ();
    Test.run ()

There are several more detailed examples in the repository to show you around= the library.

Contributions

Contributions from the community are welcome! If you have ideas, bug report= s, or improvements, feel free to share them!

Kakadu asked and Fran=C3=A7ois Thir=C3=A9 replied

Can it be compared to https:/= /github.com/c-cube/qcheck/ ?

My work around Bam started after using "QCheck" and especially "QChe= ck2" quite a lot for the Tezos project.

With respect to QCheck, QCheck2 came with "integrated" shrinking allowing t= o derive automatically shrinkers for generators. This aim to simplify debugging when a counter-example is found, so that a smaller ex= ample is reported to the user.

However, this came with a cost:

  • Performance-wise, there was a regression from "QCheck", especially the = time taken to report a counter-example because the shrinking process was ta= king a lot of time
  • At some point, we even faced an issue were the shrinking process never = ended. We started to implement an ad-hoc shrinker but it was not working ei= ther and we never really figured out. The solution was to deactivate shrink= ing
  • There are other UX considerations: debugging can be tedious (especially= "hello" debugging)

So basically Bam started as an experiment to understand shrinking an= d come up with something easier to understand and compose better. This is why bam relies mainly on monadic operators.

This makes the writing of generators easier, the shrinking is internal ensuring the shrinking won't create new value. If you use the mondic operator of QCheck2, last time I checked it was not the case. Th= is is why to create a generator for a pair, it is recommended to use tup2 instead of monadic operators.

Using monadic-operators allows you also to have a smaller kernel that is ho= pefully easier to maintain.

I also developped the integration of bam with Tezt in a way to avoid= currently pitfalls we had with QCheck2:

  • You can easily control the stopping condition of the test
  • The test can be easily run in parallel or in a loop mode to help you fi= nd a counter-example quicker
  • The runner can fail if not enough values were generated or execution wa= s too long (likely due to a regression)
  • It captures the output, so that only the one for the counter-example pr= inted is shown. This is very handy during debugging. Otherwise, it is quite= tedious to understand which line comes from which attempt
  • It is easy to opt-out from shrinking if it takes too much time. Can be = useful for a CI. Shrinking only needs to be executed locally (assuming the = property is deterministic) with a given seed

I also had some fun trying to define shrinking strategies allowing you to s= kip elements in a list. This is very handy when your property is about running a scenario made of a list of actions (a use-case = very close to the monolith library from Fran=C3=A7ois Pottier). In general the initial counter-example contains superfluous actions. Such a= strategy allows you to remove them to easy the debugging.

I don't have concrete data to compare Bam with QCheck2 at the moment. Let m= e know if you have ideas to make an objective comparison between those two libraries.

Stitch - Note Managing for Unorganized Minimalists

Marc Coquand announced

Hey everyone!

I wanted to share a cli tool built in OCaml I've been working on, that was = only possible with the help of the community. :slight_smile:=20

The tool is called stitch, and is a minimal note-managing tool that aims to= be a good unix citizen. It allows you to take notes in whatever format/edi= tor you want while spending minimal time organizing them.

I built it using Cmdliner, Notty and Shexp. I'm drafting a longer writeup t= o share the challenges and general experience, but in short all three libra= ries were a bit short on examples but ultimately excellent and very easy to= work with. Afterward, packaging everything turned out to be a bit harder.

Some screenshots: overview, t= odo, fu= ll-notes.

And link to repo:

https://git.mccd.space= /pub/stitch/about/

It's still in it's early days and the code-base is a bit messy. But I use i= t as my daily driver for notes. :slight_smile:

7 OCaml Gotchas

Dmitrii Kovanikov announced

Hi everyone! :wave:=20

I've been using OCaml for a while, and I'm quite enjoying the language. In = my not-so-long journey, I discovered a few surprising OCaml behaviours, so = I decided to share them with everyone in a blog post.

I hope it reduces frustration for newcomers when they see something unexpec= ted for the first time!

Using OCaml on windows with WSL

PizieDust announced

When I got started in OCaml, my setup was basically a dual boot of Windows = 11 and Ubuntu. I had a few issues setting up OCaml on windows at the time a= nd started looking up WSL and if it was a good alternative (I really dislik= ed having to dual boot always). So I wrote this article detailing exactly h= ow I setup OCaml on WSL and have been using it for the past 12 months with = no issues. So if you are looking to get started with programming in OCaml o= n windows, this article is for you.

How to setup OCaml on Windows with WSL

Note: opam 2.2 makes it a breeze using OCaml on windows natively so = if you are particularly interested about using OCaml without WSL you should= check it out.

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.

--=-=-=--