Stories
Slash Boxes
Comments

SoylentNews is people

Log In

Log In

Create Account  |  Retrieve Password


White House falls for Poe's Law: Trump's budget makes sense

Posted by DeathMonkey on Friday March 17 2017, @06:07PM (#2266)
8 Comments
Code

The White House's official newsletter linked to an article sarcastically ripping apart Trump's budget

This budget will make America a lean, mean fighting machine with bulging, rippling muscles and not an ounce of fat. America has been weak and soft for too long. BUT HOW WILL I SURVIVE ON THIS BUDGET? you may be wondering. I AM A HUMAN CHILD, NOT A COSTLY FIGHTER JET. You may not survive, but that is because you are SOFT and WEAK, something this budget is designed to eliminate.

3 Times Trump Promised to Leave Legal Weed to the States

Posted by DeathMonkey on Tuesday February 28 2017, @05:22PM (#2246)
6 Comments
News

In a television interview on July 29, 2016 with KUSA-TV in Colorado, Trump said: "I wouldn’t do that [using federal authority to shut down recreational marijuana], no … I wouldn’t do that … I think it’s up to the states, yeah. I’m a states person. I think it should be up to the states, absolutely."

In a radio interview with WWJ Newsradio 950 in Michigan on March 8, 2016, Trump said "I think it certainly has to be a state — I have not smoked it — it’s got to be a state decision … I do like it, you know, from a medical standpoint … it does do pretty good things. But from the other standpoint, I think that it should be up to the states."

At a campaign rally in Sparks, Nevada on Oct. 29, 2015, Trump said: "The marijuana thing is such a big thing. I think medical should happen — right? Don’t we agree? I think so. And then I really believe we should leave it up to the states. It should be a state situation ... but I believe that the legalization of marijuana – other than for medical because I think medical, you know I know people that are very, very sick and for whatever reason the marijuana really helps them - … but in terms of marijuana and legalization, I think that should be a state issue, state-by-state."

He Lied:

"There is still a federal law we need to abide by in terms of when it comes to recreational marijuana and other drugs of that nature," White House press secretary Sean Spicer told reporters on Feb. 23, 2017. "I do believe that you'll see greater enforcement."

Good Lord, have you seen /. lately?

Posted by DeathMonkey on Wednesday February 15 2017, @06:25PM (#2234)
22 Comments
Slash

Not to take potshots at the "other site" but damn.

I had mostly stopped checking it because the comment signal-to-noise ratio had become so bad. But now they're running these giant floating ads that cover half the comment-text so you can't actually read them anyway.

On the word "fake" when applied to "news"

Posted by AthanasiusKircher on Friday February 10 2017, @09:08PM (#2228)
17 Comments
News

Merriam-Webster defines the adjective fake to mean "counterfeit, sham." The noun is further defined as follows:

one that is not what it purports to be: such as
a : a worthless imitation passed off as genuine
b : impostor, charlatan
c : a simulated movement in a sports contest (as a pretended kick, pass, or jump or a quick movement in one direction before going in another) designed to deceive an opponent
d : a device or apparatus used by a magician to achieve the illusion of magic in a trick

The dictionary glosses fake among a set of synonyms which "mean a thing made to seem other than it is," further specifying the nuances of fake: "fake implies an imitation of or substitution for the genuine but does not necessarily imply dishonesty."

All of these uses have a common sense of something that is deliberately constructed to stand in for something "genuine." When someone presents a "fake ID" to get past a bouncer at a bar, the implication is that the person is showing credentials that are known to be false and in fact were manufactured to be so. Deception is not required for something to be called "fake," but merely an attempt to simulate something "real."

When the debate over "fake news" erupted a few months ago, it was first targeted at news that fit this common everyday English definition of the word fake. The concerns expressed early by Facebook, Google, et al. were over the use of deliberately fabricated news stories that knowingly contained false and made-up claims. The standard example was Buzzfeed's report of Balkan teenagers producing made-up news stories for profit.

There are various motivations to fabricate news stories. Among them:

(1) Profit from ads
(2) Propaganda (inciting followers of a cause to be moved or outraged by a story made up to target and play off their beliefs and biases)
(3) Hoaxes (just doing it for the "lulz")
(4) Satire and parody (standard example being The Onion)

As more and more stories came out on this "fake news," it became apparent that a lot of the stuff in the first three categories here seemed to be aimed at conservatives and Trump supporters in the past election cycle. Not all of it, certainly, but a lot of it.

So, a new counter-movement started to protest against the proposals to police "fake news," and the first thing this movement did was to redefine an English word.

Fake would no longer imply an intent to create something false and pass it off as genuine. Now it could mean simply "inadvertently erroneous" or even simply "biased." Once this new usage slipped in, it became suddenly pervasive. A major "mainstream" news source doesn't do enough fact-checking for a particular story? It's branded as "fake news." Does the story have a slightly sensational or biased headline to get attention, but the story is completely factual? It's "fake news."

Did this redefinition of "fake" originate among the actual "fake news" sources themselves, in an attempt at self-preservation? It's unclear. But the new usage rapidly spread among conservatives who wanted to attack CNN or the Washington Post or the New York Times. Left-leaning folks joined in and similarly started branding Breitbart and other right-wing sources as "fake news," even when the targets were merely presenting a viewpoint difference or bias, not literally making up facts and claiming them to be true.

From my perspective, this is NOT a small matter. The distinction between bias and unintentional error vs. outright fabrication and deliberate lies is important. The recent furor over "alternative facts" is simply another stage in an attempt to blur this distinction.

While we should rightly criticize news sources -- whatever their "bias" or however they might "lean" politically -- for bad fact-checking practices, outright bias, and other poor journalistic practices, most of the "mainstream" news sources acknowledge when they make actual errors of fact. They print retractions. They print corrections. Sometimes they may not come quickly enough for our taste, and again that should be criticized. But it is different from actual "fake news."

We witnessed a redefinition of an English word in the past few months, and few people seem to have noticed. The implications of its redefinition are also disturbing and Orwellian. And while this redefinition seems to have originated on the Right (or perhaps even among the fake new fabricators themselves), it has spread to the Left as a convenient way of criticizing news sources they don't like. It is a symptom of division, and it's an unproductive way of shutting down discussion. Rather than debate the substance of a story, one can just claim, "Oh -- I don't pay attention to MSNBC/Fox News/whatever, because it's just fake news." And the debate is declared over, in sort of an anti-argumentum ad verecundiam.

Can fake ever be corralled into its old meaning again? I don't know. But whatever we call the distinction between reality and fabrication, it's an important one.

Blame the rich

Posted by khallow on Sunday January 29 2017, @09:56PM (#2212)
13 Comments
Rehash
In the story about Peter Thiel's dual citizenship thing with New Zealand, there was this interesting observation (subject:"That Fucker is Doomsday Prepping"):

Lots of hedge fund managers and silicon valley billionaires have decided they've been fucking up the country so bad that they need to prepare for it all to go to shit. Every time you hear about a rich guy buying property in NZ, its because they are doomsday prepping.

Those assholes ought to be working on the problem of helping to build new institutions to replace those being torn down by the social isolation and paranoia that their creations are inducing. Instead they are running off to the other side of the planet.

For all of the shit he did, Carnegie built 3,000 public libraries. What has Thiel ever done? Create the fucking eye-of-sauron Palantir, try to stake freedom of the press for a personal vendetta, and oh yeah, help president fugazi dishonor the leading symbol of freedom and democracy on the planet.

Fuck that guy.

While it's probably accurate as concerns Thiel's intentions, there is this blaming as well. So what new institutions need to be built? And why do we want rich people doing that, if they're causing so many problems in the first place?

Let's Godwin this argument a little. So let's say you're a Jew and you have all these crazy Nazis in your society howling about how you're causing all these problems. Even if you wholly agree, what sense would it make in sticking around after they get power? The responsible Jew will be treated exactly like the irresponsible one every time there's a problem and someone needs to be blamed. And with a group as incompetent as crazy Nazis, you know there's going to be plenty of problems, real and imagined, needing plenty of scapegoats, unfortunately for the Jews, it's going to be the Jews.

The universal smart move here is to run before the crazies start killing Jews indiscriminately. There's no reason for Jews or society to even care what Nazis claim responsible Jewish behavior is. It's just propaganda spin.

Same goes for the rich. For example, when the crazies took over and created the USSR, they started blaming all their problems on scapegoats like Kulaks, counter-revolutionaries, etc. Anyone who had been even moderately well-off before the revolution was now the enemy and blamed for everything that went wrong. If you were lucky, that just meant a little prison time and permanent pariah status.

Too many people have learned from the past. When the people in power speak of the problems that the rich as a group didn't cause (for example, someone got rich off of the wars of the past couple of decades, but it wasn't every rich person!) and the responsibilities they're sure that they can't shoulder (you need to make a bunch of vaguely defined, but no doubt enormously expensive "new institutions" to fix the problems you didn't cause), then why shouldn't they eye the escape routes?

I think this sort of ruthless, ideological scapegoating is precisely why US politics is so divisive today. It's a bunch of crazy, bad faith actors who are so far out there that a sane person wouldn't want to compromise with them on anything.

Ohmerica

Posted by turgid on Saturday January 21 2017, @11:26AM (#2204)
4 Comments
Topics

As we're multiplying, the world's on the brink,
But that's just what the Devil wants you to think,
Don't ever stop shoppin', don't ever give in,
'Cause if we stop shoppin', the terrorists win.

-- The Claypool Lennon Delirium

Domestic Nuclear Shelters

How to Build a Fallout Shelter.

That nice Mr Putin has built many public nuclear shelters in Moscow in recent years.

Patriots who put their own countries first should always be prepared.

The strong are now putting their own countries first. Several countries are now putting themselves first. Obviously, all countries at present are confined to planet Earth. Who will win? What will happen to those who are second and third? Will the patriots be content?

"Racing for power, and all come in last." -- Megadeth.

We all breath the same atmosphere and drink the same water.

Patriots don't need affordable medical care. Only the weak get sick. President Pull-My-Finger is going to see to it that patriots get to keep as much of their own money as possible so that the weak, who drag the country down, are motivated to improve. On this side of the pond, the NHS is getting ready to be sold off cheap to American healthcare corporations when we get our massive trade deal with the USA. TTIP on steroids? The interests of American corporations will trump (see what I did there) our own interests under the law. Michael Gove is a great patriot.

We're also going to be withdrawing from the European Court of Human Rights. Fine, upstanding patriots don't need "Human Rights." Only criminals and deviants need Human Rights. It was a mistake our writing them in the first place.

I'm glad I'm not foreign. Come to think of it, I'm ethnic. I'm Scottish and live in England. Obviously, I can't be a true patriot. This is worrying.

And finally, here's one I made up all by myself:

Hey diddle diddle, Vlad did a piddle,
All over the Whitehouse floor,
The little Trump laughed to see such sport,
And the Brexiters clamored for more.

Christmas is coming, turkeys.

PS. At least patriots have democratically proved that Global Warming is a liberal-fascist Marxist conspiracy to keep the poor down.

PPS. That other great British patriot, Nigel Farage is taking a job with Faux News.

PPPS. UKIP's Eddie Hitler is standing for election to parliament in Stoke Central. Will the great patriots get a second MP?

Pressure Cooker, Induction Heater, systemd, PHP and MySQL

Posted by cafebabe on Friday January 13 2017, @08:55AM (#2192)
10 Comments
Hardware

Every year between Christmas and New Year, there is a geek gathering in Germany organized by the Chaos Communications Club. Talks are available on their website and I've taken the opportunity to trawl through the archive. One of the more accessible projects is an ongoing attempt to make a cooking machine which combines weighing scales, slicer, rice cooker, pressure cooker and sous-vide cooker. That's a sensible idea. However, the implementation is barking mad. Version 1 and version 2 are described in a 54 minute talk from 2012. Version 3 and version 4 are described in a 39 minute talk from 2014. I prefer version 2, especially given that a potential investor requested the second prototype then said something akin to "I wished you hadn't shown me this."

I have extreme misgivings about the placement of a Raspberry Pi - a credit card computer with no ECC RAM or other safeguards - in the proximity of heat and magnetic fields. This isn't just a means of bootstrapping. The entire design philosophy is about dangerous kludging and shows neither expertise in hardware or software. Another blown 1.2kV transistor? That was an impressive noise. Control software written in PHP. XML configuration deprecated in favour of MySQL Server. Thankfully, they're not completely mad and strongly discourage (intentional) remote control of the machine. Also, there is consideration for an emergency stop button, as defined in ISO 13850. However, if they want to rank recipes by use then the control systems (running systemd) will be communicating on the public Internet. And I don't have any faith that it'll be achieved securely and competently.

"A watched pot never boils"? Perhaps that'll become "A watched IoT pot never explodes."

Setting Sensible Compiler Flags

Posted by cafebabe on Thursday January 05 2017, @05:10AM (#2183)
9 Comments
Code

Compiler flags have become horribly sub-optimal and can be greatly improved for small computers and virtual hosting. The lazy case:-

gcc -O3 foo.cc

should be strictly avoided. Assuming this is run on a computer with 1GB RAM, this is functionally equivalent to setting some of the flags to:-

gcc --param ggc-min-heapsize=131072 --param ggc-min-expand=100 -fno-strict-overflow -fsigned-zeros -fsignaling-nans -ftrapping-math -fdefer-pop -fno-omit-frame-pointer -fno-stack-protector -fearly-inlining -finline-limit=1200 -fno-merge-constants -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload -fira-region=mixed -fsched-spec -fsched-spec-load --param max-hoist-depth=30 --param max-inline-recursive-depth=8 -freorder-blocks -freorder-functions -falign-functions=1 -falign-loops=1 -falign-labels=1 -falign-jumps=1 -ftree-ch -ftree-loop-distribution -ftree-vect-loop-version -fipa-cp-clone -ftracer -fenforce-eh-specs foo.cc

This is probably not what you want. After spending four months or so of intensively compiling code for systems with small RAM and small processor cache, these flag options look grossly inefficient. If you're doing cloudy computing, credit card computing or working on any system with multiple cores then you'll very probably want to specifically set many of these flags to something more like:-

gcc --param ggc-min-heapsize=32768 --param ggc-min-expand=36 -fstrict-overflow -fno-signed-zeros -fno-signaling-nans -fno-trapping-math -fdefer-pop -fomit-frame-pointer -fstack-protector-all -fno-early-inlining -finline-limit=4 -fmerge-constants -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload -fira-region=one -fno-sched-spec -fno-sched-spec-load --param max-hoist-depth=6 --param max-inline-recursive-depth=0 -freorder-blocks -freorder-functions -falign-functions=64 -falign-loops=64 -falign-labels=1 -falign-jumps=1 -fno-tree-ch -fno-tree-loop-distribution -fno-tree-vect-loop-version -fno-ipa-cp-clone -fno-tracer -fno-enforce-eh-specs foo.cc

Depending upon what is being compiled, this can reduced stripped binary size by 1/3 or more. 4/5 has been observed in optimistic cases. Furthermore, this is not at the expense of speed. Execution time for regular expressions can be reduced by 22% and execution time for SQL stored procedures can be reduced by 45%. Compilation time and memory can also be reduced to the point that it is possible to self-host within 512MB RAM. As an example, with the addition of --no-keep-memory --reduce-memory-overheads to minimize compiler state, compilation of clang-3.8.1 using gcc-4.9.2 goes from exhausting a 2GB application space to requiring 360MB RAM.

The philosophy is to squeeze as much code into L1 cache while reducing cache misses. In many contemporary cases, L2 cache and L3 cache doesn't exist or has contention with hundreds of simultaneous users, possibly to the extent that cache affinity cannot be utilized. In such cases, available L3 cache may be smaller and slower than L1 cache.

Anyhow, let's pick off some quick wins. gcc and clang have multiple register allocation strategies. gcc's default is a nice conservative choice which compiles legacy code without being pathological. Unfortunately, for contemporary systems, this is a completely borked setting but it can be easily rectified with -fira-region=one. A setting which notably reduces compilation time is --param max-hoist-depth=6. I am under the impression that this setting reduces the bound for moving stuff out of loops. Why would we reduce this? It is, unfortunately, an O(n^2) process and code has to be seriously awful to require more than six hoists. A pathological case would be useless code inside nested XYZ loops. If you're compiling that then your program deserves to run slowly. Anyhow, reducing this bound makes a difference to compilation time without significantly affecting output. In combination with -fno-early-inlining, -fno-tree-vect-loop-version, -fno-ipa-cp-clone and -fno-tracer, program footprint can be reduced to the extent that compilation and execution time outweighs any disadvantage.

Perhaps some of these flags should be explained in more detail. Compilers typically perform a number of transforms on a program. Some of these transforms may be performed multiple times. A transform may be scheduled two or more times in a row or a transform may be repeated after many other transforms are applied. One of these transforms is inlining. In this case, it is typical to place the code of small subroutines directly in the place where they called. This saves a call and return. It also allows each inlined instance to be optimized into the surrounding code. For example, if each invocation uses a different constant, inlined copies may be optimized accordingly. -fno-early-inlining cuts out a transform which bloats compiler memory usage, compiler execution time, compiled program size and (unless you have exclusive use of a fat L3 cache) binary execution speed. Early inlining is a great optimization for a desktop application but it is a hinderance for almost every other case.

Another transform is loop unrolling. In the trivial case, a loop which iterates a fixed number of times can be re-written by a compiler. The content of the loop is duplicated a fixed number of times. This eliminates comparisons and branches. It also eliminates use of a loop register. Therefore, the contents of the loop (and functions called (or inlined)) have more registers available. Unless the number of iterations is high, this is a great optimization for processors with no instruction cache or very large caches. It is, however, counter-productive for systems with small caches or very high cache contention. In addition to unrolling there is vectorization. In this case, a compiler will attempt to perform pipelining and/or use SIMD instructions. Where it is not possible to determine alignment of vectorization at compilation time, gcc emits aligned and unaligned versions plus conditional code. This bloat can be inhibited with -fno-tree-vect-loop-version. And modification to the entry point of a partially rolled loop can be inhibited with -fno-tree-loop-distribution.

-fno-ipa-cp-clone inhibits currying. Currying is highly encouraged for interpreted languages. However, for a native binary running through a processor with a tiny instruction cache, it is a hindrance. With -O3 compilation, the default is to make multiple copies of functions which are deemed too large to inline and perform optimizations on each copy anyhow. This is inhibited with -fno-ipa-cp-clone. Admittedly, where functions are not curried, a processor performs extra work. However, it is assumed that clock cycles taken to perform extra work are less than clock cycles wasted by instruction cache misses and/or virtual memory paging. In practice, currying is useful for compilation of desktop applications and dedicated server applications but not useful elsewhere.

-ftracer is another source of bloat and interacts particularly badly with C++ templates. In this case, a compiler provides a separate function exit point for every conditional code path. The mass elimination of dimers allows a very large amount of flexibility with optimizations. However, this occurs at the expense of significant bloat. Such bloat is likely to be counter-productive away from a desktop environment. You may wish to apply -fno-tracer (and -fno-ipa-cp-clone) selectively. For example, on a mixed C/C++ project, such as MySQL Server, -fno-tracer (and -fno-ipa-cp-clone) works well when only applied to the C++.

--param max-inline-recursive-depth=0 inhibits unrolling of recursive functions. The recursive version of loop unrolling probably works really well on a Xeon but, on armv6t, it blows goats.

-fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload prevents particularly boneheaded sequences of instructions occurring even when -O3 is replaced with -O0 or -Os. (We have a script with this functionality. This allows self-hosted compilation of MySQL Server 5.7.15, clang-3.8.1 and suchlike within 256MB RAM.) Similarly, -fdefer-pop redundantly retains a useful speed and size optimization when other optimizations degrade. For your purposes, it is very probable that these flags can be omitted without adverse effect.

-fno-signed-zeros allows additional float optimizations by assuming that IEEE754 +0.0 is equivalent to IEEE754 -0.0. -fno-signaling-nans -fno-trapping-math reduces bloat by eliminating divide by zero checks and suchlike which your interpreter, database or whatever should handle anyhow with application-specific code. -fstrict-overflow is badly named but enables additional integer optimizations on the assumption that undefined integer behavoir is not exploited. In practice, stuff like incrementing the largest integer still leads to undefined behaviour such as integer wrap-around.

It should be noted that -fstrict-overflow -fno-signed-zeros -fno-signaling-nans -fno-trapping-math -fmerge-constants -fno-enforce-eh-specs is strictly against C and C++ specifications. In practice, tolerant code and debug builds catch most of the problems. One exception is that python tests note the non-conformance of integer and float mathematics. Whereas, perl incurs no such problems and obtains faster execution speed. Whatever.

-fno-sched-spec -fno-sched-spec-load inhibits some shocking behaviour. Assuming a large cache and an advanced processor, there exist cases where it is beneficial to fetch data before a branch occurs. This remains beneficial even when one of the two code paths doesn't use the fetched data. What actually occurs on a processor with out-of-order execution is that a request to load a register occurs, a decision to perform a branch occurs, then a code path may use the data. In this case, data may be obtained partially or fully in the period taken a branch and subsequent instructions. That's the ideal case. On a simpler processor or a heavily loaded server, a costly and unnecessary cache miss is likely.

Parameters with magic numbers may not be optimal. These numbers are based on random walks and exponential decays - but tweaked for pragmatic reasons. I'd like to perform A/B testing to get empirical improvements.

-falign-functions=64 -falign-loops=64 -falign-labels=1 -falign-jumps=1 greatly improves execution speed on ARM6. Unfortunately, it bulks binaries by about 5% and this cost is potentially pushed to virtual memory. However, where RAM is sufficient, these parameters minimize cache line usage. Some ARM processors only have 128 cache lines. This can be maximized by aligning functions and loops to cache line boundaries. A worked example follows. An 80 byte loop without alignment may be placed across three cache lines. For example, 4 bytes at the end of one cache line, 64 bytes fully occupying one cache line and 12 bytes at the beginning of another cache line. This arrangement unnecessarily increases cache contention. If the loop is always placed at the start of a cache line, the total number of cache lines can be minimized. Technically, all four parameters can be set to 64 but this would bulk programs by another 5% while providing minimal gains. Conceptually, only back branches require alignment. So, subroutines, for and while are aligned. if, else, break, try and catch are unaligned. Consider the case of else inside a for loop. Both halfs of the condition will eventually be cached and therefore the total length of the loop is more important than alignment of its constituent parts. Indeed, for nested loops, I wish that it was possible to only align the outermost loop.

Inspiration for cache alignment comes from an explanation of the Dalvik virtual machine interpreter. In this case, Java bytecode re-compiled into Dalvik bytecode may run faster on an ARM processor even when not using Jazelle hardware acceleration. The trick hinges on one instruction: a jump indirect with six bit pre-scale. This is placed at the end of one cache line. This allows interpreter code for each trivial Dalvik instruction to fit within one cache line. In practice, relatively few cache lines are required to implement common Dalvik instructions. This makes a bytecode interpreter practical even on processors with 128 cache lines. Overall, this arrangement degrades gracefully and incurs less cache contention than Jazelle's partial hardware implementation of Java.

64 byte alignment will also work on x86. However, Intel instruction dispatch circuitry typically works on 16 byte chunks (with or without alignment). Therefore, smaller alignment or no alignment may be optimal on x86. However, if you want to set and forget one lot of flags, the suggested ones are likely to be an overall gain across multiple processor architectures.

Mandelbrot Fractal Animation

Posted by cafebabe on Monday December 26 2016, @12:47AM (#2172)
5 Comments
Code

Requires zlib, libpng and libgd-2.2.2. Also requires something like ffmpeg or gimp to collate frames:-

begin 644 mandelbrot-anim-dist-20161225-233342.tar.gz
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
D7=NU7=NU7=NU7=NU7=NU7=NU7=NU7=NU?TS[+W]%FX@`4```
`
end

Don't know what to do with this block of text? See previous article about uuencode and uudecode.

Displacement Map Animation Of Torus On Checkerboard

Posted by cafebabe on Monday December 26 2016, @12:45AM (#2171)
2 Comments
Code

Requires zlib, libpng and libgd-2.2.2. Also requires something like ffmpeg or gimp to collate frames:-

begin 644 torus-anim-dist-20161225-233352.tar.gz
M'XL("&!78%@"`W1O<G5S+6%N:6TM9&ES="TR,#$V,3(R-2TR,S,S-3(N=&%R
M`.U:>U/;2!+/O]&GF$J`6,:2)=F&!.)4<8$DW$%"$:YV<SDJD?6P5<B25P\C
M^9+O?MTSHY<M8T+V4K5U&LIXU-/=\YN>GNX>0>0'<2CIGC.53">,)$U1]U1-
M&TA:K]<;:-W3]Q^OCL[.'OU,4Z#M[?7Q6]T?*.5OVE1U_Y':4[2>J@UZR*?"
MS(-'1'GT"UH<1GI`R*/_TQ9-G)"$OAW=ZH%%PHD?NR89622(/6('_I1$$XL8
M<1!87D1,)[",R`]2$NA`#V!0]XCC@0E=US)E07C4M+_8_F\X_^?ZC64[KO4_
M//\#./1X_GL*A(#^8!_.?U_M]YOS_RO:TVX<!MV1XW4M;TZFL-N"\)2,+<\*
M'(-DNT]L/R!3WXRA&UA_Q$[@>&/B.J.Q"=RMUR*Z#;F"4/':]T(_B)QX*CR%
M(>9.JDK0RE%.T`8DU.<PU?G1/TZ&=-8W'SX,K60&LN3UF[.CMQ^'S[9:K"<2
MZ72K=?';L=@=Q8YK=AW/<&/3(M*'WC.RLT.XW-EQ+LB[('E6D03(58DO9Z=_
MNSRZ_/3EXNCJ'4AN+9$.MK9`O"0M"!#K#DC@^Y$@&*ZE>P?"8RF8D@6,LIX4
MV/1)^JQ(+Z[;^%N^IGTV#D,S;USPLN<[N,'*9>:QN8X74<E^T1<$/-1?'`4P
MM@R3R#(N?GH#@9R`E8Y/+T5V[+=:5Z?G)^(S47ALS(@T"PA/_.3RY.CX_*3P
M!#J%09[)<K=.07D>/%B2Y,53]"7)OP6?(I)!)+MV;AG8G]6CZK9%\NT;^?>R
M<N,G--FZ&UK"8V[5]<L9+QPPR`N*NIZ)3<>TCH!;NS][LK@_;Q3$%MM/V$SN
MOR`P?/)U=FN2;R2T3!(F<KN;)%^?E'P<%0&3J4<6V=W^M#W=-J7M=]OGVQ\9
MVU8+#Z%(N*<(@I5$@6YPKUD8>@0L1Y>O1:*](EW3FG>]V'5A0MR!Q";2$IV"
M'3]0;O1`N>2!<LP+LB47A@4]PZ]N2"03[?/A^/W1N4@[%Y<G(CM\N#?R>'''
M^)V#(#Q::.L91INDDSO&$Q`NK_9K>:.+_14$#%,8&_BRF;HA4DL>Q'0/I1HE
M$"]<CT@AX<:J#WMT$QR72.I7'B9;6RT(^")J-)@4=N6NX7NV,XZA%)4@"$'$
M28;E^"VND\Q@T8"\B6NCEL@*HXU,O.P5!8'%[X-L:55;LL&'67-=8BC;,TLF
M5;#%K!MM"M1;)YI(=.ON8_-"]]U67^&[AZ9:RZ^R56P_-@\**ZP8?VP^V/9U
M>7;)])B95\"R*7_(\+4#L**-.\'FVK@1%;;->M9M0Y6KV`4L"@XX`RL0A,<E
M66-M`6=D]83DY\5+57"E?N-\1')AU(7T[4(2==%!)!>FYXH`4^SQ,JVD,7*F
M%NP,X\!;SP'>="$/V-.9!1H<N/3J4ZN[K3PW9=2)//+8L7F^T.>PJ?/-?#RO
M_/7O?ZS\^[DY-MS_U/V>PM__X(^&[W]ZS?WO%]W_\KL>+_0?<-.3ZZYZ`BJJ
MOEV*?'+K!S=$#R%T1)9G6N:!)`@^(6_?_Y/>/4LOH"!@AOC.2?=,8M#72^QV
MRKDA--S):QC(:5JV'KL1L%I0\A4"(SV<X#B^W+)]U_5O<96&/YV"BG!5,\`D
MA("`&_(.K)'W:.4):Z4E+Z=!1<Y[4)7S'A;@.&?HQX%A$3TP)L[<"JG!,05T
MLCR'JV"A=,T*_0!?P\F",'-UT$03]^_R)_E?64GJ>*NO[&0!.K!`:G8RMX+0
M\3T"VT/%55F3GW/Q3"^O/AZNF2M0Y3U9VUM5#NGUIW2#O";C#]=<D'JYRI#$
MGNO<6&Z*W@>:9GB'#6/#L,+0ALH89G!`MV5VP+9I/H//+]ILJDS>QLR/N1$<
MV(:-`Z1A/*.5!?#9KGX#ZH1B(O3NI_RE"E"MQ#+BJ$2EN4?@:52/^-(\/U>+
M[U3S<Q18>NA[@),4A45H!,XLRJ1F@3]WS!]Z$;LI_K/T_+^,__CFC[W_'V@#
M97]/P?B_UU.;^/\K6K=-+OT(?`\"SY4?^(Y)/GCD]<0R;JQ@Y.N!28Z=D)[9
M*9[,(_`4YJGMK@#":S("CN(P<R=EGR4%+L.)S^D[P`I-56IH^SE->)H5CB_#
M-.R"SDB>O%JB1NG,"JMD0#RI4L8F/@M/(4$XGD6N3L].R%X_?_[M]/CJ'1FH
M6DYY=W+Z]MT5T09[.>G\Z.\?+HFJ/2\HI^^!@CP(7Y_!>4PR<T%$"9&'17#:
M]2':D$#WQA##K<"G$0:2`S.>Z<<C#%7`V.+]1"3_@622#!.IU8(,*K:2;E]6
M1+$-OP]AQ+%;R<NA!B3*R%A5-D8@?D1QX+7@64K:B8C$[UQ=C_%P#AA%*>#X
MGN-@D'\02:]`P@AJ0:C%PQ`QQ=H2[@)5@;M?P5UH`MQS=.7`CS+([43M9-TT
M[^I*UDOR7LHQ9CN@=`PZBZ$,N15TAB)4AN5'F&%H*.U$D4*EG5(1F&D8(FG7
MR$@,:P7BER2]&V5[L0%PUEMPZ"`P7+#IP`*@$W2!)(BD#&LMBL6?C0)6GY91
M+#(4B_4HTC\=!6Q+DJ-(,Q1I'8INE\QT!].ZZT"1`F<6E(TG7AQAT6J6`^%4
MG\D,=43#YA<J^(4*ML;FZ52'8]UVIDJG]*!V4+F;8YPEGVD4N?Y,0\=U3D_7
MT!=5>L51YV"%.2QKOH"/2U><CZ@P`A]8^MQ5Z0%%'&K'[7?<0?9L)ATSQ8>Q
M>>$C8:9\[E]GHT9VL%NN\E(1OWV#[U=#"D?,#G5F2G9"W?X0>'95<9MR(1F*
MF9:K#I5#5WU)EP"=W=U,W!V`@$H%Z!@EPK*&8"=7N?[LJM<2=ONTRX=3&$Z+
MX71I>`'#BV)XL33LPAG^(XA:,$L;/KN@K@V?79!KS[F#(`9U&0-V!SD&=1E#
M91A.XQ*&RC`8A&-0`8,*&.`[A>\%?"]4C@$L3T&FJD094^654@ZGL%G*M9R4
M<!YR6EH"=UAPJQEWO^!6,^[^,K=6YAXP;JW,/2AS]\I(.'>OC*3@-I,A2R$]
MB/CM%MV`!:P1C0`;T(4M@D]F!1J&^8EZ[;M^<)+H1M3"<P:9>!=<N/*52W&1
M-P[>#B]\-QW['I6:*9T^!/B<T4RK<-`/$H"#>Y'<'X[*`*35KTUPU"4XW_E)
M6@Z4+.3<$69*#UKYH9=%$C_)>VG6"_*X%-3$6+V@:96XLQS$2H%G.8Z5AQ9K
MATJ!K#Z(Y0%,Z131+%16XE@1MNYRFNPCLM!7VIA+N(1">>9:E!5_^/#'WY$B
MYH^?V"/?M[M<XGZ3J2N3J=7)U'PR&E$5C*C*2Q9F(>3F$?7N>$NRC+N#)M]!
MF^]@]G!5K..Z5*`#0:8#_H"QYI!`@IS3FSE[;^%#%;N2*F6N&\/H,%"HD&_;
MH96E5?I_17[@C!U/+N&`*F@'-WD'=WD'<Y6K,!RXK$[)*QB0`.\M]*V2/XH@
M^1(=W_'@#&%%[<KRP*=+SI2?R7H,X/:5F>\TG*[5:BY"\A#CNY_D`VDQ``'?
M3_.!13'`_#T+!O`+U@[7#9/8<1!-K#"JWX(0G4+(,R!H4ZY+#J/6.PQFF87R
MDL^O7!>N`OI<)<-72JO*]2H\5D0MUTMLXT>Z<2,O.6ZH2!1*5ZN`J:FL\"#B
M^8"C/TLZL[0S6^0W`JZ1:I)P?:^@^-[-%$N2J_R<X@I*P/PG8"WPY8`?#I39
MOF)UW1W#08LFTV6+EV.+)JZ-&>68@VR5X%'$N;=6=.$DEDO!T:@LEM([A#N)
M,UY:)N4I)=Q:+>JREG15B[I1BP9:=O%NCP4!8&?=E2S\L9#HL7F7,W`U!3O4
MG1T/ZP2B!V.C8TST@+3;T)\S\Y0S\V'U65UZUI:>>UGFL@.E-M'QC(933J!B
M4S16H[_!=QAMFP[2__!I/:%_HY*2)QUE?S`05P;2-0,E,L#/<UE@0;B]"F*6
MU5KT'4F'O1?AO.H/\&IW\M*M:FM<A#]QR=Z]9RD[/!WL4@_0UKH[D\VY*M[.
M;CZ[X)3;VG!8*KS7)GR-9O'"1[\3RPVM^\AI@T'V*:3K2L=RT:!U$)\BMA%^
M!R]211]O804]ZZ_4F6@+<#LP!OQF)MM]L=?6\'$YU.6!"&?&DP,\THL];O^N
MUMGK=[0^4KO[+Z"&P,Z+K*.JFIQ-'LX"<&N[-5$ZF<?BWU4=_+OJ$^3F?+8R
MM/V9Y5'&VR><RLUQX8TI(#OG-EP_M%KV^EG2A\ZB_L`L#YVCMVZ.[T6T.(;<
M'_@IK3T/Z\AJ/5FK)_=*;T-:_.U?\P_236M:TYK6M*8UK6E-:UK3FM:TIC6M
A:4UK6M.:UK2F-:UI36M:TYK6M*;]!=I_`>?E8W<`4```
`
end

Don't know what to do with this block of text? See previous article about uuencode and uudecode.