From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 8322CE0382 for ; Tue, 16 Aug 2022 10:51:34 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of alan.schmitt@polytechnique.org designates 129.104.30.34 as permitted sender) identity=pra; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="alan.schmitt@polytechnique.org"; x-conformance=sidf_compatible; x-record-type="spf2.0"; x-record-text="spf2.0/pra,mfrom +a:mx1.polytechnique.org +a:mx2.polytechnique.org +a:mx3.polytechnique.org +ip6:2001:41d0:1:94de::736d:7470 -all" Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org designates 129.104.30.34 as permitted sender) identity=mailfrom; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-conformance=sidf_compatible; x-record-type="spf2.0"; x-record-text="spf2.0/pra,mfrom +a:mx1.polytechnique.org +a:mx2.polytechnique.org +a:mx3.polytechnique.org +ip6:2001:41d0:1:94de::736d:7470 -all" Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of postmaster@mx1.polytechnique.org designates 129.104.30.34 as permitted sender) identity=helo; client-ip=129.104.30.34; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="SRS0=sXz0=YU=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="postmaster@mx1.polytechnique.org"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 a -all" IronPort-SDR: jMWQB3ti94zfMl9bTQUz0R+6G9UNgx1KZ84BE5nLKKQKjiEkXbrE9RSHo0MR9qMdq2k+z4SwLc uOD5vQSFSD7O3p3G4VzsahLvK0nH6e9J7TV/4GWzXGTxgMG886Et09G8jgrilIuI082/0hiyCT B/4HsQ485yIVxEyaLKjBuxzmYu2pGf401mpAGp9xjdCookgDuccw9HiZ0D+sq+0T7ZAcZl06KM oVSCAlgflC2PdP5oRacQYYSJvhDSzMSQwpwwmrOamZs6DR2CoSlc1aMWOEnh5YAfsAj4kT8sni r+3FnjTt0c+rP03EjDNvRLuM X-IPAS-Result: =?us-ascii?q?A0BrDwAMWvtieyIeaIFSCBMBAYJDgSGBAxkBZ1cuBwhFh?= =?us-ascii?q?E6IfoVDAYJKgRaIQ48mhACBdxABAwENLAEOBAECBAEBghOCdAIWOQEEhCUCH?= =?us-ascii?q?gYBBTEHDgECBAEBAQEDAgMBAQEBAQEDAQEFAQEBAgEBAgQEARMBAQ8LCQcGC?= =?us-ascii?q?wYQDgU8ZGQEgUsEgXQLBwEFJw2CIhMMDAMDg3cBGAkKEwEBOBgjAxQBBgMCB?= =?us-ascii?q?A0BFwEeAwETARIaAYJjgyIDBAELi0+aSxo1eoExgQGCCAEBBoFAARgBDgmEH?= =?us-ascii?q?IFcCSSBGYZQZU4BgyGEICkQgVVEgRWCcwdugkMIDAsBAQEBAYE2BQEBCEUJg?= =?us-ascii?q?yCCZYZykisHNwNFHkIDC1IICRcSEBACBBEaCwYDFj4JAgQOA0AIDQMRBAMPG?= =?us-ascii?q?AkSCBAEBgMxDCULAwUPDAEGAwYFAwEDGwMUAwUkBwMZDyMNDQQfHQMDBSUDA?= =?us-ascii?q?gIbBwICAwIGFQYCAhg2OQgECAQrIw8FAgcvBQQvAh4EBQYRCAIWAgYEBAQEF?= =?us-ascii?q?QIQCAIIJxcHEzMZAQVZEAkhFgYoEAUGEwMgRyYFRQ8oMzU8Kx8bCoESKgkgF?= =?us-ascii?q?QMEBAMCBhMDAyICEC4xAxUGKRMSLQcrdQkCAyJuAwMEKCwDCSEfBwkiJj0FB?= =?us-ascii?q?V8SKAUDBBWWKYIJgREJJAIOC2UvFBoUFgEBIAI2NAQLGAE0AxIGERgGCw0tk?= =?us-ascii?q?X0qKQGYX5RcZDQHg1WBPgYMh3s8gSKNAogog3aBUIp5mCwhlmEgiS0JgQ8Jg?= =?us-ascii?q?kqUZCGCFoMGgU4aAYF6DAczGjBDgmcJCjsBAwINAQICAwECAQIJAQECh0lVh?= =?us-ascii?q?gsWg1CCZIF1O4VMPzQCAQE3AgYBCgEBAwmFYwEBBRMLAYR+AQE?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 r/sSg8= IronPort-HdrOrdr: A9a23:JGpCKKG8oBG5a46bpLqE1ceALOsnbusQ8zAXPiFKOH9om6mj/f xG88506faZslsssRIb+exoWpPgfZq0z/ccirX5Vo3MYOCJggeVBbAnxbSn6TztES/z+4dmpM VdWpk7Lsb/SXxzjcOS2njdLz/M+qjjzJyV X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.93,240,1654552800"; d="scan'208,217";a="21347454" X-MGA-submission: =?us-ascii?q?MDGgunyHdKmVvHY5GP6ekILtoQ6zWZb0JeahhG?= =?us-ascii?q?kUhJUxjgOXaGvtC7UtqXTVYDu6xIYFHaLfqcyuEiiv2otEvVHdazpzqQ?= =?us-ascii?q?dhQ10WVspz7IquL3LWJq/t+72Fw36lPDEArk7a0WGGkFVXHMBs9rdumw?= =?us-ascii?q?1lwo5n0I7teHEC+vFCOQzA7A=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; 16 Aug 2022 10:51:33 +0200 Received: from set (lfbn-cle-1-507-42.w90-114.abo.wanadoo.fr [90.114.250.42]) (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 A3BC35605C6; Tue, 16 Aug 2022 10:51:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1660639891; bh=jjAvtLcBsMPspYrLQwBeppCI8fUkQByN4wOSdmL+bIM=; h=From:To:Subject:Date:Message-ID; b=UhsNa2JNFjdTeBRGFgZLfYKvZR+ELMzeTQEkBwWscp9wOJBr5/7LfmtU8ofKfk0yx GKoKgDMvX4VYTKdhh6BXKcTcfX/lvUneFfAO2JiJim2Ljk2+ZD6OHdX7B50LYRhgWK Q/ykD5nHDoqoAjlTdUlh0N8n3SqLKEz7+tRV58+M= From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 16 Aug 2022 10:51:20 +0200 Message-ID: <87wnb8inav.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Aug 16 10:51:32 2022 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.394256, queueID=DB32B56122C X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgQXVndXN0IDA5IHRvIDE2LA0KMjAyMi4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpFbWFjcyBv biB3aW5kb3dzLCBtZXJsaW4gbW9kZSwgbWVybGluIHNlcnZlciByZW1vdGUgb24gbGludXgsIHRy YW1wLCBzc2gNCmNsYW5nbWwgNC4yLjA6IE9DYW1sIGJpbmRpbmdzIGZvciBDbGFuZyBBUEkgKGZv ciBDIGFuZCBDKysgcGFyc2luZykNCm9wYW0gMi4xLjMNCkFwcGxpY2F0aW9uLXNwZWNpZmljIElt cHJvdmVtZW50cyB0byB0aGUgRWNvc3lzdGVtDQpVc2UgR2l0SHViIENJIHRvIGJ1aWxkIHNpbXBs ZSBiaW5hcnkgZGlzdHJpYnV0aW9uPw0Kc2V0dXAtZGttbC55bWwgR2l0SHViIEFjdGlvbnMgd29y a2Zsb3cgZm9yIGRpc3RyaWJ1dGluZyBiaW5hcmllcw0KRGlza3V2IE9DYW1sIDEueC54OyBXaW5k b3dzIE9DYW1sIGluc3RhbGxlciBubyBsb25nZXIgaW4gcHJldmlldw0KT2xkIENXTg0KDQoNCkVt YWNzIG9uIHdpbmRvd3MsIG1lcmxpbiBtb2RlLCBtZXJsaW4gc2VydmVyIHJlbW90ZSBvbiBsaW51 eCwgdHJhbXAsIHNzaA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9lbWFjcy1v bi13aW5kb3dzLW1lcmxpbi1tb2RlLW1lcmxpbi1zZXJ2ZXItcmVtb3RlLW9uLWxpbnV4LXRyYW1w LXNzaC8xMDI0My8zPg0KDQoNCkFydGVtIFBpYW55a2ggc2FpZA0K4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBtYW5hZ2VkIHRvIHNl dCB1cCBFbWFjcyArIFRSQU1QICsgTFNQIHRvIGRvIHJlbW90ZSBkZXZlbG9wbWVudCAobm90DQog IG9uIHRoZSBmaXJzdCBhdHRlbXB0IHRob3VnaCwgYXMgdGhlc2UgdGhpbmdzIHdlcmUgcXVpdGUg ZmlkZGx5IHRvIHNldA0KICB1cCkuDQoNCiAgSGVyZSdzIHdoYXQgSSBnb3Q6DQogIDEuIFlvdSBu ZWVkIGBvcGFtIGluc3RhbGwgb2NhbWwtbHNwLXNlcnZlcicgb24gdGhlIHJlbW90ZSBtYWNoaW5l Lg0KICAyLiBUZWxsIFRSQU1QIHRvIHVzZSBwYXRoIGZyb20gdGhlIHJlbW90ZSBzaGVsbDogYChh ZGQtdG8tbGlzdA0KICAgICAndHJhbXAtcmVtb3RlLXBhdGggJ3RyYW1wLW93bi1yZW1vdGUtcGF0 aCknDQogIDMuIFVzZSBbRWdsb3RdIGFzIGFuIExTUCBjbGllbnQuIEFsdGhvdWdoLCBgbHNwLW1v ZGUnIGNsYWltcyB0aGF0IHRoZXkNCiAgICAgc3VwcG9ydCByZW1vdGUgc2VydmVycywgSSBjb3Vs ZG4ndCBxdWl0ZSBtYWtlIGl0IHdvcmsgd2l0aA0KICAgICBgbHNwLW1vZGUnLiBUaGlzIGlzIHdo YXQgSSBoYXZlIGluIG15IGBpbml0LmVsJzoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAocmVx dWlyZSAnZWdsb3QpDQogIOKUgiAoYWRkLWhvb2sgJ3R1YXJlZy1tb2RlLWhvb2sgIydlZ2xvdC1l bnN1cmUpDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNCltFZ2xvdF0gPGh0dHBzOi8vZ2l0aHViLmNv bS9qb2FvdGF2b3JhL2VnbG90Pg0KDQoNCmNsYW5nbWwgNC4yLjA6IE9DYW1sIGJpbmRpbmdzIGZv ciBDbGFuZyBBUEkgKGZvciBDIGFuZCBDKysgcGFyc2luZykNCuKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv YW5uLWNsYW5nbWwtNC0yLTAtb2NhbWwtYmluZGluZ3MtZm9yLWNsYW5nLWFwaS1mb3ItYy1hbmQt Yy1wYXJzaW5nLzYxMjMvMjc+DQoNCg0KVGhpZXJyeSBNYXJ0aW5leiBhbm5vdW5jZWQNCuKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgA0KDQogIGBjbGFuZ21sLjQuNy4wJyBpcyBub3cgaW4gb3BhbSwgd2l0 aCB0aGUgYnVnIGZpeGVzL2ZlYXR1cmVzIHJlcXVlc3RlZA0KICBieSBAbjQ3IGFuZCBzb21lIG90 aGVycy4gQWxsIExMVk0vQ2xhbmcgdmVyc2lvbnMgdXAgdG8gMTQuMC54IGFyZQ0KICBzdXBwb3J0 ZWQsIGFzIHdlbGwgYXMgT0NhbWwgNS4wLiBUaGUgb2ZmaWNpYWwgcmVwbyBpcyBub3cgb24gZ2l0 aHViOg0KICA8aHR0cHM6Ly9naXRodWIuY29tL3RoaWVycnktbWFydGluZXovY2xhbmdtbD4gd2hp Y2ggc2hvdWxkIGVhc2UNCiAgcG9zdGluZyBpc3N1ZXMgYW5kIHB1bGwgcmVxdWVzdHMgKGFuZCBz aG91bGQgYmUgbW9yZSBjb252ZW5pZW50IHRoYW4NCiAgZGlzY3Vzc2lvbnMgb24gdGhpcyB0aHJl YWQhKS4NCg0KICBTdXBwb3J0IGZvciB0aGUgdXBjb21pbmcgQ2xhbmcgMTUgaXMgcGxhbm5lZCBm b3IgdGhlIG5leHQgcmVsZWFzZSB0aGF0DQogIHNob3VsZCBoYXBwZW4gc29vbiAodGhlIGRldmVs b3BtZW50IHZlcnNpb24gYWxyZWFkeSBzdXBwb3J0cyBDbGFuZw0KICAxNSkuDQoNCg0Kb3BhbSAy LjEuMw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBz Oi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tb3BhbS0yLTEtMy8xMDI5OS8xPg0KDQoNClIuIEJv dWpiZWwgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICBXZSBhcmUgcGxlYXNlZCB0byBhbm5vdW5jZSBtaW5v ciByZWxlYXNlIG9mIG9wYW0gWzIuMS4zXS4NCg0KICBUaGlzIG9wYW0gcmVsZWFzZSBjb25zaXN0 cyBvZiBbYmFja3BvcnRlZF0gZml4ZXMuIFlvdeKAmWxsIGZpbmQgbW9yZQ0KICBpbmZvcm1hdGlv biBpbiB0aGUgW2Jsb2cgcG9zdF0uDQoNCiAgVG8gdXBncmFkZSBzaW1wbHkgcnVuOg0KDQogIOKU jOKUgOKUgOKUgOKUgA0KICDilIIgYmFzaCAtYyAic2ggPChjdXJsIC1mc1NMIGh0dHBzOi8vcmF3 LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vY2FtbC9vcGFtL21hc3Rlci9zaGVsbC9pbnN0YWxsLnNo KSAtLXZlcnNpb24gMi4xLjMiDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNClsyLjEuM10gPGh0dHBz Oi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtL3JlbGVhc2VzL3RhZy8yLjEuMz4NCg0KW2JhY2twb3J0 ZWRdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvb3BhbS9pc3N1ZXMvNTAwMD4NCg0KW2Jsb2cg cG9zdF0gPGh0dHBzOi8vb3BhbS5vY2FtbC5vcmcvYmxvZy9vcGFtLTItMS0zPg0KDQoNCkFwcGxp Y2F0aW9uLXNwZWNpZmljIEltcHJvdmVtZW50cyB0byB0aGUgRWNvc3lzdGVtDQrilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L2FwcGxpY2F0aW9uLXNwZWNpZmljLWltcHJvdmVtZW50cy10by10aGUt ZWNvc3lzdGVtLzEwMjIzLzU0Pg0KDQoNCkRlZXAgaW4gdGhpcyB0aHJlYWQsIEpwIFIgc2FpZA0K 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgUmVnYXJkaW5nIFBlcmwgdnMg T0NhbWw6IEFuIChpbXByZXNzaXZlKSBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgdGhlDQogIHNvbHV0 aW9ucyBvZiB0aGUgUGVybCBDb29rYm9vayBpbiB0aGUgT2JqZWN0aXZlIENBTUwgbGFuZ3VhZ2Ug KHVzZWQgYXQNCiAgdGhlIHRpbWUpIGlzIGF2YWlsYWJsZSBoZXJlOg0KICA8aHR0cDovL3BsZWFj LnNvdXJjZWZvcmdlLm5ldC9wbGVhY19vY2FtbC9pbmRleC5odG1sPg0KDQogIFJlLXdyaXRpbmcg dGhlc2UgZXhhbXBsZXMgd2l0aCAibW9kZXJuIiBjb2RlL2xpYnJhcmllcyBjb3VsZCBiZSB2ZXJ5 DQogIGludGVyZXN0aW5nLg0KDQoNClVzZSBHaXRIdWIgQ0kgdG8gYnVpbGQgc2ltcGxlIGJpbmFy eSBkaXN0cmlidXRpb24/DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0K ICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3VzZS1naXRodWItY2kt dG8tYnVpbGQtc2ltcGxlLWJpbmFyeS1kaXN0cmlidXRpb24vMTAzMDMvMT4NCg0KDQpDaHJpc3Rp YW4gTGluZGlnIGFza2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJcyB0aGVyZSBhIHJlY29tbWVuZGVkIHdh eSAob3IgZXhhbXBsZSkgdG8gYnVpbGQgYSBzaW1wbGUgYmluYXJ5DQogIGRpc3RyaWJ1dGlvbiBv ZiBhbiBPQ2FtbCBwcm9qZWN0IHVzaW5nIHRoZSBHaXRIdWIgQ0k/IEkgYW0gbW9zdGx5DQogIGlu dGVyZXN0ZWQgaW4gYnVpbGRpbmcgdGhlIGV4ZWN1dGFibGVzIGFuZCBwYWNrYWdpbmcgdGhlbSBp biBzb21lDQogIGFyY2hpdmUgZm9ybWF0IGFuZCBtYWtlIHRoYXQgYXZhaWxhYmxlIGZvciBkb3du bG9hZCBmb3IgZGlmZmVyZW50DQogIGFyY2hpdGVjdHVyZXMuDQoNCg0KR3VpbGxhdW1lIEJ1cnkg cmVwbGllZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBoYXZlIHN1Y2ggYSB3b3JrZmxvdyBmb3Igb25lIG9m IG15IHByb2plY3QsIHNlZSBbdGhpcyB3b3JrZmxvdw0KICBmaWxlXS4gSXQgYXV0b21hdGljYWxs eSB0cmlnZ2VycyBvbiBuZXcgcmVsZWFzZXMsIGJ1aWxkcyB0aGUgcHJvamVjdA0KICB3aXRoIHRo ZSBhcHByb3ByaWF0ZSBjb21waWxlciAoZS5nLiBgZmxhbWJkYScpLCBhbmQgdXBsb2FkcyB0aGUg YnVpbHQNCiAgYXJ0ZWZhY3QgdG8gdGhlIHJlbGVhc2UgcGFnZSB3aGVyZSBpdCBjYW4gYmUgZG93 bmxvYWRlZC4gSXQgY3VycmVudGx5DQogIHdvcmtzIGZvciBib3RoIGxpbnV4IGFuZCBtYWMgKGxh c3QgdGltZSBJIHRyaWVkIGl0IHdpdGggd2luZG93cyBJIGdvdA0KICBzb21lIGVycm9ycyBhbmQg SSBoYXZlbid0IHlldCBoYWQgdGhlIHRpbWUgdG8gbG9vayBpbnRvIHRoYXQsIHNvIGkNCiAgZG9u J3Qga25vdyBpZiB0aGUgZXJyb3JzIHdlcmUgY2F1c2VkIGJ5IHRoZSB3b3JrZmxvdywgb3IgbXkg cHJvamVjdCkuDQoNCg0KW3RoaXMgd29ya2Zsb3cgZmlsZV0NCjxodHRwczovL2dpdGh1Yi5jb20v R2J1cnkvZG9sbWVuL2Jsb2IvbWFzdGVyLy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sPg0K DQoNCmpiZWNrZm9yZCBhbHNvIHJlcGxpZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoYXQgd2FzIGEgd2Vp cmQgY29pbmNpZGVuY2UgdGhhdCBJIHJlbGVhc2VkIGEgR2l0SHViIHdvcmtmbG93DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXNldHVwLWRrbWwteW1sLWdpdGh1Yi1hY3Rpb25z LXdvcmtmbG93LWZvci1kaXN0cmlidXRpbmctYmluYXJpZXMvMTAzMDg+DQogIGZvciB0aGlzIHRv ZGF5LiBAem96b3pvJ3Mgc29sdXRpb24gaXMgc2ltcGxlciBpZiBpdCB3b3JrcyBmb3IgeW91cg0K ICBpbnRlbmRlZCB0YXJnZXQgYXVkaWVuY2UuDQoNCg0KQ2FsYXNjaWJldHRhIFJvbWFpbiByZXBs aWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIGRpZCB0aGUgc2FtZSBmb3IgbXkg bGl0dGxlIHByb2plY3QgW2JvYl0gYnV0IGl0IHByb3ZpZGVzIGENCiAgW0Nvc21vcG9saXRhbl0g YmluYXJ5IHdoaWNoIHNob3VsZCBydW4gYW55d2hlcmUsIHNlZSB0aGUgW3dvcmtmbG93XQ0KICBh bmQgdGhlIFtsYXN0IHVwbG9hZGVkIGFydGlmYWN0XSA6c2xpZ2h0X3NtaWxlOi4NCg0KDQpbYm9i XSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpbm9zYXVyZS9ib2I+DQoNCltDb3Ntb3BvbGl0YW5dIDxo dHRwczovL2dpdGh1Yi5jb20vamFydC9jb3Ntb3BvbGl0YW4+DQoNClt3b3JrZmxvd10NCjxodHRw czovL2dpdGh1Yi5jb20vZGlub3NhdXJlL2JvYi9ibG9iL21haW4vLmdpdGh1Yi93b3JrZmxvd3Mv ZXNwZXJhbnRvLnltbD4NCg0KW2xhc3QgdXBsb2FkZWQgYXJ0aWZhY3RdDQo8aHR0cHM6Ly9naXRo dWIuY29tL2Rpbm9zYXVyZS9ib2IvYWN0aW9ucy9ydW5zLzI3NDk5NzgxNDI+DQoNCg0Kc2V0dXAt ZGttbC55bWwgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3cgZm9yIGRpc3RyaWJ1dGluZyBiaW5hcmll cw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9hbm4tc2V0dXAtZGttbC15bWwtZ2l0aHViLWFjdGlvbnMtd29ya2Zsb3ct Zm9yLWRpc3RyaWJ1dGluZy1iaW5hcmllcy8xMDMwOC8xPg0KDQoNCmpiZWNrZm9yZCBhbm5vdW5j ZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIEkgYW0gcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgYHYwYCByZWxlYXNlIG9mIGBz ZXR1cC1ka21sLnltbGAsIGENCiAgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3cgZm9yIGRpc3RyaWJ1 dGluZyBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMgdG8NCiAgdGhlIHB1YmxpYzoNCiAg4oCiIDxo dHRwczovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtd29ya2Zsb3dzI3JlYWRtZT4NCg0KICBJdCBp cyBzaW1pbGFyIHRvIHRoZSBbR2l0SHViIEFjdGlvbiBzZXR1cC1vY2FtbF0gYnV0IGhhcyBzZXZl cmFsDQogIGFkdmFudGFnZXMgd2hlbiB5b3UgYXJlIHJlbGVhc2luZyBhIGZpbmlzaGVkIHByb2R1 Y3QgdG8gdGhlIHB1YmxpYzoNCiAg4oCiIE9uIExpbnV4IGl0IHVzZXMgYW4gYW5jaWVudCBHTElC QyAoQyBsaWJyYXJ5KSBzbyB5b3VyIGJpbmFyaWVzIHJ1bg0KICAgIG9uIG1vc3QgTGludXggZGlz dHJpYnV0aW9ucyB3aXRob3V0IHN0YXRpYyBsaW5raW5nLiBTdGF0aWNhbGx5DQogICAgbGlua2Vk IGJpbmFyaWVzIGFyZSBzaW1wbGUgdG8gZGlzdHJpYnV0ZSwgYnV0IGNhbiBiZSBwcm9ibGVtYXRp YyBmb3INCiAgICBzb21lIGNvcHktbGVmdCBsaWNlbnNlcywgYW5kIG1ha2VzIGl0IGRpZmZpY3Vs dCBmb3IgeW91ciBlbmQtdXNlcnMNCiAgICB0byBkbyBzZWN1cml0eSBwYXRjaGluZyBvZiB0aGUg bGlicmFyaWVzIHlvdSBsaW5rZWQgd2l0aC4NCiAg4oCiIE9uIFdpbmRvd3MgaXQgdXNlcyB0aGUg VmlzdWFsIFN0dWRpbyBjb21waWxlciByYXRoZXIgdGhhbiB0aGUNCiAgICBub24tc3RhbmRhcmQg KGZvciBXaW5kb3dzKSBHQ0MgY29tcGlsZXIuIFRoaXMgaXMgYSBuZWNlc3NpdHkgd2hlbg0KICAg IGRpc3RyaWJ1dGluZyBXaW5kb3dzIGxpYnJhcmllcywgYW5kIHJlZHVjZXMgcnVudGltZSBidWdz IHdoZW4NCiAgICBsaW5raW5nIG5hdGl2ZSBXaW5kb3dzIGxpYnJhcmllcyBpbnRvIHlvdXIgT0Nh bWwtYnVpbHQgV2luZG93cw0KICAgIGV4ZWN1dGFibGVzLiBJbiBhZGRpdGlvbiB5b3UgY2FuIGdl bmVyYXRlIFdpbmRvd3MgMzItYml0IGJpbmFyaWVzLg0KICDigKIgT24gbWFjT1MgaXQgY2FuIGJ1 aWxkIGJvdGggQVJNNjQgYW5kIHg4Nl82NCBiaW5hcmllcyBpZiB5b3UgdXNlDQogICAgW29wYW0t bW9ub3JlcG9dIHRvIGJ1aWxkIHlvdXIgcHJvamVjdC4gL0FscGhhLXJlbGVhc2UgY2F1dGlvbjog VGhpcw0KICAgIHdvcmtzIHRvZGF5IGJ1dCBvbmx5IGlmIHlvdSBoYW5kLWVkaXQgdGhlIC5sb2Nr ZWQgZmlsZS4gU28gb25seQ0KICAgIGFkdmFuY2VkIHVzZXJzIHRvZGF5IS8NCg0KICBFdmVuIGlm IHlvdSBhcmUgbm90IHJlbGVhc2luZyB0byB0aGUgcHVibGljLCBpZiB5b3UgYXJlIGEgcGFja2Fn ZQ0KICBtYWludGFpbmVyIHlvdSBtYXkgd2FudCB0byB1c2UgL2JvdGgvIGBzZXR1cC1vY2FtbCcg YW5kIGBzZXR1cC1ka21sJw0KICBzbyB0aGF0IHlvdSBnZXQgYWRkaXRpb25hbCBjb3ZlcmFnZSBm b3IgVmlzdWFsIFN0dWRpbyBhbmQgW01TWVMyXSBvbg0KICBXaW5kb3dzLCBhbmQgY292ZXJhZ2Ug Zm9yIGFuIG9sZGVyIEdMSUJDIG9uIExpbnV4Lg0KDQogIFRoZSBmdWxsIGNvbXBhcmlzb24gbWF0 cml4IGF2YWlsYWJsZSBhdA0KICBbaHR0cHM6Ly9naXRodWIuY29tL2Rpc2t1di9ka21sLXdvcmtm bG93cyNyZWFkbWVdIGlzOg0KDQogIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgQ0KICAgYHNldHVwLWRr bWwnICAgICAgICAgICAgICAgICAgICAgICAgICBgc2V0dXAtb2NhbWwnICAgICAgICAgICAgIENv bnNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAg4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSADQogICBgZGttbC1iYXNlLWNvbXBpbGVyJyAgICAgICAgICAgICAgICAgIGBvY2FtbC1iYXNl LWNvbXBpbGVyJyAgICAgYHNldHVwLWRrbWwnICpvbmx5IHN1cHBvcnRzIDQuMTIuMSB0b2RheSou IGBzZXR1cC1vY2FtbCcgc3VwcG9ydHMgYWxsIHZlcnNpb25zIGFuZCB2YXJpYW50cyBvZiBPQ2Ft bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAg R2l0SHViIGNoaWxkIHdvcmtmbG93ICAgICAgICAgICAgICAgICBHaXRIdWIgQWN0aW9uICAgICAg ICAgICAgIGBzZXR1cC1ka21sJyBpcyBtb3JlIGNvbXBsZXggdG8gY29uZmlndXJlLCBhbmQgdGFr ZXMgKmxvbmdlciB0byBydW4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgIE1TVkMgKyBN U1lTMiAgICAgICAgICAgICAgICAgICAgICAgICAgR0NDICsgQ3lnd2luICAgICAgICAgICAgICBP biBXaW5kb3dzIGBzZXR1cC1ka21sJyBjYW4gbGV0IHlvdXIgbmF0aXZlIGNvZGUgdXNlIG9yZGlu YXJ5IFdpbmRvd3MgbGlicmFyaWVzIHdpdGhvdXQgQUJJIGNvbmZsaWN0cy4gWW91IGNhbiBhbHNv IGRpc3RyaWJ1dGUgeW91ciBleGVjdXRhYmxlcyB3aXRob3V0IHRoZSBsaWNlbnNlIGhlYWRhY2hl IG9mIHJlZGlzdHJpYnV0aW5nIG9yIHN0YXRpY2FsbHkgbGlua2luZyBgbGliZ2NjX3Nfc2VoJyBh bmQgYGxpYnN0ZGMrKycgICAgICAgICAgICAgICAgICAgICAgDQogICBgZGttbC1iYXNlLWNvbXBp bGVyJyAgICAgICAgICAgICAgICAgIGBvY2FtbC1iYXNlLWNvbXBpbGVyJyAgICAgT24gbWFjT1Ms IGBzZXR1cC1ka21sJyBjcm9zcy1jb21waWxlcyB0byBBUk02NCB3aXRoIGBkdW5lIC14IGRhcndp bl9hcm02NCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgQ2VudE9TIDcgYW5kIExpbnV4IGRpc3Ry b3MgZnJvbSAyMDE0ICBMYXRlc3QgVWJ1bnR1ICAgICAgICAgICAgIE9uIExpbnV4LCBgc2V0dXAt ZGttbCcgYnVpbGRzIHdpdGggYW4gb2xkIEdMSUJDLiBgc2V0dXAtZGttbCcgZHluYW1pY2FsbHkg bGlua2VkIExpbnV4IGV4ZWN1dGFibGVzIHdpbGwgYmUgaGlnaGx5IHBvcnRhYmxlIGFzIEdMSUJD IGNvbXBhdGliaWxpdHkgaXNzdWVzIHNob3VsZCBiZSByYXJlLCBhbmQgY29tcGF0aWJsZSB3aXRo IHRoZSB1bm1vZGlmaWVkIExHUEwgbGljZW5zZSB1c2VkIGJ5IGNvbW1vbiBPQ2FtbCBkZXBlbmRl bmNpZXMgbGlrZSBbR05VIE1QXSANCiAgIDAgeXJzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNCB5cnMgICAgICAgICAgICAgICAgICAgICBgc2V0dXAtb2NhbWwnIGlzIG9mZmljaWFs bHkgc3VwcG9ydGVkIGFuZCB3ZWxsLXRlc3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgDQogICBTb21lIHBpbm5lZCBwYWNrYWdlcyAgICAgICAgICAgICAgICAgIE5v IHBhY2thZ2VzIHBpbm5lZCAgICAgICAgYHNldHVwLWRrbWwnLCBmb3Igc29tZSBwYWNrYWdlcywg bXVzdCBwaW4gdGhlIHZlcnNpb24gc28gdGhhdCBjcm9zcy1wbGF0Zm9ybSBwYXRjaGVzIChlc3Bl Y2lhbGx5IGZvciBXaW5kb3dzKSBhcmUgYXZhaWxhYmxlLiBXaXRoIGBzZXR1cC1vY2FtbCcgeW91 IGFyZSBmcmVlIHRvIHVzZSBhbnkgdmVyc2lvbiBvZiBhbnkgcGFja2FnZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIA0KICAgYGRpc2t1di9kaXNrdXYtb3BhbS1yZXBvc2l0b3J5JyAgICAgICBgZmRvcGVuL29w YW0tcmVwb3NpdG9yeScgIEN1c3RvbSBwYXRjaGVzIGZvciBXaW5kb3dzIGFyZSBzb21ldGltZXMg bmVlZGVkLiBgc2V0dXAtZGttbCcgdXNlcyBhIG11Y2ggc21hbGxlciBzZXQgb2YgcGF0Y2hlcy4g YHNldHVwLW9jYW1sJyB1c2VzIGEgbGFyZ2UgYnV0IGRlcHJlY2F0ZWQgc2V0IG9mIHBhdGNoZXMu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAg 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSBDQoNCiAgICAgICAgUHV0IHNpbXBseSwgdXNlIGBzZXR1cC1k a21sJyB3aGVuIHlvdSBhcmUgZGlzdHJpYnV0aW5nDQogICAgICAgIGV4ZWN1dGFibGVzIG9yIGxp YnJhcmllcyB0byB0aGUgcHVibGljLiBVc2UgYHNldHVwLW9jYW1sJw0KICAgICAgICBmb3IgYWxs IG90aGVyIG5lZWRzLg0KDQogIGBzZXR1cC1ka21sJyB3aWxsIHNldHVwIHRoZSBmb2xsb3dpbmcg T0NhbWwgYnVpbGQgZW52aXJvbm1lbnRzIGZvcg0KICB5b3U6DQoNCiAg4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSBDQogICBBQklzICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlIGBv Y2FtbG9wdCcgY29tcGlsZXIgc3VwcG9ydHMgYnVpbGRpbmcgZXhlY3V0YWJsZXMgZm9yIHRoZSBm b2xsb3dpbmcgb3BlcmF0aW5nIHN5c3RlbXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIA0KICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCiAgIHdpbjMyLXdp bmRvd3NfeDg2ICAgICAgICAgICAzMi1iaXQgV2luZG93cyBbMV0gZm9yIEludGVsL0FNRCBDUFVz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICB3aW4zMi13aW5kb3dz X3g4Nl82NCAgICAgICAgNjQtYml0IFdpbmRvd3MgWzFdIGZvciBJbnRlbC9BTUQgQ1BVcyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgbWFjb3MtZGFyd2luX2FsbCAg ICAgICAgICAgIDY0LWJpdCBtYWNPUyBmb3IgSW50ZWwgYW5kIEFwcGxlIFNpbGljb24gQ1BVcy4g VXNpbmcgYGR1bmUgLXggZGFyd2luX2FybTY0JyB3aWxsIGNyb3NzLWNvbXBpbGUgdG8gYm90aDsg b3RoZXJ3aXNlIGRlZmF1bHRzIHRvIEludGVsLiANCiAgIG1hbnlsaW51eDIwMTQtbGludXhfeDg2 ICAgICAzMi1iaXQgTGludXg6IENlbnRPUyA3LCBDZW50T1MgOCwgRmVkb3JhIDMyKywgTWFnZWlh IDgrLCBvcGVuU1VTRSAxNS4zKywgUGhvdG9uIE9TIDQuMCsgKDMuMCsgd2l0aCB1cGRhdGVzKSwg VWJ1bnR1IDIwLjA0KyAgICAgICAgICAgDQogICBtYW55bGludXgyMDE0LWxpbnV4X3g4Nl82NCAg NjQtYml0IExpbnV4OiBDZW50T1MgNywgQ2VudE9TIDgsIEZlZG9yYSAzMissIE1hZ2VpYSA4Kywg b3BlblNVU0UgMTUuMyssIFBob3RvbiBPUyA0LjArICgzLjArIHdpdGggdXBkYXRlcyksIFVidW50 dSAyMC4wNCsgICAgICAgICAgIA0KICDilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHi lIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIENCg0K ICBUaGFua3MgdG8gdGhlIFtPQ2FtbCBTb2Z0d2FyZSBGb3VuZGF0aW9uIChPQ1NGKV0gZm9yIHRo ZWlyIHN1cHBvcnQgb2YNCiAgREtNTC4gRW5qb3khDQoNCg0KW0dpdEh1YiBBY3Rpb24gc2V0dXAt b2NhbWxdDQo8aHR0cHM6Ly9naXRodWIuY29tL21hcmtldHBsYWNlL2FjdGlvbnMvc2V0LXVwLW9j YW1sPg0KDQpbb3BhbS1tb25vcmVwb10gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbGxhYnMvb3Bh bS1tb25vcmVwbyNyZWFkbWU+DQoNCltNU1lTMl0gPGh0dHBzOi8vd3d3Lm1zeXMyLm9yZy8+DQoN CltodHRwczovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtd29ya2Zsb3dzI3JlYWRtZV0NCjxodHRw czovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtd29ya2Zsb3dzI3JlYWRtZT4NCg0KW0dOVSBNUF0g PGh0dHBzOi8vZ21wbGliLm9yZy9tYW51YWwvQ29weWluZz4NCg0KW09DYW1sIFNvZnR3YXJlIEZv dW5kYXRpb24gKE9DU0YpXSA8aHR0cHM6Ly9vY2FtbC1zZi5vcmcvPg0KDQoNCkRpc2t1diBPQ2Ft bCAxLngueDsgV2luZG93cyBPQ2FtbCBpbnN0YWxsZXIgbm8gbG9uZ2VyIGluIHByZXZpZXcNCuKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2Nh bWwub3JnL3QvYW5uLWRpc2t1di1vY2FtbC0xLXgteC13aW5kb3dzLW9jYW1sLWluc3RhbGxlci1u by1sb25nZXItaW4tcHJldmlldy8xMDMwOS8xPg0KDQoNCmpiZWNrZm9yZCBhbm5vdW5jZWQNCuKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIERpc2t1diBPQ2FtbCAoREtNTCkgaGFzIGdyYWR1YXRlZCB0byB2ZXJzaW9uIDEuMC4wLiBU aGF0IG1lYW5zIHlvdSdsbA0KICBzZWUgREtNTCBsaXN0ZWQgYXMgYSBXaW5kb3dzIG9wdGlvbiBm b3IgT0NhbWwgb24gdGhlIHZhcmlvdXMgT0NhbWwNCiAgd2Vic2l0ZXMgc29vbi4NCg0KICBUbyBy ZWNhcCDigKYgYnkgZm9sbG93aW5nIHRoZSBzaW1wbGUgW2Rvd25sb2FkIGFuZCBpbnN0YWxsIGlu c3RydWN0aW9ucw0KICBmb3IgV2luZG93c10geW91IHdpbGwgZ2V0Og0KICDigKIgT0NhbWwgNC4x Mi4xDQogIOKAoiBgZHVuZScgYW5kIGBvcGFtJyB3b3JraW5nIHRyYW5zcGFyZW50bHkgYXMgaWYg eW91IHdlcmUgb24gVW5peA0KICDigKIgYSBgcGxheWdyb3VuZCcgT3BhbSBzd2l0Y2ggc28geW91 IGNhbiBzdGFydCBjb2Rpbmcgd2l0aG91dCBoYXZpbmcgdG8NCiAgICBsZWFybiBtYW55IE9wYW0g Y29tbWFuZHMNCiAg4oCiIHlvdXIgT3BhbSBzd2l0Y2hlcyBzdXBwb3J0ZWQgYnkgdGhlIFZpc3Vh bCBTdHVkaW8gT0NhbWwgcGx1Z2luDQogIOKAoiBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgeW91IG5l ZWQgZm9yIE9DYW1sIHByb2dyYW1taW5nOg0KICAgIOKAoiBhIEMgY29tcGlsZXIgYW5kIGFzc2Vt YmxlciAoVmlzdWFsIFN0dWRpbyBCdWlsZCBUb29scykNCiAgICDigKIgYSBVTklYIGVudmlyb25t ZW50IChNU1lTMjsgbW9zdGx5IHlvdSB3b24ndCBzZWUgaXQpDQogICAg4oCiIHNvdXJjZSBjb250 cm9sIChHaXQgZm9yIFdpbmRvd3MpDQogIOKAoiBzdXBwb3J0ISBGaWxlIGFuIGlzc3VlIGF0DQog ICAgW2h0dHBzOi8vZ2l0aHViLmNvbS9kaXNrdXYvZGttbC1pbnN0YWxsZXItb2NhbWwvaXNzdWVz XS4gSSBkb24ndA0KICAgIHByb21pc2UgeW91ciBXaW5kb3dzIGlzc3VlIHdpbGwgYmUgZml4ZWQs IGJ1dCBpdCB3aWxsIGJlIHJldmlld2VkLg0KDQogIENoYW5nZXMgc2luY2UgMC40LjA6DQogIOKA oiBBbiB1bmluc3RhbGxlci4gTm93IHlvdSBjYW4gQWRkIGFuZCBSZW1vdmUgIkRpc2t1diBPQ2Ft bCIgZnJvbSB0aGUNCiAgICBDb250cm9sIFBhbmVsDQogIOKAoiBUaGUgb2xkIEdpdExhYiByZXBv c2l0b3J5IGF0DQogICAgW2h0dHBzOi8vZ2l0bGFiLmNvbS9kaXNrdXYvZGlza3V2LW9jYW1sXSBp cyBiZWluZyByZXRpcmVkLiBUaGVyZQ0KICAgIHdpbGwgYmUgYSBuZXcgR2l0TGFiIHJlcG9zaXRv cnkgd2l0aCBtdWNoIG1vcmUgdGVzdGluZyBjYXBhY2l0eSB0aGF0DQogICAgd2lsbCBiZSBvbmxp bmUgaW4gdGhlIG5leHQgZmV3IG1vbnRocy4NCg0KICBGdWxsIGRvY3VtZW50YXRpb24gaXMgYXQN CiAgW2h0dHBzOi8vZGlza3V2LmdpdGxhYi5pby9kaXNrdXYtb2NhbWwvI2ludHJvZHVjdGlvbl0u DQoNCiAgL1BhY2thZ2UgbWFpbnRhaW5lcnMvOiBIYXZlIGEgbG9vayBhdCB0aGUgW2p1c3QgYW5u b3VuY2VkDQogIGBzZXR1cC1ka21sJ10gdG8gdGVzdCB5b3VyIG93biBHaXRIdWIgcGFja2FnZXMg dXNpbmcgbW9zdCBvZiB0aGUNCiAgV2luZG93cyBmdW5jdGlvbmFsaXR5IGxpc3RlZCBhYm92ZS4N Cg0KICBUaGFua3MgKGFnYWluISkgdG8gdGhlIFtPQ2FtbCBTb2Z0d2FyZSBGb3VuZGF0aW9uIChP Q1NGKV0gZm9yIHRoZWlyDQogIHN1cHBvcnQgb2YgREtNTC4gUGxlYXNlIGNvbnNpZGVyIGJlY29t aW5nIGEgY29udHJpYnV0b3IgdG8gREtNTCB0bw0KICBpbXByb3ZlIHRoZSBXaW5kb3dzIGVjb3N5 c3RlbS4gRW5qb3khDQoNCg0KW2Rvd25sb2FkIGFuZCBpbnN0YWxsIGluc3RydWN0aW9ucyBmb3Ig V2luZG93c10NCjxodHRwczovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtaW5zdGFsbGVyLW9jYW1s I2luc3RhbGxpbmc+DQoNCltodHRwczovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtaW5zdGFsbGVy LW9jYW1sL2lzc3Vlc10NCjxodHRwczovL2dpdGh1Yi5jb20vZGlza3V2L2RrbWwtaW5zdGFsbGVy LW9jYW1sL2lzc3Vlcz4NCg0KW2h0dHBzOi8vZ2l0bGFiLmNvbS9kaXNrdXYvZGlza3V2LW9jYW1s XQ0KPGh0dHBzOi8vZ2l0bGFiLmNvbS9kaXNrdXYvZGlza3V2LW9jYW1sPg0KDQpbaHR0cHM6Ly9k aXNrdXYuZ2l0bGFiLmlvL2Rpc2t1di1vY2FtbC8jaW50cm9kdWN0aW9uXQ0KPGh0dHBzOi8vZGlz a3V2LmdpdGxhYi5pby9kaXNrdXYtb2NhbWwvI2ludHJvZHVjdGlvbj4NCg0KW2p1c3QgYW5ub3Vu Y2VkIGBzZXR1cC1ka21sJ10NCjxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXNldHVw LWRrbWwteW1sLWdpdGh1Yi1hY3Rpb25zLXdvcmtmbG93LWZvci1kaXN0cmlidXRpbmctYmluYXJp ZXMvMTAzMDg+DQoNCltPQ2FtbCBTb2Z0d2FyZSBGb3VuZGF0aW9uIChPQ1NGKV0gPGh0dHBzOi8v b2NhbWwtc2Yub3JnLz4NCg0KDQpPbGQgQ1dODQrilZDilZDilZDilZDilZDilZDilZANCg0KICBJ ZiB5b3UgaGFwcGVuIHRvIG1pc3MgYSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBtZXNzYWdlXSBh bmQgSSdsbCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQgW3RoZSBhcmNo aXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZlc10uDQoNCiAgSWYgeW91IGFs c28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5IHdlZWsgYnkgbWFpbCwgeW91IG1heSBzdWJzY3Jp YmUNCiAgW29ubGluZV0uDQoNCiAgW0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBtZSBhIG1lc3Nh Z2VdIDxtYWlsdG86YWxhbi5zY2htaXR0QHBvbHl0ZWNobmlxdWUub3JnPg0KDQpbdGhlIGFyY2hp dmVdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1MgZmVlZCBvZiB0 aGUgYXJjaGl2ZXNdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi9jd24ucnNzPg0K DQpbb25saW5lXSA8aHR0cDovL2xpc3RzLmlkeWxsLm9yZy9saXN0aW5mby9jYW1sLW5ld3Mtd2Vl a2x5Lz4NCg0KW0FsYW4gU2NobWl0dF0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvPg0K DQo= --=-=-= 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 August 09 to 16, 2022.

Emacs on windows, merlin mode, merlin server remote on linux, = tramp, ssh

Artem Pianykh said

I managed to set up Emacs + TRAMP + LSP to do remote development (not on th= e first attempt though, as these things were quite fiddly to set up).

Here's what I got:

  1. You need opam install ocaml-lsp-server on the remote machi= ne.
  2. Tell TRAMP to use path from the remote shell: (add-to-list 'tramp= -remote-path 'tramp-own-remote-path)
  3. Use Eglot as an LSP= client. Although, lsp-mode claims that they support remote se= rvers, I couldn't quite make it work with lsp-mode. This is wh= at I have in my init.el:
(require 'eglot)
(add-hook 'tuareg-mode-hook #'eglot-ensure)

clangml 4.2.0: OCaml bindings for Clang API (for C and C++ par= sing)

Thierry Martinez announced

clangml.4.7.0 is now in opam, with the bug fixes/features requ= ested by @n47 and some others. All LLVM/Clang versions up to 14.0.x are supported, as well as OCaml 5.0. The official rep= o is now on github: https://github.com/= thierry-martinez/clangml which should ease posting issues and pull requ= ests (and should be more convenient than discussions on this thread!).

Support for the upcoming Clang 15 is planned for the next release that shou= ld happen soon (the development version already supports Clang 15).

opam 2.1.3

R. Boujbel announced

We are pleased to announce minor release of opam 2.1.3.

This opam release consists of backported fixes. You=E2=80=99ll find more information in the blog = post.

To upgrade simply run:

bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/ma=
ster/shell/install.sh) --version 2.1.3"

