Date: Wed, 18 Dec 2024 14:49:17 -0700 From: Warner Losh <imp@bsdimp.com> To: mike tancsa <mike@sentex.net> Cc: freebsd-fs <freebsd-fs@freebsd.org> Subject: Re: TRIM question and zfs Message-ID: <CANCZdfrGKcjOWKoqH39A2UvvRD1D_gt6zdb8EYkJLJBxv6SVxA@mail.gmail.com> In-Reply-To: <25c5d434-2ea1-4315-8722-342a469abb83@sentex.net> References: <25c5d434-2ea1-4315-8722-342a469abb83@sentex.net>
next in thread | previous in thread | raw e-mail | index | archive | help
--00000000000050e5d006299263d1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Dec 18, 2024 at 1:26=E2=80=AFPM mike tancsa <mike@sentex.net> wrote= : > TL;DR does zpool trim <poolname> actually work as well as one expects / > needs ? > I'd expect it to trim the unused part of the drive(s), but that may or may not help in high wear situations. I had a very old server that was running as RELENG_12 for many years on > some SSDs which were now getting to EOL with 6yrs of work on them-- Wear > level showed it getting low for sure. I had migrated everything live > off the box, but for some reason, trying to do a zfs send on a volume > was REALLY slow. I am talking KB/s slow. It took a long time, but it > eventually got done. As there was nothing on this server in production, > I thought it a good exercise to try and upgrade it in the field. So > buildworld to 13 and then 14. I deleted some of the old unneeded files > and got down to just the zfs volume that was left on the pool so just > under 200G. I then did a zpool trim tank1, but didnt see any improved > performance at all. Still crazy slow. So I then did > > gpart backup <disk> > /tmp/disk-part.txt > > zpool offline tank1 <disk>p1 > trim -f /dev/<disk> > cat /tmp/disk-part.txt | gpart restore <disk> > zpool online tank1 <disk>p1 > zpool replace tank1 <disk>p1 <disk>p1 > > for all 3 <disk>s in the pool one by one. > > The first resilver took 13hrs, the second 8 or so and the last 13min. > After the final resilver was done, I could do a zfs send of the volume > pretty well at full speed with zpool iostat 1 showing close to a GB/s > reads. > > I know that zfs autotrim and trim just kinda keeps track of what can and > cant be deleted. But I would have thought the zpool trim would have > had some impact ? > It all depends on the drive history. Mostly TRIMing a drive is useful for reducing write amplification. Done frequently, this gives the drive's firmware more options when it needs to do the housekeeping it does to have blocks available to write. The increased choice lets it make better decisions and reduce the extra writes it has to do to keep the data fresh and provide free blocks for future writes. Sometimes, you may get lucky and this trimming will kick off the right sort of housekeeping and result in lots of free blocks being added to the pool it keeps internally so writes are faster. But you are seeing really poor read performance. That's usually caused by data that's ending the end of its useful life in the current blocks that it occupies which triggers transparent data recovery, but at such a high level it can no longer be "line speed" of the device, but is happening at softwar= e speeds, which can be quite a bit slower. By basically wiping and rewriting the drives with the resilvers, you've refreshed all the data so now none of it takes a long time to read. Not sure what 'old data' is on the drives, bu= t that would also explain the faster resilver times too. > Questions: > > Does this mean that prior to deploying SSDs for use in a zfs pool, you > should do a full trim -f of the disk ? > Yes. Apart from offlining and doing a trim, resilver etc, is there a better > way to get back performance ? Or with a once a week trim prior to > scrub, will it be "good enough" ? > Weekly should suffice. However, if the problem is due to 'old data' decaying and the drive's reliability software not moving it aggressively enough to preserve performance, all the trims in the world won't help. It could be that the drives are too busy (though the aggregate numbers from smart aren't suggestive of that). The current temperature is good, but if the drives baked for a while for some reason, that could explain the degraded performance. > Is there a way to tell if a disk REALLY needs to be fully trimmed other > than approximating for slowing performance ? > You might be able to look at the current wear vs the promised lifetime of the drive. 6 years is out of warranty for sure, so it may just be they are too worn for anything needing any level of performance. But usually it's performance. And even then, there's no silver bullet. > I know these disks were super old, so maybe current SSDs dont have this > issue ? Last few years I have switched to Samsung EVOs and they dont > seem to have these problems, at least not yet in any obvious way. Not > sure why this particularly showed up in the zfs volume set, and other > normal datasets performed ok. > Yea. from the smart info, it looks like you've worn them out 1/3. You've written about 112TB to the drive based on 80TB of write traffic (if I'm doing the math right). This is a fairly good number.. There's not any real link errors to speak of (which is another way you can be slow)., nor have you been thermal throttling. So you've done 80 drive writes over 6 years (or 0.03 DWPD). This is well below ratings for most TLC drives of 0.37 DWPD in the datasheet (but that's only for 3 years). The drive should be good for about 400 drive writes total, and you are at 1/5 of that. But the wear indicators are closer to 1/3 (approximately 2x what the absolute wear values would indicate). The write amp is relatively low, suggesting that trimming wouldn't help all that much, though. It's at 1.4, which would bump total bytes written into the 1/3 lifetime range. Plus TLC writes tend to be quite a bit harder on the drive than SLC writes, so that makes the 1/3 wear numbers kinda make sense. None of these raw numbers suggests a good root-cause for the slowness, which is in line with 'bad data from the nand taking a while to recover'. It all has to do with the drive's write / power-on / temperature / etc history, an= d many key details of that are simply unobtanium though some hints at them are in the SMART data. Not enough for be to be sure, though why your drives degraded. Warner > ---Mike > > > disk > > smartctl 7.4 2023-08-01 r5530 [FreeBSD 14.2-STABLE amd64] (local build) > Copyright (C) 2002-23, Bruce Allen, Christian Franke, > www.smartmontools.org > > =3D=3D=3D START OF INFORMATION SECTION =3D=3D=3D > Model Family: WD Blue / Red / Green SSDs > Device Model: WDC WDS100T2B0A-00SM50 > Serial Number: 191011A00A72 > LU WWN Device Id: 5 001b44 8b89825ed > Firmware Version: 401000WD > User Capacity: 1,000,204,886,016 bytes [1.00 TB] > Sector Size: 512 bytes logical/physical > Rotation Rate: Solid State Device > Form Factor: 2.5 inches > TRIM Command: Available, deterministic, zeroed > Device is: In smartctl database 7.3/5528 > ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5 > SATA Version is: SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s) > Local Time is: Wed Dec 18 15:23:10 2024 EST > SMART support is: Available - device has SMART capability. > SMART support is: Enabled > AAM feature is: Unavailable > APM level is: 128 (minimum power consumption without standby) > Rd look-ahead is: Enabled > Write cache is: Enabled > DSN feature is: Unavailable > ATA Security is: Disabled, NOT FROZEN [SEC1] > Wt Cache Reorder: Unavailable > > =3D=3D=3D START OF READ SMART DATA SECTION =3D=3D=3D > SMART overall-health self-assessment test result: PASSED > > General SMART Values: > Offline data collection status: (0x00) Offline data collection activity > was never started. > Auto Offline Data Collection: > Disabled. > Self-test execution status: ( 0) The previous self-test routine > completed > without error or no self-test > has ever > been run. > Total time to complete Offline > data collection: ( 0) seconds. > Offline data collection > capabilities: (0x11) SMART execute Offline immediate. > No Auto Offline data collection > support. > Suspend Offline collection upon > new > command. > No Offline surface scan supporte= d. > Self-test supported. > No Conveyance Self-test supporte= d. > No Selective Self-test supported= . > SMART capabilities: (0x0003) Saves SMART data before entering > power-saving mode. > Supports SMART auto save timer. > Error logging capability: (0x01) Error logging supported. > General Purpose Logging supporte= d. > Short self-test routine > recommended polling time: ( 2) minutes. > Extended self-test routine > recommended polling time: ( 10) minutes. > > SMART Attributes Data Structure revision number: 4 > Vendor Specific SMART Attributes with Thresholds: > ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE > 5 Reallocated_Sector_Ct -O--CK 100 100 --- - 0 > 9 Power_On_Hours -O--CK 100 100 --- - 47271 > 12 Power_Cycle_Count -O--CK 100 100 --- - 33 > 165 Block_Erase_Count -O--CK 100 100 --- - 906509291245 > 166 Minimum_PE_Cycles_TLC -O--CK 100 100 --- - 1 > 167 Max_Bad_Blocks_per_Die -O--CK 100 100 --- - 34 > 168 Maximum_PE_Cycles_TLC -O--CK 100 100 --- - 33 > 169 Total_Bad_Blocks -O--CK 100 100 --- - 534 > 170 Grown_Bad_Blocks -O--CK 100 100 --- - 0 > 171 Program_Fail_Count -O--CK 100 100 --- - 0 > 172 Erase_Fail_Count -O--CK 100 100 --- - 0 > 173 Average_PE_Cycles_TLC -O--CK 100 100 --- - 12 > 174 Unexpected_Power_Loss -O--CK 100 100 --- - 19 > 184 End-to-End_Error -O--CK 100 100 --- - 0 > 187 Reported_Uncorrect -O--CK 100 100 --- - 0 > 188 Command_Timeout -O--CK 100 100 --- - 0 > 194 Temperature_Celsius -O---K 075 044 --- - 25 (Min/Max > 22/44) > 199 UDMA_CRC_Error_Count -O--CK 100 100 --- - 0 > 230 Media_Wearout_Indicator -O--CK 007 007 --- - 0x074001140740 > 232 Available_Reservd_Space PO--CK 100 100 004 - 100 > 233 NAND_GB_Written_TLC -O--CK 100 100 --- - 12346 > 234 NAND_GB_Written_SLC -O--CK 100 100 --- - 90919 > 241 Host_Writes_GiB ----CK 253 253 --- - 80762 > 242 Host_Reads_GiB ----CK 253 253 --- - 19908 > 244 Temp_Throttle_Status -O--CK 000 100 --- - 0 > ||||||_ K auto-keep > |||||__ C event count > ||||___ R error rate > |||____ S speed/performance > ||_____ O updated online > |______ P prefailure warning > > General Purpose Log Directory Version 1 > SMART Log Directory Version 1 [multi-sector log support] > Address Access R/W Size Description > 0x00 GPL,SL R/O 1 Log Directory > 0x01 SL R/O 1 Summary SMART error log > 0x02 SL R/O 2 Comprehensive SMART error log > 0x03 GPL R/O 1 Ext. Comprehensive SMART error log > 0x04 GPL,SL R/O 8 Device Statistics log > 0x06 SL R/O 1 SMART self-test log > 0x07 GPL R/O 1 Extended self-test log > 0x10 GPL R/O 1 NCQ Command Error log > 0x11 GPL R/O 1 SATA Phy Event Counters log > 0x24 GPL R/O 2261 Current Device Internal Status Data log > 0x25 GPL R/O 2261 Saved Device Internal Status Data log > 0x30 GPL,SL R/O 9 IDENTIFY DEVICE data log > 0x80-0x9f GPL,SL R/W 16 Host vendor specific log > 0xde GPL VS 8 Device vendor specific log > > SMART Extended Comprehensive Error Log Version: 1 (1 sectors) > No Errors Logged > > SMART Extended Self-test Log Version: 1 (1 sectors) > No self-tests have been logged. [To run self-tests, use: smartctl -t] > > Selective Self-tests/Logging not supported > > SCT Commands not supported > > Device Statistics (GP Log 0x04) > Page Offset Size Value Flags Description > 0x01 =3D=3D=3D=3D=3D =3D =3D =3D=3D=3D =3D=3D General S= tatistics (rev 1) =3D=3D > 0x01 0x008 4 33 --- Lifetime Power-On Resets > 0x01 0x010 4 47271 --- Power-on Hours > 0x01 0x018 6 169371253578 --- Logical Sectors Written > 0x01 0x020 6 2639812949 --- Number of Write Commands > 0x01 0x028 6 41752136282 --- Logical Sectors Read > 0x01 0x030 6 89429189 --- Number of Read Commands > 0x07 =3D=3D=3D=3D=3D =3D =3D =3D=3D=3D =3D=3D Solid Sta= te Device Statistics > (rev 1) =3D=3D > 0x07 0x008 1 1 N-- Percentage Used Endurance Indicator > |||_ C monitored condition met > ||__ D supports DSN > |___ N normalized value > > Pending Defects log (GP Log 0x0c) not supported > > SATA Phy Event Counters (GP Log 0x11) > ID Size Value Description > 0x0001 4 0 Command failed due to ICRC error > 0x0002 4 0 R_ERR response for data FIS > 0x0005 4 0 R_ERR response for non-data FIS > 0x000a 4 7 Device-to-host register FISes sent due to a > COMRESET > > --00000000000050e5d006299263d1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJn bWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWluZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJn bWFpbF9hdHRyIj5PbiBXZWQsIERlYyAxOCwgMjAyNCBhdCAxOjI24oCvUE0gbWlrZSB0YW5jc2Eg Jmx0OzxhIGhyZWY9Im1haWx0bzptaWtlQHNlbnRleC5uZXQiPm1pa2VAc2VudGV4Lm5ldDwvYT4m Z3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxl PSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQs MjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+VEw7RFLCoCBkb2VzIHpwb29sIHRyaW0gJmx0O3Bv b2xuYW1lJmd0OyBhY3R1YWxseSB3b3JrIGFzIHdlbGwgYXMgb25lIGV4cGVjdHMgLyA8YnI+DQpu ZWVkcyA/PGJyPjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PkkmIzM5O2QgZXhwZWN0 IGl0IHRvIHRyaW0gdGhlIHVudXNlZCBwYXJ0IG9mIHRoZSBkcml2ZShzKSwgYnV0IHRoYXQgbWF5 IG9yIG1heSBub3Q8L2Rpdj48ZGl2PmhlbHAgaW4gaGlnaCB3ZWFyIHNpdHVhdGlvbnMuPC9kaXY+ PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy Z2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwy MDQpO3BhZGRpbmctbGVmdDoxZXgiPkkgaGFkIGEgdmVyeSBvbGQgc2VydmVyIHRoYXQgd2FzIHJ1 bm5pbmcgYXMgUkVMRU5HXzEyIGZvciBtYW55IHllYXJzIG9uIDxicj4NCnNvbWUgU1NEcyB3aGlj aCB3ZXJlIG5vdyBnZXR0aW5nIHRvIEVPTCB3aXRoIDZ5cnMgb2Ygd29yayBvbiB0aGVtLS0gV2Vh ciA8YnI+DQpsZXZlbCBzaG93ZWQgaXQgZ2V0dGluZyBsb3fCoCBmb3Igc3VyZS7CoCBJIGhhZCBt aWdyYXRlZCBldmVyeXRoaW5nIGxpdmUgPGJyPg0Kb2ZmIHRoZSBib3gsIGJ1dCBmb3Igc29tZSBy ZWFzb24sIHRyeWluZyB0byBkbyBhIHpmcyBzZW5kIG9uIGEgdm9sdW1lIDxicj4NCndhcyBSRUFM TFkgc2xvdy4gSSBhbSB0YWxraW5nIEtCL3Mgc2xvdy7CoCBJdCB0b29rIGEgbG9uZyB0aW1lLCBi dXQgaXQgPGJyPg0KZXZlbnR1YWxseSBnb3QgZG9uZS7CoCBBcyB0aGVyZSB3YXMgbm90aGluZyBv biB0aGlzIHNlcnZlciBpbiBwcm9kdWN0aW9uLCA8YnI+DQpJIHRob3VnaHQgaXQgYSBnb29kIGV4 ZXJjaXNlIHRvIHRyeSBhbmQgdXBncmFkZSBpdCBpbiB0aGUgZmllbGQuIFNvIDxicj4NCmJ1aWxk d29ybGQgdG8gMTMgYW5kIHRoZW4gMTQuwqAgSSBkZWxldGVkIHNvbWUgb2YgdGhlIG9sZCB1bm5l ZWRlZCBmaWxlcyA8YnI+DQphbmQgZ290IGRvd24gdG8ganVzdCB0aGUgemZzIHZvbHVtZSB0aGF0 IHdhcyBsZWZ0IG9uIHRoZSBwb29sIHNvIGp1c3QgPGJyPg0KdW5kZXIgMjAwRy4gSSB0aGVuIGRp ZCBhIHpwb29sIHRyaW0gdGFuazEsIGJ1dCBkaWRudCBzZWUgYW55IGltcHJvdmVkIDxicj4NCnBl cmZvcm1hbmNlIGF0IGFsbC4gU3RpbGwgY3Jhenkgc2xvdy4gU28gSSB0aGVuIGRpZDxicj4NCjxi cj4NCmdwYXJ0IGJhY2t1cCAmbHQ7ZGlzayZndDsgJmd0OyAvdG1wL2Rpc2stcGFydC50eHQ8YnI+ DQo8YnI+DQp6cG9vbCBvZmZsaW5lIHRhbmsxICZsdDtkaXNrJmd0O3AxPGJyPg0KdHJpbSAtZiAv ZGV2LyZsdDtkaXNrJmd0Ozxicj4NCmNhdCAvdG1wL2Rpc2stcGFydC50eHQgfCBncGFydCByZXN0 b3JlICZsdDtkaXNrJmd0Ozxicj4NCnpwb29sIG9ubGluZSB0YW5rMSAmbHQ7ZGlzayZndDtwMTxi cj4NCnpwb29sIHJlcGxhY2UgdGFuazEgJmx0O2Rpc2smZ3Q7cDEgJmx0O2Rpc2smZ3Q7cDE8YnI+ DQo8YnI+DQpmb3IgYWxsIDMgJmx0O2Rpc2smZ3Q7cyBpbiB0aGUgcG9vbCBvbmUgYnkgb25lLjxi cj4NCjxicj4NClRoZSBmaXJzdCByZXNpbHZlciB0b29rIDEzaHJzLCB0aGUgc2Vjb25kIDggb3Ig c28gYW5kIHRoZSBsYXN0IDEzbWluLiA8YnI+DQpBZnRlciB0aGUgZmluYWwgcmVzaWx2ZXIgd2Fz IGRvbmUsIEkgY291bGQgZG8gYSB6ZnMgc2VuZCBvZiB0aGUgdm9sdW1lIDxicj4NCnByZXR0eSB3 ZWxsIGF0IGZ1bGwgc3BlZWQgd2l0aCB6cG9vbCBpb3N0YXQgMSBzaG93aW5nIGNsb3NlIHRvIGEg R0IvcyByZWFkcy48YnI+DQo8YnI+DQpJIGtub3cgdGhhdCB6ZnMgYXV0b3RyaW0gYW5kIHRyaW0g anVzdCBraW5kYSBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbiBhbmQgPGJyPg0KY2FudCBiZSBkZWxl dGVkLsKgIEJ1dCBJIHdvdWxkIGhhdmUgdGhvdWdodCB0aGXCoCB6cG9vbCB0cmltIHdvdWxkIGhh dmUgPGJyPg0KaGFkIHNvbWUgaW1wYWN0ID88YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2 PjxkaXY+SXQgYWxsIGRlcGVuZHMgb24gdGhlIGRyaXZlIGhpc3RvcnkuIE1vc3RseSBUUklNaW5n IGEgZHJpdmUgaXMgdXNlZnVsPC9kaXY+PGRpdj5mb3IgcmVkdWNpbmcgd3JpdGUgYW1wbGlmaWNh dGlvbi4gRG9uZSBmcmVxdWVudGx5LCB0aGlzIGdpdmVzIHRoZSBkcml2ZSYjMzk7czwvZGl2Pjxk aXY+ZmlybXdhcmUgbW9yZSBvcHRpb25zIHdoZW4gaXQgbmVlZHMgdG8gZG8gdGhlIGhvdXNla2Vl cGluZyBpdCBkb2VzPC9kaXY+PGRpdj50byBoYXZlIGJsb2NrcyBhdmFpbGFibGUgdG8gd3JpdGUu IFRoZSBpbmNyZWFzZWQgY2hvaWNlIGxldHMgaXQgbWFrZTwvZGl2PjxkaXY+YmV0dGVyIGRlY2lz aW9ucyBhbmQgcmVkdWNlIHRoZSBleHRyYSB3cml0ZXMgaXQgaGFzIHRvIGRvIHRvIGtlZXAgdGhl PC9kaXY+PGRpdj5kYXRhIGZyZXNoIGFuZCBwcm92aWRlIGZyZWUgYmxvY2tzIGZvciBmdXR1cmUg d3JpdGVzLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+U29tZXRpbWVzLCB5b3UgbWF5IGdldCBs dWNreSBhbmQgdGhpcyB0cmltbWluZyB3aWxsIGtpY2sgb2ZmIHRoZSByaWdodDwvZGl2PjxkaXY+ c29ydCBvZiBob3VzZWtlZXBpbmcgYW5kIHJlc3VsdCBpbiBsb3RzIG9mIGZyZWUgYmxvY2tzIGJl aW5nIGFkZGVkIHRvPC9kaXY+PGRpdj50aGUgcG9vbCBpdCBrZWVwcyBpbnRlcm5hbGx5IHNvIHdy aXRlcyBhcmUgZmFzdGVyLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QnV0IHlvdSBhcmUgc2Vl aW5nIHJlYWxseSBwb29yIHJlYWQgcGVyZm9ybWFuY2UuIFRoYXQmIzM5O3MgdXN1YWxseSBjYXVz ZWQ8L2Rpdj48ZGl2PmJ5IGRhdGEgdGhhdCYjMzk7cyBlbmRpbmcgdGhlIGVuZCBvZiBpdHMgdXNl ZnVsIGxpZmUgaW4gdGhlIGN1cnJlbnQgYmxvY2tzIHRoYXQgaXQ8L2Rpdj48ZGl2Pm9jY3VwaWVz IHdoaWNoIHRyaWdnZXJzIHRyYW5zcGFyZW50IGRhdGEgcmVjb3ZlcnksIGJ1dCBhdCBzdWNoIGEg aGlnaCBsZXZlbDwvZGl2PjxkaXY+aXQgY2FuIG5vIGxvbmdlciBiZSAmcXVvdDtsaW5lIHNwZWVk JnF1b3Q7IG9mIHRoZSBkZXZpY2UsIGJ1dCBpcyBoYXBwZW5pbmcgYXQgc29mdHdhcmU8L2Rpdj48 ZGl2PnNwZWVkcywgd2hpY2ggY2FuIGJlIHF1aXRlIGEgYml0IHNsb3dlci4gQnkgYmFzaWNhbGx5 IHdpcGluZyBhbmQgcmV3cml0aW5nPC9kaXY+PGRpdj50aGUgZHJpdmVzIHdpdGggdGhlIHJlc2ls dmVycywgeW91JiMzOTt2ZSByZWZyZXNoZWQgYWxsIHRoZSBkYXRhIHNvIG5vdyBub25lIG9mPC9k aXY+PGRpdj5pdCB0YWtlcyBhIGxvbmcgdGltZSB0byByZWFkLiBOb3Qgc3VyZSB3aGF0ICYjMzk7 b2xkIGRhdGEmIzM5OyBpcyBvbiB0aGUgZHJpdmVzLCBidXQ8L2Rpdj48ZGl2PnRoYXQgd291bGQg YWxzbyBleHBsYWluIHRoZSBmYXN0ZXIgcmVzaWx2ZXIgdGltZXMgdG9vLjwvZGl2PjxkaXY+wqA8 L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBw eCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGlu Zy1sZWZ0OjFleCI+DQpRdWVzdGlvbnM6PGJyPg0KPGJyPg0KRG9lcyB0aGlzIG1lYW4gdGhhdCBw cmlvciB0byBkZXBsb3lpbmcgU1NEcyBmb3IgdXNlIGluIGEgemZzIHBvb2wsIHlvdSA8YnI+DQpz aG91bGQgZG8gYSBmdWxsIHRyaW0gLWYgb2YgdGhlIGRpc2sgPzxicj48L2Jsb2NrcXVvdGU+PGRp dj48YnI+PC9kaXY+PGRpdj5ZZXMuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xh c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1s ZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPg0KQXBhcnQg ZnJvbSBvZmZsaW5pbmcgYW5kIGRvaW5nIGEgdHJpbSwgcmVzaWx2ZXIgZXRjLCBpcyB0aGVyZSBh IGJldHRlciA8YnI+DQp3YXkgdG8gZ2V0IGJhY2sgcGVyZm9ybWFuY2UgP8KgIE9yIHdpdGggYSBv bmNlIGEgd2VlayB0cmltIHByaW9yIHRvIDxicj4NCnNjcnViLCB3aWxsIGl0IGJlICZxdW90O2dv b2QgZW5vdWdoJnF1b3Q7ID88YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PjxkaXY+V2Vl a2x5IHNob3VsZCBzdWZmaWNlLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SG93ZXZlciwgaWYg dGhlIHByb2JsZW0gaXMgZHVlIHRvICYjMzk7b2xkIGRhdGEmIzM5OyBkZWNheWluZyBhbmQgdGhl IGRyaXZlJiMzOTtzPC9kaXY+PGRpdj5yZWxpYWJpbGl0eSBzb2Z0d2FyZSBub3QgbW92aW5nIGl0 IGFnZ3Jlc3NpdmVsecKgZW5vdWdoIHRvIHByZXNlcnZlPC9kaXY+PGRpdj5wZXJmb3JtYW5jZSwg YWxsIHRoZSB0cmltcyBpbiB0aGUgd29ybGQgd29uJiMzOTt0IGhlbHAuIEl0IGNvdWxkIGJlIHRo YXQ8L2Rpdj48ZGl2PnRoZSBkcml2ZXMgYXJlIHRvbyBidXN5ICh0aG91Z2ggdGhlIGFnZ3JlZ2F0 ZSBudW1iZXJzIGZyb20gc21hcnQ8L2Rpdj48ZGl2PmFyZW4mIzM5O3Qgc3VnZ2VzdGl2ZSBvZiB0 aGF0KS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGlz IGdvb2QsIGJ1dCBpZiB0aGUgZHJpdmVzIGJha2VkIGZvciBhIHdoaWxlPC9kaXY+PGRpdj5mb3Ig c29tZSByZWFzb24sIHRoYXQgY291bGQgZXhwbGFpbiB0aGUgZGVncmFkZWQgcGVyZm9ybWFuY2Uu PC9kaXY+PGRpdj7CoDwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9 Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwy MDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4NCklzIHRoZXJlIGEgd2F5IHRvIHRlbGwgaWYgYSBk aXNrIFJFQUxMWSBuZWVkcyB0byBiZSBmdWxseSB0cmltbWVkIG90aGVyIDxicj4NCnRoYW4gYXBw cm94aW1hdGluZyBmb3Igc2xvd2luZyBwZXJmb3JtYW5jZSA/PGJyPjwvYmxvY2txdW90ZT48ZGl2 Pjxicj48L2Rpdj48ZGl2PllvdSBtaWdodCBiZSBhYmxlIHRvIGxvb2sgYXQgdGhlIGN1cnJlbnQg d2VhciB2cyB0aGUgcHJvbWlzZWQgbGlmZXRpbWU8L2Rpdj48ZGl2Pm9mIHRoZSBkcml2ZS4gNiB5 ZWFycyBpcyBvdXQgb2Ygd2FycmFudHnCoGZvciBzdXJlLCBzbyBpdCBtYXkganVzdCBiZSB0aGV5 PC9kaXY+PGRpdj5hcmUgdG9vIHdvcm4gZm9yIGFueXRoaW5nIG5lZWRpbmcgYW55IGxldmVsIG9m IHBlcmZvcm1hbmNlLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QnV0IHVzdWFsbHkgaXQmIzM5 O3MgcGVyZm9ybWFuY2UuIEFuZCBldmVuIHRoZW4sIHRoZXJlJiMzOTtzIG5vIHNpbHZlcjwvZGl2 PjxkaXY+YnVsbGV0LjwvZGl2PjxkaXY+wqA8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf cXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNv bGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+DQpJIGtub3cgdGhlc2UgZGlz a3Mgd2VyZSBzdXBlciBvbGQsIHNvIG1heWJlIGN1cnJlbnQgU1NEcyBkb250IGhhdmUgdGhpcyA8 YnI+DQppc3N1ZSA/IExhc3QgZmV3IHllYXJzIEkgaGF2ZSBzd2l0Y2hlZCB0byBTYW1zdW5nIEVW T3MgYW5kIHRoZXkgZG9udCA8YnI+DQpzZWVtIHRvIGhhdmUgdGhlc2UgcHJvYmxlbXMsIGF0IGxl YXN0IG5vdCB5ZXQgaW4gYW55IG9idmlvdXMgd2F5LsKgIE5vdCA8YnI+DQpzdXJlIHdoeSB0aGlz IHBhcnRpY3VsYXJseSBzaG93ZWQgdXAgaW4gdGhlIHpmcyB2b2x1bWUgc2V0LCBhbmQgb3RoZXIg PGJyPg0Kbm9ybWFsIGRhdGFzZXRzIHBlcmZvcm1lZCBvay48YnI+PC9ibG9ja3F1b3RlPjxkaXY+ PGJyPjwvZGl2PjxkaXY+WWVhLiBmcm9tIHRoZSBzbWFydCBpbmZvLCBpdCBsb29rcyBsaWtlIHlv dSYjMzk7dmUgd29ybiB0aGVtwqBvdXQgMS8zLiBZb3UmIzM5O3ZlIHdyaXR0ZW48L2Rpdj48ZGl2 PmFib3V0IDExMlRCIHRvIHRoZSBkcml2ZSBiYXNlZCBvbiA4MFRCIG9mIHdyaXRlIHRyYWZmaWMg KGlmIEkmIzM5O20gZG9pbmcgdGhlIG1hdGg8L2Rpdj48ZGl2PnJpZ2h0KS4gVGhpcyBpcyBhIGZh aXJseSBnb29kIG51bWJlci4uIFRoZXJlJiMzOTtzIG5vdCBhbnkgcmVhbCBsaW5rIGVycm9ycyB0 byBzcGVhazwvZGl2PjxkaXY+b2YgKHdoaWNoIGlzIGFub3RoZXIgd2F5IHlvdSBjYW4gYmUgc2xv dykuLCBub3IgaGF2ZSB5b3UgYmVlbiB0aGVybWFsIHRocm90dGxpbmcuPC9kaXY+PGRpdj48YnI+ PC9kaXY+PGRpdj5TbyB5b3UmIzM5O3ZlIGRvbmUgODAgZHJpdmUgd3JpdGVzIG92ZXIgNiB5ZWFy cyAob3IgMC4wMyBEV1BEKS4gVGhpcyBpcyB3ZWxsIGJlbG93PC9kaXY+PGRpdj5yYXRpbmdzIGZv ciBtb3N0IFRMQyBkcml2ZXMgb2YgMC4zNyBEV1BEIGluIHRoZSBkYXRhc2hlZXQgKGJ1dCB0aGF0 JiMzOTtzIG9ubHkgZm9yPC9kaXY+PGRpdj4zIHllYXJzKS4gVGhlIGRyaXZlIHNob3VsZCBiZSBn b29kIGZvciBhYm91dCA0MDAgZHJpdmUgd3JpdGVzIHRvdGFsLCBhbmQgeW91IGFyZTwvZGl2Pjxk aXY+YXQgMS81IG9mIHRoYXQuIEJ1dCB0aGUgd2VhciBpbmRpY2F0b3JzIGFyZSBjbG9zZXIgdG8g MS8zIChhcHByb3hpbWF0ZWx5IDJ4IHdoYXQ8L2Rpdj48ZGl2PnRoZSBhYnNvbHV0ZSB3ZWFyIHZh bHVlcyB3b3VsZCBpbmRpY2F0ZSkuIFRoZSB3cml0ZSBhbXAgaXMgcmVsYXRpdmVseSBsb3csIHN1 Z2dlc3Rpbmc8L2Rpdj48ZGl2PnRoYXQgdHJpbW1pbmcgd291bGRuJiMzOTt0IGhlbHAgYWxsIHRo YXQgbXVjaCwgdGhvdWdoLiBJdCYjMzk7cyBhdCAxLjQsIHdoaWNoIHdvdWxkIGJ1bXA8L2Rpdj48 ZGl2PnRvdGFsIGJ5dGVzIHdyaXR0ZW4gaW50byB0aGUgMS8zIGxpZmV0aW1lIHJhbmdlLiBQbHVz IFRMQyB3cml0ZXMgdGVuZCB0byBiZSBxdWl0ZSBhPC9kaXY+PGRpdj5iaXQgaGFyZGVyIG9uIHRo ZSBkcml2ZSB0aGFuIFNMQyB3cml0ZXMsIHNvIHRoYXQgbWFrZXMgdGhlIDEvMyB3ZWFyIG51bWJl cnM8L2Rpdj48ZGl2PmtpbmRhIG1ha2Ugc2Vuc2UuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5O b25lIG9mIHRoZXNlIHJhdyBudW1iZXJzIHN1Z2dlc3RzIGEgZ29vZCByb290LWNhdXNlIGZvciB0 aGUgc2xvd25lc3MsPC9kaXY+PGRpdj53aGljaCBpcyBpbiBsaW5lIHdpdGggJiMzOTtiYWQgZGF0 YSBmcm9tIHRoZSBuYW5kIHRha2luZyBhIHdoaWxlIHRvIHJlY292ZXImIzM5Oy4gSXQgYWxsPC9k aXY+PGRpdj5oYXMgdG8gZG8gd2l0aCB0aGUgZHJpdmUmIzM5O3Mgd3JpdGUgLyBwb3dlci1vbiAv IHRlbXBlcmF0dXJlIC8gZXRjIGhpc3RvcnksIGFuZDwvZGl2PjxkaXY+bWFueSBrZXkgZGV0YWls cyBvZiB0aGF0IGFyZSBzaW1wbHkgdW5vYnRhbml1bSB0aG91Z2ggc29tZSBoaW50cyBhdCB0aGVt PC9kaXY+PGRpdj5hcmUgaW4gdGhlIFNNQVJUIGRhdGEuIE5vdCBlbm91Z2ggZm9yIGJlIHRvIGJl IHN1cmUsIHRob3VnaCB3aHkgeW91cjwvZGl2PjxkaXY+ZHJpdmVzIGRlZ3JhZGVkLjwvZGl2Pjxk aXY+PGJyPjwvZGl2PjxkaXY+V2FybmVyPC9kaXY+PGRpdj7CoDwvZGl2PjxibG9ja3F1b3RlIGNs YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXIt bGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4NCsKgwqDC oMKgIC0tLU1pa2U8YnI+DQo8YnI+DQo8YnI+DQpkaXNrPGJyPg0KPGJyPg0Kc21hcnRjdGwgNy40 IDIwMjMtMDgtMDEgcjU1MzAgW0ZyZWVCU0QgMTQuMi1TVEFCTEUgYW1kNjRdIChsb2NhbCBidWls ZCk8YnI+DQpDb3B5cmlnaHQgKEMpIDIwMDItMjMsIEJydWNlIEFsbGVuLCBDaHJpc3RpYW4gRnJh bmtlLCA8YSBocmVmPSJodHRwOi8vd3d3LnNtYXJ0bW9udG9vbHMub3JnIiByZWw9Im5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj53d3cuc21hcnRtb250b29scy5vcmc8L2E+PGJyPg0KPGJyPg0K PT09IFNUQVJUIE9GIElORk9STUFUSU9OIFNFQ1RJT04gPT09PGJyPg0KTW9kZWwgRmFtaWx5OsKg wqDCoMKgIFdEIEJsdWUgLyBSZWQgLyBHcmVlbiBTU0RzPGJyPg0KRGV2aWNlIE1vZGVsOsKgwqDC oMKgIFdEQ8KgIFdEUzEwMFQyQjBBLTAwU001MDxicj4NClNlcmlhbCBOdW1iZXI6wqDCoMKgIDE5 MTAxMUEwMEE3Mjxicj4NCkxVIFdXTiBEZXZpY2UgSWQ6IDUgMDAxYjQ0IDhiODk4MjVlZDxicj4N CkZpcm13YXJlIFZlcnNpb246IDQwMTAwMFdEPGJyPg0KVXNlciBDYXBhY2l0eTrCoMKgwqAgMSww MDAsMjA0LDg4NiwwMTYgYnl0ZXMgWzEuMDAgVEJdPGJyPg0KU2VjdG9yIFNpemU6wqDCoMKgwqDC oCA1MTIgYnl0ZXMgbG9naWNhbC9waHlzaWNhbDxicj4NClJvdGF0aW9uIFJhdGU6wqDCoMKgIFNv bGlkIFN0YXRlIERldmljZTxicj4NCkZvcm0gRmFjdG9yOsKgwqDCoMKgwqAgMi41IGluY2hlczxi cj4NClRSSU0gQ29tbWFuZDrCoMKgwqDCoCBBdmFpbGFibGUsIGRldGVybWluaXN0aWMsIHplcm9l ZDxicj4NCkRldmljZSBpczrCoMKgwqDCoMKgwqDCoCBJbiBzbWFydGN0bCBkYXRhYmFzZSA3LjMv NTUyODxicj4NCkFUQSBWZXJzaW9uIGlzOsKgwqAgQUNTLTQgVDEzL0JTUiBJTkNJVFMgNTI5IHJl dmlzaW9uIDU8YnI+DQpTQVRBIFZlcnNpb24gaXM6wqAgU0FUQSAzLjMsIDYuMCBHYi9zIChjdXJy ZW50OiA2LjAgR2Ivcyk8YnI+DQpMb2NhbCBUaW1lIGlzOsKgwqDCoCBXZWQgRGVjIDE4IDE1OjIz OjEwIDIwMjQgRVNUPGJyPg0KU01BUlQgc3VwcG9ydCBpczogQXZhaWxhYmxlIC0gZGV2aWNlIGhh cyBTTUFSVCBjYXBhYmlsaXR5Ljxicj4NClNNQVJUIHN1cHBvcnQgaXM6IEVuYWJsZWQ8YnI+DQpB QU0gZmVhdHVyZSBpczrCoMKgIFVuYXZhaWxhYmxlPGJyPg0KQVBNIGxldmVsIGlzOsKgwqDCoMKg IDEyOCAobWluaW11bSBwb3dlciBjb25zdW1wdGlvbiB3aXRob3V0IHN0YW5kYnkpPGJyPg0KUmQg bG9vay1haGVhZCBpczogRW5hYmxlZDxicj4NCldyaXRlIGNhY2hlIGlzOsKgwqAgRW5hYmxlZDxi cj4NCkRTTiBmZWF0dXJlIGlzOsKgwqAgVW5hdmFpbGFibGU8YnI+DQpBVEEgU2VjdXJpdHkgaXM6 wqAgRGlzYWJsZWQsIE5PVCBGUk9aRU4gW1NFQzFdPGJyPg0KV3QgQ2FjaGUgUmVvcmRlcjogVW5h dmFpbGFibGU8YnI+DQo8YnI+DQo9PT0gU1RBUlQgT0YgUkVBRCBTTUFSVCBEQVRBIFNFQ1RJT04g PT09PGJyPg0KU01BUlQgb3ZlcmFsbC1oZWFsdGggc2VsZi1hc3Nlc3NtZW50IHRlc3QgcmVzdWx0 OiBQQVNTRUQ8YnI+DQo8YnI+DQpHZW5lcmFsIFNNQVJUIFZhbHVlczo8YnI+DQpPZmZsaW5lIGRh dGEgY29sbGVjdGlvbiBzdGF0dXM6wqAgKDB4MDApIE9mZmxpbmUgZGF0YSBjb2xsZWN0aW9uIGFj dGl2aXR5PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2FzIG5ldmVyIHN0YXJ0ZWQuPGJy Pg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQXV0byBPZmZsaW5lIERhdGEgQ29sbGVjdGlvbjog PGJyPg0KRGlzYWJsZWQuPGJyPg0KU2VsZi10ZXN0IGV4ZWN1dGlvbiBzdGF0dXM6wqDCoMKgwqDC oCAowqDCoCAwKSBUaGUgcHJldmlvdXMgc2VsZi10ZXN0IHJvdXRpbmUgPGJyPg0KY29tcGxldGVk PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2l0aG91dCBlcnJvciBvciBubyBzZWxmLXRl c3QgPGJyPg0KaGFzIGV2ZXI8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiZWVuIHJ1bi48 YnI+DQpUb3RhbCB0aW1lIHRvIGNvbXBsZXRlIE9mZmxpbmU8YnI+DQpkYXRhIGNvbGxlY3Rpb246 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICjCoMKgwqAgMCkgc2Vjb25kcy48YnI+DQpP ZmZsaW5lIGRhdGEgY29sbGVjdGlvbjxicj4NCmNhcGFiaWxpdGllczrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMHgxMSkgU01BUlQgZXhlY3V0ZSBPZmZsaW5lIGltbWVk aWF0ZS48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBObyBBdXRvIE9mZmxpbmUgZGF0YSBj b2xsZWN0aW9uIDxicj4NCnN1cHBvcnQuPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU3Vz cGVuZCBPZmZsaW5lIGNvbGxlY3Rpb24gdXBvbiBuZXc8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb21tYW5kLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vIE9mZmxpbmUgc3Vy ZmFjZSBzY2FuIHN1cHBvcnRlZC48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTZWxmLXRl c3Qgc3VwcG9ydGVkLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vIENvbnZleWFuY2Ug U2VsZi10ZXN0IHN1cHBvcnRlZC48YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBObyBTZWxl Y3RpdmUgU2VsZi10ZXN0IHN1cHBvcnRlZC48YnI+DQpTTUFSVCBjYXBhYmlsaXRpZXM6wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoMHgwMDAzKSBTYXZlcyBTTUFSVCBkYXRhIGJlZm9yZSBlbnRlcmlu Zzxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvd2VyLXNhdmluZyBtb2RlLjxicj4NCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFN1cHBvcnRzIFNNQVJUIGF1dG8gc2F2ZSB0aW1lci48YnI+ DQpFcnJvciBsb2dnaW5nIGNhcGFiaWxpdHk6wqDCoMKgwqDCoMKgwqAgKDB4MDEpIEVycm9yIGxv Z2dpbmcgc3VwcG9ydGVkLjxicj4NCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdlbmVyYWwgUHVy cG9zZSBMb2dnaW5nIHN1cHBvcnRlZC48YnI+DQpTaG9ydCBzZWxmLXRlc3Qgcm91dGluZTxicj4N CnJlY29tbWVuZGVkIHBvbGxpbmcgdGltZTrCoMKgwqDCoMKgwqDCoCAowqDCoCAyKSBtaW51dGVz Ljxicj4NCkV4dGVuZGVkIHNlbGYtdGVzdCByb3V0aW5lPGJyPg0KcmVjb21tZW5kZWQgcG9sbGlu ZyB0aW1lOsKgwqDCoMKgwqDCoMKgICjCoCAxMCkgbWludXRlcy48YnI+DQo8YnI+DQpTTUFSVCBB dHRyaWJ1dGVzIERhdGEgU3RydWN0dXJlIHJldmlzaW9uIG51bWJlcjogNDxicj4NClZlbmRvciBT cGVjaWZpYyBTTUFSVCBBdHRyaWJ1dGVzIHdpdGggVGhyZXNob2xkczo8YnI+DQpJRCMgQVRUUklC VVRFX05BTUXCoMKgwqDCoMKgwqDCoMKgwqAgRkxBR1PCoMKgwqAgVkFMVUUgV09SU1QgVEhSRVNI IEZBSUwgUkFXX1ZBTFVFPGJyPg0KwqDCoCA1IFJlYWxsb2NhdGVkX1NlY3Rvcl9DdMKgwqAgLU8t LUNLwqDCoCAxMDDCoMKgIDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCsKgwqAgOSBQ b3dlcl9Pbl9Ib3Vyc8KgwqDCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDC oCAtLS3CoMKgwqAgLcKgwqDCoCA0NzI3MTxicj4NCsKgwqAxMiBQb3dlcl9DeWNsZV9Db3VudMKg wqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAz Mzxicj4NCjE2NSBCbG9ja19FcmFzZV9Db3VudMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg wqAgMTAwwqDCoCAtLS3CoMKgwqAgLSA5MDY1MDkyOTEyNDU8YnI+DQoxNjYgTWluaW11bV9QRV9D eWNsZXNfVExDwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDC oCAxPGJyPg0KMTY3IE1heF9CYWRfQmxvY2tzX3Blcl9EaWXCoCAtTy0tQ0vCoMKgIDEwMMKgwqAg MTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAzNDxicj4NCjE2OCBNYXhpbXVtX1BFX0N5Y2xlc19U TEPCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDMzPGJy Pg0KMTY5IFRvdGFsX0JhZF9CbG9ja3PCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAg MTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCA1MzQ8YnI+DQoxNzAgR3Jvd25fQmFkX0Jsb2Nrc8Kg wqDCoMKgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKg IDA8YnI+DQoxNzEgUHJvZ3JhbV9GYWlsX0NvdW50wqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg wqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAwPGJyPg0KMTcyIEVyYXNlX0ZhaWxfQ291bnTC oMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDC oCAwPGJyPg0KMTczIEF2ZXJhZ2VfUEVfQ3ljbGVzX1RMQ8KgwqAgLU8tLUNLwqDCoCAxMDDCoMKg IDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMTI8YnI+DQoxNzQgVW5leHBlY3RlZF9Qb3dlcl9M b3NzwqDCoCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAxOTxi cj4NCjE4NCBFbmQtdG8tRW5kX0Vycm9ywqDCoMKgwqDCoMKgwqAgLU8tLUNLwqDCoCAxMDDCoMKg IDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCjE4NyBSZXBvcnRlZF9VbmNvcnJlY3TC oMKgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDA8 YnI+DQoxODggQ29tbWFuZF9UaW1lb3V0wqDCoMKgwqDCoMKgwqDCoCAtTy0tQ0vCoMKgIDEwMMKg wqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAwPGJyPg0KMTk0IFRlbXBlcmF0dXJlX0NlbHNp dXPCoMKgwqDCoCAtTy0tLUvCoMKgIDA3NcKgwqAgMDQ0wqDCoCAtLS3CoMKgwqAgLcKgwqDCoCAy NSAoTWluL01heCA8YnI+DQoyMi80NCk8YnI+DQoxOTkgVURNQV9DUkNfRXJyb3JfQ291bnTCoMKg wqAgLU8tLUNLwqDCoCAxMDDCoMKgIDEwMMKgwqAgLS0twqDCoMKgIC3CoMKgwqAgMDxicj4NCjIz MCBNZWRpYV9XZWFyb3V0X0luZGljYXRvciAtTy0tQ0vCoMKgIDAwN8KgwqAgMDA3wqDCoCAtLS3C oMKgwqAgLSAweDA3NDAwMTE0MDc0MDxicj4NCjIzMiBBdmFpbGFibGVfUmVzZXJ2ZF9TcGFjZSBQ Ty0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAwMDTCoMKgwqAgLcKgwqDCoCAxMDA8YnI+DQoyMzMg TkFORF9HQl9Xcml0dGVuX1RMQ8KgwqDCoMKgIC1PLS1DS8KgwqAgMTAwwqDCoCAxMDDCoMKgIC0t LcKgwqDCoCAtwqDCoMKgIDEyMzQ2PGJyPg0KMjM0IE5BTkRfR0JfV3JpdHRlbl9TTEPCoMKgwqDC oCAtTy0tQ0vCoMKgIDEwMMKgwqAgMTAwwqDCoCAtLS3CoMKgwqAgLcKgwqDCoCA5MDkxOTxicj4N CjI0MSBIb3N0X1dyaXRlc19HaULCoMKgwqDCoMKgwqDCoMKgIC0tLS1DS8KgwqAgMjUzwqDCoCAy NTPCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDgwNzYyPGJyPg0KMjQyIEhvc3RfUmVhZHNfR2lCwqDC oMKgwqDCoMKgwqDCoMKgIC0tLS1DS8KgwqAgMjUzwqDCoCAyNTPCoMKgIC0tLcKgwqDCoCAtwqDC oMKgIDE5OTA4PGJyPg0KMjQ0IFRlbXBfVGhyb3R0bGVfU3RhdHVzwqDCoMKgIC1PLS1DS8KgwqAg MDAwwqDCoCAxMDDCoMKgIC0tLcKgwqDCoCAtwqDCoMKgIDA8YnI+DQrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fHx8fHxfIEsgYXV0by1r ZWVwPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfHx8fHxfXyBDIGV2ZW50IGNvdW50PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHx8fF9fXyBSIGVycm9yIHJhdGU8 YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8fHxfX19fIFMgc3BlZWQvcGVyZm9ybWFuY2U8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fF9fX19fIE8gdXBkYXRlZCBv bmxpbmU8YnI+DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8X19fX19fIFAgcHJlZmFpbHVyZSB3YXJuaW5nPGJyPg0KPGJyPg0KR2VuZXJh bCBQdXJwb3NlIExvZyBEaXJlY3RvcnkgVmVyc2lvbiAxPGJyPg0KU01BUlTCoMKgwqDCoMKgwqDC oMKgwqDCoCBMb2cgRGlyZWN0b3J5IFZlcnNpb24gMSBbbXVsdGktc2VjdG9yIGxvZyBzdXBwb3J0 XTxicj4NCkFkZHJlc3PCoMKgwqAgQWNjZXNzwqAgUi9XwqDCoCBTaXplwqAgRGVzY3JpcHRpb248 YnI+DQoweDAwwqDCoMKgwqDCoMKgIEdQTCxTTMKgIFIvT8KgwqDCoMKgwqAgMcKgIExvZyBEaXJl Y3Rvcnk8YnI+DQoweDAxwqDCoMKgwqDCoMKgwqDCoMKgwqAgU0zCoCBSL0/CoMKgwqDCoMKgIDHC oCBTdW1tYXJ5IFNNQVJUIGVycm9yIGxvZzxicj4NCjB4MDLCoMKgwqDCoMKgwqDCoMKgwqDCoCBT TMKgIFIvT8KgwqDCoMKgwqAgMsKgIENvbXByZWhlbnNpdmUgU01BUlQgZXJyb3IgbG9nPGJyPg0K MHgwM8KgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKgwqDCoMKgIDHCoCBFeHQuIENvbXBy ZWhlbnNpdmUgU01BUlQgZXJyb3IgbG9nPGJyPg0KMHgwNMKgwqDCoMKgwqDCoCBHUEwsU0zCoCBS L0/CoMKgwqDCoMKgIDjCoCBEZXZpY2UgU3RhdGlzdGljcyBsb2c8YnI+DQoweDA2wqDCoMKgwqDC oMKgwqDCoMKgwqAgU0zCoCBSL0/CoMKgwqDCoMKgIDHCoCBTTUFSVCBzZWxmLXRlc3QgbG9nPGJy Pg0KMHgwN8KgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKgwqDCoMKgIDHCoCBFeHRlbmRl ZCBzZWxmLXRlc3QgbG9nPGJyPg0KMHgxMMKgwqDCoMKgwqDCoCBHUEzCoMKgwqDCoCBSL0/CoMKg wqDCoMKgIDHCoCBOQ1EgQ29tbWFuZCBFcnJvciBsb2c8YnI+DQoweDExwqDCoMKgwqDCoMKgIEdQ TMKgwqDCoMKgIFIvT8KgwqDCoMKgwqAgMcKgIFNBVEEgUGh5IEV2ZW50IENvdW50ZXJzIGxvZzxi cj4NCjB4MjTCoMKgwqDCoMKgwqAgR1BMwqDCoMKgwqAgUi9PwqDCoCAyMjYxwqAgQ3VycmVudCBE ZXZpY2UgSW50ZXJuYWwgU3RhdHVzIERhdGEgbG9nPGJyPg0KMHgyNcKgwqDCoMKgwqDCoCBHUEzC oMKgwqDCoCBSL0/CoMKgIDIyNjHCoCBTYXZlZCBEZXZpY2UgSW50ZXJuYWwgU3RhdHVzIERhdGEg bG9nPGJyPg0KMHgzMMKgwqDCoMKgwqDCoCBHUEwsU0zCoCBSL0/CoMKgwqDCoMKgIDnCoCBJREVO VElGWSBERVZJQ0UgZGF0YSBsb2c8YnI+DQoweDgwLTB4OWbCoCBHUEwsU0zCoCBSL1fCoMKgwqDC oCAxNsKgIEhvc3QgdmVuZG9yIHNwZWNpZmljIGxvZzxicj4NCjB4ZGXCoMKgwqDCoMKgwqAgR1BM wqDCoMKgwqAgVlPCoMKgwqDCoMKgwqAgOMKgIERldmljZSB2ZW5kb3Igc3BlY2lmaWMgbG9nPGJy Pg0KPGJyPg0KU01BUlQgRXh0ZW5kZWQgQ29tcHJlaGVuc2l2ZSBFcnJvciBMb2cgVmVyc2lvbjog MSAoMSBzZWN0b3JzKTxicj4NCk5vIEVycm9ycyBMb2dnZWQ8YnI+DQo8YnI+DQpTTUFSVCBFeHRl bmRlZCBTZWxmLXRlc3QgTG9nIFZlcnNpb246IDEgKDEgc2VjdG9ycyk8YnI+DQpObyBzZWxmLXRl c3RzIGhhdmUgYmVlbiBsb2dnZWQuwqAgW1RvIHJ1biBzZWxmLXRlc3RzLCB1c2U6IHNtYXJ0Y3Rs IC10XTxicj4NCjxicj4NClNlbGVjdGl2ZSBTZWxmLXRlc3RzL0xvZ2dpbmcgbm90IHN1cHBvcnRl ZDxicj4NCjxicj4NClNDVCBDb21tYW5kcyBub3Qgc3VwcG9ydGVkPGJyPg0KPGJyPg0KRGV2aWNl IFN0YXRpc3RpY3MgKEdQIExvZyAweDA0KTxicj4NClBhZ2XCoCBPZmZzZXQgU2l6ZcKgwqDCoMKg wqDCoMKgIFZhbHVlIEZsYWdzIERlc2NyaXB0aW9uPGJyPg0KMHgwMcKgID09PT09wqAgPcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPcKgID09PcKgID09IEdlbmVyYWwgU3RhdGlzdGljcyAo cmV2IDEpID09PGJyPg0KMHgwMcKgIDB4MDA4wqAgNMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDMzwqAgLS0twqAgTGlmZXRpbWUgUG93ZXItT24gUmVzZXRzPGJyPg0KMHgwMcKgIDB4MDEwwqAg NMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQ3MjcxwqAgLS0twqAgUG93ZXItb24gSG91cnM8YnI+DQow eDAxwqAgMHgwMTjCoCA2wqDCoMKgIDE2OTM3MTI1MzU3OMKgIC0tLcKgIExvZ2ljYWwgU2VjdG9y cyBXcml0dGVuPGJyPg0KMHgwMcKgIDB4MDIwwqAgNsKgwqDCoMKgwqAgMjYzOTgxMjk0OcKgIC0t LcKgIE51bWJlciBvZiBXcml0ZSBDb21tYW5kczxicj4NCjB4MDHCoCAweDAyOMKgIDbCoMKgwqDC oCA0MTc1MjEzNjI4MsKgIC0tLcKgIExvZ2ljYWwgU2VjdG9ycyBSZWFkPGJyPg0KMHgwMcKgIDB4 MDMwwqAgNsKgwqDCoMKgwqDCoMKgIDg5NDI5MTg5wqAgLS0twqAgTnVtYmVyIG9mIFJlYWQgQ29t bWFuZHM8YnI+DQoweDA3wqAgPT09PT3CoCA9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 wqAgPT09wqAgPT0gU29saWQgU3RhdGUgRGV2aWNlIFN0YXRpc3RpY3MgPGJyPg0KKHJldiAxKSA9 PTxicj4NCjB4MDfCoCAweDAwOMKgIDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDHCoCBO LS3CoCBQZXJjZW50YWdlIFVzZWQgRW5kdXJhbmNlIEluZGljYXRvcjxicj4NCsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHx8 XyBDIG1vbml0b3JlZCBjb25kaXRpb24gbWV0PGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fF9fIEQgc3VwcG9ydHMg RFNOPGJyPg0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8X19fIE4gbm9ybWFsaXplZCB2YWx1ZTxicj4NCjxicj4NClBlbmRp bmcgRGVmZWN0cyBsb2cgKEdQIExvZyAweDBjKSBub3Qgc3VwcG9ydGVkPGJyPg0KPGJyPg0KU0FU QSBQaHkgRXZlbnQgQ291bnRlcnMgKEdQIExvZyAweDExKTxicj4NCklEwqDCoMKgwqDCoCBTaXpl wqDCoMKgwqAgVmFsdWXCoCBEZXNjcmlwdGlvbjxicj4NCjB4MDAwMcKgIDTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDDCoCBDb21tYW5kIGZhaWxlZCBkdWUgdG8gSUNSQyBlcnJvcjxicj4NCjB4MDAw MsKgIDTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoCBSX0VSUiByZXNwb25zZSBmb3IgZGF0YSBG SVM8YnI+DQoweDAwMDXCoCA0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwwqAgUl9FUlIgcmVzcG9u c2UgZm9yIG5vbi1kYXRhIEZJUzxicj4NCjB4MDAwYcKgIDTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDfCoCBEZXZpY2UtdG8taG9zdCByZWdpc3RlciBGSVNlcyBzZW50IGR1ZSB0byBhIENPTVJFU0VU PGJyPg0KPGJyPg0KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2Pg0K --00000000000050e5d006299263d1--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrGKcjOWKoqH39A2UvvRD1D_gt6zdb8EYkJLJBxv6SVxA>