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 E27B120248 for ; Wed, 3 Apr 2019 00:37:29 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 8E446121422; Wed, 3 Apr 2019 09:37:26 +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 CAECB121422 for ; Wed, 3 Apr 2019 09:37:23 +0900 (JST) Received: by filter0062p3las1.sendgrid.net with SMTP id filter0062p3las1-15753-5CA40043-A 2019-04-03 00:37:23.455976838 +0000 UTC m=+375101.254374106 Received: from herokuapp.com (unknown [54.147.237.187]) by ismtpd0047p1mdw1.sendgrid.net (SG) with ESMTP id cLmOvWPuRfOwR9Vi8OIV8A for ; Wed, 03 Apr 2019 00:37:22.995 +0000 (UTC) Date: Wed, 03 Apr 2019 00:37:23 +0000 (UTC) From: tenderlove@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67602 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=2FbSnEjJFRTUHRj45oOQBme8zohdTU9K3TxrDAbWLn4JkIhW5eVnDF6957BS?= =?us-ascii?Q?Zt+bwkclbb43OyEBsaxSkkSlYMG1KiED0BrTDAZ?= =?us-ascii?Q?KMtdvSgAIaojMfnwF7rkU9PiuAeHlKdfNrSI1c=2F?= =?us-ascii?Q?1MG+zJgnlVcTOchb6PMS+MjrWQcihrmpNSFE0uS?= =?us-ascii?Q?TlBJuPp+1kNTMYnE=2FcmJdeYwPDOtM8IIIkg=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 92118 Subject: [ruby-core:92118] [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 UGF0dGVyc29uKS4NCg0KDQpAbm9haCBJIHRoaW5rIEkgaGF2ZSB0aGVzZSBlcnJvcnMgZml4ZWQg b24gbXkgYnJhbmNoIChpbmNsdWRpbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24pLiAgSSBz bG93ZWQgZG93biBldmVyeSBjYWxsIHRvIGZyZWUgYW4gb2JqZWN0IGJlY2F1c2UgdGhleSBtYXkg bmVlZCB0byBiZSByZW1vdmVkIGZyb20gdGhlIGdsb2JhbCBvYmplY3RfaWQgdGFibGUuICBTaG91 bGQgYmUgZml4ZWQgaGVyZSB0aG91Z2g6IGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvY29t bWl0LzgyZjNkOGI2Y2M0ZTQ5MWYxM2VjMjlmNjdkYWEyYmI0YWUwZjFkYmQgKEdDIGJlbmNobWFy a3MgYXJlIHRoZSBzYW1lIHNwZWVkIG9uIHRydW5rIHZzIG15IGJyYW5jaCkNCg0KSSdsbCB0cnkg dG8gbWVyZ2UgdGhpcyB0aGlzIHdlZWssIGJ1dCBJJ20gdHJhdmVsaW5nIHRvbW9ycm93IHNvIEkg bWF5IGNvbW1pdCB0aGlzIG9uIE1vbmRheS4gIEknbSByZWFsbHkgc29ycnkgZm9yIHRoZSBkZWxh eS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAj MTU2MjY6IE1hbnVhbCBDb21wYWN0aW9uIGZvciBNUkkncyBHQyAoYEdDLmNvbXBhY3RgKQ0KaHR0 cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE1NjI2I2NoYW5nZS03NzQ0NA0KDQoqIEF1 dGhvcjogdGVuZGVybG92ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IE9wZW4N CiogUHJpb3JpdHk6IE5vcm1hbA0KKiBBc3NpZ25lZTogDQoqIFRhcmdldCB2ZXJzaW9uOiANCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhpLA0KDQpJJ3ZlIGF0dGFj aGVkIGEgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzIGEgY29tcGFjdG9yIGZvciBNUkkuICBJJ2xsIHRy eSB0byBkZXNjcmliZSB0aGUgcGF0Y2ggaW4gZGV0YWlsIGJlbG93LCBidXQgdGhlIGJpZ2dlc3Qg dXNlciBmYWNpbmcgY2hhbmdlcyBhcmU6DQoNCjEuIEEgbmV3IG1ldGhvZCBgR0MuY29tcGFjdGAg dGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gUnVieQ0KMi4gQyBleHRlbnNpb25zIGhhdmUgYSBuZXcg ImFmdGVyIGNvbXBhY3Rpb24iIGNhbGxiYWNrIHRoZXkgY2FuIHJlZ2lzdGVyDQozLiBJbnRyb2R1 Y3Rpb24gb2YgbmV3IG1hcmtpbmcgZnVuY3Rpb25zIHRoYXQgYWxsb3cgb2JqZWN0cyB0byBiZSBt YXJrZWQsIGJ1dCBub3QgInBpbm5lZCIgdG8gdGhlIHNhbWUgbG9jYXRpb24NCjQuIEEgZnVuY3Rp b24gdG8gZ2V0IHRoZSBuZXcgbG9jYXRpb24gb2YgYW4gb2JqZWN0ICh0byBiZSB1c2VkIGZyb20g dGhlICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjaykNCg0KIyBDb21wYWN0b3IgZm9yIFJHZW5H Qw0KDQpUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tcGFjdG9yIGltcGxlbWVudGF0aW9u IGZvciBSR2VuR0MuICBUaGlzIHBhdGNoDQphZGRzIGEgbmV3IG1ldGhvZCB0byBSdWJ5LCBgR0Mu Y29tcGFjdGAgd2hpY2ggd2lsbCBjb21wYWN0IHRoZSBvYmplY3RzIGluIHRoZQ0KaGVhcC4gIFdo YXQgZm9sbG93cyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0sIGFsb25nIHdpdGgg YWNoaWV2ZW1lbnRzDQphbmQgdGVjaG5pY2FsIGNoYWxsZW5nZXMuDQoNCiMjIFN0ZXBzIGZvciBD b21wYWN0aW9uDQoNClRoZXNlIGFyZSB0aGUgaGlnaCBsZXZlbCBzdGVwcyB0YWtlbiBpbiBgR0Mu Y29tcGFjdGAgYXJlIGFzIGZvbGxvd3M6DQoNCjEuIEZ1bGwgR0MNCjIuIE1vdmUgb2JqZWN0cw0K My4gVXBkYXRlIHJlZmVyZW5jZXMNCjQuIEZ1bGwgR0MNCg0KIyMjIFN0ZXAgT25lLCBGdWxsIEdD DQoNCk5vdCBhbGwgb2JqZWN0cyBpbiBSdWJ5J3MgaGVhcCBjYW4gbW92ZS4gIEluIHBhcnRpY3Vs YXIsIEMgZXh0ZW5zaW9ucyBtYXkgaG9sZA0KcmVmZXJlbmNlcyB0byBWQUxVRSBwb2ludGVycy4g IElmIHRoZSBWQUxVRSBwb2ludGVycyBtb3ZlLCB0aGUgQyBleHRlbnNpb24gbWF5DQpub3QgYmUg YWJsZSB0byBmaW5kIHRoZW0gYW5kIHdpbGwgZ2V0IGEgU0VHViBvciBwb3NzaWJseSB3cm9uZyBk YXRhLg0KDQpUbyBwcmV2ZW50IHRoaXMsIGEgbmV3ICJwaW5uaW5nIiB0YWJsZSB3YXMgaW50cm9k dWNlZC4gIEFueSBvYmplY3QgbWFya2VkIHZpYQ0KYHJiX2djX21hcmtgIGlzICJwaW5uZWQiIGFu ZCBpcyBub3QgYWxsb3dlZCB0byBtb3ZlLiAgQyBleHRlbnNpb25zIG11c3QgbWFyaw0KdGhlaXIg cmVmZXJlbmNlcyBpbiBvcmRlciB0byBrZWVwIHRoZW0gYWxpdmUuICBTaW5jZSBDIGV4dGVuc2lv bnMgdXNlDQpgcmJfZ2NfbWFya2AgdG8gbWFyayBhIHJlZmVyZW5jZSwgd2Uga25vdyBub3QgdG8g bW92ZSB0aGF0IHJlZmVyZW5jZS4gIEluIG9yZGVyDQp0byBlbnN1cmUgYWxsIHJlZmVyZW5jZXMg Z2V0IG1hcmtlZCwgd2UgcGVyZm9ybSBhIGZ1bGwgR0MuDQoNCk5ldyBmdW5jdGlvbnMsIGByYl9n Y19tYXJrX25vX3BpbmAsIGV0YyB3ZXJlIGludHJvZHVjZWQgYW5kIHVzZWQgaW50ZXJuYWxseS4N ClRoZXNlIGZ1bmN0aW9ucyBrZWVwcyB0aGUgb2JqZWN0IGFsaXZlIGJ1dCB3aXRob3V0IHBpbm5p bmcgdGhlIHJlZmVyZW5jZS4NCg0KU3VtbWFyeTogUGVyZm9ybSBhIGZ1bGwgR0Mgc28gdGhhdCBv YmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCBkbyBub3QgbW92ZS4NCg0KIyMjIFN0ZXAg VHdvLCBNb3ZlIE9iamVjdHMNCg0KVGhpcyBjb21wYWN0b3IgdXNlcyBhICJ0d28gZmluZ2VyIiBh bGdvcml0aG0gd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gIlRoZQ0KUHJvZ3JhbW1pbmcgTGFuZ3Vh Z2UgTElTUDogSXRzIE9wZXJhdGlvbiBhbmQgQXBwbGljYXRpb25zIiAocGFnZSAyMjgpW14xXS4g IFR3bw0KcG9pbnRlcnMgcG9pbnQgYXQgZWFjaCBzaWRlIG9mIHRoZSBoZWFwLCBpZiBvbmUgc2xv dCBpcyBlbXB0eSwgYW5kIHRoZSBvdGhlciBpcw0KbW92ZWFibGUsIGl0IHN3YXBzIHBsYWNlcyBh bmQgbGVhdmVzIGEgYFRfTU9WRURgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGENCmZvcndhcmRpbmcg YWRkcmVzcy4NCg0KSW4gUnVieSwgdGhlIGFsZ29yaXRobSBsb29rcyBzb21ldGhpbmcgbGlrZSB0 aGlzOg0KDQpgYGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xv dHMNCiAgbGVmdCAgPSAwDQogIHJpZ2h0ID0gaGVhcC5sZW5ndGggLSAxDQoNCiAgd2hpbGUgbGVm dCA8IHJpZ2h0DQogICAgbGVmdF9zbG90ID0gaGVhcFtsZWZ0XQ0KICAgIHJpZ2h0X3Nsb3QgPSBo ZWFwW3JpZ2h0XQ0KDQogICAgaWYgaXNfZW1wdHk/KGxlZnRfc2xvdCkgJiYgIWlzX2VtcHR5Pyhy aWdodF9zbG90KSAmJiBjYW5fbW92ZT8ocmlnaHRfc2xvdCkNCiAgICAgIHN3YXAobGVmdCwgcmln aHQpDQogICAgICBoZWFwW3JpZ2h0XSA9IFRfTU9WRUQubmV3KGxlZnQpICMgbGVhdmUgZm9yd2Fy ZGluZyBhZGRyZXNzDQogICAgZW5kDQoNCiAgICB3aGlsZSAhaXNfZW1wdHk/KGhlYXBbbGVmdF0p DQogICAgICBsZWZ0ICs9IDENCiAgICBlbmQNCg0KICAgIHdoaWxlIGlzX2VtcHR5PyhoZWFwW3Jp Z2h0XSkgfHwgIWNhbl9tb3ZlPyhoZWFwW3JpZ2h0XSkNCiAgICAgIHJpZ2h0IC09IDENCiAgICBl bmQNCiAgZW5kDQplbmQNCmBgYA0KDQpJZiB3ZSBoYXZlIGEgaGVhcCB3aXRoIDYgc2xvdHMsIGJl Zm9yZSBjb21wYWN0aW9uIGl0IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UNCnRoaXM6DQoNCmBg YA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENv bXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAg ICDilIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJAN CiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDi lIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA 4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg 4pSCRW1wdHnilIJFbXB0eeKUgiAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAg ICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pSYDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSByZWZlcmVuY2UgdXBkYXRl LCBpdCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKU jCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAg ICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAg ICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKU giAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAg IOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0K U2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKU gk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg IOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKU tOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNClNsb3RzIDUgYW5kIDYg Y29udGFpbiBgVF9NT1ZFRGAgb2JqZWN0cyB0aGF0IHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb25z IG9mIEQgYW5kDQpDIG9iamVjdHMuDQoNCiMjIyBTdGVwIFRocmVlLCBVcGRhdGUgUmVmZXJlbmNl cw0KDQpBZnRlciBvYmplY3RzIGhhdmUgbW92ZWQsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQuICBU aGlzIGlzIGEgbWF0dGVyIG9mIHVwZGF0aW5nDQphbnkgcmVmZXJlbmNlcyB0byB1c2UgdGhlIGZv cndhcmRpbmcgYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uDQoNCkZv ciBleGFtcGxlLCBpZiBvYmplY3QgQSBoYXMgYSByZWZlcmVuY2UgdG8gQywgYW5kIEIgYSByZWZl cmVuY2UgdG8gRDoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAg ICAgICAgICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAg ICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAg ICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKU rOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg 4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMg IOKUgiAgQSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDilIIgIEQgIOKUgg0KICAg ICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAg ICAg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDi lIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAg ICAgICAgICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIg ICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDi lIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSYICAgDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSB1cGRhdGlu ZyByZWZlcmVuY2VzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAg ICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9u ICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJ bmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDi lIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg 4pSCICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAg ICAg4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKU lOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAg ICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAg DQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDi lIIgICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQog ICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpUaGUg dXBkYXRlIHJlZmVyZW5jZXMgc3RlcCBsb29rcyBhdCBlYWNoIG9iamVjdCBpbiB0aGUgaGVhcCwg Y2hlY2tzIHRvIHNlZSBpZiBpdA0KcmVmZXJlbmNlcyBhbnkgbW92ZWQgc2xvdHMsIHRoZW4gdXBk YXRlcyB0aGUgcmVmZXJlbmNlIHRvIHVzZSB0aGUgbmV3IGxvY2F0aW9uLg0KSW4gUnVieSwgaXQg bG9va3MgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgdXBkYXRlX3JlZmVyZW5jZXMNCiAgaGVh cC5lYWNoIGRvIHxzbG90fA0KICAgIG5leHQgaWYgaXNfZW1wdHk/KHNsb3QpIHx8IGlzX21vdmVk PyhzbG90KQ0KDQogICAgc2xvdC5yZWZlcmVuY2VzLmVhY2hfd2l0aF9pbmRleCBkbyB8Y2hpbGQs IGl8DQogICAgICBpZiBpc19tb3ZlZD8oY2hpbGQpDQogICAgICAgIHNsb3Quc2V0X3JlZmVyZW5j ZShpLCBjaGlsZC5uZXdfbG9jYXRpb24pDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQplbmQN CmBgYA0KDQpBZnRlciByZWZlcmVuY2UgdXBkYXRlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxpa2Ug dGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAg ICBBZnRlciBSZWYgVXBkYXRlcyAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKU lCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAg ICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKU gOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0 ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAg QSAg4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAg ICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSC DQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDi lIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilrIgICAg IOKWsiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKU giAgICAg4pSCICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilJggICAgICAgICAgICAg ICANCiAgICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAg ICAgICAgICAgICAgIA0KYGBgDQoNCiMjIyBTdGVwIEZvdXIsIEZ1bGwgR0MNCg0KQWZ0ZXIgcmVm ZXJlbmNlcyBoYXZlIGJlZW4gdXBkYXRlZCwgYSBmdWxsIEdDIGlzIHBlcmZvcm1lZC4gIFRoaXMg Y29udmVydHMgdGhlDQpgVF9NT1ZFRGAgc2xvdHMgYmFjayBpbiB0byBgVF9FTVBUWWAgc2xvdHMu ICBUaGUgR0MgYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mDQp0aGlzIGJlY2F1c2Ugbm8gb2Jq ZWN0IHNob3VsZCByZWZlcmVuY2UgYSBgVF9NT1ZFRGAgc2xvdC4NCg0KIyMgTm9uIE1vdmluZyBP YmplY3RzDQoNCk5vbiBtb3Zpbmcgb2JqZWN0cyBhcmU6DQoNCjEuIE9iamVjdHMgb24gdGhlIHN0 YWNrDQoyLiBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KMy4gSGFzaCBrZXkgb2Jq ZWN0cw0KDQojIyMgT2JqZWN0cyBvbiB0aGUgc3RhY2sNCg0KVGhlIHN0YWNrIHNob3VsZCBub3Qg YmUgbXV0YXRlZCwgc28gdGhlc2UgYXJlIHBpbm5lZC4NCg0KIyMjIE9iamVjdHMgbWFya2VkIHdp dGggYHJiX2djX21hcmtgDQoNCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBhbnkgb2JqZWN0IG1hcmtl ZCB3aXRoIGByYl9nY19tYXJrYCBtYXkgbm90IG1vdmUgYmVjYXVzZSBhDQpDIGV4dGVuc2lvbiBt YXkgaG9sZCBhIHJlZmVyZW5jZS4gIEhlcmUgaXMgYW4gZXhjZXJwdCBmcm9tIFlhamwsIGEgSlNP TiBwYXJzZXIuDQpUaGlzIGlzIHRoZSBtYXJrIGZ1bmN0aW9uIGl0IHVzZXM6DQoNCmBgYGMNCnN0 YXRpYyB2b2lkIHlhamxfZW5jb2Rlcl93cmFwcGVyX21hcmsodm9pZCAqIHdyYXBwZXIpIHsNCiAg ICB5YWpsX2VuY29kZXJfd3JhcHBlciAqIHcgPSB3cmFwcGVyOw0KICAgIGlmICh3KSB7DQogICAg ICAgIHJiX2djX21hcmsody0+b25fcHJvZ3Jlc3NfY2FsbGJhY2spOw0KICAgICAgICByYl9nY19t YXJrKHctPnRlcm1pbmF0b3IpOw0KICAgIH0NCn0NCg0KDQpvYmogPSBEYXRhX01ha2VfU3RydWN0 KGtsYXNzLCB5YWpsX2VuY29kZXJfd3JhcHBlciwgeWFqbF9lbmNvZGVyX3dyYXBwZXJfbWFyaywg eWFqbF9lbmNvZGVyX3dyYXBwZXJfZnJlZSwgd3JhcHBlcik7DQpgYGANCg0KVGhlIHZhbHVlcyBp biB0aGlzIG1hcmsgZnVuY3Rpb24gYHctPm9uX3Byb2dyZXNzX2NhbGxiYWNrYCBhbmQgYHctPnRl cm1pbmF0b3JgDQp3aWxsIG5vdCBtb3ZlIHNpbmNlIHRoZXkgYXJlIHBpbm5lZCBieSBgcmJfZ2Nf bWFya2AuDQoNCiMjIyBIYXNoIGtleSBvYmplY3RzDQoNCkNlcnRhaW4gaGFzaCBrZXlzIHdpbGwg bm90IG1vdmUuICBNb3N0IG9iamVjdHMgdXNlIHRoZWlyIGFkZHJlc3MgYXMgdGhlIGhhc2gNCnZh bHVlLiAgSWYgdGhlIG9iamVjdCBtb3ZlcywgdGhlIGhhc2ggdmFsdWUgY291bGQgY2hhbmdlLCBz byBoYXNoIGtleXMgYXJlIG5vdA0KYWxsb3dlZCB0byBtb3ZlLg0KDQpUaGVyZSBpcyBhbiBleGNl cHRpb24gZm9yIHN0cmluZyBvYmplY3RzLiAgU3RyaW5nIG9iamVjdHMgY2FsY3VsYXRlIHRoZWly IGhhc2gNCmJhc2VkIG9uIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nLiAgU2luY2UgdGhlIGJ5dGVz IGluIHRoZSBzdHJpbmcgZG8gbm90IGNoYW5nZQ0KYWZ0ZXIgbW92ZSwgdGhleSBhcmUgYWxsb3dl ZCB0byBtb3ZlLiAgTW9zdCBoYXNoIGtleXMgaW4gbGFyZ2UgcHJvZ3JhbXMgYXJlDQpzdHJpbmdz LCBzbyBvbmx5IGFsbG93aW5nIHN0cmluZyBrZXlzIHRvIG1vdmUgc2VlbWVkIGVub3VnaC4NCg0K IyMgU3BlY2lhbCBDb25zaWRlcmF0aW9ucw0KDQojIyMgT2JqZWN0IElEDQoNCmBPYmplY3Qjb2Jq ZWN0X2lkYCBiYXNlcyBpdHMgdmFsdWUgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0LiAg Rm9yIGV4YW1wbGU6DQoNCmBgYHJ1YnkNCnggPSBPYmplY3QubmV3DQppZCA9IHgub2JqZWN0X2lk DQpHQy5jb21wYWN0ICAgICAgICAjIGB4YCBtb3Zlcw0KaWQgPT0geC5vYmplY3RfaWQgIyBgaWRg IHNob3VsZCBiZSBzYW1lIGFzIGB4Lm9iamVjdF9pZGANCmBgYA0KDQpXZSBleHBlY3QgdGhlIG9i amVjdCBpZCB0byByZW1haW4gdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBjb21wYWN0aW9uLiAgVG8g ZGVhbA0Kd2l0aCBgb2JqZWN0X2lkYCwgdHdvIGhhc2hlcyB3ZXJlIGludHJvZHVjZWQuICBPbmUg aGFzaCBjb250YWlucyBhIG1hcCBvZiB0aGUNCm9iamVjdCB0byB0aGUgKnNlZW4qIG9iamVjdCBp ZC4gIFRoZSBzZWNvbmQgbWFwIGNvbnRhaW5zIGFsbCBzZWVuIG9iamVjdCBpZHMuDQpUaGUgbWFw cyBhcmUgdXBkYXRlZCBhbnkgdGltZSBgb2JqZWN0X2lkYCBpcyBjYWxsZWQsIGFuIG9iamVjdCBt b3Zlcywgb3IgYW4NCm9iamVjdCBpcyBmcmVlZC4NCg0Kb2JqZWN0X2lkIGltcGxlbWVudGF0aW9u IGluIFJ1Ynk6DQoNCmBgYHJ1YnkNCiRvYmpfdG9faWQgPSB7fQ0KJGlkX3RvX29iaiA9IHt9DQoN CmNsYXNzIE9iamVjdA0KICBkZWYgb2JqZWN0X2lkDQogICAgaWYgJG9ial90b19pZC5rZXk/KGFk ZHJlc3MpDQogICAgICAjIFNlY29uZCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0K ICAgICAgcmV0dXJuICRvYmpfdG9faWRbYWRkcmVzc10NCiAgICBlbHNlDQogICAgICAjIEZpcnN0 IGNhbGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQoNCiAgICAgIGFkZHIgPSBzZWxmLmFk ZHJlc3MNCg0KICAgICAgbG9vcCBkbw0KICAgICAgICBpZiAkc2Vlbl9pZHMua2V5PyhhZGRyKQ0K ICAgICAgICAgICMgUmVzb2x2ZSBjb25mbGljdA0KICAgICAgICAgIGFkZHIgKz0gc2l6ZW9mKFJW QUxVRSkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICRvYmpfdG9faWRbc2VsZi5hZGRyZXNzXSA9 IGFkZHINCiAgICAgICAgICAkaWRfdG9fb2JqW2FkZHJdICAgICAgICAgPSBzZWxmDQogICAgICAg ICAgcmV0dXJuIGFkZHINCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQoN CiAgcHJpdmF0ZQ0KDQogIGRlZiBhZGRyZXNzDQogICAgIyByZXR1cm5zIGFkZHJlc3MgaW4gbWVt b3J5IG9mIG9iamVjdA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBjb21wYWN0aW9uOg0KDQpg YGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCg0KICB3 aGlsZSBsZWZ0IDwgcmlnaHQNCiAgICBkZXN0X3Nsb3QgPSBoZWFwW2xlZnRdDQogICAgc291cmNl X3Nsb3QgPSBoZWFwW3JpZ2h0XQ0KDQogICAgaWYgbW92aW5nPyhzb3VyY2Vfc2xvdCkNCiAgICAg IGlmICRvYmpfdG9faWQua2V5Pyhzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0KICAgICAgICBpZCA9ICRv YmpfdG9faWQuZGVsZXRlKHNvdXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgICRvYmpfdG9faWRb ZGVzdF9zbG90LmFkZHJlc3NdID0gaWQNCiAgICAgICAgJGlkX3RvX29ialtpZF0gICAgICAgICAg ICAgICAgPSBkZXN0X3Nsb3QuYWRkcmVzcw0KICAgICAgZW5kDQoNCiAgICAgICMgZXRjDQogICAg ZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KRHVyaW5nIEZyZWU6DQoNCmBgYHJ1YnkNCmRlZiBmcmVl KG9iaikNCiAgaWYgJG9ial90b19pZC5rZXk/KG9iai5hZGRyZXNzKQ0KICAgICRzZWVuX2lkcy5k ZWxldGUoJG9ial90b19pZC5kZWxldGUob2JqLmFkZHJlc3MpKQ0KICBlbmQNCmVuZA0KYGBgDQoN CiMjIyBPYmplY3RTcGFjZS5faWQycmVmDQoNCldoZW4gZ2VuZXJhdGluZyBhbiBvYmplY3QgaWQs IGluIHRoZSBjYXNlIG9mIGEgY29sbGlzaW9uLCB0aGUgYWRkcmVzcyBpcw0KaW5jcmVtZW50ZWQg YnkgNDAuICBUaGlzIGVuYWJsZXMgYF9pZDJyZWZgIHRvIGRldGVybWluZSB0aGVyZSBpcyBhIFZB TFVFIHBvaW50ZXINCmFuZCByb3VuZCB0cmlwIHRoZSBvYmplY3QgY29ycmVjdGx5Lg0KDQojIyBD b21wYWN0aW9uIFN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucw0KDQpBbnkgb2JqZWN0IG1hcmtlZCB3 aXRoIGByYl9nY19tYXJrYCB3aWxsIGJlICJwaW5uZWQiIGFuZCBjYW5ub3QgbW92ZS4gIEMNCmV4 dGVuc2lvbnMgbWFyayBvYmplY3RzIHZpYSBgcmJfZ2NfbWFya2AsIHNvIHRoaXMgZW5zdXJlcyB0 aGF0IHBvaW50ZXJzIGluIEMNCnN0YXkgdmFsaWQuDQoNCkhvd2V2ZXIsIHNvbWUgQyBleHRlbnNp b25zIG1heSB3YW50IHRvIHN1cHBvcnQgcmVmZXJlbmNlIG1vdmVtZW50Lg0KDQojIyMgUmVmZXJl bmNlIE1vdmVtZW50IGluIEMgZXh0ZW5zaW9ucw0KDQpJbiBvcmRlciB0byBtYWludGFpbiBiYWNr d2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgYSBDIGV4dGVuc2lvbiBob2xkcyBhIHJlZmVyZW5jZQ0K dG8gYSBWQUxVRSwgdGhlIFZBTFVFIHNob3VsZCBub3QgbW92ZS4gIEdvaW5nIGZvcndhcmQsIEMg ZXh0ZW5zaW9ucyBjYW4gc3VwcG9ydA0KbW92aW5nIFZBTFVFcy4gIFRvIHN1cHBvcnQgbW92aW5n IFZBTFVFcywgYSBDIGV4dGVuc2lvbiBzaG91bGQgY2hhbmdlDQpgcmJfZ2NfbWFya2AgdG8gYHJi X2djX21hcmtfbm9fcGluYCwgdGhlbiBpbXBsZW1lbnQgYSBuZXcgY2FsbGJhY2sgdGhhdCBpcw0K Y2FsbGVkIGR1cmluZyBjb21wYWN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGV4dGVuc2lvbiBhbiBvcHBv cnR1bml0eSB0byB1cGRhdGUgaXRzDQpvd24gcmVmZXJlbmNlcy4gIEEgbmV3IGZ1bmN0aW9uIGBy Yl9nY19uZXdfbG9jYXRpb25gIHdpbGwgcmV0dXJuIHRoZSBuZXcNCmxvY2F0aW9uIGZvciBhIHBh cnRpY3VsYXIgVkFMVUUuDQoNCkhlcmUgaXMgYW4gZXhhbXBsZSBmb3IgYXV0b2xvYWQgZnJvbSBg dmFyaWFibGUuY2AuICBBIG5ldyBjb21wYWN0aW9uIGNhbGxiYWNrIGlzDQpyZWdpc3RlcmVkLCBg YXV0b2xvYWRfaV9jb21wYWN0YDoNCg0KYGBgYw0Kc3RhdGljIGNvbnN0IHJiX2RhdGFfdHlwZV90 IGF1dG9sb2FkX2RhdGFfaV90eXBlID0gew0KICAgICJhdXRvbG9hZF9pIiwNCiAgICB7YXV0b2xv YWRfaV9tYXJrLCBhdXRvbG9hZF9pX2ZyZWUsIGF1dG9sb2FkX2lfbWVtc2l6ZSwgYXV0b2xvYWRf aV9jb21wYWN0fSwNCiAgICAwLCAwLCBSVUJZX1RZUEVEX0ZSRUVfSU1NRURJQVRFTFkNCn07DQpg YGANCg0KVGhlIG1hcmsgZnVuY3Rpb24gY2hhbmdlcyB0byAqbWFyayogcmVmZXJlbmNlcywgYnV0 ICpub3QqIHBpbiB0aGVtOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9tYXJrKHZv aWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KDQogICAg cmJfZ2NfbWFya19ub19waW4ocC0+ZmVhdHVyZSk7DQoNCiAgICAvKiBhbGxvdyBHQyB0byBmcmVl IHVzIGlmIG5vIG1vZHVsZXMgcmVmZXIgdG8gdGhpcyB2aWEgYXV0b2xvYWRfY29uc3QuYWQgKi8N CiAgICBpZiAobGlzdF9lbXB0eSgmcC0+Y29uc3RhbnRzKSkgew0KICAgICAgICByYl9oYXNoX2Rl bGV0ZShhdXRvbG9hZF9mZWF0dXJlbWFwLCBwLT5mZWF0dXJlKTsNCiAgICB9DQp9DQpgYGANCg0K QWZ0ZXIgdGhlIGhlYXAgaXMgY29tcGFjdGVkLCBhbnkgQyBleHRlbnNpb25zIHRoYXQgcmVnaXN0 ZXJlZCBhICJjb21wYWN0aW9uIg0KY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYW5kIGhhdmUgYSBj aGFuY2UgdG8gdXBkYXRlIGludGVybmFsIHJlZmVyZW5jZXMuICBUaGUNCmF1dG9sb2FkIGNvbXBh Y3Rpb24gZnVuY3Rpb24gaXMgbGlrZSB0aGlzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xv YWRfaV9jb21wYWN0KHZvaWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpw ID0gcHRyOw0KICAgIHAtPmZlYXR1cmUgPSByYl9nY19uZXdfbG9jYXRpb24ocC0+ZmVhdHVyZSk7 DQpgYGANCg0KVGhlIGNvbXBhY3Rpb24gY2FsbGJhY2sgYXNrcyBmb3IgdGhlIG5ldyBsb2NhdGlv biBmb3IgdGhlIGBwLT5mZWF0dXJlYA0KcmVmZXJlbmNlLiAgYHJiX2djX25ld19sb2NhdGlvbmAg d2lsbCBlaXRoZXIgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mDQpgcC0+ZmVhdHVyZWAgKGlu IHRoZSBjYXNlIHRoZSBWQUxVRSBkaWQgbm90IG1vdmUpLCBvciB0aGUgbmV3IGxvY2F0aW9uLg0K DQojIyBSZWZlcmVuY2UgVmVyaWZpY2F0aW9uIGFuZCBUZXN0aW5nDQoNCkFmdGVyIGNvbXBhY3Rp b24sIG9iamVjdHMgdGhhdCBoYXZlIG1vdmVkIGFyZSBjaGFuZ2VkIHRvIGBUX01PVkVEYCBvYmpl Y3RzIHdpdGgNCmZvcndhcmRpbmcgYWRkcmVzc2VzLiAgT25jZSBhbGwgcmVmZXJlbmNlcyBhcmUg dXBkYXRlZCwgbm8gb2JqZWN0IHNob3VsZCBwb2ludA0KdG8gYSBgVF9NT1ZFRGAgc2xvdC4gIFdl IGNhbiBzYXkgdGhhdCBiZWZvcmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24sIG5vIG9iamVjdA0Kc2hv dWxkIGV2ZXIgcG9pbnQgYXQgYSBgVF9NT1ZFRGAgc2xvdC4gIFNvIGlmIGEgYFRfTU9WRURgIG9i amVjdCBpcyBldmVyIHB1c2hlZA0Kb24gdG8gdGhlIG1hcmsgcXVldWUsIHRoZXJlIGlzIGEgYnVn LiAgYHB1c2hfbWFya19zdGFja2AgaGFzIGEgY2hlY2sgZm9yDQpgVF9NT1ZFRGAgb2JqZWN0cywg YW5kIHdpbGwgY3Jhc2ggaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkIG9uIHRv IHRoZQ0KbWFyayBzdGFjay4NCg0KQSBtZXRob2QgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVy ZW5jZXNgIHdhcyBhZGRlZCB0aGF0IGRvdWJsZXMgdGhlIGF2YWlsYWJsZQ0KaGVhcCBzaXplLCB0 aGVuIGNvbXBhY3RzIHRoZSBoZWFwLiAgU2luY2UgdGhlIGhlYXAgaGFzIGRvdWJsZWQgaW4gc2l6 ZSwgYW55DQpvYmplY3QgdGhhdCBjYW4gbW92ZSB3aWxsIG1vdmUuICBBbnkgcmVmZXJlbmNlcyB0 byBgVF9NT1ZFRGAgb2JqZWN0cyB3aWxsIGJlDQpjYXVnaHQgZHVyaW5nIHRoZSBHQyBwaGFzZSBh ZnRlciBjb21wYWN0aW9uLg0KDQojIyBLbm93biBJc3N1ZQ0KDQpTYWZldHkgZm9yIEMgZXh0ZW5z aW9ucyBkZXBlbmRzIGVudGlyZWx5IG9uIEMgZXh0ZW5zaW9ucyBtYXJraW5nIHRoZWlyDQpyZWZl cmVuY2VzLiAgSWYgYSBDIGV4dGVuc2lvbiBkb2VzIG5vdCBtYXJrIGEgcmVmZXJlbmNlLCB0aGUg Y29tcGFjdG9yIGFzc3VtZXMNCnRoYXQgdGhlIG9iamVjdCBpcyBzYWZlIHRvIG1vdmUuICBUaGlz IGNhbiBjYXVzZSBhbiBlcnJvciBpbiB0aGUgZm9sbG93aW5nDQpzaXR1YXRpb24sIHdoZW4gdGhl cmUgaXMgYW4gb2JqZWN0IGdyYXBoIGxpa2UgdGhpczoNCg0KDQpgYGANCiDilIzilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAg4pSM4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIA0KIOKUgiAgUnVieSBPYmpl Y3QgIOKUgiAgICAgICDilIIgIFJ1YnkgT2JqZWN0ICDilIIgDQog4pSCICBJbXBsZW1lbnRlZCAg 4pSCICAgICAgIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiANCiDilIIgICAgaW4gUnVieSAgICDilIIg ICAgICAg4pSCICAgICBpbiBDICAgICAg4pSCIA0KIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAg ICDilIIgICAgICAgICAgICAgICDilIIgDQog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUmCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg ICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgTk9UICAgDQog TWFya2VkICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCANCiAgICAgICAgIOKU giAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIzi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAg ICAgDQogICAgICAgICDilIIgICDilIIgICAgICAgICAgICAgICDilIIgICDilIIgICAgICAgICAN CiAgICAgICAgIOKUgiAgIOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAgICAgICAgICANCiAgICAg ICAgIOKUlOKUgOKUgOKWtuKUgiAgICAgICAgICAgICAgIOKUguKXgOKUgCDilJggICAgICAgICAN CiAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgDQogICAgICAg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSY ICAgICAgICAgICAgIA0KYGBgDQoNCklmIHRoZSBDIGV4dGVuc2lvbiBjb250YWlucyBhIHJlZmVy ZW5jZSB0byBhbiBvYmplY3QsIGJ1dCBleHBlY3RzIHRoZSBvYmplY3QNCm5vdCB0byBtb3ZlIGJl Y2F1c2UgYSBSdWJ5IG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSwgdGhlbiB0aGUgdGFyZ2V0 IFJ1YnkNCm9iamVjdCAqbWF5KiBtb3ZlIGFuZCB0aGUgcmVmZXJlbmNlIGluIHRoZSBDIGV4dGVu c2lvbiB3aWxsIGJlIHdyb25nLiAgSSBsaWtlIHRvDQpjYWxsIHRoZXNlICJnaG9zdCByZWZlcmVu Y2VzIiBiZWNhdXNlIHRoZSBHQyBjYW5ub3Qgc2VlIHRoZW0gYnV0IHRoZXkgd2lsbCBjb21lDQpi YWNrIHRvIGhhdW50IHlvdS4NCg0KVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgZWl0aGVyOg0KDQox LiBDaGFuZ2UgdGhlIEMgZXh0ZW5zaW9uIHRvIGByYl9nY19tYXJrYCB0aGUgb2JqZWN0DQoyLiBS ZW1vdmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBDIGV4dGVuc2lvbg0KDQpPbmUgZXhhbXBsZSBv ZiB0aGlzIHNpdHVhdGlvbiB3YXMgZml4ZWQgaGVyZToNCg0KICBodHRwczovL2dpdGh1Yi5jb20v bXNncGFjay9tc2dwYWNrLXJ1YnkvaXNzdWVzLzEzMw0KDQojIyBTdW1tYXJ5DQoNCkJhY2t3YXJk cyBjb21wYXRpYmlsaXR5IHdpdGggQyBleHRlbnNpb25zIGlzIG1haW50YWluZWQgYnkgInBpbm5p bmciIGFueQ0KcmVmZXJlbmNlcyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AuICBBIGZ1bGwgbWFy ayAqbXVzdCogYmUgZG9uZSBiZWZvcmUNCmNvbXBhY3RpbmcgdG8gZGlzY292ZXIgYWxsIHBpbm5l ZCByZWZlcmVuY2VzLg0KDQpBIG5ldyBjYWxsYmFjayBmb3IgQyBleHRlbnNpb25zIGlzIGludHJv ZHVjZWQgc28gdGhhdCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCmNvbXBhY3Rpb24uICBDIGV4 dGVuc2lvbnMgdGhhdCB3aXNoIHRvIHN1cHBvcnQgY29tcGFjdGlvbiBtdXN0IHVzZSB0aGUgbmV3 DQpjYWxsYmFjaywgYHJiX2djX21hcmtfbm9fcGluYCwgYW5kIGByYl9nY19uZXdfbG9jYXRpb25g Lg0KDQpDIGV4dGVuc2lvbnMgdGhhdCBtYWludGFpbiBwb2ludGVycyBidXQgZG8gbm90IG1hcmsg dGhvc2UgcG9pbnRlcnMgbWF5IFNFR1YuICBXZQ0KY2FuIHVzZSBgR0MudmVyaWZ5X2NvbXBhY3Rp b25fcmVmZXJlbmNlc2AgdG8gZGlzY292ZXIgdGhlc2UgaXNzdWVzLg0KDQpbXjFdOiBTZWUgYWxz byAiVGhlIEdhcmJhZ2UgQ29sbGVjdGlvbiBIYW5kYm9vayIgcGFnZSAzMg0KDQoNCi0tLUZpbGVz LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmJlZm9yZV9jb21wYWN0LTAucG5nICgx MTEgS0IpDQphZnRlcl9jb21wYWN0LTAucG5nICg4MC42IEtCKQ0KYmVmb3JlX2NvbXBhY3QtMS5w bmcgKDgxLjIgS0IpDQphZnRlcl9jb21wYWN0LTEucG5nICg3OS40IEtCKQ0KMDAwMS1HQy1Db21w YWN0aW9uLWZvci1NUkkucGF0Y2ggKDc3LjQgS0IpDQpydWJ5XzIwMTktMDMtMjItMTcxODM5X1Bp a2FjaHVFWEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0KcnVieV8yMDE5LTAzLTIyLTE3MTgz OS0xX1Bpa2FjaHVFWEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0KDQoNCi0tIA0KaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQo=