From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot0-x22e.google.com (mail-ot0-x22e.google.com [IPv6:2607:f8b0:4003:c0f::22e]) (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 2A5973B29E for ; Wed, 25 Jan 2017 18:47:34 -0500 (EST) Received: by mail-ot0-x22e.google.com with SMTP id 73so164469605otj.0 for ; Wed, 25 Jan 2017 15:47:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=RD9nhtQy64Kr3frYVDfMY+n2JL3TzXEVXQR8GWLEbOw=; b=ERL/pNWo6Ts2zbdwf78fWZP4zUuzka1JefPdxZnIto8toEdRhChwXXVWOYxBJyQty7 YYGyY48Da5akumLK1AbWM+DEtWX0OOvXaPMDXsqvNI2oS3QF1ktiKfxB9tNkGDdKdEfP 6Io8/qVMLeNd+S2IrWd3f5J4OwdaH571hFOYSsrjr/3nngNGSn7jtglDHf8gSwT3QHPh xpm69hblxKvWf3ZgidZIfu0+8tZeWUrNTdPEbO6ntRMaFN/UTGgwmIR2fObIudYLNlPG Syggtiyrr0Hkzq6zDKFTI+DWC/e6JxJjXMKPWC3Q5Yh1H8kSS5lp1Q478xaRbiGSLeo4 MoXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=RD9nhtQy64Kr3frYVDfMY+n2JL3TzXEVXQR8GWLEbOw=; b=UQw4/yGh6Lf2qI0LmTHLb9p41tbLLiVSwLC57DCF3o8v4OduEFsdZ1v3nplgfiumKT qcYwXuGdopjObASSfeRI0jOpQT0Daw/Hf/m3dhLXS8+3zbXxIH3qwC2BC/m7K+UaHWIj 9WV04ehlr3C1lcAbuIQiL4WNianm5C9Ju/qNVmElweXfKJTWu5R4issogIOmIBqYw6+Z B9oLfagGnZwfc10zYsHUi1ns+yOgzKHmxk96vGjVO1QYk82J2Yb/v68fvWM156WaEGy3 jc8cDyVMuOdZedHbXp2wt7oa07xjq1m2lHi+HfyF6dxeo5Q9Rvu68RJb3aRovAqTBqW3 13ag== X-Gm-Message-State: AIkVDXKXR9qG/KjXQzaD/Zd1adAh9N9NJB+V40xE7Nj64bzVR6qIYqAeQF9jaiSlq6XcqzMO5DAjgNiHSyx6+g== X-Received: by 10.157.53.42 with SMTP id o39mr22275331otc.157.1485388053540; Wed, 25 Jan 2017 15:47:33 -0800 (PST) MIME-Version: 1.0 Received: by 10.157.1.21 with HTTP; Wed, 25 Jan 2017 15:47:32 -0800 (PST) In-Reply-To: <1485387201.5145.81.camel@edumazet-glaptop3.roam.corp.google.com> References: <1485387201.5145.81.camel@edumazet-glaptop3.roam.corp.google.com> From: Hans-Kristian Bakke Date: Thu, 26 Jan 2017 00:47:32 +0100 Message-ID: To: Eric Dumazet Cc: Neal Cardwell , bloat Content-Type: multipart/alternative; boundary=001a11c00e4e48f6e20546f3db3f Subject: Re: [Bloat] Initial tests with BBR in kernel 4.9 X-BeenThere: bloat@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: General list for discussing Bufferbloat List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Jan 2017 23:47:34 -0000 --001a11c00e4e48f6e20546f3db3f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I did record the qdisc settings, but I didn't capture the stats, but throttling is definitively active when I watch the tc -s stats in realtime when testing (looking at tun1) =E2=80=8Btc -s qdisc show qdisc noqueue 0: dev lo root refcnt 2 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 qdisc fq 8007: dev eth0 root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0m= s Sent 1420855729 bytes 969198 pkt (dropped 134, overlimits 0 requeues 0) backlog 0b 0p requeues 0 124 flows (123 inactive, 0 throttled) 0 gc, 0 highprio, 3 throttled, 3925 ns latency, 134 flows_plimit qdisc fq 8008: dev tun1 root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3000 initial_quantum 15000 refill_delay 40.0m= s Sent 1031289740 bytes 741181 pkt (dropped 0, overlimits 0 requeues 0) backlog 101616b 3p requeues 0 16 flows (15 inactive, 1 throttled), next packet delay 351937 ns 0 gc, 0 highprio, 58377 throttled, 12761 ns latency =E2=80=8B On 26 January 2017 at 00:33, Eric Dumazet wrote: > > On Thu, 2017-01-26 at 00:04 +0100, Hans-Kristian Bakke wrote: > > I can do that. I guess I should do the capture from tun1 as that is > > the place that the tcp-traffic is visible? My non-virtual nic is only > > seeing OpenVPN encapsulated UDP-traffic. > > > > But is FQ installed at the point TCP sockets are ? > > You should give us "tc -s qdisc show xxx" so that we can check if > pacing (throttling) actually happens. > > > > On 25 January 2017 at 23:48, Neal Cardwell > > wrote: > > On Wed, Jan 25, 2017 at 5:38 PM, Hans-Kristian Bakke > > wrote: > > Actually.. the 1-4 mbit/s results with fq sporadically > > appears again as I keep testing but it is most likely > > caused by all the unknowns between me an my > > testserver. But still, changing to pfifo_qdisc seems > > to normalize the throughput again with BBR, could this > > be one of those times where BBR and pacing actually is > > getting hurt for playing nice in some very variable > > bottleneck on the way? > > > > > > Possibly. Would you be able to take a tcpdump trace of each > > trial (headers only would be ideal), and post on a web site > > somewhere a pcap trace for one of the slow trials? > > > > > > For example: > > > > > > tcpdump -n -w /tmp/out.pcap -s 120 -i eth0 -c 1000000 & > > > > > > > > thanks, > > neal > > > > > > > > > > On 25 January 2017 at 23:01, Neal Cardwell > > wrote: > > On Wed, Jan 25, 2017 at 3:54 PM, Hans-Kristian > > Bakke wrote: > > Hi > > > > > > Kernel 4.9 finally landed in Debian > > testing so I could finally test BBR in > > a real life environment that I have > > struggled with getting any kind of > > performance out of. > > > > > > The challenge at hand is UDP based > > OpenVPN through europe at around 35 ms > > rtt to my VPN-provider with plenty of > > available bandwith available in both > > ends and everything completely unknown > > in between. After tuning the > > UDP-buffers up to make room for my 500 > > mbit/s symmetrical bandwith at 35 ms > > the download part seemed to work > > nicely at an unreliable 150 to 300 > > mbit/s, while the upload was stuck at > > 30 to 60 mbit/s. > > > > > > Just by activating BBR the bandwith > > instantly shot up to around 150 mbit/s > > using a fat tcp test to a public > > iperf3 server located near my VPN exit > > point in the Netherlands. Replace BBR > > with qubic again and the performance > > is once again all over the place > > ranging from very bad to bad, but > > never better than 1/3 of BBRs "steady > > state". In other words "instant WIN!" > > > > > > Glad to hear it. Thanks for the test report! > > > > However, seeing the requirement of fq > > and pacing for BBR and noticing that I > > am running pfifo_fast within a VM with > > virtio NIC on a Proxmox VE host with > > fq_codel on all physical interfaces, I > > was surprised to see that it worked so > > well. > > I then replaced pfifo_fast with fq and > > the performance went right down to > > only 1-4 mbit/s from around 150 > > mbit/s. Removing the fq again regained > > the performance at once. > > > > > > I have got some questions to you guys > > that know a lot more than me about > > these things: > > 1. Do fq (and fq_codel) even work > > reliably in a VM? What is the best > > choice for default qdisc to use in a > > VM in general? > > > > > > Eric covered this one. We are not aware of > > specific issues with fq in VM environments. > > And we have tested that fq works sufficiently > > well on Google Cloud VMs. > > > > 2. Why do BBR immediately "fix" all my > > issues with upload through that > > "unreliable" big BDP link with > > pfifo_fast when fq pacing is a > > requirement? > > > > > > For BBR, pacing is part of the design in order > > to make BBR more "gentle" in terms of the rate > > at which it sends, in order to put less > > pressure on buffers and keep packet loss > > lower. This is particularly important when a > > BBR flow is restarting from idle. In this case > > BBR starts with a full cwnd, and it counts on > > pacing to pace out the packets at the > > estimated bandwidth, so that the queue can > > stay relatively short and yet the pipe can be > > filled immediately. > > > > > > Running BBR without pacing makes BBR more > > aggressive, particularly in restarting from > > idle, but also in the steady state, where BBR > > tries to use pacing to keep the queue short. > > > > > > For bulk transfer tests with one flow, running > > BBR without pacing will likely cause higher > > queues and loss rates at the bottleneck, which > > may negatively impact other traffic sharing > > that bottleneck. > > > > 3. Could fq_codel on the physical host > > be the reason that it still works? > > > > > > Nope, fq_codel does not implement pacing. > > > > 4. Do BBR _only_ work with fq pacing > > or could fq_codel be used as a > > replacement? > > > > > > Nope, BBR needs pacing to work correctly, and > > currently fq is the only Linux qdisc that > > implements pacing. > > > > 5. Is BBR perhaps modified to do the > > right thing without having to change > > the qdisc in the current kernel 4.9? > > > > > > Nope. Linux 4.9 contains the initial public > > release of BBR from September 2016. And there > > have been no code changes since then (just > > expanded comments). > > > > > > Thanks for the test report! > > > > > > neal > > > > > > > > > > > > > > > > > > _______________________________________________ > > Bloat mailing list > > Bloat@lists.bufferbloat.net > > https://lists.bufferbloat.net/listinfo/bloat > > > --001a11c00e4e48f6e20546f3db3f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFt aWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1 bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPkkgZGlkIHJlY29yZCB0 aGUgcWRpc2Mgc2V0dGluZ3MsIGJ1dCBJIGRpZG4mIzM5O3QgY2FwdHVyZSB0aGUgc3RhdHMsIGJ1 dCB0aHJvdHRsaW5nIGlzIGRlZmluaXRpdmVseSBhY3RpdmUgd2hlbiBJIHdhdGNoIHRoZSB0YyAt cyBzdGF0cyBpbiByZWFsdGltZSB3aGVuIHRlc3RpbmcgKGxvb2tpbmcgYXQgdHVuMSk8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh Ij48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxz YW5zLXNlcmlmIj7igIt0YyAtcyBxZGlzYyBzaG93PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVm YXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+cWRpc2Mgbm9xdWV1 ZSAwOiBkZXYgbG8gcm9vdCByZWZjbnQgMjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQi IHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPsKgU2VudCAwIGJ5dGVzIDAg cGt0IChkcm9wcGVkIDAsIG92ZXJsaW1pdHMgMCByZXF1ZXVlcyAwKTwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPsKg YmFja2xvZyAwYiAwcCByZXF1ZXVlcyAwPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIg c3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+cWRpc2MgZnEgODAwNzogZGV2 IGV0aDAgcm9vdCByZWZjbnQgMiBsaW1pdCAxMDAwMHAgZmxvd19saW1pdCAxMDBwIGJ1Y2tldHMg MTAyNCBvcnBoYW5fbWFzayAxMDIzIHF1YW50dW0gMzAyOCBpbml0aWFsX3F1YW50dW0gMTUxNDAg cmVmaWxsX2RlbGF5IDQwLjBtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxl PSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPsKgU2VudCAxNDIwODU1NzI5IGJ5dGVz IDk2OTE5OCBwa3QgKGRyb3BwZWQgMTM0LCBvdmVybGltaXRzIDAgcmVxdWV1ZXMgMCk8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxzYW5z LXNlcmlmIj7CoGJhY2tsb2cgMGIgMHAgcmVxdWV1ZXMgMDwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPsKgIDEyNCBm bG93cyAoMTIzIGluYWN0aXZlLCAwIHRocm90dGxlZCk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9k ZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmIj7CoCAwIGdjLCAw IGhpZ2hwcmlvLCAzIHRocm90dGxlZCwgMzkyNSBucyBsYXRlbmN5LCAxMzQgZmxvd3NfcGxpbWl0 PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRh bmEsc2Fucy1zZXJpZiI+cWRpc2MgZnEgODAwODogZGV2IHR1bjEgcm9vdCByZWZjbnQgMiBsaW1p dCAxMDAwMHAgZmxvd19saW1pdCAxMDBwIGJ1Y2tldHMgMTAyNCBvcnBoYW5fbWFzayAxMDIzIHF1 YW50dW0gMzAwMCBpbml0aWFsX3F1YW50dW0gMTUwMDAgcmVmaWxsX2RlbGF5IDQwLjBtczwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNh bnMtc2VyaWYiPsKgU2VudCAxMDMxMjg5NzQwIGJ5dGVzIDc0MTE4MSBwa3QgKGRyb3BwZWQgMCwg b3ZlcmxpbWl0cyAwIHJlcXVldWVzIDApPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIg c3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+wqBiYWNrbG9nIDEwMTYxNmIg M3AgcmVxdWV1ZXMgMDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250 LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPsKgIDE2IGZsb3dzICgxNSBpbmFjdGl2ZSwgMSB0 aHJvdHRsZWQpLCBuZXh0IHBhY2tldCBkZWxheSAzNTE5MzcgbnM8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmIj7CoCAw IGdjLCAwIGhpZ2hwcmlvLCA1ODM3NyB0aHJvdHRsZWQsIDEyNzYxIG5zIGxhdGVuY3k8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxzYW5z LXNlcmlmIj7igIs8L2Rpdj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48 ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gMjYgSmFudWFyeSAyMDE3IGF0IDAwOjMzLCBFcmlj IER1bWF6ZXQgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86ZXJpYy5kdW1hemV0 QGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmVyaWMuZHVtYXpldEBnbWFpbC5jb208L2E+Jmd0 Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9 Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwy MDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48c3BhbiBjbGFzcz0iZ21haWwtIj48YnI+DQpPbiBU aHUsIDIwMTctMDEtMjYgYXQgMDA6MDQgKzAxMDAsIEhhbnMtS3Jpc3RpYW4gQmFra2Ugd3JvdGU6 PGJyPg0KJmd0OyBJIGNhbiBkbyB0aGF0LiBJIGd1ZXNzIEkgc2hvdWxkIGRvIHRoZSBjYXB0dXJl IGZyb20gdHVuMSBhcyB0aGF0IGlzPGJyPg0KJmd0OyB0aGUgcGxhY2UgdGhhdCB0aGUgdGNwLXRy YWZmaWMgaXMgdmlzaWJsZT8gTXkgbm9uLXZpcnR1YWwgbmljIGlzIG9ubHk8YnI+DQomZ3Q7IHNl ZWluZyBPcGVuVlBOIGVuY2Fwc3VsYXRlZCBVRFAtdHJhZmZpYy48YnI+DQomZ3Q7PGJyPg0KPGJy Pg0KPC9zcGFuPkJ1dCBpcyBGUSBpbnN0YWxsZWQgYXQgdGhlIHBvaW50IFRDUCBzb2NrZXRzIGFy ZSA/PGJyPg0KPGJyPg0KWW91IHNob3VsZCBnaXZlIHVzICZxdW90O3RjIC1zIHFkaXNjIHNob3cg eHh4JnF1b3Q7wqAgc28gdGhhdCB3ZSBjYW4gY2hlY2sgaWY8YnI+DQpwYWNpbmcgKHRocm90dGxp bmcpIGFjdHVhbGx5IGhhcHBlbnMuPGJyPg0KPGRpdiBjbGFzcz0iZ21haWwtSE9FblpiIj48ZGl2 IGNsYXNzPSJnbWFpbC1oNSI+PGJyPg0KPGJyPg0KJmd0OyBPbiAyNSBKYW51YXJ5IDIwMTcgYXQg MjM6NDgsIE5lYWwgQ2FyZHdlbGwgJmx0OzxhIGhyZWY9Im1haWx0bzpuY2FyZHdlbGxAZ29vZ2xl LmNvbSI+bmNhcmR3ZWxsQGdvb2dsZS5jb208L2E+Jmd0Ozxicj4NCiZndDsgd3JvdGU6PGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgT24gV2VkLCBKYW4gMjUsIDIwMTcgYXQgNTozOCBQTSwgSGFucy1L cmlzdGlhbiBCYWtrZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCZsdDs8YSBocmVmPSJtYWlsdG86 aGtiYWtrZUBnbWFpbC5jb20iPmhrYmFra2VAZ21haWwuY29tPC9hPiZndDsgd3JvdGU6PGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQWN0dWFsbHkuLiB0aGUgMS00IG1iaXQvcyBy ZXN1bHRzIHdpdGggZnEgc3BvcmFkaWNhbGx5PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgYXBwZWFycyBhZ2FpbiBhcyBJIGtlZXAgdGVzdGluZyBidXQgaXQgaXMgbW9zdCBsaWtl bHk8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXVzZWQgYnkgYWxsIHRoZSB1 bmtub3ducyBiZXR3ZWVuIG1lIGFuIG15PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdGVzdHNlcnZlci4gQnV0IHN0aWxsLCBjaGFuZ2luZyB0byBwZmlmb19xZGlzYyBzZWVtczxi cj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRvIG5vcm1hbGl6ZSB0aGUgdGhyb3Vn aHB1dCBhZ2FpbiB3aXRoIEJCUiwgY291bGQgdGhpczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGJlIG9uZSBvZiB0aG9zZSB0aW1lcyB3aGVyZSBCQlIgYW5kIHBhY2luZyBhY3R1 YWxseSBpczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdldHRpbmcgaHVydCBm b3IgcGxheWluZyBuaWNlIGluIHNvbWUgdmVyeSB2YXJpYWJsZTxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGJvdHRsZW5lY2sgb24gdGhlIHdheT88YnI+DQomZ3Q7PGJyPg0KJmd0 Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoFBvc3NpYmx5LiBXb3VsZCB5b3UgYmUgYWJsZSB0byB0 YWtlIGEgdGNwZHVtcCB0cmFjZSBvZiBlYWNoPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgdHJpYWwg KGhlYWRlcnMgb25seSB3b3VsZCBiZSBpZGVhbCksIGFuZCBwb3N0IG9uIGEgd2ViIHNpdGU8YnI+ DQomZ3Q7wqAgwqAgwqAgwqAgwqBzb21ld2hlcmUgYSBwY2FwIHRyYWNlIGZvciBvbmUgb2YgdGhl IHNsb3cgdHJpYWxzPzxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg Rm9yIGV4YW1wbGU6PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgdGNwZHVtcCAtbiAtdyAvdG1wL291dC5wY2FwIC1zIDEyMCAtaSBldGgwIC1jIDEwMDAwMDAg JmFtcDs8YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAg wqB0aGFua3MsPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgbmVhbDxicj4NCiZndDs8YnI+DQomZ3Q7 PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBP biAyNSBKYW51YXJ5IDIwMTcgYXQgMjM6MDEsIE5lYWwgQ2FyZHdlbGw8YnI+DQomZ3Q7wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAmbHQ7PGEgaHJlZj0ibWFpbHRvOm5jYXJkd2VsbEBnb29nbGUu Y29tIj5uY2FyZHdlbGxAZ29vZ2xlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoE9uIFdlZCwgSmFuIDI1LCAyMDE3IGF0IDM6 NTQgUE0sIEhhbnMtS3Jpc3RpYW48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBCYWtrZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOmhrYmFra2VAZ21haWwuY29tIj5o a2Jha2tlQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEhpPGJyPg0KJmd0Ozxicj4NCiZndDs8 YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBLZXJuZWwgNC45IGZpbmFsbHkgbGFuZGVkIGluIERlYmlhbjxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRlc3Rpbmcgc28gSSBjb3Vs ZCBmaW5hbGx5IHRlc3QgQkJSIGluPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYSByZWFsIGxpZmUgZW52aXJvbm1lbnQgdGhhdCBJIGhh dmU8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBzdHJ1Z2dsZWQgd2l0aCBnZXR0aW5nIGFueSBraW5kIG9mPGJyPg0KJmd0O8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcGVyZm9ybWFuY2Ugb3V0 IG9mLjxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVGhlIGNoYWxsZW5nZSBhdCBoYW5kIGlzIFVEUCBi YXNlZDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoE9wZW5WUE4gdGhyb3VnaCBldXJvcGUgYXQgYXJvdW5kIDM1IG1zPGJyPg0KJmd0O8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcnR0IHRvIG15 IFZQTi1wcm92aWRlciB3aXRoIHBsZW50eSBvZjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGF2YWlsYWJsZSBiYW5kd2l0aCBhdmFpbGFi bGUgaW4gYm90aDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGVuZHMgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSB1bmtub3duPGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW4g YmV0d2Vlbi4gQWZ0ZXIgdHVuaW5nIHRoZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFVEUC1idWZmZXJzIHVwIHRvIG1ha2Ugcm9vbSBm b3IgbXkgNTAwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgbWJpdC9zIHN5bW1ldHJpY2FsIGJhbmR3aXRoIGF0IDM1IG1zPGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGhlIGRv d25sb2FkIHBhcnQgc2VlbWVkIHRvIHdvcms8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBuaWNlbHkgYXQgYW4gdW5yZWxpYWJsZSAxNTAg dG8gMzAwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgbWJpdC9zLCB3aGlsZSB0aGUgdXBsb2FkIHdhcyBzdHVjayBhdDxicj4NCiZndDvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDMwIHRvIDYw IG1iaXQvcy48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEp1c3QgYnkgYWN0aXZhdGluZyBCQlIgdGhl IGJhbmR3aXRoPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaW5zdGFudGx5IHNob3QgdXAgdG8gYXJvdW5kIDE1MCBtYml0L3M8YnI+DQom Z3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB1c2lu ZyBhIGZhdCB0Y3AgdGVzdCB0byBhIHB1YmxpYzxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlwZXJmMyBzZXJ2ZXIgbG9jYXRlZCBuZWFy IG15IFZQTiBleGl0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcG9pbnQgaW4gdGhlIE5ldGhlcmxhbmRzLiBSZXBsYWNlIEJCUjxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdp dGggcXViaWMgYWdhaW4gYW5kIHRoZSBwZXJmb3JtYW5jZTxicj4NCiZndDvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlzIG9uY2UgYWdhaW4gYWxsIG92 ZXIgdGhlIHBsYWNlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmFuZ2luZyBmcm9tIHZlcnkgYmFkIHRvIGJhZCwgYnV0PGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbmV2ZXIg YmV0dGVyIHRoYW4gMS8zIG9mIEJCUnMgJnF1b3Q7c3RlYWR5PGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RhdGUmcXVvdDsuIEluIG90 aGVyIHdvcmRzICZxdW90O2luc3RhbnQgV0lOISZxdW90Ozxicj4NCiZndDs8YnI+DQomZ3Q7PGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgR2xhZCB0byBoZWFy IGl0LiBUaGFua3MgZm9yIHRoZSB0ZXN0IHJlcG9ydCE8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSG93ZXZlciwgc2Vl aW5nIHRoZSByZXF1aXJlbWVudCBvZiBmcTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFuZCBwYWNpbmcgZm9yIEJCUiBhbmQgbm90aWNp bmcgdGhhdCBJPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgYW0gcnVubmluZyBwZmlmb19mYXN0IHdpdGhpbiBhIFZNIHdpdGg8YnI+DQom Z3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB2aXJ0 aW8gTklDIG9uIGEgUHJveG1veCBWRSBob3N0IHdpdGg8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmcV9jb2RlbCBvbiBhbGwgcGh5c2lj YWwgaW50ZXJmYWNlcywgSTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHdhcyBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgaXQgd29ya2VkIHNv PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgd2VsbC48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBJIHRoZW4gcmVwbGFjZWQgcGZpZm9fZmFzdCB3aXRoIGZxIGFuZDxicj4NCiZn dDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRoZSBw ZXJmb3JtYW5jZSB3ZW50IHJpZ2h0IGRvd24gdG88YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBvbmx5IDEtNCBtYml0L3MgZnJvbSBhcm91 bmQgMTUwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgbWJpdC9zLiBSZW1vdmluZyB0aGUgZnEgYWdhaW4gcmVnYWluZWQ8YnI+DQomZ3Q7 wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0aGUgcGVy Zm9ybWFuY2UgYXQgb25jZS48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEkgaGF2ZSBnb3Qgc29tZSBx dWVzdGlvbnMgdG8geW91IGd1eXM8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0aGF0IGtub3cgYSBsb3QgbW9yZSB0aGFuIG1lIGFib3V0 PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdGhlc2UgdGhpbmdzOjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoDEuIERvIGZxIChhbmQgZnFfY29kZWwpIGV2ZW4gd29yazxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJl bGlhYmx5IGluIGEgVk0/IFdoYXQgaXMgdGhlIGJlc3Q8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjaG9pY2UgZm9yIGRlZmF1bHQgcWRp c2MgdG8gdXNlIGluIGE8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBWTSBpbiBnZW5lcmFsPzxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgRXJpYyBjb3ZlcmVkIHRo aXMgb25lLiBXZSBhcmUgbm90IGF3YXJlIG9mPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc3BlY2lmaWMgaXNzdWVzIHdpdGggZnEgaW4gVk0gZW52aXJvbm1l bnRzLjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEFuZMKg IHdlIGhhdmUgdGVzdGVkIHRoYXQgZnEgd29ya3Mgc3VmZmljaWVudGx5PGJyPg0KJmd0O8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd2VsbCBvbiBHb29nbGUgQ2xvdWQgVk1z Ljxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAyLiBXaHkgZG8gQkJSIGltbWVkaWF0ZWx5ICZxdW90O2ZpeCZxdW90OyBh bGwgbXk8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBpc3N1ZXMgd2l0aCB1cGxvYWQgdGhyb3VnaCB0aGF0PGJyPg0KJmd0O8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJnF1b3Q7dW5yZWxpYWJs ZSZxdW90OyBiaWcgQkRQIGxpbmsgd2l0aDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBmaWZvX2Zhc3Qgd2hlbiBmcSBwYWNpbmcgaXMg YTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJlcXVpcmVtZW50Pzxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgRm9yIEJCUiwgcGFjaW5nIGlzIHBhcnQgb2YgdGhl IGRlc2lnbiBpbiBvcmRlcjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHRvIG1ha2UgQkJSIG1vcmUgJnF1b3Q7Z2VudGxlJnF1b3Q7IGluIHRlcm1zIG9mIHRo ZSByYXRlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYXQg d2hpY2ggaXQgc2VuZHMsIGluIG9yZGVyIHRvIHB1dCBsZXNzPGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcHJlc3N1cmUgb24gYnVmZmVycyBhbmQga2VlcCBw YWNrZXQgbG9zczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGxvd2VyLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBhPGJyPg0KJmd0O8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQkJSIGZsb3cgaXMgcmVzdGFydGlu ZyBmcm9tIGlkbGUuIEluIHRoaXMgY2FzZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoEJCUiBzdGFydHMgd2l0aCBhIGZ1bGwgY3duZCwgYW5kIGl0IGNvdW50 cyBvbjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBhY2lu ZyB0byBwYWNlIG91dCB0aGUgcGFja2V0cyBhdCB0aGU8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBlc3RpbWF0ZWQgYmFuZHdpZHRoLCBzbyB0aGF0IHRoZSBx dWV1ZSBjYW48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBz dGF5IHJlbGF0aXZlbHkgc2hvcnQgYW5kIHlldCB0aGUgcGlwZSBjYW4gYmU8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmaWxsZWQgaW1tZWRpYXRlbHkuPGJy Pg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBSdW5uaW5nIEJCUiB3aXRob3V0IHBhY2luZyBtYWtlcyBCQlIgbW9yZTxicj4NCiZn dDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFnZ3Jlc3NpdmUsIHBhcnRp Y3VsYXJseSBpbiByZXN0YXJ0aW5nIGZyb208YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBpZGxlLCBidXQgYWxzbyBpbiB0aGUgc3RlYWR5IHN0YXRlLCB3aGVy ZSBCQlI8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0cmll cyB0byB1c2UgcGFjaW5nIHRvIGtlZXAgdGhlIHF1ZXVlIHNob3J0Ljxicj4NCiZndDs8YnI+DQom Z3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgRm9yIGJ1 bGsgdHJhbnNmZXIgdGVzdHMgd2l0aCBvbmUgZmxvdywgcnVubmluZzxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJCUiB3aXRob3V0IHBhY2luZyB3aWxsIGxp a2VseSBjYXVzZSBoaWdoZXI8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBxdWV1ZXMgYW5kIGxvc3MgcmF0ZXMgYXQgdGhlIGJvdHRsZW5lY2ssIHdoaWNoPGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWF5IG5lZ2F0aXZl bHkgaW1wYWN0IG90aGVyIHRyYWZmaWMgc2hhcmluZzxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRoYXQgYm90dGxlbmVjay48YnI+DQomZ3Q7PGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMy4gQ291 bGQgZnFfY29kZWwgb24gdGhlIHBoeXNpY2FsIGhvc3Q8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiZSB0aGUgcmVhc29uIHRoYXQgaXQg c3RpbGwgd29ya3M/PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBOb3BlLCBmcV9jb2RlbCBkb2VzIG5vdCBpbXBsZW1lbnQg cGFjaW5nLjxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqA0LiBEbyBCQlIgX29ubHlfIHdvcmsgd2l0aCBmcSBwYWNpbmc8 YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBvciBjb3VsZCBmcV9jb2RlbCBiZSB1c2VkIGFzIGE8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXBsYWNlbWVudD88YnI+DQomZ3Q7 PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oE5vcGUsIEJCUiBuZWVkcyBwYWNpbmcgdG8gd29yayBjb3JyZWN0bHksIGFuZDxicj4NCiZndDvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cnJlbnRseSBmcSBpcyB0aGUg b25seSBMaW51eCBxZGlzYyB0aGF0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaW1wbGVtZW50cyBwYWNpbmcuPGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDUuIElzIEJCUiBwZXJo YXBzIG1vZGlmaWVkIHRvIGRvIHRoZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJpZ2h0IHRoaW5nIHdpdGhvdXQgaGF2aW5nIHRvIGNo YW5nZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHRoZSBxZGlzYyBpbiB0aGUgY3VycmVudCBrZXJuZWwgNC45Pzxicj4NCiZndDs8YnI+ DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgTm9w ZS4gTGludXggNC45IGNvbnRhaW5zIHRoZSBpbml0aWFsIHB1YmxpYzxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJlbGVhc2Ugb2YgQkJSIGZyb20gU2VwdGVt YmVyIDIwMTYuIEFuZCB0aGVyZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGhhdmUgYmVlbiBubyBjb2RlIGNoYW5nZXMgc2luY2UgdGhlbiAoanVzdDxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGV4cGFuZGVkIGNvbW1l bnRzKS48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoFRoYW5rcyBmb3IgdGhlIHRlc3QgcmVwb3J0ITxicj4NCiZndDs8YnI+ DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbmVh bDxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0K Jmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21h aWwtSE9FblpiIj48ZGl2IGNsYXNzPSJnbWFpbC1oNSI+Jmd0OyBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX188d2JyPl9fX19fX19fX19fX19fX19fPGJyPg0KJmd0OyBCbG9hdCBtYWlsaW5n IGxpc3Q8YnI+DQomZ3Q7IDxhIGhyZWY9Im1haWx0bzpCbG9hdEBsaXN0cy5idWZmZXJibG9hdC5u ZXQiPkJsb2F0QGxpc3RzLmJ1ZmZlcmJsb2F0Lm5ldDwvYT48YnI+DQomZ3Q7IDxhIGhyZWY9Imh0 dHBzOi8vbGlzdHMuYnVmZmVyYmxvYXQubmV0L2xpc3RpbmZvL2Jsb2F0IiByZWw9Im5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xpc3RzLmJ1ZmZlcmJsb2F0Lm5ldC88d2JyPmxp c3RpbmZvL2Jsb2F0PC9hPjxicj4NCjxicj4NCjxicj4NCjwvZGl2PjwvZGl2PjwvYmxvY2txdW90 ZT48L2Rpdj48YnI+PC9kaXY+PC9kaXY+DQo= --001a11c00e4e48f6e20546f3db3f--