From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87323C64E7C for ; Wed, 2 Dec 2020 07:14:17 +0000 (UTC) Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D1C5A206C0 for ; Wed, 2 Dec 2020 07:14:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D1C5A206C0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=cn.fujitsu.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvdimm-bounces@lists.01.org Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id F362B100EBBC3; Tue, 1 Dec 2020 23:14:15 -0800 (PST) Received-SPF: None (mailfrom) identity=mailfrom; client-ip=183.91.158.132; helo=heian.cn.fujitsu.com; envelope-from=ruansy.fnst@cn.fujitsu.com; receiver= Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by ml01.01.org (Postfix) with ESMTP id D1BD0100EBBC1 for ; Tue, 1 Dec 2020 23:14:12 -0800 (PST) X-IronPort-AV: E=Sophos;i="5.78,385,1599494400"; d="scan'208";a="101976775" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 02 Dec 2020 15:14:10 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 11B374CE5CF5; Wed, 2 Dec 2020 15:14:06 +0800 (CST) Received: from irides.mr (10.167.225.141) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 2 Dec 2020 15:14:05 +0800 Subject: Re: [RFC PATCH v2 0/6] fsdax: introduce fs query to support reflink To: Dave Chinner References: <20201123004116.2453-1-ruansy.fnst@cn.fujitsu.com> <20201129224723.GG2842436@dread.disaster.area> From: Ruan Shiyang Message-ID: Date: Wed, 2 Dec 2020 15:12:20 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <20201129224723.GG2842436@dread.disaster.area> Content-Language: en-US X-Originating-IP: [10.167.225.141] X-ClientProxiedBy: G08CNEXCHPEKD06.g08.fujitsu.local (10.167.33.205) To G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) X-yoursite-MailScanner-ID: 11B374CE5CF5.A2628 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@cn.fujitsu.com Message-ID-Hash: 6FRNT7O7ZAZHUPB45Y44JFDV6EZS4VFK X-Message-ID-Hash: 6FRNT7O7ZAZHUPB45Y44JFDV6EZS4VFK X-MailFrom: ruansy.fnst@cn.fujitsu.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-nvdimm@lists.01.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-raid@vger.kernel.org, darrick.wong@oracle.com, hch@lst.de, song@kernel.org, rgoldwyn@suse.de, qi.fuli@fujitsu.com, y-goto@fujitsu.com X-Mailman-Version: 3.1.1 Precedence: list List-Id: "Linux-nvdimm developer list." Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 SGkgRGF2ZSwNCg0KT24gMjAyMC8xMS8zMCDkuIrljYg2OjQ3LCBEYXZlIENoaW5uZXIgd3JvdGU6 DQo+IE9uIE1vbiwgTm92IDIzLCAyMDIwIGF0IDA4OjQxOjEwQU0gKzA4MDAsIFNoaXlhbmcgUnVh biB3cm90ZToNCj4+IA0KPj4gVGhlIGNhbGwgdHJhY2UgaXMgbGlrZSB0aGlzOg0KPj4gICBtZW1v cnlfZmFpbHVyZSgpDQo+PiAgICAgcGdtYXAtPm9wcy0+bWVtb3J5X2ZhaWx1cmUoKSAgID0+IHBt ZW1fcGdtYXBfbWVtb3J5X2ZhaWx1cmUoKQ0KPj4gICAgICBnZW5kaXNrLT5mb3BzLT5ibG9ja19s b3N0KCkgICA9PiBwbWVtX2Jsb2NrX2xvc3QoKSBvcg0KPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWRfYmxrX2Jsb2NrX2xvc3QoKQ0KPj4gICAgICAgc2ItPnNf b3BzLT5zdG9yYWdlX2xvc3QoKSAgICA9PiB4ZnNfZnNfc3RvcmFnZV9sb3N0KCkNCj4+ICAgICAg ICB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgpDQo+PiAgICAgICAgIHhmc19zdG9yYWdlX2xvc3RfaGVs cGVyKCkNCj4+ICAgICAgICAgIG1mX3JlY292ZXJfY29udHJvbGxlci0+cmVjb3Zlcl9mbiA9PiBc DQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdl bWFwX2tpbGxfcHJvY3MoKQ0KPj4NCj4+IFRoZSBjb2xsZWN0X3Byb2NzKCkgYW5kIGtpbGxfcHJv Y3MoKSBhcmUgbW92ZWQgaW50byBhIGNhbGxiYWNrIHdoaWNoDQo+PiBpcyBwYXNzZWQgZnJvbSBt ZW1vcnlfZmFpbHVyZSgpIHRvIHhmc19zdG9yYWdlX2xvc3RfaGVscGVyKCkuICBTbyB3ZQ0KPj4g Y2FuIGNhbGwgaXQgd2hlbiBhIGZpbGUgYXNzb2NhaXRlZCBpcyBmb3VuZCwgaW5zdGVhZCBvZiBj cmVhdGluZyBhDQo+PiBmaWxlIGxpc3QgYW5kIGl0ZXJhdGUgaXQuDQo+Pg0KPj4gVGhlIGZzZGF4 ICYgcmVmbGluayBzdXBwb3J0IGZvciBYRlMgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGlzIHBhdGNo c2V0Lg0KPiANCj4gVGhpcyBsb29rcyBwcm9taXNpbmcgLSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1 cmUgaXMgYSBsb3QgbW9yZQ0KPiBnZW5lcmljIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBrbm93aW5n IGFib3V0IG1lbW9yeSwgZGF4IG9yIG1lbW9yeQ0KPiBmYWlsdXJlcy4gQSBmZXcgY29tbWVudHMg dGhhdCBJIHRoaW5rIHdvdWxkIGZ1cnRoZXIgaW1wcm92ZQ0KPiB1bmRlcnN0YW5kaW5nIHRoZSBw YXRjaHNldCBhbmQgdGhlIGltcGxlbWVudGF0aW9uOg0KDQpUaGFua3MgZm9yIHlvdXIga2luZGx5 IGNvbW1lbnQuICBJdCBnaXZlcyBtZSBjb25maWRlbmNlLg0KDQo+IA0KPiAtIHRoZSBvcmRlciBv ZiB0aGUgcGF0Y2hlcyBpcyBpbnZlcnRlZC4gSXQgc2hvdWxkIHN0YXJ0IHdpdGggYQ0KPiAgICBz aW5nbGUgcGF0Y2ggaW50cm9kdWNpbmcgdGhlIG1mX3JlY292ZXJfY29udHJvbGxlciBzdHJ1Y3R1 cmUgZm9yDQo+ICAgIGNhbGxiYWNrcywgdGhlbiBpbnRyb2R1Y2UgcGdtYXAtPm9wcy0+bWVtb3J5 X2ZhaWx1cmUsIHRoZW4NCj4gICAgLT5ibG9ja19sb3N0LCB0aGVuIHRoZSBwbWVtIGFuZCBtZCBp bXBsZW1lbnRhdGlvbnMgb2YgLT5ibG9jaw0KPiAgICBsaXN0LCB0aGVuIC0+c3RvcmFnZV9sb3N0 IGFuZCB0aGUgWEZTIGltcGxlbWVudGF0aW9ucyBvZg0KPiAgICAtPnN0b3JhZ2VfbG9zdC4NCg0K WWVzLCBpdCB3aWxsIGJlIGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSBwYXRjaHNldCBpbiB0aGlz IG9yZGVyLg0KDQpCdXQgSSBoYXZlIHNvbWV0aGluZyB1bnN1cmU6IGZvciBleGFtcGxlLCBJIGlu dHJvZHVjZSAtPm1lbW9yeV9mYWlsdXJlKCkgDQpmaXJzdGx5LCBidXQgdGhlIGltcGxlbWVudGF0 aW9uIG9mIC0+bWVtb3J5X2ZhaWx1cmUoKSBuZWVkcyB0byBjYWxsIA0KLT5ibG9ja19sb3N0KCkg d2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgaW50cm9kdWNlZCBpbiB0aGUgbmV4dCBwYXRjaC4gU28s IA0KSSBhbSBub3Qgc3VyZSB0aGUgY29kZSBpcyBzdXBwb3NlZCB0byBiZSB3aGF0IGluIHRoZSBp bXBsZW1lbnRhdGlvbiBvZiANCi0+bWVtb3J5X2ZhaWx1cmUoKSBpbiBwbWVtPyAgVG8gYXZvaWQg dGhpcyBzaXR1YXRpb24sIEkgY29tbWl0dGVkIHRoZSANCnBhdGNoZXMgaW4gdGhlIGludmVydGVk IG9yZGVyOiBsb3dlc3QgbGV2ZWwgZmlyc3QsIHRoZW4gaXRzIGNhbGxlciwgYW5kIA0KdGhlbiBj YWxsZXIncyBjYWxsZXIuDQoNCkkgYW0gdHJ5aW5nIHRvIHNvcnQgb3V0IHRoZSBvcmRlci4gIEhv dyBhYm91dCB0aGlzOg0KICBQYXRjaCBpLg0KICAgIEludHJvZHVjZSAtPm1lbW9yeV9mYWlsdXJl KCkNCiAgICAgICAtIGp1c3QgaW50cm9kdWNlIGludGVyZmFjZSwgd2l0aG91dCBpbXBsZW1lbnRh dGlvbg0KICBQYXRjaCBpKysuDQogICAgSW50cm9kdWNlIC0+YmxvY2tfbG9zdCgpDQogICAgICAg LSBpbnRyb2R1Y2UgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnQgLT5tZW1vcnlfZmFpbHVyZSgpDQog ICAgICAgICAgaW4gcG1lbSwgc28gdGhhdCBpdCBjYW4gY2FsbCAtPmJsb2NrX2xvc3QoKQ0KICBQ YXRjaCBpKysuDQogICAgKHNpbWlsYXIgd2l0aCBhYm92ZSwgc2tpcC4uLikNCg0KPiANCj4gLSBJ IHRoaW5rIHRoZSBuYW1lcyAiYmxvY2tfbG9zdCIgYW5kICJzdG9yYWdlX2xvc3QiIGFyZSBtaXNs ZWFkaW5nLg0KPiAgICBJdCdzIG1vcmUgbGlrZSBhICJtZWRpYSBmYWlsdXJlIiBvciBhIGdlbmVy YWwgImRhdGEgY29ycnVwdGlvbiINCj4gICAgZXZlbnQgYXQgYSBzcGVjaWZpYyBwaHlzaWNhbCBs b2NhdGlvbi4gVGhlIGRhdGEgbWF5IG5vdCBiZSAibG9zdCINCj4gICAgYnV0IG9ubHkgZGFtYWdl ZCwgc28gd2UgbWlnaHQgYmUgYWJsZSB0byByZWNvdmVyIGZyb20gaXQgd2l0aG91dA0KPiAgICAi bG9zaW5nIiBhbnl0aGluZy4gSGVuY2UgSSB0aGluayB0aGV5IGNvdWxkIGJlIGJldHRlciBuYW1l ZCwNCj4gICAgcGVyaGFwcyBqdXN0ICItPmNvcnJ1cHRfcmFuZ2UiDQoNCidjb3JydXB0JyBzb3Vu ZHMgYmV0dGVyLiAgKEknbSBub3QgZ29vZCBhdCBuYW1pbmcgZnVuY3Rpb25zLi4uKQ0KDQo+IA0K PiAtIG5lZWQgdG8gcGFzcyBhIHtvZmZzZXQsbGVufSBwYWlyIHRocm91Z2ggdGhlIGNoYWluLCBu b3QganVzdCBhDQo+ICAgIHNpbmdsZSBvZmZzZXQuIFRoaXMgd2lsbCBhbGxvdyBvdGhlciB0eXBl cyBvZiBkZXZpY2VzIHRvIHJlcG9ydA0KPiAgICBkaWZmZXJlbnQgcmFuZ2VzIG9mIGZhaWx1cmVz LCBmcm9tIGEgc2luZ2xlIHNlY3RvciB0byBhbiBlbnRpcmUNCj4gICAgZGV2aWNlLg0KDQpZZXMs IGl0J3MgYmV0dGVyIHRvIGFkZCB0aGUgbGVuZ3RoLiAgSSByZXN0cmljdGl2ZWx5IHRob3VnaHQg dGhhdCANCm1lbW9yeS1mYWlsdXJlIG9uIHBtZW0gc2hvdWxkIGFmZmVjdCBvbmUgc2luZ2xlIHBh Z2UgYXQgb25lIHRpbWUuDQoNCj4gDQo+IC0gSSdtIG5vdCBzdXJlIHRoYXQgcGFzc2luZyB0aGUg bWZfcmVjb3Zlcl9jb250cm9sbGVyIHN0cnVjdHVyZQ0KPiAgICB0aHJvdWdoIHRoZSBjb3JydXB0 aW9uIGV2ZW50IGNoYWluIGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBoZXJlLg0KPiAgICBBIGJs b2NrIGRldmljZSBjb3VsZCBnZW5lcmF0ZSB0aGlzIHN0b3JhZ2UgZmFpbHVyZSBjYWxsYmFjayBp ZiBpdA0KPiAgICBkZXRlY3RzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IgKGUuZy4gZHVyaW5nIGEg TUQgbWVkaWEgc2NydWIgb3INCj4gICAgcmVidWlsZC9yZXNpbHZlciBmYWlsdXJlKSBhbmQgaW4g dGhhdCBjYXNlIHdlIGRvbid0IGhhdmUgUEZOcyBvcg0KPiAgICBtZW1vcnkgZGV2aWNlIGZhaWx1 cmUgZnVuY3Rpb25zIHRvIHBlcmZvcm0uDQo+IA0KPiAgICBJT1dzLCBJIHRoaW5rIHRoZSBhY3Rp b24gdGhhdCBpcyB0YWtlbiBuZWVkcyB0byBiZSBpbmRlcGVuZGVudCBvZg0KPiAgICB0aGUgc291 cmNlIHRoYXQgZ2VuZXJhdGVkIHRoZSBlcnJvci4gRXZlbiBmb3IgYSBwbWVtIGRldmljZSwgd2UN Cj4gICAgY2FuIGJlIHVzaW5nIHRoZSBwYWdlIGNhY2hlLCBzbyBpdCBtYXkgYmUgcG9zc2libGUg dG8gcmVjb3ZlciB0aGUNCj4gICAgcG1lbSBlcnJvciBieSB3cml0aW5nIHRoZSBjYWNoZWQgcGFn ZSAoaWYgaXQgZXhpc3RzKSBiYWNrIG92ZXIgdGhlDQo+ICAgIHBtZW0uDQo+IA0KPiAgICBIZW5j ZSBJIHRoaW5rIHRoYXQgdGhlIHJlY292ZXIgZnVuY3Rpb24gcHJvYmFibHkgbmVlZHMgdG8gYmUg bW92ZWQNCj4gICAgdG8gdGhlIGFkZHJlc3Mgc3BhY2Ugb3BzLCBiZWNhdXNlIHdoYXQgd2UgZG8g dG8gcmVjb3ZlciBmcm9tIHRoZQ0KPiAgICBlcnJvciBpcyBnb2luZyB0byBiZSBkZXBlbmRlbnQg b24gdHlwZSBvZiBtYXBwaW5nIHRoZSBmaWxlc3lzdGVtDQo+ICAgIGlzIHVzaW5nLiBJZiBpdCdz IGEgREFYIG1hcHBpbmcsIHdlIGNhbGwgYmFjayBpbnRvIGEgZ2VuZXJpYyBEQVgNCj4gICAgZnVu Y3Rpb24gdGhhdCBkb2VzIHRoZSB2bWEgd2FsayBhbmQgcHJvY2VzcyBraWxsIGZ1bmN0aW9ucy4g SWYgaXQNCj4gICAgaXMgYSBwYWdlIGNhY2hlIG1hcHBpbmcsIHRoZW4gaWYgdGhlIHBhZ2UgaXMg Y2FjaGVkIHRoZW4gd2UgY2FuDQo+ICAgIHRyeSB0byByZS13cml0ZSBpdCB0byBkaXNrIHRvIGZp eCB0aGUgYmFkIGRhdGEsIG90aGVyd2lzZSB3ZSB0cmVhdA0KPiAgICBpdCBsaWtlIGEgd3JpdGVi YWNrIGVycm9yIGFuZCByZXBvcnQgaXQgb24gdGhlIG5leHQNCj4gICAgd3JpdGUvZnN5bmMvY2xv c2Ugb3BlcmF0aW9uIGRvbmUgb24gdGhhdCBmaWxlLg0KPiANCj4gICAgVGhpcyBnZXRzIHJpZCBv ZiB0aGUgbWZfcmVjb3Zlcl9jb250cm9sbGVyIGFsdG9nZXRoZXIgYW5kIGFsbG93cw0KPiAgICB0 aGUgaW50ZXJmYWNlIHRvIGJlIHVzZWQgYnkgYW55IHNvcnQgb2YgYmxvY2sgZGV2aWNlIGZvciBh bnkgc29ydA0KPiAgICBvZiBib3R0b20tdXAgcmVwb3J0aW5nIG9mIG1lZGlhL2RldmljZSBmYWls dXJlcy4NCg0KTW92aW5nIHRoZSByZWNvdmVyIGZ1bmN0aW9uIHRvIHRoZSBhZGRyZXNzX3NwYWNl IG9wcyBsb29rcyBhIGJldHRlciANCmlkZWEuIEJ1dCBJIHRoaW5rIHRoYXQgdGhlIGVycm9yIGhh bmRsZXIgZm9yIHBhZ2UgY2FjaGUgbWFwcGluZyBpcyANCmZpbmlzaGVkIHdlbGwgaW4gbWVtb3J5 LWZhaWx1cmUuICBUaGUgbWVtb3J5LWZhaWx1cmUgaXMgYWxzbyByZXVzZWQgdG8gDQpoYW5kbGVz IGFub255bW91cyBwYWdlLiAgSWYgd2UgbW92ZSB0aGUgcmVjb3ZlciBmdW5jdGlvbiB0byANCmFk ZHJlc3Nfc3BhY2Ugb3BzLCBJIHRoaW5rIHdlIGFsc28gbmVlZCB0byByZWZhY3RvciB0aGUgZXhp c3RpbmcgaGFuZGxlciANCmZvciBwYWdlIGNhY2hlIG1hcHBpbmcsIHdoaWNoIG1heSBhZmZlY3Qg YW5vbnltb3VzIHBhZ2UgaGFuZGxpbmcuICBUaGlzIA0KbWFrZXMgbWUgY29uZnVzZWQuLi4NCg0K DQpJIHJld3JvdGUgdGhlIGNhbGwgdHJhY2U6DQptZW1vcnlfZmFpbHVyZSgpDQogICogZGF4IG1h cHBpbmcgY2FzZQ0KICBwZ21hcC0+b3BzLT5tZW1vcnlfZmFpbHVyZSgpICAgICAgICAgID0+DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbWVtX3BnbWFwX21lbW9yeV9mYWls dXJlKCkNCiAgIGdlbmRpc2stPmZvcHMtPmJsb2NrX2NvcnJ1cHRfcmFuZ2UoKSA9Pg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwbWVtX2Jsb2NrX2NvcnJ1cHRfcmFuZ2Uo KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBtZF9ibGtfYmxvY2tfY29y cnVwdF9yYW5nZSgpDQogICAgc2ItPnNfb3BzLT5zdG9yYWdlX2N1cnJ1cHRfcmFuZ2UoKSAgPT4N CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmc19mc19zdG9yYWdlX2NvcnJ1 cHRfcmFuZ2UoKQ0KICAgICB4ZnNfcm1hcF9xdWVyeV9yYW5nZSgpDQogICAgICB4ZnNfc3RvcmFn ZV9sb3N0X2hlbHBlcigpDQogICAgICAgbWFwcGluZy0+YV9vcHMtPmNvcnJ1cHRfcmFuZ2UoKSAg PT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmc19kYXhfYW9wcy54ZnNf ZGF4X2NvcnJ1cHRfcmFuZ2UNCiAgICAgICAgbWVtb3J5X2ZhaWx1cmVfZGV2X3BhZ2VtYXBfa2ls bF9wcm9jcygpDQoNCiAgKiBwYWdlIGNhY2hlIG1hcHBpbmcgY2FzZQ0KICBtYXBwaW5nLT5hX29w cy0+Y29ycnVwdF9yYW5nZSgpICAgICAgID0+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zLnhmc194eHgNCiAgIG1lbW9yeV9m YWlsdXJlX2dlbmVyaWNfa2lsbF9wcm9jcygpDQoNCkl0J3Mgcm91Z2ggYW5kIG5vdCBjb21wbGV0 ZWQgeWV0LiAgSG9wZSBmb3IgeW91ciBjb21tZW50Lg0KDQotLSANClRoYW5rcywNClJ1YW4gU2hp eWFuZy4NCg0KPiANCj4gQ2hlZXJzLA0KPiANCj4gRGF2ZS4NCj4gDQoNCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52ZGltbSBtYWlsaW5nIGxp c3QgLS0gbGludXgtbnZkaW1tQGxpc3RzLjAxLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVt YWlsIHRvIGxpbnV4LW52ZGltbS1sZWF2ZUBsaXN0cy4wMS5vcmcK