Application-specific Improvements to the Ecosystem

Deep in this thread, Jp R said

Regarding Perl vs OCaml: An (impressive) implementation of all the solutions of the Perl Cookbook in the Objective CAML language (used at the time) is available here: http://ple= ac.sourceforge.net/pleac_ocaml/index.html

Re-writing these examples with "modern" code/libraries could be very intere= sting.

Use GitHub CI to build simple binary distribution?

Christian Lindig asked

Is there a recommended way (or example) to build a simple binary distributi= on of an OCaml project using the GitHub CI? I am mostly interested in building the executables and packaging them i= n some archive format and make that available for download for different architectures.

Guillaume Bury replied

I have such a workflow for one of my project, see this workflow file. It automatically triggers on new releases, builds the project with the appropriate compiler (e.g. flam= bda), and uploads the built artefact to the release page where it can be downloaded. It currently works for both linux = and mac (last time I tried it with windows I got some errors and I haven't yet had the time to look into that, so i do= n't know if the errors were caused by the workflow, or my project).

jbeckford also replied

That was a weird coincidence that I released a GitHub workflow https://discuss.ocaml.org/t/ann-set= up-dkml-yml-github-actions-workflow-for-distributing-binaries/10308 for= this today. @zozozo's solution is simpler if it works for your intended target a= udience.

