From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.bufferbloat.net (Postfix) with ESMTPS id D5D1C3BA8E for ; Mon, 18 Jun 2018 05:24:26 -0400 (EDT) Received: by mail-wm0-x229.google.com with SMTP id 69-v6so14144949wmf.3 for ; Mon, 18 Jun 2018 02:24:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heistp.net; s=google; h=mime-version:subject:from:in-reply-to:date:cc:message-id:references :to; bh=oe3Dg5EJbwuWznTBKaxfpLmOhTGy9KMo4yRKx9HwjP4=; b=JHDqaNhhVTt40oPqyra40h6/GoVR6mzkjzWAgytO6Hdp6uN78ewPPLvLHNZxg1S+KF qGr8GBe633OqD10t6a+si+zJWy3SWWbUghRV08F9rjKdylnbJCD33rQjwS4UTP0ScI+R 5NoAkM2rLZgI0mo6Sb6aJqqq+wYqnHlz3GUBAxQyLP3Jihd1WCvASYj1hjGPsx0xsBTT QNPDDlKA3cp8bcVQIM/Hi6s+M+KX7zABb+myWiuDYxK4WmeXoAaIF4W/x5OzQgNWt4je G0iN/S9OXaJvIiEGpWDLppPAXK19Sty+3RV7ZaoDHJ9ks6N4vsroeFimM0W3eCV3sVZj LyxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=oe3Dg5EJbwuWznTBKaxfpLmOhTGy9KMo4yRKx9HwjP4=; b=dzUTLqrDgH7Tdp+hzg6F3oiWDm3pUSMVwvljS+DHJ4KA/+AWDVbBYgtbXO9EtUd0NR tLK2j7FJMaLqJhSGD2CA8+ShO8NA6zIL4W6nRHFHhA26SdEhKrCp3FRO3/psZCtZNQGY t3/caXDneIO4Ofkuq1HoWgzWaKEhJdRX5rA56nKckyhNh7sliogYlQTZuQyAFjUFLsjk bUA16/b9F322RLaWNcZarmDDzp9uUQd6bjVXoI3FtJR3bYn4A26z0nOqaMb5HXtAXdXD f7xSPQj6+2X/tI3NtoOP76yvwqLfzkhQwEZCB4MR09LHGRbfrPLXNsyqn5W32aMzuIjF Oveg== X-Gm-Message-State: APt69E2aroSzJlejxuGR+YEm4HLFrr2gmbT6WAwFDWFokQGVr+RllxmO ENo6ZJN9Rlv3ZBKe/PWg8FRMAg== X-Google-Smtp-Source: ADUXVKLwN2iDBx9iz3HQ/h1OMz7XLnJfzSBaZrorJCI6X4fFFaAXz/q2CnI8DW0Mjl4klCFWiOfUbg== X-Received: by 2002:a1c:cc08:: with SMTP id h8-v6mr7658719wmb.82.1529313865981; Mon, 18 Jun 2018 02:24:25 -0700 (PDT) Received: from tron.luk.heistp.net (h-1169.lbcfree.net. [185.193.85.130]) by smtp.gmail.com with ESMTPSA id r3-v6sm13152171wrj.78.2018.06.18.02.24.24 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 18 Jun 2018 02:24:25 -0700 (PDT) Content-Type: multipart/alternative; boundary="Apple-Mail=_60CB10D4-3C1D-442E-BFDA-30CC71AF9B13" Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) From: Pete Heist In-Reply-To: Date: Mon, 18 Jun 2018 11:24:24 +0200 Cc: Dave Taht , Make-Wifi-fast Message-Id: <5CC11C44-6C78-410D-B699-B4B1A6F5FBDD@heistp.net> References: <1527721073.171416827@apps.rackspace.com> <150ABF21-FAFC-48E2-9E55-CAA609EAE449@heistp.net> <20180617131921.09bf5353@redhat.com> To: Jonathan Morton X-Mailer: Apple Mail (2.3124) Subject: Re: [Make-wifi-fast] emulating wifi better - coupling qdiscs in netem? X-BeenThere: make-wifi-fast@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jun 2018 09:24:27 -0000 --Apple-Mail=_60CB10D4-3C1D-442E-BFDA-30CC71AF9B13 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jun 17, 2018, at 8:47 PM, Jonathan Morton = wrote: > If you have instructions for setting up a test, I could try it. >=20 Ok, thanks for that, code and scripts are attached, see README.txt. I now use plain netns (no lxc containers), which is easier to set up and = has lower RTTs and higher throughputs, probably due to no bridge device. Per Eric=E2=80=99s tip, the nfq no-op code is run with chrt -rr 99, = which reduces RTTs somewhat and increases throughputs ~2-3x. No busy = polling yet. I also tried it on VMWare with a 2011 MBP, which looks radically better = than the APU2 (for nfq, RTTs ~16% of APU2 and throughput 4x higher in = the non-GSO case, 11x with GSO). Results attached, and to summarize: ping mean (min-max) RTTs: APU2, no nfq: 35 us (23-291) APU2, nfq without GSO: 80 us (53-288) APU2, nfq with GSO: 85 us (56-270) 2011 MBP, no nfq: 4 us (4-529) [11% of APU2] 2011 MBP, nfq without GSO: 13 us (11-197) [16% of APU2] 2011 MBP, nfq with GSO: 14 us (11-1568) [16% of APU2] iperf3 throughputs (Gbps): APU2, no nfq: 5.01 Gbps APU2, nfq without GSO: 391 Mbps APU2, nfq with GSO: 3.35 Gbps 2011 MBP, no nfq: 39.8 Gbps [7.9x APU2] 2011 MBP, nfq without GSO: 1.48 Gbps [3.8x APU2] 2011 MBP, nfq with GSO: 38.0 Gbps [11.3x APU2] Results from a decent physical box instead of a VM may be interesting to = see. --Apple-Mail=_60CB10D4-3C1D-442E-BFDA-30CC71AF9B13 Content-Type: multipart/mixed; boundary="Apple-Mail=_ABD61B21-20DB-4065-BA2F-114FA48728FD" --Apple-Mail=_ABD61B21-20DB-4065-BA2F-114FA48728FD Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
On Jun 17, 2018, at 8:47 PM, Jonathan Morton <chromatix99@gmail.com> wrote:

If you have instructions for setting up a test, I = could try it.

Ok, thanks for = that, code and scripts are attached, see README.txt.

I now use plain netns = (no lxc containers), which is easier to set up and has lower RTTs and = higher throughputs, probably due to no bridge device.

Per Eric=E2=80=99s tip, = the nfq no-op code is run with chrt -rr 99, which reduces RTTs somewhat = and increases throughputs ~2-3x. No busy polling yet.

I also tried it on = VMWare with a 2011 MBP, which looks radically better than the APU2 (for = nfq, RTTs ~16% of APU2 and throughput 4x higher in the non-GSO case, 11x = with GSO). Results attached, and to summarize:

ping mean (min-max) RTTs:

APU2, no nfq: 35 us = (23-291)
APU2, nfq without = GSO: 80 us (53-288)
APU2, nfq with GSO: 85 us (56-270)
2011 MBP, no nfq: 4 us (4-529) [11% of APU2]
2011 MBP, nfq without GSO: 13 us (11-197) [16% of = APU2]
2011 MBP, nfq with GSO: 14 us (11-1568) = [16% of APU2]

iperf3 throughputs (Gbps):

APU2, no nfq: 5.01 Gbps
APU2, nfq without GSO: 391 Mbps
APU2, nfq with GSO: 3.35 Gbps
2011 MBP, no nfq: 39.8 Gbps [7.9x APU2]
2011 MBP, nfq without GSO: 1.48 Gbps [3.8x = APU2]
2011 MBP, nfq with GSO: 38.0 Gbps [11.3x = APU2]

