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=-12.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham 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 2A366C433ED for ; Sat, 17 Apr 2021 00:13:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E2147610A7 for ; Sat, 17 Apr 2021 00:13:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234764AbhDQANs (ORCPT ); Fri, 16 Apr 2021 20:13:48 -0400 Received: from mout.gmx.net ([212.227.15.18]:48313 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231997AbhDQANr (ORCPT ); Fri, 16 Apr 2021 20:13:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1618618399; bh=BJAW8jz55iQEsxwUxaNClVmkRSoXrMN9TpGXhSK7wAs=; h=X-UI-Sender-Class:To:References:From:Subject:Date:In-Reply-To; b=kOfzlcAEGu5bKPJKz+3XUfI+Rk8zEBuKp1/wBX1iLw8VLJZk0vnJvK3U5Bh4cCXSD ixajGoNop28oJHsUWUCz4n85JxpvK7gLa4x5E0ezlxIWRjxiiD34cyG+hL/YzHLk9X mGKk694mbIq/L9bkWd3Y4lFxtk1c8u9jwIZOU2YY= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [0.0.0.0] ([149.28.201.231]) by mail.gmx.net (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MDQeK-1lPHOS17XK-00AZYK; Sat, 17 Apr 2021 02:13:18 +0200 To: Josef Bacik , Qu Wenruo , linux-btrfs@vger.kernel.org References: <20210415050448.267306-1-wqu@suse.com> <20210415050448.267306-12-wqu@suse.com> <0babca4e-325a-88a7-bbfc-c810a5bedbeb@toxicpanda.com> From: Qu Wenruo Subject: Re: [PATCH 11/42] btrfs: refactor btrfs_invalidatepage() Message-ID: <143e0141-c740-9d77-21db-ef7eb1a9500c@gmx.com> Date: Sat, 17 Apr 2021 08:13:15 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <0babca4e-325a-88a7-bbfc-c810a5bedbeb@toxicpanda.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:wNXBaRk6foY4EhEoL94VNu/aO35diuGgFo+59SqQJ9dDIVqhcuV CrZTmX1Bl4t5SrEl7gv0sDbkrKERWUcxwc85owcN198L9RRBVx0Gr/ZFG51vnwwXM6A/ZEb 7wMvDffWcaO/87+tTQId1q4ZLw/EaOuNuS4oyexD/f4F7IlEFyhWRD+hrA0hj4fxozhSJot bS95dcWPllEXe3EKzIOvw== X-UI-Out-Filterresults: notjunk:1;V03:K0:k/OK4e05Nk0=:qmWE0ZCcqmD+0c/SQia9CL Aywyuq4Ty/rffYeEGOi/Z6pQXbRlZ7QDj5LfFeaqJNOeCqj3nHqXm+oxR2zvZ5zkA870BlzEU hYRSgyy9yAJcaOnHaZK0WxYloyWCE5knowa62Vh4PjwGHRDgDMMOLAnxEJuyKsO3TmAlDvz/a P8FkGjzzrhEya77LM/tgr+gt/49OZMXl5XQnrLOeeS8tb2N2pdaUqCYDnAPfqnraBZxYe44fL Vf/VLY0Qftovwa2JZkQsm7YC6/X8WvJ7VXKzsjQhsfRKuERNPdIreD0H3knJJkyKDjI4Da9Ea qjNMr+NJyGzeRiVO5P3QOVxlDFxutaD63AQ0M76S/++z0B18AoFNUVkDsIyKPwFbp69M1w96i B+ldSMyTmO51nT9GKMvwQL8gKlyv4K+qJ1GTLNQwea9o+Sqh8Gquzj7UYLVd9ocBKnvls76AD jFGtmEdi4GG9kXQItYOVY+vDyt6NtJmYKhF1HRMWGP8rXaY/72PBodQAuuTZXIFwPwvjI2baK 84kuNgUj2xTYF8vcMIZjFkKr1svcwzGNAmcibOmanh/I1u8Ly1a/OaEyODj4pNkUA92i8LygX hkJl2T4dYnfHablk0mwBFeS6DtuHwY6WUXrfLMT1QDgEwULT102IMIHH4mkJLK7J4KKU31n00 rvcLsDwT4EYu8T4wOx6cAjbAlyUyHoM8RLv/uHTOoLQKt4JMWZaPd3Ql7sGZ86PIe1H/ZvmPZ +BnK3GoefaUesmuKhkqe4PLUXvxtbmbihnFfcrU0v+5Qg9zzQvz0K4NWPsN1bm7/8KIS3tM+Y YXHna2mxb+qKcWvc1aQ+8FlKdRPTGcSX94YutyvY1SyKX6BdLs/a5Hz3gfw6VEdg/BQvCzNau 9bmGXdi4uiimMYnvucTusfH+LSoC2L/JYHhLoqgiD8ASVXhTqURTslTc/LGMYcIH46XGC5EcV UV8YXpMWwj8q4rFhRk2qAR9hzy8ddwIl8MYbOM6ImlRJtXn3wIxYW59WGzxSXxaSLXBwaZzal KjeBaWtuOVJK9JQbQrEX33JlI68t81yOlAziHU8FXy77lSq7vWzExsymwB6ZGN0qrvEjTtuqT R+sSU8Cea2PeaOEPS1sGgEEY1d0LX12uD++oMIVtXb2IRvnV7T+naGKTwld6cLRNEy6G+TamJ fFGl4R+mIIZ2SLtjXI6CcgLjJ3kclJCWML2iKWPOmnJZWRIlbMtSCixm62EjDQjnzf2Jumgqc yADzRcV/prxOasZKf Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org DQoNCk9uIDIwMjEvNC8xNiDkuIvljYgxMDo0MiwgSm9zZWYgQmFjaWsgd3JvdGU6DQo+IE9uIDQv MTUvMjEgMTowNCBBTSwgUXUgV2VucnVvIHdyb3RlOg0KPj4gVGhpcyBwYXRjaCB3aWxsIHJlZmFj dG9yIGJ0cmZzX2ludmFsaWRhdGVwYWdlKCkgZm9yIHRoZSBpbmNvbWluZyBzdWJwYWdlDQo+PiBz dXBwb3J0Lg0KPj4NCj4+IFRoZSBpbnZvdmxlZCBtb2RpZmNhdGlvbnMgYXJlOg0KPj4gLSBVc2Ug d2hpbGUoKSBsb29wIGluc3RlYWQgb2YgImdvdG8gYWdhaW47Ig0KPj4gLSBVc2Ugc2luZ2xlIHZh cmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRlbGV0ZSBleHRlbnQgc3RhdGVzDQo+PiDC oMKgIEVhY2ggYnJhbmNoIHdpbGwgYWxzbyBoYXZlIGNvbW1lbnRzIHdoeSB3ZSBjYW4gb3IgY2Fu bm90IGRlbGV0ZSB0aGUNCj4+IMKgwqAgZXh0ZW50IHN0YXRlcw0KPj4gLSBEbyBxZ3JvdXAgZnJl ZSBhbmQgZXh0ZW50IHN0YXRlcyBkZWxldGlvbiBwZXItbG9vcA0KPj4gwqDCoCBDdXJyZW50IGNv ZGUgY2FuIG9ubHkgd29yayBmb3IgUEFHRV9TSVpFID09IHNlY3RvcnNpemUgY2FzZS4NCj4+DQo+ PiBUaGlzIHJlZmFjdG9yIGFsc28gbWFrZXMgaXQgY2xlYXIgd2hhdCB3ZSBkbyBmb3IgZGlmZmVy ZW50IHNlY3RvcnM6DQo+PiAtIFNlY3RvcnMgd2l0aG91dCBvcmRlcmVkIGV4dGVudA0KPj4gwqDC oCBXZSdyZSBjb21wbGV0ZWx5IHNhZmUgdG8gcmVtb3ZlIGFsbCBleHRlbnQgc3RhdGVzIGZvciB0 aGUgc2VjdG9yKHMpDQo+Pg0KPj4gLSBTZWN0b3JzIHdpdGggb3JkZXJlZCBleHRlbnQsIGJ1dCBu byBQcml2YXRlMiBiaXQNCj4+IMKgwqAgVGhpcyBtZWFucyB0aGUgZW5kaW8gaGFzIGFscmVhZHkg YmVlbiBleGVjdXRlZCwgd2UgY2FuJ3QgcmVtb3ZlIGFsbA0KPj4gwqDCoCBleHRlbnQgc3RhdGVz IGZvciB0aGUgc2VjdG9yKHMpLg0KPj4NCj4+IC0gU2VjdG9ycyB3aXRoIG9yZGVyZSBleHRlbnQs IHN0aWxsIGhhcyBQcml2YXRlMiBiaXQNCj4+IMKgwqAgVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGRl Y3JlYXNlIHRoZSBvcmRlcmVkIGV4dGVudCBhY2NvdW50aW5nLg0KPj4gwqDCoCBBbmQgdGhlbiBp dCBjb21lcyB0byB0d28gZGlmZmVyZW50IHZhcmlhbnRzOg0KPj4gwqDCoCAqIFdlIGhhdmUgZmlu aXNoZWQgYW5kIHJlbW92ZWQgdGhlIG9yZGVyZWQgZXh0ZW50DQo+PiDCoMKgwqDCoCBUaGVuIGl0 J3MgdGhlIHNhbWUgYXMgInNlY3RvcnMgd2l0aG91dCBvcmRlcmVkIGV4dGVudCINCj4+IMKgwqAg KiBXZSBkaWRuJ3QgZmluaXNoZWQgdGhlIG9yZGVyZWQgZXh0ZW50DQo+PiDCoMKgwqDCoCBXZSBj YW4gcmVtb3ZlIHNvbWUgZXh0ZW50IHN0YXRlcywgYnV0IG5vdCBhbGwuDQo+Pg0KPj4gU2lnbmVk LW9mZi1ieTogUXUgV2VucnVvIDx3cXVAc3VzZS5jb20+DQo+PiAtLS0NCj4+IMKgIGZzL2J0cmZz L2lub2RlLmMgfCAxNzMgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCA5NCBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlv bnMoLSkNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lu b2RlLmMNCj4+IGluZGV4IDRjODk0ZGUyZTgxMy4uOTNiYjdjMDQ4MmJhIDEwMDY0NA0KPj4gLS0t IGEvZnMvYnRyZnMvaW5vZGUuYw0KPj4gKysrIGIvZnMvYnRyZnMvaW5vZGUuYw0KPj4gQEAgLTgz MjAsMTUgKzgzMjAsMTIgQEAgc3RhdGljIHZvaWQgYnRyZnNfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0 IHBhZ2UgDQo+PiAqcGFnZSwgdW5zaWduZWQgaW50IG9mZnNldCwNCj4+IMKgIHsNCj4+IMKgwqDC oMKgwqAgc3RydWN0IGJ0cmZzX2lub2RlICppbm9kZSA9IEJUUkZTX0kocGFnZS0+bWFwcGluZy0+ aG9zdCk7DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSA9ICZpbm9k ZS0+aW9fdHJlZTsNCj4+IC3CoMKgwqAgc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRl cmVkOw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWRfc3RhdGUgPSBO VUxMOw0KPj4gwqDCoMKgwqDCoCB1NjQgcGFnZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOw0K Pj4gwqDCoMKgwqDCoCB1NjQgcGFnZV9lbmQgPSBwYWdlX3N0YXJ0ICsgUEFHRV9TSVpFIC0gMTsN Cj4+IC3CoMKgwqAgdTY0IHN0YXJ0Ow0KPj4gLcKgwqDCoCB1NjQgZW5kOw0KPj4gK8KgwqDCoCB1 NjQgY3VyOw0KPj4gK8KgwqDCoCB1MzIgc2VjdG9yc2l6ZSA9IGlub2RlLT5yb290LT5mc19pbmZv LT5zZWN0b3JzaXplOw0KPj4gwqDCoMKgwqDCoCBpbnQgaW5vZGVfZXZpY3RpbmcgPSBpbm9kZS0+ dmZzX2lub2RlLmlfc3RhdGUgJiBJX0ZSRUVJTkc7DQo+PiAtwqDCoMKgIGJvb2wgZm91bmRfb3Jk ZXJlZCA9IGZhbHNlOw0KPj4gLcKgwqDCoCBib29sIGNvbXBsZXRlZF9vcmRlcmVkID0gZmFsc2U7 DQo+PiDCoMKgwqDCoMKgIC8qDQo+PiDCoMKgwqDCoMKgwqAgKiBXZSBoYXZlIHBhZ2UgbG9ja2Vk IHNvIG5vIG5ldyBvcmRlcmVkIGV4dGVudCBjYW4gYmUgY3JlYXRlZCBvbg0KPj4gQEAgLTgzNTIs OTYgKzgzNDksMTE0IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBw YWdlIA0KPj4gKnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsDQo+PiDCoMKgwqDCoMKgIGlmICgh aW5vZGVfZXZpY3RpbmcpDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbG9ja19leHRlbnRfYml0cyh0 cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgJmNhY2hlZF9zdGF0ZSk7DQo+PiAtwqDCoMKgIHN0 YXJ0ID0gcGFnZV9zdGFydDsNCj4+IC1hZ2FpbjoNCj4+IC3CoMKgwqAgb3JkZXJlZCA9IGJ0cmZz X2xvb2t1cF9vcmRlcmVkX3JhbmdlKGlub2RlLCBzdGFydCwgcGFnZV9lbmQgLSANCj4+IHN0YXJ0 ICsgMSk7DQo+PiAtwqDCoMKgIGlmIChvcmRlcmVkKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqAgZm91 bmRfb3JkZXJlZCA9IHRydWU7DQo+PiAtwqDCoMKgwqDCoMKgwqAgZW5kID0gbWluKHBhZ2VfZW5k LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9yZGVyZWQtPmZpbGVfb2Zmc2V0ICsg b3JkZXJlZC0+bnVtX2J5dGVzIC0gMSk7DQo+PiArwqDCoMKgIGN1ciA9IHBhZ2Vfc3RhcnQ7DQo+ PiArwqDCoMKgIHdoaWxlIChjdXIgPCBwYWdlX2VuZCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIHN0 cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZDsNCj4+ICvCoMKgwqDCoMKgwqDCoCBi b29sIGRlbGV0ZV9zdGF0ZXMgPSBmYWxzZTsNCj4+ICvCoMKgwqDCoMKgwqDCoCB1NjQgcmFuZ2Vf ZW5kOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIC8qDQo+PiArwqDCoMKgwqDCoMKgwqDCoCAq IEhlcmUgd2UgY2FuJ3QgcGFzcyAiZmlsZV9vZmZzZXQgPSBjdXIiIGFuZA0KPj4gK8KgwqDCoMKg wqDCoMKgwqAgKiAibGVuID0gcGFnZV9lbmQgKyAxIC0gY3VyIiwgYXMgYnRyZnNfbG9va3VwX29y ZGVyZWRfcmFuZ2UoKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBtYXkgbm90IHJldHVybiB0aGUg Zmlyc3Qgb3JkZXJlZCBleHRlbnQgYWZ0ZXIgQGZpbGVfb2Zmc2V0Lg0KPj4gK8KgwqDCoMKgwqDC oMKgwqAgKg0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBIZXJlIHdlIHdhbnQgdG8gaXRlcmF0ZSB0 aHJvdWdoIHRoZSByYW5nZSBpbiBieXRlIG9yZGVyLg0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBU aGlzIGlzIHNsb3dlciBidXQgZGVmaW5pdGVseSBjb3JyZWN0Lg0KPj4gK8KgwqDCoMKgwqDCoMKg wqAgKg0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBUT0RPOiBNYWtlIGJ0cmZzX2xvb2t1cF9vcmRl cmVkX3JhbmdlKCkgdG8gcmV0dXJuIHRoZQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBmaXJzdCBv cmRlcmVkIGV4dGVudCBpbiB0aGUgcmFuZ2UgdG8gcmVkdWNlIHRoZSBudW1iZXINCj4+ICvCoMKg wqDCoMKgwqDCoMKgICogb2YgbG9vcHMuDQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4gK8Kg wqDCoMKgwqDCoMKgIG9yZGVyZWQgPSBidHJmc19sb29rdXBfb3JkZXJlZF9yYW5nZShpbm9kZSwg Y3VyLCBzZWN0b3JzaXplKTsNCj4gDQo+IEhvdyBkb2VzIGl0IG5vdCBmaW5kIHRoZSBmaXJzdCBv cmRlcmVkIGV4dGVudCBhZnRlciBmaWxlX29mZnNldD8gIA0KPiBMb29raW5nIGF0IHRoZSBjb2Rl IGl0IGp1c3QgbG9vcHMgdGhyb3VnaCBhbmQgcmV0dXJucyB0aGUgZmlyc3QgdGhpbmcgaXQgDQo+ IGZpbmRzIHRoYXQgb3ZlcmxhcHMgb3VyIHJhbmdlLsKgIElzIHRoZXJlIGEgYnVnIGluIA0KPiBi dHJmc19sb29rdXBfb3JkZXJlZF9yYW5nZSgpPw0KDQpidHJmc19sb29rdXBfb3JkZXJlZF9yYW5n ZSgpIGRvZXMgdHdvIHNlYXJjaDoNCm5vZGUgPSB0cmVlX3NlYXJjaCh0cmVlLCBmaWxlX29mZnNl dCk7DQppZiAoIW5vZGUpIHsNCglub2RlID0gdHJlZV9zZWFyY2godHJlZSwgZmlsZV9vZmZzZXQg KyBsZW4pOw0KfQ0KDQpUaGF0IG1lYW5zIGZvciB0aGUgZm9sbG93aW5nIHNlYWNoIHBhdHRlcm4s IGl0IHdpbGwgbm90IHJldHVybiB0aGUgZmlyc3QgT0U6DQpzdGFydAkJCQkJZW5kDQp8CXwvLy8v Ly8vfAl8Ly8vLy8vL3wJfA0KDQoNCj4gDQo+IFdlIHNob3VsZCBhZGQgc29tZSBzZWxmIHRlc3Rz IHRvIG1ha2Ugc3VyZSB0aGVzZSBoZWxwZXJzIGFyZSBkb2luZyB0aGUgDQo+IHJpZ2h0IHRoaW5n IGlmIHRoZXJlIGlzIGluIGZhY3QgYSBidWcuDQoNCkl0J3Mgbm90IGEgYnVnLCBhcyBtb3N0IGNh bGwgc2l0ZXMgZm9yIGJ0cmZzX2xvb2t1cF9vcmRlcmVkX3JhbmdlKCkgd2lsbCANCndhaXQgZm9y IHRoZSBvcmRlcmVkIGV4dGVudCB0byBmaW5pc2gsIHRoZW4gcmUtc2VhcmNoIHVudGlsIGFsbCBv cmRlcmVkIA0KZXh0ZW50IGlzIGV4aGF1c3RlZC4NCg0KSW4gdGhhdCBjYXNlLCB0aGV5IGRvbid0 IGNhcmUgdGhlIG9yZGVyIG9mIHJldHVybmVkIE9FLg0KDQpJdCdzIHJlYWxseSB0aGUgZmlyc3Qg dGltZSB3ZSBuZWVkIGEgc3BlY2lmaWMgb3JkZXJlZC4NCg0KU2luY2UgeW91J3JlIGFscmVhZHkg Y29tcGxhaW5pbmcsIEkgZ3Vlc3MgSSdkIGVpdGhlciBhZGQgYSBuZXcgZnVuY3Rpb24gDQp0byBt YWtlIHRoZSBleGlzdGluZyBvbmUgdG8gZm9sbG93IHRoZSBvcmRlci4NCg0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoIW9yZGVyZWQpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJh bmdlX2VuZCA9IGN1ciArIHNlY3RvcnNpemUgLSAxOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyoNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBObyBvcmRlcmVkIGV4dGVudCBj b3ZlcmluZyB0aGlzIHNlY3Rvciwgd2UgYXJlIHNhZmUNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiB0byBkZWxldGUgYWxsIGV4dGVudCBzdGF0ZXMgaW4gdGhlIHJhbmdlLg0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVs ZXRlX3N0YXRlcyA9IHRydWU7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG5leHQ7 DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJhbmdlX2Vu ZCA9IG1pbihvcmRlcmVkLT5maWxlX29mZnNldCArIG9yZGVyZWQtPm51bV9ieXRlcyAtIDEsDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2VfZW5kKTsNCj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoIVBhZ2VQcml2YXRlMihwYWdlKSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLyoNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJZiBQcml2YXRlMiBpcyBj bGVhcmVkLCBpdCBtZWFucyBlbmRpbyBoYXMgYWxyZWFkeQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIGJlZW4gZXhlY3V0ZWQgZm9yIHRoZSByYW5nZS4NCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBXZSBjYW4ndCBkZWxldGUgdGhlIGV4dGVudCBzdGF0ZXMgYXMNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBidHJmc19maW5pc2hfb3JkZXJlZF9pbygpIG1heSBz dGlsbCB1c2Ugc29tZSBvZiB0aGVtLg0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVsZXRlX3N0YXRlcyA9IGZhbHNlOw0KPiANCj4g ZGVsZXRlX3N0YXRlcyBpcyBhbHJlYWR5IGZhbHNlLg0KDQpZZXMsIGJ1dCBJIHdhbnQgdG8gcHV0 IHNvbWUgY29tbWVudCBoZXJlLg0KDQpJIGNhbiBqdXN0IHJlbW92ZSB0aGUgaW5pdGlhbGl6YXRp b24gdmFsdWUuDQoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG5leHQ7DQo+ PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoMKgwqDCoMKgIENsZWFyUGFnZVByaXZhdGUy KHBhZ2UpOw0KPj4gKw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qDQo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIElPIG9uIHRoaXMgcGFnZSB3aWxsIG5ldmVyIGJlIHN0YXJ0ZWQsIHNvIHdlIG5l ZWQgdG8gYWNjb3VudA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBmb3IgYW55IG9yZGVyZWQg ZXh0ZW50cyBub3cuIERvbid0IGNsZWFyIEVYVEVOVF9ERUxBTExPQ19ORVcNCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgICogaGVyZSwgbXVzdCBsZWF2ZSB0aGF0IHVwIGZvciB0aGUgb3JkZXJlZCBl eHRlbnQgY29tcGxldGlvbi4NCj4+ICvCoMKgwqDCoMKgwqDCoMKgICoNCj4+ICvCoMKgwqDCoMKg wqDCoMKgICogVGhpcyB3aWxsIGFsc28gdW5sb2NrIHRoZSByYW5nZSBmb3IgaW5jb21pbmcNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgICogYnRyZnNfZmluaXNoX29yZGVyZWRfaW8oKS4NCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgICovDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFpbm9kZV9ldmlj dGluZykNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsZWFyX2V4dGVudF9iaXQodHJlZSwg c3RhcnQsIGVuZCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsZWFyX2V4dGVudF9iaXQo dHJlZSwgY3VyLCByYW5nZV9lbmQsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBFWFRFTlRfREVMQUxMT0MgfA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ET19BQ0NPVU5U SU5HIHwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVY VEVOVF9ERUZSQUcsIDEsIDAsICZjYWNoZWRfc3RhdGUpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDC oMKgIHNwaW5fbG9ja19pcnEoJmlub2RlLT5vcmRlcmVkX3RyZWUubG9jayk7DQo+PiArwqDCoMKg wqDCoMKgwqAgc2V0X2JpdChCVFJGU19PUkRFUkVEX1RSVU5DQVRFRCwgJm9yZGVyZWQtPmZsYWdz KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBBU1NFUlQoY3VyIC0gb3JkZXJlZC0+ZmlsZV9vZmZzZXQg PCBVMzJfTUFYKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBvcmRlcmVkLT50cnVuY2F0ZWRfbGVuID0g bWluX3QodTMyLCBvcmRlcmVkLT50cnVuY2F0ZWRfbGVuLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3VyIC0gb3JkZXJlZC0+ZmlsZV9v ZmZzZXQpOw0KPiANCj4gSSd2ZSByZWFsaXplZCBteSBwcmV2aW91cyBjb21tZW50IGFib3V0IHRo aXMgbmVlZGluZyB0byBiZSB1NjQgd2FzIA0KPiB3cm9uZywgSSdtIHN0YXJ0aW5nIHRvIHdha2Ug dXAgbm93LsKgIEhvd2V2ZXIgSSBzdGlsbCBkb24ndCBzZWUgdGhlIHZhbHVlIA0KPiBpbiBzYXZp bmcgdGhlIHNwYWNlLCBhcyB3ZSBjYW4ganVzdCBsZWF2ZSBldmVyeXRoaW5nIHU2NCBhbmQgdGhl IG1hdGggDQo+IGFsbCB3b3JrcyBvdXQgY2xlYW5seS4NCg0KTm8gcHJvYmxlbSwgSSBjYW4gZHJv cCB0aGF0IHBhdGNoLg0KDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrX2lycSgm aW5vZGUtPm9yZGVyZWRfdHJlZS5sb2NrKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBBU1NF UlQocmFuZ2VfZW5kICsgMSAtIGN1ciA8IFUzMl9NQVgpOw0KPiANCj4gQW5kIHdlIGRvbid0IGhh dmUgdG8gcG9sbHV0ZSB0aGUgY29kZSB3aXRoIGFsbCBvZiB0aGVzZSBjaGVja3MuDQoNClRoYXQn cyBpbmRlZWQgdG8gdGhlIHBvaW50Lg0KDQpUaGFua3MsDQpRdQ0KDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChidHJmc19kZWNfdGVzdF9vcmRlcmVkX3BlbmRpbmcoaW5vZGUsICZvcmRlcmVk LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN1ciwgcmFuZ2Vf ZW5kICsgMSAtIGN1ciwgMSkpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ0cmZzX2Zp bmlzaF9vcmRlcmVkX2lvKG9yZGVyZWQpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBUaGUgb3JkZXJlZCBleHRlbnQgaGFzIGZp bmlzaGVkLCBub3cgd2UncmUgYWdhaW4NCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBz YWZlIHRvIGRlbGV0ZSBhbGwgZXh0ZW50IHN0YXRlcyBvZiB0aGUgcmFuZ2UuDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICovDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWxldGVf c3RhdGVzID0gdHJ1ZTsNCj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugew0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyoNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBidHJmc19m aW5pc2hfb3JkZXJlZF9pbygpIHdpbGwgZ2V0IGV4ZWN1dGVkIGJ5IGVuZGlvIG9mDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICogb3RoZXIgcGFnZXMsIHRodXMgd2UgY2FuJ3QgZGVsZXRl IGV4dGVudCBzdGF0ZXMgYW55IG1vcmUNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8N Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlbGV0ZV9zdGF0ZXMgPSBmYWxzZTsNCj4gDQo+ IFRoaXMgaXMgYWxyZWFkeSBmYWxzZS7CoCBUaGFua3MsDQo+IA0KPiBKb3NlZg0K