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=-2.9 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY, URIBL_GREY shortcircuit=no autolearn=no 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 0E0AA1F4D7 for ; Thu, 12 May 2022 15:56:24 +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="DGwjkIgB"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 29B30120DFC; Fri, 13 May 2022 00:56:21 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id 8CF2D120DF0 for ; Fri, 13 May 2022 00:56:18 +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=Tj746ZKfIO0PNh9toBor0DNrLEFJZgdGN2OQnbXixg0=; b=DGwjkIgBCAbBbZAgl/2+cEtf6+EgHkDV7F8bWUVZaHvwBMdL0muqZlVpR43Zr+RE19sX v9senS6QaqlIR1s5aTQYWjr4qr6yHfJFkTr4rNBu97wq/ozuRgJxko8tD98JAi/TV7voxK QhQ1aso2CEH7TuP47frlNb40jLyArzTr4= Received: by filterdrecv-57fb89798f-mjbl7 with SMTP id filterdrecv-57fb89798f-mjbl7-1-627D2E1E-38 2022-05-12 15:56:14.448985512 +0000 UTC m=+3089555.007868816 Received: from herokuapp.com (unknown) by geopod-ismtpd-5-1 (SG) with ESMTP id 3O1ZsKYzRL-9XVzkJRcQmQ for ; Thu, 12 May 2022 15:56:14.410 +0000 (UTC) Date: Thu, 12 May 2022 15:56: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: 84897 X-SG-EID: =?us-ascii?Q?F18P+2W1KnHe6ISASa+61nUK3i7mN03gxrUl5OPiI2ZTtcWzec3HAg3iwLkXVU?= =?us-ascii?Q?w9NVOsENbVlMKtc9X75yTo7Os1jg2OTxwg8Q8cw?= =?us-ascii?Q?8BUJUvPZw9bPjE2=2F1fsgrEeCG7hFLcuIDKK+bwj?= =?us-ascii?Q?Z5Ei4qI4U6v0Ujtsj0pnqKS1BG7uRv65mYTWVh5?= =?us-ascii?Q?1iLlCHx0InPFP2QVx6so+R4RRcaIEWHHjawR6AT?= =?us-ascii?Q?6+jVu79I2P4FedQJHQqI=2Fr=2Fyku5sPHHr4qCszNP?= =?us-ascii?Q?uy15t9dHKK22q3IiWs14g=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108528 Subject: [ruby-core:108528] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgamVtbWFpIChKZW1tYSBJc3Nyb2ZmKS4K CgpUaGFua3MgZm9yIHRoZSBmZWVkYmFjaywgS29pY2hpLgoKa28xIChLb2ljaGkgU2FzYWRhKSB3 cm90ZSBpbiAjbm90ZS0zOgoKPiAqIGhvdyB0byB1c2UgcGFyZW50IGlkPwoKVGhlIGByYl9zaGFw ZWAgdHlwZSBpcyBhcyBmb2xsb3dzOgoKYGBgCnN0cnVjdCByYl9zaGFwZSB7CiAgICBWQUxVRSBm bGFnczsKICAgIHN0cnVjdCByYl9zaGFwZSAqIHBhcmVudDsKICAgIHN0cnVjdCByYl9pZF90YWJs ZSAqIGVkZ2VzOwogICAgc3RydWN0IHJiX2lkX3RhYmxlICogaXZfdGFibGU7CiAgICBJRCBlZGdl X25hbWU7Cn07CmBgYAoKYHBhcmVudGAgaXMgYSBwb2ludGVyIG9uIHRoZSBzaGFwZSBpdHNlbGYs IGFuZCB3ZSB1c2UgaXQgcHJpbWFyaWx5IGZvciBHQwoKPiAqIGhvdyB0byBmaW5kIG5leHQgaWQg d2l0aCBhZGRpdGlvbmFsIGl2YXI/CgpXaGVuIHdlIGFkZCBhIG5ldyBpdmFyLCBpZiB0aGVyZSBp cyBubyB0cmFuc2l0aW9uIHdlIGhhdmUgdG8gZmluZCBhIG5ldyBJRC4gIFJpZ2h0IG5vdyB3ZSdy ZSBkb2luZyBhIGxpbmVhciBzY2FuIG9mIGF2YWlsYWJsZSBJRHMuICBPbmNlIHdlJ3JlIGNvbmZp ZGVudCBpbiBzaGFwZSBJRCBHQywgd2UnbGwgc3dpdGNoIHRoZSBhbGdvcml0aG0gdG8gc29tZXRo aW5nIG1vcmUgZWZmaWNpZW50IGxpa2UgdXNpbmcgYSBiaXRtYXAKCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg3NzY6IE9iamVjdCBTaGFwZXMKaHR0 cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4Nzc2I2NoYW5nZS05NzU3MAoKKiBBdXRo b3I6IGplbW1haSAoSmVtbWEgSXNzcm9mZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9y bWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmplY3QgU2hh cGVzIGltcGxlbWVudGF0aW9uCgpBYXJvbiBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVsbGUgYW5k IEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24gYW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0IFNoYXBl cyBmb3IgUnVieS4gIFdlIGFyZSBmaWxpbmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBi ZWVuIGRvaW5nLCBhcyB3ZWxsIGFzIGdldCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBpbiBpdHMg Y3VycmVudCBzdGF0ZS4KCldlIGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFsaXpl ZCBwcm9qZWN0IHVwc3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdoYXQgYXJl IE9iamVjdCBTaGFwZXM/CgpPYmplY3Qgc2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVz ZW50aW5nIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRh dGlvbnMsIGluY2x1ZGluZyBbVHJ1ZmZsZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUv dHJ1ZmZsZXJ1YnkpIGFuZCBbVjhdKGh0dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1 ZS4gQ2hyaXMgU2VhdG9uLCB0aGUgY3JlYXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9i amVjdCBzaGFwZXMgaW4gaGlzIFtSdWJ5S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1Ynlr YWlnaS5vcmcvMjAyMS10YWtlb3V0L3ByZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFu ZCBNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZv ciBZSklUIGluIHRoZSBsYXR0ZXIgcGFydCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFd KGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRo ZSBvcmlnaW5hbCBpZGVhIG9mIG9iamVjdCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2Vs ZiBsYW5ndWFnZV0oaHR0cHM6Ly9iaWJsaW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGlj L2ltcGxlbWVudGF0aW9uLnBkZiksIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2Vu ZGFudCBvZiBTbWFsbHRhbGsuCgpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZXQg b2YgYXR0cmlidXRlcyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzKSBh bmQgdGhlaXIgdmFsdWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3RzIGhhdmUg YSBzaGFwZS4gVGhlIHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiBF dmVyeSBlZGdlIGluIHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5zaXRpb24u CgpNb3JlIHNwZWNpZmljYWxseSwgc2V0dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBvbiBhbiBp bnN0YW5jZSBvZiBhbiBvYmplY3QgY3JlYXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gdGhlIGlu c3RhbmNlJ3MgY3VycmVudCBzaGFwZS4gVGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc2hh cGUgdG8gYW5vdGhlci4gVGhlIGVkZ2UgcmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUg dGhhdCBpcyBzZXQuCgpGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRp YWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElE IDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAo SUQgMSkKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBi IChJRCAyKQogIGVuZAplbmQKCmZvbyA9IEZvby5uZXcKYGBgCgpXaGVuIGBGb29gIGlzIGludGlh bGl6ZWQsIGl0cyBzaGFwZSBpcyB0aGUgcm9vdCBzaGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBz aGFwZSByZXByZXNlbnRzIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxl cy4gRWFjaCB0aW1lIGFuIGluc3RhbmNlIHZhcmlhYmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNo YXBlIG9mIHRoZSBpbnN0YW5jZSBjaGFuZ2VzLiBJdCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBA YWAgdG8gYSBzaGFwZSB3aXRoIElEIDEsIGFuZCB0aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0 byBhIHNoYXBlIHdpdGggSUQgMi4gSWYgYEBhYCBpcyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2 YWx1ZSwgaXRzIHNoYXBlIHdpbGwgcmVtYWluIHRoZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRo aXMgc2hhcGUgYWxyZWFkeSBpbmNsdWRlcyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIAoK IVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3 OTE4MzYwLTBhNmM5MWFhLTI1ODctNDhjYi04ZmYyLTdmM2E5NTgzMjg4ZS5zdmcpCgpUaGVyZSBp cyBvbmUgZ2xvYmFsIHNoYXBlIHRyZWUgYW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2Ft ZSBzaGFwZSB0cmFuc2l0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRo ZSBzYW1lIGZpbmFsIHNoYXBlLgoKRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJh cmAgZGVmaW5lZCBhcyBmb2xsb3dzLCB0aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2Ag dGhyb3VnaCB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBG b28ubmV3YCdzIGZpcnN0IHRyYW5zaXRpb246CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0 aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJ RCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEg KElEIDEpCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBA YiAoSUQgMikKICBlbmQKZW5kCgpjbGFzcyBCYXIKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJy ZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAj IFRyYW5zaXRpb25zIHRvIHNoYXBlIGRlZmluZWQgZWFybGllciB2aWEgZWRnZSBAYSAoSUQgMSkK ICAgIEBjID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAz KQogICAgQGIgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElE IDQpCiAgZW5kCmVuZAoKZm9vID0gRm9vLm5ldyAjIGJsdWUgaW4gdGhlIGRpYWdyYW0KYmFyID0g QmFyLm5ldyAjIHJlZCBpbiB0aGUgZGlhZ3JhbQpgYGAKCkluIHRoZSBkaWFncmFtIGJlbG93LCBw dXJwbGUgcmVwcmVzZW50cyBzaGFyZWQgdHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFu c2l0aW9ucyBmb3Igb25seSBgZm9vYCwgYW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZv ciBvbmx5IGBiYXJgLgoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQu Y29tLzE5ODg1NjAvMTY3OTE4ODk5LWYxYTZmMzQ0LWFlNWUtNGRjMC1iMTdhLWZiMTU2ZDFkNTUw Zi5zdmcpCgojIyMgQ2FjaGUgc3RydWN0dXJlCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgd3JpdGVy cywgdGhlIGN1cnJlbnQgc2hhcGUgSUQsIHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3JpdGUgd291 bGQgdHJhbnNpdGlvbiB0byBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFsbCBzdG9y ZWQgaW4gdGhlIGlubGluZSBjYWNoZS4gVGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8gdGhlIGNh Y2hlLgoKRm9yIGluc3RhbmNlIHZhcmlhYmxlIHJlYWRlcnMsIHRoZSBzaGFwZSBJRCBhbmQgaW5z dGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiAgQWdh aW4sIHRoZSBzaGFwZSBJRCBpcyB0aGUgY2FjaGUga2V5LgoKYGBgcnVieQpjbGFzcyBGb28KICBk ZWYgaW5pdGlhbGl6ZQogICAgQGEgPSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEs IGl2IGluZGV4IDAKICAgIEBiID0gMSAjIElDIHNoYXBlX2lkOiAxLCBuZXh0IHNoYXBlOiAyLCBp diBpbmRleCAxCiAgZW5kCiAgICAKICBkZWYgYQogICAgQGEgIyBJQyBzaGFwZV9pZDogMiwgaXYg aW5kZXggMAogIGVuZAplbmQKYGBgCgojIyBSYXRpb25hbGUKCldlIHRoaW5rIHRoYXQgYW4gb2Jq ZWN0IHNoYXBlIGltcGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNy ZWFzZSBpbmxpbmUgY2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFi bGUgb3RoZXIgcG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4 cGxhaW5lZCBiZWxvdy4gCgojIyMgU2ltcGxpZnkgY2FjaGluZwoKVGhlIGN1cnJlbnQgY2FjaGUg aW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB0aGUgY2xhc3Mgb2YgdGhlIHJlY2VpdmVyLiBTaW5j ZSB0aGUgYWRkcmVzcyBvZiB0aGUgY2xhc3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1cnJlbnQgY2Fj aGUgaW1wbGVtZW50YXRpb24gYWxzbyBkZXBlbmRzIG9uIGFuIGluY3JlbWVudGluZyBzZXJpYWwg bnVtYmVyIHNldCBvbiB0aGUgY2xhc3MgKHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhlIHNoYXBlIGlt cGxlbWVudGF0aW9uIGhhcyBubyBzdWNoIGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVxdWlyZXMgY2hl Y2tpbmcgdGhlIHNoYXBlIElEIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgaXMgdmFsaWQuCgoj IyMgQ2FjaGUgaGl0cwoKT2JqZWN0cyB0aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9y ZGVyIGNhbiBzaGFyZSBzaGFwZXMuICBGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgSG9nZQog IGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290 IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUg dmlhIGVkZ2UgbmFtZWQgQGEKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQgc2hhcGUg dmlhIGVkZ2UgbmFtZWQgQGIKICBlbmQKZW5kCgpjbGFzcyBGdWdhIDwgSG9nZTsgZW5kCgpob2dl ID0gSG9nZS5uZXcKZnVnYSA9IEZ1Z2EubmV3CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRo ZSBpbnN0YW5jZXMgYGhvZ2VgIGFuZCBgZnVnYWAgd2lsbCBzaGFyZSB0aGUgc2FtZSBzaGFwZSBJ RC4gIFRoaXMgbWVhbnMgaW5saW5lIGNhY2hlcyBpbiBgaW5pdGlhbGl6ZWAgd2lsbCBoaXQgaW4g Ym90aCBjYXNlcy4gIFRoaXMgY29udHJhc3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gdGhhdCB1c2VzIHRoZSBjbGFzcyBhcyB0aGUgY2FjaGUga2V5LiAgSW4gb3RoZXIgd29yZHMs IHdpdGggb2JqZWN0IHNoYXBlcyB0aGUgYWJvdmUgY29kZSB3aWxsIGhpdCBpbmxpbmUgY2FjaGVz IHdoZXJlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgbWlzcy4KCklmIHBlcmZvcm1h bmNlIHRlc3RpbmcgcmV2ZWFscyB0aGF0IGNhY2hlIGhpdHMgYXJlICpub3QqIHN1YnN0YW50aWFs bHkgaW1wcm92ZWQsIHRoZW4gd2UgY2FuIHVzZSBzaGFwZXMgdG8gcmVjbGFpbSBtZW1vcnkgZnJv bSBgUkJhc2ljYC4gV2UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBlbmNvZGluZyB0aGUgY2xhc3Mg d2l0aGluIHRoZSBzaGFwZSB0cmVlLiBUaGlzIHdpbGwgaGF2ZSBhbiBlcXVpdmFsZW50IGNhY2hl IGhpdCByYXRlIHRvIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSBjbGFzcyBp cyBlbmNvZGVkIHdpdGhpbiB0aGUgc2hhcGUgdHJlZSwgd2UgY2FuIHJlbW92ZSB0aGUgY2xhc3Mg cG9pbnRlciBmcm9tIGBSQmFzaWNgIGFuZCBlaXRoZXIgcmVjbGFpbSB0aGF0IG1lbW9yeSBvciBm cmVlIGl0IGZvciBhbm90aGVyIHVzZS4KCiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZwoK V2UgY2FuIGVuY29kZSBhdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluc3RhbmNlIHZhcmlhYmxlcyBp bnRvIGFuIG9iamVjdCdzIHNoYXBlLiBDdXJyZW50bHksIHdlIGFsc28gaW5jbHVkZSBmcm96ZW4g d2l0aGluIHRoZSBzaGFwZS4gVGhpcyBtZWFucyB3ZSBjYW4gbGltaXQgZnJvemVuIGNoZWNrcyB0 byBvbmx5IGNhY2hlIG1pc3Nlcy4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6Cgpg YGBydWJ5CmNsYXNzIFRvdG8KICBkZWYgc2V0X2EKICAgIEBhID0gMSAjIGNhY2hlOiBzaGFwZTog MCwgbmV4dCBzaGFwZTogMSwgSVYgaWR4OiAwCiAgZW5kCmVuZAoKdG90byA9IFRvdG8ubmV3ICMg c2hhcGUgMAp0b3RvLnNldF9hICAgICAjIHNoYXBlIDEKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBl IDAKdG90by5mcmVlemUgICAgIyBzaGFwZSAyCnRvdG8uc2V0X2EgICAgICMgQ2FjaGUgbWlzcywg RXhjZXB0aW9uIQpgYGAKCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50 LmNvbS8xOTg4NTYwLzE2NzkyMDAwMS1jNGU2MzI2Yi0zYTNjLTQ4M2ItYTc5Ny05ZTAyMzE3NjQ3 ZDcuc3ZnKQoKV2l0aG91dCBzaGFwZXMsIGFsbCBpbnN0YW5jZSB2YXJpYWJsZSBzZXRzIHJlcXVp cmUgY2hlY2tpbmcgdGhlIGZyb3plbiBzdGF0dXMgb2YgdGhlIG9iamVjdC4gV2l0aCBzaGFwZXMs IHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZnJvemVuIHN0YXR1cyBvbiBjYWNoZSBtaXNzZXMu CgpXZSBjYW4gYWxzbyBlbGltaW5hdGUgZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRo IHRoZSBpbnRyb2R1Y3Rpb24gb2Ygb2JqZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUg cmVwcmVzZW50cyBhbiBvYmplY3QgdGhhdCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRl ZC4gSklUcyBjYW4gcG9zc2libHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVy YXRpbmcgc3BlY2lhbGl6ZWQgbWFjaGluZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIAogICAg CiMjIyBDbGFzcyBpbnN0YW5jZSB2YXJpYWJsZXMgY2FuIGJlIHN0b3JlZCBpbiBhbiBhcnJheQoK Q3VycmVudGx5LCBgVF9DTEFTU2AgYW5kIGBUX01PRFVMRWAgaW5zdGFuY2VzIGNhbm5vdCB1c2Ug dGhlIHNhbWUgSVYgaW5kZXggdGFibGUgb3B0aW1pemF0aW9uIHRoYXQgYFRfT0JKRUNUYCBpbnN0 YW5jZXMgdXNlLiAgV2UgdGhpbmsgdGhhdCB0aGUgb2JqZWN0IHNoYXBlcyB0ZWNobmlxdWUgY2Fu IGJlIGxldmVyYWdlZCBieSBjbGFzcyBpbnN0YW5jZXMgdG8gdXNlIGFycmF5cyBmb3IgY2xhc3Mg aW5zdGFuY2UgdmFyaWFibGUgc3RvcmFnZSBhbmQgbWF5IHBvc3NpYmx5IGxlYWQgdG8gYSByZWR1 Y3Rpb24gaW4gbWVtb3J5IHVzYWdlICh0aG91Z2ggd2UgaGF2ZSB5ZXQgdG8gdGVzdCB0aGlzKS4K CiMjIEltcGxlbWVudGF0aW9uIERldGFpbHMKCltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVt bWFpc3Nyb2ZmL3J1YnkvY29tbWl0LzRlOTVkMDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUw NDczOWUpIGlzIGEgbGluayB0byBvdXIgY29kZSBzbyBmYXIuCgpBcyBtZW50aW9uZWQgZWFybGll ciwgc2hhcGUgb2JqZWN0cyBmb3JtIGEgdHJlZSBkYXRhIHN0cnVjdHVyZS4gIEluIG9yZGVyIHRv IGxvb2sgdXAgdGhlIHNoYXBlIHF1aWNrbHksIHdlIGFsc28gc3RvcmUgdGhlIHNoYXBlcyBpbiBh IHdlYWsgYXJyYXkgdGhhdCBpcyBzdG9yZWQgb24gdGhlIFZNLiAgVGhlIElEIG9mIHRoZSBzaGFw ZSBpcyB0aGUgaW5kZXggaW4gdG8gdGhlIGFycmF5LCBhbmQgdGhlIElEIGlzIHN0b3JlZCBvbiB0 aGUgb2JqZWN0LgoKRm9yIGBUX09CSkVDVGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElE IGluIHRoZSBvYmplY3QncyBoZWFkZXIuIE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIg Yml0cyBhcmUgdXNlZCBieSBSYWN0b3JzLiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVu YWJsZWQgb24gMzIgYml0IHN5c3RlbXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRz IHVzIHRvIHRoZSBib3R0b20gMzIgYml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3Ag MjAgYml0cyBmb3IgYFRfT0JKRUNUYCBvYmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhl IHRvcCAxNiBiaXRzIGZvciB0aGUgc2hhcGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMg YmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUg aGVhZGVyIGJpdHMgaXMgZWFzaWVyLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRz IHVzIHRvIH42NWsgc2hhcGVzLiBXZSBtZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2Vk IG9uIGEgc2ltcGxlIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlz Y291cnNlKSBhcHBsaWNhdGlvbiAofjMuNWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIu Y29tL2swa3VidW4vcmFpbHNiZW5jaCkgKH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0 ZXN0IHN1aXRlICh+NDBrKS4gQWNjb3JkaW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdh cmJhZ2UgY29sbGVjdGlvbiBvbiBvYmplY3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBl IElEcyB3aGljaCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2lu ZyBvbiBzaGFwZSBHQy4KCkV2ZW4gdGhvdWdoIGl0J3MgdW5saWtlbHksIGl0J3Mgc3RpbGwgcG9z c2libGUgZm9yIGFuIGFwcGxpY2F0aW9uIHRvIHJ1biBvdXQgb2Ygc2hhcGVzLiBPbmNlIGFsbCBz aGFwZSBJRHMgYXJlIGluIHVzZSwgYW55IG9iamVjdHMgdGhhdCBuZWVkIG5ldyBzaGFwZSBJRHMg d2lsbCBuZXZlciBoaXQgb24gaW5saW5lIGNhY2hlcy4KCiMjIEV2YWx1YXRpb24KCldlIGhhdmUg c28gZmFyIHRlc3RlZCB0aGlzIGJyYW5jaCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHVi LmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNv bS9rMGt1YnVuL3JhaWxzYmVuY2gpIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8g dGVzdCB0aGlzIGJyYW5jaCBtb3JlIGJyb2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNl IFJ1YnkgYW5kIFJhaWxzIGFwcGxpY2F0aW9ucy4gCgpCZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBi cmFuY2ggdG8gYmUgcmVhZHkgZm9yIGZvcm1hbCByZXZpZXcsIHdlIHdhbnQgdGhlIHJ1bnRpbWUg cGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBiZW5jaG1hcmtzIHRvIGJlIGVx dWl2YWxlbnQgb3IgYmV0dGVyIHRoYW4gaXQgaXMgY3VycmVudGx5LiBJbiBvdXIgb3Bpbmlvbiwg ZXZlbiB3aXRoIGVxdWl2YWxlbnQgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdl LCB0aGUgZnV0dXJlIGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2ggbWFrZSB0aGUgY2hhbmdlIHNl ZW0gd29ydGh3aGlsZS4KCiMjIEZlZWRiYWNrCgpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNv bW1lbnRzLCBvciBxdWVzdGlvbnMsIHBsZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3Vy IGJlc3QgdG8gYWRkcmVzcyBpdC4gVGhhbmsgeW91IQoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvCg==