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.5 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_GREY 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 E2A781F4D7 for ; Wed, 11 May 2022 21:02:27 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sendgrid.me header.i=@sendgrid.me header.b="vwJIiHv3"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 2CC67120F00; Thu, 12 May 2022 06:02:23 +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 05D23120EFC for ; Thu, 12 May 2022 06:02:20 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.me; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to; s=smtpapi; bh=G7thqq8bLTdNgyBW/8HHW8bjAGz3apmlWX/f7mwg8tg=; b=vwJIiHv33z6JdJAL253NlhngwTrjXCbG6PAK7cNin1GOazKalZHaLnc8fbcSIlLzaE3W HlzmU9/BV6KauoXY68MEc4akgYEjca6Gt5gAlhp6Eq5Nm1/s/DkG0Hcj4IwquAjfd+cTpI 4dc2rWRRLz8kwZyFDN+jINIjQzoCH1hHA= Received: by filterdrecv-74cbf9986b-cwknx with SMTP id filterdrecv-74cbf9986b-cwknx-1-627C2456-13 2022-05-11 21:02:14.091289704 +0000 UTC m=+3021457.439923540 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-0 (SG) with ESMTP id 5Ns9PUvRQ2insBTh0Lxn0A for ; Wed, 11 May 2022 21:02:14.059 +0000 (UTC) Date: Wed, 11 May 2022 21:02:14 +0000 (UTC) From: "jemmai (Jemma Issroff)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 18776 X-Redmine-Issue-Author: jemmai X-Redmine-Sender: jemmai 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: 84891 X-SG-EID: =?us-ascii?Q?F18P+2W1KnHe6ISASa+61nUK3i7mN03gxrUl5OPiI2ZTtcWzec3HAg3iwLkXVU?= =?us-ascii?Q?w9NVOsENbVlMKtc9X75yTo7Os1jg2OTxwg8Q8cw?= =?us-ascii?Q?8BUJUsPpJbcFvb67C6SskCr35ECm+w9R9RqPq5r?= =?us-ascii?Q?gr4vACl7+Dp4qf2ajV8swRCqAkLc+W+KQFhyVe+?= =?us-ascii?Q?Yv7Llf74FFNFK9Ig=2Fm75vc1q36Nahwtt7eWrZpd?= =?us-ascii?Q?Qu0QTxs+DxvBbTR5UdBq4OHci8UKE3mYUjw86P0?= =?us-ascii?Q?Q+vPKDK13vSpkOfzFgL9Q=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108522 Subject: [ruby-core:108522] [Ruby master Feature#18776] Object Shapes 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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGplbW1haSAoSmVtbWEgSXNzcm9mZiku CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE4Nzc2 OiBPYmplY3QgU2hhcGVzCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xODc3NgoK KiBBdXRob3I6IGplbW1haSAoSmVtbWEgSXNzcm9mZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0 eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmpl Y3QgU2hhcGVzIGltcGxlbWVudGF0aW9uCgpBYXJvbiBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVs bGUgYW5kIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24gYW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0 IFNoYXBlcyBmb3IgUnVieS4gIFdlIGFyZSBmaWxpbmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3 ZSd2ZSBiZWVuIGRvaW5nLCBhcyB3ZWxsIGFzIGdldCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBp biBpdHMgY3VycmVudCBzdGF0ZS4KCldlIGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZp bmFsaXplZCBwcm9qZWN0IHVwc3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdo YXQgYXJlIE9iamVjdCBTaGFwZXM/CgpPYmplY3Qgc2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3Ig cmVwcmVzZW50aW5nIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBs ZW1lbnRhdGlvbnMsIGluY2x1ZGluZyBbVHJ1ZmZsZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9v cmFjbGUvdHJ1ZmZsZXJ1YnkpIGFuZCBbVjhdKGh0dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRl Y2huaXF1ZS4gQ2hyaXMgU2VhdG9uLCB0aGUgY3JlYXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vz c2VkIG9iamVjdCBzaGFwZXMgaW4gaGlzIFtSdWJ5S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczov L3J1YnlrYWlnaS5vcmcvMjAyMS10YWtlb3V0L3ByZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0 bWwpIGFuZCBNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRp b25zIGZvciBZSklUIGluIHRoZSBsYXR0ZXIgcGFydCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdp IDIwMjFdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAw cykuIFRoZSBvcmlnaW5hbCBpZGVhIG9mIG9iamVjdCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0 aGUgU2VsZiBsYW5ndWFnZV0oaHR0cHM6Ly9iaWJsaW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9f c3RhdGljL2ltcGxlbWVudGF0aW9uLnBkZiksIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3Qg ZGVzY2VuZGFudCBvZiBTbWFsbHRhbGsuCgpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZp YyBzZXQgb2YgYXR0cmlidXRlcyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0 aWVzKSBhbmQgdGhlaXIgdmFsdWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3Rz IGhhdmUgYSBzaGFwZS4gVGhlIHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0 dXJlLiBFdmVyeSBlZGdlIGluIHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5z aXRpb24uCgpNb3JlIHNwZWNpZmljYWxseSwgc2V0dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBv biBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgY3JlYXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20g dGhlIGluc3RhbmNlJ3MgY3VycmVudCBzaGFwZS4gVGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBv bmUgc2hhcGUgdG8gYW5vdGhlci4gVGhlIGVkZ2UgcmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFy aWFibGUgdGhhdCBpcyBzZXQuCgpGb3IgZXhhbXBsZToKCmBgYHJ1Ynk9CmNsYXNzIEZvbwogIGRl ZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNo YXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVk Z2UgQGEgKElEIDEpCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEg ZWRnZSBAYiAoSUQgMikKICBlbmQKZW5kCgpmb28gPSBGb28ubmV3CmBgYAoKV2hlbiBgRm9vYCBp cyBpbnRpYWxpemVkLCBpdHMgc2hhcGUgaXMgdGhlIHJvb3Qgc2hhcGUgd2l0aCBJRCAwLiAgVGhl IHJvb3Qgc2hhcGUgcmVwcmVzZW50cyBhbiBlbXB0eSBvYmplY3Qgd2l0aCBubyBpbnN0YW5jZSB2 YXJpYWJsZXMuIEVhY2ggdGltZSBhbiBpbnN0YW5jZSB2YXJpYWJsZSBpcyBzZXQgb24gYGZvb2As IHRoZSBzaGFwZSBvZiB0aGUgaW5zdGFuY2UgY2hhbmdlcy4gSXQgZmlyc3QgdHJhbnNpdGlvbnMg d2l0aCBgQGFgIHRvIGEgc2hhcGUgd2l0aCBJRCAxLCBhbmQgdGhlbiB0cmFuc2l0aW9ucyB3aXRo IGBAYmAgdG8gYSBzaGFwZSB3aXRoIElEIDIuIElmIGBAYWAgaXMgdGhlbiBzZXQgdG8gYSBkaWZm ZXJlbnQgdmFsdWUsIGl0cyBzaGFwZSB3aWxsIHJlbWFpbiB0aGUgc2hhcGUgd2l0aCBJRCAyLCBz aW5jZSB0aGlzIHNoYXBlIGFscmVhZHkgaW5jbHVkZXMgdGhlIGluc3RhbmNlIHZhcmlhYmxlIGBA YWAuICAKCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4 NTYwLzE2NzkxODM2MC0wYTZjOTFhYS0yNTg3LTQ4Y2ItOGZmMi03ZjNhOTU4MzI4OGUuc3ZnKQoK VGhlcmUgaXMgb25lIGdsb2JhbCBzaGFwZSB0cmVlIGFuZCBvYmplY3RzIHdoaWNoIHVuZGVyZ28g dGhlIHNhbWUgc2hhcGUgdHJhbnNpdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIgd2lsbCBlbmQgdXAg d2l0aCB0aGUgc2FtZSBmaW5hbCBzaGFwZS4KCkZvciBpbnN0YW5jZSwgaWYgd2UgaGF2ZSBhIGNs YXNzIGBCYXJgIGRlZmluZWQgYXMgZm9sbG93cywgdGhlIGZpcnN0IHRyYW5zaXRpb24gb24gYEJh ci5uZXdgIHRocm91Z2ggdGhlIGluc3RhbmNlIHZhcmlhYmxlIGBAYWAgd2lsbCBiZSB0aGUgc2Ft ZSBhcyBgRm9vLm5ld2AncyBmaXJzdCB0cmFuc2l0aW9uOgoKYGBgcnVieT0KY2xhc3MgRm9vCiAg ZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qg c2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEg ZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZp YSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQKCmNsYXNzIEJhcgogIGRlZiBpbml0aWFsaXplCiAg ICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAg QGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gc2hhcGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBh IChJRCAxKQogICAgQGMgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2Ug QGMgKElEIDMpCiAgICBAYiA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRn ZSBAYiAoSUQgNCkKICBlbmQKZW5kCgpmb28gPSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3Jh bQpiYXIgPSBCYXIubmV3ICMgcmVkIGluIHRoZSBkaWFncmFtCmBgYAoKSW4gdGhlIGRpYWdyYW0g YmVsb3csIHB1cnBsZSByZXByZXNlbnRzIHNoYXJlZCB0cmFuc2l0aW9ucywgYmx1ZSByZXByZXNl bnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBmb29gLCBhbmQgcmVkIHJlcHJlc2VudHMgdHJhbnNp dGlvbnMgZm9yIG9ubHkgYGJhcmAuCgohW10oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2Vy Y29udGVudC5jb20vMTk4ODU2MC8xNjc5MTg4OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIx NTZkMWQ1NTBmLnN2ZykKCiMjIyBDYWNoZSBzdHJ1Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJpYWJs ZSB3cml0ZXJzLCB0aGUgY3VycmVudCBzaGFwZSBJRCwgdGhlIHNoYXBlIElEIHRoYXQgaXZhciB3 cml0ZSB3b3VsZCB0cmFuc2l0aW9uIHRvIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUg YWxsIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtleSB0 byB0aGUgY2FjaGUuCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElE IGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2Fj aGUuICBBZ2FpbiwgdGhlIHNoYXBlIElEIGlzIHRoZSBjYWNoZSBrZXkuCgpgYGBydWJ5PQpjbGFz cyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgQGEgPSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQg c2hhcGU6IDEsIGl2IGluZGV4IDAKICAgIEBiID0gMSAjIElDIHNoYXBlX2lkOiAxLCBuZXh0IHNo YXBlOiAyLCBpdiBpbmRleCAxCiAgZW5kCiAgICAKICBkZWYgYQogICAgQGEgIyBJQyBzaGFwZV9p ZDogMiwgaXYgaW5kZXggMQogIGVuZAplbmQKYGBgCgojIyBSYXRpb25hbGUKCldlIHRoaW5rIHRo YXQgYW4gb2JqZWN0IHNoYXBlIGltcGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hl Y2tzLCBpbmNyZWFzZSBpbmxpbmUgY2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3Ms IGFuZCBlbmFibGUgb3RoZXIgcG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBh cmUgYWxsIGV4cGxhaW5lZCBiZWxvdy4gCgojIyMgU2ltcGxpZnkgY2FjaGluZwoKVGhlIGN1cnJl bnQgY2FjaGUgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB0aGUgY2xhc3Mgb2YgdGhlIHJlY2Vp dmVyLiBTaW5jZSB0aGUgYWRkcmVzcyBvZiB0aGUgY2xhc3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1 cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gYWxzbyBkZXBlbmRzIG9uIGFuIGluY3JlbWVudGlu ZyBzZXJpYWwgbnVtYmVyIHNldCBvbiB0aGUgY2xhc3MgKHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhl IHNoYXBlIGltcGxlbWVudGF0aW9uIGhhcyBubyBzdWNoIGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVx dWlyZXMgY2hlY2tpbmcgdGhlIHNoYXBlIElEIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgaXMg dmFsaWQuCgojIyMgQ2FjaGUgaGl0cwoKT2JqZWN0cyB0aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRo ZSBzYW1lIG9yZGVyIGNhbiBzaGFyZSBzaGFwZXMuICBGb3IgZXhhbXBsZToKCmBgYHJ1Ynk9CmNs YXNzIEhvZ2UKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBp cyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIHRoZSBu ZXh0IHNoYXBlIHZpYSBlZGdlIG5hbWVkIEBhCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBu ZXh0IHNoYXBlIHZpYSBlZGdlIG5hbWVkIEBiCiAgZW5kCmVuZAoKY2xhc3MgRnVnYSA8IEhvZ2U7 IGVuZAoKaG9nZSA9IEhvZ2UubmV3CmZ1Z2EgPSBGdWdhLm5ldwpgYGAKCkluIHRoZSBhYm92ZSBl eGFtcGxlLCB0aGUgaW5zdGFuY2VzIGBob2dlYCBhbmQgYGZ1Z2FgIHdpbGwgc2hhcmUgdGhlIHNh bWUgc2hhcGUgSUQuICBUaGlzIG1lYW5zIGlubGluZSBjYWNoZXMgaW4gYGluaXRpYWxpemVgIHdp bGwgaGl0IGluIGJvdGggY2FzZXMuICBUaGlzIGNvbnRyYXN0cyB3aXRoIHRoZSBjdXJyZW50IGlt cGxlbWVudGF0aW9uIHRoYXQgdXNlcyB0aGUgY2xhc3MgYXMgdGhlIGNhY2hlIGtleS4gIEluIG90 aGVyIHdvcmRzLCB3aXRoIG9iamVjdCBzaGFwZXMgdGhlIGFib3ZlIGNvZGUgd2lsbCBoaXQgaW5s aW5lIGNhY2hlcyB3aGVyZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3aWxsIG1pc3MuCgpJ ZiBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJldmVhbHMgdGhhdCBjYWNoZSBoaXRzIGFyZSAqbm90KiBz dWJzdGFudGlhbGx5IGltcHJvdmVkLCB0aGVuIHdlIGNhbiB1c2Ugc2hhcGVzIHRvIHJlY2xhaW0g bWVtb3J5IGZyb20gYFJCYXNpY2AuIFdlIGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgZW5jb2Rpbmcg dGhlIGNsYXNzIHdpdGhpbiB0aGUgc2hhcGUgdHJlZS4gVGhpcyB3aWxsIGhhdmUgYW4gZXF1aXZh bGVudCBjYWNoZSBoaXQgcmF0ZSB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gT25jZSB0 aGUgY2xhc3MgaXMgZW5jb2RlZCB3aXRoaW4gdGhlIHNoYXBlIHRyZWUsIHdlIGNhbiByZW1vdmUg dGhlIGNsYXNzIHBvaW50ZXIgZnJvbSBgUkJhc2ljYCBhbmQgZWl0aGVyIHJlY2xhaW0gdGhhdCBt ZW1vcnkgb3IgZnJlZSBpdCBmb3IgYW5vdGhlciB1c2UuCgojIyMgRGVjcmVhc2VzIHJ1bnRpbWUg Y2hlY2tpbmcKCldlIGNhbiBlbmNvZGUgYXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbnN0YW5jZSB2 YXJpYWJsZXMgaW50byBhbiBvYmplY3QncyBzaGFwZS4gQ3VycmVudGx5LCB3ZSBhbHNvIGluY2x1 ZGUgZnJvemVuIHdpdGhpbiB0aGUgc2hhcGUuIFRoaXMgbWVhbnMgd2UgY2FuIGxpbWl0IGZyb3pl biBjaGVja3MgdG8gb25seSBjYWNoZSBtaXNzZXMuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2lu ZyBjb2RlOgoKYGBgcnVieT0KY2xhc3MgVG90bwogIGRlZiBzZXRfYQogICAgQGEgPSAxICMgY2Fj aGU6IHNoYXBlOiAwLCBuZXh0IHNoYXBlOiAxLCBJViBpZHg6IDAKICBlbmQKZW5kCgp0b3RvID0g VG90by5uZXcgIyBzaGFwZSAwCnRvdG8uc2V0X2EgICAgICMgc2hhcGUgMQoKdG90byA9IFRvdG8u bmV3ICMgc2hhcGUgMAp0b3RvLmZyZWV6ZSAgICAjIHNoYXBlIDIKdG90by5zZXRfYSAgICAgIyBD YWNoZSBtaXNzLCBFeGNlcHRpb24hCmBgYAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVi dXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTIwMDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3 LTllMDIzMTc2NDdkNy5zdmcpCgpXaXRob3V0IHNoYXBlcywgYWxsIGluc3RhbmNlIHZhcmlhYmxl IHNldHMgcmVxdWlyZSBjaGVja2luZyB0aGUgZnJvemVuIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBX aXRoIHNoYXBlcywgd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNh Y2hlIG1pc3Nlcy4KCldlIGNhbiBhbHNvIGVsaW1pbmF0ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQg Y2hlY2tzIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBvYmplY3Qgc2hhcGVzLiBBbnkgcGFydGlj dWxhciBzaGFwZSByZXByZXNlbnRzIGFuIG9iamVjdCB0aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVk IG9yIGVtYmVkZGVkLiBKSVRzIGNhbiBwb3NzaWJseSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZh Y3QgYnkgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBtYWNoaW5lIGNvZGUgYmFzZWQgb24gdGhlIHNo YXBlcy4gCiAgICAKIyMjIENsYXNzIGluc3RhbmNlIHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGlu IGFuIGFycmF5CgpDdXJyZW50bHksIGBUX0NMQVNTYCBhbmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMg Y2Fubm90IHVzZSB0aGUgc2FtZSBJViBpbmRleCB0YWJsZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9P QkpFQ1RgIGluc3RhbmNlcyB1c2UuICBXZSB0aGluayB0aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRl Y2huaXF1ZSBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGNsYXNzIGluc3RhbmNlcyB0byB1c2UgYXJyYXlz IGZvciBjbGFzcyBpbnN0YW5jZSB2YXJpYWJsZSBzdG9yYWdlIGFuZCBtYXkgcG9zc2libHkgbGVh ZCB0byBhIHJlZHVjdGlvbiBpbiBtZW1vcnkgdXNhZ2UgKHRob3VnaCB3ZSBoYXZlIHlldCB0byB0 ZXN0IHRoaXMpLgoKIyMgSW1wbGVtZW50YXRpb24gRGV0YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0 aHViLmNvbS9qZW1tYWlzc3JvZmYvcnVieS9jb21taXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBj ZjRlNWM3ZGFjNTA0NzM5ZSkgaXMgYSBsaW5rIHRvIG91ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRp b25lZCBlYXJsaWVyLCBzaGFwZSBvYmplY3RzIGZvcm0gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiAg SW4gb3JkZXIgdG8gbG9vayB1cCB0aGUgc2hhcGUgcXVpY2tseSwgd2UgYWxzbyBzdG9yZSB0aGUg c2hhcGVzIGluIGEgd2VhayBhcnJheSB0aGF0IGlzIHN0b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQg b2YgdGhlIHNoYXBlIGlzIHRoZSBpbmRleCBpbiB0byB0aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMg c3RvcmVkIG9uIHRoZSBvYmplY3QuCgpGb3IgYFRfT0JKRUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0 aGUgc2hhcGUgSUQgaW4gdGhlIG9iamVjdCdzIGhlYWRlci4gT24gNjQgYml0IHN5c3RlbXMsIHRo ZSB1cHBlciAzMiBiaXRzIGFyZSB1c2VkIGJ5IFJhY3RvcnMuICBXZSB3YW50IG9iamVjdCBzaGFw ZXMgdG8gYmUgZW5hYmxlZCBvbiAzMiBiaXQgc3lzdGVtcyBhbmQgNjQgYml0IHN5c3RlbXMgc28g dGhhdCBsaW1pdHMgdXMgdG8gdGhlIGJvdHRvbSAzMiBiaXRzIG9mIHRoZSBPYmplY3QgaGVhZGVy LiAgVGhlIHRvcCAyMCBiaXRzIGZvciBgVF9PQkpFQ1RgIG9iamVjdHMgd2FzIHVudXNlZCwgc28g d2UgdXNlZCB0aGUgdG9wIDE2IGJpdHMgZm9yIHRoZSBzaGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0 b3AgMTYgYml0cyBiZWNhdXNlIHRoaXMgYWxsb3dzIHVzIHRvIHVzZSBgdWludDE2X3RgIGFuZCBt YXNraW5nIHRoZSBoZWFkZXIgYml0cyBpcyBlYXNpZXIuCgpUaGlzIGltcGxlbWVudGF0aW9uIGRl dGFpbCBsaW1pdHMgdXMgdG8gfjY1ayBzaGFwZXMuIFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Yg c2hhcGVzIHVzZWQgb24gYSBzaW1wbGUgW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rp c2NvdXJzZS9kaXNjb3Vyc2UpIGFwcGxpY2F0aW9uICh+My41ayksIFtSYWlsc0JlbmNoXShodHRw czovL2dpdGh1Yi5jb20vazBrdWJ1bi9yYWlsc2JlbmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBt b25vbGl0aCdzIHRlc3Qgc3VpdGUgKH40MGspLiBBY2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBp bXBsZW1lbnQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJl Y3ljbGUgc2hhcGUgSURzIHdoaWNoIGFyZSBubyBsb25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJl bnRseSB3b3JraW5nIG9uIHNoYXBlIEdDLgoKRXZlbiB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQn cyBzdGlsbCBwb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMu IE9uY2UgYWxsIHNoYXBlIElEcyBhcmUgaW4gdXNlLCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3 IHNoYXBlIElEcyB3aWxsIG5ldmVyIGhpdCBvbiBpbmxpbmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlv bgoKV2UgaGF2ZSBzbyBmYXIgdGVzdGVkIHRoaXMgYnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0 cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6 Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4g V2UgcGxhbiB0byB0ZXN0IHRoaXMgYnJhbmNoIG1vcmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwg b3BlbiBzb3VyY2UgUnVieSBhbmQgUmFpbHMgYXBwbGljYXRpb25zLiAKCkJlZm9yZSB3ZSBjb25z aWRlciB0aGlzIGJyYW5jaCB0byBiZSByZWFkeSBmb3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0 aGUgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFy a3MgdG8gYmUgZXF1aXZhbGVudCBvciBiZXR0ZXIgdGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91 ciBvcGluaW9uLCBldmVuIHdpdGggZXF1aXZhbGVudCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBt ZW1vcnkgdXNhZ2UsIHRoZSBmdXR1cmUgYmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRo ZSBjaGFuZ2Ugc2VlbSB3b3J0aHdoaWxlLgoKIyMgRmVlZGJhY2sKCklmIHlvdSBoYXZlIGFueSBm ZWVkYmFjaywgY29tbWVudHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCB1cyBrbm93IGFuZCB3 ZSdsbCBkbyBvdXIgYmVzdCB0byBhZGRyZXNzIGl0LiBUaGFuayB5b3UhCgoKCi0tIApodHRwczov L2J1Z3MucnVieS1sYW5nLm9yZy8K