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.6 required=3.0 tests=BAYES_00,BODY_8BITS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_PASS 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 DDBC720248 for ; Tue, 9 Apr 2019 00:56:20 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id C1E41120EE6; Tue, 9 Apr 2019 09:56:15 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id D0ACD120EE6 for ; Tue, 9 Apr 2019 09:56:12 +0900 (JST) Received: by filter0072p3las1.sendgrid.net with SMTP id filter0072p3las1-5853-5CABEDAC-12 2019-04-09 00:56:12.546994408 +0000 UTC m=+6900.272818305 Received: from herokuapp.com (unknown [3.82.3.4]) by ismtpd0001p1iad1.sendgrid.net (SG) with ESMTP id emBPolM9Tba6W5FK-B1BUw for ; Tue, 09 Apr 2019 00:56:12.340 +0000 (UTC) Date: Tue, 09 Apr 2019 00:56:12 +0000 (UTC) From: tenderlove@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67700 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: tenderlovemaking 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-SG-EID: =?us-ascii?Q?lWh=2FbSnEjJFRTUHRj45oOQBme8zohdTU9K3TxrDAbWKVdVdcLjqu8VsA8c3SZo?= =?us-ascii?Q?hSDUWtUvltFPpnM8lQTat6CU1GWEK9+LN5idz1z?= =?us-ascii?Q?y0WylBfOR0cCm97VhPNP2Ny2swdOk99+VqkrljH?= =?us-ascii?Q?K+3chBmfutaxTlcoBm1YO45ofnr3wADX9Ou64Pg?= =?us-ascii?Q?zE8IAMKn8oVSl+z0IfXMjy=2Fg4oAajBZm5Zw=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 92216 Subject: [ruby-core:92216] [Ruby trunk Feature#15626] Manual Compaction for MRI's GC (`GC.compact`) X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQpIaSwNCg0KSGVyZSBhcmUgc29tZSBzdGF0aXN0aWNzIEkgZ2F0aGVy ZWQuICBJJ2xsIHByZXNlbnQgYSBmZXcgbW9yZSBhdCBSdWJ5S2FpZ2kgdXNpbmcgb3VyIGFwcGxp Y2F0aW9uLg0KDQpodHRwczovL2dpc3QuZ2l0aHViLmNvbS90ZW5kZXJsb3ZlLzk5MTEyZTlmY2M4 NWQ5YzZjN2Q5ZDBlYTQwMDYzZmM2DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCkZlYXR1cmUgIzE1NjI2OiBNYW51YWwgQ29tcGFjdGlvbiBmb3IgTVJJJ3MgR0Mg KGBHQy5jb21wYWN0YCkNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNTYyNiNj aGFuZ2UtNzc1NTENCg0KKiBBdXRob3I6IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9uIFBhdHRlcnNv bikNCiogU3RhdHVzOiBPcGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCiogQXNzaWduZWU6IA0KKiBU YXJnZXQgdmVyc2lvbjogDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpIaSwNCg0KSSd2ZSBhdHRhY2hlZCBhIHBhdGNoIHRoYXQgaW1wbGVtZW50cyBhIGNvbXBhY3Rv ciBmb3IgTVJJLiAgSSdsbCB0cnkgdG8gZGVzY3JpYmUgdGhlIHBhdGNoIGluIGRldGFpbCBiZWxv dywgYnV0IHRoZSBiaWdnZXN0IHVzZXIgZmFjaW5nIGNoYW5nZXMgYXJlOg0KDQoxLiBBIG5ldyBt ZXRob2QgYEdDLmNvbXBhY3RgIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIFJ1YnkNCjIuIEMgZXh0 ZW5zaW9ucyBoYXZlIGEgbmV3ICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjayB0aGV5IGNhbiBy ZWdpc3Rlcg0KMy4gSW50cm9kdWN0aW9uIG9mIG5ldyBtYXJraW5nIGZ1bmN0aW9ucyB0aGF0IGFs bG93IG9iamVjdHMgdG8gYmUgbWFya2VkLCBidXQgbm90ICJwaW5uZWQiIHRvIHRoZSBzYW1lIGxv Y2F0aW9uDQo0LiBBIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmV3IGxvY2F0aW9uIG9mIGFuIG9iamVj dCAodG8gYmUgdXNlZCBmcm9tIHRoZSAiYWZ0ZXIgY29tcGFjdGlvbiIgY2FsbGJhY2spDQoNCiMg Q29tcGFjdG9yIGZvciBSR2VuR0MNCg0KVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNvbXBh Y3RvciBpbXBsZW1lbnRhdGlvbiBmb3IgUkdlbkdDLiAgVGhpcyBwYXRjaA0KYWRkcyBhIG5ldyBt ZXRob2QgdG8gUnVieSwgYEdDLmNvbXBhY3RgIHdoaWNoIHdpbGwgY29tcGFjdCB0aGUgb2JqZWN0 cyBpbiB0aGUNCmhlYXAuICBXaGF0IGZvbGxvd3MgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxn b3JpdGhtLCBhbG9uZyB3aXRoIGFjaGlldmVtZW50cw0KYW5kIHRlY2huaWNhbCBjaGFsbGVuZ2Vz Lg0KDQojIyBTdGVwcyBmb3IgQ29tcGFjdGlvbg0KDQpUaGVzZSBhcmUgdGhlIGhpZ2ggbGV2ZWwg c3RlcHMgdGFrZW4gaW4gYEdDLmNvbXBhY3RgIGFyZSBhcyBmb2xsb3dzOg0KDQoxLiBGdWxsIEdD DQoyLiBNb3ZlIG9iamVjdHMNCjMuIFVwZGF0ZSByZWZlcmVuY2VzDQo0LiBGdWxsIEdDDQoNCiMj IyBTdGVwIE9uZSwgRnVsbCBHQw0KDQpOb3QgYWxsIG9iamVjdHMgaW4gUnVieSdzIGhlYXAgY2Fu IG1vdmUuICBJbiBwYXJ0aWN1bGFyLCBDIGV4dGVuc2lvbnMgbWF5IGhvbGQNCnJlZmVyZW5jZXMg dG8gVkFMVUUgcG9pbnRlcnMuICBJZiB0aGUgVkFMVUUgcG9pbnRlcnMgbW92ZSwgdGhlIEMgZXh0 ZW5zaW9uIG1heQ0Kbm90IGJlIGFibGUgdG8gZmluZCB0aGVtIGFuZCB3aWxsIGdldCBhIFNFR1Yg b3IgcG9zc2libHkgd3JvbmcgZGF0YS4NCg0KVG8gcHJldmVudCB0aGlzLCBhIG5ldyAicGlubmlu ZyIgdGFibGUgd2FzIGludHJvZHVjZWQuICBBbnkgb2JqZWN0IG1hcmtlZCB2aWENCmByYl9nY19t YXJrYCBpcyAicGlubmVkIiBhbmQgaXMgbm90IGFsbG93ZWQgdG8gbW92ZS4gIEMgZXh0ZW5zaW9u cyBtdXN0IG1hcmsNCnRoZWlyIHJlZmVyZW5jZXMgaW4gb3JkZXIgdG8ga2VlcCB0aGVtIGFsaXZl LiAgU2luY2UgQyBleHRlbnNpb25zIHVzZQ0KYHJiX2djX21hcmtgIHRvIG1hcmsgYSByZWZlcmVu Y2UsIHdlIGtub3cgbm90IHRvIG1vdmUgdGhhdCByZWZlcmVuY2UuICBJbiBvcmRlcg0KdG8gZW5z dXJlIGFsbCByZWZlcmVuY2VzIGdldCBtYXJrZWQsIHdlIHBlcmZvcm0gYSBmdWxsIEdDLg0KDQpO ZXcgZnVuY3Rpb25zLCBgcmJfZ2NfbWFya19ub19waW5gLCBldGMgd2VyZSBpbnRyb2R1Y2VkIGFu ZCB1c2VkIGludGVybmFsbHkuDQpUaGVzZSBmdW5jdGlvbnMga2VlcHMgdGhlIG9iamVjdCBhbGl2 ZSBidXQgd2l0aG91dCBwaW5uaW5nIHRoZSByZWZlcmVuY2UuDQoNClN1bW1hcnk6IFBlcmZvcm0g YSBmdWxsIEdDIHNvIHRoYXQgb2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AgZG8gbm90 IG1vdmUuDQoNCiMjIyBTdGVwIFR3bywgTW92ZSBPYmplY3RzDQoNClRoaXMgY29tcGFjdG9yIHVz ZXMgYSAidHdvIGZpbmdlciIgYWxnb3JpdGhtIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluICJUaGUN ClByb2dyYW1taW5nIExhbmd1YWdlIExJU1A6IEl0cyBPcGVyYXRpb24gYW5kIEFwcGxpY2F0aW9u cyIgKHBhZ2UgMjI4KVteMV0uICBUd28NCnBvaW50ZXJzIHBvaW50IGF0IGVhY2ggc2lkZSBvZiB0 aGUgaGVhcCwgaWYgb25lIHNsb3QgaXMgZW1wdHksIGFuZCB0aGUgb3RoZXIgaXMNCm1vdmVhYmxl LCBpdCBzd2FwcyBwbGFjZXMgYW5kIGxlYXZlcyBhIGBUX01PVkVEYCBvYmplY3QgdGhhdCBjb250 YWlucyBhDQpmb3J3YXJkaW5nIGFkZHJlc3MuDQoNCkluIFJ1YnksIHRoZSBhbGdvcml0aG0gbG9v a3Mgc29tZXRoaW5nIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QNCiAgaGVhcCA9 IFsgLi4uIF0gIyBtYW55IHNsb3RzDQogIGxlZnQgID0gMA0KICByaWdodCA9IGhlYXAubGVuZ3Ro IC0gMQ0KDQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAgIGxlZnRfc2xvdCA9IGhlYXBbbGVmdF0N CiAgICByaWdodF9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlmIGlzX2VtcHR5PyhsZWZ0X3Ns b3QpICYmICFpc19lbXB0eT8ocmlnaHRfc2xvdCkgJiYgY2FuX21vdmU/KHJpZ2h0X3Nsb3QpDQog ICAgICBzd2FwKGxlZnQsIHJpZ2h0KQ0KICAgICAgaGVhcFtyaWdodF0gPSBUX01PVkVELm5ldyhs ZWZ0KSAjIGxlYXZlIGZvcndhcmRpbmcgYWRkcmVzcw0KICAgIGVuZA0KDQogICAgd2hpbGUgIWlz X2VtcHR5PyhoZWFwW2xlZnRdKQ0KICAgICAgbGVmdCArPSAxDQogICAgZW5kDQoNCiAgICB3aGls ZSBpc19lbXB0eT8oaGVhcFtyaWdodF0pIHx8ICFjYW5fbW92ZT8oaGVhcFtyaWdodF0pDQogICAg ICByaWdodCAtPSAxDQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KSWYgd2UgaGF2ZSBhIGhl YXAgd2l0aCA2IHNsb3RzLCBiZWZvcmUgY29tcGFjdGlvbiBpdCBtaWdodCBsb29rIHNvbWV0aGlu ZyBsaWtlDQp0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAg ICAgICAgICAgIEJlZm9yZSBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAg ICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAg ICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA 4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs 4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAz ICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKU gOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKU gOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50 cyAg4pSCICBBICDilIIgIEIgIOKUgkVtcHR54pSCRW1wdHnilIIgIEMgIOKUgiAgRCAg4pSCDQog ICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSC ICAgICDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKU gOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKU gOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNCkFmdGVyIGNvbXBhY3Rpb24sIGJ1dCBiZWZv cmUgcmVmZXJlbmNlIHVwZGF0ZSwgaXQgd2lsbCBsb29rIGxpa2UgdGhpczoNCg0KYGBgDQogICAg ICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgQ29tcGFjdGlv biAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3Qg SW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg 4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIIgIEQg IOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIg ICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQogICAgICAgICAgICAgICDi lJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCmBg YA0KDQpTbG90cyA1IGFuZCA2IGNvbnRhaW4gYFRfTU9WRURgIG9iamVjdHMgdGhhdCBwb2ludCB0 byB0aGUgbmV3IGxvY2F0aW9ucyBvZiBEIGFuZA0KQyBvYmplY3RzLg0KDQojIyMgU3RlcCBUaHJl ZSwgVXBkYXRlIFJlZmVyZW5jZXMNCg0KQWZ0ZXIgb2JqZWN0cyBoYXZlIG1vdmVkLCByZWZlcmVu Y2VzIGFyZSB1cGRhdGVkLiAgVGhpcyBpcyBhIG1hdHRlciBvZiB1cGRhdGluZw0KYW55IHJlZmVy ZW5jZXMgdG8gdXNlIHRoZSBmb3J3YXJkaW5nIGFkZHJlc3MgcmF0aGVyIHRoYW4gdGhlIG9yaWdp bmFsIGxvY2F0aW9uLg0KDQpGb3IgZXhhbXBsZSwgaWYgb2JqZWN0IEEgaGFzIGEgcmVmZXJlbmNl IHRvIEMsIGFuZCBCIGEgcmVmZXJlbmNlIHRvIEQ6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAg ICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAg IA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBhY3Rpb24gICDilIIgICAgICAg DQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAg MSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAg ICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCRW1wdHnilIJFbXB0eeKUgiAg QyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKU giAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAgICAg ICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4payICAgICDilrIgICANCiAgICAgICAgICAg ICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgIA0KICAgICAg ICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIgICANCiAgICAgICAgICAgICAg ICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoNCkFmdGVyIGNvbXBhY3Rpb24s IGJ1dCBiZWZvcmUgdXBkYXRpbmcgcmVmZXJlbmNlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxpa2Ug dGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAg ICAgQWZ0ZXIgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKU lCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAg ICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKU gOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0 ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAg QSAg4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAg ICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSC DQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDi lIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAg ICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAg ICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSYICAgDQpgYGANCg0KVGhlIHVwZGF0ZSByZWZlcmVuY2VzIHN0ZXAgbG9va3MgYXQgZWFjaCBv YmplY3QgaW4gdGhlIGhlYXAsIGNoZWNrcyB0byBzZWUgaWYgaXQNCnJlZmVyZW5jZXMgYW55IG1v dmVkIHNsb3RzLCB0aGVuIHVwZGF0ZXMgdGhlIHJlZmVyZW5jZSB0byB1c2UgdGhlIG5ldyBsb2Nh dGlvbi4NCkluIFJ1YnksIGl0IGxvb2tzIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIHVwZGF0 ZV9yZWZlcmVuY2VzDQogIGhlYXAuZWFjaCBkbyB8c2xvdHwNCiAgICBuZXh0IGlmIGlzX2VtcHR5 PyhzbG90KSB8fCBpc19tb3ZlZD8oc2xvdCkNCg0KICAgIHNsb3QucmVmZXJlbmNlcy5lYWNoX3dp dGhfaW5kZXggZG8gfGNoaWxkLCBpfA0KICAgICAgaWYgaXNfbW92ZWQ/KGNoaWxkKQ0KICAgICAg ICBzbG90LnNldF9yZWZlcmVuY2UoaSwgY2hpbGQubmV3X2xvY2F0aW9uKQ0KICAgICAgZW5kDQog ICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KQWZ0ZXIgcmVmZXJlbmNlIHVwZGF0ZXMsIHRoZSBo ZWFwIHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSM IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAg ICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgUmVmIFVwZGF0ZXMgICDilIIgICAgICAgDQogICAg ICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDi lIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDi lIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSC ICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg 4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS8 4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpT bG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKUgk1PVkVE4pSC TU9WRUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg 4pSCVE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS0 4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA 4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAgICAgICDilIIg ICAgIOKUgiAgICAg4payICAgICDilrIgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAg IOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pSYICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDi lIDilIDilIDilJggICAgICAgICAgICAgICAgICAgICANCmBgYA0KDQojIyMgU3RlcCBGb3VyLCBG dWxsIEdDDQoNCkFmdGVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHVwZGF0ZWQsIGEgZnVsbCBHQyBp cyBwZXJmb3JtZWQuICBUaGlzIGNvbnZlcnRzIHRoZQ0KYFRfTU9WRURgIHNsb3RzIGJhY2sgaW4g dG8gYFRfRU1QVFlgIHNsb3RzLiAgVGhlIEdDIGF1dG9tYXRpY2FsbHkgdGFrZXMgY2FyZSBvZg0K dGhpcyBiZWNhdXNlIG5vIG9iamVjdCBzaG91bGQgcmVmZXJlbmNlIGEgYFRfTU9WRURgIHNsb3Qu DQoNCiMjIE5vbiBNb3ZpbmcgT2JqZWN0cw0KDQpOb24gbW92aW5nIG9iamVjdHMgYXJlOg0KDQox LiBPYmplY3RzIG9uIHRoZSBzdGFjaw0KMi4gT2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFy a2ANCjMuIEhhc2gga2V5IG9iamVjdHMNCg0KIyMjIE9iamVjdHMgb24gdGhlIHN0YWNrDQoNClRo ZSBzdGFjayBzaG91bGQgbm90IGJlIG11dGF0ZWQsIHNvIHRoZXNlIGFyZSBwaW5uZWQuDQoNCiMj IyBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KDQpBcyBtZW50aW9uZWQgZWFybGll ciwgYW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AgbWF5IG5vdCBtb3ZlIGJlY2F1 c2UgYQ0KQyBleHRlbnNpb24gbWF5IGhvbGQgYSByZWZlcmVuY2UuICBIZXJlIGlzIGFuIGV4Y2Vy cHQgZnJvbSBZYWpsLCBhIEpTT04gcGFyc2VyLg0KVGhpcyBpcyB0aGUgbWFyayBmdW5jdGlvbiBp dCB1c2VzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZCB5YWpsX2VuY29kZXJfd3JhcHBlcl9tYXJrKHZv aWQgKiB3cmFwcGVyKSB7DQogICAgeWFqbF9lbmNvZGVyX3dyYXBwZXIgKiB3ID0gd3JhcHBlcjsN CiAgICBpZiAodykgew0KICAgICAgICByYl9nY19tYXJrKHctPm9uX3Byb2dyZXNzX2NhbGxiYWNr KTsNCiAgICAgICAgcmJfZ2NfbWFyayh3LT50ZXJtaW5hdG9yKTsNCiAgICB9DQp9DQoNCg0Kb2Jq ID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgeWFqbF9lbmNvZGVyX3dyYXBwZXIsIHlhamxfZW5j b2Rlcl93cmFwcGVyX21hcmssIHlhamxfZW5jb2Rlcl93cmFwcGVyX2ZyZWUsIHdyYXBwZXIpOw0K YGBgDQoNClRoZSB2YWx1ZXMgaW4gdGhpcyBtYXJrIGZ1bmN0aW9uIGB3LT5vbl9wcm9ncmVzc19j YWxsYmFja2AgYW5kIGB3LT50ZXJtaW5hdG9yYA0Kd2lsbCBub3QgbW92ZSBzaW5jZSB0aGV5IGFy ZSBwaW5uZWQgYnkgYHJiX2djX21hcmtgLg0KDQojIyMgSGFzaCBrZXkgb2JqZWN0cw0KDQpDZXJ0 YWluIGhhc2gga2V5cyB3aWxsIG5vdCBtb3ZlLiAgTW9zdCBvYmplY3RzIHVzZSB0aGVpciBhZGRy ZXNzIGFzIHRoZSBoYXNoDQp2YWx1ZS4gIElmIHRoZSBvYmplY3QgbW92ZXMsIHRoZSBoYXNoIHZh bHVlIGNvdWxkIGNoYW5nZSwgc28gaGFzaCBrZXlzIGFyZSBub3QNCmFsbG93ZWQgdG8gbW92ZS4N Cg0KVGhlcmUgaXMgYW4gZXhjZXB0aW9uIGZvciBzdHJpbmcgb2JqZWN0cy4gIFN0cmluZyBvYmpl Y3RzIGNhbGN1bGF0ZSB0aGVpciBoYXNoDQpiYXNlZCBvbiB0aGUgYnl0ZXMgaW4gdGhlIHN0cmlu Zy4gIFNpbmNlIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nIGRvIG5vdCBjaGFuZ2UNCmFmdGVyIG1v dmUsIHRoZXkgYXJlIGFsbG93ZWQgdG8gbW92ZS4gIE1vc3QgaGFzaCBrZXlzIGluIGxhcmdlIHBy b2dyYW1zIGFyZQ0Kc3RyaW5ncywgc28gb25seSBhbGxvd2luZyBzdHJpbmcga2V5cyB0byBtb3Zl IHNlZW1lZCBlbm91Z2guDQoNCiMjIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnMNCg0KIyMjIE9iamVj dCBJRA0KDQpgT2JqZWN0I29iamVjdF9pZGAgYmFzZXMgaXRzIHZhbHVlIGZyb20gdGhlIGFkZHJl c3Mgb2YgdGhlIG9iamVjdC4gIEZvciBleGFtcGxlOg0KDQpgYGBydWJ5DQp4ID0gT2JqZWN0Lm5l dw0KaWQgPSB4Lm9iamVjdF9pZA0KR0MuY29tcGFjdCAgICAgICAgIyBgeGAgbW92ZXMNCmlkID09 IHgub2JqZWN0X2lkICMgYGlkYCBzaG91bGQgYmUgc2FtZSBhcyBgeC5vYmplY3RfaWRgDQpgYGAN Cg0KV2UgZXhwZWN0IHRoZSBvYmplY3QgaWQgdG8gcmVtYWluIHRoZSBzYW1lIHJlZ2FyZGxlc3Mg b2YgY29tcGFjdGlvbi4gIFRvIGRlYWwNCndpdGggYG9iamVjdF9pZGAsIHR3byBoYXNoZXMgd2Vy ZSBpbnRyb2R1Y2VkLiAgT25lIGhhc2ggY29udGFpbnMgYSBtYXAgb2YgdGhlDQpvYmplY3QgdG8g dGhlICpzZWVuKiBvYmplY3QgaWQuICBUaGUgc2Vjb25kIG1hcCBjb250YWlucyBhbGwgc2VlbiBv YmplY3QgaWRzLg0KVGhlIG1hcHMgYXJlIHVwZGF0ZWQgYW55IHRpbWUgYG9iamVjdF9pZGAgaXMg Y2FsbGVkLCBhbiBvYmplY3QgbW92ZXMsIG9yIGFuDQpvYmplY3QgaXMgZnJlZWQuDQoNCm9iamVj dF9pZCBpbXBsZW1lbnRhdGlvbiBpbiBSdWJ5Og0KDQpgYGBydWJ5DQokb2JqX3RvX2lkID0ge30N CiRpZF90b19vYmogPSB7fQ0KDQpjbGFzcyBPYmplY3QNCiAgZGVmIG9iamVjdF9pZA0KICAgIGlm ICRvYmpfdG9faWQua2V5PyhhZGRyZXNzKQ0KICAgICAgIyBTZWNvbmQgY2FsbCB0byBvYmplY3Rf aWQgb24gdGhpcyBvYmplY3QNCiAgICAgIHJldHVybiAkb2JqX3RvX2lkW2FkZHJlc3NdDQogICAg ZWxzZQ0KICAgICAgIyBGaXJzdCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0KDQog ICAgICBhZGRyID0gc2VsZi5hZGRyZXNzDQoNCiAgICAgIGxvb3AgZG8NCiAgICAgICAgaWYgJHNl ZW5faWRzLmtleT8oYWRkcikNCiAgICAgICAgICAjIFJlc29sdmUgY29uZmxpY3QNCiAgICAgICAg ICBhZGRyICs9IHNpemVvZihSVkFMVUUpDQogICAgICAgIGVsc2UNCiAgICAgICAgICAkb2JqX3Rv X2lkW3NlbGYuYWRkcmVzc10gPSBhZGRyDQogICAgICAgICAgJGlkX3RvX29ialthZGRyXSAgICAg ICAgID0gc2VsZg0KICAgICAgICAgIHJldHVybiBhZGRyDQogICAgICAgIGVuZA0KICAgICAgZW5k DQogICAgZW5kDQogIGVuZA0KDQogIHByaXZhdGUNCg0KICBkZWYgYWRkcmVzcw0KICAgICMgcmV0 dXJucyBhZGRyZXNzIGluIG1lbW9yeSBvZiBvYmplY3QNCiAgZW5kDQplbmQNCmBgYA0KDQpEdXJp bmcgY29tcGFjdGlvbjoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QNCiAgaGVhcCA9IFsgLi4uIF0g IyBtYW55IHNsb3RzDQoNCiAgd2hpbGUgbGVmdCA8IHJpZ2h0DQogICAgZGVzdF9zbG90ID0gaGVh cFtsZWZ0XQ0KICAgIHNvdXJjZV9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlmIG1vdmluZz8o c291cmNlX3Nsb3QpDQogICAgICBpZiAkb2JqX3RvX2lkLmtleT8oc291cmNlX3Nsb3QuYWRkcmVz cykNCiAgICAgICAgaWQgPSAkb2JqX3RvX2lkLmRlbGV0ZShzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0K ICAgICAgICAkb2JqX3RvX2lkW2Rlc3Rfc2xvdC5hZGRyZXNzXSA9IGlkDQogICAgICAgICRpZF90 b19vYmpbaWRdICAgICAgICAgICAgICAgID0gZGVzdF9zbG90LmFkZHJlc3MNCiAgICAgIGVuZA0K DQogICAgICAjIGV0Yw0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBGcmVlOg0K DQpgYGBydWJ5DQpkZWYgZnJlZShvYmopDQogIGlmICRvYmpfdG9faWQua2V5PyhvYmouYWRkcmVz cykNCiAgICAkc2Vlbl9pZHMuZGVsZXRlKCRvYmpfdG9faWQuZGVsZXRlKG9iai5hZGRyZXNzKSkN CiAgZW5kDQplbmQNCmBgYA0KDQojIyMgT2JqZWN0U3BhY2UuX2lkMnJlZg0KDQpXaGVuIGdlbmVy YXRpbmcgYW4gb2JqZWN0IGlkLCBpbiB0aGUgY2FzZSBvZiBhIGNvbGxpc2lvbiwgdGhlIGFkZHJl c3MgaXMNCmluY3JlbWVudGVkIGJ5IDQwLiAgVGhpcyBlbmFibGVzIGBfaWQycmVmYCB0byBkZXRl cm1pbmUgdGhlcmUgaXMgYSBWQUxVRSBwb2ludGVyDQphbmQgcm91bmQgdHJpcCB0aGUgb2JqZWN0 IGNvcnJlY3RseS4NCg0KIyMgQ29tcGFjdGlvbiBTdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMNCg0K QW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2Agd2lsbCBiZSAicGlubmVkIiBhbmQg Y2Fubm90IG1vdmUuICBDDQpleHRlbnNpb25zIG1hcmsgb2JqZWN0cyB2aWEgYHJiX2djX21hcmtg LCBzbyB0aGlzIGVuc3VyZXMgdGhhdCBwb2ludGVycyBpbiBDDQpzdGF5IHZhbGlkLg0KDQpIb3dl dmVyLCBzb21lIEMgZXh0ZW5zaW9ucyBtYXkgd2FudCB0byBzdXBwb3J0IHJlZmVyZW5jZSBtb3Zl bWVudC4NCg0KIyMjIFJlZmVyZW5jZSBNb3ZlbWVudCBpbiBDIGV4dGVuc2lvbnMNCg0KSW4gb3Jk ZXIgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIGEgQyBleHRlbnNpb24g aG9sZHMgYSByZWZlcmVuY2UNCnRvIGEgVkFMVUUsIHRoZSBWQUxVRSBzaG91bGQgbm90IG1vdmUu ICBHb2luZyBmb3J3YXJkLCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCm1vdmluZyBWQUxVRXMu ICBUbyBzdXBwb3J0IG1vdmluZyBWQUxVRXMsIGEgQyBleHRlbnNpb24gc2hvdWxkIGNoYW5nZQ0K YHJiX2djX21hcmtgIHRvIGByYl9nY19tYXJrX25vX3BpbmAsIHRoZW4gaW1wbGVtZW50IGEgbmV3 IGNhbGxiYWNrIHRoYXQgaXMNCmNhbGxlZCBkdXJpbmcgY29tcGFjdGlvbiB0aGF0IGdpdmVzIHRo ZSBleHRlbnNpb24gYW4gb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIGl0cw0Kb3duIHJlZmVyZW5jZXMu ICBBIG5ldyBmdW5jdGlvbiBgcmJfZ2NfbmV3X2xvY2F0aW9uYCB3aWxsIHJldHVybiB0aGUgbmV3 DQpsb2NhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFZBTFVFLg0KDQpIZXJlIGlzIGFuIGV4YW1wbGUg Zm9yIGF1dG9sb2FkIGZyb20gYHZhcmlhYmxlLmNgLiAgQSBuZXcgY29tcGFjdGlvbiBjYWxsYmFj ayBpcw0KcmVnaXN0ZXJlZCwgYGF1dG9sb2FkX2lfY29tcGFjdGA6DQoNCmBgYGMNCnN0YXRpYyBj b25zdCByYl9kYXRhX3R5cGVfdCBhdXRvbG9hZF9kYXRhX2lfdHlwZSA9IHsNCiAgICAiYXV0b2xv YWRfaSIsDQogICAge2F1dG9sb2FkX2lfbWFyaywgYXV0b2xvYWRfaV9mcmVlLCBhdXRvbG9hZF9p X21lbXNpemUsIGF1dG9sb2FkX2lfY29tcGFjdH0sDQogICAgMCwgMCwgUlVCWV9UWVBFRF9GUkVF X0lNTUVESUFURUxZDQp9Ow0KYGBgDQoNClRoZSBtYXJrIGZ1bmN0aW9uIGNoYW5nZXMgdG8gKm1h cmsqIHJlZmVyZW5jZXMsIGJ1dCAqbm90KiBwaW4gdGhlbToNCg0KYGBgYw0Kc3RhdGljIHZvaWQN CmF1dG9sb2FkX2lfbWFyayh2b2lkICpwdHIpDQp7DQogICAgc3RydWN0IGF1dG9sb2FkX2RhdGFf aSAqcCA9IHB0cjsNCg0KICAgIHJiX2djX21hcmtfbm9fcGluKHAtPmZlYXR1cmUpOw0KDQogICAg LyogYWxsb3cgR0MgdG8gZnJlZSB1cyBpZiBubyBtb2R1bGVzIHJlZmVyIHRvIHRoaXMgdmlhIGF1 dG9sb2FkX2NvbnN0LmFkICovDQogICAgaWYgKGxpc3RfZW1wdHkoJnAtPmNvbnN0YW50cykpIHsN CiAgICAgICAgcmJfaGFzaF9kZWxldGUoYXV0b2xvYWRfZmVhdHVyZW1hcCwgcC0+ZmVhdHVyZSk7 DQogICAgfQ0KfQ0KYGBgDQoNCkFmdGVyIHRoZSBoZWFwIGlzIGNvbXBhY3RlZCwgYW55IEMgZXh0 ZW5zaW9ucyB0aGF0IHJlZ2lzdGVyZWQgYSAiY29tcGFjdGlvbiINCmNhbGxiYWNrIHdpbGwgYmUg Y2FsbGVkIGFuZCBoYXZlIGEgY2hhbmNlIHRvIHVwZGF0ZSBpbnRlcm5hbCByZWZlcmVuY2VzLiAg VGhlDQphdXRvbG9hZCBjb21wYWN0aW9uIGZ1bmN0aW9uIGlzIGxpa2UgdGhpczoNCg0KYGBgYw0K c3RhdGljIHZvaWQNCmF1dG9sb2FkX2lfY29tcGFjdCh2b2lkICpwdHIpDQp7DQogICAgc3RydWN0 IGF1dG9sb2FkX2RhdGFfaSAqcCA9IHB0cjsNCiAgICBwLT5mZWF0dXJlID0gcmJfZ2NfbmV3X2xv Y2F0aW9uKHAtPmZlYXR1cmUpOw0KYGBgDQoNClRoZSBjb21wYWN0aW9uIGNhbGxiYWNrIGFza3Mg Zm9yIHRoZSBuZXcgbG9jYXRpb24gZm9yIHRoZSBgcC0+ZmVhdHVyZWANCnJlZmVyZW5jZS4gIGBy Yl9nY19uZXdfbG9jYXRpb25gIHdpbGwgZWl0aGVyIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBv Zg0KYHAtPmZlYXR1cmVgIChpbiB0aGUgY2FzZSB0aGUgVkFMVUUgZGlkIG5vdCBtb3ZlKSwgb3Ig dGhlIG5ldyBsb2NhdGlvbi4NCg0KIyMgUmVmZXJlbmNlIFZlcmlmaWNhdGlvbiBhbmQgVGVzdGlu Zw0KDQpBZnRlciBjb21wYWN0aW9uLCBvYmplY3RzIHRoYXQgaGF2ZSBtb3ZlZCBhcmUgY2hhbmdl ZCB0byBgVF9NT1ZFRGAgb2JqZWN0cyB3aXRoDQpmb3J3YXJkaW5nIGFkZHJlc3Nlcy4gIE9uY2Ug YWxsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQsIG5vIG9iamVjdCBzaG91bGQgcG9pbnQNCnRvIGEg YFRfTU9WRURgIHNsb3QuICBXZSBjYW4gc2F5IHRoYXQgYmVmb3JlIGFuZCBhZnRlciBjb21wYWN0 aW9uLCBubyBvYmplY3QNCnNob3VsZCBldmVyIHBvaW50IGF0IGEgYFRfTU9WRURgIHNsb3QuICBT byBpZiBhIGBUX01PVkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQNCm9uIHRvIHRoZSBtYXJrIHF1 ZXVlLCB0aGVyZSBpcyBhIGJ1Zy4gIGBwdXNoX21hcmtfc3RhY2tgIGhhcyBhIGNoZWNrIGZvcg0K YFRfTU9WRURgIG9iamVjdHMsIGFuZCB3aWxsIGNyYXNoIGlmIGEgYFRfTU9WRURgIG9iamVjdCBp cyBldmVyIHB1c2hlZCBvbiB0byB0aGUNCm1hcmsgc3RhY2suDQoNCkEgbWV0aG9kIGBHQy52ZXJp ZnlfY29tcGFjdGlvbl9yZWZlcmVuY2VzYCB3YXMgYWRkZWQgdGhhdCBkb3VibGVzIHRoZSBhdmFp bGFibGUNCmhlYXAgc2l6ZSwgdGhlbiBjb21wYWN0cyB0aGUgaGVhcC4gIFNpbmNlIHRoZSBoZWFw IGhhcyBkb3VibGVkIGluIHNpemUsIGFueQ0Kb2JqZWN0IHRoYXQgY2FuIG1vdmUgd2lsbCBtb3Zl LiAgQW55IHJlZmVyZW5jZXMgdG8gYFRfTU9WRURgIG9iamVjdHMgd2lsbCBiZQ0KY2F1Z2h0IGR1 cmluZyB0aGUgR0MgcGhhc2UgYWZ0ZXIgY29tcGFjdGlvbi4NCg0KIyMgS25vd24gSXNzdWUNCg0K U2FmZXR5IGZvciBDIGV4dGVuc2lvbnMgZGVwZW5kcyBlbnRpcmVseSBvbiBDIGV4dGVuc2lvbnMg bWFya2luZyB0aGVpcg0KcmVmZXJlbmNlcy4gIElmIGEgQyBleHRlbnNpb24gZG9lcyBub3QgbWFy ayBhIHJlZmVyZW5jZSwgdGhlIGNvbXBhY3RvciBhc3N1bWVzDQp0aGF0IHRoZSBvYmplY3QgaXMg c2FmZSB0byBtb3ZlLiAgVGhpcyBjYW4gY2F1c2UgYW4gZXJyb3IgaW4gdGhlIGZvbGxvd2luZw0K c2l0dWF0aW9uLCB3aGVuIHRoZXJlIGlzIGFuIG9iamVjdCBncmFwaCBsaWtlIHRoaXM6DQoNCg0K YGBgDQog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQ ICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU kCANCiDilIIgIFJ1YnkgT2JqZWN0ICDilIIgICAgICAg4pSCICBSdWJ5IE9iamVjdCAg4pSCIA0K IOKUgiAgSW1wbGVtZW50ZWQgIOKUgiAgICAgICDilIIgIEltcGxlbWVudGVkICDilIIgDQog4pSC ICAgIGluIFJ1YnkgICAg4pSCICAgICAgIOKUgiAgICAgaW4gQyAgICAgIOKUgiANCiDilIIgICAg ICAgICAgICAgICDilIIgICAgICAg4pSCICAgICAgICAgICAgICAg4pSCIA0KIOKUlOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICDilJTilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggDQogICAgICAgICDilIIg ICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgIA0KICAgICAgICAg4pSCICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAg ICAgIOKUgiAgIE5PVCAgIA0KIE1hcmtlZCAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICBN YXJrZWQgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgIA0K ICAgICAgICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSQICAgICAgICAgICAgIA0KICAgICAgICAg4pSCICAg4pSCICAgICAgICAgICAgICAg 4pSCICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIIgIFJ1YnkgT2JqZWN0ICDilIIg ICAgICAgICAgICAgDQogICAgICAgICDilJTilIDilIDilrbilIIgICAgICAgICAgICAgICDilILi l4DilIAg4pSYICAgICAgICAgDQogICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAg4pSCICAg ICAgICAgICAgIA0KICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICANCmBgYA0KDQpJZiB0aGUgQyBleHRlbnNp b24gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0LCBidXQgZXhwZWN0cyB0aGUgb2Jq ZWN0DQpub3QgdG8gbW92ZSBiZWNhdXNlIGEgUnVieSBvYmplY3QgY29udGFpbnMgYSByZWZlcmVu Y2UsIHRoZW4gdGhlIHRhcmdldCBSdWJ5DQpvYmplY3QgKm1heSogbW92ZSBhbmQgdGhlIHJlZmVy ZW5jZSBpbiB0aGUgQyBleHRlbnNpb24gd2lsbCBiZSB3cm9uZy4gIEkgbGlrZSB0bw0KY2FsbCB0 aGVzZSAiZ2hvc3QgcmVmZXJlbmNlcyIgYmVjYXVzZSB0aGUgR0MgY2Fubm90IHNlZSB0aGVtIGJ1 dCB0aGV5IHdpbGwgY29tZQ0KYmFjayB0byBoYXVudCB5b3UuDQoNClRoZSBzb2x1dGlvbiB0byB0 aGlzIGlzIGVpdGhlcjoNCg0KMS4gQ2hhbmdlIHRoZSBDIGV4dGVuc2lvbiB0byBgcmJfZ2NfbWFy a2AgdGhlIG9iamVjdA0KMi4gUmVtb3ZlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgQyBleHRlbnNp b24NCg0KT25lIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24gd2FzIGZpeGVkIGhlcmU6DQoNCiAg aHR0cHM6Ly9naXRodWIuY29tL21zZ3BhY2svbXNncGFjay1ydWJ5L2lzc3Vlcy8xMzMNCg0KIyMg U3VtbWFyeQ0KDQpCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIEMgZXh0ZW5zaW9ucyBpcyBt YWludGFpbmVkIGJ5ICJwaW5uaW5nIiBhbnkNCnJlZmVyZW5jZXMgbWFya2VkIHdpdGggYHJiX2dj X21hcmtgLiAgQSBmdWxsIG1hcmsgKm11c3QqIGJlIGRvbmUgYmVmb3JlDQpjb21wYWN0aW5nIHRv IGRpc2NvdmVyIGFsbCBwaW5uZWQgcmVmZXJlbmNlcy4NCg0KQSBuZXcgY2FsbGJhY2sgZm9yIEMg ZXh0ZW5zaW9ucyBpcyBpbnRyb2R1Y2VkIHNvIHRoYXQgQyBleHRlbnNpb25zIGNhbiBzdXBwb3J0 DQpjb21wYWN0aW9uLiAgQyBleHRlbnNpb25zIHRoYXQgd2lzaCB0byBzdXBwb3J0IGNvbXBhY3Rp b24gbXVzdCB1c2UgdGhlIG5ldw0KY2FsbGJhY2ssIGByYl9nY19tYXJrX25vX3BpbmAsIGFuZCBg cmJfZ2NfbmV3X2xvY2F0aW9uYC4NCg0KQyBleHRlbnNpb25zIHRoYXQgbWFpbnRhaW4gcG9pbnRl cnMgYnV0IGRvIG5vdCBtYXJrIHRob3NlIHBvaW50ZXJzIG1heSBTRUdWLiAgV2UNCmNhbiB1c2Ug YEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5jZXNgIHRvIGRpc2NvdmVyIHRoZXNlIGlzc3Vl cy4NCg0KW14xXTogU2VlIGFsc28gIlRoZSBHYXJiYWdlIENvbGxlY3Rpb24gSGFuZGJvb2siIHBh Z2UgMzINCg0KDQotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpiZWZv cmVfY29tcGFjdC0wLnBuZyAoMTExIEtCKQ0KYWZ0ZXJfY29tcGFjdC0wLnBuZyAoODAuNiBLQikN CmJlZm9yZV9jb21wYWN0LTEucG5nICg4MS4yIEtCKQ0KYWZ0ZXJfY29tcGFjdC0xLnBuZyAoNzku NCBLQikNCjAwMDEtR0MtQ29tcGFjdGlvbi1mb3ItTVJJLnBhdGNoICg3Ny40IEtCKQ0KcnVieV8y MDE5LTAzLTIyLTE3MTgzOV9QaWthY2h1RVhFcy1NQlAtMjAxOC5jcmFzaCAoNzEuNCBLQikNCnJ1 YnlfMjAxOS0wMy0yMi0xNzE4MzktMV9QaWthY2h1RVhFcy1NQlAtMjAxOC5jcmFzaCAoNzEuNCBL QikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K