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_MED,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 C02331F403 for ; Wed, 12 Oct 2022 04:25:38 +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="DftAT29h"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 795DF120A5A; Wed, 12 Oct 2022 13:25:34 +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 1FA90120A4C for ; Wed, 12 Oct 2022 13:25:31 +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=VSRhnrKXGhIfDEP/rTZdbDFMaNURK7x0Ej83Rw2s5IM=; b=DftAT29hdyr7mWxwHmPPcRmIOW09zg9aE3u/tpTpUybYsZWwjevbXXlnpEWbaPbKD+w6 Rh+OBpELWzn8apPbq7f0ImzbCH5qnd4QNbrvPh58c37fKePHHRIX8UNEgd+FWGFpu5Ne/w sJKgnN6XvFpYrxE+Wy2JlGi5PY05o8w1IsWSVwepyW/TutRtlNtAe5b8relupoWCCLwX+h xXZWcFg64RtnTiPPkxezeHhJYtowRoLdAn3rA3TMGh63RLv8vLe2DCb59MJ9rlqiwYtJdn HgxX2dK+ewSb6UgFr7oyLPsozagVg9zqAKb0+X84bAAuFhhsaxLPfE5Mgq0BXQSw== Received: by filterdrecv-9766d65c6-mkllk with SMTP id filterdrecv-9766d65c6-mkllk-1-634641B5-16 2022-10-12 04:25:25.384583702 +0000 UTC m=+1233623.303468171 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-5 (SG) with ESMTP id WHUboxJhSbCp8-oPBb9aow for ; Wed, 12 Oct 2022 04:25:25.369 +0000 (UTC) Date: Wed, 12 Oct 2022 04:25:25 +0000 (UTC) From: "austin (Austin Ziegler)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19024 X-Redmine-Issue-Author: shioyama X-Redmine-Sender: austin 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: 86724 X-SG-EID: =?us-ascii?Q?DZv5R2lXppH4VDtnTbzozZvAfTMQDIuiqc52yQGUxibk2YmwbamuHVhEx30u+N?= =?us-ascii?Q?yD3jEB9fCp=2FPZaTvB2Tz7yxhGfc=2FN=2FzNr0P0mlD?= =?us-ascii?Q?A7179VcMaZZeeFKziPQx+cGIeODw4WJtZmTMxnN?= =?us-ascii?Q?DFyI5WYact7J=2FZeYOc5pfG9gLKp8l6CJd+AO5OT?= =?us-ascii?Q?l99stravuya4zayysL0gCy0BxyHuiKF9gw6Agzk?= =?us-ascii?Q?FAO1hLvckUiql8iMYwN1rwNHK6x69cZtR+DFa+O?= =?us-ascii?Q?Q0xx7QevpYHfeDWIXc4Gw=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110266 Subject: [ruby-core:110266] [Ruby master Feature#19024] Proposal: Import Modules 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" SXNzdWUgIzE5MDI0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYXVzdGluIChBdXN0aW4gWmllZ2xlciku DQoNCg0KQHNoaW95YW1hLCB0aGFua3MgZm9yIHRoZSBkZWVwZXIgZGV0YWlscy4gQXMgcmVxdWVz dGVkLCBJJ20gY29uc2lkZXJpbmcgdGhlIGNvbmNlcHQgb2YgdHJhbnNpdGl2ZSBgcmVxdWlyZWAg b2ZmIHRoZSB0YWJsZS4gSSBoYXZlIGVsaWRlZCBzb21lIG9mIHlvdXIgbWVzc2FnZSBpbiByZXNw b25zZSwgYnV0IEkgKmRvIG5vdCBiZWxpZXZlKiB0aGF0IEkgaGF2ZSBtaXNyZXByZXNlbnRlZCBh bnl0aGluZy4gSSBhbSBhbHNvIHJlcGx5aW5nIHRvICNub3RlLTIwIGJlY2F1c2UgSSBkbyBub3Qg YmVsaWV2ZSB0aGF0IHlvdXIgc3Vic2VxdWVudCBmb2xsb3ctdXAgZnVuZGFtZW50YWxseSBjaGFu Z2VzIG15IHBvc2l0aW9uIGluIGFueSB3YXkuDQoNCnNoaW95YW1hIChDaHJpcyBTYWx6YmVyZykg d3JvdGUgaW4gI25vdGUtMjA6DQo+IEVuY2Fwc3VsYXRpb24gYW5kIG5hbWVzcGFjaW5nIGFyZSBk aXJlY3RseSByZWxhdGVkOiBSdWJ5J3MgbWVjaGFuaXNtIGZvciBlbmNhcHN1bGF0aW9uIF9pc18g bmFtZXNwYWNpbmcuIFlvdSBuYW1lIHNvbWV0aGluZyBpbiBhIGZpbGUgYW5kIGRlZmluZSB3aGF0 IHlvdSB3YW50IHVuZGVyIGl0LCBhbmQgaG9wZSBub2JvZHkgcmVhY2hlcyBpbnRvIHRoYXQgbW9k dWxlIG5hbWVzcGFjZSB3aGVuIHRoZXkgc2hvdWxkbid0LiBZb3UgaGF2ZSBgcHJpdmF0ZV9jb25z dGFudGAgYW5kIHRoYXQncyBhYm91dCBpdC4NCg0KRnVuZGFtZW50YWxseSwgdGhhdCdzIG5vdCB0 cnVlLiBJdCBpcyBfYnkgY29udmVudGlvbl8gdGhhdCBgcmVxdWlyZSAnZm9vJ2AgZGVmaW5lcyBg OjpGb29gLiBJdCBjb3VsZCBkZWZpbmUgYDpGb29gIF9hbmRfIGA6OkJhcmAsIG9yIGl0IGNvdWxk IGp1c3QgZGVmaW5lIGA6OkhvZ2VgLiBJIHRoaW5rIGl0J3MgYSBfZ29vZF8gY29udmVudGlvbi4g QXMgd2UncmUgdGFsa2luZyBhYm91dCBhIG5ldyBmZWF0dXJlLCBpdCBpcyB3b3J0aHdoaWxlIG1h a2luZyBpdCBzbyB0aGF0IGZpbGVuYW1lcyBhcmUgY29ycmVsYXRlZCB0byBkZWZpbmVkIGNvbnN0 YW50c+KApm1vcmUgb3IgbGVzcy4gSSBhbHNvIHRoaW5rIHRoYXQgaXQncyB3b3J0aCBub3Rpbmcg dGhhdCB3ZSBfY3VycmVudGx5XyBoYXZlIG9ubHkgYHByaXZhdGVfY29uc3RhbnRg4oCUYW5kIGl0 IHN0aWxsIGZlZWxzIGxpa2UgYSBuZXcgdGhpbmcgdG8gbWUgKGFsdGhvdWdoIEkgdXNlIGl0IGV4 dGVuc2l2ZWx5IG5vdykuDQoNCj4gW05dYW1lc3BhY2luZyBlbmZvcmNbaW5nXSBlbmNhcHN1bGF0 aW9uIOKApmZ1bmRhbWVudGFsbHkgbWlzYWxpZ25zIHR3byB2ZXJ5IGltcG9ydGFudCBpbmNlbnRp dmVz4oCmDQo+DQo+IFRoZSBmaXJzdCDigKYgaXMgKip0byB3cml0ZSBsZXNzIGNvZGUqKiwgcGFy dGljdWxhcmx5IGJvaWxlcnBsYXRlIGNvZGUuIEl0J3MgbXVjaCBlYXNpZXIgdG8gd3JpdGUgYFBy b2R1Y3RgIHRoYW4gaXQgaXMgdG8gd3JpdGUgYE1lcmNoYW5kaXNpbmc6OlByb2R1Y3RgLCBhbmQg bXVjaCBlYXNpZXIgdG8gbm90IHdyYXAgeW91ciBnZW0gY29kZSBpbiBgbW9kdWxlIE1lcmNoYW5k aXNpbmdgIHRoYW4gaXQgaXMgdG8gd3JhcCBpdC4gVGhlIGludGVycHJldGVyIG1heSB0cmVhdCB0 aGVzZSByb3VnaGx5IHRoZSBzYW1lIHdheSwgYnV0IGh1bWFucyB3aWxsIHNlZSB0aGVtIHF1aXRl IGRpZmZlcmVudGx5IGFuZCBuYXR1cmFsbHkgcHJlZmVyIHRoZSBmb3JtZXIgb3ZlciB0aGUgbGF0 dGVyLg0KDQpJIGRvbid0LCBmdWxsIHN0b3AuIEknbSBkb2luZyBtb3N0IG9mIG15IHdvcmsgdGhl c2UgZGF5cyBpbiBFbGl4aXIsIHdoZXJlIEkgaGF2ZSBgZGVmbW9kdWxlIENvbXBhbnkuUmVzb3Vy Y2VzLlByb2R1Y3RWYXJpYW50YCBmb3Igb3VyIHByb2R1Y3QgdmFyaWFudCBzdHJ1Y3R1cmUuIFll cywgSSByZWZlciB0byB0aGlzIGFzIGBQcm9kdWN0VmFyaWFudGAgaW4gZGlzY3Vzc2lvbnMsIGFu ZCB3aWxsIHVzZSBgYWxpYXMgQ29tcGFueS5SZXNvdXJjZXMuUHJvZHVjdFZhcmlhbnRgIHNvIHRo YXQgX2luIGNvbnRleHRfIHRoZSBvYmplY3QgY2FuIGJlIHJlZmVycmVkIHRvIGFzIGBQcm9kdWN0 VmFyaWFudGDigKZidXQgSSBhbHNvIGhhdmUgYGRlZm1vZHVsZSBDb21wYW55LkdRTC5TY2hlbWEu UHJvZHVjdFZhcmlhbnRgIChtb3JlIG9yIGxlc3MpIG9yIGBkZWZtb2R1bGUgQ29tcGFueS5HUUwu UmVzb2x2ZXIuUHJvZHVjdFZhcmlhbnRgIChhZ2FpbiwgbW9yZSBvciBsZXNzKS4NCg0KSSd2ZSBn b3QgYSBjb2RlYmFzZSB0aGF0IEkgY2Fubm90IF93YWl0XyB0byBoYXZlIHRoZSBvcHBvcnR1bml0 eSB0byByZXdyaXRlIGZyb20gTm9kZS5qcyB0byBFbGl4aXIgb3IgUnVieSwgYmVjYXVzZSB0aGUg bGFjayBvZiBfYW55IHZpYWJsZV8gbmFtZXNwYWNpbmcgYW5kIGluLWJ1aWx0IHN0cnVjdHVyZSBp biBKYXZhU2NyaXB0IGhhcyBtYWRlIHRoZSBjb2RlIGFuIGFic29sdXRlIGRpc2FzdGVyIHRvIHdv cmsgaW4uDQoNCj4gVGhlIHNlY29uZCB0aGluZyB0aGF0IHdlIF93YW50XyB0byBpbmNlbnRpdml6 ZSBpcyAqKnRvIGdyb3VwIHJlbGF0ZWQgY29kZSB0b2dldGhlcioq4oCmDQo+DQo+IFRoaXMgaXMg YSB0ZXJyaWJsZSB0cmFkZW9mZi4gVGhlIHJlYWxpdHkgaXMgdGhhdCBob3dldmVyIG11Y2ggeW91 IGNhbiB0cnkgdG8gZW5jb3VyYWdlICJkb2luZyB0aGUgcmlnaHQgdGhpbmciLCB5b3Ugd2lsbCBh bHdheXMgYmUgZmlnaHRpbmcgYSBsb3NpbmcgYmF0dGxlLiAoSSBzaG91bGQga25vdywgSSdtIGZp Z2h0aW5nIHRoaXMgYmF0dGxlIGV2ZXJ5IGRheSEpIEFuZCB0aGlzIGlzIGEgYmF0dGxlIHdoaWNo IEkgYmVsaWV2ZSBpcyB1bm5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgbGl0ZXJhbCBuYW1lc3BhY2Ug aXMgbW9zdGx5IHJlZHVuZGFudDsgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbHJlYWR5IHNlcnZlcyB0 byBzaWduYWwgZ3JvdXBpbmcuDQoNClJ1YnkgX2lzIG5vdF8gSmF2YSwgUHl0aG9uLCBvciBhbnkg b3RoZXIgbGFuZ3VhZ2Ugd2hpY2ggY2hvc2UgdG8gaGF2ZSBhIHRpZ2h0IHJlbGF0aW9uc2hpcCB0 byB0aGUgZmlsZXN5c3RlbSBmb3IgbW9kdWxlIHNwZWNpZmljYXRpb24uIEkgZG8gdW5kZXJzdGFu ZCB0aGF0IHBhcnQgb2YgeW91ciBkaXNjdXNzaW9uIGlzIHdoZXRoZXIgUnVieSBzaG91bGQgX2hh dmVfIGEgZmlsZXN5c3RlbS1iYXNlZCBtb2R1bGUgc3BlY2lmaWNhdGlvbi4NCg0KPiBUaGUgcG9p bnRzIEkgbWFkZSBhYm92ZSBhcmUgYWJvdXQgX2xpdGVyYWxfIG5hbWVzcGFjZXMsIGJ5IHdoaWNo IEkgbWVhbiBuYW1lc3BhY2VzIHRoYXQgYXJlIGxpdGVyYWxseSB3cml0dGVuIGludG8gdGhlIGZp bGUuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgY2FzZSBvZiBgbG9hZCAiZm9vLnJiIiwgbW9kYCwg d2hlcmUgYG1vZGAgYWN0cyBhcyBuYW1lc3BhY2UgaW4gYGZvby5yYmAgYnV0IGlzIF9pbXBsaWNp dF8uICoqSW4gdGhpcyBjYXNlLCB0aGUgaW5jZW50aXZlcyBhYm92ZSBjYW4gaW4gZmFjdCBiZSBh bGlnbmVkLioqDQoNClRoaXMgZnVuZGFtZW50YWxseSBjaGFuZ2VzIF9ldmVyeXRoaW5nXyBhYm91 dCBSdWJ5IGlmIGl0IHdlcmUgdG8gYmUgYWRvcHRlZCwgYW5kIEkgZGlzYWdyZWUgdGhhdCB0aGlz IHdvdWxkIGJlIGEgbmV0IHBvc2l0aXZlIGNoYW5nZS4NCg0KVGhlIHJlYXNvbiB0aGlzIHdvcmtz IGZvciBKYXZhU2NyaXB0IGlzIGJlY2F1c2UgdGhlcmUncyBhYnNvbHV0ZWx5IF9ub18gbmFtZXNw YWNpbmcgb2YgYW55IHNvcnQsIGV4cGxpY2l0IG9yIGltcGxpY2l0LCBpbiBKYXZhU2NyaXB0LiBO YW1lc3BhY2VzIGFyZSBfc2ltdWxhdGVkXyB0aHJvdWdoIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBj bG9zdXJlcyAoYW5kIHRyZWF0aW5nIGBtb2R1bGUuZXhwb3J0c2Agb3IgYGV4cG9ydCDigKZgIGFz IGRlY2xhcmluZyBhbiBvYmplY3QpLg0KDQpUbyBtYWtlIHRoaXMgd29yayBpbiBSdWJ5LCBpdCBz ZWVtcyB0byBtZSB0aGF0IGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBpbnRyb2R1Y2UgdGhlIGNv bmNlcHQgb2YgYGV4cG9ydGBzIGZvciBSdWJ54oCmYW5kIEkgZG9uJ3QgdGhpbmsgaXQgbWVhbmlu Z2Z1bGx5IGltcHJvdmVzIHJlYWRhYmlsaXR5IG9yIG1haW50YWluYWJpbGl0eS4gVGhlIG9ubHkg Y29uY2VwdCB0aGF0IFJ1YnkgaGFzIGZvciBhbiBleHBvcnQgaXMgYSBjb25zdGFudOKApmFuZCBl dmVuIHdpdGggYGxvYWQgJ2Zvby5yYicsIG1vZGAsIHRoZXJlJ3MgYSBfbG90XyBvZiBzaGFycCBl ZGdlczoNCg0KYGBgY29uc29sZQ0KWzFdIHByeShtYWluKT4gLmNhdCAidGVzdC5yYiINCmZvbyA9 ICJiYXIiDQoNCkJheiA9ICJiYXoiDQoNCmRlZiBob2dlDQogICJob2dlIg0KZW5kDQoNCm1vZHVs ZSBRdXV4DQplbmQNCnByaXZhdGVfY29uc3RhbnQgOlF1dXgNClsyXSBwcnkobWFpbik+IHEgPSBN b2R1bGUubmV3OyBsb2FkICJ0ZXN0LnJiIiwgcQ0KTm9NZXRob2RFcnJvcjogdW5kZWZpbmVkIG1l dGhvZCBgcHJpdmF0ZV9jb25zdGFudCcgZm9yIG1haW46T2JqZWN0DQoNCnByaXZhdGVfY29uc3Rh bnQgOlF1dXgNCl5eXl5eXl5eXl5eXl5eXl4NCkRpZCB5b3UgbWVhbj8gIHByaXZhdGVfbWV0aG9k cw0KZnJvbSB0ZXN0LnJiOjExOmluIGA8dG9wIChyZXF1aXJlZCk+Jw0KYGBgDQoNCkV2ZW4gcmVt b3ZpbmcgYHByaXZhdGVfY29uc3RhbnQgOlF1dXhgLCB0aGVyZSBhcmUgc2hhcnAgZWRnZXM6DQoN CmBgYGNvbnNvbGUNClsxXSBwcnkobWFpbik+IHEgPSBNb2R1bGUubmV3OyBsb2FkICJ0ZXN0LnJi IiwgcQ0KPT4gdHJ1ZQ0KWzJdIHByeShtYWluKT4gcS5CYXoNCk5vTWV0aG9kRXJyb3I6IHVuZGVm aW5lZCBtZXRob2QgYEJheicgZm9yICM8TW9kdWxlOjB4MDAwMDAwMDEwYTM3Y2E3MD4NCmZyb20g KHByeSk6MjppbiBgX19wcnlfXycNClszXSBwcnkobWFpbik+IHE6OkJheg0KPT4gImJheiINCls0 XSBwcnkobWFpbik+IHE6OlF1dXgNCj0+ICM8TW9kdWxlOjB4MDAwMDAwMDEwYTM3Y2E3MD46OlF1 dXgNCls1XSBwcnkobWFpbik+IHE6OmhvZ2UNCk5vTWV0aG9kRXJyb3I6IHVuZGVmaW5lZCBtZXRo b2QgYGhvZ2UnIGZvciAjPE1vZHVsZToweDAwMDAwMDAxMGEzN2NhNzA+DQpmcm9tIChwcnkpOjU6 aW4gYF9fcHJ5X18nDQpbNl0gcHJ5KG1haW4pPiBxLmhvZ2UNCk5vTWV0aG9kRXJyb3I6IHVuZGVm aW5lZCBtZXRob2QgYGhvZ2UnIGZvciAjPE1vZHVsZToweDAwMDAwMDAxMGEzN2NhNzA+DQpmcm9t IChwcnkpOjY6aW4gYF9fcHJ5X18nDQpgYGANCg0KPiB3ZSBoYXZlIGluc3RlYWQgc29tZXRoaW5n IGxpa2UgdGhpcyAoYXNzdW1pbmcgIm15X2NsaWVudF9nZW0iIG9wdHMgaW4gdG8gYmVpbmcgImlt cG9ydGFibGUiLCB3aGF0ZXZlciB0aGF0IG1lYW5zKToNCj4NCj4gYGBgcnVieQ0KPiAjIHBheW1l bnRzL2FwaV9jbGllbnRzL2Zvb19jbGllbnQucmINCj4gYXBpX2NsaWVudCA9IGltcG9ydCAibXlf Y2xpZW50X2dlbS9hcGlfY2xpZW50Ig0KPg0KPiBjbGFzcyBGb29DbGllbnQgPCBhcGlfY2xpZW50 OjpBcGlDbGllbnQNCj4gICAjIC4uLg0KPiBlbmQNCj4NCj4gIyBwYXltZW50cy9hcGlfY2xpZW50 cy9iYXJfY2xpZW50LnJiDQo+IGFwaV9jbGllbnQgPSBpbXBvcnQgIm15X2NsaWVudF9nZW0vYXBp X2NsaWVudCINCj4NCj4gY2xhc3MgQmFyQ2xpZW50IDwgYXBpX2NsaWVudDo6QXBpQ2xpZW50DQo+ ICAgIyAuLi4NCj4gZW5kDQo+DQo+ICMgcGF5bWVudHMucmINCj4gbW9kdWxlIFBheW1lbnRzDQo+ ICAgZm9vX2NsaWVudCA9IGltcG9ydCAiLi9hcGlfY2xpZW50cy9mb29fY2xpZW50Ig0KPiAgIGJh cl9jbGllbnQgPSBpbXBvcnQgIi4vYXBpX2NsaWVudHMvYmFyX2NsaWVudCINCj4NCj4gICAjIGRv IHNvbWV0aGluZyB3aXRoIGZvb19jbGllbnQ6OkZvb0NsaWVudCBhbmQgYmFyX2NsaWVudDo6QmFy Q2xpZW50DQo+IGVuZA0KPiBgYGANCg0KSSBjYW4ndCBfcXVpdGVfIHRlbGwgd2hldGhlciB0aGF0 IHdvdWxkIGxvYWQgb25lIG9yIHR3byBpbnN0YW5jZXMgb2YgYG15X2NsaWVudF9nZW0vYXBpX2Ns aWVudGAuIFJlZ2FyZGxlc3MsIEkgZG9uJ3QgcmVhbGx5IHNlZSBob3cgYGFwaV9jbGllbnQ6OkFw aUNsaWVudGAgaXMgYW4gaW1wcm92ZW1lbnQgb3ZlciBgTXlDbGllbnRHZW06OkFwaUNsaWVudGAs IGV2ZW4gaWYgaXQncyBhY3R1YWxseSBgTXk6OkNsaWVudDo6R2VtOjpBcGlDbGllbnRgLg0KDQo+ IFRvIG1lIGF0IGxlYXN0LCBoYXZpbmcgZGVhbHQgd2l0aCBfcmVhbXNfIG9mIG5hbWVzcGFjZSBi b2lsZXJwbGF0ZSwgSSBjYW5ub3QgZXhwcmVzcyB0byB5b3Ugd2hhdCBhIHBsZWFzdXJlIGl0IGlz IGp1c3QgdG8gd3JpdGUgdGhpcyBoZXJlLiBJdCB0YWtlcyBhd2F5IHNvIG11Y2ggdGhhdCBpcyBp cnJlbGV2YW50IGFuZCBsZWF2ZXMgb25seSB3aGF0IF9pc18gcmVsZXZhbnQ6IHdoYXQgdGhlIGNv ZGUgaXMgYWN0dWFsbHkgZG9pbmcuIFRoaXMgSSBiZWxpZXZlIGlzIHdoeSB0aGlzIGlkZWEgaGFz IGdlbmVyYXRlZCBbc28gbXVjaCBleGNpdGVtZW50XShodHRwczovL3R3aXR0ZXIuY29tL2ZsYXZv cmpvbmVzL3N0YXR1cy8xNTcwMzkwNjMzNTI0NzQ0MTk1KS4NCg0KV2hhdCB5b3UgY2FsbCAibmFt ZXNwYWNlIGJvaWxlcnBsYXRlIiwgSSBjYWxsICJjb250ZXh0Ii4gSSB0aGluayB0aGF0IHRoZSAi ZmxvYXRpbmcgbmFtZXNwYWNlcyIgdGhpcyBpcyB0aGUgc2luZ2xlIF93b3JzdF8gdGhpbmcgYWJv dXQgSmF2YVNjcmlwdCBhbmQgVHlwZXNjcmlwdCB3aGVuIGl0IGNvbWVzIHRvIGNvbXBsZXggY29k ZWJhc2VzLiBBcyBJIHNhaWQgZWFybGllciwgSSBoYXZlIG9uZSB3aXRoIGEgZG96ZW4gb3Igc28g dGFibGVzIGFuZCBtYXliZSB0d2ljZSB0aGF0IG1hbnkgZW5kcG9pbnRz4oCmYW5kIEkgY2Fubm90 IF93YWl0XyB0byByZXdyaXRlIGl0IGluIHNvbWV0aGluZyB0aGF0IGlzIF9ub3RfIEphdmFTY3Jp cHQsIGJlY2F1c2UgdGhlcmUgYXJlIGZpdmUgZGlmZmVyZW50IHdheXMgdGhhdCB0aGUgZmlsZXMg aGF2ZSBiZWVuIG9yZ2FuaXplZCBiZWNhdXNlIEphdmFTY3JpcHQgc2ltcGx5IGRvZXMgbm90IF9j YXJlXyBhYm91dCBvciBldmVuIF9zdXBwb3J0XyBnb29kIGNvZGUgb3JnYW5pemF0aW9uLg0KDQpJ J3ZlIHJlY2VudGx5IHdyaXR0ZW4gYSBsaWJyYXJ5IGluIEVsaXhpciwgUnVieSwgYW5kIFR5cGVz Y3JpcHTigKZhbmQgd2hpbGUgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IGNhbiBiZSBzYWlkIGJvdGgg cG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGFib3V0IGFsbCB0aHJlZSBpbXBsZW1lbnRhdGlvbnMsIEkg cHJlZmVyIHdvcmtpbmcgb24gdGhlIEVsaXhpciBvciBSdWJ5IG9uZXMgdG8gdGhlIFR5cGVzY3Jp cHQgYmVjYXVzZSB0aGVyZSdzIF9iZXR0ZXJfIHN1cHBvcnQgZm9yIGdvb2QgcHJhY3RpY2VzIGlu IGJvdGggb3RoZXIgbGFuZ3VhZ2VzLg0KDQo+IFdlIGFyZSBhY3R1YWxseSBfcmVhbGx5IGNsb3Nl XyB0aG91Z2ggdG8gd2hhdCBJIHRoaW5rIGlzIGEgYmV0dGVyIHNvbHV0aW9uIHRvIHRoYXQgcHJv YmxlbS4gSWYgdG9wbGV2ZWwgaW4gdGhlIGltcG9ydGVkIGZpbGUgcmVzb2x2ZWQgdG8gdGhlIHRv cCBvZiB0aGUgaW1wb3J0IGNvbnRleHQsIHdlIHdvdWxkIGFjdHVhbGx5IGFjaGlldmUgYSBraW5k IG9mICJuZXN0ZWQgZW5jYXBzdWxhdGlvbiIuIEEgd3JhcHBlZCBsb2FkIGNvbnRleHQgb25seSAi c2VlcyIgYXMgZmFyIHVwIGFzIGl0cyB3cmFwIG1vZHVsZS4gSXQgaXMgZXNzZW50aWFsbHkgYSAi dW5pdmVyc2UgdW50byBpdHNlbGYiLiBUaGUgaW1wb3J0ZXIgc2lkZSBjYW4gc2VlIGRvd24gdGhl IG5hbWVzcGFjZSwgYnV0IHRoZSAiaW1wb3J0ZWUiIGNhbm5vdCBzZWUgdXAgcGFzdCBpdHMgdG9w bGV2ZWwuDQoNCkkgY2FuJ3QgY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoaXMgImZh Y3QiIGhhcyBwcm92ZWQgdG8gYmUgcHJvYmxlbWF0aWMgaW4gdGhlIEphdmFTY3JpcHQgY29kZSB0 aGF0IEkndmUgd3JpdHRlbi4gSGF2aW5nIHRvIGltcG9ydCB0aGUgdW5pdmVyc2UgdG8gYWNjb21w bGlzaCBhIHRhc2sgbGVhZHMgdG8gYSBsb3Qgb2YgX2ltcG9ydF8gYm9pbGVycGxhdGUgdGhhdCBJ IGZpbmQgZmFyIG1vcmUgZGlzdHJhY3RpbmcgdGhhbiB3aGF0IHlvdSBjYWxsIG5hbWVzcGFjZSBi b2lsZXJwbGF0ZS4NCg0KRnJvbSBhIHBhY2thZ2UgYWNjZXNzIHBlcnNwZWN0aXZlLCB0aG91Z2gs IEkgdGhpbmsgdGhhdCB5b3UncmUgdHJ5aW5nIHRvIHNvbHZlIHRoaXMgdGhlIF93cm9uZyBkaXJl Y3Rpb25fLiBJdCBzaG91bGQgbm90IG1hdHRlciB3aGV0aGVyIHRoZSBfaW1wb3J0ZWRfIGNvZGUg Y2FuIHJlYWNoIG91dCBiZXlvbmQgaXRzIHRvcGxldmVsLCBidXQgaXQgX3Nob3VsZF8gbWF0dGVy IHRoYXQgb3RoZXIgY29kZSBzaG91bGQgbm90IGJlIGFibGUgdG8gcmVhY2ggX2ludG9fIHRoZSBp bXBvcnRlZCBjb2RlIGV4Y2VwdCB0aHJvdWdoIGRlZmluZWQgQVBJcyAobW9kdWxvLCBvZiBjb3Vy c2UsIGBfX3NlbmRfX2ApLg0KDQpUaGF0J3Mgd2h5IEkgdGhpbmsgdGhhdCwgd2l0aG91dCBpbnRy b2R1Y2luZyBhbiBgaW1wb3J0YCBjb25jZXB0IHRoYXQgcmVxdWlyZXMgZXhwb3J0cyBhbmQgbXVs dGlwbGUgdG9wbGV2ZWxz4oChLCB3ZSBjb3VsZCBpbnRyb2R1Y2Ugc29tZXRoaW5nIHRoYXQgSU1P IHdvdWxkIGJlIChhKSBtb3JlIGdlbmVyYWwsIChiKSBtb3JlIGRlY2xhcmF0aXZlLCAoYykgaW5j cmVtZW50YWwsIGFuZCAoZCkgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGV4cGxhaW4uIFRoYXQg d291bGQgYmUgd2hhdCBJJ2xsIGNhbGwgYSAicGFja2FnZSBkZWNsYXJhdGlvbiIuIEl0J3MgdmVy eSByb3VnaCwgYW5kIEkgZG9uJ3Qga25vdyB0aGF0IEknbGwgZGV2ZWxvcCBpdCBtdWNoIG1vcmUg dGhhbiB0aGlzIGJlY2F1c2UgaXQgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgSSBfbmVlZF8uDQoNClRo ZSBiYXNpYyBjb25jZXB0IGlzIHRoYXQgeW91J2QgZGVjbGFyZSBhIHBhcnRpY3VsYXIgbmFtZSAv IG5hbWVzcGFjZSB0byBiZSBhIGBwYWNrYWdlYCwgYW5kIHRoZW4geW91J2QgbWFyayBzdWItbmFt ZXNwYWNlcyB0byBiZSBgcGFja2FnZV9jb25zdGFudGBzLiBGcm9tIHdpdGhpbiBhbnkgY2hpbGQg b2YgdGhlIGBwYWNrYWdlYCBuYW1lc3BhY2UsIGEgYHBhY2thZ2VfY29uc3RhbnRgIHdvdWxkIGp1 c3QgYmUgYSByZWd1bGFyIGNvbnN0YW50LiBGcm9tIF9vdXRzaWRlXyBvZiB0aGUgcGFja2FnZSBu YW1lc3BhY2UsIGl0IHdvdWxkIGJlIHRoZSBzYW1lIGFzIGEgYHByaXZhdGVfY29uc3RhbnRgLg0K DQoNCmBgYHJ1YnkNCmNsYXNzIEZvbw0KICBjbGFzcyBCYXINCiAgICBjbGFzcyBIb2dlDQogICAg ICBkZWYgaG9nZSA9ICJob2dlIg0KICAgIGVuZA0KICAgIHByaXZhdGVfY29uc3RhbnQgOkhvZ2UN Cg0KICAgIGRlZiBob2dlID0gSG9nZS5uZXcuaG9nZQ0KDQogICAgZGVmIGJhciA9ICJiYXIiDQog IGVuZA0KICBwYWNrYWdlX2NvbnN0YW50IDpCYXINCg0KICBjbGFzcyBCYXoNCiAgICBkZWYgYmF6 ID0gImJheiINCg0KICAgIGRlZiBiYXIgPSBGb286OkJhci5uZXcuYmFyDQoNCiAgICBkZWYgaG9n ZSA9IEZvbzo6QmFyLm5ldy5ob2dlDQogIGVuZA0KDQogIGRlZiBiYWQgPSBCYXI6OkhvZ2UubmV3 LmhvZ2UNCg0KICBkZWYgZ29vZA0KICAgIFtCYXoubmV3LmJheiwgQmFyLm5ldy5iYXIsIEJhci5u ZXcuaG9nZV0NCiAgZW5kDQplbmQNCg0KcGFja2FnZSA6Rm9vDQoNCkZvbzo6QmFyICMgPT4gTmFt ZUVycm9yOiBwYWNrYWdlIGNvbnN0YW50IEZvbzo6QmFyIHJlZmVyZW5jZWQNCkZvbzo6QmF6ICMg PT4gRm9vOjpCYXoNCkZvbyAjID0+IEZvbw0KYGBgDQoNCldpdGggdGhlIGNvbmNlcHQgdGhhdCBJ J20gdGFsa2luZyBhYm91dCwgb25seSBgRm9vOjpCYXJgIGNvdWxkIHJlYWNoIGBGb286OkJhcjo6 SG9nZWAgKGl0J3MgYSBwcml2YXRlIGNvbnN0YW50KSwgYW5kIG9ubHkgYEZvb2AgYW5kIGBGb286 OkJhemAgY291bGQgcmVhY2ggYEZvbzo6QmFyYCwgYW5kIGJvdGggYEZvbzo6QmFyYCBhbmQgYEZv b2Agd291bGQgYmUgcHVibGljbHkgZXhwb3NlZCBjb25zdGFudHMgLyBjbGFzc2VzLg0KDQrigKEg SSB1bmRlcnN0YW5kIHRoYXQgcGFydCBvZiB5b3VyIGdvYWwgaXMgdG8gcmVkdWNlICJuYW1lc3Bh Y2UgYm9pbGVycGxhdGUiLiBJIGRpc2FncmVlIHdpdGggdGhhdCBnb2FsIGFuZCBkb3VidCB0aGF0 IEkgY291bGQgYmUgY29udmluY2VkIHRoYXQgdGhpcyB3b3VsZCBiZSBhIG5ldCBwb3NpdGl2ZSBj aGFuZ2UuIEkgX3dpc2hfIHRoYXQgSSBjb3VsZCB3cml0ZSBKYXZhU2NyaXB0IGxpa2UgaXQgYWN0 dWFsbHkgaGFkIGFueSBzb3J0IG9mIHN0cnVjdHVyZSBhdCBhbGwgcHJvdmlkZWQgYnkgYW5kL29y IGVuZm9yY2VkIGJ5IHRoZSBsYW5ndWFnZSBpbnRlbnRpb25hbGx5LCByYXRoZXIgdGhhbiBhY2Np ZGVudGFsbHkuXA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpG ZWF0dXJlICMxOTAyNDogUHJvcG9zYWw6IEltcG9ydCBNb2R1bGVzDQpodHRwczovL2J1Z3MucnVi eS1sYW5nLm9yZy9pc3N1ZXMvMTkwMjQjY2hhbmdlLTk5NTUzDQoNCiogQXV0aG9yOiBzaGlveWFt YSAoQ2hyaXMgU2FsemJlcmcpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGVyZSBpcyBubyBnZW5l cmFsIHdheSBpbiBSdWJ5IHRvIGxvYWQgY29kZSBvdXRzaWRlIG9mIHRoZSBnbG9iYWxseS1zaGFy ZWQgbmFtZXNwYWNlLiBUaGlzIG1ha2VzIGl0IGhhcmQgdG8gaXNvbGF0ZSBjb21wb25lbnRzIG9m IGFuIGFwcGxpY2F0aW9uIGZyb20gZWFjaCBvdGhlciBhbmQgZnJvbSB0aGUgYXBwbGljYXRpb24g aXRzZWxmLCBsZWFkaW5nIHRvIGNvbXBsaWNhdGVkIHJlbGF0aW9uc2hpcHMgdGhhdCBjYW4gYmVj b21lIGludHJhY3RhYmxlIGFzIGFwcGxpY2F0aW9ucyBncm93IGluIHNpemUuDQoNClRoZSBncm93 aW5nIHBvcHVsYXJpdHkgb2YgYSBnZW0gbGlrZSBbUGFja3dlcmtdKGh0dHBzOi8vZ2l0aHViLmNv bS9zaG9waWZ5L3BhY2t3ZXJrKSwgd2hpY2ggcHJvdmlkZXMgYSBuZXcgY29uY2VwdCBvZiAicGFj a2FnZSIgdG8gZW5mb2NlIGJvdW5kYXJpZXMgc3RhdGljYWxseSBpbiBDSSwgaXMgZXZpZGVuY2Ug dGhhdCB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtLiBCdXQgaW50cm9kdWNpbmcgYSBuZXcgcGFja2Fn aW5nIGNvbmNlcHQgYW5kIENJIHN0ZXAgaXMgYXQgYmVzdCBvbmx5IGEgcGFydGlhbCBzb2x1dGlv biwgd2l0aCBkb3duc2lkZXM6IGl0IGFkZHMgY29tcGxleGl0eSBhbmQgY29nbml0aXZlIG92ZXJo ZWFkIHRoYXQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IGlmIFJ1YnkgcHJvdmlkZWQgYmV0dGVyIHBh Y2thZ2luZyBpdHNlbGYgKGFzIE1hdHogaGFzIHN1Z2dlc3RlZCBbaXQgc2hvdWxkXShodHRwczov L3lvdXR1LmJlL0RwMTJhM0tHTkZ3P3Q9Mjk1NikpLg0KDQpUaGVyZSBpcyBfb25lXyBsaW1pdGVk IHdheSBpbiBSdWJ5IGN1cnJlbnRseSB0byBsb2FkIGNvZGUgd2l0aG91dCBwb2xsdXRpbmcgdGhl IGdsb2JhbCBuYW1lc3BhY2U6IGBsb2FkYCB3aXRoIHRoZSBgd3JhcGAgcGFyYW1ldGVyLCB3aGlj aCBhcyBvZiBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvNjIxMCBjYW4gbm93IGJl IGEgbW9kdWxlLiBIb3dldmVyLCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBhcHBseSB0cmFuc2l0aXZl bHkgdG8gYHJlcXVpcmVgIGNhbGxzIHdpdGhpbiB0aGUgbG9hZGVkIGZpbGUsIHNvIGl0cyB1c2Vm dWxuZXNzIGlzIGxpbWl0ZWQuDQoNCk15IHByb3Bvc2FsIGhlcmUgaXMgdG8gZW5hYmxlIG1vZHVs ZSBpbXBvcnRzIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6DQoNCjEuIGFwcGx5IHRoZSBgd3JhcGAg bW9kdWxlIG5hbWVzcGFjZSB0cmFuc2l0aXZlbHkgdG8gYHJlcXVpcmVgcyBpbnNpZGUgdGhlIGxv YWRlZCBjb2RlLCBpbmNsdWRpbmcgbmF0aXZlIGV4dGVuc2lvbnMgKG9yIHByb3ZpZGUgYSBuZXcg ZmxhZyBvciBtZXRob2QgdGhhdCB3b3VsZCBkbyB0aGlzKSwNCjIuIG1ha2UgdGhlIGB3cmFwYCBt b2R1bGUgdGhlIHRvcGxldmVsIGNvbnRleHQgZm9yIGNvZGUgbG9hZGVkIHVuZGVyIGl0LCBzbyBg OjpGb29gIHJlc29sdmVzIHRvIGA8dG9wX3dyYXBwZXI+OjpGb29gIGluIGxvYWRlZCBjb2RlIChv ciwgYWdhaW4sIHByb3ZpZGUgYSBuZXcgZmxhZyBvciBtZXRob2QgdGhhdCB3b3VsZCBkbyB0aGlz KS4gX0Fsc28gbWFrZSB0aGlzIGFwcGx5IHdoZW4gY29kZSB1bmRlciB0aGUgd3JhcHBlciBtb2R1 bGUgaXMgY2FsbGVkIG91dHNpZGUgb2YgdGhlIGxvYWQgcHJvY2VzcyAod2hlbiBgdG9wX3dyYXBw ZXJgIGlzIG5vIGxvbmdlciBzZXQpICZtZGFzaDsgdGhpcyBtYXkgYmUgcXVpdGUgaGFyZCB0byBk b18uDQozLiByZXNvbHZlIGBuYW1lYCBvbiBhbm9ueW1vdXMgbW9kdWxlcyB1bmRlciB0aGUgd3Jh cHBlZCBtb2R1bGUgdG8gdGhlaXIgbmFtZXMgd2l0aG91dCB0aGUgdG9wIHdyYXBwZXIgbW9kdWxl LCBzbyBgPHRvcF93cmFwcGVyPjo6Rm9vLm5hbWVgIGV2YWx1YXRlcyB0byBgIkZvbyJgLiBUaGVy ZSBtYXkgYmUgb3RoZXIgd2F5cyB0byBoYW5kbGUgdGhpcyBwcm9ibGVtLCBidXQgYSBnZW0gbGlr ZSBSYWlscyB1c2VzIGBuYW1lYCB0byByZXNvbHZlIGZpbGVuYW1lcyBhbmQgZmFpbHMgd2hlbiBh bm9ueW1vdXMgbW9kdWxlcyByZXR1cm4gc29tZXRoaW5nIGxpa2UgYCM8TW9kdWxlOiAuLi4+OjpB Y3RpdmVSZWNvcmRgIGluc3RlYWQgb2YganVzdCBgQWN0aXZlUmVjb3JkYC4NCg0KSSBoYXZlIHJv dWdobHkgaW1wbGVtZW50ZWQgdGhlc2UgdGhyZWUgdGhpbmdzIGluIFt0aGlzIHBhdGNoXShodHRw czovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L2NvbXBhcmUvbWFzdGVyLi4uc2hpb3lhbWE6cnVieTpp bXBvcnRfbW9kdWxlcykuIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5jb21wbGV0ZSAoaXQgZG9l cyBub3QgY292ZXIgdGhlIGxhc3QgaGlnaGxpZ2h0ZWQgcGFydCBvZiAyKSBidXQgcHJvdmlkZXMg ZW5vdWdoIG9mIGEgYmFzaXMgdG8gaW1wbGVtZW50IGFuIGBpbXBvcnRgIG1ldGhvZCwgd2hpY2gg SSBoYXZlIGRvbmUgaW4gYSBnZW0gY2FsbGVkIFtJbV0oaHR0cHM6Ly9naXRodWIuY29tL3NoaW95 YW1hL2ltKS4NCg0KSW0gcHJvdmlkZXMgYW4gYGltcG9ydGAgbWV0aG9kIHdoaWNoIGNhbiBiZSB1 c2VkIHRvIGltcG9ydCBnZW0gY29kZSB1bmRlciBhIG5hbWVzcGFjZToNCg0KYGBgcnVieQ0KcmVx dWlyZSAiaW0iDQpleHRlbmQgSW0NCg0KYWN0aXZlX21vZGVsID0gaW1wb3J0ICJhY3RpdmVfbW9k ZWwiDQojPT4gPCNJbTo6SW1wb3J0IHJvb3Q6IGFjdGl2ZV9tb2RlbD4NCg0KQWN0aXZlTW9kZWwN CiM9PiBOYW1lRXJyb3INCg0KYWN0aXZlX21vZGVsOjpBY3RpdmVNb2RlbA0KIz0+IEFjdGl2ZU1v ZGVsDQoNCmFjdGl2ZV9yZWNvcmQgPSBpbXBvcnQgImFjdGl2ZV9yZWNvcmQiDQojPT4gPCNJbTo6 SW1wb3J0IHJvb3Q6IGFjdGl2ZV9yZWNvcmQ+DQoNCiMgQ29uc3RhbnRzIGRlZmluZWQgaW4gdGhl IHNhbWUgZmlsZSB1bmRlciBkaWZmZXJlbnQgaW1wb3J0cyBwb2ludCB0byB0aGUgc2FtZSBvYmpl Y3RzDQphY3RpdmVfcmVjb3JkOjpBY3RpdmVNb2RlbCA9PSBhY3RpdmVfbW9kZWw6OkFjdGl2ZU1v ZGVsDQojPT4gdHJ1ZQ0KYGBgDQoNCldpdGggdGhlIGNvbnN0YW50cyBhbGwgbG9hZGVkIHVuZGVy IGFuIGFub255bW91cyBuYW1lc3BhY2UsIGFueSBjb2RlIGltcG9ydGluZyB0aGUgZ2VtIGNhbiBu YW1lIGNvbnN0YW50cyBob3dldmVyIGl0IGxpa2VzOg0KDQpgYGBydWJ5DQpjbGFzcyBQb3N0IDwg YWN0aXZlX3JlY29yZDo6QWN0aXZlUmVjb3JkOjpCYXNlDQplbmQNCg0KQVIgPSBhY3RpdmVfcmVj b3JkOjpBY3RpdmVSZWNvcmQNCg0KUG9zdC5zdXBlcmNsYXNzDQojPT4gQVI6OkJhc2UNCmBgYA0K DQpOb3RlIHRoYXQgdGhpcyBlbmFibGVzIHRoZSBpbXBvcnRlciB0byBjb21wbGV0ZWx5IGRldGVy bWluZSB0aGUgbmFtaW5nIGZvciBldmVyeSBjb25zdGFudCBpdCBpbXBvcnRzLiBTbyBnZW1zIGNh biBvcHQgdG8gaGlkZSB0aGVpciBkZXBlbmRlbmNpZXMgYnkgImFuY2hvcmluZyIgdGhlbSBpbnNp ZGUgdGhlaXIgb3duIG5hbWVzcGFjZSwgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQojIGluIGxpYi9t eV9nZW0ucmINCm1vZHVsZSBNeUdlbQ0KICBkZXAgPSBpbXBvcnQgIm15X2dlbV9kZXBlbmRlbmN5 Ig0KDQogICMgbXlfZ2VtX2RlcGVuZGVuY3kgaXMgImFuY2hvcmVkIiB1bmRlciB0aGUgTXlHZW0g bmFtZXNwYWNlLCBzbyBub3QgZXhwb3NlZCB0byB1c2Vycw0KICAjIG9mIHRoZSBnZW0gdW5sZXNz IHRoZXkgYWxzbyByZXF1aXJlIGl0Lg0KICBNeUdlbURlcGVuZGVuY3kgPSBkZXANCg0KICAjLi4u DQplbmQNCmBgYA0KDQpUaGVyZSBhcmUgYSBjb3VwbGUgaW1wb3J0YW50IGltcGxlbWVudGF0aW9u IGRlY2lzaW9ucyBpbiB0aGUgZ2VtOg0KDQoxLiBfT25seSBsb2FkIGNvZGUgb25jZS5fIFdoZW4g dGhlIHNhbWUgZmlsZSBpcyBpbXBvcnRlZCBhZ2FpbiAoZWl0aGVyIGRpcmVjdGx5IG9yIHRyYW5z aXRpdmVseSksICJjb3B5IiBjb25zdGFudHMgZnJvbSBwcmV2aW91c2x5IGltcG9ydGVkIG5hbWVz cGFjZSB0byB0aGUgbmV3IG5hbWVzcGFjZSB1c2luZyBhIHJlZ2lzdHJ5IHdoaWNoIG1hcHMgd2hp Y2ggbmFtZXNwYWNlIChpbXBvcnQpIHdhcyB1c2VkIHRvIGxvYWQgd2hpY2ggZmlsZSAoYXMgc2hv d24gYWJvdmUgd2l0aCBhY3RpdmVyZWNvcmQvYWN0aXZlbW9kZWwpLiBUaGlzIGlzIG5lY2Vzc2Fy eSB0byBlbnN1cmUgdGhhdCBkaWZmZXJlbnQgaW1wb3J0cyBjYW4gInNlZSIgc2hhcmVkIGZpbGVz LiBBIHNpbWlsYXIgcmVnaXN0cnkgaXMgdXNlZCB0byB0cmFjayBhdXRvbG9hZHMgc28gdGhhdCB0 aGV5IHdvcmsgY29ycmVjdGx5IHdoZW4gdXNlZCBmcm9tIGltcG9ydGVkIGNvZGUuDQoyLiBUb3Bs ZXZlbCBjb3JlIHR5cGVzIChgTmlsQ2xhc3NgLCBgVHJ1ZUNsYXNzYCwgYEZhbHNlQ2xhc3NgLCBg U3RyaW5nYCwgZXRjKSBhcmUgImFsaWFzZWQiIHRvIGNvbnN0YW50cyB1bmRlciBlYWNoIGltcG9y dCBtb2R1bGUgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZS4gVGh1cyB0aGVyZSBjYW4gYmUgc2lkZS1l ZmZlY3RzIG9mIGltcG9ydGluZyBjb2RlLCBidXQgdGhpcyBhbGxvd3MgYSBnZW0gbGlrZSBSYWls cyB0byBtb25rZXlwYXRjaCBjb3JlIGNsYXNzZXMgd2hpY2ggaXQgbmVlZHMgdG8gZG8gZm9yIGl0 IHRvIHdvcmsuDQozLiBgT2JqZWN0LmNvbnN0X21pc3NpbmdgIGlzIHBhdGNoZWQgdG8gY2hlY2sg dGhlIGNhbGxlciBsb2NhdGlvbiBhbmQgcmVzb2x2ZSB0byB0aGUgY29uc3RhbnQgZGVmaW5lZCB1 bmRlciBhbiBpbXBvcnQsIGlmIHRoZXJlIGlzIGFuIGltcG9ydCBkZWZpbmVkIGZvciB0aGF0IGZp bGUuDQoNClRvIGJlIGNsZWFyOiAqKkkgdGhpbmsgMSkgc2hvdWxkIGJlIGltcGxlbWVudGVkIGlu IFJ1YnksIGJ1dCBub3QgMikgYW5kIDMpLioqIFRoZSBsYXN0IG9uZSAoYE9iamVjdC5jb25zdF9t aXNzaW5nYCkgaXMgYSBoYWNrIHRvIHN1cHBvcnQgdGhlIGNhc2Ugd2hlcmUgYSB0b3BsZXZlbCBj b25zdGFudCBpcyByZWZlcmVuY2VkIGZyb20gYSBtZXRob2QgY2FsbGVkIGluIGltcG9ydGVkIGNv ZGUgKGF0IHdoaWNoIHBvaW50IHRoZSBgdG9wX3dyYXBwZXJgIGlzIG5vdCBhY3RpdmUuKQ0KDQpJ IGtub3cgdGhpcyBpcyBhIGJpZyBwcm9wb3NhbCwgYW5kIHRoZXJlIGFyZSBzdHJvbmcgb3Bpbmlv bnMgaGVsZC4gSSB3b3VsZCByZWFsbHkgYXBwcmVjaWF0ZSBjb25zdHJ1Y3RpdmUgZmVlZGJhY2sg b24gdGhpcyBnZW5lcmFsIGlkZWEuDQoNClNlZSBhbHNvIHNpbWlsYXIgZGlzY3Vzc2lvbiBpbjog aHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzEwMzIwDQoNCg0KDQotLSANCmh0dHBz Oi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K