Results from a decent physical box instead of a VM may be = interesting to see.
= --Apple-Mail=_ABD61B21-20DB-4065-BA2F-114FA48728FD Content-Disposition: attachment; filename=nfqtest.tar.gz Content-Type: application/x-gzip; name="nfqtest.tar.gz" Content-Transfer-Encoding: base64 H4sIAPJ2J1sAA+1de3faSLKff82n6PFkMpDloScCnMxdP3CuT2zs9WN3s4mvjhDC6EZIWBJ2vLP5 7ltVrScIsDOJ48zQM8fGre5fV1dXVVdXtYg7vA6tIGz88BWLAEVTVfoNZfY3fRZlWRSbmizL0E4U JUX9galfk6i4TIPQ8Bn7wfe8cFm7Vc+/0+JG6w+/a1eBVze/whi4wE1FWbD+sNaCyNdf0US5KcP6 S5ra/IEJX4GWufInX/+fbNd0pgOLvbR83/Xqo19LaVUQDuz5Ksfu5+umrg3Vs+18273K14X22MrX GP7EaNiuFWJ1ph6GGLtOg//Kd3Fsd/qxAV2GthNa/tKHINXwGSo/zOFju/BuYgX3BNCvp9bUmicz acobNOarqE/jBfNc544NPZ/19v+2re+eV5nrhcy1rIE1YF44svxbO7A67EXjXvSYnuuGvmHyqYEQ h7bJgOtTM2TAND3wzA9WyF64ztbsY9cZB1ejgc9elEDtdfikT6Zh2RyBIrzoT4dVZrshQ+5U2RQ+ ypIeMpqL7k7HldJvpY05JNcZsVc0MNUhoD6yjIHllwGxslXagBa1X/lDhN54xcq9/d6hfnaxc/b2 TP/bRfeiy16+ZK0K+w8Nnu8zdIyrAIboHR7p+/ppF9qfncPUElKGV5YLDYGU4dUcKdZH4FVMEKBW WWD/2/KGZWxdIfKGVzAUguhDY2zDWr1i2/v6Re/spLsbP7+x/MD2XCRjv9c9PzzovdH/LsRPfSvQ 7QE8HIWeG5RTjiGZvhVOfRc4NtoqfUpW5MazB7QIgeUOdIAf2GZYRvYnvTNrYA+I+bRQwNV3R8i+ 49033XN952J/v3uqnx38q3u5Vbw+2WojDLESLD/SxhcvKwskBSCoMMDR2Wv9793TvQMU2eycNrAD Z3FEOHUl7toD7K5v7+52T85p/qAB1kdjPHEsFnosANEEkWcoxWPD/1Bn+7YfhLAsYI3DWEWgmRkC v0kpNpDaaGGRfB3/1qk9HzPqFI8G8G6VGYNBbiCGXe3+NOSatpGgoZRMZYlD7Z5v60fbp2+qtJRO WZFIRgB17PkcjHQvRQuqzKpf1ann4fZO97AKrabOgPUtmiyot4UDcka4gwxGNMk8OTQ5aMfpwb9o XvaQlVPtJqkJPWhTZbxdqi+O5VbYSyZUGEjMxgSsu+eXN2f6buKsNqyPdlju/vPgXN/fPji8OO1i 7aeMlKbyaPbLQDisQ5GAVUmc2YuBERo5KzG8hmFJFQ0amjpMUOZ6F4eH83KJP9/Rch5t//Mv4iU0 /O0TNMsoAlQJIC0f+rY79LaKrUDUQ2xCD5A7N2ZgKrcTww8szmIcs4BhE9/rO9Y4YNgUdjTOsUiZ Uf92d/Tu6enxKbGMDEHO+FzBdCfGneMZtJTJIqZTPNkmBf7fvVOYJ+cIJ2EIIhnAklmhwQ0XbRgg TO/dTVQUqPFXUDMZZRUmS0vh+Fx1GsirBf1QrHJ93x4eb+9dRsrBlz9qep+R496RZjSi9YSuaauz Nzv6QW//+JL9D3NDb+SUc7CoswWNKxXWYQI3BXl+726f6Ifd3iVnciJSnm+T0qAhXDVKAkHsR/ik 94+vSNQqUL8xARcoHJY3QTRd0whhm9+sRAuDfeLJPmcJ6a/PjrFn3BH+xC7EHBJ5TtkElDzSJNgR tmjJoh68mvmWadk3MGDZHrz6ecpGt6+Ejz8Lykc28rwPUFNl8Soh0T9PN6uIsoFmG8cIaIzRrQ7i H3qm51SgA9ZA7yqfIGdtaYO9YPakEZoTZo4s80MwBV0xwNahrN4BKTeGg6hkHAdTMv6vT48bMLU6 dT4H42xMJo4NHEIrGIwiszkybuBJwIBVZMBz6KbnwxxDgiCYA2oVWIxzgLcCcwJaAz7XreGDl9UA kwcLPYVtJo94azsOofQTZOBd/459sHzXchqw3w4AwqLhGsipBeu3e3Zx1Ds+P+1u772tEEfjhakm wxFnfFDou81o7UjNK5vE0jlfgC9Hxr+o4O6adSkivT9+Q44F2uqxYbvkRBj+lYkjo2MHn2/eXaYO BHp6XG0deIR768QLAhusXcTDWERwwacBixxPhtadeUAeGiW+iaIvBSrEXSodcNE6fxxCYX9h5WIv pSFVFvspSDvMDg24G9hXLqwGVk08P0RhSryQxJrCPFH1pMh4R0y/CIwr2Od/Dti7pMslWU9ihnC5 bPvbSLqQOfLsMnUSuZV0nci+RbupNwHDGLuE8Hv/4PC8e4pItOM4edNesB0jwNLteG7zB+kb0NYP G2GGx9sX58cnB3vLN3/su3S0Dc7r/CTJjFM9jEts4Gs9NhzHM8vp+sfz/hE/52iglqCWsYlCP3Zo +StmDkJ6sq+XL3qVnYPeHrOD7Nnp1g5HkaYGTK63mAHuFVd9chtXObe7x739g9fAxrxPaw750cEc R04YnAYOYGXjrrv70PVoTz/BQwKS9egO2qPM7anPbMGJ5L4z/M6nB16pMQ6S8w9O7PjkbeTTVSMj TPMrPuhwdwZ4sX+4/fosPu6kteSR4NAruh9tn71Z3PuxuQvmots7hs3mDE0FbiBgdsBSgO8xDeAI D/ubxW7hfJh4C7d4PHO8ICQ3ANwQbk+g78CqM3bgwsEPdkjTCPCkl4LYgftLiHsT9A/AaeD+kAv+ BQyM3oE/JrcG/HWP0W5tgwcyHMaeBGxyIAdixOBkhiF+8iYhcSjZVY71aFZV9hw6JjEMGJ5zGaNL 5a0tzjoOnYEFi3sz9L0xgZK45Q02LRL1esVqIgcpWoAYhy9C8SrQMmRIMPs6OMFcyIl02LPyu7nZ r/INMksJysEcGRxrxehEQIZoExbXinetyHES0GH61gHYb1zi+D+6rEfdevjxKwS5l8f/BUHVpCj/ 0xREQaT4vyyt4/+PUeC00i2VTqcus8ClvwO75V7hqQunWy+VzrrnFyelElgDbGK7wCzHqQcjNKXR X6DP11PbB/O6Z/Vtg9tU8LvBToI5GhvuFBrdlRhLOsDhy/YZ9oLDIRzJgnpJ4gOMjQ90QjS98cSG gwhIJ3lzcXYKKL3osfPu2XmpBDYACOmwgWcFGeI7GCEJ2HQChgYODwylG857luEH0PTWLZXg+XRC XaOWeLS59fwPzDXGFtn1ANGxJzXL4BgBnOCQRWlTZjh0mqMw33RSwqFwIE6c5VjQs2iEb73yvMT6 fwScHwLLv8YYq/Rf0uL8ryqpMs//gRlY6/8jlN1d2KGvTLN0eLBzBh9rTpJiws/5VBbUwJZaKoES d0g3I70sYQqjU9p49tvu7idW89izv+Kjusme/Ya4n6gBtpxvxLPOaUPTsQwXmtX8MasNs6NgaMZi L+r464loz/dfMvn/r5L7x7JC/2XQ+1T/BQ31X4LHa/1/hPJFkv1gJjCJ37Ddomz66jQ7PNzY+Ky8 eiZBZfbLab5Jh4M1OA7gQry4xmTvfHYIfmXqr3UKa0K9MZfFmupp2glODywqK5JbW1H2BbExbpZv UYaBKlsby8P6ccqYQsJhEhG+ns2v0mkqOjstiwBTCHgmMZewKZsenuFfFJAdDuLI7M1WJgmtCO3m JdP1JBWq66xcNhwK2/JzaRyPxRgnOk+wmL7h3zE+xHt+louZRZHUJIA4inNhHIJnvapsk86DbDD1 yRlLur3PxlDFOB4Qjz91Me6JPeB5EPKu0dbGaaFsQRwrYmUgwXDvYtQ4d8hh9MmwnMaVMjGL1bSm ACsIjsmduYaCDvoywmfo/Z3UPpBWCn1Et0/AledE/iL8EvW+jtfZBK8ZhIWeI2koxM+zUQBa/+t7 C0AObwWtoE60+qY3uYu0ko29gTXDONQ6rCaVWxxeW8JM08D4UEDJFB6HgBGzQ80QOBxE3BkOyjxZ fDvCg1C57N/AEwy9lIeDXPiG7tdghLdSKW0gEalWR1ND7vLIy81ijcCITrRYQkQbmUVwDnzvLmLr 9SinzxhUWajPtCYUdeGdaKJCZR1zeVIl9v/So/2XH2PV/V9RaMb+HzSUwP+TJWXt/z1K+enHBliA Rt8IRnCum4Q18FWSQE3W6aqRBagNrBvGr2XSR3ti+UN5rdDfbYn1PxO1+uJjrNJ/OADG8V9JkJuo /4okr/X/MUpO/3+yKRbqBuAfWyb6IXC0mjB+7cNyGGq8aYUjoaBlMNcySFouAChoncBiNY4/VxOU LHPksc1eGoDlQdZBfXNthx5cYv33piFmdo3JVPriSaAV73+IopS8/yM1FYz/KpK2jv8+SqlhAeXz b+AIWU7SE6RplU6pJHaY43XYy8Pj45MdOPZUL06qh8f/6J7qFye/snE4ZU1VlZvsemAHYAc8foLA sIzFLnpvesf/6LEr35tOQEuHxtQJ2TXeOBRh4SmSgjag4XjepI9XoQWhk/+f9f3BfC31xIgTEyWt LsB/YqPFAjhbwXEY8/SOF4dp6Pqh7gxDPB9jlohNfGsIhzMrV5sgNlmnIzZEKQf3UDBV7nB79ld7 qErAvd5xbXf79PSge1rdOT3e3tvdPjuvHl0cnh/Qp5iVIvi/hZwkjh9uv+2e7t2LoRa+TsKazY5g dgatTsvsaP1OXyZuDoed/P/UpUZG1gZmZ5gLfBWJuZISsePK8fqGExnrB3KlxGXNdGy8hpmXNXMt a58rayBfZixrIHcviwVshpELJe3i5L7SpRmdodRpGR2x1TGNTkv7TOmS5qTL/BzpSpk6tFpCp6O1 iDqkwSIKW1qjGQ9EnkcIYmiEeAfxMyV5grGPsuuhACMLUYZPDnqvU8Vh5eRjhanNckupsP4dJoS9 IV2krSNUpj1BUlA7CG0zYPC0BEslJBeVQt9wg7Edgr9TZfQkvutdZcLP8c1dxwuCKsP37aCN2BoH JT8M2RgcPePmqjE2PjbG6HO9YiDPktyAn7IKP6W2iJ/FJoMe0ST5CW92mrue6+JrKxjv87jgJpPg N3uYKgli6R1jyiXDK59OuuDRc7EtSvQaDL9uDTgZPmQQDvYu2QHesILlYWk5R07A4tAfO4Y7uLUH 4Sh6eGqF8GD31h1EJDCcqlADdAFj9+CzMtYUVHa0Q8vB1LrQZK/7dhg0+EOG7ZjUlNibqAmVBA6R atISOK0ATpZbC+AQqSbn4ZTPh0OkmpKHa2bhWg+CQ6SamoVTm+0ETqlrRdSpbWUGrsYe+N/vWP38 umdpl+ptib1OWSEW0J4UvG1ofT5YvkSq6pdIqdie51r1GWPCVYzuNINLzvAC5RO1Ks2lVkUlq9IS 0Kq0WvgZrHyBVSme7xcyL81vaV4UrZ5qHJPboC8ZyVBIzBRZuK95ATglC6fl4JhKCtxU72teAE5e AsftQat5X/MCcFoKp4AaFMDBIPc0L0oTljGlDujIwkka9pbm4J6GeWGSnFv3PO2a9CDzAmC5ZZrh 6+8xL0/ZtmjLbUuTbAt5LJpAtkVdYVu+rGGRhG/qt5AtiWRCrstKdsvRmqRroire229RhCycImfh 2qKCvRXl3oYFqFOy1AlZOIWLv9paZPbm/RayJSlczkmTNbIEsrRosvN+i9yWMnBSOwunaiJNtjnr Bj0NwyLW22riagAr1BwrhLbyIMuyFO1+lqUgBLuOwH5nJY7/xpeiv8YYK/I/oqgqSf5H1Pj9X2Wd /3mUks//4L2oEF9/ots1eFOe1Sys53fbozgxz8DULLa5PHr83t1M0zf4RRyUvokTP1hBcUT6shd2 Ax/ZxMJvOQCYKAYUt8XhkyRRBBiDLUpDYR/efjpZ0A5I8ImOXKSzIBtVjO54y6EzjONBz5Rx793l wdAi1plz7DDz7DDnaTFzBJsL2WEWskOK2WEWs8O8DzsS6PXe8ATLTP5PqqtXo3/reMXe1vSbMX3r we/NB67O/2lp/o/y/5q8fv/jcco6//eVcjJJ/k/8Zvm/ttQxLMrQiB0Zfq7zf39EWRMz+T/pEfN/ zWZHGXT6Rqff6hitzqD9tPJ/sOEgdZT/IwoH7T9l/k9pt5fn/wSlEf9UpTZ9bj1G/k+RW/K3DdDX wSImERC1rhTkgZoLA1/zAfq6KqZwrXpRSkxTFoXA5wP09VaaWFLEWerE5XDzAfp6S8vCtYuoUxcl O+cD9PVWMwtXlE7U1KcZoJfkespZuT1Lu8iyZWX+bzlYvvxx8n8rrYrIbxJgFlBsa2RVVsXov2z+ D8yL8m3D9GJLSELNIhmHVDIkUaZIOJx57h2nF1tSFi8Xp5faSpvwhPsH6sVWM4uXj6xLsAkQnnzv SL3Y0rJ4OfsnNzXCk6RFePOhesxhpHhSHk9VNU7frMl6GjaGtXLMVXLmVlRV6WHBeoCTs3Bf0Mo8 ZRPTXm5iJDIxSgOFl18xkB4vDYj2RfmW9kWti5kdXck7CJJC6qFqi9StwH1pKymclIdryhxOWQQ3 Z11EuhMUS6yKm2RGAdq0yTYXGqs548JvLMXUyYXO1WK4OdsCvFOyvCu6AtQUnqj7ItVzfmYuwSoK mvogy7IU7X6WZZ0G/I5LHP9Nv+/oy4+xKv+naGoS/8V/+EXAP9b//sejlFz+D4QAVLpM77LzTQ9f 4p7YA3ol/h3bfCZu4tfsbm6yyy36gn38rr75hI85gu2v5vus3WbPRPYra8Cm3XCnjsOeQ4+i18wK mkVjv3r2Y/Eo9iQ0+g5Yndo2O744P7k4Z7X/x9f06V+SqEUvrOL39wqlDcsJrFUw+xFMaWNo4wvr +Swnd52eSTw5V4RELWom925qNhlbkdWuM47Bf9iVb01Y7QaBf/m/Z79kx4mTgrHnsnisIG5TA7Ln OBc4FowhFtIY9wP3BEldTtmDFr2Ij0XtPthA5bNEsFJqgemfMGWaRpoigcShN9PaTWo0f3Dk2dXn z1ncq47faoRd59vOYSwGoK+eEmZgOMa3Vt4vUDL2/yvd/rjP+/9yJv8n4P0PWdPW9v8xSs7+15Nr QIkq1DOeQaYy87r4H0EL1mVd1mVd1mVd1mVd/jzlv/KcPGUAeAAA --Apple-Mail=_ABD61B21-20DB-4065-BA2F-114FA48728FD Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii
--Apple-Mail=_ABD61B21-20DB-4065-BA2F-114FA48728FD-- --Apple-Mail=_60CB10D4-3C1D-442E-BFDA-30CC71AF9B13--