Calascibetta Romain replied

I did the same for my little project bob but it provides a Cosmopolitan binary wh= ich should run anywhere, see the workflow and the last uploaded artifact :slight_smile:.

setup-dkml.yml GitHub Actions workflow for distributing binari= es

jbeckford announced

I am pleased to announce the `v0` release of `setup-dkml.yml`, a GitHub Act= ions workflow for distributing executables or libraries to the public:

It is similar to the GitHub Action setup-ocaml but has several advantages when you are releasing a finished product to the public:

  • On Linux it uses an ancient GLIBC (C library) so your binaries run on m= ost Linux distributions without static linking. Statically linked binaries = are simple to distribute, but can be problematic for some copy-left license= s, and makes it difficult for your end-users to do security patching of the= libraries you linked with.
  • On Windows it uses the Visual Studio compiler rather than the non-stand= ard (for Windows) GCC compiler. This is a necessity when distributing Windo= ws libraries, and reduces runtime bugs when linking native Windows librarie= s into your OCaml-built Windows executables. In addition you can generate W= indows 32-bit binaries.
  • On macOS it can build both ARM64 and x86_64 binaries if you use opam-monorepo to= build your project. Alpha-release caution: This works today but only if= you hand-edit the .locked file. So only advanced users today!

Even if you are not releasing to the public, if you are a package maintaine= r you may want to use both setup-ocaml and setup-dkml so that you get additional coverage for Visual = Studio and MSYS2 on Windows, and coverage for an older GLIBC on Linux.

