From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=A/ME3eDF; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 496575A061A for ; Mon, 20 Jan 2025 06:03:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737349395; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Otj/i9YxH8Ex1BKeBO3WT3iArT/Id0Vg2/Mch4GIyjE=; b=A/ME3eDFbeOrzQuZ9hpLFaJ9tYib1ZVE9z8YjGO52+6f9E/oydbqKmKtqkjGHzqYQnI50m XKVGEi5QHFafQQDiXO4MWGaGDK/c4V3tgMzvHgIJIJcfXp+urtN+5k+6J4bVgM8/s32ap1 odUfERow2xfKwu49Wv6c7NjQoJjeEtY= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-22-XXw01Y6RNj2SACnuFDVQHQ-1; Mon, 20 Jan 2025 00:03:13 -0500 X-MC-Unique: XXw01Y6RNj2SACnuFDVQHQ-1 X-Mimecast-MFC-AGG-ID: XXw01Y6RNj2SACnuFDVQHQ Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-46790c5b1a5so119800501cf.2 for ; Sun, 19 Jan 2025 21:03:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737349393; x=1737954193; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Otj/i9YxH8Ex1BKeBO3WT3iArT/Id0Vg2/Mch4GIyjE=; b=Gsqby97CALhxP3hBnSimwFXCq+g04tLeG1AOn0aM5P6lbgPNg82w7jzpJNm8dqL+WE 11c/YnqXIhV57eOvFjluXJYvIHSP2SwWHVgv+XVGctxmoImmAG2guTPTw4bEEKbxUmpN iw+U2YsX8k/sBMsXkoK5hl8VnWOhzRQuIOrGZH8u1fGg8RMCrHMLpWJ8JqTRD/3RSMCX vZirdgpRSmOMMHBt1aGanddHkna11Zq8WG8sLHMaHBWchtcBlFnsVk8haXu0hgaWGCTS D1Lh9kT7nsSn39Hvyl8L91jsrT0qhZF6bbXepCGXbdCU53nHPw/FhJPWSpUQaVx38qef Zedw== X-Forwarded-Encrypted: i=1; AJvYcCXtbxOGMwsEiYRkkJ/7LanuGlnawSq1wjI1VSo///DnOlJV2qi3nJ/2n0Wlx6eyiYX+FFWoBVwTJI0=@passt.top X-Gm-Message-State: AOJu0YysgF9OallAxrF55xi2k5zZTAaOotUbaOQHdgV0q9VX5ev8ucaP Q8OzCqtQSGwkIjumjMPSNo68UCGsT26rSXajPn3cP4hi+Z6VQUNdaPlHeJZgxv+EHpcom4Tv9cL 0cLpV2ZeSBJ0fcJvo4RQtYAHrZZqznKzeab4hDHWf+QlHVLA4Zg== X-Gm-Gg: ASbGncuM/tPmoXczVb3IB/eTInK6wOp7QupYeupVkRFmdz0n4EObmjbh4lTPSxu6LVW tvnMWkOP3/MjG4IAeM2srmNVvzQ3WqW9j61FNFMq2RmAE3NtEJUCXxkHTmDSz41AzL55ZqSdAkP 01w4ZrSF1iqxgnoQOh6GYuUGdBAPwdL13lfzV7/jRLbfTln+ZCE5Z+NkpFMOxQdV9iuW7Nz7OS8 ZVuRWUIOW0IyGfYVzWEiI4MrMjgXbHbgFN+VnidOd+ADDpThddxDCA5t6jCZPj+0hFK X-Received: by 2002:ac8:58c6:0:b0:467:61c1:df3e with SMTP id d75a77b69052e-46e12ab658emr167404541cf.30.1737349392690; Sun, 19 Jan 2025 21:03:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IGen5rwylzwMI56v5RM4Bya0c7VtUEr8Gq9zlBAhsh0hHbQmx946wxszvjGZE3bI8lfp/gn2Q== X-Received: by 2002:ac8:58c6:0:b0:467:61c1:df3e with SMTP id d75a77b69052e-46e12ab658emr167403421cf.30.1737349390765; Sun, 19 Jan 2025 21:03:10 -0800 (PST) Received: from [10.0.0.215] ([24.225.235.209]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-46e10403dc6sm38665451cf.53.2025.01.19.21.03.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 19 Jan 2025 21:03:10 -0800 (PST) Message-ID: Date: Mon, 20 Jan 2025 00:03:08 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [net,v2] tcp: correct handling of extreme memory squeeze To: Neal Cardwell References: <20250117214035.2414668-1-jmaloy@redhat.com> From: Jon Maloy In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 08wemi595-yiYOC03ptwNnQnWnKKu_aSTW1UdgtSrmc_1737349393 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: R7HQTGKAS5KWJSMLOXLJ3W3CIXVQVVPX X-Message-ID-Hash: R7HQTGKAS5KWJSMLOXLJ3W3CIXVQVVPX X-MailFrom: jmaloy@redhat.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; digests; suspicious-header CC: netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org, passt-dev@passt.top, sbrivio@redhat.com, lvivier@redhat.com, dgibson@redhat.com, imagedong@tencent.com, eric.dumazet@gmail.com, edumazet@google.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDIwMjUtMDEtMTggMTU6MDQsIE5lYWwgQ2FyZHdlbGwgd3JvdGU6DQo+IE9uIEZyaSwg SmFuIDE3LCAyMDI1IGF0IDQ6NDHigK9QTSA8am1hbG95QHJlZGhhdC5jb20+IHdyb3RlOg0KPj4N Cj4+IEZyb206IEpvbiBNYWxveSA8am1hbG95QHJlZGhhdC5jb20+DQo+Pg0KPj4gVGVzdGluZyB3 aXRoIGlwZXJmMyB1c2luZyB0aGUgInBhc3RhIiBwcm90b2NvbCBzcGxpY2VyIGhhcyByZXZlYWxl ZA0KPj4gYSBidWcgaW4gdGhlIHdheSB0Y3AgaGFuZGxlcyB3aW5kb3cgYWR2ZXJ0aXNpbmcgaW4g ZXh0cmVtZSBtZW1vcnkNCj4+IHNxdWVlemUgc2l0dWF0aW9ucy4NCj4+DQo+PiBVbmRlciBtZW1v cnkgcHJlc3N1cmUsIGEgc29ja2V0IGVuZHBvaW50IG1heSB0ZW1wb3JhcmlseSBhZHZlcnRpc2UN Cj4+IGEgemVyby1zaXplZCB3aW5kb3csIGJ1dCB0aGlzIGlzIG5vdCBzdG9yZWQgYXMgcGFydCBv ZiB0aGUgc29ja2V0IGRhdGEuDQo+PiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHRoYXQg aXQgaXMgY29uc2lkZXJlZCBhIHRlbXBvcmFyeSBzZXR0aW5nDQo+PiB3aGljaCBzaG91bGRuJ3Qg aW5mbHVlbmNlIGFueSBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4NCj4+DQo+PiBIb3dldmVyLCBpZiB3 ZSBoYXBwZW4gdG8gc3RhbGwgYXQgYW4gdW5mb3J0dW5hdGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQN Cj4+IHdpbmRvdyBzaXplLCB0aGUgYWxnb3JpdGhtIHNlbGVjdGluZyBhIG5ldyB2YWx1ZSB3aWxs IGNvbnNpc3RlbnRseSBmYWlsDQo+PiB0byBhZHZlcnRpc2UgYSBub24temVybyB3aW5kb3cgb25j ZSB3ZSBoYXZlIGZyZWVkIHVwIGVub3VnaCBtZW1vcnkuDQo+IA0KPiBUaGUgImlmIHdlIGhhcHBl biB0byBzdGFsbCBhdCBhbiB1bmZvcnR1bmF0ZSB2YWx1ZSBvZiB0aGUgY3VycmVudA0KPiB3aW5k b3cgc2l6ZSIgcGhyYXNlIGlzIGEgbGl0dGxlIHZhZ3VlLi4uIDotKSBEbyB5b3UgaGF2ZSBhIHNl bnNlIG9mDQo+IHdoYXQgbWlnaHQgY291bnQgYXMgInVuZm9ydHVuYXRlIiBoZXJlPyBUaGF0IG1p Z2h0IGhlbHAgaW4gY3JhZnRpbmcgYQ0KPiBwYWNrZXRkcmlsbCB0ZXN0IHRvIHJlcHJvZHVjZSB0 aGlzIGFuZCBoYXZlIGFuIGF1dG9tYXRlZCByZWdyZXNzaW9uDQo+IHRlc3QuDQoNCk9idmlvdXNs eSwgaXQgaGFwcGVucyB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IGluDQoNCl9fdGNw X2NsZWFudXBfcmJ1ZigpIHsNCiAgICBbLi4uLl0NCiAgICBpZiAoY29waWVkID4gMCAmJiAhdGlt ZV90b19hY2sgJiYNCiAgICAgICAgIShzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pKSB7 DQogICAgICAgICAgICAgX191MzIgcmN2X3dpbmRvd19ub3cgPSB0Y3BfcmVjZWl2ZV93aW5kb3co dHApOw0KDQogICAgICAgICAgICAgLyogT3B0aW1pemUsIF9fdGNwX3NlbGVjdF93aW5kb3coKSBp cyBub3QgY2hlYXAuICovDQogICAgICAgICAgICAgaWYgKDIqcmN2X3dpbmRvd19ub3cgPD0gdHAt PndpbmRvd19jbGFtcCkgew0KICAgICAgICAgICAgICAgICBfX3UzMiBuZXdfd2luZG93ID0gX190 Y3Bfc2VsZWN0X3dpbmRvdyhzayk7DQoNCiAgICAgICAgICAgICAgICAgLyogU2VuZCBBQ0sgbm93 LCBpZiB0aGlzIHJlYWQgZnJlZWQgbG90cyBvZiBzcGFjZQ0KICAgICAgICAgICAgICAgICAgKiBp biBvdXIgYnVmZmVyLiBDZXJ0YWlubHksIG5ld193aW5kb3cgaXMgbmV3IHdpbmRvdy4NCiAgICAg ICAgICAgICAgICAgICogV2UgY2FuIGFkdmVydGlzZSBpdCBub3csIGlmIGl0IGlzIG5vdCBsZXNz IHRoYW4gDQoNCiAgICAgICAgICAgICAgICAgICogY3VycmVudCBvbmUuDQogICAgICAgICAgICAg ICAgICAqICJMb3RzIiBtZWFucyAiYXQgbGVhc3QgdHdpY2UiIGhlcmUuDQogICAgICAgICAgICAg ICAgICAqLw0KICAgICAgICAgICAgICAgICBpZiAobmV3X3dpbmRvdyAmJiBuZXdfd2luZG93ID49 IDIgKiByY3Zfd2luZG93X25vdykNCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3RvX2Fj ayA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgIH0NCiAgICAgWy4uLi5dDQp9DQoNCnlpZWxk cyB0aW1lX3RvX2FjayA9IGZhbHNlLCBpLmUuICBfX3RjcF9zZWxlY3Rfd2luZG93KHNrKSByZXR1 cm5zDQphIHZhbHVlIG5ld193aW5kb3cgIDwgKDIgKiAgdGNwX3JlY2VpdmVfd2luZG93KHRwKSku DQoNCkluIG15IGxvZyBJIGhhdmUgZm9yIGJyZXZpdHkgdXNlZCB0aGUgZm9sbG93aW5nIG5hbWVz Og0KDQp3aW5fbm93OiBzYW1lIGFzIHJjdl93aW5kb3dfbm93DQogICAgICg9IHRjcF9yZWNlaXZl X3dpbmRvdyh0cCksDQogICAgICA9IHRwLT5yY3Zfd3VwICsgdHAtPnJjdl93bmQgLSB0cC0+cmN2 X254dCwNCiAgICAgID0gMjY1NDY5MjAwICsgMjYyMTQ0IC0gIDI2NTYwMDE2MCwNCiAgICAgID0g MTMxMTg0KQ0KDQpuZXdfd2luOiBzYW1lIGFzIG5ld193aW5kb3cNCiAgICAgICg9IF9fdGNwX3Nl bGVjdF93aW5kb3coc2spLA0KICAgICAgID0gMCBmaXJzdCB0aW1lLCBsYXRlciAyNjIxNDQgKQ0K DQpyY3Zfd25kOiBzYW1lIGFzIHRwLT5yY3Zfd25kLA0KICAgICAgICg9MjYyMTQ0KQ0KDQpXZSBz ZWUgdGhhdCBhbHRob3VnaCB0aGUgbGFzdCB0ZXN0IGFjdHVhbGx5IGlzIHByZXR0eSBjbG9zZQ0K KDI2MjE0NCA+PSAyNjIzNjggPyA9PiBmYWxzZSkgaXQgaXMgbm90IGNsb3NlIGVub3VnaC4NCg0K DQpXZSBhbHNvIG5vdGljZSB0aGF0DQoodHAtPnJjdl9ueHQgLSB0cC0+cmN2X3d1cCkgPSAoMjY1 NjAwMTYwIC0gMjY1NDY5MjAwKSA9IDEzMDk2MC4NCjEzMDk2MCA8IHRwLT5yY3Zfd25kIC8gMiwg c28gdGhlIGxhc3QgdGVzdCBpbiBfX3RjcF9jbGVhbnVwX3JidWYoKToNCihuZXdfd2luZG93ID49 IDIgKiByY3Zfd2luZG93X25vdykgd2lsbCBhbHdheXMgYmUgZmFsc2UuDQoNCg0KVG9vIG1lIGl0 IGxvb2tzIGxpa2UgX190Y3Bfc2VsZWN0X3dpbmRvdyhzaykgZG9lc24ndCBhdCBhbGwgdGFrZSB0 aGUgDQpmcmVlZC11cCBtZW1vcnkgaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgYSBuZXcg d2luZG93LiBJIGhhdmVuJ3QNCmxvb2tlZCBpbnRvIHdoeSB0aGF0IGlzIGhhcHBlbmluZy4NCg0K PiANCj4+IFRoaXMgbWVhbnMgdGhhdCB0aGlzIHNpZGUncyBub3Rpb24gb2YgdGhlIGN1cnJlbnQg d2luZG93IHNpemUgaXMNCj4+IGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgbGFzdCBhZHZlcnRpc2Vk IHRvIHRoZSBwZWVyLCBjYXVzaW5nIHRoZSBsYXR0ZXINCj4+IHRvIG5vdCBzZW5kIGFueSBkYXRh IHRvIHJlc29sdmUgdGhlIHNpdHV0aW9uLg0KPiANCj4gU2luY2UgdGhlIHBlZXIgbGFzdCBzYXcg YSB6ZXJvIHJlY2VpdmUgd2luZG93IGF0IHRoZSB0aW1lIG9mIHRoZQ0KPiBtZW1vcnktcHJlc3N1 cmUgZHJvcCwgc2hvdWxkbid0IHRoZSBwZWVyIGJlIHNlbmRpbmcgcmVwZWF0ZWQgemVybw0KPiB3 aW5kb3cgcHJvYmVzLCBhbmQgc2hvdWxkbid0IHRoZSBsb2NhbCBob3N0IHJlc3BvbmQgdG8gYSBa V1Agd2l0aCBhbg0KPiBBQ0sgd2l0aCB0aGUgY29ycmVjdCBub24temVybyB3aW5kb3c/DQoNCkl0 IHNob3VsZCwgYnV0IGF0IHRoZSBtb21lbnQgd2hlbiBJIGZvdW5kIHRoaXMgYnVnIHRoZSBwZWVy IHN0YWNrIHdhcyANCm5vdCB0aGUgTGludXgga2VybmVsIHN0YWNrLCBidXQgb25lIHdlIGRldmVs b3AgZm9yIG91ciBvd24gcHVycG9zZS4gV2UgDQpmaXhlZCB0aGF0IGxhdGVyLCBidXQgaXQgc3Rp bGwgbWVhbnMgdGhhdCB0cmFmZmljIHN0b3BzIGZvciBhIGNvdXBsZSBvZiANCnNlY29uZHMgbm93 IGFuZCB0aGVuIGJlZm9yZSB0aGUgdGltZXIgcmVzdGFydHMgdGhlIGZsb3cuIFRoaXMgaGFwcGVu cw0KdG9vIG9mdGVuIGZvciBjb21mb3J0IGluIG91ciB1c2FnZSBzY2VuYXJpb3MuDQpXZSBjYW4g b2YgY291cnNlIGJsYW1lIHRoZSB0aGUgcGVlciBzdGFjaywgYnV0IEkgc3RpbGwgZmVlbCB0aGlz IGlzIGENCmJ1ZywgYW5kIHRoYXQgaXQgY291bGQgYmUgaGFuZGxlZCBiZXR0ZXIgYnkgdGhlIGtl cm5lbCBzdGFjay4NCj4gDQo+IERvIHlvdSBoYXBwZW4gdG8gaGF2ZSBhIHRjcGR1bXAgLnBjYXAg b2Ygb25lIG9mIHRoZXNlIGNhc2VzIHRoYXQgeW91IGNhbiBzaGFyZT8NCg0KSSBoYWQgb25lLCBh bHRob3VnaCBub3QgZm9yIHRoaXMgcGFydGljdWxhciBydW4sIGFuZCBJIGNhbm5vdCBmaW5kIGl0 IA0KcmlnaHQgbm93LiBJIHdpbGwgY29udGludWUgbG9va2luZyBvciBtYWtlIGEgbmV3IG9uZS4g SXMgdGhlcmUgc29tZSANCnNoYXJlZCBzcGFjZSBJIGNhbiBwdXQgaXQ/DQoNCj4gDQo+PiBUaGUg cHJvYmxlbSBvY2N1cnMgb24gdGhlIGlwZXJmMyBzZXJ2ZXIgc2lkZSwgYW5kIHRoZSBzb2NrZXQg aW4gcXVlc3Rpb24NCj4+IGlzIGEgY29tcGxldGVseSByZWd1bGFyIHNvY2tldCB3aXRoIHRoZSBk ZWZhdWx0IHNldHRpbmdzIGZvciB0aGUNCj4+IGZlZG9yYTQwIGtlcm5lbC4gV2UgZG8gbm90IHVz ZSBTT19QRUVLIG9yIFNPX1JDVkJVRiBvbiB0aGUgc29ja2V0Lg0KPj4NCj4+IFRoZSBmb2xsb3dp bmcgZXhjZXJwdCBvZiBhIGxvZ2dpbmcgc2Vzc2lvbiwgd2l0aCBvd24gY29tbWVudHMgYWRkZWQs DQo+PiBzaG93cyBtb3JlIGluIGRldGFpbCB3aGF0IGlzIGhhcHBlbmluZzoNCj4+DQo+PiAvLyAg ICAgICAgICAgICAgdGNwX3Y0X3JjdigtPikNCj4+IC8vICAgICAgICAgICAgICAgIHRjcF9yY3Zf ZXN0YWJsaXNoZWQoLT4pDQo+PiBbNTIwMTwtPjM5MjIyXTogICAgID09PT0gQWN0aXZhdGluZyBs b2cgQCBuZXQvaXB2NC90Y3BfaW5wdXQuYy90Y3BfZGF0YV9xdWV1ZSgpLzUyNTcgPT09PQ0KPj4g WzUyMDE8LT4zOTIyMl06ICAgICB0Y3BfZGF0YV9xdWV1ZSgtPikNCj4+IFs1MjAxPC0+MzkyMjJd OiAgICAgICAgRFJPUFBJTkcgc2tiIFsyNjU2MDAxNjAuLjI2NTY2NTY0MF0sIHJlYXNvbjogU0tC X0RST1BfUkVBU09OX1BST1RPX01FTQ0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgW3Jjdl9u eHQgMjY1NjAwMTYwLCByY3Zfd25kIDI2MjE0NCwgc250X2FjayAyNjU0NjkyMDAsIHdpbl9ub3cg MTMxMTg0XQ0KPiANCj4gV2hhdCBpcyAid2luX25vdyI/IFRoYXQgZG9lc24ndCBzZWVtIHRvIGNv cnJlc3BvbmQgdG8gYW55IHZhcmlhYmxlDQo+IG5hbWUgaW4gdGhlIExpbnV4IHNvdXJjZSB0cmVl LiANCg0KU2VlIGFib3ZlLg0KDQogIENhbiB0aGlzIGJlIHJlbmFtZWQgdG8gdGhlDQo+IHRjcF9z ZWxlY3Rfd2luZG93KCkgdmFyaWFibGUgaXQgaXMgcHJpbnRpbmcsIGxpa2UgImN1cl93aW4iIG9y DQo+ICJlZmZlY3RpdmVfd2luIiBvciAibmV3X3dpbiIsIGV0Yz8NCj4gDQo+IE9yIHBlcmhhcHMg eW91IGNhbiBhdHRhY2ggeW91ciBkZWJ1Z2dpbmcgcGF0Y2ggaW4gc29tZSBlbWFpbCB0aHJlYWQ/ IEkNCj4gYWdyZWUgd2l0aCBFcmljIHRoYXQgdGhlc2UgZGVidWcgZHVtcHMgYXJlIGEgbGl0dGxl IGhhcmQgdG8gcGFyc2UNCj4gd2l0aG91dCBzZWVpbmcgdGhlIHBhdGNoIHRoYXQgYWxsb3dzIHVz IHRvIHVuZGVyc3RhbmQgd2hhdCBzb21lIG9mDQo+IHRoZXNlIGZpZWxkcyBhcmUuLi4NCj4gDQo+ IEkgYWdyZWUgd2l0aCBFcmljIHRoYXQgcHJvYmFibHkgdHAtPnByZWRfZmxhZ3Mgc2hvdWxkIGJl IGNsZWFyZWQsIGFuZA0KPiBhIHBhY2tldGRyaWxsIHRlc3QgZm9yIHRoaXMgd291bGQgYmUgc3Vw ZXItaGVscGZ1bC4NCg0KSSBtdXN0IGFkbWl0IEkgaGF2ZSBuZXZlciB1c2VkIHBhY2tldGRyaWxs LCBidXQgSSBjYW4gbWFrZSBhbiBlZmZvcnQuDQoNCi8vL2pvbg0KDQo+IA0KPiB0aGFua3MsDQo+ IG5lYWwNCj4gDQoNCg==