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=-14.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 9229AC433ED for ; Fri, 9 Apr 2021 11:04:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 656D0610D0 for ; Fri, 9 Apr 2021 11:04:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233788AbhDILEl (ORCPT ); Fri, 9 Apr 2021 07:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233564AbhDILEi (ORCPT ); Fri, 9 Apr 2021 07:04:38 -0400 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C1B7C061761 for ; Fri, 9 Apr 2021 04:04:26 -0700 (PDT) Received: by mail-ej1-x634.google.com with SMTP id v6so6739409ejo.6 for ; Fri, 09 Apr 2021 04:04:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=6/JnVL8LfaZdf+zS+mi0dG+OAyirzCOEuyoJgncWbSg=; b=eq8YU0RewVVk6hub1QGwAdPgMqo88js1FBgRgBvcQ/eyJXx0rrjkdsaRgSy5pVxDE5 FXsGdJBjo1fLI6eyOd3do+o2BR/+B3lrN+9YF5JdxnHBnxtG6YVixgPtvcI4g6BE/yXf S85SCuoabIEhcs2ffoOr5WM62pto6LIZwZI68HCFe7p5hCgbWP21ZowiiUwys/YqUfd+ EfIKV9vaNj4zLYF/uaalUeXtGwXK9HSqWKfzFIH3MNGRv7QlTbwYsr0ita6/SgygEcYf LYKzMGuTsm7MxtLoM5KvLGNVBdxldCOTkFa1SEaxVcmef1vIFgqPsRPp7QowqkI3P6QU Zwbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=6/JnVL8LfaZdf+zS+mi0dG+OAyirzCOEuyoJgncWbSg=; b=YkWXIZKwz91SrqZm7vNpEEO3u0iWYtO1PqVgYr57KVQXJKZET1IuyHYP+FYIRw+IC5 iU8J9VNoF86Qyy5srdkcIvQ5FOv1ErOwJPsBE/H1DCZE1/ommmHbsdZ8TwgKiFqlXqkz iPYuj1773BbANhEuUt1kDeTUrU+CPnIbBS8w301D6BdVpAYq1LlzFCO1xanL0l9DpZNd 4iDXc6yDRv8jOr9e180w5MflPKEnsxTRHtT634Ztq7baprrHGKbB01lkFXd/BHEtVOaw WMXzuph2y+7hcBRFrblyqEGNxL6QPDvuFASvMelMvCdlViEMlgNbsAcQDQbJmGIcsJzg fIoQ== X-Gm-Message-State: AOAM530WeNNTBcm5jaHfHZKLXmFn3skUWjexQJXjRjgrN/sf20uDQEiz kOmm9044t2sX+z8WB5fDGOA= X-Google-Smtp-Source: ABdhPJxJNZboaileCS232D/njgL/jwYVi3sL0vyTBT+hTXCmnyaKNCqta3CREGAvoYmQHy0jdYHNYg== X-Received: by 2002:a17:906:7d02:: with SMTP id u2mr129361ejo.249.1617966264746; Fri, 09 Apr 2021 04:04:24 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:ffef:9b69:ce50:8284? ([2a02:908:1252:fb60:ffef:9b69:ce50:8284]) by smtp.gmail.com with ESMTPSA id e15sm1066012ejh.56.2021.04.09.04.04.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 09 Apr 2021 04:04:24 -0700 (PDT) Subject: Re: [PATCH 1/2] mm/vmscan: add sync_shrinkers function To: Vlastimil Babka , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: ray.huang@amd.com, daniel@ffwll.ch, akpm@linux-foundation.org References: <20210409071725.1532-1-christian.koenig@amd.com> <462c2a51-4aa8-47ba-1c67-171ca651b016@suse.cz> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <951bf630-35e4-9b5a-2ace-007a685d1994@gmail.com> Date: Fri, 9 Apr 2021 13:04:22 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <462c2a51-4aa8-47ba-1c67-171ca651b016@suse.cz> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am 09.04.21 um 13:00 schrieb Vlastimil Babka: > On 4/9/21 9:17 AM, Christian König wrote: >> To be able to switch to a spinlock and reduce lock contention in the TTM >> shrinker we don't want to hold a mutex while unmapping and freeing pages >> from the pool. > Does using spinlock instead of mutex really reduce lock contention? Well using the spinlock instead of the mutex is only the cherry on the cake. The real improvement for the contention is the fact that we just grab the next pool and drop the lock again instead of doing the whole IOMMU unmap and flushing of the CPU TLB dance while holding the lock. >> But then we somehow need to prevent a race between (for example) the shrinker >> trying to free pages and hotplug trying to remove the device which those pages >> belong to. >> >> Taking and releasing the shrinker semaphore on the write side after >> unmapping and freeing all pages should make sure that no shrinker is running in >> paralell any more. > So you explain this in this commit log for adding the function, but then the > next patch just adds a sync_shrinkers() call without any comment. I would expect > there a comment explaining why it's done there - what it protects against, as > it's not an obvious pattern IMHO. Good point, going to add a comment. Thanks, Christian. > >> Signed-off-by: Christian König >> --- >> include/linux/shrinker.h | 1 + >> mm/vmscan.c | 10 ++++++++++ >> 2 files changed, 11 insertions(+) >> >> diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h >> index 0f80123650e2..6b75dc372fce 100644 >> --- a/include/linux/shrinker.h >> +++ b/include/linux/shrinker.h >> @@ -92,4 +92,5 @@ extern void register_shrinker_prepared(struct shrinker *shrinker); >> extern int register_shrinker(struct shrinker *shrinker); >> extern void unregister_shrinker(struct shrinker *shrinker); >> extern void free_prealloced_shrinker(struct shrinker *shrinker); >> +extern void sync_shrinkers(void); >> #endif >> diff --git a/mm/vmscan.c b/mm/vmscan.c >> index 562e87cbd7a1..46cd9c215d73 100644 >> --- a/mm/vmscan.c >> +++ b/mm/vmscan.c >> @@ -408,6 +408,16 @@ void unregister_shrinker(struct shrinker *shrinker) >> } >> EXPORT_SYMBOL(unregister_shrinker); >> >> +/** >> + * sync_shrinker - Wait for all running shrinkers to complete. >> + */ >> +void sync_shrinkers(void) >> +{ >> + down_write(&shrinker_rwsem); >> + up_write(&shrinker_rwsem); >> +} >> +EXPORT_SYMBOL(sync_shrinkers); >> + >> #define SHRINK_BATCH 128 >> >> static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, >> 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.0 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,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 48C68C433B4 for ; Fri, 9 Apr 2021 11:04:27 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 035D5610E5 for ; Fri, 9 Apr 2021 11:04:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 035D5610E5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5EB706E492; Fri, 9 Apr 2021 11:04:26 +0000 (UTC) Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by gabe.freedesktop.org (Postfix) with ESMTPS id 001E56E492 for ; Fri, 9 Apr 2021 11:04:25 +0000 (UTC) Received: by mail-ej1-x632.google.com with SMTP id w3so8005600ejc.4 for ; Fri, 09 Apr 2021 04:04:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=6/JnVL8LfaZdf+zS+mi0dG+OAyirzCOEuyoJgncWbSg=; b=eq8YU0RewVVk6hub1QGwAdPgMqo88js1FBgRgBvcQ/eyJXx0rrjkdsaRgSy5pVxDE5 FXsGdJBjo1fLI6eyOd3do+o2BR/+B3lrN+9YF5JdxnHBnxtG6YVixgPtvcI4g6BE/yXf S85SCuoabIEhcs2ffoOr5WM62pto6LIZwZI68HCFe7p5hCgbWP21ZowiiUwys/YqUfd+ EfIKV9vaNj4zLYF/uaalUeXtGwXK9HSqWKfzFIH3MNGRv7QlTbwYsr0ita6/SgygEcYf LYKzMGuTsm7MxtLoM5KvLGNVBdxldCOTkFa1SEaxVcmef1vIFgqPsRPp7QowqkI3P6QU Zwbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=6/JnVL8LfaZdf+zS+mi0dG+OAyirzCOEuyoJgncWbSg=; b=QeusF1ppYFvGIhqBRI30svZYWnHSTzFcnI3dOUx/c1PuAzNUxPXxs23BVx89xCTyQX wlN0nIh+SSXXJ6ro45WTzvTqX4bOMqUL4FU0RFqd34UqcJK8FyPp5WWoIyz6fdAyKaEj mDINpUBXmxU+6CJcg6UowGmF2lPYSGIoAixzdCLU4oxfVEgHutcFuUE524Jdj46bEqme RQ4zhaPOLoX0EnF85apYHmlCCACiOtzFM8b1lJC0Em6QsRCw5GAqyE8oo1wDlNMy7D0d IDT+FNL/DBPMs9EAgJ4LBIgY+yNtbN4Sdee3dySBk7ku6TiWzCWTlzjPTss4SB0auIya F4Ew== X-Gm-Message-State: AOAM533l4NIuxMgp0ZgMoVrfqDHziGdmWx7VbEA8qpuCLieD2VoAzABP XSUSmqP1851niyGauwueBNE= X-Google-Smtp-Source: ABdhPJxJNZboaileCS232D/njgL/jwYVi3sL0vyTBT+hTXCmnyaKNCqta3CREGAvoYmQHy0jdYHNYg== X-Received: by 2002:a17:906:7d02:: with SMTP id u2mr129361ejo.249.1617966264746; Fri, 09 Apr 2021 04:04:24 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:ffef:9b69:ce50:8284? ([2a02:908:1252:fb60:ffef:9b69:ce50:8284]) by smtp.gmail.com with ESMTPSA id e15sm1066012ejh.56.2021.04.09.04.04.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 09 Apr 2021 04:04:24 -0700 (PDT) Subject: Re: [PATCH 1/2] mm/vmscan: add sync_shrinkers function To: Vlastimil Babka , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20210409071725.1532-1-christian.koenig@amd.com> <462c2a51-4aa8-47ba-1c67-171ca651b016@suse.cz> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <951bf630-35e4-9b5a-2ace-007a685d1994@gmail.com> Date: Fri, 9 Apr 2021 13:04:22 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <462c2a51-4aa8-47ba-1c67-171ca651b016@suse.cz> Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: akpm@linux-foundation.org, ray.huang@amd.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QW0gMDkuMDQuMjEgdW0gMTM6MDAgc2NocmllYiBWbGFzdGltaWwgQmFia2E6Cj4gT24gNC85LzIx IDk6MTcgQU0sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+IFRvIGJlIGFibGUgdG8gc3dpdGNo IHRvIGEgc3BpbmxvY2sgYW5kIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gaW4gdGhlIFRUTQo+PiBz aHJpbmtlciB3ZSBkb24ndCB3YW50IHRvIGhvbGQgYSBtdXRleCB3aGlsZSB1bm1hcHBpbmcgYW5k IGZyZWVpbmcgcGFnZXMKPj4gZnJvbSB0aGUgcG9vbC4KPiBEb2VzIHVzaW5nIHNwaW5sb2NrIGlu c3RlYWQgb2YgbXV0ZXggcmVhbGx5IHJlZHVjZSBsb2NrIGNvbnRlbnRpb24/CgpXZWxsIHVzaW5n IHRoZSBzcGlubG9jayBpbnN0ZWFkIG9mIHRoZSBtdXRleCBpcyBvbmx5IHRoZSBjaGVycnkgb24g dGhlIGNha2UuCgpUaGUgcmVhbCBpbXByb3ZlbWVudCBmb3IgdGhlIGNvbnRlbnRpb24gaXMgdGhl IGZhY3QgdGhhdCB3ZSBqdXN0IGdyYWIgCnRoZSBuZXh0IHBvb2wgYW5kIGRyb3AgdGhlIGxvY2sg YWdhaW4gaW5zdGVhZCBvZiBkb2luZyB0aGUgd2hvbGUgSU9NTVUgCnVubWFwIGFuZCBmbHVzaGlu ZyBvZiB0aGUgQ1BVIFRMQiBkYW5jZSB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLgoKPj4gQnV0IHRo ZW4gd2Ugc29tZWhvdyBuZWVkIHRvIHByZXZlbnQgYSByYWNlIGJldHdlZW4gKGZvciBleGFtcGxl KSB0aGUgc2hyaW5rZXIKPj4gdHJ5aW5nIHRvIGZyZWUgcGFnZXMgYW5kIGhvdHBsdWcgdHJ5aW5n IHRvIHJlbW92ZSB0aGUgZGV2aWNlIHdoaWNoIHRob3NlIHBhZ2VzCj4+IGJlbG9uZyB0by4KPj4K Pj4gVGFraW5nIGFuZCByZWxlYXNpbmcgdGhlIHNocmlua2VyIHNlbWFwaG9yZSBvbiB0aGUgd3Jp dGUgc2lkZSBhZnRlcgo+PiB1bm1hcHBpbmcgYW5kIGZyZWVpbmcgYWxsIHBhZ2VzIHNob3VsZCBt YWtlIHN1cmUgdGhhdCBubyBzaHJpbmtlciBpcyBydW5uaW5nIGluCj4+IHBhcmFsZWxsIGFueSBt b3JlLgo+IFNvIHlvdSBleHBsYWluIHRoaXMgaW4gdGhpcyBjb21taXQgbG9nIGZvciBhZGRpbmcg dGhlIGZ1bmN0aW9uLCBidXQgdGhlbiB0aGUKPiBuZXh0IHBhdGNoIGp1c3QgYWRkcyBhIHN5bmNf c2hyaW5rZXJzKCkgY2FsbCB3aXRob3V0IGFueSBjb21tZW50LiBJIHdvdWxkIGV4cGVjdAo+IHRo ZXJlIGEgY29tbWVudCBleHBsYWluaW5nIHdoeSBpdCdzIGRvbmUgdGhlcmUgLSB3aGF0IGl0IHBy b3RlY3RzIGFnYWluc3QsIGFzCj4gaXQncyBub3QgYW4gb2J2aW91cyBwYXR0ZXJuIElNSE8uCgpH b29kIHBvaW50LCBnb2luZyB0byBhZGQgYSBjb21tZW50LgoKVGhhbmtzLApDaHJpc3RpYW4uCgo+ Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1k LmNvbT4KPj4gLS0tCj4+ICAgaW5jbHVkZS9saW51eC9zaHJpbmtlci5oIHwgIDEgKwo+PiAgIG1t L3Ztc2Nhbi5jICAgICAgICAgICAgICB8IDEwICsrKysrKysrKysKPj4gICAyIGZpbGVzIGNoYW5n ZWQsIDExIGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hy aW5rZXIuaCBiL2luY2x1ZGUvbGludXgvc2hyaW5rZXIuaAo+PiBpbmRleCAwZjgwMTIzNjUwZTIu LjZiNzVkYzM3MmZjZSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9saW51eC9zaHJpbmtlci5oCj4+ ICsrKyBiL2luY2x1ZGUvbGludXgvc2hyaW5rZXIuaAo+PiBAQCAtOTIsNCArOTIsNSBAQCBleHRl cm4gdm9pZCByZWdpc3Rlcl9zaHJpbmtlcl9wcmVwYXJlZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlu a2VyKTsKPj4gICBleHRlcm4gaW50IHJlZ2lzdGVyX3Nocmlua2VyKHN0cnVjdCBzaHJpbmtlciAq c2hyaW5rZXIpOwo+PiAgIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfc2hyaW5rZXIoc3RydWN0IHNo cmlua2VyICpzaHJpbmtlcik7Cj4+ICAgZXh0ZXJuIHZvaWQgZnJlZV9wcmVhbGxvY2VkX3Nocmlu a2VyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpOwo+PiArZXh0ZXJuIHZvaWQgc3luY19zaHJp bmtlcnModm9pZCk7Cj4+ICAgI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21t L3Ztc2Nhbi5jCj4+IGluZGV4IDU2MmU4N2NiZDdhMS4uNDZjZDljMjE1ZDczIDEwMDY0NAo+PiAt LS0gYS9tbS92bXNjYW4uYwo+PiArKysgYi9tbS92bXNjYW4uYwo+PiBAQCAtNDA4LDYgKzQwOCwx NiBAQCB2b2lkIHVucmVnaXN0ZXJfc2hyaW5rZXIoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcikK Pj4gICB9Cj4+ICAgRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3Nocmlua2VyKTsKPj4gICAKPj4g Ky8qKgo+PiArICogc3luY19zaHJpbmtlciAtIFdhaXQgZm9yIGFsbCBydW5uaW5nIHNocmlua2Vy cyB0byBjb21wbGV0ZS4KPj4gKyAqLwo+PiArdm9pZCBzeW5jX3Nocmlua2Vycyh2b2lkKQo+PiAr ewo+PiArCWRvd25fd3JpdGUoJnNocmlua2VyX3J3c2VtKTsKPj4gKwl1cF93cml0ZSgmc2hyaW5r ZXJfcndzZW0pOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTChzeW5jX3Nocmlua2Vycyk7Cj4+ICsK Pj4gICAjZGVmaW5lIFNIUklOS19CQVRDSCAxMjgKPj4gICAKPj4gICBzdGF0aWMgdW5zaWduZWQg bG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCwKPj4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=