The full comparison matrix available at https://github.= com/diskuv/dkml-workflows#readme is:

setup-dkml setup-ocaml Consequence
dkml-base-compiler ocaml-base-compiler setup-dkml only supports 4.12.1 toda= y. setup-ocaml supports all versions and variants of OCaml=
GitHub child workflow GitHub Action setup-dkml is more complex to configure= , and takes longer to run
MSVC + MSYS2 GCC + Cygwin On Windows setup-dkml can let your nati= ve code use ordinary Windows libraries without ABI conflicts. You can also = distribute your executables without the license headache of redistributing = or statically linking libgcc_s_seh and libstdc++<= /td>
dkml-base-compiler ocaml-base-compiler On macOS, setup-dkml cross-compiles to = ARM64 with dune -x darwin_arm64
CentOS 7 and Linux distros from 2014 Latest Ubuntu On Linux, setup-dkml builds with an old= GLIBC. setup-dkml dynamically linked Linux executables will b= e highly portable as GLIBC compatibility issues should be rare, and compati= ble with the unmodified LGPL license used by common OCaml dependencies like= GNU MP
0 yrs 4 yrs setup-ocaml is officially supported and= well-tested.
Some pinned packages No packages pinned setup-dkml, for some packages, must pin= the version so that cross-platform patches (especially for Windows) are av= ailable. With setup-ocaml you are free to use any version of a= ny package
diskuv/diskuv-opam-repository fdopen/opam-repository Custom patches for Windows are sometimes needed. setup-dkml uses a much smaller set of patches. setup-ocaml<= /code> uses a large but deprecated set of patches.

