From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.7 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS, UNPARSEABLE_RELAY shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id A26D71F910 for ; Mon, 7 Nov 2022 02:32:34 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.b="qB2Z67xo"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 144DB1214F4; Mon, 7 Nov 2022 11:32:31 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 06C561214ED for ; Mon, 7 Nov 2022 11:32:28 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=s1; bh=PQaH466v2bdBCMZePuYQcLCxh2RLNIjUZYZy0kCBgkQ=; b=qB2Z67xoNd2UoUbGrc4jaCKn22G/oCwXU6S62CZW81vxbyxWbmQqoSxd48919k8SYHjm RCHFno2QN2vDAOxXuvZiORNWumbZEDFJRFijyK9LzqHTKVWPuhuRUBN9tjPWZtE4TSi9bk Vp1flt9KPMN3uo9+pglkW6QSsrQLu+9uM+goubRtcdBpQg1VhYU1x5mL2yhJE9UnYP5TTa BSU4JX6O3yDCCLno/GPx6KY1zUY3bHjVsRjCJEXtcOb9lSYE28hWTIz42F1ihbA3hudPm+ 4x6Nuz8pWsMzgKuc07aHRVOHy7+jI/xoK0gbdTN6QIni+LCMElJlMbwRHTkmnZKw== Received: by filterdrecv-6b9548745c-lk6b2 with SMTP id filterdrecv-6b9548745c-lk6b2-1-63686E35-2B 2022-11-07 02:32:21.858923988 +0000 UTC m=+548234.621405402 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-6 (SG) with ESMTP id EMp-qGHtSqaRjio64p3_-w for ; Mon, 07 Nov 2022 02:32:21.842 +0000 (UTC) Date: Mon, 07 Nov 2022 02:32:21 +0000 (UTC) From: "matz (Yukihiro Matsumoto)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19104 X-Redmine-Issue-Author: make_now_just X-Redmine-Sender: matz X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 87086 X-SG-EID: =?us-ascii?Q?SqOeWfVKFgkgw8cVgc6MYslIG5ZBbSbWU3opJ5u4yBsU3yWoizgPd1Pss4ZMTd?= =?us-ascii?Q?OLBRodnvQO26=2FFyqng1x72rdTkbmTHg5l1+yKA9?= =?us-ascii?Q?AQWjb5+cr261AztzRu=2F7UkXMzP+3vgMr8DREND3?= =?us-ascii?Q?MoyVEtFW67izmwM1c65AOu2FkgxIiGjaFhJhQ6r?= =?us-ascii?Q?r6JnvEpbabGv563G9lfyKs1G1nuecGkvRSIrKuF?= =?us-ascii?Q?4A7iv5892djUdsmC3C4Oue5OKEWnrDVWw7AhiN5?= =?us-ascii?Q?3KRF+tOTrTCOXoWEGVjyQ=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110629 Subject: [ruby-core:110629] [Ruby master Feature#19104] Introduce the cache-based optimization for Regexp matching X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE5MTA0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4NCg0KDQpJdCBzb3VuZHMgZ29vZC4gTXkgb25seSBjb25jZXJuIGlzIG1lbW9yeSBjb25zdW1w dGlvbiwgYnV0IEkgZG9uJ3QgdGhpbmsgZ3Vlc3NpbmcgZ2FtZSB3b24ndCB3b3JrIGZvciB0aGlz IGNhc2UuDQpNZXJnZSB0aGlzIFBSIGFuZCBleHBlcmltZW50IHdpdGggMy4xIHByZXZpZXdzLg0K DQpNYXR6Lg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZl YXR1cmUgIzE5MTA0OiBJbnRyb2R1Y2UgdGhlIGNhY2hlLWJhc2VkIG9wdGltaXphdGlvbiBmb3Ig UmVnZXhwIG1hdGNoaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTkxMDQj Y2hhbmdlLTk5OTY0DQoNCiogQXV0aG9yOiBtYWtlX25vd19qdXN0IChLaXRzdW5lIFRTVVlVU0FU TykNCiogU3RhdHVzOiBPcGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClJlZ2V4cCBtYXRjaGluZyBjYXVzZXMgYSB0aW1lLWNv bXBsZXhpdHkgZXhwbG9zaW9uIHByb2JsZW0gYXMga25vd24gYXMgUmVEb1MgKFtodHRwczovL2Vu Lndpa2lwZWRpYS5vcmcvd2lraS9SZURvU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv UmVEb1MpKS4gUmVEb1MgaGFzIGJlY29tZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHkgaW4gbWFueSBw bGFjZXMgaW4gcmVjZW50IHllYXJzLCBhbmQgUnVieSBpcyBubyBleGNlcHRpb24uIFRoZSBmb2xs b3dpbmcgaXMgdGhlIGluY29tcGxldGUgbGlzdCBvZiBzdWNoIHZ1bG5lcmFiaWxpdHkgcmVwb3J0 czoNCg0KLSBbaHR0cHM6Ly9naXRodWIuY29tL3NpbmF0cmEvc2luYXRyYS9wdWxsLzE4MjNdKGh0 dHBzOi8vZ2l0aHViLmNvbS9zaW5hdHJhL3NpbmF0cmEvcHVsbC8xODIzKQ0KLSBbaHR0cHM6Ly9n aXRodWIuY29tL2xvc3Rpc2xhbmQvZmFyYWRheS1uZXRfaHR0cC9wdWxsLzI3XShodHRwczovL2dp dGh1Yi5jb20vbG9zdGlzbGFuZC9mYXJhZGF5LW5ldF9odHRwL3B1bGwvMjcpDQoNClRoZXNlIHJl cG9ydHMgaGF2ZSBiZWVuIGFkZHJlc3NlZCBieSBmaXhpbmcgdGhlIGxpYnJhcnkvc29mdHdhcmUg aW1wbGVtZW50YXRpb24uIEJ1dCwgaWYgdGhlIGxhbmd1YWdl4oCZcyBSZWdleHAgaW1wbGVtZW50 YXRpb24gYmVjb21lcyBzYWZlLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBmdW5kYW1lbnRhbGx5IGFy Y2hpdmVkLg0KDQpGb3IgYSBmZXcgbW9udGhzLCBSdWJ5IGhhcyBpbXBsZW1lbnRlZCBhIFJlZ2V4 cCBtYXRjaGluZyB0aW1lb3V0IChbaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE3 ODM3XShodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTc4MzcpKS4gSXQgaXMgb25l IG9mIHRoZSB1c2VmdWwgbWV0aG9kcyBmb3IgcHJldmVudGluZyBSZURvUyB2dWxuZXJhYmlsaXR5 LCBidXQgaXQgaXMgYSBwcm9ibGVtIHRoYXQgc2V0dGluZyBhIGNvcnJlY3QgdGltZW91dCB2YWx1 ZSBpcyBoYXJkLiBUaGlzIHZhbHVlIGlzIGRlcGVuZGluZyBvbiBpbnB1dCBsZW5ndGgsIGVudmly b25tZW50LCBuZXR3b3JrIHN0YXR1cywgc3lzdGVtIGxvYWQsIGV0Yy4gV2hlbiB0aGUgdmFsdWUg aXMgdG9vIHNtYWxsLCBhIHN5c3RlbSBtYXkgYmUgYnJva2VuLCBidXQgd2hlbiB0aGUgdmFsdWUg aXMgdG9vIGxhcmdlLCBpdCBpcyBub3QgdXNlZnVsIGZvciBwcmV2ZW50aW5nIFJlRG9TLg0KDQpU aGVyZWZvcmUsIGFzIGEgbmV3IHdheSB0byBwcmV2ZW50IFJlRG9TLCB3ZSBwcm9wb3NlIHRvIGlu dHJvZHVjZSBjYWNoZS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlZ2V4cCBtYXRjaGluZy4gQXMg Q1MgZnVuZGFtZW50YWwga25vd2xlZGdlLCBhdXRvbWF0b24gbWF0Y2hpbmcgcmVzdWx0IGRlcGVu ZHMgb24gdGhlIHBvc2l0aW9uIG9mIGlucHV0IGFuZCBzdGF0ZS4gSW4gYWRkaXRpb24sIG1hdGNo aW5nIHRpbWUgZXhwbG9zaW9uIGlzIGNhdXNlZCBmb3IgcmVwZWF0aW5nIHRvIGFycml2ZSBhdCB0 aGUgc2FtZSBwb3NpdGlvbiBhbmQgc3RhdGUgbWFueSB0aW1lcy4gVGhlbiwgUmVEb1MgY2FuIGJl IHByZXZlbnRlZCB3aGVuIHBhaXJzIG9mIHBvc2l0aW9uLCBhbmQgc3RhdGUgYXJyaXZlZCBvbmNl IGlzIHJlY29yZGVkIChjYWNoZWQpLiBJbiBmYWN0LCB1bmRlciBzdWNoIGFuIG9wdGltaXphdGlv biwgaXQgaXMga25vd24gYXMgdGhlIG1hdGNoaW5nIHRpbWUgY29tcGxleGl0eSBpcyBsaW5lYXIg YWdhaW5zdCBpbnB1dCBzaXplIFsxXS4NCg0KWzFdOiBEYXZpcywgSmFtZXMgQy4sIEZyYW5jaXNj byBTZXJ2YW50LCBhbmQgRG9uZ3lvb24gTGVlLiAiVXNpbmcgc2VsZWN0aXZlIG1lbW9pemF0aW9u IHRvIGRlZmVhdCByZWd1bGFyIGV4cHJlc3Npb24gZGVuaWFsIG9mIHNlcnZpY2UgKFJlRG9TKS4i ICoyMDIxIElFRUUgc3ltcG9zaXVtIG9uIHNlY3VyaXR5IGFuZCBwcml2YWN5IChTUCkqLiBJRUVF LCAyMDIxLiBbaHR0cHM6Ly93d3cuY29tcHV0ZXIub3JnL2NzZGwvcHJvY2VlZGluZ3MtYXJ0aWNs ZS9zcC8yMDIxLzg5MzQwMGE1NDMvMW9hazk4OFRodk9dKGh0dHBzOi8vd3d3LmNvbXB1dGVyLm9y Zy9jc2RsL3Byb2NlZWRpbmdzLWFydGljbGUvc3AvMjAyMS84OTM0MDBhNTQzLzFvYWs5ODhUaHZP KQ0KDQpTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlLg0KDQpgYGBiYXNoDQokIHJ1YnkgLS12ZXJz aW9uDQpydWJ5IDMuMi4wcHJldmlldzIgKDIwMjItMDktMDkgbWFzdGVyIDM1Y2ZjOWEzYmIpIFth cm02NC1kYXJ3aW4yMV0NCg0KJCB0aW1lIHJ1YnkgLWUgJy9eKGF8YSkqJC8gPX4gImEiICogMjgg KyAiYiInDQpydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4ICsgImIiJyAgOC40OXMgdXNl ciAwLjA0cyBzeXN0ZW0gOTglIGNwdSA4LjY2MyB0b3RhbA0KDQokIC4vbWluaXJ1YnkgLS12ZXJz aW9uDQpydWJ5IDMuMi4wZGV2ICgyMDIyLTEwLTI3VDEzOjM5OjU2WiByZWNhY2hlIGJjNTliN2Nj MWUpIFthcm02NC1kYXJ3aW4yMV0NCg0KJCB0aW1lIC4vbWluaXJ1YnkgLWUgJy9eKGF8YSkqJC8g PX4gImEiICogMjggKyAiYiInDQouL21pbmlydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4 ICsgImIiJyAgMC4wMXMgdXNlciAwLjAxcyBzeXN0ZW0gOCUgY3B1IDAuMzEwIHRvdGFsDQpgYGAN Cg0KSW4gdGhpcyBleGFtcGxlLCB1c2luZyBydWJ5IHYzLjIuMC1wcmV2aWV3MiwgbWF0Y2hpbmcg YC9eKGF8YSkqJC9gIGFnYWluc3QgYCJhIiAqIDI4ICsgImIiYCB0YWtlcyA4LjYgc2Vjb25kcyBi ZWNhdXNlIG1hdGNoaW5nIHRpbWUgb2YgdGhpcyBSZWdleHAgdGFrZXMgZXhwb25lbnRpYWxseSBh Z2FpbnN0IGAiYSIgKiBOICsgImIiYCBmb3JtIHN0cmluZy4gQnV0LCB1c2luZyB0aGUgcGF0Y2hl ZCB2ZXJzaW9uIG9mIHJ1YnksIGl0IHRha2VzIDAuMDEgc2Vjb25kcy4gSW5jcmVkaWJseSBpdCBp cyA4NjAgdGltZXMgZmFzdGVyIGJlY2F1c2UgbWF0Y2hpbmcgaXMgZG9uZSBpbiBsaW5lYXIgdGlt ZS4NCg0KQnkgdGhpcyBvcHRpbWl6YXRpb24sIHRoZSBtYXRjaGluZyB0aW1lIGlzIGxpbmVhciB0 byB0aGUgaW5wdXQgc2l6ZS4gSXQgc291bmRzIHNlY3VyZSBhbmQgZ29vZC4gVW5mb3J0dW5hdGVs eSwgd2hlbiBSZWdleHAgdXNlcyBzb21lIGV4dGVuc2lvbiAoZS5nLiBsb29rLWFyb3VuZCwgYmFj ay1yZWZlcmVuY2UsIHN1YmV4cHJlc3Npb24gY2FsbCksIHRoZSBvcHRpbWl6YXRpb24gaXMgbm90 IGFwcGxpZWQuIEFsc28sIHRoZSBvcHRpbWl6YXRpb24gbmVlZHMgYSBiaXQgbW9yZSBtZW1vcnkg Zm9yIGNhY2hpbmcuIEhvd2V2ZXIsIHdlIGhhdmUgYWxyZWFkeSBpbnZlc3RpZ2F0ZWQgdGhhdCB0 aGV5IGFyZSBub3Qgc28gdGhlIG1ham9yIHByb2JsZW1zIChTZWUgdGhlICJMaW1pdGF0aW9uIiBz ZWN0aW9uKS4NCg0KIyMgSW1wbGVtZW50YXRpb24NCg0KVGhlIGJhc2ljIGNhY2hlIGltcGxlbWVu dGF0aW9uIGlzIGNvbXBsZXRlIGF0IHRoaXMgdGltZSBhbmQgY2FuIGJlIGZvdW5kIGluIHRoZSBm b2xsb3dpbmcgUHVsbCBSZXF1ZXN0Lg0KDQpbaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9w dWxsLzY0ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2KQ0KDQpTb21l IHRlc3RzIHNlZW0gdG8gYmUgZmFpbGVkLCBidXQgaXQgaXMgbm8gcHJvYmxlbSEgQmVjYXVzZSB0 aGUgZmFpbGVkIHRlc3RzIGFyZSBmb3IgUmVnZXhwIHRpbWVvdXQsIG9wdGltaXphdGlvbiB3b3Jr cyBjb3JyZWN0bHkgYW5kIHNvIHRoZXkgZmFpbGVkIGFzIGV4cGVjdGVkLiBPZiBjb3Vyc2UsIHdl IG5lZWQgdG8gZml4IHRoZXNlIHRlc3RzIGJlZm9yZSBtZXJnaW5nLg0KDQpJbXBsZW1lbnRhdGlv biBub3RlczoNCg0KLSBBIG51bGwtY2hlY2sgb24gbG9vcCBjYXVzZXMgbm9uLWxpbmVhciBiZWhh dmlvciwgc28gdGhlIGZpZWxkIHRvIGluZGV4IHRoZSBsYXRlc3QgbnVsbC1jaGVjayBpdGVtIG9u IHRoZSBzdGFjayBpcyBhZGRlZCB0byBPbmlnU3RhY2tUeXBlLiAoW2h0dHBzOi8vZ2l0aHViLmNv bS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtNDM0NzQ2MGUzNzljZDk3MGJhMGI4OGI0 YWNiMjE1ZWE2MGNiYWUzMDgxMjQ2NzVkZTg4MTFlZWQzNzczNjdhYVI4MzFdKGh0dHBzOi8vZ2l0 aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtNDM0NzQ2MGUzNzljZDk3MGJh MGI4OGI0YWNiMjE1ZWE2MGNiYWUzMDgxMjQ2NzVkZTg4MTFlZWQzNzczNjdhYVI4MzEpKQ0KLSBX aGVuIHRoZSBsb29wIGlzIG51bGwgYW5kIHRoaXMgbG9vcCBoYXMgYSBjYXB0dXJlLCBtYXRjaGlu ZyBiZWhhdmVzIGFzIGEgbW9ub21hbmlhYy4gVG8gcmVwcm9kdWNlIHRoaXMgYmVoYXZpb3IsIGNh Y2hlcyBpbiB0aGUgbG9vcCBpcyBjbGVhcmVkIGFzIG5lY2Vzc2FyeS4gKFtodHRwczovL2dpdGh1 Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLWMzY2ZlMTllZmZmMGNjNTE4MTM4 NDc0MTM4NjA2N2I4MWVhZGIyNTA1YjhiOWIzZjk4MGQxMGY4MTUwMzczOTVSMzQzM10oaHR0cHM6 Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY0ODYvZmlsZXMjZGlmZi1jM2NmZTE5ZWZmZjBj YzUxODEzODQ3NDEzODYwNjdiODFlYWRiMjUwNWI4YjliM2Y5ODBkMTBmODE1MDM3Mzk1UjM0MzMp KQ0KTGlrZSBhIGZsaXAtZmxvcCBvcGVyYXRvciwgd2UgaG9wZSB0byBkcm9wIHRoaXMgaWYgcG9z c2libGUuIEJ1dCBpdCBzdGlsbCByZW1haW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQoNCiMj IyBMaW1pdGF0aW9uDQoNCkNhY2hlLWJhc2VkIG9wdGltaXphdGlvbiBpcyBub3QgYXBwbGllZCBp biB0aGUgZm9sbG93aW5nIGNhc2VzOg0KDQoxLiBSZWdleHAgdXNpbmcgc29tZSBleHRlbnNpb25z IChiYWNrLXJlZmVyZW5jZSBhbmQgc3ViZXhwcmVzc2lvbiBjYWxsLCBsb29rLWFyb3VuZCwgYXRv bWljLCBhYnNlbnQgb3BlcmF0b3JzKSBpcyBub3Qgb3B0aW1pemVkIGJlY2F1c2UgaXQgaXMgaW1w b3NzaWJsZSBvciBoYXJkLiBIb3dldmVyLCBpdCBtYXkgYmUgcG9zc2libGUgZm9yIGxvb2stYXJv dW5kIG9wZXJhdG9ycy4NCjIuIEEgYm91bmRlZCBvciBmaXhlZCB0aW1lcyByZXBldGl0aW9uIG5l c3RpbmcgaW4gYW5vdGhlciByZXBldGl0aW9uIChlLmcuIGAvKGF7Mi4zfSkqL2ApLiBJdCBpcyBh biBpbXBsZW1lbnRhdGlvbiBpc3N1ZSBlbnRpcmVseSwgYnV0IHdlIGJlbGlldmUgaXQgaXMgaGFy ZCB0byBzdXBwb3J0IHRoaXMgY2FzZSBjb3JyZWN0bHkuDQozLiBCb3VuZGVkIG9yIGZpeGVkIHRp bWVzIHJlcGV0aXRpb24gaXMgdG9vIGxhcmdlIChlLmcuIGAvKGF8Yil7MTAwMDAwLDIwMDAwMH0v YCkuIFRoZSBjYWNoZSB0YWJsZSBzaXplIGlzIHByb3BvcnRpb25hbCB0byB0aGUgcHJvZHVjdCBv ZiB0aGUgbnVtYmVyIG9mIGNhY2hlIHBvaW50cyBvZiByZWdleCBhbmQgaW5wdXQgc2l6ZS4gSW4g dGhpcyBjYXNlLCBzaW5jZSB0aGUgbnVtYmVyIG9mIGNhY2hlIHBvaW50cyBiZWNvbWVzIHRvbyBs YXJnZSwgdGhlIG9wdGltaXphdGlvbiBjYW5ub3QgYmUgYXBwbGllZC4NCg0KRXhwZXJpbWVudHMg d2VyZSBjb25kdWN0ZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoZXNlIGxpbWl0YXRpb25zIGFyZSBw cm9ibGVtYXRpYyBpbiBwcmFjdGljZS4gV2UgdXNlZCBPYmplY3RTcGFjZSB0byBjb2xsZWN0IFJl Z2V4cHMgYW5kIGludmVzdGlnYXRlIHdoZXRoZXIgdGhleSBjb3VsZCBiZSBvcHRpbWl6ZWQgYW5k IHRoZSBudW1iZXIgb2YgY2FjaGUgcG9pbnRzLiBSZWdleHBzIHdlcmUgY29sbGVjdGVkIGZyb20g dGhlIHN0YW5kYXJkIGxpYnJhcnksIFdlYnJpY2ssIGFuZCBSYWlscy4gU2VlIHRoZSBmb2xsb3dp bmcgZ2lzdCBmb3IgdGhlIGRldGFpbHMgKFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tYWtlbm93 anVzdC84M2UxZTc1YTJkN2RlOGI5NTZlOTNiZGFjMDA0YTA2Yl0oaHR0cHM6Ly9naXN0LmdpdGh1 Yi5jb20vbWFrZW5vd2p1c3QvODNlMWU3NWEyZDdkZThiOTU2ZTkzYmRhYzAwNGEwNmIpKS4NCg0K VGhlIGV4cGVyaW1lbnRzIHJlc3VsdCBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLg0K DQp8IENvbGxlY3RlZCBmcm9tIHwgIyBSZWdleHAgfCAjIG5vbi1vcHRpbWl6YWJsZSB8IE1heGlt dW0gbnVtYmVyIG9mIGNhY2hlIHBvaW50cyB8DQp8IC0tLSB8IC0tLSB8IC0tLSB8IC0tLSB8DQp8 IHN0ZGxpYiB8IDEwMDkgfCA4NiAoOC41MiUpIHwgODEgfA0KfCBXZWJyaWNrIHwgMzU2IHwgNDQg KDEyLjM2JSkgfCAyMCB8DQp8IFJhaWxzIHwgNzU5IHwgNzQgKDcuNzUlKSB8IDI3IHwNCnwgVG90 YWwgPGJyPiAoRHVwbGljYXRpb25zIGFyZSByZWR1Y2VkKSB8IDE1MDYgfCAxMTggKDcuODQlKSB8 IDgxIHwNCg0KVGhpcyByZXN1bHQgc2hvd3MgdGhhdCB0aGUgcGVyY2VudGFnZSBvZiBub24tb3B0 aW1pemFibGUgUmVnZXhwIGlzIGxlc3MgdGhhbiAxMCUsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9y eSB1c2VkIGZvciBvcHRpbWl6YXRpb24gaXMgYWJvdXQgMTAgdGltZXMgdGhlIGxlbmd0aCBvZiB0 aGUgc3RyaW5nICg4MS84LCBmb3IgYSBiaXQgYXJyYXkpIGF0IHdvcnN0IGluIHRoaXMgY2FzZS4g SXQgaXMgY29uc2lkZXJlZCB0aGF0IGEgc3VmZmljaWVudCBudW1iZXIgb2YgUmVnZXhwIGNhbiBi ZSBvcHRpbWl6ZWQgaW4gcHJhY3RpY2UuDQoNCiMjIFNwZWNpZmljYXRpb24NCg0KVGhlIGRldGFp bGVkIHNwZWNpZmljYXRpb24gaGFzIGJlZW4gZml4ZWQgeWV0LiBXZSBoYXZlIHNvbWUgaWRlYXMg YW5kIHdlIHdvdWxkIGxpa2UgdG8gZGlzY3VzcyB0aGVtLg0KDQotIFdoZW4gaXMgb3B0aW1pemF0 aW9uIGVuYWJsZWQ/IEN1cnJlbnRseSwgaXQgdHVybnMgb24gd2hlbiB0aGUgYmFja3RyYWNrIGNh dXNlcyBhcyBtYW55IGFzIHRoZSBpbnB1dCBsZW5ndGguDQotIEhvdyB0aGUgbnVtYmVyIG9mIGNh Y2hlIHBvaW50cyBpcyBhbGxvd2VkLCBhbmQgaG93IG1lbW9yeSBjYW4gYmUgYWxsb2NhdGVkPyBJ dCBpcyBub3QgZGV0ZXJtaW5lZCBmb3Igbm93Lg0KLSBJZiB0aGUgYWJvdmUgcGFyYW1ldGVycyBj YW4gYmUgc3BlY2lmaWVkIGJ5IHVzZXJzLCBob3cgYXJlIHRoZXkgc3BlY2lmaWVkPyAodmlhIGNv bW1hbmQtbGluZSBmbGFncywgb3Igc3RhdGljIC8gaW5zdGFuY2UgcGFyYW1ldGVycyBsaWtlIGBS ZWdleHAjLnRpbWVvdXQ9YCBhbmQgYFJlZ2V4cCN0aW1lb3V0PWApDQotIFVubGVzcyB0aGUgaW5w dXQgc2l6ZSBpcyB0b28gbGFyZ2UsIHRoZSBhdmFpbGFiaWxpdHkgb2Ygb3B0aW1pemF0aW9uIGNh biBiZSBkZXRlcm1pbmVkIG9uIGNvbXBpbGUtdGltZS4gU28sIHdlIHdvdWxkIGxpa2UgdG8gYWRk IGEgbmV3IGZsYWcgdG8gUmVnZXhwIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY2FjaGUgaXMgYXZh aWxhYmxlLiBJdCBiZWNvbWVzIG9uZSBvZiB0aGUgY3JpdGVyaWEgZm9yIHdoZXRoZXIgUmVnZXhw IGlzIGVmZmljaWVudGx5IGV4ZWN1dGFibGUgb3Igbm90LiBXZSBiZWxpZXZlIGl0IGhlbHBzIHVz ZXJzLiBUaHVzLCB3aGljaCBsZXR0ZXIgaXMgcHJlZmVycmVkIGZvciB0aGlzIHB1cnBvc2U/IGBs YCAobGluZWFyKSBvciBgcmAgKHJlZ3VsYXIpIHNvdW5kcyBnb29kLCBidXQgSSBhbSBub3Qgc3Vy ZSB3aGljaCBpcyB0aGUgYmVzdC4NCg0KVGhhbmsgeW91Lg0KDQoNCg0KLS0gDQpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy8NCg==