Put simply, use setup-dkml when you are distributing executabl= es or libraries to the public. Use setup-ocaml for all other needs.

setup-dkml will setup the following OCaml build environments f= or you:

ABIs Native ocamlopt compiler = supports building executables for the following operating systems:
win32-windows_x86 32-bit Windows [1] for Intel/AMD CPUs
win32-windows_x86_64 64-bit Windows [1] for Intel/AMD CPUs
macos-darwin_all 64-bit macOS for Intel and Apple Silicon CPUs. Using= dune -x darwin_arm64 will cross-compile to both; otherwise de= faults to Intel.
manylinux2014-linux_x86 32-bit Linux: CentOS 7, CentOS 8, Fedora 32+, Mageia= 8+, openSUSE 15.3+, Photon OS 4.0+ (3.0+ with updates), Ubuntu 20.04+
manylinux2014-linux_x86_64 64-bit Linux: CentOS 7, CentOS 8, Fedora 32+, Mageia= 8+, openSUSE 15.3+, Photon OS 4.0+ (3.0+ with updates), Ubuntu 20.04+

Thanks to the OCaml Software Foundation (= OCSF) for their support of DKML. Enjoy!

Diskuv OCaml 1.x.x; Windows OCaml installer no longer in previ= ew

jbeckford announced

Diskuv OCaml (DKML) has graduated to version 1.0.0. That means you'll see D= KML listed as a Windows option for OCaml on the various OCaml websites soon.

To recap … by following the simple download and install instructions for = Windows you will get:

Changes since 0.4.0:

Full documentation is at https://dis= kuv.gitlab.io/diskuv-ocaml/#introduction.

Package maintainers: Have a look at the just announced setup-dkml to test your own Git= Hub packages using most of the Windows functionality listed above.

Thanks (again!) to the OCaml Software Fou= ndation (OCSF) for their support of DKML. Please consider becoming a contributor to DKML to improve the Windows ecosystem. E= njoy!

Old CWN

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

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

--=-=-=--